@multiplayer-app/session-recorder-react-native 1.0.0 → 1.0.1-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +216 -155
  3. package/SessionRecorderNative.podspec +35 -14
  4. package/android/build.gradle +65 -22
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeConfig.kt +52 -0
  8. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeModule.kt +861 -0
  9. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativePackage.kt +33 -0
  10. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeSpec.kt +79 -0
  11. package/android/src/main/java/com/sessionrecordernative/model/TargetInfo.kt +9 -0
  12. package/android/src/main/java/com/sessionrecordernative/util/ViewUtils.kt +72 -0
  13. package/ios/GestureTargetFinder.swift +50 -0
  14. package/ios/SessionRecorderNative-Bridging-Header.h +2 -0
  15. package/ios/{GestureRecorderNative.m → SessionRecorderNative.mm} +17 -6
  16. package/ios/SessionRecorderNative.swift +256 -4
  17. package/lib/module/SessionRecorderNativeSpec.js +5 -0
  18. package/lib/module/SessionRecorderNativeSpec.js.map +1 -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 +16 -0
  68. package/lib/module/index.js.map +1 -0
  69. package/lib/module/native/SessionRecorderNative.js +79 -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 +185 -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/{dist/native/SessionRecorderNative.d.ts → lib/typescript/src/SessionRecorderNativeSpec.d.ts} +23 -15
  144. package/lib/typescript/src/SessionRecorderNativeSpec.d.ts.map +1 -0
  145. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +6 -0
  146. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +1 -0
  147. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +2 -0
  148. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +1 -0
  149. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ErrorBanner.d.ts +1 -0
  150. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +1 -0
  151. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FinalPopover.d.ts +2 -1
  152. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +1 -0
  153. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FloatingButton.d.ts +1 -0
  154. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +1 -0
  155. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/InitialPopover.d.ts +2 -1
  156. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +1 -0
  157. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalContainer.d.ts +1 -0
  158. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +1 -0
  159. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalHeader.d.ts +1 -0
  160. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +1 -0
  161. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +1 -0
  162. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +1 -0
  163. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/icons.d.ts +1 -0
  164. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +1 -0
  165. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +3 -0
  166. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +1 -0
  167. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/styles.d.ts +4 -3
  168. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +1 -0
  169. package/lib/typescript/src/components/index.d.ts +3 -0
  170. package/lib/typescript/src/components/index.d.ts.map +1 -0
  171. package/{dist → lib/typescript/src}/config/constants.d.ts +1 -0
  172. package/lib/typescript/src/config/constants.d.ts.map +1 -0
  173. package/{dist → lib/typescript/src}/config/defaults.d.ts +2 -1
  174. package/lib/typescript/src/config/defaults.d.ts.map +1 -0
  175. package/{dist → lib/typescript/src}/config/index.d.ts +1 -0
  176. package/lib/typescript/src/config/index.d.ts.map +1 -0
  177. package/lib/typescript/src/config/masking.d.ts +3 -0
  178. package/lib/typescript/src/config/masking.d.ts.map +1 -0
  179. package/lib/typescript/src/config/session-recorder.d.ts +3 -0
  180. package/lib/typescript/src/config/session-recorder.d.ts.map +1 -0
  181. package/{dist → lib/typescript/src}/config/validators.d.ts +1 -0
  182. package/lib/typescript/src/config/validators.d.ts.map +1 -0
  183. package/{dist → lib/typescript/src}/config/widget.d.ts +2 -1
  184. package/lib/typescript/src/config/widget.d.ts.map +1 -0
  185. package/{dist → lib/typescript/src}/context/SessionRecorderContext.d.ts +3 -2
  186. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +1 -0
  187. package/{dist → lib/typescript/src}/context/SessionRecorderStore.d.ts +2 -1
  188. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +1 -0
  189. package/{dist → lib/typescript/src}/context/useSessionRecorderStore.d.ts +4 -3
  190. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +1 -0
  191. package/{dist → lib/typescript/src}/context/useStoreSelector.d.ts +2 -1
  192. package/lib/typescript/src/context/useStoreSelector.d.ts.map +1 -0
  193. package/{dist → lib/typescript/src}/index.d.ts +2 -0
  194. package/lib/typescript/src/index.d.ts.map +1 -0
  195. package/lib/typescript/src/native/SessionRecorderNative.d.ts +27 -0
  196. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +1 -0
  197. package/lib/typescript/src/native/index.d.ts +2 -0
  198. package/lib/typescript/src/native/index.d.ts.map +1 -0
  199. package/{dist → lib/typescript/src}/otel/helpers.d.ts +3 -2
  200. package/lib/typescript/src/otel/helpers.d.ts.map +1 -0
  201. package/{dist → lib/typescript/src}/otel/index.d.ts +2 -2
  202. package/lib/typescript/src/otel/index.d.ts.map +1 -0
  203. package/{dist → lib/typescript/src}/otel/instrumentations/index.d.ts +2 -1
  204. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +1 -0
  205. package/lib/typescript/src/patch/index.d.ts +2 -0
  206. package/lib/typescript/src/patch/index.d.ts.map +1 -0
  207. package/{dist → lib/typescript/src}/patch/xhr.d.ts +1 -0
  208. package/lib/typescript/src/patch/xhr.d.ts.map +1 -0
  209. package/{dist → lib/typescript/src}/recorder/eventExporter.d.ts +2 -1
  210. package/lib/typescript/src/recorder/eventExporter.d.ts.map +1 -0
  211. package/{dist → lib/typescript/src}/recorder/gestureRecorder.d.ts +3 -2
  212. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +1 -0
  213. package/{dist → lib/typescript/src}/recorder/index.d.ts +3 -2
  214. package/lib/typescript/src/recorder/index.d.ts.map +1 -0
  215. package/{dist → lib/typescript/src}/recorder/navigationTracker.d.ts +2 -1
  216. package/lib/typescript/src/recorder/navigationTracker.d.ts.map +1 -0
  217. package/{dist → lib/typescript/src}/recorder/screenRecorder.d.ts +4 -4
  218. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -0
  219. package/{dist → lib/typescript/src}/services/api.service.d.ts +2 -1
  220. package/lib/typescript/src/services/api.service.d.ts.map +1 -0
  221. package/{dist → lib/typescript/src}/services/network.service.d.ts +1 -0
  222. package/lib/typescript/src/services/network.service.d.ts.map +1 -0
  223. package/{dist → lib/typescript/src}/services/screenMaskingService.d.ts +2 -1
  224. package/lib/typescript/src/services/screenMaskingService.d.ts.map +1 -0
  225. package/{dist → lib/typescript/src}/services/storage.service.d.ts +2 -1
  226. package/lib/typescript/src/services/storage.service.d.ts.map +1 -0
  227. package/{dist → lib/typescript/src}/session-recorder.d.ts +3 -2
  228. package/lib/typescript/src/session-recorder.d.ts.map +1 -0
  229. package/{dist → lib/typescript/src}/types/configs.d.ts +3 -2
  230. package/lib/typescript/src/types/configs.d.ts.map +1 -0
  231. package/{dist → lib/typescript/src}/types/index.d.ts +1 -0
  232. package/lib/typescript/src/types/index.d.ts.map +1 -0
  233. package/{dist → lib/typescript/src}/types/session-recorder.d.ts +7 -6
  234. package/lib/typescript/src/types/session-recorder.d.ts.map +1 -0
  235. package/{dist → lib/typescript/src}/types/session.d.ts +1 -0
  236. package/lib/typescript/src/types/session.d.ts.map +1 -0
  237. package/{dist → lib/typescript/src}/utils/app-metadata.d.ts +1 -0
  238. package/lib/typescript/src/utils/app-metadata.d.ts.map +1 -0
  239. package/{dist → lib/typescript/src}/utils/constants.optional.d.ts +1 -0
  240. package/lib/typescript/src/utils/constants.optional.d.ts.map +1 -0
  241. package/{dist → lib/typescript/src}/utils/constants.optional.expo.d.ts +1 -0
  242. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +1 -0
  243. package/{dist → lib/typescript/src}/utils/createStore.d.ts +1 -0
  244. package/lib/typescript/src/utils/createStore.d.ts.map +1 -0
  245. package/lib/typescript/src/utils/index.d.ts +8 -0
  246. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  247. package/{dist → lib/typescript/src}/utils/logger.d.ts +2 -1
  248. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  249. package/{dist → lib/typescript/src}/utils/platform.d.ts +2 -1
  250. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  251. package/{dist → lib/typescript/src}/utils/request-utils.d.ts +1 -0
  252. package/lib/typescript/src/utils/request-utils.d.ts.map +1 -0
  253. package/{dist → lib/typescript/src}/utils/rrweb-events.d.ts +2 -1
  254. package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -0
  255. package/{dist → lib/typescript/src}/utils/session.d.ts +1 -0
  256. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  257. package/{dist → lib/typescript/src}/utils/shallowEqual.d.ts +1 -0
  258. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  259. package/{dist → lib/typescript/src}/utils/time.d.ts +1 -0
  260. package/lib/typescript/src/utils/time.d.ts.map +1 -0
  261. package/{dist → lib/typescript/src}/utils/type-utils.d.ts +1 -0
  262. package/lib/typescript/src/utils/type-utils.d.ts.map +1 -0
  263. package/lib/typescript/src/version.d.ts +2 -0
  264. package/lib/typescript/src/version.d.ts.map +1 -0
  265. package/package.json +157 -39
  266. package/react-native.config.js +8 -6
  267. package/src/SessionRecorderNativeSpec.ts +52 -0
  268. package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +20 -0
  269. package/src/components/ScreenRecorderView/index.ts +1 -0
  270. package/src/components/SessionRecorderWidget/ErrorBanner.tsx +58 -0
  271. package/src/components/SessionRecorderWidget/FinalPopover.tsx +96 -0
  272. package/src/components/SessionRecorderWidget/FloatingButton.tsx +176 -0
  273. package/src/components/SessionRecorderWidget/InitialPopover.tsx +167 -0
  274. package/src/components/SessionRecorderWidget/ModalContainer.tsx +189 -0
  275. package/src/components/SessionRecorderWidget/ModalHeader.tsx +26 -0
  276. package/src/components/SessionRecorderWidget/SessionRecorderWidget.tsx +150 -0
  277. package/src/components/SessionRecorderWidget/icons.tsx +80 -0
  278. package/src/components/SessionRecorderWidget/index.ts +3 -0
  279. package/src/components/SessionRecorderWidget/styles.ts +168 -0
  280. package/src/config/constants.ts +67 -0
  281. package/src/config/defaults.ts +105 -0
  282. package/src/config/index.ts +6 -0
  283. package/src/config/masking.ts +60 -0
  284. package/src/config/session-recorder.ts +87 -0
  285. package/src/config/validators.ts +54 -0
  286. package/src/config/widget.ts +47 -0
  287. package/src/context/SessionRecorderContext.tsx +138 -0
  288. package/src/context/SessionRecorderStore.ts +22 -0
  289. package/src/context/useSessionRecorderStore.ts +34 -0
  290. package/src/context/useStoreSelector.ts +36 -0
  291. package/src/index.ts +13 -0
  292. package/src/native/SessionRecorderNative.ts +120 -0
  293. package/src/native/index.ts +5 -0
  294. package/src/otel/helpers.ts +290 -0
  295. package/src/otel/index.ts +132 -0
  296. package/src/otel/instrumentations/index.ts +118 -0
  297. package/src/patch/xhr.ts +148 -0
  298. package/src/recorder/eventExporter.ts +150 -0
  299. package/src/recorder/gestureRecorder.ts +828 -0
  300. package/src/recorder/index.ts +203 -0
  301. package/src/recorder/navigationTracker.ts +268 -0
  302. package/src/recorder/screenRecorder.ts +600 -0
  303. package/src/services/api.service.ts +216 -0
  304. package/src/services/network.service.ts +191 -0
  305. package/src/services/screenMaskingService.ts +153 -0
  306. package/src/services/storage.service.ts +248 -0
  307. package/src/session-recorder.ts +647 -0
  308. package/src/types/configs.ts +118 -0
  309. package/src/types/expo-constants.d.ts +7 -0
  310. package/src/types/index.ts +27 -0
  311. package/src/types/session-recorder.ts +381 -0
  312. package/src/types/session.ts +65 -0
  313. package/src/utils/app-metadata.ts +31 -0
  314. package/src/utils/constants.optional.expo.ts +5 -0
  315. package/src/utils/constants.optional.ts +18 -0
  316. package/src/utils/createStore.ts +32 -0
  317. package/{dist/utils/index.d.ts → src/utils/index.ts} +1 -0
  318. package/src/utils/logger.ts +245 -0
  319. package/src/utils/platform.ts +401 -0
  320. package/src/utils/request-utils.ts +61 -0
  321. package/src/utils/rrweb-events.ts +329 -0
  322. package/src/utils/session.ts +22 -0
  323. package/src/utils/shallowEqual.ts +20 -0
  324. package/src/utils/time.ts +20 -0
  325. package/src/utils/type-utils.ts +75 -0
  326. package/src/version.ts +1 -0
  327. package/copy-react-native-dist.sh +0 -56
  328. package/dist/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -5
  329. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +0 -1
  330. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  331. package/dist/components/ScreenRecorderView/index.d.ts +0 -1
  332. package/dist/components/ScreenRecorderView/index.js +0 -1
  333. package/dist/components/ScreenRecorderView/index.js.map +0 -1
  334. package/dist/components/SessionRecorderWidget/ErrorBanner.js +0 -1
  335. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  336. package/dist/components/SessionRecorderWidget/FinalPopover.js +0 -1
  337. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  338. package/dist/components/SessionRecorderWidget/FloatingButton.js +0 -1
  339. package/dist/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  340. package/dist/components/SessionRecorderWidget/InitialPopover.js +0 -1
  341. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  342. package/dist/components/SessionRecorderWidget/ModalContainer.js +0 -1
  343. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  344. package/dist/components/SessionRecorderWidget/ModalHeader.js +0 -1
  345. package/dist/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  346. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -1
  347. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  348. package/dist/components/SessionRecorderWidget/icons.js +0 -1
  349. package/dist/components/SessionRecorderWidget/icons.js.map +0 -1
  350. package/dist/components/SessionRecorderWidget/index.d.ts +0 -2
  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/SessionRecorderNative.js +0 -1
  387. package/dist/native/SessionRecorderNative.js.map +0 -1
  388. package/dist/native/index.d.ts +0 -2
  389. package/dist/native/index.js +0 -1
  390. package/dist/native/index.js.map +0 -1
  391. package/dist/otel/helpers.js +0 -1
  392. package/dist/otel/helpers.js.map +0 -1
  393. package/dist/otel/index.js +0 -1
  394. package/dist/otel/index.js.map +0 -1
  395. package/dist/otel/instrumentations/index.js +0 -1
  396. package/dist/otel/instrumentations/index.js.map +0 -1
  397. package/dist/patch/index.js +0 -1
  398. package/dist/patch/index.js.map +0 -1
  399. package/dist/patch/xhr.js +0 -1
  400. package/dist/patch/xhr.js.map +0 -1
  401. package/dist/recorder/eventExporter.js +0 -1
  402. package/dist/recorder/eventExporter.js.map +0 -1
  403. package/dist/recorder/gestureRecorder.js +0 -1
  404. package/dist/recorder/gestureRecorder.js.map +0 -1
  405. package/dist/recorder/index.js +0 -1
  406. package/dist/recorder/index.js.map +0 -1
  407. package/dist/recorder/navigationTracker.js +0 -1
  408. package/dist/recorder/navigationTracker.js.map +0 -1
  409. package/dist/recorder/screenRecorder.js +0 -1
  410. package/dist/recorder/screenRecorder.js.map +0 -1
  411. package/dist/services/api.service.js +0 -1
  412. package/dist/services/api.service.js.map +0 -1
  413. package/dist/services/network.service.js +0 -1
  414. package/dist/services/network.service.js.map +0 -1
  415. package/dist/services/screenMaskingService.js +0 -1
  416. package/dist/services/screenMaskingService.js.map +0 -1
  417. package/dist/services/storage.service.js +0 -1
  418. package/dist/services/storage.service.js.map +0 -1
  419. package/dist/session-recorder.js +0 -1
  420. package/dist/session-recorder.js.map +0 -1
  421. package/dist/types/configs.js +0 -1
  422. package/dist/types/configs.js.map +0 -1
  423. package/dist/types/index.js +0 -1
  424. package/dist/types/index.js.map +0 -1
  425. package/dist/types/session-recorder.js +0 -1
  426. package/dist/types/session-recorder.js.map +0 -1
  427. package/dist/types/session.js +0 -1
  428. package/dist/types/session.js.map +0 -1
  429. package/dist/utils/app-metadata.js +0 -1
  430. package/dist/utils/app-metadata.js.map +0 -1
  431. package/dist/utils/constants.optional.expo.js +0 -1
  432. package/dist/utils/constants.optional.expo.js.map +0 -1
  433. package/dist/utils/constants.optional.js +0 -1
  434. package/dist/utils/constants.optional.js.map +0 -1
  435. package/dist/utils/createStore.js +0 -1
  436. package/dist/utils/createStore.js.map +0 -1
  437. package/dist/utils/index.js +0 -1
  438. package/dist/utils/index.js.map +0 -1
  439. package/dist/utils/logger.js +0 -1
  440. package/dist/utils/logger.js.map +0 -1
  441. package/dist/utils/platform.js +0 -1
  442. package/dist/utils/platform.js.map +0 -1
  443. package/dist/utils/request-utils.js +0 -1
  444. package/dist/utils/request-utils.js.map +0 -1
  445. package/dist/utils/rrweb-events.js +0 -1
  446. package/dist/utils/rrweb-events.js.map +0 -1
  447. package/dist/utils/session.js +0 -1
  448. package/dist/utils/session.js.map +0 -1
  449. package/dist/utils/shallowEqual.js +0 -1
  450. package/dist/utils/shallowEqual.js.map +0 -1
  451. package/dist/utils/time.js +0 -1
  452. package/dist/utils/time.js.map +0 -1
  453. package/dist/utils/type-utils.js +0 -1
  454. package/dist/utils/type-utils.js.map +0 -1
  455. package/dist/version.d.ts +0 -1
  456. package/dist/version.js +0 -1
  457. package/dist/version.js.map +0 -1
  458. package/docs/AUTO_METADATA_DETECTION.md +0 -108
  459. package/ios/GestureRecorderNative.swift +0 -316
  460. package/ios/SessionRecorderNative.m +0 -17
  461. package/ios/SessionRecorderNative.podspec +0 -26
  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
