@kubesense/kubesense-browser-rum 1.0.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 (540) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +34 -0
  3. package/bundle/chunks/profiler-b64730a2109c3ddbc539-kubesense-rum.js +1 -0
  4. package/bundle/chunks/recorder-9ae532a18bac5f4280da-kubesense-rum.js +1 -0
  5. package/bundle/kubesense-rum.js +1 -0
  6. package/cjs/boot/isBrowserSupported.d.ts +4 -0
  7. package/cjs/boot/isBrowserSupported.js +17 -0
  8. package/cjs/boot/isBrowserSupported.js.map +1 -0
  9. package/cjs/boot/lazyLoadProfiler.d.ts +4 -0
  10. package/cjs/boot/lazyLoadProfiler.js +54 -0
  11. package/cjs/boot/lazyLoadProfiler.js.map +1 -0
  12. package/cjs/boot/lazyLoadRecorder.d.ts +4 -0
  13. package/cjs/boot/lazyLoadRecorder.js +54 -0
  14. package/cjs/boot/lazyLoadRecorder.js.map +1 -0
  15. package/cjs/boot/postStartStrategy.d.ts +33 -0
  16. package/cjs/boot/postStartStrategy.js +98 -0
  17. package/cjs/boot/postStartStrategy.js.map +1 -0
  18. package/cjs/boot/preStartStrategy.d.ts +6 -0
  19. package/cjs/boot/preStartStrategy.js +24 -0
  20. package/cjs/boot/preStartStrategy.js.map +1 -0
  21. package/cjs/boot/profilerApi.d.ts +2 -0
  22. package/cjs/boot/profilerApi.js +53 -0
  23. package/cjs/boot/profilerApi.js.map +1 -0
  24. package/cjs/boot/recorderApi.d.ts +4 -0
  25. package/cjs/boot/recorderApi.js +73 -0
  26. package/cjs/boot/recorderApi.js.map +1 -0
  27. package/cjs/boot/startRecording.d.ts +6 -0
  28. package/cjs/boot/startRecording.js +45 -0
  29. package/cjs/boot/startRecording.js.map +1 -0
  30. package/cjs/domain/deflate/deflateEncoder.d.ts +3 -0
  31. package/cjs/domain/deflate/deflateEncoder.js +110 -0
  32. package/cjs/domain/deflate/deflateEncoder.js.map +1 -0
  33. package/cjs/domain/deflate/deflateWorker.d.ts +30 -0
  34. package/cjs/domain/deflate/deflateWorker.js +104 -0
  35. package/cjs/domain/deflate/deflateWorker.js.map +1 -0
  36. package/cjs/domain/deflate/index.d.ts +3 -0
  37. package/cjs/domain/deflate/index.js +10 -0
  38. package/cjs/domain/deflate/index.js.map +1 -0
  39. package/cjs/domain/getSessionReplayLink.d.ts +2 -0
  40. package/cjs/domain/getSessionReplayLink.js +35 -0
  41. package/cjs/domain/getSessionReplayLink.js.map +1 -0
  42. package/cjs/domain/profiling/profiler.d.ts +7 -0
  43. package/cjs/domain/profiling/profiler.js +244 -0
  44. package/cjs/domain/profiling/profiler.js.map +1 -0
  45. package/cjs/domain/profiling/profilingContext.d.ts +6 -0
  46. package/cjs/domain/profiling/profilingContext.js +28 -0
  47. package/cjs/domain/profiling/profilingContext.js.map +1 -0
  48. package/cjs/domain/profiling/profilingSupported.d.ts +1 -0
  49. package/cjs/domain/profiling/profilingSupported.js +11 -0
  50. package/cjs/domain/profiling/profilingSupported.js.map +1 -0
  51. package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  52. package/cjs/domain/profiling/test-utils/mockedTrace.js +57 -0
  53. package/cjs/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  54. package/cjs/domain/profiling/transport/assembly.d.ts +21 -0
  55. package/cjs/domain/profiling/transport/assembly.js +45 -0
  56. package/cjs/domain/profiling/transport/assembly.js.map +1 -0
  57. package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +25 -0
  58. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +50 -0
  59. package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  60. package/cjs/domain/profiling/types/index.d.ts +2 -0
  61. package/cjs/domain/profiling/types/index.js +3 -0
  62. package/cjs/domain/profiling/types/index.js.map +1 -0
  63. package/cjs/domain/profiling/types/profilerApi.types.d.ts +58 -0
  64. package/cjs/domain/profiling/types/profilerApi.types.js +5 -0
  65. package/cjs/domain/profiling/types/profilerApi.types.js.map +1 -0
  66. package/cjs/domain/profiling/types/rumProfiler.types.d.ts +72 -0
  67. package/cjs/domain/profiling/types/rumProfiler.types.js +3 -0
  68. package/cjs/domain/profiling/types/rumProfiler.types.js.map +1 -0
  69. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  70. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +7 -0
  71. package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  72. package/cjs/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  73. package/cjs/domain/profiling/utils/getDefaultViewName.js +14 -0
  74. package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  75. package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +7 -0
  76. package/cjs/domain/profiling/utils/getNumberOfSamples.js +18 -0
  77. package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  78. package/cjs/domain/record/assembly.d.ts +2 -0
  79. package/cjs/domain/record/assembly.js +16 -0
  80. package/cjs/domain/record/assembly.js.map +1 -0
  81. package/cjs/domain/record/elementsScrollPositions.d.ts +10 -0
  82. package/cjs/domain/record/elementsScrollPositions.js +23 -0
  83. package/cjs/domain/record/elementsScrollPositions.js.map +1 -0
  84. package/cjs/domain/record/eventIds.d.ts +4 -0
  85. package/cjs/domain/record/eventIds.js +16 -0
  86. package/cjs/domain/record/eventIds.js.map +1 -0
  87. package/cjs/domain/record/eventsUtils.d.ts +2 -0
  88. package/cjs/domain/record/eventsUtils.js +15 -0
  89. package/cjs/domain/record/eventsUtils.js.map +1 -0
  90. package/cjs/domain/record/index.d.ts +7 -0
  91. package/cjs/domain/record/index.js +17 -0
  92. package/cjs/domain/record/index.js.map +1 -0
  93. package/cjs/domain/record/internalApi.d.ts +22 -0
  94. package/cjs/domain/record/internalApi.js +57 -0
  95. package/cjs/domain/record/internalApi.js.map +1 -0
  96. package/cjs/domain/record/mutationBatch.d.ts +12 -0
  97. package/cjs/domain/record/mutationBatch.js +44 -0
  98. package/cjs/domain/record/mutationBatch.js.map +1 -0
  99. package/cjs/domain/record/nodeIds.d.ts +15 -0
  100. package/cjs/domain/record/nodeIds.js +32 -0
  101. package/cjs/domain/record/nodeIds.js.map +1 -0
  102. package/cjs/domain/record/record.d.ts +16 -0
  103. package/cjs/domain/record/record.js +90 -0
  104. package/cjs/domain/record/record.js.map +1 -0
  105. package/cjs/domain/record/record.types.d.ts +4 -0
  106. package/cjs/domain/record/record.types.js +3 -0
  107. package/cjs/domain/record/record.types.js.map +1 -0
  108. package/cjs/domain/record/recordingScope.d.ts +19 -0
  109. package/cjs/domain/record/recordingScope.js +13 -0
  110. package/cjs/domain/record/recordingScope.js.map +1 -0
  111. package/cjs/domain/record/serialization/index.d.ts +8 -0
  112. package/cjs/domain/record/serialization/index.js +18 -0
  113. package/cjs/domain/record/serialization/index.js.map +1 -0
  114. package/cjs/domain/record/serialization/serialization.types.d.ts +28 -0
  115. package/cjs/domain/record/serialization/serialization.types.js +3 -0
  116. package/cjs/domain/record/serialization/serialization.types.js.map +1 -0
  117. package/cjs/domain/record/serialization/serializationStats.d.ts +12 -0
  118. package/cjs/domain/record/serialization/serializationStats.js +32 -0
  119. package/cjs/domain/record/serialization/serializationStats.js.map +1 -0
  120. package/cjs/domain/record/serialization/serializationTransaction.d.ts +45 -0
  121. package/cjs/domain/record/serialization/serializationTransaction.js +38 -0
  122. package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -0
  123. package/cjs/domain/record/serialization/serializationUtils.d.ts +18 -0
  124. package/cjs/domain/record/serialization/serializationUtils.js +88 -0
  125. package/cjs/domain/record/serialization/serializationUtils.js.map +1 -0
  126. package/cjs/domain/record/serialization/serializeAttribute.d.ts +4 -0
  127. package/cjs/domain/record/serialization/serializeAttribute.js +42 -0
  128. package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -0
  129. package/cjs/domain/record/serialization/serializeAttributes.d.ts +7 -0
  130. package/cjs/domain/record/serialization/serializeAttributes.js +167 -0
  131. package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -0
  132. package/cjs/domain/record/serialization/serializeDocument.d.ts +3 -0
  133. package/cjs/domain/record/serialization/serializeDocument.js +11 -0
  134. package/cjs/domain/record/serialization/serializeDocument.js.map +1 -0
  135. package/cjs/domain/record/serialization/serializeNode.d.ts +7 -0
  136. package/cjs/domain/record/serialization/serializeNode.js +154 -0
  137. package/cjs/domain/record/serialization/serializeNode.js.map +1 -0
  138. package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +2 -0
  139. package/cjs/domain/record/serialization/serializeStyleSheets.js +19 -0
  140. package/cjs/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  141. package/cjs/domain/record/shadowRootsController.d.ts +11 -0
  142. package/cjs/domain/record/shadowRootsController.js +45 -0
  143. package/cjs/domain/record/shadowRootsController.js.map +1 -0
  144. package/cjs/domain/record/startFullSnapshots.d.ts +9 -0
  145. package/cjs/domain/record/startFullSnapshots.js +59 -0
  146. package/cjs/domain/record/startFullSnapshots.js.map +1 -0
  147. package/cjs/domain/record/trackers/index.d.ts +12 -0
  148. package/cjs/domain/record/trackers/index.js +27 -0
  149. package/cjs/domain/record/trackers/index.js.map +1 -0
  150. package/cjs/domain/record/trackers/trackFocus.d.ts +5 -0
  151. package/cjs/domain/record/trackers/trackFocus.js +15 -0
  152. package/cjs/domain/record/trackers/trackFocus.js.map +1 -0
  153. package/cjs/domain/record/trackers/trackFrustration.d.ts +7 -0
  154. package/cjs/domain/record/trackers/trackFrustration.js +31 -0
  155. package/cjs/domain/record/trackers/trackFrustration.js.map +1 -0
  156. package/cjs/domain/record/trackers/trackInput.d.ts +4 -0
  157. package/cjs/domain/record/trackers/trackInput.js +104 -0
  158. package/cjs/domain/record/trackers/trackInput.js.map +1 -0
  159. package/cjs/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  160. package/cjs/domain/record/trackers/trackMediaInteraction.js +29 -0
  161. package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  162. package/cjs/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  163. package/cjs/domain/record/trackers/trackMouseInteraction.js +59 -0
  164. package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  165. package/cjs/domain/record/trackers/trackMove.d.ts +9 -0
  166. package/cjs/domain/record/trackers/trackMove.js +55 -0
  167. package/cjs/domain/record/trackers/trackMove.js.map +1 -0
  168. package/cjs/domain/record/trackers/trackMutation.d.ts +11 -0
  169. package/cjs/domain/record/trackers/trackMutation.js +270 -0
  170. package/cjs/domain/record/trackers/trackMutation.js.map +1 -0
  171. package/cjs/domain/record/trackers/trackScroll.d.ts +5 -0
  172. package/cjs/domain/record/trackers/trackScroll.js +48 -0
  173. package/cjs/domain/record/trackers/trackScroll.js.map +1 -0
  174. package/cjs/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  175. package/cjs/domain/record/trackers/trackStyleSheet.js +89 -0
  176. package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -0
  177. package/cjs/domain/record/trackers/trackViewEnd.d.ts +5 -0
  178. package/cjs/domain/record/trackers/trackViewEnd.js +20 -0
  179. package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -0
  180. package/cjs/domain/record/trackers/trackViewportResize.d.ts +6 -0
  181. package/cjs/domain/record/trackers/trackViewportResize.js +46 -0
  182. package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -0
  183. package/cjs/domain/record/trackers/tracker.types.d.ts +3 -0
  184. package/cjs/domain/record/trackers/tracker.types.js +3 -0
  185. package/cjs/domain/record/trackers/tracker.types.js.map +1 -0
  186. package/cjs/domain/record/viewports.d.ts +20 -0
  187. package/cjs/domain/record/viewports.js +60 -0
  188. package/cjs/domain/record/viewports.js.map +1 -0
  189. package/cjs/domain/replayStats.d.ts +8 -0
  190. package/cjs/domain/replayStats.js +60 -0
  191. package/cjs/domain/replayStats.js.map +1 -0
  192. package/cjs/domain/scriptLoadingError.d.ts +6 -0
  193. package/cjs/domain/scriptLoadingError.js +26 -0
  194. package/cjs/domain/scriptLoadingError.js.map +1 -0
  195. package/cjs/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  196. package/cjs/domain/segmentCollection/buildReplayPayload.js +26 -0
  197. package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  198. package/cjs/domain/segmentCollection/index.d.ts +4 -0
  199. package/cjs/domain/segmentCollection/index.js +11 -0
  200. package/cjs/domain/segmentCollection/index.js.map +1 -0
  201. package/cjs/domain/segmentCollection/segment.d.ts +16 -0
  202. package/cjs/domain/segmentCollection/segment.js +82 -0
  203. package/cjs/domain/segmentCollection/segment.js.map +1 -0
  204. package/cjs/domain/segmentCollection/segmentCollection.d.ts +31 -0
  205. package/cjs/domain/segmentCollection/segmentCollection.js +113 -0
  206. package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -0
  207. package/cjs/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  208. package/cjs/domain/segmentCollection/startSegmentTelemetry.js +47 -0
  209. package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  210. package/cjs/domain/startRecordBridge.d.ts +5 -0
  211. package/cjs/domain/startRecordBridge.js +17 -0
  212. package/cjs/domain/startRecordBridge.js.map +1 -0
  213. package/cjs/domain/startRecorderInitTelemetry.d.ts +15 -0
  214. package/cjs/domain/startRecorderInitTelemetry.js +55 -0
  215. package/cjs/domain/startRecorderInitTelemetry.js.map +1 -0
  216. package/cjs/entries/internal.d.ts +11 -0
  217. package/cjs/entries/internal.js +28 -0
  218. package/cjs/entries/internal.js.map +1 -0
  219. package/cjs/entries/internalSynthetics.d.ts +2 -0
  220. package/cjs/entries/internalSynthetics.js +27 -0
  221. package/cjs/entries/internalSynthetics.js.map +1 -0
  222. package/cjs/entries/main.d.ts +23 -0
  223. package/cjs/entries/main.js +35 -0
  224. package/cjs/entries/main.js.map +1 -0
  225. package/cjs/types/index.d.ts +2 -0
  226. package/cjs/types/index.js +18 -0
  227. package/cjs/types/index.js.map +1 -0
  228. package/cjs/types/sessionReplay.d.ts +703 -0
  229. package/cjs/types/sessionReplay.js +7 -0
  230. package/cjs/types/sessionReplay.js.map +1 -0
  231. package/cjs/types/sessionReplayConstants.d.ts +49 -0
  232. package/cjs/types/sessionReplayConstants.js +49 -0
  233. package/cjs/types/sessionReplayConstants.js.map +1 -0
  234. package/esm/boot/isBrowserSupported.d.ts +4 -0
  235. package/esm/boot/isBrowserSupported.js +14 -0
  236. package/esm/boot/isBrowserSupported.js.map +1 -0
  237. package/esm/boot/lazyLoadProfiler.d.ts +4 -0
  238. package/esm/boot/lazyLoadProfiler.js +18 -0
  239. package/esm/boot/lazyLoadProfiler.js.map +1 -0
  240. package/esm/boot/lazyLoadRecorder.d.ts +4 -0
  241. package/esm/boot/lazyLoadRecorder.js +18 -0
  242. package/esm/boot/lazyLoadRecorder.js.map +1 -0
  243. package/esm/boot/postStartStrategy.d.ts +33 -0
  244. package/esm/boot/postStartStrategy.js +95 -0
  245. package/esm/boot/postStartStrategy.js.map +1 -0
  246. package/esm/boot/preStartStrategy.d.ts +6 -0
  247. package/esm/boot/preStartStrategy.js +21 -0
  248. package/esm/boot/preStartStrategy.js.map +1 -0
  249. package/esm/boot/profilerApi.d.ts +2 -0
  250. package/esm/boot/profilerApi.js +50 -0
  251. package/esm/boot/profilerApi.js.map +1 -0
  252. package/esm/boot/recorderApi.d.ts +4 -0
  253. package/esm/boot/recorderApi.js +70 -0
  254. package/esm/boot/recorderApi.js.map +1 -0
  255. package/esm/boot/startRecording.d.ts +6 -0
  256. package/esm/boot/startRecording.js +42 -0
  257. package/esm/boot/startRecording.js.map +1 -0
  258. package/esm/domain/deflate/deflateEncoder.d.ts +3 -0
  259. package/esm/domain/deflate/deflateEncoder.js +107 -0
  260. package/esm/domain/deflate/deflateEncoder.js.map +1 -0
  261. package/esm/domain/deflate/deflateWorker.d.ts +30 -0
  262. package/esm/domain/deflate/deflateWorker.js +97 -0
  263. package/esm/domain/deflate/deflateWorker.js.map +1 -0
  264. package/esm/domain/deflate/index.d.ts +3 -0
  265. package/esm/domain/deflate/index.js +3 -0
  266. package/esm/domain/deflate/index.js.map +1 -0
  267. package/esm/domain/getSessionReplayLink.d.ts +2 -0
  268. package/esm/domain/getSessionReplayLink.js +32 -0
  269. package/esm/domain/getSessionReplayLink.js.map +1 -0
  270. package/esm/domain/profiling/profiler.d.ts +7 -0
  271. package/esm/domain/profiling/profiler.js +240 -0
  272. package/esm/domain/profiling/profiler.js.map +1 -0
  273. package/esm/domain/profiling/profilingContext.d.ts +6 -0
  274. package/esm/domain/profiling/profilingContext.js +25 -0
  275. package/esm/domain/profiling/profilingContext.js.map +1 -0
  276. package/esm/domain/profiling/profilingSupported.d.ts +1 -0
  277. package/esm/domain/profiling/profilingSupported.js +8 -0
  278. package/esm/domain/profiling/profilingSupported.js.map +1 -0
  279. package/esm/domain/profiling/test-utils/mockedTrace.d.ts +3 -0
  280. package/esm/domain/profiling/test-utils/mockedTrace.js +54 -0
  281. package/esm/domain/profiling/test-utils/mockedTrace.js.map +1 -0
  282. package/esm/domain/profiling/transport/assembly.d.ts +21 -0
  283. package/esm/domain/profiling/transport/assembly.js +42 -0
  284. package/esm/domain/profiling/transport/assembly.js.map +1 -0
  285. package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +25 -0
  286. package/esm/domain/profiling/transport/buildProfileEventAttributes.js +47 -0
  287. package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +1 -0
  288. package/esm/domain/profiling/types/index.d.ts +2 -0
  289. package/esm/domain/profiling/types/index.js +2 -0
  290. package/esm/domain/profiling/types/index.js.map +1 -0
  291. package/esm/domain/profiling/types/profilerApi.types.d.ts +58 -0
  292. package/esm/domain/profiling/types/profilerApi.types.js +4 -0
  293. package/esm/domain/profiling/types/profilerApi.types.js.map +1 -0
  294. package/esm/domain/profiling/types/rumProfiler.types.d.ts +72 -0
  295. package/esm/domain/profiling/types/rumProfiler.types.js +2 -0
  296. package/esm/domain/profiling/types/rumProfiler.types.js.map +1 -0
  297. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +1 -0
  298. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +3 -0
  299. package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -0
  300. package/esm/domain/profiling/utils/getDefaultViewName.d.ts +1 -0
  301. package/esm/domain/profiling/utils/getDefaultViewName.js +11 -0
  302. package/esm/domain/profiling/utils/getDefaultViewName.js.map +1 -0
  303. package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +7 -0
  304. package/esm/domain/profiling/utils/getNumberOfSamples.js +15 -0
  305. package/esm/domain/profiling/utils/getNumberOfSamples.js.map +1 -0
  306. package/esm/domain/record/assembly.d.ts +2 -0
  307. package/esm/domain/record/assembly.js +13 -0
  308. package/esm/domain/record/assembly.js.map +1 -0
  309. package/esm/domain/record/elementsScrollPositions.d.ts +10 -0
  310. package/esm/domain/record/elementsScrollPositions.js +20 -0
  311. package/esm/domain/record/elementsScrollPositions.js.map +1 -0
  312. package/esm/domain/record/eventIds.d.ts +4 -0
  313. package/esm/domain/record/eventIds.js +13 -0
  314. package/esm/domain/record/eventIds.js.map +1 -0
  315. package/esm/domain/record/eventsUtils.d.ts +2 -0
  316. package/esm/domain/record/eventsUtils.js +11 -0
  317. package/esm/domain/record/eventsUtils.js.map +1 -0
  318. package/esm/domain/record/index.d.ts +7 -0
  319. package/esm/domain/record/index.js +6 -0
  320. package/esm/domain/record/index.js.map +1 -0
  321. package/esm/domain/record/internalApi.d.ts +22 -0
  322. package/esm/domain/record/internalApi.js +53 -0
  323. package/esm/domain/record/internalApi.js.map +1 -0
  324. package/esm/domain/record/mutationBatch.d.ts +12 -0
  325. package/esm/domain/record/mutationBatch.js +40 -0
  326. package/esm/domain/record/mutationBatch.js.map +1 -0
  327. package/esm/domain/record/nodeIds.d.ts +15 -0
  328. package/esm/domain/record/nodeIds.js +29 -0
  329. package/esm/domain/record/nodeIds.js.map +1 -0
  330. package/esm/domain/record/record.d.ts +16 -0
  331. package/esm/domain/record/record.js +54 -0
  332. package/esm/domain/record/record.js.map +1 -0
  333. package/esm/domain/record/record.types.d.ts +4 -0
  334. package/esm/domain/record/record.types.js +2 -0
  335. package/esm/domain/record/record.types.js.map +1 -0
  336. package/esm/domain/record/recordingScope.d.ts +19 -0
  337. package/esm/domain/record/recordingScope.js +10 -0
  338. package/esm/domain/record/recordingScope.js.map +1 -0
  339. package/esm/domain/record/serialization/index.d.ts +8 -0
  340. package/esm/domain/record/serialization/index.js +7 -0
  341. package/esm/domain/record/serialization/index.js.map +1 -0
  342. package/esm/domain/record/serialization/serialization.types.d.ts +28 -0
  343. package/esm/domain/record/serialization/serialization.types.js +2 -0
  344. package/esm/domain/record/serialization/serialization.types.js.map +1 -0
  345. package/esm/domain/record/serialization/serializationStats.d.ts +12 -0
  346. package/esm/domain/record/serialization/serializationStats.js +27 -0
  347. package/esm/domain/record/serialization/serializationStats.js.map +1 -0
  348. package/esm/domain/record/serialization/serializationTransaction.d.ts +45 -0
  349. package/esm/domain/record/serialization/serializationTransaction.js +35 -0
  350. package/esm/domain/record/serialization/serializationTransaction.js.map +1 -0
  351. package/esm/domain/record/serialization/serializationUtils.d.ts +18 -0
  352. package/esm/domain/record/serialization/serializationUtils.js +80 -0
  353. package/esm/domain/record/serialization/serializationUtils.js.map +1 -0
  354. package/esm/domain/record/serialization/serializeAttribute.d.ts +4 -0
  355. package/esm/domain/record/serialization/serializeAttribute.js +38 -0
  356. package/esm/domain/record/serialization/serializeAttribute.js.map +1 -0
  357. package/esm/domain/record/serialization/serializeAttributes.d.ts +7 -0
  358. package/esm/domain/record/serialization/serializeAttributes.js +161 -0
  359. package/esm/domain/record/serialization/serializeAttributes.js.map +1 -0
  360. package/esm/domain/record/serialization/serializeDocument.d.ts +3 -0
  361. package/esm/domain/record/serialization/serializeDocument.js +8 -0
  362. package/esm/domain/record/serialization/serializeDocument.js.map +1 -0
  363. package/esm/domain/record/serialization/serializeNode.d.ts +7 -0
  364. package/esm/domain/record/serialization/serializeNode.js +149 -0
  365. package/esm/domain/record/serialization/serializeNode.js.map +1 -0
  366. package/esm/domain/record/serialization/serializeStyleSheets.d.ts +2 -0
  367. package/esm/domain/record/serialization/serializeStyleSheets.js +16 -0
  368. package/esm/domain/record/serialization/serializeStyleSheets.js.map +1 -0
  369. package/esm/domain/record/shadowRootsController.d.ts +11 -0
  370. package/esm/domain/record/shadowRootsController.js +41 -0
  371. package/esm/domain/record/shadowRootsController.js.map +1 -0
  372. package/esm/domain/record/startFullSnapshots.d.ts +9 -0
  373. package/esm/domain/record/startFullSnapshots.js +55 -0
  374. package/esm/domain/record/startFullSnapshots.js.map +1 -0
  375. package/esm/domain/record/trackers/index.d.ts +12 -0
  376. package/esm/domain/record/trackers/index.js +12 -0
  377. package/esm/domain/record/trackers/index.js.map +1 -0
  378. package/esm/domain/record/trackers/trackFocus.d.ts +5 -0
  379. package/esm/domain/record/trackers/trackFocus.js +12 -0
  380. package/esm/domain/record/trackers/trackFocus.js.map +1 -0
  381. package/esm/domain/record/trackers/trackFrustration.d.ts +7 -0
  382. package/esm/domain/record/trackers/trackFrustration.js +28 -0
  383. package/esm/domain/record/trackers/trackFrustration.js.map +1 -0
  384. package/esm/domain/record/trackers/trackInput.d.ts +4 -0
  385. package/esm/domain/record/trackers/trackInput.js +101 -0
  386. package/esm/domain/record/trackers/trackInput.js.map +1 -0
  387. package/esm/domain/record/trackers/trackMediaInteraction.d.ts +5 -0
  388. package/esm/domain/record/trackers/trackMediaInteraction.js +26 -0
  389. package/esm/domain/record/trackers/trackMediaInteraction.js.map +1 -0
  390. package/esm/domain/record/trackers/trackMouseInteraction.d.ts +5 -0
  391. package/esm/domain/record/trackers/trackMouseInteraction.js +56 -0
  392. package/esm/domain/record/trackers/trackMouseInteraction.js.map +1 -0
  393. package/esm/domain/record/trackers/trackMove.d.ts +9 -0
  394. package/esm/domain/record/trackers/trackMove.js +51 -0
  395. package/esm/domain/record/trackers/trackMove.js.map +1 -0
  396. package/esm/domain/record/trackers/trackMutation.d.ts +11 -0
  397. package/esm/domain/record/trackers/trackMutation.js +266 -0
  398. package/esm/domain/record/trackers/trackMutation.js.map +1 -0
  399. package/esm/domain/record/trackers/trackScroll.d.ts +5 -0
  400. package/esm/domain/record/trackers/trackScroll.js +45 -0
  401. package/esm/domain/record/trackers/trackScroll.js.map +1 -0
  402. package/esm/domain/record/trackers/trackStyleSheet.d.ts +6 -0
  403. package/esm/domain/record/trackers/trackStyleSheet.js +85 -0
  404. package/esm/domain/record/trackers/trackStyleSheet.js.map +1 -0
  405. package/esm/domain/record/trackers/trackViewEnd.d.ts +5 -0
  406. package/esm/domain/record/trackers/trackViewEnd.js +17 -0
  407. package/esm/domain/record/trackers/trackViewEnd.js.map +1 -0
  408. package/esm/domain/record/trackers/trackViewportResize.d.ts +6 -0
  409. package/esm/domain/record/trackers/trackViewportResize.js +42 -0
  410. package/esm/domain/record/trackers/trackViewportResize.js.map +1 -0
  411. package/esm/domain/record/trackers/tracker.types.d.ts +3 -0
  412. package/esm/domain/record/trackers/tracker.types.js +2 -0
  413. package/esm/domain/record/trackers/tracker.types.js.map +1 -0
  414. package/esm/domain/record/viewports.d.ts +20 -0
  415. package/esm/domain/record/viewports.js +55 -0
  416. package/esm/domain/record/viewports.js.map +1 -0
  417. package/esm/domain/replayStats.d.ts +8 -0
  418. package/esm/domain/replayStats.js +51 -0
  419. package/esm/domain/replayStats.js.map +1 -0
  420. package/esm/domain/scriptLoadingError.d.ts +6 -0
  421. package/esm/domain/scriptLoadingError.js +23 -0
  422. package/esm/domain/scriptLoadingError.js.map +1 -0
  423. package/esm/domain/segmentCollection/buildReplayPayload.d.ts +15 -0
  424. package/esm/domain/segmentCollection/buildReplayPayload.js +23 -0
  425. package/esm/domain/segmentCollection/buildReplayPayload.js.map +1 -0
  426. package/esm/domain/segmentCollection/index.d.ts +4 -0
  427. package/esm/domain/segmentCollection/index.js +4 -0
  428. package/esm/domain/segmentCollection/index.js.map +1 -0
  429. package/esm/domain/segmentCollection/segment.d.ts +16 -0
  430. package/esm/domain/segmentCollection/segment.js +46 -0
  431. package/esm/domain/segmentCollection/segment.js.map +1 -0
  432. package/esm/domain/segmentCollection/segmentCollection.d.ts +31 -0
  433. package/esm/domain/segmentCollection/segmentCollection.js +106 -0
  434. package/esm/domain/segmentCollection/segmentCollection.js.map +1 -0
  435. package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +6 -0
  436. package/esm/domain/segmentCollection/startSegmentTelemetry.js +44 -0
  437. package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +1 -0
  438. package/esm/domain/startRecordBridge.d.ts +5 -0
  439. package/esm/domain/startRecordBridge.js +14 -0
  440. package/esm/domain/startRecordBridge.js.map +1 -0
  441. package/esm/domain/startRecorderInitTelemetry.d.ts +15 -0
  442. package/esm/domain/startRecorderInitTelemetry.js +52 -0
  443. package/esm/domain/startRecorderInitTelemetry.js.map +1 -0
  444. package/esm/entries/internal.d.ts +11 -0
  445. package/esm/entries/internal.js +4 -0
  446. package/esm/entries/internal.js.map +1 -0
  447. package/esm/entries/internalSynthetics.d.ts +2 -0
  448. package/esm/entries/internalSynthetics.js +23 -0
  449. package/esm/entries/internalSynthetics.js.map +1 -0
  450. package/esm/entries/main.d.ts +23 -0
  451. package/esm/entries/main.js +31 -0
  452. package/esm/entries/main.js.map +1 -0
  453. package/esm/types/index.d.ts +2 -0
  454. package/esm/types/index.js +2 -0
  455. package/esm/types/index.js.map +1 -0
  456. package/esm/types/sessionReplay.d.ts +703 -0
  457. package/esm/types/sessionReplay.js +6 -0
  458. package/esm/types/sessionReplay.js.map +1 -0
  459. package/esm/types/sessionReplayConstants.d.ts +49 -0
  460. package/esm/types/sessionReplayConstants.js +46 -0
  461. package/esm/types/sessionReplayConstants.js.map +1 -0
  462. package/internal/package.json +6 -0
  463. package/internal-synthetics/package.json +6 -0
  464. package/package.json +40 -0
  465. package/src/boot/isBrowserSupported.ts +14 -0
  466. package/src/boot/lazyLoadProfiler.ts +21 -0
  467. package/src/boot/lazyLoadRecorder.ts +21 -0
  468. package/src/boot/postStartStrategy.ts +176 -0
  469. package/src/boot/preStartStrategy.ts +34 -0
  470. package/src/boot/profilerApi.ts +86 -0
  471. package/src/boot/recorderApi.ts +124 -0
  472. package/src/boot/startRecording.ts +70 -0
  473. package/src/domain/deflate/deflateEncoder.ts +144 -0
  474. package/src/domain/deflate/deflateWorker.ts +157 -0
  475. package/src/domain/deflate/index.ts +8 -0
  476. package/src/domain/getSessionReplayLink.ts +40 -0
  477. package/src/domain/profiling/profiler.ts +338 -0
  478. package/src/domain/profiling/profilingContext.ts +34 -0
  479. package/src/domain/profiling/profilingSupported.ts +10 -0
  480. package/src/domain/profiling/test-utils/mockedTrace.ts +58 -0
  481. package/src/domain/profiling/transport/assembly.ts +78 -0
  482. package/src/domain/profiling/transport/buildProfileEventAttributes.ts +66 -0
  483. package/src/domain/profiling/types/index.ts +2 -0
  484. package/src/domain/profiling/types/profilerApi.types.ts +87 -0
  485. package/src/domain/profiling/types/rumProfiler.types.ts +81 -0
  486. package/src/domain/profiling/utils/getCustomOrDefaultViewName.ts +4 -0
  487. package/src/domain/profiling/utils/getDefaultViewName.ts +12 -0
  488. package/src/domain/profiling/utils/getNumberOfSamples.ts +16 -0
  489. package/src/domain/record/assembly.ts +17 -0
  490. package/src/domain/record/elementsScrollPositions.ts +28 -0
  491. package/src/domain/record/eventIds.ts +17 -0
  492. package/src/domain/record/eventsUtils.ts +12 -0
  493. package/src/domain/record/index.ts +7 -0
  494. package/src/domain/record/internalApi.ts +88 -0
  495. package/src/domain/record/mutationBatch.ts +47 -0
  496. package/src/domain/record/nodeIds.ts +46 -0
  497. package/src/domain/record/record.ts +98 -0
  498. package/src/domain/record/record.types.ts +5 -0
  499. package/src/domain/record/recordingScope.ts +36 -0
  500. package/src/domain/record/serialization/index.ts +8 -0
  501. package/src/domain/record/serialization/serialization.types.ts +43 -0
  502. package/src/domain/record/serialization/serializationStats.ts +43 -0
  503. package/src/domain/record/serialization/serializationTransaction.ts +94 -0
  504. package/src/domain/record/serialization/serializationUtils.ts +103 -0
  505. package/src/domain/record/serialization/serializeAttribute.ts +55 -0
  506. package/src/domain/record/serialization/serializeAttributes.ts +194 -0
  507. package/src/domain/record/serialization/serializeDocument.ts +13 -0
  508. package/src/domain/record/serialization/serializeNode.ts +229 -0
  509. package/src/domain/record/serialization/serializeStyleSheets.ts +18 -0
  510. package/src/domain/record/shadowRootsController.ts +62 -0
  511. package/src/domain/record/startFullSnapshots.ts +84 -0
  512. package/src/domain/record/trackers/index.ts +12 -0
  513. package/src/domain/record/trackers/trackFocus.ts +16 -0
  514. package/src/domain/record/trackers/trackFrustration.ts +41 -0
  515. package/src/domain/record/trackers/trackInput.ts +128 -0
  516. package/src/domain/record/trackers/trackMediaInteraction.ts +43 -0
  517. package/src/domain/record/trackers/trackMouseInteraction.ts +74 -0
  518. package/src/domain/record/trackers/trackMove.ts +78 -0
  519. package/src/domain/record/trackers/trackMutation.ts +399 -0
  520. package/src/domain/record/trackers/trackScroll.ts +61 -0
  521. package/src/domain/record/trackers/trackStyleSheet.ts +117 -0
  522. package/src/domain/record/trackers/trackViewEnd.ts +27 -0
  523. package/src/domain/record/trackers/trackViewportResize.ts +69 -0
  524. package/src/domain/record/trackers/tracker.types.ts +3 -0
  525. package/src/domain/record/viewports.ts +68 -0
  526. package/src/domain/replayStats.ts +61 -0
  527. package/src/domain/scriptLoadingError.ts +36 -0
  528. package/src/domain/segmentCollection/buildReplayPayload.ts +52 -0
  529. package/src/domain/segmentCollection/index.ts +4 -0
  530. package/src/domain/segmentCollection/segment.ts +78 -0
  531. package/src/domain/segmentCollection/segmentCollection.ts +200 -0
  532. package/src/domain/segmentCollection/startSegmentTelemetry.ts +82 -0
  533. package/src/domain/startRecordBridge.ts +17 -0
  534. package/src/domain/startRecorderInitTelemetry.ts +90 -0
  535. package/src/entries/internal.ts +18 -0
  536. package/src/entries/internalSynthetics.ts +24 -0
  537. package/src/entries/main.ts +95 -0
  538. package/src/types/index.ts +2 -0
  539. package/src/types/sessionReplay.ts +734 -0
  540. package/src/types/sessionReplayConstants.ts +86 -0
