@multiplayer-app/session-recorder-react-native 1.3.37 → 2.0.17-alpha.10
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/package.json +4 -4
- package/src/NativeSessionRecorderModule.ts +4 -2
- package/src/NativeSessionRecorderModuleSpec.ts +4 -2
- package/src/NativeSessionRecorderNative.ts +1 -1
- package/src/index.ts +0 -1
- package/src/otel/instrumentations/index.ts +22 -22
- package/src/session-recorder.ts +4 -0
- package/src/types/configs.ts +1 -2
- package/lib/module/NativeSessionRecorderModule.js +0 -5
- package/lib/module/NativeSessionRecorderModule.js.map +0 -1
- package/lib/module/NativeSessionRecorderModuleSpec.js +0 -5
- package/lib/module/NativeSessionRecorderModuleSpec.js.map +0 -1
- package/lib/module/NativeSessionRecorderNative.js +0 -5
- package/lib/module/NativeSessionRecorderNative.js.map +0 -1
- package/lib/module/components/ErrorBoundary.js +0 -32
- package/lib/module/components/ErrorBoundary.js.map +0 -1
- package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +0 -23
- package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
- package/lib/module/components/ScreenRecorderView/index.js +0 -4
- package/lib/module/components/ScreenRecorderView/index.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +0 -64
- package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/FinalPopover.js +0 -74
- package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/FloatingButton.js +0 -191
- package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/InitialPopover.js +0 -138
- package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/ModalContainer.js +0 -177
- package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/ModalHeader.js +0 -27
- package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -133
- package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/icons.js +0 -93
- package/lib/module/components/SessionRecorderWidget/icons.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/index.js +0 -5
- package/lib/module/components/SessionRecorderWidget/index.js.map +0 -1
- package/lib/module/components/SessionRecorderWidget/styles.js +0 -173
- package/lib/module/components/SessionRecorderWidget/styles.js.map +0 -1
- package/lib/module/components/index.js +0 -6
- package/lib/module/components/index.js.map +0 -1
- package/lib/module/config/constants.js +0 -47
- package/lib/module/config/constants.js.map +0 -1
- package/lib/module/config/defaults.js +0 -87
- package/lib/module/config/defaults.js.map +0 -1
- package/lib/module/config/index.js +0 -9
- package/lib/module/config/index.js.map +0 -1
- package/lib/module/config/masking.js +0 -35
- package/lib/module/config/masking.js.map +0 -1
- package/lib/module/config/session-recorder.js +0 -50
- package/lib/module/config/session-recorder.js.map +0 -1
- package/lib/module/config/validators.js +0 -28
- package/lib/module/config/validators.js.map +0 -1
- package/lib/module/config/widget.js +0 -35
- package/lib/module/config/widget.js.map +0 -1
- package/lib/module/context/SessionRecorderContext.js +0 -100
- package/lib/module/context/SessionRecorderContext.js.map +0 -1
- package/lib/module/context/SessionRecorderStore.js +0 -12
- package/lib/module/context/SessionRecorderStore.js.map +0 -1
- package/lib/module/context/createStore.js +0 -27
- package/lib/module/context/createStore.js.map +0 -1
- package/lib/module/context/useSessionRecorderStore.js +0 -45
- package/lib/module/context/useSessionRecorderStore.js.map +0 -1
- package/lib/module/context/useStoreSelector.js +0 -27
- package/lib/module/context/useStoreSelector.js.map +0 -1
- package/lib/module/index.js +0 -14
- package/lib/module/index.js.map +0 -1
- package/lib/module/native/SessionRecorderNative.js +0 -76
- package/lib/module/native/SessionRecorderNative.js.map +0 -1
- package/lib/module/native/index.js +0 -4
- package/lib/module/native/index.js.map +0 -1
- package/lib/module/otel/CrashBufferSpanProcessor.js +0 -42
- package/lib/module/otel/CrashBufferSpanProcessor.js.map +0 -1
- package/lib/module/otel/helpers.js +0 -218
- package/lib/module/otel/helpers.js.map +0 -1
- package/lib/module/otel/index.js +0 -202
- package/lib/module/otel/index.js.map +0 -1
- package/lib/module/otel/instrumentations/index.js +0 -122
- package/lib/module/otel/instrumentations/index.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/patch/configs.js +0 -18
- package/lib/module/patch/configs.js.map +0 -1
- package/lib/module/patch/fetch.js +0 -222
- package/lib/module/patch/fetch.js.map +0 -1
- package/lib/module/patch/index.js +0 -6
- package/lib/module/patch/index.js.map +0 -1
- package/lib/module/patch/xhr.js +0 -100
- package/lib/module/patch/xhr.js.map +0 -1
- package/lib/module/recorder/gestureRecorder.js +0 -641
- package/lib/module/recorder/gestureRecorder.js.map +0 -1
- package/lib/module/recorder/index.js +0 -176
- package/lib/module/recorder/index.js.map +0 -1
- package/lib/module/recorder/navigationRecorder.js +0 -238
- package/lib/module/recorder/navigationRecorder.js.map +0 -1
- package/lib/module/recorder/screenRecorder.js +0 -527
- package/lib/module/recorder/screenRecorder.js.map +0 -1
- package/lib/module/services/api.service.js +0 -166
- package/lib/module/services/api.service.js.map +0 -1
- package/lib/module/services/crashBuffer.service.js +0 -280
- package/lib/module/services/crashBuffer.service.js.map +0 -1
- package/lib/module/services/network.service.js +0 -178
- package/lib/module/services/network.service.js.map +0 -1
- package/lib/module/services/screenRecordingService.js +0 -107
- package/lib/module/services/screenRecordingService.js.map +0 -1
- package/lib/module/services/socket.service.js +0 -186
- package/lib/module/services/socket.service.js.map +0 -1
- package/lib/module/services/storage.service.js +0 -178
- package/lib/module/services/storage.service.js.map +0 -1
- package/lib/module/session-recorder.js +0 -750
- package/lib/module/session-recorder.js.map +0 -1
- package/lib/module/types/configs.js +0 -4
- package/lib/module/types/configs.js.map +0 -1
- package/lib/module/types/expo-constants.d.js +0 -2
- package/lib/module/types/expo-constants.d.js.map +0 -1
- package/lib/module/types/index.js +0 -10
- package/lib/module/types/index.js.map +0 -1
- package/lib/module/types/session-recorder.js +0 -68
- package/lib/module/types/session-recorder.js.map +0 -1
- package/lib/module/utils/app-metadata.js +0 -28
- package/lib/module/utils/app-metadata.js.map +0 -1
- package/lib/module/utils/constants.optional.expo.js +0 -6
- package/lib/module/utils/constants.optional.expo.js.map +0 -1
- package/lib/module/utils/constants.optional.js +0 -8
- package/lib/module/utils/constants.optional.js.map +0 -1
- package/lib/module/utils/index.js +0 -11
- package/lib/module/utils/index.js.map +0 -1
- package/lib/module/utils/logger.js +0 -185
- package/lib/module/utils/logger.js.map +0 -1
- package/lib/module/utils/platform.js +0 -340
- package/lib/module/utils/platform.js.map +0 -1
- package/lib/module/utils/request-utils.js +0 -58
- package/lib/module/utils/request-utils.js.map +0 -1
- package/lib/module/utils/rrweb-events.js +0 -276
- package/lib/module/utils/rrweb-events.js.map +0 -1
- package/lib/module/utils/session.js +0 -21
- package/lib/module/utils/session.js.map +0 -1
- package/lib/module/utils/shallowEqual.js +0 -17
- package/lib/module/utils/shallowEqual.js.map +0 -1
- package/lib/module/utils/time.js +0 -17
- package/lib/module/utils/time.js.map +0 -1
- package/lib/module/utils/type-utils.js +0 -69
- package/lib/module/utils/type-utils.js.map +0 -1
- package/lib/module/version.js +0 -4
- package/lib/module/version.js.map +0 -1
- package/lib/typescript/package.json +0 -1
- package/lib/typescript/src/NativeSessionRecorderModule.d.ts +0 -25
- package/lib/typescript/src/NativeSessionRecorderModule.d.ts.map +0 -1
- package/lib/typescript/src/NativeSessionRecorderModuleSpec.d.ts +0 -25
- package/lib/typescript/src/NativeSessionRecorderModuleSpec.d.ts.map +0 -1
- package/lib/typescript/src/NativeSessionRecorderNative.d.ts +0 -25
- package/lib/typescript/src/NativeSessionRecorderNative.d.ts.map +0 -1
- package/lib/typescript/src/components/ErrorBoundary.d.ts +0 -16
- package/lib/typescript/src/components/ErrorBoundary.d.ts.map +0 -1
- package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -6
- package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +0 -1
- package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +0 -2
- package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts +0 -8
- package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts +0 -13
- package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts +0 -9
- package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts +0 -17
- package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts +0 -9
- package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts +0 -7
- package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +0 -6
- package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts +0 -12
- package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +0 -3
- package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +0 -1
- package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts +0 -166
- package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +0 -1
- package/lib/typescript/src/components/index.d.ts +0 -4
- package/lib/typescript/src/components/index.d.ts.map +0 -1
- package/lib/typescript/src/config/constants.d.ts +0 -22
- package/lib/typescript/src/config/constants.d.ts.map +0 -1
- package/lib/typescript/src/config/defaults.d.ts +0 -5
- package/lib/typescript/src/config/defaults.d.ts.map +0 -1
- package/lib/typescript/src/config/index.d.ts +0 -6
- package/lib/typescript/src/config/index.d.ts.map +0 -1
- package/lib/typescript/src/config/masking.d.ts +0 -3
- package/lib/typescript/src/config/masking.d.ts.map +0 -1
- package/lib/typescript/src/config/session-recorder.d.ts +0 -3
- package/lib/typescript/src/config/session-recorder.d.ts.map +0 -1
- package/lib/typescript/src/config/validators.d.ts +0 -11
- package/lib/typescript/src/config/validators.d.ts.map +0 -1
- package/lib/typescript/src/config/widget.d.ts +0 -10
- package/lib/typescript/src/config/widget.d.ts.map +0 -1
- package/lib/typescript/src/context/SessionRecorderContext.d.ts +0 -22
- package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +0 -1
- package/lib/typescript/src/context/SessionRecorderStore.d.ts +0 -13
- package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +0 -1
- package/lib/typescript/src/context/createStore.d.ts +0 -9
- package/lib/typescript/src/context/createStore.d.ts.map +0 -1
- package/lib/typescript/src/context/useSessionRecorderStore.d.ts +0 -29
- package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +0 -1
- package/lib/typescript/src/context/useStoreSelector.d.ts +0 -5
- package/lib/typescript/src/context/useStoreSelector.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts +0 -9
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/native/SessionRecorderNative.d.ts +0 -29
- package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +0 -1
- package/lib/typescript/src/native/index.d.ts +0 -2
- package/lib/typescript/src/native/index.d.ts.map +0 -1
- package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts +0 -17
- package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts.map +0 -1
- package/lib/typescript/src/otel/helpers.d.ts +0 -46
- package/lib/typescript/src/otel/helpers.d.ts.map +0 -1
- package/lib/typescript/src/otel/index.d.ts +0 -33
- package/lib/typescript/src/otel/index.d.ts.map +0 -1
- package/lib/typescript/src/otel/instrumentations/index.d.ts +0 -5
- package/lib/typescript/src/otel/instrumentations/index.d.ts.map +0 -1
- package/lib/typescript/src/patch/configs.d.ts +0 -9
- package/lib/typescript/src/patch/configs.d.ts.map +0 -1
- package/lib/typescript/src/patch/fetch.d.ts +0 -2
- package/lib/typescript/src/patch/fetch.d.ts.map +0 -1
- package/lib/typescript/src/patch/index.d.ts +0 -4
- package/lib/typescript/src/patch/index.d.ts.map +0 -1
- package/lib/typescript/src/patch/xhr.d.ts +0 -2
- package/lib/typescript/src/patch/xhr.d.ts.map +0 -1
- package/lib/typescript/src/recorder/gestureRecorder.d.ts +0 -66
- package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +0 -1
- package/lib/typescript/src/recorder/index.d.ts +0 -79
- package/lib/typescript/src/recorder/index.d.ts.map +0 -1
- package/lib/typescript/src/recorder/navigationRecorder.d.ts +0 -29
- package/lib/typescript/src/recorder/navigationRecorder.d.ts.map +0 -1
- package/lib/typescript/src/recorder/screenRecorder.d.ts +0 -127
- package/lib/typescript/src/recorder/screenRecorder.d.ts.map +0 -1
- package/lib/typescript/src/services/api.service.d.ts +0 -116
- package/lib/typescript/src/services/api.service.d.ts.map +0 -1
- package/lib/typescript/src/services/crashBuffer.service.d.ts +0 -27
- package/lib/typescript/src/services/crashBuffer.service.d.ts.map +0 -1
- package/lib/typescript/src/services/network.service.d.ts +0 -47
- package/lib/typescript/src/services/network.service.d.ts.map +0 -1
- package/lib/typescript/src/services/screenRecordingService.d.ts +0 -48
- package/lib/typescript/src/services/screenRecordingService.d.ts.map +0 -1
- package/lib/typescript/src/services/socket.service.d.ts +0 -44
- package/lib/typescript/src/services/socket.service.d.ts.map +0 -1
- package/lib/typescript/src/services/storage.service.d.ts +0 -47
- package/lib/typescript/src/services/storage.service.d.ts.map +0 -1
- package/lib/typescript/src/session-recorder.d.ts +0 -191
- package/lib/typescript/src/session-recorder.d.ts.map +0 -1
- package/lib/typescript/src/types/configs.d.ts +0 -92
- package/lib/typescript/src/types/configs.d.ts.map +0 -1
- package/lib/typescript/src/types/index.d.ts +0 -21
- package/lib/typescript/src/types/index.d.ts.map +0 -1
- package/lib/typescript/src/types/session-recorder.d.ts +0 -367
- package/lib/typescript/src/types/session-recorder.d.ts.map +0 -1
- package/lib/typescript/src/utils/app-metadata.d.ts +0 -17
- package/lib/typescript/src/utils/app-metadata.d.ts.map +0 -1
- package/lib/typescript/src/utils/constants.optional.d.ts +0 -22
- package/lib/typescript/src/utils/constants.optional.d.ts.map +0 -1
- package/lib/typescript/src/utils/constants.optional.expo.d.ts +0 -4
- package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +0 -1
- package/lib/typescript/src/utils/index.d.ts +0 -8
- package/lib/typescript/src/utils/index.d.ts.map +0 -1
- package/lib/typescript/src/utils/logger.d.ts +0 -108
- package/lib/typescript/src/utils/logger.d.ts.map +0 -1
- package/lib/typescript/src/utils/platform.d.ts +0 -58
- package/lib/typescript/src/utils/platform.d.ts.map +0 -1
- package/lib/typescript/src/utils/request-utils.d.ts +0 -22
- package/lib/typescript/src/utils/request-utils.d.ts.map +0 -1
- package/lib/typescript/src/utils/rrweb-events.d.ts +0 -67
- package/lib/typescript/src/utils/rrweb-events.d.ts.map +0 -1
- package/lib/typescript/src/utils/session.d.ts +0 -7
- package/lib/typescript/src/utils/session.d.ts.map +0 -1
- package/lib/typescript/src/utils/shallowEqual.d.ts +0 -2
- package/lib/typescript/src/utils/shallowEqual.d.ts.map +0 -1
- package/lib/typescript/src/utils/time.d.ts +0 -5
- package/lib/typescript/src/utils/time.d.ts.map +0 -1
- package/lib/typescript/src/utils/type-utils.d.ts +0 -17
- package/lib/typescript/src/utils/type-utils.d.ts.map +0 -1
- package/lib/typescript/src/version.d.ts +0 -2
- package/lib/typescript/src/version.d.ts.map +0 -1
|
@@ -1,527 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { trace, SpanStatusCode } from '@opentelemetry/api';
|
|
4
|
-
import { Dimensions, Platform } from 'react-native';
|
|
5
|
-
import { createRecordingMetaEvent, createFullSnapshotEvent, createIncrementalSnapshotWithImageUpdate as createIncrementalSnapshotUtil, generateScreenHash, logger } from "../utils/index.js";
|
|
6
|
-
import { screenRecordingService } from "../services/screenRecordingService.js";
|
|
7
|
-
const isWeb = Platform.OS === 'web';
|
|
8
|
-
export class ScreenRecorder {
|
|
9
|
-
isRecording = false;
|
|
10
|
-
isBufferOnlyMode = false;
|
|
11
|
-
needsFullSnapshot = true;
|
|
12
|
-
events = [];
|
|
13
|
-
captureCount = 0;
|
|
14
|
-
maxCaptures = 100; // Limit captures to prevent memory issues
|
|
15
|
-
captureQuality = 0.2;
|
|
16
|
-
captureScale = 0.33;
|
|
17
|
-
captureFormat = 'jpg';
|
|
18
|
-
screenDimensions = null;
|
|
19
|
-
nodeIdCounter = 1;
|
|
20
|
-
lastScreenCapture = null;
|
|
21
|
-
lastScreenHash = null;
|
|
22
|
-
enableChangeDetection = true;
|
|
23
|
-
hashSampleSize = 100;
|
|
24
|
-
currentImageNodeId = null;
|
|
25
|
-
viewShotRef = null;
|
|
26
|
-
init(config, eventRecorder) {
|
|
27
|
-
this.config = config;
|
|
28
|
-
this.eventRecorder = eventRecorder;
|
|
29
|
-
this._getScreenDimensions();
|
|
30
|
-
|
|
31
|
-
// Initialize masking configuration
|
|
32
|
-
this.recordingConfig = {
|
|
33
|
-
enabled: true,
|
|
34
|
-
...this.config.masking
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
// Update the masking service configuration
|
|
38
|
-
screenRecordingService.updateConfig(this.recordingConfig);
|
|
39
|
-
}
|
|
40
|
-
start() {
|
|
41
|
-
this.isRecording = true;
|
|
42
|
-
this.needsFullSnapshot = true;
|
|
43
|
-
this.events = [];
|
|
44
|
-
this.captureCount = 0;
|
|
45
|
-
this.lastScreenCapture = null;
|
|
46
|
-
this.lastScreenHash = null;
|
|
47
|
-
this.currentImageNodeId = null; // Reset image node ID for new session
|
|
48
|
-
logger.info('ScreenRecorder', 'Screen recording started');
|
|
49
|
-
this._startPeriodicCapture();
|
|
50
|
-
this._startBufferSnapshotInterval();
|
|
51
|
-
// Capture initial screen immediately
|
|
52
|
-
this._captureScreen();
|
|
53
|
-
}
|
|
54
|
-
stop() {
|
|
55
|
-
this.isRecording = false;
|
|
56
|
-
this._stopPeriodicCapture();
|
|
57
|
-
this._stopBufferSnapshotInterval();
|
|
58
|
-
// Screen recording stopped
|
|
59
|
-
}
|
|
60
|
-
pause() {
|
|
61
|
-
this.isRecording = false;
|
|
62
|
-
this._stopPeriodicCapture();
|
|
63
|
-
this._stopBufferSnapshotInterval();
|
|
64
|
-
}
|
|
65
|
-
resume() {
|
|
66
|
-
this.isRecording = true;
|
|
67
|
-
this._startPeriodicCapture();
|
|
68
|
-
this._startBufferSnapshotInterval();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Enables behavior specific to crash-buffer-only mode.
|
|
73
|
-
* In this mode we periodically force a full snapshot anchor for replayability.
|
|
74
|
-
*/
|
|
75
|
-
setBufferOnlyMode(enabled) {
|
|
76
|
-
this.isBufferOnlyMode = enabled;
|
|
77
|
-
if (!enabled) {
|
|
78
|
-
this.needsFullSnapshot = false;
|
|
79
|
-
this._stopBufferSnapshotInterval();
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
this.needsFullSnapshot = true;
|
|
83
|
-
if (this.isRecording) {
|
|
84
|
-
this._startBufferSnapshotInterval();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
_getScreenDimensions() {
|
|
88
|
-
try {
|
|
89
|
-
this.screenDimensions = Dimensions.get('window');
|
|
90
|
-
} catch (error) {
|
|
91
|
-
// Failed to get screen dimensions - silently continue
|
|
92
|
-
this.screenDimensions = {
|
|
93
|
-
width: 375,
|
|
94
|
-
height: 667
|
|
95
|
-
}; // Default fallback
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
_startPeriodicCapture() {
|
|
99
|
-
if (this.captureInterval) {
|
|
100
|
-
clearInterval(this.captureInterval);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Capture screen every 5 seconds (reduced frequency)
|
|
104
|
-
this.captureInterval = setInterval(() => {
|
|
105
|
-
this._captureScreen();
|
|
106
|
-
}, 5000);
|
|
107
|
-
}
|
|
108
|
-
_stopPeriodicCapture() {
|
|
109
|
-
if (this.captureInterval) {
|
|
110
|
-
clearInterval(this.captureInterval);
|
|
111
|
-
this.captureInterval = undefined;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
_startBufferSnapshotInterval() {
|
|
115
|
-
this._stopBufferSnapshotInterval();
|
|
116
|
-
if (!this.isBufferOnlyMode) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const configuredInterval = this.config?.buffering?.snapshotIntervalMs || 20000;
|
|
120
|
-
const intervalMs = Math.max(5000, configuredInterval);
|
|
121
|
-
this.bufferSnapshotInterval = setInterval(() => {
|
|
122
|
-
// Force a fresh full snapshot anchor in buffer-only mode.
|
|
123
|
-
this.needsFullSnapshot = true;
|
|
124
|
-
void this._captureScreen();
|
|
125
|
-
}, intervalMs);
|
|
126
|
-
}
|
|
127
|
-
_stopBufferSnapshotInterval() {
|
|
128
|
-
if (this.bufferSnapshotInterval) {
|
|
129
|
-
clearInterval(this.bufferSnapshotInterval);
|
|
130
|
-
this.bufferSnapshotInterval = undefined;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
async _captureScreen(timestamp) {
|
|
134
|
-
if (!this.isRecording || this.captureCount >= this.maxCaptures) return;
|
|
135
|
-
try {
|
|
136
|
-
const base64Image = await this._captureScreenBase64();
|
|
137
|
-
if (base64Image) {
|
|
138
|
-
// Check if screen has changed by comparing with previous capture
|
|
139
|
-
const hasChanged = this.enableChangeDetection ? this._hasScreenChanged(base64Image) : true;
|
|
140
|
-
if (hasChanged) {
|
|
141
|
-
// Keep replay segments anchored: buffer-only mode can force a full snapshot.
|
|
142
|
-
const shouldEmitFullSnapshot = this.needsFullSnapshot || this.currentImageNodeId === null || !this.lastScreenCapture;
|
|
143
|
-
if (!shouldEmitFullSnapshot) {
|
|
144
|
-
const success = this.updateScreenWithIncrementalSnapshot(base64Image, timestamp);
|
|
145
|
-
if (!success) {
|
|
146
|
-
// Fallback to full snapshot if incremental update fails
|
|
147
|
-
this._createAndEmitFullSnapshotEvent(base64Image, timestamp);
|
|
148
|
-
this.needsFullSnapshot = false;
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
// First capture, forced anchor, or no existing image node.
|
|
152
|
-
this._createAndEmitFullSnapshotEvent(base64Image, timestamp);
|
|
153
|
-
this.needsFullSnapshot = false;
|
|
154
|
-
}
|
|
155
|
-
this.lastScreenCapture = base64Image;
|
|
156
|
-
this.lastScreenHash = this._generateScreenHash(base64Image);
|
|
157
|
-
this.captureCount++;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
} catch (error) {
|
|
161
|
-
this._recordScreenCaptureError(error);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
async _captureScreenBase64() {
|
|
165
|
-
try {
|
|
166
|
-
// Check if we're on web platform
|
|
167
|
-
if (isWeb) {
|
|
168
|
-
logger.warn('ScreenRecorder', 'Screen capture not available on web platform');
|
|
169
|
-
return null;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Try native masking first if available
|
|
173
|
-
if (screenRecordingService.isScreenRecordingAvailable()) {
|
|
174
|
-
logger.info('ScreenRecorder', 'Using native masking for screen capture');
|
|
175
|
-
const recordingImage = await screenRecordingService.captureMaskedScreen({
|
|
176
|
-
quality: this.captureQuality,
|
|
177
|
-
scale: this.captureScale
|
|
178
|
-
});
|
|
179
|
-
if (recordingImage) {
|
|
180
|
-
return recordingImage;
|
|
181
|
-
}
|
|
182
|
-
logger.warn('ScreenRecorder', 'Native masking failed, falling back to view-shot');
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// // Fallback to react-native-view-shot
|
|
186
|
-
if (!this.viewShotRef) {
|
|
187
|
-
logger.warn('ScreenRecorder', 'ViewShot ref not available for screen capture');
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
return null;
|
|
191
|
-
|
|
192
|
-
// // Check if captureRef is available
|
|
193
|
-
// if (!captureRef) {
|
|
194
|
-
// logger.warn('ScreenRecorder', 'react-native-view-shot not available');
|
|
195
|
-
// return null;
|
|
196
|
-
// }
|
|
197
|
-
|
|
198
|
-
// // Capture the screen using react-native-view-shot
|
|
199
|
-
// const result = await captureRef(this.viewShotRef, {
|
|
200
|
-
// format: this.captureFormat,
|
|
201
|
-
// quality: this.captureQuality,
|
|
202
|
-
// result: 'base64',
|
|
203
|
-
// });
|
|
204
|
-
|
|
205
|
-
// return result;
|
|
206
|
-
} catch (error) {
|
|
207
|
-
logger.error('ScreenRecorder', 'Failed to capture screen. Make sure react-native-view-shot is properly installed and linked:', error);
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
_createAndEmitFullSnapshotEvent(base64Image, timestamp) {
|
|
212
|
-
if (!this.screenDimensions) return;
|
|
213
|
-
|
|
214
|
-
// Keep replay anchors valid: each full snapshot is explicitly preceded by meta.
|
|
215
|
-
this.recordEvent(createRecordingMetaEvent());
|
|
216
|
-
|
|
217
|
-
// Use the new createFullSnapshot method
|
|
218
|
-
const fullSnapshotEvent = this.createFullSnapshot(base64Image, timestamp);
|
|
219
|
-
this.recordEvent(fullSnapshotEvent);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Create a full snapshot event with the given base64 image
|
|
224
|
-
* @param base64Image - Base64 encoded image data
|
|
225
|
-
* @param timestamp - Optional timestamp to use for the event
|
|
226
|
-
* @returns Full snapshot event
|
|
227
|
-
*/
|
|
228
|
-
createFullSnapshot(base64Image, timestamp) {
|
|
229
|
-
if (!this.screenDimensions) {
|
|
230
|
-
throw new Error('Screen dimensions not available');
|
|
231
|
-
}
|
|
232
|
-
const {
|
|
233
|
-
width,
|
|
234
|
-
height
|
|
235
|
-
} = this.screenDimensions;
|
|
236
|
-
this.nodeIdCounter = 1;
|
|
237
|
-
|
|
238
|
-
// Use utility function to create full snapshot event
|
|
239
|
-
const fullSnapshotEvent = createFullSnapshotEvent(base64Image, width, height, this.captureFormat, {
|
|
240
|
-
current: this.nodeIdCounter
|
|
241
|
-
}, timestamp);
|
|
242
|
-
|
|
243
|
-
// Store the image node ID for future incremental updates
|
|
244
|
-
// The image node ID is the first node created (after the document)
|
|
245
|
-
this.currentImageNodeId = 0; // First element node is the image
|
|
246
|
-
|
|
247
|
-
return fullSnapshotEvent;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Create an incremental snapshot event with mutation data to update image src
|
|
252
|
-
* @param base64Image - New base64 encoded image data
|
|
253
|
-
* @param captureFormat - Image format (png, jpg, etc.)
|
|
254
|
-
* @param timestamp - Optional timestamp to use for the event
|
|
255
|
-
* @returns Incremental snapshot event with mutation data
|
|
256
|
-
*/
|
|
257
|
-
createIncrementalSnapshotWithImageUpdate(base64Image, captureFormat, timestamp) {
|
|
258
|
-
return createIncrementalSnapshotUtil(base64Image, captureFormat || this.captureFormat, timestamp);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Update the screen with a new image using incremental snapshot
|
|
263
|
-
* @param base64Image - New base64 encoded image data
|
|
264
|
-
* @param timestamp - Optional timestamp to use for the event
|
|
265
|
-
* @returns true if update was successful, false otherwise
|
|
266
|
-
*/
|
|
267
|
-
updateScreenWithIncrementalSnapshot(base64Image, timestamp) {
|
|
268
|
-
if (this.currentImageNodeId === null) {
|
|
269
|
-
logger.warn('ScreenRecorder', 'No image node ID available for incremental update');
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
const incrementalEvent = this.createIncrementalSnapshotWithImageUpdate(base64Image, 'jpg', timestamp);
|
|
273
|
-
this.recordEvent(incrementalEvent);
|
|
274
|
-
return true;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Force a full snapshot (useful when screen dimensions change or for debugging)
|
|
279
|
-
* @param base64Image - Base64 encoded image data
|
|
280
|
-
*/
|
|
281
|
-
forceFullSnapshot(base64Image) {
|
|
282
|
-
this._createAndEmitFullSnapshotEvent(base64Image);
|
|
283
|
-
this.lastScreenCapture = base64Image;
|
|
284
|
-
this.lastScreenHash = this._generateScreenHash(base64Image);
|
|
285
|
-
this.captureCount++;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Check if the screen has changed by comparing with the previous capture
|
|
290
|
-
* @param currentBase64 - Current screen capture as base64
|
|
291
|
-
* @returns true if screen has changed, false otherwise
|
|
292
|
-
*/
|
|
293
|
-
_hasScreenChanged(currentBase64) {
|
|
294
|
-
// If this is the first capture, consider it changed
|
|
295
|
-
if (!this.lastScreenCapture) {
|
|
296
|
-
return true;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
// Generate hash for current capture
|
|
300
|
-
const currentHash = this._generateScreenHash(currentBase64);
|
|
301
|
-
|
|
302
|
-
// Compare with previous hash
|
|
303
|
-
return currentHash !== this.lastScreenHash;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Generate a simple hash for screen comparison
|
|
308
|
-
* This is a lightweight hash that focuses on the beginning and end of the base64 string
|
|
309
|
-
* to detect changes without doing a full comparison
|
|
310
|
-
* @param base64Image - Base64 encoded image
|
|
311
|
-
* @returns Hash string for comparison
|
|
312
|
-
*/
|
|
313
|
-
_generateScreenHash(base64Image) {
|
|
314
|
-
return generateScreenHash(base64Image, this.hashSampleSize);
|
|
315
|
-
}
|
|
316
|
-
_sendEvent(_event) {
|
|
317
|
-
// Screen event recorded
|
|
318
|
-
// Send event to backend or store locally
|
|
319
|
-
}
|
|
320
|
-
_recordOpenTelemetrySpan(event) {
|
|
321
|
-
try {
|
|
322
|
-
const span = trace.getTracer('screen').startSpan(`Screen.${event.type}`, {
|
|
323
|
-
attributes: {
|
|
324
|
-
'screen.type': event.type,
|
|
325
|
-
'screen.timestamp': event.timestamp,
|
|
326
|
-
'screen.platform': 'react-native'
|
|
327
|
-
}
|
|
328
|
-
});
|
|
329
|
-
if (event.metadata) {
|
|
330
|
-
Object.entries(event.metadata).forEach(([key, value]) => {
|
|
331
|
-
span.setAttribute(`screen.metadata.${key}`, String(value));
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
span.setStatus({
|
|
335
|
-
code: SpanStatusCode.OK
|
|
336
|
-
});
|
|
337
|
-
span.end();
|
|
338
|
-
} catch (error) {
|
|
339
|
-
// Failed to record OpenTelemetry span for screen - silently continue
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
_recordScreenCaptureError(error) {
|
|
343
|
-
try {
|
|
344
|
-
const span = trace.getTracer('screen').startSpan('Screen.capture.error', {
|
|
345
|
-
attributes: {
|
|
346
|
-
'screen.error': true,
|
|
347
|
-
'screen.error.type': error.name,
|
|
348
|
-
'screen.error.message': error.message,
|
|
349
|
-
'screen.timestamp': Date.now()
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
span.setStatus({
|
|
353
|
-
code: SpanStatusCode.ERROR,
|
|
354
|
-
message: error.message
|
|
355
|
-
});
|
|
356
|
-
span.recordException(error);
|
|
357
|
-
span.end();
|
|
358
|
-
} catch (spanError) {
|
|
359
|
-
// Failed to record error span - silently continue
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// Configuration methods
|
|
364
|
-
setCaptureInterval(intervalMs) {
|
|
365
|
-
if (this.captureInterval) {
|
|
366
|
-
clearInterval(this.captureInterval);
|
|
367
|
-
}
|
|
368
|
-
if (this.isRecording) {
|
|
369
|
-
this.captureInterval = setInterval(() => {
|
|
370
|
-
this._captureScreen();
|
|
371
|
-
}, intervalMs);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
setCaptureQuality(quality) {
|
|
375
|
-
this.captureQuality = Math.max(0.1, Math.min(1.0, quality));
|
|
376
|
-
}
|
|
377
|
-
setCaptureFormat(format) {
|
|
378
|
-
this.captureFormat = format;
|
|
379
|
-
}
|
|
380
|
-
setMaxCaptures(max) {
|
|
381
|
-
this.maxCaptures = Math.max(1, max);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
/**
|
|
385
|
-
* Enable or disable change detection
|
|
386
|
-
* @param enabled - Whether to enable change detection
|
|
387
|
-
*/
|
|
388
|
-
setChangeDetection(enabled) {
|
|
389
|
-
this.enableChangeDetection = enabled;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* Set the hash sample size for change detection
|
|
394
|
-
* @param size - Number of characters to sample from each part of the image
|
|
395
|
-
*/
|
|
396
|
-
setHashSampleSize(size) {
|
|
397
|
-
this.hashSampleSize = Math.max(10, Math.min(1000, size));
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// Performance monitoring
|
|
401
|
-
recordScreenPerformance(screenName, loadTime) {
|
|
402
|
-
const event = {
|
|
403
|
-
screenName,
|
|
404
|
-
type: 'screenCapture',
|
|
405
|
-
timestamp: Date.now(),
|
|
406
|
-
metadata: {
|
|
407
|
-
screenName,
|
|
408
|
-
loadTime,
|
|
409
|
-
performance: 'monitoring',
|
|
410
|
-
captureCount: this.captureCount
|
|
411
|
-
}
|
|
412
|
-
};
|
|
413
|
-
this.events.push(event);
|
|
414
|
-
this._sendEvent(event);
|
|
415
|
-
this._recordOpenTelemetrySpan(event);
|
|
416
|
-
this.events.push(event);
|
|
417
|
-
this._sendEvent(event);
|
|
418
|
-
this._recordOpenTelemetrySpan(event);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Error tracking
|
|
422
|
-
recordScreenError(error, screenName) {
|
|
423
|
-
const event = {
|
|
424
|
-
screenName: screenName || 'unknown',
|
|
425
|
-
type: 'screenCapture',
|
|
426
|
-
timestamp: Date.now(),
|
|
427
|
-
metadata: {
|
|
428
|
-
error: true,
|
|
429
|
-
errorType: error.name,
|
|
430
|
-
errorMessage: error.message,
|
|
431
|
-
screenName,
|
|
432
|
-
captureCount: this.captureCount
|
|
433
|
-
}
|
|
434
|
-
};
|
|
435
|
-
this.events.push(event);
|
|
436
|
-
this._sendEvent(event);
|
|
437
|
-
this._recordOpenTelemetrySpan(event);
|
|
438
|
-
this.events.push(event);
|
|
439
|
-
this._sendEvent(event);
|
|
440
|
-
this._recordScreenCaptureError(error);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// Get recorded events
|
|
444
|
-
getEvents() {
|
|
445
|
-
return [...this.events];
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// Clear events
|
|
449
|
-
clearEvents() {
|
|
450
|
-
this.events = [];
|
|
451
|
-
this.captureCount = 0;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
// Get screen capture statistics
|
|
455
|
-
getScreenStats() {
|
|
456
|
-
const stats = {
|
|
457
|
-
totalCaptures: this.captureCount,
|
|
458
|
-
totalEvents: this.events.length,
|
|
459
|
-
averageCaptureTime: 0,
|
|
460
|
-
successRate: 0
|
|
461
|
-
};
|
|
462
|
-
if (this.events.length > 0) {
|
|
463
|
-
const captureTimes = this.events.map(event => event.metadata?.captureTime || 0).filter(time => time > 0);
|
|
464
|
-
if (captureTimes.length > 0) {
|
|
465
|
-
stats.averageCaptureTime = captureTimes.reduce((a, b) => a + b, 0) / captureTimes.length;
|
|
466
|
-
}
|
|
467
|
-
const successfulCaptures = this.events.filter(event => event.dataUrl).length;
|
|
468
|
-
stats.successRate = successfulCaptures / this.events.length * 100;
|
|
469
|
-
}
|
|
470
|
-
return stats;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
// Get recording status
|
|
474
|
-
isRecordingEnabled() {
|
|
475
|
-
return this.isRecording;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
// Get current configuration
|
|
479
|
-
getConfiguration() {
|
|
480
|
-
return {
|
|
481
|
-
captureInterval: this.captureInterval ? 2000 : 0,
|
|
482
|
-
// Default 5 seconds
|
|
483
|
-
captureQuality: this.captureQuality,
|
|
484
|
-
captureFormat: this.captureFormat,
|
|
485
|
-
maxCaptures: this.maxCaptures,
|
|
486
|
-
screenDimensions: this.screenDimensions
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// Shutdown
|
|
491
|
-
shutdown() {
|
|
492
|
-
this.stop();
|
|
493
|
-
this.clearEvents();
|
|
494
|
-
// Screen recorder shutdown
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
498
|
-
* Set the viewshot ref for screen capture
|
|
499
|
-
* @param ref - React Native View ref for screen capture
|
|
500
|
-
*/
|
|
501
|
-
setViewShotRef(ref) {
|
|
502
|
-
this.viewShotRef = ref;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
/**
|
|
506
|
-
* Force capture screen (useful after touch interactions)
|
|
507
|
-
* This bypasses the change detection and always captures
|
|
508
|
-
* @param timestamp - Optional timestamp to use for the capture event
|
|
509
|
-
*/
|
|
510
|
-
forceCapture(timestamp) {
|
|
511
|
-
if (!this.isRecording) {
|
|
512
|
-
return;
|
|
513
|
-
}
|
|
514
|
-
this._captureScreen(timestamp);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
/**
|
|
518
|
-
* Record an rrweb event
|
|
519
|
-
* @param event - The rrweb event to record
|
|
520
|
-
*/
|
|
521
|
-
recordEvent(event) {
|
|
522
|
-
if (this.eventRecorder) {
|
|
523
|
-
this.eventRecorder.recordEvent(event);
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
//# sourceMappingURL=screenRecorder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["trace","SpanStatusCode","Dimensions","Platform","createRecordingMetaEvent","createFullSnapshotEvent","createIncrementalSnapshotWithImageUpdate","createIncrementalSnapshotUtil","generateScreenHash","logger","screenRecordingService","isWeb","OS","ScreenRecorder","isRecording","isBufferOnlyMode","needsFullSnapshot","events","captureCount","maxCaptures","captureQuality","captureScale","captureFormat","screenDimensions","nodeIdCounter","lastScreenCapture","lastScreenHash","enableChangeDetection","hashSampleSize","currentImageNodeId","viewShotRef","init","config","eventRecorder","_getScreenDimensions","recordingConfig","enabled","masking","updateConfig","start","info","_startPeriodicCapture","_startBufferSnapshotInterval","_captureScreen","stop","_stopPeriodicCapture","_stopBufferSnapshotInterval","pause","resume","setBufferOnlyMode","get","error","width","height","captureInterval","clearInterval","setInterval","undefined","configuredInterval","buffering","snapshotIntervalMs","intervalMs","Math","max","bufferSnapshotInterval","timestamp","base64Image","_captureScreenBase64","hasChanged","_hasScreenChanged","shouldEmitFullSnapshot","success","updateScreenWithIncrementalSnapshot","_createAndEmitFullSnapshotEvent","_generateScreenHash","_recordScreenCaptureError","warn","isScreenRecordingAvailable","recordingImage","captureMaskedScreen","quality","scale","recordEvent","fullSnapshotEvent","createFullSnapshot","Error","current","incrementalEvent","forceFullSnapshot","currentBase64","currentHash","_sendEvent","_event","_recordOpenTelemetrySpan","event","span","getTracer","startSpan","type","attributes","metadata","Object","entries","forEach","key","value","setAttribute","String","setStatus","code","OK","end","name","message","Date","now","ERROR","recordException","spanError","setCaptureInterval","setCaptureQuality","min","setCaptureFormat","format","setMaxCaptures","setChangeDetection","setHashSampleSize","size","recordScreenPerformance","screenName","loadTime","performance","push","recordScreenError","errorType","errorMessage","getEvents","clearEvents","getScreenStats","stats","totalCaptures","totalEvents","length","averageCaptureTime","successRate","captureTimes","map","captureTime","filter","time","reduce","a","b","successfulCaptures","dataUrl","isRecordingEnabled","getConfiguration","shutdown","setViewShotRef","ref","forceCapture"],"sourceRoot":"../../../src","sources":["recorder/screenRecorder.ts"],"mappings":"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","ignoreList":[]}
|