@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.
Files changed (280) hide show
  1. package/package.json +4 -4
  2. package/src/NativeSessionRecorderModule.ts +4 -2
  3. package/src/NativeSessionRecorderModuleSpec.ts +4 -2
  4. package/src/NativeSessionRecorderNative.ts +1 -1
  5. package/src/index.ts +0 -1
  6. package/src/otel/instrumentations/index.ts +22 -22
  7. package/src/session-recorder.ts +4 -0
  8. package/src/types/configs.ts +1 -2
  9. package/lib/module/NativeSessionRecorderModule.js +0 -5
  10. package/lib/module/NativeSessionRecorderModule.js.map +0 -1
  11. package/lib/module/NativeSessionRecorderModuleSpec.js +0 -5
  12. package/lib/module/NativeSessionRecorderModuleSpec.js.map +0 -1
  13. package/lib/module/NativeSessionRecorderNative.js +0 -5
  14. package/lib/module/NativeSessionRecorderNative.js.map +0 -1
  15. package/lib/module/components/ErrorBoundary.js +0 -32
  16. package/lib/module/components/ErrorBoundary.js.map +0 -1
  17. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +0 -23
  18. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  19. package/lib/module/components/ScreenRecorderView/index.js +0 -4
  20. package/lib/module/components/ScreenRecorderView/index.js.map +0 -1
  21. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +0 -64
  22. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  23. package/lib/module/components/SessionRecorderWidget/FinalPopover.js +0 -74
  24. package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  25. package/lib/module/components/SessionRecorderWidget/FloatingButton.js +0 -191
  26. package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  27. package/lib/module/components/SessionRecorderWidget/InitialPopover.js +0 -138
  28. package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  29. package/lib/module/components/SessionRecorderWidget/ModalContainer.js +0 -177
  30. package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  31. package/lib/module/components/SessionRecorderWidget/ModalHeader.js +0 -27
  32. package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  33. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -133
  34. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  35. package/lib/module/components/SessionRecorderWidget/icons.js +0 -93
  36. package/lib/module/components/SessionRecorderWidget/icons.js.map +0 -1
  37. package/lib/module/components/SessionRecorderWidget/index.js +0 -5
  38. package/lib/module/components/SessionRecorderWidget/index.js.map +0 -1
  39. package/lib/module/components/SessionRecorderWidget/styles.js +0 -173
  40. package/lib/module/components/SessionRecorderWidget/styles.js.map +0 -1
  41. package/lib/module/components/index.js +0 -6
  42. package/lib/module/components/index.js.map +0 -1
  43. package/lib/module/config/constants.js +0 -47
  44. package/lib/module/config/constants.js.map +0 -1
  45. package/lib/module/config/defaults.js +0 -87
  46. package/lib/module/config/defaults.js.map +0 -1
  47. package/lib/module/config/index.js +0 -9
  48. package/lib/module/config/index.js.map +0 -1
  49. package/lib/module/config/masking.js +0 -35
  50. package/lib/module/config/masking.js.map +0 -1
  51. package/lib/module/config/session-recorder.js +0 -50
  52. package/lib/module/config/session-recorder.js.map +0 -1
  53. package/lib/module/config/validators.js +0 -28
  54. package/lib/module/config/validators.js.map +0 -1
  55. package/lib/module/config/widget.js +0 -35
  56. package/lib/module/config/widget.js.map +0 -1
  57. package/lib/module/context/SessionRecorderContext.js +0 -100
  58. package/lib/module/context/SessionRecorderContext.js.map +0 -1
  59. package/lib/module/context/SessionRecorderStore.js +0 -12
  60. package/lib/module/context/SessionRecorderStore.js.map +0 -1
  61. package/lib/module/context/createStore.js +0 -27
  62. package/lib/module/context/createStore.js.map +0 -1
  63. package/lib/module/context/useSessionRecorderStore.js +0 -45
  64. package/lib/module/context/useSessionRecorderStore.js.map +0 -1
  65. package/lib/module/context/useStoreSelector.js +0 -27
  66. package/lib/module/context/useStoreSelector.js.map +0 -1
  67. package/lib/module/index.js +0 -14
  68. package/lib/module/index.js.map +0 -1
  69. package/lib/module/native/SessionRecorderNative.js +0 -76
  70. package/lib/module/native/SessionRecorderNative.js.map +0 -1
  71. package/lib/module/native/index.js +0 -4
  72. package/lib/module/native/index.js.map +0 -1
  73. package/lib/module/otel/CrashBufferSpanProcessor.js +0 -42
  74. package/lib/module/otel/CrashBufferSpanProcessor.js.map +0 -1
  75. package/lib/module/otel/helpers.js +0 -218
  76. package/lib/module/otel/helpers.js.map +0 -1
  77. package/lib/module/otel/index.js +0 -202
  78. package/lib/module/otel/index.js.map +0 -1
  79. package/lib/module/otel/instrumentations/index.js +0 -122
  80. package/lib/module/otel/instrumentations/index.js.map +0 -1
  81. package/lib/module/package.json +0 -1
  82. package/lib/module/patch/configs.js +0 -18
  83. package/lib/module/patch/configs.js.map +0 -1
  84. package/lib/module/patch/fetch.js +0 -222
  85. package/lib/module/patch/fetch.js.map +0 -1
  86. package/lib/module/patch/index.js +0 -6
  87. package/lib/module/patch/index.js.map +0 -1
  88. package/lib/module/patch/xhr.js +0 -100
  89. package/lib/module/patch/xhr.js.map +0 -1
  90. package/lib/module/recorder/gestureRecorder.js +0 -641
  91. package/lib/module/recorder/gestureRecorder.js.map +0 -1
  92. package/lib/module/recorder/index.js +0 -176
  93. package/lib/module/recorder/index.js.map +0 -1
  94. package/lib/module/recorder/navigationRecorder.js +0 -238
  95. package/lib/module/recorder/navigationRecorder.js.map +0 -1
  96. package/lib/module/recorder/screenRecorder.js +0 -527
  97. package/lib/module/recorder/screenRecorder.js.map +0 -1
  98. package/lib/module/services/api.service.js +0 -166
  99. package/lib/module/services/api.service.js.map +0 -1
  100. package/lib/module/services/crashBuffer.service.js +0 -280
  101. package/lib/module/services/crashBuffer.service.js.map +0 -1
  102. package/lib/module/services/network.service.js +0 -178
  103. package/lib/module/services/network.service.js.map +0 -1
  104. package/lib/module/services/screenRecordingService.js +0 -107
  105. package/lib/module/services/screenRecordingService.js.map +0 -1
  106. package/lib/module/services/socket.service.js +0 -186
  107. package/lib/module/services/socket.service.js.map +0 -1
  108. package/lib/module/services/storage.service.js +0 -178
  109. package/lib/module/services/storage.service.js.map +0 -1
  110. package/lib/module/session-recorder.js +0 -750
  111. package/lib/module/session-recorder.js.map +0 -1
  112. package/lib/module/types/configs.js +0 -4
  113. package/lib/module/types/configs.js.map +0 -1
  114. package/lib/module/types/expo-constants.d.js +0 -2
  115. package/lib/module/types/expo-constants.d.js.map +0 -1
  116. package/lib/module/types/index.js +0 -10
  117. package/lib/module/types/index.js.map +0 -1
  118. package/lib/module/types/session-recorder.js +0 -68
  119. package/lib/module/types/session-recorder.js.map +0 -1
  120. package/lib/module/utils/app-metadata.js +0 -28
  121. package/lib/module/utils/app-metadata.js.map +0 -1
  122. package/lib/module/utils/constants.optional.expo.js +0 -6
  123. package/lib/module/utils/constants.optional.expo.js.map +0 -1
  124. package/lib/module/utils/constants.optional.js +0 -8
  125. package/lib/module/utils/constants.optional.js.map +0 -1
  126. package/lib/module/utils/index.js +0 -11
  127. package/lib/module/utils/index.js.map +0 -1
  128. package/lib/module/utils/logger.js +0 -185
  129. package/lib/module/utils/logger.js.map +0 -1
  130. package/lib/module/utils/platform.js +0 -340
  131. package/lib/module/utils/platform.js.map +0 -1
  132. package/lib/module/utils/request-utils.js +0 -58
  133. package/lib/module/utils/request-utils.js.map +0 -1
  134. package/lib/module/utils/rrweb-events.js +0 -276
  135. package/lib/module/utils/rrweb-events.js.map +0 -1
  136. package/lib/module/utils/session.js +0 -21
  137. package/lib/module/utils/session.js.map +0 -1
  138. package/lib/module/utils/shallowEqual.js +0 -17
  139. package/lib/module/utils/shallowEqual.js.map +0 -1
  140. package/lib/module/utils/time.js +0 -17
  141. package/lib/module/utils/time.js.map +0 -1
  142. package/lib/module/utils/type-utils.js +0 -69
  143. package/lib/module/utils/type-utils.js.map +0 -1
  144. package/lib/module/version.js +0 -4
  145. package/lib/module/version.js.map +0 -1
  146. package/lib/typescript/package.json +0 -1
  147. package/lib/typescript/src/NativeSessionRecorderModule.d.ts +0 -25
  148. package/lib/typescript/src/NativeSessionRecorderModule.d.ts.map +0 -1
  149. package/lib/typescript/src/NativeSessionRecorderModuleSpec.d.ts +0 -25
  150. package/lib/typescript/src/NativeSessionRecorderModuleSpec.d.ts.map +0 -1
  151. package/lib/typescript/src/NativeSessionRecorderNative.d.ts +0 -25
  152. package/lib/typescript/src/NativeSessionRecorderNative.d.ts.map +0 -1
  153. package/lib/typescript/src/components/ErrorBoundary.d.ts +0 -16
  154. package/lib/typescript/src/components/ErrorBoundary.d.ts.map +0 -1
  155. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -6
  156. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +0 -1
  157. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +0 -2
  158. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +0 -1
  159. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts +0 -8
  160. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +0 -1
  161. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts +0 -13
  162. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +0 -1
  163. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts +0 -9
  164. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +0 -1
  165. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts +0 -17
  166. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +0 -1
  167. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts +0 -9
  168. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +0 -1
  169. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts +0 -7
  170. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +0 -1
  171. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +0 -6
  172. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +0 -1
  173. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts +0 -12
  174. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +0 -1
  175. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +0 -3
  176. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +0 -1
  177. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts +0 -166
  178. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +0 -1
  179. package/lib/typescript/src/components/index.d.ts +0 -4
  180. package/lib/typescript/src/components/index.d.ts.map +0 -1
  181. package/lib/typescript/src/config/constants.d.ts +0 -22
  182. package/lib/typescript/src/config/constants.d.ts.map +0 -1
  183. package/lib/typescript/src/config/defaults.d.ts +0 -5
  184. package/lib/typescript/src/config/defaults.d.ts.map +0 -1
  185. package/lib/typescript/src/config/index.d.ts +0 -6
  186. package/lib/typescript/src/config/index.d.ts.map +0 -1
  187. package/lib/typescript/src/config/masking.d.ts +0 -3
  188. package/lib/typescript/src/config/masking.d.ts.map +0 -1
  189. package/lib/typescript/src/config/session-recorder.d.ts +0 -3
  190. package/lib/typescript/src/config/session-recorder.d.ts.map +0 -1
  191. package/lib/typescript/src/config/validators.d.ts +0 -11
  192. package/lib/typescript/src/config/validators.d.ts.map +0 -1
  193. package/lib/typescript/src/config/widget.d.ts +0 -10
  194. package/lib/typescript/src/config/widget.d.ts.map +0 -1
  195. package/lib/typescript/src/context/SessionRecorderContext.d.ts +0 -22
  196. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +0 -1
  197. package/lib/typescript/src/context/SessionRecorderStore.d.ts +0 -13
  198. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +0 -1
  199. package/lib/typescript/src/context/createStore.d.ts +0 -9
  200. package/lib/typescript/src/context/createStore.d.ts.map +0 -1
  201. package/lib/typescript/src/context/useSessionRecorderStore.d.ts +0 -29
  202. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +0 -1
  203. package/lib/typescript/src/context/useStoreSelector.d.ts +0 -5
  204. package/lib/typescript/src/context/useStoreSelector.d.ts.map +0 -1
  205. package/lib/typescript/src/index.d.ts +0 -9
  206. package/lib/typescript/src/index.d.ts.map +0 -1
  207. package/lib/typescript/src/native/SessionRecorderNative.d.ts +0 -29
  208. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +0 -1
  209. package/lib/typescript/src/native/index.d.ts +0 -2
  210. package/lib/typescript/src/native/index.d.ts.map +0 -1
  211. package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts +0 -17
  212. package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts.map +0 -1
  213. package/lib/typescript/src/otel/helpers.d.ts +0 -46
  214. package/lib/typescript/src/otel/helpers.d.ts.map +0 -1
  215. package/lib/typescript/src/otel/index.d.ts +0 -33
  216. package/lib/typescript/src/otel/index.d.ts.map +0 -1
  217. package/lib/typescript/src/otel/instrumentations/index.d.ts +0 -5
  218. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +0 -1
  219. package/lib/typescript/src/patch/configs.d.ts +0 -9
  220. package/lib/typescript/src/patch/configs.d.ts.map +0 -1
  221. package/lib/typescript/src/patch/fetch.d.ts +0 -2
  222. package/lib/typescript/src/patch/fetch.d.ts.map +0 -1
  223. package/lib/typescript/src/patch/index.d.ts +0 -4
  224. package/lib/typescript/src/patch/index.d.ts.map +0 -1
  225. package/lib/typescript/src/patch/xhr.d.ts +0 -2
  226. package/lib/typescript/src/patch/xhr.d.ts.map +0 -1
  227. package/lib/typescript/src/recorder/gestureRecorder.d.ts +0 -66
  228. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +0 -1
  229. package/lib/typescript/src/recorder/index.d.ts +0 -79
  230. package/lib/typescript/src/recorder/index.d.ts.map +0 -1
  231. package/lib/typescript/src/recorder/navigationRecorder.d.ts +0 -29
  232. package/lib/typescript/src/recorder/navigationRecorder.d.ts.map +0 -1
  233. package/lib/typescript/src/recorder/screenRecorder.d.ts +0 -127
  234. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +0 -1
  235. package/lib/typescript/src/services/api.service.d.ts +0 -116
  236. package/lib/typescript/src/services/api.service.d.ts.map +0 -1
  237. package/lib/typescript/src/services/crashBuffer.service.d.ts +0 -27
  238. package/lib/typescript/src/services/crashBuffer.service.d.ts.map +0 -1
  239. package/lib/typescript/src/services/network.service.d.ts +0 -47
  240. package/lib/typescript/src/services/network.service.d.ts.map +0 -1
  241. package/lib/typescript/src/services/screenRecordingService.d.ts +0 -48
  242. package/lib/typescript/src/services/screenRecordingService.d.ts.map +0 -1
  243. package/lib/typescript/src/services/socket.service.d.ts +0 -44
  244. package/lib/typescript/src/services/socket.service.d.ts.map +0 -1
  245. package/lib/typescript/src/services/storage.service.d.ts +0 -47
  246. package/lib/typescript/src/services/storage.service.d.ts.map +0 -1
  247. package/lib/typescript/src/session-recorder.d.ts +0 -191
  248. package/lib/typescript/src/session-recorder.d.ts.map +0 -1
  249. package/lib/typescript/src/types/configs.d.ts +0 -92
  250. package/lib/typescript/src/types/configs.d.ts.map +0 -1
  251. package/lib/typescript/src/types/index.d.ts +0 -21
  252. package/lib/typescript/src/types/index.d.ts.map +0 -1
  253. package/lib/typescript/src/types/session-recorder.d.ts +0 -367
  254. package/lib/typescript/src/types/session-recorder.d.ts.map +0 -1
  255. package/lib/typescript/src/utils/app-metadata.d.ts +0 -17
  256. package/lib/typescript/src/utils/app-metadata.d.ts.map +0 -1
  257. package/lib/typescript/src/utils/constants.optional.d.ts +0 -22
  258. package/lib/typescript/src/utils/constants.optional.d.ts.map +0 -1
  259. package/lib/typescript/src/utils/constants.optional.expo.d.ts +0 -4
  260. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +0 -1
  261. package/lib/typescript/src/utils/index.d.ts +0 -8
  262. package/lib/typescript/src/utils/index.d.ts.map +0 -1
  263. package/lib/typescript/src/utils/logger.d.ts +0 -108
  264. package/lib/typescript/src/utils/logger.d.ts.map +0 -1
  265. package/lib/typescript/src/utils/platform.d.ts +0 -58
  266. package/lib/typescript/src/utils/platform.d.ts.map +0 -1
  267. package/lib/typescript/src/utils/request-utils.d.ts +0 -22
  268. package/lib/typescript/src/utils/request-utils.d.ts.map +0 -1
  269. package/lib/typescript/src/utils/rrweb-events.d.ts +0 -67
  270. package/lib/typescript/src/utils/rrweb-events.d.ts.map +0 -1
  271. package/lib/typescript/src/utils/session.d.ts +0 -7
  272. package/lib/typescript/src/utils/session.d.ts.map +0 -1
  273. package/lib/typescript/src/utils/shallowEqual.d.ts +0 -2
  274. package/lib/typescript/src/utils/shallowEqual.d.ts.map +0 -1
  275. package/lib/typescript/src/utils/time.d.ts +0 -5
  276. package/lib/typescript/src/utils/time.d.ts.map +0 -1
  277. package/lib/typescript/src/utils/type-utils.d.ts +0 -17
  278. package/lib/typescript/src/utils/type-utils.d.ts.map +0 -1
  279. package/lib/typescript/src/version.d.ts +0 -2
  280. package/lib/typescript/src/version.d.ts.map +0 -1
