@kubesense/kubesense-browser-rum 1.7.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,90 @@
1
+ import { reportScriptLoadingError } from "../scriptLoadingError.mjs";
2
+ import { addEventListener, addTelemetryError, display, mockable, setTimeout } from "@kubesense/kubesense-browser-core";
3
+ import { ONE_SECOND } from "@kubesense/kubesense-js-core/time";
4
+ //#region src/domain/deflate/deflateWorker.ts
5
+ const INITIALIZATION_TIME_OUT_DELAY = 30 * ONE_SECOND;
6
+ function createDeflateWorker(configuration) {
7
+ return new Worker(configuration.workerUrl || URL.createObjectURL(new Blob(["(()=>{function t(t){if(1===t.length)return t[0];const e=t.reduce((t,e)=>t+e.length,0),a=new Uint8Array(e);let n=0;for(const e of t)a.set(e,n),n+=e.length;return a}function e(t){for(var e=t.length;--e>=0;)t[e]=0}var a=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),n=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),r=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),i=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=Array(576);e(s);var h=Array(60);e(h);var l=Array(512);e(l);var _=Array(256);e(_);var o=Array(29);e(o);var d,u,f,c=Array(30);function p(t,e,a,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=r,this.has_stree=t?.length}function g(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(c);var v=function(t){return t<256?l[t]:l[256+(t>>>7)]},w=function(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},m=function(t,e,a){t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,w(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},b=function(t,e,a){m(t,a[2*e],a[2*e+1])},y=function(t,e){var a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},z=function(t,e,a){var n,r,i=Array(16),s=0;for(n=1;n<=15;n++)i[n]=s=s+a[n-1]<<1;for(r=0;r<=e;r++){var h=t[2*r+1];0!==h&&(t[2*r]=y(i[h]++,h))}},k=function(t){var e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0},x=function(t){t.bi_valid>8?w(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},A=function(t,e,a,n){var r=2*e,i=2*a;return t[r]<t[i]||t[r]===t[i]&&n[e]<=n[a]},U=function(t,e,a){for(var n=t.heap[a],r=a<<1;r<=t.heap_len&&(r<t.heap_len&&A(e,t.heap[r+1],t.heap[r],t.depth)&&r++,!A(e,n,t.heap[r],t.depth));)t.heap[a]=t.heap[r],a=r,r<<=1;t.heap[a]=n},B=function(t,e,r){var i,s,h,l,d=0;if(0!==t.last_lit)do{i=t.pending_buf[t.d_buf+2*d]<<8|t.pending_buf[t.d_buf+2*d+1],s=t.pending_buf[t.l_buf+d],d++,0===i?b(t,s,e):(h=_[s],b(t,h+256+1,e),0!==(l=a[h])&&(s-=o[h],m(t,s,l)),i--,h=v(i),b(t,h,r),0!==(l=n[h])&&(i-=c[h],m(t,i,l)))}while(d<t.last_lit);b(t,256,e)},I=function(t,e){var a,n,r,i=e.dyn_tree,s=e.stat_desc.static_tree,h=e.stat_desc.has_stree,l=e.stat_desc.elems,_=-1;for(t.heap_len=0,t.heap_max=573,a=0;a<l;a++)0!==i[2*a]?(t.heap[++t.heap_len]=_=a,t.depth[a]=0):i[2*a+1]=0;for(;t.heap_len<2;)i[2*(r=t.heap[++t.heap_len]=_<2?++_:0)]=1,t.depth[r]=0,t.opt_len--,h&&(t.static_len-=s[2*r+1]);for(e.max_code=_,a=t.heap_len>>1;a>=1;a--)U(t,i,a);r=l;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],U(t,i,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,i[2*r]=i[2*a]+i[2*n],t.depth[r]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,i[2*a+1]=i[2*n+1]=r,t.heap[1]=r++,U(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var a,n,r,i,s,h,l=e.dyn_tree,_=e.max_code,o=e.stat_desc.static_tree,d=e.stat_desc.has_stree,u=e.stat_desc.extra_bits,f=e.stat_desc.extra_base,c=e.stat_desc.max_length,p=0;for(i=0;i<=15;i++)t.bl_count[i]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<573;a++)(i=l[2*l[2*(n=t.heap[a])+1]+1]+1)>c&&(i=c,p++),l[2*n+1]=i,n>_||(t.bl_count[i]++,s=0,n>=f&&(s=u[n-f]),h=l[2*n],t.opt_len+=h*(i+s),d&&(t.static_len+=h*(o[2*n+1]+s)));if(0!==p){do{for(i=c-1;0===t.bl_count[i];)i--;t.bl_count[i]--,t.bl_count[i+1]+=2,t.bl_count[c]--,p-=2}while(p>0);for(i=c;0!==i;i--)for(n=t.bl_count[i];0!==n;)(r=t.heap[--a])>_||(l[2*r+1]!==i&&(t.opt_len+=(i-l[2*r+1])*l[2*r],l[2*r+1]=i),n--)}}(t,e),z(i,_,t.bl_count)},E=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)r=s,s=e[2*(n+1)+1],++h<l&&r===s||(h<_?t.bl_tree[2*r]+=h:0!==r?(r!==i&&t.bl_tree[2*r]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4))},D=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),n=0;n<=a;n++)if(r=s,s=e[2*(n+1)+1],!(++h<l&&r===s)){if(h<_)do{b(t,r,t.bl_tree)}while(0!==--h);else 0!==r?(r!==i&&(b(t,r,t.bl_tree),h--),b(t,16,t.bl_tree),m(t,h-3,2)):h<=10?(b(t,17,t.bl_tree),m(t,h-3,3)):(b(t,18,t.bl_tree),m(t,h-11,7));h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4)}},M=!1,j=function(t,e,a,n){m(t,0+(n?1:0),3),function(t,e,a){x(t),w(t,a),w(t,~a),t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a}(t,e,a)},C=j,L=function(t,e,a,n){for(var r=65535&t,i=t>>>16&65535,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{i=i+(r=r+e[n++]|0)|0}while(--s);r%=65521,i%=65521}return r|i<<16},S=new Uint32Array(function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}()),O=function(t,e,a,n){var r=S,i=n+a;t^=-1;for(var s=n;s<i;s++)t=t>>>8^r[255&(t^e[s])];return-1^t},T={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},q=C,F=function(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(_[a]+256+1)]++,t.dyn_dtree[2*v(e)]++),t.last_lit===t.lit_bufsize-1},G=-2,H=258,J=262,K=103,N=113,P=666,Q=function(t,e){return t.msg=T[e],e},R=function(t){return(t<<1)-(t>4?9:0)},V=function(t){for(var e=t.length;--e>=0;)t[e]=0},W=function(t,e,a){return(e<<t.hash_shift^a)&t.hash_mask},X=function(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Y=function(t,e){(function(t,e,a,n){var r,l,_=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0}(t)),I(t,t.l_desc),I(t,t.d_desc),_=function(t){var e;for(E(t,t.dyn_ltree,t.l_desc.max_code),E(t,t.dyn_dtree,t.d_desc.max_code),I(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*i[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),r=t.opt_len+3+7>>>3,(l=t.static_len+3+7>>>3)<=r&&(r=l)):r=l=a+5,a+4<=r&&-1!==e?j(t,e,a,n):4===t.strategy||l===r?(m(t,2+(n?1:0),3),B(t,s,h)):(m(t,4+(n?1:0),3),function(t,e,a,n){var r;for(m(t,e-257,5),m(t,a-1,5),m(t,n-4,4),r=0;r<n;r++)m(t,t.bl_tree[2*i[r]+1],3);D(t,t.dyn_ltree,e-1),D(t,t.dyn_dtree,a-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,_+1),B(t,t.dyn_ltree,t.dyn_dtree)),k(t),n&&x(t)})(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,X(t.strm)},Z=function(t,e){t.pending_buf[t.pending++]=e},$=function(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},tt=function(t,e,a,n){var r=t.avail_in;return r>n&&(r=n),0===r?0:(t.avail_in-=r,e.set(t.input.subarray(t.next_in,t.next_in+r),a),1===t.state.wrap?t.adler=L(t.adler,e,r,a):2===t.state.wrap&&(t.adler=O(t.adler,e,r,a)),t.next_in+=r,t.total_in+=r,r)},et=function(t,e){var a,n,r=t.max_chain_length,i=t.strstart,s=t.prev_length,h=t.nice_match,l=t.strstart>t.w_size-J?t.strstart-(t.w_size-J):0,_=t.window,o=t.w_mask,d=t.prev,u=t.strstart+H,f=_[i+s-1],c=_[i+s];t.prev_length>=t.good_match&&(r>>=2),h>t.lookahead&&(h=t.lookahead);do{if(_[(a=e)+s]===c&&_[a+s-1]===f&&_[a]===_[i]&&_[++a]===_[i+1]){i+=2,a++;do{}while(_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&i<u);if(n=H-(u-i),i=u-H,n>s){if(t.match_start=e,s=n,n>=h)break;f=_[i+s-1],c=_[i+s]}}}while((e=d[e&o])>l&&0!==--r);return s<=t.lookahead?s:t.lookahead},at=function(t){var e,a,n,r,i,s=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-J)){t.window.set(t.window.subarray(s,s+s),0),t.match_start-=s,t.strstart-=s,t.block_start-=s,e=a=t.hash_size;do{n=t.head[--e],t.head[e]=n>=s?n-s:0}while(--a);e=a=s;do{n=t.prev[--e],t.prev[e]=n>=s?n-s:0}while(--a);r+=s}if(0===t.strm.avail_in)break;if(a=tt(t.strm,t.window,t.strstart+t.lookahead,r),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=W(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=W(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<J&&0!==t.strm.avail_in)},nt=function(t,e){for(var a,n;;){if(t.lookahead<J){if(at(t),t.lookahead<J&&0===e)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=W(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-J&&(t.match_length=et(t,a)),t.match_length>=3)if(n=F(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=W(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=W(t,t.ins_h,t.window[t.strstart+1]);else n=F(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(Y(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,4===e?(Y(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Y(t,!1),0===t.strm.avail_out)?1:2},rt=function(t,e){for(var a,n,r;;){if(t.lookahead<J){if(at(t),t.lookahead<J&&0===e)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=W(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-J&&(t.match_length=et(t,a),t.match_length<=5&&(1===t.strategy||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,n=F(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=W(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,n&&(Y(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=F(t,0,t.window[t.strstart-1]))&&Y(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=F(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,4===e?(Y(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Y(t,!1),0===t.strm.avail_out)?1:2};function it(t,e,a,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=r}var st=[new it(0,0,0,0,function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(at(t),0===t.lookahead&&0===e)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+a;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Y(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-J&&(Y(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(Y(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(Y(t,!1),t.strm.avail_out),1)}),new it(4,4,8,4,nt),new it(4,5,16,8,nt),new it(4,6,32,32,nt),new it(4,4,16,16,rt),new it(8,16,32,32,rt),new it(8,16,128,128,rt),new it(8,32,128,256,rt),new it(32,128,258,1024,rt),new it(32,258,258,4096,rt)];function ht(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),V(this.dyn_ltree),V(this.dyn_dtree),V(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),V(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),V(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}for(var lt=function(t){var e,i=function(t){if(!t?.state)return Q(t,G);t.total_in=t.total_out=0,t.data_type=2;var e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:N,t.adler=2===e.wrap?0:1,e.last_flush=0,function(t){M||(function(){var t,e,i,g,v,w=Array(16);for(i=0,g=0;g<28;g++)for(o[g]=i,t=0;t<1<<a[g];t++)_[i++]=g;for(_[i-1]=g,v=0,g=0;g<16;g++)for(c[g]=v,t=0;t<1<<n[g];t++)l[v++]=g;for(v>>=7;g<30;g++)for(c[g]=v<<7,t=0;t<1<<n[g]-7;t++)l[256+v++]=g;for(e=0;e<=15;e++)w[e]=0;for(t=0;t<=143;)s[2*t+1]=8,t++,w[8]++;for(;t<=255;)s[2*t+1]=9,t++,w[9]++;for(;t<=279;)s[2*t+1]=7,t++,w[7]++;for(;t<=287;)s[2*t+1]=8,t++,w[8]++;for(z(s,287,w),t=0;t<30;t++)h[2*t+1]=5,h[2*t]=y(t,5);d=new p(s,a,257,286,15),u=new p(h,n,0,30,15),f=new p([],r,0,19,7)}(),M=!0),t.l_desc=new g(t.dyn_ltree,d),t.d_desc=new g(t.dyn_dtree,u),t.bl_desc=new g(t.bl_tree,f),t.bi_buf=0,t.bi_valid=0,k(t)}(e),0}(t);return 0===i&&((e=t.state).window_size=2*e.w_size,V(e.head),e.max_lazy_match=st[e.level].max_lazy,e.good_match=st[e.level].good_length,e.nice_match=st[e.level].nice_length,e.max_chain_length=st[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0),i},_t=function(t,e){var a,n;if(!t?.state||e>5||e<0)return t?Q(t,G):G;var r=t.state;if(!t.output||!t.input&&0!==t.avail_in||r.status===P&&4!==e)return Q(t,0===t.avail_out?-5:G);r.strm=t;var i=r.last_flush;if(r.last_flush=e,42===r.status)if(2===r.wrap)t.adler=0,Z(r,31),Z(r,139),Z(r,8),r.gzhead?(Z(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Z(r,255&r.gzhead.time),Z(r,r.gzhead.time>>8&255),Z(r,r.gzhead.time>>16&255),Z(r,r.gzhead.time>>24&255),Z(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),Z(r,255&r.gzhead.os),r.gzhead.extra?.length&&(Z(r,255&r.gzhead.extra.length),Z(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=O(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),Z(r,3),r.status=N);else{var h=8+(r.w_bits-8<<4)<<8;h|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(h|=32),h+=31-h%31,r.status=N,$(r,h),0!==r.strstart&&($(r,t.adler>>>16),$(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(a=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),X(t),a=r.pending,r.pending!==r.pending_buf_size));)Z(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),X(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.name.length?255&r.gzhead.name.charCodeAt(r.gzindex++):0,Z(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),X(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.comment.length?255&r.gzhead.comment.charCodeAt(r.gzindex++):0,Z(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.status=K)}else r.status=K;if(r.status===K&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&X(t),r.pending+2<=r.pending_buf_size&&(Z(r,255&t.adler),Z(r,t.adler>>8&255),t.adler=0,r.status=N)):r.status=N),0!==r.pending){if(X(t),0===t.avail_out)return r.last_flush=-1,0}else if(0===t.avail_in&&R(e)<=R(i)&&4!==e)return Q(t,-5);if(r.status===P&&0!==t.avail_in)return Q(t,-5);if(0!==t.avail_in||0!==r.lookahead||0!==e&&r.status!==P){var l=2===r.strategy?function(t,e){for(var a;;){if(0===t.lookahead&&(at(t),0===t.lookahead)){if(0===e)return 1;break}if(t.match_length=0,a=F(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Y(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(Y(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Y(t,!1),0===t.strm.avail_out)?1:2}(r,e):3===r.strategy?function(t,e){for(var a,n,r,i,s=t.window;;){if(t.lookahead<=H){if(at(t),t.lookahead<=H&&0===e)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=s[r=t.strstart-1])===s[++r]&&n===s[++r]&&n===s[++r]){i=t.strstart+H;do{}while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&r<i);t.match_length=H-(i-r),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=F(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=F(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Y(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(Y(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Y(t,!1),0===t.strm.avail_out)?1:2}(r,e):st[r.level].func(r,e);if(3!==l&&4!==l||(r.status=P),1===l||3===l)return 0===t.avail_out&&(r.last_flush=-1),0;if(2===l&&(1===e?function(t){m(t,2,3),b(t,256,s),function(t){16===t.bi_valid?(w(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}(r):5!==e&&(q(r,0,0,!1),3===e&&(V(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),X(t),0===t.avail_out))return r.last_flush=-1,0}return 4!==e?0:r.wrap<=0?1:(2===r.wrap?(Z(r,255&t.adler),Z(r,t.adler>>8&255),Z(r,t.adler>>16&255),Z(r,t.adler>>24&255),Z(r,255&t.total_in),Z(r,t.total_in>>8&255),Z(r,t.total_in>>16&255),Z(r,t.total_in>>24&255)):($(r,t.adler>>>16),$(r,65535&t.adler)),X(t),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},ot=function(t){if(!t?.state)return G;var e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&e!==K&&e!==N&&e!==P?Q(t,G):(t.state=null,e===N?Q(t,-3):0)},dt=new Uint8Array(256),ut=0;ut<256;ut++)dt[ut]=ut>=252?6:ut>=248?5:ut>=240?4:ut>=224?3:ut>=192?2:1;dt[254]=dt[254]=1;var ft=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0},ct=Object.prototype.toString;function pt(){this.options={level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0};var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new ft,this.strm.avail_out=0;var e,a,n=function(t,e,a,n,r,i){if(!t)return G;var s=1;if(-1===e&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),r<1||r>9||8!==a||n<8||n>15||e<0||e>9||i<0||i>4)return Q(t,G);8===n&&(n=9);var h=new ht;return t.state=h,h.strm=t,h.wrap=s,h.gzhead=null,h.w_bits=n,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=r+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<r+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.d_buf=1*h.lit_bufsize,h.l_buf=3*h.lit_bufsize,h.level=e,h.strategy=i,h.method=a,lt(t)}(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==n)throw Error(T[n]);if(t.header&&(e=this.strm,a=t.header,e?.state&&(2!==e.state.wrap||(e.state.gzhead=a))),t.dictionary){var r;if(r=\"[object ArrayBuffer]\"===ct.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(n=function(t,e){var a=e.length;if(!t?.state)return G;var n=t.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return G;if(1===r&&(t.adler=L(t.adler,e,a,0)),n.wrap=0,a>=n.w_size){0===r&&(V(n.head),n.strstart=0,n.block_start=0,n.insert=0);var i=new Uint8Array(n.w_size);i.set(e.subarray(a-n.w_size,a),0),e=i,a=n.w_size}var s=t.avail_in,h=t.next_in,l=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,at(n);n.lookahead>=3;){var _=n.strstart,o=n.lookahead-2;do{n.ins_h=W(n,n.ins_h,n.window[_+3-1]),n.prev[_&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=_,_++}while(--o);n.strstart=_,n.lookahead=2,at(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=h,t.input=l,t.avail_in=s,n.wrap=r,0}(this.strm,r)))throw Error(T[n]);this._dict_set=!0}}function gt(t,e,a){try{t.postMessage({type:\"errored\",error:e,streamId:a})}catch{t.postMessage({type:\"errored\",error:e+\"\",streamId:a})}}function vt(t){const e=t.strm.adler;return new Uint8Array([3,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e])}pt.prototype.push=function(t,e){var a,n,r=this.strm,i=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?4:0,\"[object ArrayBuffer]\"===ct.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;)if(0===r.avail_out&&(r.output=new Uint8Array(i),r.next_out=0,r.avail_out=i),(2===n||3===n)&&r.avail_out<=6)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else{if(1===(a=_t(r,n)))return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),a=ot(this.strm),this.onEnd(a),this.ended=!0,0===a;if(0!==r.avail_out){if(n>0&&r.next_out>0)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else if(0===r.avail_in)break}else this.onData(r.output)}return!0},pt.prototype.onData=function(t){this.chunks.push(t)},pt.prototype.onEnd=function(t){0===t&&(this.result=function(t){for(var e=0,a=0,n=t.length;a<n;a++)e+=t[a].length;for(var r=new Uint8Array(e),i=0,s=0,h=t.length;i<h;i++){var l=t[i];r.set(l,s),s+=l.length}return r}(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},function(e=self){try{const a=new Map;e.addEventListener(\"message\",n=>{try{const r=function(e,a){switch(a.action){case\"init\":return{type:\"initialized\",version:\"2.0.0\"};case\"write\":{let n=e.get(a.streamId);n||(n=new pt,e.set(a.streamId,n));const r=n.chunks.length,i=(new TextEncoder).encode(a.data);return n.push(i,2),{type:\"wrote\",id:a.id,streamId:a.streamId,result:t(n.chunks.slice(r)),trailer:vt(n),additionalBytesCount:i.length}}case\"reset\":e.delete(a.streamId)}}(a,n.data);r&&e.postMessage(r)}catch(t){gt(e,t,n.data&&\"streamId\"in n.data?n.data.streamId:void 0)}})}catch(t){gt(e,t)}}()})();"])));
8
+ }
9
+ let state = { status: 0 };
10
+ function startDeflateWorker(configuration, source, onInitializationFailure) {
11
+ if (state.status === 0) doStartDeflateWorker(configuration, source);
12
+ switch (state.status) {
13
+ case 1:
14
+ state.initializationFailureCallbacks.push(onInitializationFailure);
15
+ return state.worker;
16
+ case 3: return state.worker;
17
+ }
18
+ }
19
+ function getDeflateWorkerStatus() {
20
+ return state.status;
21
+ }
22
+ /**
23
+ * Starts the deflate worker and handle messages and errors
24
+ *
25
+ * The spec allow browsers to handle worker errors differently:
26
+ * - Chromium throws an exception
27
+ * - Firefox fires an error event
28
+ *
29
+ * more details: https://bugzilla.mozilla.org/show_bug.cgi?id=1736865#c2
30
+ */
31
+ function doStartDeflateWorker(configuration, source) {
32
+ try {
33
+ const worker = mockable(createDeflateWorker)(configuration);
34
+ const { stop: removeErrorListener } = addEventListener(worker, "error", (error) => {
35
+ onError(configuration, source, error);
36
+ });
37
+ const { stop: removeMessageListener } = addEventListener(worker, "message", ({ data }) => {
38
+ if (data.type === "errored") onError(configuration, source, data.error, data.streamId);
39
+ else if (data.type === "initialized") onInitialized(data.version);
40
+ });
41
+ worker.postMessage({ action: "init" });
42
+ setTimeout(() => onTimeout(source), INITIALIZATION_TIME_OUT_DELAY);
43
+ const stop = () => {
44
+ removeErrorListener();
45
+ removeMessageListener();
46
+ };
47
+ state = {
48
+ status: 1,
49
+ worker,
50
+ stop,
51
+ initializationFailureCallbacks: []
52
+ };
53
+ } catch (error) {
54
+ onError(configuration, source, error);
55
+ }
56
+ }
57
+ function onTimeout(source) {
58
+ if (state.status === 1) {
59
+ display.error(`${source} failed to start: a timeout occurred while initializing the Worker`);
60
+ state.initializationFailureCallbacks.forEach((callback) => callback());
61
+ state = { status: 2 };
62
+ }
63
+ }
64
+ function onInitialized(version) {
65
+ if (state.status === 1) state = {
66
+ status: 3,
67
+ worker: state.worker,
68
+ stop: state.stop,
69
+ version
70
+ };
71
+ }
72
+ function onError(configuration, source, error, streamId) {
73
+ if (state.status === 1 || state.status === 0) {
74
+ reportScriptLoadingError({
75
+ configuredUrl: configuration.workerUrl,
76
+ error,
77
+ source,
78
+ scriptType: "worker"
79
+ });
80
+ if (state.status === 1) state.initializationFailureCallbacks.forEach((callback) => callback());
81
+ state = { status: 2 };
82
+ } else addTelemetryError(error, {
83
+ worker_version: state.status === 3 && state.version,
84
+ stream_id: streamId
85
+ });
86
+ }
87
+ //#endregion
88
+ export { INITIALIZATION_TIME_OUT_DELAY, createDeflateWorker, doStartDeflateWorker, getDeflateWorkerStatus, startDeflateWorker };
89
+
90
+ //# sourceMappingURL=deflateWorker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deflateWorker.mjs","names":[],"sources":["../../../src/domain/deflate/deflateWorker.ts"],"sourcesContent":["import type { DeflateWorker, DeflateWorkerResponse } from '@kubesense/kubesense-browser-core'\nimport { ONE_SECOND } from '@kubesense/kubesense-js-core/time'\nimport { addTelemetryError, display, addEventListener, setTimeout, mockable } from '@kubesense/kubesense-browser-core'\nimport type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core'\nimport { reportScriptLoadingError } from '../scriptLoadingError'\n\nexport const INITIALIZATION_TIME_OUT_DELAY = 30 * ONE_SECOND\n\ndeclare const __BUILD_ENV__WORKER_STRING__: string\n\n/**\n * In order to be sure that the worker is correctly working, we need a round trip of\n * initialization messages, making the creation asynchronous.\n * These worker lifecycle states handle this case.\n */\nexport const enum DeflateWorkerStatus {\n Nil,\n Loading,\n Error,\n Initialized,\n}\n\ntype DeflateWorkerState =\n | {\n status: DeflateWorkerStatus.Nil\n }\n | {\n status: DeflateWorkerStatus.Loading\n worker: DeflateWorker\n stop: () => void\n initializationFailureCallbacks: Array<() => void>\n }\n | {\n status: DeflateWorkerStatus.Error\n }\n | {\n status: DeflateWorkerStatus.Initialized\n worker: DeflateWorker\n stop: () => void\n version: string\n }\n\nexport type CreateDeflateWorker = typeof createDeflateWorker\n\nexport function createDeflateWorker(configuration: RumConfiguration): DeflateWorker {\n return new Worker(configuration.workerUrl || URL.createObjectURL(new Blob([__BUILD_ENV__WORKER_STRING__])))\n}\n\nlet state: DeflateWorkerState = { status: DeflateWorkerStatus.Nil }\n\nexport function startDeflateWorker(\n configuration: RumConfiguration,\n source: string,\n onInitializationFailure: () => void\n) {\n if (state.status === DeflateWorkerStatus.Nil) {\n // doStartDeflateWorker updates the state to \"loading\" or \"error\"\n doStartDeflateWorker(configuration, source)\n }\n\n switch (state.status) {\n case DeflateWorkerStatus.Loading:\n state.initializationFailureCallbacks.push(onInitializationFailure)\n return state.worker\n case DeflateWorkerStatus.Initialized:\n return state.worker\n }\n}\n\nexport function resetDeflateWorkerState() {\n if (state.status === DeflateWorkerStatus.Initialized || state.status === DeflateWorkerStatus.Loading) {\n state.stop()\n }\n state = { status: DeflateWorkerStatus.Nil }\n}\n\nexport function getDeflateWorkerStatus() {\n return state.status\n}\n\n/**\n * Starts the deflate worker and handle messages and errors\n *\n * The spec allow browsers to handle worker errors differently:\n * - Chromium throws an exception\n * - Firefox fires an error event\n *\n * more details: https://bugzilla.mozilla.org/show_bug.cgi?id=1736865#c2\n */\nexport function doStartDeflateWorker(configuration: RumConfiguration, source: string) {\n try {\n const worker = mockable(createDeflateWorker)(configuration)\n const { stop: removeErrorListener } = addEventListener(worker, 'error', (error) => {\n onError(configuration, source, error)\n })\n const { stop: removeMessageListener } = addEventListener(\n worker,\n 'message',\n ({ data }: MessageEvent<DeflateWorkerResponse>) => {\n if (data.type === 'errored') {\n onError(configuration, source, data.error, data.streamId)\n } else if (data.type === 'initialized') {\n onInitialized(data.version)\n }\n }\n )\n worker.postMessage({ action: 'init' })\n setTimeout(() => onTimeout(source), INITIALIZATION_TIME_OUT_DELAY)\n const stop = () => {\n removeErrorListener()\n removeMessageListener()\n }\n\n state = { status: DeflateWorkerStatus.Loading, worker, stop, initializationFailureCallbacks: [] }\n } catch (error) {\n onError(configuration, source, error)\n }\n}\n\nfunction onTimeout(source: string) {\n if (state.status === DeflateWorkerStatus.Loading) {\n display.error(`${source} failed to start: a timeout occurred while initializing the Worker`)\n state.initializationFailureCallbacks.forEach((callback) => callback())\n state = { status: DeflateWorkerStatus.Error }\n }\n}\n\nfunction onInitialized(version: string) {\n if (state.status === DeflateWorkerStatus.Loading) {\n state = { status: DeflateWorkerStatus.Initialized, worker: state.worker, stop: state.stop, version }\n }\n}\n\nfunction onError(configuration: RumConfiguration, source: string, error: unknown, streamId?: number) {\n if (state.status === DeflateWorkerStatus.Loading || state.status === DeflateWorkerStatus.Nil) {\n reportScriptLoadingError({\n configuredUrl: configuration.workerUrl,\n error,\n source,\n scriptType: 'worker',\n })\n if (state.status === DeflateWorkerStatus.Loading) {\n state.initializationFailureCallbacks.forEach((callback) => callback())\n }\n state = { status: DeflateWorkerStatus.Error }\n } else {\n addTelemetryError(error, {\n worker_version: state.status === DeflateWorkerStatus.Initialized && state.version,\n stream_id: streamId,\n })\n }\n}\n"],"mappings":";;;;AAMA,MAAa,gCAAgC,KAAK;AAsClD,SAAgB,oBAAoB,eAAgD;CAClF,OAAO,IAAI,OAAO,cAAc,aAAa,IAAI,gBAAgB,IAAI,KAAK,CAAA,qhuBAA6B,CAAC,CAAC,CAAC;AAC5G;AAEA,IAAI,QAA4B,EAAE,QAAA,EAAgC;AAElE,SAAgB,mBACd,eACA,QACA,yBACA;CACA,IAAI,MAAM,WAAA,GAER,qBAAqB,eAAe,MAAM;CAG5C,QAAQ,MAAM,QAAd;EACE,KAAA;GACE,MAAM,+BAA+B,KAAK,uBAAuB;GACjE,OAAO,MAAM;EACf,KAAA,GACE,OAAO,MAAM;CACjB;AACF;AASA,SAAgB,yBAAyB;CACvC,OAAO,MAAM;AACf;;;;;;;;;;AAWA,SAAgB,qBAAqB,eAAiC,QAAgB;CACpF,IAAI;EACF,MAAM,SAAS,SAAS,mBAAmB,CAAC,CAAC,aAAa;EAC1D,MAAM,EAAE,MAAM,wBAAwB,iBAAiB,QAAQ,UAAU,UAAU;GACjF,QAAQ,eAAe,QAAQ,KAAK;EACtC,CAAC;EACD,MAAM,EAAE,MAAM,0BAA0B,iBACtC,QACA,YACC,EAAE,WAAgD;GACjD,IAAI,KAAK,SAAS,WAChB,QAAQ,eAAe,QAAQ,KAAK,OAAO,KAAK,QAAQ;QACnD,IAAI,KAAK,SAAS,eACvB,cAAc,KAAK,OAAO;EAE9B,CACF;EACA,OAAO,YAAY,EAAE,QAAQ,OAAO,CAAC;EACrC,iBAAiB,UAAU,MAAM,GAAG,6BAA6B;EACjE,MAAM,aAAa;GACjB,oBAAoB;GACpB,sBAAsB;EACxB;EAEA,QAAQ;GAAE,QAAA;GAAqC;GAAQ;GAAM,gCAAgC,CAAC;EAAE;CAClG,SAAS,OAAO;EACd,QAAQ,eAAe,QAAQ,KAAK;CACtC;AACF;AAEA,SAAS,UAAU,QAAgB;CACjC,IAAI,MAAM,WAAA,GAAwC;EAChD,QAAQ,MAAM,GAAG,OAAO,mEAAmE;EAC3F,MAAM,+BAA+B,SAAS,aAAa,SAAS,CAAC;EACrE,QAAQ,EAAE,QAAA,EAAkC;CAC9C;AACF;AAEA,SAAS,cAAc,SAAiB;CACtC,IAAI,MAAM,WAAA,GACR,QAAQ;EAAE,QAAA;EAAyC,QAAQ,MAAM;EAAQ,MAAM,MAAM;EAAM;CAAQ;AAEvG;AAEA,SAAS,QAAQ,eAAiC,QAAgB,OAAgB,UAAmB;CACnG,IAAI,MAAM,WAAA,KAA0C,MAAM,WAAA,GAAoC;EAC5F,yBAAyB;GACvB,eAAe,cAAc;GAC7B;GACA;GACA,YAAY;EACd,CAAC;EACD,IAAI,MAAM,WAAA,GACR,MAAM,+BAA+B,SAAS,aAAa,SAAS,CAAC;EAEvE,QAAQ,EAAE,QAAA,EAAkC;CAC9C,OACE,kBAAkB,OAAO;EACvB,gBAAgB,MAAM,WAAA,KAA8C,MAAM;EAC1E,WAAW;CACb,CAAC;AAEL"}
@@ -0,0 +1,3 @@
1
+ import { createDeflateEncoder } from "./deflateEncoder.mjs";
2
+ import { getDeflateWorkerStatus, startDeflateWorker } from "./deflateWorker.mjs";
3
+ export { createDeflateEncoder, getDeflateWorkerStatus, startDeflateWorker };
@@ -0,0 +1,21 @@
1
+ import { SessionReplayState, computeSessionReplayState, getSessionReplayUrl } from "@kubesense/kubesense-browser-rum-core";
2
+ //#region src/domain/getSessionReplayLink.ts
3
+ function getSessionReplayLink(configuration, sessionManager, viewHistory, isRecordingStarted) {
4
+ const session = sessionManager.findTrackedSession();
5
+ const errorType = getErrorType(configuration, session, isRecordingStarted);
6
+ const viewContext = viewHistory.findView();
7
+ return getSessionReplayUrl(configuration, {
8
+ viewContext,
9
+ errorType,
10
+ session
11
+ });
12
+ }
13
+ function getErrorType(configuration, session, isRecordingStarted) {
14
+ if (!session) return "rum-not-tracked";
15
+ if (computeSessionReplayState(session, configuration) === SessionReplayState.OFF) return "incorrect-session-plan";
16
+ if (!isRecordingStarted) return "replay-not-started";
17
+ }
18
+ //#endregion
19
+ export { getSessionReplayLink };
20
+
21
+ //# sourceMappingURL=getSessionReplayLink.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSessionReplayLink.mjs","names":[],"sources":["../../src/domain/getSessionReplayLink.ts"],"sourcesContent":["import type { RumConfiguration, ViewHistory } from '@kubesense/kubesense-browser-rum-core'\nimport {\n getSessionReplayUrl,\n SessionReplayState,\n computeSessionReplayState,\n} from '@kubesense/kubesense-browser-rum-core'\nimport type { SessionManager, SessionContext } from '@kubesense/kubesense-browser-core'\nexport function getSessionReplayLink(\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n viewHistory: ViewHistory,\n isRecordingStarted: boolean\n): string | undefined {\n const session = sessionManager.findTrackedSession()\n const errorType = getErrorType(configuration, session, isRecordingStarted)\n const viewContext = viewHistory.findView()\n\n return getSessionReplayUrl(configuration, {\n viewContext,\n errorType,\n session,\n })\n}\n\nfunction getErrorType(\n configuration: RumConfiguration,\n session: SessionContext | undefined,\n isRecordingStarted: boolean\n) {\n if (!session) {\n // possibilities:\n // - rum sampled out\n // - session expired (edge case)\n return 'rum-not-tracked'\n }\n if (computeSessionReplayState(session, configuration) === SessionReplayState.OFF) {\n // possibilities\n // - replay sampled out\n return 'incorrect-session-plan'\n }\n if (!isRecordingStarted) {\n return 'replay-not-started'\n }\n}\n"],"mappings":";;AAOA,SAAgB,qBACd,eACA,gBACA,aACA,oBACoB;CACpB,MAAM,UAAU,eAAe,mBAAmB;CAClD,MAAM,YAAY,aAAa,eAAe,SAAS,kBAAkB;CACzE,MAAM,cAAc,YAAY,SAAS;CAEzC,OAAO,oBAAoB,eAAe;EACxC;EACA;EACA;CACF,CAAC;AACH;AAEA,SAAS,aACP,eACA,SACA,oBACA;CACA,IAAI,CAAC,SAIH,OAAO;CAET,IAAI,0BAA0B,SAAS,aAAa,MAAM,mBAAmB,KAG3E,OAAO;CAET,IAAI,CAAC,oBACH,OAAO;AAEX"}
@@ -0,0 +1,36 @@
1
+ import { LifeCycleEventType } from "@kubesense/kubesense-browser-rum-core";
2
+ import { SESSION_TIME_OUT_DELAY, createValueHistory } from "@kubesense/kubesense-browser-core";
3
+ import { addDuration } from "@kubesense/kubesense-js-core/time";
4
+ //#region src/domain/profiling/actionHistory.ts
5
+ const ACTION_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;
6
+ function createActionHistory(lifeCycle) {
7
+ const history = createValueHistory({ expireDelay: ACTION_ID_HISTORY_TIME_OUT_DELAY });
8
+ lifeCycle.subscribe(LifeCycleEventType.ACTION_STARTED, (actionStart) => {
9
+ history.add({
10
+ id: actionStart.id,
11
+ label: "",
12
+ startClocks: actionStart.startClocks,
13
+ duration: void 0
14
+ }, actionStart.startClocks.relative);
15
+ });
16
+ lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
17
+ if (rawRumEvent.type === "action") {
18
+ const historyEntry = history.getEntries(startClocks.relative).find((entry) => entry.value.id === rawRumEvent.action.id);
19
+ const durationForEntry = duration ?? 0;
20
+ if (historyEntry) {
21
+ historyEntry.value.duration = durationForEntry;
22
+ historyEntry.close(addDuration(startClocks.relative, durationForEntry));
23
+ } else history.add({
24
+ id: rawRumEvent.action.id,
25
+ label: "",
26
+ startClocks,
27
+ duration
28
+ }, startClocks.relative).close(addDuration(startClocks.relative, durationForEntry));
29
+ }
30
+ });
31
+ return history;
32
+ }
33
+ //#endregion
34
+ export { ACTION_ID_HISTORY_TIME_OUT_DELAY, createActionHistory };
35
+
36
+ //# sourceMappingURL=actionHistory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionHistory.mjs","names":[],"sources":["../../../src/domain/profiling/actionHistory.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 { LifeCycleEventType } from '@kubesense/kubesense-browser-rum-core'\n\nexport const ACTION_ID_HISTORY_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY\n\nexport interface ActionContext {\n id: string\n label: string\n duration?: Duration\n startClocks: ClocksState\n}\n\nexport function createActionHistory(lifeCycle: LifeCycle) {\n const history = createValueHistory<ActionContext>({\n expireDelay: ACTION_ID_HISTORY_TIME_OUT_DELAY,\n })\n\n lifeCycle.subscribe(LifeCycleEventType.ACTION_STARTED, (actionStart) => {\n history.add(\n {\n id: actionStart.id,\n // The label is temporarily empty since we need to account for customers that might\n // redact the action name in the beforeSend callback. We will either try to do patch this\n // behavior, or remove the label field entirely.\n label: '',\n startClocks: actionStart.startClocks,\n duration: undefined,\n },\n actionStart.startClocks.relative\n )\n })\n\n lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {\n if (rawRumEvent.type === 'action') {\n const historyEntry = history\n .getEntries(startClocks.relative)\n .find((entry) => entry.value.id === rawRumEvent.action.id)\n const durationForEntry = duration ?? (0 as Duration)\n\n if (historyEntry) {\n historyEntry.value.duration = durationForEntry\n historyEntry.close(addDuration(startClocks.relative, durationForEntry))\n } else {\n history\n .add(\n {\n id: rawRumEvent.action.id,\n // The label is temporarily empty since we need to account for customers that might\n // redact the action name in the beforeSend callback. We will either try to do patch this\n // behavior, or remove the label field entirely.\n label: '',\n startClocks,\n duration,\n },\n startClocks.relative\n )\n .close(addDuration(startClocks.relative, durationForEntry))\n }\n }\n })\n\n return history\n}\n"],"mappings":";;;;AAMA,MAAa,mCAAmC;AAShD,SAAgB,oBAAoB,WAAsB;CACxD,MAAM,UAAU,mBAAkC,EAChD,aAAa,iCACf,CAAC;CAED,UAAU,UAAU,mBAAmB,iBAAiB,gBAAgB;EACtE,QAAQ,IACN;GACE,IAAI,YAAY;GAIhB,OAAO;GACP,aAAa,YAAY;GACzB,UAAU,KAAA;EACZ,GACA,YAAY,YAAY,QAC1B;CACF,CAAC;CAED,UAAU,UAAU,mBAAmB,0BAA0B,EAAE,aAAa,aAAa,eAAe;EAC1G,IAAI,YAAY,SAAS,UAAU;GACjC,MAAM,eAAe,QAClB,WAAW,YAAY,QAAQ,CAAC,CAChC,MAAM,UAAU,MAAM,MAAM,OAAO,YAAY,OAAO,EAAE;GAC3D,MAAM,mBAAmB,YAAa;GAEtC,IAAI,cAAc;IAChB,aAAa,MAAM,WAAW;IAC9B,aAAa,MAAM,YAAY,YAAY,UAAU,gBAAgB,CAAC;GACxE,OACE,QACG,IACC;IACE,IAAI,YAAY,OAAO;IAIvB,OAAO;IACP;IACA;GACF,GACA,YAAY,QACd,CAAC,CACA,MAAM,YAAY,YAAY,UAAU,gBAAgB,CAAC;EAEhE;CACF,CAAC;CAED,OAAO;AACT"}
@@ -0,0 +1,242 @@
1
+ import { createBridgeEmitter } from "./transport/profilingBridge.mjs";
2
+ import { createFormDataEmitter } from "./transport/formDataEmitter.mjs";
3
+ import { getCustomOrDefaultViewName } from "./utils/getCustomOrDefaultViewName.mjs";
4
+ import { buildProfileEvent } from "./transport/buildProfileEvent.mjs";
5
+ import { createLongTaskHistory } from "./longTaskHistory.mjs";
6
+ import { createActionHistory } from "./actionHistory.mjs";
7
+ import { createVitalHistory } from "./vitalHistory.mjs";
8
+ import { checkProfilingQuota } from "./quotaCheck.mjs";
9
+ import { buildProfilerDebugIds } from "./profilerDebugIds.mjs";
10
+ import { LifeCycleEventType } from "@kubesense/kubesense-browser-rum-core";
11
+ import { DOM_EVENT, addEventListener, canUseEventBridge, clearTimeout, correctedChildSampleRate, display, isSampled, mockable, setTimeout } from "@kubesense/kubesense-browser-core";
12
+ import { clocksNow, clocksOrigin, elapsed } from "@kubesense/kubesense-js-core/time";
13
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
14
+ import { monitorError } from "@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 = canUseEventBridge() ? mockable(createBridgeEmitter)() : mockable(createFormDataEmitter)(configuration, lifeCycle, createEncoder);
23
+ let lastViewEntry;
24
+ const globalCleanupTasks = [];
25
+ const longTaskHistory = mockable(createLongTaskHistory)(lifeCycle);
26
+ const actionHistory = mockable(createActionHistory)(lifeCycle);
27
+ const vitalHistory = mockable(createVitalHistory)(lifeCycle);
28
+ let instance = {
29
+ state: "stopped",
30
+ stateReason: "initializing"
31
+ };
32
+ let quotaCheckGeneration = 0;
33
+ lifeCycle.subscribe(LifeCycleEventType.SESSION_EXPIRED, () => {
34
+ stopProfiling("session-expired");
35
+ });
36
+ lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, () => {
37
+ if (instance.state === "stopped" && (instance.stateReason === "session-expired" || instance.stateReason === "quota_ko")) {
38
+ const newSession = session.findTrackedSession();
39
+ if (!newSession || !isSampled(newSession.id, 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: getCustomOrDefaultViewName(viewEntry.name, document.location.pathname)
50
+ } : void 0;
51
+ globalCleanupTasks.push(addEventListener(window, DOM_EVENT.VISIBILITY_CHANGE, handleVisibilityChange).stop, addEventListener(window, DOM_EVENT.BEFORE_UNLOAD, handleBeforeUnload).stop);
52
+ startNextProfilerInstance();
53
+ triggerQuotaCheck();
54
+ }
55
+ function triggerQuotaCheck() {
56
+ if (canUseEventBridge()) return;
57
+ const checkGeneration = ++quotaCheckGeneration;
58
+ const sessionId = session.findTrackedSession()?.id;
59
+ if (sessionId) mockable(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(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(LifeCycleEventType.VIEW_CREATED, (view) => {
86
+ const viewEntry = {
87
+ viewId: view.id,
88
+ viewName: 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 = 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
+ 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: clocksNow(),
134
+ profiler,
135
+ timeoutId: 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
+ clearTimeout(runningInstance.timeoutId);
146
+ runningInstance.profiler.removeEventListener("samplebufferfull", handleSampleBufferFull);
147
+ const { startClocks, views, sessionId } = runningInstance;
148
+ runningInstance.profiler.stop().then((trace) => {
149
+ const endClocks = clocksNow();
150
+ const duration = 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: clocksOrigin(),
165
+ longTasks,
166
+ actions,
167
+ vitals,
168
+ views,
169
+ sampleInterval: profilerConfiguration.sampleIntervalMs,
170
+ debugIds: buildProfilerDebugIds(trace.resources)
171
+ }), sessionId);
172
+ }).catch(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
+ clearTimeout(runningInstance.timeoutId);
190
+ runningInstance.profiler.removeEventListener("samplebufferfull", handleSampleBufferFull);
191
+ runningInstance.profiler.stop().catch(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: 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
+ export { DEFAULT_RUM_PROFILER_CONFIGURATION, createRumProfiler };
241
+
242
+ //# sourceMappingURL=kubesenseProfiler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubesenseProfiler.mjs","names":[],"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":";;;;;;;;;;;;;;;AAwCA,MAAa,qCAA+D;CAC1E,kBAAkB;CAClB,mBAAmB;CACnB,sBAAsB;AACxB;AAEA,SAAgB,kBACd,eACA,WACA,SACA,yBACA,eACA,aACA,wBAAkD,oCACrC;CACb,MAAM,cAAc,kBAAkB,IAClC,SAAS,mBAAmB,CAAC,CAAC,IAC9B,SAAS,qBAAqB,CAAC,CAAC,eAAe,WAAW,aAAa;CAE3E,IAAI;CAGJ,MAAM,qBAAwC,CAAC;CAC/C,MAAM,kBAAkB,SAAS,qBAAqB,CAAC,CAAC,SAAS;CACjE,MAAM,gBAAgB,SAAS,mBAAmB,CAAC,CAAC,SAAS;CAC7D,MAAM,eAAe,SAAS,kBAAkB,CAAC,CAAC,SAAS;CAE3D,IAAI,WAAgC;EAAE,OAAO;EAAW,aAAa;CAAe;CACpF,IAAI,uBAAuB;CAG3B,UAAU,UAAU,mBAAmB,uBAAuB;EAC5D,cAAc,iBAAiB;CACjC,CAAC;CAGD,UAAU,UAAU,mBAAmB,uBAAuB;EAC5D,IACE,SAAS,UAAU,cAClB,SAAS,gBAAgB,qBAAqB,SAAS,gBAAgB,aACxE;GACA,MAAM,aAAa,QAAQ,mBAAmB;GAC9C,IACE,CAAC,cACD,CAAC,UACC,WAAW,IACX,yBAAyB,cAAc,mBAAmB,cAAc,mBAAmB,CAC7F,GAEA;GAEF,MAAM;EACR;CACF,CAAC;CAGD,SAAS,QAAc;EACrB,IAAI,SAAS,UAAU,WACrB;EAGF,MAAM,YAAY,YAAY,SAAS;EAIvC,gBAAgB,YACZ;GACE,aAAa,UAAU;GACvB,QAAQ,UAAU;GAClB,UAAU,2BAA2B,UAAU,MAAM,SAAS,SAAS,QAAQ;EACjF,IACA,KAAA;EAGJ,mBAAmB,KACjB,iBAAiB,QAAQ,UAAU,mBAAmB,sBAAsB,CAAC,CAAC,MAC9E,iBAAiB,QAAQ,UAAU,eAAe,kBAAkB,CAAC,CAAC,IACxE;EAGA,0BAA0B;EAC1B,kBAAkB;CACpB;CAEA,SAAS,oBAAoB;EAC3B,IAAI,kBAAkB,GAEpB;EAKF,MAAM,kBAAkB,EAAE;EAC1B,MAAM,YAAY,QAAQ,mBAAmB,CAAC,EAAE;EAChD,IAAI,WACF,SAAS,mBAAmB,CAAC,CAAC,eAAe,SAAS,CAAC,CACpD,MAAM,WAAW;GAChB,IAAI,oBAAoB,sBACtB;GAEF,IAAI,SAAS,UAAU,aAAa,SAAS,UAAU,UACrD;GAEF,IAAI,OAAO,aAAa,YACtB,cAAc,YAAY,OAAO,MAAM;EAE3C,CAAC,CAAC,CACD,MAAM,YAAY;CAEzB;CAGA,SAAS,OAAO;EACd,cAAc,iBAAiB;CACjC;CAEA,SAAS,cAAc,QAAmD,aAA2B;EAEnG,qBAAqB,MAAM;EAG3B,mBAAmB,SAAS,SAAS,KAAK,CAAC;EAC3C,mBAAmB,SAAS;EAG5B,wBAAwB,IAAI;GAAE,QAAQ;GAAW,cAAc,KAAA;GAAW,cAAc;EAAY,CAAC;CACvG;;;;;CAMA,SAAS,kBAAkB,kBAAuC;EAChE,IAAI,iBAAiB,UAAU,WAE7B,OAAO,EACL,cAAc,iBAAiB,aACjC;EAIF,MAAM,eAAe,CAAC;EAGtB,MAAM,0BAA0B,UAAU,UAAU,mBAAmB,eAAe,SAAS;GAC7F,MAAM,YAAY;IAChB,QAAQ,KAAK;IAEb,UAAU,2BAA2B,KAAK,MAAM,SAAS,SAAS,QAAQ;IAC1E,aAAa,KAAK;GACpB;GAEA,iBAAiB,SAAS;GAG1B,gBAAgB;EAClB,CAAC;EACD,aAAa,KAAK,wBAAwB,WAAW;EAErD,OAAO,EACL,aACF;CACF;CAEA,SAAS,4BAAkC;EAEzC,MAAM,sBAAsB,aAAa;EAEzC,IAAI,CAAC,qBAAqB;GACxB,wBAAwB,IAAI;IAAE,QAAQ;IAAS,cAAc;GAA2B,CAAC;GACzF,MAAM,IAAI,MAAM,gDAAgD;EAClE;EAGA,IAAI,SAAS,UAAU,WACrB,wBAAwB,QAAQ;EAGlC,MAAM,EAAE,iBAAiB,kBAAkB,QAAQ;EAEnD,IAAI;EACJ,IAAI;GAEF,WAAW,IAAI,oBAAoB;IACjC,gBAAgB,sBAAsB;IAEtC,eAAe,KAAK,MACjB,sBAAsB,oBAAoB,MAAO,sBAAsB,gBAC1E;GACF,CAAC;EACH,SAAS,GAAG;GACV,IAAI,aAAa,SAAS,EAAE,QAAQ,SAAS,6BAA6B,GAAG;IAG3E,QAAQ,KACN,qJACA,CACF;IACA,wBAAwB,IAAI;KAAE,QAAQ;KAAS,cAAc;IAAiC,CAAC;GACjG,OACE,wBAAwB,IAAI;IAAE,QAAQ;IAAS,cAAc;GAAuB,CAAC;GAEvF;EACF;EAEA,wBAAwB,IAAI;GAAE,QAAQ;GAAW,cAAc,KAAA;EAAU,CAAC;EAG1E,WAAW;GACT,OAAO;GACP,aAAa,UAAU;GACvB;GACA,WAAW,WAAW,2BAA2B,sBAAsB,iBAAiB;GACxF,OAAO,CAAC;GACR;GACA,WAAW,CAAC;GACZ,WAAW,QAAQ,mBAAmB,CAAC,EAAE;EAC3C;EAGA,iBAAiB,aAAa;EAI9B,SAAS,iBAAiB,oBAAoB,sBAAsB;CACtE;CAEA,SAAS,wBAAwB,iBAA6C;EAE5E,aAAa,gBAAgB,SAAS;EAEtC,gBAAgB,SAAS,oBAAoB,oBAAoB,sBAAsB;EAGvF,MAAM,EAAE,aAAa,OAAO,cAAc;EAG1C,gBAAgB,SACb,KAAK,CAAC,CACN,MAAM,UAAU;GACf,MAAM,YAAY,UAAU;GAC5B,MAAM,WAAW,QAAQ,YAAY,UAAU,UAAU,QAAQ;GACjE,MAAM,YAAY,gBAAgB,QAAQ,YAAY,UAAU,QAAQ;GACxE,MAAM,UAAU,cAAc,QAAQ,YAAY,UAAU,QAAQ;GACpE,MAAM,SAAS,aAAa,QAAQ,YAAY,UAAU,QAAQ,CAAC,CAAC,KAAK,WAAW;IAClF,IAAI,MAAM;IACV,OAAO,MAAM;IACb,aAAa,MAAM;IACnB,UAAU,MAAM;GAClB,EAAE;GACF,MAAM,2BAA2B,WAAW,sBAAsB;GAElE,IAAI,UAAU,WAAW,KAAK,0BAE5B;GAGF,oBAEE,OAAO,OAAO,CAAC,GAA2B,OAAO;IAC/C;IACA;IACA,cAAc,aAAa;IAC3B;IACA;IACA;IACA;IACA,gBAAgB,sBAAsB;IACtC,UAAU,sBAAsB,MAAM,SAAS;GACjD,CAAC,GACD,SACF;EACF,CAAC,CAAC,CACD,MAAM,YAAY;CACvB;CAEA,SAAS,qBAAqB,aAAwD;EACpF,IAAI,SAAS,UAAU,WAAW;GAChC,IAEE,SAAS,UAAU,YAGlB,SAAS,UAAU,aAAa,gBAAgB,mBAEjD,WAAW;IAAE,OAAO;IAAW;GAAY;GAG7C;EACF;EAGA,MAAM,kBAAkB;EAGxB,WAAW;GAAE,OAAO;GAAW;EAAY;EAG3C,gBAAgB,aAAa,SAAS,gBAAgB,YAAY,CAAC;EAEnE,IAAI,gBAAgB,YAAY;GAE9B,aAAa,gBAAgB,SAAS;GAEtC,gBAAgB,SAAS,oBAAoB,oBAAoB,sBAAsB;GACvF,gBAAqB,SAAS,KAAK,CAAC,CAAC,MAAM,YAAY;EACzD,OAEE,wBAAwB,eAAe;CAE3C;CAEA,SAAS,wBAAwB;EAC/B,IAAI,SAAS,UAAU,WACrB;EAIF,MAAM,kBAAkB;EAGxB,WAAW,EAAE,OAAO,SAAS;EAG7B,gBAAgB,aAAa,SAAS,gBAAgB,YAAY,CAAC;EAGnE,wBAAwB,eAAe;CACzC;CAEA,SAAS,iBAAiB,WAA2C;EACnE,IAAI,SAAS,UAAU,aAAa,CAAC,WACnC;EAIF,SAAS,MAAM,KAAK,SAAS;CAC/B;CAEA,SAAS,oBAAoB,OAA6B,WAAqC;EAC7F,MAAM,UAA4B;GAChC,SAAS,kBAAkB,OAAO,eAAe,SAAS;GAC1D;EACF;EACA,YAAY,OAAO;CACrB;CAEA,SAAS,yBAA+B;EACtC,0BAA0B;CAC5B;CAEA,SAAS,yBAA+B;EACtC,IAAI,SAAS,oBAAoB,YAAY,SAAS,UAAU,WAK9D,sBAAsB;OACjB,IAAI,SAAS,oBAAoB,aAAa,SAAS,UAAU,UAEtE,0BAA0B;CAE9B;CAEA,SAAS,qBAA2B;EAIlC,0BAA0B;CAC5B;CAEA,SAAS,YAAY;EACnB,OAAO,SAAS,UAAU;CAC5B;CAEA,SAAS,YAAY;EACnB,OAAO,SAAS,UAAU;CAC5B;CAEA,SAAS,WAAW;EAClB,OAAO,SAAS,UAAU;CAC5B;CAEA,OAAO;EAAE;EAAO;EAAM;EAAW;EAAW;CAAS;AACvD"}
@@ -0,0 +1,21 @@
1
+ import { LifeCycleEventType, RumLongTaskEntryType, RumPerformanceEntryType } from "@kubesense/kubesense-browser-rum-core";
2
+ import { SESSION_TIME_OUT_DELAY, createValueHistory } from "@kubesense/kubesense-browser-core";
3
+ import { addDuration } from "@kubesense/kubesense-js-core/time";
4
+ //#region src/domain/profiling/longTaskHistory.ts
5
+ const LONG_TASK_ID_HISTORY_EXPIRE_DELAY = SESSION_TIME_OUT_DELAY;
6
+ function createLongTaskHistory(lifeCycle) {
7
+ const history = createValueHistory({ expireDelay: LONG_TASK_ID_HISTORY_EXPIRE_DELAY });
8
+ lifeCycle.subscribe(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 === RumLongTaskEntryType.LONG_TASK ? RumPerformanceEntryType.LONG_TASK : RumPerformanceEntryType.LONG_ANIMATION_FRAME
14
+ }, startClocks.relative).close(addDuration(startClocks.relative, duration));
15
+ });
16
+ return history;
17
+ }
18
+ //#endregion
19
+ export { LONG_TASK_ID_HISTORY_EXPIRE_DELAY, createLongTaskHistory };
20
+
21
+ //# sourceMappingURL=longTaskHistory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"longTaskHistory.mjs","names":[],"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,oCAAoC;AASjD,SAAgB,sBAAsB,WAAsB;CAC1D,MAAM,UAAU,mBAAoC,EAClD,aAAa,kCACf,CAAC;CAED,UAAU,UAAU,mBAAmB,0BAA0B,EAAE,aAAa,aAAa,eAAe;EAC1G,IAAI,YAAY,SAAS,aACvB,QACG,IACC;GACE,IAAI,YAAY,UAAU;GAC1B;GACU;GACV,WACE,YAAY,UAAU,eAAe,qBAAqB,YACtD,wBAAwB,YACxB,wBAAwB;EAChC,GACA,YAAY,QACd,CAAC,CACA,MAAM,YAAY,YAAY,UAAU,QAAS,CAAC;CAEzD,CAAC;CAED,OAAO;AACT"}
@@ -0,0 +1,18 @@
1
+ import { buildDebugIdByUrl } from "@kubesense/kubesense-browser-core";
2
+ //#region src/domain/profiling/profilerDebugIds.ts
3
+ function buildProfilerDebugIds(resources) {
4
+ const debugIdByUrl = new Map(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
+ export { buildProfilerDebugIds };
17
+
18
+ //# sourceMappingURL=profilerDebugIds.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilerDebugIds.mjs","names":[],"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,IAAI,kBAAkB,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"}
@@ -0,0 +1,23 @@
1
+ import { RumEventType } from "@kubesense/kubesense-browser-rum-core";
2
+ import { SKIPPED } from "@kubesense/kubesense-js-core/assembly";
3
+ //#region src/domain/profiling/profilingContext.ts
4
+ function startProfilingContext(hooks) {
5
+ let currentContext = { status: "starting" };
6
+ hooks.assembleEventDefaults.register(({ eventType }) => {
7
+ if (eventType !== RumEventType.VIEW && eventType !== RumEventType.LONG_TASK && eventType !== RumEventType.ACTION && eventType !== RumEventType.VITAL) return 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
+ };
19
+ }
20
+ //#endregion
21
+ export { startProfilingContext };
22
+
23
+ //# sourceMappingURL=profilingContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilingContext.mjs","names":[],"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,cAAc,aAAa,QAC3B,cAAc,aAAa,aAC3B,cAAc,aAAa,UAC3B,cAAc,aAAa,OAE3B,OAAO;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"}
@@ -0,0 +1,9 @@
1
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
2
+ //#region src/domain/profiling/profilingSupported.ts
3
+ function isProfilingSupported() {
4
+ return globalObject.Profiler !== void 0;
5
+ }
6
+ //#endregion
7
+ export { isProfilingSupported };
8
+
9
+ //# sourceMappingURL=profilingSupported.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilingSupported.mjs","names":[],"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,OAAO,aAAa,aAAa,KAAA;AACnC"}