@kubesense/kubesense-browser-rum 1.8.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ONE_SECOND, elapsed, timeStampNow } from "@kubesense/kubesense-js-core/time";
|
|
2
|
+
//#region src/domain/segmentCollection/startDroppedSegmentRecovery.ts
|
|
3
|
+
/** The least time between two recovery snapshots. */
|
|
4
|
+
const DROPPED_SEGMENT_RECOVERY_INTERVAL = 30 * ONE_SECOND;
|
|
5
|
+
/**
|
|
6
|
+
* Takes a new full snapshot when a segment is lost to a network error.
|
|
7
|
+
*
|
|
8
|
+
* Every record after a lost segment builds on DOM the intake never received, so without a new
|
|
9
|
+
* snapshot the replay freezes on the last DOM it has until the next view starts one. Only a
|
|
10
|
+
* network error triggers it — an upload the intake rejected (401, 413) would see the snapshot
|
|
11
|
+
* rejected too — and at most once per interval, so a failing network costs one snapshot per
|
|
12
|
+
* interval rather than one per segment.
|
|
13
|
+
*/
|
|
14
|
+
function startDroppedSegmentRecovery(replayRequestObservable, takeFullSnapshot) {
|
|
15
|
+
let lastRecovery;
|
|
16
|
+
const { unsubscribe } = replayRequestObservable.subscribe((event) => {
|
|
17
|
+
if (event.type !== "dropped" || event.status !== 0) return;
|
|
18
|
+
const now = timeStampNow();
|
|
19
|
+
if (lastRecovery !== void 0 && elapsed(lastRecovery, now) < DROPPED_SEGMENT_RECOVERY_INTERVAL) return;
|
|
20
|
+
lastRecovery = now;
|
|
21
|
+
takeFullSnapshot();
|
|
22
|
+
});
|
|
23
|
+
return { stop: unsubscribe };
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { DROPPED_SEGMENT_RECOVERY_INTERVAL, startDroppedSegmentRecovery };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=startDroppedSegmentRecovery.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startDroppedSegmentRecovery.mjs","names":[],"sources":["../../../src/domain/segmentCollection/startDroppedSegmentRecovery.ts"],"sourcesContent":["import type { HttpRequestEvent, Observable } from '@kubesense/kubesense-browser-core'\nimport { elapsed, ONE_SECOND, timeStampNow } from '@kubesense/kubesense-js-core/time'\nimport type { TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport type { ReplayPayload } from './buildReplayPayload'\n\n/** The least time between two recovery snapshots. */\nexport const DROPPED_SEGMENT_RECOVERY_INTERVAL = 30 * ONE_SECOND\n\n/**\n * Takes a new full snapshot when a segment is lost to a network error.\n *\n * Every record after a lost segment builds on DOM the intake never received, so without a new\n * snapshot the replay freezes on the last DOM it has until the next view starts one. Only a\n * network error triggers it — an upload the intake rejected (401, 413) would see the snapshot\n * rejected too — and at most once per interval, so a failing network costs one snapshot per\n * interval rather than one per segment.\n */\nexport function startDroppedSegmentRecovery(\n replayRequestObservable: Observable<HttpRequestEvent<ReplayPayload>>,\n takeFullSnapshot: () => void\n) {\n let lastRecovery: TimeStamp | undefined\n\n const { unsubscribe } = replayRequestObservable.subscribe((event) => {\n if (event.type !== 'dropped' || event.status !== 0) {\n return\n }\n const now = timeStampNow()\n if (lastRecovery !== undefined && elapsed(lastRecovery, now) < DROPPED_SEGMENT_RECOVERY_INTERVAL) {\n return\n }\n lastRecovery = now\n takeFullSnapshot()\n })\n\n return { stop: unsubscribe }\n}\n"],"mappings":";;;AAMA,MAAa,oCAAoC,KAAK;;;;;;;;;;AAWtD,SAAgB,4BACd,yBACA,kBACA;CACA,IAAI;CAEJ,MAAM,EAAE,gBAAgB,wBAAwB,WAAW,UAAU;EACnE,IAAI,MAAM,SAAS,aAAa,MAAM,WAAW,GAC/C;EAEF,MAAM,MAAM,aAAa;EACzB,IAAI,iBAAiB,KAAA,KAAa,QAAQ,cAAc,GAAG,IAAI,mCAC7D;EAEF,eAAe;EACf,iBAAiB;CACnB,CAAC;CAED,OAAO,EAAE,MAAM,YAAY;AAC7B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { TelemetryMetrics, addTelemetryMetrics, noop } from "@kubesense/kubesense-browser-core";
|
|
2
|
+
//#region src/domain/segmentCollection/startSegmentTelemetry.ts
|
|
3
|
+
function startSegmentTelemetry(telemetry, requestObservable) {
|
|
4
|
+
if (!telemetry.metricsEnabled) return { stop: noop };
|
|
5
|
+
const { unsubscribe } = requestObservable.subscribe((requestEvent) => {
|
|
6
|
+
if (requestEvent.type === "failure" || requestEvent.type === "queue-full" || requestEvent.type === "success" && requestEvent.payload.isFullSnapshot) {
|
|
7
|
+
const metrics = createSegmentMetrics(requestEvent.type, requestEvent.bandwidth, requestEvent.payload);
|
|
8
|
+
addTelemetryMetrics(TelemetryMetrics.SEGMENT_METRICS_TELEMETRY_NAME, { metrics });
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
return { stop: unsubscribe };
|
|
12
|
+
}
|
|
13
|
+
function createSegmentMetrics(result, bandwidthStats, payload) {
|
|
14
|
+
return {
|
|
15
|
+
cssText: {
|
|
16
|
+
count: payload.cssText.count,
|
|
17
|
+
max: payload.cssText.max,
|
|
18
|
+
sum: payload.cssText.sum
|
|
19
|
+
},
|
|
20
|
+
encoding: {
|
|
21
|
+
fullSnapshot: "change",
|
|
22
|
+
incrementalSnapshot: "change"
|
|
23
|
+
},
|
|
24
|
+
isFullSnapshot: payload.isFullSnapshot,
|
|
25
|
+
ongoingRequests: {
|
|
26
|
+
count: bandwidthStats.ongoingRequestCount,
|
|
27
|
+
totalSize: bandwidthStats.ongoingByteCount
|
|
28
|
+
},
|
|
29
|
+
recordCount: payload.recordCount,
|
|
30
|
+
result,
|
|
31
|
+
serializationDuration: {
|
|
32
|
+
count: payload.serializationDuration.count,
|
|
33
|
+
max: payload.serializationDuration.max,
|
|
34
|
+
sum: payload.serializationDuration.sum
|
|
35
|
+
},
|
|
36
|
+
size: {
|
|
37
|
+
compressed: payload.bytesCount,
|
|
38
|
+
raw: payload.rawSize
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { startSegmentTelemetry };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=startSegmentTelemetry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startSegmentTelemetry.mjs","names":[],"sources":["../../../src/domain/segmentCollection/startSegmentTelemetry.ts"],"sourcesContent":["import type {\n BandwidthStats,\n Context,\n HttpRequestEvent,\n Observable,\n Telemetry,\n} from '@kubesense/kubesense-browser-core'\nimport { TelemetryMetrics, addTelemetryMetrics, noop } from '@kubesense/kubesense-browser-core'\nimport type { ReplayPayload } from './buildReplayPayload'\n\ninterface SegmentMetrics extends Context {\n cssText: {\n count: number\n max: number\n sum: number\n }\n encoding: {\n fullSnapshot: 'v1' | 'change'\n incrementalSnapshot: 'v1' | 'change'\n }\n isFullSnapshot: boolean\n ongoingRequests: {\n count: number\n totalSize: number\n }\n recordCount: number\n result: 'failure' | 'queue-full' | 'success'\n serializationDuration: {\n count: number\n max: number\n sum: number\n }\n size: {\n compressed: number\n raw: number\n }\n}\n\nexport function startSegmentTelemetry(\n telemetry: Telemetry,\n requestObservable: Observable<HttpRequestEvent<ReplayPayload>>\n) {\n if (!telemetry.metricsEnabled) {\n return { stop: noop }\n }\n\n const { unsubscribe } = requestObservable.subscribe((requestEvent) => {\n if (\n requestEvent.type === 'failure' ||\n requestEvent.type === 'queue-full' ||\n (requestEvent.type === 'success' && requestEvent.payload.isFullSnapshot)\n ) {\n const metrics = createSegmentMetrics(requestEvent.type, requestEvent.bandwidth, requestEvent.payload)\n // monitor-until: forever\n addTelemetryMetrics(TelemetryMetrics.SEGMENT_METRICS_TELEMETRY_NAME, { metrics })\n }\n })\n\n return {\n stop: unsubscribe,\n }\n}\n\nfunction createSegmentMetrics(\n result: SegmentMetrics['result'],\n bandwidthStats: BandwidthStats,\n payload: ReplayPayload\n): SegmentMetrics {\n return {\n cssText: {\n count: payload.cssText.count,\n max: payload.cssText.max,\n sum: payload.cssText.sum,\n },\n encoding: {\n fullSnapshot: 'change',\n incrementalSnapshot: 'change',\n },\n isFullSnapshot: payload.isFullSnapshot,\n ongoingRequests: {\n count: bandwidthStats.ongoingRequestCount,\n totalSize: bandwidthStats.ongoingByteCount,\n },\n recordCount: payload.recordCount,\n result,\n serializationDuration: {\n count: payload.serializationDuration.count,\n max: payload.serializationDuration.max,\n sum: payload.serializationDuration.sum,\n },\n size: {\n compressed: payload.bytesCount,\n raw: payload.rawSize,\n },\n }\n}\n"],"mappings":";;AAsCA,SAAgB,sBACd,WACA,mBACA;CACA,IAAI,CAAC,UAAU,gBACb,OAAO,EAAE,MAAM,KAAK;CAGtB,MAAM,EAAE,gBAAgB,kBAAkB,WAAW,iBAAiB;EACpE,IACE,aAAa,SAAS,aACtB,aAAa,SAAS,gBACrB,aAAa,SAAS,aAAa,aAAa,QAAQ,gBACzD;GACA,MAAM,UAAU,qBAAqB,aAAa,MAAM,aAAa,WAAW,aAAa,OAAO;GAEpG,oBAAoB,iBAAiB,gCAAgC,EAAE,QAAQ,CAAC;EAClF;CACF,CAAC;CAED,OAAO,EACL,MAAM,YACR;AACF;AAEA,SAAS,qBACP,QACA,gBACA,SACgB;CAChB,OAAO;EACL,SAAS;GACP,OAAO,QAAQ,QAAQ;GACvB,KAAK,QAAQ,QAAQ;GACrB,KAAK,QAAQ,QAAQ;EACvB;EACA,UAAU;GACR,cAAc;GACd,qBAAqB;EACvB;EACA,gBAAgB,QAAQ;EACxB,iBAAiB;GACf,OAAO,eAAe;GACtB,WAAW,eAAe;EAC5B;EACA,aAAa,QAAQ;EACrB;EACA,uBAAuB;GACrB,OAAO,QAAQ,sBAAsB;GACrC,KAAK,QAAQ,sBAAsB;GACnC,KAAK,QAAQ,sBAAsB;EACrC;EACA,MAAM;GACJ,YAAY,QAAQ;GACpB,KAAK,QAAQ;EACf;CACF;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getEventBridge } from "@kubesense/kubesense-browser-core";
|
|
2
|
+
//#region src/domain/startRecordBridge.ts
|
|
3
|
+
function startRecordBridge(viewHistory) {
|
|
4
|
+
const bridge = getEventBridge();
|
|
5
|
+
return { addRecord: (record) => {
|
|
6
|
+
const view = viewHistory.findView();
|
|
7
|
+
bridge.send("record", record, view.id);
|
|
8
|
+
} };
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { startRecordBridge };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=startRecordBridge.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startRecordBridge.mjs","names":[],"sources":["../../src/domain/startRecordBridge.ts"],"sourcesContent":["import { getEventBridge } from '@kubesense/kubesense-browser-core'\nimport type { ViewHistory } from '@kubesense/kubesense-browser-rum-core'\nimport type { BrowserRecord } from '../types'\n\nexport function startRecordBridge(viewHistory: ViewHistory) {\n const bridge = getEventBridge<'record', BrowserRecord>()!\n\n return {\n addRecord: (record: BrowserRecord) => {\n // Get the current active view, not at the time of the record, aligning with the segment logic.\n // This approach could potentially associate the record to an incorrect view, in case the record date is in the past (e.g. frustration records).\n // However the risk is minimal. We could address the issue when potential negative impact are identified.\n const view = viewHistory.findView()!\n bridge.send('record', record, view.id)\n },\n }\n}\n"],"mappings":";;AAIA,SAAgB,kBAAkB,aAA0B;CAC1D,MAAM,SAAS,eAAwC;CAEvD,OAAO,EACL,YAAY,WAA0B;EAIpC,MAAM,OAAO,YAAY,SAAS;EAClC,OAAO,KAAK,UAAU,QAAQ,KAAK,EAAE;CACvC,EACF;AACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TelemetryMetrics, addTelemetryMetrics, noop } from "@kubesense/kubesense-browser-core";
|
|
2
|
+
import { elapsed, timeStampNow } from "@kubesense/kubesense-js-core/time";
|
|
3
|
+
//#region src/domain/startRecorderInitTelemetry.ts
|
|
4
|
+
function startRecorderInitTelemetry(telemetry, observable) {
|
|
5
|
+
if (!telemetry.metricsEnabled) return { stop: noop };
|
|
6
|
+
let startContext;
|
|
7
|
+
let documentReadyDuration;
|
|
8
|
+
let recorderSettledDuration;
|
|
9
|
+
const { unsubscribe } = observable.subscribe((event) => {
|
|
10
|
+
switch (event.type) {
|
|
11
|
+
case "start":
|
|
12
|
+
startContext = {
|
|
13
|
+
forced: event.forced,
|
|
14
|
+
timestamp: timeStampNow()
|
|
15
|
+
};
|
|
16
|
+
documentReadyDuration = void 0;
|
|
17
|
+
recorderSettledDuration = void 0;
|
|
18
|
+
break;
|
|
19
|
+
case "document-ready":
|
|
20
|
+
if (startContext) documentReadyDuration = elapsed(startContext.timestamp, timeStampNow());
|
|
21
|
+
break;
|
|
22
|
+
case "recorder-settled":
|
|
23
|
+
if (startContext) recorderSettledDuration = elapsed(startContext.timestamp, timeStampNow());
|
|
24
|
+
break;
|
|
25
|
+
case "aborted":
|
|
26
|
+
case "deflate-encoder-load-failed":
|
|
27
|
+
case "recorder-load-failed":
|
|
28
|
+
case "succeeded":
|
|
29
|
+
unsubscribe();
|
|
30
|
+
if (startContext) addTelemetryMetrics(TelemetryMetrics.RECORDER_INIT_METRICS_TELEMETRY_NAME, { metrics: createRecorderInitMetrics(startContext.forced, recorderSettledDuration, elapsed(startContext.timestamp, timeStampNow()), event.type, documentReadyDuration) });
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return { stop: unsubscribe };
|
|
34
|
+
}
|
|
35
|
+
function createRecorderInitMetrics(forced, loadRecorderModuleDuration, recorderInitDuration, result, waitForDocReadyDuration) {
|
|
36
|
+
return {
|
|
37
|
+
forced,
|
|
38
|
+
loadRecorderModuleDuration,
|
|
39
|
+
recorderInitDuration,
|
|
40
|
+
result,
|
|
41
|
+
waitForDocReadyDuration
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { startRecorderInitTelemetry };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=startRecorderInitTelemetry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startRecorderInitTelemetry.mjs","names":[],"sources":["../../src/domain/startRecorderInitTelemetry.ts"],"sourcesContent":["import type { Context, Telemetry, Observable } from '@kubesense/kubesense-browser-core'\nimport { elapsed, timeStampNow } from '@kubesense/kubesense-js-core/time'\nimport type { Duration, TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport { TelemetryMetrics, addTelemetryMetrics, noop } from '@kubesense/kubesense-browser-core'\nimport type { RecorderInitEvent } from '../boot/postStartStrategy'\n\ntype RecorderInitResult = 'aborted' | 'deflate-encoder-load-failed' | 'recorder-load-failed' | 'succeeded'\n\nexport interface RecorderInitMetrics extends Context {\n forced: boolean\n loadRecorderModuleDuration: number | undefined\n recorderInitDuration: number\n result: RecorderInitResult\n waitForDocReadyDuration: number | undefined\n}\n\nexport function startRecorderInitTelemetry(telemetry: Telemetry, observable: Observable<RecorderInitEvent>) {\n if (!telemetry.metricsEnabled) {\n return { stop: noop }\n }\n\n let startContext:\n | {\n forced: boolean\n timestamp: TimeStamp\n }\n | undefined\n\n let documentReadyDuration: Duration | undefined\n let recorderSettledDuration: Duration | undefined\n\n const { unsubscribe } = observable.subscribe((event) => {\n switch (event.type) {\n case 'start':\n startContext = { forced: event.forced, timestamp: timeStampNow() }\n documentReadyDuration = undefined\n recorderSettledDuration = undefined\n break\n\n case 'document-ready':\n if (startContext) {\n documentReadyDuration = elapsed(startContext.timestamp, timeStampNow())\n }\n break\n\n case 'recorder-settled':\n if (startContext) {\n recorderSettledDuration = elapsed(startContext.timestamp, timeStampNow())\n }\n break\n\n case 'aborted':\n case 'deflate-encoder-load-failed':\n case 'recorder-load-failed':\n case 'succeeded':\n // Only send metrics for the first attempt at starting the recorder.\n unsubscribe()\n\n if (startContext) {\n // monitor-until: forever\n addTelemetryMetrics(TelemetryMetrics.RECORDER_INIT_METRICS_TELEMETRY_NAME, {\n metrics: createRecorderInitMetrics(\n startContext.forced,\n recorderSettledDuration,\n elapsed(startContext.timestamp, timeStampNow()),\n event.type,\n documentReadyDuration\n ),\n })\n }\n break\n }\n })\n\n return { stop: unsubscribe }\n}\n\nfunction createRecorderInitMetrics(\n forced: boolean,\n loadRecorderModuleDuration: Duration | undefined,\n recorderInitDuration: Duration,\n result: RecorderInitResult,\n waitForDocReadyDuration: Duration | undefined\n): RecorderInitMetrics {\n return {\n forced,\n loadRecorderModuleDuration,\n recorderInitDuration,\n result,\n waitForDocReadyDuration,\n }\n}\n"],"mappings":";;;AAgBA,SAAgB,2BAA2B,WAAsB,YAA2C;CAC1G,IAAI,CAAC,UAAU,gBACb,OAAO,EAAE,MAAM,KAAK;CAGtB,IAAI;CAOJ,IAAI;CACJ,IAAI;CAEJ,MAAM,EAAE,gBAAgB,WAAW,WAAW,UAAU;EACtD,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,eAAe;KAAE,QAAQ,MAAM;KAAQ,WAAW,aAAa;IAAE;IACjE,wBAAwB,KAAA;IACxB,0BAA0B,KAAA;IAC1B;GAEF,KAAK;IACH,IAAI,cACF,wBAAwB,QAAQ,aAAa,WAAW,aAAa,CAAC;IAExE;GAEF,KAAK;IACH,IAAI,cACF,0BAA0B,QAAQ,aAAa,WAAW,aAAa,CAAC;IAE1E;GAEF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IAEH,YAAY;IAEZ,IAAI,cAEF,oBAAoB,iBAAiB,sCAAsC,EACzE,SAAS,0BACP,aAAa,QACb,yBACA,QAAQ,aAAa,WAAW,aAAa,CAAC,GAC9C,MAAM,MACN,qBACF,EACF,CAAC;EAGP;CACF,CAAC;CAED,OAAO,EAAE,MAAM,YAAY;AAC7B;AAEA,SAAS,0BACP,QACA,4BACA,sBACA,QACA,yBACqB;CACrB,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChangeType, IncrementalSource, InputSelectionState, MediaInteractionType, MouseInteractionType, NodeType, PlaybackState, RecordType, SnapshotFormat, StringRole } from "../types/sessionReplayConstants.mjs";
|
|
2
|
+
import { createChangeDecoder } from "../domain/record/encoding/changeDecoder.mjs";
|
|
3
|
+
import { takeFullSnapshot, takeNodeSnapshot } from "../domain/record/internalApi.mjs";
|
|
4
|
+
import "../domain/record/index.mjs";
|
|
5
|
+
import { makeRecorderApi } from "../boot/recorderApi.mjs";
|
|
6
|
+
import { makeProfilerApi } from "../boot/profilerApi.mjs";
|
|
7
|
+
import { NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, PRIVACY_CLASS_PREFIX } from "@kubesense/kubesense-browser-rum-core";
|
|
8
|
+
export { ChangeType, IncrementalSource, InputSelectionState, MediaInteractionType, MouseInteractionType, NodePrivacyLevel, NodeType, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, PRIVACY_CLASS_PREFIX, PlaybackState, RecordType, SnapshotFormat, StringRole, createChangeDecoder, makeProfilerApi, makeRecorderApi, takeFullSnapshot, takeNodeSnapshot };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { makeRecorderApi } from "../boot/recorderApi.mjs";
|
|
2
|
+
import { makeProfilerApi } from "../boot/profilerApi.mjs";
|
|
3
|
+
import { makeRumPublicApi } from "@kubesense/kubesense-browser-rum-core";
|
|
4
|
+
import { DefaultPrivacyLevel } from "@kubesense/kubesense-browser-core";
|
|
5
|
+
//#region src/entries/internalSynthetics.ts
|
|
6
|
+
/**
|
|
7
|
+
* Entry point consumed by the KubeSense Synthetics worker to automatically inject a RUM SDK instance
|
|
8
|
+
* in test runs.
|
|
9
|
+
*
|
|
10
|
+
* WARNING: this module is not intended for public usages, and won't follow semver for breaking
|
|
11
|
+
* changes.
|
|
12
|
+
*/
|
|
13
|
+
const recorderApi = makeRecorderApi();
|
|
14
|
+
const profilerApi = makeProfilerApi();
|
|
15
|
+
const kubesenseSdk = makeRumPublicApi(recorderApi, profilerApi, {
|
|
16
|
+
ignoreInitIfSyntheticsWillInjectRum: false,
|
|
17
|
+
sdkName: "rum-synthetics"
|
|
18
|
+
});
|
|
19
|
+
//#endregion
|
|
20
|
+
export { DefaultPrivacyLevel, kubesenseSdk };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=internalSynthetics.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internalSynthetics.mjs","names":[],"sources":["../../src/entries/internalSynthetics.ts"],"sourcesContent":["/**\n * Entry point consumed by the KubeSense Synthetics worker to automatically inject a RUM SDK instance\n * in test runs.\n *\n * WARNING: this module is not intended for public usages, and won't follow semver for breaking\n * changes.\n */\nimport { makeRumPublicApi } from '@kubesense/kubesense-browser-rum-core'\nimport { makeRecorderApi } from '../boot/recorderApi'\nimport { makeProfilerApi } from '../boot/profilerApi'\n\nexport { DefaultPrivacyLevel } from '@kubesense/kubesense-browser-core'\n\n// Disable the rule that forbids potential side effects, because we know that those functions don't\n// have side effects.\n/* eslint-disable local-rules/disallow-side-effects */\nconst recorderApi = makeRecorderApi()\nconst profilerApi = makeProfilerApi()\nexport const kubesenseSdk = makeRumPublicApi(recorderApi, profilerApi, {\n ignoreInitIfSyntheticsWillInjectRum: false,\n sdkName: 'rum-synthetics',\n})\n/* eslint-enable local-rules/disallow-side-effects */\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,cAAc,gBAAgB;AACpC,MAAM,cAAc,gBAAgB;AACpC,MAAa,eAAe,iBAAiB,aAAa,aAAa;CACrE,qCAAqC;CACrC,SAAS;AACX,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createDeflateEncoder } from "../domain/deflate/deflateEncoder.mjs";
|
|
2
|
+
import { startDeflateWorker } from "../domain/deflate/deflateWorker.mjs";
|
|
3
|
+
import "../domain/deflate/index.mjs";
|
|
4
|
+
import { makeRecorderApi } from "../boot/recorderApi.mjs";
|
|
5
|
+
import { makeProfilerApi } from "../boot/profilerApi.mjs";
|
|
6
|
+
import { CanvasRecordingQuality, DEFAULT_TRACKED_RESOURCE_HEADERS, makeRumPublicApi } from "@kubesense/kubesense-browser-rum-core";
|
|
7
|
+
import { DefaultPrivacyLevel, defineGlobal } from "@kubesense/kubesense-browser-core";
|
|
8
|
+
import { globalObject } from "@kubesense/kubesense-js-core/util";
|
|
9
|
+
//#region src/entries/main.ts
|
|
10
|
+
/**
|
|
11
|
+
* KubeSense Browser RUM SDK - Full version with Session Replay and Real User Profiling capabilities.
|
|
12
|
+
* Use this package to monitor your web application's performance and user experience.
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
* @see [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser/)
|
|
16
|
+
*/
|
|
17
|
+
const recorderApi = makeRecorderApi();
|
|
18
|
+
const profilerApi = makeProfilerApi();
|
|
19
|
+
/**
|
|
20
|
+
* The global RUM instance. Use this to call RUM methods.
|
|
21
|
+
*
|
|
22
|
+
* @category Main
|
|
23
|
+
* @see {@link KubesenseSdk}
|
|
24
|
+
* @see [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser/)
|
|
25
|
+
*/
|
|
26
|
+
const kubesenseSdk = makeRumPublicApi(recorderApi, profilerApi, {
|
|
27
|
+
startDeflateWorker,
|
|
28
|
+
createDeflateEncoder,
|
|
29
|
+
sdkName: "rum"
|
|
30
|
+
});
|
|
31
|
+
defineGlobal(globalObject, "KUBESENSE_SDK", kubesenseSdk);
|
|
32
|
+
//#endregion
|
|
33
|
+
export { CanvasRecordingQuality, DEFAULT_TRACKED_RESOURCE_HEADERS, DefaultPrivacyLevel, kubesenseSdk };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=main.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.mjs","names":[],"sources":["../../src/entries/main.ts"],"sourcesContent":["/**\n * KubeSense Browser RUM SDK - Full version with Session Replay and Real User Profiling capabilities.\n * Use this package to monitor your web application's performance and user experience.\n *\n * @packageDocumentation\n * @see [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser/)\n */\n\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\n// Keep the following in sync with packages/rum-slim/src/entries/main.ts\nimport { defineGlobal } from '@kubesense/kubesense-browser-core'\nimport type { RumPublicApi } from '@kubesense/kubesense-browser-rum-core'\nimport { makeRumPublicApi } from '@kubesense/kubesense-browser-rum-core'\nimport { makeRecorderApi } from '../boot/recorderApi'\nimport { createDeflateEncoder, startDeflateWorker } from '../domain/deflate'\nimport { makeProfilerApi } from '../boot/profilerApi'\n\nexport type {\n User,\n Account,\n TraceContextInjection,\n SessionPersistence,\n TrackingConsent,\n MatchOption,\n Context,\n ContextValue,\n ContextArray,\n RumInternalContext,\n} from '@kubesense/kubesense-browser-core'\nexport { DefaultPrivacyLevel } from '@kubesense/kubesense-browser-core'\nexport type { ProxyFn, Site } from '@kubesense/kubesense-js-core/transport'\n\n/**\n * @deprecated Use {@link KubesenseSdk} instead\n */\nexport type RumGlobal = RumPublicApi\n\nexport type {\n RumPublicApi as KubesenseSdk,\n RumInitConfiguration,\n RumBeforeSend,\n ViewOptions,\n StartRecordingOptions,\n AddDurationVitalOptions,\n DurationVitalOptions,\n OperationOptions,\n FeatureOperationOptions,\n FailureReason,\n ActionOptions,\n ResourceOptions,\n ResourceStopOptions,\n TracingOption,\n RumPlugin,\n OnRumStartOptions,\n RumPluginOnInitOptions,\n PropagatorType,\n FeatureFlagsForEvents,\n MatchHeader,\n\n // Events\n CommonProperties,\n RumEvent,\n RumActionEvent,\n RumErrorEvent,\n RumLongTaskEvent,\n RumResourceEvent,\n RumViewEvent,\n RumViewUpdateEvent,\n RumVitalEvent,\n\n // Events context\n RumEventDomainContext,\n RumViewEventDomainContext,\n RumErrorEventDomainContext,\n RumActionEventDomainContext,\n RumVitalEventDomainContext,\n RumResourceEventDomainContext,\n RumWebSocketResourceEventDomainContext,\n RumLongTaskEventDomainContext,\n} from '@kubesense/kubesense-browser-rum-core'\n\nexport { DEFAULT_TRACKED_RESOURCE_HEADERS, CanvasRecordingQuality } from '@kubesense/kubesense-browser-rum-core'\n\nconst recorderApi = makeRecorderApi()\n\nconst profilerApi = makeProfilerApi()\n\n/**\n * The global RUM instance. Use this to call RUM methods.\n *\n * @category Main\n * @see {@link KubesenseSdk}\n * @see [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser/)\n */\nexport const kubesenseSdk = makeRumPublicApi(recorderApi, profilerApi, {\n startDeflateWorker,\n createDeflateEncoder,\n sdkName: 'rum',\n})\n\ninterface BrowserWindow {\n KUBESENSE_SDK?: RumPublicApi\n}\ndefineGlobal(globalObject as BrowserWindow, 'KUBESENSE_SDK', kubesenseSdk)\n"],"mappings":";;;;;;;;;;;;;;;;AAmFA,MAAM,cAAc,gBAAgB;AAEpC,MAAM,cAAc,gBAAgB;;;;;;;;AASpC,MAAa,eAAe,iBAAiB,aAAa,aAAa;CACrE;CACA;CACA,SAAS;AACX,CAAC;AAKD,aAAa,cAA+B,iBAAiB,YAAY"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
//#region src/types/sessionReplayConstants.ts
|
|
2
|
+
const RecordType = {
|
|
3
|
+
FullSnapshot: 2,
|
|
4
|
+
IncrementalSnapshot: 3,
|
|
5
|
+
Meta: 4,
|
|
6
|
+
Focus: 6,
|
|
7
|
+
ViewEnd: 7,
|
|
8
|
+
VisualViewport: 8,
|
|
9
|
+
FrustrationRecord: 9,
|
|
10
|
+
Change: 12
|
|
11
|
+
};
|
|
12
|
+
const NodeType = {
|
|
13
|
+
Document: 0,
|
|
14
|
+
DocumentType: 1,
|
|
15
|
+
Element: 2,
|
|
16
|
+
Text: 3,
|
|
17
|
+
CDATA: 4,
|
|
18
|
+
DocumentFragment: 11
|
|
19
|
+
};
|
|
20
|
+
const ChangeType = {
|
|
21
|
+
AddString: 0,
|
|
22
|
+
AddNode: 1,
|
|
23
|
+
RemoveNode: 2,
|
|
24
|
+
Attribute: 3,
|
|
25
|
+
Text: 4,
|
|
26
|
+
Size: 5,
|
|
27
|
+
ScrollPosition: 6,
|
|
28
|
+
AddStyleSheet: 7,
|
|
29
|
+
AttachedStyleSheets: 8,
|
|
30
|
+
MediaPlaybackState: 9,
|
|
31
|
+
VisualViewport: 10,
|
|
32
|
+
AddRoleAnnotatedStrings: 11,
|
|
33
|
+
InputValue: 12,
|
|
34
|
+
InputSelection: 13,
|
|
35
|
+
ClearStrings: 14,
|
|
36
|
+
ImageContent: 15
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The role that a string in the string table plays on the page. A role says what kind of data the
|
|
40
|
+
* string holds, which lets the intake store strings with similar content together, and lets it
|
|
41
|
+
* redact them according to their kind.
|
|
42
|
+
*/
|
|
43
|
+
const StringRole = {
|
|
44
|
+
Default: 0,
|
|
45
|
+
NodeName: 1,
|
|
46
|
+
AttributeName: 2,
|
|
47
|
+
AttributeValue: 3,
|
|
48
|
+
TextContent: 4,
|
|
49
|
+
FormInput: 5,
|
|
50
|
+
Css: 6,
|
|
51
|
+
Url: 7,
|
|
52
|
+
ResourceId: 8
|
|
53
|
+
};
|
|
54
|
+
/** The selection state of a checkbox, radio button, or `<option>`. */
|
|
55
|
+
const InputSelectionState = {
|
|
56
|
+
Selected: 0,
|
|
57
|
+
Deselected: 1,
|
|
58
|
+
Indeterminate: 2
|
|
59
|
+
};
|
|
60
|
+
const PlaybackState = {
|
|
61
|
+
Playing: 0,
|
|
62
|
+
Paused: 1
|
|
63
|
+
};
|
|
64
|
+
const IncrementalSource = {
|
|
65
|
+
Mutation: 0,
|
|
66
|
+
MouseMove: 1,
|
|
67
|
+
MouseInteraction: 2,
|
|
68
|
+
Scroll: 3,
|
|
69
|
+
ViewportResize: 4,
|
|
70
|
+
Input: 5,
|
|
71
|
+
TouchMove: 6,
|
|
72
|
+
MediaInteraction: 7,
|
|
73
|
+
StyleSheetRule: 8
|
|
74
|
+
};
|
|
75
|
+
const MouseInteractionType = {
|
|
76
|
+
MouseUp: 0,
|
|
77
|
+
MouseDown: 1,
|
|
78
|
+
Click: 2,
|
|
79
|
+
ContextMenu: 3,
|
|
80
|
+
DblClick: 4,
|
|
81
|
+
Focus: 5,
|
|
82
|
+
Blur: 6,
|
|
83
|
+
TouchStart: 7,
|
|
84
|
+
TouchEnd: 9
|
|
85
|
+
};
|
|
86
|
+
const MediaInteractionType = {
|
|
87
|
+
Play: 0,
|
|
88
|
+
Pause: 1
|
|
89
|
+
};
|
|
90
|
+
const SnapshotFormat = {
|
|
91
|
+
V1: 0,
|
|
92
|
+
Change: 1
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
export { ChangeType, IncrementalSource, InputSelectionState, MediaInteractionType, MouseInteractionType, NodeType, PlaybackState, RecordType, SnapshotFormat, StringRole };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=sessionReplayConstants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionReplayConstants.mjs","names":[],"sources":["../../src/types/sessionReplayConstants.ts"],"sourcesContent":["import type * as SessionReplay from './sessionReplay'\n\nexport const RecordType: {\n FullSnapshot: SessionReplay.BrowserFullSnapshotRecord['type']\n IncrementalSnapshot: SessionReplay.BrowserIncrementalSnapshotRecord['type']\n Meta: SessionReplay.MetaRecord['type']\n Focus: SessionReplay.FocusRecord['type']\n ViewEnd: SessionReplay.ViewEndRecord['type']\n VisualViewport: SessionReplay.VisualViewportRecord['type']\n FrustrationRecord: SessionReplay.FrustrationRecord['type']\n Change: SessionReplay.BrowserChangeRecord['type']\n} = {\n FullSnapshot: 2,\n IncrementalSnapshot: 3,\n Meta: 4,\n Focus: 6,\n ViewEnd: 7,\n VisualViewport: 8,\n FrustrationRecord: 9,\n Change: 12,\n} as const\n\nexport type RecordType = (typeof RecordType)[keyof typeof RecordType]\n\nexport const NodeType: {\n Document: SessionReplay.DocumentNode['type']\n DocumentType: SessionReplay.DocumentTypeNode['type']\n Element: SessionReplay.ElementNode['type']\n Text: SessionReplay.TextNode['type']\n CDATA: SessionReplay.CDataNode['type']\n DocumentFragment: SessionReplay.DocumentFragmentNode['type']\n} = {\n Document: 0,\n DocumentType: 1,\n Element: 2,\n Text: 3,\n CDATA: 4,\n DocumentFragment: 11,\n} as const\n\nexport type NodeType = (typeof NodeType)[keyof typeof NodeType]\n\n// ChangeTypeId evaluates to Id if [Id, ...Data[]] is a valid variant of Change;\n// otherwise, it triggers a compile-time error.\ntype ChangeTypeId<Id, Data> = [Id, ...Data[]] extends SessionReplay.Change ? Id : never\n\n// DatalessChangeTypeId is ChangeTypeId for changes which carry no data.\ntype DatalessChangeTypeId<Id> = [Id] extends SessionReplay.Change ? Id : never\n\nexport const ChangeType: {\n AddString: ChangeTypeId<0, SessionReplay.AddStringChange>\n AddNode: ChangeTypeId<1, SessionReplay.AddNodeChange>\n RemoveNode: ChangeTypeId<2, SessionReplay.RemoveNodeChange>\n Attribute: ChangeTypeId<3, SessionReplay.AttributeChange>\n Text: ChangeTypeId<4, SessionReplay.TextChange>\n Size: ChangeTypeId<5, SessionReplay.SizeChange>\n ScrollPosition: ChangeTypeId<6, SessionReplay.ScrollPositionChange>\n AddStyleSheet: ChangeTypeId<7, SessionReplay.AddStyleSheetChange>\n AttachedStyleSheets: ChangeTypeId<8, SessionReplay.AttachedStyleSheetsChange>\n MediaPlaybackState: ChangeTypeId<9, SessionReplay.MediaPlaybackStateChange>\n VisualViewport: ChangeTypeId<10, SessionReplay.VisualViewportChange>\n AddRoleAnnotatedStrings: ChangeTypeId<11, SessionReplay.AddRoleAnnotatedStringsChange>\n InputValue: ChangeTypeId<12, SessionReplay.InputValueChange>\n InputSelection: ChangeTypeId<13, SessionReplay.InputSelectionChange>\n ClearStrings: DatalessChangeTypeId<14>\n ImageContent: ChangeTypeId<15, SessionReplay.ImageContentChange>\n} = {\n AddString: 0,\n AddNode: 1,\n RemoveNode: 2,\n Attribute: 3,\n Text: 4,\n Size: 5,\n ScrollPosition: 6,\n AddStyleSheet: 7,\n AttachedStyleSheets: 8,\n MediaPlaybackState: 9,\n VisualViewport: 10,\n AddRoleAnnotatedStrings: 11,\n InputValue: 12,\n InputSelection: 13,\n ClearStrings: 14,\n ImageContent: 15,\n} as const\n\nexport type ChangeType = (typeof ChangeType)[keyof typeof ChangeType]\n\n/**\n * The role that a string in the string table plays on the page. A role says what kind of data the\n * string holds, which lets the intake store strings with similar content together, and lets it\n * redact them according to their kind.\n */\nexport const StringRole: {\n Default: SessionReplay.StringRoleDefault\n NodeName: SessionReplay.StringRoleNodeName\n AttributeName: SessionReplay.StringRoleAttributeName\n AttributeValue: SessionReplay.StringRoleAttributeValue\n TextContent: SessionReplay.StringRoleTextContent\n FormInput: SessionReplay.StringRoleFormInput\n Css: SessionReplay.StringRoleCSS\n Url: SessionReplay.StringRoleURL\n ResourceId: SessionReplay.StringRoleResourceId\n} = {\n Default: 0,\n NodeName: 1,\n AttributeName: 2,\n AttributeValue: 3,\n TextContent: 4,\n FormInput: 5,\n Css: 6,\n Url: 7,\n ResourceId: 8,\n} as const\n\nexport type StringRole = (typeof StringRole)[keyof typeof StringRole]\n\n/** The selection state of a checkbox, radio button, or `<option>`. */\nexport const InputSelectionState: {\n Selected: SessionReplay.InputSelectionStateSelected\n Deselected: SessionReplay.InputSelectionStateDeselected\n Indeterminate: SessionReplay.InputSelectionStateIndeterminate\n} = {\n Selected: 0,\n Deselected: 1,\n Indeterminate: 2,\n} as const\n\nexport type InputSelectionState = (typeof InputSelectionState)[keyof typeof InputSelectionState]\n\nexport const PlaybackState: {\n Playing: SessionReplay.PlaybackStatePlaying\n Paused: SessionReplay.PlaybackStatePaused\n} = {\n Playing: 0,\n Paused: 1,\n} as const\n\nexport type PlaybackState = (typeof PlaybackState)[keyof typeof PlaybackState]\n\nexport const IncrementalSource: {\n Mutation: SessionReplay.BrowserMutationData['source']\n MouseMove: Exclude<SessionReplay.MousemoveData['source'], 6>\n MouseInteraction: SessionReplay.MouseInteractionData['source']\n Scroll: SessionReplay.ScrollData['source']\n ViewportResize: SessionReplay.ViewportResizeData['source']\n Input: SessionReplay.InputData['source']\n TouchMove: Exclude<SessionReplay.MousemoveData['source'], 1>\n MediaInteraction: SessionReplay.MediaInteractionData['source']\n StyleSheetRule: SessionReplay.StyleSheetRuleData['source']\n} = {\n Mutation: 0,\n MouseMove: 1,\n MouseInteraction: 2,\n Scroll: 3,\n ViewportResize: 4,\n Input: 5,\n TouchMove: 6,\n MediaInteraction: 7,\n StyleSheetRule: 8,\n // CanvasMutation : 9,\n // Font : 10,\n} as const\n\nexport type IncrementalSource = (typeof IncrementalSource)[keyof typeof IncrementalSource]\n\nexport const MouseInteractionType = {\n MouseUp: 0,\n MouseDown: 1,\n Click: 2,\n ContextMenu: 3,\n DblClick: 4,\n Focus: 5,\n Blur: 6,\n TouchStart: 7,\n TouchEnd: 9,\n} as const\n\nexport type MouseInteractionType = (typeof MouseInteractionType)[keyof typeof MouseInteractionType]\n\nexport const MediaInteractionType = {\n Play: 0,\n Pause: 1,\n} as const\n\nexport type MediaInteractionType = (typeof MediaInteractionType)[keyof typeof MediaInteractionType]\n\nexport const SnapshotFormat: {\n V1: SessionReplay.SnapshotFormatV1\n Change: SessionReplay.SnapshotFormatChange\n} = {\n V1: 0,\n Change: 1,\n} as const\n\nexport type SnapshotFormat = (typeof SnapshotFormat)[keyof typeof SnapshotFormat]\n"],"mappings":";AAEA,MAAa,aAST;CACF,cAAc;CACd,qBAAqB;CACrB,MAAM;CACN,OAAO;CACP,SAAS;CACT,gBAAgB;CAChB,mBAAmB;CACnB,QAAQ;AACV;AAIA,MAAa,WAOT;CACF,UAAU;CACV,cAAc;CACd,SAAS;CACT,MAAM;CACN,OAAO;CACP,kBAAkB;AACpB;AAWA,MAAa,aAiBT;CACF,WAAW;CACX,SAAS;CACT,YAAY;CACZ,WAAW;CACX,MAAM;CACN,MAAM;CACN,gBAAgB;CAChB,eAAe;CACf,qBAAqB;CACrB,oBAAoB;CACpB,gBAAgB;CAChB,yBAAyB;CACzB,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,cAAc;AAChB;;;;;;AASA,MAAa,aAUT;CACF,SAAS;CACT,UAAU;CACV,eAAe;CACf,gBAAgB;CAChB,aAAa;CACb,WAAW;CACX,KAAK;CACL,KAAK;CACL,YAAY;AACd;;AAKA,MAAa,sBAIT;CACF,UAAU;CACV,YAAY;CACZ,eAAe;AACjB;AAIA,MAAa,gBAGT;CACF,SAAS;CACT,QAAQ;AACV;AAIA,MAAa,oBAUT;CACF,UAAU;CACV,WAAW;CACX,kBAAkB;CAClB,QAAQ;CACR,gBAAgB;CAChB,OAAO;CACP,WAAW;CACX,kBAAkB;CAClB,gBAAgB;AAGlB;AAIA,MAAa,uBAAuB;CAClC,SAAS;CACT,WAAW;CACX,OAAO;CACP,aAAa;CACb,UAAU;CACV,OAAO;CACP,MAAM;CACN,YAAY;CACZ,UAAU;AACZ;AAIA,MAAa,uBAAuB;CAClC,MAAM;CACN,OAAO;AACT;AAIA,MAAa,iBAGT;CACF,IAAI;CACJ,QAAQ;AACV"}
|
package/internal/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubesense/kubesense-browser-rum",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Kubesense Real User Monitoring (RUM) SDK for the browser — tracks views, actions, resources, errors, Core Web Vitals, plus Session Replay and Profiling.",
|
|
5
|
-
"license": "Apache-2.0",
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
6
4
|
"keywords": [
|
|
7
5
|
"kubesense",
|
|
8
6
|
"browser",
|
|
@@ -17,19 +15,33 @@
|
|
|
17
15
|
"user-monitoring",
|
|
18
16
|
"telemetry"
|
|
19
17
|
],
|
|
18
|
+
"description": "Kubesense Real User Monitoring (RUM) SDK for the browser — tracks views, actions, resources, errors, Core Web Vitals, plus Session Replay and Profiling.",
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
20
|
"main": "cjs/entries/main.js",
|
|
21
|
-
"module": "esm/entries/main.
|
|
21
|
+
"module": "esm/entries/main.mjs",
|
|
22
22
|
"types": "cjs/entries/main.d.ts",
|
|
23
|
+
"files": [
|
|
24
|
+
"bundle/**/*.js",
|
|
25
|
+
"cjs",
|
|
26
|
+
"esm",
|
|
27
|
+
"src",
|
|
28
|
+
"internal",
|
|
29
|
+
"internal-synthetics",
|
|
30
|
+
"!src/**/*.spec.ts",
|
|
31
|
+
"!src/**/*.specHelper.ts"
|
|
32
|
+
],
|
|
23
33
|
"scripts": {
|
|
24
|
-
"build": "node ../../scripts/build/build-package.ts --modules --bundle kubesense-rum.js",
|
|
25
|
-
"build:bundle": "node ../../scripts/build/build-package.ts --bundle kubesense-rum.js"
|
|
34
|
+
"build": "node ../../scripts/build/build-package.ts --modules --worker-string --bundle kubesense-rum.js",
|
|
35
|
+
"build:bundle": "node ../../scripts/build/build-package.ts --worker-string --bundle kubesense-rum.js",
|
|
36
|
+
"prepack": "yarn build"
|
|
26
37
|
},
|
|
27
38
|
"dependencies": {
|
|
28
|
-
"@kubesense/kubesense-browser-core": "
|
|
29
|
-
"@kubesense/kubesense-browser-rum-core": "
|
|
39
|
+
"@kubesense/kubesense-browser-core": "2.0.0-beta.1",
|
|
40
|
+
"@kubesense/kubesense-browser-rum-core": "2.0.0-beta.1",
|
|
41
|
+
"@kubesense/kubesense-js-core": "2.0.0-beta.1"
|
|
30
42
|
},
|
|
31
43
|
"peerDependencies": {
|
|
32
|
-
"@kubesense/kubesense-browser-logs": "
|
|
44
|
+
"@kubesense/kubesense-browser-logs": "2.0.0-beta.1"
|
|
33
45
|
},
|
|
34
46
|
"peerDependenciesMeta": {
|
|
35
47
|
"@kubesense/kubesense-browser-logs": {
|
|
@@ -38,18 +50,17 @@
|
|
|
38
50
|
},
|
|
39
51
|
"repository": {
|
|
40
52
|
"type": "git",
|
|
41
|
-
"url": "https://github.com/kubesense-ai/kubesense-browser-sdk.git",
|
|
53
|
+
"url": "git+https://github.com/kubesense-ai/kubesense-browser-sdk.git",
|
|
42
54
|
"directory": "packages/rum"
|
|
43
55
|
},
|
|
44
56
|
"devDependencies": {
|
|
45
|
-
"@
|
|
46
|
-
"pako": "
|
|
57
|
+
"@kubesense/kubesense-browser-worker": "2.0.0-beta.1",
|
|
58
|
+
"pako": "3.0.1"
|
|
47
59
|
},
|
|
48
60
|
"volta": {
|
|
49
61
|
"extends": "../../package.json"
|
|
50
62
|
},
|
|
51
63
|
"publishConfig": {
|
|
52
64
|
"access": "public"
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { HttpRequest, DeflateEncoder, Telemetry, SessionManager } from '@kubesense/kubesense-browser-core'
|
|
2
|
+
import {
|
|
3
|
+
createHttpRequest,
|
|
4
|
+
addTelemetryDebug,
|
|
5
|
+
canUseEventBridge,
|
|
6
|
+
noop,
|
|
7
|
+
ErrorSource,
|
|
8
|
+
DEFAULT_ERROR_TYPE,
|
|
9
|
+
} from '@kubesense/kubesense-browser-core'
|
|
10
|
+
import { clocksNow } from '@kubesense/kubesense-js-core/time'
|
|
11
|
+
import { createEndpointBuilder } from '@kubesense/kubesense-js-core/transport'
|
|
12
|
+
import type { LifeCycle, ViewHistory, RumConfiguration } from '@kubesense/kubesense-browser-rum-core'
|
|
13
|
+
import { LifeCycleEventType } from '@kubesense/kubesense-browser-rum-core'
|
|
14
|
+
|
|
15
|
+
import type { EmitResourceCallback, SerializationStats } from '../domain/record'
|
|
16
|
+
import { record } from '../domain/record'
|
|
17
|
+
import type { ReplayPayload, ResourcePayload } from '../domain/segmentCollection'
|
|
18
|
+
import {
|
|
19
|
+
startDroppedSegmentRecovery,
|
|
20
|
+
startSegmentCollection,
|
|
21
|
+
SEGMENT_BYTES_LIMIT,
|
|
22
|
+
startSegmentTelemetry,
|
|
23
|
+
startReplayResourceCollection,
|
|
24
|
+
} from '../domain/segmentCollection'
|
|
25
|
+
import type { BrowserRecord } from '../types'
|
|
26
|
+
import { startRecordBridge } from '../domain/startRecordBridge'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Retries for a replay upload — segment or canvas frame — that failed with a network error. Unlike a
|
|
30
|
+
* lost RUM batch, a lost segment breaks the rest of its view's replay, which builds on the DOM it
|
|
31
|
+
* carried, and a lost frame leaves its canvas blank until the next one.
|
|
32
|
+
*/
|
|
33
|
+
const REPLAY_NETWORK_ERROR_RETRIES = 3
|
|
34
|
+
|
|
35
|
+
export function startRecording(
|
|
36
|
+
lifeCycle: LifeCycle,
|
|
37
|
+
configuration: RumConfiguration,
|
|
38
|
+
sessionManager: SessionManager,
|
|
39
|
+
viewHistory: ViewHistory,
|
|
40
|
+
encoder: DeflateEncoder,
|
|
41
|
+
telemetry: Telemetry,
|
|
42
|
+
segmentHttpRequest?: HttpRequest<ReplayPayload>,
|
|
43
|
+
resourceHttpRequest?: HttpRequest<ResourcePayload>
|
|
44
|
+
) {
|
|
45
|
+
const cleanupTasks: Array<() => void> = []
|
|
46
|
+
|
|
47
|
+
const reportError = (message: string) => {
|
|
48
|
+
lifeCycle.notify(LifeCycleEventType.RAW_ERROR_COLLECTED, {
|
|
49
|
+
error: { message, type: DEFAULT_ERROR_TYPE, source: ErrorSource.AGENT, startClocks: clocksNow() },
|
|
50
|
+
})
|
|
51
|
+
// monitor-until: forever, to keep an eye on the errors reported to customers
|
|
52
|
+
addTelemetryDebug('Error reported to customer', { 'error.message': message })
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const replayRequest =
|
|
56
|
+
segmentHttpRequest ||
|
|
57
|
+
createHttpRequest(
|
|
58
|
+
[createEndpointBuilder(configuration, 'replay')],
|
|
59
|
+
reportError,
|
|
60
|
+
SEGMENT_BYTES_LIMIT,
|
|
61
|
+
REPLAY_NETWORK_ERROR_RETRIES
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const resourceRequest =
|
|
65
|
+
resourceHttpRequest ||
|
|
66
|
+
createHttpRequest<ResourcePayload>(
|
|
67
|
+
[createEndpointBuilder(configuration, 'replay')],
|
|
68
|
+
reportError,
|
|
69
|
+
0,
|
|
70
|
+
REPLAY_NETWORK_ERROR_RETRIES
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
let addRecord: (record: BrowserRecord) => void
|
|
74
|
+
let addStats: (stats: SerializationStats) => void
|
|
75
|
+
let emitResource: EmitResourceCallback = noop
|
|
76
|
+
let flushMutations = noop
|
|
77
|
+
|
|
78
|
+
// This must be registered before the segment and resource collectors so an urgent exit includes queued canvas changes.
|
|
79
|
+
const { unsubscribe: unsubscribeMutationFlush } = lifeCycle.subscribe(LifeCycleEventType.PREPARE_URGENT_FLUSH, () =>
|
|
80
|
+
flushMutations()
|
|
81
|
+
)
|
|
82
|
+
cleanupTasks.push(unsubscribeMutationFlush)
|
|
83
|
+
|
|
84
|
+
if (!canUseEventBridge()) {
|
|
85
|
+
const segmentCollection = startSegmentCollection(
|
|
86
|
+
lifeCycle,
|
|
87
|
+
configuration,
|
|
88
|
+
sessionManager,
|
|
89
|
+
viewHistory,
|
|
90
|
+
replayRequest,
|
|
91
|
+
encoder
|
|
92
|
+
)
|
|
93
|
+
addRecord = segmentCollection.addRecord
|
|
94
|
+
addStats = segmentCollection.addStats
|
|
95
|
+
cleanupTasks.push(segmentCollection.stop)
|
|
96
|
+
|
|
97
|
+
const segmentTelemetry = startSegmentTelemetry(telemetry, replayRequest.observable)
|
|
98
|
+
cleanupTasks.push(segmentTelemetry.stop)
|
|
99
|
+
|
|
100
|
+
const replayResourceCollection = startReplayResourceCollection(
|
|
101
|
+
configuration.applicationId,
|
|
102
|
+
lifeCycle,
|
|
103
|
+
resourceRequest
|
|
104
|
+
)
|
|
105
|
+
emitResource = replayResourceCollection.emitResource
|
|
106
|
+
cleanupTasks.push(replayResourceCollection.stop)
|
|
107
|
+
} else {
|
|
108
|
+
;({ addRecord } = startRecordBridge(viewHistory))
|
|
109
|
+
addStats = noop
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const recording = record({
|
|
113
|
+
emitRecord: addRecord,
|
|
114
|
+
emitResource,
|
|
115
|
+
emitStats: addStats,
|
|
116
|
+
configuration,
|
|
117
|
+
lifeCycle,
|
|
118
|
+
viewHistory,
|
|
119
|
+
})
|
|
120
|
+
flushMutations = recording.flushMutations
|
|
121
|
+
|
|
122
|
+
if (!canUseEventBridge()) {
|
|
123
|
+
const recovery = startDroppedSegmentRecovery(replayRequest.observable, recording.takeFullSnapshot)
|
|
124
|
+
cleanupTasks.push(recovery.stop)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
stop: () => {
|
|
129
|
+
recording.flushMutations()
|
|
130
|
+
recording.stop()
|
|
131
|
+
cleanupTasks.forEach((task) => task())
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { mockable } from '@kubesense/kubesense-browser-core'
|
|
1
2
|
import { reportScriptLoadingError } from '../domain/scriptLoadingError'
|
|
2
|
-
import type { createRumProfiler } from '../domain/profiling/
|
|
3
|
+
import type { createRumProfiler } from '../domain/profiling/kubesenseProfiler'
|
|
3
4
|
|
|
4
|
-
export async function lazyLoadProfiler(
|
|
5
|
-
importProfilerImpl = importProfiler
|
|
6
|
-
): Promise<typeof createRumProfiler | undefined> {
|
|
5
|
+
export async function lazyLoadProfiler(): Promise<typeof createRumProfiler | undefined> {
|
|
7
6
|
try {
|
|
8
|
-
return await
|
|
7
|
+
return await mockable(importProfiler)()
|
|
9
8
|
} catch (error: unknown) {
|
|
10
9
|
reportScriptLoadingError({
|
|
11
10
|
error,
|
|
@@ -15,7 +14,7 @@ export async function lazyLoadProfiler(
|
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
async function importProfiler() {
|
|
19
|
-
const module = await import(/* webpackChunkName: "
|
|
17
|
+
export async function importProfiler() {
|
|
18
|
+
const module = await import(/* webpackChunkName: "kubesenseProfiler" */ '../domain/profiling/kubesenseProfiler')
|
|
20
19
|
return module.createRumProfiler
|
|
21
20
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { mockable } from '@kubesense/kubesense-browser-core'
|
|
1
2
|
import { reportScriptLoadingError } from '../domain/scriptLoadingError'
|
|
2
|
-
import type { startRecording } from './
|
|
3
|
+
import type { startRecording } from './kubesenseRecorder'
|
|
3
4
|
|
|
4
|
-
export async function lazyLoadRecorder(
|
|
5
|
-
importRecorderImpl = importRecorder
|
|
6
|
-
): Promise<typeof startRecording | undefined> {
|
|
5
|
+
export async function lazyLoadRecorder(): Promise<typeof startRecording | undefined> {
|
|
7
6
|
try {
|
|
8
|
-
return await
|
|
7
|
+
return await mockable(importRecorder)()
|
|
9
8
|
} catch (error: unknown) {
|
|
10
9
|
reportScriptLoadingError({
|
|
11
10
|
error,
|
|
@@ -15,7 +14,7 @@ export async function lazyLoadRecorder(
|
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
async function importRecorder() {
|
|
19
|
-
const module = await import(/* webpackChunkName: "
|
|
17
|
+
export async function importRecorder() {
|
|
18
|
+
const module = await import(/* webpackChunkName: "kubesenseRecorder" */ './kubesenseRecorder')
|
|
20
19
|
return module.startRecording
|
|
21
20
|
}
|