@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
@@ -0,0 +1,66 @@
1
+ import { clearTimeout, fetch, setTimeout } from "@kubesense/kubesense-browser-core";
2
+ import { buildEndpointUrl } from "@kubesense/kubesense-js-core/transport";
3
+ //#region src/domain/profiling/quotaCheck.ts
4
+ function parseQuotaResult(body, httpStatusFallback) {
5
+ const attrs = body?.data?.attributes;
6
+ if (!attrs || typeof attrs.admitted !== "boolean" || typeof attrs.reason !== "string") return httpStatusFallback;
7
+ const reason = attrs.reason === "backend_client_not_initialized" ? "backend_unavailable" : attrs.reason;
8
+ return {
9
+ decision: attrs.admitted ? "quota_ok" : "quota_ko",
10
+ reason
11
+ };
12
+ }
13
+ function buildQuotaUrl(configuration, sessionId) {
14
+ return buildEndpointUrl({
15
+ proxy: configuration.proxy,
16
+ kubesenseRumEndpoint: configuration.kubesenseRumEndpoint,
17
+ path: "/rum/api/v1/profiling/quota",
18
+ parameters: `session_id=${sessionId}`,
19
+ subdomain: "quota"
20
+ });
21
+ }
22
+ function checkProfilingQuota(configuration, sessionId, timeoutMs = 5e3) {
23
+ const url = buildQuotaUrl(configuration, sessionId);
24
+ const controller = new AbortController();
25
+ let timeoutId;
26
+ const fetchPromise = fetch(url, {
27
+ credentials: "omit",
28
+ signal: controller.signal,
29
+ headers: new Headers({ "DD-CLIENT-TOKEN": configuration.clientToken })
30
+ }).then((response) => {
31
+ const statusFallback = response.status === 429 ? {
32
+ decision: "quota_ko",
33
+ reason: "quota_exceeded"
34
+ } : {
35
+ decision: "quota_ok",
36
+ reason: "api-error"
37
+ };
38
+ return response.json().then((body) => {
39
+ clearTimeout(timeoutId);
40
+ return parseQuotaResult(body, statusFallback);
41
+ }, () => {
42
+ clearTimeout(timeoutId);
43
+ return statusFallback;
44
+ });
45
+ }).catch(() => {
46
+ clearTimeout(timeoutId);
47
+ return {
48
+ decision: "quota_ok",
49
+ reason: "api-error"
50
+ };
51
+ });
52
+ const timeoutPromise = new Promise((resolve) => {
53
+ timeoutId = setTimeout(() => {
54
+ controller.abort();
55
+ resolve({
56
+ decision: "quota_ok",
57
+ reason: "timeout"
58
+ });
59
+ }, timeoutMs);
60
+ });
61
+ return Promise.race([fetchPromise, timeoutPromise]);
62
+ }
63
+ //#endregion
64
+ export { checkProfilingQuota };
65
+
66
+ //# sourceMappingURL=quotaCheck.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotaCheck.mjs","names":[],"sources":["../../../src/domain/profiling/quotaCheck.ts"],"sourcesContent":["import { fetch, setTimeout, clearTimeout } from '@kubesense/kubesense-browser-core'\nimport { buildEndpointUrl } from '@kubesense/kubesense-js-core/transport'\nimport type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core'\n\n// Reason strings surfaced on RUM events. Backend reasons backend_unavailable and\n// backend_client_not_initialized are both normalised to backend_unavailable.\nexport type BackendQuotaReason = 'quota_ok' | 'quota_exceeded' | 'org_disabled' | 'backend_unavailable' | 'undefined'\n\n// SDK-only reasons used when the backend is not reachable.\nexport type FrontendQuotaReason = 'timeout' | 'api-error'\n\nexport type QuotaReason = BackendQuotaReason | FrontendQuotaReason\n\nexport interface QuotaResult {\n decision: 'quota_ok' | 'quota_ko'\n reason: QuotaReason\n}\n\nfunction parseQuotaResult(body: unknown, httpStatusFallback: QuotaResult): QuotaResult {\n const attrs = (body as any)?.data?.attributes\n if (!attrs || typeof attrs.admitted !== 'boolean' || typeof attrs.reason !== 'string') {\n return httpStatusFallback\n }\n const reason: BackendQuotaReason =\n attrs.reason === 'backend_client_not_initialized' ? 'backend_unavailable' : (attrs.reason as BackendQuotaReason)\n return {\n decision: attrs.admitted ? 'quota_ok' : 'quota_ko',\n reason,\n }\n}\n\nfunction buildQuotaUrl(configuration: RumConfiguration, sessionId: string): string {\n return buildEndpointUrl({\n proxy: configuration.proxy,\n kubesenseRumEndpoint: configuration.kubesenseRumEndpoint,\n path: '/rum/api/v1/profiling/quota',\n parameters: `session_id=${sessionId}`,\n subdomain: 'quota',\n })\n}\n\nexport function checkProfilingQuota(\n configuration: RumConfiguration,\n sessionId: string,\n timeoutMs = 5000\n): Promise<QuotaResult> {\n const url = buildQuotaUrl(configuration, sessionId)\n const controller = new AbortController()\n\n let timeoutId: ReturnType<typeof setTimeout>\n\n const fetchPromise = fetch(url, {\n credentials: 'omit',\n signal: controller.signal,\n headers: new Headers({\n 'DD-CLIENT-TOKEN': configuration.clientToken,\n }),\n })\n .then((response) => {\n const statusFallback: QuotaResult =\n response.status === 429\n ? { decision: 'quota_ko', reason: 'quota_exceeded' }\n : { decision: 'quota_ok', reason: 'api-error' }\n return response.json().then(\n (body): QuotaResult => {\n clearTimeout(timeoutId)\n return parseQuotaResult(body, statusFallback)\n },\n (): QuotaResult => {\n // Body unparseable — fall back to HTTP status\n clearTimeout(timeoutId)\n return statusFallback\n }\n )\n })\n .catch((): QuotaResult => {\n clearTimeout(timeoutId)\n return { decision: 'quota_ok', reason: 'api-error' }\n })\n\n const timeoutPromise = new Promise<QuotaResult>((resolve) => {\n timeoutId = setTimeout(() => {\n controller.abort()\n resolve({ decision: 'quota_ok', reason: 'timeout' })\n }, timeoutMs)\n })\n\n return Promise.race([fetchPromise, timeoutPromise])\n}\n"],"mappings":";;;AAkBA,SAAS,iBAAiB,MAAe,oBAA8C;CACrF,MAAM,QAAS,MAAc,MAAM;CACnC,IAAI,CAAC,SAAS,OAAO,MAAM,aAAa,aAAa,OAAO,MAAM,WAAW,UAC3E,OAAO;CAET,MAAM,SACJ,MAAM,WAAW,mCAAmC,wBAAyB,MAAM;CACrF,OAAO;EACL,UAAU,MAAM,WAAW,aAAa;EACxC;CACF;AACF;AAEA,SAAS,cAAc,eAAiC,WAA2B;CACjF,OAAO,iBAAiB;EACtB,OAAO,cAAc;EACrB,sBAAsB,cAAc;EACpC,MAAM;EACN,YAAY,cAAc;EAC1B,WAAW;CACb,CAAC;AACH;AAEA,SAAgB,oBACd,eACA,WACA,YAAY,KACU;CACtB,MAAM,MAAM,cAAc,eAAe,SAAS;CAClD,MAAM,aAAa,IAAI,gBAAgB;CAEvC,IAAI;CAEJ,MAAM,eAAe,MAAM,KAAK;EAC9B,aAAa;EACb,QAAQ,WAAW;EACnB,SAAS,IAAI,QAAQ,EACnB,mBAAmB,cAAc,YACnC,CAAC;CACH,CAAC,CAAC,CACC,MAAM,aAAa;EAClB,MAAM,iBACJ,SAAS,WAAW,MAChB;GAAE,UAAU;GAAY,QAAQ;EAAiB,IACjD;GAAE,UAAU;GAAY,QAAQ;EAAY;EAClD,OAAO,SAAS,KAAK,CAAC,CAAC,MACpB,SAAsB;GACrB,aAAa,SAAS;GACtB,OAAO,iBAAiB,MAAM,cAAc;EAC9C,SACmB;GAEjB,aAAa,SAAS;GACtB,OAAO;EACT,CACF;CACF,CAAC,CAAC,CACD,YAAyB;EACxB,aAAa,SAAS;EACtB,OAAO;GAAE,UAAU;GAAY,QAAQ;EAAY;CACrD,CAAC;CAEH,MAAM,iBAAiB,IAAI,SAAsB,YAAY;EAC3D,YAAY,iBAAiB;GAC3B,WAAW,MAAM;GACjB,QAAQ;IAAE,UAAU;IAAY,QAAQ;GAAU,CAAC;EACrD,GAAG,SAAS;CACd,CAAC;CAED,OAAO,QAAQ,KAAK,CAAC,cAAc,cAAc,CAAC;AACpD"}
@@ -0,0 +1,90 @@
1
+ import { buildTags } from "@kubesense/kubesense-browser-core";
2
+ import { clockDrift } from "@kubesense/kubesense-js-core/time";
3
+ //#region src/domain/profiling/transport/buildProfileEvent.ts
4
+ /**
5
+ * Builds a BrowserProfileEvent from a trace.
6
+ */
7
+ function buildProfileEvent(profilerTrace, configuration, sessionId) {
8
+ const tags = buildTags(configuration);
9
+ const profileAttributes = buildProfileEventAttributes(profilerTrace, configuration.applicationId, sessionId);
10
+ const profileEventTags = buildProfileEventTags(tags);
11
+ return {
12
+ ...profileAttributes,
13
+ attachments: ["wall-time.json"],
14
+ start: new Date(profilerTrace.startClocks.timeStamp).toISOString(),
15
+ end: new Date(profilerTrace.endClocks.timeStamp).toISOString(),
16
+ family: "chrome",
17
+ runtime: "chrome",
18
+ format: "json",
19
+ version: 4,
20
+ tags_profiler: profileEventTags.join(","),
21
+ _kubesense: { clock_drift: clockDrift() }
22
+ };
23
+ }
24
+ /**
25
+ * Builds attributes for the Profile Event.
26
+ *
27
+ * @param profilerTrace - Profiler trace
28
+ * @param applicationId - application id.
29
+ * @param sessionId - session id.
30
+ * @returns Additional attributes.
31
+ */
32
+ function buildProfileEventAttributes(profilerTrace, applicationId, sessionId) {
33
+ const { ids, names } = extractViewIdsAndNames(profilerTrace.views);
34
+ const longTaskIds = profilerTrace.longTasks.map((longTask) => longTask.id).filter((id) => id !== void 0);
35
+ const actionIds = profilerTrace.actions?.map((longTask) => longTask.id).filter((id) => id !== void 0) ?? [];
36
+ const { ids: vitalIds, labels: vitalLabels } = extractVitalIdsAndLabels(profilerTrace.vitals);
37
+ const attributes = { application: { id: applicationId } };
38
+ if (sessionId) attributes.session = { id: sessionId };
39
+ if (ids.length) attributes.view = {
40
+ id: ids,
41
+ name: names
42
+ };
43
+ if (longTaskIds.length) attributes.long_task = { id: longTaskIds };
44
+ if (actionIds.length) attributes.action = {
45
+ id: actionIds,
46
+ label: []
47
+ };
48
+ if (vitalIds.length) attributes.vital = {
49
+ id: vitalIds,
50
+ label: vitalLabels
51
+ };
52
+ return attributes;
53
+ }
54
+ function extractViewIdsAndNames(views) {
55
+ const result = {
56
+ ids: [],
57
+ names: []
58
+ };
59
+ for (const view of views) {
60
+ result.ids.push(view.viewId);
61
+ if (view.viewName) result.names.push(view.viewName);
62
+ }
63
+ result.names = Array.from(new Set(result.names));
64
+ return result;
65
+ }
66
+ function extractVitalIdsAndLabels(vitals) {
67
+ const result = {
68
+ ids: [],
69
+ labels: []
70
+ };
71
+ if (!vitals) return result;
72
+ for (const vital of vitals) {
73
+ result.ids.push(vital.id);
74
+ result.labels.push(vital.label);
75
+ }
76
+ result.labels = Array.from(new Set(result.labels));
77
+ return result;
78
+ }
79
+ function buildProfileEventTags(tags) {
80
+ return tags.concat([
81
+ "language:javascript",
82
+ "runtime:chrome",
83
+ "family:chrome",
84
+ "host:browser"
85
+ ]);
86
+ }
87
+ //#endregion
88
+ export { buildProfileEvent, buildProfileEventAttributes };
89
+
90
+ //# sourceMappingURL=buildProfileEvent.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildProfileEvent.mjs","names":[],"sources":["../../../../src/domain/profiling/transport/buildProfileEvent.ts"],"sourcesContent":["import { clockDrift } from '@kubesense/kubesense-js-core/time'\nimport { buildTags } from '@kubesense/kubesense-browser-core'\nimport type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core'\nimport type { BrowserProfileEvent, BrowserProfilerTrace, RumProfilerVitalEntry, RumViewEntry } from '../../../types'\n\nexport interface ProfileEventAttributes {\n application: {\n id: string\n }\n session?: {\n id: string\n }\n view?: {\n id: string[]\n name: string[]\n }\n long_task?: {\n id: string[]\n }\n action?: {\n id: string[]\n label: string[]\n }\n vital?: {\n id: string[]\n label: string[]\n }\n}\n\n/**\n * Builds a BrowserProfileEvent from a trace.\n */\nexport function buildProfileEvent(\n profilerTrace: BrowserProfilerTrace,\n configuration: RumConfiguration,\n sessionId: string | undefined\n): BrowserProfileEvent {\n const tags = buildTags(configuration) // TODO: get that from the tagContext hook\n const profileAttributes = buildProfileEventAttributes(profilerTrace, configuration.applicationId, sessionId)\n const profileEventTags = buildProfileEventTags(tags)\n\n return {\n ...profileAttributes,\n attachments: ['wall-time.json'],\n start: new Date(profilerTrace.startClocks.timeStamp).toISOString(),\n end: new Date(profilerTrace.endClocks.timeStamp).toISOString(),\n family: 'chrome',\n runtime: 'chrome',\n format: 'json',\n version: 4, // Ingestion event version (not the version application tag)\n tags_profiler: profileEventTags.join(','),\n _kubesense: {\n clock_drift: clockDrift(),\n },\n }\n}\n\n/**\n * Builds attributes for the Profile Event.\n *\n * @param profilerTrace - Profiler trace\n * @param applicationId - application id.\n * @param sessionId - session id.\n * @returns Additional attributes.\n */\nexport function buildProfileEventAttributes(\n profilerTrace: BrowserProfilerTrace,\n applicationId: string,\n sessionId: string | undefined\n): ProfileEventAttributes {\n // Extract view ids and names from the profiler trace and add them as attributes of the profile event.\n // This will be used to filter the profiles by @view.id and/or @view.name.\n const { ids, names } = extractViewIdsAndNames(profilerTrace.views)\n\n const longTaskIds: string[] = profilerTrace.longTasks.map((longTask) => longTask.id).filter((id) => id !== undefined)\n\n const actionIds: string[] =\n profilerTrace.actions?.map((longTask) => longTask.id).filter((id) => id !== undefined) ?? []\n\n const { ids: vitalIds, labels: vitalLabels } = extractVitalIdsAndLabels(profilerTrace.vitals)\n\n const attributes: ProfileEventAttributes = { application: { id: applicationId } }\n\n if (sessionId) {\n attributes.session = { id: sessionId }\n }\n if (ids.length) {\n attributes.view = { id: ids, name: names }\n }\n if (longTaskIds.length) {\n attributes.long_task = { id: longTaskIds }\n }\n if (actionIds.length) {\n attributes.action = { id: actionIds, label: [] }\n }\n if (vitalIds.length) {\n attributes.vital = { id: vitalIds, label: vitalLabels }\n }\n return attributes\n}\n\nfunction extractViewIdsAndNames(views: RumViewEntry[]): { ids: string[]; names: string[] } {\n const result: { ids: string[]; names: string[] } = { ids: [], names: [] }\n for (const view of views) {\n result.ids.push(view.viewId)\n\n if (view.viewName) {\n result.names.push(view.viewName)\n }\n }\n\n // Remove duplicates\n result.names = Array.from(new Set(result.names))\n\n return result\n}\n\nfunction extractVitalIdsAndLabels(vitals?: RumProfilerVitalEntry[]): {\n ids: string[]\n labels: string[]\n} {\n const result: { ids: string[]; labels: string[] } = { ids: [], labels: [] }\n\n if (!vitals) {\n return result\n }\n\n for (const vital of vitals) {\n result.ids.push(vital.id)\n result.labels.push(vital.label)\n }\n\n // Remove duplicates\n result.labels = Array.from(new Set(result.labels))\n\n return result\n}\n\nfunction buildProfileEventTags(tags: string[]): string[] {\n // Tags already contains the common tags for all events. (service, env, version, etc.)\n // Here we are adding some specific-to-profiling tags.\n return tags.concat(['language:javascript', 'runtime:chrome', 'family:chrome', 'host:browser'])\n}\n"],"mappings":";;;;;;AAgCA,SAAgB,kBACd,eACA,eACA,WACqB;CACrB,MAAM,OAAO,UAAU,aAAa;CACpC,MAAM,oBAAoB,4BAA4B,eAAe,cAAc,eAAe,SAAS;CAC3G,MAAM,mBAAmB,sBAAsB,IAAI;CAEnD,OAAO;EACL,GAAG;EACH,aAAa,CAAC,gBAAgB;EAC9B,OAAO,IAAI,KAAK,cAAc,YAAY,SAAS,CAAC,CAAC,YAAY;EACjE,KAAK,IAAI,KAAK,cAAc,UAAU,SAAS,CAAC,CAAC,YAAY;EAC7D,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,SAAS;EACT,eAAe,iBAAiB,KAAK,GAAG;EACxC,YAAY,EACV,aAAa,WAAW,EAC1B;CACF;AACF;;;;;;;;;AAUA,SAAgB,4BACd,eACA,eACA,WACwB;CAGxB,MAAM,EAAE,KAAK,UAAU,uBAAuB,cAAc,KAAK;CAEjE,MAAM,cAAwB,cAAc,UAAU,KAAK,aAAa,SAAS,EAAE,CAAC,CAAC,QAAQ,OAAO,OAAO,KAAA,CAAS;CAEpH,MAAM,YACJ,cAAc,SAAS,KAAK,aAAa,SAAS,EAAE,CAAC,CAAC,QAAQ,OAAO,OAAO,KAAA,CAAS,KAAK,CAAC;CAE7F,MAAM,EAAE,KAAK,UAAU,QAAQ,gBAAgB,yBAAyB,cAAc,MAAM;CAE5F,MAAM,aAAqC,EAAE,aAAa,EAAE,IAAI,cAAc,EAAE;CAEhF,IAAI,WACF,WAAW,UAAU,EAAE,IAAI,UAAU;CAEvC,IAAI,IAAI,QACN,WAAW,OAAO;EAAE,IAAI;EAAK,MAAM;CAAM;CAE3C,IAAI,YAAY,QACd,WAAW,YAAY,EAAE,IAAI,YAAY;CAE3C,IAAI,UAAU,QACZ,WAAW,SAAS;EAAE,IAAI;EAAW,OAAO,CAAC;CAAE;CAEjD,IAAI,SAAS,QACX,WAAW,QAAQ;EAAE,IAAI;EAAU,OAAO;CAAY;CAExD,OAAO;AACT;AAEA,SAAS,uBAAuB,OAA2D;CACzF,MAAM,SAA6C;EAAE,KAAK,CAAC;EAAG,OAAO,CAAC;CAAE;CACxE,KAAK,MAAM,QAAQ,OAAO;EACxB,OAAO,IAAI,KAAK,KAAK,MAAM;EAE3B,IAAI,KAAK,UACP,OAAO,MAAM,KAAK,KAAK,QAAQ;CAEnC;CAGA,OAAO,QAAQ,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC;CAE/C,OAAO;AACT;AAEA,SAAS,yBAAyB,QAGhC;CACA,MAAM,SAA8C;EAAE,KAAK,CAAC;EAAG,QAAQ,CAAC;CAAE;CAE1E,IAAI,CAAC,QACH,OAAO;CAGT,KAAK,MAAM,SAAS,QAAQ;EAC1B,OAAO,IAAI,KAAK,MAAM,EAAE;EACxB,OAAO,OAAO,KAAK,MAAM,KAAK;CAChC;CAGA,OAAO,SAAS,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC;CAEjD,OAAO;AACT;AAEA,SAAS,sBAAsB,MAA0B;CAGvD,OAAO,KAAK,OAAO;EAAC;EAAuB;EAAkB;EAAiB;CAAc,CAAC;AAC/F"}
@@ -0,0 +1,17 @@
1
+ import { createFormDataTransport } from "@kubesense/kubesense-browser-rum-core";
2
+ import { DeflateEncoderStreamId } from "@kubesense/kubesense-browser-core";
3
+ //#region src/domain/profiling/transport/formDataEmitter.ts
4
+ function createFormDataEmitter(configuration, lifeCycle, createEncoder) {
5
+ const transport = createFormDataTransport(configuration, lifeCycle, createEncoder, DeflateEncoderStreamId.PROFILING);
6
+ return ({ profile, trace }) => {
7
+ const formPayload = {
8
+ event: profile,
9
+ "wall-time.json": trace
10
+ };
11
+ transport.send(formPayload);
12
+ };
13
+ }
14
+ //#endregion
15
+ export { createFormDataEmitter };
16
+
17
+ //# sourceMappingURL=formDataEmitter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formDataEmitter.mjs","names":[],"sources":["../../../../src/domain/profiling/transport/formDataEmitter.ts"],"sourcesContent":["import type { Encoder } from '@kubesense/kubesense-browser-core'\nimport { DeflateEncoderStreamId } from '@kubesense/kubesense-browser-core'\nimport type { LifeCycle, RumConfiguration, TransportPayload } from '@kubesense/kubesense-browser-rum-core'\nimport { createFormDataTransport } from '@kubesense/kubesense-browser-rum-core'\nimport type { ProfilingPayload } from '../types'\n\nexport function createFormDataEmitter(\n configuration: RumConfiguration,\n lifeCycle: LifeCycle,\n createEncoder: (streamId: DeflateEncoderStreamId) => Encoder\n): (payload: ProfilingPayload) => void {\n const transport = createFormDataTransport(configuration, lifeCycle, createEncoder, DeflateEncoderStreamId.PROFILING)\n return ({ profile, trace }: ProfilingPayload) => {\n const formPayload = { event: profile, 'wall-time.json': trace }\n void transport.send(formPayload as unknown as TransportPayload)\n }\n}\n"],"mappings":";;;AAMA,SAAgB,sBACd,eACA,WACA,eACqC;CACrC,MAAM,YAAY,wBAAwB,eAAe,WAAW,eAAe,uBAAuB,SAAS;CACnH,QAAQ,EAAE,SAAS,YAA8B;EAC/C,MAAM,cAAc;GAAE,OAAO;GAAS,kBAAkB;EAAM;EAC9D,UAAe,KAAK,WAA0C;CAChE;AACF"}
@@ -0,0 +1,12 @@
1
+ import { getEventBridge } from "@kubesense/kubesense-browser-core";
2
+ //#region src/domain/profiling/transport/profilingBridge.ts
3
+ function createBridgeEmitter() {
4
+ const bridge = getEventBridge();
5
+ return (payload) => {
6
+ bridge.send("profile", payload);
7
+ };
8
+ }
9
+ //#endregion
10
+ export { createBridgeEmitter };
11
+
12
+ //# sourceMappingURL=profilingBridge.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilingBridge.mjs","names":[],"sources":["../../../../src/domain/profiling/transport/profilingBridge.ts"],"sourcesContent":["import { getEventBridge } from '@kubesense/kubesense-browser-core'\nimport type { ProfilingPayload } from '../types'\n\nexport function createBridgeEmitter(): (payload: ProfilingPayload) => void {\n const bridge = getEventBridge<'profile', ProfilingPayload>()!\n return (payload: ProfilingPayload) => {\n bridge.send('profile', payload)\n }\n}\n"],"mappings":";;AAGA,SAAgB,sBAA2D;CACzE,MAAM,SAAS,eAA4C;CAC3D,QAAQ,YAA8B;EACpC,OAAO,KAAK,WAAW,OAAO;CAChC;AACF"}
@@ -0,0 +1,7 @@
1
+ import { getDefaultViewName } from "./getDefaultViewName.mjs";
2
+ //#region src/domain/profiling/utils/getCustomOrDefaultViewName.ts
3
+ const getCustomOrDefaultViewName = (customViewName, viewPathUrl) => customViewName || getDefaultViewName(viewPathUrl);
4
+ //#endregion
5
+ export { getCustomOrDefaultViewName };
6
+
7
+ //# sourceMappingURL=getCustomOrDefaultViewName.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCustomOrDefaultViewName.mjs","names":[],"sources":["../../../../src/domain/profiling/utils/getCustomOrDefaultViewName.ts"],"sourcesContent":["import { getDefaultViewName } from './getDefaultViewName'\n\nexport const getCustomOrDefaultViewName = (customViewName: string | undefined, viewPathUrl: string): string =>\n customViewName || getDefaultViewName(viewPathUrl)\n"],"mappings":";;AAEA,MAAa,8BAA8B,gBAAoC,gBAC7E,kBAAkB,mBAAmB,WAAW"}
@@ -0,0 +1,10 @@
1
+ //#region src/domain/profiling/utils/getDefaultViewName.ts
2
+ const PATH_MIXED_ALPHANUMERICS = /\/(?![vV]\d{1,2}\/)([^/\d?]*\d+[^/?]*)/g;
3
+ function getDefaultViewName(viewPathUrl) {
4
+ if (!viewPathUrl) return "/";
5
+ return viewPathUrl.replace(PATH_MIXED_ALPHANUMERICS, "/?");
6
+ }
7
+ //#endregion
8
+ export { getDefaultViewName };
9
+
10
+ //# sourceMappingURL=getDefaultViewName.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDefaultViewName.mjs","names":[],"sources":["../../../../src/domain/profiling/utils/getDefaultViewName.ts"],"sourcesContent":["// This is the regex used to extract the path from the url (from SimpleUrlGroupingProcessor.java)\n// It's a bit different from the one in the java code because we removed the lookbehind unsupported by Safari.\nconst PATH_MIXED_ALPHANUMERICS = /\\/(?![vV]\\d{1,2}\\/)([^/\\d?]*\\d+[^/?]*)/g\n\nexport function getDefaultViewName(viewPathUrl: string): string {\n if (!viewPathUrl) {\n return '/'\n }\n\n // Replace all the mixed alphanumerics with a ?\n return viewPathUrl.replace(PATH_MIXED_ALPHANUMERICS, '/?')\n}\n"],"mappings":";AAEA,MAAM,2BAA2B;AAEjC,SAAgB,mBAAmB,aAA6B;CAC9D,IAAI,CAAC,aACH,OAAO;CAIT,OAAO,YAAY,QAAQ,0BAA0B,IAAI;AAC3D"}
@@ -0,0 +1,55 @@
1
+ import { LifeCycleEventType, VitalType } from "@kubesense/kubesense-browser-rum-core";
2
+ import { SESSION_TIME_OUT_DELAY, createValueHistory } from "@kubesense/kubesense-browser-core";
3
+ import { addDuration, elapsed } from "@kubesense/kubesense-js-core/time";
4
+ //#region src/domain/profiling/vitalHistory.ts
5
+ const VITAL_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
6
+ function createVitalHistory(lifeCycle) {
7
+ const history = createValueHistory({ expireDelay: VITAL_ID_HISTORY_TIME_OUT_DELAY });
8
+ lifeCycle.subscribe(LifeCycleEventType.DURATION_VITAL_STARTED, (vitalStart) => {
9
+ history.add({
10
+ id: vitalStart.id,
11
+ type: VitalType.DURATION,
12
+ startClocks: vitalStart.startClocks,
13
+ duration: void 0,
14
+ label: vitalStart.name
15
+ }, vitalStart.startClocks.relative);
16
+ });
17
+ lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
18
+ if (rawRumEvent.type !== "vital") return;
19
+ if (rawRumEvent.vital.type === VitalType.OPERATION_STEP) {
20
+ if (rawRumEvent.vital.step_type === "start") history.add({
21
+ id: rawRumEvent.vital.id,
22
+ type: rawRumEvent.vital.type,
23
+ operationKey: rawRumEvent.vital.operation_key,
24
+ startClocks,
25
+ label: rawRumEvent.vital.name
26
+ }, startClocks.relative);
27
+ else if (rawRumEvent.vital.step_type === "end") {
28
+ const historyEntry = history.findAllEntries().find((entry) => entry.value.type === VitalType.OPERATION_STEP && entry.value.label === rawRumEvent.vital.name && entry.value.operationKey === rawRumEvent.vital.operation_key);
29
+ if (!historyEntry) return;
30
+ historyEntry.value.duration = elapsed(historyEntry.value.startClocks.relative, startClocks.relative);
31
+ historyEntry.close(startClocks.relative);
32
+ }
33
+ return;
34
+ }
35
+ const historyEntry = history.getEntries(startClocks.relative).find((entry) => entry.value.id === rawRumEvent.vital.id);
36
+ if (historyEntry) {
37
+ historyEntry.value.duration = duration;
38
+ historyEntry.close(addDuration(startClocks.relative, duration));
39
+ return;
40
+ }
41
+ history.add({
42
+ id: rawRumEvent.vital.id,
43
+ type: rawRumEvent.vital.type,
44
+ operationKey: rawRumEvent.vital.operation_key,
45
+ startClocks,
46
+ duration,
47
+ label: rawRumEvent.vital.name
48
+ }, startClocks.relative).close(addDuration(startClocks.relative, duration));
49
+ });
50
+ return history;
51
+ }
52
+ //#endregion
53
+ export { VITAL_ID_HISTORY_TIME_OUT_DELAY, createVitalHistory };
54
+
55
+ //# sourceMappingURL=vitalHistory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitalHistory.mjs","names":[],"sources":["../../../src/domain/profiling/vitalHistory.ts"],"sourcesContent":["import type { ClocksState, Duration } from '@kubesense/kubesense-js-core/time'\nimport { elapsed, addDuration } from '@kubesense/kubesense-js-core/time'\nimport { createValueHistory, SESSION_TIME_OUT_DELAY } from '@kubesense/kubesense-browser-core'\nimport type { LifeCycle } from '@kubesense/kubesense-browser-rum-core'\nimport { LifeCycleEventType, VitalType } from '@kubesense/kubesense-browser-rum-core'\n\nexport const VITAL_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY\n\nexport interface VitalContext {\n id: string\n type: VitalType\n label: string\n operationKey?: string\n duration?: Duration\n startClocks: ClocksState\n}\n\nexport function createVitalHistory(lifeCycle: LifeCycle) {\n const history = createValueHistory<VitalContext>({\n expireDelay: VITAL_ID_HISTORY_TIME_OUT_DELAY,\n })\n\n lifeCycle.subscribe(LifeCycleEventType.DURATION_VITAL_STARTED, (vitalStart) => {\n history.add(\n {\n id: vitalStart.id,\n type: VitalType.DURATION,\n startClocks: vitalStart.startClocks,\n duration: undefined,\n label: vitalStart.name,\n },\n vitalStart.startClocks.relative\n )\n })\n\n lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {\n if (rawRumEvent.type !== 'vital') {\n return\n }\n\n // For operation step vitals, we only tag profiles with the start step's id.\n // This means that if we receive an end step vital, we need to look for the\n // corresponding start one and update its duration. If we receive a start step vital\n // however, we just store it and wait for the end step.\n if (rawRumEvent.vital.type === VitalType.OPERATION_STEP) {\n if (rawRumEvent.vital.step_type === 'start') {\n history.add(\n {\n id: rawRumEvent.vital.id,\n type: rawRumEvent.vital.type,\n operationKey: rawRumEvent.vital.operation_key,\n startClocks,\n label: rawRumEvent.vital.name,\n },\n startClocks.relative\n )\n } else if (rawRumEvent.vital.step_type === 'end') {\n const historyEntry = history\n .findAllEntries()\n .find(\n (entry) =>\n entry.value.type === VitalType.OPERATION_STEP &&\n entry.value.label === rawRumEvent.vital.name &&\n entry.value.operationKey === rawRumEvent.vital.operation_key\n )\n\n if (!historyEntry) {\n return\n }\n\n historyEntry.value.duration = elapsed(historyEntry.value.startClocks.relative, startClocks.relative)\n historyEntry.close(startClocks.relative)\n }\n\n return\n }\n\n // All the other vital types are handled normally (i.e. stored in the\n // history and tagged on the profiles)\n const historyEntry = history\n .getEntries(startClocks.relative)\n .find((entry) => entry.value.id === rawRumEvent.vital.id)\n\n if (historyEntry) {\n historyEntry.value.duration = duration!\n historyEntry.close(addDuration(startClocks.relative, duration!))\n return\n }\n\n history\n .add(\n {\n id: rawRumEvent.vital.id,\n type: rawRumEvent.vital.type,\n operationKey: rawRumEvent.vital.operation_key,\n startClocks,\n duration,\n label: rawRumEvent.vital.name,\n },\n startClocks.relative\n )\n .close(addDuration(startClocks.relative, duration!))\n })\n\n return history\n}\n"],"mappings":";;;;AAMA,MAAa,kCAAkC;AAW/C,SAAgB,mBAAmB,WAAsB;CACvD,MAAM,UAAU,mBAAiC,EAC/C,aAAa,gCACf,CAAC;CAED,UAAU,UAAU,mBAAmB,yBAAyB,eAAe;EAC7E,QAAQ,IACN;GACE,IAAI,WAAW;GACf,MAAM,UAAU;GAChB,aAAa,WAAW;GACxB,UAAU,KAAA;GACV,OAAO,WAAW;EACpB,GACA,WAAW,YAAY,QACzB;CACF,CAAC;CAED,UAAU,UAAU,mBAAmB,0BAA0B,EAAE,aAAa,aAAa,eAAe;EAC1G,IAAI,YAAY,SAAS,SACvB;EAOF,IAAI,YAAY,MAAM,SAAS,UAAU,gBAAgB;GACvD,IAAI,YAAY,MAAM,cAAc,SAClC,QAAQ,IACN;IACE,IAAI,YAAY,MAAM;IACtB,MAAM,YAAY,MAAM;IACxB,cAAc,YAAY,MAAM;IAChC;IACA,OAAO,YAAY,MAAM;GAC3B,GACA,YAAY,QACd;QACK,IAAI,YAAY,MAAM,cAAc,OAAO;IAChD,MAAM,eAAe,QAClB,eAAe,CAAC,CAChB,MACE,UACC,MAAM,MAAM,SAAS,UAAU,kBAC/B,MAAM,MAAM,UAAU,YAAY,MAAM,QACxC,MAAM,MAAM,iBAAiB,YAAY,MAAM,aACnD;IAEF,IAAI,CAAC,cACH;IAGF,aAAa,MAAM,WAAW,QAAQ,aAAa,MAAM,YAAY,UAAU,YAAY,QAAQ;IACnG,aAAa,MAAM,YAAY,QAAQ;GACzC;GAEA;EACF;EAIA,MAAM,eAAe,QAClB,WAAW,YAAY,QAAQ,CAAC,CAChC,MAAM,UAAU,MAAM,MAAM,OAAO,YAAY,MAAM,EAAE;EAE1D,IAAI,cAAc;GAChB,aAAa,MAAM,WAAW;GAC9B,aAAa,MAAM,YAAY,YAAY,UAAU,QAAS,CAAC;GAC/D;EACF;EAEA,QACG,IACC;GACE,IAAI,YAAY,MAAM;GACtB,MAAM,YAAY,MAAM;GACxB,cAAc,YAAY,MAAM;GAChC;GACA;GACA,OAAO,YAAY,MAAM;EAC3B,GACA,YAAY,QACd,CAAC,CACA,MAAM,YAAY,YAAY,UAAU,QAAS,CAAC;CACvD,CAAC;CAED,OAAO;AACT"}
@@ -0,0 +1,17 @@
1
+ import { RecordType } from "../../types/sessionReplayConstants.mjs";
2
+ import { timeStampNow } from "@kubesense/kubesense-js-core/time";
3
+ //#region src/domain/record/assembly.ts
4
+ function assembleIncrementalSnapshot(source, data, timestamp = timeStampNow()) {
5
+ return {
6
+ data: {
7
+ source,
8
+ ...data
9
+ },
10
+ type: RecordType.IncrementalSnapshot,
11
+ timestamp
12
+ };
13
+ }
14
+ //#endregion
15
+ export { assembleIncrementalSnapshot };
16
+
17
+ //# sourceMappingURL=assembly.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assembly.mjs","names":[],"sources":["../../../src/domain/record/assembly.ts"],"sourcesContent":["import { timeStampNow } from '@kubesense/kubesense-js-core/time'\nimport type { TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport type { BrowserIncrementalData, BrowserIncrementalSnapshotRecord } from '../../types'\nimport { RecordType } from '../../types'\n\nexport function assembleIncrementalSnapshot<Data extends BrowserIncrementalData>(\n source: Data['source'],\n data: Omit<Data, 'source'>,\n timestamp: TimeStamp = timeStampNow()\n): BrowserIncrementalSnapshotRecord {\n return {\n data: {\n source,\n ...data,\n } as Data,\n type: RecordType.IncrementalSnapshot,\n timestamp,\n }\n}\n"],"mappings":";;;AAKA,SAAgB,4BACd,QACA,MACA,YAAuB,aAAa,GACF;CAClC,OAAO;EACL,MAAM;GACJ;GACA,GAAG;EACL;EACA,MAAM,WAAW;EACjB;CACF;AACF"}
@@ -0,0 +1,33 @@
1
+ import { createDownscaledCanvas } from "./canvasSnapshot.mjs";
2
+ import { mockable } from "@kubesense/kubesense-browser-core";
3
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
4
+ //#region src/domain/record/canvas/canvasHash.ts
5
+ function computeImageHash(snapshot, maxHashDimension) {
6
+ const { height: sourceHeight, width: sourceWidth } = snapshot.source;
7
+ const thumbnail = Math.max(sourceWidth, sourceHeight) <= maxHashDimension ? snapshot.source : createDownscaledCanvas(snapshot.source, sourceWidth, sourceHeight, maxHashDimension);
8
+ if (!thumbnail) return Promise.resolve(void 0);
9
+ const context = thumbnail.getContext("2d");
10
+ if (!context) return Promise.resolve(void 0);
11
+ const data = context.getImageData(0, 0, thumbnail.width, thumbnail.height).data;
12
+ const subtleCrypto = mockable(globalObject.crypto?.subtle);
13
+ if (!subtleCrypto) return Promise.resolve(createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, fnv1aHash(data)));
14
+ return subtleCrypto.digest("SHA-256", data).then((buffer) => createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, arrayBufferToHex(buffer)), () => createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, fnv1aHash(data)));
15
+ }
16
+ function arrayBufferToHex(buffer) {
17
+ return Array.from(new Uint8Array(buffer), (byte) => byte.toString(16).padStart(2, "0")).join("");
18
+ }
19
+ function createChangeHash(width, height, pixelHash) {
20
+ return `${width}x${height}-${pixelHash}`;
21
+ }
22
+ function fnv1aHash(data) {
23
+ let hash = 2166136261;
24
+ for (let index = 0; index < data.length; index += 1) {
25
+ hash ^= data[index];
26
+ hash = Math.imul(hash, 16777619);
27
+ }
28
+ return (hash >>> 0).toString(16).padStart(8, "0");
29
+ }
30
+ //#endregion
31
+ export { computeImageHash };
32
+
33
+ //# sourceMappingURL=canvasHash.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasHash.mjs","names":[],"sources":["../../../../src/domain/record/canvas/canvasHash.ts"],"sourcesContent":["import { mockable } from '@kubesense/kubesense-browser-core'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\nimport type { CanvasSnapshot } from './canvasSnapshot'\nimport { createDownscaledCanvas } from './canvasSnapshot'\n\nexport function computeImageHash(snapshot: CanvasSnapshot, maxHashDimension: number): Promise<string | undefined> {\n const { height: sourceHeight, width: sourceWidth } = snapshot.source\n // The snapshot is already frozen, so if it already fits, hash it directly instead of downscaling it again.\n const thumbnail =\n Math.max(sourceWidth, sourceHeight) <= maxHashDimension\n ? snapshot.source\n : createDownscaledCanvas(snapshot.source, sourceWidth, sourceHeight, maxHashDimension)\n if (!thumbnail) {\n return Promise.resolve(undefined)\n }\n\n const context = thumbnail.getContext('2d')\n if (!context) {\n return Promise.resolve(undefined)\n }\n\n const data = context.getImageData(0, 0, thumbnail.width, thumbnail.height).data\n // crypto.subtle is only exposed in secure contexts, so it is missing on plain HTTP pages.\n const subtleCrypto = mockable(globalObject.crypto?.subtle)\n if (!subtleCrypto) {\n return Promise.resolve(createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, fnv1aHash(data)))\n }\n\n return subtleCrypto.digest('SHA-256', data).then(\n (buffer) => createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, arrayBufferToHex(buffer)),\n () => createChangeHash(snapshot.canvasWidth, snapshot.canvasHeight, fnv1aHash(data))\n )\n}\n\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n return Array.from(new Uint8Array(buffer), (byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction createChangeHash(width: number, height: number, pixelHash: string): string {\n return `${width}x${height}-${pixelHash}`\n}\n\n/* eslint-disable no-bitwise */\nfunction fnv1aHash(data: ArrayLike<number>): string {\n let hash = 0x811c9dc5\n\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index]\n hash = Math.imul(hash, 0x01000193)\n }\n\n return (hash >>> 0).toString(16).padStart(8, '0')\n}\n/* eslint-enable no-bitwise */\n"],"mappings":";;;;AAKA,SAAgB,iBAAiB,UAA0B,kBAAuD;CAChH,MAAM,EAAE,QAAQ,cAAc,OAAO,gBAAgB,SAAS;CAE9D,MAAM,YACJ,KAAK,IAAI,aAAa,YAAY,KAAK,mBACnC,SAAS,SACT,uBAAuB,SAAS,QAAQ,aAAa,cAAc,gBAAgB;CACzF,IAAI,CAAC,WACH,OAAO,QAAQ,QAAQ,KAAA,CAAS;CAGlC,MAAM,UAAU,UAAU,WAAW,IAAI;CACzC,IAAI,CAAC,SACH,OAAO,QAAQ,QAAQ,KAAA,CAAS;CAGlC,MAAM,OAAO,QAAQ,aAAa,GAAG,GAAG,UAAU,OAAO,UAAU,MAAM,CAAC,CAAC;CAE3E,MAAM,eAAe,SAAS,aAAa,QAAQ,MAAM;CACzD,IAAI,CAAC,cACH,OAAO,QAAQ,QAAQ,iBAAiB,SAAS,aAAa,SAAS,cAAc,UAAU,IAAI,CAAC,CAAC;CAGvG,OAAO,aAAa,OAAO,WAAW,IAAI,CAAC,CAAC,MACzC,WAAW,iBAAiB,SAAS,aAAa,SAAS,cAAc,iBAAiB,MAAM,CAAC,SAC5F,iBAAiB,SAAS,aAAa,SAAS,cAAc,UAAU,IAAI,CAAC,CACrF;AACF;AAEA,SAAS,iBAAiB,QAA6B;CACrD,OAAO,MAAM,KAAK,IAAI,WAAW,MAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AACjG;AAEA,SAAS,iBAAiB,OAAe,QAAgB,WAA2B;CAClF,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG;AAC/B;AAGA,SAAS,UAAU,MAAiC;CAClD,IAAI,OAAO;CAEX,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,QAAQ,KAAK;EACb,OAAO,KAAK,KAAK,MAAM,QAAU;CACnC;CAEA,QAAQ,SAAS,EAAA,CAAG,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;AAClD"}
@@ -0,0 +1,99 @@
1
+ //#region src/domain/record/canvas/canvasManager.ts
2
+ function createCanvasManager() {
3
+ const dirtyCanvases = /* @__PURE__ */ new Set();
4
+ const taintedCanvases = /* @__PURE__ */ new WeakSet();
5
+ let canvasContentMutations = [];
6
+ let canvasTrackingStates = /* @__PURE__ */ new WeakMap();
7
+ function getTrackingState(canvas) {
8
+ let trackingState = canvasTrackingStates.get(canvas);
9
+ if (!trackingState) {
10
+ trackingState = { capturePending: false };
11
+ canvasTrackingStates.set(canvas, trackingState);
12
+ }
13
+ return trackingState;
14
+ }
15
+ function startCaptureAttempt(canvas) {
16
+ const trackingState = getTrackingState(canvas);
17
+ trackingState.capturePending = true;
18
+ const isCurrent = () => canvasTrackingStates.get(canvas) === trackingState;
19
+ return {
20
+ lastChangeHash: trackingState.lastChangeHash,
21
+ isCurrent,
22
+ setLastChangeHash: (changeHash) => {
23
+ if (isCurrent()) trackingState.lastChangeHash = changeHash;
24
+ }
25
+ };
26
+ }
27
+ function markDirty(canvas) {
28
+ if (!canvas.isConnected || taintedCanvases.has(canvas)) return;
29
+ dirtyCanvases.add(canvas);
30
+ }
31
+ function markClean(canvas) {
32
+ dirtyCanvases.delete(canvas);
33
+ }
34
+ function markTainted(canvas) {
35
+ taintedCanvases.add(canvas);
36
+ dirtyCanvases.delete(canvas);
37
+ }
38
+ return {
39
+ markCanvas: (canvas, status) => {
40
+ switch (status) {
41
+ case 1:
42
+ markDirty(canvas);
43
+ return;
44
+ case 0:
45
+ markClean(canvas);
46
+ return;
47
+ case 2:
48
+ markTainted(canvas);
49
+ return;
50
+ default: return;
51
+ }
52
+ },
53
+ forgetCanvas: (canvas) => {
54
+ dirtyCanvases.delete(canvas);
55
+ canvasTrackingStates.delete(canvas);
56
+ },
57
+ resetCanvasBitmap: (canvas) => {
58
+ canvasTrackingStates.delete(canvas);
59
+ markDirty(canvas);
60
+ },
61
+ takeCapturableCanvases: () => {
62
+ const capturableCanvases = [];
63
+ dirtyCanvases.forEach((canvas) => {
64
+ if (!canvas.isConnected) dirtyCanvases.delete(canvas);
65
+ else if (!taintedCanvases.has(canvas) && !getTrackingState(canvas).capturePending) {
66
+ dirtyCanvases.delete(canvas);
67
+ capturableCanvases.push(canvas);
68
+ }
69
+ });
70
+ return capturableCanvases;
71
+ },
72
+ startCaptureAttempt,
73
+ discardCaptureAttempt: (canvas, captureAttempt) => {
74
+ if (captureAttempt.isCurrent()) getTrackingState(canvas).capturePending = false;
75
+ },
76
+ retryCanvas: (canvas) => {
77
+ canvasTrackingStates.delete(canvas);
78
+ markDirty(canvas);
79
+ },
80
+ addCanvasContentMutation: (mutation) => {
81
+ canvasContentMutations.push(mutation);
82
+ },
83
+ takeCanvasContentMutations: () => {
84
+ const mutations = canvasContentMutations;
85
+ canvasContentMutations = [];
86
+ for (const mutation of mutations) if (mutation.captureAttempt.isCurrent()) getTrackingState(mutation.canvas).capturePending = false;
87
+ return mutations;
88
+ },
89
+ reset: () => {
90
+ dirtyCanvases.clear();
91
+ canvasContentMutations = [];
92
+ canvasTrackingStates = /* @__PURE__ */ new WeakMap();
93
+ }
94
+ };
95
+ }
96
+ //#endregion
97
+ export { createCanvasManager };
98
+
99
+ //# sourceMappingURL=canvasManager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasManager.mjs","names":[],"sources":["../../../../src/domain/record/canvas/canvasManager.ts"],"sourcesContent":["export const enum CanvasStatus {\n /** The canvas is clean, meaning it has not been marked as dirty or tainted */\n Clean,\n /** The canvas is dirty, meaning it has been marked as dirty by a draw operation */\n Dirty,\n /** The canvas is tainted, meaning it has been marked as tainted by a SecurityError */\n Tainted,\n}\n\nexport interface CanvasCaptureAttempt {\n /** changeHash emitted the last time this canvas was captured, taken when the attempt started */\n readonly lastChangeHash: string | undefined\n /** false if the canvas was forgotten/reset, or if another attempt took its place */\n isCurrent: () => boolean\n /** stores the changeHash */\n setLastChangeHash: (changeHash: string) => void\n}\n\nexport interface CanvasContentMutation {\n canvas: HTMLCanvasElement\n captureAttempt: CanvasCaptureAttempt\n hash: string\n image: Blob\n}\n\nexport interface CanvasManager {\n /** Single entry point for the canvas status */\n markCanvas: (canvas: HTMLCanvasElement, status: CanvasStatus) => void\n /** The node left the DOM: forget its tracking state, but not its taint */\n forgetCanvas: (canvas: HTMLCanvasElement) => void\n /** width/height were assigned: the bitmap was cleared, so drop the last hash and mark dirty */\n resetCanvasBitmap: (canvas: HTMLCanvasElement) => void\n /** Takes dirty, connected, non-tainted canvases and clears their dirty state */\n takeCapturableCanvases: () => HTMLCanvasElement[]\n /** Starts a capture attempt for a canvas */\n startCaptureAttempt: (canvas: HTMLCanvasElement) => CanvasCaptureAttempt\n discardCaptureAttempt: (canvas: HTMLCanvasElement, captureAttempt: CanvasCaptureAttempt) => void\n /** Discards the last capture hash and retries a rejected capture */\n retryCanvas: (canvas: HTMLCanvasElement) => void\n addCanvasContentMutation: (mutation: CanvasContentMutation) => void\n takeCanvasContentMutations: () => CanvasContentMutation[]\n /** New record stream: discards the per-stream tracking states (not the taint) */\n reset: () => void\n}\n\ninterface CanvasTrackingState {\n capturePending: boolean\n lastChangeHash?: string\n}\n\nexport function createCanvasManager(): CanvasManager {\n const dirtyCanvases = new Set<HTMLCanvasElement>()\n const taintedCanvases = new WeakSet<HTMLCanvasElement>()\n let canvasContentMutations: CanvasContentMutation[] = []\n let canvasTrackingStates = new WeakMap<HTMLCanvasElement, CanvasTrackingState>()\n\n function getTrackingState(canvas: HTMLCanvasElement): CanvasTrackingState {\n let trackingState = canvasTrackingStates.get(canvas)\n if (!trackingState) {\n trackingState = { capturePending: false }\n canvasTrackingStates.set(canvas, trackingState)\n }\n return trackingState\n }\n\n function startCaptureAttempt(canvas: HTMLCanvasElement): CanvasCaptureAttempt {\n const trackingState = getTrackingState(canvas)\n trackingState.capturePending = true\n const isCurrent = () => canvasTrackingStates.get(canvas) === trackingState\n\n return {\n lastChangeHash: trackingState.lastChangeHash,\n isCurrent,\n setLastChangeHash: (changeHash) => {\n if (isCurrent()) {\n trackingState.lastChangeHash = changeHash\n }\n },\n }\n }\n\n function markDirty(canvas: HTMLCanvasElement) {\n if (!canvas.isConnected || taintedCanvases.has(canvas)) {\n return\n }\n dirtyCanvases.add(canvas)\n }\n\n function markClean(canvas: HTMLCanvasElement) {\n dirtyCanvases.delete(canvas)\n }\n\n function markTainted(canvas: HTMLCanvasElement) {\n taintedCanvases.add(canvas)\n dirtyCanvases.delete(canvas)\n }\n\n return {\n markCanvas: (canvas, status) => {\n switch (status) {\n case CanvasStatus.Dirty:\n markDirty(canvas)\n return\n case CanvasStatus.Clean:\n markClean(canvas)\n return\n case CanvasStatus.Tainted:\n markTainted(canvas)\n return\n default:\n status satisfies never\n return\n }\n },\n\n forgetCanvas: (canvas) => {\n dirtyCanvases.delete(canvas)\n canvasTrackingStates.delete(canvas)\n },\n\n resetCanvasBitmap: (canvas) => {\n canvasTrackingStates.delete(canvas)\n markDirty(canvas)\n },\n\n takeCapturableCanvases: () => {\n const capturableCanvases: HTMLCanvasElement[] = []\n\n dirtyCanvases.forEach((canvas) => {\n if (!canvas.isConnected) {\n dirtyCanvases.delete(canvas)\n } else if (!taintedCanvases.has(canvas) && !getTrackingState(canvas).capturePending) {\n dirtyCanvases.delete(canvas)\n capturableCanvases.push(canvas)\n }\n })\n\n return capturableCanvases\n },\n\n startCaptureAttempt,\n\n discardCaptureAttempt: (canvas, captureAttempt) => {\n if (captureAttempt.isCurrent()) {\n getTrackingState(canvas).capturePending = false\n }\n },\n\n retryCanvas: (canvas) => {\n canvasTrackingStates.delete(canvas)\n markDirty(canvas)\n },\n\n addCanvasContentMutation: (mutation) => {\n canvasContentMutations.push(mutation)\n },\n\n takeCanvasContentMutations: () => {\n const mutations = canvasContentMutations\n canvasContentMutations = []\n for (const mutation of mutations) {\n if (mutation.captureAttempt.isCurrent()) {\n getTrackingState(mutation.canvas).capturePending = false\n }\n }\n return mutations\n },\n\n reset: () => {\n dirtyCanvases.clear()\n canvasContentMutations = []\n canvasTrackingStates = new WeakMap()\n },\n }\n}\n"],"mappings":";AAkDA,SAAgB,sBAAqC;CACnD,MAAM,gCAAgB,IAAI,IAAuB;CACjD,MAAM,kCAAkB,IAAI,QAA2B;CACvD,IAAI,yBAAkD,CAAC;CACvD,IAAI,uCAAuB,IAAI,QAAgD;CAE/E,SAAS,iBAAiB,QAAgD;EACxE,IAAI,gBAAgB,qBAAqB,IAAI,MAAM;EACnD,IAAI,CAAC,eAAe;GAClB,gBAAgB,EAAE,gBAAgB,MAAM;GACxC,qBAAqB,IAAI,QAAQ,aAAa;EAChD;EACA,OAAO;CACT;CAEA,SAAS,oBAAoB,QAAiD;EAC5E,MAAM,gBAAgB,iBAAiB,MAAM;EAC7C,cAAc,iBAAiB;EAC/B,MAAM,kBAAkB,qBAAqB,IAAI,MAAM,MAAM;EAE7D,OAAO;GACL,gBAAgB,cAAc;GAC9B;GACA,oBAAoB,eAAe;IACjC,IAAI,UAAU,GACZ,cAAc,iBAAiB;GAEnC;EACF;CACF;CAEA,SAAS,UAAU,QAA2B;EAC5C,IAAI,CAAC,OAAO,eAAe,gBAAgB,IAAI,MAAM,GACnD;EAEF,cAAc,IAAI,MAAM;CAC1B;CAEA,SAAS,UAAU,QAA2B;EAC5C,cAAc,OAAO,MAAM;CAC7B;CAEA,SAAS,YAAY,QAA2B;EAC9C,gBAAgB,IAAI,MAAM;EAC1B,cAAc,OAAO,MAAM;CAC7B;CAEA,OAAO;EACL,aAAa,QAAQ,WAAW;GAC9B,QAAQ,QAAR;IACE,KAAA;KACE,UAAU,MAAM;KAChB;IACF,KAAA;KACE,UAAU,MAAM;KAChB;IACF,KAAA;KACE,YAAY,MAAM;KAClB;IACF,SAEE;GACJ;EACF;EAEA,eAAe,WAAW;GACxB,cAAc,OAAO,MAAM;GAC3B,qBAAqB,OAAO,MAAM;EACpC;EAEA,oBAAoB,WAAW;GAC7B,qBAAqB,OAAO,MAAM;GAClC,UAAU,MAAM;EAClB;EAEA,8BAA8B;GAC5B,MAAM,qBAA0C,CAAC;GAEjD,cAAc,SAAS,WAAW;IAChC,IAAI,CAAC,OAAO,aACV,cAAc,OAAO,MAAM;SACtB,IAAI,CAAC,gBAAgB,IAAI,MAAM,KAAK,CAAC,iBAAiB,MAAM,CAAC,CAAC,gBAAgB;KACnF,cAAc,OAAO,MAAM;KAC3B,mBAAmB,KAAK,MAAM;IAChC;GACF,CAAC;GAED,OAAO;EACT;EAEA;EAEA,wBAAwB,QAAQ,mBAAmB;GACjD,IAAI,eAAe,UAAU,GAC3B,iBAAiB,MAAM,CAAC,CAAC,iBAAiB;EAE9C;EAEA,cAAc,WAAW;GACvB,qBAAqB,OAAO,MAAM;GAClC,UAAU,MAAM;EAClB;EAEA,2BAA2B,aAAa;GACtC,uBAAuB,KAAK,QAAQ;EACtC;EAEA,kCAAkC;GAChC,MAAM,YAAY;GAClB,yBAAyB,CAAC;GAC1B,KAAK,MAAM,YAAY,WACrB,IAAI,SAAS,eAAe,UAAU,GACpC,iBAAiB,SAAS,MAAM,CAAC,CAAC,iBAAiB;GAGvD,OAAO;EACT;EAEA,aAAa;GACX,cAAc,MAAM;GACpB,yBAAyB,CAAC;GAC1B,uCAAuB,IAAI,QAAQ;EACrC;CACF;AACF"}
@@ -0,0 +1,38 @@
1
+ //#region src/domain/record/canvas/canvasSnapshot.ts
2
+ function createCanvasSnapshot(canvas, maxImageDimension) {
3
+ const canvasWidth = canvas.width;
4
+ const canvasHeight = canvas.height;
5
+ const source = createDownscaledCanvas(canvas, canvasWidth, canvasHeight, maxImageDimension);
6
+ if (!source) return;
7
+ return {
8
+ canvasHeight,
9
+ canvasWidth,
10
+ source
11
+ };
12
+ }
13
+ function createDownscaledCanvas(image, width, height, maxDimension) {
14
+ const scale = Math.min(1, maxDimension / Math.max(width, height));
15
+ const scaledWidth = Math.max(1, Math.round(width * scale));
16
+ const scaledHeight = Math.max(1, Math.round(height * scale));
17
+ const canvas = document.createElement("canvas");
18
+ canvas.width = scaledWidth;
19
+ canvas.height = scaledHeight;
20
+ const context = canvas.getContext("2d");
21
+ if (!context) return;
22
+ context.imageSmoothingQuality = "low";
23
+ context.drawImage(image, 0, 0, scaledWidth, scaledHeight);
24
+ return canvas;
25
+ }
26
+ function captureCanvasImage(snapshot, encodeQuality) {
27
+ return new Promise((resolve) => {
28
+ try {
29
+ snapshot.source.toBlob((blob) => resolve(blob ?? void 0), "image/webp", encodeQuality);
30
+ } catch {
31
+ resolve(void 0);
32
+ }
33
+ });
34
+ }
35
+ //#endregion
36
+ export { captureCanvasImage, createCanvasSnapshot, createDownscaledCanvas };
37
+
38
+ //# sourceMappingURL=canvasSnapshot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSnapshot.mjs","names":[],"sources":["../../../../src/domain/record/canvas/canvasSnapshot.ts"],"sourcesContent":["export interface CanvasSnapshot {\n canvasHeight: number\n canvasWidth: number\n source: HTMLCanvasElement\n}\n\nexport function createCanvasSnapshot(canvas: HTMLCanvasElement, maxImageDimension: number): CanvasSnapshot | undefined {\n const canvasWidth = canvas.width\n const canvasHeight = canvas.height\n const source = createDownscaledCanvas(canvas, canvasWidth, canvasHeight, maxImageDimension)\n if (!source) {\n return undefined\n }\n\n return { canvasHeight, canvasWidth, source }\n}\n\n// Downscales `image` (of size `width`x`height`) to fit within `maxDimension` on a fresh canvas.\nexport function createDownscaledCanvas(\n image: CanvasImageSource,\n width: number,\n height: number,\n maxDimension: number\n): HTMLCanvasElement | undefined {\n const scale = Math.min(1, maxDimension / Math.max(width, height))\n const scaledWidth = Math.max(1, Math.round(width * scale))\n const scaledHeight = Math.max(1, Math.round(height * scale))\n\n const canvas = document.createElement('canvas')\n canvas.width = scaledWidth\n canvas.height = scaledHeight\n\n const context = canvas.getContext('2d')\n if (!context) {\n return undefined\n }\n\n context.imageSmoothingQuality = 'low'\n context.drawImage(image, 0, 0, scaledWidth, scaledHeight)\n\n return canvas\n}\n\nexport function captureCanvasImage(snapshot: CanvasSnapshot, encodeQuality: number): Promise<Blob | undefined> {\n return new Promise((resolve) => {\n try {\n snapshot.source.toBlob((blob) => resolve(blob ?? undefined), 'image/webp', encodeQuality)\n } catch {\n resolve(undefined)\n }\n })\n}\n"],"mappings":";AAMA,SAAgB,qBAAqB,QAA2B,mBAAuD;CACrH,MAAM,cAAc,OAAO;CAC3B,MAAM,eAAe,OAAO;CAC5B,MAAM,SAAS,uBAAuB,QAAQ,aAAa,cAAc,iBAAiB;CAC1F,IAAI,CAAC,QACH;CAGF,OAAO;EAAE;EAAc;EAAa;CAAO;AAC7C;AAGA,SAAgB,uBACd,OACA,OACA,QACA,cAC+B;CAC/B,MAAM,QAAQ,KAAK,IAAI,GAAG,eAAe,KAAK,IAAI,OAAO,MAAM,CAAC;CAChE,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK,CAAC;CACzD,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,KAAK,CAAC;CAE3D,MAAM,SAAS,SAAS,cAAc,QAAQ;CAC9C,OAAO,QAAQ;CACf,OAAO,SAAS;CAEhB,MAAM,UAAU,OAAO,WAAW,IAAI;CACtC,IAAI,CAAC,SACH;CAGF,QAAQ,wBAAwB;CAChC,QAAQ,UAAU,OAAO,GAAG,GAAG,aAAa,YAAY;CAExD,OAAO;AACT;AAEA,SAAgB,mBAAmB,UAA0B,eAAkD;CAC7G,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI;GACF,SAAS,OAAO,QAAQ,SAAS,QAAQ,QAAQ,KAAA,CAAS,GAAG,cAAc,aAAa;EAC1F,QAAQ;GACN,QAAQ,KAAA,CAAS;EACnB;CACF,CAAC;AACH"}
@@ -0,0 +1,13 @@
1
+ import { isElementNode } from "@kubesense/kubesense-browser-rum-core";
2
+ //#region src/domain/record/canvas/canvasUtils.ts
3
+ const CANVAS_SIZE_ATTRIBUTES = ["width", "height"];
4
+ function isCanvasElement(node) {
5
+ return isElementNode(node) && node.tagName === "CANVAS";
6
+ }
7
+ function isCanvasSizeAttribute(attributeName) {
8
+ return CANVAS_SIZE_ATTRIBUTES.includes(attributeName.toLowerCase());
9
+ }
10
+ //#endregion
11
+ export { isCanvasElement, isCanvasSizeAttribute };
12
+
13
+ //# sourceMappingURL=canvasUtils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasUtils.mjs","names":[],"sources":["../../../../src/domain/record/canvas/canvasUtils.ts"],"sourcesContent":["import { isElementNode } from '@kubesense/kubesense-browser-rum-core'\n\nconst CANVAS_SIZE_ATTRIBUTES = ['width', 'height']\n\nexport function isCanvasElement(node: Node): node is HTMLCanvasElement {\n return isElementNode(node) && node.tagName === 'CANVAS'\n}\n\nexport function isCanvasSizeAttribute(attributeName: string): boolean {\n return CANVAS_SIZE_ATTRIBUTES.includes(attributeName.toLowerCase())\n}\n"],"mappings":";;AAEA,MAAM,yBAAyB,CAAC,SAAS,QAAQ;AAEjD,SAAgB,gBAAgB,MAAuC;CACrE,OAAO,cAAc,IAAI,KAAK,KAAK,YAAY;AACjD;AAEA,SAAgB,sBAAsB,eAAgC;CACpE,OAAO,uBAAuB,SAAS,cAAc,YAAY,CAAC;AACpE"}
@@ -0,0 +1,20 @@
1
+ //#region src/domain/record/elementsScrollPositions.ts
2
+ function createElementsScrollPositions() {
3
+ const scrollPositionsByElement = /* @__PURE__ */ new WeakMap();
4
+ return {
5
+ set(element, scrollPositions) {
6
+ if (element === document && !document.scrollingElement) return;
7
+ scrollPositionsByElement.set(element === document ? document.scrollingElement : element, scrollPositions);
8
+ },
9
+ get(element) {
10
+ return scrollPositionsByElement.get(element);
11
+ },
12
+ has(element) {
13
+ return scrollPositionsByElement.has(element);
14
+ }
15
+ };
16
+ }
17
+ //#endregion
18
+ export { createElementsScrollPositions };
19
+
20
+ //# sourceMappingURL=elementsScrollPositions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementsScrollPositions.mjs","names":[],"sources":["../../../src/domain/record/elementsScrollPositions.ts"],"sourcesContent":["export type ElementsScrollPositions = ReturnType<typeof createElementsScrollPositions>\nexport interface ScrollPositions {\n scrollLeft: number\n scrollTop: number\n}\n\nexport function createElementsScrollPositions() {\n const scrollPositionsByElement = new WeakMap<Element, ScrollPositions>()\n return {\n set(element: Element | Document, scrollPositions: ScrollPositions) {\n if (element === document && !document.scrollingElement) {\n // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,\n // in some cases scrolling elements can not be defined, we don't support those for now\n return\n }\n scrollPositionsByElement.set(\n element === document ? document.scrollingElement! : (element as Element),\n scrollPositions\n )\n },\n get(element: Element) {\n return scrollPositionsByElement.get(element)\n },\n has(element: Element) {\n return scrollPositionsByElement.has(element)\n },\n }\n}\n"],"mappings":";AAMA,SAAgB,gCAAgC;CAC9C,MAAM,2CAA2B,IAAI,QAAkC;CACvE,OAAO;EACL,IAAI,SAA6B,iBAAkC;GACjE,IAAI,YAAY,YAAY,CAAC,SAAS,kBAGpC;GAEF,yBAAyB,IACvB,YAAY,WAAW,SAAS,mBAAqB,SACrD,eACF;EACF;EACA,IAAI,SAAkB;GACpB,OAAO,yBAAyB,IAAI,OAAO;EAC7C;EACA,IAAI,SAAkB;GACpB,OAAO,yBAAyB,IAAI,OAAO;EAC7C;CACF;AACF"}