@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.
- package/LICENSE +1 -1
- package/README.md +23 -0
- package/bundle/chunks/kubesenseProfiler-4b8cfd8f889074788478-kubesense-rum.js +1 -0
- package/bundle/chunks/kubesenseRecorder-db948e96649585a2b3e9-kubesense-rum.js +1 -0
- package/bundle/kubesense-rum.js +1 -1
- package/cjs/boot/kubesenseRecorder.d.ts +6 -0
- package/cjs/boot/kubesenseRecorder.js +75 -0
- package/cjs/boot/kubesenseRecorder.js.map +1 -0
- package/cjs/boot/lazyLoadProfiler.d.ts +3 -4
- package/cjs/boot/lazyLoadProfiler.js +18 -50
- package/cjs/boot/lazyLoadProfiler.js.map +1 -1
- package/cjs/boot/lazyLoadRecorder.d.ts +3 -4
- package/cjs/boot/lazyLoadRecorder.js +18 -50
- package/cjs/boot/lazyLoadRecorder.js.map +1 -1
- package/cjs/boot/postStartStrategy.d.ts +4 -4
- package/cjs/boot/postStartStrategy.js +89 -110
- package/cjs/boot/postStartStrategy.js.map +1 -1
- package/cjs/boot/preStartStrategy.js +21 -21
- package/cjs/boot/preStartStrategy.js.map +1 -1
- package/cjs/boot/profilerApi.js +44 -50
- package/cjs/boot/profilerApi.js.map +1 -1
- package/cjs/boot/recorderApi.d.ts +1 -3
- package/cjs/boot/recorderApi.js +41 -71
- package/cjs/boot/recorderApi.js.map +1 -1
- package/cjs/domain/deflate/deflateEncoder.d.ts +1 -2
- package/cjs/domain/deflate/deflateEncoder.js +94 -108
- package/cjs/domain/deflate/deflateEncoder.js.map +1 -1
- package/cjs/domain/deflate/deflateWorker.d.ts +3 -4
- package/cjs/domain/deflate/deflateWorker.js +79 -90
- package/cjs/domain/deflate/deflateWorker.js.map +1 -1
- package/cjs/domain/deflate/index.d.ts +1 -1
- package/cjs/domain/deflate/index.js +5 -10
- package/cjs/domain/getSessionReplayLink.d.ts +3 -2
- package/cjs/domain/getSessionReplayLink.js +17 -31
- package/cjs/domain/getSessionReplayLink.js.map +1 -1
- package/cjs/domain/profiling/actionHistory.d.ts +10 -0
- package/cjs/domain/profiling/actionHistory.js +37 -0
- package/cjs/domain/profiling/actionHistory.js.map +1 -0
- package/cjs/domain/profiling/kubesenseProfiler.d.ts +6 -0
- package/cjs/domain/profiling/kubesenseProfiler.js +243 -0
- package/cjs/domain/profiling/kubesenseProfiler.js.map +1 -0
- package/cjs/domain/profiling/longTaskHistory.d.ts +11 -0
- package/cjs/domain/profiling/longTaskHistory.js +22 -0
- package/cjs/domain/profiling/longTaskHistory.js.map +1 -0
- package/cjs/domain/profiling/profilerDebugIds.d.ts +2 -0
- package/cjs/domain/profiling/profilerDebugIds.js +18 -0
- package/cjs/domain/profiling/profilerDebugIds.js.map +1 -0
- package/cjs/domain/profiling/profilingContext.js +20 -25
- package/cjs/domain/profiling/profilingContext.js.map +1 -1
- package/cjs/domain/profiling/profilingSupported.js +6 -8
- package/cjs/domain/profiling/profilingSupported.js.map +1 -1
- package/cjs/domain/profiling/quotaCheck.d.ts +9 -0
- package/cjs/domain/profiling/quotaCheck.js +66 -0
- package/cjs/domain/profiling/quotaCheck.js.map +1 -0
- package/cjs/domain/profiling/test-utils/mockedTrace.d.ts +1 -1
- package/cjs/domain/profiling/transport/buildProfileEvent.d.ts +38 -0
- package/cjs/domain/profiling/transport/buildProfileEvent.js +91 -0
- package/cjs/domain/profiling/transport/buildProfileEvent.js.map +1 -0
- package/cjs/domain/profiling/transport/formDataEmitter.d.ts +5 -0
- package/cjs/domain/profiling/transport/formDataEmitter.js +17 -0
- package/cjs/domain/profiling/transport/formDataEmitter.js.map +1 -0
- package/cjs/domain/profiling/transport/profilingBridge.d.ts +2 -0
- package/cjs/domain/profiling/transport/profilingBridge.js +12 -0
- package/cjs/domain/profiling/transport/profilingBridge.js.map +1 -0
- package/cjs/domain/profiling/{types/rumProfiler.types.d.ts → types.d.ts} +13 -24
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js +5 -5
- package/cjs/domain/profiling/utils/getCustomOrDefaultViewName.js.map +1 -1
- package/cjs/domain/profiling/utils/getDefaultViewName.js +6 -10
- package/cjs/domain/profiling/utils/getDefaultViewName.js.map +1 -1
- package/cjs/domain/profiling/vitalHistory.d.ts +13 -0
- package/cjs/domain/profiling/vitalHistory.js +56 -0
- package/cjs/domain/profiling/vitalHistory.js.map +1 -0
- package/cjs/domain/record/assembly.d.ts +2 -1
- package/cjs/domain/record/assembly.js +15 -14
- package/cjs/domain/record/assembly.js.map +1 -1
- package/cjs/domain/record/canvas/canvasHash.d.ts +2 -0
- package/cjs/domain/record/canvas/canvasHash.js +33 -0
- package/cjs/domain/record/canvas/canvasHash.js.map +1 -0
- package/cjs/domain/record/canvas/canvasManager.d.ts +42 -0
- package/cjs/domain/record/canvas/canvasManager.js +99 -0
- package/cjs/domain/record/canvas/canvasManager.js.map +1 -0
- package/cjs/domain/record/canvas/canvasSnapshot.d.ts +8 -0
- package/cjs/domain/record/canvas/canvasSnapshot.js +40 -0
- package/cjs/domain/record/canvas/canvasSnapshot.js.map +1 -0
- package/cjs/domain/record/canvas/canvasUtils.d.ts +2 -0
- package/cjs/domain/record/canvas/canvasUtils.js +14 -0
- package/cjs/domain/record/canvas/canvasUtils.js.map +1 -0
- package/cjs/domain/record/elementsScrollPositions.js +17 -20
- package/cjs/domain/record/elementsScrollPositions.js.map +1 -1
- package/cjs/domain/record/encoding/changeDecoder.d.ts +39 -0
- package/cjs/domain/record/encoding/changeDecoder.js +152 -0
- package/cjs/domain/record/encoding/changeDecoder.js.map +1 -0
- package/cjs/domain/record/encoding/changeEncoder.d.ts +39 -0
- package/cjs/domain/record/encoding/changeEncoder.js +146 -0
- package/cjs/domain/record/encoding/changeEncoder.js.map +1 -0
- package/cjs/domain/record/encoding/index.d.ts +10 -0
- package/cjs/domain/record/encoding/itemIds.d.ts +32 -0
- package/cjs/domain/record/encoding/itemIds.js +49 -0
- package/cjs/domain/record/encoding/itemIds.js.map +1 -0
- package/cjs/domain/record/encoding/roles.d.ts +52 -0
- package/cjs/domain/record/encoding/roles.js +66 -0
- package/cjs/domain/record/encoding/roles.js.map +1 -0
- package/cjs/domain/record/encoding/stringIds.d.ts +15 -0
- package/cjs/domain/record/encoding/stringIds.js +47 -0
- package/cjs/domain/record/encoding/stringIds.js.map +1 -0
- package/cjs/domain/record/encoding/stringTable.d.ts +15 -0
- package/cjs/domain/record/encoding/stringTable.js +38 -0
- package/cjs/domain/record/encoding/stringTable.js.map +1 -0
- package/cjs/domain/record/eventsUtils.js +9 -10
- package/cjs/domain/record/eventsUtils.js.map +1 -1
- package/cjs/domain/record/index.d.ts +5 -2
- package/cjs/domain/record/index.js +13 -17
- package/cjs/domain/record/internalApi.d.ts +6 -6
- package/cjs/domain/record/internalApi.js +55 -49
- package/cjs/domain/record/internalApi.js.map +1 -1
- package/cjs/domain/record/mutationBatch.d.ts +1 -0
- package/cjs/domain/record/mutationBatch.js +38 -39
- package/cjs/domain/record/mutationBatch.js.map +1 -1
- package/cjs/domain/record/record.d.ts +7 -1
- package/cjs/domain/record/record.js +76 -87
- package/cjs/domain/record/record.js.map +1 -1
- package/cjs/domain/record/record.types.d.ts +1 -0
- package/cjs/domain/record/recordingScope.d.ts +7 -3
- package/cjs/domain/record/recordingScope.js +25 -11
- package/cjs/domain/record/recordingScope.js.map +1 -1
- package/cjs/domain/record/serialization/index.d.ts +4 -2
- package/cjs/domain/record/serialization/index.js +16 -18
- package/cjs/domain/record/serialization/insertionCursor.d.ts +57 -0
- package/cjs/domain/record/serialization/insertionCursor.js +55 -0
- package/cjs/domain/record/serialization/insertionCursor.js.map +1 -0
- package/cjs/domain/record/serialization/serialization.types.d.ts +0 -6
- package/cjs/domain/record/serialization/serializationStats.js +26 -25
- package/cjs/domain/record/serialization/serializationStats.js.map +1 -1
- package/cjs/domain/record/serialization/serializationTransaction.d.ts +44 -22
- package/cjs/domain/record/serialization/serializationTransaction.js +90 -36
- package/cjs/domain/record/serialization/serializationTransaction.js.map +1 -1
- package/cjs/domain/record/serialization/serializationUtils.d.ts +0 -1
- package/cjs/domain/record/serialization/serializationUtils.js +46 -75
- package/cjs/domain/record/serialization/serializationUtils.js.map +1 -1
- package/cjs/domain/record/serialization/serializeAttribute.js +24 -39
- package/cjs/domain/record/serialization/serializeAttribute.js.map +1 -1
- package/cjs/domain/record/serialization/serializeAttributes.d.ts +2 -2
- package/cjs/domain/record/serialization/serializeAttributes.js +100 -152
- package/cjs/domain/record/serialization/serializeAttributes.js.map +1 -1
- package/cjs/domain/record/serialization/serializeFullSnapshot.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js +14 -0
- package/cjs/domain/record/serialization/serializeFullSnapshot.js.map +1 -0
- package/cjs/domain/record/serialization/serializeMutations.d.ts +5 -0
- package/cjs/domain/record/serialization/serializeMutations.js +152 -0
- package/cjs/domain/record/serialization/serializeMutations.js.map +1 -0
- package/cjs/domain/record/serialization/serializeNode.d.ts +3 -6
- package/cjs/domain/record/serialization/serializeNode.js +116 -144
- package/cjs/domain/record/serialization/serializeNode.js.map +1 -1
- package/cjs/domain/record/shadowRootsController.d.ts +2 -2
- package/cjs/domain/record/shadowRootsController.js +37 -42
- package/cjs/domain/record/shadowRootsController.js.map +1 -1
- package/cjs/domain/record/startFullSnapshots.d.ts +1 -1
- package/cjs/domain/record/startFullSnapshots.js +38 -54
- package/cjs/domain/record/startFullSnapshots.js.map +1 -1
- package/cjs/domain/record/trackers/index.d.ts +2 -1
- package/cjs/domain/record/trackers/index.js +25 -27
- package/cjs/domain/record/trackers/trackCanvasCapture.d.ts +3 -0
- package/cjs/domain/record/trackers/trackCanvasCapture.js +102 -0
- package/cjs/domain/record/trackers/trackCanvasCapture.js.map +1 -0
- package/cjs/domain/record/trackers/trackCanvasContent.d.ts +3 -0
- package/cjs/domain/record/trackers/trackCanvasContent.js +31 -0
- package/cjs/domain/record/trackers/trackCanvasContent.js.map +1 -0
- package/cjs/domain/record/trackers/trackFocus.d.ts +1 -2
- package/cjs/domain/record/trackers/trackFocus.js +15 -13
- package/cjs/domain/record/trackers/trackFocus.js.map +1 -1
- package/cjs/domain/record/trackers/trackInput.d.ts +2 -2
- package/cjs/domain/record/trackers/trackInput.js +129 -102
- package/cjs/domain/record/trackers/trackInput.js.map +1 -1
- package/cjs/domain/record/trackers/trackMediaInteraction.js +22 -26
- package/cjs/domain/record/trackers/trackMediaInteraction.js.map +1 -1
- package/cjs/domain/record/trackers/trackMouseInteraction.js +47 -54
- package/cjs/domain/record/trackers/trackMouseInteraction.js.map +1 -1
- package/cjs/domain/record/trackers/trackMove.js +43 -49
- package/cjs/domain/record/trackers/trackMove.js.map +1 -1
- package/cjs/domain/record/trackers/trackMutation.d.ts +3 -3
- package/cjs/domain/record/trackers/trackMutation.js +42 -267
- package/cjs/domain/record/trackers/trackMutation.js.map +1 -1
- package/cjs/domain/record/trackers/trackScroll.js +36 -44
- package/cjs/domain/record/trackers/trackScroll.js.map +1 -1
- package/cjs/domain/record/trackers/trackStyleSheet.js +75 -84
- package/cjs/domain/record/trackers/trackStyleSheet.js.map +1 -1
- package/cjs/domain/record/trackers/trackViewEnd.js +17 -17
- package/cjs/domain/record/trackers/trackViewEnd.js.map +1 -1
- package/cjs/domain/record/trackers/trackViewportResize.d.ts +2 -3
- package/cjs/domain/record/trackers/trackViewportResize.js +36 -42
- package/cjs/domain/record/trackers/trackViewportResize.js.map +1 -1
- package/cjs/domain/record/viewports.js +32 -50
- package/cjs/domain/record/viewports.js.map +1 -1
- package/cjs/domain/replayStats.d.ts +1 -0
- package/cjs/domain/replayStats.js +36 -44
- package/cjs/domain/replayStats.js.map +1 -1
- package/cjs/domain/scriptLoadingError.js +15 -22
- package/cjs/domain/scriptLoadingError.js.map +1 -1
- package/cjs/domain/segmentCollection/buildReplayPayload.js +22 -23
- package/cjs/domain/segmentCollection/buildReplayPayload.js.map +1 -1
- package/cjs/domain/segmentCollection/buildResourcePayload.d.ts +5 -0
- package/cjs/domain/segmentCollection/buildResourcePayload.js +19 -0
- package/cjs/domain/segmentCollection/buildResourcePayload.js.map +1 -0
- package/cjs/domain/segmentCollection/index.d.ts +3 -0
- package/cjs/domain/segmentCollection/index.js +14 -11
- package/cjs/domain/segmentCollection/replayResourceCollection.d.ts +10 -0
- package/cjs/domain/segmentCollection/replayResourceCollection.js +52 -0
- package/cjs/domain/segmentCollection/replayResourceCollection.js.map +1 -0
- package/cjs/domain/segmentCollection/segment.js +50 -80
- package/cjs/domain/segmentCollection/segment.js.map +1 -1
- package/cjs/domain/segmentCollection/segmentCollection.d.ts +4 -4
- package/cjs/domain/segmentCollection/segmentCollection.js +87 -105
- package/cjs/domain/segmentCollection/segmentCollection.js.map +1 -1
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.d.ts +16 -0
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js +29 -0
- package/cjs/domain/segmentCollection/startDroppedSegmentRecovery.js.map +1 -0
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js +40 -42
- package/cjs/domain/segmentCollection/startSegmentTelemetry.js.map +1 -1
- package/cjs/domain/startRecordBridge.js +10 -14
- package/cjs/domain/startRecordBridge.js.map +1 -1
- package/cjs/domain/startRecorderInitTelemetry.js +42 -50
- package/cjs/domain/startRecorderInitTelemetry.js.map +1 -1
- package/cjs/entries/internal.d.ts +11 -2
- package/cjs/entries/internal.js +47 -28
- package/cjs/entries/internalSynthetics.js +26 -24
- package/cjs/entries/internalSynthetics.js.map +1 -1
- package/cjs/entries/main.d.ts +5 -3
- package/cjs/entries/main.js +50 -31
- package/cjs/entries/main.js.map +1 -1
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/profiling.d.ts +313 -0
- package/cjs/types/sessionReplay.d.ts +381 -3
- package/cjs/types/sessionReplayConstants.d.ts +57 -0
- package/cjs/types/sessionReplayConstants.js +104 -47
- package/cjs/types/sessionReplayConstants.js.map +1 -1
- package/esm/boot/kubesenseRecorder.mjs +75 -0
- package/esm/boot/kubesenseRecorder.mjs.map +1 -0
- package/esm/boot/lazyLoadProfiler.mjs +24 -0
- package/esm/boot/lazyLoadProfiler.mjs.map +1 -0
- package/esm/boot/lazyLoadRecorder.mjs +24 -0
- package/esm/boot/lazyLoadRecorder.mjs.map +1 -0
- package/esm/boot/postStartStrategy.mjs +97 -0
- package/esm/boot/postStartStrategy.mjs.map +1 -0
- package/esm/boot/preStartStrategy.mjs +24 -0
- package/esm/boot/preStartStrategy.mjs.map +1 -0
- package/esm/boot/profilerApi.mjs +47 -0
- package/esm/boot/profilerApi.mjs.map +1 -0
- package/esm/boot/recorderApi.mjs +43 -0
- package/esm/boot/recorderApi.mjs.map +1 -0
- package/esm/domain/deflate/deflateEncoder.mjs +96 -0
- package/esm/domain/deflate/deflateEncoder.mjs.map +1 -0
- package/esm/domain/deflate/deflateWorker.mjs +90 -0
- package/esm/domain/deflate/deflateWorker.mjs.map +1 -0
- package/esm/domain/deflate/index.mjs +3 -0
- package/esm/domain/getSessionReplayLink.mjs +21 -0
- package/esm/domain/getSessionReplayLink.mjs.map +1 -0
- package/esm/domain/profiling/actionHistory.mjs +36 -0
- package/esm/domain/profiling/actionHistory.mjs.map +1 -0
- package/esm/domain/profiling/kubesenseProfiler.mjs +242 -0
- package/esm/domain/profiling/kubesenseProfiler.mjs.map +1 -0
- package/esm/domain/profiling/longTaskHistory.mjs +21 -0
- package/esm/domain/profiling/longTaskHistory.mjs.map +1 -0
- package/esm/domain/profiling/profilerDebugIds.mjs +18 -0
- package/esm/domain/profiling/profilerDebugIds.mjs.map +1 -0
- package/esm/domain/profiling/profilingContext.mjs +23 -0
- package/esm/domain/profiling/profilingContext.mjs.map +1 -0
- package/esm/domain/profiling/profilingSupported.mjs +9 -0
- package/esm/domain/profiling/profilingSupported.mjs.map +1 -0
- package/esm/domain/profiling/quotaCheck.mjs +66 -0
- package/esm/domain/profiling/quotaCheck.mjs.map +1 -0
- package/esm/domain/profiling/transport/buildProfileEvent.mjs +90 -0
- package/esm/domain/profiling/transport/buildProfileEvent.mjs.map +1 -0
- package/esm/domain/profiling/transport/formDataEmitter.mjs +17 -0
- package/esm/domain/profiling/transport/formDataEmitter.mjs.map +1 -0
- package/esm/domain/profiling/transport/profilingBridge.mjs +12 -0
- package/esm/domain/profiling/transport/profilingBridge.mjs.map +1 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs +7 -0
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.mjs.map +1 -0
- package/esm/domain/profiling/utils/getDefaultViewName.mjs +10 -0
- package/esm/domain/profiling/utils/getDefaultViewName.mjs.map +1 -0
- package/esm/domain/profiling/vitalHistory.mjs +55 -0
- package/esm/domain/profiling/vitalHistory.mjs.map +1 -0
- package/esm/domain/record/assembly.mjs +17 -0
- package/esm/domain/record/assembly.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasHash.mjs +33 -0
- package/esm/domain/record/canvas/canvasHash.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasManager.mjs +99 -0
- package/esm/domain/record/canvas/canvasManager.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasSnapshot.mjs +38 -0
- package/esm/domain/record/canvas/canvasSnapshot.mjs.map +1 -0
- package/esm/domain/record/canvas/canvasUtils.mjs +13 -0
- package/esm/domain/record/canvas/canvasUtils.mjs.map +1 -0
- package/esm/domain/record/elementsScrollPositions.mjs +20 -0
- package/esm/domain/record/elementsScrollPositions.mjs.map +1 -0
- package/esm/domain/record/encoding/changeDecoder.mjs +152 -0
- package/esm/domain/record/encoding/changeDecoder.mjs.map +1 -0
- package/esm/domain/record/encoding/changeEncoder.mjs +146 -0
- package/esm/domain/record/encoding/changeEncoder.mjs.map +1 -0
- package/esm/domain/record/encoding/itemIds.mjs +47 -0
- package/esm/domain/record/encoding/itemIds.mjs.map +1 -0
- package/esm/domain/record/encoding/roles.mjs +64 -0
- package/esm/domain/record/encoding/roles.mjs.map +1 -0
- package/esm/domain/record/encoding/stringIds.mjs +47 -0
- package/esm/domain/record/encoding/stringIds.mjs.map +1 -0
- package/esm/domain/record/encoding/stringTable.mjs +38 -0
- package/esm/domain/record/encoding/stringTable.mjs.map +1 -0
- package/esm/domain/record/eventsUtils.mjs +13 -0
- package/esm/domain/record/eventsUtils.mjs.map +1 -0
- package/esm/domain/record/index.mjs +8 -0
- package/esm/domain/record/internalApi.mjs +62 -0
- package/esm/domain/record/internalApi.mjs.map +1 -0
- package/esm/domain/record/mutationBatch.mjs +43 -0
- package/esm/domain/record/mutationBatch.mjs.map +1 -0
- package/esm/domain/record/record.mjs +79 -0
- package/esm/domain/record/record.mjs.map +1 -0
- package/esm/domain/record/recordingScope.mjs +27 -0
- package/esm/domain/record/recordingScope.mjs.map +1 -0
- package/esm/domain/record/serialization/index.mjs +9 -0
- package/esm/domain/record/serialization/insertionCursor.mjs +54 -0
- package/esm/domain/record/serialization/insertionCursor.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationStats.mjs +31 -0
- package/esm/domain/record/serialization/serializationStats.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationTransaction.mjs +92 -0
- package/esm/domain/record/serialization/serializationTransaction.mjs.map +1 -0
- package/esm/domain/record/serialization/serializationUtils.mjs +53 -0
- package/esm/domain/record/serialization/serializationUtils.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeAttribute.mjs +26 -0
- package/esm/domain/record/serialization/serializeAttribute.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeAttributes.mjs +113 -0
- package/esm/domain/record/serialization/serializeAttributes.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.mjs +14 -0
- package/esm/domain/record/serialization/serializeFullSnapshot.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeMutations.mjs +152 -0
- package/esm/domain/record/serialization/serializeMutations.mjs.map +1 -0
- package/esm/domain/record/serialization/serializeNode.mjs +126 -0
- package/esm/domain/record/serialization/serializeNode.mjs.map +1 -0
- package/esm/domain/record/shadowRootsController.mjs +40 -0
- package/esm/domain/record/shadowRootsController.mjs.map +1 -0
- package/esm/domain/record/startFullSnapshots.mjs +42 -0
- package/esm/domain/record/startFullSnapshots.mjs.map +1 -0
- package/esm/domain/record/trackers/index.mjs +13 -0
- package/esm/domain/record/trackers/trackCanvasCapture.mjs +102 -0
- package/esm/domain/record/trackers/trackCanvasCapture.mjs.map +1 -0
- package/esm/domain/record/trackers/trackCanvasContent.mjs +31 -0
- package/esm/domain/record/trackers/trackCanvasContent.mjs.map +1 -0
- package/esm/domain/record/trackers/trackFocus.mjs +17 -0
- package/esm/domain/record/trackers/trackFocus.mjs.map +1 -0
- package/esm/domain/record/trackers/trackInput.mjs +131 -0
- package/esm/domain/record/trackers/trackInput.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMediaInteraction.mjs +25 -0
- package/esm/domain/record/trackers/trackMediaInteraction.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMouseInteraction.mjs +52 -0
- package/esm/domain/record/trackers/trackMouseInteraction.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMove.mjs +48 -0
- package/esm/domain/record/trackers/trackMove.mjs.map +1 -0
- package/esm/domain/record/trackers/trackMutation.mjs +45 -0
- package/esm/domain/record/trackers/trackMutation.mjs.map +1 -0
- package/esm/domain/record/trackers/trackScroll.mjs +40 -0
- package/esm/domain/record/trackers/trackScroll.mjs.map +1 -0
- package/esm/domain/record/trackers/trackStyleSheet.mjs +79 -0
- package/esm/domain/record/trackers/trackStyleSheet.mjs.map +1 -0
- package/esm/domain/record/trackers/trackViewEnd.mjs +20 -0
- package/esm/domain/record/trackers/trackViewEnd.mjs.map +1 -0
- package/esm/domain/record/trackers/trackViewportResize.mjs +39 -0
- package/esm/domain/record/trackers/trackViewportResize.mjs.map +1 -0
- package/esm/domain/record/viewports.mjs +41 -0
- package/esm/domain/record/viewports.mjs.map +1 -0
- package/esm/domain/replayStats.mjs +46 -0
- package/esm/domain/replayStats.mjs.map +1 -0
- package/esm/domain/scriptLoadingError.mjs +19 -0
- package/esm/domain/scriptLoadingError.mjs.map +1 -0
- package/esm/domain/segmentCollection/buildReplayPayload.mjs +25 -0
- package/esm/domain/segmentCollection/buildReplayPayload.mjs.map +1 -0
- package/esm/domain/segmentCollection/buildResourcePayload.mjs +19 -0
- package/esm/domain/segmentCollection/buildResourcePayload.mjs.map +1 -0
- package/esm/domain/segmentCollection/index.mjs +5 -0
- package/esm/domain/segmentCollection/replayResourceCollection.mjs +52 -0
- package/esm/domain/segmentCollection/replayResourceCollection.mjs.map +1 -0
- package/esm/domain/segmentCollection/segment.mjs +52 -0
- package/esm/domain/segmentCollection/segment.mjs.map +1 -0
- package/esm/domain/segmentCollection/segmentCollection.mjs +87 -0
- package/esm/domain/segmentCollection/segmentCollection.mjs.map +1 -0
- package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs +28 -0
- package/esm/domain/segmentCollection/startDroppedSegmentRecovery.mjs.map +1 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.mjs +45 -0
- package/esm/domain/segmentCollection/startSegmentTelemetry.mjs.map +1 -0
- package/esm/domain/startRecordBridge.mjs +13 -0
- package/esm/domain/startRecordBridge.mjs.map +1 -0
- package/esm/domain/startRecorderInitTelemetry.mjs +47 -0
- package/esm/domain/startRecorderInitTelemetry.mjs.map +1 -0
- package/esm/entries/internal.mjs +8 -0
- package/esm/entries/internalSynthetics.mjs +22 -0
- package/esm/entries/internalSynthetics.mjs.map +1 -0
- package/esm/entries/main.mjs +35 -0
- package/esm/entries/main.mjs.map +1 -0
- package/esm/types/sessionReplayConstants.mjs +97 -0
- package/esm/types/sessionReplayConstants.mjs.map +1 -0
- package/internal/package.json +1 -1
- package/internal-synthetics/package.json +1 -1
- package/package.json +26 -15
- package/src/boot/kubesenseRecorder.ts +134 -0
- package/src/boot/lazyLoadProfiler.ts +6 -7
- package/src/boot/lazyLoadRecorder.ts +6 -7
- package/src/boot/postStartStrategy.ts +18 -16
- package/src/boot/profilerApi.ts +29 -19
- package/src/boot/recorderApi.ts +6 -21
- package/src/domain/deflate/deflateEncoder.ts +3 -8
- package/src/domain/deflate/deflateWorker.ts +8 -13
- package/src/domain/deflate/index.ts +1 -0
- package/src/domain/getSessionReplayLink.ts +15 -11
- package/src/domain/profiling/actionHistory.ts +66 -0
- package/src/domain/profiling/{profiler.ts → kubesenseProfiler.ts} +166 -79
- package/src/domain/profiling/longTaskHistory.ts +45 -0
- package/src/domain/profiling/profilerDebugIds.ts +17 -0
- package/src/domain/profiling/profilingContext.ts +8 -3
- package/src/domain/profiling/profilingSupported.ts +2 -7
- package/src/domain/profiling/quotaCheck.ts +89 -0
- package/src/domain/profiling/test-utils/mockedTrace.ts +1 -2
- package/src/domain/profiling/transport/buildProfileEvent.ts +143 -0
- package/src/domain/profiling/transport/formDataEmitter.ts +17 -0
- package/src/domain/profiling/transport/profilingBridge.ts +9 -0
- package/src/domain/profiling/{types/rumProfiler.types.ts → types.ts} +14 -26
- package/src/domain/profiling/vitalHistory.ts +106 -0
- package/src/domain/record/assembly.ts +5 -3
- package/src/domain/record/canvas/canvasHash.ts +54 -0
- package/src/domain/record/canvas/canvasManager.ts +175 -0
- package/src/domain/record/canvas/canvasSnapshot.ts +52 -0
- package/src/domain/record/canvas/canvasUtils.ts +11 -0
- package/src/domain/record/encoding/changeDecoder.ts +287 -0
- package/src/domain/record/encoding/changeEncoder.ts +327 -0
- package/src/domain/record/encoding/index.ts +19 -0
- package/src/domain/record/encoding/itemIds.ts +84 -0
- package/src/domain/record/encoding/roles.ts +136 -0
- package/src/domain/record/encoding/stringIds.ts +70 -0
- package/src/domain/record/encoding/stringTable.ts +68 -0
- package/src/domain/record/index.ts +5 -2
- package/src/domain/record/internalApi.ts +21 -18
- package/src/domain/record/mutationBatch.ts +14 -3
- package/src/domain/record/record.ts +35 -16
- package/src/domain/record/record.types.ts +1 -0
- package/src/domain/record/recordingScope.ts +28 -5
- package/src/domain/record/serialization/index.ts +4 -2
- package/src/domain/record/serialization/insertionCursor.ts +131 -0
- package/src/domain/record/serialization/serialization.types.ts +0 -16
- package/src/domain/record/serialization/serializationTransaction.ts +191 -37
- package/src/domain/record/serialization/serializationUtils.ts +1 -15
- package/src/domain/record/serialization/serializeAttributes.ts +36 -32
- package/src/domain/record/serialization/serializeFullSnapshot.ts +26 -0
- package/src/domain/record/serialization/serializeMutations.ts +357 -0
- package/src/domain/record/serialization/serializeNode.ts +200 -164
- package/src/domain/record/shadowRootsController.ts +4 -3
- package/src/domain/record/startFullSnapshots.ts +28 -41
- package/src/domain/record/trackers/index.ts +2 -1
- package/src/domain/record/trackers/trackCanvasCapture.ts +137 -0
- package/src/domain/record/trackers/trackCanvasContent.ts +46 -0
- package/src/domain/record/trackers/trackFocus.ts +4 -4
- package/src/domain/record/trackers/trackInput.ts +146 -41
- package/src/domain/record/trackers/trackMediaInteraction.ts +0 -1
- package/src/domain/record/trackers/trackMouseInteraction.ts +1 -2
- package/src/domain/record/trackers/trackMove.ts +0 -1
- package/src/domain/record/trackers/trackMutation.ts +17 -355
- package/src/domain/record/trackers/trackScroll.ts +1 -1
- package/src/domain/record/trackers/trackStyleSheet.ts +1 -1
- package/src/domain/record/trackers/trackViewEnd.ts +1 -1
- package/src/domain/record/trackers/trackViewportResize.ts +7 -16
- package/src/domain/record/trackers/tracker.types.ts +1 -1
- package/src/domain/replayStats.ts +5 -0
- package/src/domain/scriptLoadingError.ts +2 -1
- package/src/domain/segmentCollection/buildResourcePayload.ts +20 -0
- package/src/domain/segmentCollection/index.ts +3 -0
- package/src/domain/segmentCollection/replayResourceCollection.ts +79 -0
- package/src/domain/segmentCollection/segment.ts +2 -1
- package/src/domain/segmentCollection/segmentCollection.ts +14 -13
- package/src/domain/segmentCollection/startDroppedSegmentRecovery.ts +37 -0
- package/src/domain/segmentCollection/startSegmentTelemetry.ts +16 -2
- package/src/domain/startRecorderInitTelemetry.ts +5 -3
- package/src/entries/internal.ts +13 -2
- package/src/entries/internalSynthetics.ts +3 -4
- package/src/entries/main.ts +23 -14
- package/src/types/index.ts +1 -0
- package/src/types/profiling.ts +315 -0
- package/src/types/sessionReplay.ts +395 -3
- package/src/types/sessionReplayConstants.ts +109 -0
- package/bundle/chunks/profiler-6f621c66a29d9f39a9bd-kubesense-rum.js +0 -1
- package/bundle/chunks/recorder-c73b8d42b98d4a01f120-kubesense-rum.js +0 -1
- package/cjs/boot/isBrowserSupported.d.ts +0 -4
- package/cjs/boot/isBrowserSupported.js +0 -17
- package/cjs/boot/isBrowserSupported.js.map +0 -1
- package/cjs/boot/startRecording.d.ts +0 -6
- package/cjs/boot/startRecording.js +0 -45
- package/cjs/boot/startRecording.js.map +0 -1
- package/cjs/domain/deflate/index.js.map +0 -1
- package/cjs/domain/profiling/profiler.d.ts +0 -7
- package/cjs/domain/profiling/profiler.js +0 -244
- package/cjs/domain/profiling/profiler.js.map +0 -1
- package/cjs/domain/profiling/test-utils/mockedTrace.js +0 -57
- package/cjs/domain/profiling/test-utils/mockedTrace.js.map +0 -1
- package/cjs/domain/profiling/transport/assembly.d.ts +0 -21
- package/cjs/domain/profiling/transport/assembly.js +0 -45
- package/cjs/domain/profiling/transport/assembly.js.map +0 -1
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js +0 -50
- package/cjs/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
- package/cjs/domain/profiling/types/index.d.ts +0 -2
- package/cjs/domain/profiling/types/index.js +0 -3
- package/cjs/domain/profiling/types/index.js.map +0 -1
- package/cjs/domain/profiling/types/profilerApi.types.d.ts +0 -58
- package/cjs/domain/profiling/types/profilerApi.types.js +0 -5
- package/cjs/domain/profiling/types/profilerApi.types.js.map +0 -1
- package/cjs/domain/profiling/types/rumProfiler.types.js +0 -3
- package/cjs/domain/profiling/types/rumProfiler.types.js.map +0 -1
- package/cjs/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
- package/cjs/domain/profiling/utils/getNumberOfSamples.js +0 -18
- package/cjs/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
- package/cjs/domain/record/eventIds.d.ts +0 -4
- package/cjs/domain/record/eventIds.js +0 -16
- package/cjs/domain/record/eventIds.js.map +0 -1
- package/cjs/domain/record/index.js.map +0 -1
- package/cjs/domain/record/nodeIds.d.ts +0 -15
- package/cjs/domain/record/nodeIds.js +0 -32
- package/cjs/domain/record/nodeIds.js.map +0 -1
- package/cjs/domain/record/record.types.js +0 -3
- package/cjs/domain/record/record.types.js.map +0 -1
- package/cjs/domain/record/serialization/index.js.map +0 -1
- package/cjs/domain/record/serialization/serialization.types.js +0 -3
- package/cjs/domain/record/serialization/serialization.types.js.map +0 -1
- package/cjs/domain/record/serialization/serializeDocument.d.ts +0 -3
- package/cjs/domain/record/serialization/serializeDocument.js +0 -11
- package/cjs/domain/record/serialization/serializeDocument.js.map +0 -1
- package/cjs/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
- package/cjs/domain/record/serialization/serializeStyleSheets.js +0 -19
- package/cjs/domain/record/serialization/serializeStyleSheets.js.map +0 -1
- package/cjs/domain/record/trackers/index.js.map +0 -1
- package/cjs/domain/record/trackers/trackFrustration.d.ts +0 -7
- package/cjs/domain/record/trackers/trackFrustration.js +0 -31
- package/cjs/domain/record/trackers/trackFrustration.js.map +0 -1
- package/cjs/domain/record/trackers/tracker.types.js +0 -3
- package/cjs/domain/record/trackers/tracker.types.js.map +0 -1
- package/cjs/domain/segmentCollection/index.js.map +0 -1
- package/cjs/entries/internal.js.map +0 -1
- package/cjs/types/index.js +0 -18
- package/cjs/types/index.js.map +0 -1
- package/cjs/types/sessionReplay.js +0 -7
- package/cjs/types/sessionReplay.js.map +0 -1
- package/esm/boot/isBrowserSupported.d.ts +0 -4
- package/esm/boot/isBrowserSupported.js +0 -14
- package/esm/boot/isBrowserSupported.js.map +0 -1
- package/esm/boot/lazyLoadProfiler.d.ts +0 -4
- package/esm/boot/lazyLoadProfiler.js +0 -18
- package/esm/boot/lazyLoadProfiler.js.map +0 -1
- package/esm/boot/lazyLoadRecorder.d.ts +0 -4
- package/esm/boot/lazyLoadRecorder.js +0 -18
- package/esm/boot/lazyLoadRecorder.js.map +0 -1
- package/esm/boot/postStartStrategy.d.ts +0 -33
- package/esm/boot/postStartStrategy.js +0 -115
- package/esm/boot/postStartStrategy.js.map +0 -1
- package/esm/boot/preStartStrategy.d.ts +0 -6
- package/esm/boot/preStartStrategy.js +0 -21
- package/esm/boot/preStartStrategy.js.map +0 -1
- package/esm/boot/profilerApi.d.ts +0 -2
- package/esm/boot/profilerApi.js +0 -50
- package/esm/boot/profilerApi.js.map +0 -1
- package/esm/boot/recorderApi.d.ts +0 -4
- package/esm/boot/recorderApi.js +0 -70
- package/esm/boot/recorderApi.js.map +0 -1
- package/esm/boot/startRecording.d.ts +0 -6
- package/esm/boot/startRecording.js +0 -42
- package/esm/boot/startRecording.js.map +0 -1
- package/esm/domain/deflate/deflateEncoder.d.ts +0 -3
- package/esm/domain/deflate/deflateEncoder.js +0 -107
- package/esm/domain/deflate/deflateEncoder.js.map +0 -1
- package/esm/domain/deflate/deflateWorker.d.ts +0 -30
- package/esm/domain/deflate/deflateWorker.js +0 -97
- package/esm/domain/deflate/deflateWorker.js.map +0 -1
- package/esm/domain/deflate/index.d.ts +0 -3
- package/esm/domain/deflate/index.js +0 -3
- package/esm/domain/deflate/index.js.map +0 -1
- package/esm/domain/getSessionReplayLink.d.ts +0 -2
- package/esm/domain/getSessionReplayLink.js +0 -32
- package/esm/domain/getSessionReplayLink.js.map +0 -1
- package/esm/domain/profiling/profiler.d.ts +0 -7
- package/esm/domain/profiling/profiler.js +0 -240
- package/esm/domain/profiling/profiler.js.map +0 -1
- package/esm/domain/profiling/profilingContext.d.ts +0 -6
- package/esm/domain/profiling/profilingContext.js +0 -25
- package/esm/domain/profiling/profilingContext.js.map +0 -1
- package/esm/domain/profiling/profilingSupported.d.ts +0 -1
- package/esm/domain/profiling/profilingSupported.js +0 -8
- package/esm/domain/profiling/profilingSupported.js.map +0 -1
- package/esm/domain/profiling/test-utils/mockedTrace.d.ts +0 -3
- package/esm/domain/profiling/test-utils/mockedTrace.js +0 -54
- package/esm/domain/profiling/test-utils/mockedTrace.js.map +0 -1
- package/esm/domain/profiling/transport/assembly.d.ts +0 -21
- package/esm/domain/profiling/transport/assembly.js +0 -42
- package/esm/domain/profiling/transport/assembly.js.map +0 -1
- package/esm/domain/profiling/transport/buildProfileEventAttributes.d.ts +0 -25
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js +0 -47
- package/esm/domain/profiling/transport/buildProfileEventAttributes.js.map +0 -1
- package/esm/domain/profiling/types/index.d.ts +0 -2
- package/esm/domain/profiling/types/index.js +0 -2
- package/esm/domain/profiling/types/index.js.map +0 -1
- package/esm/domain/profiling/types/profilerApi.types.d.ts +0 -58
- package/esm/domain/profiling/types/profilerApi.types.js +0 -4
- package/esm/domain/profiling/types/profilerApi.types.js.map +0 -1
- package/esm/domain/profiling/types/rumProfiler.types.d.ts +0 -72
- package/esm/domain/profiling/types/rumProfiler.types.js +0 -2
- package/esm/domain/profiling/types/rumProfiler.types.js.map +0 -1
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.d.ts +0 -1
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js +0 -3
- package/esm/domain/profiling/utils/getCustomOrDefaultViewName.js.map +0 -1
- package/esm/domain/profiling/utils/getDefaultViewName.d.ts +0 -1
- package/esm/domain/profiling/utils/getDefaultViewName.js +0 -11
- package/esm/domain/profiling/utils/getDefaultViewName.js.map +0 -1
- package/esm/domain/profiling/utils/getNumberOfSamples.d.ts +0 -7
- package/esm/domain/profiling/utils/getNumberOfSamples.js +0 -15
- package/esm/domain/profiling/utils/getNumberOfSamples.js.map +0 -1
- package/esm/domain/record/assembly.d.ts +0 -2
- package/esm/domain/record/assembly.js +0 -13
- package/esm/domain/record/assembly.js.map +0 -1
- package/esm/domain/record/elementsScrollPositions.d.ts +0 -10
- package/esm/domain/record/elementsScrollPositions.js +0 -20
- package/esm/domain/record/elementsScrollPositions.js.map +0 -1
- package/esm/domain/record/eventIds.d.ts +0 -4
- package/esm/domain/record/eventIds.js +0 -13
- package/esm/domain/record/eventIds.js.map +0 -1
- package/esm/domain/record/eventsUtils.d.ts +0 -2
- package/esm/domain/record/eventsUtils.js +0 -11
- package/esm/domain/record/eventsUtils.js.map +0 -1
- package/esm/domain/record/index.d.ts +0 -7
- package/esm/domain/record/index.js +0 -6
- package/esm/domain/record/index.js.map +0 -1
- package/esm/domain/record/internalApi.d.ts +0 -22
- package/esm/domain/record/internalApi.js +0 -53
- package/esm/domain/record/internalApi.js.map +0 -1
- package/esm/domain/record/mutationBatch.d.ts +0 -12
- package/esm/domain/record/mutationBatch.js +0 -40
- package/esm/domain/record/mutationBatch.js.map +0 -1
- package/esm/domain/record/nodeIds.d.ts +0 -15
- package/esm/domain/record/nodeIds.js +0 -29
- package/esm/domain/record/nodeIds.js.map +0 -1
- package/esm/domain/record/record.d.ts +0 -16
- package/esm/domain/record/record.js +0 -54
- package/esm/domain/record/record.js.map +0 -1
- package/esm/domain/record/record.types.d.ts +0 -4
- package/esm/domain/record/record.types.js +0 -2
- package/esm/domain/record/record.types.js.map +0 -1
- package/esm/domain/record/recordingScope.d.ts +0 -19
- package/esm/domain/record/recordingScope.js +0 -10
- package/esm/domain/record/recordingScope.js.map +0 -1
- package/esm/domain/record/serialization/index.d.ts +0 -8
- package/esm/domain/record/serialization/index.js +0 -7
- package/esm/domain/record/serialization/index.js.map +0 -1
- package/esm/domain/record/serialization/serialization.types.d.ts +0 -28
- package/esm/domain/record/serialization/serialization.types.js +0 -2
- package/esm/domain/record/serialization/serialization.types.js.map +0 -1
- package/esm/domain/record/serialization/serializationStats.d.ts +0 -12
- package/esm/domain/record/serialization/serializationStats.js +0 -27
- package/esm/domain/record/serialization/serializationStats.js.map +0 -1
- package/esm/domain/record/serialization/serializationTransaction.d.ts +0 -45
- package/esm/domain/record/serialization/serializationTransaction.js +0 -35
- package/esm/domain/record/serialization/serializationTransaction.js.map +0 -1
- package/esm/domain/record/serialization/serializationUtils.d.ts +0 -18
- package/esm/domain/record/serialization/serializationUtils.js +0 -80
- package/esm/domain/record/serialization/serializationUtils.js.map +0 -1
- package/esm/domain/record/serialization/serializeAttribute.d.ts +0 -4
- package/esm/domain/record/serialization/serializeAttribute.js +0 -38
- package/esm/domain/record/serialization/serializeAttribute.js.map +0 -1
- package/esm/domain/record/serialization/serializeAttributes.d.ts +0 -7
- package/esm/domain/record/serialization/serializeAttributes.js +0 -161
- package/esm/domain/record/serialization/serializeAttributes.js.map +0 -1
- package/esm/domain/record/serialization/serializeDocument.d.ts +0 -3
- package/esm/domain/record/serialization/serializeDocument.js +0 -8
- package/esm/domain/record/serialization/serializeDocument.js.map +0 -1
- package/esm/domain/record/serialization/serializeNode.d.ts +0 -7
- package/esm/domain/record/serialization/serializeNode.js +0 -149
- package/esm/domain/record/serialization/serializeNode.js.map +0 -1
- package/esm/domain/record/serialization/serializeStyleSheets.d.ts +0 -2
- package/esm/domain/record/serialization/serializeStyleSheets.js +0 -16
- package/esm/domain/record/serialization/serializeStyleSheets.js.map +0 -1
- package/esm/domain/record/shadowRootsController.d.ts +0 -11
- package/esm/domain/record/shadowRootsController.js +0 -41
- package/esm/domain/record/shadowRootsController.js.map +0 -1
- package/esm/domain/record/startFullSnapshots.d.ts +0 -9
- package/esm/domain/record/startFullSnapshots.js +0 -55
- package/esm/domain/record/startFullSnapshots.js.map +0 -1
- package/esm/domain/record/trackers/index.d.ts +0 -12
- package/esm/domain/record/trackers/index.js +0 -12
- package/esm/domain/record/trackers/index.js.map +0 -1
- package/esm/domain/record/trackers/trackFocus.d.ts +0 -5
- package/esm/domain/record/trackers/trackFocus.js +0 -12
- package/esm/domain/record/trackers/trackFocus.js.map +0 -1
- package/esm/domain/record/trackers/trackFrustration.d.ts +0 -7
- package/esm/domain/record/trackers/trackFrustration.js +0 -28
- package/esm/domain/record/trackers/trackFrustration.js.map +0 -1
- package/esm/domain/record/trackers/trackInput.d.ts +0 -4
- package/esm/domain/record/trackers/trackInput.js +0 -101
- package/esm/domain/record/trackers/trackInput.js.map +0 -1
- package/esm/domain/record/trackers/trackMediaInteraction.d.ts +0 -5
- package/esm/domain/record/trackers/trackMediaInteraction.js +0 -26
- package/esm/domain/record/trackers/trackMediaInteraction.js.map +0 -1
- package/esm/domain/record/trackers/trackMouseInteraction.d.ts +0 -5
- package/esm/domain/record/trackers/trackMouseInteraction.js +0 -56
- package/esm/domain/record/trackers/trackMouseInteraction.js.map +0 -1
- package/esm/domain/record/trackers/trackMove.d.ts +0 -9
- package/esm/domain/record/trackers/trackMove.js +0 -51
- package/esm/domain/record/trackers/trackMove.js.map +0 -1
- package/esm/domain/record/trackers/trackMutation.d.ts +0 -11
- package/esm/domain/record/trackers/trackMutation.js +0 -266
- package/esm/domain/record/trackers/trackMutation.js.map +0 -1
- package/esm/domain/record/trackers/trackScroll.d.ts +0 -5
- package/esm/domain/record/trackers/trackScroll.js +0 -45
- package/esm/domain/record/trackers/trackScroll.js.map +0 -1
- package/esm/domain/record/trackers/trackStyleSheet.d.ts +0 -6
- package/esm/domain/record/trackers/trackStyleSheet.js +0 -85
- package/esm/domain/record/trackers/trackStyleSheet.js.map +0 -1
- package/esm/domain/record/trackers/trackViewEnd.d.ts +0 -5
- package/esm/domain/record/trackers/trackViewEnd.js +0 -17
- package/esm/domain/record/trackers/trackViewEnd.js.map +0 -1
- package/esm/domain/record/trackers/trackViewportResize.d.ts +0 -6
- package/esm/domain/record/trackers/trackViewportResize.js +0 -42
- package/esm/domain/record/trackers/trackViewportResize.js.map +0 -1
- package/esm/domain/record/trackers/tracker.types.d.ts +0 -3
- package/esm/domain/record/trackers/tracker.types.js +0 -2
- package/esm/domain/record/trackers/tracker.types.js.map +0 -1
- package/esm/domain/record/viewports.d.ts +0 -20
- package/esm/domain/record/viewports.js +0 -55
- package/esm/domain/record/viewports.js.map +0 -1
- package/esm/domain/replayStats.d.ts +0 -8
- package/esm/domain/replayStats.js +0 -51
- package/esm/domain/replayStats.js.map +0 -1
- package/esm/domain/scriptLoadingError.d.ts +0 -6
- package/esm/domain/scriptLoadingError.js +0 -23
- package/esm/domain/scriptLoadingError.js.map +0 -1
- package/esm/domain/segmentCollection/buildReplayPayload.d.ts +0 -15
- package/esm/domain/segmentCollection/buildReplayPayload.js +0 -23
- package/esm/domain/segmentCollection/buildReplayPayload.js.map +0 -1
- package/esm/domain/segmentCollection/index.d.ts +0 -4
- package/esm/domain/segmentCollection/index.js +0 -4
- package/esm/domain/segmentCollection/index.js.map +0 -1
- package/esm/domain/segmentCollection/segment.d.ts +0 -16
- package/esm/domain/segmentCollection/segment.js +0 -46
- package/esm/domain/segmentCollection/segment.js.map +0 -1
- package/esm/domain/segmentCollection/segmentCollection.d.ts +0 -31
- package/esm/domain/segmentCollection/segmentCollection.js +0 -106
- package/esm/domain/segmentCollection/segmentCollection.js.map +0 -1
- package/esm/domain/segmentCollection/startSegmentTelemetry.d.ts +0 -6
- package/esm/domain/segmentCollection/startSegmentTelemetry.js +0 -44
- package/esm/domain/segmentCollection/startSegmentTelemetry.js.map +0 -1
- package/esm/domain/startRecordBridge.d.ts +0 -5
- package/esm/domain/startRecordBridge.js +0 -14
- package/esm/domain/startRecordBridge.js.map +0 -1
- package/esm/domain/startRecorderInitTelemetry.d.ts +0 -15
- package/esm/domain/startRecorderInitTelemetry.js +0 -52
- package/esm/domain/startRecorderInitTelemetry.js.map +0 -1
- package/esm/entries/internal.d.ts +0 -11
- package/esm/entries/internal.js +0 -4
- package/esm/entries/internal.js.map +0 -1
- package/esm/entries/internalSynthetics.d.ts +0 -2
- package/esm/entries/internalSynthetics.js +0 -23
- package/esm/entries/internalSynthetics.js.map +0 -1
- package/esm/entries/main.d.ts +0 -23
- package/esm/entries/main.js +0 -31
- package/esm/entries/main.js.map +0 -1
- package/esm/types/index.d.ts +0 -2
- package/esm/types/index.js +0 -2
- package/esm/types/index.js.map +0 -1
- package/esm/types/sessionReplay.d.ts +0 -703
- package/esm/types/sessionReplay.js +0 -6
- package/esm/types/sessionReplay.js.map +0 -1
- package/esm/types/sessionReplayConstants.d.ts +0 -49
- package/esm/types/sessionReplayConstants.js +0 -46
- package/esm/types/sessionReplayConstants.js.map +0 -1
- package/src/boot/isBrowserSupported.ts +0 -14
- package/src/boot/startRecording.ts +0 -70
- package/src/domain/profiling/transport/assembly.ts +0 -78
- package/src/domain/profiling/transport/buildProfileEventAttributes.ts +0 -66
- package/src/domain/profiling/types/index.ts +0 -2
- package/src/domain/profiling/types/profilerApi.types.ts +0 -87
- package/src/domain/profiling/utils/getNumberOfSamples.ts +0 -16
- package/src/domain/record/eventIds.ts +0 -17
- package/src/domain/record/nodeIds.ts +0 -46
- package/src/domain/record/serialization/serializeDocument.ts +0 -13
- package/src/domain/record/serialization/serializeStyleSheets.ts +0 -18
- package/src/domain/record/trackers/trackFrustration.ts +0 -41
|
@@ -1,76 +1,95 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { globalObject } from '@kubesense/kubesense-js-core/util'
|
|
2
|
+
import type { Profiler } from '@kubesense/kubesense-js-core/util'
|
|
3
|
+
import { elapsed, clocksOrigin, clocksNow } from '@kubesense/kubesense-js-core/time'
|
|
4
|
+
import type { SessionManager, DeflateEncoderStreamId, Encoder } from '@kubesense/kubesense-browser-core'
|
|
2
5
|
import {
|
|
3
6
|
addEventListener,
|
|
7
|
+
canUseEventBridge,
|
|
4
8
|
clearTimeout,
|
|
5
9
|
setTimeout,
|
|
6
10
|
DOM_EVENT,
|
|
7
|
-
monitorError,
|
|
8
11
|
display,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
elapsed,
|
|
13
|
-
DeflateEncoderStreamId,
|
|
12
|
+
mockable,
|
|
13
|
+
isSampled,
|
|
14
|
+
correctedChildSampleRate,
|
|
14
15
|
} from '@kubesense/kubesense-browser-core'
|
|
16
|
+
import { monitorError } from '@kubesense/kubesense-js-core/monitor'
|
|
15
17
|
|
|
18
|
+
import type { LifeCycle, RumConfiguration, ViewHistory } from '@kubesense/kubesense-browser-rum-core'
|
|
19
|
+
import { LifeCycleEventType } from '@kubesense/kubesense-browser-rum-core'
|
|
20
|
+
import type { BrowserProfilerTrace, RumViewEntry } from '../../types'
|
|
16
21
|
import type {
|
|
17
|
-
LifeCycle,
|
|
18
|
-
LongTaskContexts,
|
|
19
|
-
RumConfiguration,
|
|
20
|
-
RumSessionManager,
|
|
21
|
-
TransportPayload,
|
|
22
|
-
ViewHistory,
|
|
23
|
-
} from '@kubesense/kubesense-browser-rum-core'
|
|
24
|
-
import { createFormDataTransport, LifeCycleEventType } from '@kubesense/kubesense-browser-rum-core'
|
|
25
|
-
import type {
|
|
26
|
-
RumProfilerTrace,
|
|
27
22
|
RumProfilerInstance,
|
|
28
|
-
|
|
23
|
+
RumProfilerRunningInstance,
|
|
29
24
|
RUMProfiler,
|
|
30
25
|
RUMProfilerConfiguration,
|
|
31
26
|
RumProfilerStoppedInstance,
|
|
32
|
-
|
|
27
|
+
ProfilingPayload,
|
|
33
28
|
} from './types'
|
|
34
|
-
import { getNumberOfSamples } from './utils/getNumberOfSamples'
|
|
35
29
|
import type { ProfilingContextManager } from './profilingContext'
|
|
30
|
+
import { createBridgeEmitter } from './transport/profilingBridge'
|
|
31
|
+
import { createFormDataEmitter } from './transport/formDataEmitter'
|
|
36
32
|
import { getCustomOrDefaultViewName } from './utils/getCustomOrDefaultViewName'
|
|
37
|
-
import {
|
|
33
|
+
import { buildProfileEvent } from './transport/buildProfileEvent'
|
|
34
|
+
import { createLongTaskHistory } from './longTaskHistory'
|
|
35
|
+
import { createActionHistory } from './actionHistory'
|
|
36
|
+
import { createVitalHistory } from './vitalHistory'
|
|
37
|
+
import { checkProfilingQuota } from './quotaCheck'
|
|
38
|
+
import type { QuotaReason } from './quotaCheck'
|
|
39
|
+
import { buildProfilerDebugIds } from './profilerDebugIds'
|
|
38
40
|
|
|
39
41
|
export const DEFAULT_RUM_PROFILER_CONFIGURATION: RUMProfilerConfiguration = {
|
|
40
42
|
sampleIntervalMs: 10, // Sample stack trace every 10ms
|
|
41
43
|
collectIntervalMs: 60000, // Collect data every minute
|
|
42
44
|
minProfileDurationMs: 5000, // Require at least 5 seconds of profile data to reduce noise and cost
|
|
43
|
-
minNumberOfSamples: 50, // Require at least 50 samples (~500 ms) to report a profile to reduce noise and cost
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
export function createRumProfiler(
|
|
47
48
|
configuration: RumConfiguration,
|
|
48
49
|
lifeCycle: LifeCycle,
|
|
49
|
-
session:
|
|
50
|
+
session: SessionManager,
|
|
50
51
|
profilingContextManager: ProfilingContextManager,
|
|
51
|
-
longTaskContexts: LongTaskContexts,
|
|
52
52
|
createEncoder: (streamId: DeflateEncoderStreamId) => Encoder,
|
|
53
53
|
viewHistory: ViewHistory,
|
|
54
54
|
profilerConfiguration: RUMProfilerConfiguration = DEFAULT_RUM_PROFILER_CONFIGURATION
|
|
55
55
|
): RUMProfiler {
|
|
56
|
-
const
|
|
56
|
+
const emitPayload = canUseEventBridge()
|
|
57
|
+
? mockable(createBridgeEmitter)()
|
|
58
|
+
: mockable(createFormDataEmitter)(configuration, lifeCycle, createEncoder)
|
|
57
59
|
|
|
58
60
|
let lastViewEntry: RumViewEntry | undefined
|
|
59
61
|
|
|
60
62
|
// Global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)
|
|
61
63
|
const globalCleanupTasks: Array<() => void> = []
|
|
64
|
+
const longTaskHistory = mockable(createLongTaskHistory)(lifeCycle)
|
|
65
|
+
const actionHistory = mockable(createActionHistory)(lifeCycle)
|
|
66
|
+
const vitalHistory = mockable(createVitalHistory)(lifeCycle)
|
|
62
67
|
|
|
63
68
|
let instance: RumProfilerInstance = { state: 'stopped', stateReason: 'initializing' }
|
|
69
|
+
let quotaCheckGeneration = 0
|
|
64
70
|
|
|
65
71
|
// Stops the profiler when session expires
|
|
66
72
|
lifeCycle.subscribe(LifeCycleEventType.SESSION_EXPIRED, () => {
|
|
67
|
-
stopProfiling('session-expired')
|
|
73
|
+
stopProfiling('session-expired')
|
|
68
74
|
})
|
|
69
75
|
|
|
70
76
|
// Start the profiler again when session is renewed
|
|
71
77
|
lifeCycle.subscribe(LifeCycleEventType.SESSION_RENEWED, () => {
|
|
72
|
-
if (
|
|
73
|
-
|
|
78
|
+
if (
|
|
79
|
+
instance.state === 'stopped' &&
|
|
80
|
+
(instance.stateReason === 'session-expired' || instance.stateReason === 'quota_ko')
|
|
81
|
+
) {
|
|
82
|
+
const newSession = session.findTrackedSession()
|
|
83
|
+
if (
|
|
84
|
+
!newSession ||
|
|
85
|
+
!isSampled(
|
|
86
|
+
newSession.id,
|
|
87
|
+
correctedChildSampleRate(configuration.sessionSampleRate, configuration.profilingSampleRate)
|
|
88
|
+
)
|
|
89
|
+
) {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
start()
|
|
74
93
|
}
|
|
75
94
|
})
|
|
76
95
|
|
|
@@ -94,28 +113,57 @@ export function createRumProfiler(
|
|
|
94
113
|
|
|
95
114
|
// Add global clean-up tasks for listeners that are not specific to a profiler instance (eg. visibility change, before unload)
|
|
96
115
|
globalCleanupTasks.push(
|
|
97
|
-
addEventListener(
|
|
98
|
-
addEventListener(
|
|
116
|
+
addEventListener(window, DOM_EVENT.VISIBILITY_CHANGE, handleVisibilityChange).stop,
|
|
117
|
+
addEventListener(window, DOM_EVENT.BEFORE_UNLOAD, handleBeforeUnload).stop
|
|
99
118
|
)
|
|
100
119
|
|
|
101
120
|
// Start profiler instance
|
|
102
121
|
startNextProfilerInstance()
|
|
122
|
+
triggerQuotaCheck()
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function triggerQuotaCheck() {
|
|
126
|
+
if (canUseEventBridge()) {
|
|
127
|
+
// Quota check only in non-bridge mode.
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
// Optimistic: profiler already recording, only gates sending.
|
|
131
|
+
// Generation counter invalidates results from a prior session (incremented on each start() call).
|
|
132
|
+
// State guard handles within-session cancellation (user stop, session expiry, etc.).
|
|
133
|
+
const checkGeneration = ++quotaCheckGeneration
|
|
134
|
+
const sessionId = session.findTrackedSession()?.id
|
|
135
|
+
if (sessionId) {
|
|
136
|
+
mockable(checkProfilingQuota)(configuration, sessionId)
|
|
137
|
+
.then((result) => {
|
|
138
|
+
if (checkGeneration !== quotaCheckGeneration) {
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
if (instance.state !== 'running' && instance.state !== 'paused') {
|
|
142
|
+
return
|
|
143
|
+
}
|
|
144
|
+
if (result.decision === 'quota_ko') {
|
|
145
|
+
stopProfiling('quota_ko', result.reason)
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
.catch(monitorError)
|
|
149
|
+
}
|
|
103
150
|
}
|
|
104
151
|
|
|
105
152
|
// Public API to manually stop the profiler.
|
|
106
|
-
|
|
107
|
-
|
|
153
|
+
function stop() {
|
|
154
|
+
stopProfiling('stopped-by-user')
|
|
108
155
|
}
|
|
109
156
|
|
|
110
|
-
|
|
111
|
-
// Stop current profiler instance
|
|
112
|
-
|
|
157
|
+
function stopProfiling(reason: RumProfilerStoppedInstance['stateReason'], quotaReason?: QuotaReason) {
|
|
158
|
+
// Stop current profiler instance (data collection happens async in background)
|
|
159
|
+
stopProfilerInstance(reason)
|
|
113
160
|
|
|
114
|
-
// Cleanup global listeners
|
|
161
|
+
// Cleanup global listeners and reset the array to prevent accumulation across start/stop cycles
|
|
115
162
|
globalCleanupTasks.forEach((task) => task())
|
|
163
|
+
globalCleanupTasks.length = 0
|
|
116
164
|
|
|
117
165
|
// Update Profiling status once the Profiler has been stopped.
|
|
118
|
-
profilingContextManager.set({ status: 'stopped', error_reason: undefined })
|
|
166
|
+
profilingContextManager.set({ status: 'stopped', error_reason: undefined, quota_reason: quotaReason })
|
|
119
167
|
}
|
|
120
168
|
|
|
121
169
|
/**
|
|
@@ -156,22 +204,24 @@ export function createRumProfiler(
|
|
|
156
204
|
|
|
157
205
|
function startNextProfilerInstance(): void {
|
|
158
206
|
// These APIs might be unavailable in some browsers
|
|
159
|
-
const
|
|
207
|
+
const profilerConstructor = globalObject.Profiler
|
|
160
208
|
|
|
161
|
-
if (!
|
|
209
|
+
if (!profilerConstructor) {
|
|
162
210
|
profilingContextManager.set({ status: 'error', error_reason: 'not-supported-by-browser' })
|
|
163
211
|
throw new Error('RUM Profiler is not supported in this browser.')
|
|
164
212
|
}
|
|
165
213
|
|
|
166
|
-
//
|
|
167
|
-
|
|
214
|
+
// Collect data from previous running instance (fire-and-forget)
|
|
215
|
+
if (instance.state === 'running') {
|
|
216
|
+
collectProfilerInstance(instance)
|
|
217
|
+
}
|
|
168
218
|
|
|
169
219
|
const { cleanupTasks } = addEventListeners(instance)
|
|
170
220
|
|
|
171
221
|
let profiler: Profiler
|
|
172
222
|
try {
|
|
173
223
|
// We have to create new Profiler each time we start a new instance
|
|
174
|
-
profiler = new
|
|
224
|
+
profiler = new profilerConstructor({
|
|
175
225
|
sampleInterval: profilerConfiguration.sampleIntervalMs,
|
|
176
226
|
// Keep buffer size at 1.5 times of minimum required to collect data for a profiling instance
|
|
177
227
|
maxBufferSize: Math.round(
|
|
@@ -204,81 +254,118 @@ export function createRumProfiler(
|
|
|
204
254
|
views: [],
|
|
205
255
|
cleanupTasks,
|
|
206
256
|
longTasks: [],
|
|
257
|
+
sessionId: session.findTrackedSession()?.id,
|
|
207
258
|
}
|
|
208
259
|
|
|
209
260
|
// Add last view entry
|
|
210
261
|
collectViewEntry(lastViewEntry)
|
|
211
262
|
|
|
212
263
|
// Add event handler case we overflow the buffer
|
|
264
|
+
// eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper
|
|
213
265
|
profiler.addEventListener('samplebufferfull', handleSampleBufferFull)
|
|
214
266
|
}
|
|
215
267
|
|
|
216
|
-
|
|
217
|
-
if (lastInstance.state !== 'running') {
|
|
218
|
-
return
|
|
219
|
-
}
|
|
220
|
-
|
|
268
|
+
function collectProfilerInstance(runningInstance: RumProfilerRunningInstance) {
|
|
221
269
|
// Cleanup instance
|
|
222
|
-
clearTimeout(
|
|
223
|
-
|
|
270
|
+
clearTimeout(runningInstance.timeoutId)
|
|
271
|
+
// eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper
|
|
272
|
+
runningInstance.profiler.removeEventListener('samplebufferfull', handleSampleBufferFull)
|
|
224
273
|
|
|
225
274
|
// Store instance data snapshot in local variables to use in async callback
|
|
226
|
-
const { startClocks, views } =
|
|
275
|
+
const { startClocks, views, sessionId } = runningInstance
|
|
227
276
|
|
|
228
277
|
// Stop current profiler to get trace
|
|
229
|
-
|
|
278
|
+
runningInstance.profiler
|
|
230
279
|
.stop()
|
|
231
280
|
.then((trace) => {
|
|
232
281
|
const endClocks = clocksNow()
|
|
233
|
-
const
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
282
|
+
const duration = elapsed(startClocks.relative, endClocks.relative)
|
|
283
|
+
const longTasks = longTaskHistory.findAll(startClocks.relative, duration)
|
|
284
|
+
const actions = actionHistory.findAll(startClocks.relative, duration)
|
|
285
|
+
const vitals = vitalHistory.findAll(startClocks.relative, duration).map((vital) => ({
|
|
286
|
+
id: vital.id,
|
|
287
|
+
label: vital.label,
|
|
288
|
+
startClocks: vital.startClocks,
|
|
289
|
+
duration: vital.duration,
|
|
290
|
+
}))
|
|
291
|
+
const isBelowDurationThreshold = duration < profilerConfiguration.minProfileDurationMs
|
|
292
|
+
|
|
293
|
+
if (longTasks.length === 0 && isBelowDurationThreshold) {
|
|
239
294
|
// Skip very short profiles to reduce noise and cost, but keep them if they contain long tasks.
|
|
240
295
|
return
|
|
241
296
|
}
|
|
242
297
|
|
|
243
298
|
handleProfilerTrace(
|
|
244
|
-
// Enrich trace with time and instance data
|
|
245
|
-
Object.assign(trace, {
|
|
299
|
+
// Enrich trace with time and instance data — create new object to avoid mutating the raw trace
|
|
300
|
+
Object.assign({} as BrowserProfilerTrace, trace, {
|
|
246
301
|
startClocks,
|
|
247
302
|
endClocks,
|
|
248
303
|
clocksOrigin: clocksOrigin(),
|
|
249
304
|
longTasks,
|
|
305
|
+
actions,
|
|
306
|
+
vitals,
|
|
250
307
|
views,
|
|
251
308
|
sampleInterval: profilerConfiguration.sampleIntervalMs,
|
|
252
|
-
|
|
309
|
+
debugIds: buildProfilerDebugIds(trace.resources),
|
|
310
|
+
}),
|
|
311
|
+
sessionId
|
|
253
312
|
)
|
|
254
313
|
})
|
|
255
314
|
.catch(monitorError)
|
|
256
315
|
}
|
|
257
316
|
|
|
258
|
-
|
|
317
|
+
function stopProfilerInstance(stateReason: RumProfilerStoppedInstance['stateReason']) {
|
|
259
318
|
if (instance.state !== 'running') {
|
|
319
|
+
if (
|
|
320
|
+
// If paused, profiler data was already collected during pause, just update state
|
|
321
|
+
instance.state === 'paused' ||
|
|
322
|
+
// Update stateReason when already stopped and the user explicitly stops the profiler,
|
|
323
|
+
// so that SESSION_RENEWED does not override the user's intent.
|
|
324
|
+
(instance.state === 'stopped' && stateReason === 'stopped-by-user')
|
|
325
|
+
) {
|
|
326
|
+
instance = { state: 'stopped', stateReason }
|
|
327
|
+
}
|
|
328
|
+
|
|
260
329
|
return
|
|
261
330
|
}
|
|
262
|
-
|
|
331
|
+
|
|
332
|
+
// Capture the running instance before changing state
|
|
333
|
+
const runningInstance = instance
|
|
334
|
+
|
|
335
|
+
// Update state synchronously so SESSION_RENEWED check works immediately
|
|
263
336
|
instance = { state: 'stopped', stateReason }
|
|
264
|
-
}
|
|
265
337
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
338
|
+
// Cleanup instance-specific tasks (e.g., view listener)
|
|
339
|
+
runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())
|
|
340
|
+
|
|
341
|
+
if (stateReason === 'quota_ko') {
|
|
342
|
+
// Discard data — quota denied means we should not send anything
|
|
343
|
+
clearTimeout(runningInstance.timeoutId)
|
|
344
|
+
// eslint-disable-next-line local-rules/disallow-zone-js-patched-values -- FIXME use the `addEventListener` helper
|
|
345
|
+
runningInstance.profiler.removeEventListener('samplebufferfull', handleSampleBufferFull)
|
|
346
|
+
void runningInstance.profiler.stop().catch(monitorError)
|
|
347
|
+
} else {
|
|
348
|
+
// Collect and send profile data in background - doesn't block state transitions
|
|
349
|
+
collectProfilerInstance(runningInstance)
|
|
269
350
|
}
|
|
270
|
-
await onPauseOrStopProfilerInstance()
|
|
271
|
-
instance = { state: 'paused' }
|
|
272
351
|
}
|
|
273
352
|
|
|
274
|
-
|
|
353
|
+
function pauseProfilerInstance() {
|
|
275
354
|
if (instance.state !== 'running') {
|
|
276
355
|
return
|
|
277
356
|
}
|
|
278
|
-
// Cleanup tasks
|
|
279
|
-
instance.cleanupTasks.forEach((cleanupTask) => cleanupTask())
|
|
280
357
|
|
|
281
|
-
|
|
358
|
+
// Capture the running instance before changing state
|
|
359
|
+
const runningInstance = instance
|
|
360
|
+
|
|
361
|
+
// Update state synchronously
|
|
362
|
+
instance = { state: 'paused' }
|
|
363
|
+
|
|
364
|
+
// Cleanup instance-specific tasks
|
|
365
|
+
runningInstance.cleanupTasks.forEach((cleanupTask) => cleanupTask())
|
|
366
|
+
|
|
367
|
+
// Collect and send profile data in background
|
|
368
|
+
collectProfilerInstance(runningInstance)
|
|
282
369
|
}
|
|
283
370
|
|
|
284
371
|
function collectViewEntry(viewEntry: RumViewEntry | undefined): void {
|
|
@@ -290,12 +377,12 @@ export function createRumProfiler(
|
|
|
290
377
|
instance.views.push(viewEntry)
|
|
291
378
|
}
|
|
292
379
|
|
|
293
|
-
function handleProfilerTrace(trace:
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
380
|
+
function handleProfilerTrace(trace: BrowserProfilerTrace, sessionId: string | undefined): void {
|
|
381
|
+
const payload: ProfilingPayload = {
|
|
382
|
+
profile: buildProfileEvent(trace, configuration, sessionId),
|
|
383
|
+
trace,
|
|
384
|
+
}
|
|
385
|
+
emitPayload(payload)
|
|
299
386
|
}
|
|
300
387
|
|
|
301
388
|
function handleSampleBufferFull(): void {
|
|
@@ -308,7 +395,7 @@ export function createRumProfiler(
|
|
|
308
395
|
// paused by visibility change and stopped by user.
|
|
309
396
|
// If profiler is paused by the visibility change, we should resume when
|
|
310
397
|
// tab becomes visible again. That's not the case when user stops the profiler.
|
|
311
|
-
pauseProfilerInstance()
|
|
398
|
+
pauseProfilerInstance()
|
|
312
399
|
} else if (document.visibilityState === 'visible' && instance.state === 'paused') {
|
|
313
400
|
// Resume when tab becomes visible again
|
|
314
401
|
startNextProfilerInstance()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ClocksState, Duration } from '@kubesense/kubesense-js-core/time'
|
|
2
|
+
import { addDuration } from '@kubesense/kubesense-js-core/time'
|
|
3
|
+
import { createValueHistory, SESSION_TIME_OUT_DELAY } from '@kubesense/kubesense-browser-core'
|
|
4
|
+
import type { LifeCycle } from '@kubesense/kubesense-browser-rum-core'
|
|
5
|
+
import {
|
|
6
|
+
RumPerformanceEntryType,
|
|
7
|
+
LifeCycleEventType,
|
|
8
|
+
RumLongTaskEntryType,
|
|
9
|
+
} from '@kubesense/kubesense-browser-rum-core'
|
|
10
|
+
|
|
11
|
+
export const LONG_TASK_ID_HISTORY_EXPIRE_DELAY = SESSION_TIME_OUT_DELAY
|
|
12
|
+
|
|
13
|
+
export interface LongTaskContext {
|
|
14
|
+
id: string
|
|
15
|
+
startClocks: ClocksState
|
|
16
|
+
duration: Duration
|
|
17
|
+
entryType: RumPerformanceEntryType.LONG_ANIMATION_FRAME | RumPerformanceEntryType.LONG_TASK
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function createLongTaskHistory(lifeCycle: LifeCycle) {
|
|
21
|
+
const history = createValueHistory<LongTaskContext>({
|
|
22
|
+
expireDelay: LONG_TASK_ID_HISTORY_EXPIRE_DELAY,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
lifeCycle.subscribe(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, ({ rawRumEvent, startClocks, duration }) => {
|
|
26
|
+
if (rawRumEvent.type === 'long_task') {
|
|
27
|
+
history
|
|
28
|
+
.add(
|
|
29
|
+
{
|
|
30
|
+
id: rawRumEvent.long_task.id,
|
|
31
|
+
startClocks,
|
|
32
|
+
duration: duration!,
|
|
33
|
+
entryType:
|
|
34
|
+
rawRumEvent.long_task.entry_type === RumLongTaskEntryType.LONG_TASK
|
|
35
|
+
? RumPerformanceEntryType.LONG_TASK
|
|
36
|
+
: RumPerformanceEntryType.LONG_ANIMATION_FRAME,
|
|
37
|
+
},
|
|
38
|
+
startClocks.relative
|
|
39
|
+
)
|
|
40
|
+
.close(addDuration(startClocks.relative, duration!))
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
return history
|
|
45
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { buildDebugIdByUrl } from '@kubesense/kubesense-browser-core'
|
|
2
|
+
import type { ResourceDebugId } from '../../types'
|
|
3
|
+
|
|
4
|
+
export function buildProfilerDebugIds(resources: string[]): ResourceDebugId[] | undefined {
|
|
5
|
+
const debugIdByUrl = new Map(buildDebugIdByUrl(resources)?.map((entry) => [entry.url, entry.id]))
|
|
6
|
+
|
|
7
|
+
const debugIds: ResourceDebugId[] = []
|
|
8
|
+
|
|
9
|
+
resources.forEach((url, resourceId) => {
|
|
10
|
+
const debugId = debugIdByUrl.get(url)
|
|
11
|
+
if (debugId !== undefined) {
|
|
12
|
+
debugIds.push({ resourceId, debugId })
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
return debugIds.length ? debugIds : undefined
|
|
17
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SKIPPED } from '@kubesense/kubesense-js-core/assembly'
|
|
2
2
|
import type { Hooks, ProfilingInternalContextSchema } from '@kubesense/kubesense-browser-rum-core'
|
|
3
3
|
import { RumEventType } from '@kubesense/kubesense-browser-rum-core'
|
|
4
4
|
|
|
@@ -12,8 +12,13 @@ export function startProfilingContext(hooks: Hooks): ProfilingContextManager {
|
|
|
12
12
|
status: 'starting',
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
hooks.register(
|
|
16
|
-
if (
|
|
15
|
+
hooks.assembleEventDefaults.register(({ eventType }) => {
|
|
16
|
+
if (
|
|
17
|
+
eventType !== RumEventType.VIEW &&
|
|
18
|
+
eventType !== RumEventType.LONG_TASK &&
|
|
19
|
+
eventType !== RumEventType.ACTION &&
|
|
20
|
+
eventType !== RumEventType.VITAL
|
|
21
|
+
) {
|
|
17
22
|
return SKIPPED
|
|
18
23
|
}
|
|
19
24
|
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Profiler } from './types'
|
|
3
|
-
|
|
1
|
+
import { globalObject } from '@kubesense/kubesense-js-core/util'
|
|
4
2
|
export function isProfilingSupported(): boolean {
|
|
5
|
-
const globalThis = getGlobalObject()
|
|
6
|
-
|
|
7
3
|
// This API might be unavailable in some browsers
|
|
8
|
-
|
|
9
|
-
return globalThisProfiler !== undefined
|
|
4
|
+
return globalObject.Profiler !== undefined
|
|
10
5
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { fetch, setTimeout, clearTimeout } from '@kubesense/kubesense-browser-core'
|
|
2
|
+
import { buildEndpointUrl } from '@kubesense/kubesense-js-core/transport'
|
|
3
|
+
import type { RumConfiguration } from '@kubesense/kubesense-browser-rum-core'
|
|
4
|
+
|
|
5
|
+
// Reason strings surfaced on RUM events. Backend reasons backend_unavailable and
|
|
6
|
+
// backend_client_not_initialized are both normalised to backend_unavailable.
|
|
7
|
+
export type BackendQuotaReason = 'quota_ok' | 'quota_exceeded' | 'org_disabled' | 'backend_unavailable' | 'undefined'
|
|
8
|
+
|
|
9
|
+
// SDK-only reasons used when the backend is not reachable.
|
|
10
|
+
export type FrontendQuotaReason = 'timeout' | 'api-error'
|
|
11
|
+
|
|
12
|
+
export type QuotaReason = BackendQuotaReason | FrontendQuotaReason
|
|
13
|
+
|
|
14
|
+
export interface QuotaResult {
|
|
15
|
+
decision: 'quota_ok' | 'quota_ko'
|
|
16
|
+
reason: QuotaReason
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function parseQuotaResult(body: unknown, httpStatusFallback: QuotaResult): QuotaResult {
|
|
20
|
+
const attrs = (body as any)?.data?.attributes
|
|
21
|
+
if (!attrs || typeof attrs.admitted !== 'boolean' || typeof attrs.reason !== 'string') {
|
|
22
|
+
return httpStatusFallback
|
|
23
|
+
}
|
|
24
|
+
const reason: BackendQuotaReason =
|
|
25
|
+
attrs.reason === 'backend_client_not_initialized' ? 'backend_unavailable' : (attrs.reason as BackendQuotaReason)
|
|
26
|
+
return {
|
|
27
|
+
decision: attrs.admitted ? 'quota_ok' : 'quota_ko',
|
|
28
|
+
reason,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function buildQuotaUrl(configuration: RumConfiguration, sessionId: string): string {
|
|
33
|
+
return buildEndpointUrl({
|
|
34
|
+
proxy: configuration.proxy,
|
|
35
|
+
kubesenseRumEndpoint: configuration.kubesenseRumEndpoint,
|
|
36
|
+
path: '/rum/api/v1/profiling/quota',
|
|
37
|
+
parameters: `session_id=${sessionId}`,
|
|
38
|
+
subdomain: 'quota',
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function checkProfilingQuota(
|
|
43
|
+
configuration: RumConfiguration,
|
|
44
|
+
sessionId: string,
|
|
45
|
+
timeoutMs = 5000
|
|
46
|
+
): Promise<QuotaResult> {
|
|
47
|
+
const url = buildQuotaUrl(configuration, sessionId)
|
|
48
|
+
const controller = new AbortController()
|
|
49
|
+
|
|
50
|
+
let timeoutId: ReturnType<typeof setTimeout>
|
|
51
|
+
|
|
52
|
+
const fetchPromise = fetch(url, {
|
|
53
|
+
credentials: 'omit',
|
|
54
|
+
signal: controller.signal,
|
|
55
|
+
headers: new Headers({
|
|
56
|
+
'DD-CLIENT-TOKEN': configuration.clientToken,
|
|
57
|
+
}),
|
|
58
|
+
})
|
|
59
|
+
.then((response) => {
|
|
60
|
+
const statusFallback: QuotaResult =
|
|
61
|
+
response.status === 429
|
|
62
|
+
? { decision: 'quota_ko', reason: 'quota_exceeded' }
|
|
63
|
+
: { decision: 'quota_ok', reason: 'api-error' }
|
|
64
|
+
return response.json().then(
|
|
65
|
+
(body): QuotaResult => {
|
|
66
|
+
clearTimeout(timeoutId)
|
|
67
|
+
return parseQuotaResult(body, statusFallback)
|
|
68
|
+
},
|
|
69
|
+
(): QuotaResult => {
|
|
70
|
+
// Body unparseable — fall back to HTTP status
|
|
71
|
+
clearTimeout(timeoutId)
|
|
72
|
+
return statusFallback
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
})
|
|
76
|
+
.catch((): QuotaResult => {
|
|
77
|
+
clearTimeout(timeoutId)
|
|
78
|
+
return { decision: 'quota_ok', reason: 'api-error' }
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const timeoutPromise = new Promise<QuotaResult>((resolve) => {
|
|
82
|
+
timeoutId = setTimeout(() => {
|
|
83
|
+
controller.abort()
|
|
84
|
+
resolve({ decision: 'quota_ok', reason: 'timeout' })
|
|
85
|
+
}, timeoutMs)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return Promise.race([fetchPromise, timeoutPromise])
|
|
89
|
+
}
|