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

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 (463) 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/SessionRecorderNativePackage.kt +33 -0
  10. package/android/src/main/java/com/multiplayer/sessionrecordernative/model/TargetInfo.kt +9 -0
  11. package/android/src/main/java/com/multiplayer/sessionrecordernative/util/ViewUtils.kt +72 -0
  12. package/ios/SessionRecorderNative.podspec +4 -2
  13. package/ios/SessionRecorderNative.swift +1 -1
  14. package/ios/SessionRecorderNativeSpec.swift +3 -3
  15. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +23 -0
  16. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +1 -0
  17. package/lib/module/components/ScreenRecorderView/index.js +4 -0
  18. package/lib/module/components/ScreenRecorderView/index.js.map +1 -0
  19. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +64 -0
  20. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +1 -0
  21. package/lib/module/components/SessionRecorderWidget/FinalPopover.js +74 -0
  22. package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +1 -0
  23. package/lib/module/components/SessionRecorderWidget/FloatingButton.js +191 -0
  24. package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +1 -0
  25. package/lib/module/components/SessionRecorderWidget/InitialPopover.js +138 -0
  26. package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +1 -0
  27. package/lib/module/components/SessionRecorderWidget/ModalContainer.js +177 -0
  28. package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +1 -0
  29. package/lib/module/components/SessionRecorderWidget/ModalHeader.js +27 -0
  30. package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +1 -0
  31. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +133 -0
  32. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -0
  33. package/lib/module/components/SessionRecorderWidget/icons.js +93 -0
  34. package/lib/module/components/SessionRecorderWidget/icons.js.map +1 -0
  35. package/lib/module/components/SessionRecorderWidget/index.js +5 -0
  36. package/lib/module/components/SessionRecorderWidget/index.js.map +1 -0
  37. package/lib/module/components/SessionRecorderWidget/styles.js +173 -0
  38. package/lib/module/components/SessionRecorderWidget/styles.js.map +1 -0
  39. package/lib/module/components/index.js +5 -0
  40. package/lib/module/components/index.js.map +1 -0
  41. package/lib/module/config/constants.js +42 -0
  42. package/lib/module/config/constants.js.map +1 -0
  43. package/lib/module/config/defaults.js +81 -0
  44. package/lib/module/config/defaults.js.map +1 -0
  45. package/lib/module/config/index.js +9 -0
  46. package/lib/module/config/index.js.map +1 -0
  47. package/lib/module/config/masking.js +35 -0
  48. package/lib/module/config/masking.js.map +1 -0
  49. package/lib/module/config/session-recorder.js +44 -0
  50. package/lib/module/config/session-recorder.js.map +1 -0
  51. package/lib/module/config/validators.js +28 -0
  52. package/lib/module/config/validators.js.map +1 -0
  53. package/lib/module/config/widget.js +35 -0
  54. package/lib/module/config/widget.js.map +1 -0
  55. package/lib/module/context/SessionRecorderContext.js +93 -0
  56. package/lib/module/context/SessionRecorderContext.js.map +1 -0
  57. package/lib/module/context/SessionRecorderStore.js +12 -0
  58. package/lib/module/context/SessionRecorderStore.js.map +1 -0
  59. package/lib/module/context/useSessionRecorderStore.js +20 -0
  60. package/lib/module/context/useSessionRecorderStore.js.map +1 -0
  61. package/lib/module/context/useStoreSelector.js +27 -0
  62. package/lib/module/context/useStoreSelector.js.map +1 -0
  63. package/lib/module/index.js +13 -0
  64. package/lib/module/index.js.map +1 -0
  65. package/lib/module/native/SessionRecorderNative.js +74 -0
  66. package/lib/module/native/SessionRecorderNative.js.map +1 -0
  67. package/lib/module/native/index.js +4 -0
  68. package/lib/module/native/index.js.map +1 -0
  69. package/lib/module/otel/helpers.js +218 -0
  70. package/lib/module/otel/helpers.js.map +1 -0
  71. package/lib/module/otel/index.js +95 -0
  72. package/lib/module/otel/index.js.map +1 -0
  73. package/lib/module/otel/instrumentations/index.js +102 -0
  74. package/lib/module/otel/instrumentations/index.js.map +1 -0
  75. package/lib/module/package.json +1 -0
  76. package/lib/module/patch/index.js +4 -0
  77. package/lib/module/patch/index.js.map +1 -0
  78. package/lib/module/patch/xhr.js +116 -0
  79. package/lib/module/patch/xhr.js.map +1 -0
  80. package/lib/module/recorder/eventExporter.js +130 -0
  81. package/lib/module/recorder/eventExporter.js.map +1 -0
  82. package/lib/module/recorder/gestureRecorder.js +641 -0
  83. package/lib/module/recorder/gestureRecorder.js.map +1 -0
  84. package/lib/module/recorder/index.js +168 -0
  85. package/lib/module/recorder/index.js.map +1 -0
  86. package/lib/module/recorder/navigationTracker.js +228 -0
  87. package/lib/module/recorder/navigationTracker.js.map +1 -0
  88. package/lib/module/recorder/screenRecorder.js +495 -0
  89. package/lib/module/recorder/screenRecorder.js.map +1 -0
  90. package/lib/module/services/api.service.js +149 -0
  91. package/lib/module/services/api.service.js.map +1 -0
  92. package/lib/module/services/network.service.js +178 -0
  93. package/lib/module/services/network.service.js.map +1 -0
  94. package/lib/module/services/screenMaskingService.js +107 -0
  95. package/lib/module/services/screenMaskingService.js.map +1 -0
  96. package/lib/module/services/storage.service.js +179 -0
  97. package/lib/module/services/storage.service.js.map +1 -0
  98. package/lib/module/session-recorder.js +541 -0
  99. package/lib/module/session-recorder.js.map +1 -0
  100. package/lib/module/types/configs.js +4 -0
  101. package/lib/module/types/configs.js.map +1 -0
  102. package/lib/module/types/expo-constants.d.js +2 -0
  103. package/lib/module/types/expo-constants.d.js.map +1 -0
  104. package/lib/module/types/index.js +11 -0
  105. package/lib/module/types/index.js.map +1 -0
  106. package/lib/module/types/session-recorder.js +68 -0
  107. package/lib/module/types/session-recorder.js.map +1 -0
  108. package/lib/module/types/session.js +9 -0
  109. package/lib/module/types/session.js.map +1 -0
  110. package/lib/module/utils/app-metadata.js +28 -0
  111. package/lib/module/utils/app-metadata.js.map +1 -0
  112. package/lib/module/utils/constants.optional.expo.js +6 -0
  113. package/lib/module/utils/constants.optional.expo.js.map +1 -0
  114. package/lib/module/utils/constants.optional.js +8 -0
  115. package/lib/module/utils/constants.optional.js.map +1 -0
  116. package/lib/module/utils/createStore.js +27 -0
  117. package/lib/module/utils/createStore.js.map +1 -0
  118. package/lib/module/utils/index.js +11 -0
  119. package/lib/module/utils/index.js.map +1 -0
  120. package/lib/module/utils/logger.js +185 -0
  121. package/lib/module/utils/logger.js.map +1 -0
  122. package/lib/module/utils/platform.js +340 -0
  123. package/lib/module/utils/platform.js.map +1 -0
  124. package/lib/module/utils/request-utils.js +58 -0
  125. package/lib/module/utils/request-utils.js.map +1 -0
  126. package/lib/module/utils/rrweb-events.js +276 -0
  127. package/lib/module/utils/rrweb-events.js.map +1 -0
  128. package/lib/module/utils/session.js +21 -0
  129. package/lib/module/utils/session.js.map +1 -0
  130. package/lib/module/utils/shallowEqual.js +17 -0
  131. package/lib/module/utils/shallowEqual.js.map +1 -0
  132. package/lib/module/utils/time.js +17 -0
  133. package/lib/module/utils/time.js.map +1 -0
  134. package/lib/module/utils/type-utils.js +69 -0
  135. package/lib/module/utils/type-utils.js.map +1 -0
  136. package/lib/module/version.js +4 -0
  137. package/lib/module/version.js.map +1 -0
  138. package/lib/typescript/package.json +1 -0
  139. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +6 -0
  140. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +1 -0
  141. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +2 -0
  142. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +1 -0
  143. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ErrorBanner.d.ts +1 -0
  144. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +1 -0
  145. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FinalPopover.d.ts +2 -1
  146. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +1 -0
  147. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FloatingButton.d.ts +1 -0
  148. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +1 -0
  149. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/InitialPopover.d.ts +2 -1
  150. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +1 -0
  151. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalContainer.d.ts +1 -0
  152. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +1 -0
  153. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalHeader.d.ts +1 -0
  154. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +1 -0
  155. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +1 -0
  156. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +1 -0
  157. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/icons.d.ts +1 -0
  158. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +1 -0
  159. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +3 -0
  160. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +1 -0
  161. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/styles.d.ts +4 -3
  162. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +1 -0
  163. package/lib/typescript/src/components/index.d.ts +3 -0
  164. package/lib/typescript/src/components/index.d.ts.map +1 -0
  165. package/{dist → lib/typescript/src}/config/constants.d.ts +1 -0
  166. package/lib/typescript/src/config/constants.d.ts.map +1 -0
  167. package/{dist → lib/typescript/src}/config/defaults.d.ts +2 -1
  168. package/lib/typescript/src/config/defaults.d.ts.map +1 -0
  169. package/{dist → lib/typescript/src}/config/index.d.ts +1 -0
  170. package/lib/typescript/src/config/index.d.ts.map +1 -0
  171. package/lib/typescript/src/config/masking.d.ts +3 -0
  172. package/lib/typescript/src/config/masking.d.ts.map +1 -0
  173. package/lib/typescript/src/config/session-recorder.d.ts +3 -0
  174. package/lib/typescript/src/config/session-recorder.d.ts.map +1 -0
  175. package/{dist → lib/typescript/src}/config/validators.d.ts +1 -0
  176. package/lib/typescript/src/config/validators.d.ts.map +1 -0
  177. package/{dist → lib/typescript/src}/config/widget.d.ts +2 -1
  178. package/lib/typescript/src/config/widget.d.ts.map +1 -0
  179. package/{dist → lib/typescript/src}/context/SessionRecorderContext.d.ts +3 -2
  180. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +1 -0
  181. package/{dist → lib/typescript/src}/context/SessionRecorderStore.d.ts +2 -1
  182. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +1 -0
  183. package/{dist → lib/typescript/src}/context/useSessionRecorderStore.d.ts +4 -3
  184. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +1 -0
  185. package/{dist → lib/typescript/src}/context/useStoreSelector.d.ts +2 -1
  186. package/lib/typescript/src/context/useStoreSelector.d.ts.map +1 -0
  187. package/{dist → lib/typescript/src}/index.d.ts +1 -0
  188. package/lib/typescript/src/index.d.ts.map +1 -0
  189. package/{dist → lib/typescript/src}/native/SessionRecorderNative.d.ts +21 -3
  190. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +1 -0
  191. package/lib/typescript/src/native/index.d.ts +2 -0
  192. package/lib/typescript/src/native/index.d.ts.map +1 -0
  193. package/{dist → lib/typescript/src}/otel/helpers.d.ts +3 -2
  194. package/lib/typescript/src/otel/helpers.d.ts.map +1 -0
  195. package/{dist → lib/typescript/src}/otel/index.d.ts +2 -2
  196. package/lib/typescript/src/otel/index.d.ts.map +1 -0
  197. package/{dist → lib/typescript/src}/otel/instrumentations/index.d.ts +2 -1
  198. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +1 -0
  199. package/lib/typescript/src/patch/index.d.ts +2 -0
  200. package/lib/typescript/src/patch/index.d.ts.map +1 -0
  201. package/{dist → lib/typescript/src}/patch/xhr.d.ts +1 -0
  202. package/lib/typescript/src/patch/xhr.d.ts.map +1 -0
  203. package/{dist → lib/typescript/src}/recorder/eventExporter.d.ts +2 -1
  204. package/lib/typescript/src/recorder/eventExporter.d.ts.map +1 -0
  205. package/{dist → lib/typescript/src}/recorder/gestureRecorder.d.ts +3 -2
  206. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +1 -0
  207. package/{dist → lib/typescript/src}/recorder/index.d.ts +3 -2
  208. package/lib/typescript/src/recorder/index.d.ts.map +1 -0
  209. package/{dist → lib/typescript/src}/recorder/navigationTracker.d.ts +2 -1
  210. package/lib/typescript/src/recorder/navigationTracker.d.ts.map +1 -0
  211. package/{dist → lib/typescript/src}/recorder/screenRecorder.d.ts +4 -4
  212. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -0
  213. package/{dist → lib/typescript/src}/services/api.service.d.ts +2 -1
  214. package/lib/typescript/src/services/api.service.d.ts.map +1 -0
  215. package/{dist → lib/typescript/src}/services/network.service.d.ts +1 -0
  216. package/lib/typescript/src/services/network.service.d.ts.map +1 -0
  217. package/{dist → lib/typescript/src}/services/screenMaskingService.d.ts +2 -1
  218. package/lib/typescript/src/services/screenMaskingService.d.ts.map +1 -0
  219. package/{dist → lib/typescript/src}/services/storage.service.d.ts +2 -1
  220. package/lib/typescript/src/services/storage.service.d.ts.map +1 -0
  221. package/{dist → lib/typescript/src}/session-recorder.d.ts +3 -2
  222. package/lib/typescript/src/session-recorder.d.ts.map +1 -0
  223. package/{dist → lib/typescript/src}/types/configs.d.ts +3 -2
  224. package/lib/typescript/src/types/configs.d.ts.map +1 -0
  225. package/{dist → lib/typescript/src}/types/index.d.ts +1 -0
  226. package/lib/typescript/src/types/index.d.ts.map +1 -0
  227. package/{dist → lib/typescript/src}/types/session-recorder.d.ts +7 -6
  228. package/lib/typescript/src/types/session-recorder.d.ts.map +1 -0
  229. package/{dist → lib/typescript/src}/types/session.d.ts +1 -0
  230. package/lib/typescript/src/types/session.d.ts.map +1 -0
  231. package/{dist → lib/typescript/src}/utils/app-metadata.d.ts +1 -0
  232. package/lib/typescript/src/utils/app-metadata.d.ts.map +1 -0
  233. package/{dist → lib/typescript/src}/utils/constants.optional.d.ts +1 -0
  234. package/lib/typescript/src/utils/constants.optional.d.ts.map +1 -0
  235. package/{dist → lib/typescript/src}/utils/constants.optional.expo.d.ts +1 -0
  236. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +1 -0
  237. package/{dist → lib/typescript/src}/utils/createStore.d.ts +1 -0
  238. package/lib/typescript/src/utils/createStore.d.ts.map +1 -0
  239. package/lib/typescript/src/utils/index.d.ts +8 -0
  240. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  241. package/{dist → lib/typescript/src}/utils/logger.d.ts +2 -1
  242. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  243. package/{dist → lib/typescript/src}/utils/platform.d.ts +2 -1
  244. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  245. package/{dist → lib/typescript/src}/utils/request-utils.d.ts +1 -0
  246. package/lib/typescript/src/utils/request-utils.d.ts.map +1 -0
  247. package/{dist → lib/typescript/src}/utils/rrweb-events.d.ts +2 -1
  248. package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -0
  249. package/{dist → lib/typescript/src}/utils/session.d.ts +1 -0
  250. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  251. package/{dist → lib/typescript/src}/utils/shallowEqual.d.ts +1 -0
  252. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  253. package/{dist → lib/typescript/src}/utils/time.d.ts +1 -0
  254. package/lib/typescript/src/utils/time.d.ts.map +1 -0
  255. package/{dist → lib/typescript/src}/utils/type-utils.d.ts +1 -0
  256. package/lib/typescript/src/utils/type-utils.d.ts.map +1 -0
  257. package/{dist → lib/typescript/src}/version.d.ts +1 -0
  258. package/lib/typescript/src/version.d.ts.map +1 -0
  259. package/package.json +133 -44
  260. package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +20 -0
  261. package/src/components/ScreenRecorderView/index.ts +1 -0
  262. package/src/components/SessionRecorderWidget/ErrorBanner.tsx +58 -0
  263. package/src/components/SessionRecorderWidget/FinalPopover.tsx +96 -0
  264. package/src/components/SessionRecorderWidget/FloatingButton.tsx +176 -0
  265. package/src/components/SessionRecorderWidget/InitialPopover.tsx +167 -0
  266. package/src/components/SessionRecorderWidget/ModalContainer.tsx +189 -0
  267. package/src/components/SessionRecorderWidget/ModalHeader.tsx +26 -0
  268. package/src/components/SessionRecorderWidget/SessionRecorderWidget.tsx +150 -0
  269. package/src/components/SessionRecorderWidget/icons.tsx +80 -0
  270. package/src/components/SessionRecorderWidget/index.ts +3 -0
  271. package/src/components/SessionRecorderWidget/styles.ts +168 -0
  272. package/src/config/constants.ts +67 -0
  273. package/src/config/defaults.ts +105 -0
  274. package/src/config/index.ts +6 -0
  275. package/src/config/masking.ts +60 -0
  276. package/src/config/session-recorder.ts +87 -0
  277. package/src/config/validators.ts +54 -0
  278. package/src/config/widget.ts +47 -0
  279. package/src/context/SessionRecorderContext.tsx +138 -0
  280. package/src/context/SessionRecorderStore.ts +22 -0
  281. package/src/context/useSessionRecorderStore.ts +34 -0
  282. package/src/context/useStoreSelector.ts +36 -0
  283. package/src/index.ts +10 -0
  284. package/src/native/SessionRecorderNative.ts +180 -0
  285. package/src/native/index.ts +5 -0
  286. package/src/otel/helpers.ts +290 -0
  287. package/src/otel/index.ts +132 -0
  288. package/src/otel/instrumentations/index.ts +118 -0
  289. package/src/patch/xhr.ts +148 -0
  290. package/src/recorder/eventExporter.ts +150 -0
  291. package/src/recorder/gestureRecorder.ts +828 -0
  292. package/src/recorder/index.ts +203 -0
  293. package/src/recorder/navigationTracker.ts +268 -0
  294. package/src/recorder/screenRecorder.ts +600 -0
  295. package/src/services/api.service.ts +216 -0
  296. package/src/services/network.service.ts +191 -0
  297. package/src/services/screenMaskingService.ts +153 -0
  298. package/src/services/storage.service.ts +248 -0
  299. package/src/session-recorder.ts +647 -0
  300. package/src/types/configs.ts +118 -0
  301. package/src/types/expo-constants.d.ts +7 -0
  302. package/src/types/index.ts +27 -0
  303. package/src/types/session-recorder.ts +381 -0
  304. package/src/types/session.ts +65 -0
  305. package/src/utils/app-metadata.ts +31 -0
  306. package/src/utils/constants.optional.expo.ts +5 -0
  307. package/src/utils/constants.optional.ts +18 -0
  308. package/src/utils/createStore.ts +32 -0
  309. package/{dist/utils/index.d.ts → src/utils/index.ts} +1 -0
  310. package/src/utils/logger.ts +245 -0
  311. package/src/utils/platform.ts +401 -0
  312. package/src/utils/request-utils.ts +61 -0
  313. package/src/utils/rrweb-events.ts +329 -0
  314. package/src/utils/session.ts +22 -0
  315. package/src/utils/shallowEqual.ts +20 -0
  316. package/src/utils/time.ts +20 -0
  317. package/src/utils/type-utils.ts +75 -0
  318. package/src/version.ts +1 -0
  319. package/REACT_NATIVE_SETUP.md +0 -91
  320. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  321. package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  322. package/android/gradlew +0 -249
  323. package/android/gradlew.bat +0 -92
  324. package/copy-react-native-dist.sh +0 -56
  325. package/dist/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -5
  326. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +0 -1
  327. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  328. package/dist/components/ScreenRecorderView/index.d.ts +0 -1
  329. package/dist/components/ScreenRecorderView/index.js +0 -1
  330. package/dist/components/ScreenRecorderView/index.js.map +0 -1
  331. package/dist/components/SessionRecorderWidget/ErrorBanner.js +0 -1
  332. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  333. package/dist/components/SessionRecorderWidget/FinalPopover.js +0 -1
  334. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  335. package/dist/components/SessionRecorderWidget/FloatingButton.js +0 -1
  336. package/dist/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  337. package/dist/components/SessionRecorderWidget/InitialPopover.js +0 -1
  338. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  339. package/dist/components/SessionRecorderWidget/ModalContainer.js +0 -1
  340. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  341. package/dist/components/SessionRecorderWidget/ModalHeader.js +0 -1
  342. package/dist/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  343. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -1
  344. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  345. package/dist/components/SessionRecorderWidget/icons.js +0 -1
  346. package/dist/components/SessionRecorderWidget/icons.js.map +0 -1
  347. package/dist/components/SessionRecorderWidget/index.d.ts +0 -2
  348. package/dist/components/SessionRecorderWidget/index.js +0 -1
  349. package/dist/components/SessionRecorderWidget/index.js.map +0 -1
  350. package/dist/components/SessionRecorderWidget/styles.js +0 -1
  351. package/dist/components/SessionRecorderWidget/styles.js.map +0 -1
  352. package/dist/components/index.js +0 -1
  353. package/dist/components/index.js.map +0 -1
  354. package/dist/config/constants.js +0 -1
  355. package/dist/config/constants.js.map +0 -1
  356. package/dist/config/defaults.js +0 -1
  357. package/dist/config/defaults.js.map +0 -1
  358. package/dist/config/index.js +0 -1
  359. package/dist/config/index.js.map +0 -1
  360. package/dist/config/masking.d.ts +0 -2
  361. package/dist/config/masking.js +0 -1
  362. package/dist/config/masking.js.map +0 -1
  363. package/dist/config/session-recorder.d.ts +0 -2
  364. package/dist/config/session-recorder.js +0 -1
  365. package/dist/config/session-recorder.js.map +0 -1
  366. package/dist/config/validators.js +0 -1
  367. package/dist/config/validators.js.map +0 -1
  368. package/dist/config/widget.js +0 -1
  369. package/dist/config/widget.js.map +0 -1
  370. package/dist/context/SessionRecorderContext.js +0 -1
  371. package/dist/context/SessionRecorderContext.js.map +0 -1
  372. package/dist/context/SessionRecorderStore.js +0 -1
  373. package/dist/context/SessionRecorderStore.js.map +0 -1
  374. package/dist/context/useSessionRecorderStore.js +0 -1
  375. package/dist/context/useSessionRecorderStore.js.map +0 -1
  376. package/dist/context/useStoreSelector.js +0 -1
  377. package/dist/context/useStoreSelector.js.map +0 -1
  378. package/dist/index.js +0 -1
  379. package/dist/index.js.map +0 -1
  380. package/dist/native/GestureRecorderNative.d.ts +0 -57
  381. package/dist/native/GestureRecorderNative.js +0 -1
  382. package/dist/native/GestureRecorderNative.js.map +0 -1
  383. package/dist/native/GestureRecorderNativeTurboSpec.d.ts +0 -31
  384. package/dist/native/GestureRecorderNativeTurboSpec.js +0 -1
  385. package/dist/native/GestureRecorderNativeTurboSpec.js.map +0 -1
  386. package/dist/native/SessionRecorderNative.js +0 -1
  387. package/dist/native/SessionRecorderNative.js.map +0 -1
  388. package/dist/native/SessionRecorderNativeTurboSpec.d.ts +0 -17
  389. package/dist/native/SessionRecorderNativeTurboSpec.js +0 -1
  390. package/dist/native/SessionRecorderNativeTurboSpec.js.map +0 -1
  391. package/dist/native/index.d.ts +0 -1
  392. package/dist/native/index.js +0 -1
  393. package/dist/native/index.js.map +0 -1
  394. package/dist/otel/helpers.js +0 -1
  395. package/dist/otel/helpers.js.map +0 -1
  396. package/dist/otel/index.js +0 -1
  397. package/dist/otel/index.js.map +0 -1
  398. package/dist/otel/instrumentations/index.js +0 -1
  399. package/dist/otel/instrumentations/index.js.map +0 -1
  400. package/dist/patch/index.js +0 -1
  401. package/dist/patch/index.js.map +0 -1
  402. package/dist/patch/xhr.js +0 -1
  403. package/dist/patch/xhr.js.map +0 -1
  404. package/dist/recorder/eventExporter.js +0 -1
  405. package/dist/recorder/eventExporter.js.map +0 -1
  406. package/dist/recorder/gestureRecorder.js +0 -1
  407. package/dist/recorder/gestureRecorder.js.map +0 -1
  408. package/dist/recorder/index.js +0 -1
  409. package/dist/recorder/index.js.map +0 -1
  410. package/dist/recorder/navigationTracker.js +0 -1
  411. package/dist/recorder/navigationTracker.js.map +0 -1
  412. package/dist/recorder/screenRecorder.js +0 -1
  413. package/dist/recorder/screenRecorder.js.map +0 -1
  414. package/dist/services/api.service.js +0 -1
  415. package/dist/services/api.service.js.map +0 -1
  416. package/dist/services/network.service.js +0 -1
  417. package/dist/services/network.service.js.map +0 -1
  418. package/dist/services/screenMaskingService.js +0 -1
  419. package/dist/services/screenMaskingService.js.map +0 -1
  420. package/dist/services/storage.service.js +0 -1
  421. package/dist/services/storage.service.js.map +0 -1
  422. package/dist/session-recorder.js +0 -1
  423. package/dist/session-recorder.js.map +0 -1
  424. package/dist/types/configs.js +0 -1
  425. package/dist/types/configs.js.map +0 -1
  426. package/dist/types/index.js +0 -1
  427. package/dist/types/index.js.map +0 -1
  428. package/dist/types/session-recorder.js +0 -1
  429. package/dist/types/session-recorder.js.map +0 -1
  430. package/dist/types/session.js +0 -1
  431. package/dist/types/session.js.map +0 -1
  432. package/dist/utils/app-metadata.js +0 -1
  433. package/dist/utils/app-metadata.js.map +0 -1
  434. package/dist/utils/constants.optional.expo.js +0 -1
  435. package/dist/utils/constants.optional.expo.js.map +0 -1
  436. package/dist/utils/constants.optional.js +0 -1
  437. package/dist/utils/constants.optional.js.map +0 -1
  438. package/dist/utils/createStore.js +0 -1
  439. package/dist/utils/createStore.js.map +0 -1
  440. package/dist/utils/index.js +0 -1
  441. package/dist/utils/index.js.map +0 -1
  442. package/dist/utils/logger.js +0 -1
  443. package/dist/utils/logger.js.map +0 -1
  444. package/dist/utils/platform.js +0 -1
  445. package/dist/utils/platform.js.map +0 -1
  446. package/dist/utils/request-utils.js +0 -1
  447. package/dist/utils/request-utils.js.map +0 -1
  448. package/dist/utils/rrweb-events.js +0 -1
  449. package/dist/utils/rrweb-events.js.map +0 -1
  450. package/dist/utils/session.js +0 -1
  451. package/dist/utils/session.js.map +0 -1
  452. package/dist/utils/shallowEqual.js +0 -1
  453. package/dist/utils/shallowEqual.js.map +0 -1
  454. package/dist/utils/time.js +0 -1
  455. package/dist/utils/time.js.map +0 -1
  456. package/dist/utils/type-utils.js +0 -1
  457. package/dist/utils/type-utils.js.map +0 -1
  458. package/dist/version.js +0 -1
  459. package/dist/version.js.map +0 -1
  460. package/docs/AUTO_METADATA_DETECTION.md +0 -108
  461. package/react-native.config.js +0 -13
  462. /package/{dist/components/index.d.ts → src/components/index.ts} +0 -0
  463. /package/{dist/patch/index.d.ts → src/patch/index.ts} +0 -0
