@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,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createRequestResourceEntryMatcher = createRequestResourceEntryMatcher;
7
+ var _resourceUtils = require("./resourceUtils");
8
+ var _browserCore = require("@cloudcare/browser-core");
9
+ /**
10
+ * Look for corresponding timing in resource timing buffer
11
+ *
12
+ * Observations:
13
+ * - Timing (start, end) are nested inside the request (start, end)
14
+ * - Browsers generate a timing entry for OPTIONS request
15
+ *
16
+ * Strategy:
17
+ * - from valid nested entries
18
+ * - if a single timing match, return the timing
19
+ * - if two following timings match (OPTIONS request), return the timing for the actual request
20
+ * - otherwise we can't decide, return undefined
21
+ */
22
+ function createRequestResourceEntryMatcher() {
23
+ var alreadyMatchedEntries = new _browserCore.WeakSet();
24
+ return {
25
+ matchRequestResourceEntry: function matchRequestResourceEntry(request) {
26
+ if (!performance || !('getEntriesByName' in performance)) {
27
+ return;
28
+ }
29
+ var sameNameEntries = performance.getEntriesByName(request.url, 'resource');
30
+ if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {
31
+ return;
32
+ }
33
+ var candidates = (0, _browserCore.filter)(sameNameEntries, function (entry) {
34
+ return !alreadyMatchedEntries.has(entry);
35
+ });
36
+ candidates = (0, _browserCore.filter)(candidates, function (entry) {
37
+ return (0, _resourceUtils.hasValidResourceEntryDuration)(entry) && (0, _resourceUtils.hasValidResourceEntryTimings)(entry);
38
+ });
39
+ candidates = (0, _browserCore.filter)(candidates, function (entry) {
40
+ return isBetween(entry, request.startClocks.relative, endTime({
41
+ startTime: request.startClocks.relative,
42
+ duration: request.duration
43
+ }));
44
+ });
45
+ var lastEntry = undefined;
46
+ if (candidates.length > 1) {
47
+ var startTimeDuration = Number.MAX_SAFE_INTEGER;
48
+ candidates.forEach(function (entry) {
49
+ var _startTimeDuration = Math.abs(entry.startTime - request.startClocks.relative);
50
+ if (_startTimeDuration < startTimeDuration) {
51
+ startTimeDuration = _startTimeDuration;
52
+ lastEntry = entry;
53
+ }
54
+ });
55
+ } else if (candidates.length === 1) {
56
+ lastEntry = candidates[0];
57
+ }
58
+ if (lastEntry) {
59
+ alreadyMatchedEntries.add(lastEntry);
60
+ return lastEntry.toJSON();
61
+ }
62
+ return;
63
+ }
64
+ };
65
+ }
66
+ function endTime(timing) {
67
+ return (0, _browserCore.addDuration)(timing.startTime, timing.duration);
68
+ }
69
+ function isBetween(timing, start, end) {
70
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
71
+ var errorMargin = 1;
72
+ return timing.startTime >= start - errorMargin && endTime(timing) <= (0, _browserCore.addDuration)(end, errorMargin);
73
+ }
74
+ //# sourceMappingURL=matchRequestResourceEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchRequestResourceEntry.js","names":["_resourceUtils","require","_browserCore","createRequestResourceEntryMatcher","alreadyMatchedEntries","WeakSet","matchRequestResourceEntry","request","performance","sameNameEntries","getEntriesByName","url","length","candidates","filter","entry","has","hasValidResourceEntryDuration","hasValidResourceEntryTimings","isBetween","startClocks","relative","endTime","startTime","duration","lastEntry","undefined","startTimeDuration","Number","MAX_SAFE_INTEGER","forEach","_startTimeDuration","Math","abs","add","toJSON","timing","addDuration","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,IAAAA,cAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,iCAAiCA,CAAA,EAAG;EAClD,IAAIC,qBAAqB,GAAG,IAAIC,oBAAO,CAAC,CAAC;EAEzC,OAAO;IACLC,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,GAAG,IAAAC,mBAAM,EAACL,eAAe,EAAE,UAAUM,KAAK,EAAE;QACxD,OAAO,CAACX,qBAAqB,CAACY,GAAG,CAACD,KAAK,CAAC;MAC1C,CAAC,CAAC;MACFF,UAAU,GAAG,IAAAC,mBAAM,EAACD,UAAU,EAAE,UAAUE,KAAK,EAAE;QAC/C,OACE,IAAAE,4CAA6B,EAACF,KAAK,CAAC,IACpC,IAAAG,2CAA4B,EAACH,KAAK,CAAC;MAEvC,CAAC,CAAC;MACFF,UAAU,GAAG,IAAAC,mBAAM,EAACD,UAAU,EAAE,UAAUE,KAAK,EAAE;QAC/C,OAAOI,SAAS,CACdJ,KAAK,EACLR,OAAO,CAACa,WAAW,CAACC,QAAQ,EAC5BC,OAAO,CAAC;UACNC,SAAS,EAAEhB,OAAO,CAACa,WAAW,CAACC,QAAQ;UACvCG,QAAQ,EAAEjB,OAAO,CAACiB;QACpB,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MACF,IAAIC,SAAS,GAAGC,SAAS;MACzB,IAAIb,UAAU,CAACD,MAAM,GAAG,CAAC,EAAE;QACzB,IAAIe,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;QAC/ChB,UAAU,CAACiB,OAAO,CAAC,UAACf,KAAK,EAAK;UAC5B,IAAMgB,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CACjClB,KAAK,CAACQ,SAAS,GAAGhB,OAAO,CAACa,WAAW,CAACC,QACxC,CAAC;UACD,IAAIU,kBAAkB,GAAGJ,iBAAiB,EAAE;YAC1CA,iBAAiB,GAAGI,kBAAkB;YACtCN,SAAS,GAAGV,KAAK;UACnB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIF,UAAU,CAACD,MAAM,KAAK,CAAC,EAAE;QAClCa,SAAS,GAAGZ,UAAU,CAAC,CAAC,CAAC;MAC3B;MAEA,IAAIY,SAAS,EAAE;QACbrB,qBAAqB,CAAC8B,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,IAAAC,wBAAW,EAACD,MAAM,CAACb,SAAS,EAAEa,MAAM,CAACZ,QAAQ,CAAC;AACvD;AAEA,SAASL,SAASA,CAACiB,MAAM,EAAEE,KAAK,EAAEC,GAAG,EAAE;EACrC;EACA,IAAIC,WAAW,GAAG,CAAC;EACnB,OACEJ,MAAM,CAACb,SAAS,IAAIe,KAAK,GAAGE,WAAW,IACvClB,OAAO,CAACc,MAAM,CAAC,IAAI,IAAAC,wBAAW,EAACE,GAAG,EAAEC,WAAW,CAAC;AAEpD","ignoreList":[]}
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.startResourceCollection = startResourceCollection;
7
+ var _browserCore = require("@cloudcare/browser-core");
8
+ var _matchRequestResourceEntry = require("./matchRequestResourceEntry");
9
+ var _resourceUtils = require("./resourceUtils");
10
+ var _pageStateHistory = require("../../contexts/pageStateHistory");
11
+ var _performanceObservable = require("../../performanceObservable");
12
+ var _retrieveInitialDocumentResourceTiming = require("./retrieveInitialDocumentResourceTiming");
13
+ function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl, resourceTrackerManager) {
14
+ if (taskQueue === undefined) {
15
+ taskQueue = (0, _browserCore.createTaskQueue)();
16
+ }
17
+ if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {
18
+ retrieveInitialDocumentResourceTimingImpl = _retrieveInitialDocumentResourceTiming.retrieveInitialDocumentResourceTiming;
19
+ }
20
+ if (resourceTrackerManager) {
21
+ resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {
22
+ lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
23
+ });
24
+ }
25
+ var requestResourceEntryMatcher = (0, _matchRequestResourceEntry.createRequestResourceEntryMatcher)();
26
+ lifeCycle.subscribe(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, function (request) {
27
+ handleResource(function () {
28
+ return processRequest(request, pageStateHistory, requestResourceEntryMatcher);
29
+ });
30
+ });
31
+ var performanceResourceSubscription = (0, _performanceObservable.createPerformanceObservable)(configuration, {
32
+ type: _performanceObservable.RumPerformanceEntryType.RESOURCE,
33
+ buffered: true
34
+ }).subscribe(function (entries) {
35
+ var loop = function loop(entry) {
36
+ if (!(0, _resourceUtils.isResourceEntryRequestType)(entry) && !(0, _resourceUtils.isResourceUrlLimit)(entry.name, configuration.resourceUrlLimit)) {
37
+ handleResource(function () {
38
+ return processResourceEntry(entry, configuration);
39
+ });
40
+ }
41
+ };
42
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
43
+ var entry = entries_1[_i];
44
+ loop(entry);
45
+ }
46
+ });
47
+ retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {
48
+ handleResource(function () {
49
+ return processResourceEntry(timing, configuration);
50
+ });
51
+ });
52
+ function handleResource(computeRawEvent) {
53
+ taskQueue.push(function () {
54
+ try {
55
+ var rawEvent = computeRawEvent();
56
+ if (rawEvent) {
57
+ if (resourceTrackerManager && rawEvent.domainContext && rawEvent.domainContext.resourceTrackerId && resourceTrackerManager.trackRequestResource(rawEvent.domainContext.resourceTrackerId, rawEvent)) {
58
+ return;
59
+ }
60
+ lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
61
+ }
62
+ } catch (error) {
63
+ (0, _browserCore.addTelemetryError)(error);
64
+ }
65
+ });
66
+ }
67
+ return {
68
+ stop: function stop() {
69
+ performanceResourceSubscription.unsubscribe();
70
+ },
71
+ addResource: function addResource(resource, savedCommonContext) {
72
+ handleResource(function () {
73
+ return (0, _browserCore.extend)({
74
+ savedCommonContext: savedCommonContext
75
+ }, processCustomResource(resource));
76
+ });
77
+ }
78
+ };
79
+ }
80
+ function processRequest(request, pageStateHistory, requestResourceEntryMatcher) {
81
+ var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request);
82
+ var startClocks = matchingTiming ? (0, _browserCore.relativeToClocks)(matchingTiming.startTime) : request.startClocks;
83
+ var tracingInfo = computeRequestTracingInfo(request);
84
+ var type = request.type === _browserCore.RequestType.XHR ? _browserCore.ResourceType.XHR : _browserCore.ResourceType.FETCH;
85
+ var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;
86
+ var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);
87
+ var urlObj = (0, _browserCore.urlParse)(request.url).getParse();
88
+ var resourceEvent = (0, _browserCore.extend2Lev)({
89
+ date: startClocks.timeStamp,
90
+ resource: {
91
+ id: (0, _browserCore.UUID)(),
92
+ type: type,
93
+ duration: duration,
94
+ method: request.method,
95
+ status: request.status,
96
+ statusGroup: (0, _browserCore.getStatusGroup)(request.status),
97
+ url: (0, _resourceUtils.isLongDataUrl)(request.url) ? (0, _resourceUtils.sanitizeDataUrl)(request.url) : request.url,
98
+ urlHost: urlObj.Host,
99
+ urlPath: urlObj.Path,
100
+ urlPathGroup: (0, _browserCore.replaceNumberCharByPath)(urlObj.Path),
101
+ urlQuery: (0, _browserCore.getQueryParamsFromUrl)(request.url),
102
+ deliveryType: matchingTiming && (0, _resourceUtils.computeResourceEntryDeliveryType)(matchingTiming),
103
+ protocol: matchingTiming && (0, _resourceUtils.computeResourceEntryProtocol)(matchingTiming)
104
+ },
105
+ type: _browserCore.RumEventType.RESOURCE
106
+ }, tracingInfo, correspondingTimingOverrides);
107
+ return {
108
+ startTime: startClocks.relative,
109
+ rawRumEvent: resourceEvent,
110
+ domainContext: {
111
+ performanceEntry: matchingTiming,
112
+ xhr: request.xhr,
113
+ requestHeaderContexts: request.requestHeaderContexts,
114
+ response: request.response,
115
+ requestInput: request.input,
116
+ requestInit: request.init,
117
+ error: request.error,
118
+ isAborted: request.isAborted,
119
+ handlingStack: request.handlingStack,
120
+ resourceTrackerId: getResourceTrackerIdFromRequest(request)
121
+ }
122
+ };
123
+ }
124
+ function processResourceEntry(entry, configuration) {
125
+ var startClocks = (0, _browserCore.relativeToClocks)(entry.startTime);
126
+ var tracingInfo = computeResourceEntryTracingInfo(entry);
127
+ var type = (0, _resourceUtils.computeResourceEntryType)(entry);
128
+ var entryMetrics = computeResourceEntryMetrics(entry);
129
+ var urlObj = (0, _browserCore.urlParse)(entry.name).getParse();
130
+ var resourceEvent = (0, _browserCore.extend2Lev)({
131
+ date: startClocks.timeStamp,
132
+ resource: {
133
+ id: (0, _browserCore.UUID)(),
134
+ type: type,
135
+ url: entry.name,
136
+ urlHost: urlObj.Host,
137
+ urlPath: urlObj.Path,
138
+ urlPathGroup: (0, _browserCore.replaceNumberCharByPath)(urlObj.Path),
139
+ urlQuery: (0, _browserCore.getQueryParamsFromUrl)(entry.name),
140
+ method: 'GET',
141
+ status: discardZeroStatus(entry.responseStatus),
142
+ statusGroup: (0, _browserCore.getStatusGroup)(entry.responseStatus),
143
+ deliveryType: (0, _resourceUtils.computeResourceEntryDeliveryType)(entry),
144
+ protocol: (0, _resourceUtils.computeResourceEntryProtocol)(entry)
145
+ },
146
+ type: _browserCore.RumEventType.RESOURCE
147
+ }, tracingInfo, entryMetrics);
148
+ return {
149
+ startTime: startClocks.relative,
150
+ rawRumEvent: resourceEvent,
151
+ domainContext: {
152
+ performanceEntry: entry
153
+ }
154
+ };
155
+ }
156
+ function processCustomResource(resource) {
157
+ var resourceEvent = {
158
+ date: resource.startClocks.timeStamp,
159
+ resource: {
160
+ id: (0, _browserCore.UUID)(),
161
+ type: resource.type
162
+ },
163
+ type: _browserCore.RumEventType.RESOURCE
164
+ };
165
+ return {
166
+ customerContext: resource.context,
167
+ startTime: resource.startClocks.relative,
168
+ rawRumEvent: resourceEvent,
169
+ domainContext: {
170
+ resource: resource
171
+ }
172
+ };
173
+ }
174
+ function computeResourceEntryMetrics(entry) {
175
+ return {
176
+ resource: (0, _browserCore.extend2Lev)({}, {
177
+ duration: (0, _resourceUtils.computeResourceEntryDuration)(entry)
178
+ }, (0, _resourceUtils.computeResourceEntrySize)(entry), (0, _resourceUtils.computePerformanceResourceDetails)(entry))
179
+ };
180
+ }
181
+ function computeRequestTracingInfo(request) {
182
+ var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;
183
+ if (!hasBeenTraced) {
184
+ return undefined;
185
+ }
186
+ return {
187
+ _gc: {
188
+ spanId: request.spanId,
189
+ traceId: request.traceId
190
+ },
191
+ resource: {
192
+ id: (0, _browserCore.UUID)()
193
+ }
194
+ };
195
+ }
196
+ function computeRequestDuration(pageStateHistory, startClocks, duration) {
197
+ return !pageStateHistory.wasInPageStateDuringPeriod(_pageStateHistory.PageState.FROZEN, startClocks.relative, duration) ? (0, _browserCore.toServerDuration)(duration) : undefined;
198
+ }
199
+ function computeResourceEntryTracingInfo(entry) {
200
+ return entry.traceId ? {
201
+ _gc: {
202
+ traceId: entry.traceId
203
+ }
204
+ } : undefined;
205
+ }
206
+ /**
207
+ * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it
208
+ * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes
209
+ */
210
+ function discardZeroStatus(statusCode) {
211
+ return statusCode === 0 ? undefined : statusCode;
212
+ }
213
+ function getResourceTrackerIdFromRequest(request) {
214
+ return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id');
215
+ }
216
+ function getHeaderValue(headers, key) {
217
+ if (!headers || !key) {
218
+ return undefined;
219
+ }
220
+ var normalizedKey = String(key).toLowerCase();
221
+ if (typeof headers.get === 'function') {
222
+ return headers.get(key) || headers.get(normalizedKey) || undefined;
223
+ }
224
+ if (Array.isArray(headers)) {
225
+ for (var i = 0; i < headers.length; i += 1) {
226
+ var headerEntry = headers[i];
227
+ if (Array.isArray(headerEntry) && String(headerEntry[0]).toLowerCase() === normalizedKey) {
228
+ return headerEntry[1];
229
+ }
230
+ }
231
+ return undefined;
232
+ }
233
+ for (var headerKey in headers) {
234
+ if (String(headerKey).toLowerCase() === normalizedKey) {
235
+ return headers[headerKey];
236
+ }
237
+ }
238
+ }
239
+ //# sourceMappingURL=resourceCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceCollection.js","names":["_browserCore","require","_matchRequestResourceEntry","_resourceUtils","_pageStateHistory","_performanceObservable","_retrieveInitialDocumentResourceTiming","startResourceCollection","lifeCycle","configuration","pageStateHistory","taskQueue","retrieveInitialDocumentResourceTimingImpl","resourceTrackerManager","undefined","createTaskQueue","retrieveInitialDocumentResourceTiming","setFlushTrackedResource","rawEvent","notify","LifeCycleEventType","RAW_RUM_EVENT_COLLECTED","requestResourceEntryMatcher","createRequestResourceEntryMatcher","subscribe","REQUEST_COMPLETED","request","handleResource","processRequest","performanceResourceSubscription","createPerformanceObservable","type","RumPerformanceEntryType","RESOURCE","buffered","entries","loop","entry","isResourceEntryRequestType","isResourceUrlLimit","name","resourceUrlLimit","processResourceEntry","_i","entries_1","length","timing","computeRawEvent","push","domainContext","resourceTrackerId","trackRequestResource","error","addTelemetryError","stop","unsubscribe","addResource","resource","savedCommonContext","extend","processCustomResource","matchingTiming","matchRequestResourceEntry","startClocks","relativeToClocks","startTime","tracingInfo","computeRequestTracingInfo","RequestType","XHR","ResourceType","FETCH","correspondingTimingOverrides","computeResourceEntryMetrics","duration","computeRequestDuration","urlObj","urlParse","url","getParse","resourceEvent","extend2Lev","date","timeStamp","id","UUID","method","status","statusGroup","getStatusGroup","isLongDataUrl","sanitizeDataUrl","urlHost","Host","urlPath","Path","urlPathGroup","replaceNumberCharByPath","urlQuery","getQueryParamsFromUrl","deliveryType","computeResourceEntryDeliveryType","protocol","computeResourceEntryProtocol","RumEventType","relative","rawRumEvent","performanceEntry","xhr","requestHeaderContexts","response","requestInput","input","requestInit","init","isAborted","handlingStack","getResourceTrackerIdFromRequest","computeResourceEntryTracingInfo","computeResourceEntryType","entryMetrics","discardZeroStatus","responseStatus","customerContext","context","computeResourceEntryDuration","computeResourceEntrySize","computePerformanceResourceDetails","hasBeenTraced","traceSampled","traceId","spanId","_gc","wasInPageStateDuringPeriod","PageState","FROZEN","toServerDuration","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,237 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createResourceTrackerManager = createResourceTrackerManager;
7
+ var _browserCore = require("@cloudcare/browser-core");
8
+ 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); }
9
+ var RESOURCE_TRACKER_HEADER = 'x-rum-resource-id';
10
+ var RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000;
11
+ var RESOURCE_TRACKER_RETENTION_MS = 60 * 1000;
12
+ var RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000;
13
+ var DEBUG_CLONE_MAX_DEPTH = 8;
14
+ function createResourceTrackerManager() {
15
+ var trackers = new Map();
16
+ var flushTrackedResource;
17
+ return {
18
+ createTrackerId: function createTrackerId() {
19
+ var trackerId = (0, _browserCore.UUID)();
20
+ getOrCreateTracker(trackerId);
21
+ return trackerId;
22
+ },
23
+ setResourceContext: function setResourceContext(trackerId, context) {
24
+ var tracker = trackers.get(trackerId);
25
+ if (!tracker) {
26
+ return;
27
+ }
28
+ if (isTrackerImmutable(tracker)) {
29
+ return;
30
+ }
31
+ tracker.context = (0, _browserCore.assign)({}, context || {});
32
+ },
33
+ appendResourceContext: function appendResourceContext(trackerId, context) {
34
+ var tracker = trackers.get(trackerId);
35
+ if (!tracker) {
36
+ return;
37
+ }
38
+ if (isTrackerImmutable(tracker)) {
39
+ return;
40
+ }
41
+ tracker.context = (0, _browserCore.assign)(tracker.context, context || {});
42
+ },
43
+ finishResource: function finishResource(trackerId) {
44
+ var tracker = trackers.get(trackerId);
45
+ if (!tracker) {
46
+ return;
47
+ }
48
+ tracker.finished = true;
49
+ if (tracker.status === 'request_collected') {
50
+ flushTracker(tracker, 'flushed');
51
+ } else if (tracker.status === 'created') {
52
+ tracker.status = 'finished';
53
+ }
54
+ },
55
+ getResource: function getResource(trackerId) {
56
+ var tracker = trackers.get(trackerId);
57
+ if (!tracker) {
58
+ return undefined;
59
+ }
60
+ return cloneTrackerSnapshot(tracker);
61
+ },
62
+ trackRequestResource: function trackRequestResource(trackerId, rawEvent) {
63
+ var tracker = trackers.get(trackerId);
64
+ if (!tracker) {
65
+ return false;
66
+ }
67
+ if (tracker.requestHeaderMatched || tracker.flushed) {
68
+ return false;
69
+ }
70
+ clearTrackerTimeout(tracker);
71
+ tracker.requestHeaderMatched = true;
72
+ tracker.rawResourceEvent = rawEvent.rawRumEvent;
73
+ tracker.startTime = rawEvent.startTime;
74
+ tracker.domainContext = rawEvent.domainContext;
75
+ tracker.resource = extractResourceSummary(rawEvent.rawRumEvent);
76
+ tracker.status = 'request_collected';
77
+ if (tracker.finished) {
78
+ flushTracker(tracker, 'flushed');
79
+ } else {
80
+ tracker.timeoutId = setTimeout(function () {
81
+ tracker.timeoutId = undefined;
82
+ if (tracker.status === 'request_collected') {
83
+ flushTracker(tracker, 'timeout_flushed');
84
+ }
85
+ }, RESOURCE_TRACKER_TIMEOUT_MS);
86
+ }
87
+ return true;
88
+ },
89
+ setFlushTrackedResource: function setFlushTrackedResource(handler) {
90
+ flushTrackedResource = handler;
91
+ },
92
+ getTrackerIdFromRequestHeaders: function getTrackerIdFromRequestHeaders(requestHeaders) {
93
+ return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER);
94
+ }
95
+ };
96
+ function getOrCreateTracker(trackerId) {
97
+ var tracker = trackers.get(trackerId);
98
+ if (!tracker) {
99
+ tracker = {
100
+ id: trackerId,
101
+ status: 'created',
102
+ context: {},
103
+ finished: false,
104
+ flushed: false,
105
+ requestHeaderMatched: false
106
+ };
107
+ trackers.set(trackerId, tracker);
108
+ tracker.orphanTimeoutId = setTimeout(function () {
109
+ tracker.status = 'cleared';
110
+ trackers["delete"](tracker.id);
111
+ }, RESOURCE_TRACKER_ORPHAN_TTL_MS);
112
+ }
113
+ return tracker;
114
+ }
115
+ function flushTracker(tracker, status) {
116
+ if (tracker.flushed || !tracker.rawResourceEvent) {
117
+ tracker.status = status;
118
+ return;
119
+ }
120
+ clearTrackerTimeout(tracker);
121
+ tracker.flushed = true;
122
+ tracker.status = status;
123
+ if (!flushTrackedResource) {
124
+ scheduleTrackerClear(tracker);
125
+ return;
126
+ }
127
+ try {
128
+ flushTrackedResource({
129
+ startTime: tracker.startTime,
130
+ rawRumEvent: tracker.rawResourceEvent,
131
+ customerContext: (0, _browserCore.assign)({}, tracker.context),
132
+ domainContext: tracker.domainContext
133
+ });
134
+ } catch (error) {
135
+ (0, _browserCore.addTelemetryError)(error);
136
+ } finally {
137
+ scheduleTrackerClear(tracker);
138
+ }
139
+ }
140
+ function scheduleTrackerClear(tracker) {
141
+ clearTrackerTimeout(tracker);
142
+ tracker.clearTimeoutId = setTimeout(function () {
143
+ tracker.status = 'cleared';
144
+ trackers["delete"](tracker.id);
145
+ }, RESOURCE_TRACKER_RETENTION_MS);
146
+ }
147
+ }
148
+ function clearTrackerTimeout(tracker) {
149
+ if (tracker.timeoutId) {
150
+ clearTimeout(tracker.timeoutId);
151
+ tracker.timeoutId = undefined;
152
+ }
153
+ if (tracker.orphanTimeoutId) {
154
+ clearTimeout(tracker.orphanTimeoutId);
155
+ tracker.orphanTimeoutId = undefined;
156
+ }
157
+ if (tracker.clearTimeoutId) {
158
+ clearTimeout(tracker.clearTimeoutId);
159
+ tracker.clearTimeoutId = undefined;
160
+ }
161
+ }
162
+ function isTrackerImmutable(tracker) {
163
+ return tracker.status === 'flushed' || tracker.status === 'timeout_flushed' || tracker.status === 'cleared';
164
+ }
165
+ function extractResourceSummary(rawRumEvent) {
166
+ var resource = rawRumEvent && rawRumEvent.resource;
167
+ if (!resource) {
168
+ return undefined;
169
+ }
170
+ return {
171
+ type: resource.type,
172
+ url: resource.url,
173
+ method: resource.method,
174
+ status: resource.status
175
+ };
176
+ }
177
+ function cloneTrackerSnapshot(tracker) {
178
+ return {
179
+ trackerId: tracker.id,
180
+ status: tracker.status,
181
+ context: (0, _browserCore.deepClone)(tracker.context),
182
+ resource: tracker.resource ? (0, _browserCore.assign)({}, tracker.resource) : undefined,
183
+ rawRumEvent: tracker.rawResourceEvent ? cloneDebugRawRumEvent(tracker.rawResourceEvent) : undefined
184
+ };
185
+ }
186
+ function cloneDebugRawRumEvent(rawRumEvent) {
187
+ var clonedEvent = {};
188
+ for (var key in rawRumEvent) {
189
+ if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {
190
+ clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH);
191
+ }
192
+ }
193
+ return clonedEvent;
194
+ }
195
+ function cloneDebugObject(value, depth) {
196
+ if (!value || _typeof(value) !== 'object' || depth < 0) {
197
+ return value;
198
+ }
199
+ if (Array.isArray(value)) {
200
+ var clonedArray = [];
201
+ for (var i = 0; i < value.length; i += 1) {
202
+ clonedArray.push(cloneDebugObject(value[i], depth - 1));
203
+ }
204
+ return clonedArray;
205
+ }
206
+ var clonedObject = {};
207
+ for (var key in value) {
208
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
209
+ clonedObject[key] = cloneDebugObject(value[key], depth - 1);
210
+ }
211
+ }
212
+ return clonedObject;
213
+ }
214
+ function getHeaderValue(headers, key) {
215
+ if (!headers || !key) {
216
+ return undefined;
217
+ }
218
+ var normalizedKey = String(key).toLowerCase();
219
+ if (typeof headers.get === 'function') {
220
+ return headers.get(key) || headers.get(normalizedKey) || undefined;
221
+ }
222
+ if (Array.isArray(headers)) {
223
+ for (var i = 0; i < headers.length; i += 1) {
224
+ var entry = headers[i];
225
+ if (Array.isArray(entry) && String(entry[0]).toLowerCase() === normalizedKey) {
226
+ return entry[1];
227
+ }
228
+ }
229
+ return undefined;
230
+ }
231
+ for (var headerKey in headers) {
232
+ if (String(headerKey).toLowerCase() === normalizedKey) {
233
+ return headers[headerKey];
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=resourceTrackerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceTrackerManager.js","names":["_browserCore","require","_typeof","o","Symbol","iterator","constructor","prototype","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","UUID","getOrCreateTracker","setResourceContext","context","tracker","get","isTrackerImmutable","assign","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","addTelemetryError","clearTimeoutId","clearTimeout","type","url","method","deepClone","cloneDebugRawRumEvent","clonedEvent","key","Object","hasOwnProperty","call","cloneDebugObject","value","depth","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":"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","ignoreList":[]}