@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,243 @@
1
+ const require_profilingBridge = require("./transport/profilingBridge.js");
2
+ const require_formDataEmitter = require("./transport/formDataEmitter.js");
3
+ const require_getCustomOrDefaultViewName = require("./utils/getCustomOrDefaultViewName.js");
4
+ const require_buildProfileEvent = require("./transport/buildProfileEvent.js");
5
+ const require_longTaskHistory = require("./longTaskHistory.js");
6
+ const require_actionHistory = require("./actionHistory.js");
7
+ const require_vitalHistory = require("./vitalHistory.js");
8
+ const require_quotaCheck = require("./quotaCheck.js");
9
+ const require_profilerDebugIds = require("./profilerDebugIds.js");
10
+ let _kubesense_kubesense_browser_rum_core = require("@kubesense/kubesense-browser-rum-core");
11
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
12
+ let _kubesense_kubesense_js_core_time = require("@kubesense/kubesense-js-core/time");
13
+ let _kubesense_kubesense_js_core_util = require("@kubesense/kubesense-js-core/util");
14
+ let _kubesense_kubesense_js_core_monitor = require("@kubesense/kubesense-js-core/monitor");
15
+ //#region src/domain/profiling/kubesenseProfiler.ts
16
+ const DEFAULT_RUM_PROFILER_CONFIGURATION = {
17
+ sampleIntervalMs: 10,
18
+ collectIntervalMs: 6e4,
19
+ minProfileDurationMs: 5e3
20
+ };
21
+ function createRumProfiler(configuration, lifeCycle, session, profilingContextManager, createEncoder, viewHistory, profilerConfiguration = DEFAULT_RUM_PROFILER_CONFIGURATION) {
22
+ const emitPayload = (0, _kubesense_kubesense_browser_core.canUseEventBridge)() ? (0, _kubesense_kubesense_browser_core.mockable)(require_profilingBridge.createBridgeEmitter)() : (0, _kubesense_kubesense_browser_core.mockable)(require_formDataEmitter.createFormDataEmitter)(configuration, lifeCycle, createEncoder);
23
+ let lastViewEntry;
24
+ const globalCleanupTasks = [];
25
+ const longTaskHistory = (0, _kubesense_kubesense_browser_core.mockable)(require_longTaskHistory.createLongTaskHistory)(lifeCycle);
26
+ const actionHistory = (0, _kubesense_kubesense_browser_core.mockable)(require_actionHistory.createActionHistory)(lifeCycle);
27
+ const vitalHistory = (0, _kubesense_kubesense_browser_core.mockable)(require_vitalHistory.createVitalHistory)(lifeCycle);
28
+ let instance = {
29
+ state: "stopped",
30
+ stateReason: "initializing"
31
+ };
32
+ let quotaCheckGeneration = 0;
33
+ lifeCycle.subscribe(_kubesense_kubesense_browser_rum_core.LifeCycleEventType.SESSION_EXPIRED, () => {
34
+ stopProfiling("session-expired");
35
+ });
36
+ lifeCycle.subscribe(_kubesense_kubesense_browser_rum_core.LifeCycleEventType.SESSION_RENEWED, () => {
37
+ if (instance.state === "stopped" && (instance.stateReason === "session-expired" || instance.stateReason === "quota_ko")) {
38
+ const newSession = session.findTrackedSession();
39
+ if (!newSession || !(0, _kubesense_kubesense_browser_core.isSampled)(newSession.id, (0, _kubesense_kubesense_browser_core.correctedChildSampleRate)(configuration.sessionSampleRate, configuration.profilingSampleRate))) return;
40
+ start();
41
+ }
42
+ });
43
+ function start() {
44
+ if (instance.state === "running") return;
45
+ const viewEntry = viewHistory.findView();
46
+ lastViewEntry = viewEntry ? {
47
+ startClocks: viewEntry.startClocks,
48
+ viewId: viewEntry.id,
49
+ viewName: require_getCustomOrDefaultViewName.getCustomOrDefaultViewName(viewEntry.name, document.location.pathname)
50
+ } : void 0;
51
+ globalCleanupTasks.push((0, _kubesense_kubesense_browser_core.addEventListener)(window, _kubesense_kubesense_browser_core.DOM_EVENT.VISIBILITY_CHANGE, handleVisibilityChange).stop, (0, _kubesense_kubesense_browser_core.addEventListener)(window, _kubesense_kubesense_browser_core.DOM_EVENT.BEFORE_UNLOAD, handleBeforeUnload).stop);
52
+ startNextProfilerInstance();
53
+ triggerQuotaCheck();
54
+ }
55
+ function triggerQuotaCheck() {
56
+ if ((0, _kubesense_kubesense_browser_core.canUseEventBridge)()) return;
57
+ const checkGeneration = ++quotaCheckGeneration;
58
+ const sessionId = session.findTrackedSession()?.id;
59
+ if (sessionId) (0, _kubesense_kubesense_browser_core.mockable)(require_quotaCheck.checkProfilingQuota)(configuration, sessionId).then((result) => {
60
+ if (checkGeneration !== quotaCheckGeneration) return;
61
+ if (instance.state !== "running" && instance.state !== "paused") return;
62
+ if (result.decision === "quota_ko") stopProfiling("quota_ko", result.reason);
63
+ }).catch(_kubesense_kubesense_js_core_monitor.monitorError);
64
+ }
65
+ function stop() {
66
+ stopProfiling("stopped-by-user");
67
+ }
68
+ function stopProfiling(reason, quotaReason) {
69
+ stopProfilerInstance(reason);
70
+ globalCleanupTasks.forEach((task) => task());
71
+ globalCleanupTasks.length = 0;
72
+ profilingContextManager.set({
73
+ status: "stopped",
74
+ error_reason: void 0,
75
+ quota_reason: quotaReason
76
+ });
77
+ }
78
+ /**
79
+ * Whenever a new Profiler instance is started, we need to add event listeners to surroundings (RUM Events, Long Tasks, etc) to enrich the Profiler data.
80
+ * If the instance is already running, we can keep the same event listeners.
81
+ */
82
+ function addEventListeners(existingInstance) {
83
+ if (existingInstance.state === "running") return { cleanupTasks: existingInstance.cleanupTasks };
84
+ const cleanupTasks = [];
85
+ const viewUpdatedSubscription = lifeCycle.subscribe(_kubesense_kubesense_browser_rum_core.LifeCycleEventType.VIEW_CREATED, (view) => {
86
+ const viewEntry = {
87
+ viewId: view.id,
88
+ viewName: require_getCustomOrDefaultViewName.getCustomOrDefaultViewName(view.name, document.location.pathname),
89
+ startClocks: view.startClocks
90
+ };
91
+ collectViewEntry(viewEntry);
92
+ lastViewEntry = viewEntry;
93
+ });
94
+ cleanupTasks.push(viewUpdatedSubscription.unsubscribe);
95
+ return { cleanupTasks };
96
+ }
97
+ function startNextProfilerInstance() {
98
+ const profilerConstructor = _kubesense_kubesense_js_core_util.globalObject.Profiler;
99
+ if (!profilerConstructor) {
100
+ profilingContextManager.set({
101
+ status: "error",
102
+ error_reason: "not-supported-by-browser"
103
+ });
104
+ throw new Error("RUM Profiler is not supported in this browser.");
105
+ }
106
+ if (instance.state === "running") collectProfilerInstance(instance);
107
+ const { cleanupTasks } = addEventListeners(instance);
108
+ let profiler;
109
+ try {
110
+ profiler = new profilerConstructor({
111
+ sampleInterval: profilerConfiguration.sampleIntervalMs,
112
+ maxBufferSize: Math.round(profilerConfiguration.collectIntervalMs * 1.5 / profilerConfiguration.sampleIntervalMs)
113
+ });
114
+ } catch (e) {
115
+ if (e instanceof Error && e.message.includes("disabled by Document Policy")) {
116
+ _kubesense_kubesense_browser_core.display.warn("[KUBESENSE_SDK] Profiler startup failed. Ensure your server includes the `Document-Policy: js-profiling` response header when serving HTML pages.", e);
117
+ profilingContextManager.set({
118
+ status: "error",
119
+ error_reason: "missing-document-policy-header"
120
+ });
121
+ } else profilingContextManager.set({
122
+ status: "error",
123
+ error_reason: "unexpected-exception"
124
+ });
125
+ return;
126
+ }
127
+ profilingContextManager.set({
128
+ status: "running",
129
+ error_reason: void 0
130
+ });
131
+ instance = {
132
+ state: "running",
133
+ startClocks: (0, _kubesense_kubesense_js_core_time.clocksNow)(),
134
+ profiler,
135
+ timeoutId: (0, _kubesense_kubesense_browser_core.setTimeout)(startNextProfilerInstance, profilerConfiguration.collectIntervalMs),
136
+ views: [],
137
+ cleanupTasks,
138
+ longTasks: [],
139
+ sessionId: session.findTrackedSession()?.id
140
+ };
141
+ collectViewEntry(lastViewEntry);
142
+ profiler.addEventListener("samplebufferfull", handleSampleBufferFull);
143
+ }
144
+ function collectProfilerInstance(runningInstance) {
145
+ (0, _kubesense_kubesense_browser_core.clearTimeout)(runningInstance.timeoutId);
146
+ runningInstance.profiler.removeEventListener("samplebufferfull", handleSampleBufferFull);
147
+ const { startClocks, views, sessionId } = runningInstance;
148
+ runningInstance.profiler.stop().then((trace) => {
149
+ const endClocks = (0, _kubesense_kubesense_js_core_time.clocksNow)();
150
+ const duration = (0, _kubesense_kubesense_js_core_time.elapsed)(startClocks.relative, endClocks.relative);
151
+ const longTasks = longTaskHistory.findAll(startClocks.relative, duration);
152
+ const actions = actionHistory.findAll(startClocks.relative, duration);
153
+ const vitals = vitalHistory.findAll(startClocks.relative, duration).map((vital) => ({
154
+ id: vital.id,
155
+ label: vital.label,
156
+ startClocks: vital.startClocks,
157
+ duration: vital.duration
158
+ }));
159
+ const isBelowDurationThreshold = duration < profilerConfiguration.minProfileDurationMs;
160
+ if (longTasks.length === 0 && isBelowDurationThreshold) return;
161
+ handleProfilerTrace(Object.assign({}, trace, {
162
+ startClocks,
163
+ endClocks,
164
+ clocksOrigin: (0, _kubesense_kubesense_js_core_time.clocksOrigin)(),
165
+ longTasks,
166
+ actions,
167
+ vitals,
168
+ views,
169
+ sampleInterval: profilerConfiguration.sampleIntervalMs,
170
+ debugIds: require_profilerDebugIds.buildProfilerDebugIds(trace.resources)
171
+ }), sessionId);
172
+ }).catch(_kubesense_kubesense_js_core_monitor.monitorError);
173
+ }
174
+ function stopProfilerInstance(stateReason) {
175
+ if (instance.state !== "running") {
176
+ if (instance.state === "paused" || instance.state === "stopped" && stateReason === "stopped-by-user") instance = {
177
+ state: "stopped",
178
+ stateReason
179
+ };
180
+ return;
181
+ }
182
+ const runningInstance = instance;
183
+ instance = {
184
+ state: "stopped",
185
+ stateReason
186
+ };
187
+ runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask());
188
+ if (stateReason === "quota_ko") {
189
+ (0, _kubesense_kubesense_browser_core.clearTimeout)(runningInstance.timeoutId);
190
+ runningInstance.profiler.removeEventListener("samplebufferfull", handleSampleBufferFull);
191
+ runningInstance.profiler.stop().catch(_kubesense_kubesense_js_core_monitor.monitorError);
192
+ } else collectProfilerInstance(runningInstance);
193
+ }
194
+ function pauseProfilerInstance() {
195
+ if (instance.state !== "running") return;
196
+ const runningInstance = instance;
197
+ instance = { state: "paused" };
198
+ runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask());
199
+ collectProfilerInstance(runningInstance);
200
+ }
201
+ function collectViewEntry(viewEntry) {
202
+ if (instance.state !== "running" || !viewEntry) return;
203
+ instance.views.push(viewEntry);
204
+ }
205
+ function handleProfilerTrace(trace, sessionId) {
206
+ const payload = {
207
+ profile: require_buildProfileEvent.buildProfileEvent(trace, configuration, sessionId),
208
+ trace
209
+ };
210
+ emitPayload(payload);
211
+ }
212
+ function handleSampleBufferFull() {
213
+ startNextProfilerInstance();
214
+ }
215
+ function handleVisibilityChange() {
216
+ if (document.visibilityState === "hidden" && instance.state === "running") pauseProfilerInstance();
217
+ else if (document.visibilityState === "visible" && instance.state === "paused") startNextProfilerInstance();
218
+ }
219
+ function handleBeforeUnload() {
220
+ startNextProfilerInstance();
221
+ }
222
+ function isStopped() {
223
+ return instance.state === "stopped";
224
+ }
225
+ function isRunning() {
226
+ return instance.state === "running";
227
+ }
228
+ function isPaused() {
229
+ return instance.state === "paused";
230
+ }
231
+ return {
232
+ start,
233
+ stop,
234
+ isStopped,
235
+ isRunning,
236
+ isPaused
237
+ };
238
+ }
239
+ //#endregion
240
+ exports.DEFAULT_RUM_PROFILER_CONFIGURATION = DEFAULT_RUM_PROFILER_CONFIGURATION;
241
+ exports.createRumProfiler = createRumProfiler;
242
+
243
+ //# sourceMappingURL=kubesenseProfiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubesenseProfiler.js","names":["canUseEventBridge","mockable","createBridgeEmitter","createFormDataEmitter","createLongTaskHistory","createActionHistory","createVitalHistory","LifeCycleEventType","isSampled","correctedChildSampleRate","getCustomOrDefaultViewName","addEventListener","DOM_EVENT","checkProfilingQuota","monitorError","globalObject","clocksNow","setTimeout","elapsed","clocksOrigin","buildProfilerDebugIds","buildProfileEvent"],"sources":["../../../src/domain/profiling/kubesenseProfiler.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport type { Profiler } from '@kubesense/kubesense-js-core/util'\nimport { elapsed, clocksOrigin, clocksNow } from '@kubesense/kubesense-js-core/time'\nimport type { SessionManager, DeflateEncoderStreamId, Encoder } from '@kubesense/kubesense-browser-core'\nimport {\n addEventListener,\n canUseEventBridge,\n clearTimeout,\n setTimeout,\n DOM_EVENT,\n display,\n mockable,\n isSampled,\n correctedChildSampleRate,\n} from '@kubesense/kubesense-browser-core'\nimport { monitorError } from '@kubesense/kubesense-js-core/monitor'\n\nimport type { LifeCycle, RumConfiguration, ViewHistory } from '@kubesense/kubesense-browser-rum-core'\nimport { LifeCycleEventType } from '@kubesense/kubesense-browser-rum-core'\nimport type { BrowserProfilerTrace, RumViewEntry } from '../../types'\nimport type {\n RumProfilerInstance,\n RumProfilerRunningInstance,\n RUMProfiler,\n RUMProfilerConfiguration,\n RumProfilerStoppedInstance,\n ProfilingPayload,\n} from './types'\nimport type { ProfilingContextManager } from './profilingContext'\nimport { createBridgeEmitter } from './transport/profilingBridge'\nimport { createFormDataEmitter } from './transport/formDataEmitter'\nimport { getCustomOrDefaultViewName } from './utils/getCustomOrDefaultViewName'\nimport { buildProfileEvent } from './transport/buildProfileEvent'\nimport { createLongTaskHistory } from './longTaskHistory'\nimport { createActionHistory } from './actionHistory'\nimport { createVitalHistory } from './vitalHistory'\nimport { checkProfilingQuota } from './quotaCheck'\nimport type { QuotaReason } from './quotaCheck'\nimport { buildProfilerDebugIds } from './profilerDebugIds'\n\nexport const DEFAULT_RUM_PROFILER_CONFIGURATION: RUMProfilerConfiguration = {\n sampleIntervalMs: 10, // Sample stack trace every 10ms\n collectIntervalMs: 60000, // Collect data every minute\n minProfileDurationMs: 5000, // Require at least 5 seconds of profile data to reduce noise and cost\n}\n\nexport function createRumProfiler(\n configuration: RumConfiguration,\n lifeCycle: LifeCycle,\n session: SessionManager,\n profilingContextManager: ProfilingContextManager,\n createEncoder: (streamId: DeflateEncoderStreamId) => Encoder,\n viewHistory: ViewHistory,\n profilerConfiguration: RUMProfilerConfiguration = DEFAULT_RUM_PROFILER_CONFIGURATION\n): RUMProfiler {\n const emitPayload = canUseEventBridge()\n ? mockable(createBridgeEmitter)()\n : mockable(createFormDataEmitter)(configuration, lifeCycle, createEncoder)\n\n let lastViewEntry: RumViewEntry | undefined\n\n // Global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)\n const globalCleanupTasks: Array<() => void> = []\n const longTaskHistory = mockable(createLongTaskHistory)(lifeCycle)\n const actionHistory = mockable(createActionHistory)(lifeCycle)\n const vitalHistory = mockable(createVitalHistory)(lifeCycle)\n\n let instance: RumProfilerInstance = { state: 'stopped', stateReason: 'initializing' }\n let quotaCheckGeneration = 0\n\n // Stops the profiler when session expires\n lifeCycle.subscribe(LifeCycleEventType.SESSION_EXPIRED, () => {\n stopProfiling('session-expired')\n })\n\n // Start the profiler again when session is renewed\n lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, () => {\n if (\n instance.state === 'stopped' &&\n (instance.stateReason === 'session-expired' || instance.stateReason === 'quota_ko')\n ) {\n const newSession = session.findTrackedSession()\n if (\n !newSession ||\n !isSampled(\n newSession.id,\n correctedChildSampleRate(configuration.sessionSampleRate, configuration.profilingSampleRate)\n )\n ) {\n return\n }\n start()\n }\n })\n\n // Public API to start the profiler.\n function start(): void {\n if (instance.state === 'running') {\n return\n }\n\n const viewEntry = viewHistory.findView()\n\n // Add initial view\n // Note: `viewEntry.name` is only filled when users use manual view creation via `startView` method.\n lastViewEntry = viewEntry\n ? {\n startClocks: viewEntry.startClocks,\n viewId: viewEntry.id,\n viewName: getCustomOrDefaultViewName(viewEntry.name, document.location.pathname),\n }\n : undefined\n\n // Add global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)\n globalCleanupTasks.push(\n addEventListener(window, DOM_EVENT.VISIBILITY_CHANGE, handleVisibilityChange).stop,\n addEventListener(window, DOM_EVENT.BEFORE_UNLOAD, handleBeforeUnload).stop\n )\n\n // Start profiler instance\n startNextProfilerInstance()\n triggerQuotaCheck()\n }\n\n function triggerQuotaCheck() {\n if (canUseEventBridge()) {\n // Quota check only in non-bridge mode.\n return\n }\n // Optimistic: profiler already recording, only gates sending.\n // Generation counter invalidates results from a prior session (incremented on each start() call).\n // State guard handles within-session cancellation (user stop, session expiry, etc.).\n const checkGeneration = ++quotaCheckGeneration\n const sessionId = session.findTrackedSession()?.id\n if (sessionId) {\n mockable(checkProfilingQuota)(configuration, sessionId)\n .then((result) => {\n if (checkGeneration !== quotaCheckGeneration) {\n return\n }\n if (instance.state !== 'running' && instance.state !== 'paused') {\n return\n }\n if (result.decision === 'quota_ko') {\n stopProfiling('quota_ko', result.reason)\n }\n })\n .catch(monitorError)\n }\n }\n\n // Public API to manually stop the profiler.\n function stop() {\n stopProfiling('stopped-by-user')\n }\n\n function stopProfiling(reason: RumProfilerStoppedInstance['stateReason'], quotaReason?: QuotaReason) {\n // Stop current profiler instance (data collection happens async in background)\n stopProfilerInstance(reason)\n\n // Cleanup global listeners and reset the array to prevent accumulation across start/stop cycles\n globalCleanupTasks.forEach((task) => task())\n globalCleanupTasks.length = 0\n\n // Update Profiling status once the Profiler has been stopped.\n profilingContextManager.set({ status: 'stopped', error_reason: undefined, quota_reason: quotaReason })\n }\n\n /**\n * Whenever a new Profiler instance is started, we need to add event listeners to surroundings (RUM Events, Long Tasks, etc) to enrich the Profiler data.\n * If the instance is already running, we can keep the same event listeners.\n */\n function addEventListeners(existingInstance: RumProfilerInstance) {\n if (existingInstance.state === 'running') {\n // Instance is already running, so we can keep same event listeners.\n return {\n cleanupTasks: existingInstance.cleanupTasks,\n }\n }\n\n // Store clean-up tasks for this instance (tasks to be executed when the Profiler is stopped or paused.)\n const cleanupTasks = []\n\n // Whenever the View is updated, we add a views entry to the profiler instance.\n const viewUpdatedSubscription = lifeCycle.subscribe(LifeCycleEventType.VIEW_CREATED, (view) => {\n const viewEntry = {\n viewId: view.id,\n // Note: `viewName` is only filled when users use manual view creation via `startView` method.\n viewName: getCustomOrDefaultViewName(view.name, document.location.pathname),\n startClocks: view.startClocks,\n }\n\n collectViewEntry(viewEntry)\n\n // Update last view entry\n lastViewEntry = viewEntry\n })\n cleanupTasks.push(viewUpdatedSubscription.unsubscribe)\n\n return {\n cleanupTasks,\n }\n }\n\n function startNextProfilerInstance(): void {\n // These APIs might be unavailable in some browsers\n const profilerConstructor = globalObject.Profiler\n\n if (!profilerConstructor) {\n profilingContextManager.set({ status: 'error', error_reason: 'not-supported-by-browser' })\n throw new Error('RUM Profiler is not supported in this browser.')\n }\n\n // Collect data from previous running instance (fire-and-forget)\n if (instance.state === 'running') {\n collectProfilerInstance(instance)\n }\n\n const { cleanupTasks } = addEventListeners(instance)\n\n let profiler: Profiler\n try {\n // We have to create new Profiler each time we start a new instance\n profiler = new profilerConstructor({\n sampleInterval: profilerConfiguration.sampleIntervalMs,\n // Keep buffer size at 1.5 times of minimum required to collect data for a profiling instance\n maxBufferSize: Math.round(\n (profilerConfiguration.collectIntervalMs * 1.5) / profilerConfiguration.sampleIntervalMs\n ),\n })\n } catch (e) {\n if (e instanceof Error && e.message.includes('disabled by Document Policy')) {\n // Missing Response Header (`js-profiling`) that is required to enable the profiler.\n // We should suggest the user to enable the Response Header in their server configuration.\n display.warn(\n '[KUBESENSE_SDK] Profiler startup failed. Ensure your server includes the `Document-Policy: js-profiling` response header when serving HTML pages.',\n e\n )\n profilingContextManager.set({ status: 'error', error_reason: 'missing-document-policy-header' })\n } else {\n profilingContextManager.set({ status: 'error', error_reason: 'unexpected-exception' })\n }\n return\n }\n\n profilingContextManager.set({ status: 'running', error_reason: undefined })\n\n // Kick-off the new instance\n instance = {\n state: 'running',\n startClocks: clocksNow(),\n profiler,\n timeoutId: setTimeout(startNextProfilerInstance, profilerConfiguration.collectIntervalMs),\n views: [],\n cleanupTasks,\n longTasks: [],\n sessionId: session.findTrackedSession()?.id,\n }\n\n // Add last view entry\n collectViewEntry(lastViewEntry)\n\n // Add event handler case we overflow the buffer\n // eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper\n profiler.addEventListener('samplebufferfull', handleSampleBufferFull)\n }\n\n function collectProfilerInstance(runningInstance: RumProfilerRunningInstance) {\n // Cleanup instance\n clearTimeout(runningInstance.timeoutId)\n // eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper\n runningInstance.profiler.removeEventListener('samplebufferfull', handleSampleBufferFull)\n\n // Store instance data snapshot in local variables to use in async callback\n const { startClocks, views, sessionId } = runningInstance\n\n // Stop current profiler to get trace\n runningInstance.profiler\n .stop()\n .then((trace) => {\n const endClocks = clocksNow()\n const duration = elapsed(startClocks.relative, endClocks.relative)\n const longTasks = longTaskHistory.findAll(startClocks.relative, duration)\n const actions = actionHistory.findAll(startClocks.relative, duration)\n const vitals = vitalHistory.findAll(startClocks.relative, duration).map((vital) => ({\n id: vital.id,\n label: vital.label,\n startClocks: vital.startClocks,\n duration: vital.duration,\n }))\n const isBelowDurationThreshold = duration < profilerConfiguration.minProfileDurationMs\n\n if (longTasks.length === 0 && isBelowDurationThreshold) {\n // Skip very short profiles to reduce noise and cost, but keep them if they contain long tasks.\n return\n }\n\n handleProfilerTrace(\n // Enrich trace with time and instance data — create new object to avoid mutating the raw trace\n Object.assign({} as BrowserProfilerTrace, trace, {\n startClocks,\n endClocks,\n clocksOrigin: clocksOrigin(),\n longTasks,\n actions,\n vitals,\n views,\n sampleInterval: profilerConfiguration.sampleIntervalMs,\n debugIds: buildProfilerDebugIds(trace.resources),\n }),\n sessionId\n )\n })\n .catch(monitorError)\n }\n\n function stopProfilerInstance(stateReason: RumProfilerStoppedInstance['stateReason']) {\n if (instance.state !== 'running') {\n if (\n // If paused, profiler data was already collected during pause, just update state\n instance.state === 'paused' ||\n // Update stateReason when already stopped and the user explicitly stops the profiler,\n // so that SESSION_RENEWED does not override the user's intent.\n (instance.state === 'stopped' && stateReason === 'stopped-by-user')\n ) {\n instance = { state: 'stopped', stateReason }\n }\n\n return\n }\n\n // Capture the running instance before changing state\n const runningInstance = instance\n\n // Update state synchronously so SESSION_RENEWED check works immediately\n instance = { state: 'stopped', stateReason }\n\n // Cleanup instance-specific tasks (e.g., view listener)\n runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())\n\n if (stateReason === 'quota_ko') {\n // Discard data — quota denied means we should not send anything\n clearTimeout(runningInstance.timeoutId)\n // eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper\n runningInstance.profiler.removeEventListener('samplebufferfull', handleSampleBufferFull)\n void runningInstance.profiler.stop().catch(monitorError)\n } else {\n // Collect and send profile data in background - doesn't block state transitions\n collectProfilerInstance(runningInstance)\n }\n }\n\n function pauseProfilerInstance() {\n if (instance.state !== 'running') {\n return\n }\n\n // Capture the running instance before changing state\n const runningInstance = instance\n\n // Update state synchronously\n instance = { state: 'paused' }\n\n // Cleanup instance-specific tasks\n runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())\n\n // Collect and send profile data in background\n collectProfilerInstance(runningInstance)\n }\n\n function collectViewEntry(viewEntry: RumViewEntry | undefined): void {\n if (instance.state !== 'running' || !viewEntry) {\n return\n }\n\n // Add entry to views\n instance.views.push(viewEntry)\n }\n\n function handleProfilerTrace(trace: BrowserProfilerTrace, sessionId: string | undefined): void {\n const payload: ProfilingPayload = {\n profile: buildProfileEvent(trace, configuration, sessionId),\n trace,\n }\n emitPayload(payload)\n }\n\n function handleSampleBufferFull(): void {\n startNextProfilerInstance()\n }\n\n function handleVisibilityChange(): void {\n if (document.visibilityState === 'hidden' && instance.state === 'running') {\n // Pause when tab is hidden. We use paused state to distinguish between\n // paused by visibility change and stopped by user.\n // If profiler is paused by the visibility change, we should resume when\n // tab becomes visible again. That's not the case when user stops the profiler.\n pauseProfilerInstance()\n } else if (document.visibilityState === 'visible' && instance.state === 'paused') {\n // Resume when tab becomes visible again\n startNextProfilerInstance()\n }\n }\n\n function handleBeforeUnload(): void {\n // `unload` can in some cases be triggered while the page is still active (link to a different protocol like mailto:).\n // We can immediately flush (by starting a new profiler instance) to make sure we receive the data, and at the same time keep the profiler active.\n // In case of the regular unload, the profiler will be shut down anyway.\n startNextProfilerInstance()\n }\n\n function isStopped() {\n return instance.state === 'stopped'\n }\n\n function isRunning() {\n return instance.state === 'running'\n }\n\n function isPaused() {\n return instance.state === 'paused'\n }\n\n return { start, stop, isStopped, isRunning, isPaused }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ClocksState, Duration } from '@kubesense/kubesense-js-core/time';
2
+ import type { LifeCycle } from '@kubesense/kubesense-browser-rum-core';
3
+ import { RumPerformanceEntryType } from '@kubesense/kubesense-browser-rum-core';
4
+ export declare const LONG_TASK_ID_HISTORY_EXPIRE_DELAY: number;
5
+ export interface LongTaskContext {
6
+ id: string;
7
+ startClocks: ClocksState;
8
+ duration: Duration;
9
+ entryType: RumPerformanceEntryType.LONG_ANIMATION_FRAME | RumPerformanceEntryType.LONG_TASK;
10
+ }
11
+ export declare function createLongTaskHistory(lifeCycle: LifeCycle): import("@kubesense/kubesense-browser-core").ValueHistory<LongTaskContext>;
@@ -0,0 +1,22 @@
1
+ let _kubesense_kubesense_browser_rum_core = require("@kubesense/kubesense-browser-rum-core");
2
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
3
+ let _kubesense_kubesense_js_core_time = require("@kubesense/kubesense-js-core/time");
4
+ //#region src/domain/profiling/longTaskHistory.ts
5
+ const LONG_TASK_ID_HISTORY_EXPIRE_DELAY = _kubesense_kubesense_browser_core.SESSION_TIME_OUT_DELAY;
6
+ function createLongTaskHistory(lifeCycle) {
7
+ const history = (0, _kubesense_kubesense_browser_core.createValueHistory)({ expireDelay: LONG_TASK_ID_HISTORY_EXPIRE_DELAY });
8
+ lifeCycle.subscribe(_kubesense_kubesense_browser_rum_core.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
9
+ if (rawRumEvent.type === "long_task") history.add({
10
+ id: rawRumEvent.long_task.id,
11
+ startClocks,
12
+ duration,
13
+ entryType: rawRumEvent.long_task.entry_type === _kubesense_kubesense_browser_rum_core.RumLongTaskEntryType.LONG_TASK ? _kubesense_kubesense_browser_rum_core.RumPerformanceEntryType.LONG_TASK : _kubesense_kubesense_browser_rum_core.RumPerformanceEntryType.LONG_ANIMATION_FRAME
14
+ }, startClocks.relative).close((0, _kubesense_kubesense_js_core_time.addDuration)(startClocks.relative, duration));
15
+ });
16
+ return history;
17
+ }
18
+ //#endregion
19
+ exports.LONG_TASK_ID_HISTORY_EXPIRE_DELAY = LONG_TASK_ID_HISTORY_EXPIRE_DELAY;
20
+ exports.createLongTaskHistory = createLongTaskHistory;
21
+
22
+ //# sourceMappingURL=longTaskHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longTaskHistory.js","names":["SESSION_TIME_OUT_DELAY","createValueHistory","LifeCycleEventType","RumLongTaskEntryType","RumPerformanceEntryType","addDuration"],"sources":["../../../src/domain/profiling/longTaskHistory.ts"],"sourcesContent":["import type { ClocksState, Duration } from '@kubesense/kubesense-js-core/time'\nimport { 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 {\n RumPerformanceEntryType,\n LifeCycleEventType,\n RumLongTaskEntryType,\n} from '@kubesense/kubesense-browser-rum-core'\n\nexport const LONG_TASK_ID_HISTORY_EXPIRE_DELAY = SESSION_TIME_OUT_DELAY\n\nexport interface LongTaskContext {\n id: string\n startClocks: ClocksState\n duration: Duration\n entryType: RumPerformanceEntryType.LONG_ANIMATION_FRAME | RumPerformanceEntryType.LONG_TASK\n}\n\nexport function createLongTaskHistory(lifeCycle: LifeCycle) {\n const history = createValueHistory<LongTaskContext>({\n expireDelay: LONG_TASK_ID_HISTORY_EXPIRE_DELAY,\n })\n\n lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {\n if (rawRumEvent.type === 'long_task') {\n history\n .add(\n {\n id: rawRumEvent.long_task.id,\n startClocks,\n duration: duration!,\n entryType:\n rawRumEvent.long_task.entry_type === RumLongTaskEntryType.LONG_TASK\n ? RumPerformanceEntryType.LONG_TASK\n : RumPerformanceEntryType.LONG_ANIMATION_FRAME,\n },\n startClocks.relative\n )\n .close(addDuration(startClocks.relative, duration!))\n }\n })\n\n return history\n}\n"],"mappings":";;;;AAUA,MAAa,oCAAoCA,kCAAAA;AASjD,SAAgB,sBAAsB,WAAsB;CAC1D,MAAM,WAAA,GAAUC,kCAAAA,mBAAAA,CAAoC,EAClD,aAAa,kCACf,CAAC;CAED,UAAU,UAAUC,sCAAAA,mBAAmB,0BAA0B,EAAE,aAAa,aAAa,eAAe;EAC1G,IAAI,YAAY,SAAS,aACvB,QACG,IACC;GACE,IAAI,YAAY,UAAU;GAC1B;GACU;GACV,WACE,YAAY,UAAU,eAAeC,sCAAAA,qBAAqB,YACtDC,sCAAAA,wBAAwB,YACxBA,sCAAAA,wBAAwB;EAChC,GACA,YAAY,QACd,CAAC,CACA,OAAA,GAAMC,kCAAAA,YAAAA,CAAY,YAAY,UAAU,QAAS,CAAC;CAEzD,CAAC;CAED,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ import type { ResourceDebugId } from '../../types';
2
+ export declare function buildProfilerDebugIds(resources: string[]): ResourceDebugId[] | undefined;
@@ -0,0 +1,18 @@
1
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
2
+ //#region src/domain/profiling/profilerDebugIds.ts
3
+ function buildProfilerDebugIds(resources) {
4
+ const debugIdByUrl = new Map((0, _kubesense_kubesense_browser_core.buildDebugIdByUrl)(resources)?.map((entry) => [entry.url, entry.id]));
5
+ const debugIds = [];
6
+ resources.forEach((url, resourceId) => {
7
+ const debugId = debugIdByUrl.get(url);
8
+ if (debugId !== void 0) debugIds.push({
9
+ resourceId,
10
+ debugId
11
+ });
12
+ });
13
+ return debugIds.length ? debugIds : void 0;
14
+ }
15
+ //#endregion
16
+ exports.buildProfilerDebugIds = buildProfilerDebugIds;
17
+
18
+ //# sourceMappingURL=profilerDebugIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilerDebugIds.js","names":["buildDebugIdByUrl"],"sources":["../../../src/domain/profiling/profilerDebugIds.ts"],"sourcesContent":["import { buildDebugIdByUrl } from '@kubesense/kubesense-browser-core'\nimport type { ResourceDebugId } from '../../types'\n\nexport function buildProfilerDebugIds(resources: string[]): ResourceDebugId[] | undefined {\n const debugIdByUrl = new Map(buildDebugIdByUrl(resources)?.map((entry) => [entry.url, entry.id]))\n\n const debugIds: ResourceDebugId[] = []\n\n resources.forEach((url, resourceId) => {\n const debugId = debugIdByUrl.get(url)\n if (debugId !== undefined) {\n debugIds.push({ resourceId, debugId })\n }\n })\n\n return debugIds.length ? debugIds : undefined\n}\n"],"mappings":";;AAGA,SAAgB,sBAAsB,WAAoD;CACxF,MAAM,eAAe,IAAI,KAAA,GAAIA,kCAAAA,kBAAAA,CAAkB,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;CAEhG,MAAM,WAA8B,CAAC;CAErC,UAAU,SAAS,KAAK,eAAe;EACrC,MAAM,UAAU,aAAa,IAAI,GAAG;EACpC,IAAI,YAAY,KAAA,GACd,SAAS,KAAK;GAAE;GAAY;EAAQ,CAAC;CAEzC,CAAC;CAED,OAAO,SAAS,SAAS,WAAW,KAAA;AACtC"}
@@ -1,28 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startProfilingContext = startProfilingContext;
4
- const kubesense_browser_core_1 = require("@kubesense/kubesense-browser-core");
5
- const kubesense_browser_rum_core_1 = require("@kubesense/kubesense-browser-rum-core");
1
+ let _kubesense_kubesense_browser_rum_core = require("@kubesense/kubesense-browser-rum-core");
2
+ let _kubesense_kubesense_js_core_assembly = require("@kubesense/kubesense-js-core/assembly");
3
+ //#region src/domain/profiling/profilingContext.ts
6
4
  function startProfilingContext(hooks) {
7
- let currentContext = {
8
- status: 'starting',
9
- };
10
- hooks.register(0 /* HookNames.Assemble */, ({ eventType }) => {
11
- if (eventType !== kubesense_browser_rum_core_1.RumEventType.VIEW && eventType !== kubesense_browser_rum_core_1.RumEventType.LONG_TASK) {
12
- return kubesense_browser_core_1.SKIPPED;
13
- }
14
- return {
15
- type: eventType,
16
- _kubesense: {
17
- profiling: currentContext,
18
- },
19
- };
20
- });
21
- return {
22
- get: () => currentContext,
23
- set: (newContext) => {
24
- currentContext = newContext;
25
- },
26
- };
5
+ let currentContext = { status: "starting" };
6
+ hooks.assembleEventDefaults.register(({ eventType }) => {
7
+ if (eventType !== _kubesense_kubesense_browser_rum_core.RumEventType.VIEW && eventType !== _kubesense_kubesense_browser_rum_core.RumEventType.LONG_TASK && eventType !== _kubesense_kubesense_browser_rum_core.RumEventType.ACTION && eventType !== _kubesense_kubesense_browser_rum_core.RumEventType.VITAL) return _kubesense_kubesense_js_core_assembly.SKIPPED;
8
+ return {
9
+ type: eventType,
10
+ _kubesense: { profiling: currentContext }
11
+ };
12
+ });
13
+ return {
14
+ get: () => currentContext,
15
+ set: (newContext) => {
16
+ currentContext = newContext;
17
+ }
18
+ };
27
19
  }
