@multiplayer-app/session-recorder-react-native 1.0.1-beta.3 → 1.0.1-beta.4

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 (465) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +216 -155
  3. package/SessionRecorderNative.podspec +9 -14
  4. package/android/build.gradle +21 -44
  5. package/android/gradle.properties +4 -4
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeConfig.kt +52 -0
  8. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeModule.kt +860 -0
  9. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeModuleSpec.kt +51 -0
  10. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativePackage.kt +33 -0
  11. package/android/src/main/java/com/multiplayer/sessionrecordernative/model/TargetInfo.kt +9 -0
  12. package/android/src/main/java/com/multiplayer/sessionrecordernative/util/ViewUtils.kt +72 -0
  13. package/android/src/main/java/com/xxx/XxxModule.kt +23 -0
  14. package/ios/SessionRecorderNative.podspec +4 -2
  15. package/ios/SessionRecorderNative.swift +1 -1
  16. package/ios/SessionRecorderNativeSpec.swift +3 -3
  17. package/ios/Xxx.h +5 -0
  18. package/ios/Xxx.mm +21 -0
  19. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +23 -0
  20. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +1 -0
  21. package/lib/module/components/ScreenRecorderView/index.js +4 -0
  22. package/lib/module/components/ScreenRecorderView/index.js.map +1 -0
  23. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +64 -0
  24. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +1 -0
  25. package/lib/module/components/SessionRecorderWidget/FinalPopover.js +74 -0
  26. package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +1 -0
  27. package/lib/module/components/SessionRecorderWidget/FloatingButton.js +191 -0
  28. package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +1 -0
  29. package/lib/module/components/SessionRecorderWidget/InitialPopover.js +138 -0
  30. package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +1 -0
  31. package/lib/module/components/SessionRecorderWidget/ModalContainer.js +177 -0
  32. package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +1 -0
  33. package/lib/module/components/SessionRecorderWidget/ModalHeader.js +27 -0
  34. package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +1 -0
  35. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +133 -0
  36. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -0
  37. package/lib/module/components/SessionRecorderWidget/icons.js +93 -0
  38. package/lib/module/components/SessionRecorderWidget/icons.js.map +1 -0
  39. package/lib/module/components/SessionRecorderWidget/index.js +5 -0
  40. package/lib/module/components/SessionRecorderWidget/index.js.map +1 -0
  41. package/lib/module/components/SessionRecorderWidget/styles.js +173 -0
  42. package/lib/module/components/SessionRecorderWidget/styles.js.map +1 -0
  43. package/lib/module/components/index.js +5 -0
  44. package/lib/module/components/index.js.map +1 -0
  45. package/lib/module/config/constants.js +42 -0
  46. package/lib/module/config/constants.js.map +1 -0
  47. package/lib/module/config/defaults.js +81 -0
  48. package/lib/module/config/defaults.js.map +1 -0
  49. package/lib/module/config/index.js +9 -0
  50. package/lib/module/config/index.js.map +1 -0
  51. package/lib/module/config/masking.js +35 -0
  52. package/lib/module/config/masking.js.map +1 -0
  53. package/lib/module/config/session-recorder.js +44 -0
  54. package/lib/module/config/session-recorder.js.map +1 -0
  55. package/lib/module/config/validators.js +28 -0
  56. package/lib/module/config/validators.js.map +1 -0
  57. package/lib/module/config/widget.js +35 -0
  58. package/lib/module/config/widget.js.map +1 -0
  59. package/lib/module/context/SessionRecorderContext.js +93 -0
  60. package/lib/module/context/SessionRecorderContext.js.map +1 -0
  61. package/lib/module/context/SessionRecorderStore.js +12 -0
  62. package/lib/module/context/SessionRecorderStore.js.map +1 -0
  63. package/lib/module/context/useSessionRecorderStore.js +20 -0
  64. package/lib/module/context/useSessionRecorderStore.js.map +1 -0
  65. package/lib/module/context/useStoreSelector.js +27 -0
  66. package/lib/module/context/useStoreSelector.js.map +1 -0
  67. package/lib/module/index.js +13 -0
  68. package/lib/module/index.js.map +1 -0
  69. package/lib/module/native/SessionRecorderNative.js +74 -0
  70. package/lib/module/native/SessionRecorderNative.js.map +1 -0
  71. package/lib/module/native/index.js +4 -0
  72. package/lib/module/native/index.js.map +1 -0
  73. package/lib/module/otel/helpers.js +218 -0
  74. package/lib/module/otel/helpers.js.map +1 -0
  75. package/lib/module/otel/index.js +95 -0
  76. package/lib/module/otel/index.js.map +1 -0
  77. package/lib/module/otel/instrumentations/index.js +102 -0
  78. package/lib/module/otel/instrumentations/index.js.map +1 -0
  79. package/lib/module/package.json +1 -0
  80. package/lib/module/patch/index.js +4 -0
  81. package/lib/module/patch/index.js.map +1 -0
  82. package/lib/module/patch/xhr.js +116 -0
  83. package/lib/module/patch/xhr.js.map +1 -0
  84. package/lib/module/recorder/eventExporter.js +130 -0
  85. package/lib/module/recorder/eventExporter.js.map +1 -0
  86. package/lib/module/recorder/gestureRecorder.js +641 -0
  87. package/lib/module/recorder/gestureRecorder.js.map +1 -0
  88. package/lib/module/recorder/index.js +168 -0
  89. package/lib/module/recorder/index.js.map +1 -0
  90. package/lib/module/recorder/navigationTracker.js +228 -0
  91. package/lib/module/recorder/navigationTracker.js.map +1 -0
  92. package/lib/module/recorder/screenRecorder.js +495 -0
  93. package/lib/module/recorder/screenRecorder.js.map +1 -0
  94. package/lib/module/services/api.service.js +149 -0
  95. package/lib/module/services/api.service.js.map +1 -0
  96. package/lib/module/services/network.service.js +178 -0
  97. package/lib/module/services/network.service.js.map +1 -0
  98. package/lib/module/services/screenMaskingService.js +107 -0
  99. package/lib/module/services/screenMaskingService.js.map +1 -0
  100. package/lib/module/services/storage.service.js +179 -0
  101. package/lib/module/services/storage.service.js.map +1 -0
  102. package/lib/module/session-recorder.js +541 -0
  103. package/lib/module/session-recorder.js.map +1 -0
  104. package/lib/module/types/configs.js +4 -0
  105. package/lib/module/types/configs.js.map +1 -0
  106. package/lib/module/types/expo-constants.d.js +2 -0
  107. package/lib/module/types/expo-constants.d.js.map +1 -0
  108. package/lib/module/types/index.js +11 -0
  109. package/lib/module/types/index.js.map +1 -0
  110. package/lib/module/types/session-recorder.js +68 -0
  111. package/lib/module/types/session-recorder.js.map +1 -0
  112. package/lib/module/types/session.js +9 -0
  113. package/lib/module/types/session.js.map +1 -0
  114. package/lib/module/utils/app-metadata.js +28 -0
  115. package/lib/module/utils/app-metadata.js.map +1 -0
  116. package/lib/module/utils/constants.optional.expo.js +6 -0
  117. package/lib/module/utils/constants.optional.expo.js.map +1 -0
  118. package/lib/module/utils/constants.optional.js +8 -0
  119. package/lib/module/utils/constants.optional.js.map +1 -0
  120. package/lib/module/utils/createStore.js +27 -0
  121. package/lib/module/utils/createStore.js.map +1 -0
  122. package/lib/module/utils/index.js +11 -0
  123. package/lib/module/utils/index.js.map +1 -0
  124. package/lib/module/utils/logger.js +193 -0
  125. package/lib/module/utils/logger.js.map +1 -0
  126. package/lib/module/utils/platform.js +340 -0
  127. package/lib/module/utils/platform.js.map +1 -0
  128. package/lib/module/utils/request-utils.js +58 -0
  129. package/lib/module/utils/request-utils.js.map +1 -0
  130. package/lib/module/utils/rrweb-events.js +276 -0
  131. package/lib/module/utils/rrweb-events.js.map +1 -0
  132. package/lib/module/utils/session.js +21 -0
  133. package/lib/module/utils/session.js.map +1 -0
  134. package/lib/module/utils/shallowEqual.js +17 -0
  135. package/lib/module/utils/shallowEqual.js.map +1 -0
  136. package/lib/module/utils/time.js +17 -0
  137. package/lib/module/utils/time.js.map +1 -0
  138. package/lib/module/utils/type-utils.js +69 -0
  139. package/lib/module/utils/type-utils.js.map +1 -0
  140. package/lib/module/version.js +4 -0
  141. package/lib/module/version.js.map +1 -0
  142. package/lib/typescript/package.json +1 -0
  143. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +6 -0
  144. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +1 -0
  145. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +2 -0
  146. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +1 -0
  147. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ErrorBanner.d.ts +1 -0
  148. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +1 -0
  149. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FinalPopover.d.ts +2 -1
  150. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +1 -0
  151. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FloatingButton.d.ts +1 -0
  152. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +1 -0
  153. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/InitialPopover.d.ts +2 -1
  154. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +1 -0
  155. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalContainer.d.ts +1 -0
  156. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +1 -0
  157. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalHeader.d.ts +1 -0
  158. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +1 -0
  159. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +1 -0
  160. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +1 -0
  161. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/icons.d.ts +1 -0
  162. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +1 -0
  163. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +3 -0
  164. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +1 -0
  165. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/styles.d.ts +4 -3
  166. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +1 -0
  167. package/{dist → lib/typescript/src}/components/index.d.ts +1 -0
  168. package/lib/typescript/src/components/index.d.ts.map +1 -0
  169. package/{dist → lib/typescript/src}/config/constants.d.ts +1 -0
  170. package/lib/typescript/src/config/constants.d.ts.map +1 -0
  171. package/{dist → lib/typescript/src}/config/defaults.d.ts +2 -1
  172. package/lib/typescript/src/config/defaults.d.ts.map +1 -0
  173. package/{dist → lib/typescript/src}/config/index.d.ts +1 -0
  174. package/lib/typescript/src/config/index.d.ts.map +1 -0
  175. package/lib/typescript/src/config/masking.d.ts +3 -0
  176. package/lib/typescript/src/config/masking.d.ts.map +1 -0
  177. package/lib/typescript/src/config/session-recorder.d.ts +3 -0
  178. package/lib/typescript/src/config/session-recorder.d.ts.map +1 -0
  179. package/{dist → lib/typescript/src}/config/validators.d.ts +1 -0
  180. package/lib/typescript/src/config/validators.d.ts.map +1 -0
  181. package/{dist → lib/typescript/src}/config/widget.d.ts +2 -1
  182. package/lib/typescript/src/config/widget.d.ts.map +1 -0
  183. package/{dist → lib/typescript/src}/context/SessionRecorderContext.d.ts +3 -2
  184. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +1 -0
  185. package/{dist → lib/typescript/src}/context/SessionRecorderStore.d.ts +2 -1
  186. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +1 -0
  187. package/{dist → lib/typescript/src}/context/useSessionRecorderStore.d.ts +2 -1
  188. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +1 -0
  189. package/{dist → lib/typescript/src}/context/useStoreSelector.d.ts +2 -1
  190. package/lib/typescript/src/context/useStoreSelector.d.ts.map +1 -0
  191. package/{dist → lib/typescript/src}/index.d.ts +1 -0
  192. package/lib/typescript/src/index.d.ts.map +1 -0
  193. package/{dist → lib/typescript/src}/native/SessionRecorderNative.d.ts +21 -3
  194. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +1 -0
  195. package/{dist → lib/typescript/src}/native/index.d.ts +1 -0
  196. package/lib/typescript/src/native/index.d.ts.map +1 -0
  197. package/{dist → lib/typescript/src}/otel/helpers.d.ts +3 -2
  198. package/lib/typescript/src/otel/helpers.d.ts.map +1 -0
  199. package/{dist → lib/typescript/src}/otel/index.d.ts +2 -2
  200. package/lib/typescript/src/otel/index.d.ts.map +1 -0
  201. package/{dist → lib/typescript/src}/otel/instrumentations/index.d.ts +2 -1
  202. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +1 -0
  203. package/lib/typescript/src/patch/index.d.ts +2 -0
  204. package/lib/typescript/src/patch/index.d.ts.map +1 -0
  205. package/{dist → lib/typescript/src}/patch/xhr.d.ts +1 -0
  206. package/lib/typescript/src/patch/xhr.d.ts.map +1 -0
  207. package/{dist → lib/typescript/src}/recorder/eventExporter.d.ts +2 -1
  208. package/lib/typescript/src/recorder/eventExporter.d.ts.map +1 -0
  209. package/{dist → lib/typescript/src}/recorder/gestureRecorder.d.ts +3 -2
  210. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +1 -0
  211. package/{dist → lib/typescript/src}/recorder/index.d.ts +3 -2
  212. package/lib/typescript/src/recorder/index.d.ts.map +1 -0
  213. package/{dist → lib/typescript/src}/recorder/navigationTracker.d.ts +2 -1
  214. package/lib/typescript/src/recorder/navigationTracker.d.ts.map +1 -0
  215. package/{dist → lib/typescript/src}/recorder/screenRecorder.d.ts +4 -4
  216. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -0
  217. package/{dist → lib/typescript/src}/services/api.service.d.ts +2 -1
  218. package/lib/typescript/src/services/api.service.d.ts.map +1 -0
  219. package/{dist → lib/typescript/src}/services/network.service.d.ts +1 -0
  220. package/lib/typescript/src/services/network.service.d.ts.map +1 -0
  221. package/{dist → lib/typescript/src}/services/screenMaskingService.d.ts +2 -1
  222. package/lib/typescript/src/services/screenMaskingService.d.ts.map +1 -0
  223. package/{dist → lib/typescript/src}/services/storage.service.d.ts +2 -1
  224. package/lib/typescript/src/services/storage.service.d.ts.map +1 -0
  225. package/{dist → lib/typescript/src}/session-recorder.d.ts +3 -2
  226. package/lib/typescript/src/session-recorder.d.ts.map +1 -0
  227. package/{dist → lib/typescript/src}/types/configs.d.ts +3 -2
  228. package/lib/typescript/src/types/configs.d.ts.map +1 -0
  229. package/{dist → lib/typescript/src}/types/index.d.ts +1 -0
  230. package/lib/typescript/src/types/index.d.ts.map +1 -0
  231. package/{dist → lib/typescript/src}/types/session-recorder.d.ts +3 -2
  232. package/lib/typescript/src/types/session-recorder.d.ts.map +1 -0
  233. package/{dist → lib/typescript/src}/types/session.d.ts +1 -0
  234. package/lib/typescript/src/types/session.d.ts.map +1 -0
  235. package/{dist → lib/typescript/src}/utils/app-metadata.d.ts +1 -0
  236. package/lib/typescript/src/utils/app-metadata.d.ts.map +1 -0
  237. package/{dist → lib/typescript/src}/utils/constants.optional.d.ts +1 -0
  238. package/lib/typescript/src/utils/constants.optional.d.ts.map +1 -0
  239. package/{dist → lib/typescript/src}/utils/constants.optional.expo.d.ts +1 -0
  240. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +1 -0
  241. package/{dist → lib/typescript/src}/utils/createStore.d.ts +1 -0
  242. package/lib/typescript/src/utils/createStore.d.ts.map +1 -0
  243. package/{dist → lib/typescript/src}/utils/index.d.ts +1 -0
  244. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  245. package/{dist → lib/typescript/src}/utils/logger.d.ts +1 -0
  246. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  247. package/{dist → lib/typescript/src}/utils/platform.d.ts +2 -1
  248. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  249. package/{dist → lib/typescript/src}/utils/request-utils.d.ts +1 -0
  250. package/lib/typescript/src/utils/request-utils.d.ts.map +1 -0
  251. package/{dist → lib/typescript/src}/utils/rrweb-events.d.ts +2 -1
  252. package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -0
  253. package/{dist → lib/typescript/src}/utils/session.d.ts +1 -0
  254. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  255. package/{dist → lib/typescript/src}/utils/shallowEqual.d.ts +1 -0
  256. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  257. package/{dist → lib/typescript/src}/utils/time.d.ts +1 -0
  258. package/lib/typescript/src/utils/time.d.ts.map +1 -0
  259. package/{dist → lib/typescript/src}/utils/type-utils.d.ts +1 -0
  260. package/lib/typescript/src/utils/type-utils.d.ts.map +1 -0
  261. package/{dist → lib/typescript/src}/version.d.ts +1 -0
  262. package/lib/typescript/src/version.d.ts.map +1 -0
  263. package/package.json +133 -44
  264. package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +20 -0
  265. package/src/components/SessionRecorderWidget/ErrorBanner.tsx +58 -0
  266. package/src/components/SessionRecorderWidget/FinalPopover.tsx +96 -0
  267. package/src/components/SessionRecorderWidget/FloatingButton.tsx +176 -0
  268. package/src/components/SessionRecorderWidget/InitialPopover.tsx +167 -0
  269. package/src/components/SessionRecorderWidget/ModalContainer.tsx +189 -0
  270. package/src/components/SessionRecorderWidget/ModalHeader.tsx +24 -0
  271. package/src/components/SessionRecorderWidget/SessionRecorderWidget.tsx +136 -0
  272. package/src/components/SessionRecorderWidget/icons.tsx +52 -0
  273. package/{dist/components/SessionRecorderWidget/index.d.ts → src/components/SessionRecorderWidget/index.ts} +1 -0
  274. package/src/components/SessionRecorderWidget/styles.ts +169 -0
  275. package/src/components/index.ts +2 -0
  276. package/src/config/constants.ts +68 -0
  277. package/src/config/defaults.ts +101 -0
  278. package/src/config/index.ts +6 -0
  279. package/src/config/masking.ts +34 -0
  280. package/src/config/session-recorder.ts +59 -0
  281. package/src/config/validators.ts +31 -0
  282. package/src/config/widget.ts +38 -0
  283. package/src/context/SessionRecorderContext.tsx +138 -0
  284. package/src/context/SessionRecorderStore.ts +21 -0
  285. package/src/context/useSessionRecorderStore.ts +27 -0
  286. package/src/context/useStoreSelector.ts +34 -0
  287. package/src/index.ts +10 -0
  288. package/src/native/SessionRecorderNative.ts +164 -0
  289. package/src/native/index.ts +1 -0
  290. package/src/otel/helpers.ts +274 -0
  291. package/src/otel/index.ts +135 -0
  292. package/src/otel/instrumentations/index.ts +115 -0
  293. package/src/patch/index.ts +1 -0
  294. package/src/patch/xhr.ts +149 -0
  295. package/src/recorder/eventExporter.ts +155 -0
  296. package/src/recorder/gestureRecorder.ts +681 -0
  297. package/src/recorder/index.ts +190 -0
  298. package/src/recorder/navigationTracker.ts +245 -0
  299. package/src/recorder/screenRecorder.ts +549 -0
  300. package/src/services/api.service.ts +215 -0
  301. package/src/services/network.service.ts +182 -0
  302. package/src/services/screenMaskingService.ts +122 -0
  303. package/src/services/storage.service.ts +219 -0
  304. package/src/session-recorder.ts +591 -0
  305. package/src/types/configs.ts +96 -0
  306. package/src/types/expo-constants.d.ts +7 -0
  307. package/src/types/index.ts +29 -0
  308. package/src/types/session-recorder.ts +386 -0
  309. package/src/types/session.ts +65 -0
  310. package/src/utils/app-metadata.ts +31 -0
  311. package/src/utils/constants.optional.expo.ts +5 -0
  312. package/src/utils/constants.optional.ts +16 -0
  313. package/src/utils/createStore.ts +29 -0
  314. package/src/utils/index.ts +8 -0
  315. package/src/utils/logger.ts +216 -0
  316. package/src/utils/platform.ts +370 -0
  317. package/src/utils/request-utils.ts +61 -0
  318. package/src/utils/rrweb-events.ts +316 -0
  319. package/src/utils/session.ts +19 -0
  320. package/src/utils/shallowEqual.ts +14 -0
  321. package/src/utils/time.ts +17 -0
  322. package/src/utils/type-utils.ts +75 -0
  323. package/src/version.ts +1 -0
  324. package/REACT_NATIVE_SETUP.md +0 -91
  325. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  326. package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  327. package/android/gradlew +0 -249
  328. package/android/gradlew.bat +0 -92
  329. package/copy-react-native-dist.sh +0 -56
  330. package/dist/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -5
  331. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +0 -1
  332. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  333. package/dist/components/ScreenRecorderView/index.js +0 -1
  334. package/dist/components/ScreenRecorderView/index.js.map +0 -1
  335. package/dist/components/SessionRecorderWidget/ErrorBanner.js +0 -1
  336. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  337. package/dist/components/SessionRecorderWidget/FinalPopover.js +0 -1
  338. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  339. package/dist/components/SessionRecorderWidget/FloatingButton.js +0 -1
  340. package/dist/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  341. package/dist/components/SessionRecorderWidget/InitialPopover.js +0 -1
  342. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  343. package/dist/components/SessionRecorderWidget/ModalContainer.js +0 -1
  344. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  345. package/dist/components/SessionRecorderWidget/ModalHeader.js +0 -1
  346. package/dist/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  347. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -1
  348. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  349. package/dist/components/SessionRecorderWidget/icons.js +0 -1
  350. package/dist/components/SessionRecorderWidget/icons.js.map +0 -1
  351. package/dist/components/SessionRecorderWidget/index.js +0 -1
  352. package/dist/components/SessionRecorderWidget/index.js.map +0 -1
  353. package/dist/components/SessionRecorderWidget/styles.js +0 -1
  354. package/dist/components/SessionRecorderWidget/styles.js.map +0 -1
  355. package/dist/components/index.js +0 -1
  356. package/dist/components/index.js.map +0 -1
  357. package/dist/config/constants.js +0 -1
  358. package/dist/config/constants.js.map +0 -1
  359. package/dist/config/defaults.js +0 -1
  360. package/dist/config/defaults.js.map +0 -1
  361. package/dist/config/index.js +0 -1
  362. package/dist/config/index.js.map +0 -1
  363. package/dist/config/masking.d.ts +0 -2
  364. package/dist/config/masking.js +0 -1
  365. package/dist/config/masking.js.map +0 -1
  366. package/dist/config/session-recorder.d.ts +0 -2
  367. package/dist/config/session-recorder.js +0 -1
  368. package/dist/config/session-recorder.js.map +0 -1
  369. package/dist/config/validators.js +0 -1
  370. package/dist/config/validators.js.map +0 -1
  371. package/dist/config/widget.js +0 -1
  372. package/dist/config/widget.js.map +0 -1
  373. package/dist/context/SessionRecorderContext.js +0 -1
  374. package/dist/context/SessionRecorderContext.js.map +0 -1
  375. package/dist/context/SessionRecorderStore.js +0 -1
  376. package/dist/context/SessionRecorderStore.js.map +0 -1
  377. package/dist/context/useSessionRecorderStore.js +0 -1
  378. package/dist/context/useSessionRecorderStore.js.map +0 -1
  379. package/dist/context/useStoreSelector.js +0 -1
  380. package/dist/context/useStoreSelector.js.map +0 -1
  381. package/dist/index.js +0 -1
  382. package/dist/index.js.map +0 -1
  383. package/dist/native/GestureRecorderNative.d.ts +0 -57
  384. package/dist/native/GestureRecorderNative.js +0 -1
  385. package/dist/native/GestureRecorderNative.js.map +0 -1
  386. package/dist/native/GestureRecorderNativeTurboSpec.d.ts +0 -31
  387. package/dist/native/GestureRecorderNativeTurboSpec.js +0 -1
  388. package/dist/native/GestureRecorderNativeTurboSpec.js.map +0 -1
  389. package/dist/native/SessionRecorderNative.js +0 -1
  390. package/dist/native/SessionRecorderNative.js.map +0 -1
  391. package/dist/native/SessionRecorderNativeTurboSpec.d.ts +0 -17
  392. package/dist/native/SessionRecorderNativeTurboSpec.js +0 -1
  393. package/dist/native/SessionRecorderNativeTurboSpec.js.map +0 -1
  394. package/dist/native/index.js +0 -1
  395. package/dist/native/index.js.map +0 -1
  396. package/dist/otel/helpers.js +0 -1
  397. package/dist/otel/helpers.js.map +0 -1
  398. package/dist/otel/index.js +0 -1
  399. package/dist/otel/index.js.map +0 -1
  400. package/dist/otel/instrumentations/index.js +0 -1
  401. package/dist/otel/instrumentations/index.js.map +0 -1
  402. package/dist/patch/index.d.ts +0 -1
  403. package/dist/patch/index.js +0 -1
  404. package/dist/patch/index.js.map +0 -1
  405. package/dist/patch/xhr.js +0 -1
  406. package/dist/patch/xhr.js.map +0 -1
  407. package/dist/recorder/eventExporter.js +0 -1
  408. package/dist/recorder/eventExporter.js.map +0 -1
  409. package/dist/recorder/gestureRecorder.js +0 -1
  410. package/dist/recorder/gestureRecorder.js.map +0 -1
  411. package/dist/recorder/index.js +0 -1
  412. package/dist/recorder/index.js.map +0 -1
  413. package/dist/recorder/navigationTracker.js +0 -1
  414. package/dist/recorder/navigationTracker.js.map +0 -1
  415. package/dist/recorder/screenRecorder.js +0 -1
  416. package/dist/recorder/screenRecorder.js.map +0 -1
  417. package/dist/services/api.service.js +0 -1
  418. package/dist/services/api.service.js.map +0 -1
  419. package/dist/services/network.service.js +0 -1
  420. package/dist/services/network.service.js.map +0 -1
  421. package/dist/services/screenMaskingService.js +0 -1
  422. package/dist/services/screenMaskingService.js.map +0 -1
  423. package/dist/services/storage.service.js +0 -1
  424. package/dist/services/storage.service.js.map +0 -1
  425. package/dist/session-recorder.js +0 -1
  426. package/dist/session-recorder.js.map +0 -1
  427. package/dist/types/configs.js +0 -1
  428. package/dist/types/configs.js.map +0 -1
  429. package/dist/types/index.js +0 -1
  430. package/dist/types/index.js.map +0 -1
  431. package/dist/types/session-recorder.js +0 -1
  432. package/dist/types/session-recorder.js.map +0 -1
  433. package/dist/types/session.js +0 -1
  434. package/dist/types/session.js.map +0 -1
  435. package/dist/utils/app-metadata.js +0 -1
  436. package/dist/utils/app-metadata.js.map +0 -1
  437. package/dist/utils/constants.optional.expo.js +0 -1
  438. package/dist/utils/constants.optional.expo.js.map +0 -1
  439. package/dist/utils/constants.optional.js +0 -1
  440. package/dist/utils/constants.optional.js.map +0 -1
  441. package/dist/utils/createStore.js +0 -1
  442. package/dist/utils/createStore.js.map +0 -1
  443. package/dist/utils/index.js +0 -1
  444. package/dist/utils/index.js.map +0 -1
  445. package/dist/utils/logger.js +0 -1
  446. package/dist/utils/logger.js.map +0 -1
  447. package/dist/utils/platform.js +0 -1
  448. package/dist/utils/platform.js.map +0 -1
  449. package/dist/utils/request-utils.js +0 -1
  450. package/dist/utils/request-utils.js.map +0 -1
  451. package/dist/utils/rrweb-events.js +0 -1
  452. package/dist/utils/rrweb-events.js.map +0 -1
  453. package/dist/utils/session.js +0 -1
  454. package/dist/utils/session.js.map +0 -1
  455. package/dist/utils/shallowEqual.js +0 -1
  456. package/dist/utils/shallowEqual.js.map +0 -1
  457. package/dist/utils/time.js +0 -1
  458. package/dist/utils/time.js.map +0 -1
  459. package/dist/utils/type-utils.js +0 -1
  460. package/dist/utils/type-utils.js.map +0 -1
  461. package/dist/version.js +0 -1
  462. package/dist/version.js.map +0 -1
  463. package/docs/AUTO_METADATA_DETECTION.md +0 -108
  464. package/react-native.config.js +0 -13
  465. /package/{dist/components/ScreenRecorderView/index.d.ts → src/components/ScreenRecorderView/index.ts} +0 -0
@@ -0,0 +1,641 @@
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
@@ -0,0 +1 @@
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":[]}