package/README.md CHANGED
@@ -92,43 +92,51 @@ If you encounter:
92
92
  #### For Basic React Native Apps (App.tsx)
93
93
 
94
94
  ```javascript
95
- import React from 'react'
96
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
95
+ import React from 'react';
96
+ import {
97
+ SessionRecorderProvider,
98
+ SessionRecorder,
99
+ } from '@multiplayer-app/session-recorder-react-native';
97
100
 
98
101
  // Initialize with minimal required options
99
102
  SessionRecorder.init({
100
103
  application: 'my-react-native-app',
101
104
  version: '1.0.0',
102
105
  environment: 'production',
103
- apiKey: 'YOUR_MULTIPLAYER_API_KEY'
104
- })
106
+ apiKey: 'YOUR_MULTIPLAYER_API_KEY',
107
+ });
105
108
 
106
109
  export default function App() {
107
- return <SessionRecorderProvider>{/* Your app content */}</SessionRecorderProvider>
110
+ return (
111
+ <SessionRecorderProvider>{/* Your app content */}</SessionRecorderProvider>
112
+ );
108
113
  }
109
114
  ```
110
115
 
111
116
  #### For Expo Apps (\_layout.tsx)
112
117
 
113
118
  ```javascript
114
- import React from 'react'
115
- import { Stack } from 'expo-router'
116
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
119
+ import React from 'react';
120
+ import { Stack } from 'expo-router';
121
+ import {
122
+ SessionRecorderProvider,
123
+ SessionRecorder,
124
+ } from '@multiplayer-app/session-recorder-react-native';
117
125
 
118
126
  // Initialize with minimal required options
119
127
  SessionRecorder.init({
120
128
  application: 'my-expo-app',
121
129
  version: '1.0.0',
122
130
  environment: 'production',
123
- apiKey: 'YOUR_MULTIPLAYER_API_KEY'
124
- })
131
+ apiKey: 'YOUR_MULTIPLAYER_API_KEY',
132
+ });
125
133
 
126
134
  export default function RootLayout() {
127
135
  return (
128
136
  <SessionRecorderProvider>
129
137
  <Stack />
130
138
  </SessionRecorderProvider>
131
- )
139
+ );
132
140
  }
133
141
  ```
