@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,69 @@
1
+ import { hasValidResourceEntryDuration, hasValidResourceEntryTimings } from './resourceUtils';
2
+ import { filter, addDuration, WeakSet } from '@cloudcare/browser-core';
3
+
4
+ /**
5
+ * Look for corresponding timing in resource timing buffer
6
+ *
7
+ * Observations:
8
+ * - Timing (start, end) are nested inside the request (start, end)
9
+ * - Browsers generate a timing entry for OPTIONS request
10
+ *
11
+ * Strategy:
12
+ * - from valid nested entries
13
+ * - if a single timing match, return the timing
14
+ * - if two following timings match (OPTIONS request), return the timing for the actual request
15
+ * - otherwise we can't decide, return undefined
16
+ */
17
+ export function createRequestResourceEntryMatcher() {
18
+ var alreadyMatchedEntries = new WeakSet();
19
+ return {
20
+ matchRequestResourceEntry: function matchRequestResourceEntry(request) {
21
+ if (!performance || !('getEntriesByName' in performance)) {
22
+ return;
23
+ }
24
+ var sameNameEntries = performance.getEntriesByName(request.url, 'resource');
25
+ if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {
26
+ return;
27
+ }
28
+ var candidates = filter(sameNameEntries, function (entry) {
29
+ return !alreadyMatchedEntries.has(entry);
30
+ });
31
+ candidates = filter(candidates, function (entry) {
32
+ return hasValidResourceEntryDuration(entry) && hasValidResourceEntryTimings(entry);
33
+ });
34
+ candidates = filter(candidates, function (entry) {
35
+ return isBetween(entry, request.startClocks.relative, endTime({
36
+ startTime: request.startClocks.relative,
37
+ duration: request.duration
38
+ }));
39
+ });
40
+ var lastEntry = undefined;
41
+ if (candidates.length > 1) {
42
+ var startTimeDuration = Number.MAX_SAFE_INTEGER;
43
+ candidates.forEach(function (entry) {
44
+ var _startTimeDuration = Math.abs(entry.startTime - request.startClocks.relative);
45
+ if (_startTimeDuration < startTimeDuration) {
46
+ startTimeDuration = _startTimeDuration;
47
+ lastEntry = entry;
48
+ }
49
+ });
50
+ } else if (candidates.length === 1) {
51
+ lastEntry = candidates[0];
52
+ }
53
+ if (lastEntry) {
54
+ alreadyMatchedEntries.add(lastEntry);
55
+ return lastEntry.toJSON();
56
+ }
57
+ return;
58
+ }
59
+ };
60
+ }
61
+ function endTime(timing) {
62
+ return addDuration(timing.startTime, timing.duration);
63
+ }
64
+ function isBetween(timing, start, end) {
65
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
66
+ var errorMargin = 1;
67
+ return timing.startTime >= start - errorMargin && endTime(timing) <= addDuration(end, errorMargin);
68
+ }
69
+ //# sourceMappingURL=matchRequestResourceEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchRequestResourceEntry.js","names":["hasValidResourceEntryDuration","hasValidResourceEntryTimings","filter","addDuration","WeakSet","createRequestResourceEntryMatcher","alreadyMatchedEntries","matchRequestResourceEntry","request","performance","sameNameEntries","getEntriesByName","url","length","candidates","entry","has","isBetween","startClocks","relative","endTime","startTime","duration","lastEntry","undefined","startTimeDuration","Number","MAX_SAFE_INTEGER","forEach","_startTimeDuration","Math","abs","add","toJSON","timing","start","end","errorMargin"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/matchRequestResourceEntry.js"],"sourcesContent":["import {\n hasValidResourceEntryDuration,\n hasValidResourceEntryTimings\n} from './resourceUtils'\nimport { filter, addDuration, WeakSet } from '@cloudcare/browser-core'\n\n/**\n * Look for corresponding timing in resource timing buffer\n *\n * Observations:\n * - Timing (start, end) are nested inside the request (start, end)\n * - Browsers generate a timing entry for OPTIONS request\n *\n * Strategy:\n * - from valid nested entries\n * - if a single timing match, return the timing\n * - if two following timings match (OPTIONS request), return the timing for the actual request\n * - otherwise we can't decide, return undefined\n */\nexport function createRequestResourceEntryMatcher() {\n var alreadyMatchedEntries = new WeakSet()\n\n return {\n matchRequestResourceEntry: function (request) {\n if (!performance || !('getEntriesByName' in performance)) {\n return\n }\n var sameNameEntries = performance.getEntriesByName(request.url, 'resource')\n\n if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {\n return\n }\n\n var candidates = filter(sameNameEntries, function (entry) {\n return !alreadyMatchedEntries.has(entry)\n })\n candidates = filter(candidates, function (entry) {\n return (\n hasValidResourceEntryDuration(entry) &&\n hasValidResourceEntryTimings(entry)\n )\n })\n candidates = filter(candidates, function (entry) {\n return isBetween(\n entry,\n request.startClocks.relative,\n endTime({\n startTime: request.startClocks.relative,\n duration: request.duration\n })\n )\n })\n let lastEntry = undefined\n if (candidates.length > 1) {\n let startTimeDuration = Number.MAX_SAFE_INTEGER\n candidates.forEach((entry) => {\n const _startTimeDuration = Math.abs(\n entry.startTime - request.startClocks.relative\n )\n if (_startTimeDuration < startTimeDuration) {\n startTimeDuration = _startTimeDuration\n lastEntry = entry\n }\n })\n } else if (candidates.length === 1) {\n lastEntry = candidates[0]\n }\n\n if (lastEntry) {\n alreadyMatchedEntries.add(lastEntry)\n return lastEntry.toJSON()\n }\n\n return\n }\n }\n}\n\nfunction endTime(timing) {\n return addDuration(timing.startTime, timing.duration)\n}\n\nfunction isBetween(timing, start, end) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n var errorMargin = 1\n return (\n timing.startTime >= start - errorMargin &&\n endTime(timing) <= addDuration(end, errorMargin)\n )\n}\n"],"mappings":"AAAA,SACEA,6BAA6B,EAC7BC,4BAA4B,QACvB,iBAAiB;AACxB,SAASC,MAAM,EAAEC,WAAW,EAAEC,OAAO,QAAQ,yBAAyB;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iCAAiCA,CAAA,EAAG;EAClD,IAAIC,qBAAqB,GAAG,IAAIF,OAAO,CAAC,CAAC;EAEzC,OAAO;IACLG,yBAAyB,EAAE,SAA3BA,yBAAyBA,CAAYC,OAAO,EAAE;MAC5C,IAAI,CAACC,WAAW,IAAI,EAAE,kBAAkB,IAAIA,WAAW,CAAC,EAAE;QACxD;MACF;MACA,IAAIC,eAAe,GAAGD,WAAW,CAACE,gBAAgB,CAACH,OAAO,CAACI,GAAG,EAAE,UAAU,CAAC;MAE3E,IAAI,CAACF,eAAe,CAACG,MAAM,IAAI,EAAE,QAAQ,IAAIH,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;QAChE;MACF;MAEA,IAAII,UAAU,GAAGZ,MAAM,CAACQ,eAAe,EAAE,UAAUK,KAAK,EAAE;QACxD,OAAO,CAACT,qBAAqB,CAACU,GAAG,CAACD,KAAK,CAAC;MAC1C,CAAC,CAAC;MACFD,UAAU,GAAGZ,MAAM,CAACY,UAAU,EAAE,UAAUC,KAAK,EAAE;QAC/C,OACEf,6BAA6B,CAACe,KAAK,CAAC,IACpCd,4BAA4B,CAACc,KAAK,CAAC;MAEvC,CAAC,CAAC;MACFD,UAAU,GAAGZ,MAAM,CAACY,UAAU,EAAE,UAAUC,KAAK,EAAE;QAC/C,OAAOE,SAAS,CACdF,KAAK,EACLP,OAAO,CAACU,WAAW,CAACC,QAAQ,EAC5BC,OAAO,CAAC;UACNC,SAAS,EAAEb,OAAO,CAACU,WAAW,CAACC,QAAQ;UACvCG,QAAQ,EAAEd,OAAO,CAACc;QACpB,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MACF,IAAIC,SAAS,GAAGC,SAAS;MACzB,IAAIV,UAAU,CAACD,MAAM,GAAG,CAAC,EAAE;QACzB,IAAIY,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;QAC/Cb,UAAU,CAACc,OAAO,CAAC,UAACb,KAAK,EAAK;UAC5B,IAAMc,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CACjChB,KAAK,CAACM,SAAS,GAAGb,OAAO,CAACU,WAAW,CAACC,QACxC,CAAC;UACD,IAAIU,kBAAkB,GAAGJ,iBAAiB,EAAE;YAC1CA,iBAAiB,GAAGI,kBAAkB;YACtCN,SAAS,GAAGR,KAAK;UACnB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAID,UAAU,CAACD,MAAM,KAAK,CAAC,EAAE;QAClCU,SAAS,GAAGT,UAAU,CAAC,CAAC,CAAC;MAC3B;MAEA,IAAIS,SAAS,EAAE;QACbjB,qBAAqB,CAAC0B,GAAG,CAACT,SAAS,CAAC;QACpC,OAAOA,SAAS,CAACU,MAAM,CAAC,CAAC;MAC3B;MAEA;IACF;EACF,CAAC;AACH;AAEA,SAASb,OAAOA,CAACc,MAAM,EAAE;EACvB,OAAO/B,WAAW,CAAC+B,MAAM,CAACb,SAAS,EAAEa,MAAM,CAACZ,QAAQ,CAAC;AACvD;AAEA,SAASL,SAASA,CAACiB,MAAM,EAAEC,KAAK,EAAEC,GAAG,EAAE;EACrC;EACA,IAAIC,WAAW,GAAG,CAAC;EACnB,OACEH,MAAM,CAACb,SAAS,IAAIc,KAAK,GAAGE,WAAW,IACvCjB,OAAO,CAACc,MAAM,CAAC,IAAI/B,WAAW,CAACiC,GAAG,EAAEC,WAAW,CAAC;AAEpD","ignoreList":[]}
@@ -0,0 +1,233 @@
1
+ import { getStatusGroup, UUID, extend, extend2Lev, relativeToClocks, urlParse, getQueryParamsFromUrl, replaceNumberCharByPath, RequestType, ResourceType, RumEventType, LifeCycleEventType, toServerDuration, createTaskQueue, addTelemetryError } from '@cloudcare/browser-core';
2
+ import { createRequestResourceEntryMatcher } from './matchRequestResourceEntry';
3
+ import { computePerformanceResourceDetails, computeResourceEntryDuration, computeResourceEntryType, computeResourceEntrySize, isResourceEntryRequestType, isResourceUrlLimit, isLongDataUrl, sanitizeDataUrl, computeResourceEntryDeliveryType, computeResourceEntryProtocol } from './resourceUtils';
4
+ import { PageState } from '../../contexts/pageStateHistory';
5
+ import { createPerformanceObservable, RumPerformanceEntryType } from '../../performanceObservable';
6
+ import { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming';
7
+ export function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl, resourceTrackerManager) {
8
+ if (taskQueue === undefined) {
9
+ taskQueue = createTaskQueue();
10
+ }
11
+ if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {
12
+ retrieveInitialDocumentResourceTimingImpl = retrieveInitialDocumentResourceTiming;
13
+ }
14
+ if (resourceTrackerManager) {
15
+ resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {
16
+ lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
17
+ });
18
+ }
19
+ var requestResourceEntryMatcher = createRequestResourceEntryMatcher();
20
+ lifeCycle.subscribe(LifeCycleEventType.REQUEST_COMPLETED, function (request) {
21
+ handleResource(function () {
22
+ return processRequest(request, pageStateHistory, requestResourceEntryMatcher);
23
+ });
24
+ });
25
+ var performanceResourceSubscription = createPerformanceObservable(configuration, {
26
+ type: RumPerformanceEntryType.RESOURCE,
27
+ buffered: true
28
+ }).subscribe(function (entries) {
29
+ var loop = function loop(entry) {
30
+ if (!isResourceEntryRequestType(entry) && !isResourceUrlLimit(entry.name, configuration.resourceUrlLimit)) {
31
+ handleResource(function () {
32
+ return processResourceEntry(entry, configuration);
33
+ });
34
+ }
35
+ };
36
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
37
+ var entry = entries_1[_i];
38
+ loop(entry);
39
+ }
40
+ });
41
+ retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {
42
+ handleResource(function () {
43
+ return processResourceEntry(timing, configuration);
44
+ });
45
+ });
46
+ function handleResource(computeRawEvent) {
47
+ taskQueue.push(function () {
48
+ try {
49
+ var rawEvent = computeRawEvent();
50
+ if (rawEvent) {
51
+ if (resourceTrackerManager && rawEvent.domainContext && rawEvent.domainContext.resourceTrackerId && resourceTrackerManager.trackRequestResource(rawEvent.domainContext.resourceTrackerId, rawEvent)) {
52
+ return;
53
+ }
54
+ lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
55
+ }
56
+ } catch (error) {
57
+ addTelemetryError(error);
58
+ }
59
+ });
60
+ }
61
+ return {
62
+ stop: function stop() {
63
+ performanceResourceSubscription.unsubscribe();
64
+ },
65
+ addResource: function addResource(resource, savedCommonContext) {
66
+ handleResource(function () {
67
+ return extend({
68
+ savedCommonContext: savedCommonContext
69
+ }, processCustomResource(resource));
70
+ });
71
+ }
72
+ };
73
+ }
74
+ function processRequest(request, pageStateHistory, requestResourceEntryMatcher) {
75
+ var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request);
76
+ var startClocks = matchingTiming ? relativeToClocks(matchingTiming.startTime) : request.startClocks;
77
+ var tracingInfo = computeRequestTracingInfo(request);
78
+ var type = request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH;
79
+ var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;
80
+ var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);
81
+ var urlObj = urlParse(request.url).getParse();
82
+ var resourceEvent = extend2Lev({
83
+ date: startClocks.timeStamp,
84
+ resource: {
85
+ id: UUID(),
86
+ type: type,
87
+ duration: duration,
88
+ method: request.method,
89
+ status: request.status,
90
+ statusGroup: getStatusGroup(request.status),
91
+ url: isLongDataUrl(request.url) ? sanitizeDataUrl(request.url) : request.url,
92
+ urlHost: urlObj.Host,
93
+ urlPath: urlObj.Path,
94
+ urlPathGroup: replaceNumberCharByPath(urlObj.Path),
95
+ urlQuery: getQueryParamsFromUrl(request.url),
96
+ deliveryType: matchingTiming && computeResourceEntryDeliveryType(matchingTiming),
97
+ protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming)
98
+ },
99
+ type: RumEventType.RESOURCE
100
+ }, tracingInfo, correspondingTimingOverrides);
101
+ return {
102
+ startTime: startClocks.relative,
103
+ rawRumEvent: resourceEvent,
104
+ domainContext: {
105
+ performanceEntry: matchingTiming,
106
+ xhr: request.xhr,
107
+ requestHeaderContexts: request.requestHeaderContexts,
108
+ response: request.response,
109
+ requestInput: request.input,
110
+ requestInit: request.init,
111
+ error: request.error,
112
+ isAborted: request.isAborted,
113
+ handlingStack: request.handlingStack,
114
+ resourceTrackerId: getResourceTrackerIdFromRequest(request)
115
+ }
116
+ };
117
+ }
118
+ function processResourceEntry(entry, configuration) {
119
+ var startClocks = relativeToClocks(entry.startTime);
120
+ var tracingInfo = computeResourceEntryTracingInfo(entry);
121
+ var type = computeResourceEntryType(entry);
122
+ var entryMetrics = computeResourceEntryMetrics(entry);
123
+ var urlObj = urlParse(entry.name).getParse();
124
+ var resourceEvent = extend2Lev({
125
+ date: startClocks.timeStamp,
126
+ resource: {
127
+ id: UUID(),
128
+ type: type,
129
+ url: entry.name,
130
+ urlHost: urlObj.Host,
131
+ urlPath: urlObj.Path,
132
+ urlPathGroup: replaceNumberCharByPath(urlObj.Path),
133
+ urlQuery: getQueryParamsFromUrl(entry.name),
134
+ method: 'GET',
135
+ status: discardZeroStatus(entry.responseStatus),
136
+ statusGroup: getStatusGroup(entry.responseStatus),
137
+ deliveryType: computeResourceEntryDeliveryType(entry),
138
+ protocol: computeResourceEntryProtocol(entry)
139
+ },
140
+ type: RumEventType.RESOURCE
141
+ }, tracingInfo, entryMetrics);
142
+ return {
143
+ startTime: startClocks.relative,
144
+ rawRumEvent: resourceEvent,
145
+ domainContext: {
146
+ performanceEntry: entry
147
+ }
148
+ };
149
+ }
150
+ function processCustomResource(resource) {
151
+ var resourceEvent = {
152
+ date: resource.startClocks.timeStamp,
153
+ resource: {
154
+ id: UUID(),
155
+ type: resource.type
156
+ },
157
+ type: RumEventType.RESOURCE
158
+ };
159
+ return {
160
+ customerContext: resource.context,
161
+ startTime: resource.startClocks.relative,
162
+ rawRumEvent: resourceEvent,
163
+ domainContext: {
164
+ resource: resource
165
+ }
166
+ };
167
+ }
168
+ function computeResourceEntryMetrics(entry) {
169
+ return {
170
+ resource: extend2Lev({}, {
171
+ duration: computeResourceEntryDuration(entry)
172
+ }, computeResourceEntrySize(entry), computePerformanceResourceDetails(entry))
173
+ };
174
+ }
175
+ function computeRequestTracingInfo(request) {
176
+ var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;
177
+ if (!hasBeenTraced) {
178
+ return undefined;
179
+ }
180
+ return {
181
+ _gc: {
182
+ spanId: request.spanId,
183
+ traceId: request.traceId
184
+ },
185
+ resource: {
186
+ id: UUID()
187
+ }
188
+ };
189
+ }
190
+ function computeRequestDuration(pageStateHistory, startClocks, duration) {
191
+ return !pageStateHistory.wasInPageStateDuringPeriod(PageState.FROZEN, startClocks.relative, duration) ? toServerDuration(duration) : undefined;
192
+ }
193
+ function computeResourceEntryTracingInfo(entry) {
194
+ return entry.traceId ? {
195
+ _gc: {
196
+ traceId: entry.traceId
197
+ }
198
+ } : undefined;
199
+ }
200
+ /**
201
+ * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it
202
+ * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes
203
+ */
204
+ function discardZeroStatus(statusCode) {
205
+ return statusCode === 0 ? undefined : statusCode;
206
+ }
207
+ function getResourceTrackerIdFromRequest(request) {
208
+ return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id');
209
+ }
210
+ function getHeaderValue(headers, key) {
211
+ if (!headers || !key) {
212
+ return undefined;
213
+ }
214
+ var normalizedKey = String(key).toLowerCase();
215
+ if (typeof headers.get === 'function') {
216
+ return headers.get(key) || headers.get(normalizedKey) || undefined;
217
+ }
218
+ if (Array.isArray(headers)) {
219
+ for (var i = 0; i < headers.length; i += 1) {
220
+ var headerEntry = headers[i];
221
+ if (Array.isArray(headerEntry) && String(headerEntry[0]).toLowerCase() === normalizedKey) {
222
+ return headerEntry[1];
223
+ }
224
+ }
225
+ return undefined;
226
+ }
227
+ for (var headerKey in headers) {
228
+ if (String(headerKey).toLowerCase() === normalizedKey) {
229
+ return headers[headerKey];
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=resourceCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceCollection.js","names":["getStatusGroup","UUID","extend","extend2Lev","relativeToClocks","urlParse","getQueryParamsFromUrl","replaceNumberCharByPath","RequestType","ResourceType","RumEventType","LifeCycleEventType","toServerDuration","createTaskQueue","addTelemetryError","createRequestResourceEntryMatcher","computePerformanceResourceDetails","computeResourceEntryDuration","computeResourceEntryType","computeResourceEntrySize","isResourceEntryRequestType","isResourceUrlLimit","isLongDataUrl","sanitizeDataUrl","computeResourceEntryDeliveryType","computeResourceEntryProtocol","PageState","createPerformanceObservable","RumPerformanceEntryType","retrieveInitialDocumentResourceTiming","startResourceCollection","lifeCycle","configuration","pageStateHistory","taskQueue","retrieveInitialDocumentResourceTimingImpl","resourceTrackerManager","undefined","setFlushTrackedResource","rawEvent","notify","RAW_RUM_EVENT_COLLECTED","requestResourceEntryMatcher","subscribe","REQUEST_COMPLETED","request","handleResource","processRequest","performanceResourceSubscription","type","RESOURCE","buffered","entries","loop","entry","name","resourceUrlLimit","processResourceEntry","_i","entries_1","length","timing","computeRawEvent","push","domainContext","resourceTrackerId","trackRequestResource","error","stop","unsubscribe","addResource","resource","savedCommonContext","processCustomResource","matchingTiming","matchRequestResourceEntry","startClocks","startTime","tracingInfo","computeRequestTracingInfo","XHR","FETCH","correspondingTimingOverrides","computeResourceEntryMetrics","duration","computeRequestDuration","urlObj","url","getParse","resourceEvent","date","timeStamp","id","method","status","statusGroup","urlHost","Host","urlPath","Path","urlPathGroup","urlQuery","deliveryType","protocol","relative","rawRumEvent","performanceEntry","xhr","requestHeaderContexts","response","requestInput","input","requestInit","init","isAborted","handlingStack","getResourceTrackerIdFromRequest","computeResourceEntryTracingInfo","entryMetrics","discardZeroStatus","responseStatus","customerContext","context","hasBeenTraced","traceSampled","traceId","spanId","_gc","wasInPageStateDuringPeriod","FROZEN","statusCode","getHeaderValue","headers","key","normalizedKey","String","toLowerCase","get","Array","isArray","i","headerEntry","headerKey"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/resourceCollection.js"],"sourcesContent":["import {\n getStatusGroup,\n UUID,\n extend,\n extend2Lev,\n relativeToClocks,\n urlParse,\n getQueryParamsFromUrl,\n replaceNumberCharByPath,\n RequestType,\n ResourceType,\n RumEventType,\n LifeCycleEventType,\n toServerDuration,\n createTaskQueue,\n addTelemetryError\n} from '@cloudcare/browser-core'\nimport { createRequestResourceEntryMatcher } from './matchRequestResourceEntry'\nimport {\n computePerformanceResourceDetails,\n computeResourceEntryDuration,\n computeResourceEntryType,\n computeResourceEntrySize,\n isResourceEntryRequestType,\n isResourceUrlLimit,\n isLongDataUrl,\n sanitizeDataUrl,\n computeResourceEntryDeliveryType,\n computeResourceEntryProtocol\n} from './resourceUtils'\nimport { PageState } from '../../contexts/pageStateHistory'\nimport {\n createPerformanceObservable,\n RumPerformanceEntryType\n} from '../../performanceObservable'\nimport { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming'\nexport function startResourceCollection(\n lifeCycle,\n configuration,\n pageStateHistory,\n taskQueue,\n retrieveInitialDocumentResourceTimingImpl,\n resourceTrackerManager\n) {\n if (taskQueue === undefined) {\n taskQueue = createTaskQueue()\n }\n if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {\n retrieveInitialDocumentResourceTimingImpl =\n retrieveInitialDocumentResourceTiming\n }\n if (resourceTrackerManager) {\n resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent)\n })\n }\n var requestResourceEntryMatcher = createRequestResourceEntryMatcher()\n lifeCycle.subscribe(LifeCycleEventType.REQUEST_COMPLETED, function (request) {\n handleResource(function () {\n return processRequest(request, pageStateHistory, requestResourceEntryMatcher)\n })\n })\n var performanceResourceSubscription = createPerformanceObservable(\n configuration,\n {\n type: RumPerformanceEntryType.RESOURCE,\n buffered: true\n }\n ).subscribe(function (entries) {\n var loop = function (entry) {\n if (\n !isResourceEntryRequestType(entry) &&\n !isResourceUrlLimit(entry.name, configuration.resourceUrlLimit)\n ) {\n handleResource(function () {\n return processResourceEntry(entry, configuration)\n })\n }\n }\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i]\n loop(entry)\n }\n })\n\n retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {\n handleResource(function () {\n return processResourceEntry(timing, configuration)\n })\n })\n function handleResource(computeRawEvent) {\n taskQueue.push(function () {\n try {\n const rawEvent = computeRawEvent()\n if (rawEvent) {\n if (\n resourceTrackerManager &&\n rawEvent.domainContext &&\n rawEvent.domainContext.resourceTrackerId &&\n resourceTrackerManager.trackRequestResource(\n rawEvent.domainContext.resourceTrackerId,\n rawEvent\n )\n ) {\n return\n }\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent)\n }\n } catch (error) {\n addTelemetryError(error)\n }\n })\n }\n return {\n stop: function () {\n performanceResourceSubscription.unsubscribe()\n },\n addResource: (resource, savedCommonContext) => {\n handleResource(function () {\n return extend(\n { savedCommonContext: savedCommonContext },\n processCustomResource(resource)\n )\n })\n }\n }\n}\n\nfunction processRequest(request, pageStateHistory, requestResourceEntryMatcher) {\n var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request)\n var startClocks = matchingTiming\n ? relativeToClocks(matchingTiming.startTime)\n : request.startClocks\n var tracingInfo = computeRequestTracingInfo(request)\n\n var type =\n request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH\n var correspondingTimingOverrides = matchingTiming\n ? computeResourceEntryMetrics(matchingTiming)\n : undefined\n\n var duration = computeRequestDuration(\n pageStateHistory,\n startClocks,\n request.duration\n )\n\n var urlObj = urlParse(request.url).getParse()\n var resourceEvent = extend2Lev(\n {\n date: startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: type,\n duration: duration,\n method: request.method,\n status: request.status,\n statusGroup: getStatusGroup(request.status),\n url: isLongDataUrl(request.url)\n ? sanitizeDataUrl(request.url)\n : request.url,\n urlHost: urlObj.Host,\n urlPath: urlObj.Path,\n urlPathGroup: replaceNumberCharByPath(urlObj.Path),\n urlQuery: getQueryParamsFromUrl(request.url),\n deliveryType:\n matchingTiming && computeResourceEntryDeliveryType(matchingTiming),\n protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming)\n },\n type: RumEventType.RESOURCE\n },\n tracingInfo,\n correspondingTimingOverrides\n )\n return {\n startTime: startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n performanceEntry: matchingTiming,\n xhr: request.xhr,\n requestHeaderContexts: request.requestHeaderContexts,\n response: request.response,\n requestInput: request.input,\n requestInit: request.init,\n error: request.error,\n isAborted: request.isAborted,\n handlingStack: request.handlingStack,\n resourceTrackerId: getResourceTrackerIdFromRequest(request)\n }\n }\n}\n\nfunction processResourceEntry(entry, configuration) {\n var startClocks = relativeToClocks(entry.startTime)\n var tracingInfo = computeResourceEntryTracingInfo(entry)\n var type = computeResourceEntryType(entry)\n var entryMetrics = computeResourceEntryMetrics(entry)\n var urlObj = urlParse(entry.name).getParse()\n var resourceEvent = extend2Lev(\n {\n date: startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: type,\n url: entry.name,\n urlHost: urlObj.Host,\n urlPath: urlObj.Path,\n urlPathGroup: replaceNumberCharByPath(urlObj.Path),\n urlQuery: getQueryParamsFromUrl(entry.name),\n method: 'GET',\n status: discardZeroStatus(entry.responseStatus),\n statusGroup: getStatusGroup(entry.responseStatus),\n deliveryType: computeResourceEntryDeliveryType(entry),\n protocol: computeResourceEntryProtocol(entry)\n },\n type: RumEventType.RESOURCE\n },\n tracingInfo,\n entryMetrics\n )\n return {\n startTime: startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n performanceEntry: entry\n }\n }\n}\nfunction processCustomResource(resource) {\n var resourceEvent = {\n date: resource.startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: resource.type\n },\n type: RumEventType.RESOURCE\n }\n return {\n customerContext: resource.context,\n startTime: resource.startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n resource: resource\n }\n }\n}\nfunction computeResourceEntryMetrics(entry) {\n return {\n resource: extend2Lev(\n {},\n {\n duration: computeResourceEntryDuration(entry)\n },\n computeResourceEntrySize(entry),\n computePerformanceResourceDetails(entry)\n )\n }\n}\n\nfunction computeRequestTracingInfo(request) {\n var hasBeenTraced = request.traceSampled && request.traceId && request.spanId\n if (!hasBeenTraced) {\n return undefined\n }\n return {\n _gc: {\n spanId: request.spanId,\n traceId: request.traceId\n },\n resource: { id: UUID() }\n }\n}\n\nfunction computeRequestDuration(pageStateHistory, startClocks, duration) {\n return !pageStateHistory.wasInPageStateDuringPeriod(\n PageState.FROZEN,\n startClocks.relative,\n duration\n )\n ? toServerDuration(duration)\n : undefined\n}\nfunction computeResourceEntryTracingInfo(entry) {\n return entry.traceId ? { _gc: { traceId: entry.traceId } } : undefined\n}\n/**\n * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes\n */\nfunction discardZeroStatus(statusCode) {\n return statusCode === 0 ? undefined : statusCode\n}\n\nfunction getResourceTrackerIdFromRequest(request) {\n return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id')\n}\n\nfunction getHeaderValue(headers, key) {\n if (!headers || !key) {\n return undefined\n }\n\n var normalizedKey = String(key).toLowerCase()\n\n if (typeof headers.get === 'function') {\n return headers.get(key) || headers.get(normalizedKey) || undefined\n }\n\n if (Array.isArray(headers)) {\n for (var i = 0; i < headers.length; i += 1) {\n var headerEntry = headers[i]\n if (\n Array.isArray(headerEntry) &&\n String(headerEntry[0]).toLowerCase() === normalizedKey\n ) {\n return headerEntry[1]\n }\n }\n return undefined\n }\n\n for (var headerKey in headers) {\n if (String(headerKey).toLowerCase() === normalizedKey) {\n return headers[headerKey]\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,231 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ import { UUID, assign, deepClone, addTelemetryError } from '@cloudcare/browser-core';
3
+ var RESOURCE_TRACKER_HEADER = 'x-rum-resource-id';
4
+ var RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000;
5
+ var RESOURCE_TRACKER_RETENTION_MS = 60 * 1000;
6
+ var RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000;
7
+ var DEBUG_CLONE_MAX_DEPTH = 8;
8
+ export function createResourceTrackerManager() {
9
+ var trackers = new Map();
10
+ var flushTrackedResource;
11
+ return {
12
+ createTrackerId: function createTrackerId() {
13
+ var trackerId = UUID();
14
+ getOrCreateTracker(trackerId);
15
+ return trackerId;
16
+ },
17
+ setResourceContext: function setResourceContext(trackerId, context) {
18
+ var tracker = trackers.get(trackerId);
19
+ if (!tracker) {
20
+ return;
21
+ }
22
+ if (isTrackerImmutable(tracker)) {
23
+ return;
24
+ }
25
+ tracker.context = assign({}, context || {});
26
+ },
27
+ appendResourceContext: function appendResourceContext(trackerId, context) {
28
+ var tracker = trackers.get(trackerId);
29
+ if (!tracker) {
30
+ return;
31
+ }
32
+ if (isTrackerImmutable(tracker)) {
33
+ return;
34
+ }
35
+ tracker.context = assign(tracker.context, context || {});
36
+ },
37
+ finishResource: function finishResource(trackerId) {
38
+ var tracker = trackers.get(trackerId);
39
+ if (!tracker) {
40
+ return;
41
+ }
42
+ tracker.finished = true;
43
+ if (tracker.status === 'request_collected') {
44
+ flushTracker(tracker, 'flushed');
45
+ } else if (tracker.status === 'created') {
46
+ tracker.status = 'finished';
47
+ }
48
+ },
49
+ getResource: function getResource(trackerId) {
50
+ var tracker = trackers.get(trackerId);
51
+ if (!tracker) {
52
+ return undefined;
53
+ }
54
+ return cloneTrackerSnapshot(tracker);
55
+ },
56
+ trackRequestResource: function trackRequestResource(trackerId, rawEvent) {
57
+ var tracker = trackers.get(trackerId);
58
+ if (!tracker) {
59
+ return false;
60
+ }
61
+ if (tracker.requestHeaderMatched || tracker.flushed) {
62
+ return false;
63
+ }
64
+ clearTrackerTimeout(tracker);
65
+ tracker.requestHeaderMatched = true;
66
+ tracker.rawResourceEvent = rawEvent.rawRumEvent;
67
+ tracker.startTime = rawEvent.startTime;
68
+ tracker.domainContext = rawEvent.domainContext;
69
+ tracker.resource = extractResourceSummary(rawEvent.rawRumEvent);
70
+ tracker.status = 'request_collected';
71
+ if (tracker.finished) {
72
+ flushTracker(tracker, 'flushed');
73
+ } else {
74
+ tracker.timeoutId = setTimeout(function () {
75
+ tracker.timeoutId = undefined;
76
+ if (tracker.status === 'request_collected') {
77
+ flushTracker(tracker, 'timeout_flushed');
78
+ }
79
+ }, RESOURCE_TRACKER_TIMEOUT_MS);
80
+ }
81
+ return true;
82
+ },
83
+ setFlushTrackedResource: function setFlushTrackedResource(handler) {
84
+ flushTrackedResource = handler;
85
+ },
86
+ getTrackerIdFromRequestHeaders: function getTrackerIdFromRequestHeaders(requestHeaders) {
87
+ return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER);
88
+ }
89
+ };
90
+ function getOrCreateTracker(trackerId) {
91
+ var tracker = trackers.get(trackerId);
92
+ if (!tracker) {
93
+ tracker = {
94
+ id: trackerId,
95
+ status: 'created',
96
+ context: {},
97
+ finished: false,
98
+ flushed: false,
99
+ requestHeaderMatched: false
100
+ };
101
+ trackers.set(trackerId, tracker);
102
+ tracker.orphanTimeoutId = setTimeout(function () {
103
+ tracker.status = 'cleared';
104
+ trackers["delete"](tracker.id);
105
+ }, RESOURCE_TRACKER_ORPHAN_TTL_MS);
106
+ }
107
+ return tracker;
108
+ }
109
+ function flushTracker(tracker, status) {
110
+ if (tracker.flushed || !tracker.rawResourceEvent) {
111
+ tracker.status = status;
112
+ return;
113
+ }
114
+ clearTrackerTimeout(tracker);
115
+ tracker.flushed = true;
116
+ tracker.status = status;
117
+ if (!flushTrackedResource) {
118
+ scheduleTrackerClear(tracker);
119
+ return;
120
+ }
121
+ try {
122
+ flushTrackedResource({
123
+ startTime: tracker.startTime,
124
+ rawRumEvent: tracker.rawResourceEvent,
125
+ customerContext: assign({}, tracker.context),
126
+ domainContext: tracker.domainContext
127
+ });
128
+ } catch (error) {
129
+ addTelemetryError(error);
130
+ } finally {
131
+ scheduleTrackerClear(tracker);
132
+ }
133
+ }
134
+ function scheduleTrackerClear(tracker) {
135
+ clearTrackerTimeout(tracker);
136
+ tracker.clearTimeoutId = setTimeout(function () {
137
+ tracker.status = 'cleared';
138
+ trackers["delete"](tracker.id);
139
+ }, RESOURCE_TRACKER_RETENTION_MS);
140
+ }
141
+ }
142
+ function clearTrackerTimeout(tracker) {
143
+ if (tracker.timeoutId) {
144
+ clearTimeout(tracker.timeoutId);
145
+ tracker.timeoutId = undefined;
146
+ }
147
+ if (tracker.orphanTimeoutId) {
148
+ clearTimeout(tracker.orphanTimeoutId);
149
+ tracker.orphanTimeoutId = undefined;
150
+ }
151
+ if (tracker.clearTimeoutId) {
152
+ clearTimeout(tracker.clearTimeoutId);
153
+ tracker.clearTimeoutId = undefined;
154
+ }
155
+ }
156
+ function isTrackerImmutable(tracker) {
157
+ return tracker.status === 'flushed' || tracker.status === 'timeout_flushed' || tracker.status === 'cleared';
158
+ }
159
+ function extractResourceSummary(rawRumEvent) {
160
+ var resource = rawRumEvent && rawRumEvent.resource;
161
+ if (!resource) {
162
+ return undefined;
163
+ }
164
+ return {
165
+ type: resource.type,
166
+ url: resource.url,
167
+ method: resource.method,
168
+ status: resource.status
169
+ };
170
+ }
171
+ function cloneTrackerSnapshot(tracker) {
172
+ return {
173
+ trackerId: tracker.id,
174
+ status: tracker.status,
175
+ context: deepClone(tracker.context),
176
+ resource: tracker.resource ? assign({}, tracker.resource) : undefined,
177
+ rawRumEvent: tracker.rawResourceEvent ? cloneDebugRawRumEvent(tracker.rawResourceEvent) : undefined
178
+ };
179
+ }
180
+ function cloneDebugRawRumEvent(rawRumEvent) {
181
+ var clonedEvent = {};
182
+ for (var key in rawRumEvent) {
183
+ if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {
184
+ clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH);
185
+ }
186
+ }
187
+ return clonedEvent;
188
+ }
189
+ function cloneDebugObject(value, depth) {
190
+ if (!value || _typeof(value) !== 'object' || depth < 0) {
191
+ return value;
192
+ }
193
+ if (Array.isArray(value)) {
194
+ var clonedArray = [];
195
+ for (var i = 0; i < value.length; i += 1) {
196
+ clonedArray.push(cloneDebugObject(value[i], depth - 1));
197
+ }
198
+ return clonedArray;
199
+ }
200
+ var clonedObject = {};
201
+ for (var key in value) {
202
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
203
+ clonedObject[key] = cloneDebugObject(value[key], depth - 1);
204
+ }
205
+ }
206
+ return clonedObject;
207
+ }
208
+ function getHeaderValue(headers, key) {
209
+ if (!headers || !key) {
210
+ return undefined;
211
+ }
212
+ var normalizedKey = String(key).toLowerCase();
213
+ if (typeof headers.get === 'function') {
214
+ return headers.get(key) || headers.get(normalizedKey) || undefined;
215
+ }
216
+ if (Array.isArray(headers)) {
217
+ for (var i = 0; i < headers.length; i += 1) {
218
+ var entry = headers[i];
219
+ if (Array.isArray(entry) && String(entry[0]).toLowerCase() === normalizedKey) {
220
+ return entry[1];
221
+ }
222
+ }
223
+ return undefined;
224
+ }
225
+ for (var headerKey in headers) {
226
+ if (String(headerKey).toLowerCase() === normalizedKey) {
227
+ return headers[headerKey];
228
+ }
229
+ }
230
+ }
231
+ //# sourceMappingURL=resourceTrackerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceTrackerManager.js","names":["UUID","assign","deepClone","addTelemetryError","RESOURCE_TRACKER_HEADER","RESOURCE_TRACKER_TIMEOUT_MS","RESOURCE_TRACKER_RETENTION_MS","RESOURCE_TRACKER_ORPHAN_TTL_MS","DEBUG_CLONE_MAX_DEPTH","createResourceTrackerManager","trackers","Map","flushTrackedResource","createTrackerId","trackerId","getOrCreateTracker","setResourceContext","context","tracker","get","isTrackerImmutable","appendResourceContext","finishResource","finished","status","flushTracker","getResource","undefined","cloneTrackerSnapshot","trackRequestResource","rawEvent","requestHeaderMatched","flushed","clearTrackerTimeout","rawResourceEvent","rawRumEvent","startTime","domainContext","resource","extractResourceSummary","timeoutId","setTimeout","setFlushTrackedResource","handler","getTrackerIdFromRequestHeaders","requestHeaders","getHeaderValue","id","set","orphanTimeoutId","scheduleTrackerClear","customerContext","error","clearTimeoutId","clearTimeout","type","url","method","cloneDebugRawRumEvent","clonedEvent","key","Object","prototype","hasOwnProperty","call","cloneDebugObject","value","depth","_typeof","Array","isArray","clonedArray","i","length","push","clonedObject","headers","normalizedKey","String","toLowerCase","entry","headerKey"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/resourceTrackerManager.js"],"sourcesContent":["import { UUID, assign, deepClone, addTelemetryError } from '@cloudcare/browser-core'\n\nvar RESOURCE_TRACKER_HEADER = 'x-rum-resource-id'\nvar RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000\nvar RESOURCE_TRACKER_RETENTION_MS = 60 * 1000\nvar RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000\nvar DEBUG_CLONE_MAX_DEPTH = 8\n\nexport function createResourceTrackerManager() {\n var trackers = new Map()\n var flushTrackedResource\n\n return {\n createTrackerId: function () {\n var trackerId = UUID()\n getOrCreateTracker(trackerId)\n return trackerId\n },\n setResourceContext: function (trackerId, context) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n if (isTrackerImmutable(tracker)) {\n return\n }\n tracker.context = assign({}, context || {})\n },\n appendResourceContext: function (trackerId, context) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n if (isTrackerImmutable(tracker)) {\n return\n }\n tracker.context = assign(tracker.context, context || {})\n },\n finishResource: function (trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n tracker.finished = true\n if (tracker.status === 'request_collected') {\n flushTracker(tracker, 'flushed')\n } else if (tracker.status === 'created') {\n tracker.status = 'finished'\n }\n },\n getResource: function (trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return undefined\n }\n return cloneTrackerSnapshot(tracker)\n },\n trackRequestResource: function (trackerId, rawEvent) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return false\n }\n if (tracker.requestHeaderMatched || tracker.flushed) {\n return false\n }\n\n clearTrackerTimeout(tracker)\n tracker.requestHeaderMatched = true\n tracker.rawResourceEvent = rawEvent.rawRumEvent\n tracker.startTime = rawEvent.startTime\n tracker.domainContext = rawEvent.domainContext\n tracker.resource = extractResourceSummary(rawEvent.rawRumEvent)\n tracker.status = 'request_collected'\n\n if (tracker.finished) {\n flushTracker(tracker, 'flushed')\n } else {\n tracker.timeoutId = setTimeout(function () {\n tracker.timeoutId = undefined\n if (tracker.status === 'request_collected') {\n flushTracker(tracker, 'timeout_flushed')\n }\n }, RESOURCE_TRACKER_TIMEOUT_MS)\n }\n\n return true\n },\n setFlushTrackedResource: function (handler) {\n flushTrackedResource = handler\n },\n getTrackerIdFromRequestHeaders: function (requestHeaders) {\n return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER)\n }\n }\n\n function getOrCreateTracker(trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n tracker = {\n id: trackerId,\n status: 'created',\n context: {},\n finished: false,\n flushed: false,\n requestHeaderMatched: false\n }\n trackers.set(trackerId, tracker)\n tracker.orphanTimeoutId = setTimeout(function () {\n tracker.status = 'cleared'\n trackers.delete(tracker.id)\n }, RESOURCE_TRACKER_ORPHAN_TTL_MS)\n }\n return tracker\n }\n\n function flushTracker(tracker, status) {\n if (tracker.flushed || !tracker.rawResourceEvent) {\n tracker.status = status\n return\n }\n\n clearTrackerTimeout(tracker)\n tracker.flushed = true\n tracker.status = status\n\n if (!flushTrackedResource) {\n scheduleTrackerClear(tracker)\n return\n }\n\n try {\n flushTrackedResource({\n startTime: tracker.startTime,\n rawRumEvent: tracker.rawResourceEvent,\n customerContext: assign({}, tracker.context),\n domainContext: tracker.domainContext\n })\n } catch (error) {\n addTelemetryError(error)\n } finally {\n scheduleTrackerClear(tracker)\n }\n }\n\n function scheduleTrackerClear(tracker) {\n clearTrackerTimeout(tracker)\n tracker.clearTimeoutId = setTimeout(function () {\n tracker.status = 'cleared'\n trackers.delete(tracker.id)\n }, RESOURCE_TRACKER_RETENTION_MS)\n }\n}\n\nfunction clearTrackerTimeout(tracker) {\n if (tracker.timeoutId) {\n clearTimeout(tracker.timeoutId)\n tracker.timeoutId = undefined\n }\n if (tracker.orphanTimeoutId) {\n clearTimeout(tracker.orphanTimeoutId)\n tracker.orphanTimeoutId = undefined\n }\n if (tracker.clearTimeoutId) {\n clearTimeout(tracker.clearTimeoutId)\n tracker.clearTimeoutId = undefined\n }\n}\n\nfunction isTrackerImmutable(tracker) {\n return (\n tracker.status === 'flushed' ||\n tracker.status === 'timeout_flushed' ||\n tracker.status === 'cleared'\n )\n}\n\nfunction extractResourceSummary(rawRumEvent) {\n var resource = rawRumEvent && rawRumEvent.resource\n if (!resource) {\n return undefined\n }\n\n return {\n type: resource.type,\n url: resource.url,\n method: resource.method,\n status: resource.status\n }\n}\n\nfunction cloneTrackerSnapshot(tracker) {\n return {\n trackerId: tracker.id,\n status: tracker.status,\n context: deepClone(tracker.context),\n resource: tracker.resource ? assign({}, tracker.resource) : undefined,\n rawRumEvent: tracker.rawResourceEvent\n ? cloneDebugRawRumEvent(tracker.rawResourceEvent)\n : undefined\n }\n}\n\nfunction cloneDebugRawRumEvent(rawRumEvent) {\n var clonedEvent = {}\n for (var key in rawRumEvent) {\n if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {\n clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH)\n }\n }\n return clonedEvent\n}\n\nfunction cloneDebugObject(value, depth) {\n if (!value || typeof value !== 'object' || depth < 0) {\n return value\n }\n\n if (Array.isArray(value)) {\n var clonedArray = []\n for (var i = 0; i < value.length; i += 1) {\n clonedArray.push(cloneDebugObject(value[i], depth - 1))\n }\n return clonedArray\n }\n\n var clonedObject = {}\n for (var key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n clonedObject[key] = cloneDebugObject(value[key], depth - 1)\n }\n }\n return clonedObject\n}\n\nfunction getHeaderValue(headers, key) {\n if (!headers || !key) {\n return undefined\n }\n\n var normalizedKey = String(key).toLowerCase()\n\n if (typeof headers.get === 'function') {\n return headers.get(key) || headers.get(normalizedKey) || undefined\n }\n\n if (Array.isArray(headers)) {\n for (var i = 0; i < headers.length; i += 1) {\n var entry = headers[i]\n if (\n Array.isArray(entry) &&\n String(entry[0]).toLowerCase() === normalizedKey\n ) {\n return entry[1]\n }\n }\n return undefined\n }\n\n for (var headerKey in headers) {\n if (String(headerKey).toLowerCase() === normalizedKey) {\n return headers[headerKey]\n }\n }\n}\n"],"mappings":";AAAA,SAASA,IAAI,EAAEC,MAAM,EAAEC,SAAS,EAAEC,iBAAiB,QAAQ,yBAAyB;AAEpF,IAAIC,uBAAuB,GAAG,mBAAmB;AACjD,IAAIC,2BAA2B,GAAG,EAAE,GAAG,IAAI;AAC3C,IAAIC,6BAA6B,GAAG,EAAE,GAAG,IAAI;AAC7C,IAAIC,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AAClD,IAAIC,qBAAqB,GAAG,CAAC;AAE7B,OAAO,SAASC,4BAA4BA,CAAA,EAAG;EAC7C,IAAIC,QAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC;EACxB,IAAIC,oBAAoB;EAExB,OAAO;IACLC,eAAe,EAAE,SAAjBA,eAAeA,CAAA,EAAc;MAC3B,IAAIC,SAAS,GAAGd,IAAI,CAAC,CAAC;MACtBe,kBAAkB,CAACD,SAAS,CAAC;MAC7B,OAAOA,SAAS;IAClB,CAAC;IACDE,kBAAkB,EAAE,SAApBA,kBAAkBA,CAAYF,SAAS,EAAEG,OAAO,EAAE;MAChD,IAAIC,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;MACrC,IAAI,CAACI,OAAO,EAAE;QACZ;MACF;MACA,IAAIE,kBAAkB,CAACF,OAAO,CAAC,EAAE;QAC/B;MACF;MACAA,OAAO,CAACD,OAAO,GAAGhB,MAAM,CAAC,CAAC,CAAC,EAAEgB,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IACDI,qBAAqB,EAAE,SAAvBA,qBAAqBA,CAAYP,SAAS,EAAEG,OAAO,EAAE;MACnD,IAAIC,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;MACrC,IAAI,CAACI,OAAO,EAAE;QACZ;MACF;MACA,IAAIE,kBAAkB,CAACF,OAAO,CAAC,EAAE;QAC/B;MACF;MACAA,OAAO,CAACD,OAAO,GAAGhB,MAAM,CAACiB,OAAO,CAACD,OAAO,EAAEA,OAAO,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IACDK,cAAc,EAAE,SAAhBA,cAAcA,CAAYR,SAAS,EAAE;MACnC,IAAII,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;MACrC,IAAI,CAACI,OAAO,EAAE;QACZ;MACF;MACAA,OAAO,CAACK,QAAQ,GAAG,IAAI;MACvB,IAAIL,OAAO,CAACM,MAAM,KAAK,mBAAmB,EAAE;QAC1CC,YAAY,CAACP,OAAO,EAAE,SAAS,CAAC;MAClC,CAAC,MAAM,IAAIA,OAAO,CAACM,MAAM,KAAK,SAAS,EAAE;QACvCN,OAAO,CAACM,MAAM,GAAG,UAAU;MAC7B;IACF,CAAC;IACDE,WAAW,EAAE,SAAbA,WAAWA,CAAYZ,SAAS,EAAE;MAChC,IAAII,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;MACrC,IAAI,CAACI,OAAO,EAAE;QACZ,OAAOS,SAAS;MAClB;MACA,OAAOC,oBAAoB,CAACV,OAAO,CAAC;IACtC,CAAC;IACDW,oBAAoB,EAAE,SAAtBA,oBAAoBA,CAAYf,SAAS,EAAEgB,QAAQ,EAAE;MACnD,IAAIZ,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;MACrC,IAAI,CAACI,OAAO,EAAE;QACZ,OAAO,KAAK;MACd;MACA,IAAIA,OAAO,CAACa,oBAAoB,IAAIb,OAAO,CAACc,OAAO,EAAE;QACnD,OAAO,KAAK;MACd;MAEAC,mBAAmB,CAACf,OAAO,CAAC;MAC5BA,OAAO,CAACa,oBAAoB,GAAG,IAAI;MACnCb,OAAO,CAACgB,gBAAgB,GAAGJ,QAAQ,CAACK,WAAW;MAC/CjB,OAAO,CAACkB,SAAS,GAAGN,QAAQ,CAACM,SAAS;MACtClB,OAAO,CAACmB,aAAa,GAAGP,QAAQ,CAACO,aAAa;MAC9CnB,OAAO,CAACoB,QAAQ,GAAGC,sBAAsB,CAACT,QAAQ,CAACK,WAAW,CAAC;MAC/DjB,OAAO,CAACM,MAAM,GAAG,mBAAmB;MAEpC,IAAIN,OAAO,CAACK,QAAQ,EAAE;QACpBE,YAAY,CAACP,OAAO,EAAE,SAAS,CAAC;MAClC,CAAC,MAAM;QACLA,OAAO,CAACsB,SAAS,GAAGC,UAAU,CAAC,YAAY;UACzCvB,OAAO,CAACsB,SAAS,GAAGb,SAAS;UAC7B,IAAIT,OAAO,CAACM,MAAM,KAAK,mBAAmB,EAAE;YAC1CC,YAAY,CAACP,OAAO,EAAE,iBAAiB,CAAC;UAC1C;QACF,CAAC,EAAEb,2BAA2B,CAAC;MACjC;MAEA,OAAO,IAAI;IACb,CAAC;IACDqC,uBAAuB,EAAE,SAAzBA,uBAAuBA,CAAYC,OAAO,EAAE;MAC1C/B,oBAAoB,GAAG+B,OAAO;IAChC,CAAC;IACDC,8BAA8B,EAAE,SAAhCA,8BAA8BA,CAAYC,cAAc,EAAE;MACxD,OAAOC,cAAc,CAACD,cAAc,EAAEzC,uBAAuB,CAAC;IAChE;EACF,CAAC;EAED,SAASW,kBAAkBA,CAACD,SAAS,EAAE;IACrC,IAAII,OAAO,GAAGR,QAAQ,CAACS,GAAG,CAACL,SAAS,CAAC;IACrC,IAAI,CAACI,OAAO,EAAE;MACZA,OAAO,GAAG;QACR6B,EAAE,EAAEjC,SAAS;QACbU,MAAM,EAAE,SAAS;QACjBP,OAAO,EAAE,CAAC,CAAC;QACXM,QAAQ,EAAE,KAAK;QACfS,OAAO,EAAE,KAAK;QACdD,oBAAoB,EAAE;MACxB,CAAC;MACDrB,QAAQ,CAACsC,GAAG,CAAClC,SAAS,EAAEI,OAAO,CAAC;MAChCA,OAAO,CAAC+B,eAAe,GAAGR,UAAU,CAAC,YAAY;QAC/CvB,OAAO,CAACM,MAAM,GAAG,SAAS;QAC1Bd,QAAQ,UAAO,CAACQ,OAAO,CAAC6B,EAAE,CAAC;MAC7B,CAAC,EAAExC,8BAA8B,CAAC;IACpC;IACA,OAAOW,OAAO;EAChB;EAEA,SAASO,YAAYA,CAACP,OAAO,EAAEM,MAAM,EAAE;IACrC,IAAIN,OAAO,CAACc,OAAO,IAAI,CAACd,OAAO,CAACgB,gBAAgB,EAAE;MAChDhB,OAAO,CAACM,MAAM,GAAGA,MAAM;MACvB;IACF;IAEAS,mBAAmB,CAACf,OAAO,CAAC;IAC5BA,OAAO,CAACc,OAAO,GAAG,IAAI;IACtBd,OAAO,CAACM,MAAM,GAAGA,MAAM;IAEvB,IAAI,CAACZ,oBAAoB,EAAE;MACzBsC,oBAAoB,CAAChC,OAAO,CAAC;MAC7B;IACF;IAEA,IAAI;MACFN,oBAAoB,CAAC;QACnBwB,SAAS,EAAElB,OAAO,CAACkB,SAAS;QAC5BD,WAAW,EAAEjB,OAAO,CAACgB,gBAAgB;QACrCiB,eAAe,EAAElD,MAAM,CAAC,CAAC,CAAC,EAAEiB,OAAO,CAACD,OAAO,CAAC;QAC5CoB,aAAa,EAAEnB,OAAO,CAACmB;MACzB,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOe,KAAK,EAAE;MACdjD,iBAAiB,CAACiD,KAAK,CAAC;IAC1B,CAAC,SAAS;MACRF,oBAAoB,CAAChC,OAAO,CAAC;IAC/B;EACF;EAEA,SAASgC,oBAAoBA,CAAChC,OAAO,EAAE;IACrCe,mBAAmB,CAACf,OAAO,CAAC;IAC5BA,OAAO,CAACmC,cAAc,GAAGZ,UAAU,CAAC,YAAY;MAC9CvB,OAAO,CAACM,MAAM,GAAG,SAAS;MAC1Bd,QAAQ,UAAO,CAACQ,OAAO,CAAC6B,EAAE,CAAC;IAC7B,CAAC,EAAEzC,6BAA6B,CAAC;EACnC;AACF;AAEA,SAAS2B,mBAAmBA,CAACf,OAAO,EAAE;EACpC,IAAIA,OAAO,CAACsB,SAAS,EAAE;IACrBc,YAAY,CAACpC,OAAO,CAACsB,SAAS,CAAC;IAC/BtB,OAAO,CAACsB,SAAS,GAAGb,SAAS;EAC/B;EACA,IAAIT,OAAO,CAAC+B,eAAe,EAAE;IAC3BK,YAAY,CAACpC,OAAO,CAAC+B,eAAe,CAAC;IACrC/B,OAAO,CAAC+B,eAAe,GAAGtB,SAAS;EACrC;EACA,IAAIT,OAAO,CAACmC,cAAc,EAAE;IAC1BC,YAAY,CAACpC,OAAO,CAACmC,cAAc,CAAC;IACpCnC,OAAO,CAACmC,cAAc,GAAG1B,SAAS;EACpC;AACF;AAEA,SAASP,kBAAkBA,CAACF,OAAO,EAAE;EACnC,OACEA,OAAO,CAACM,MAAM,KAAK,SAAS,IAC5BN,OAAO,CAACM,MAAM,KAAK,iBAAiB,IACpCN,OAAO,CAACM,MAAM,KAAK,SAAS;AAEhC;AAEA,SAASe,sBAAsBA,CAACJ,WAAW,EAAE;EAC3C,IAAIG,QAAQ,GAAGH,WAAW,IAAIA,WAAW,CAACG,QAAQ;EAClD,IAAI,CAACA,QAAQ,EAAE;IACb,OAAOX,SAAS;EAClB;EAEA,OAAO;IACL4B,IAAI,EAAEjB,QAAQ,CAACiB,IAAI;IACnBC,GAAG,EAAElB,QAAQ,CAACkB,GAAG;IACjBC,MAAM,EAAEnB,QAAQ,CAACmB,MAAM;IACvBjC,MAAM,EAAEc,QAAQ,CAACd;EACnB,CAAC;AACH;AAEA,SAASI,oBAAoBA,CAACV,OAAO,EAAE;EACrC,OAAO;IACLJ,SAAS,EAAEI,OAAO,CAAC6B,EAAE;IACrBvB,MAAM,EAAEN,OAAO,CAACM,MAAM;IACtBP,OAAO,EAAEf,SAAS,CAACgB,OAAO,CAACD,OAAO,CAAC;IACnCqB,QAAQ,EAAEpB,OAAO,CAACoB,QAAQ,GAAGrC,MAAM,CAAC,CAAC,CAAC,EAAEiB,OAAO,CAACoB,QAAQ,CAAC,GAAGX,SAAS;IACrEQ,WAAW,EAAEjB,OAAO,CAACgB,gBAAgB,GACjCwB,qBAAqB,CAACxC,OAAO,CAACgB,gBAAgB,CAAC,GAC/CP;EACN,CAAC;AACH;AAEA,SAAS+B,qBAAqBA,CAACvB,WAAW,EAAE;EAC1C,IAAIwB,WAAW,GAAG,CAAC,CAAC;EACpB,KAAK,IAAIC,GAAG,IAAIzB,WAAW,EAAE;IAC3B,IAAI0B,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAAC7B,WAAW,EAAEyB,GAAG,CAAC,EAAE;MAC1DD,WAAW,CAACC,GAAG,CAAC,GAAGK,gBAAgB,CAAC9B,WAAW,CAACyB,GAAG,CAAC,EAAEpD,qBAAqB,CAAC;IAC9E;EACF;EACA,OAAOmD,WAAW;AACpB;AAEA,SAASM,gBAAgBA,CAACC,KAAK,EAAEC,KAAK,EAAE;EACtC,IAAI,CAACD,KAAK,IAAIE,OAAA,CAAOF,KAAK,MAAK,QAAQ,IAAIC,KAAK,GAAG,CAAC,EAAE;IACpD,OAAOD,KAAK;EACd;EAEA,IAAIG,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;IACxB,IAAIK,WAAW,GAAG,EAAE;IACpB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,KAAK,CAACO,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACxCD,WAAW,CAACG,IAAI,CAACT,gBAAgB,CAACC,KAAK,CAACM,CAAC,CAAC,EAAEL,KAAK,GAAG,CAAC,CAAC,CAAC;IACzD;IACA,OAAOI,WAAW;EACpB;EAEA,IAAII,YAAY,GAAG,CAAC,CAAC;EACrB,KAAK,IAAIf,GAAG,IAAIM,KAAK,EAAE;IACrB,IAAIL,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACE,KAAK,EAAEN,GAAG,CAAC,EAAE;MACpDe,YAAY,CAACf,GAAG,CAAC,GAAGK,gBAAgB,CAACC,KAAK,CAACN,GAAG,CAAC,EAAEO,KAAK,GAAG,CAAC,CAAC;IAC7D;EACF;EACA,OAAOQ,YAAY;AACrB;AAEA,SAAS7B,cAAcA,CAAC8B,OAAO,EAAEhB,GAAG,EAAE;EACpC,IAAI,CAACgB,OAAO,IAAI,CAAChB,GAAG,EAAE;IACpB,OAAOjC,SAAS;EAClB;EAEA,IAAIkD,aAAa,GAAGC,MAAM,CAAClB,GAAG,CAAC,CAACmB,WAAW,CAAC,CAAC;EAE7C,IAAI,OAAOH,OAAO,CAACzD,GAAG,KAAK,UAAU,EAAE;IACrC,OAAOyD,OAAO,CAACzD,GAAG,CAACyC,GAAG,CAAC,IAAIgB,OAAO,CAACzD,GAAG,CAAC0D,aAAa,CAAC,IAAIlD,SAAS;EACpE;EAEA,IAAI0C,KAAK,CAACC,OAAO,CAACM,OAAO,CAAC,EAAE;IAC1B,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGI,OAAO,CAACH,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC1C,IAAIQ,KAAK,GAAGJ,OAAO,CAACJ,CAAC,CAAC;MACtB,IACEH,KAAK,CAACC,OAAO,CAACU,KAAK,CAAC,IACpBF,MAAM,CAACE,KAAK,CAAC,CAAC,CAAC,CAAC,CAACD,WAAW,CAAC,CAAC,KAAKF,aAAa,EAChD;QACA,OAAOG,KAAK,CAAC,CAAC,CAAC;MACjB;IACF;IACA,OAAOrD,SAAS;EAClB;EAEA,KAAK,IAAIsD,SAAS,IAAIL,OAAO,EAAE;IAC7B,IAAIE,MAAM,CAACG,SAAS,CAAC,CAACF,WAAW,CAAC,CAAC,KAAKF,aAAa,EAAE;MACrD,OAAOD,OAAO,CAACK,SAAS,CAAC;IAC3B;EACF;AACF","ignoreList":[]}