@kubesense/kubesense-browser-rum 1.8.0 → 2.0.0-beta.1

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 (784) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +23 -0
  3. package/bundle/chunks/kubesenseProfiler-4b8cfd8f889074788478-kubesense-rum.js +1 -0
  4. package/bundle/chunks/kubesenseRecorder-db948e96649585a2b3e9-kubesense-rum.js +1 -0
  5. package/bundle/kubesense-rum.js +1 -1
  6. package/cjs/boot/kubesenseRecorder.d.ts +6 -0
  7. package/cjs/boot/kubesenseRecorder.js +75 -0
  8. package/cjs/boot/kubesenseRecorder.js.map +1 -0
  9. package/cjs/boot/lazyLoadProfiler.d.ts +3 -4
  10. package/cjs/boot/lazyLoadProfiler.js +18 -50
  11. package/cjs/boot/lazyLoadProfiler.js.map +1 -1
  12. package/cjs/boot/lazyLoadRecorder.d.ts +3 -4
  13. package/cjs/boot/lazyLoadRecorder.js +18 -50
  14. package/cjs/boot/lazyLoadRecorder.js.map +1 -1
  15. package/cjs/boot/postStartStrategy.d.ts +4 -4
  16. package/cjs/boot/postStartStrategy.js +89 -110
  17. package/cjs/boot/postStartStrategy.js.map +1 -1
  18. package/cjs/boot/preStartStrategy.js +21 -21
  19. package/cjs/boot/preStartStrategy.js.map +1 -1
  20. package/cjs/boot/profilerApi.js +44 -50
  21. package/cjs/boot/profilerApi.js.map +1 -1
  22. package/cjs/boot/recorderApi.d.ts +1 -3
  23. package/cjs/boot/recorderApi.js +41 -71
  24. package/cjs/boot/recorderApi.js.map +1 -1
  25. package/cjs/domain/deflate/deflateEncoder.d.ts +1 -2
  26. package/cjs/domain/deflate/deflateEncoder.js +94 -108
  27. package/cjs/domain/deflate/deflateEncoder.js.map +1 -1
  28. package/cjs/domain/deflate/deflateWorker.d.ts +3 -4
  29. package/cjs/domain/deflate/deflateWorker.js +79 -90
  30. package/cjs/domain/deflate/deflateWorker.js.map +1 -1
  31. package/cjs/domain/deflate/index.d.ts +1 -1
  32. package/cjs/domain/deflate/index.js +5 -10
  33. package/cjs/domain/getSessionReplayLink.d.ts +3 -2
  34. package/cjs/domain/getSessionReplayLink.js +17 -31
  35. package/cjs/domain/getSessionReplayLink.js.map +1 -1
  36. package/cjs/domain/profiling/actionHistory.d.ts +10 -0
  37. package/cjs/domain/profiling/actionHistory.js +37 -0
  38. package/cjs/domain/profiling/actionHistory.js.map +1 -0
  39. package/cjs/domain/profiling/kubesenseProfiler.d.ts +6 -0
  40. package/cjs/domain/profiling/kubesenseProfiler.js +243 -0
  41. package/cjs/domain/profiling/kubesenseProfiler.js.map +1 -0
  42. package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
  43. package/cjs/domain/profiling/longTaskHistory.js +22 -0
  44. package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
  45. package/cjs/domain/profiling/profilerDebugIds.d.ts +2 -0
  46. package/cjs/domain/profiling/profilerDebugIds.js +18 -0
  47. package/cjs/domain/profiling/profilerDebugIds.js.map +1 -0
  48. package/cjs/domain/profiling/profilingContext.js +20 -25
  49. package/cjs/domain/profiling/profilingContext.js.map +1 -1
  50. package/cjs/domain/profiling/profilingSupported.js +6 -8
  51. package/cjs/domain/profiling/profilingSupported.js.map +1 -1
  52. package/cjs/domain/profiling/quotaCheck.d.ts +9 -0
  53. package/cjs/domain/profiling/quotaCheck.js +66 -0
  54. package/cjs/domain/profiling/quotaCheck.js.map +1 -0
  55. package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +1 -1
  56. package/cjs/domain/profiling/transport/buildProfileEvent.d.ts +38 -0
  57. package/cjs/domain/profiling/transport/buildProfileEvent.js +91 -0
  58. package/cjs/domain/profiling/transport/buildProfileEvent.js.map +1 -0
  59. package/cjs/domain/profiling/transport/formDataEmitter.d.ts +5 -0
  60. package/cjs/domain/profiling/transport/formDataEmitter.js +17 -0
  61. package/cjs/domain/profiling/transport/formDataEmitter.js.map +1 -0
  62. package/cjs/domain/profiling/transport/profilingBridge.d.ts +2 -0
  63. package/cjs/domain/profiling/transport/profilingBridge.js +12 -0
  64. package/cjs/domain/profiling/transport/profilingBridge.js.map +1 -0
  65. package/cjs/domain/profiling/{types/rumProfiler.types.d.ts → types.d.ts} +13 -24
  66. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +5 -5
  67. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -1
  68. package/cjs/domain/profiling/utils/getDefaultViewName.js +6 -10
  69. package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -1
  70. package/cjs/domain/profiling/vitalHistory.d.ts +13 -0
  71. package/cjs/domain/profiling/vitalHistory.js +56 -0
  72. package/cjs/domain/profiling/vitalHistory.js.map +1 -0
  73. package/cjs/domain/record/assembly.d.ts +2 -1
  74. package/cjs/domain/record/assembly.js +15 -14
  75. package/cjs/domain/record/assembly.js.map +1 -1
  76. package/cjs/domain/record/canvas/canvasHash.d.ts +2 -0
  77. package/cjs/domain/record/canvas/canvasHash.js +33 -0
  78. package/cjs/domain/record/canvas/canvasHash.js.map +1 -0
  79. package/cjs/domain/record/canvas/canvasManager.d.ts +42 -0
  80. package/cjs/domain/record/canvas/canvasManager.js +99 -0
  81. package/cjs/domain/record/canvas/canvasManager.js.map +1 -0
  82. package/cjs/domain/record/canvas/canvasSnapshot.d.ts +8 -0
  83. package/cjs/domain/record/canvas/canvasSnapshot.js +40 -0
  84. package/cjs/domain/record/canvas/canvasSnapshot.js.map +1 -0
  85. package/cjs/domain/record/canvas/canvasUtils.d.ts +2 -0
  86. package/cjs/domain/record/canvas/canvasUtils.js +14 -0
  87. package/cjs/domain/record/canvas/canvasUtils.js.map +1 -0
  88. package/cjs/domain/record/elementsScrollPositions.js +17 -20
  89. package/cjs/domain/record/elementsScrollPositions.js.map +1 -1
  90. package/cjs/domain/record/encoding/changeDecoder.d.ts +39 -0
  91. package/cjs/domain/record/encoding/changeDecoder.js +152 -0
  92. package/cjs/domain/record/encoding/changeDecoder.js.map +1 -0
  93. package/cjs/domain/record/encoding/changeEncoder.d.ts +39 -0
  94. package/cjs/domain/record/encoding/changeEncoder.js +146 -0
  95. package/cjs/domain/record/encoding/changeEncoder.js.map +1 -0
  96. package/cjs/domain/record/encoding/index.d.ts +10 -0
  97. package/cjs/domain/record/encoding/itemIds.d.ts +32 -0
  98. package/cjs/domain/record/encoding/itemIds.js +49 -0
  99. package/cjs/domain/record/encoding/itemIds.js.map +1 -0
  100. package/cjs/domain/record/encoding/roles.d.ts +52 -0
  101. package/cjs/domain/record/encoding/roles.js +66 -0
  102. package/cjs/domain/record/encoding/roles.js.map +1 -0
  103. package/cjs/domain/record/encoding/stringIds.d.ts +15 -0
  104. package/cjs/domain/record/encoding/stringIds.js +47 -0
  105. package/cjs/domain/record/encoding/stringIds.js.map +1 -0
  106. package/cjs/domain/record/encoding/stringTable.d.ts +15 -0
  107. package/cjs/domain/record/encoding/stringTable.js +38 -0
  108. package/cjs/domain/record/encoding/stringTable.js.map +1 -0
  109. package/cjs/domain/record/eventsUtils.js +9 -10
  110. package/cjs/domain/record/eventsUtils.js.map +1 -1
  111. package/cjs/domain/record/index.d.ts +5 -2
  112. package/cjs/domain/record/index.js +13 -17
  113. package/cjs/domain/record/internalApi.d.ts +6 -6
  114. package/cjs/domain/record/internalApi.js +55 -49
  115. package/cjs/domain/record/internalApi.js.map +1 -1
  116. package/cjs/domain/record/mutationBatch.d.ts +1 -0
  117. package/cjs/domain/record/mutationBatch.js +38 -39
  118. package/cjs/domain/record/mutationBatch.js.map +1 -1
  119. package/cjs/domain/record/record.d.ts +7 -1
  120. package/cjs/domain/record/record.js +76 -87
  121. package/cjs/domain/record/record.js.map +1 -1
  122. package/cjs/domain/record/record.types.d.ts +1 -0
  123. package/cjs/domain/record/recordingScope.d.ts +7 -3
  124. package/cjs/domain/record/recordingScope.js +25 -11
  125. package/cjs/domain/record/recordingScope.js.map +1 -1
  126. package/cjs/domain/record/serialization/index.d.ts +4 -2
  127. package/cjs/domain/record/serialization/index.js +16 -18
  128. package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
  129. package/cjs/domain/record/serialization/insertionCursor.js +55 -0
  130. package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
  131. package/cjs/domain/record/serialization/serialization.types.d.ts +0 -6
  132. package/cjs/domain/record/serialization/serializationStats.js +26 -25
  133. package/cjs/domain/record/serialization/serializationStats.js.map +1 -1
  134. package/cjs/domain/record/serialization/serializationTransaction.d.ts +44 -22
  135. package/cjs/domain/record/serialization/serializationTransaction.js +90 -36
  136. package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -1
  137. package/cjs/domain/record/serialization/serializationUtils.d.ts +0 -1
  138. package/cjs/domain/record/serialization/serializationUtils.js +46 -75
  139. package/cjs/domain/record/serialization/serializationUtils.js.map +1 -1
  140. package/cjs/domain/record/serialization/serializeAttribute.js +24 -39
  141. package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -1
  142. package/cjs/domain/record/serialization/serializeAttributes.d.ts +2 -2
  143. package/cjs/domain/record/serialization/serializeAttributes.js +100 -152
  144. package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -1
  145. package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
  146. package/cjs/domain/record/serialization/serializeFullSnapshot.js +14 -0
  147. package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
  148. package/cjs/domain/record/serialization/serializeMutations.d.ts +5 -0
  149. package/cjs/domain/record/serialization/serializeMutations.js +152 -0
  150. package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
  151. package/cjs/domain/record/serialization/serializeNode.d.ts +3 -6
  152. package/cjs/domain/record/serialization/serializeNode.js +116 -144
  153. package/cjs/domain/record/serialization/serializeNode.js.map +1 -1
  154. package/cjs/domain/record/shadowRootsController.d.ts +2 -2
  155. package/cjs/domain/record/shadowRootsController.js +37 -42
  156. package/cjs/domain/record/shadowRootsController.js.map +1 -1
  157. package/cjs/domain/record/startFullSnapshots.d.ts +1 -1
  158. package/cjs/domain/record/startFullSnapshots.js +38 -54
  159. package/cjs/domain/record/startFullSnapshots.js.map +1 -1
  160. package/cjs/domain/record/trackers/index.d.ts +2 -1
  161. package/cjs/domain/record/trackers/index.js +25 -27
  162. package/cjs/domain/record/trackers/trackCanvasCapture.d.ts +3 -0
  163. package/cjs/domain/record/trackers/trackCanvasCapture.js +102 -0
  164. package/cjs/domain/record/trackers/trackCanvasCapture.js.map +1 -0
  165. package/cjs/domain/record/trackers/trackCanvasContent.d.ts +3 -0
  166. package/cjs/domain/record/trackers/trackCanvasContent.js +31 -0
  167. package/cjs/domain/record/trackers/trackCanvasContent.js.map +1 -0
  168. package/cjs/domain/record/trackers/trackFocus.d.ts +1 -2
  169. package/cjs/domain/record/trackers/trackFocus.js +15 -13
  170. package/cjs/domain/record/trackers/trackFocus.js.map +1 -1
  171. package/cjs/domain/record/trackers/trackInput.d.ts +2 -2
  172. package/cjs/domain/record/trackers/trackInput.js +129 -102
  173. package/cjs/domain/record/trackers/trackInput.js.map +1 -1
  174. package/cjs/domain/record/trackers/trackMediaInteraction.js +22 -26
  175. package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -1
  176. package/cjs/domain/record/trackers/trackMouseInteraction.js +47 -54
  177. package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -1
  178. package/cjs/domain/record/trackers/trackMove.js +43 -49
  179. package/cjs/domain/record/trackers/trackMove.js.map +1 -1
  180. package/cjs/domain/record/trackers/trackMutation.d.ts +3 -3
  181. package/cjs/domain/record/trackers/trackMutation.js +42 -267
  182. package/cjs/domain/record/trackers/trackMutation.js.map +1 -1
  183. package/cjs/domain/record/trackers/trackScroll.js +36 -44
  184. package/cjs/domain/record/trackers/trackScroll.js.map +1 -1
  185. package/cjs/domain/record/trackers/trackStyleSheet.js +75 -84
  186. package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -1
  187. package/cjs/domain/record/trackers/trackViewEnd.js +17 -17
  188. package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -1
  189. package/cjs/domain/record/trackers/trackViewportResize.d.ts +2 -3
  190. package/cjs/domain/record/trackers/trackViewportResize.js +36 -42
  191. package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -1
  192. package/cjs/domain/record/viewports.js +32 -50
  193. package/cjs/domain/record/viewports.js.map +1 -1
  194. package/cjs/domain/replayStats.d.ts +1 -0
  195. package/cjs/domain/replayStats.js +36 -44
  196. package/cjs/domain/replayStats.js.map +1 -1
  197. package/cjs/domain/scriptLoadingError.js +15 -22
  198. package/cjs/domain/scriptLoadingError.js.map +1 -1
  199. package/cjs/domain/segmentCollection/buildReplayPayload.js +22 -23
  200. package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -1
  201. package/cjs/domain/segmentCollection/buildResourcePayload.d.ts +5 -0
  202. package/cjs/domain/segmentCollection/buildResourcePayload.js +19 -0
  203. package/cjs/domain/segmentCollection/buildResourcePayload.js.map +1 -0
  204. package/cjs/domain/segmentCollection/index.d.ts +3 -0
  205. package/cjs/domain/segmentCollection/index.js +14 -11
  206. package/cjs/domain/segmentCollection/replayResourceCollection.d.ts +10 -0
  207. package/cjs/domain/segmentCollection/replayResourceCollection.js +52 -0
  208. package/cjs/domain/segmentCollection/replayResourceCollection.js.map +1 -0
  209. package/cjs/domain/segmentCollection/segment.js +50 -80
  210. package/cjs/domain/segmentCollection/segment.js.map +1 -1
  211. package/cjs/domain/segmentCollection/segmentCollection.d.ts +4 -4
  212. package/cjs/domain/segmentCollection/segmentCollection.js +87 -105
  213. package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -1
  214. package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.d.ts +16 -0
  215. package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js +29 -0
  216. package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js.map +1 -0
  217. package/cjs/domain/segmentCollection/startSegmentTelemetry.js +40 -42
  218. package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -1
  219. package/cjs/domain/startRecordBridge.js +10 -14
  220. package/cjs/domain/startRecordBridge.js.map +1 -1
  221. package/cjs/domain/startRecorderInitTelemetry.js +42 -50
  222. package/cjs/domain/startRecorderInitTelemetry.js.map +1 -1
  223. package/cjs/entries/internal.d.ts +11 -2
  224. package/cjs/entries/internal.js +47 -28
  225. package/cjs/entries/internalSynthetics.js +26 -24
  226. package/cjs/entries/internalSynthetics.js.map +1 -1
  227. package/cjs/entries/main.d.ts +5 -3
  228. package/cjs/entries/main.js +50 -31
  229. package/cjs/entries/main.js.map +1 -1
  230. package/cjs/types/index.d.ts +1 -0
  231. package/cjs/types/profiling.d.ts +313 -0
  232. package/cjs/types/sessionReplay.d.ts +381 -3
  233. package/cjs/types/sessionReplayConstants.d.ts +57 -0
  234. package/cjs/types/sessionReplayConstants.js +104 -47
  235. package/cjs/types/sessionReplayConstants.js.map +1 -1
  236. package/esm/boot/kubesenseRecorder.mjs +75 -0
  237. package/esm/boot/kubesenseRecorder.mjs.map +1 -0
  238. package/esm/boot/lazyLoadProfiler.mjs +24 -0
  239. package/esm/boot/lazyLoadProfiler.mjs.map +1 -0
  240. package/esm/boot/lazyLoadRecorder.mjs +24 -0
  241. package/esm/boot/lazyLoadRecorder.mjs.map +1 -0
  242. package/esm/boot/postStartStrategy.mjs +97 -0
  243. package/esm/boot/postStartStrategy.mjs.map +1 -0
  244. package/esm/boot/preStartStrategy.mjs +24 -0
  245. package/esm/boot/preStartStrategy.mjs.map +1 -0
  246. package/esm/boot/profilerApi.mjs +47 -0
  247. package/esm/boot/profilerApi.mjs.map +1 -0
  248. package/esm/boot/recorderApi.mjs +43 -0
  249. package/esm/boot/recorderApi.mjs.map +1 -0
  250. package/esm/domain/deflate/deflateEncoder.mjs +96 -0
  251. package/esm/domain/deflate/deflateEncoder.mjs.map +1 -0
  252. package/esm/domain/deflate/deflateWorker.mjs +90 -0
  253. package/esm/domain/deflate/deflateWorker.mjs.map +1 -0
  254. package/esm/domain/deflate/index.mjs +3 -0
  255. package/esm/domain/getSessionReplayLink.mjs +21 -0
  256. package/esm/domain/getSessionReplayLink.mjs.map +1 -0
  257. package/esm/domain/profiling/actionHistory.mjs +36 -0
  258. package/esm/domain/profiling/actionHistory.mjs.map +1 -0
  259. package/esm/domain/profiling/kubesenseProfiler.mjs +242 -0
  260. package/esm/domain/profiling/kubesenseProfiler.mjs.map +1 -0
  261. package/esm/domain/profiling/longTaskHistory.mjs +21 -0
  262. package/esm/domain/profiling/longTaskHistory.mjs.map +1 -0
  263. package/esm/domain/profiling/profilerDebugIds.mjs +18 -0
  264. package/esm/domain/profiling/profilerDebugIds.mjs.map +1 -0
  265. package/esm/domain/profiling/profilingContext.mjs +23 -0
  266. package/esm/domain/profiling/profilingContext.mjs.map +1 -0
  267. package/esm/domain/profiling/profilingSupported.mjs +9 -0
  268. package/esm/domain/profiling/profilingSupported.mjs.map +1 -0
  269. package/esm/domain/profiling/quotaCheck.mjs +66 -0
  270. package/esm/domain/profiling/quotaCheck.mjs.map +1 -0
  271. package/esm/domain/profiling/transport/buildProfileEvent.mjs +90 -0
  272. package/esm/domain/profiling/transport/buildProfileEvent.mjs.map +1 -0
  273. package/esm/domain/profiling/transport/formDataEmitter.mjs +17 -0
  274. package/esm/domain/profiling/transport/formDataEmitter.mjs.map +1 -0
  275. package/esm/domain/profiling/transport/profilingBridge.mjs +12 -0
  276. package/esm/domain/profiling/transport/profilingBridge.mjs.map +1 -0
  277. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs +7 -0
  278. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs.map +1 -0
  279. package/esm/domain/profiling/utils/getDefaultViewName.mjs +10 -0
  280. package/esm/domain/profiling/utils/getDefaultViewName.mjs.map +1 -0
  281. package/esm/domain/profiling/vitalHistory.mjs +55 -0
  282. package/esm/domain/profiling/vitalHistory.mjs.map +1 -0
  283. package/esm/domain/record/assembly.mjs +17 -0
  284. package/esm/domain/record/assembly.mjs.map +1 -0
  285. package/esm/domain/record/canvas/canvasHash.mjs +33 -0
  286. package/esm/domain/record/canvas/canvasHash.mjs.map +1 -0
  287. package/esm/domain/record/canvas/canvasManager.mjs +99 -0
  288. package/esm/domain/record/canvas/canvasManager.mjs.map +1 -0
  289. package/esm/domain/record/canvas/canvasSnapshot.mjs +38 -0
  290. package/esm/domain/record/canvas/canvasSnapshot.mjs.map +1 -0
  291. package/esm/domain/record/canvas/canvasUtils.mjs +13 -0
  292. package/esm/domain/record/canvas/canvasUtils.mjs.map +1 -0
  293. package/esm/domain/record/elementsScrollPositions.mjs +20 -0
  294. package/esm/domain/record/elementsScrollPositions.mjs.map +1 -0
  295. package/esm/domain/record/encoding/changeDecoder.mjs +152 -0
  296. package/esm/domain/record/encoding/changeDecoder.mjs.map +1 -0
  297. package/esm/domain/record/encoding/changeEncoder.mjs +146 -0
  298. package/esm/domain/record/encoding/changeEncoder.mjs.map +1 -0
  299. package/esm/domain/record/encoding/itemIds.mjs +47 -0
  300. package/esm/domain/record/encoding/itemIds.mjs.map +1 -0
  301. package/esm/domain/record/encoding/roles.mjs +64 -0
  302. package/esm/domain/record/encoding/roles.mjs.map +1 -0
  303. package/esm/domain/record/encoding/stringIds.mjs +47 -0
  304. package/esm/domain/record/encoding/stringIds.mjs.map +1 -0
  305. package/esm/domain/record/encoding/stringTable.mjs +38 -0
  306. package/esm/domain/record/encoding/stringTable.mjs.map +1 -0
  307. package/esm/domain/record/eventsUtils.mjs +13 -0
  308. package/esm/domain/record/eventsUtils.mjs.map +1 -0
  309. package/esm/domain/record/index.mjs +8 -0
  310. package/esm/domain/record/internalApi.mjs +62 -0
  311. package/esm/domain/record/internalApi.mjs.map +1 -0
  312. package/esm/domain/record/mutationBatch.mjs +43 -0
  313. package/esm/domain/record/mutationBatch.mjs.map +1 -0
  314. package/esm/domain/record/record.mjs +79 -0
  315. package/esm/domain/record/record.mjs.map +1 -0
  316. package/esm/domain/record/recordingScope.mjs +27 -0
  317. package/esm/domain/record/recordingScope.mjs.map +1 -0
  318. package/esm/domain/record/serialization/index.mjs +9 -0
  319. package/esm/domain/record/serialization/insertionCursor.mjs +54 -0
  320. package/esm/domain/record/serialization/insertionCursor.mjs.map +1 -0
  321. package/esm/domain/record/serialization/serializationStats.mjs +31 -0
  322. package/esm/domain/record/serialization/serializationStats.mjs.map +1 -0
  323. package/esm/domain/record/serialization/serializationTransaction.mjs +92 -0
  324. package/esm/domain/record/serialization/serializationTransaction.mjs.map +1 -0
  325. package/esm/domain/record/serialization/serializationUtils.mjs +53 -0
  326. package/esm/domain/record/serialization/serializationUtils.mjs.map +1 -0
  327. package/esm/domain/record/serialization/serializeAttribute.mjs +26 -0
  328. package/esm/domain/record/serialization/serializeAttribute.mjs.map +1 -0
  329. package/esm/domain/record/serialization/serializeAttributes.mjs +113 -0
  330. package/esm/domain/record/serialization/serializeAttributes.mjs.map +1 -0
  331. package/esm/domain/record/serialization/serializeFullSnapshot.mjs +14 -0
  332. package/esm/domain/record/serialization/serializeFullSnapshot.mjs.map +1 -0
  333. package/esm/domain/record/serialization/serializeMutations.mjs +152 -0
  334. package/esm/domain/record/serialization/serializeMutations.mjs.map +1 -0
  335. package/esm/domain/record/serialization/serializeNode.mjs +126 -0
  336. package/esm/domain/record/serialization/serializeNode.mjs.map +1 -0
  337. package/esm/domain/record/shadowRootsController.mjs +40 -0
  338. package/esm/domain/record/shadowRootsController.mjs.map +1 -0
  339. package/esm/domain/record/startFullSnapshots.mjs +42 -0
  340. package/esm/domain/record/startFullSnapshots.mjs.map +1 -0
  341. package/esm/domain/record/trackers/index.mjs +13 -0
  342. package/esm/domain/record/trackers/trackCanvasCapture.mjs +102 -0
  343. package/esm/domain/record/trackers/trackCanvasCapture.mjs.map +1 -0
  344. package/esm/domain/record/trackers/trackCanvasContent.mjs +31 -0
  345. package/esm/domain/record/trackers/trackCanvasContent.mjs.map +1 -0
  346. package/esm/domain/record/trackers/trackFocus.mjs +17 -0
  347. package/esm/domain/record/trackers/trackFocus.mjs.map +1 -0
  348. package/esm/domain/record/trackers/trackInput.mjs +131 -0
  349. package/esm/domain/record/trackers/trackInput.mjs.map +1 -0
  350. package/esm/domain/record/trackers/trackMediaInteraction.mjs +25 -0
  351. package/esm/domain/record/trackers/trackMediaInteraction.mjs.map +1 -0
  352. package/esm/domain/record/trackers/trackMouseInteraction.mjs +52 -0
  353. package/esm/domain/record/trackers/trackMouseInteraction.mjs.map +1 -0
  354. package/esm/domain/record/trackers/trackMove.mjs +48 -0
  355. package/esm/domain/record/trackers/trackMove.mjs.map +1 -0
  356. package/esm/domain/record/trackers/trackMutation.mjs +45 -0
  357. package/esm/domain/record/trackers/trackMutation.mjs.map +1 -0
  358. package/esm/domain/record/trackers/trackScroll.mjs +40 -0
  359. package/esm/domain/record/trackers/trackScroll.mjs.map +1 -0
  360. package/esm/domain/record/trackers/trackStyleSheet.mjs +79 -0
  361. package/esm/domain/record/trackers/trackStyleSheet.mjs.map +1 -0
  362. package/esm/domain/record/trackers/trackViewEnd.mjs +20 -0
  363. package/esm/domain/record/trackers/trackViewEnd.mjs.map +1 -0
  364. package/esm/domain/record/trackers/trackViewportResize.mjs +39 -0
  365. package/esm/domain/record/trackers/trackViewportResize.mjs.map +1 -0
  366. package/esm/domain/record/viewports.mjs +41 -0
  367. package/esm/domain/record/viewports.mjs.map +1 -0
  368. package/esm/domain/replayStats.mjs +46 -0
  369. package/esm/domain/replayStats.mjs.map +1 -0
  370. package/esm/domain/scriptLoadingError.mjs +19 -0
  371. package/esm/domain/scriptLoadingError.mjs.map +1 -0
  372. package/esm/domain/segmentCollection/buildReplayPayload.mjs +25 -0
  373. package/esm/domain/segmentCollection/buildReplayPayload.mjs.map +1 -0
  374. package/esm/domain/segmentCollection/buildResourcePayload.mjs +19 -0
  375. package/esm/domain/segmentCollection/buildResourcePayload.mjs.map +1 -0
  376. package/esm/domain/segmentCollection/index.mjs +5 -0
  377. package/esm/domain/segmentCollection/replayResourceCollection.mjs +52 -0
  378. package/esm/domain/segmentCollection/replayResourceCollection.mjs.map +1 -0
  379. package/esm/domain/segmentCollection/segment.mjs +52 -0
  380. package/esm/domain/segmentCollection/segment.mjs.map +1 -0
  381. package/esm/domain/segmentCollection/segmentCollection.mjs +87 -0
  382. package/esm/domain/segmentCollection/segmentCollection.mjs.map +1 -0
  383. package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs +28 -0
  384. package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs.map +1 -0
  385. package/esm/domain/segmentCollection/startSegmentTelemetry.mjs +45 -0
  386. package/esm/domain/segmentCollection/startSegmentTelemetry.mjs.map +1 -0
  387. package/esm/domain/startRecordBridge.mjs +13 -0
  388. package/esm/domain/startRecordBridge.mjs.map +1 -0
  389. package/esm/domain/startRecorderInitTelemetry.mjs +47 -0
  390. package/esm/domain/startRecorderInitTelemetry.mjs.map +1 -0
  391. package/esm/entries/internal.mjs +8 -0
  392. package/esm/entries/internalSynthetics.mjs +22 -0
  393. package/esm/entries/internalSynthetics.mjs.map +1 -0
  394. package/esm/entries/main.mjs +35 -0
  395. package/esm/entries/main.mjs.map +1 -0
  396. package/esm/types/sessionReplayConstants.mjs +97 -0
  397. package/esm/types/sessionReplayConstants.mjs.map +1 -0
  398. package/internal/package.json +1 -1
  399. package/internal-synthetics/package.json +1 -1
  400. package/package.json +26 -15
  401. package/src/boot/kubesenseRecorder.ts +134 -0
  402. package/src/boot/lazyLoadProfiler.ts +6 -7
  403. package/src/boot/lazyLoadRecorder.ts +6 -7
  404. package/src/boot/postStartStrategy.ts +18 -16
  405. package/src/boot/profilerApi.ts +29 -19
  406. package/src/boot/recorderApi.ts +6 -21
  407. package/src/domain/deflate/deflateEncoder.ts +3 -8
  408. package/src/domain/deflate/deflateWorker.ts +8 -13
  409. package/src/domain/deflate/index.ts +1 -0
  410. package/src/domain/getSessionReplayLink.ts +15 -11
  411. package/src/domain/profiling/actionHistory.ts +66 -0
  412. package/src/domain/profiling/{profiler.ts → kubesenseProfiler.ts} +166 -79
  413. package/src/domain/profiling/longTaskHistory.ts +45 -0
  414. package/src/domain/profiling/profilerDebugIds.ts +17 -0
  415. package/src/domain/profiling/profilingContext.ts +8 -3
  416. package/src/domain/profiling/profilingSupported.ts +2 -7
  417. package/src/domain/profiling/quotaCheck.ts +89 -0
  418. package/src/domain/profiling/test-utils/mockedTrace.ts +1 -2
  419. package/src/domain/profiling/transport/buildProfileEvent.ts +143 -0
  420. package/src/domain/profiling/transport/formDataEmitter.ts +17 -0
  421. package/src/domain/profiling/transport/profilingBridge.ts +9 -0
  422. package/src/domain/profiling/{types/rumProfiler.types.ts → types.ts} +14 -26
  423. package/src/domain/profiling/vitalHistory.ts +106 -0
  424. package/src/domain/record/assembly.ts +5 -3
  425. package/src/domain/record/canvas/canvasHash.ts +54 -0
  426. package/src/domain/record/canvas/canvasManager.ts +175 -0
  427. package/src/domain/record/canvas/canvasSnapshot.ts +52 -0
  428. package/src/domain/record/canvas/canvasUtils.ts +11 -0
  429. package/src/domain/record/encoding/changeDecoder.ts +287 -0
  430. package/src/domain/record/encoding/changeEncoder.ts +327 -0
  431. package/src/domain/record/encoding/index.ts +19 -0
  432. package/src/domain/record/encoding/itemIds.ts +84 -0
  433. package/src/domain/record/encoding/roles.ts +136 -0
  434. package/src/domain/record/encoding/stringIds.ts +70 -0
  435. package/src/domain/record/encoding/stringTable.ts +68 -0
  436. package/src/domain/record/index.ts +5 -2
  437. package/src/domain/record/internalApi.ts +21 -18
  438. package/src/domain/record/mutationBatch.ts +14 -3
  439. package/src/domain/record/record.ts +35 -16
  440. package/src/domain/record/record.types.ts +1 -0
  441. package/src/domain/record/recordingScope.ts +28 -5
  442. package/src/domain/record/serialization/index.ts +4 -2
  443. package/src/domain/record/serialization/insertionCursor.ts +131 -0
  444. package/src/domain/record/serialization/serialization.types.ts +0 -16
  445. package/src/domain/record/serialization/serializationTransaction.ts +191 -37
  446. package/src/domain/record/serialization/serializationUtils.ts +1 -15
  447. package/src/domain/record/serialization/serializeAttributes.ts +36 -32
  448. package/src/domain/record/serialization/serializeFullSnapshot.ts +26 -0
  449. package/src/domain/record/serialization/serializeMutations.ts +357 -0
  450. package/src/domain/record/serialization/serializeNode.ts +200 -164
  451. package/src/domain/record/shadowRootsController.ts +4 -3
  452. package/src/domain/record/startFullSnapshots.ts +28 -41
  453. package/src/domain/record/trackers/index.ts +2 -1
  454. package/src/domain/record/trackers/trackCanvasCapture.ts +137 -0
  455. package/src/domain/record/trackers/trackCanvasContent.ts +46 -0
  456. package/src/domain/record/trackers/trackFocus.ts +4 -4
  457. package/src/domain/record/trackers/trackInput.ts +146 -41
  458. package/src/domain/record/trackers/trackMediaInteraction.ts +0 -1
  459. package/src/domain/record/trackers/trackMouseInteraction.ts +1 -2
  460. package/src/domain/record/trackers/trackMove.ts +0 -1
  461. package/src/domain/record/trackers/trackMutation.ts +17 -355
  462. package/src/domain/record/trackers/trackScroll.ts +1 -1
  463. package/src/domain/record/trackers/trackStyleSheet.ts +1 -1
  464. package/src/domain/record/trackers/trackViewEnd.ts +1 -1
  465. package/src/domain/record/trackers/trackViewportResize.ts +7 -16
  466. package/src/domain/record/trackers/tracker.types.ts +1 -1
  467. package/src/domain/replayStats.ts +5 -0
  468. package/src/domain/scriptLoadingError.ts +2 -1
  469. package/src/domain/segmentCollection/buildResourcePayload.ts +20 -0
  470. package/src/domain/segmentCollection/index.ts +3 -0
  471. package/src/domain/segmentCollection/replayResourceCollection.ts +79 -0
  472. package/src/domain/segmentCollection/segment.ts +2 -1
  473. package/src/domain/segmentCollection/segmentCollection.ts +14 -13
  474. package/src/domain/segmentCollection/startDroppedSegmentRecovery.ts +37 -0
  475. package/src/domain/segmentCollection/startSegmentTelemetry.ts +16 -2
  476. package/src/domain/startRecorderInitTelemetry.ts +5 -3
  477. package/src/entries/internal.ts +13 -2
  478. package/src/entries/internalSynthetics.ts +3 -4
  479. package/src/entries/main.ts +23 -14
  480. package/src/types/index.ts +1 -0
  481. package/src/types/profiling.ts +315 -0
  482. package/src/types/sessionReplay.ts +395 -3
  483. package/src/types/sessionReplayConstants.ts +109 -0
  484. package/bundle/chunks/profiler-6f621c66a29d9f39a9bd-kubesense-rum.js +0 -1
  485. package/bundle/chunks/recorder-c73b8d42b98d4a01f120-kubesense-rum.js +0 -1
  486. package/cjs/boot/isBrowserSupported.d.ts +0 -4
  487. package/cjs/boot/isBrowserSupported.js +0 -17
  488. package/cjs/boot/isBrowserSupported.js.map +0 -1
  489. package/cjs/boot/startRecording.d.ts +0 -6
  490. package/cjs/boot/startRecording.js +0 -45
  491. package/cjs/boot/startRecording.js.map +0 -1
  492. package/cjs/domain/deflate/index.js.map +0 -1
  493. package/cjs/domain/profiling/profiler.d.ts +0 -7
  494. package/cjs/domain/profiling/profiler.js +0 -244
  495. package/cjs/domain/profiling/profiler.js.map +0 -1
  496. package/cjs/domain/profiling/test-utils/mockedTrace.js +0 -57
  497. package/cjs/domain/profiling/test-utils/mockedTrace.js.map +0 -1
  498. package/cjs/domain/profiling/transport/assembly.d.ts +0 -21
  499. package/cjs/domain/profiling/transport/assembly.js +0 -45
  500. package/cjs/domain/profiling/transport/assembly.js.map +0 -1
  501. package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
  502. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +0 -50
  503. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
  504. package/cjs/domain/profiling/types/index.d.ts +0 -2
  505. package/cjs/domain/profiling/types/index.js +0 -3
  506. package/cjs/domain/profiling/types/index.js.map +0 -1
  507. package/cjs/domain/profiling/types/profilerApi.types.d.ts +0 -58
  508. package/cjs/domain/profiling/types/profilerApi.types.js +0 -5
  509. package/cjs/domain/profiling/types/profilerApi.types.js.map +0 -1
  510. package/cjs/domain/profiling/types/rumProfiler.types.js +0 -3
  511. package/cjs/domain/profiling/types/rumProfiler.types.js.map +0 -1
  512. package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
  513. package/cjs/domain/profiling/utils/getNumberOfSamples.js +0 -18
  514. package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
  515. package/cjs/domain/record/eventIds.d.ts +0 -4
  516. package/cjs/domain/record/eventIds.js +0 -16
  517. package/cjs/domain/record/eventIds.js.map +0 -1
  518. package/cjs/domain/record/index.js.map +0 -1
  519. package/cjs/domain/record/nodeIds.d.ts +0 -15
  520. package/cjs/domain/record/nodeIds.js +0 -32
  521. package/cjs/domain/record/nodeIds.js.map +0 -1
  522. package/cjs/domain/record/record.types.js +0 -3
  523. package/cjs/domain/record/record.types.js.map +0 -1
  524. package/cjs/domain/record/serialization/index.js.map +0 -1
  525. package/cjs/domain/record/serialization/serialization.types.js +0 -3
  526. package/cjs/domain/record/serialization/serialization.types.js.map +0 -1
  527. package/cjs/domain/record/serialization/serializeDocument.d.ts +0 -3
  528. package/cjs/domain/record/serialization/serializeDocument.js +0 -11
  529. package/cjs/domain/record/serialization/serializeDocument.js.map +0 -1
  530. package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
  531. package/cjs/domain/record/serialization/serializeStyleSheets.js +0 -19
  532. package/cjs/domain/record/serialization/serializeStyleSheets.js.map +0 -1
  533. package/cjs/domain/record/trackers/index.js.map +0 -1
  534. package/cjs/domain/record/trackers/trackFrustration.d.ts +0 -7
  535. package/cjs/domain/record/trackers/trackFrustration.js +0 -31
  536. package/cjs/domain/record/trackers/trackFrustration.js.map +0 -1
  537. package/cjs/domain/record/trackers/tracker.types.js +0 -3
  538. package/cjs/domain/record/trackers/tracker.types.js.map +0 -1
  539. package/cjs/domain/segmentCollection/index.js.map +0 -1
  540. package/cjs/entries/internal.js.map +0 -1
  541. package/cjs/types/index.js +0 -18
  542. package/cjs/types/index.js.map +0 -1
  543. package/cjs/types/sessionReplay.js +0 -7
  544. package/cjs/types/sessionReplay.js.map +0 -1
  545. package/esm/boot/isBrowserSupported.d.ts +0 -4
  546. package/esm/boot/isBrowserSupported.js +0 -14
  547. package/esm/boot/isBrowserSupported.js.map +0 -1
  548. package/esm/boot/lazyLoadProfiler.d.ts +0 -4
  549. package/esm/boot/lazyLoadProfiler.js +0 -18
  550. package/esm/boot/lazyLoadProfiler.js.map +0 -1
  551. package/esm/boot/lazyLoadRecorder.d.ts +0 -4
  552. package/esm/boot/lazyLoadRecorder.js +0 -18
  553. package/esm/boot/lazyLoadRecorder.js.map +0 -1
  554. package/esm/boot/postStartStrategy.d.ts +0 -33
  555. package/esm/boot/postStartStrategy.js +0 -115
  556. package/esm/boot/postStartStrategy.js.map +0 -1
  557. package/esm/boot/preStartStrategy.d.ts +0 -6
  558. package/esm/boot/preStartStrategy.js +0 -21
  559. package/esm/boot/preStartStrategy.js.map +0 -1
  560. package/esm/boot/profilerApi.d.ts +0 -2
  561. package/esm/boot/profilerApi.js +0 -50
  562. package/esm/boot/profilerApi.js.map +0 -1
  563. package/esm/boot/recorderApi.d.ts +0 -4
  564. package/esm/boot/recorderApi.js +0 -70
  565. package/esm/boot/recorderApi.js.map +0 -1
  566. package/esm/boot/startRecording.d.ts +0 -6
  567. package/esm/boot/startRecording.js +0 -42
  568. package/esm/boot/startRecording.js.map +0 -1
  569. package/esm/domain/deflate/deflateEncoder.d.ts +0 -3
  570. package/esm/domain/deflate/deflateEncoder.js +0 -107
  571. package/esm/domain/deflate/deflateEncoder.js.map +0 -1
  572. package/esm/domain/deflate/deflateWorker.d.ts +0 -30
  573. package/esm/domain/deflate/deflateWorker.js +0 -97
  574. package/esm/domain/deflate/deflateWorker.js.map +0 -1
  575. package/esm/domain/deflate/index.d.ts +0 -3
  576. package/esm/domain/deflate/index.js +0 -3
  577. package/esm/domain/deflate/index.js.map +0 -1
  578. package/esm/domain/getSessionReplayLink.d.ts +0 -2
  579. package/esm/domain/getSessionReplayLink.js +0 -32
  580. package/esm/domain/getSessionReplayLink.js.map +0 -1
  581. package/esm/domain/profiling/profiler.d.ts +0 -7
  582. package/esm/domain/profiling/profiler.js +0 -240
  583. package/esm/domain/profiling/profiler.js.map +0 -1
  584. package/esm/domain/profiling/profilingContext.d.ts +0 -6
  585. package/esm/domain/profiling/profilingContext.js +0 -25
  586. package/esm/domain/profiling/profilingContext.js.map +0 -1
  587. package/esm/domain/profiling/profilingSupported.d.ts +0 -1
  588. package/esm/domain/profiling/profilingSupported.js +0 -8
  589. package/esm/domain/profiling/profilingSupported.js.map +0 -1
  590. package/esm/domain/profiling/test-utils/mockedTrace.d.ts +0 -3
  591. package/esm/domain/profiling/test-utils/mockedTrace.js +0 -54
  592. package/esm/domain/profiling/test-utils/mockedTrace.js.map +0 -1
  593. package/esm/domain/profiling/transport/assembly.d.ts +0 -21
  594. package/esm/domain/profiling/transport/assembly.js +0 -42
  595. package/esm/domain/profiling/transport/assembly.js.map +0 -1
  596. package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
  597. package/esm/domain/profiling/transport/buildProfileEventAttributes.js +0 -47
  598. package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
  599. package/esm/domain/profiling/types/index.d.ts +0 -2
  600. package/esm/domain/profiling/types/index.js +0 -2
  601. package/esm/domain/profiling/types/index.js.map +0 -1
  602. package/esm/domain/profiling/types/profilerApi.types.d.ts +0 -58
  603. package/esm/domain/profiling/types/profilerApi.types.js +0 -4
  604. package/esm/domain/profiling/types/profilerApi.types.js.map +0 -1
  605. package/esm/domain/profiling/types/rumProfiler.types.d.ts +0 -72
  606. package/esm/domain/profiling/types/rumProfiler.types.js +0 -2
  607. package/esm/domain/profiling/types/rumProfiler.types.js.map +0 -1
  608. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +0 -1
  609. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +0 -3
  610. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +0 -1
  611. package/esm/domain/profiling/utils/getDefaultViewName.d.ts +0 -1
  612. package/esm/domain/profiling/utils/getDefaultViewName.js +0 -11
  613. package/esm/domain/profiling/utils/getDefaultViewName.js.map +0 -1
  614. package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
  615. package/esm/domain/profiling/utils/getNumberOfSamples.js +0 -15
  616. package/esm/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
  617. package/esm/domain/record/assembly.d.ts +0 -2
  618. package/esm/domain/record/assembly.js +0 -13
  619. package/esm/domain/record/assembly.js.map +0 -1
  620. package/esm/domain/record/elementsScrollPositions.d.ts +0 -10
  621. package/esm/domain/record/elementsScrollPositions.js +0 -20
  622. package/esm/domain/record/elementsScrollPositions.js.map +0 -1
  623. package/esm/domain/record/eventIds.d.ts +0 -4
  624. package/esm/domain/record/eventIds.js +0 -13
  625. package/esm/domain/record/eventIds.js.map +0 -1
  626. package/esm/domain/record/eventsUtils.d.ts +0 -2
  627. package/esm/domain/record/eventsUtils.js +0 -11
  628. package/esm/domain/record/eventsUtils.js.map +0 -1
  629. package/esm/domain/record/index.d.ts +0 -7
  630. package/esm/domain/record/index.js +0 -6
  631. package/esm/domain/record/index.js.map +0 -1
  632. package/esm/domain/record/internalApi.d.ts +0 -22
  633. package/esm/domain/record/internalApi.js +0 -53
  634. package/esm/domain/record/internalApi.js.map +0 -1
  635. package/esm/domain/record/mutationBatch.d.ts +0 -12
  636. package/esm/domain/record/mutationBatch.js +0 -40
  637. package/esm/domain/record/mutationBatch.js.map +0 -1
  638. package/esm/domain/record/nodeIds.d.ts +0 -15
  639. package/esm/domain/record/nodeIds.js +0 -29
  640. package/esm/domain/record/nodeIds.js.map +0 -1
  641. package/esm/domain/record/record.d.ts +0 -16
  642. package/esm/domain/record/record.js +0 -54
  643. package/esm/domain/record/record.js.map +0 -1
  644. package/esm/domain/record/record.types.d.ts +0 -4
  645. package/esm/domain/record/record.types.js +0 -2
  646. package/esm/domain/record/record.types.js.map +0 -1
  647. package/esm/domain/record/recordingScope.d.ts +0 -19
  648. package/esm/domain/record/recordingScope.js +0 -10
  649. package/esm/domain/record/recordingScope.js.map +0 -1
  650. package/esm/domain/record/serialization/index.d.ts +0 -8
  651. package/esm/domain/record/serialization/index.js +0 -7
  652. package/esm/domain/record/serialization/index.js.map +0 -1
  653. package/esm/domain/record/serialization/serialization.types.d.ts +0 -28
  654. package/esm/domain/record/serialization/serialization.types.js +0 -2
  655. package/esm/domain/record/serialization/serialization.types.js.map +0 -1
  656. package/esm/domain/record/serialization/serializationStats.d.ts +0 -12
  657. package/esm/domain/record/serialization/serializationStats.js +0 -27
  658. package/esm/domain/record/serialization/serializationStats.js.map +0 -1
  659. package/esm/domain/record/serialization/serializationTransaction.d.ts +0 -45
  660. package/esm/domain/record/serialization/serializationTransaction.js +0 -35
  661. package/esm/domain/record/serialization/serializationTransaction.js.map +0 -1
  662. package/esm/domain/record/serialization/serializationUtils.d.ts +0 -18
  663. package/esm/domain/record/serialization/serializationUtils.js +0 -80
  664. package/esm/domain/record/serialization/serializationUtils.js.map +0 -1
  665. package/esm/domain/record/serialization/serializeAttribute.d.ts +0 -4
  666. package/esm/domain/record/serialization/serializeAttribute.js +0 -38
  667. package/esm/domain/record/serialization/serializeAttribute.js.map +0 -1
  668. package/esm/domain/record/serialization/serializeAttributes.d.ts +0 -7
  669. package/esm/domain/record/serialization/serializeAttributes.js +0 -161
  670. package/esm/domain/record/serialization/serializeAttributes.js.map +0 -1
  671. package/esm/domain/record/serialization/serializeDocument.d.ts +0 -3
  672. package/esm/domain/record/serialization/serializeDocument.js +0 -8
  673. package/esm/domain/record/serialization/serializeDocument.js.map +0 -1
  674. package/esm/domain/record/serialization/serializeNode.d.ts +0 -7
  675. package/esm/domain/record/serialization/serializeNode.js +0 -149
  676. package/esm/domain/record/serialization/serializeNode.js.map +0 -1
  677. package/esm/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
  678. package/esm/domain/record/serialization/serializeStyleSheets.js +0 -16
  679. package/esm/domain/record/serialization/serializeStyleSheets.js.map +0 -1
  680. package/esm/domain/record/shadowRootsController.d.ts +0 -11
  681. package/esm/domain/record/shadowRootsController.js +0 -41
  682. package/esm/domain/record/shadowRootsController.js.map +0 -1
  683. package/esm/domain/record/startFullSnapshots.d.ts +0 -9
  684. package/esm/domain/record/startFullSnapshots.js +0 -55
  685. package/esm/domain/record/startFullSnapshots.js.map +0 -1
  686. package/esm/domain/record/trackers/index.d.ts +0 -12
  687. package/esm/domain/record/trackers/index.js +0 -12
  688. package/esm/domain/record/trackers/index.js.map +0 -1
  689. package/esm/domain/record/trackers/trackFocus.d.ts +0 -5
  690. package/esm/domain/record/trackers/trackFocus.js +0 -12
  691. package/esm/domain/record/trackers/trackFocus.js.map +0 -1
  692. package/esm/domain/record/trackers/trackFrustration.d.ts +0 -7
  693. package/esm/domain/record/trackers/trackFrustration.js +0 -28
  694. package/esm/domain/record/trackers/trackFrustration.js.map +0 -1
  695. package/esm/domain/record/trackers/trackInput.d.ts +0 -4
  696. package/esm/domain/record/trackers/trackInput.js +0 -101
  697. package/esm/domain/record/trackers/trackInput.js.map +0 -1
  698. package/esm/domain/record/trackers/trackMediaInteraction.d.ts +0 -5
  699. package/esm/domain/record/trackers/trackMediaInteraction.js +0 -26
  700. package/esm/domain/record/trackers/trackMediaInteraction.js.map +0 -1
  701. package/esm/domain/record/trackers/trackMouseInteraction.d.ts +0 -5
  702. package/esm/domain/record/trackers/trackMouseInteraction.js +0 -56
  703. package/esm/domain/record/trackers/trackMouseInteraction.js.map +0 -1
  704. package/esm/domain/record/trackers/trackMove.d.ts +0 -9
  705. package/esm/domain/record/trackers/trackMove.js +0 -51
  706. package/esm/domain/record/trackers/trackMove.js.map +0 -1
  707. package/esm/domain/record/trackers/trackMutation.d.ts +0 -11
  708. package/esm/domain/record/trackers/trackMutation.js +0 -266
  709. package/esm/domain/record/trackers/trackMutation.js.map +0 -1
  710. package/esm/domain/record/trackers/trackScroll.d.ts +0 -5
  711. package/esm/domain/record/trackers/trackScroll.js +0 -45
  712. package/esm/domain/record/trackers/trackScroll.js.map +0 -1
  713. package/esm/domain/record/trackers/trackStyleSheet.d.ts +0 -6
  714. package/esm/domain/record/trackers/trackStyleSheet.js +0 -85
  715. package/esm/domain/record/trackers/trackStyleSheet.js.map +0 -1
  716. package/esm/domain/record/trackers/trackViewEnd.d.ts +0 -5
  717. package/esm/domain/record/trackers/trackViewEnd.js +0 -17
  718. package/esm/domain/record/trackers/trackViewEnd.js.map +0 -1
  719. package/esm/domain/record/trackers/trackViewportResize.d.ts +0 -6
  720. package/esm/domain/record/trackers/trackViewportResize.js +0 -42
  721. package/esm/domain/record/trackers/trackViewportResize.js.map +0 -1
  722. package/esm/domain/record/trackers/tracker.types.d.ts +0 -3
  723. package/esm/domain/record/trackers/tracker.types.js +0 -2
  724. package/esm/domain/record/trackers/tracker.types.js.map +0 -1
  725. package/esm/domain/record/viewports.d.ts +0 -20
  726. package/esm/domain/record/viewports.js +0 -55
  727. package/esm/domain/record/viewports.js.map +0 -1
  728. package/esm/domain/replayStats.d.ts +0 -8
  729. package/esm/domain/replayStats.js +0 -51
  730. package/esm/domain/replayStats.js.map +0 -1
  731. package/esm/domain/scriptLoadingError.d.ts +0 -6
  732. package/esm/domain/scriptLoadingError.js +0 -23
  733. package/esm/domain/scriptLoadingError.js.map +0 -1
  734. package/esm/domain/segmentCollection/buildReplayPayload.d.ts +0 -15
  735. package/esm/domain/segmentCollection/buildReplayPayload.js +0 -23
  736. package/esm/domain/segmentCollection/buildReplayPayload.js.map +0 -1
  737. package/esm/domain/segmentCollection/index.d.ts +0 -4
  738. package/esm/domain/segmentCollection/index.js +0 -4
  739. package/esm/domain/segmentCollection/index.js.map +0 -1
  740. package/esm/domain/segmentCollection/segment.d.ts +0 -16
  741. package/esm/domain/segmentCollection/segment.js +0 -46
  742. package/esm/domain/segmentCollection/segment.js.map +0 -1
  743. package/esm/domain/segmentCollection/segmentCollection.d.ts +0 -31
  744. package/esm/domain/segmentCollection/segmentCollection.js +0 -106
  745. package/esm/domain/segmentCollection/segmentCollection.js.map +0 -1
  746. package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +0 -6
  747. package/esm/domain/segmentCollection/startSegmentTelemetry.js +0 -44
  748. package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +0 -1
  749. package/esm/domain/startRecordBridge.d.ts +0 -5
  750. package/esm/domain/startRecordBridge.js +0 -14
  751. package/esm/domain/startRecordBridge.js.map +0 -1
  752. package/esm/domain/startRecorderInitTelemetry.d.ts +0 -15
  753. package/esm/domain/startRecorderInitTelemetry.js +0 -52
  754. package/esm/domain/startRecorderInitTelemetry.js.map +0 -1
  755. package/esm/entries/internal.d.ts +0 -11
  756. package/esm/entries/internal.js +0 -4
  757. package/esm/entries/internal.js.map +0 -1
  758. package/esm/entries/internalSynthetics.d.ts +0 -2
  759. package/esm/entries/internalSynthetics.js +0 -23
  760. package/esm/entries/internalSynthetics.js.map +0 -1
  761. package/esm/entries/main.d.ts +0 -23
  762. package/esm/entries/main.js +0 -31
  763. package/esm/entries/main.js.map +0 -1
  764. package/esm/types/index.d.ts +0 -2
  765. package/esm/types/index.js +0 -2
  766. package/esm/types/index.js.map +0 -1
  767. package/esm/types/sessionReplay.d.ts +0 -703
  768. package/esm/types/sessionReplay.js +0 -6
  769. package/esm/types/sessionReplay.js.map +0 -1
  770. package/esm/types/sessionReplayConstants.d.ts +0 -49
  771. package/esm/types/sessionReplayConstants.js +0 -46
  772. package/esm/types/sessionReplayConstants.js.map +0 -1
  773. package/src/boot/isBrowserSupported.ts +0 -14
  774. package/src/boot/startRecording.ts +0 -70
  775. package/src/domain/profiling/transport/assembly.ts +0 -78
  776. package/src/domain/profiling/transport/buildProfileEventAttributes.ts +0 -66
  777. package/src/domain/profiling/types/index.ts +0 -2
  778. package/src/domain/profiling/types/profilerApi.types.ts +0 -87
  779. package/src/domain/profiling/utils/getNumberOfSamples.ts +0 -16
  780. package/src/domain/record/eventIds.ts +0 -17
  781. package/src/domain/record/nodeIds.ts +0 -46
  782. package/src/domain/record/serialization/serializeDocument.ts +0 -13
  783. package/src/domain/record/serialization/serializeStyleSheets.ts +0 -18
  784. package/src/domain/record/trackers/trackFrustration.ts +0 -41