134
142
 
@@ -144,8 +152,11 @@ This minimal setup will:
144
152
  #### For Basic React Native Apps (App.tsx)
145
153
 
146
154
  ```javascript
147
- import React from 'react'
148
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
155
+ import React from 'react';
156
+ import {
157
+ SessionRecorderProvider,
158
+ SessionRecorder,
159
+ } from '@multiplayer-app/session-recorder-react-native';
149
160
 
150
161
  SessionRecorder.init({
151
162
  application: 'my-react-native-app',
@@ -154,20 +165,25 @@ SessionRecorder.init({
154
165
  apiKey: 'YOUR_MULTIPLAYER_API_KEY',
155
166
  recordGestures: true, // default is true
156
167
  recordNavigation: true, // default is true
157
- recordScreen: true // default is true
158
- })
168
+ recordScreen: true, // default is true
169
+ });
159
170
 
160
171
  export default function App() {
161
- return <SessionRecorderProvider>{/* Your app content */}</SessionRecorderProvider>
172
+ return (
173
+ <SessionRecorderProvider>{/* Your app content */}</SessionRecorderProvider>
174
+ );
162
175
  }
163
176
  ```
164
177
 
165
178
  #### For Expo Apps (\_layout.tsx)
166
179
 
167
180
  ```javascript
168
- import React from 'react'
169
- import { Stack } from 'expo-router'
170
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
181
+ import React from 'react';
182
+ import { Stack } from 'expo-router';
183
+ import {
184
+ SessionRecorderProvider,
185
+ SessionRecorder,
186
+ } from '@multiplayer-app/session-recorder-react-native';
171
187
 
172
188
  SessionRecorder.init({
173
189
  application: 'my-expo-app',
@@ -176,15 +192,15 @@ SessionRecorder.init({
176
192
  apiKey: 'YOUR_MULTIPLAYER_API_KEY',
177
193
  recordGestures: true, // default is true
178
194
  recordNavigation: true, // default is true
179
- recordScreen: true // default is true
180
- })
195
+ recordScreen: true, // default is true
196
+ });
181
197
 
182
198
  export default function RootLayout() {
183
199
  return (
184
200
  <SessionRecorderProvider>
185
201
  <Stack />
186
202
  </SessionRecorderProvider>
187
- )
203
+ );
188
204
  }
189
205
  ```
