@multiplayer-app/session-recorder-react-native 1.3.4 → 1.3.6
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/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeModule.kt +193 -65
- package/ios/SessionRecorderNative.swift +218 -130
- package/lib/module/config/defaults.js +1 -1
- package/lib/module/config/defaults.js.map +1 -1
- package/lib/module/patch/fetch.js +4 -15
- package/lib/module/patch/fetch.js.map +1 -1
- package/lib/module/recorder/screenRecorder.js +24 -35
- package/lib/module/recorder/screenRecorder.js.map +1 -1
- package/lib/module/services/{screenMaskingService.js → screenRecordingService.js} +12 -12
- package/lib/module/services/screenRecordingService.js.map +1 -0
- package/lib/typescript/src/recorder/screenRecorder.d.ts +2 -6
- package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -1
- package/lib/typescript/src/services/{screenMaskingService.d.ts → screenRecordingService.d.ts} +8 -8
- package/lib/typescript/src/services/screenRecordingService.d.ts.map +1 -0
- package/package.json +4 -3
- package/src/config/defaults.ts +1 -1
- package/src/patch/fetch.ts +4 -17
- package/src/recorder/screenRecorder.ts +30 -47
- package/src/services/{screenMaskingService.ts → screenRecordingService.ts} +16 -16
- package/lib/module/services/screenMaskingService.js.map +0 -1
- package/lib/typescript/src/services/screenMaskingService.d.ts.map +0 -1
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
import { trace, SpanStatusCode } from '@opentelemetry/api';
|
|
4
4
|
import { Dimensions, Platform } from 'react-native';
|
|
5
5
|
import { createRecordingMetaEvent, createFullSnapshotEvent, createIncrementalSnapshotWithImageUpdate as createIncrementalSnapshotUtil, generateScreenHash, logger } from "../utils/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import { captureRef } from 'react-native-view-shot';
|
|
6
|
+
import { screenRecordingService } from "../services/screenRecordingService.js";
|
|
8
7
|
const isWeb = Platform.OS === 'web';
|
|
9
8
|
export class ScreenRecorder {
|
|
10
9
|
isRecording = false;
|
|
@@ -12,29 +11,29 @@ export class ScreenRecorder {
|
|
|
12
11
|
captureCount = 0;
|
|
13
12
|
maxCaptures = 100; // Limit captures to prevent memory issues
|
|
14
13
|
captureQuality = 0.2;
|
|
15
|
-
captureScale = 0.
|
|
14
|
+
captureScale = 0.33;
|
|
16
15
|
captureFormat = 'jpg';
|
|
17
16
|
screenDimensions = null;
|
|
18
17
|
nodeIdCounter = 1;
|
|
19
|
-
viewShotRef = null;
|
|
20
18
|
lastScreenCapture = null;
|
|
21
19
|
lastScreenHash = null;
|
|
22
20
|
enableChangeDetection = true;
|
|
23
21
|
hashSampleSize = 100;
|
|
24
22
|
currentImageNodeId = null;
|
|
23
|
+
viewShotRef = null;
|
|
25
24
|
init(config, eventRecorder) {
|
|
26
25
|
this.config = config;
|
|
27
26
|
this.eventRecorder = eventRecorder;
|
|
28
27
|
this._getScreenDimensions();
|
|
29
28
|
|
|
30
29
|
// Initialize masking configuration
|
|
31
|
-
this.
|
|
30
|
+
this.recordingConfig = {
|
|
32
31
|
enabled: true,
|
|
33
32
|
...this.config.masking
|
|
34
33
|
};
|
|
35
34
|
|
|
36
35
|
// Update the masking service configuration
|
|
37
|
-
|
|
36
|
+
screenRecordingService.updateConfig(this.recordingConfig);
|
|
38
37
|
}
|
|
39
38
|
start() {
|
|
40
39
|
this.isRecording = true;
|
|
@@ -131,37 +130,39 @@ export class ScreenRecorder {
|
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
// Try native masking first if available
|
|
134
|
-
if (
|
|
133
|
+
if (screenRecordingService.isScreenRecordingAvailable()) {
|
|
135
134
|
logger.info('ScreenRecorder', 'Using native masking for screen capture');
|
|
136
|
-
const
|
|
135
|
+
const recordingImage = await screenRecordingService.captureMaskedScreen({
|
|
137
136
|
quality: this.captureQuality,
|
|
138
137
|
scale: this.captureScale
|
|
139
138
|
});
|
|
140
|
-
if (
|
|
141
|
-
return
|
|
139
|
+
if (recordingImage) {
|
|
140
|
+
return recordingImage;
|
|
142
141
|
}
|
|
143
142
|
logger.warn('ScreenRecorder', 'Native masking failed, falling back to view-shot');
|
|
144
143
|
}
|
|
145
144
|
|
|
146
|
-
// Fallback to react-native-view-shot
|
|
145
|
+
// // Fallback to react-native-view-shot
|
|
147
146
|
if (!this.viewShotRef) {
|
|
148
147
|
logger.warn('ScreenRecorder', 'ViewShot ref not available for screen capture');
|
|
149
148
|
return null;
|
|
150
149
|
}
|
|
150
|
+
return null;
|
|
151
151
|
|
|
152
|
-
// Check if captureRef is available
|
|
153
|
-
if (!captureRef) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}
|
|
152
|
+
// // Check if captureRef is available
|
|
153
|
+
// if (!captureRef) {
|
|
154
|
+
// logger.warn('ScreenRecorder', 'react-native-view-shot not available');
|
|
155
|
+
// return null;
|
|
156
|
+
// }
|
|
157
157
|
|
|
158
|
-
// Capture the screen using react-native-view-shot
|
|
159
|
-
const result = await captureRef(this.viewShotRef, {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
164
|
-
|
|
158
|
+
// // Capture the screen using react-native-view-shot
|
|
159
|
+
// const result = await captureRef(this.viewShotRef, {
|
|
160
|
+
// format: this.captureFormat,
|
|
161
|
+
// quality: this.captureQuality,
|
|
162
|
+
// result: 'base64',
|
|
163
|
+
// });
|
|
164
|
+
|
|
165
|
+
// return result;
|
|
165
166
|
} catch (error) {
|
|
166
167
|
logger.error('ScreenRecorder', 'Failed to capture screen. Make sure react-native-view-shot is properly installed and linked:', error);
|
|
167
168
|
return null;
|
|
@@ -315,18 +316,6 @@ export class ScreenRecorder {
|
|
|
315
316
|
// Failed to record error span - silently continue
|
|
316
317
|
}
|
|
317
318
|
}
|
|
318
|
-
async captureSpecificElement(elementRef, _options) {
|
|
319
|
-
try {
|
|
320
|
-
if (isWeb || !captureRef) {
|
|
321
|
-
logger.warn('ScreenRecorder', 'Element capture not available on web platform');
|
|
322
|
-
return null;
|
|
323
|
-
}
|
|
324
|
-
return await captureRef(elementRef);
|
|
325
|
-
} catch (error) {
|
|
326
|
-
// Failed to capture specific element - silently continue
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
319
|
|
|
331
320
|
// Configuration methods
|
|
332
321
|
setCaptureInterval(intervalMs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["trace","SpanStatusCode","Dimensions","Platform","createRecordingMetaEvent","createFullSnapshotEvent","createIncrementalSnapshotWithImageUpdate","createIncrementalSnapshotUtil","generateScreenHash","logger","screenMaskingService","captureRef","isWeb","OS","ScreenRecorder","isRecording","events","captureCount","maxCaptures","captureQuality","captureScale","captureFormat","screenDimensions","nodeIdCounter","viewShotRef","lastScreenCapture","lastScreenHash","enableChangeDetection","hashSampleSize","currentImageNodeId","init","config","eventRecorder","_getScreenDimensions","maskingConfig","enabled","masking","updateConfig","start","info","recordEvent","_startPeriodicCapture","_captureScreen","stop","_stopPeriodicCapture","pause","resume","get","error","width","height","captureInterval","clearInterval","setInterval","undefined","timestamp","base64Image","_captureScreenBase64","hasChanged","_hasScreenChanged","success","updateScreenWithIncrementalSnapshot","_createAndEmitFullSnapshotEvent","_generateScreenHash","_recordScreenCaptureError","warn","isScreenMaskingAvailable","maskedImage","captureMaskedScreen","quality","scale","result","format","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","captureSpecificElement","elementRef","_options","setCaptureInterval","intervalMs","setCaptureQuality","Math","max","min","setCaptureFormat","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":[]}
|
|
1
|
+
{"version":3,"names":["trace","SpanStatusCode","Dimensions","Platform","createRecordingMetaEvent","createFullSnapshotEvent","createIncrementalSnapshotWithImageUpdate","createIncrementalSnapshotUtil","generateScreenHash","logger","screenRecordingService","isWeb","OS","ScreenRecorder","isRecording","events","captureCount","maxCaptures","captureQuality","captureScale","captureFormat","screenDimensions","nodeIdCounter","lastScreenCapture","lastScreenHash","enableChangeDetection","hashSampleSize","currentImageNodeId","viewShotRef","init","config","eventRecorder","_getScreenDimensions","recordingConfig","enabled","masking","updateConfig","start","info","recordEvent","_startPeriodicCapture","_captureScreen","stop","_stopPeriodicCapture","pause","resume","get","error","width","height","captureInterval","clearInterval","setInterval","undefined","timestamp","base64Image","_captureScreenBase64","hasChanged","_hasScreenChanged","success","updateScreenWithIncrementalSnapshot","_createAndEmitFullSnapshotEvent","_generateScreenHash","_recordScreenCaptureError","warn","isScreenRecordingAvailable","recordingImage","captureMaskedScreen","quality","scale","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","intervalMs","setCaptureQuality","Math","max","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":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import SessionRecorderNative from "../native/SessionRecorderNative.js";
|
|
4
4
|
import { logger } from "../utils/index.js";
|
|
5
|
-
export class
|
|
5
|
+
export class ScreenRecordingService {
|
|
6
6
|
isAvailable = false;
|
|
7
7
|
constructor(config = {
|
|
8
8
|
enabled: true,
|
|
@@ -25,14 +25,14 @@ export class ScreenMaskingService {
|
|
|
25
25
|
// Try to access the native module to check if it's available
|
|
26
26
|
if (SessionRecorderNative && typeof SessionRecorderNative.captureAndMask === 'function') {
|
|
27
27
|
this.isAvailable = true;
|
|
28
|
-
logger.info('
|
|
28
|
+
logger.info('ScreenRecordingService', 'Screen masking native module is available');
|
|
29
29
|
} else {
|
|
30
30
|
this.isAvailable = false;
|
|
31
|
-
logger.warn('
|
|
31
|
+
logger.warn('ScreenRecordingService', 'Screen masking native module is not available - auto-linking may still be in progress');
|
|
32
32
|
}
|
|
33
33
|
} catch (error) {
|
|
34
34
|
this.isAvailable = false;
|
|
35
|
-
logger.error('
|
|
35
|
+
logger.error('ScreenRecordingService', 'Error checking screen masking availability:', error);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -41,7 +41,7 @@ export class ScreenMaskingService {
|
|
|
41
41
|
*/
|
|
42
42
|
async captureMaskedScreen(options) {
|
|
43
43
|
if (!this.isAvailable || !this.config.enabled) {
|
|
44
|
-
logger.warn('
|
|
44
|
+
logger.warn('ScreenRecordingService', 'Screen masking is not available or disabled');
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
47
|
try {
|
|
@@ -52,7 +52,7 @@ export class ScreenMaskingService {
|
|
|
52
52
|
const maskedImageBase64 = await SessionRecorderNative.captureAndMaskWithOptions(maskingOptions);
|
|
53
53
|
return maskedImageBase64;
|
|
54
54
|
} catch (error) {
|
|
55
|
-
logger.error('
|
|
55
|
+
logger.error('ScreenRecordingService', 'Failed to capture masked screen:', error);
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -62,14 +62,14 @@ export class ScreenMaskingService {
|
|
|
62
62
|
*/
|
|
63
63
|
async captureMaskedScreenBasic() {
|
|
64
64
|
if (!this.isAvailable || !this.config.enabled) {
|
|
65
|
-
logger.warn('
|
|
65
|
+
logger.warn('ScreenRecordingService', 'Screen masking is not available or disabled');
|
|
66
66
|
return null;
|
|
67
67
|
}
|
|
68
68
|
try {
|
|
69
69
|
const maskedImageBase64 = await SessionRecorderNative.captureAndMask();
|
|
70
70
|
return maskedImageBase64;
|
|
71
71
|
} catch (error) {
|
|
72
|
-
logger.error('
|
|
72
|
+
logger.error('ScreenRecordingService', 'Failed to capture masked screen (basic):', error);
|
|
73
73
|
return null;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -82,13 +82,13 @@ export class ScreenMaskingService {
|
|
|
82
82
|
...this.config,
|
|
83
83
|
...config
|
|
84
84
|
};
|
|
85
|
-
logger.info('
|
|
85
|
+
logger.info('ScreenRecordingService', 'Screen masking configuration updated');
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Check if screen masking is available
|
|
90
90
|
*/
|
|
91
|
-
|
|
91
|
+
isScreenRecordingAvailable() {
|
|
92
92
|
return this.isAvailable && this.config.enabled;
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -103,5 +103,5 @@ export class ScreenMaskingService {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// Create a singleton instance
|
|
106
|
-
export const
|
|
107
|
-
//# sourceMappingURL=
|
|
106
|
+
export const screenRecordingService = new ScreenRecordingService();
|
|
107
|
+
//# sourceMappingURL=screenRecordingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SessionRecorderNative","logger","ScreenRecordingService","isAvailable","constructor","config","enabled","maskTextInputs","maskImages","maskButtons","maskLabels","maskWebViews","maskSandboxedViews","checkAvailability","captureAndMask","info","warn","error","captureMaskedScreen","options","maskingOptions","maskedImageBase64","captureAndMaskWithOptions","captureMaskedScreenBasic","updateConfig","isScreenRecordingAvailable","getConfig","screenRecordingService"],"sourceRoot":"../../../src","sources":["services/screenRecordingService.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,13 +13,13 @@ export declare class ScreenRecorder implements EventRecorder {
|
|
|
13
13
|
private screenDimensions;
|
|
14
14
|
private eventRecorder?;
|
|
15
15
|
private nodeIdCounter;
|
|
16
|
-
private viewShotRef;
|
|
17
16
|
private lastScreenCapture;
|
|
18
17
|
private lastScreenHash;
|
|
19
18
|
private enableChangeDetection;
|
|
20
19
|
private hashSampleSize;
|
|
21
20
|
private currentImageNodeId;
|
|
22
|
-
private
|
|
21
|
+
private recordingConfig?;
|
|
22
|
+
private viewShotRef;
|
|
23
23
|
init(config: RecorderConfig, eventRecorder?: EventRecorder): void;
|
|
24
24
|
start(): void;
|
|
25
25
|
stop(): void;
|
|
@@ -75,10 +75,6 @@ export declare class ScreenRecorder implements EventRecorder {
|
|
|
75
75
|
private _sendEvent;
|
|
76
76
|
private _recordOpenTelemetrySpan;
|
|
77
77
|
private _recordScreenCaptureError;
|
|
78
|
-
captureSpecificElement(elementRef: any, _options?: {
|
|
79
|
-
format?: 'png' | 'jpg' | 'webp';
|
|
80
|
-
quality?: number;
|
|
81
|
-
}): Promise<string | null>;
|
|
82
78
|
setCaptureInterval(intervalMs: number): void;
|
|
83
79
|
setCaptureQuality(quality: number): void;
|
|
84
80
|
setCaptureFormat(format: 'png' | 'jpg'): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenRecorder.d.ts","sourceRoot":"","sources":["../../../../src/recorder/screenRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"screenRecorder.d.ts","sourceRoot":"","sources":["../../../../src/recorder/screenRecorder.ts"],"names":[],"mappings":"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"}
|
package/lib/typescript/src/services/{screenMaskingService.d.ts → screenRecordingService.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type MaskingOptions } from '../native/SessionRecorderNative';
|
|
2
|
-
export interface
|
|
2
|
+
export interface ScreenRecordingConfig {
|
|
3
3
|
/** Whether screen masking is enabled */
|
|
4
4
|
enabled: boolean;
|
|
5
5
|
/** Whether to mask text inputs (UITextField, UITextView, React Native text components) */
|
|
@@ -15,10 +15,10 @@ export interface ScreenMaskingConfig {
|
|
|
15
15
|
/** Whether to mask sandboxed views (system views that don't belong to current process) */
|
|
16
16
|
maskSandboxedViews?: boolean;
|
|
17
17
|
}
|
|
18
|
-
export declare class
|
|
18
|
+
export declare class ScreenRecordingService {
|
|
19
19
|
private config;
|
|
20
20
|
private isAvailable;
|
|
21
|
-
constructor(config?:
|
|
21
|
+
constructor(config?: ScreenRecordingConfig);
|
|
22
22
|
/**
|
|
23
23
|
* Check if the native masking module is available
|
|
24
24
|
*/
|
|
@@ -34,15 +34,15 @@ export declare class ScreenMaskingService {
|
|
|
34
34
|
/**
|
|
35
35
|
* Update the masking configuration
|
|
36
36
|
*/
|
|
37
|
-
updateConfig(config: Partial<
|
|
37
|
+
updateConfig(config: Partial<ScreenRecordingConfig>): void;
|
|
38
38
|
/**
|
|
39
39
|
* Check if screen masking is available
|
|
40
40
|
*/
|
|
41
|
-
|
|
41
|
+
isScreenRecordingAvailable(): boolean;
|
|
42
42
|
/**
|
|
43
43
|
* Get the current configuration
|
|
44
44
|
*/
|
|
45
|
-
getConfig():
|
|
45
|
+
getConfig(): ScreenRecordingConfig;
|
|
46
46
|
}
|
|
47
|
-
export declare const
|
|
48
|
-
//# sourceMappingURL=
|
|
47
|
+
export declare const screenRecordingService: ScreenRecordingService;
|
|
48
|
+
//# sourceMappingURL=screenRecordingService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenRecordingService.d.ts","sourceRoot":"","sources":["../../../../src/services/screenRecordingService.ts"],"names":[],"mappings":"AAAA,OAA8B,EAAE,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAG7F,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,WAAW,CAAkB;gBAGnC,MAAM,GAAE,qBAQP;IAMH;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2B1E;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsBxD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAK1D;;OAEG;IACH,0BAA0B,IAAI,OAAO;IAIrC;;OAEG;IACH,SAAS,IAAI,qBAAqB;CAGnC;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplayer-app/session-recorder-react-native",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.6",
|
|
4
4
|
"description": "Multiplayer Fullstack Session Recorder for React Native",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Multiplayer Software, Inc.",
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
"typecheck": "tsc",
|
|
59
59
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
60
60
|
"prepare": "bob build",
|
|
61
|
-
"release": "release-it --only-version"
|
|
61
|
+
"release": "release-it --only-version",
|
|
62
|
+
"copy-to-test": "../../scripts/copy-rn-lib.sh"
|
|
62
63
|
},
|
|
63
64
|
"keywords": [
|
|
64
65
|
"multiplayer",
|
|
@@ -107,7 +108,7 @@
|
|
|
107
108
|
"typescript": "^5.9.2"
|
|
108
109
|
},
|
|
109
110
|
"dependencies": {
|
|
110
|
-
"@multiplayer-app/session-recorder-common": "1.3.
|
|
111
|
+
"@multiplayer-app/session-recorder-common": "1.3.6",
|
|
111
112
|
"@opentelemetry/core": "2.0.1",
|
|
112
113
|
"@opentelemetry/exporter-trace-otlp-http": "0.203.0",
|
|
113
114
|
"@opentelemetry/instrumentation": "0.203.0",
|
package/src/config/defaults.ts
CHANGED
package/src/patch/fetch.ts
CHANGED
|
@@ -118,22 +118,9 @@ if (typeof fetch !== 'undefined' && typeof global !== 'undefined') {
|
|
|
118
118
|
|
|
119
119
|
// Capture request data
|
|
120
120
|
const inputIsRequest = typeof Request !== 'undefined' && input instanceof Request
|
|
121
|
-
const safeToConstructRequest = !inputIsRequest || !(input as Request).bodyUsed
|
|
122
|
-
|
|
123
|
-
// Only construct a new Request when it's safe (i.e., body not already used)
|
|
124
|
-
let requestForMetadata: Request | null = null
|
|
125
|
-
if (safeToConstructRequest) {
|
|
126
|
-
try {
|
|
127
|
-
requestForMetadata = new Request(input as RequestInfo, init)
|
|
128
|
-
} catch {
|
|
129
|
-
requestForMetadata = null
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
121
|
|
|
133
122
|
if (configs.recordRequestHeaders) {
|
|
134
|
-
if (
|
|
135
|
-
networkRequest.requestHeaders = _headersToObject(requestForMetadata.headers)
|
|
136
|
-
} else if (inputIsRequest) {
|
|
123
|
+
if (inputIsRequest) {
|
|
137
124
|
networkRequest.requestHeaders = _headersToObject((input as Request).headers)
|
|
138
125
|
} else {
|
|
139
126
|
networkRequest.requestHeaders = _headersInitToObject(init?.headers)
|
|
@@ -141,9 +128,9 @@ if (typeof fetch !== 'undefined' && typeof global !== 'undefined') {
|
|
|
141
128
|
}
|
|
142
129
|
|
|
143
130
|
if (configs.shouldRecordBody) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
131
|
+
// Only attempt to read the body from init (safe); avoid constructing/cloning Requests
|
|
132
|
+
// If the caller passed a Request as input, we do not attempt to read its body here
|
|
133
|
+
const candidateBody: any | null | undefined = init?.body
|
|
147
134
|
|
|
148
135
|
if (!isNullish(candidateBody)) {
|
|
149
136
|
const requestBody = _tryReadFetchBody({
|
|
@@ -14,10 +14,9 @@ import {
|
|
|
14
14
|
logger,
|
|
15
15
|
} from '../utils';
|
|
16
16
|
import {
|
|
17
|
-
|
|
18
|
-
type
|
|
19
|
-
} from '../services/
|
|
20
|
-
import { captureRef } from 'react-native-view-shot';
|
|
17
|
+
screenRecordingService,
|
|
18
|
+
type ScreenRecordingConfig,
|
|
19
|
+
} from '../services/screenRecordingService';
|
|
21
20
|
const isWeb = Platform.OS === 'web';
|
|
22
21
|
|
|
23
22
|
export class ScreenRecorder implements EventRecorder {
|
|
@@ -28,18 +27,18 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
28
27
|
private captureCount: number = 0;
|
|
29
28
|
private maxCaptures: number = 100; // Limit captures to prevent memory issues
|
|
30
29
|
private captureQuality: number = 0.2;
|
|
31
|
-
private captureScale: number = 0.
|
|
30
|
+
private captureScale: number = 0.33;
|
|
32
31
|
private captureFormat: 'png' | 'jpg' = 'jpg';
|
|
33
32
|
private screenDimensions: { width: number; height: number } | null = null;
|
|
34
33
|
private eventRecorder?: EventRecorder;
|
|
35
34
|
private nodeIdCounter: number = 1;
|
|
36
|
-
private viewShotRef: any = null;
|
|
37
35
|
private lastScreenCapture: string | null = null;
|
|
38
36
|
private lastScreenHash: string | null = null;
|
|
39
37
|
private enableChangeDetection: boolean = true;
|
|
40
38
|
private hashSampleSize: number = 100;
|
|
41
39
|
private currentImageNodeId: number | null = null;
|
|
42
|
-
private
|
|
40
|
+
private recordingConfig?: ScreenRecordingConfig;
|
|
41
|
+
private viewShotRef: any = null;
|
|
43
42
|
|
|
44
43
|
init(config: RecorderConfig, eventRecorder?: EventRecorder): void {
|
|
45
44
|
this.config = config;
|
|
@@ -47,13 +46,13 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
47
46
|
this._getScreenDimensions();
|
|
48
47
|
|
|
49
48
|
// Initialize masking configuration
|
|
50
|
-
this.
|
|
49
|
+
this.recordingConfig = {
|
|
51
50
|
enabled: true,
|
|
52
51
|
...this.config.masking,
|
|
53
52
|
};
|
|
54
53
|
|
|
55
54
|
// Update the masking service configuration
|
|
56
|
-
|
|
55
|
+
screenRecordingService.updateConfig(this.recordingConfig);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
start(): void {
|
|
@@ -169,18 +168,18 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
169
168
|
}
|
|
170
169
|
|
|
171
170
|
// Try native masking first if available
|
|
172
|
-
if (
|
|
171
|
+
if (screenRecordingService.isScreenRecordingAvailable()) {
|
|
173
172
|
logger.info(
|
|
174
173
|
'ScreenRecorder',
|
|
175
174
|
'Using native masking for screen capture'
|
|
176
175
|
);
|
|
177
|
-
const
|
|
176
|
+
const recordingImage = await screenRecordingService.captureMaskedScreen({
|
|
178
177
|
quality: this.captureQuality,
|
|
179
178
|
scale: this.captureScale,
|
|
180
179
|
});
|
|
181
180
|
|
|
182
|
-
if (
|
|
183
|
-
return
|
|
181
|
+
if (recordingImage) {
|
|
182
|
+
return recordingImage;
|
|
184
183
|
}
|
|
185
184
|
|
|
186
185
|
logger.warn(
|
|
@@ -189,7 +188,9 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
189
188
|
);
|
|
190
189
|
}
|
|
191
190
|
|
|
192
|
-
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
// // Fallback to react-native-view-shot
|
|
193
194
|
if (!this.viewShotRef) {
|
|
194
195
|
logger.warn(
|
|
195
196
|
'ScreenRecorder',
|
|
@@ -198,20 +199,22 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
198
199
|
return null;
|
|
199
200
|
}
|
|
200
201
|
|
|
201
|
-
|
|
202
|
-
if (!captureRef) {
|
|
203
|
-
logger.warn('ScreenRecorder', 'react-native-view-shot not available');
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
202
|
+
return null;
|
|
206
203
|
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
204
|
+
// // Check if captureRef is available
|
|
205
|
+
// if (!captureRef) {
|
|
206
|
+
// logger.warn('ScreenRecorder', 'react-native-view-shot not available');
|
|
207
|
+
// return null;
|
|
208
|
+
// }
|
|
209
|
+
|
|
210
|
+
// // Capture the screen using react-native-view-shot
|
|
211
|
+
// const result = await captureRef(this.viewShotRef, {
|
|
212
|
+
// format: this.captureFormat,
|
|
213
|
+
// quality: this.captureQuality,
|
|
214
|
+
// result: 'base64',
|
|
215
|
+
// });
|
|
213
216
|
|
|
214
|
-
return result;
|
|
217
|
+
// return result;
|
|
215
218
|
} catch (error) {
|
|
216
219
|
logger.error(
|
|
217
220
|
'ScreenRecorder',
|
|
@@ -397,27 +400,7 @@ export class ScreenRecorder implements EventRecorder {
|
|
|
397
400
|
}
|
|
398
401
|
}
|
|
399
402
|
|
|
400
|
-
|
|
401
|
-
elementRef: any,
|
|
402
|
-
_options?: {
|
|
403
|
-
format?: 'png' | 'jpg' | 'webp';
|
|
404
|
-
quality?: number;
|
|
405
|
-
}
|
|
406
|
-
): Promise<string | null> {
|
|
407
|
-
try {
|
|
408
|
-
if (isWeb || !captureRef) {
|
|
409
|
-
logger.warn(
|
|
410
|
-
'ScreenRecorder',
|
|
411
|
-
'Element capture not available on web platform'
|
|
412
|
-
);
|
|
413
|
-
return null;
|
|
414
|
-
}
|
|
415
|
-
return await captureRef(elementRef);
|
|
416
|
-
} catch (error) {
|
|
417
|
-
// Failed to capture specific element - silently continue
|
|
418
|
-
return null;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
403
|
+
|
|
421
404
|
|
|
422
405
|
// Configuration methods
|
|
423
406
|
setCaptureInterval(intervalMs: number): void {
|