@@ -1,9 +1,10 @@
1
1
  import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core'
2
2
 
3
3
  import type { ElementsScrollPositions } from './elementsScrollPositions'
4
- import type { EventIds } from './eventIds'
5
- import type { NodeIds } from './nodeIds'
4
+ import { createEventIds, createNodeIds, createStringIds, createStyleSheetIds } from './encoding'
5
+ import type { EventIds, NodeIds, StringIds, StyleSheetIds } from './encoding'
6
6
  import type { ShadowRootsController } from './shadowRootsController'
7
+ import type { CanvasManager } from './canvas/canvasManager'
7
8
 
8
9
  /**
9
10
  * State associated with a stream of session replay records. When a new stream of records
@@ -12,25 +13,47 @@ import type { ShadowRootsController } from './shadowRootsController'
12
13
  * or data which aren't present in the current stream.
13
14
  */
14
15
  export interface RecordingScope {
16
+ resetIds(): void
17
+
18
+ canvasManager: CanvasManager
15
19
  configuration: RumConfiguration
16
20
  elementsScrollPositions: ElementsScrollPositions
17
21
  eventIds: EventIds
18
22
  nodeIds: NodeIds
19
23
  shadowRootsController: ShadowRootsController
24
+ stringIds: StringIds
25
+ styleSheetIds: StyleSheetIds
20
26
  }