20
+ //#endregion
21
+ exports.startProfilingContext = startProfilingContext;
22
+
28
23
  //# sourceMappingURL=profilingContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profilingContext.js","sourceRoot":"","sources":["../../../src/domain/profiling/profilingContext.ts"],"names":[],"mappings":";;AASA,sDAwBC;AAjCD,8EAAsE;AAEtE,sFAAoE;AAOpE,SAAgB,qBAAqB,CAAC,KAAY;IAChD,IAAI,cAAc,GAAmC;QACnD,MAAM,EAAE,UAAU;KACnB,CAAA;IAED,KAAK,CAAC,QAAQ,6BAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACnD,IAAI,SAAS,KAAK,yCAAY,CAAC,IAAI,IAAI,SAAS,KAAK,yCAAY,CAAC,SAAS,EAAE,CAAC;YAC5E,OAAO,gCAAO,CAAA;QAChB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACV,SAAS,EAAE,cAAc;aAC1B;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc;QACzB,GAAG,EAAE,CAAC,UAA0C,EAAE,EAAE;YAClD,cAAc,GAAG,UAAU,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"profilingContext.js","names":["RumEventType","SKIPPED"],"sources":["../../../src/domain/profiling/profilingContext.ts"],"sourcesContent":["import { SKIPPED } from '@kubesense/kubesense-js-core/assembly'\nimport type { Hooks, ProfilingInternalContextSchema } from '@kubesense/kubesense-browser-rum-core'\nimport { RumEventType } from '@kubesense/kubesense-browser-rum-core'\n\nexport interface ProfilingContextManager {\n set: (next: ProfilingInternalContextSchema) => void\n get: () => ProfilingInternalContextSchema | undefined\n}\n\nexport function startProfilingContext(hooks: Hooks): ProfilingContextManager {\n let currentContext: ProfilingInternalContextSchema = {\n status: 'starting',\n }\n\n hooks.assembleEventDefaults.register(({ eventType }) => {\n if (\n eventType !== RumEventType.VIEW &&\n eventType !== RumEventType.LONG_TASK &&\n eventType !== RumEventType.ACTION &&\n eventType !== RumEventType.VITAL\n ) {\n return SKIPPED\n }\n\n return {\n type: eventType,\n _kubesense: {\n profiling: currentContext,\n },\n }\n })\n\n return {\n get: () => currentContext,\n set: (newContext: ProfilingInternalContextSchema) => {\n currentContext = newContext\n },\n }\n}\n"],"mappings":";;;AASA,SAAgB,sBAAsB,OAAuC;CAC3E,IAAI,iBAAiD,EACnD,QAAQ,WACV;CAEA,MAAM,sBAAsB,UAAU,EAAE,gBAAgB;EACtD,IACE,cAAcA,sCAAAA,aAAa,QAC3B,cAAcA,sCAAAA,aAAa,aAC3B,cAAcA,sCAAAA,aAAa,UAC3B,cAAcA,sCAAAA,aAAa,OAE3B,OAAOC,sCAAAA;EAGT,OAAO;GACL,MAAM;GACN,YAAY,EACV,WAAW,eACb;EACF;CACF,CAAC;CAED,OAAO;EACL,WAAW;EACX,MAAM,eAA+C;GACnD,iBAAiB;EACnB;CACF;AACF"}