190
206
 
@@ -193,11 +209,14 @@ export default function RootLayout() {
193
209
  Here's a complete example showing how to integrate the session recorder in your React Native app:
194
210
 
195
211
  ```javascript
196
- import React, { useEffect, useRef } from 'react'
197
- import { NavigationContainer } from '@react-navigation/native'
198
- import { SafeAreaProvider } from 'react-native-safe-area-context'
199
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
200
- import { AppNavigator } from './navigation/AppNavigator'
212
+ import React, { useEffect, useRef } from 'react';
213
+ import { NavigationContainer } from '@react-navigation/native';
214
+ import { SafeAreaProvider } from 'react-native-safe-area-context';
215
+ import {
216
+ SessionRecorderProvider,
217
+ SessionRecorder,
218
+ } from '@multiplayer-app/session-recorder-react-native';
219
+ import { AppNavigator } from './navigation/AppNavigator';
201
220
 
202
221
  // Initialize session recorder
203
222
  SessionRecorder.init({
@@ -207,20 +226,20 @@ SessionRecorder.init({
207
226
  apiKey: 'YOUR_MULTIPLAYER_API_KEY',
208
227
  recordGestures: true,
209
228
  recordNavigation: true,
210
- recordScreen: false // Enable after adding permissions
211
- })
229
+ recordScreen: false, // Enable after adding permissions
230
+ });
212
231
 
213
232
  export default function App() {
214
- const navigationRef = useRef(null)
233
+ const navigationRef = useRef(null);
215
234
 
216
235
  useEffect(() => {
217
236
  // Set session attributes for better debugging context
218
237
  SessionRecorder.setSessionAttributes({
219
238
  userId: 'user123',
220
239
  userType: 'premium',
221
- appVersion: '1.0.0'
222
- })
223
- }, [])
240
+ appVersion: '1.0.0',
241
+ });
242
+ }, []);
224
243
 
225
244
  return (
226
245
  <SessionRecorderProvider>
@@ -228,14 +247,14 @@ export default function App() {
228
247
  <NavigationContainer
229
248
  ref={navigationRef}
230
249
  onReady={() => {
231
- SessionRecorder.setNavigationRef(navigationRef.current)
250
+ SessionRecorder.setNavigationRef(navigationRef.current);
232
251
  }}
233
252
  >
234
253
  <AppNavigator />
235
254
  </NavigationContainer>
236
255
  </SafeAreaProvider>
237
256
  </SessionRecorderProvider>
238
- )
257
+ );
239
258
  }
240
259
  ```
241
260
 
@@ -244,7 +263,7 @@ export default function App() {
244
263
  For Expo applications, the package automatically detects the Expo environment:
245
264
 
246
265
  ```javascript
247
- import SessionRecorder from '@multiplayer-app/session-recorder-react-native'
266
+ import SessionRecorder from '@multiplayer-app/session-recorder-react-native';
248
267
 
249
268
  SessionRecorder.init({
250
269
  application: 'my-expo-app',
@@ -253,8 +272,8 @@ SessionRecorder.init({
253
272
  apiKey: 'YOUR_MULTIPLAYER_API_KEY',
254
273
  recordGestures: true,
255
274
  recordNavigation: true,
256
- recordScreen: true
257
- })
275
+ recordScreen: true,
276
+ });
258
277
  ```
259
278
 
260
279
  The package will automatically:
@@ -270,26 +289,29 @@ The package will automatically:
270
289
  Expo Router already manages the NavigationContainer. Don't add your own.
271
290
 
272
291
  ```tsx
273
- import { useEffect } from 'react'
274
- import { Stack, useNavigationContainerRef } from 'expo-router'
275
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
292
+ import { useEffect } from 'react';
293
+ import { Stack, useNavigationContainerRef } from 'expo-router';
294
+ import {
295
+ SessionRecorderProvider,
296
+ SessionRecorder,
297
+ } from '@multiplayer-app/session-recorder-react-native';
276
298
 
277
299
  export default function RootLayout() {
278
- const navigationRef = useNavigationContainerRef()
300
+ const navigationRef = useNavigationContainerRef();
279
301
 
280
302
  useEffect(() => {
281
303
  const unsub = navigationRef.addListener?.('state', () => {
282
- SessionRecorder.setNavigationRef(navigationRef)
283
- unsub?.()
284
- })
285
- return unsub
286
- }, [navigationRef])
304
+ SessionRecorder.setNavigationRef(navigationRef);
305
+ unsub?.();
306
+ });
307
+ return unsub;
308
+ }, [navigationRef]);
287
309
 
288
310
  return (
289
311
  <SessionRecorderProvider>
290
312
  <Stack />
291
313
  </SessionRecorderProvider>
292
- )
314
+ );
293
315
  }
294
316
  ```
295
317
 
@@ -298,25 +320,28 @@ export default function RootLayout() {
298
320
  If you own the `NavigationContainer`, set the ref in `onReady`:
299
321
 
300
322
  ```tsx
301
- import { NavigationContainer } from '@react-navigation/native'
302
- import { useRef } from 'react'
303
- import { SessionRecorderProvider, SessionRecorder } from '@multiplayer-app/session-recorder-react-native'
323
+ import { NavigationContainer } from '@react-navigation/native';
324
+ import { useRef } from 'react';
325
+ import {
326
+ SessionRecorderProvider,
327
+ SessionRecorder,
328
+ } from '@multiplayer-app/session-recorder-react-native';
304
329
 
305
330
  export default function App() {
306
- const navigationRef = useRef<any>(null)
331
+ const navigationRef = useRef<any>(null);
307
332
 
308
333
  return (
309
334
  <SessionRecorderProvider>
310
335
  <NavigationContainer
311
336
  ref={navigationRef}
312
337
  onReady={() => {
313
- SessionRecorder.setNavigationRef(navigationRef.current)
338
+ SessionRecorder.setNavigationRef(navigationRef.current);
314
339
  }}
315
340
  >
316
341
  {/* Your navigation stack */}
317
342
  </NavigationContainer>
318
343
  </SessionRecorderProvider>
319
- )
344
+ );
320
345
  }
321
346
  ```
322
347
 
@@ -324,26 +349,26 @@ export default function App() {
324
349
 
325
350
  ```javascript
326
351
  // Start a new recording session
327
- SessionRecorder.start()
352
+ SessionRecorder.start();
328
353
 
329
354
  // Pause current recording
330
- SessionRecorder.pause()
355
+ SessionRecorder.pause();
331
356
 
332
357
  // Resume paused recording
333
- SessionRecorder.resume()
358
+ SessionRecorder.resume();
334
359
 
335
360
  // Stop recording with optional reason
336
- SessionRecorder.stop('Session completed')
361
+ SessionRecorder.stop('Session completed');
337
362
 
338
363
  // Save continuous recording (for continuous mode)
339
- SessionRecorder.save()
364
+ SessionRecorder.save();
340
365
 
341
366
  // Set session attributes for better context
342
367
  SessionRecorder.setSessionAttributes({
343
368
  userId: 'user123',
344
369
  feature: 'checkout',
345
- version: '2.1.0'
346
- })
370
+ version: '2.1.0',
371
+ });
347
372
  ```
348
373
 
349
374
  ## Session Provider & Hooks
@@ -363,10 +388,10 @@ SessionRecorder.init({
363
388
  widget: {
364
389
  enabled: true,
365
390
  button: {
366
- visible: false // Hide the floating button
367
- }
368
- }
369
- })
391
+ visible: false, // Hide the floating button
392
+ },
393
+ },
394
+ });
370
395
  ```
371
396
 
372
397
  ### Programmatic Widget Control
@@ -374,56 +399,67 @@ SessionRecorder.init({
374
399
  Use the `useSessionRecorder` hook to control the widget modal programmatically:
375
400
 
376
401
  ```javascript
