@depup/datadog__browser-rum 6.31.0-depup.0

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 (688) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/bundle/chunks/profiler-9f1c1103f1ef0aa98257-datadog-rum.js +1 -0
  4. package/bundle/chunks/recorder-926b641c6ef51d09a378-datadog-rum.js +1 -0
  5. package/bundle/datadog-rum.js +1 -0
  6. package/changes.json +5 -0
  7. package/cjs/boot/isBrowserSupported.d.ts +4 -0
  8. package/cjs/boot/isBrowserSupported.js +17 -0
  9. package/cjs/boot/isBrowserSupported.js.map +1 -0
  10. package/cjs/boot/lazyLoadProfiler.d.ts +3 -0
  11. package/cjs/boot/lazyLoadProfiler.js +56 -0
  12. package/cjs/boot/lazyLoadProfiler.js.map +1 -0
  13. package/cjs/boot/lazyLoadRecorder.d.ts +3 -0
  14. package/cjs/boot/lazyLoadRecorder.js +56 -0
  15. package/cjs/boot/lazyLoadRecorder.js.map +1 -0
  16. package/cjs/boot/postStartStrategy.d.ts +33 -0
  17. package/cjs/boot/postStartStrategy.js +98 -0
  18. package/cjs/boot/postStartStrategy.js.map +1 -0
  19. package/cjs/boot/preStartStrategy.d.ts +6 -0
  20. package/cjs/boot/preStartStrategy.js +24 -0
  21. package/cjs/boot/preStartStrategy.js.map +1 -0
  22. package/cjs/boot/profilerApi.d.ts +2 -0
  23. package/cjs/boot/profilerApi.js +52 -0
  24. package/cjs/boot/profilerApi.js.map +1 -0
  25. package/cjs/boot/recorderApi.d.ts +3 -0
  26. package/cjs/boot/recorderApi.js +71 -0
  27. package/cjs/boot/recorderApi.js.map +1 -0
  28. package/cjs/boot/startRecording.d.ts +6 -0
  29. package/cjs/boot/startRecording.js +45 -0
  30. package/cjs/boot/startRecording.js.map +1 -0
  31. package/cjs/domain/deflate/deflateEncoder.d.ts +3 -0
  32. package/cjs/domain/deflate/deflateEncoder.js +110 -0
  33. package/cjs/domain/deflate/deflateEncoder.js.map +1 -0
  34. package/cjs/domain/deflate/deflateWorker.d.ts +29 -0
  35. package/cjs/domain/deflate/deflateWorker.js +105 -0
  36. package/cjs/domain/deflate/deflateWorker.js.map +1 -0
  37. package/cjs/domain/deflate/index.d.ts +3 -0
  38. package/cjs/domain/deflate/index.js +11 -0
  39. package/cjs/domain/deflate/index.js.map +1 -0
  40. package/cjs/domain/getSessionReplayLink.d.ts +2 -0
  41. package/cjs/domain/getSessionReplayLink.js +35 -0
  42. package/cjs/domain/getSessionReplayLink.js.map +1 -0
  43. package/cjs/domain/profiling/actionHistory.d.ts +10 -0
  44. package/cjs/domain/profiling/actionHistory.js +49 -0
  45. package/cjs/domain/profiling/actionHistory.js.map +1 -0
  46. package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
  47. package/cjs/domain/profiling/longTaskHistory.js +28 -0
  48. package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
  49. package/cjs/domain/profiling/profiler.d.ts +7 -0
  50. package/cjs/domain/profiling/profiler.js +267 -0
  51. package/cjs/domain/profiling/profiler.js.map +1 -0
  52. package/cjs/domain/profiling/profilingContext.d.ts +6 -0
  53. package/cjs/domain/profiling/profilingContext.js +31 -0
  54. package/cjs/domain/profiling/profilingContext.js.map +1 -0
  55. package/cjs/domain/profiling/profilingSupported.d.ts +1 -0
  56. package/cjs/domain/profiling/profilingSupported.js +11 -0
  57. package/cjs/domain/profiling/profilingSupported.js.map +1 -0
  58. package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  59. package/cjs/domain/profiling/test-utils/mockedTrace.js +57 -0
  60. package/cjs/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  61. package/cjs/domain/profiling/transport/assembly.d.ts +7 -0
  62. package/cjs/domain/profiling/transport/assembly.js +45 -0
  63. package/cjs/domain/profiling/transport/assembly.js.map +1 -0
  64. package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
  65. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +63 -0
  66. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  67. package/cjs/domain/profiling/types/index.d.ts +2 -0
  68. package/cjs/domain/profiling/types/index.js +3 -0
  69. package/cjs/domain/profiling/types/index.js.map +1 -0
  70. package/cjs/domain/profiling/types/profilerApi.types.d.ts +58 -0
  71. package/cjs/domain/profiling/types/profilerApi.types.js +5 -0
  72. package/cjs/domain/profiling/types/profilerApi.types.js.map +1 -0
  73. package/cjs/domain/profiling/types/rumProfiler.types.d.ts +55 -0
  74. package/cjs/domain/profiling/types/rumProfiler.types.js +3 -0
  75. package/cjs/domain/profiling/types/rumProfiler.types.js.map +1 -0
  76. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  77. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +7 -0
  78. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  79. package/cjs/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  80. package/cjs/domain/profiling/utils/getDefaultViewName.js +14 -0
  81. package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  82. package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
  83. package/cjs/domain/profiling/utils/getNumberOfSamples.js +19 -0
  84. package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  85. package/cjs/domain/profiling/vitalHistory.d.ts +10 -0
  86. package/cjs/domain/profiling/vitalHistory.js +42 -0
  87. package/cjs/domain/profiling/vitalHistory.js.map +1 -0
  88. package/cjs/domain/record/assembly.d.ts +3 -0
  89. package/cjs/domain/record/assembly.js +16 -0
  90. package/cjs/domain/record/assembly.js.map +1 -0
  91. package/cjs/domain/record/elementsScrollPositions.d.ts +10 -0
  92. package/cjs/domain/record/elementsScrollPositions.js +23 -0
  93. package/cjs/domain/record/elementsScrollPositions.js.map +1 -0
  94. package/cjs/domain/record/eventsUtils.d.ts +2 -0
  95. package/cjs/domain/record/eventsUtils.js +15 -0
  96. package/cjs/domain/record/eventsUtils.js.map +1 -0
  97. package/cjs/domain/record/index.d.ts +6 -0
  98. package/cjs/domain/record/index.js +17 -0
  99. package/cjs/domain/record/index.js.map +1 -0
  100. package/cjs/domain/record/internalApi.d.ts +22 -0
  101. package/cjs/domain/record/internalApi.js +55 -0
  102. package/cjs/domain/record/internalApi.js.map +1 -0
  103. package/cjs/domain/record/itemIds.d.ts +40 -0
  104. package/cjs/domain/record/itemIds.js +58 -0
  105. package/cjs/domain/record/itemIds.js.map +1 -0
  106. package/cjs/domain/record/mutationBatch.d.ts +12 -0
  107. package/cjs/domain/record/mutationBatch.js +44 -0
  108. package/cjs/domain/record/mutationBatch.js.map +1 -0
  109. package/cjs/domain/record/record.d.ts +16 -0
  110. package/cjs/domain/record/record.js +88 -0
  111. package/cjs/domain/record/record.js.map +1 -0
  112. package/cjs/domain/record/record.types.d.ts +18 -0
  113. package/cjs/domain/record/record.types.js +3 -0
  114. package/cjs/domain/record/record.types.js.map +1 -0
  115. package/cjs/domain/record/recordingScope.d.ts +24 -0
  116. package/cjs/domain/record/recordingScope.js +29 -0
  117. package/cjs/domain/record/recordingScope.js.map +1 -0
  118. package/cjs/domain/record/serialization/changeEncoder.d.ts +22 -0
  119. package/cjs/domain/record/serialization/changeEncoder.js +59 -0
  120. package/cjs/domain/record/serialization/changeEncoder.js.map +1 -0
  121. package/cjs/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
  122. package/cjs/domain/record/serialization/conversions/changeConverter.js +216 -0
  123. package/cjs/domain/record/serialization/conversions/changeConverter.js.map +1 -0
  124. package/cjs/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
  125. package/cjs/domain/record/serialization/conversions/changeDecoder.js +137 -0
  126. package/cjs/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
  127. package/cjs/domain/record/serialization/conversions/index.d.ts +7 -0
  128. package/cjs/domain/record/serialization/conversions/index.js +11 -0
  129. package/cjs/domain/record/serialization/conversions/index.js.map +1 -0
  130. package/cjs/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
  131. package/cjs/domain/record/serialization/conversions/mutationLog.js +36 -0
  132. package/cjs/domain/record/serialization/conversions/mutationLog.js.map +1 -0
  133. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
  134. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js +53 -0
  135. package/cjs/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
  136. package/cjs/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
  137. package/cjs/domain/record/serialization/conversions/renderOptions.js +12 -0
  138. package/cjs/domain/record/serialization/conversions/renderOptions.js.map +1 -0
  139. package/cjs/domain/record/serialization/conversions/stringTable.d.ts +5 -0
  140. package/cjs/domain/record/serialization/conversions/stringTable.js +22 -0
  141. package/cjs/domain/record/serialization/conversions/stringTable.js.map +1 -0
  142. package/cjs/domain/record/serialization/conversions/vDocument.d.ts +23 -0
  143. package/cjs/domain/record/serialization/conversions/vDocument.js +176 -0
  144. package/cjs/domain/record/serialization/conversions/vDocument.js.map +1 -0
  145. package/cjs/domain/record/serialization/conversions/vNode.d.ts +66 -0
  146. package/cjs/domain/record/serialization/conversions/vNode.js +285 -0
  147. package/cjs/domain/record/serialization/conversions/vNode.js.map +1 -0
  148. package/cjs/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
  149. package/cjs/domain/record/serialization/conversions/vStyleSheet.js +29 -0
  150. package/cjs/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
  151. package/cjs/domain/record/serialization/experimentalFeatures.d.ts +2 -0
  152. package/cjs/domain/record/serialization/experimentalFeatures.js +16 -0
  153. package/cjs/domain/record/serialization/experimentalFeatures.js.map +1 -0
  154. package/cjs/domain/record/serialization/index.d.ts +17 -0
  155. package/cjs/domain/record/serialization/index.js +37 -0
  156. package/cjs/domain/record/serialization/index.js.map +1 -0
  157. package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
  158. package/cjs/domain/record/serialization/insertionCursor.js +68 -0
  159. package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
  160. package/cjs/domain/record/serialization/serialization.types.d.ts +24 -0
  161. package/cjs/domain/record/serialization/serialization.types.js +3 -0
  162. package/cjs/domain/record/serialization/serialization.types.js.map +1 -0
  163. package/cjs/domain/record/serialization/serializationStats.d.ts +12 -0
  164. package/cjs/domain/record/serialization/serializationStats.js +32 -0
  165. package/cjs/domain/record/serialization/serializationStats.js.map +1 -0
  166. package/cjs/domain/record/serialization/serializationTransaction.d.ts +96 -0
  167. package/cjs/domain/record/serialization/serializationTransaction.js +103 -0
  168. package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -0
  169. package/cjs/domain/record/serialization/serializationUtils.d.ts +18 -0
  170. package/cjs/domain/record/serialization/serializationUtils.js +88 -0
  171. package/cjs/domain/record/serialization/serializationUtils.js.map +1 -0
  172. package/cjs/domain/record/serialization/serializeAttribute.d.ts +4 -0
  173. package/cjs/domain/record/serialization/serializeAttribute.js +42 -0
  174. package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -0
  175. package/cjs/domain/record/serialization/serializeAttributes.d.ts +7 -0
  176. package/cjs/domain/record/serialization/serializeAttributes.js +167 -0
  177. package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -0
  178. package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
  179. package/cjs/domain/record/serialization/serializeFullSnapshot.js +34 -0
  180. package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
  181. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
  182. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js +13 -0
  183. package/cjs/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
  184. package/cjs/domain/record/serialization/serializeMutations.d.ts +11 -0
  185. package/cjs/domain/record/serialization/serializeMutations.js +262 -0
  186. package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
  187. package/cjs/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
  188. package/cjs/domain/record/serialization/serializeMutationsAsChange.js +204 -0
  189. package/cjs/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
  190. package/cjs/domain/record/serialization/serializeNode.d.ts +7 -0
  191. package/cjs/domain/record/serialization/serializeNode.js +154 -0
  192. package/cjs/domain/record/serialization/serializeNode.js.map +1 -0
  193. package/cjs/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
  194. package/cjs/domain/record/serialization/serializeNodeAsChange.js +153 -0
  195. package/cjs/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
  196. package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
  197. package/cjs/domain/record/serialization/serializeStyleSheets.js +30 -0
  198. package/cjs/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  199. package/cjs/domain/record/serializationVerifier.d.ts +18 -0
  200. package/cjs/domain/record/serializationVerifier.js +126 -0
  201. package/cjs/domain/record/serializationVerifier.js.map +1 -0
  202. package/cjs/domain/record/shadowRootsController.d.ts +11 -0
  203. package/cjs/domain/record/shadowRootsController.js +45 -0
  204. package/cjs/domain/record/shadowRootsController.js.map +1 -0
  205. package/cjs/domain/record/startFullSnapshots.d.ts +10 -0
  206. package/cjs/domain/record/startFullSnapshots.js +50 -0
  207. package/cjs/domain/record/startFullSnapshots.js.map +1 -0
  208. package/cjs/domain/record/trackers/index.d.ts +12 -0
  209. package/cjs/domain/record/trackers/index.js +27 -0
  210. package/cjs/domain/record/trackers/index.js.map +1 -0
  211. package/cjs/domain/record/trackers/trackFocus.d.ts +5 -0
  212. package/cjs/domain/record/trackers/trackFocus.js +15 -0
  213. package/cjs/domain/record/trackers/trackFocus.js.map +1 -0
  214. package/cjs/domain/record/trackers/trackFrustration.d.ts +6 -0
  215. package/cjs/domain/record/trackers/trackFrustration.js +31 -0
  216. package/cjs/domain/record/trackers/trackFrustration.js.map +1 -0
  217. package/cjs/domain/record/trackers/trackInput.d.ts +4 -0
  218. package/cjs/domain/record/trackers/trackInput.js +104 -0
  219. package/cjs/domain/record/trackers/trackInput.js.map +1 -0
  220. package/cjs/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  221. package/cjs/domain/record/trackers/trackMediaInteraction.js +29 -0
  222. package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  223. package/cjs/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  224. package/cjs/domain/record/trackers/trackMouseInteraction.js +59 -0
  225. package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  226. package/cjs/domain/record/trackers/trackMove.d.ts +9 -0
  227. package/cjs/domain/record/trackers/trackMove.js +55 -0
  228. package/cjs/domain/record/trackers/trackMove.js.map +1 -0
  229. package/cjs/domain/record/trackers/trackMutation.d.ts +13 -0
  230. package/cjs/domain/record/trackers/trackMutation.js +41 -0
  231. package/cjs/domain/record/trackers/trackMutation.js.map +1 -0
  232. package/cjs/domain/record/trackers/trackScroll.d.ts +5 -0
  233. package/cjs/domain/record/trackers/trackScroll.js +48 -0
  234. package/cjs/domain/record/trackers/trackScroll.js.map +1 -0
  235. package/cjs/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  236. package/cjs/domain/record/trackers/trackStyleSheet.js +89 -0
  237. package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -0
  238. package/cjs/domain/record/trackers/trackViewEnd.d.ts +5 -0
  239. package/cjs/domain/record/trackers/trackViewEnd.js +20 -0
  240. package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -0
  241. package/cjs/domain/record/trackers/trackViewportResize.d.ts +6 -0
  242. package/cjs/domain/record/trackers/trackViewportResize.js +46 -0
  243. package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -0
  244. package/cjs/domain/record/trackers/tracker.types.d.ts +3 -0
  245. package/cjs/domain/record/trackers/tracker.types.js +3 -0
  246. package/cjs/domain/record/trackers/tracker.types.js.map +1 -0
  247. package/cjs/domain/record/viewports.d.ts +20 -0
  248. package/cjs/domain/record/viewports.js +60 -0
  249. package/cjs/domain/record/viewports.js.map +1 -0
  250. package/cjs/domain/replayStats.d.ts +8 -0
  251. package/cjs/domain/replayStats.js +60 -0
  252. package/cjs/domain/replayStats.js.map +1 -0
  253. package/cjs/domain/scriptLoadingError.d.ts +6 -0
  254. package/cjs/domain/scriptLoadingError.js +26 -0
  255. package/cjs/domain/scriptLoadingError.js.map +1 -0
  256. package/cjs/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  257. package/cjs/domain/segmentCollection/buildReplayPayload.js +26 -0
  258. package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  259. package/cjs/domain/segmentCollection/index.d.ts +4 -0
  260. package/cjs/domain/segmentCollection/index.js +11 -0
  261. package/cjs/domain/segmentCollection/index.js.map +1 -0
  262. package/cjs/domain/segmentCollection/segment.d.ts +16 -0
  263. package/cjs/domain/segmentCollection/segment.js +82 -0
  264. package/cjs/domain/segmentCollection/segment.js.map +1 -0
  265. package/cjs/domain/segmentCollection/segmentCollection.d.ts +31 -0
  266. package/cjs/domain/segmentCollection/segmentCollection.js +113 -0
  267. package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -0
  268. package/cjs/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  269. package/cjs/domain/segmentCollection/startSegmentTelemetry.js +52 -0
  270. package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  271. package/cjs/domain/startRecordBridge.d.ts +5 -0
  272. package/cjs/domain/startRecordBridge.js +17 -0
  273. package/cjs/domain/startRecordBridge.js.map +1 -0
  274. package/cjs/domain/startRecorderInitTelemetry.d.ts +15 -0
  275. package/cjs/domain/startRecorderInitTelemetry.js +55 -0
  276. package/cjs/domain/startRecorderInitTelemetry.js.map +1 -0
  277. package/cjs/entries/internal.d.ts +11 -0
  278. package/cjs/entries/internal.js +28 -0
  279. package/cjs/entries/internal.js.map +1 -0
  280. package/cjs/entries/internalSynthetics.d.ts +2 -0
  281. package/cjs/entries/internalSynthetics.js +27 -0
  282. package/cjs/entries/internalSynthetics.js.map +1 -0
  283. package/cjs/entries/main.d.ts +23 -0
  284. package/cjs/entries/main.js +35 -0
  285. package/cjs/entries/main.js.map +1 -0
  286. package/cjs/types/index.d.ts +3 -0
  287. package/cjs/types/index.js +18 -0
  288. package/cjs/types/index.js.map +1 -0
  289. package/cjs/types/profiling.d.ts +296 -0
  290. package/cjs/types/profiling.js +6 -0
  291. package/cjs/types/profiling.js.map +1 -0
  292. package/cjs/types/sessionReplay.d.ts +934 -0
  293. package/cjs/types/sessionReplay.js +6 -0
  294. package/cjs/types/sessionReplay.js.map +1 -0
  295. package/cjs/types/sessionReplayConstants.d.ts +71 -0
  296. package/cjs/types/sessionReplayConstants.js +67 -0
  297. package/cjs/types/sessionReplayConstants.js.map +1 -0
  298. package/esm/boot/isBrowserSupported.d.ts +4 -0
  299. package/esm/boot/isBrowserSupported.js +14 -0
  300. package/esm/boot/isBrowserSupported.js.map +1 -0
  301. package/esm/boot/lazyLoadProfiler.d.ts +3 -0
  302. package/esm/boot/lazyLoadProfiler.js +19 -0
  303. package/esm/boot/lazyLoadProfiler.js.map +1 -0
  304. package/esm/boot/lazyLoadRecorder.d.ts +3 -0
  305. package/esm/boot/lazyLoadRecorder.js +19 -0
  306. package/esm/boot/lazyLoadRecorder.js.map +1 -0
  307. package/esm/boot/postStartStrategy.d.ts +33 -0
  308. package/esm/boot/postStartStrategy.js +95 -0
  309. package/esm/boot/postStartStrategy.js.map +1 -0
  310. package/esm/boot/preStartStrategy.d.ts +6 -0
  311. package/esm/boot/preStartStrategy.js +21 -0
  312. package/esm/boot/preStartStrategy.js.map +1 -0
  313. package/esm/boot/profilerApi.d.ts +2 -0
  314. package/esm/boot/profilerApi.js +49 -0
  315. package/esm/boot/profilerApi.js.map +1 -0
  316. package/esm/boot/recorderApi.d.ts +3 -0
  317. package/esm/boot/recorderApi.js +68 -0
  318. package/esm/boot/recorderApi.js.map +1 -0
  319. package/esm/boot/startRecording.d.ts +6 -0
  320. package/esm/boot/startRecording.js +42 -0
  321. package/esm/boot/startRecording.js.map +1 -0
  322. package/esm/domain/deflate/deflateEncoder.d.ts +3 -0
  323. package/esm/domain/deflate/deflateEncoder.js +107 -0
  324. package/esm/domain/deflate/deflateEncoder.js.map +1 -0
  325. package/esm/domain/deflate/deflateWorker.d.ts +29 -0
  326. package/esm/domain/deflate/deflateWorker.js +97 -0
  327. package/esm/domain/deflate/deflateWorker.js.map +1 -0
  328. package/esm/domain/deflate/index.d.ts +3 -0
  329. package/esm/domain/deflate/index.js +3 -0
  330. package/esm/domain/deflate/index.js.map +1 -0
  331. package/esm/domain/getSessionReplayLink.d.ts +2 -0
  332. package/esm/domain/getSessionReplayLink.js +32 -0
  333. package/esm/domain/getSessionReplayLink.js.map +1 -0
  334. package/esm/domain/profiling/actionHistory.d.ts +10 -0
  335. package/esm/domain/profiling/actionHistory.js +45 -0
  336. package/esm/domain/profiling/actionHistory.js.map +1 -0
  337. package/esm/domain/profiling/longTaskHistory.d.ts +11 -0
  338. package/esm/domain/profiling/longTaskHistory.js +24 -0
  339. package/esm/domain/profiling/longTaskHistory.js.map +1 -0
  340. package/esm/domain/profiling/profiler.d.ts +7 -0
  341. package/esm/domain/profiling/profiler.js +263 -0
  342. package/esm/domain/profiling/profiler.js.map +1 -0
  343. package/esm/domain/profiling/profilingContext.d.ts +6 -0
  344. package/esm/domain/profiling/profilingContext.js +28 -0
  345. package/esm/domain/profiling/profilingContext.js.map +1 -0
  346. package/esm/domain/profiling/profilingSupported.d.ts +1 -0
  347. package/esm/domain/profiling/profilingSupported.js +8 -0
  348. package/esm/domain/profiling/profilingSupported.js.map +1 -0
  349. package/esm/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  350. package/esm/domain/profiling/test-utils/mockedTrace.js +54 -0
  351. package/esm/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  352. package/esm/domain/profiling/transport/assembly.d.ts +7 -0
  353. package/esm/domain/profiling/transport/assembly.js +42 -0
  354. package/esm/domain/profiling/transport/assembly.js.map +1 -0
  355. package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +33 -0
  356. package/esm/domain/profiling/transport/buildProfileEventAttributes.js +60 -0
  357. package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  358. package/esm/domain/profiling/types/index.d.ts +2 -0
  359. package/esm/domain/profiling/types/index.js +2 -0
  360. package/esm/domain/profiling/types/index.js.map +1 -0
  361. package/esm/domain/profiling/types/profilerApi.types.d.ts +58 -0
  362. package/esm/domain/profiling/types/profilerApi.types.js +4 -0
  363. package/esm/domain/profiling/types/profilerApi.types.js.map +1 -0
  364. package/esm/domain/profiling/types/rumProfiler.types.d.ts +55 -0
  365. package/esm/domain/profiling/types/rumProfiler.types.js +2 -0
  366. package/esm/domain/profiling/types/rumProfiler.types.js.map +1 -0
  367. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  368. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +3 -0
  369. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  370. package/esm/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  371. package/esm/domain/profiling/utils/getDefaultViewName.js +11 -0
  372. package/esm/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  373. package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +8 -0
  374. package/esm/domain/profiling/utils/getNumberOfSamples.js +16 -0
  375. package/esm/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  376. package/esm/domain/profiling/vitalHistory.d.ts +10 -0
  377. package/esm/domain/profiling/vitalHistory.js +38 -0
  378. package/esm/domain/profiling/vitalHistory.js.map +1 -0
  379. package/esm/domain/record/assembly.d.ts +3 -0
  380. package/esm/domain/record/assembly.js +13 -0
  381. package/esm/domain/record/assembly.js.map +1 -0
  382. package/esm/domain/record/elementsScrollPositions.d.ts +10 -0
  383. package/esm/domain/record/elementsScrollPositions.js +20 -0
  384. package/esm/domain/record/elementsScrollPositions.js.map +1 -0
  385. package/esm/domain/record/eventsUtils.d.ts +2 -0
  386. package/esm/domain/record/eventsUtils.js +11 -0
  387. package/esm/domain/record/eventsUtils.js.map +1 -0
  388. package/esm/domain/record/index.d.ts +6 -0
  389. package/esm/domain/record/index.js +5 -0
  390. package/esm/domain/record/index.js.map +1 -0
  391. package/esm/domain/record/internalApi.d.ts +22 -0
  392. package/esm/domain/record/internalApi.js +51 -0
  393. package/esm/domain/record/internalApi.js.map +1 -0
  394. package/esm/domain/record/itemIds.d.ts +40 -0
  395. package/esm/domain/record/itemIds.js +52 -0
  396. package/esm/domain/record/itemIds.js.map +1 -0
  397. package/esm/domain/record/mutationBatch.d.ts +12 -0
  398. package/esm/domain/record/mutationBatch.js +40 -0
  399. package/esm/domain/record/mutationBatch.js.map +1 -0
  400. package/esm/domain/record/record.d.ts +16 -0
  401. package/esm/domain/record/record.js +52 -0
  402. package/esm/domain/record/record.js.map +1 -0
  403. package/esm/domain/record/record.types.d.ts +18 -0
  404. package/esm/domain/record/record.types.js +2 -0
  405. package/esm/domain/record/record.types.js.map +1 -0
  406. package/esm/domain/record/recordingScope.d.ts +24 -0
  407. package/esm/domain/record/recordingScope.js +26 -0
  408. package/esm/domain/record/recordingScope.js.map +1 -0
  409. package/esm/domain/record/serialization/changeEncoder.d.ts +22 -0
  410. package/esm/domain/record/serialization/changeEncoder.js +56 -0
  411. package/esm/domain/record/serialization/changeEncoder.js.map +1 -0
  412. package/esm/domain/record/serialization/conversions/changeConverter.d.ts +10 -0
  413. package/esm/domain/record/serialization/conversions/changeConverter.js +213 -0
  414. package/esm/domain/record/serialization/conversions/changeConverter.js.map +1 -0
  415. package/esm/domain/record/serialization/conversions/changeDecoder.d.ts +16 -0
  416. package/esm/domain/record/serialization/conversions/changeDecoder.js +134 -0
  417. package/esm/domain/record/serialization/conversions/changeDecoder.js.map +1 -0
  418. package/esm/domain/record/serialization/conversions/index.d.ts +7 -0
  419. package/esm/domain/record/serialization/conversions/index.js +4 -0
  420. package/esm/domain/record/serialization/conversions/index.js.map +1 -0
  421. package/esm/domain/record/serialization/conversions/mutationLog.d.ts +15 -0
  422. package/esm/domain/record/serialization/conversions/mutationLog.js +33 -0
  423. package/esm/domain/record/serialization/conversions/mutationLog.js.map +1 -0
  424. package/esm/domain/record/serialization/conversions/nodeIdRemapper.d.ts +10 -0
  425. package/esm/domain/record/serialization/conversions/nodeIdRemapper.js +49 -0
  426. package/esm/domain/record/serialization/conversions/nodeIdRemapper.js.map +1 -0
  427. package/esm/domain/record/serialization/conversions/renderOptions.d.ts +6 -0
  428. package/esm/domain/record/serialization/conversions/renderOptions.js +9 -0
  429. package/esm/domain/record/serialization/conversions/renderOptions.js.map +1 -0
  430. package/esm/domain/record/serialization/conversions/stringTable.d.ts +5 -0
  431. package/esm/domain/record/serialization/conversions/stringTable.js +19 -0
  432. package/esm/domain/record/serialization/conversions/stringTable.js.map +1 -0
  433. package/esm/domain/record/serialization/conversions/vDocument.d.ts +23 -0
  434. package/esm/domain/record/serialization/conversions/vDocument.js +173 -0
  435. package/esm/domain/record/serialization/conversions/vDocument.js.map +1 -0
  436. package/esm/domain/record/serialization/conversions/vNode.d.ts +66 -0
  437. package/esm/domain/record/serialization/conversions/vNode.js +282 -0
  438. package/esm/domain/record/serialization/conversions/vNode.js.map +1 -0
  439. package/esm/domain/record/serialization/conversions/vStyleSheet.d.ts +16 -0
  440. package/esm/domain/record/serialization/conversions/vStyleSheet.js +26 -0
  441. package/esm/domain/record/serialization/conversions/vStyleSheet.js.map +1 -0
  442. package/esm/domain/record/serialization/experimentalFeatures.d.ts +2 -0
  443. package/esm/domain/record/serialization/experimentalFeatures.js +12 -0
  444. package/esm/domain/record/serialization/experimentalFeatures.js.map +1 -0
  445. package/esm/domain/record/serialization/index.d.ts +17 -0
  446. package/esm/domain/record/serialization/index.js +14 -0
  447. package/esm/domain/record/serialization/index.js.map +1 -0
  448. package/esm/domain/record/serialization/insertionCursor.d.ts +57 -0
  449. package/esm/domain/record/serialization/insertionCursor.js +64 -0
  450. package/esm/domain/record/serialization/insertionCursor.js.map +1 -0
  451. package/esm/domain/record/serialization/serialization.types.d.ts +24 -0
  452. package/esm/domain/record/serialization/serialization.types.js +2 -0
  453. package/esm/domain/record/serialization/serialization.types.js.map +1 -0
  454. package/esm/domain/record/serialization/serializationStats.d.ts +12 -0
  455. package/esm/domain/record/serialization/serializationStats.js +27 -0
  456. package/esm/domain/record/serialization/serializationStats.js.map +1 -0
  457. package/esm/domain/record/serialization/serializationTransaction.d.ts +96 -0
  458. package/esm/domain/record/serialization/serializationTransaction.js +99 -0
  459. package/esm/domain/record/serialization/serializationTransaction.js.map +1 -0
  460. package/esm/domain/record/serialization/serializationUtils.d.ts +18 -0
  461. package/esm/domain/record/serialization/serializationUtils.js +80 -0
  462. package/esm/domain/record/serialization/serializationUtils.js.map +1 -0
  463. package/esm/domain/record/serialization/serializeAttribute.d.ts +4 -0
  464. package/esm/domain/record/serialization/serializeAttribute.js +38 -0
  465. package/esm/domain/record/serialization/serializeAttribute.js.map +1 -0
  466. package/esm/domain/record/serialization/serializeAttributes.d.ts +7 -0
  467. package/esm/domain/record/serialization/serializeAttributes.js +161 -0
  468. package/esm/domain/record/serialization/serializeAttributes.js.map +1 -0
  469. package/esm/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
  470. package/esm/domain/record/serialization/serializeFullSnapshot.js +31 -0
  471. package/esm/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
  472. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.d.ts +5 -0
  473. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js +10 -0
  474. package/esm/domain/record/serialization/serializeFullSnapshotAsChange.js.map +1 -0
  475. package/esm/domain/record/serialization/serializeMutations.d.ts +11 -0
  476. package/esm/domain/record/serialization/serializeMutations.js +257 -0
  477. package/esm/domain/record/serialization/serializeMutations.js.map +1 -0
  478. package/esm/domain/record/serialization/serializeMutationsAsChange.d.ts +5 -0
  479. package/esm/domain/record/serialization/serializeMutationsAsChange.js +201 -0
  480. package/esm/domain/record/serialization/serializeMutationsAsChange.js.map +1 -0
  481. package/esm/domain/record/serialization/serializeNode.d.ts +7 -0
  482. package/esm/domain/record/serialization/serializeNode.js +149 -0
  483. package/esm/domain/record/serialization/serializeNode.js.map +1 -0
  484. package/esm/domain/record/serialization/serializeNodeAsChange.d.ts +4 -0
  485. package/esm/domain/record/serialization/serializeNodeAsChange.js +150 -0
  486. package/esm/domain/record/serialization/serializeNodeAsChange.js.map +1 -0
  487. package/esm/domain/record/serialization/serializeStyleSheets.d.ts +3 -0
  488. package/esm/domain/record/serialization/serializeStyleSheets.js +27 -0
  489. package/esm/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  490. package/esm/domain/record/serializationVerifier.d.ts +18 -0
  491. package/esm/domain/record/serializationVerifier.js +123 -0
  492. package/esm/domain/record/serializationVerifier.js.map +1 -0
  493. package/esm/domain/record/shadowRootsController.d.ts +11 -0
  494. package/esm/domain/record/shadowRootsController.js +41 -0
  495. package/esm/domain/record/shadowRootsController.js.map +1 -0
  496. package/esm/domain/record/startFullSnapshots.d.ts +10 -0
  497. package/esm/domain/record/startFullSnapshots.js +46 -0
  498. package/esm/domain/record/startFullSnapshots.js.map +1 -0
  499. package/esm/domain/record/trackers/index.d.ts +12 -0
  500. package/esm/domain/record/trackers/index.js +12 -0
  501. package/esm/domain/record/trackers/index.js.map +1 -0
  502. package/esm/domain/record/trackers/trackFocus.d.ts +5 -0
  503. package/esm/domain/record/trackers/trackFocus.js +12 -0
  504. package/esm/domain/record/trackers/trackFocus.js.map +1 -0
  505. package/esm/domain/record/trackers/trackFrustration.d.ts +6 -0
  506. package/esm/domain/record/trackers/trackFrustration.js +28 -0
  507. package/esm/domain/record/trackers/trackFrustration.js.map +1 -0
  508. package/esm/domain/record/trackers/trackInput.d.ts +4 -0
  509. package/esm/domain/record/trackers/trackInput.js +101 -0
  510. package/esm/domain/record/trackers/trackInput.js.map +1 -0
  511. package/esm/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  512. package/esm/domain/record/trackers/trackMediaInteraction.js +26 -0
  513. package/esm/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  514. package/esm/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  515. package/esm/domain/record/trackers/trackMouseInteraction.js +56 -0
  516. package/esm/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  517. package/esm/domain/record/trackers/trackMove.d.ts +9 -0
  518. package/esm/domain/record/trackers/trackMove.js +51 -0
  519. package/esm/domain/record/trackers/trackMove.js.map +1 -0
  520. package/esm/domain/record/trackers/trackMutation.d.ts +13 -0
  521. package/esm/domain/record/trackers/trackMutation.js +38 -0
  522. package/esm/domain/record/trackers/trackMutation.js.map +1 -0
  523. package/esm/domain/record/trackers/trackScroll.d.ts +5 -0
  524. package/esm/domain/record/trackers/trackScroll.js +45 -0
  525. package/esm/domain/record/trackers/trackScroll.js.map +1 -0
  526. package/esm/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  527. package/esm/domain/record/trackers/trackStyleSheet.js +85 -0
  528. package/esm/domain/record/trackers/trackStyleSheet.js.map +1 -0
  529. package/esm/domain/record/trackers/trackViewEnd.d.ts +5 -0
  530. package/esm/domain/record/trackers/trackViewEnd.js +17 -0
  531. package/esm/domain/record/trackers/trackViewEnd.js.map +1 -0
  532. package/esm/domain/record/trackers/trackViewportResize.d.ts +6 -0
  533. package/esm/domain/record/trackers/trackViewportResize.js +42 -0
  534. package/esm/domain/record/trackers/trackViewportResize.js.map +1 -0
  535. package/esm/domain/record/trackers/tracker.types.d.ts +3 -0
  536. package/esm/domain/record/trackers/tracker.types.js +2 -0
  537. package/esm/domain/record/trackers/tracker.types.js.map +1 -0
  538. package/esm/domain/record/viewports.d.ts +20 -0
  539. package/esm/domain/record/viewports.js +55 -0
  540. package/esm/domain/record/viewports.js.map +1 -0
  541. package/esm/domain/replayStats.d.ts +8 -0
  542. package/esm/domain/replayStats.js +51 -0
  543. package/esm/domain/replayStats.js.map +1 -0
  544. package/esm/domain/scriptLoadingError.d.ts +6 -0
  545. package/esm/domain/scriptLoadingError.js +23 -0
  546. package/esm/domain/scriptLoadingError.js.map +1 -0
  547. package/esm/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  548. package/esm/domain/segmentCollection/buildReplayPayload.js +23 -0
  549. package/esm/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  550. package/esm/domain/segmentCollection/index.d.ts +4 -0
  551. package/esm/domain/segmentCollection/index.js +4 -0
  552. package/esm/domain/segmentCollection/index.js.map +1 -0
  553. package/esm/domain/segmentCollection/segment.d.ts +16 -0
  554. package/esm/domain/segmentCollection/segment.js +46 -0
  555. package/esm/domain/segmentCollection/segment.js.map +1 -0
  556. package/esm/domain/segmentCollection/segmentCollection.d.ts +31 -0
  557. package/esm/domain/segmentCollection/segmentCollection.js +106 -0
  558. package/esm/domain/segmentCollection/segmentCollection.js.map +1 -0
  559. package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  560. package/esm/domain/segmentCollection/startSegmentTelemetry.js +49 -0
  561. package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  562. package/esm/domain/startRecordBridge.d.ts +5 -0
  563. package/esm/domain/startRecordBridge.js +14 -0
  564. package/esm/domain/startRecordBridge.js.map +1 -0
  565. package/esm/domain/startRecorderInitTelemetry.d.ts +15 -0
  566. package/esm/domain/startRecorderInitTelemetry.js +52 -0
  567. package/esm/domain/startRecorderInitTelemetry.js.map +1 -0
  568. package/esm/entries/internal.d.ts +11 -0
  569. package/esm/entries/internal.js +4 -0
  570. package/esm/entries/internal.js.map +1 -0
  571. package/esm/entries/internalSynthetics.d.ts +2 -0
  572. package/esm/entries/internalSynthetics.js +23 -0
  573. package/esm/entries/internalSynthetics.js.map +1 -0
  574. package/esm/entries/main.d.ts +23 -0
  575. package/esm/entries/main.js +31 -0
  576. package/esm/entries/main.js.map +1 -0
  577. package/esm/types/index.d.ts +3 -0
  578. package/esm/types/index.js +2 -0
  579. package/esm/types/index.js.map +1 -0
  580. package/esm/types/profiling.d.ts +296 -0
  581. package/esm/types/profiling.js +5 -0
  582. package/esm/types/profiling.js.map +1 -0
  583. package/esm/types/sessionReplay.d.ts +934 -0
  584. package/esm/types/sessionReplay.js +5 -0
  585. package/esm/types/sessionReplay.js.map +1 -0
  586. package/esm/types/sessionReplayConstants.d.ts +71 -0
  587. package/esm/types/sessionReplayConstants.js +64 -0
  588. package/esm/types/sessionReplayConstants.js.map +1 -0
  589. package/internal/package.json +6 -0
  590. package/internal-synthetics/package.json +6 -0
  591. package/package.json +52 -0
  592. package/src/boot/isBrowserSupported.ts +14 -0
  593. package/src/boot/lazyLoadProfiler.ts +20 -0
  594. package/src/boot/lazyLoadRecorder.ts +20 -0
  595. package/src/boot/postStartStrategy.ts +176 -0
  596. package/src/boot/preStartStrategy.ts +34 -0
  597. package/src/boot/profilerApi.ts +82 -0
  598. package/src/boot/recorderApi.ts +113 -0
  599. package/src/boot/startRecording.ts +70 -0
  600. package/src/domain/deflate/deflateEncoder.ts +144 -0
  601. package/src/domain/deflate/deflateWorker.ts +152 -0
  602. package/src/domain/deflate/index.ts +9 -0
  603. package/src/domain/getSessionReplayLink.ts +40 -0
  604. package/src/domain/profiling/actionHistory.ts +65 -0
  605. package/src/domain/profiling/longTaskHistory.ts +40 -0
  606. package/src/domain/profiling/profiler.ts +366 -0
  607. package/src/domain/profiling/profilingContext.ts +39 -0
  608. package/src/domain/profiling/profilingSupported.ts +10 -0
  609. package/src/domain/profiling/test-utils/mockedTrace.ts +58 -0
  610. package/src/domain/profiling/transport/assembly.ts +63 -0
  611. package/src/domain/profiling/transport/buildProfileEventAttributes.ts +106 -0
  612. package/src/domain/profiling/types/index.ts +2 -0
  613. package/src/domain/profiling/types/profilerApi.types.ts +87 -0
  614. package/src/domain/profiling/types/rumProfiler.types.ts +62 -0
  615. package/src/domain/profiling/utils/getCustomOrDefaultViewName.ts +4 -0
  616. package/src/domain/profiling/utils/getDefaultViewName.ts +12 -0
  617. package/src/domain/profiling/utils/getNumberOfSamples.ts +17 -0
  618. package/src/domain/profiling/vitalHistory.ts +58 -0
  619. package/src/domain/record/assembly.ts +19 -0
  620. package/src/domain/record/elementsScrollPositions.ts +28 -0
  621. package/src/domain/record/eventsUtils.ts +12 -0
  622. package/src/domain/record/index.ts +12 -0
  623. package/src/domain/record/internalApi.ts +84 -0
  624. package/src/domain/record/itemIds.ts +97 -0
  625. package/src/domain/record/mutationBatch.ts +47 -0
  626. package/src/domain/record/record.ts +90 -0
  627. package/src/domain/record/record.types.ts +22 -0
  628. package/src/domain/record/recordingScope.ts +58 -0
  629. package/src/domain/record/serialization/changeEncoder.ts +89 -0
  630. package/src/domain/record/serialization/conversions/changeConverter.ts +277 -0
  631. package/src/domain/record/serialization/conversions/changeDecoder.ts +192 -0
  632. package/src/domain/record/serialization/conversions/index.ts +7 -0
  633. package/src/domain/record/serialization/conversions/mutationLog.ts +56 -0
  634. package/src/domain/record/serialization/conversions/nodeIdRemapper.ts +69 -0
  635. package/src/domain/record/serialization/conversions/renderOptions.ts +14 -0
  636. package/src/domain/record/serialization/conversions/stringTable.ts +25 -0
  637. package/src/domain/record/serialization/conversions/vDocument.ts +239 -0
  638. package/src/domain/record/serialization/conversions/vNode.ts +417 -0
  639. package/src/domain/record/serialization/conversions/vStyleSheet.ts +47 -0
  640. package/src/domain/record/serialization/experimentalFeatures.ts +15 -0
  641. package/src/domain/record/serialization/index.ts +21 -0
  642. package/src/domain/record/serialization/insertionCursor.ts +131 -0
  643. package/src/domain/record/serialization/serialization.types.ts +38 -0
  644. package/src/domain/record/serialization/serializationStats.ts +43 -0
  645. package/src/domain/record/serialization/serializationTransaction.ts +255 -0
  646. package/src/domain/record/serialization/serializationUtils.ts +103 -0
  647. package/src/domain/record/serialization/serializeAttribute.ts +55 -0
  648. package/src/domain/record/serialization/serializeAttributes.ts +194 -0
  649. package/src/domain/record/serialization/serializeFullSnapshot.ts +46 -0
  650. package/src/domain/record/serialization/serializeFullSnapshotAsChange.ts +33 -0
  651. package/src/domain/record/serialization/serializeMutations.ts +395 -0
  652. package/src/domain/record/serialization/serializeMutationsAsChange.ts +298 -0
  653. package/src/domain/record/serialization/serializeNode.ts +229 -0
  654. package/src/domain/record/serialization/serializeNodeAsChange.ts +237 -0
  655. package/src/domain/record/serialization/serializeStyleSheets.ts +36 -0
  656. package/src/domain/record/serializationVerifier.ts +208 -0
  657. package/src/domain/record/shadowRootsController.ts +62 -0
  658. package/src/domain/record/startFullSnapshots.ts +92 -0
  659. package/src/domain/record/trackers/index.ts +12 -0
  660. package/src/domain/record/trackers/trackFocus.ts +16 -0
  661. package/src/domain/record/trackers/trackFrustration.ts +39 -0
  662. package/src/domain/record/trackers/trackInput.ts +128 -0
  663. package/src/domain/record/trackers/trackMediaInteraction.ts +43 -0
  664. package/src/domain/record/trackers/trackMouseInteraction.ts +74 -0
  665. package/src/domain/record/trackers/trackMove.ts +78 -0
  666. package/src/domain/record/trackers/trackMutation.ts +74 -0
  667. package/src/domain/record/trackers/trackScroll.ts +61 -0
  668. package/src/domain/record/trackers/trackStyleSheet.ts +117 -0
  669. package/src/domain/record/trackers/trackViewEnd.ts +27 -0
  670. package/src/domain/record/trackers/trackViewportResize.ts +69 -0
  671. package/src/domain/record/trackers/tracker.types.ts +3 -0
  672. package/src/domain/record/viewports.ts +68 -0
  673. package/src/domain/replayStats.ts +61 -0
  674. package/src/domain/scriptLoadingError.ts +36 -0
  675. package/src/domain/segmentCollection/buildReplayPayload.ts +52 -0
  676. package/src/domain/segmentCollection/index.ts +4 -0
  677. package/src/domain/segmentCollection/segment.ts +79 -0
  678. package/src/domain/segmentCollection/segmentCollection.ts +200 -0
  679. package/src/domain/segmentCollection/startSegmentTelemetry.ts +91 -0
  680. package/src/domain/startRecordBridge.ts +17 -0
  681. package/src/domain/startRecorderInitTelemetry.ts +90 -0
  682. package/src/entries/internal.ts +18 -0
  683. package/src/entries/internalSynthetics.ts +24 -0
  684. package/src/entries/main.ts +96 -0
  685. package/src/types/index.ts +3 -0
  686. package/src/types/profiling.ts +298 -0
  687. package/src/types/sessionReplay.ts +990 -0
  688. package/src/types/sessionReplayConstants.ts +130 -0