@@ -1,11 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isProfilingSupported = isProfilingSupported;
4
- const kubesense_browser_core_1 = require("@kubesense/kubesense-browser-core");
1
+ let _kubesense_kubesense_js_core_util = require("@kubesense/kubesense-js-core/util");
2
+ //#region src/domain/profiling/profilingSupported.ts
5
3
  function isProfilingSupported() {
6
- const globalThis = (0, kubesense_browser_core_1.getGlobalObject)();
7
- // This API might be unavailable in some browsers
8
- const globalThisProfiler = globalThis.Profiler;
9
- return globalThisProfiler !== undefined;
4
+ return _kubesense_kubesense_js_core_util.globalObject.Profiler !== void 0;
10
5
  }
6
+ //#endregion
7
+ exports.isProfilingSupported = isProfilingSupported;
8
+
11
9
  //# sourceMappingURL=profilingSupported.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profilingSupported.js","sourceRoot":"","sources":["../../../src/domain/profiling/profilingSupported.ts"],"names":[],"mappings":";;AAGA,oDAMC;AATD,8EAAmE;AAGnE,SAAgB,oBAAoB;IAClC,MAAM,UAAU,GAAG,IAAA,wCAAe,GAAE,CAAA;IAEpC,iDAAiD;IACjD,MAAM,kBAAkB,GAA0B,UAAkB,CAAC,QAAQ,CAAA;IAC7E,OAAO,kBAAkB,KAAK,SAAS,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"profilingSupported.js","names":["globalObject"],"sources":["../../../src/domain/profiling/profilingSupported.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nexport function isProfilingSupported(): boolean {\n // This API might be unavailable in some browsers\n return globalObject.Profiler !== undefined\n}\n"],"mappings":";;AACA,SAAgB,uBAAgC;CAE9C,OAAOA,kCAAAA,aAAa,aAAa,KAAA;AACnC"}
