@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,87 @@
1
+ // Define types for the new Profiler API
2
+ // https://wicg.github.io/js-self-profiling/
3
+
4
+ export interface ProfilerFrame {
5
+ /** A function instance name. */
6
+ readonly name: string
7
+ /** Index in the trace.resources array. */
8
+ readonly resourceId?: number
9
+ /** 1-based index of the line. */
10
+ readonly line?: number
11
+ /** 1-based index of the column. */
12
+ readonly column?: number
13
+ }
14
+
15
+ export interface ProfilerStack {
16
+ /** Index in the trace.stacks array. */
17
+ readonly parentId?: number
18
+ /** Index in the trace.frames array. */
19
+ readonly frameId: number
20
+ }
21
+
22
+ export interface ProfilerSample {
23
+ /** High resolution time relative to the profiling session's time origin. */
24
+ readonly timestamp: number
25
+ /** Index in the trace.stacks array. */
26
+ readonly stackId?: number
27
+ }
28
+
29
+ export type ProfilerResource = string
30
+
31
+ export interface ProfilerTrace {
32
+ /** An array of profiler resources. */
33
+ readonly resources: ProfilerResource[]
34
+ /** An array of profiler frames. */
35
+ readonly frames: ProfilerFrame[]
36
+ /** An array of profiler stacks. */
37
+ readonly stacks: ProfilerStack[]
38
+ /** An array of profiler samples. */
39
+ readonly samples: ProfilerSample[]
40
+ }
41
+
42
+ export interface ProfilerInitOptions {
43
+ /** Sample interval in ms. */
44
+ readonly sampleInterval: number
45
+ /** Max buffer size in number of samples. */
46
+ readonly maxBufferSize: number
47
+ }
48
+
49
+ export interface Profiler extends EventTarget {
50
+ /** Sample interval in ms. */
51
+ readonly sampleInterval: number
52
+ /** True if profiler is stopped. */
53
+ readonly stopped: boolean
54
+
55
+ // eslint-disable-next-line @typescript-eslint/no-misused-new
56
+ new (options: ProfilerInitOptions): Profiler
57
+ stop(): Promise<ProfilerTrace>
58
+
59
+ addEventListener<K extends keyof ProfilerEventMap>(
60
+ type: K,
61
+ listener: (this: typeof globalThis, ev: ProfilerEventMap[K]) => any,
62
+ options?: boolean | AddEventListenerOptions
63
+ ): void
64
+ addEventListener(
65
+ type: string,
66
+ listener: EventListenerOrEventListenerObject,
67
+ options?: boolean | AddEventListenerOptions
68
+ ): void
69
+ removeEventListener<K extends keyof ProfilerEventMap>(
70
+ type: K,
71
+ listener: (this: typeof globalThis, ev: ProfilerEventMap[K]) => any,
72
+ options?: boolean | EventListenerOptions
73
+ ): void
74
+ removeEventListener(
75
+ type: string,
76
+ listener: EventListenerOrEventListenerObject,
77
+ options?: boolean | EventListenerOptions
78
+ ): void
79
+ }
80
+
81
+ interface ProfilerEventMap {
82
+ samplebufferfull: SampleBufferFullEvent
83
+ }
84
+
85
+ export interface SampleBufferFullEvent extends Event {
86
+ readonly target: Profiler
87
+ }
@@ -0,0 +1,62 @@
1
+ import type { TimeoutId, ClocksState } from '@datadog/browser-core'
2
+ import type { RumViewEntry } from '../../../types'
3
+ import type { LongTaskContext } from '../longTaskHistory'
4
+ import type { Profiler } from './profilerApi.types'
5
+
6
+ /**
7
+ * Additional data recorded during profiling session
8
+ */
9
+ export interface RumProfilerEnrichmentData {
10
+ /** List of detected long tasks */
11
+ readonly longTasks: LongTaskContext[]
12
+ /** List of detected navigation entries */
13
+ readonly views: RumViewEntry[]
14
+ }
15
+
16
+ /**
17
+ * Describes profiler session state when it's stopped
18
+ */
19
+ export interface RumProfilerStoppedInstance {
20
+ readonly state: 'stopped'
21
+ readonly stateReason: 'session-expired' | 'stopped-by-user' | 'initializing'
22
+ }
23
+
24
+ /**
25
+ * Describes profiler session state when it's paused
26
+ * (this happens when user focuses on a different tab)
27
+ */
28
+ export interface RumProfilerPausedInstance {
29
+ readonly state: 'paused'
30
+ }
31
+
32
+ /**
33
+ * Describes profiler session state when it's running
34
+ */
35
+ export interface RumProfilerRunningInstance extends RumProfilerEnrichmentData {
36
+ readonly state: 'running'
37
+ /** Current profiler instance */
38
+ readonly profiler: Profiler
39
+ /** High resolution time when profiler session started */
40
+ readonly startClocks: ClocksState
41
+ /** Timeout id to stop current session */
42
+ readonly timeoutId: TimeoutId
43
+ /** Clean-up tasks to execute after running the Profiler */
44
+ readonly cleanupTasks: Array<() => void>
45
+ }
46
+
47
+ export type RumProfilerInstance = RumProfilerStoppedInstance | RumProfilerPausedInstance | RumProfilerRunningInstance
48
+
49
+ export interface RUMProfiler {
50
+ start: () => void
51
+ stop: () => void
52
+ isStopped: () => boolean
53
+ isRunning: () => boolean
54
+ isPaused: () => boolean
55
+ }
56
+
57
+ export interface RUMProfilerConfiguration {
58
+ sampleIntervalMs: number // Sample stack trace every x milliseconds (defaults to 10ms for Unix, 16ms on Windows)
59
+ collectIntervalMs: number // Interval for collecting RUM Profiles (defaults to 1min)
60
+ minProfileDurationMs: number // Minimum duration of a profile for it be sent (defaults to 5s). Profiles shorter than this duration are discarded.
61
+ minNumberOfSamples: number // Minimum number of samples to be collected before it can be sent (defaults to 50). Profiles with fewer samples are discarded.
62
+ }
@@ -0,0 +1,4 @@
1
+ import { getDefaultViewName } from './getDefaultViewName'
2
+
3
+ export const getCustomOrDefaultViewName = (customViewName: string | undefined, viewPathUrl: string): string =>
4
+ customViewName || getDefaultViewName(viewPathUrl)
@@ -0,0 +1,12 @@
1
+ // This is the regex used to extract the path from the url (from SimpleUrlGroupingProcessor.java)
2
+ // It's a bit different from the one in the java code because we removed the lookbehind unsupported by Safari.
3
+ const PATH_MIXED_ALPHANUMERICS = /\/(?![vV]\d{1,2}\/)([^/\d?]*\d+[^/?]*)/g
4
+
5
+ export function getDefaultViewName(viewPathUrl: string): string {
6
+ if (!viewPathUrl) {
7
+ return '/'
8
+ }
9
+
10
+ // Replace all the mixed alphanumerics with a ?
11
+ return viewPathUrl.replace(PATH_MIXED_ALPHANUMERICS, '/?')
12
+ }
@@ -0,0 +1,17 @@
1
+ import type { ProfilerSample } from '../types'
2
+
3
+ /**
4
+ * Counts number of samples when the thread was not idle (stackId is defined)
5
+ *
6
+ * @param samples - Array of collected samples
7
+ * @returns Number of samples
8
+ */
9
+ export function getNumberOfSamples(samples: ProfilerSample[]): number {
10
+ let numberOfSamples = 0
11
+ for (const sample of samples) {
12
+ if (sample.stackId !== undefined) {
13
+ numberOfSamples++
14
+ }
15
+ }
16
+ return numberOfSamples
17
+ }
@@ -0,0 +1,58 @@
1
+ import type { ClocksState, Duration } from '@datadog/browser-core'
2
+ import { addDuration, createValueHistory, SESSION_TIME_OUT_DELAY } from '@datadog/browser-core'
3
+ import type { LifeCycle } from '@datadog/browser-rum-core'
4
+ import { LifeCycleEventType } from '@datadog/browser-rum-core'
5
+
6
+ export const VITAL_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY
7
+
8
+ export interface VitalContext {
9
+ id: string
10
+ label: string
11
+ duration?: Duration
12
+ startClocks: ClocksState
13
+ }
14
+
15
+ export function createVitalHistory(lifeCycle: LifeCycle) {
16
+ const history = createValueHistory<VitalContext>({
17
+ expireDelay: VITAL_ID_HISTORY_TIME_OUT_DELAY,
18
+ })
19
+
20
+ lifeCycle.subscribe(LifeCycleEventType.VITAL_STARTED, (vitalStart) => {
21
+ history.add(
22
+ {
23
+ id: vitalStart.id,
24
+ startClocks: vitalStart.startClocks,
25
+ duration: undefined,
26
+ label: vitalStart.name,
27
+ },
28
+ vitalStart.startClocks.relative
29
+ )
30
+ })
31
+
32
+ lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
33
+ if (rawRumEvent.type === 'vital') {
34
+ const historyEntry = history
35
+ .getEntries(startClocks.relative)
36
+ .find((entry) => entry.value.id === rawRumEvent.vital.id)
37
+
38
+ if (historyEntry) {
39
+ historyEntry.value.duration = duration!
40
+ historyEntry.close(addDuration(startClocks.relative, duration!))
41
+ } else {
42
+ history
43
+ .add(
44
+ {
45
+ id: rawRumEvent.vital.id,
46
+ startClocks,
47
+ duration,
48
+ label: rawRumEvent.vital.name,
49
+ },
50
+ startClocks.relative
51
+ )
52
+ .close(addDuration(startClocks.relative, duration!))
53
+ }
54
+ }
55
+ })
56
+
57
+ return history
58
+ }
@@ -0,0 +1,19 @@
1
+ import type { TimeStamp } from '@datadog/browser-core'
2
+ import { timeStampNow } from '@datadog/browser-core'
3
+ import type { BrowserIncrementalData, BrowserIncrementalSnapshotRecord } from '../../types'
4
+ import { RecordType } from '../../types'
5
+
6
+ export function assembleIncrementalSnapshot<Data extends BrowserIncrementalData>(
7
+ source: Data['source'],
8
+ data: Omit<Data, 'source'>,
9
+ timestamp: TimeStamp = timeStampNow()
10
+ ): BrowserIncrementalSnapshotRecord {
11
+ return {
12
+ data: {
13
+ source,
14
+ ...data,
15
+ } as Data,
16
+ type: RecordType.IncrementalSnapshot,
17
+ timestamp,
18
+ }
19
+ }
@@ -0,0 +1,28 @@
1
+ export type ElementsScrollPositions = ReturnType<typeof createElementsScrollPositions>
2
+ export interface ScrollPositions {
3
+ scrollLeft: number
4
+ scrollTop: number
5
+ }
6
+
7
+ export function createElementsScrollPositions() {
8
+ const scrollPositionsByElement = new WeakMap<Element, ScrollPositions>()
9
+ return {
10
+ set(element: Element | Document, scrollPositions: ScrollPositions) {
11
+ if (element === document && !document.scrollingElement) {
12
+ // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,
13
+ // in some cases scrolling elements can not be defined, we don't support those for now
14
+ return
15
+ }
16
+ scrollPositionsByElement.set(
17
+ element === document ? document.scrollingElement! : (element as Element),
18
+ scrollPositions
19
+ )
20
+ },
21
+ get(element: Element) {
22
+ return scrollPositionsByElement.get(element)
23
+ },
24
+ has(element: Element) {
25
+ return scrollPositionsByElement.has(element)
26
+ },
27
+ }
28
+ }
@@ -0,0 +1,12 @@
1
+ import { isNodeShadowHost } from '@datadog/browser-rum-core'
2
+
3
+ export function isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {
4
+ return Boolean((event as TouchEvent).changedTouches)
5
+ }
6
+
7
+ export function getEventTarget(event: Event): Node {
8
+ if (event.composed === true && isNodeShadowHost(event.target as Node)) {
9
+ return event.composedPath()[0] as Node
10
+ }
11
+ return event.target as Node
12
+ }
@@ -0,0 +1,12 @@
1
+ export { takeFullSnapshot, takeNodeSnapshot } from './internalApi'
2
+ export { record } from './record'
3
+ export type { SerializationMetric, SerializationStats } from './serialization'
4
+ export {
5
+ aggregateSerializationStats,
6
+ createSerializationStats,
7
+ isFullSnapshotChangeRecordsEnabled,
8
+ isIncrementalSnapshotChangeRecordsEnabled,
9
+ serializeNode,
10
+ } from './serialization'
11
+ export { createElementsScrollPositions } from './elementsScrollPositions'
12
+ export type { ShadowRootsController } from './shadowRootsController'
@@ -0,0 +1,84 @@
1
+ import { noop, timeStampNow } from '@datadog/browser-core'
2
+ import type { RumConfiguration } from '@datadog/browser-rum-core'
3
+ import { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core'
4
+ import type { BrowserRecord, SerializedNodeWithId } from '../../types'
5
+ import { takeFullSnapshot as doTakeFullSnapshot } from './startFullSnapshots'
6
+ import type { ShadowRootsController } from './shadowRootsController'
7
+ import type { RecordingScope } from './recordingScope'
8
+ import { createRecordingScope } from './recordingScope'
9
+ import { createElementsScrollPositions } from './elementsScrollPositions'
10
+ import type { EmitRecordCallback } from './record.types'
11
+ import type { SerializationTransaction } from './serialization'
12
+ import { SerializationKind, serializeInTransaction, serializeNode } from './serialization'
13
+
14
+ /**
15
+ * Take a full snapshot of the document, generating the same records that the browser SDK
16
+ * would generate.
17
+ *
18
+ * This is an internal API function. Be sure to update Datadog-internal callers if you
19
+ * change its signature or behavior.
20
+ */
21
+ export function takeFullSnapshot({
22
+ configuration,
23
+ }: { configuration?: Partial<RumConfiguration> } = {}): BrowserRecord[] {
24
+ const records: BrowserRecord[] = []
25
+ const emitRecord: EmitRecordCallback = (record: BrowserRecord) => {
26
+ records.push(record)
27
+ }
28
+
29
+ doTakeFullSnapshot(
30
+ timeStampNow(),
31
+ SerializationKind.INITIAL_FULL_SNAPSHOT,
32
+ emitRecord,
33
+ noop,
34
+ createTemporaryRecordingScope(configuration)
35
+ )
36
+
37
+ return records
38
+ }
39
+
40
+ /**
41
+ * Take a snapshot of a DOM node, generating the serialized representation that the
42
+ * browser SDK would generate.
43
+ *
44
+ * This is an internal API function. Be sure to update Datadog-internal callers if you
45
+ * change its signature or behavior.
46
+ */
47
+ export function takeNodeSnapshot(
48
+ node: Node,
49
+ { configuration }: { configuration?: Partial<RumConfiguration> } = {}
50
+ ): SerializedNodeWithId | null {
51
+ let serializedNode: SerializedNodeWithId | null = null
52
+
53
+ serializeInTransaction(
54
+ SerializationKind.INITIAL_FULL_SNAPSHOT,
55
+ noop,
56
+ noop,
57
+ createTemporaryRecordingScope(configuration),
58
+ (transaction: SerializationTransaction): void => {
59
+ const privacyLevel = getNodePrivacyLevel(node, transaction.scope.configuration.defaultPrivacyLevel)
60
+ if (privacyLevel === NodePrivacyLevel.HIDDEN || privacyLevel === NodePrivacyLevel.IGNORE) {
61
+ return
62
+ }
63
+ serializedNode = serializeNode(node, privacyLevel, transaction)
64
+ }
65
+ )
66
+
67
+ return serializedNode
68
+ }
69
+
70
+ function createTemporaryRecordingScope(configuration?: Partial<RumConfiguration>): RecordingScope {
71
+ return createRecordingScope(
72
+ {
73
+ defaultPrivacyLevel: NodePrivacyLevel.ALLOW,
74
+ ...configuration,
75
+ } as RumConfiguration,
76
+ createElementsScrollPositions(),
77
+ {
78
+ addShadowRoot: noop,
79
+ removeShadowRoot: noop,
80
+ flush: noop,
81
+ stop: noop,
82
+ } as ShadowRootsController
83
+ )
84
+ }
@@ -0,0 +1,97 @@
1
+ export type EventId = number & { __brand: 'EventId' }
2
+ export type EventIds = ItemIds<Event, EventId>
3
+ export const enum EventIdConstants {
4
+ FIRST_ID = 1,
5
+ }
6
+ export function createEventIds(): EventIds {
7
+ return createWeakIdMap(EventIdConstants.FIRST_ID as EventId)
8
+ }
9
+
10
+ export type NodeId = number & { __brand: 'NodeId' }
11
+ export type NodeIds = ItemIds<Node, NodeId>
12
+ export const enum NodeIdConstants {
13
+ FIRST_ID = 0,
14
+ }
15
+ export function createNodeIds(): NodeIds {
16
+ return createWeakIdMap(NodeIdConstants.FIRST_ID as NodeId)
17
+ }
18
+
19
+ export type StringId = number & { __brand: 'StringId' }
20
+ export type StringIds = ItemIds<string, StringId>
21
+ export const enum StringIdConstants {
22
+ FIRST_ID = 0,
23
+ }
24
+ export function createStringIds(): StringIds {
25
+ return createIdMap(StringIdConstants.FIRST_ID as StringId)
26
+ }
27
+
28
+ export type StyleSheetId = number & { __brand: 'StyleSheetId' }
29
+ export type StyleSheetIds = ItemIds<CSSStyleSheet, StyleSheetId>
30
+ export const enum StyleSheetIdConstants {
31
+ FIRST_ID = 0,
32
+ }
33
+ export function createStyleSheetIds(): StyleSheetIds {
34
+ return createWeakIdMap(StyleSheetIdConstants.FIRST_ID as StyleSheetId)
35
+ }
36
+
37
+ export interface ItemIds<ItemType, ItemId extends number> {
38
+ clear(this: void): void
39
+ delete(this: void, item: ItemType): void
40
+ get(this: void, item: ItemType): ItemId | undefined
41
+ getOrInsert(this: void, item: ItemType): ItemId
42
+ get nextId(): ItemId
43
+ get size(): number
44
+ }
45
+
46
+ function createIdMap<ItemType, ItemId extends number>(firstId: ItemId): ItemIds<ItemType, ItemId> {
47
+ return createItemIds(() => new Map<ItemType, ItemId>(), firstId)
48
+ }
49
+
50
+ function createWeakIdMap<ItemType extends object, ItemId extends number>(firstId: ItemId): ItemIds<ItemType, ItemId> {
51
+ return createItemIds(() => new WeakMap<ItemType, ItemId>(), firstId)
52
+ }
53
+
54
+ interface MapLike<Key, Value> {
55
+ delete(key: Key): void
56
+ get(key: Key): Value | undefined
57
+ set(key: Key, value: Value): void
58
+ }
59
+
60
+ function createItemIds<ItemType, ItemId extends number>(
61
+ createMap: () => MapLike<ItemType, ItemId>,
62
+ firstId: ItemId
63
+ ): ItemIds<ItemType, ItemId> {
64
+ let map = createMap()
65
+ let nextId = firstId
66
+
67
+ const get = (object: ItemType): ItemId | undefined => map.get(object)
68
+
69
+ return {
70
+ clear(): void {
71
+ if (nextId === firstId) {
72
+ return
73
+ }
74
+ map = createMap()
75
+ nextId = firstId
76
+ },
77
+ delete(object: ItemType): void {
78
+ map.delete(object)
79
+ },
80
+ get,
81
+ getOrInsert(object: ItemType): ItemId {
82
+ // Try to reuse any existing id.
83
+ let id = get(object)
84
+ if (id === undefined) {
85
+ id = nextId++ as ItemId
86
+ map.set(object, id)
87
+ }
88
+ return id
89
+ },
90
+ get nextId(): ItemId {
91
+ return nextId
92
+ },
93
+ get size(): number {
94
+ return nextId - firstId
95
+ },
96
+ }
97
+ }
@@ -0,0 +1,47 @@
1
+ import { noop, throttle, requestIdleCallback } from '@datadog/browser-core'
2
+ import type { RumMutationRecord } from '@datadog/browser-rum-core'
3
+
4
+ /**
5
+ * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be
6
+ * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the
7
+ * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the
8
+ * browser is busy executing a longer task, mutations will be processed after this task.
9
+ */
10
+ const MUTATION_PROCESS_MAX_DELAY = 100
11
+ /**
12
+ * Minimum duration to wait before processing mutations. This is used to batch mutations together
13
+ * and be able to deduplicate them to save processing time and bandwidth.
14
+ * 16ms is the duration of a frame at 60fps that ensure fluid UI.
15
+ */
16
+ export const MUTATION_PROCESS_MIN_DELAY = 16
17
+
18
+ export function createMutationBatch(processMutationBatch: (mutations: RumMutationRecord[]) => void) {
19
+ let cancelScheduledFlush = noop
20
+ let pendingMutations: RumMutationRecord[] = []
21
+
22
+ function flush() {
23
+ cancelScheduledFlush()
24
+ processMutationBatch(pendingMutations)
25
+ pendingMutations = []
26
+ }
27
+
28
+ const { throttled: throttledFlush, cancel: cancelThrottle } = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {
29
+ leading: false,
30
+ })
31
+
32
+ return {
33
+ addMutations: (mutations: RumMutationRecord[]) => {
34
+ if (pendingMutations.length === 0) {
35
+ cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY })
36
+ }
37
+ pendingMutations.push(...mutations)
38
+ },
39
+
40
+ flush,
41
+
42
+ stop: () => {
43
+ cancelScheduledFlush()
44
+ cancelThrottle()
45
+ },
46
+ }
47
+ }
@@ -0,0 +1,90 @@
1
+ import { sendToExtension } from '@datadog/browser-core'
2
+ import type { LifeCycle, RumConfiguration, ViewHistory } from '@datadog/browser-rum-core'
3
+ import * as replayStats from '../replayStats'
4
+ import type { BrowserRecord } from '../../types'
5
+ import type { Tracker } from './trackers'
6
+ import {
7
+ trackFocus,
8
+ trackFrustration,
9
+ trackInput,
10
+ trackMediaInteraction,
11
+ trackMouseInteraction,
12
+ trackMove,
13
+ trackMutation,
14
+ trackScroll,
15
+ trackStyleSheet,
16
+ trackViewEnd,
17
+ trackViewportResize,
18
+ trackVisualViewportResize,
19
+ } from './trackers'
20
+ import { createElementsScrollPositions } from './elementsScrollPositions'
21
+ import type { ShadowRootsController } from './shadowRootsController'
22
+ import { initShadowRootsController } from './shadowRootsController'
23
+ import { startFullSnapshots } from './startFullSnapshots'
24
+ import type { EmitRecordCallback, EmitStatsCallback } from './record.types'
25
+ import { createRecordingScope } from './recordingScope'
26
+
27
+ export interface RecordOptions {
28
+ emitRecord: EmitRecordCallback
29
+ emitStats: EmitStatsCallback
30
+ configuration: RumConfiguration
31
+ lifeCycle: LifeCycle
32
+ viewHistory: ViewHistory
33
+ }
34
+
35
+ export interface RecordAPI {
36
+ stop: () => void
37
+ flushMutations: () => void
38
+ shadowRootsController: ShadowRootsController
39
+ }
40
+
41
+ export function record(options: RecordOptions): RecordAPI {
42
+ const { emitRecord, emitStats, configuration, lifeCycle } = options
43
+ // runtime checks for user options
44
+ if (!emitRecord || !emitStats) {
45
+ throw new Error('emit functions are required')
46
+ }
47
+
48
+ const processRecord: EmitRecordCallback = (record: BrowserRecord) => {
49
+ emitRecord(record)
50
+ sendToExtension('record', { record })
51
+ const view = options.viewHistory.findView()!
52
+ replayStats.addRecord(view.id)
53
+ }
54
+
55
+ const shadowRootsController = initShadowRootsController(processRecord, emitStats)
56
+ const scope = createRecordingScope(configuration, createElementsScrollPositions(), shadowRootsController)
57
+
58
+ const { stop: stopFullSnapshots } = startFullSnapshots(lifeCycle, processRecord, emitStats, flushMutations, scope)
59
+
60
+ function flushMutations() {
61
+ shadowRootsController.flush()
62
+ mutationTracker.flush()
63
+ }
64
+
65
+ const mutationTracker = trackMutation(document, processRecord, emitStats, scope)
66
+ const trackers: Tracker[] = [
67
+ mutationTracker,
68
+ trackMove(processRecord, scope),
69
+ trackMouseInteraction(processRecord, scope),
70
+ trackScroll(document, processRecord, scope),
71
+ trackViewportResize(processRecord, scope),
72
+ trackInput(document, processRecord, scope),
73
+ trackMediaInteraction(processRecord, scope),
74
+ trackStyleSheet(processRecord, scope),
75
+ trackFocus(processRecord, scope),
76
+ trackVisualViewportResize(processRecord, scope),
77
+ trackFrustration(lifeCycle, processRecord, scope),
78
+ trackViewEnd(lifeCycle, processRecord, flushMutations),
79
+ ]
80
+
81
+ return {
82
+ stop: () => {
83
+ shadowRootsController.stop()
84
+ trackers.forEach((tracker) => tracker.stop())
85
+ stopFullSnapshots()
86
+ },
87
+ flushMutations,
88
+ shadowRootsController,
89
+ }
90
+ }
@@ -0,0 +1,22 @@
1
+ import type { RumMutationRecord } from '@datadog/browser-rum-core'
2
+ import type { TimeStamp } from '@datadog/browser-core'
3
+ import type { BrowserFullSnapshotRecord, BrowserIncrementalSnapshotRecord, BrowserRecord } from '../../types'
4
+ import type { SerializationKind, SerializationStats } from './serialization'
5
+
6
+ export type EmitRecordCallback<Record extends BrowserRecord = BrowserRecord> = (record: Record) => void
7
+ export type EmitStatsCallback = (stats: SerializationStats) => void
8
+
9
+ export type SerializeEvent =
10
+ | {
11
+ type: 'full'
12
+ kind: SerializationKind
13
+ target: Document
14
+ timestamp: TimeStamp
15
+ v1: BrowserFullSnapshotRecord
16
+ }
17
+ | {
18
+ type: 'incremental'
19
+ target: RumMutationRecord[]
20
+ timestamp: TimeStamp
21
+ v1: BrowserIncrementalSnapshotRecord
22
+ }