@@ -0,0 +1,366 @@
1
+ import type { Encoder } from '@datadog/browser-core'
2
+ import {
3
+ addEventListener,
4
+ clearTimeout,
5
+ setTimeout,
6
+ DOM_EVENT,
7
+ monitorError,
8
+ display,
9
+ getGlobalObject,
10
+ clocksOrigin,
11
+ clocksNow,
12
+ elapsed,
13
+ DeflateEncoderStreamId,
14
+ mockable,
15
+ } from '@datadog/browser-core'
16
+
17
+ import type {
18
+ LifeCycle,
19
+ RumConfiguration,
20
+ RumSessionManager,
21
+ TransportPayload,
22
+ ViewHistory,
23
+ } from '@datadog/browser-rum-core'
24
+ import { createFormDataTransport, LifeCycleEventType } from '@datadog/browser-rum-core'
25
+ import type { BrowserProfilerTrace, RumViewEntry } from '../../types'
26
+ import type {
27
+ RumProfilerInstance,
28
+ RumProfilerRunningInstance,
29
+ Profiler,
30
+ RUMProfiler,
31
+ RUMProfilerConfiguration,
32
+ RumProfilerStoppedInstance,
33
+ } from './types'
34
+ import { getNumberOfSamples } from './utils/getNumberOfSamples'
35
+ import type { ProfilingContextManager } from './profilingContext'
36
+ import { getCustomOrDefaultViewName } from './utils/getCustomOrDefaultViewName'
37
+ import { assembleProfilingPayload } from './transport/assembly'
38
+ import { createLongTaskHistory } from './longTaskHistory'
39
+ import { createActionHistory } from './actionHistory'
40
+ import { createVitalHistory } from './vitalHistory'
41
+
42
+ export const DEFAULT_RUM_PROFILER_CONFIGURATION: RUMProfilerConfiguration = {
43
+ sampleIntervalMs: 10, // Sample stack trace every 10ms
44
+ collectIntervalMs: 60000, // Collect data every minute
45
+ minProfileDurationMs: 5000, // Require at least 5 seconds of profile data to reduce noise and cost
46
+ minNumberOfSamples: 50, // Require at least 50 samples (~500 ms) to report a profile to reduce noise and cost
47
+ }
48
+
49
+ export function createRumProfiler(
50
+ configuration: RumConfiguration,
51
+ lifeCycle: LifeCycle,
52
+ session: RumSessionManager,
53
+ profilingContextManager: ProfilingContextManager,
54
+ createEncoder: (streamId: DeflateEncoderStreamId) => Encoder,
55
+ viewHistory: ViewHistory,
56
+ profilerConfiguration: RUMProfilerConfiguration = DEFAULT_RUM_PROFILER_CONFIGURATION
57
+ ): RUMProfiler {
58
+ const transport = createFormDataTransport(configuration, lifeCycle, createEncoder, DeflateEncoderStreamId.PROFILING)
59
+
60
+ let lastViewEntry: RumViewEntry | undefined
61
+
62
+ // Global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)
63
+ const globalCleanupTasks: Array<() => void> = []
64
+ const longTaskHistory = mockable(createLongTaskHistory)(lifeCycle)
65
+ const actionHistory = mockable(createActionHistory)(lifeCycle)
66
+ const vitalHistory = mockable(createVitalHistory)(lifeCycle)
67
+
68
+ let instance: RumProfilerInstance = { state: 'stopped', stateReason: 'initializing' }
69
+
70
+ // Stops the profiler when session expires
71
+ lifeCycle.subscribe(LifeCycleEventType.SESSION_EXPIRED, () => {
72
+ stopProfiling('session-expired')
73
+ })
74
+
75
+ // Start the profiler again when session is renewed
76
+ lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, () => {
77
+ if (instance.state === 'stopped' && instance.stateReason === 'session-expired') {
78
+ start()
79
+ }
80
+ })
81
+
82
+ // Public API to start the profiler.
83
+ function start(): void {
84
+ if (instance.state === 'running') {
85
+ return
86
+ }
87
+
88
+ const viewEntry = viewHistory.findView()
89
+
90
+ // Add initial view
91
+ // Note: `viewEntry.name` is only filled when users use manual view creation via `startView` method.
92
+ lastViewEntry = viewEntry
93
+ ? {
94
+ startClocks: viewEntry.startClocks,
95
+ viewId: viewEntry.id,
96
+ viewName: getCustomOrDefaultViewName(viewEntry.name, document.location.pathname),
97
+ }
98
+ : undefined
99
+
100
+ // Add global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)
101
+ globalCleanupTasks.push(
102
+ addEventListener(configuration, window, DOM_EVENT.VISIBILITY_CHANGE, handleVisibilityChange).stop,
103
+ addEventListener(configuration, window, DOM_EVENT.BEFORE_UNLOAD, handleBeforeUnload).stop
104
+ )
105
+
106
+ // Start profiler instance
107
+ startNextProfilerInstance()
108
+ }
109
+
110
+ // Public API to manually stop the profiler.
111
+ function stop() {
112
+ stopProfiling('stopped-by-user')
113
+ }
114
+
115
+ function stopProfiling(reason: RumProfilerStoppedInstance['stateReason']) {
116
+ // Stop current profiler instance (data collection happens async in background)
117
+ stopProfilerInstance(reason)
118
+
119
+ // Cleanup global listeners and reset the array to prevent accumulation across start/stop cycles
120
+ globalCleanupTasks.forEach((task) => task())
121
+ globalCleanupTasks.length = 0
122
+
123
+ // Update Profiling status once the Profiler has been stopped.
124
+ profilingContextManager.set({ status: 'stopped', error_reason: undefined })
125
+ }
126
+
127
+ /**
128
+ * Whenever a new Profiler instance is started, we need to add event listeners to surroundings (RUM Events, Long Tasks, etc) to enrich the Profiler data.
129
+ * If the instance is already running, we can keep the same event listeners.
130
+ */
131
+ function addEventListeners(existingInstance: RumProfilerInstance) {
132
+ if (existingInstance.state === 'running') {
133
+ // Instance is already running, so we can keep same event listeners.
134
+ return {
135
+ cleanupTasks: existingInstance.cleanupTasks,
136
+ }
137
+ }
138
+
139
+ // Store clean-up tasks for this instance (tasks to be executed when the Profiler is stopped or paused.)
140
+ const cleanupTasks = []
141
+
142
+ // Whenever the View is updated, we add a views entry to the profiler instance.
143
+ const viewUpdatedSubscription = lifeCycle.subscribe(LifeCycleEventType.VIEW_CREATED, (view) => {
144
+ const viewEntry = {
145
+ viewId: view.id,
146
+ // Note: `viewName` is only filled when users use manual view creation via `startView` method.
147
+ viewName: getCustomOrDefaultViewName(view.name, document.location.pathname),
148
+ startClocks: view.startClocks,
149
+ }
150
+
151
+ collectViewEntry(viewEntry)
152
+
153
+ // Update last view entry
154
+ lastViewEntry = viewEntry
155
+ })
156
+ cleanupTasks.push(viewUpdatedSubscription.unsubscribe)
157
+
158
+ return {
159
+ cleanupTasks,
160
+ }
161
+ }
162
+
163
+ function startNextProfilerInstance(): void {
164
+ // These APIs might be unavailable in some browsers
165
+ const globalThisProfiler: Profiler | undefined = getGlobalObject<any>().Profiler
166
+
167
+ if (!globalThisProfiler) {
168
+ profilingContextManager.set({ status: 'error', error_reason: 'not-supported-by-browser' })
169
+ throw new Error('RUM Profiler is not supported in this browser.')
170
+ }
171
+
172
+ // Collect data from previous running instance (fire-and-forget)
173
+ if (instance.state === 'running') {
174
+ collectProfilerInstance(instance)
175
+ }
176
+
177
+ const { cleanupTasks } = addEventListeners(instance)
178
+
179
+ let profiler: Profiler
180
+ try {
181
+ // We have to create new Profiler each time we start a new instance
182
+ profiler = new globalThisProfiler({
183
+ sampleInterval: profilerConfiguration.sampleIntervalMs,
184
+ // Keep buffer size at 1.5 times of minimum required to collect data for a profiling instance
185
+ maxBufferSize: Math.round(
186
+ (profilerConfiguration.collectIntervalMs * 1.5) / profilerConfiguration.sampleIntervalMs
187
+ ),
188
+ })
189
+ } catch (e) {
190
+ if (e instanceof Error && e.message.includes('disabled by Document Policy')) {
191
+ // Missing Response Header (`js-profiling`) that is required to enable the profiler.
192
+ // We should suggest the user to enable the Response Header in their server configuration.
193
+ display.warn(
194
+ '[DD_RUM] Profiler startup failed. Ensure your server includes the `Document-Policy: js-profiling` response header when serving HTML pages.',
195
+ e
196
+ )
197
+ profilingContextManager.set({ status: 'error', error_reason: 'missing-document-policy-header' })
198
+ } else {
199
+ profilingContextManager.set({ status: 'error', error_reason: 'unexpected-exception' })
200
+ }
201
+ return
202
+ }
203
+
204
+ profilingContextManager.set({ status: 'running', error_reason: undefined })
205
+
206
+ // Kick-off the new instance
207
+ instance = {
208
+ state: 'running',
209
+ startClocks: clocksNow(),
210
+ profiler,
211
+ timeoutId: setTimeout(startNextProfilerInstance, profilerConfiguration.collectIntervalMs),
212
+ views: [],
213
+ cleanupTasks,
214
+ longTasks: [],
215
+ }
216
+
217
+ // Add last view entry
218
+ collectViewEntry(lastViewEntry)
219
+
220
+ // Add event handler case we overflow the buffer
221
+ profiler.addEventListener('samplebufferfull', handleSampleBufferFull)
222
+ }
223
+
224
+ function collectProfilerInstance(runningInstance: RumProfilerRunningInstance) {
225
+ // Cleanup instance
226
+ clearTimeout(runningInstance.timeoutId)
227
+ runningInstance.profiler.removeEventListener('samplebufferfull', handleSampleBufferFull)
228
+
229
+ // Store instance data snapshot in local variables to use in async callback
230
+ const { startClocks, views } = runningInstance
231
+
232
+ // Stop current profiler to get trace
233
+ runningInstance.profiler
234
+ .stop()
235
+ .then((trace) => {
236
+ const endClocks = clocksNow()
237
+ const duration = elapsed(startClocks.relative, endClocks.relative)
238
+ const longTasks = longTaskHistory.findAll(startClocks.relative, duration)
239
+ const actions = actionHistory.findAll(startClocks.relative, duration)
240
+ const vitals = vitalHistory.findAll(startClocks.relative, duration)
241
+ const isBelowDurationThreshold = duration < profilerConfiguration.minProfileDurationMs
242
+ const isBelowSampleThreshold = getNumberOfSamples(trace.samples) < profilerConfiguration.minNumberOfSamples
243
+
244
+ if (longTasks.length === 0 && (isBelowDurationThreshold || isBelowSampleThreshold)) {
245
+ // Skip very short profiles to reduce noise and cost, but keep them if they contain long tasks.
246
+ return
247
+ }
248
+
249
+ handleProfilerTrace(
250
+ // Enrich trace with time and instance data
251
+ Object.assign(trace, {
252
+ startClocks,
253
+ endClocks,
254
+ clocksOrigin: clocksOrigin(),
255
+ longTasks,
256
+ actions,
257
+ vitals,
258
+ views,
259
+ sampleInterval: profilerConfiguration.sampleIntervalMs,
260
+ })
261
+ )
262
+ })
263
+ .catch(monitorError)
264
+ }
265
+
266
+ function stopProfilerInstance(stateReason: RumProfilerStoppedInstance['stateReason']) {
267
+ if (instance.state !== 'running') {
268
+ if (
269
+ // If paused, profiler data was already collected during pause, just update state
270
+ instance.state === 'paused' ||
271
+ // Update stateReason when already stopped and the user explicitly stops the profiler,
272
+ // so that SESSION_RENEWED does not override the user's intent.
273
+ (instance.state === 'stopped' && stateReason === 'stopped-by-user')
274
+ ) {
275
+ instance = { state: 'stopped', stateReason }
276
+ }
277
+
278
+ return
279
+ }
280
+
281
+ // Capture the running instance before changing state
282
+ const runningInstance = instance
283
+
284
+ // Update state synchronously so SESSION_RENEWED check works immediately
285
+ instance = { state: 'stopped', stateReason }
286
+
287
+ // Cleanup instance-specific tasks (e.g., view listener)
288
+ runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())
289
+
290
+ // Collect and send profile data in background - doesn't block state transitions
291
+ collectProfilerInstance(runningInstance)
292
+ }
293
+
294
+ function pauseProfilerInstance() {
295
+ if (instance.state !== 'running') {
296
+ return
297
+ }
298
+
299
+ // Capture the running instance before changing state
300
+ const runningInstance = instance
301
+
302
+ // Update state synchronously
303
+ instance = { state: 'paused' }
304
+
305
+ // Cleanup instance-specific tasks
306
+ runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())
307
+
308
+ // Collect and send profile data in background
309
+ collectProfilerInstance(runningInstance)
310
+ }
311
+
312
+ function collectViewEntry(viewEntry: RumViewEntry | undefined): void {
313
+ if (instance.state !== 'running' || !viewEntry) {
314
+ return
315
+ }
316
+
317
+ // Add entry to views
318
+ instance.views.push(viewEntry)
319
+ }
320
+
321
+ function handleProfilerTrace(trace: BrowserProfilerTrace): void {
322
+ // Find current session to assign it to the Profile.
323
+ const sessionId = session.findTrackedSession()?.id
324
+ const payload = assembleProfilingPayload(trace, configuration, sessionId)
325
+
326
+ void transport.send(payload as unknown as TransportPayload)
327
+ }
328
+
329
+ function handleSampleBufferFull(): void {
330
+ startNextProfilerInstance()
331
+ }
332
+
333
+ function handleVisibilityChange(): void {
334
+ if (document.visibilityState === 'hidden' && instance.state === 'running') {
335
+ // Pause when tab is hidden. We use paused state to distinguish between
336
+ // paused by visibility change and stopped by user.
337
+ // If profiler is paused by the visibility change, we should resume when
338
+ // tab becomes visible again. That's not the case when user stops the profiler.
339
+ pauseProfilerInstance()
340
+ } else if (document.visibilityState === 'visible' && instance.state === 'paused') {
341
+ // Resume when tab becomes visible again
342
+ startNextProfilerInstance()
343
+ }
344
+ }
345
+
346
+ function handleBeforeUnload(): void {
347
+ // `unload` can in some cases be triggered while the page is still active (link to a different protocol like mailto:).
348
+ // We can immediately flush (by starting a new profiler instance) to make sure we receive the data, and at the same time keep the profiler active.
349
+ // In case of the regular unload, the profiler will be shut down anyway.
350
+ startNextProfilerInstance()
351
+ }
352
+
353
+ function isStopped() {
354
+ return instance.state === 'stopped'
355
+ }
356
+
357
+ function isRunning() {
358
+ return instance.state === 'running'
359
+ }
360
+
361
+ function isPaused() {
362
+ return instance.state === 'paused'
363
+ }
364
+
365
+ return { start, stop, isStopped, isRunning, isPaused }
366
+ }
@@ -0,0 +1,39 @@
1
+ import { HookNames, SKIPPED } from '@datadog/browser-core'
2
+ import type { Hooks, ProfilingInternalContextSchema } from '@datadog/browser-rum-core'
3
+ import { RumEventType } from '@datadog/browser-rum-core'
4
+
5
+ export interface ProfilingContextManager {
6
+ set: (next: ProfilingInternalContextSchema) => void
7
+ get: () => ProfilingInternalContextSchema | undefined
8
+ }
9
+
10
+ export function startProfilingContext(hooks: Hooks): ProfilingContextManager {
11
+ let currentContext: ProfilingInternalContextSchema = {
12
+ status: 'starting',
13
+ }
14
+
15
+ hooks.register(HookNames.Assemble, ({ eventType }) => {
16
+ if (
17
+ eventType !== RumEventType.VIEW &&
18
+ eventType !== RumEventType.LONG_TASK &&
19
+ eventType !== RumEventType.ACTION &&
20
+ eventType !== RumEventType.VITAL
21
+ ) {
22
+ return SKIPPED
23
+ }
24
+
25
+ return {
26
+ type: eventType,
27
+ _dd: {
28
+ profiling: currentContext,
29
+ },
30
+ }
31
+ })
32
+
33
+ return {
34
+ get: () => currentContext,
35
+ set: (newContext: ProfilingInternalContextSchema) => {
36
+ currentContext = newContext
37
+ },
38
+ }
39
+ }
@@ -0,0 +1,10 @@
1
+ import { getGlobalObject } from '@datadog/browser-core'
2
+ import type { Profiler } from './types'
3
+
4
+ export function isProfilingSupported(): boolean {
5
+ const globalThis = getGlobalObject()
6
+
7
+ // This API might be unavailable in some browsers
8
+ const globalThisProfiler: Profiler | undefined = (globalThis as any).Profiler
9
+ return globalThisProfiler !== undefined
10
+ }
@@ -0,0 +1,58 @@
1
+ import type { ProfilerTrace } from '../types'
2
+
3
+ const generateFiftyRandomSamples = () => {
4
+ const samples = []
5
+ for (let i = 0; i < 50; i++) {
6
+ samples.push({
7
+ timestamp: i,
8
+ stackId: i % 3,
9
+ })
10
+ }
11
+ return samples
12
+ }
13
+
14
+ // eslint-disable-next-line local-rules/disallow-side-effects
15
+ const randomSamples = generateFiftyRandomSamples()
16
+
17
+ export const mockedEmptyTrace: ProfilerTrace = {
18
+ resources: [],
19
+ frames: [],
20
+ stacks: [],
21
+ samples: [],
22
+ }
23
+
24
+ export const mockedTrace: ProfilerTrace = {
25
+ resources: ['resource1', 'resource2', 'resource3'],
26
+ frames: [
27
+ {
28
+ name: 'frame-0',
29
+ line: 1,
30
+ column: 1,
31
+ resourceId: 0,
32
+ },
33
+ {
34
+ name: 'frame-1',
35
+ line: 2,
36
+ column: 2,
37
+ resourceId: 1,
38
+ },
39
+ {
40
+ name: 'frame-2',
41
+ line: 3,
42
+ column: 3,
43
+ resourceId: 2,
44
+ },
45
+ ],
46
+ stacks: [
47
+ {
48
+ frameId: 0,
49
+ },
50
+ {
51
+ frameId: 1,
52
+ },
53
+ {
54
+ frameId: 2,
55
+ },
56
+ ],
57
+ samples: randomSamples,
58
+ }
@@ -0,0 +1,63 @@
1
+ import { buildTags, currentDrift } from '@datadog/browser-core'
2
+ import type { RumConfiguration } from '@datadog/browser-rum-core'
3
+ import type { BrowserProfileEvent, BrowserProfilerTrace } from '../../../types'
4
+ import { buildProfileEventAttributes } from './buildProfileEventAttributes'
5
+
6
+ export interface ProfileEventPayload {
7
+ event: BrowserProfileEvent
8
+ 'wall-time.json': BrowserProfilerTrace
9
+ }
10
+
11
+ export function assembleProfilingPayload(
12
+ profilerTrace: BrowserProfilerTrace,
13
+ configuration: RumConfiguration,
14
+ sessionId: string | undefined
15
+ ): ProfileEventPayload {
16
+ const event = buildProfileEvent(profilerTrace, configuration, sessionId)
17
+
18
+ return {
19
+ event,
20
+ 'wall-time.json': profilerTrace,
21
+ }
22
+ }
23
+
24
+ function buildProfileEvent(
25
+ profilerTrace: BrowserProfilerTrace,
26
+ configuration: RumConfiguration,
27
+ sessionId: string | undefined
28
+ ): ProfileEventPayload['event'] {
29
+ const tags = buildTags(configuration) // TODO: get that from the tagContext hook
30
+ const profileAttributes = buildProfileEventAttributes(profilerTrace, configuration.applicationId, sessionId)
31
+ const profileEventTags = buildProfileEventTags(tags)
32
+
33
+ const profileEvent: ProfileEventPayload['event'] = {
34
+ ...profileAttributes,
35
+ attachments: ['wall-time.json'],
36
+ start: new Date(profilerTrace.startClocks.timeStamp).toISOString(),
37
+ end: new Date(profilerTrace.endClocks.timeStamp).toISOString(),
38
+ family: 'chrome',
39
+ runtime: 'chrome',
40
+ format: 'json',
41
+ version: 4, // Ingestion event version (not the version application tag)
42
+ tags_profiler: profileEventTags.join(','),
43
+ _dd: {
44
+ clock_drift: currentDrift(),
45
+ },
46
+ }
47
+
48
+ return profileEvent
49
+ }
50
+
51
+ /**
52
+ * Builds tags for the Profile Event.
53
+ *
54
+ * @param tags - RUM tags
55
+ * @returns Combined tags for the Profile Event.
56
+ */
57
+ function buildProfileEventTags(tags: string[]): string[] {
58
+ // Tags already contains the common tags for all events. (service, env, version, etc.)
59
+ // Here we are adding some specific-to-profiling tags.
60
+ const profileEventTags = tags.concat(['language:javascript', 'runtime:chrome', 'family:chrome', 'host:browser'])
61
+
62
+ return profileEventTags
63
+ }
@@ -0,0 +1,106 @@
1
+ import type { BrowserProfilerTrace, RumProfilerVitalEntry, RumViewEntry } from '../../../types'
2
+
3
+ export interface ProfileEventAttributes {
4
+ application: {
5
+ id: string
6
+ }
7
+ session?: {
8
+ id: string
9
+ }
10
+ view?: {
11
+ id: string[]
12
+ name: string[]
13
+ }
14
+ long_task?: {
15
+ id: string[]
16
+ }
17
+ action?: {
18
+ id: string[]
19
+ label: string[]
20
+ }
21
+ vital?: {
22
+ id: string[]
23
+ label: string[]
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Builds attributes for the Profile Event.
29
+ *
30
+ * @param profilerTrace - Profiler trace
31
+ * @param applicationId - application id.
32
+ * @param sessionId - session id.
33
+ * @returns Additional attributes.
34
+ */
35
+ export function buildProfileEventAttributes(
36
+ profilerTrace: BrowserProfilerTrace,
37
+ applicationId: string,
38
+ sessionId: string | undefined
39
+ ): ProfileEventAttributes {
40
+ // Extract view ids and names from the profiler trace and add them as attributes of the profile event.
41
+ // This will be used to filter the profiles by @view.id and/or @view.name.
42
+ const { ids, names } = extractViewIdsAndNames(profilerTrace.views)
43
+
44
+ const longTaskIds: string[] = profilerTrace.longTasks.map((longTask) => longTask.id).filter((id) => id !== undefined)
45
+
46
+ const actionIds: string[] =
47
+ profilerTrace.actions?.map((longTask) => longTask.id).filter((id) => id !== undefined) ?? []
48
+
49
+ const { ids: vitalIds, labels: vitalLabels } = extractVitalIdsAndLabels(profilerTrace.vitals)
50
+
51
+ const attributes: ProfileEventAttributes = { application: { id: applicationId } }
52
+
53
+ if (sessionId) {
54
+ attributes.session = { id: sessionId }
55
+ }
56
+ if (ids.length) {
57
+ attributes.view = { id: ids, name: names }
58
+ }
59
+ if (longTaskIds.length) {
60
+ attributes.long_task = { id: longTaskIds }
61
+ }
62
+ if (actionIds.length) {
63
+ attributes.action = { id: actionIds, label: [] }
64
+ }
65
+ if (vitalIds.length) {
66
+ attributes.vital = { id: vitalIds, label: vitalLabels }
67
+ }
68
+ return attributes
69
+ }
70
+
71
+ function extractViewIdsAndNames(views: RumViewEntry[]): { ids: string[]; names: string[] } {
72
+ const result: { ids: string[]; names: string[] } = { ids: [], names: [] }
73
+ for (const view of views) {
74
+ result.ids.push(view.viewId)
75
+
76
+ if (view.viewName) {
77
+ result.names.push(view.viewName)
78
+ }
79
+ }
80
+
81
+ // Remove duplicates
82
+ result.names = Array.from(new Set(result.names))
83
+
84
+ return result
85
+ }
86
+
87
+ function extractVitalIdsAndLabels(vitals?: RumProfilerVitalEntry[]): {
88
+ ids: string[]
89
+ labels: string[]
90
+ } {
91
+ const result: { ids: string[]; labels: string[] } = { ids: [], labels: [] }
92
+
93
+ if (!vitals) {
94
+ return result
95
+ }
96
+
97
+ for (const vital of vitals) {
98
+ result.ids.push(vital.id)
99
+ result.labels.push(vital.label)
100
+ }
101
+
102
+ // Remove duplicates
103
+ result.labels = Array.from(new Set(result.labels))
104
+
105
+ return result
106
+ }
@@ -0,0 +1,2 @@
1
+ export type * from './profilerApi.types'
2
+ export type * from './rumProfiler.types'