21
27
 
22
28
  export function createRecordingScope(
29
+ canvasManager: CanvasManager,
23
30
  configuration: RumConfiguration,
24
31
  elementsScrollPositions: ElementsScrollPositions,
25
- eventIds: EventIds,
26
- nodeIds: NodeIds,
27
32
  shadowRootsController: ShadowRootsController
28
33
  ): RecordingScope {
29
- return {
34
+ const eventIds = createEventIds()
35
+ const nodeIds = createNodeIds()
36
+ const stringIds = createStringIds()
37
+ const styleSheetIds = createStyleSheetIds()
38
+
39
+ const scope: RecordingScope = {
40
+ resetIds(): void {
41
+ scope.eventIds.clear()
42
+ scope.nodeIds.clear()
43
+ scope.stringIds.clear()
44
+ scope.styleSheetIds.clear()
45
+ scope.canvasManager.reset()
46
+ },
47
+
48
+ canvasManager,
30
49
  configuration,
31
50
  elementsScrollPositions,
32
51
  eventIds,
33
52
  nodeIds,
34
53
  shadowRootsController,
54
+ stringIds,
55
+ styleSheetIds,
35
56
  }
57
+
58
+ return scope
36
59
  }
@@ -1,8 +1,10 @@
1
+ export { createChildInsertionCursor, createRootInsertionCursor } from './insertionCursor'
1
2
  export { getElementInputValue } from './serializationUtils'
2
- export { serializeDocument } from './serializeDocument'
3
+ export { serializeFullSnapshot } from './serializeFullSnapshot'
4
+ export { serializeMutations } from './serializeMutations'
3
5
  export { serializeNode } from './serializeNode'
4
6
  export { serializeAttribute } from './serializeAttribute'
5
7
  export { createSerializationStats, updateSerializationStats, aggregateSerializationStats } from './serializationStats'
6
8
  export type { SerializationMetric, SerializationStats } from './serializationStats'
7
9
  export { serializeInTransaction, SerializationKind } from './serializationTransaction'
8
- export type { SerializationTransaction, SerializationTransactionCallback } from './serializationTransaction'
10
+ export type { SerializationTransaction } from './serializationTransaction'
@@ -0,0 +1,131 @@
1
+ import type { InsertionPoint } from '../../../types'
2
+ import type { NodeId, NodeIds } from '../encoding'
3
+
4
+ /**
5
+ * InsertionCursor tracks the point at which the next node will be inserted during
6
+ * Change-style DOM serialization.
7
+ *
8
+ * When a new node is added to the document, we use an InsertionPoint to encode its
9
+ * position. There are often multiple equally-valid ways to express the same insertion
10
+ * point; we generally want to favor encodings that use as few characters as possible (to
11
+ * reduce uncompressed size) and that are as repetitive as possible (to reduce compressed
12
+ * size). InsertionCursor's purpose is to heuristically pick an efficient encoding based
13
+ * on the nodes we've recently serialized, while doing as little work as possible. The
14
+ * results are not optimal, but should be close to it in most situations.
15
+ *
16
+ * At the beginning of the serialization process, use a factory function like
17
+ * createRootInsertionCursor() to create a new cursor with an appropriate initial
18
+ * position.
19
+ *
20
+ * When visiting a node, the expected usage pattern is as follows:
21
+ * 1. Call advance() to get a node id and insertion point for the node.
22
+ * 2. Serialize the node.
23
+ * 3. If the node has no children, we're done; continue to the node's next
24
+ * sibling and apply this algorithm again.
25
+ * 4. Otherwise, call descend() to move the cursor into the node's child list.
26
+ * 5. Recursively apply this algorithm.
27
+ * 6. Call ascend() to move the cursor out of the node's child list. We're done;
28
+ * continue to the node's next sibling and apply this algorithm again.
29
+ */
30
+ export interface InsertionCursor {
31
+ /**
32
+ * Given the node id for a new node, returns the InsertionPoint for that node.
33
+ * Updates the cursor to point to the new node's next sibling.
34
+ */
35
+ advance(node: Node): { nodeId: NodeId; insertionPoint: InsertionPoint }
36
+
37
+ /**
38
+ * Ascends out of the current child list and updates the cursor to point to the parent
39
+ * node's next sibling.
40
+ */
41
+ ascend(): void
42
+
43
+ /**
44
+ * Descends into the child list of the last node we inserted and updates the cursor to
45
+ * point to the node's first child.
46
+ */
47
+ descend(): void
48
+ }
49
+
50
+ /** Returns an InsertionCursor which starts positioned at the root of the document. */
51
+ export function createRootInsertionCursor(nodeIds: NodeIds): InsertionCursor {
52
+ return createInsertionCursor(undefined, undefined, nodeIds)
53
+ }
54
+
55
+ /**
56
+ * Returns an InsertionCursor which starts positioned in the child list of the given
57
+ * parent node. If a next sibling is provided, the cursor points to the position
58
+ * immediately before the next sibling; otherwise, the cursor points to the end of the
59
+ * child list.
60
+ */
61
+ export function createChildInsertionCursor(
62
+ parentId: NodeId,
63
+ nextSiblingId: NodeId | undefined,
64
+ nodeIds: NodeIds
65
+ ): InsertionCursor {
66
+ return createInsertionCursor(parentId, nextSiblingId, nodeIds)
67
+ }
68
+
69
+ function createInsertionCursor(
70
+ parentId: NodeId | undefined,
71
+ nextSiblingId: NodeId | undefined,
72
+ nodeIds: NodeIds
73
+ ): InsertionCursor {
74
+ interface ChildListCursor {
75
+ container: ChildListCursor | undefined
76
+ parentId: NodeId | undefined
77
+ previousSiblingId: NodeId | undefined
78
+ nextSiblingId: NodeId | undefined
79
+ }
80
+
81
+ let cursor: ChildListCursor = {
82
+ container: undefined,
83
+ parentId,
84
+ previousSiblingId: undefined,
85
+ nextSiblingId,
86
+ }
87
+
88
+ const computeInsertionPoint = (nodeId: NodeId): InsertionPoint => {
89
+ if (cursor.previousSiblingId === nodeId - 1) {
90
+ // Use an AppendAfterPreviousInsertionPoint. (i.e., 0)
91
+ return 0
92
+ }
93
+ if (cursor.nextSiblingId !== undefined) {
94
+ // Use an InsertBeforeInsertionPoint. We identify the next sibling using a
95
+ // negative integer indicating the difference between the new node's id and its next
96
+ // sibling's id.
97
+ return cursor.nextSiblingId - nodeId
98
+ }
99
+ if (cursor.parentId !== undefined) {
100
+ // Use an AppendChildInsertionPoint. We identify the parent node using a positive
101
+ // integer indicating the difference between the new node's id and its parent's id.
102
+ return nodeId - cursor.parentId
103
+ }
104
+ // There's no parent. Use a RootInsertionPoint. (i.e., null)
105
+ return null
106
+ }
107
+
108
+ return {
109
+ advance(node: Node): { nodeId: NodeId; insertionPoint: InsertionPoint } {
110
+ const nodeId = nodeIds.getOrInsert(node)
111
+ const insertionPoint = computeInsertionPoint(nodeId)
112
+ cursor.previousSiblingId = nodeId
113
+ return { nodeId, insertionPoint }
114
+ },
115
+ ascend(): void {
116
+ if (cursor.container) {
117
+ cursor = cursor.container
118
+ }
119
+ },
120
+ descend(): void {
121
+ if (cursor.previousSiblingId !== undefined) {
122
+ cursor = {
123
+ container: cursor,
124
+ parentId: cursor.previousSiblingId,
125
+ previousSiblingId: undefined,
126
+ nextSiblingId: undefined,
127
+ }
128
+ }
129
+ },
130
+ }
131
+ }
@@ -1,14 +1,3 @@
1
- import type { NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core'
2
-
3
- // Those values are the only one that can be used when inheriting privacy levels from parent to
4
- // children during serialization, since HIDDEN and IGNORE shouldn't serialize their children. This
5
- // ensures that no children are serialized when they shouldn't.
6
- export type ParentNodePrivacyLevel =
7
- | typeof NodePrivacyLevel.ALLOW
8
- | typeof NodePrivacyLevel.MASK
9
- | typeof NodePrivacyLevel.MASK_USER_INPUT
10
- | typeof NodePrivacyLevel.MASK_UNLESS_ALLOWLISTED
11
-
12
1
  /**
13
2
  * Virtual attributes. These attributes appear in the serialized attribute map of
14
3
  * elements, but they're not actually derived from the DOM; they're used to represent
@@ -36,8 +25,3 @@ export interface VirtualAttributes {
36
25
  /** For HIDDEN elements, the height of the element's bounding client rect. */
37
26
  rr_height?: string
38
27
  }
39
-
40
- export interface SerializeOptions {
41
- /** For HIDDEN elements, the height of the element's bounding client rect. */
42
- rr_height?: string
43
- }
@@ -1,82 +1,222 @@
1
- import { elapsed, timeStampNow } from '@kubesense/kubesense-browser-core'
2
-
3
- import type { BrowserRecord } from '../../../types'
4
- import type { NodeId } from '../nodeIds'
1
+ import { elapsed, timeStampNow } from '@kubesense/kubesense-js-core/time'
2
+ import type { TimeStamp } from '@kubesense/kubesense-js-core/time'
3
+ import { ChangeType, RecordType, SnapshotFormat } from '../../../types'
4
+ import type {
5
+ AddCDataSectionNodeChange,
6
+ AddDocTypeNodeChange,
7
+ AddDocumentFragmentNodeChange,
8
+ AddDocumentNodeChange,
9
+ AddElementNodeChange,
10
+ AddNodeChange,
11
+ AddShadowRootNodeChange,
12
+ AddTextNodeChange,
13
+ AttachedStyleSheetsChange,
14
+ InputSelectionChange,
15
+ InputSelectionState,
16
+ InsertionPoint,
17
+ MediaInteractionType,
18
+ RoleAnnotatedStringLiteral,
19
+ } from '../../../types'
20
+ import type {
21
+ NodeId,
22
+ RoleAnnotatedAddNodeName,
23
+ RoleAnnotatedAddNodeParams,
24
+ RoleAnnotatedAttributeChange,
25
+ RoleAnnotatedStringLiteralValue,
26
+ RoleAnnotatedStyleSheetMediaList,
27
+ RoleAnnotatedStyleSheetRules,
28
+ StyleSheetId,
29
+ } from '../encoding'
30
+ import { createChangeEncoder } from '../encoding'
5
31
  import type { EmitRecordCallback, EmitStatsCallback } from '../record.types'
6
32
  import type { RecordingScope } from '../recordingScope'
7
33
  import type { SerializationStats } from './serializationStats'
8
34
  import { createSerializationStats, updateSerializationStats } from './serializationStats'
9
35
 
10
- export type SerializationTransactionCallback = (transaction: SerializationTransaction) => void
11
-
12
36
  export const enum SerializationKind {
13
37
  INITIAL_FULL_SNAPSHOT,
14
38
  SUBSEQUENT_FULL_SNAPSHOT,
15
39
  INCREMENTAL_SNAPSHOT,
16
40
  }
17
41
 
42
+ export type SerializationTransactionCallback = (transaction: SerializationTransaction) => void
43
+
18
44
  /**
19
- * A serialization transaction is used to build and emit a sequence of session replay
20
- * records containing a serialized snapshot of the DOM.
45
+ * SerializationTransaction is used to build and emit a `BrowserChangeRecord` containing a
46
+ * serialized snapshot of the DOM. The term "transaction" is used because all the changes
47
+ * in a serialization transaction are applied together, atomically. A serialization
48
+ * transaction is thus always associated with a single timestamp.
49
+ *
50
+ * To use `SerializationTransaction`, call the builder methods it exposes to add changes
51
+ * to the transaction. At the end of the transaction, the changes will be combined into a
52
+ * single `BrowserChangeRecord` and emitted.
21
53
  */
22
54
  export interface SerializationTransaction {
23
- /** Add a record to the transaction. It will be emitted when the transaction ends. */
24
- add(record: BrowserRecord): void
25
-
26
55
  /**
27
56
  * Add a metric to the transaction's statistics. The aggregated statistics will be
28
57
  * emitted when the transaction ends.
29
58
  */
30
59
  addMetric(metric: keyof SerializationStats, value: number): void
31
60
 
61
+ /** Add a node to the document at the given insertion point. */
62
+ addNode(
63
+ pos: InsertionPoint,
64
+ nodeName: RoleAnnotatedAddNodeName<AddCDataSectionNodeChange>,
65
+ ...params: RoleAnnotatedAddNodeParams<AddCDataSectionNodeChange>
66
+ ): void
67
+ addNode(
68
+ pos: InsertionPoint,
69
+ nodeName: RoleAnnotatedAddNodeName<AddDocTypeNodeChange>,
70
+ ...params: RoleAnnotatedAddNodeParams<AddDocTypeNodeChange>
71
+ ): void
72
+ addNode(
73
+ pos: InsertionPoint,
74
+ nodeName: RoleAnnotatedAddNodeName<AddDocumentNodeChange>,
75
+ ...params: RoleAnnotatedAddNodeParams<AddDocumentNodeChange>
76
+ ): void
77
+ addNode(
78
+ pos: InsertionPoint,
79
+ nodeName: RoleAnnotatedAddNodeName<AddDocumentFragmentNodeChange>,
80
+ ...params: RoleAnnotatedAddNodeParams<AddDocumentFragmentNodeChange>
81
+ ): void
82
+ addNode(
83
+ pos: InsertionPoint,
84
+ nodeName: RoleAnnotatedAddNodeName<AddShadowRootNodeChange>,
85
+ ...params: RoleAnnotatedAddNodeParams<AddShadowRootNodeChange>
86
+ ): void
87
+ addNode(
88
+ pos: InsertionPoint,
89
+ nodeName: RoleAnnotatedAddNodeName<AddTextNodeChange>,
90
+ ...params: RoleAnnotatedAddNodeParams<AddTextNodeChange>
91
+ ): void
92
+ addNode<Name extends RoleAnnotatedAddNodeName<AddElementNodeChange>>(
93
+ pos: InsertionPoint,
94
+ nodeName: Name,
95
+ // This overload is deliberately unsatisfiable; a '#'-prefixed name belongs to one of
96
+ // the node kinds above, so we should never reach it unless the caller provided
97
+ // invalid parameters.
98
+ ...params: RoleAnnotatedStringLiteralValue<Name> extends `#${string}`
99
+ ? [never]
100
+ : RoleAnnotatedAddNodeParams<AddElementNodeChange>
101
+ ): void
102
+
103
+ /** Add a stylesheet to the document. */
104
+ addStyleSheet(
105
+ rules: RoleAnnotatedStyleSheetRules,
106
+ mediaList?: RoleAnnotatedStyleSheetMediaList,
107
+ disabled?: boolean
108
+ ): void
109
+
32
110
  /**
33
- * Assign and return an id to the given node. If the node has previously been assigned
34
- * an id, the existing id will be reused.
111
+ * Attach one or more stylesheets to a <link>, <style>, #document, #document-fragment,
112
+ * or #shadow-root node.
35
113
  */
36
- assignId(node: Node): NodeId
114
+ attachStyleSheets(nodeId: NodeId, sheetIds: StyleSheetId[]): void
115
+
116
+ /** Remove a node from the document. */
117
+ removeNode(nodeId: NodeId): void
118
+
119
+ /** Set a node's attributes to the given values. */
120
+ setAttributes(change: RoleAnnotatedAttributeChange): void
121
+
122
+ /** Set the content of a canvas node to the given resource ID. */
123
+ setImageContent(nodeId: NodeId, resourceId: RoleAnnotatedStringLiteral): void
124
+
125
+ /** Set the selection state of one or more checkboxes, radio buttons, or <option> elements. */
126
+ setInputSelection(state: InputSelectionState, nodeIds: NodeId[]): void
127
+
128
+ /** Set the value of a form element. */
129
+ setInputValue(nodeId: NodeId, value: RoleAnnotatedStringLiteral): void
130
+
131
+ /** Set the media playback state of an <audio> or <video> element. */
132
+ setMediaPlaybackState(nodeId: NodeId, state: MediaInteractionType): void
133
+
134
+ /** Set the given node's scroll position in CSS pixels. */
135
+ setScrollPosition(nodeId: NodeId, x: number, y: number): void
136
+
137
+ /** Set the given node's size in CSS pixels. */
138
+ setSize(nodeId: NodeId, width: number, height: number): void
139
+
140
+ /** Set the given node's text content. */
141
+ setText(nodeId: NodeId, content: RoleAnnotatedStringLiteral): void
37
142
 
38
143
  /** The kind of serialization being performed in this transaction. */
39
144
  kind: SerializationKind
40
145
 
41
- /**
42
- * A set used to track nodes which have been serialized in the current transaction. If
43
- * undefined, this feature is disabled; this is the default state in new transactions
44
- * for performance reasons. Set the property to a non-undefined value if you need this
45
- * capability.
46
- */
47
- serializedNodeIds?: Set<NodeId>
48
-
49
146
  /** The recording scope in which this transaction is occurring. */
50
147
  scope: RecordingScope
51
148
  }
52
149
 
53
- /**
54
- * Perform serialization within a transaction. At the end of the transaction, the
55
- * generated records and statistics will be emitted.
56
- */
57
150
  export function serializeInTransaction(
58
151
  kind: SerializationKind,
59
152
  emitRecord: EmitRecordCallback,
60
153
  emitStats: EmitStatsCallback,
61
154
  scope: RecordingScope,
155
+ timestamp: TimeStamp,
62
156
  serialize: SerializationTransactionCallback
63
157
  ): void {
64
- const records: BrowserRecord[] = []
158
+ const encoder = createChangeEncoder(scope.stringIds)
65
159
  const stats = createSerializationStats()
66
160
 
67
161
  const transaction: SerializationTransaction = {
68
- add(record: BrowserRecord): void {
69
- records.push(record)
70
- },
71
162
  addMetric(metric: keyof SerializationStats, value: number): void {
72
163
  updateSerializationStats(stats, metric, value)
73
164
  },
74
- assignId(node: Node): NodeId {
75
- const id = scope.nodeIds.assign(node)
76
- if (transaction.serializedNodeIds) {
77
- transaction.serializedNodeIds.add(id)
165
+ // The overloads declared above are what callers are checked against; this implementation
166
+ // takes the parameters of any of them.
167
+ addNode(...change: unknown[]): void {
168
+ encoder.add(ChangeType.AddNode, change as AddNodeChange)
169
+ },
170
+ addStyleSheet(
171
+ rules: RoleAnnotatedStyleSheetRules,
172
+ mediaList?: RoleAnnotatedStyleSheetMediaList,
173
+ disabled?: boolean
174
+ ): void {
175
+ if (disabled) {
176
+ encoder.add(ChangeType.AddStyleSheet, [rules, mediaList || [], disabled])
177
+ } else if (mediaList) {
178
+ encoder.add(ChangeType.AddStyleSheet, [rules, mediaList])
179
+ } else {
180
+ encoder.add(ChangeType.AddStyleSheet, [rules])
181
+ }
182
+ },
183
+ attachStyleSheets(nodeId: NodeId, sheetIds: StyleSheetId[]): void {
184
+ const change: AttachedStyleSheetsChange = [nodeId]
185
+ for (const sheetId of sheetIds) {
186
+ change.push(sheetId)
187
+ }
188
+ encoder.add(ChangeType.AttachedStyleSheets, change)
189
+ },
190
+ removeNode(nodeId: NodeId): void {
191
+ encoder.add(ChangeType.RemoveNode, nodeId)
192
+ },
193
+ setAttributes(change: RoleAnnotatedAttributeChange): void {
194
+ encoder.add(ChangeType.Attribute, change)
195
+ },
196
+ setInputSelection(state: InputSelectionState, nodeIds: NodeId[]): void {
197
+ const change: InputSelectionChange = [state]
198
+ for (const nodeId of nodeIds) {
199
+ change.push(nodeId)
78
200
  }
79
- return id
201
+ encoder.add(ChangeType.InputSelection, change)
202
+ },
203
+ setInputValue(nodeId: NodeId, value: RoleAnnotatedStringLiteral): void {
204
+ encoder.add(ChangeType.InputValue, [nodeId, value])
205
+ },
206
+ setMediaPlaybackState(nodeId: NodeId, state: MediaInteractionType): void {
207
+ encoder.add(ChangeType.MediaPlaybackState, [nodeId, state])
208
+ },
209
+ setScrollPosition(nodeId: NodeId, x: number, y: number): void {
210
+ encoder.add(ChangeType.ScrollPosition, [nodeId, x, y])
211
+ },
212
+ setSize(nodeId: NodeId, width: number, height: number): void {
213
+ encoder.add(ChangeType.Size, [nodeId, width, height])
214
+ },
215
+ setText(nodeId: NodeId, content: RoleAnnotatedStringLiteral): void {
216
+ encoder.add(ChangeType.Text, [nodeId, content])
217
+ },
218
+ setImageContent(nodeId: NodeId, resourceId: RoleAnnotatedStringLiteral): void {
219
+ encoder.add(ChangeType.ImageContent, [nodeId, resourceId])
80
220
  },
81
221
  kind,
82
222
  scope,
@@ -86,8 +226,22 @@ export function serializeInTransaction(
86
226
  serialize(transaction)
87
227
  updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()))
88
228
 
89
- for (const record of records) {
90
- emitRecord(record)
229
+ const changes = encoder.flush()
230
+ if (changes.length > 0) {
231
+ if (kind === SerializationKind.INITIAL_FULL_SNAPSHOT || kind === SerializationKind.SUBSEQUENT_FULL_SNAPSHOT) {
232
+ emitRecord({
233
+ data: changes,
234
+ format: SnapshotFormat.Change,
235
+ type: RecordType.FullSnapshot,
236
+ timestamp,
237
+ })
238
+ } else {
239
+ emitRecord({
240
+ data: changes,
241
+ type: RecordType.Change,
242
+ timestamp,
243
+ })
244
+ }
91
245
  }
92
246
 
93
247
  emitStats(stats)
@@ -1,4 +1,4 @@
1
- import { buildUrl } from '@kubesense/kubesense-browser-core'
1
+ import { buildUrl } from '@kubesense/kubesense-js-core/util'
2
2
  import { CENSORED_STRING_MARK, shouldMaskNode } from '@kubesense/kubesense-browser-rum-core'
3
3
  import type { NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core'
4
4
 
@@ -76,20 +76,6 @@ function makeUrlAbsolute(url: string, baseUrl: string): string {
76
76
  }
77
77
  }
78
78
 
79
- const TAG_NAME_REGEX = /[^a-z1-6-_]/
80
- export function getValidTagName(tagName: string): string {
81
- const processedTagName = tagName.toLowerCase().trim()
82
-
83
- if (TAG_NAME_REGEX.test(processedTagName)) {
84
- // if the tag name is odd and we cannot extract
85
- // anything from the string, then we return a
86
- // generic div
87
- return 'div'
88
- }
89
-
90
- return processedTagName
91
- }
92
-
93
79
  /**
94
80
  * Returns the tag name of the given element, normalized to ensure a consistent lowercase
95
81
  * representation regardless of whether the element is HTML, XHTML, or SVG.
@@ -1,41 +1,32 @@
1
1
  import { NodePrivacyLevel, shouldMaskNode } from '@kubesense/kubesense-browser-rum-core'
2
2
  import { isSafari } from '@kubesense/kubesense-browser-core'
3
+ import type { RoleAnnotatedAttributeAssignment } from '../encoding'
4
+ import { createAttributeAssignment } from '../encoding'
3
5
  import { getElementInputValue, normalizedTagName, switchToAbsoluteUrl } from './serializationUtils'
4
6
  import { serializeAttribute } from './serializeAttribute'
5
7
  import type { SerializationTransaction } from './serializationTransaction'
6
8
  import { SerializationKind } from './serializationTransaction'
7
9
  import type { VirtualAttributes } from './serialization.types'
8
10
 
9
- export function serializeAttributes(
10
- element: Element,
11
- nodePrivacyLevel: NodePrivacyLevel,
12
- transaction: SerializationTransaction
13
- ): Record<string, number | string> {
14
- return {
15
- ...serializeDOMAttributes(element, nodePrivacyLevel, transaction),
16
- ...serializeVirtualAttributes(element, nodePrivacyLevel, transaction),
17
- }
18
- }
19
-
20
11
  export function serializeDOMAttributes(
21
12
  element: Element,
22
13
  nodePrivacyLevel: NodePrivacyLevel,
23
14
  transaction: SerializationTransaction
24
- ): Record<string, string> {
15
+ ): RoleAnnotatedAttributeAssignment[] {
25
16
  if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {
26
- return {}
17
+ return []
27
18
  }
28
19
 
29
- const attrs: Record<string, string> = {}
20
+ const attributes: RoleAnnotatedAttributeAssignment[] = []
30
21
  const tagName = normalizedTagName(element)
31
22
 
32
23
  for (let i = 0; i < element.attributes.length; i += 1) {
33
24
  const attribute = element.attributes.item(i)!
34
25
  const attributeName = attribute.name
35
- const attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, transaction.scope.configuration)
36
- if (attributeValue !== null) {
37
- attrs[attributeName] = attributeValue
26
+ if (attributeName === 'value' || attributeName === 'selected' || attributeName === 'checked') {
27
+ continue // Handled specially below.
38
28
  }
29
+ serializeDOMAttributeInto(attributes, element, tagName, attributeName, nodePrivacyLevel, transaction)
39
30
  }
40
31
 
41
32
  if (
@@ -44,20 +35,21 @@ export function serializeDOMAttributes(
44
35
  ) {
45
36
  const formValue = getElementInputValue(element, nodePrivacyLevel)
46
37
  if (formValue !== undefined) {
47
- attrs.value = formValue
38
+ attributes.push(createAttributeAssignment(tagName, 'value', formValue))
48
39
  }
40
+ } else if (element.hasAttribute('value')) {
41
+ serializeDOMAttributeInto(attributes, element, tagName, 'value', nodePrivacyLevel, transaction)
49
42
  }
50
43
 
51
44
  /**
52
45
  * <Option> can be selected, which occurs if its `value` matches ancestor `<Select>.value`
53
46
  */
54
47
  if (tagName === 'option') {
55
- const optionElement = element as HTMLOptionElement
56
- if (optionElement.selected && !shouldMaskNode(optionElement, nodePrivacyLevel)) {
57
- attrs.selected = ''
58
- } else {
59
- delete attrs.selected
48
+ if ((element as HTMLOptionElement).selected && !shouldMaskNode(element, nodePrivacyLevel)) {
49
+ attributes.push(createAttributeAssignment(tagName, 'selected', ''))
60
50
  }
51
+ } else if (element.hasAttribute('selected')) {
52
+ serializeDOMAttributeInto(attributes, element, tagName, 'selected', nodePrivacyLevel, transaction)
61
53
  }
62
54
 
63
55
  /**
@@ -70,14 +62,28 @@ export function serializeDOMAttributes(
70
62
  */
71
63
  const inputElement = element as HTMLInputElement
72
64
  if (tagName === 'input' && (inputElement.type === 'radio' || inputElement.type === 'checkbox')) {
73
- if (inputElement.checked && !shouldMaskNode(inputElement, nodePrivacyLevel)) {
74
- attrs.checked = ''
75
- } else {
76
- delete attrs.checked
65
+ if (inputElement.checked && !shouldMaskNode(element, nodePrivacyLevel)) {
66
+ attributes.push(createAttributeAssignment(tagName, 'checked', ''))
77
67
  }
68
+ } else if (element.hasAttribute('checked')) {
69
+ serializeDOMAttributeInto(attributes, element, tagName, 'checked', nodePrivacyLevel, transaction)
78
70
  }
79
71
 
80
- return attrs
72
+ return attributes
73
+ }
74
+
75
+ function serializeDOMAttributeInto(
76
+ attributes: RoleAnnotatedAttributeAssignment[],
77
+ element: Element,
78
+ tagName: string,
79
+ attributeName: string,
80
+ nodePrivacyLevel: NodePrivacyLevel,
81
+ transaction: SerializationTransaction
82
+ ): void {
83
+ const attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, transaction.scope.configuration)
84
+ if (attributeValue !== null) {
85
+ attributes.push(createAttributeAssignment(tagName, attributeName, attributeValue))
86
+ }
81
87
  }
82
88
 
83
89
  export function serializeVirtualAttributes(
@@ -90,14 +96,12 @@ export function serializeVirtualAttributes(
90
96
  }
91
97
 
92
98
  const attrs: VirtualAttributes = {}
93
- const doc = element.ownerDocument
94
99
  const tagName = normalizedTagName(element)
95
100
 
96
101
  // remote css
97
102
  if (tagName === 'link') {
98
- const stylesheet = Array.from(doc.styleSheets).find((s) => s.href === (element as HTMLLinkElement).href)
99
- const cssText = getCssRulesString(stylesheet)
100
- if (cssText && stylesheet) {
103
+ const cssText = getCssRulesString((element as HTMLLinkElement).sheet)
104
+ if (cssText) {
101
105
  transaction.addMetric('cssText', cssText.length)
102
106
  attrs._cssText = cssText
103
107
  }