377
- import React from 'react'
378
- import { View, Button } from 'react-native'
379
- import { useSessionRecorder } from '@multiplayer-app/session-recorder-react-native'
402
+ import React from 'react';
403
+ import { View, Button } from 'react-native';
404
+ import { useSessionRecorder } from '@multiplayer-app/session-recorder-react-native';
380
405
 
381
406
  function MyComponent() {
382
- const { openWidgetModal, closeWidgetModal } = useSessionRecorder()
407
+ const { openWidgetModal, closeWidgetModal } = useSessionRecorder();
383
408
 
384
409
  return (
385
410
  <View>
386
- <Button title='Open Session Recorder' onPress={openWidgetModal} />
387
- <Button title='Close Session Recorder' onPress={closeWidgetModal} />
411
+ <Button title="Open Session Recorder" onPress={openWidgetModal} />
412
+ <Button title="Close Session Recorder" onPress={closeWidgetModal} />
388
413
  </View>
389
- )
414
+ );
390
415
  }
391
416
  ```
392
417
 
393
418
  ### Session Control with Hooks
394
419
 
395
420
  ```javascript
396
- import React from 'react'
397
- import { View, Button } from 'react-native'
398
- import { useSessionRecorder } from '@multiplayer-app/session-recorder-react-native'
421
+ import React from 'react';
422
+ import { View, Button } from 'react-native';
423
+ import { useSessionRecorder } from '@multiplayer-app/session-recorder-react-native';
399
424
 