@@ -1,641 +0,0 @@
1
- "use strict";
2
-
3
- import { Dimensions, Platform } from 'react-native';
4
- import { trace, SpanStatusCode } from '@opentelemetry/api';
5
- import { logger } from "../utils/index.js";
6
- import { MouseInteractions, EventType, IncrementalSource } from '@rrweb/types';
7
- import { SessionRecorderNative, gestureEventEmitter } from "../native/index.js";
8
- // Force TypeScript recompilation
9
-
10
- export class GestureRecorder {
11
- // @ts-ignore
12
-
13
- isRecording = false;
14
- events = [];
15
- screenDimensions = null;
16
- lastGestureTime = 0;
17
- gestureThrottleMs = 50; // Throttle gestures to avoid spam
18
- lastTouchTime = 0;
19
- touchThrottleMs = 100; // Throttle touch events to max 10 per second
20
-
21
- imageNodeId = 1; // ID of the image node for touch interactions
22
- // Reference to screen recorder for force capture
23
- // Native event listener
24
-
25
- // Aggregated span for pan gesture
26
- panMoveCount = 0;
27
- init(config, eventRecorder, screenRecorder) {
28
- this.config = config;
29
- this.eventRecorder = eventRecorder;
30
- this.screenRecorder = screenRecorder;
31
- this._getScreenDimensions();
32
- }
33
- start() {
34
- logger.info('GestureRecorder', 'Native gesture recording started');
35
- this.isRecording = true;
36
- this.events = [];
37
-
38
- // Check if we're on web platform
39
- if (Platform.OS === 'web') {
40
- logger.warn('GestureRecorder', 'Native gesture recording not available on web platform');
41
- return;
42
- }
43
-
44
- // Start native gesture recording
45
- SessionRecorderNative.startGestureRecording().then(() => {
46
- logger.info('GestureRecorder', 'Native gesture recording started successfully');
47
- this._setupGestureEventListener();
48
- }).catch(error => {
49
- logger.error('GestureRecorder', 'Failed to start native gesture recording', error);
50
- });
51
- }
52
- stop() {
53
- this.isRecording = false;
54
- this._removeGestureEventListener();
55
-
56
- // Check if we're on web platform
57
- if (Platform.OS === 'web') {
58
- logger.warn('GestureRecorder', 'Native gesture recording not available on web platform');
59
- return;
60
- }
61
-
62
- // Stop native gesture recording
63
- SessionRecorderNative.stopGestureRecording().then(() => {
64
- logger.info('GestureRecorder', 'Native gesture recording stopped successfully');
65
- }).catch(error => {
66
- logger.error('GestureRecorder', 'Failed to stop native gesture recording', error);
67
- });
68
- }
69
- _getScreenDimensions() {
70
- try {
71
- this.screenDimensions = Dimensions.get('window');
72
- } catch (error) {
73
- // Failed to get screen dimensions - silently continue
74
- this.screenDimensions = {
75
- width: 375,
76
- height: 667
77
- }; // Default fallback
78
- }
79
- }
80
- _setupGestureEventListener() {
81
- if (!gestureEventEmitter) {
82
- logger.warn('GestureRecorder', 'Gesture event emitter not available');
83
- return;
84
- }
85
- this.gestureEventListener = gestureEventEmitter.addListener('onGestureDetected', nativeGesture => {
86
- this._handleNativeGesture(nativeGesture);
87
- });
88
- }
89
- _removeGestureEventListener() {
90
- if (this.gestureEventListener) {
91
- this.gestureEventListener.remove();
92
- this.gestureEventListener = undefined;
93
- }
94
- }
95
- _handleNativeGesture(nativeGesture) {
96
- if (!this.isRecording) return;
97
-
98
- // Throttle gestures to avoid spam
99
- const now = Date.now();
100
- if (now - this.lastGestureTime < this.gestureThrottleMs) {
101
- return;
102
- }
103
- this.lastGestureTime = now;
104
-
105
- // Convert native gesture to our format
106
- const gesture = {
107
- type: nativeGesture.type,
108
- timestamp: nativeGesture.timestamp,
109
- coordinates: {
110
- x: nativeGesture.x,
111
- y: nativeGesture.y
112
- },
113
- target: nativeGesture.target,
114
- targetInfo: nativeGesture.targetInfo,
115
- // Pass through targetInfo from native
116
- metadata: {
117
- ...nativeGesture.metadata,
118
- screenWidth: this.screenDimensions?.width,
119
- screenHeight: this.screenDimensions?.height
120
- }
121
- };
122
- this.events.push(gesture);
123
- this._sendEvent(gesture);
124
- this._recordOpenTelemetrySpan(gesture);
125
-
126
- // Handle specific gesture types
127
- switch (nativeGesture.type) {
128
- case 'tap':
129
- this._handleTapGesture(nativeGesture);
130
- break;
131
- case 'pan_start':
132
- this._handlePanStartGesture(nativeGesture);
133
- break;
134
- case 'pan_move':
135
- this._handlePanMoveGesture(nativeGesture);
136
- break;
137
- case 'pan_end':
138
- this._handlePanEndGesture(nativeGesture);
139
- break;
140
- case 'long_press':
141
- this._handleLongPressGesture(nativeGesture);
142
- break;
143
- case 'pinch':
144
- this._handlePinchGesture(nativeGesture);
145
- break;
146
- case 'swipe':
147
- this._handleSwipeGesture(nativeGesture);
148
- break;
149
- }
150
- }
151
- _handleTapGesture(nativeGesture) {
152
- this.recordTouchStart(nativeGesture.x, nativeGesture.y, nativeGesture.target);
153
- this.recordTouchEnd(nativeGesture.x, nativeGesture.y, nativeGesture.target);
154
- }
155
- _handlePanStartGesture(nativeGesture) {
156
- this.recordTouchStart(nativeGesture.x, nativeGesture.y, nativeGesture.target);
157
- }
158
- _handlePanMoveGesture(nativeGesture) {
159
- this.recordTouchMove(nativeGesture.x, nativeGesture.y, nativeGesture.target);
160
- }
161
- _handlePanEndGesture(nativeGesture) {
162
- this.recordTouchEnd(nativeGesture.x, nativeGesture.y, nativeGesture.target);
163
- }
164
- _handleLongPressGesture(nativeGesture) {
165
- this.recordTouchStart(nativeGesture.x, nativeGesture.y, nativeGesture.target);
166
- this.recordTouchEnd(nativeGesture.x, nativeGesture.y, nativeGesture.target);
167
- }
168
- _handlePinchGesture(nativeGesture) {
169
- this.recordPinch(nativeGesture.metadata?.scale || 1.0, nativeGesture.target, nativeGesture.metadata?.velocity || 0);
170
- }
171
- _handleSwipeGesture(nativeGesture) {
172
- this.recordSwipe(nativeGesture.metadata?.direction || 'unknown', nativeGesture.target, nativeGesture.metadata?.velocity || 0);
173
- }
174
- _sendEvent(event) {
175
- // Send event to backend or store locally
176
- logger.debug('GestureRecorder', 'Gesture event recorded', {
177
- type: event.type,
178
- target: event.target
179
- });
180
- }
181
- _recordOpenTelemetrySpan(event) {
182
- try {
183
- logger.debug('GestureRecorder', 'Creating OTEL span for native gesture', {
184
- type: event.type,
185
- target: event.target,
186
- targetInfo: event.targetInfo,
187
- hasTargetInfo: !!event.targetInfo
188
- });
189
- // Special handling to aggregate pan gestures into a single span
190
- if (event.type === 'pan_start') {
191
- // End any previously dangling pan span defensively
192
- if (this.currentPanSpan) {
193
- this.currentPanSpan.setStatus({
194
- code: SpanStatusCode.OK
195
- });
196
- this.currentPanSpan.end();
197
- }
198
- this.panMoveCount = 0;
199
- const panSpan = trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan('NativeGesture.pan', {
200
- startTime: event.timestamp
201
- });
202
- panSpan.setAttribute('gesture.type', 'pan');
203
- panSpan.setAttribute('gesture.timestamp', event.timestamp);
204
- panSpan.setAttribute('gesture.platform', 'react-native');
205
- panSpan.setAttribute('gesture.source', 'native-module');
206
- if (event.coordinates) {
207
- panSpan.setAttribute('gesture.start.x', event.coordinates.x);
208
- panSpan.setAttribute('gesture.start.y', event.coordinates.y);
209
- }
210
- if (event.target) {
211
- panSpan.setAttribute('gesture.target', this._truncateText(event.target, 50));
212
- }
213
- // Enrich with target info if provided
214
- const info = event.targetInfo;
215
- if (info) {
216
- if (info.label) {
217
- const truncatedLabel = this._truncateText(String(info.label), 50);
218
- panSpan.setAttribute('gesture.target.label', truncatedLabel);
219
- }
220
- if (info.role) {
221
- panSpan.setAttribute('gesture.target.role', String(info.role));
222
- }
223
- if (info.testId) {
224
- panSpan.setAttribute('gesture.target.test_id', String(info.testId));
225
- }
226
- if (info.text) {
227
- const truncatedText = this._truncateText(String(info.text), 50);
228
- panSpan.setAttribute('gesture.target.text', truncatedText);
229
- }
230
- }
231
- // Save the span for subsequent move/end events
232
- this.currentPanSpan = panSpan;
233
- return;
234
- }
235
- if (event.type === 'pan_move') {
236
- if (this.currentPanSpan) {
237
- this.panMoveCount += 1;
238
- this.currentPanSpan.setAttribute('gesture.pan.move_count', this.panMoveCount);
239
- if (event.coordinates) {
240
- this.currentPanSpan.setAttribute('gesture.last.x', event.coordinates.x);
241
- this.currentPanSpan.setAttribute('gesture.last.y', event.coordinates.y);
242
- }
243
- // Don't end the span here; just update it
244
- return;
245
- }
246
- // If we received a move without a start, fall through to single-shot span below
247
- }
248
- if (event.type === 'pan_end') {
249
- if (this.currentPanSpan) {
250
- if (event.coordinates) {
251
- this.currentPanSpan.setAttribute('gesture.end.x', event.coordinates.x);
252
- this.currentPanSpan.setAttribute('gesture.end.y', event.coordinates.y);
253
- }
254
- this.currentPanSpan.setStatus({
255
- code: SpanStatusCode.OK
256
- });
257
- this.currentPanSpan.end();
258
- this.currentPanSpan = undefined;
259
- this.panMoveCount = 0;
260
- return;
261
- }
262
- // If no current span, fall through and create a single-shot span for the end event
263
- }
264
-
265
- // Default behavior: create a short-lived span per non-pan event
266
- const span = trace.getTracer('@opentelemetry/instrumentation-user-interaction').startSpan(`NativeGesture.${event.type}`, {
267
- startTime: event.timestamp,
268
- attributes: {
269
- 'gesture.type': event.type,
270
- 'gesture.timestamp': event.timestamp,
271
- 'gesture.platform': 'react-native',
272
- 'gesture.source': 'native-module'
273
- }
274
- });
275
- if (event.coordinates) {
276
- span.setAttribute('gesture.coordinates.x', event.coordinates.x);
277
- span.setAttribute('gesture.coordinates.y', event.coordinates.y);
278
-
279
- // Calculate relative position
280
- if (this.screenDimensions) {
281
- const relativeX = event.coordinates.x / this.screenDimensions.width;
282
- const relativeY = event.coordinates.y / this.screenDimensions.height;
283
- span.setAttribute('gesture.coordinates.relative_x', relativeX);
284
- span.setAttribute('gesture.coordinates.relative_y', relativeY);
285
- }
286
- }
287
- if (event.target) {
288
- span.setAttribute('gesture.target', this._truncateText(event.target, 100));
289
- }
290
-
291
- // Enrich with target info if provided
292
- const info = event.targetInfo;
293
- if (info) {
294
- if (info.label) {
295
- const truncatedLabel = this._truncateText(String(info.label), 100);
296
- span.setAttribute('gesture.target.label', truncatedLabel);
297
- }
298
- if (info.role) {
299
- span.setAttribute('gesture.target.role', String(info.role));
300
- }
301
- if (info.testId) {
302
- span.setAttribute('gesture.target.test_id', String(info.testId));
303
- }
304
- if (info.text) {
305
- const truncatedText = this._truncateText(String(info.text), 200);
306
- span.setAttribute('gesture.target.text', truncatedText);
307
- }
308
- }
309
- if (event.metadata) {
310
- Object.entries(event.metadata).forEach(([key, value]) => {
311
- span.setAttribute(`gesture.metadata.${key}`, String(value));
312
- });
313
- }
314
- span.setStatus({
315
- code: SpanStatusCode.OK
316
- });
317
- span.end();
318
- logger.debug('GestureRecorder', 'OTEL span created and ended successfully');
319
- } catch (error) {
320
- logger.error('GestureRecorder', 'Failed to record OpenTelemetry span for native gesture', error);
321
- }
322
- }
323
-
324
- // Public methods for manual event recording (same as before)
325
- recordTap(x, y, target, pressure, timestamp) {
326
- const event = {
327
- type: 'tap',
328
- timestamp: timestamp || Date.now(),
329
- coordinates: {
330
- x,
331
- y
332
- },
333
- target,
334
- metadata: {
335
- pressure: pressure || 1.0,
336
- screenWidth: this.screenDimensions?.width,
337
- screenHeight: this.screenDimensions?.height
338
- }
339
- };
340
- this._recordEvent(event);
341
- }
342
- recordSwipe(direction, target, velocity, distance) {
343
- const event = {
344
- type: 'swipe',
345
- timestamp: Date.now(),
346
- target,
347
- metadata: {
348
- direction,
349
- velocity: velocity || 0,
350
- distance: distance || 0,
351
- screenWidth: this.screenDimensions?.width,
352
- screenHeight: this.screenDimensions?.height
353
- }
354
- };
355
- this._recordEvent(event);
356
- }
357
- recordPinch(scale, target, velocity) {
358
- const event = {
359
- type: 'pinch',
360
- timestamp: Date.now(),
361
- target,
362
- metadata: {
363
- scale,
364
- velocity: velocity || 0,
365
- screenWidth: this.screenDimensions?.width,
366
- screenHeight: this.screenDimensions?.height
367
- }
368
- };
369
- this._recordEvent(event);
370
- }
371
- recordPan(deltaX, deltaY, target, velocity) {
372
- const event = {
373
- type: 'pan',
374
- timestamp: Date.now(),
375
- target,
376
- metadata: {
377
- deltaX,
378
- deltaY,
379
- velocity: velocity || 0,
380
- screenWidth: this.screenDimensions?.width,
381
- screenHeight: this.screenDimensions?.height
382
- }
383
- };
384
- this._recordEvent(event);
385
- }
386
- recordLongPress(duration, target, pressure) {
387
- const event = {
388
- type: 'longPress',
389
- timestamp: Date.now(),
390
- target,
391
- metadata: {
392
- duration,
393
- pressure: pressure || 1.0,
394
- screenWidth: this.screenDimensions?.width,
395
- screenHeight: this.screenDimensions?.height
396
- }
397
- };
398
- this._recordEvent(event);
399
- }
400
- recordDoubleTap(x, y, target) {
401
- const event = {
402
- type: 'doubleTap',
403
- timestamp: Date.now(),
404
- coordinates: {
405
- x,
406
- y
407
- },
408
- target,
409
- metadata: {
410
- screenWidth: this.screenDimensions?.width,
411
- screenHeight: this.screenDimensions?.height
412
- }
413
- };
414
- this._recordEvent(event);
415
- }
416
- recordRotate(rotation, target, velocity) {
417
- const event = {
418
- type: 'rotate',
419
- timestamp: Date.now(),
420
- target,
421
- metadata: {
422
- rotation,
423
- velocity: velocity || 0,
424
- screenWidth: this.screenDimensions?.width,
425
- screenHeight: this.screenDimensions?.height
426
- }
427
- };
428
- this._recordEvent(event);
429
- }
430
- recordFling(direction, velocity, target) {
431
- const event = {
432
- type: 'fling',
433
- timestamp: Date.now(),
434
- target,
435
- metadata: {
436
- direction,
437
- velocity,
438
- screenWidth: this.screenDimensions?.width,
439
- screenHeight: this.screenDimensions?.height
440
- }
441
- };
442
- this._recordEvent(event);
443
- }
444
- recordMultiTouch(touchCount, target) {
445
- const event = {
446
- type: 'multiTouch',
447
- timestamp: Date.now(),
448
- target,
449
- metadata: {
450
- touchCount,
451
- screenWidth: this.screenDimensions?.width,
452
- screenHeight: this.screenDimensions?.height
453
- }
454
- };
455
- this._recordEvent(event);
456
- }
457
- recordScroll(direction, distance, velocity, target) {
458
- const event = {
459
- type: 'scroll',
460
- timestamp: Date.now(),
461
- target,
462
- metadata: {
463
- direction,
464
- distance,
465
- velocity,
466
- screenWidth: this.screenDimensions?.width,
467
- screenHeight: this.screenDimensions?.height
468
- }
469
- };
470
- this._recordEvent(event);
471
- }
472
- recordZoom(scale, target, velocity) {
473
- const event = {
474
- type: 'zoom',
475
- timestamp: Date.now(),
476
- target,
477
- metadata: {
478
- scale,
479
- velocity: velocity || 0,
480
- screenWidth: this.screenDimensions?.width,
481
- screenHeight: this.screenDimensions?.height
482
- }
483
- };
484
- this._recordEvent(event);
485
- }
486
-
487
- // Touch event methods (same as before)
488
- recordTouchStart(x, y, target, pressure) {
489
- // Throttle touch events to prevent spam
490
- const now = Date.now();
491
- if (now - this.lastTouchTime < this.touchThrottleMs) {
492
- logger.debug('GestureRecorder', `Touch start throttled (${now - this.lastTouchTime}ms < ${this.touchThrottleMs}ms)`);
493
- return;
494
- }
495
- this.lastTouchTime = now;
496
- logger.debug('GestureRecorder', 'Touch start recorded', {
497
- x,
498
- y,
499
- target,
500
- pressure
501
- });
502
- this._createMouseInteractionEvent(x, y, MouseInteractions.TouchStart, now);
503
- }
504
- recordTouchMove(x, y, target, pressure) {
505
- // Throttle touch move events more aggressively
506
- const now = Date.now();
507
- if (now - this.lastTouchTime < this.touchThrottleMs * 2) {
508
- // 200ms throttle for move events
509
- logger.debug('GestureRecorder', `Touch move throttled (${now - this.lastTouchTime}ms < ${this.touchThrottleMs * 2}ms)`);
510
- return;
511
- }
512
- this.lastTouchTime = now;
513
- logger.debug('GestureRecorder', 'Touch move recorded', {
514
- x,
515
- y,
516
- target,
517
- pressure
518
- });
519
- this._createMouseMoveEvent(x, y, target);
520
- }
521
- recordTouchEnd(x, y, target, pressure) {
522
- const timestamp = Date.now();
523
- logger.debug('GestureRecorder', 'Touch end recorded', {
524
- x,
525
- y,
526
- target,
527
- pressure,
528
- timestamp
529
- });
530
- this.recordTap(x, y, target, pressure, timestamp);
531
- this._createMouseInteractionEvent(x, y, MouseInteractions.TouchEnd, timestamp);
532
-
533
- // Only force screen capture on touch end (not on every touch event)
534
- this.screenRecorder?.forceCapture(timestamp);
535
- }
536
- recordTouchCancel(x, y, _target) {
537
- this._createMouseInteractionEvent(x, y, MouseInteractions.TouchCancel);
538
- }
539
- setImageNodeId(nodeId) {
540
- this.imageNodeId = nodeId;
541
- }
542
- _recordEvent(event) {
543
- if (!this.isRecording) return;
544
-
545
- // Throttle gestures to avoid spam
546
- const now = Date.now();
547
- if (now - this.lastGestureTime < this.gestureThrottleMs) {
548
- return;
549
- }
550
- this.lastGestureTime = now;
551
- this.events.push(event);
552
- this._sendEvent(event);
553
- this._recordOpenTelemetrySpan(event);
554
- }
555
- _createMouseInteractionEvent(x, y, interactionType, timestamp) {
556
- const incrementalSnapshotEvent = {
557
- type: EventType.IncrementalSnapshot,
558
- data: {
559
- source: IncrementalSource.MouseInteraction,
560
- type: interactionType,
561
- id: this.imageNodeId,
562
- // Reference to the image node
563
- x: x,
564
- // Preserve decimal precision like web rrweb
565
- y: y,
566
- // Preserve decimal precision like web rrweb
567
- pointerType: 2 // 2 = Touch for React Native (0=Mouse, 1=Pen, 2=Touch)
568
- },
569
- timestamp: timestamp || Date.now()
570
- };
571
- this.recordEvent(incrementalSnapshotEvent);
572
- }
573
- _createMouseMoveEvent(x, y, _target) {
574
- const incrementalSnapshotEvent = {
575
- type: EventType.IncrementalSnapshot,
576
- data: {
577
- source: IncrementalSource.TouchMove,
578
- // Use MouseMove instead of MouseInteraction
579
- positions: [{
580
- x: x,
581
- // Preserve decimal precision like web rrweb
582
- y: y,
583
- // Preserve decimal precision like web rrweb
584
- id: this.imageNodeId,
585
- // Reference to the image node
586
- timeOffset: 0 // No time offset for single position
587
- }]
588
- },
589
- timestamp: Date.now()
590
- };
591
- this.recordEvent(incrementalSnapshotEvent);
592
- }
593
- recordEvent(event) {
594
- if (this.eventRecorder) {
595
- this.eventRecorder.recordEvent(event);
596
- }
597
- }
598
-
599
- // Get recorded events
600
- getEvents() {
601
- return [...this.events];
602
- }
603
-
604
- // Clear events
605
- clearEvents() {
606
- this.events = [];
607
- }
608
-
609
- // Get event statistics
610
- getEventStats() {
611
- const stats = {};
612
- this.events.forEach(event => {
613
- stats[event.type] = (stats[event.type] || 0) + 1;
614
- });
615
- return stats;
616
- }
617
-
618
- // Set gesture throttle
619
- setGestureThrottle(throttleMs) {
620
- this.gestureThrottleMs = throttleMs;
621
- }
622
-
623
- // Get recording status
624
- isRecordingEnabled() {
625
- return this.isRecording;
626
- }
627
-
628
- /**
629
- * Truncate text to prevent large span attributes
630
- * @param text - Text to truncate
631
- * @param maxLength - Maximum length (default: 100)
632
- * @returns Truncated text with ellipsis if needed
633
- */
634
- _truncateText(text, maxLength = 100) {
635
- if (!text || text.length <= maxLength) {
636
- return text;
637
- }
638
- return text.substring(0, maxLength - 3) + '...';
639
- }
640
- }
641
- //# sourceMappingURL=gestureRecorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Dimensions","Platform","trace","SpanStatusCode","logger","MouseInteractions","EventType","IncrementalSource","SessionRecorderNative","gestureEventEmitter","GestureRecorder","isRecording","events","screenDimensions","lastGestureTime","gestureThrottleMs","lastTouchTime","touchThrottleMs","imageNodeId","panMoveCount","init","config","eventRecorder","screenRecorder","_getScreenDimensions","start","info","OS","warn","startGestureRecording","then","_setupGestureEventListener","catch","error","stop","_removeGestureEventListener","stopGestureRecording","get","width","height","gestureEventListener","addListener","nativeGesture","_handleNativeGesture","remove","undefined","now","Date","gesture","type","timestamp","coordinates","x","y","target","targetInfo","metadata","screenWidth","screenHeight","push","_sendEvent","_recordOpenTelemetrySpan","_handleTapGesture","_handlePanStartGesture","_handlePanMoveGesture","_handlePanEndGesture","_handleLongPressGesture","_handlePinchGesture","_handleSwipeGesture","recordTouchStart","recordTouchEnd","recordTouchMove","recordPinch","scale","velocity","recordSwipe","direction","event","debug","hasTargetInfo","currentPanSpan","setStatus","code","OK","end","panSpan","getTracer","startSpan","startTime","setAttribute","_truncateText","label","truncatedLabel","String","role","testId","text","truncatedText","span","attributes","relativeX","relativeY","Object","entries","forEach","key","value","recordTap","pressure","_recordEvent","distance","recordPan","deltaX","deltaY","recordLongPress","duration","recordDoubleTap","recordRotate","rotation","recordFling","recordMultiTouch","touchCount","recordScroll","recordZoom","_createMouseInteractionEvent","TouchStart","_createMouseMoveEvent","TouchEnd","forceCapture","recordTouchCancel","_target","TouchCancel","setImageNodeId","nodeId","interactionType","incrementalSnapshotEvent","IncrementalSnapshot","data","source","MouseInteraction","id","pointerType","recordEvent","TouchMove","positions","timeOffset","getEvents","clearEvents","getEventStats","stats","setGestureThrottle","throttleMs","isRecordingEnabled","maxLength","length","substring"],"sourceRoot":"../../../src","sources":["recorder/gestureRecorder.ts"],"mappings":"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","ignoreList":[]}