@@ -0,0 +1,9 @@
1
+ import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core';
2
+ export type BackendQuotaReason = 'quota_ok' | 'quota_exceeded' | 'org_disabled' | 'backend_unavailable' | 'undefined';
3
+ export type FrontendQuotaReason = 'timeout' | 'api-error';
4
+ export type QuotaReason = BackendQuotaReason | FrontendQuotaReason;
5
+ export interface QuotaResult {
6
+ decision: 'quota_ok' | 'quota_ko';
7
+ reason: QuotaReason;
8
+ }
9
+ export declare function checkProfilingQuota(configuration: RumConfiguration, sessionId: string, timeoutMs?: number): Promise<QuotaResult>;
@@ -0,0 +1,66 @@
1
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
2
+ let _kubesense_kubesense_js_core_transport = require("@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 (0, _kubesense_kubesense_js_core_transport.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 = (0, _kubesense_kubesense_browser_core.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
+ (0, _kubesense_kubesense_browser_core.clearTimeout)(timeoutId);
40
+ return parseQuotaResult(body, statusFallback);
41
+ }, () => {
42
+ (0, _kubesense_kubesense_browser_core.clearTimeout)(timeoutId);
43
+ return statusFallback;
44
+ });
45
+ }).catch(() => {
46
+ (0, _kubesense_kubesense_browser_core.clearTimeout)(timeoutId);
47
+ return {
48
+ decision: "quota_ok",
49
+ reason: "api-error"
50
+ };
51
+ });
52
+ const timeoutPromise = new Promise((resolve) => {
53
+ timeoutId = (0, _kubesense_kubesense_browser_core.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
+ exports.checkProfilingQuota = checkProfilingQuota;
65
+
66
+ //# sourceMappingURL=quotaCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotaCheck.js","names":["buildEndpointUrl","fetch","setTimeout"],"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,QAAA,GAAOA,uCAAAA,iBAAAA,CAAiB;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,gBAAA,GAAeC,kCAAAA,MAAAA,CAAM,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,CAAA,GAAA,kCAAA,aAAA,CAAa,SAAS;GACtB,OAAO,iBAAiB,MAAM,cAAc;EAC9C,SACmB;GAEjB,CAAA,GAAA,kCAAA,aAAA,CAAa,SAAS;GACtB,OAAO;EACT,CACF;CACF,CAAC,CAAC,CACD,YAAyB;EACxB,CAAA,GAAA,kCAAA,aAAA,CAAa,SAAS;EACtB,OAAO;GAAE,UAAU;GAAY,QAAQ;EAAY;CACrD,CAAC;CAEH,MAAM,iBAAiB,IAAI,SAAsB,YAAY;EAC3D,aAAA,GAAYC,kCAAAA,WAAAA,OAAiB;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"}
@@ -1,3 +1,3 @@
1
- import type { ProfilerTrace } from '../types';
1
+ import type { ProfilerTrace } from '@kubesense/kubesense-js-core/util';
2
2
  export declare const mockedEmptyTrace: ProfilerTrace;
3
3
  export declare const mockedTrace: ProfilerTrace;
@@ -0,0 +1,38 @@
1
+ import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core';
2
+ import type { BrowserProfileEvent, BrowserProfilerTrace } from '../../../types';
3
+ export interface ProfileEventAttributes {
4
+ application: {
5
+ id: string;
6
+ };
7
+ session?: {
8
+ id: string;
9
+ };
10
+ view?: {
11
+ id: string[];
12
+ name: string[];
13
+ };
14
+ long_task?: {
15
+ id: string[];
16
+ };
17
+ action?: {
18
+ id: string[];
19
+ label: string[];
20
+ };
21
+ vital?: {
22
+ id: string[];
23
+ label: string[];
24
+ };
25
+ }
26
+ /**
27
+ * Builds a BrowserProfileEvent from a trace.
28
+ */
29
+ export declare function buildProfileEvent(profilerTrace: BrowserProfilerTrace, configuration: RumConfiguration, sessionId: string | undefined): BrowserProfileEvent;
30
+ /**
31
+ * Builds attributes for the Profile Event.
32
+ *
33
+ * @param profilerTrace - Profiler trace
34
+ * @param applicationId - application id.
35
+ * @param sessionId - session id.
36
+ * @returns Additional attributes.
37
+ */
38
+ export declare function buildProfileEventAttributes(profilerTrace: BrowserProfilerTrace, applicationId: string, sessionId: string | undefined): ProfileEventAttributes;