400
425
  function SessionControls() {
401
- const { startSession, stopSession, pauseSession, resumeSession, saveSession } = useSessionRecorder()
426
+ const {
427
+ startSession,
428
+ stopSession,
429
+ pauseSession,
430
+ resumeSession,
431
+ saveSession,
432
+ } = useSessionRecorder();
402
433
 
403
434
  return (
404
435
  <View>
405
- <Button title='Start Session' onPress={() => startSession()} />
406
- <Button title='Pause Session' onPress={() => pauseSession()} />
407
- <Button title='Resume Session' onPress={() => resumeSession()} />
408
- <Button title='Stop Session' onPress={() => stopSession('User completed')} />
409
- <Button title='Save Session' onPress={() => saveSession()} />
436
+ <Button title="Start Session" onPress={() => startSession()} />
437
+ <Button title="Pause Session" onPress={() => pauseSession()} />
438
+ <Button title="Resume Session" onPress={() => resumeSession()} />
439
+ <Button
440
+ title="Stop Session"
441
+ onPress={() => stopSession('User completed')}
442
+ />
443
+ <Button title="Save Session" onPress={() => saveSession()} />
410
444
  </View>
411
- )
445
+ );
412
446
  }
413
447
  ```
414
448
 
415
449
  ### Session State with Hooks
416
450
 
417
451
  ```javascript
418
- import React from 'react'
419
- import { View, Text } from 'react-native'
420
- import { useSessionRecorderStore } from '@multiplayer-app/session-recorder-react-native'
452
+ import React from 'react';
453
+ import { View, Text } from 'react-native';
454
+ import { useSessionRecorderStore } from '@multiplayer-app/session-recorder-react-native';
421
455
 