@@ -0,0 +1,329 @@
1
+ import { Dimensions } from 'react-native';
2
+ import {
3
+ EventType,
4
+ type eventWithTime,
5
+ NodeType,
6
+ type serializedNodeWithId,
7
+ IncrementalSource,
8
+ type mutationData,
9
+ } from '@rrweb/types';
10
+ import { getAppMetadata } from './platform';
11
+
12
+ /**
13
+ * Creates a meta event to mark the start of recording
14
+ * @param sessionId - The session ID
15
+ * @param sessionType - The type of session (PLAIN or CONTINUOUS)
16
+ * @param additionalData - Additional data to include in the meta event
17
+ * @returns MetaEvent object
18
+ */
19
+ export function createRecordingMetaEvent(): eventWithTime {
20
+ const screenDimensions = Dimensions.get('window');
21
+ const metadata = getAppMetadata();
22
+
23
+ return {
24
+ type: EventType.Meta,
25
+ data: {
26
+ href:
27
+ metadata.bundleId || metadata.name || 'https://native.multiplayer.app',
28
+ width: screenDimensions.width,
29
+ height: screenDimensions.height,
30
+ },
31
+ timestamp: Date.now(),
32
+ };
33
+ }
34
+
35
+ /**
36
+ * Create a full snapshot event with the given base64 image
37
+ * @param base64Image - Base64 encoded image data
38
+ * @param width - Screen width
39
+ * @param height - Screen height
40
+ * @param captureFormat - Image format (png, jpg, etc.)
41
+ * @param nodeIdCounter - Starting node ID counter (will be modified)
42
+ * @param timestamp - Optional timestamp to use for the event
43
+ * @returns Full snapshot event
44
+ */
45
+ export function createFullSnapshotEvent(
46
+ base64Image: string,
47
+ width: number,
48
+ height: number,
49
+ captureFormat: string = 'jpg',
50
+ nodeIdCounter: { current: number },
51
+ timestamp?: number
52
+ ): eventWithTime {
53
+ // Create a virtual DOM node representing the screen as an image
54
+ const imageNode: serializedNodeWithId = {
55
+ type: NodeType.Element,
56
+ id: 0,
57
+ tagName: 'img',
58
+ attributes: {
59
+ src: `data:image/${captureFormat};base64,${base64Image}`,
60
+ width: width.toString(),
61
+ height: height.toString(),
62
+ style: `width: ${width}px; height: ${height}px;`,
63
+ },
64
+ childNodes: [],
65
+ };
66
+
67
+ // Create the root container
68
+ const rootNode: serializedNodeWithId = {
69
+ type: NodeType.Element,
70
+ id: nodeIdCounter.current++,
71
+ tagName: 'div',
72
+ attributes: {
73
+ style: `width: ${width}px; height: ${height}px; position: relative;`,
74
+ },
75
+ childNodes: [imageNode],
76
+ };
77
+
78
+ const domNode: serializedNodeWithId = {
79
+ type: NodeType.Document,
80
+ childNodes: [
81
+ {
82
+ type: NodeType.DocumentType,
83
+ name: 'html',
84
+ publicId: '',
85
+ systemId: '',
86
+ id: nodeIdCounter.current++,
87
+ },
88
+ {
89
+ type: NodeType.Element,
90
+ tagName: 'html',
91
+ attributes: {},
92
+ childNodes: [
93
+ {
94
+ type: NodeType.Element,
95
+ tagName: 'head',
96
+ attributes: {},
97
+ childNodes: [
98
+ {
99
+ type: NodeType.Element,
100
+ tagName: 'meta',
101
+ attributes: { charset: 'utf-8' },
102
+ childNodes: [],
103
+ id: nodeIdCounter.current++,
104
+ },
105
+ {
106
+ type: NodeType.Element,
107
+ tagName: 'meta',
108
+ attributes: {
109
+ name: 'viewport',
110
+ content:
111
+ 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no',
112
+ },
113
+ childNodes: [],
114
+ id: nodeIdCounter.current++,
115
+ },
116
+ ],
117
+ id: nodeIdCounter.current++,
118
+ },
119
+ {
120
+ type: NodeType.Element,
121
+ tagName: 'body',
122
+ attributes: {
123
+ style: 'margin: 0; padding: 0; width: 100%; height: 100%;',
124
+ },
125
+ childNodes: [rootNode],
126
+ id: nodeIdCounter.current++,
127
+ },
128
+ ],
129
+ id: nodeIdCounter.current++,
130
+ },
131
+ ],
132
+ id: nodeIdCounter.current++,
133
+ };
134
+
135
+ return {
136
+ type: EventType.FullSnapshot,
137
+ data: {
138
+ node: domNode,
139
+ initialOffset: { left: 0, top: 0 },
140
+ },
141
+ timestamp: timestamp || Date.now(),
142
+ };
143
+ }
144
+
145
+ /**
146
+ * Create an incremental snapshot event with mutation data to update image src
147
+ * @param base64Image - New base64 encoded image data
148
+ * @param captureFormat - Image format (png, jpg, etc.)
149
+ * @param timestamp - Optional timestamp to use for the event
150
+ * @returns Incremental snapshot event with mutation data
151
+ */
152
+ export function createIncrementalSnapshotWithImageUpdate(
153
+ base64Image: string,
154
+ captureFormat: string = 'jpg',
155
+ timestamp?: number
156
+ ): eventWithTime {
157
+ const mutationData: mutationData = {
158
+ source: IncrementalSource.Mutation,
159
+ texts: [],
160
+ attributes: [
161
+ {
162
+ id: 0,
163
+ attributes: {
164
+ src: `data:image/${captureFormat};base64,${base64Image}`,
165
+ },
166
+ },
167
+ ],
168
+ removes: [],
169
+ adds: [],
170
+ };
171
+
172
+ return {
173
+ type: EventType.IncrementalSnapshot,
174
+ data: mutationData,
175
+ timestamp: timestamp || Date.now(),
176
+ };
177
+ }
178
+
179
+ /**
180
+ * Create a simple image node for React Native screen capture
181
+ * @param base64Image - Base64 encoded image data
182
+ * @param width - Image width
183
+ * @param height - Image height
184
+ * @param captureFormat - Image format (png, jpg, etc.)
185
+ * @param nodeId - Node ID for the image
186
+ * @returns Serialized node with ID
187
+ */
188
+ export function createImageNode(
189
+ base64Image: string,
190
+ width: number,
191
+ height: number,
192
+ captureFormat: string = 'jpg',
193
+ nodeId: number
194
+ ): serializedNodeWithId {
195
+ return {
196
+ type: NodeType.Element,
197
+ id: nodeId,
198
+ tagName: 'img',
199
+ attributes: {
200
+ src: `data:image/${captureFormat};base64,${base64Image}`,
201
+ width: width.toString(),
202
+ height: height.toString(),
203
+ style: `width: ${width}px; height: ${height}px;`,
204
+ },
205
+ childNodes: [],
206
+ };
207
+ }
208
+
209
+ /**
210
+ * Create a document node for React Native screen capture
211
+ * @param imageNode - The image node to include
212
+ * @param width - Screen width
213
+ * @param height - Screen height
214
+ * @param nodeIdCounter - Node ID counter (will be modified)
215
+ * @returns Document node
216
+ */
217
+ export function createDocumentNode(
218
+ imageNode: serializedNodeWithId,
219
+ width: number,
220
+ height: number,
221
+ nodeIdCounter: { current: number }
222
+ ): serializedNodeWithId {
223
+ // Create the root container
224
+ const rootNode: serializedNodeWithId = {
225
+ type: NodeType.Element,
226
+ id: nodeIdCounter.current++,
227
+ tagName: 'div',
228
+ attributes: {
229
+ style: `width: ${width}px; height: ${height}px; position: relative;`,
230
+ },
231
+ childNodes: [imageNode],
232
+ };
233
+
234
+ return {
235
+ type: NodeType.Document,
236
+ childNodes: [
237
+ {
238
+ type: NodeType.DocumentType,
239
+ name: 'html',
240
+ publicId: '',
241
+ systemId: '',
242
+ id: nodeIdCounter.current++,
243
+ },
244
+ {
245
+ type: NodeType.Element,
246
+ tagName: 'html',
247
+ attributes: {},
248
+ childNodes: [
249
+ {
250
+ type: NodeType.Element,
251
+ tagName: 'head',
252
+ attributes: {},
253
+ childNodes: [
254
+ {
255
+ type: NodeType.Element,
256
+ tagName: 'meta',
257
+ attributes: { charset: 'utf-8' },
258
+ childNodes: [],
259
+ id: nodeIdCounter.current++,
260
+ },
261
+ {
262
+ type: NodeType.Element,
263
+ tagName: 'meta',
264
+ attributes: {
265
+ name: 'viewport',
266
+ content:
267
+ 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no',
268
+ },
269
+ childNodes: [],
270
+ id: nodeIdCounter.current++,
271
+ },
272
+ ],
273
+ id: nodeIdCounter.current++,
274
+ },
275
+ {
276
+ type: NodeType.Element,
277
+ tagName: 'body',
278
+ attributes: {},
279
+ childNodes: [rootNode],
280
+ id: nodeIdCounter.current++,
281
+ },
282
+ ],
283
+ id: nodeIdCounter.current++,
284
+ },
285
+ ],
286
+ id: nodeIdCounter.current++,
287
+ };
288
+ }
289
+
290
+ /**
291
+ * Generate a simple hash for screen comparison
292
+ * This is a lightweight hash that focuses on the beginning and end of the base64 string
293
+ * to detect changes without doing a full comparison
294
+ * @param base64Image - Base64 encoded image
295
+ * @param sampleSize - Number of characters to sample from each part
296
+ * @returns Hash string for comparison
297
+ */
298
+ export function generateScreenHash(
299
+ base64Image: string,
300
+ sampleSize: number = 100
301
+ ): string {
302
+ // Use a simple hash that samples the beginning, middle, and end of the base64 string
303
+ // This is much faster than comparing the entire string
304
+ const start = base64Image.substring(0, sampleSize);
305
+ const middle = base64Image.substring(
306
+ Math.floor(base64Image.length / 2) - sampleSize / 2,
307
+ Math.floor(base64Image.length / 2) + sampleSize / 2
308
+ );
309
+ const end = base64Image.substring(base64Image.length - sampleSize);
310
+
311
+ // Combine samples and create a simple hash
312
+ const combined = start + middle + end;
313
+ return simpleHash(combined);
314
+ }
315
+
316
+ /**
317
+ * Simple hash function for string comparison
318
+ * @param str - String to hash
319
+ * @returns Hash value as string
320
+ */
321
+ export function simpleHash(str: string): string {
322
+ let hash = 0;
323
+ for (let i = 0; i < str.length; i++) {
324
+ const char = str.charCodeAt(i);
325
+ hash = (hash << 5) - hash + char;
326
+ hash = hash & hash; // Convert to 32-bit integer
327
+ }
328
+ return Math.abs(hash).toString(36);
329
+ }
@@ -0,0 +1,22 @@
1
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import { DEBUG_SESSION_MAX_DURATION_SECONDS } from '../config/constants';
3
+
4
+ /**
5
+ * Session-related utility functions for React Native
6
+ */
7
+
8
+ export const isSessionActive = (
9
+ session: any,
10
+ sessionType: SessionType | null
11
+ ): boolean => {
12
+ if (!session) return false;
13
+ if (sessionType === SessionType.CONTINUOUS) return true;
14
+ const startedAt = new Date(session.startedAt || session.createdAt);
15
+ const now = new Date();
16
+ const diff = now.getTime() - startedAt.getTime();
17
+ return diff < DEBUG_SESSION_MAX_DURATION_SECONDS * 1000;
18
+ };
19
+
20
+ export const isConsoleEvent = (event: any): boolean => {
21
+ return event.type === 'Plugin' && event.data?.plugin === 'rrweb/console@1';
22
+ };
@@ -0,0 +1,20 @@
1
+ export function shallowEqual<T extends Record<string, any>>(
2
+ a: T,
3
+ b: T
4
+ ): boolean {
5
+ if (Object.is(a, b)) return true;
6
+ if (!a || !b) return false;
7
+ const aKeys = Object.keys(a);
8
+ const bKeys = Object.keys(b);
9
+ if (aKeys.length !== bKeys.length) return false;
10
+ for (let i = 0; i < aKeys.length; i++) {
11
+ const key = aKeys[i];
12
+ if (
13
+ !Object.prototype.hasOwnProperty.call(b, key!) ||
14
+ !Object.is(a[key!], b[key!])
15
+ ) {
16
+ return false;
17
+ }
18
+ }
19
+ return true;
20
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Time and date utility functions for React Native
3
+ */
4
+
5
+ export const getFormattedDate = (
6
+ date: number | Date,
7
+ options?: any
8
+ ): string => {
9
+ return new Date(date).toLocaleDateString(
10
+ 'en-US',
11
+ options || {
12
+ month: 'short',
13
+ year: 'numeric',
14
+ day: 'numeric',
15
+ hour: 'numeric',
16
+ minute: '2-digit',
17
+ second: '2-digit',
18
+ }
19
+ );
20
+ };
@@ -0,0 +1,75 @@
1
+ const nativeIsArray = Array.isArray;
2
+ const ObjProto = Object.prototype;
3
+ export const hasOwnProperty = ObjProto.hasOwnProperty;
4
+ const toString = ObjProto.toString;
5
+
6
+ export const isArray =
7
+ nativeIsArray ||
8
+ function (obj: any): obj is any[] {
9
+ return toString.call(obj) === '[object Array]';
10
+ };
11
+ export const isUint8Array = function (x: unknown): x is Uint8Array {
12
+ return toString.call(x) === '[object Uint8Array]';
13
+ };
14
+ // from a comment on http://dbj.org/dbj/?p=286
15
+ // fails on only one very rare and deliberate custom object:
16
+ // let bomb = { toString : undefined, valueOf: function(o) { return "function BOMBA!"; }};
17
+ export const isFunction = function (f: any): f is (...args: any[]) => any {
18
+ return typeof f === 'function';
19
+ };
20
+ // Underscore Addons
21
+ export const isObject = function (x: unknown): x is Record<string, any> {
22
+ return x === Object(x) && !isArray(x);
23
+ };
24
+ export const isEmptyObject = function (x: unknown): x is Record<string, any> {
25
+ if (isObject(x)) {
26
+ for (const key in x) {
27
+ if (hasOwnProperty.call(x, key)) {
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+ }
33
+ return false;
34
+ };
35
+ export const isUndefined = function (x: unknown): x is undefined {
36
+ return x === void 0;
37
+ };
38
+
39
+ export const isString = function (x: unknown): x is string {
40
+ return toString.call(x) == '[object String]';
41
+ };
42
+
43
+ export const isEmptyString = function (x: unknown): boolean {
44
+ return isString(x) && x.trim().length === 0;
45
+ };
46
+
47
+ export const isNull = function (x: unknown): x is null {
48
+ return x === null;
49
+ };
50
+
51
+ /*
52
+ sometimes you want to check if something is null or undefined
53
+ that's what this is for
54
+ */
55
+ export const isNullish = function (x: unknown): x is null | undefined {
56
+ return isUndefined(x) || isNull(x);
57
+ };
58
+
59
+ export const isDate = function (x: unknown): x is Date {
60
+ return toString.call(x) == '[object Date]';
61
+ };
62
+ export const isNumber = function (x: unknown): x is number {
63
+ return toString.call(x) == '[object Number]';
64
+ };
65
+ export const isBoolean = function (x: unknown): x is boolean {
66
+ return toString.call(x) === '[object Boolean]';
67
+ };
68
+
69
+ export const isFormData = (x: unknown): x is FormData => {
70
+ return x instanceof FormData;
71
+ };
72
+
73
+ export const isFile = (x: unknown): x is File => {
74
+ return x instanceof File;
75
+ };
package/src/version.ts ADDED
@@ -0,0 +1 @@
1
+ export const version = '1.0.1-beta.3';
@@ -1,91 +0,0 @@
1
- # React Native Setup Guide
2
-
3
- This package provides native session recording capabilities for React Native applications with automatic masking of sensitive UI elements.
4
-
5
- ## Installation
6
-
7
- ### For React Native CLI projects:
8
-
9
- ```bash
10
- npm install @multiplayer-app/session-recorder-react-native
11
- ```
12
-
13
- ### For Expo projects:
14
-
15
- ```bash
16
- npx expo install @multiplayer-app/session-recorder-react-native
17
- ```
18
-
19
- ## Platform-specific Setup
20
-
21
- ### Android
22
-
23
- The Android native module is automatically linked. No additional setup required.
24
-
25
- ### iOS
26
-
27
- The iOS native module uses CocoaPods for dependency management. Run:
28
-
29
- ```bash
30
- cd ios && pod install
31
- ```
32
-
33
- ## Usage
34
-
35
- ```typescript
36
- import { SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
37
-
38
- // Initialize the session recorder
39
- const sessionRecorder = new SessionRecorder({
40
- // Configuration options
41
- })
42
-
43
- // Start recording
44
- await sessionRecorder.start()
45
-
46
- // Stop recording
47
- await sessionRecorder.stop()
48
- ```
49
-
50
- ## Native Module Structure
51
-
52
- ### Android
53
-
54
- - `SessionRecorderNativeModule.kt` - Main native module implementation
55
- - `SessionRecorderNativePackage.kt` - React Native package registration
56
- - `SessionRecorderNativeConfig.kt` - Configuration class
57
- - `ViewUtils.kt` - View utility functions
58
- - `TargetInfo.kt` - Data model for target information
59
-
60
- ### iOS
61
-
62
- - `SessionRecorderNative.swift` - Main native module implementation
63
- - `GestureTargetFinder.swift` - Gesture target detection utilities
64
- - `SessionRecorderNative.m` - Objective-C bridge
65
- - `SessionRecorderNative.podspec` - CocoaPods specification
66
-
67
- ## Features
68
-
69
- - **Screen Capture**: Capture screenshots with automatic masking
70
- - **Gesture Recording**: Record user interactions (tap, pan, long press, pinch)
71
- - **Sensitive Content Masking**: Automatically mask text inputs, images, and other sensitive elements
72
- - **Cross-platform**: Works on both Android and iOS
73
- - **Expo Compatible**: Supports Expo managed workflow
74
-
75
- ## Troubleshooting
76
-
77
- ### Android Build Issues
78
-
79
- - Ensure Android SDK is properly configured
80
- - Check that the package is properly linked in `MainApplication.java`
81
-
82
- ### iOS Build Issues
83
-
84
- - Run `pod install` in the iOS directory
85
- - Ensure Xcode is properly configured
86
- - Check that the podspec is correctly configured
87
-
88
- ### Expo Issues
89
-
90
- - Use `npx expo install` instead of `npm install`
91
- - Ensure you're using a compatible Expo SDK version
@@ -1,7 +0,0 @@
1
- distributionBase=GRADLE_USER_HOME
2
- distributionPath=wrapper/dists
3
- distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
4
- networkTimeout=10000
5
- validateDistributionUrl=true
6
- zipStoreBase=GRADLE_USER_HOME
7
- zipStorePath=wrapper/dists