@@ -0,0 +1,53 @@
1
+ import { noop, timeStampNow } from '@kubesense/kubesense-browser-core';
2
+ import { getNodePrivacyLevel, NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core';
3
+ import { takeFullSnapshot as doTakeFullSnapshot } from './startFullSnapshots';
4
+ import { createRecordingScope } from './recordingScope';
5
+ import { createElementsScrollPositions } from './elementsScrollPositions';
6
+ import { createEventIds } from './eventIds';
7
+ import { createNodeIds } from './nodeIds';
8
+ import { serializeInTransaction, serializeNode } from './serialization';
9
+ /**
10
+ * Take a full snapshot of the document, generating the same records that the Kubesense browser SDK
11
+ * would generate.
12
+ *
13
+ * This is an internal API function. Be sure to update kubesense-internal callers if you
14
+ * change its signature or behavior.
15
+ */
16
+ export function takeFullSnapshot({ configuration, } = {}) {
17
+ const records = [];
18
+ const emitRecord = (record) => {
19
+ records.push(record);
20
+ };
21
+ doTakeFullSnapshot(timeStampNow(), 0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */, emitRecord, noop, createTemporaryRecordingScope(configuration));
22
+ return records;
23
+ }
24
+ /**
25
+ * Take a snapshot of a DOM node, generating the serialized representation that the
26
+ * kubesense browser SDK would generate.
27
+ *
28
+ * This is an internal API function. Be sure to update Kubesense-internal callers if you
29
+ * change its signature or behavior.
30
+ */
31
+ export function takeNodeSnapshot(node, { configuration } = {}) {
32
+ let serializedNode = null;
33
+ serializeInTransaction(0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */, noop, noop, createTemporaryRecordingScope(configuration), (transaction) => {
34
+ const privacyLevel = getNodePrivacyLevel(node, transaction.scope.configuration.defaultPrivacyLevel);
35
+ if (privacyLevel === NodePrivacyLevel.HIDDEN || privacyLevel === NodePrivacyLevel.IGNORE) {
36
+ return;
37
+ }
38
+ serializedNode = serializeNode(node, privacyLevel, transaction);
39
+ });
40
+ return serializedNode;
41
+ }
42
+ function createTemporaryRecordingScope(configuration) {
43
+ return createRecordingScope({
44
+ defaultPrivacyLevel: NodePrivacyLevel.ALLOW,
45
+ ...configuration,
46
+ }, createElementsScrollPositions(), createEventIds(), createNodeIds(), {
47
+ addShadowRoot: noop,
48
+ removeShadowRoot: noop,
49
+ flush: noop,
50
+ stop: noop,
51
+ });
52
+ }
53
+ //# sourceMappingURL=internalApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internalApi.js","sourceRoot":"","sources":["../../../src/domain/record/internalApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEtE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAE7F,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAG7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,OAAO,EAAqB,sBAAsB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,aAAa,MACoC,EAAE;IACnD,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,UAAU,GAAuB,CAAC,MAAqB,EAAE,EAAE;QAC/D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,kBAAkB,CAChB,YAAY,EAAE,mDAEd,UAAU,EACV,IAAI,EACJ,6BAA6B,CAAC,aAAa,CAAC,CAC7C,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAU,EACV,EAAE,aAAa,KAAoD,EAAE;IAErE,IAAI,cAAc,GAAgC,IAAI,CAAA;IAEtD,sBAAsB,kDAEpB,IAAI,EACJ,IAAI,EACJ,6BAA6B,CAAC,aAAa,CAAC,EAC5C,CAAC,WAAqC,EAAQ,EAAE;QAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;QACnG,IAAI,YAAY,KAAK,gBAAgB,CAAC,MAAM,IAAI,YAAY,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACzF,OAAM;QACR,CAAC;QACD,cAAc,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;IACjE,CAAC,CACF,CAAA;IAED,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,SAAS,6BAA6B,CAAC,aAAyC;IAC9E,OAAO,oBAAoB,CACzB;QACE,mBAAmB,EAAE,gBAAgB,CAAC,KAAK;QAC3C,GAAG,aAAa;KACG,EACrB,6BAA6B,EAAE,EAC/B,cAAc,EAAE,EAChB,aAAa,EAAE,EACf;QACE,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;QACtB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;KACc,CAC3B,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { RumMutationRecord } from '@kubesense/kubesense-browser-rum-core';
2
+ /**
3
+ * Minimum duration to wait before processing mutations. This is used to batch mutations together
4
+ * and be able to deduplicate them to save processing time and bandwidth.
5
+ * 16ms is the duration of a frame at 60fps that ensure fluid UI.
6
+ */
7
+ export declare const MUTATION_PROCESS_MIN_DELAY = 16;
8
+ export declare function createMutationBatch(processMutationBatch: (mutations: RumMutationRecord[]) => void): {
9
+ addMutations: (mutations: RumMutationRecord[]) => void;
10
+ flush: () => void;
11
+ stop: () => void;
12
+ };
@@ -0,0 +1,40 @@
1
+ import { noop, throttle, requestIdleCallback } from '@kubesense/kubesense-browser-core';
2
+ /**
3
+ * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be
4
+ * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the
5
+ * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the
6
+ * browser is busy executing a longer task, mutations will be processed after this task.
7
+ */
8
+ const MUTATION_PROCESS_MAX_DELAY = 100;
9
+ /**
10
+ * Minimum duration to wait before processing mutations. This is used to batch mutations together
11
+ * and be able to deduplicate them to save processing time and bandwidth.
12
+ * 16ms is the duration of a frame at 60fps that ensure fluid UI.
13
+ */
14
+ export const MUTATION_PROCESS_MIN_DELAY = 16;
15
+ export function createMutationBatch(processMutationBatch) {
16
+ let cancelScheduledFlush = noop;
17
+ let pendingMutations = [];
18
+ function flush() {
19
+ cancelScheduledFlush();
20
+ processMutationBatch(pendingMutations);
21
+ pendingMutations = [];
22
+ }
23
+ const { throttled: throttledFlush, cancel: cancelThrottle } = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {
24
+ leading: false,
25
+ });
26
+ return {
27
+ addMutations: (mutations) => {
28
+ if (pendingMutations.length === 0) {
29
+ cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY });
30
+ }
31
+ pendingMutations.push(...mutations);
32
+ },
33
+ flush,
34
+ stop: () => {
35
+ cancelScheduledFlush();
36
+ cancelThrottle();
37
+ },
38
+ };
39
+ }
40
+ //# sourceMappingURL=mutationBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationBatch.js","sourceRoot":"","sources":["../../../src/domain/record/mutationBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAGvF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG,GAAG,CAAA;AACtC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAE5C,MAAM,UAAU,mBAAmB,CAAC,oBAA8D;IAChG,IAAI,oBAAoB,GAAG,IAAI,CAAA;IAC/B,IAAI,gBAAgB,GAAwB,EAAE,CAAA;IAE9C,SAAS,KAAK;QACZ,oBAAoB,EAAE,CAAA;QACtB,oBAAoB,CAAC,gBAAgB,CAAC,CAAA;QACtC,gBAAgB,GAAG,EAAE,CAAA;IACvB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,0BAA0B,EAAE;QACxG,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IAEF,OAAO;QACL,YAAY,EAAE,CAAC,SAA8B,EAAE,EAAE;YAC/C,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAA;YACrG,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QACrC,CAAC;QAED,KAAK;QAEL,IAAI,EAAE,GAAG,EAAE;YACT,oBAAoB,EAAE,CAAA;YACtB,cAAc,EAAE,CAAA;QAClB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type NodeWithSerializedNode = Node & {
2
+ __brand: 'NodeWithSerializedNode';
3
+ };
4
+ export type NodeId = number & {
5
+ __brand: 'NodeId';
6
+ };
7
+ export declare const enum NodeIdConstants {
8
+ FIRST_ID = 0
9
+ }
10
+ export interface NodeIds {
11
+ assign(node: Node): NodeId;
12
+ get(node: Node): NodeId | undefined;
13
+ areAssignedForNodeAndAncestors(node: Node): node is NodeWithSerializedNode;
14
+ }
15
+ export declare function createNodeIds(): NodeIds;
@@ -0,0 +1,29 @@
1
+ import { getParentNode, isNodeShadowRoot } from '@kubesense/kubesense-browser-rum-core';
2
+ export function createNodeIds() {
3
+ const nodeIds = new WeakMap();
4
+ let nextNodeId = 0 /* NodeIdConstants.FIRST_ID */;
5
+ const get = (node) => nodeIds.get(node);
6
+ return {
7
+ assign: (node) => {
8
+ // Try to reuse any existing id.
9
+ let nodeId = get(node);
10
+ if (nodeId === undefined) {
11
+ nodeId = nextNodeId++;
12
+ nodeIds.set(node, nodeId);
13
+ }
14
+ return nodeId;
15
+ },
16
+ get,
17
+ areAssignedForNodeAndAncestors: (node) => {
18
+ let current = node;
19
+ while (current) {
20
+ if (get(current) === undefined && !isNodeShadowRoot(current)) {
21
+ return false;
22
+ }
23
+ current = getParentNode(current);
24
+ }
25
+ return true;
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=nodeIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeIds.js","sourceRoot":"","sources":["../../../src/domain/record/nodeIds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAevF,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAgB,CAAA;IAC3C,IAAI,UAAU,mCAA2B,CAAA;IAEzC,MAAM,GAAG,GAAG,CAAC,IAAU,EAAsB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAEjE,OAAO;QACL,MAAM,EAAE,CAAC,IAAU,EAAU,EAAE;YAC7B,gCAAgC;YAChC,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YACtB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,UAAU,EAAY,CAAA;gBAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC3B,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,GAAG;QAEH,8BAA8B,EAAE,CAAC,IAAU,EAAkC,EAAE;YAC7E,IAAI,OAAO,GAAgB,IAAI,CAAA;YAC/B,OAAO,OAAO,EAAE,CAAC;gBACf,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7D,OAAO,KAAK,CAAA;gBACd,CAAC;gBACD,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;YAClC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { LifeCycle, RumConfiguration, ViewHistory } from '@kubesense/kubesense-browser-rum-core';
2
+ import type { ShadowRootsController } from './shadowRootsController';
3
+ import type { EmitRecordCallback, EmitStatsCallback } from './record.types';
4
+ export interface RecordOptions {
5
+ emitRecord: EmitRecordCallback;
6
+ emitStats: EmitStatsCallback;
7
+ configuration: RumConfiguration;
8
+ lifeCycle: LifeCycle;
9
+ viewHistory: ViewHistory;
10
+ }
11
+ export interface RecordAPI {
12
+ stop: () => void;
13
+ flushMutations: () => void;
14
+ shadowRootsController: ShadowRootsController;
15
+ }
16
+ export declare function record(options: RecordOptions): RecordAPI;
@@ -0,0 +1,54 @@
1
+ import { sendToExtension } from '@kubesense/kubesense-browser-core';
2
+ import * as replayStats from '../replayStats';
3
+ import { trackFocus, trackFrustration, trackInput, trackMediaInteraction, trackMouseInteraction, trackMove, trackMutation, trackScroll, trackStyleSheet, trackViewEnd, trackViewportResize, trackVisualViewportResize, } from './trackers';
4
+ import { createElementsScrollPositions } from './elementsScrollPositions';
5
+ import { initShadowRootsController } from './shadowRootsController';
6
+ import { startFullSnapshots } from './startFullSnapshots';
7
+ import { createEventIds } from './eventIds';
8
+ import { createNodeIds } from './nodeIds';
9
+ import { createRecordingScope } from './recordingScope';
10
+ export function record(options) {
11
+ const { emitRecord, emitStats, configuration, lifeCycle } = options;
12
+ // runtime checks for user options
13
+ if (!emitRecord || !emitStats) {
14
+ throw new Error('emit functions are required');
15
+ }
16
+ const processRecord = (record) => {
17
+ emitRecord(record);
18
+ sendToExtension('record', { record });
19
+ const view = options.viewHistory.findView();
20
+ replayStats.addRecord(view.id);
21
+ };
22
+ const shadowRootsController = initShadowRootsController(processRecord, emitStats);
23
+ const scope = createRecordingScope(configuration, createElementsScrollPositions(), createEventIds(), createNodeIds(), shadowRootsController);
24
+ const { stop: stopFullSnapshots } = startFullSnapshots(lifeCycle, processRecord, emitStats, flushMutations, scope);
25
+ function flushMutations() {
26
+ shadowRootsController.flush();
27
+ mutationTracker.flush();
28
+ }
29
+ const mutationTracker = trackMutation(document, processRecord, emitStats, scope);
30
+ const trackers = [
31
+ mutationTracker,
32
+ trackMove(processRecord, scope),
33
+ trackMouseInteraction(processRecord, scope),
34
+ trackScroll(document, processRecord, scope),
35
+ trackViewportResize(processRecord, scope),
36
+ trackInput(document, processRecord, scope),
37
+ trackMediaInteraction(processRecord, scope),
38
+ trackStyleSheet(processRecord, scope),
39
+ trackFocus(processRecord, scope),
40
+ trackVisualViewportResize(processRecord, scope),
41
+ trackFrustration(lifeCycle, processRecord, scope),
42
+ trackViewEnd(lifeCycle, processRecord, flushMutations),
43
+ ];
44
+ return {
45
+ stop: () => {
46
+ shadowRootsController.stop();
47
+ trackers.forEach((tracker) => tracker.stop());
48
+ stopFullSnapshots();
49
+ },
50
+ flushMutations,
51
+ shadowRootsController,
52
+ };
53
+ }
54
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/domain/record/record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BrowserRecord } from '../../types';
2
+ import type { SerializationStats } from './serialization';
3
+ export type EmitRecordCallback<Record extends BrowserRecord = BrowserRecord> = (record: Record) => void;
4
+ export type EmitStatsCallback = (stats: SerializationStats) => void;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=record.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.types.js","sourceRoot":"","sources":["../../../src/domain/record/record.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core';
2
+ import type { ElementsScrollPositions } from './elementsScrollPositions';
3
+ import type { EventIds } from './eventIds';
4
+ import type { NodeIds } from './nodeIds';
5
+ import type { ShadowRootsController } from './shadowRootsController';
6
+ /**
7
+ * State associated with a stream of session replay records. When a new stream of records
8
+ * starts (e.g. because recording has shut down and restarted), a new RecordingScope
9
+ * object must be created; this ensures that we don't generate records that reference ids
10
+ * or data which aren't present in the current stream.
11
+ */
12
+ export interface RecordingScope {
13
+ configuration: RumConfiguration;
14
+ elementsScrollPositions: ElementsScrollPositions;
15
+ eventIds: EventIds;
16
+ nodeIds: NodeIds;
17
+ shadowRootsController: ShadowRootsController;
18
+ }
19
+ export declare function createRecordingScope(configuration: RumConfiguration, elementsScrollPositions: ElementsScrollPositions, eventIds: EventIds, nodeIds: NodeIds, shadowRootsController: ShadowRootsController): RecordingScope;
@@ -0,0 +1,10 @@
1
+ export function createRecordingScope(configuration, elementsScrollPositions, eventIds, nodeIds, shadowRootsController) {
2
+ return {
3
+ configuration,
4
+ elementsScrollPositions,
5
+ eventIds,
6
+ nodeIds,
7
+ shadowRootsController,
8
+ };
9
+ }
10
+ //# sourceMappingURL=recordingScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordingScope.js","sourceRoot":"","sources":["../../../src/domain/record/recordingScope.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,oBAAoB,CAClC,aAA+B,EAC/B,uBAAgD,EAChD,QAAkB,EAClB,OAAgB,EAChB,qBAA4C;IAE5C,OAAO;QACL,aAAa;QACb,uBAAuB;QACvB,QAAQ;QACR,OAAO;QACP,qBAAqB;KACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { getElementInputValue } from './serializationUtils';
2
+ export { serializeDocument } from './serializeDocument';
3
+ export { serializeNode } from './serializeNode';
4
+ export { serializeAttribute } from './serializeAttribute';
5
+ export { createSerializationStats, updateSerializationStats, aggregateSerializationStats } from './serializationStats';
6
+ export type { SerializationMetric, SerializationStats } from './serializationStats';
7
+ export { serializeInTransaction, SerializationKind } from './serializationTransaction';
8
+ export type { SerializationTransaction, SerializationTransactionCallback } from './serializationTransaction';
@@ -0,0 +1,7 @@
1
+ export { getElementInputValue } from './serializationUtils';
2
+ export { serializeDocument } from './serializeDocument';
3
+ export { serializeNode } from './serializeNode';
4
+ export { serializeAttribute } from './serializeAttribute';
5
+ export { createSerializationStats, updateSerializationStats, aggregateSerializationStats } from './serializationStats';
6
+ export { serializeInTransaction } from './serializationTransaction';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/domain/record/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAEtH,OAAO,EAAE,sBAAsB,EAAqB,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,28 @@
1
+ import type { NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core';
2
+ export type ParentNodePrivacyLevel = typeof NodePrivacyLevel.ALLOW | typeof NodePrivacyLevel.MASK | typeof NodePrivacyLevel.MASK_USER_INPUT | typeof NodePrivacyLevel.MASK_UNLESS_ALLOWLISTED;
3
+ /**
4
+ * Virtual attributes. These attributes appear in the serialized attribute map of
5
+ * elements, but they're not actually derived from the DOM; they're used to represent
6
+ * metadata about the element they're attached to.
7
+ */
8
+ export interface VirtualAttributes {
9
+ /**
10
+ * For <style> and <link> elements, the rules in the element's stylesheet, extracted
11
+ * from the CSSOM.
12
+ */
13
+ _cssText?: string;
14
+ /** For <audio> and <video> elements, the playback state of the element's media. */
15
+ rr_mediaState?: 'paused' | 'played';
16
+ /** For elements which are scroll containers, the element's X scroll position, if non-zero. */
17
+ rr_scrollLeft?: number;
18
+ /** For elements which are scroll containers, the element's Y scroll position, if non-zero. */
19
+ rr_scrollTop?: number;
20
+ /** For HIDDEN elements, the width of the element's bounding client rect. */
21
+ rr_width?: string;
22
+ /** For HIDDEN elements, the height of the element's bounding client rect. */
23
+ rr_height?: string;
24
+ }
25
+ export interface SerializeOptions {
26
+ /** For HIDDEN elements, the height of the element's bounding client rect. */
27
+ rr_height?: string;
28
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialization.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.types.js","sourceRoot":"","sources":["../../../../src/domain/record/serialization/serialization.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface SerializationMetric {
2
+ count: number;
3
+ max: number;
4
+ sum: number;
5
+ }
6
+ export interface SerializationStats {
7
+ cssText: SerializationMetric;
8
+ serializationDuration: SerializationMetric;
9
+ }
10
+ export declare function createSerializationStats(): SerializationStats;
11
+ export declare function updateSerializationStats(stats: SerializationStats, metric: keyof SerializationStats, value: number): void;
12
+ export declare function aggregateSerializationStats(aggregateStats: SerializationStats, stats: SerializationStats): void;
@@ -0,0 +1,27 @@
1
+ export function createSerializationStats() {
2
+ return {
3
+ cssText: {
4
+ count: 0,
5
+ max: 0,
6
+ sum: 0,
7
+ },
8
+ serializationDuration: {
9
+ count: 0,
10
+ max: 0,
11
+ sum: 0,
12
+ },
13
+ };
14
+ }
15
+ export function updateSerializationStats(stats, metric, value) {
16
+ stats[metric].count += 1;
17
+ stats[metric].max = Math.max(stats[metric].max, value);
18
+ stats[metric].sum += value;
19
+ }
20
+ export function aggregateSerializationStats(aggregateStats, stats) {
21
+ for (const metric of ['cssText', 'serializationDuration']) {
22
+ aggregateStats[metric].count += stats[metric].count;
23
+ aggregateStats[metric].max = Math.max(aggregateStats[metric].max, stats[metric].max);
24
+ aggregateStats[metric].sum += stats[metric].sum;
25
+ }
26
+ }
27
+ //# sourceMappingURL=serializationStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializationStats.js","sourceRoot":"","sources":["../../../../src/domain/record/serialization/serializationStats.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,OAAO,EAAE;YACP,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;SACP;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;SACP;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAyB,EACzB,MAAgC,EAChC,KAAa;IAEb,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IACxB,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACtD,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,KAAK,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,cAAkC,EAAE,KAAyB;IACvG,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAU,EAAE,CAAC;QACnE,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAA;QACnD,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;QACpF,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAA;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { BrowserRecord } from '../../../types';
2
+ import type { NodeId } from '../nodeIds';
3
+ import type { EmitRecordCallback, EmitStatsCallback } from '../record.types';
4
+ import type { RecordingScope } from '../recordingScope';
5
+ import type { SerializationStats } from './serializationStats';
6
+ export type SerializationTransactionCallback = (transaction: SerializationTransaction) => void;
7
+ export declare const enum SerializationKind {
8
+ INITIAL_FULL_SNAPSHOT = 0,
9
+ SUBSEQUENT_FULL_SNAPSHOT = 1,
10
+ INCREMENTAL_SNAPSHOT = 2
11
+ }
12
+ /**
13
+ * A serialization transaction is used to build and emit a sequence of session replay
14
+ * records containing a serialized snapshot of the DOM.
15
+ */
16
+ export interface SerializationTransaction {
17
+ /** Add a record to the transaction. It will be emitted when the transaction ends. */
18
+ add(record: BrowserRecord): void;
19
+ /**
20
+ * Add a metric to the transaction's statistics. The aggregated statistics will be
21
+ * emitted when the transaction ends.
22
+ */
23
+ addMetric(metric: keyof SerializationStats, value: number): void;
24
+ /**
25
+ * Assign and return an id to the given node. If the node has previously been assigned
26
+ * an id, the existing id will be reused.
27
+ */
28
+ assignId(node: Node): NodeId;
29
+ /** The kind of serialization being performed in this transaction. */
30
+ kind: SerializationKind;
31
+ /**
32
+ * A set used to track nodes which have been serialized in the current transaction. If
33
+ * undefined, this feature is disabled; this is the default state in new transactions
34
+ * for performance reasons. Set the property to a non-undefined value if you need this
35
+ * capability.
36
+ */
37
+ serializedNodeIds?: Set<NodeId>;
38
+ /** The recording scope in which this transaction is occurring. */
39
+ scope: RecordingScope;
40
+ }
41
+ /**
42
+ * Perform serialization within a transaction. At the end of the transaction, the
43
+ * generated records and statistics will be emitted.
44
+ */
45
+ export declare function serializeInTransaction(kind: SerializationKind, emitRecord: EmitRecordCallback, emitStats: EmitStatsCallback, scope: RecordingScope, serialize: SerializationTransactionCallback): void;
@@ -0,0 +1,35 @@
1
+ import { elapsed, timeStampNow } from '@kubesense/kubesense-browser-core';
2
+ import { createSerializationStats, updateSerializationStats } from './serializationStats';
3
+ /**
4
+ * Perform serialization within a transaction. At the end of the transaction, the
5
+ * generated records and statistics will be emitted.
6
+ */
7
+ export function serializeInTransaction(kind, emitRecord, emitStats, scope, serialize) {
8
+ const records = [];
9
+ const stats = createSerializationStats();
10
+ const transaction = {
11
+ add(record) {
12
+ records.push(record);
13
+ },
14
+ addMetric(metric, value) {
15
+ updateSerializationStats(stats, metric, value);
16
+ },
17
+ assignId(node) {
18
+ const id = scope.nodeIds.assign(node);
19
+ if (transaction.serializedNodeIds) {
20
+ transaction.serializedNodeIds.add(id);
21
+ }
22
+ return id;
23
+ },
24
+ kind,
25
+ scope,
26
+ };
27
+ const start = timeStampNow();
28
+ serialize(transaction);
29
+ updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()));
30
+ for (const record of records) {
31
+ emitRecord(record);
32
+ }
33
+ emitStats(stats);
34
+ }
35
+ //# sourceMappingURL=serializationTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializationTransaction.js","sourceRoot":"","sources":["../../../../src/domain/record/serialization/serializationTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAOzE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AA6CzF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAuB,EACvB,UAA8B,EAC9B,SAA4B,EAC5B,KAAqB,EACrB,SAA2C;IAE3C,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAA;IAExC,MAAM,WAAW,GAA6B;QAC5C,GAAG,CAAC,MAAqB;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;QACD,SAAS,CAAC,MAAgC,EAAE,KAAa;YACvD,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAChD,CAAC;QACD,QAAQ,CAAC,IAAU;YACjB,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;gBAClC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvC,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,IAAI;QACJ,KAAK;KACN,CAAA;IAED,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAC5B,SAAS,CAAC,WAAW,CAAC,CAAA;IACtB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;IAExF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,CAAA;AAClB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core';
2
+ /**
3
+ * Get the element "value" to be serialized as an attribute or an input update record. It respects
4
+ * the input privacy mode of the element.
5
+ * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.
6
+ */
7
+ export declare function getElementInputValue(element: Element, nodePrivacyLevel: NodePrivacyLevel): string | undefined;
8
+ export declare const URL_IN_CSS_REF: RegExp;
9
+ export declare const ABSOLUTE_URL: RegExp;
10
+ export declare const DATA_URI: RegExp;
11
+ export declare function switchToAbsoluteUrl(cssText: string, cssHref: string | null): string;
12
+ export declare function getValidTagName(tagName: string): string;
13
+ /**
14
+ * Returns the tag name of the given element, normalized to ensure a consistent lowercase
15
+ * representation regardless of whether the element is HTML, XHTML, or SVG.
16
+ */
17
+ export declare function normalizedTagName(element: Element): string;
18
+ export declare function censoredImageForSize(width: number, height: number): string;
@@ -0,0 +1,80 @@
1
+ import { buildUrl } from '@kubesense/kubesense-browser-core';
2
+ import { CENSORED_STRING_MARK, shouldMaskNode } from '@kubesense/kubesense-browser-rum-core';
3
+ /**
4
+ * Get the element "value" to be serialized as an attribute or an input update record. It respects
5
+ * the input privacy mode of the element.
6
+ * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.
7
+ */
8
+ export function getElementInputValue(element, nodePrivacyLevel) {
9
+ /*
10
+ BROWSER SPEC NOTE: <input>, <select>
11
+ For some <input> elements, the `value` is an exceptional property/attribute that has the
12
+ value synced between el.value and el.getAttribute()
13
+ input[type=button,checkbox,hidden,image,radio,reset,submit]
14
+ */
15
+ const tagName = element.tagName;
16
+ const value = element.value;
17
+ if (shouldMaskNode(element, nodePrivacyLevel)) {
18
+ const type = element.type;
19
+ if (tagName === 'INPUT' && (type === 'button' || type === 'submit' || type === 'reset')) {
20
+ // Overrule `MASK` privacy level for button-like element values, as they are used during replay
21
+ // to display their label. They can still be hidden via the "hidden" privacy attribute or class name.
22
+ return value;
23
+ }
24
+ else if (!value || tagName === 'OPTION') {
25
+ // <Option> value provides no benefit
26
+ return;
27
+ }
28
+ return CENSORED_STRING_MARK;
29
+ }
30
+ if (tagName === 'OPTION' || tagName === 'SELECT') {
31
+ return element.value;
32
+ }
33
+ if (tagName !== 'INPUT' && tagName !== 'TEXTAREA') {
34
+ return;
35
+ }
36
+ return value;
37
+ }
38
+ export const URL_IN_CSS_REF = /url\((?:(')([^']*)'|(")([^"]*)"|([^)]*))\)/gm;
39
+ export const ABSOLUTE_URL = /^[A-Za-z]+:|^\/\//;
40
+ export const DATA_URI = /^["']?data:.*,/i;
41
+ export function switchToAbsoluteUrl(cssText, cssHref) {
42
+ return cssText.replace(URL_IN_CSS_REF, (matchingSubstring, singleQuote, urlWrappedInSingleQuotes, doubleQuote, urlWrappedInDoubleQuotes, urlNotWrappedInQuotes) => {
43
+ const url = urlWrappedInSingleQuotes || urlWrappedInDoubleQuotes || urlNotWrappedInQuotes;
44
+ if (!cssHref || !url || ABSOLUTE_URL.test(url) || DATA_URI.test(url)) {
45
+ return matchingSubstring;
46
+ }
47
+ const quote = singleQuote || doubleQuote || '';
48
+ return `url(${quote}${makeUrlAbsolute(url, cssHref)}${quote})`;
49
+ });
50
+ }
51
+ function makeUrlAbsolute(url, baseUrl) {
52
+ try {
53
+ return buildUrl(url, baseUrl).href;
54
+ }
55
+ catch (_a) {
56
+ return url;
57
+ }
58
+ }
59
+ const TAG_NAME_REGEX = /[^a-z1-6-_]/;
60
+ export function getValidTagName(tagName) {
61
+ const processedTagName = tagName.toLowerCase().trim();
62
+ if (TAG_NAME_REGEX.test(processedTagName)) {
63
+ // if the tag name is odd and we cannot extract
64
+ // anything from the string, then we return a
65
+ // generic div
66
+ return 'div';
67
+ }
68
+ return processedTagName;
69
+ }
70
+ /**
71
+ * Returns the tag name of the given element, normalized to ensure a consistent lowercase
72
+ * representation regardless of whether the element is HTML, XHTML, or SVG.
73
+ */
74
+ export function normalizedTagName(element) {
75
+ return element.tagName.toLowerCase();
76
+ }
77
+ export function censoredImageForSize(width, height) {
78
+ return `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${width}' height='${height}' style='background-color:silver'%3E%3C/svg%3E`;
79
+ }
80
+ //# sourceMappingURL=serializationUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializationUtils.js","sourceRoot":"","sources":["../../../../src/domain/record/serialization/serializationUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { NodePrivacyLevel } from '@kubesense/kubesense-browser-rum-core';
2
+ import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core';
3
+ export declare const MAX_ATTRIBUTE_VALUE_CHAR_LENGTH = 1000000;
4
+ export declare function serializeAttribute(element: Element, nodePrivacyLevel: NodePrivacyLevel, attributeName: string, configuration: RumConfiguration): string | null;