422
456
  function SessionStatus() {
423
- const sessionType = useSessionRecorderStore((s) => s.sessionType)
424
- const isWidgetModalVisible = useSessionRecorderStore((s) => s.isWidgetModalVisible)
425
- const sessionState = useSessionRecorderStore((s) => s.sessionState)
426
- const isOnline = useSessionRecorderStore((s) => s.isOnline)
457
+ const sessionType = useSessionRecorderStore((s) => s.sessionType);
458
+ const isWidgetModalVisible = useSessionRecorderStore(
459
+ (s) => s.isWidgetModalVisible
460
+ );
461
+ const sessionState = useSessionRecorderStore((s) => s.sessionState);
462
+ const isOnline = useSessionRecorderStore((s) => s.isOnline);
427
463
 
428
464
  return (
429
465
  <View>
@@ -432,56 +468,58 @@ function SessionStatus() {
432
468
  <Text>Widget Visible: {isWidgetModalVisible ? 'Yes' : 'No'}</Text>
433
469
  <Text>Online: {isOnline ? 'Yes' : 'No'}</Text>
434
470
  </View>
435
- )
471
+ );
436
472
  }
437
473
  ```
438
474
 
439
475
  ### Complete Example with Custom UI
440
476
 
441
477
  ```javascript
442
- import React, { useEffect } from 'react'
443
- import { View, Button, Text, Alert } from 'react-native'
478
+ import React, { useEffect } from 'react';
479
+ import { View, Button, Text, Alert } from 'react-native';
444
480
  import {
445
481
  SessionRecorderProvider,
446
482
  useSessionRecorder,
447
- useSessionRecorderStore
448
- } from '@multiplayer-app/session-recorder-react-native'
483
+ useSessionRecorderStore,
484
+ } from '@multiplayer-app/session-recorder-react-native';
449
485
 
450
486
  function SessionRecorderUI() {
451
- const { startSession, stopSession, openWidgetModal } = useSessionRecorder()
452
- const { sessionState, isWidgetModalVisible } = useSessionRecorderStore((state) => ({
453
- sessionState: state.sessionState,
454
- isWidgetModalVisible: state.isWidgetModalVisible
455
- }))
487
+ const { startSession, stopSession, openWidgetModal } = useSessionRecorder();
488
+ const { sessionState, isWidgetModalVisible } = useSessionRecorderStore(
489
+ (state) => ({
490
+ sessionState: state.sessionState,
491
+ isWidgetModalVisible: state.isWidgetModalVisible,
492
+ })
493
+ );
456
494
 
457
495
  const handleStartRecording = async () => {
458
496
  try {
459
- await startSession()
460
- Alert.alert('Success', 'Session recording started')
497
+ await startSession();
498
+ Alert.alert('Success', 'Session recording started');
461
499
  } catch (error) {
462
- Alert.alert('Error', 'Failed to start recording')
500
+ Alert.alert('Error', 'Failed to start recording');
463
501
  }
464
- }
502
+ };
465
503
 
466
504
  const handleStopRecording = async () => {
467
505
  try {
468
- await stopSession('User manually stopped')
469
- Alert.alert('Success', 'Session recording stopped')
506
+ await stopSession('User manually stopped');
507
+ Alert.alert('Success', 'Session recording stopped');
470
508
  } catch (error) {
471
- Alert.alert('Error', 'Failed to stop recording')
509
+ Alert.alert('Error', 'Failed to stop recording');
472
510
  }
473
- }
511
+ };
474
512
 
475
513
  return (
476
514
  <View style={{ padding: 20 }}>
477
515
  <Text>Session State: {sessionState}</Text>
478
516
  <Text>Widget Modal: {isWidgetModalVisible ? 'Open' : 'Closed'}</Text>
479
517
 
480
- <Button title='Start Recording' onPress={handleStartRecording} />
481
- <Button title='Stop Recording' onPress={handleStopRecording} />
482
- <Button title='Open Widget' onPress={openWidgetModal} />
518
+ <Button title="Start Recording" onPress={handleStartRecording} />
519
+ <Button title="Stop Recording" onPress={handleStopRecording} />
520
+ <Button title="Open Widget" onPress={openWidgetModal} />
483
521
  </View>
484
- )
522
+ );
485
523
  }
486
524
 
487
525
  export default function App() {
@@ -489,7 +527,7 @@ export default function App() {
489
527
  <SessionRecorderProvider>
490
528
  <SessionRecorderUI />
491
529
  </SessionRecorderProvider>
492
- )
530
+ );
493
531
  }
494
532
  ```
495
533
 
@@ -537,7 +575,11 @@ To get the most useful target information in your traces, follow these practices
537
575
  #### 1. Use Accessibility Labels
538
576
 
539
577
  ```jsx
540
- <TouchableOpacity accessibilityLabel='Submit user registration form' accessibilityRole='button' onPress={handleSubmit}>
578
+ <TouchableOpacity
579
+ accessibilityLabel="Submit user registration form"
580
+ accessibilityRole="button"
581
+ onPress={handleSubmit}
582
+ >
541
583
  <Text>Submit</Text>
542
584
  </TouchableOpacity>
543
585
  ```
@@ -545,7 +587,11 @@ To get the most useful target information in your traces, follow these practices
545
587
  #### 2. Add Test IDs for Testing Context
546
588
 
547
589
  ```jsx
548
- <TouchableOpacity testID='registration-submit-btn' accessibilityLabel='Submit registration' onPress={handleSubmit}>
590
+ <TouchableOpacity
591
+ testID="registration-submit-btn"
592
+ accessibilityLabel="Submit registration"
593
+ onPress={handleSubmit}
594
+ >
549
595
  <Text>Submit</Text>
550
596
  </TouchableOpacity>
551
597
  ```
@@ -663,9 +709,12 @@ SessionRecorder.init({
663
709
  // NOTE: if frontend domain doesn't match to backend one, set backend domain to `propagateTraceHeaderCorsUrls` parameter
664
710
  propagateTraceHeaderCorsUrls: [
665
711
  new RegExp('https://your.backend.api.domain', 'i'), // can be regex or string
666
- new RegExp('https://another.backend.api.domain', 'i')
712
+ new RegExp('https://another.backend.api.domain', 'i'),
713
+ ],
714
+ ignoreUrls: [
715
+ /https:\/\/analytics\.example\.com/,
716
+ /https:\/\/crashlytics\.com/,
667
717
  ],
668
- ignoreUrls: [/https:\/\/analytics\.example\.com/, /https:\/\/crashlytics\.com/],
669
718
  captureBody: true,
670
719
  captureHeaders: true,
671
720
  maxCapturingHttpPayloadSize: 100000,
@@ -677,7 +726,7 @@ SessionRecorder.init({
677
726
  maskBodyFieldsList: ['password', 'token', 'secret', 'creditCard'],
678
727
  maskTextInputs: true,
679
728
  maskImages: false,
680
- maskButtons: false
729
+ maskButtons: false,
681
730
  },
682
731
 
683
732
  // Session widget configuration
@@ -685,19 +734,22 @@ SessionRecorder.init({
685
734
  enabled: true,
686
735
  button: {
687
736
  visible: true,
688
- placement: 'bottomRight' // or 'bottomLeft'
689
- }
737
+ placement: 'bottomRight', // or 'bottomLeft'
738
+ },
690
739
  },
691
740
 
692
741
  // Continuous recording
693
- showContinuousRecording: true
694
- })
742
+ showContinuousRecording: true,
743
+ });
695
744
  ```
696
745
 
697
746
  ### Environment-Specific Configuration
698
747
 
699
748
  ```javascript
700
- import { SessionRecorder, LogLevel } from '@multiplayer-app/session-recorder-react-native'
749
+ import {
750
+ SessionRecorder,
751
+ LogLevel,
752
+ } from '@multiplayer-app/session-recorder-react-native';
701
753
 
702
754
  const config = {
703
755
  application: 'my-app',
@@ -708,12 +760,12 @@ const config = {
708
760
  ...(__DEV__ && {
709
761
  logger: {
710
762
  enabled: true,
711
- level: LogLevel.DEBUG
712
- }
713
- })
714
- }
763
+ level: LogLevel.DEBUG,
764
+ },
765
+ }),
766
+ };
715
767
 
716
- SessionRecorder.init(config)
768
+ SessionRecorder.init(config);
717
769
  ```
718
770
 
719
771
  ## Troubleshooting
@@ -768,15 +820,18 @@ SessionRecorder.init(config)
768
820
  Enable debug logging to troubleshoot issues:
769
821
 
770
822
  ```javascript
771
- import { SessionRecorder, LogLevel } from '@multiplayer-app/session-recorder-react-native'
823
+ import {
824
+ SessionRecorder,
825
+ LogLevel,
826
+ } from '@multiplayer-app/session-recorder-react-native';
772
827
 
773
828
  SessionRecorder.init({
774
829
  // ... other config
775
830
  logger: {
776
831
  enabled: true,
777
- level: LogLevel.DEBUG
778
- }
779
- })
832
+ level: LogLevel.DEBUG,
833
+ },
834
+ });
780
835
  ```
781
836
 
782
837
  ## Examples
@@ -814,38 +869,44 @@ Both examples include:
814
869
  ```typescript
815
870
  interface SessionRecorderOptions {
816
871
  // Required
817
- apiKey: string
818
- application: string
819
- version: string
820
- environment: string
872
+ apiKey: string;
873
+ application: string;
874
+ version: string;
875
+ environment: string;
821
876
 
822
877
  // Optional
823
- exporterEndpoint?: string
824
- apiBaseUrl?: string
825
- recordGestures?: boolean
826
- recordNavigation?: boolean
827
- recordScreen?: boolean
828
- sampleTraceRatio?: number
829
- captureBody?: boolean
830
- captureHeaders?: boolean
831
- maxCapturingHttpPayloadSize?: number
832
- masking?: MaskingOptions
833
- ignoreUrls?: Array<string | RegExp>
834
- propagateTraceHeaderCorsUrls?: PropagateTraceHeaderCorsUrls
835
- showContinuousRecording?: boolean
836
- schemifyDocSpanPayload?: boolean
837
- widget?: WidgetConfig
878
+ exporterEndpoint?: string;
879
+ apiBaseUrl?: string;
880
+ recordGestures?: boolean;
881
+ recordNavigation?: boolean;
882
+ recordScreen?: boolean;
883
+ sampleTraceRatio?: number;
884
+ captureBody?: boolean;
885
+ captureHeaders?: boolean;
886
+ maxCapturingHttpPayloadSize?: number;
887
+ masking?: MaskingOptions;
888
+ ignoreUrls?: Array<string | RegExp>;
889
+ propagateTraceHeaderCorsUrls?: PropagateTraceHeaderCorsUrls;
890
+ showContinuousRecording?: boolean;
891
+ schemifyDocSpanPayload?: boolean;
892
+ widget?: WidgetConfig;
838
893
  logger?: {
839
- level?: number
840
- enabled?: boolean
841
- }
894
+ level?: number;
895
+ enabled?: boolean;
896
+ };
842
897
  }
843
898
  ```
844
899
 
845
900
  ## Contributing
846
901
 
847
- Please read our contributing guidelines before submitting pull requests.
902
+ - [Development workflow](CONTRIBUTING.md#development-workflow)
903
+ - [Sending a pull request](CONTRIBUTING.md#sending-a-pull-request)
904
+ - [Code of conduct](CODE_OF_CONDUCT.md)
848
905
 
849
906
  ## License
850
907
 
851
- MIT License - see LICENSE file for details.
908
+ MIT
909
+
910
+ ---
911
+
912
+ Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)