@multiplayer-app/session-recorder-react-native 1.0.1-beta.1 → 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 (469) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +216 -155
  3. package/SessionRecorderNative.podspec +35 -14
  4. package/android/build.gradle +50 -54
  5. package/android/src/main/AndroidManifest.xml +2 -0
  6. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeConfig.kt +52 -0
  7. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeModule.kt +861 -0
  8. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativePackage.kt +33 -0
  9. package/android/src/main/java/com/sessionrecordernative/SessionRecorderNativeSpec.kt +79 -0
  10. package/android/src/main/java/com/sessionrecordernative/model/TargetInfo.kt +9 -0
  11. package/android/src/main/java/com/sessionrecordernative/util/ViewUtils.kt +72 -0
  12. package/ios/GestureTargetFinder.swift +50 -0
  13. package/ios/SessionRecorderNative-Bridging-Header.h +2 -0
  14. package/ios/{GestureRecorderNative.m → SessionRecorderNative.mm} +17 -6
  15. package/ios/SessionRecorderNative.swift +256 -4
  16. package/lib/module/SessionRecorderNativeSpec.js +5 -0
  17. package/lib/module/SessionRecorderNativeSpec.js.map +1 -0
  18. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +23 -0
  19. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +1 -0
  20. package/lib/module/components/ScreenRecorderView/index.js +4 -0
  21. package/lib/module/components/ScreenRecorderView/index.js.map +1 -0
  22. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +64 -0
  23. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +1 -0
  24. package/lib/module/components/SessionRecorderWidget/FinalPopover.js +74 -0
  25. package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +1 -0
  26. package/lib/module/components/SessionRecorderWidget/FloatingButton.js +191 -0
  27. package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +1 -0
  28. package/lib/module/components/SessionRecorderWidget/InitialPopover.js +138 -0
  29. package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +1 -0
  30. package/lib/module/components/SessionRecorderWidget/ModalContainer.js +177 -0
  31. package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +1 -0
  32. package/lib/module/components/SessionRecorderWidget/ModalHeader.js +27 -0
  33. package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +1 -0
  34. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +133 -0
  35. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -0
  36. package/lib/module/components/SessionRecorderWidget/icons.js +93 -0
  37. package/lib/module/components/SessionRecorderWidget/icons.js.map +1 -0
  38. package/lib/module/components/SessionRecorderWidget/index.js +5 -0
  39. package/lib/module/components/SessionRecorderWidget/index.js.map +1 -0
  40. package/lib/module/components/SessionRecorderWidget/styles.js +173 -0
  41. package/lib/module/components/SessionRecorderWidget/styles.js.map +1 -0
  42. package/lib/module/components/index.js +5 -0
  43. package/lib/module/components/index.js.map +1 -0
  44. package/lib/module/config/constants.js +42 -0
  45. package/lib/module/config/constants.js.map +1 -0
  46. package/lib/module/config/defaults.js +81 -0
  47. package/lib/module/config/defaults.js.map +1 -0
  48. package/lib/module/config/index.js +9 -0
  49. package/lib/module/config/index.js.map +1 -0
  50. package/lib/module/config/masking.js +35 -0
  51. package/lib/module/config/masking.js.map +1 -0
  52. package/lib/module/config/session-recorder.js +44 -0
  53. package/lib/module/config/session-recorder.js.map +1 -0
  54. package/lib/module/config/validators.js +28 -0
  55. package/lib/module/config/validators.js.map +1 -0
  56. package/lib/module/config/widget.js +35 -0
  57. package/lib/module/config/widget.js.map +1 -0
  58. package/lib/module/context/SessionRecorderContext.js +93 -0
  59. package/lib/module/context/SessionRecorderContext.js.map +1 -0
  60. package/lib/module/context/SessionRecorderStore.js +12 -0
  61. package/lib/module/context/SessionRecorderStore.js.map +1 -0
  62. package/lib/module/context/useSessionRecorderStore.js +20 -0
  63. package/lib/module/context/useSessionRecorderStore.js.map +1 -0
  64. package/lib/module/context/useStoreSelector.js +27 -0
  65. package/lib/module/context/useStoreSelector.js.map +1 -0
  66. package/lib/module/index.js +16 -0
  67. package/lib/module/index.js.map +1 -0
  68. package/lib/module/native/SessionRecorderNative.js +79 -0
  69. package/lib/module/native/SessionRecorderNative.js.map +1 -0
  70. package/lib/module/native/index.js +4 -0
  71. package/lib/module/native/index.js.map +1 -0
  72. package/lib/module/otel/helpers.js +218 -0
  73. package/lib/module/otel/helpers.js.map +1 -0
  74. package/lib/module/otel/index.js +95 -0
  75. package/lib/module/otel/index.js.map +1 -0
  76. package/lib/module/otel/instrumentations/index.js +102 -0
  77. package/lib/module/otel/instrumentations/index.js.map +1 -0
  78. package/lib/module/package.json +1 -0
  79. package/lib/module/patch/index.js +4 -0
  80. package/lib/module/patch/index.js.map +1 -0
  81. package/lib/module/patch/xhr.js +116 -0
  82. package/lib/module/patch/xhr.js.map +1 -0
  83. package/lib/module/recorder/eventExporter.js +130 -0
  84. package/lib/module/recorder/eventExporter.js.map +1 -0
  85. package/lib/module/recorder/gestureRecorder.js +641 -0
  86. package/lib/module/recorder/gestureRecorder.js.map +1 -0
  87. package/lib/module/recorder/index.js +168 -0
  88. package/lib/module/recorder/index.js.map +1 -0
  89. package/lib/module/recorder/navigationTracker.js +228 -0
  90. package/lib/module/recorder/navigationTracker.js.map +1 -0
  91. package/lib/module/recorder/screenRecorder.js +495 -0
  92. package/lib/module/recorder/screenRecorder.js.map +1 -0
  93. package/lib/module/services/api.service.js +149 -0
  94. package/lib/module/services/api.service.js.map +1 -0
  95. package/lib/module/services/network.service.js +178 -0
  96. package/lib/module/services/network.service.js.map +1 -0
  97. package/lib/module/services/screenMaskingService.js +107 -0
  98. package/lib/module/services/screenMaskingService.js.map +1 -0
  99. package/lib/module/services/storage.service.js +179 -0
  100. package/lib/module/services/storage.service.js.map +1 -0
  101. package/lib/module/session-recorder.js +541 -0
  102. package/lib/module/session-recorder.js.map +1 -0
  103. package/lib/module/types/configs.js +4 -0
  104. package/lib/module/types/configs.js.map +1 -0
  105. package/lib/module/types/expo-constants.d.js +2 -0
  106. package/lib/module/types/expo-constants.d.js.map +1 -0
  107. package/lib/module/types/index.js +11 -0
  108. package/lib/module/types/index.js.map +1 -0
  109. package/lib/module/types/session-recorder.js +68 -0
  110. package/lib/module/types/session-recorder.js.map +1 -0
  111. package/lib/module/types/session.js +9 -0
  112. package/lib/module/types/session.js.map +1 -0
  113. package/lib/module/utils/app-metadata.js +28 -0
  114. package/lib/module/utils/app-metadata.js.map +1 -0
  115. package/lib/module/utils/constants.optional.expo.js +6 -0
  116. package/lib/module/utils/constants.optional.expo.js.map +1 -0
  117. package/lib/module/utils/constants.optional.js +8 -0
  118. package/lib/module/utils/constants.optional.js.map +1 -0
  119. package/lib/module/utils/createStore.js +27 -0
  120. package/lib/module/utils/createStore.js.map +1 -0
  121. package/lib/module/utils/index.js +11 -0
  122. package/lib/module/utils/index.js.map +1 -0
  123. package/lib/module/utils/logger.js +185 -0
  124. package/lib/module/utils/logger.js.map +1 -0
  125. package/lib/module/utils/platform.js +340 -0
  126. package/lib/module/utils/platform.js.map +1 -0
  127. package/lib/module/utils/request-utils.js +58 -0
  128. package/lib/module/utils/request-utils.js.map +1 -0
  129. package/lib/module/utils/rrweb-events.js +276 -0
  130. package/lib/module/utils/rrweb-events.js.map +1 -0
  131. package/lib/module/utils/session.js +21 -0
  132. package/lib/module/utils/session.js.map +1 -0
  133. package/lib/module/utils/shallowEqual.js +17 -0
  134. package/lib/module/utils/shallowEqual.js.map +1 -0
  135. package/lib/module/utils/time.js +17 -0
  136. package/lib/module/utils/time.js.map +1 -0
  137. package/lib/module/utils/type-utils.js +69 -0
  138. package/lib/module/utils/type-utils.js.map +1 -0
  139. package/lib/module/version.js +4 -0
  140. package/lib/module/version.js.map +1 -0
  141. package/lib/typescript/package.json +1 -0
  142. package/{dist/native/SessionRecorderNative.d.ts → lib/typescript/src/SessionRecorderNativeSpec.d.ts} +23 -15
  143. package/lib/typescript/src/SessionRecorderNativeSpec.d.ts.map +1 -0
  144. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +6 -0
  145. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +1 -0
  146. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +2 -0
  147. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +1 -0
  148. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ErrorBanner.d.ts +1 -0
  149. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +1 -0
  150. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FinalPopover.d.ts +2 -1
  151. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +1 -0
  152. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FloatingButton.d.ts +1 -0
  153. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +1 -0
  154. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/InitialPopover.d.ts +2 -1
  155. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +1 -0
  156. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalContainer.d.ts +1 -0
  157. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +1 -0
  158. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalHeader.d.ts +1 -0
  159. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +1 -0
  160. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +1 -0
  161. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +1 -0
  162. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/icons.d.ts +1 -0
  163. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +1 -0
  164. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +3 -0
  165. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +1 -0
  166. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/styles.d.ts +4 -3
  167. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +1 -0
  168. package/lib/typescript/src/components/index.d.ts +3 -0
  169. package/lib/typescript/src/components/index.d.ts.map +1 -0
  170. package/{dist → lib/typescript/src}/config/constants.d.ts +1 -0
  171. package/lib/typescript/src/config/constants.d.ts.map +1 -0
  172. package/{dist → lib/typescript/src}/config/defaults.d.ts +2 -1
  173. package/lib/typescript/src/config/defaults.d.ts.map +1 -0
  174. package/{dist → lib/typescript/src}/config/index.d.ts +1 -0
  175. package/lib/typescript/src/config/index.d.ts.map +1 -0
  176. package/lib/typescript/src/config/masking.d.ts +3 -0
  177. package/lib/typescript/src/config/masking.d.ts.map +1 -0
  178. package/lib/typescript/src/config/session-recorder.d.ts +3 -0
  179. package/lib/typescript/src/config/session-recorder.d.ts.map +1 -0
  180. package/{dist → lib/typescript/src}/config/validators.d.ts +1 -0
  181. package/lib/typescript/src/config/validators.d.ts.map +1 -0
  182. package/{dist → lib/typescript/src}/config/widget.d.ts +2 -1
  183. package/lib/typescript/src/config/widget.d.ts.map +1 -0
  184. package/{dist → lib/typescript/src}/context/SessionRecorderContext.d.ts +3 -2
  185. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +1 -0
  186. package/{dist → lib/typescript/src}/context/SessionRecorderStore.d.ts +2 -1
  187. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +1 -0
  188. package/{dist → lib/typescript/src}/context/useSessionRecorderStore.d.ts +4 -3
  189. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +1 -0
  190. package/{dist → lib/typescript/src}/context/useStoreSelector.d.ts +2 -1
  191. package/lib/typescript/src/context/useStoreSelector.d.ts.map +1 -0
  192. package/{dist → lib/typescript/src}/index.d.ts +2 -0
  193. package/lib/typescript/src/index.d.ts.map +1 -0
  194. package/lib/typescript/src/native/SessionRecorderNative.d.ts +27 -0
  195. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +1 -0
  196. package/lib/typescript/src/native/index.d.ts +2 -0
  197. package/lib/typescript/src/native/index.d.ts.map +1 -0
  198. package/{dist → lib/typescript/src}/otel/helpers.d.ts +3 -2
  199. package/lib/typescript/src/otel/helpers.d.ts.map +1 -0
  200. package/{dist → lib/typescript/src}/otel/index.d.ts +2 -2
  201. package/lib/typescript/src/otel/index.d.ts.map +1 -0
  202. package/{dist → lib/typescript/src}/otel/instrumentations/index.d.ts +2 -1
  203. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +1 -0
  204. package/lib/typescript/src/patch/index.d.ts +2 -0
  205. package/lib/typescript/src/patch/index.d.ts.map +1 -0
  206. package/{dist → lib/typescript/src}/patch/xhr.d.ts +1 -0
  207. package/lib/typescript/src/patch/xhr.d.ts.map +1 -0
  208. package/{dist → lib/typescript/src}/recorder/eventExporter.d.ts +2 -1
  209. package/lib/typescript/src/recorder/eventExporter.d.ts.map +1 -0
  210. package/{dist → lib/typescript/src}/recorder/gestureRecorder.d.ts +3 -2
  211. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +1 -0
  212. package/{dist → lib/typescript/src}/recorder/index.d.ts +3 -2
  213. package/lib/typescript/src/recorder/index.d.ts.map +1 -0
  214. package/{dist → lib/typescript/src}/recorder/navigationTracker.d.ts +2 -1
  215. package/lib/typescript/src/recorder/navigationTracker.d.ts.map +1 -0
  216. package/{dist → lib/typescript/src}/recorder/screenRecorder.d.ts +4 -4
  217. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -0
  218. package/{dist → lib/typescript/src}/services/api.service.d.ts +2 -1
  219. package/lib/typescript/src/services/api.service.d.ts.map +1 -0
  220. package/{dist → lib/typescript/src}/services/network.service.d.ts +1 -0
  221. package/lib/typescript/src/services/network.service.d.ts.map +1 -0
  222. package/{dist → lib/typescript/src}/services/screenMaskingService.d.ts +2 -1
  223. package/lib/typescript/src/services/screenMaskingService.d.ts.map +1 -0
  224. package/{dist → lib/typescript/src}/services/storage.service.d.ts +2 -1
  225. package/lib/typescript/src/services/storage.service.d.ts.map +1 -0
  226. package/{dist → lib/typescript/src}/session-recorder.d.ts +3 -2
  227. package/lib/typescript/src/session-recorder.d.ts.map +1 -0
  228. package/{dist → lib/typescript/src}/types/configs.d.ts +3 -2
  229. package/lib/typescript/src/types/configs.d.ts.map +1 -0
  230. package/{dist → lib/typescript/src}/types/index.d.ts +1 -0
  231. package/lib/typescript/src/types/index.d.ts.map +1 -0
  232. package/{dist → lib/typescript/src}/types/session-recorder.d.ts +7 -6
  233. package/lib/typescript/src/types/session-recorder.d.ts.map +1 -0
  234. package/{dist → lib/typescript/src}/types/session.d.ts +1 -0
  235. package/lib/typescript/src/types/session.d.ts.map +1 -0
  236. package/{dist → lib/typescript/src}/utils/app-metadata.d.ts +1 -0
  237. package/lib/typescript/src/utils/app-metadata.d.ts.map +1 -0
  238. package/{dist → lib/typescript/src}/utils/constants.optional.d.ts +1 -0
  239. package/lib/typescript/src/utils/constants.optional.d.ts.map +1 -0
  240. package/{dist → lib/typescript/src}/utils/constants.optional.expo.d.ts +1 -0
  241. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +1 -0
  242. package/{dist → lib/typescript/src}/utils/createStore.d.ts +1 -0
  243. package/lib/typescript/src/utils/createStore.d.ts.map +1 -0
  244. package/lib/typescript/src/utils/index.d.ts +8 -0
  245. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  246. package/{dist → lib/typescript/src}/utils/logger.d.ts +2 -1
  247. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  248. package/{dist → lib/typescript/src}/utils/platform.d.ts +2 -1
  249. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  250. package/{dist → lib/typescript/src}/utils/request-utils.d.ts +1 -0
  251. package/lib/typescript/src/utils/request-utils.d.ts.map +1 -0
  252. package/{dist → lib/typescript/src}/utils/rrweb-events.d.ts +2 -1
  253. package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -0
  254. package/{dist → lib/typescript/src}/utils/session.d.ts +1 -0
  255. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  256. package/{dist → lib/typescript/src}/utils/shallowEqual.d.ts +1 -0
  257. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  258. package/{dist → lib/typescript/src}/utils/time.d.ts +1 -0
  259. package/lib/typescript/src/utils/time.d.ts.map +1 -0
  260. package/{dist → lib/typescript/src}/utils/type-utils.d.ts +1 -0
  261. package/lib/typescript/src/utils/type-utils.d.ts.map +1 -0
  262. package/lib/typescript/src/version.d.ts +2 -0
  263. package/lib/typescript/src/version.d.ts.map +1 -0
  264. package/package.json +154 -37
  265. package/react-native.config.js +14 -0
  266. package/src/SessionRecorderNativeSpec.ts +52 -0
  267. package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +20 -0
  268. package/src/components/ScreenRecorderView/index.ts +1 -0
  269. package/src/components/SessionRecorderWidget/ErrorBanner.tsx +58 -0
  270. package/src/components/SessionRecorderWidget/FinalPopover.tsx +96 -0
  271. package/src/components/SessionRecorderWidget/FloatingButton.tsx +176 -0
  272. package/src/components/SessionRecorderWidget/InitialPopover.tsx +167 -0
  273. package/src/components/SessionRecorderWidget/ModalContainer.tsx +189 -0
  274. package/src/components/SessionRecorderWidget/ModalHeader.tsx +26 -0
  275. package/src/components/SessionRecorderWidget/SessionRecorderWidget.tsx +150 -0
  276. package/src/components/SessionRecorderWidget/icons.tsx +80 -0
  277. package/src/components/SessionRecorderWidget/index.ts +3 -0
  278. package/src/components/SessionRecorderWidget/styles.ts +168 -0
  279. package/src/config/constants.ts +67 -0
  280. package/src/config/defaults.ts +105 -0
  281. package/src/config/index.ts +6 -0
  282. package/src/config/masking.ts +60 -0
  283. package/src/config/session-recorder.ts +87 -0
  284. package/src/config/validators.ts +54 -0
  285. package/src/config/widget.ts +47 -0
  286. package/src/context/SessionRecorderContext.tsx +138 -0
  287. package/src/context/SessionRecorderStore.ts +22 -0
  288. package/src/context/useSessionRecorderStore.ts +34 -0
  289. package/src/context/useStoreSelector.ts +36 -0
  290. package/src/index.ts +13 -0
  291. package/src/native/SessionRecorderNative.ts +120 -0
  292. package/src/native/index.ts +5 -0
  293. package/src/otel/helpers.ts +290 -0
  294. package/src/otel/index.ts +132 -0
  295. package/src/otel/instrumentations/index.ts +118 -0
  296. package/src/patch/xhr.ts +148 -0
  297. package/src/recorder/eventExporter.ts +150 -0
  298. package/src/recorder/gestureRecorder.ts +828 -0
  299. package/src/recorder/index.ts +203 -0
  300. package/src/recorder/navigationTracker.ts +268 -0
  301. package/src/recorder/screenRecorder.ts +600 -0
  302. package/src/services/api.service.ts +216 -0
  303. package/src/services/network.service.ts +191 -0
  304. package/src/services/screenMaskingService.ts +153 -0
  305. package/src/services/storage.service.ts +248 -0
  306. package/src/session-recorder.ts +647 -0
  307. package/src/types/configs.ts +118 -0
  308. package/src/types/expo-constants.d.ts +7 -0
  309. package/src/types/index.ts +27 -0
  310. package/src/types/session-recorder.ts +381 -0
  311. package/src/types/session.ts +65 -0
  312. package/src/utils/app-metadata.ts +31 -0
  313. package/src/utils/constants.optional.expo.ts +5 -0
  314. package/src/utils/constants.optional.ts +18 -0
  315. package/src/utils/createStore.ts +32 -0
  316. package/{dist/utils/index.d.ts → src/utils/index.ts} +1 -0
  317. package/src/utils/logger.ts +245 -0
  318. package/src/utils/platform.ts +401 -0
  319. package/src/utils/request-utils.ts +61 -0
  320. package/src/utils/rrweb-events.ts +329 -0
  321. package/src/utils/session.ts +22 -0
  322. package/src/utils/shallowEqual.ts +20 -0
  323. package/src/utils/time.ts +20 -0
  324. package/src/utils/type-utils.ts +75 -0
  325. package/src/version.ts +1 -0
  326. package/copy-react-native-dist.sh +0 -56
  327. package/dist/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -5
  328. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +0 -1
  329. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  330. package/dist/components/ScreenRecorderView/index.d.ts +0 -1
  331. package/dist/components/ScreenRecorderView/index.js +0 -1
  332. package/dist/components/ScreenRecorderView/index.js.map +0 -1
  333. package/dist/components/SessionRecorderWidget/ErrorBanner.js +0 -1
  334. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  335. package/dist/components/SessionRecorderWidget/FinalPopover.js +0 -1
  336. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  337. package/dist/components/SessionRecorderWidget/FloatingButton.js +0 -1
  338. package/dist/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  339. package/dist/components/SessionRecorderWidget/InitialPopover.js +0 -1
  340. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  341. package/dist/components/SessionRecorderWidget/ModalContainer.js +0 -1
  342. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  343. package/dist/components/SessionRecorderWidget/ModalHeader.js +0 -1
  344. package/dist/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  345. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -1
  346. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  347. package/dist/components/SessionRecorderWidget/icons.js +0 -1
  348. package/dist/components/SessionRecorderWidget/icons.js.map +0 -1
  349. package/dist/components/SessionRecorderWidget/index.d.ts +0 -2
  350. package/dist/components/SessionRecorderWidget/index.js +0 -1
  351. package/dist/components/SessionRecorderWidget/index.js.map +0 -1
  352. package/dist/components/SessionRecorderWidget/styles.js +0 -1
  353. package/dist/components/SessionRecorderWidget/styles.js.map +0 -1
  354. package/dist/components/index.js +0 -1
  355. package/dist/components/index.js.map +0 -1
  356. package/dist/config/constants.js +0 -1
  357. package/dist/config/constants.js.map +0 -1
  358. package/dist/config/defaults.js +0 -1
  359. package/dist/config/defaults.js.map +0 -1
  360. package/dist/config/index.js +0 -1
  361. package/dist/config/index.js.map +0 -1
  362. package/dist/config/masking.d.ts +0 -2
  363. package/dist/config/masking.js +0 -1
  364. package/dist/config/masking.js.map +0 -1
  365. package/dist/config/session-recorder.d.ts +0 -2
  366. package/dist/config/session-recorder.js +0 -1
  367. package/dist/config/session-recorder.js.map +0 -1
  368. package/dist/config/validators.js +0 -1
  369. package/dist/config/validators.js.map +0 -1
  370. package/dist/config/widget.js +0 -1
  371. package/dist/config/widget.js.map +0 -1
  372. package/dist/context/SessionRecorderContext.js +0 -1
  373. package/dist/context/SessionRecorderContext.js.map +0 -1
  374. package/dist/context/SessionRecorderStore.js +0 -1
  375. package/dist/context/SessionRecorderStore.js.map +0 -1
  376. package/dist/context/useSessionRecorderStore.js +0 -1
  377. package/dist/context/useSessionRecorderStore.js.map +0 -1
  378. package/dist/context/useStoreSelector.js +0 -1
  379. package/dist/context/useStoreSelector.js.map +0 -1
  380. package/dist/index.js +0 -1
  381. package/dist/index.js.map +0 -1
  382. package/dist/native/GestureRecorderNative.d.ts +0 -57
  383. package/dist/native/GestureRecorderNative.js +0 -1
  384. package/dist/native/GestureRecorderNative.js.map +0 -1
  385. package/dist/native/GestureRecorderNativeTurboSpec.d.ts +0 -31
  386. package/dist/native/GestureRecorderNativeTurboSpec.js +0 -1
  387. package/dist/native/GestureRecorderNativeTurboSpec.js.map +0 -1
  388. package/dist/native/SessionRecorderNative.js +0 -1
  389. package/dist/native/SessionRecorderNative.js.map +0 -1
  390. package/dist/native/SessionRecorderNativeTurboSpec.d.ts +0 -17
  391. package/dist/native/SessionRecorderNativeTurboSpec.js +0 -1
  392. package/dist/native/SessionRecorderNativeTurboSpec.js.map +0 -1
  393. package/dist/native/index.d.ts +0 -2
  394. package/dist/native/index.js +0 -1
  395. package/dist/native/index.js.map +0 -1
  396. package/dist/otel/helpers.js +0 -1
  397. package/dist/otel/helpers.js.map +0 -1
  398. package/dist/otel/index.js +0 -1
  399. package/dist/otel/index.js.map +0 -1
  400. package/dist/otel/instrumentations/index.js +0 -1
  401. package/dist/otel/instrumentations/index.js.map +0 -1
  402. package/dist/patch/index.js +0 -1
  403. package/dist/patch/index.js.map +0 -1
  404. package/dist/patch/xhr.js +0 -1
  405. package/dist/patch/xhr.js.map +0 -1
  406. package/dist/recorder/eventExporter.js +0 -1
  407. package/dist/recorder/eventExporter.js.map +0 -1
  408. package/dist/recorder/gestureRecorder.js +0 -1
  409. package/dist/recorder/gestureRecorder.js.map +0 -1
  410. package/dist/recorder/index.js +0 -1
  411. package/dist/recorder/index.js.map +0 -1
  412. package/dist/recorder/navigationTracker.js +0 -1
  413. package/dist/recorder/navigationTracker.js.map +0 -1
  414. package/dist/recorder/screenRecorder.js +0 -1
  415. package/dist/recorder/screenRecorder.js.map +0 -1
  416. package/dist/services/api.service.js +0 -1
  417. package/dist/services/api.service.js.map +0 -1
  418. package/dist/services/network.service.js +0 -1
  419. package/dist/services/network.service.js.map +0 -1
  420. package/dist/services/screenMaskingService.js +0 -1
  421. package/dist/services/screenMaskingService.js.map +0 -1
  422. package/dist/services/storage.service.js +0 -1
  423. package/dist/services/storage.service.js.map +0 -1
  424. package/dist/session-recorder.js +0 -1
  425. package/dist/session-recorder.js.map +0 -1
  426. package/dist/types/configs.js +0 -1
  427. package/dist/types/configs.js.map +0 -1
  428. package/dist/types/index.js +0 -1
  429. package/dist/types/index.js.map +0 -1
  430. package/dist/types/session-recorder.js +0 -1
  431. package/dist/types/session-recorder.js.map +0 -1
  432. package/dist/types/session.js +0 -1
  433. package/dist/types/session.js.map +0 -1
  434. package/dist/utils/app-metadata.js +0 -1
  435. package/dist/utils/app-metadata.js.map +0 -1
  436. package/dist/utils/constants.optional.expo.js +0 -1
  437. package/dist/utils/constants.optional.expo.js.map +0 -1
  438. package/dist/utils/constants.optional.js +0 -1
  439. package/dist/utils/constants.optional.js.map +0 -1
  440. package/dist/utils/createStore.js +0 -1
  441. package/dist/utils/createStore.js.map +0 -1
  442. package/dist/utils/index.js +0 -1
  443. package/dist/utils/index.js.map +0 -1
  444. package/dist/utils/logger.js +0 -1
  445. package/dist/utils/logger.js.map +0 -1
  446. package/dist/utils/platform.js +0 -1
  447. package/dist/utils/platform.js.map +0 -1
  448. package/dist/utils/request-utils.js +0 -1
  449. package/dist/utils/request-utils.js.map +0 -1
  450. package/dist/utils/rrweb-events.js +0 -1
  451. package/dist/utils/rrweb-events.js.map +0 -1
  452. package/dist/utils/session.js +0 -1
  453. package/dist/utils/session.js.map +0 -1
  454. package/dist/utils/shallowEqual.js +0 -1
  455. package/dist/utils/shallowEqual.js.map +0 -1
  456. package/dist/utils/time.js +0 -1
  457. package/dist/utils/time.js.map +0 -1
  458. package/dist/utils/type-utils.js +0 -1
  459. package/dist/utils/type-utils.js.map +0 -1
  460. package/dist/version.d.ts +0 -1
  461. package/dist/version.js +0 -1
  462. package/dist/version.js.map +0 -1
  463. package/docs/AUTO_METADATA_DETECTION.md +0 -108
  464. package/ios/GestureRecorderNative.swift +0 -316
  465. package/ios/SessionRecorderNative.m +0 -17
  466. package/ios/SessionRecorderNative.podspec +0 -26
  467. package/turbo.json +0 -41
  468. /package/{dist/components/index.d.ts → src/components/index.ts} +0 -0
  469. /package/{dist/patch/index.d.ts → src/patch/index.ts} +0 -0
@@ -0,0 +1,87 @@
1
+ import {
2
+ LogLevel,
3
+ type SessionRecorderConfigs,
4
+ type SessionRecorderOptions,
5
+ } from '../types';
6
+
7
+ import { BASE_CONFIG } from './defaults';
8
+ import { getMaskingConfig } from './masking';
9
+ import {
10
+ isValidString,
11
+ isValidNumber,
12
+ isValidBoolean,
13
+ isValidArray,
14
+ } from './validators';
15
+ import { getWidgetConfig } from './widget';
16
+
17
+ const getLoggerConfig = (config: any) => {
18
+ if (!config || typeof config !== 'object') {
19
+ return BASE_CONFIG.logger;
20
+ }
21
+ return {
22
+ level: isValidNumber(config.level, LogLevel.INFO),
23
+ enabled: isValidBoolean(config.enabled, false),
24
+ };
25
+ };
26
+
27
+ export const getSessionRecorderConfig = (
28
+ c: SessionRecorderOptions
29
+ ): SessionRecorderConfigs => {
30
+ if (!c) {
31
+ return BASE_CONFIG;
32
+ }
33
+
34
+ return {
35
+ apiKey: isValidString(c.apiKey, BASE_CONFIG.apiKey),
36
+ version: isValidString(c.version, BASE_CONFIG.version),
37
+ application: isValidString(c.application, BASE_CONFIG.application),
38
+ environment: isValidString(c.environment, BASE_CONFIG.environment),
39
+
40
+ exporterEndpoint: isValidString(
41
+ c.exporterEndpoint,
42
+ BASE_CONFIG.exporterEndpoint
43
+ ),
44
+ apiBaseUrl: isValidString(c.apiBaseUrl, BASE_CONFIG.apiBaseUrl),
45
+
46
+ showContinuousRecording: isValidBoolean(
47
+ c.showContinuousRecording,
48
+ BASE_CONFIG.showContinuousRecording
49
+ ),
50
+ ignoreUrls: isValidArray(c.ignoreUrls, BASE_CONFIG.ignoreUrls),
51
+ sampleTraceRatio: isValidNumber(
52
+ c.sampleTraceRatio,
53
+ BASE_CONFIG.sampleTraceRatio
54
+ ),
55
+ propagateTraceHeaderCorsUrls:
56
+ c.propagateTraceHeaderCorsUrls ||
57
+ BASE_CONFIG.propagateTraceHeaderCorsUrls,
58
+ schemifyDocSpanPayload: isValidBoolean(
59
+ c.schemifyDocSpanPayload,
60
+ BASE_CONFIG.schemifyDocSpanPayload
61
+ ),
62
+ maxCapturingHttpPayloadSize: isValidNumber(
63
+ c.maxCapturingHttpPayloadSize,
64
+ BASE_CONFIG.maxCapturingHttpPayloadSize
65
+ ),
66
+
67
+ captureBody: isValidBoolean(c.captureBody, BASE_CONFIG.captureBody),
68
+ captureHeaders: isValidBoolean(
69
+ c.captureHeaders,
70
+ BASE_CONFIG.captureHeaders
71
+ ),
72
+
73
+ recordScreen: isValidBoolean(c.recordScreen, BASE_CONFIG.recordScreen),
74
+ recordGestures: isValidBoolean(
75
+ c.recordGestures,
76
+ BASE_CONFIG.recordGestures
77
+ ),
78
+ recordNavigation: isValidBoolean(
79
+ c.recordNavigation,
80
+ BASE_CONFIG.recordNavigation
81
+ ),
82
+
83
+ masking: getMaskingConfig(c.masking),
84
+ widget: getWidgetConfig(c.widget),
85
+ logger: getLoggerConfig(c.logger),
86
+ };
87
+ };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Validation helper functions for configuration objects
3
+ */
4
+
5
+ export const isValidStringOrRegExp = (
6
+ value: string | RegExp | undefined,
7
+ defaultValue: string | RegExp
8
+ ) => {
9
+ return typeof value === 'string' || value instanceof RegExp
10
+ ? value
11
+ : defaultValue;
12
+ };
13
+
14
+ export const isValidString = <T extends string>(
15
+ value: string | undefined | T,
16
+ defaultValue: string
17
+ ) => {
18
+ return typeof value === 'string' ? value.trim() : defaultValue;
19
+ };
20
+
21
+ export const isValidNumber = (
22
+ value: number | undefined,
23
+ defaultValue: number
24
+ ) => {
25
+ return typeof value === 'number' ? value : defaultValue;
26
+ };
27
+
28
+ export const isValidBoolean = (
29
+ value: boolean | undefined,
30
+ defaultValue: boolean
31
+ ) => {
32
+ return typeof value === 'boolean' ? value : defaultValue;
33
+ };
34
+
35
+ export const isValidArray = <T>(
36
+ value: ReadonlyArray<T> | undefined,
37
+ defaultValue: ReadonlyArray<T>
38
+ ): T[] => {
39
+ return Array.isArray(value)
40
+ ? ([...value] as T[])
41
+ : ([...defaultValue] as T[]);
42
+ };
43
+
44
+ export const isValidEnum = <T>(
45
+ value: any | T,
46
+ defaultValue: T,
47
+ enumValues: T[]
48
+ ): T => {
49
+ return enumValues.includes(value as T) ? (value as T) : defaultValue;
50
+ };
51
+
52
+ export const isValidFunction = (value: any, defaultValue: any) => {
53
+ return typeof value === 'function' ? value : defaultValue;
54
+ };
@@ -0,0 +1,47 @@
1
+ import { type SessionRecorderOptions, WidgetButtonPlacement } from '../types';
2
+ import { BASE_CONFIG } from './defaults';
3
+ import { isValidBoolean, isValidEnum, isValidString } from './validators';
4
+
5
+ export const getWidgetConfig = (config: SessionRecorderOptions['widget']) => {
6
+ const textOverrides = getTextOverridesConfig(
7
+ config?.textOverrides,
8
+ BASE_CONFIG.widget.textOverrides
9
+ );
10
+
11
+ const def = {
12
+ enabled: true,
13
+ button: { visible: true, placement: WidgetButtonPlacement.bottomRight },
14
+ textOverrides,
15
+ };
16
+
17
+ const placementCandidate = config?.button?.placement || def.button.placement;
18
+
19
+ return {
20
+ textOverrides,
21
+ enabled: isValidBoolean(config && config.enabled, def.enabled),
22
+ button: {
23
+ visible: isValidBoolean(
24
+ config && config.button && config.button.visible,
25
+ def.button.visible
26
+ ),
27
+ placement: isValidEnum<WidgetButtonPlacement>(
28
+ placementCandidate,
29
+ def.button.placement,
30
+ Object.values(WidgetButtonPlacement)
31
+ ),
32
+ },
33
+ };
34
+ };
35
+
36
+ const getTextOverridesConfig = (config: any, defaultConfig: any) => {
37
+ if (!config || typeof config !== 'object') {
38
+ return defaultConfig;
39
+ }
40
+ return Object.keys(defaultConfig).reduce(
41
+ (acc, key) => {
42
+ acc[key] = isValidString(config[key], defaultConfig[key]);
43
+ return acc;
44
+ },
45
+ {} as Record<string, unknown>
46
+ );
47
+ };
@@ -0,0 +1,138 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useEffect,
5
+ useCallback,
6
+ type PropsWithChildren,
7
+ } from 'react';
8
+ import { type SessionRecorderOptions, SessionState } from '../types';
9
+ import sessionRecorder from '../session-recorder';
10
+ import { ScreenRecorderView } from '../components/ScreenRecorderView';
11
+ import SessionRecorderWidget from '../components/SessionRecorderWidget';
12
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
13
+ import {
14
+ sessionRecorderStore,
15
+ type SessionRecorderState,
16
+ } from './SessionRecorderStore';
17
+ import { useStoreSelector } from './useStoreSelector';
18
+
19
+ interface SessionRecorderContextType {
20
+ instance: typeof sessionRecorder;
21
+ openWidgetModal: () => void;
22
+ closeWidgetModal: () => void;
23
+ startSession: (sessionType?: SessionType) => Promise<void>;
24
+ stopSession: (comment?: string) => Promise<void>;
25
+ pauseSession: () => Promise<void>;
26
+ resumeSession: () => Promise<void>;
27
+ cancelSession: () => Promise<void>;
28
+ saveSession: () => Promise<void>;
29
+ }
30
+
31
+ const SessionRecorderContext = createContext<SessionRecorderContextType | null>(
32
+ null
33
+ );
34
+
35
+ export interface SessionRecorderProviderProps extends PropsWithChildren {
36
+ options?: SessionRecorderOptions;
37
+ }
38
+
39
+ export const SessionRecorderProvider: React.FC<
40
+ SessionRecorderProviderProps
41
+ > = ({ children, options }) => {
42
+ const isInitialized = useStoreSelector<SessionRecorderState, boolean>(
43
+ sessionRecorderStore,
44
+ (s) => s.isInitialized
45
+ );
46
+
47
+ useEffect(() => {
48
+ if (options) {
49
+ sessionRecorder.init(options);
50
+ }
51
+ sessionRecorderStore.setState({
52
+ isInitialized: sessionRecorder.isInitialized,
53
+ });
54
+ }, []);
55
+
56
+ useEffect(() => {
57
+ sessionRecorderStore.setState({
58
+ sessionState: sessionRecorder.sessionState,
59
+ sessionType: sessionRecorder.sessionType,
60
+ });
61
+ const onStateChange = (
62
+ sessionState: SessionState,
63
+ sessionType: SessionType
64
+ ) => {
65
+ sessionRecorderStore.setState({ sessionState, sessionType });
66
+ };
67
+ sessionRecorder.on('state-change', onStateChange);
68
+ return () => {
69
+ sessionRecorder.off('state-change', onStateChange);
70
+ };
71
+ }, []);
72
+
73
+ const startSession = useCallback(
74
+ (sessionType: SessionType = SessionType.PLAIN) => {
75
+ return sessionRecorder.start(sessionType);
76
+ },
77
+ []
78
+ );
79
+
80
+ const stopSession = useCallback((comment?: string) => {
81
+ return sessionRecorder.stop(comment);
82
+ }, []);
83
+
84
+ const pauseSession = useCallback(() => {
85
+ return sessionRecorder.pause();
86
+ }, []);
87
+
88
+ const resumeSession = useCallback(() => {
89
+ return sessionRecorder.resume();
90
+ }, []);
91
+
92
+ const cancelSession = useCallback(() => {
93
+ return sessionRecorder.cancel();
94
+ }, []);
95
+
96
+ const saveSession = useCallback(() => {
97
+ return sessionRecorder.save();
98
+ }, []);
99
+
100
+ const openWidgetModal = useCallback(() => {
101
+ sessionRecorderStore.setState({ isWidgetModalVisible: true });
102
+ }, []);
103
+
104
+ const closeWidgetModal = useCallback(() => {
105
+ sessionRecorderStore.setState({ isWidgetModalVisible: false });
106
+ }, []);
107
+
108
+ return (
109
+ <SessionRecorderContext.Provider
110
+ value={{
111
+ instance: sessionRecorder,
112
+ openWidgetModal,
113
+ closeWidgetModal,
114
+ startSession,
115
+ stopSession,
116
+ pauseSession,
117
+ resumeSession,
118
+ cancelSession,
119
+ saveSession,
120
+ }}
121
+ >
122
+ <ScreenRecorderView>{children}</ScreenRecorderView>
123
+ {isInitialized && !!sessionRecorder.config.widget.enabled && (
124
+ <SessionRecorderWidget />
125
+ )}
126
+ </SessionRecorderContext.Provider>
127
+ );
128
+ };
129
+
130
+ export const useSessionRecorder = (): SessionRecorderContextType => {
131
+ const context = useContext(SessionRecorderContext);
132
+ if (!context) {
133
+ throw new Error(
134
+ 'useSessionRecorder must be used within a SessionRecorderProvider'
135
+ );
136
+ }
137
+ return context;
138
+ };
@@ -0,0 +1,22 @@
1
+ import { createStore, type Store } from '../utils/createStore';
2
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
3
+ import { SessionState } from '../types';
4
+
5
+ export type SessionRecorderState = {
6
+ isInitialized: boolean;
7
+ sessionType: SessionType | null;
8
+ sessionState: SessionState | null;
9
+ isWidgetModalVisible: boolean;
10
+ isOnline: boolean;
11
+ error: string | null;
12
+ };
13
+
14
+ export const sessionRecorderStore: Store<SessionRecorderState> =
15
+ createStore<SessionRecorderState>({
16
+ isInitialized: false,
17
+ sessionType: null,
18
+ sessionState: null,
19
+ isWidgetModalVisible: false,
20
+ isOnline: true,
21
+ error: null,
22
+ });
@@ -0,0 +1,34 @@
1
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import { SessionState } from '../types';
3
+ import { useStoreSelector } from './useStoreSelector';
4
+ import {
5
+ type SessionRecorderState,
6
+ sessionRecorderStore,
7
+ } from './SessionRecorderStore';
8
+
9
+ export function useSessionRecorderStore<TSlice>(
10
+ selector: (s: SessionRecorderState) => TSlice,
11
+ equalityFn?: (a: TSlice, b: TSlice) => boolean
12
+ ): TSlice {
13
+ return useStoreSelector<SessionRecorderState, TSlice>(
14
+ sessionRecorderStore,
15
+ selector,
16
+ equalityFn
17
+ );
18
+ }
19
+
20
+ export function useSessionRecordingState() {
21
+ return useSessionRecorderStore<SessionState | null>((s) => s.sessionState);
22
+ }
23
+
24
+ export function useSessionType() {
25
+ return useSessionRecorderStore<SessionType | null>((s) => s.sessionType);
26
+ }
27
+
28
+ export function useIsInitialized() {
29
+ return useSessionRecorderStore<boolean>((s) => s.isInitialized);
30
+ }
31
+
32
+ export function useWidgetModalVisible() {
33
+ return useSessionRecorderStore<boolean>((s) => s.isWidgetModalVisible);
34
+ }
@@ -0,0 +1,36 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { type Store } from '../utils/createStore';
3
+ import { shallowEqual } from '../utils/shallowEqual';
4
+
5
+ export function useStoreSelector<TState extends object, TSlice>(
6
+ store: Store<TState>,
7
+ selector: (state: TState) => TSlice,
8
+ equalityFn: (a: TSlice, b: TSlice) => boolean = Object.is
9
+ ): TSlice {
10
+ const latestSelectorRef = useRef(selector);
11
+ const latestEqualityRef = useRef(equalityFn);
12
+ latestSelectorRef.current = selector;
13
+ latestEqualityRef.current = equalityFn;
14
+
15
+ const [slice, setSlice] = useState<TSlice>(() =>
16
+ latestSelectorRef.current(store.getState())
17
+ );
18
+
19
+ useEffect(() => {
20
+ function handleChange(nextState: TState, prevState: TState) {
21
+ const nextSlice = latestSelectorRef.current(nextState);
22
+ const prevSlice = latestSelectorRef.current(prevState);
23
+ if (!latestEqualityRef.current(nextSlice, prevSlice)) {
24
+ setSlice(nextSlice);
25
+ }
26
+ }
27
+ const unsubscribe = store.subscribe(handleChange);
28
+ // Sync once in case changed between render and effect
29
+ handleChange(store.getState(), store.getState());
30
+ return unsubscribe;
31
+ }, [store]);
32
+
33
+ return slice;
34
+ }
35
+
36
+ export const shallow = shallowEqual;
package/src/index.ts ADDED
@@ -0,0 +1,13 @@
1
+ import './patch';
2
+ import SessionRecorder from './session-recorder';
3
+ export * from '@multiplayer-app/session-recorder-common';
4
+ export * from './context/SessionRecorderContext';
5
+ export * from './context/useSessionRecorderStore';
6
+
7
+ // Export TurboModule spec for codegen
8
+ export * from './SessionRecorderNativeSpec';
9
+
10
+ // Export the class for type checking
11
+ export { SessionRecorder };
12
+ // Export the instance as default
13
+ export default SessionRecorder;
@@ -0,0 +1,120 @@
1
+ import { Platform, NativeEventEmitter } from 'react-native';
2
+ import SessionRecorderNative, { type MaskingOptions, type Spec } from '../SessionRecorderNativeSpec';
3
+
4
+
5
+ // Check if we're on web platform
6
+ const isWeb = Platform.OS === 'web';
7
+
8
+ // Get the Turbo Module
9
+ let eventEmitter = new NativeEventEmitter(SessionRecorderNative as any);
10
+
11
+
12
+ // Validate that the native module is available
13
+ if (!SessionRecorderNative && !isWeb) {
14
+ console.warn(
15
+ 'SessionRecorderNative Turbo Module is not available. Auto-linking may not have completed yet.'
16
+ );
17
+ } else if (isWeb) {
18
+ console.info(
19
+ 'SessionRecorderNative: Running on web platform, native module disabled'
20
+ );
21
+ }
22
+
23
+ // Create a safe wrapper that handles web platform
24
+ const SafeSessionRecorderNative: Spec = {
25
+ async captureAndMask(): Promise<string> {
26
+ if (isWeb || !SessionRecorderNative) {
27
+ throw new Error('SessionRecorderNative is not available on web platform');
28
+ }
29
+ return SessionRecorderNative.captureAndMask();
30
+ },
31
+
32
+ async captureAndMaskWithOptions(options: MaskingOptions): Promise<string> {
33
+ if (isWeb || !SessionRecorderNative) {
34
+ throw new Error('SessionRecorderNative is not available on web platform');
35
+ }
36
+ return SessionRecorderNative.captureAndMaskWithOptions(options);
37
+ },
38
+
39
+ async startGestureRecording(): Promise<void> {
40
+ if (isWeb || !SessionRecorderNative) {
41
+ throw new Error('SessionRecorderNative is not available on web platform');
42
+ }
43
+ return SessionRecorderNative.startGestureRecording();
44
+ },
45
+
46
+ async stopGestureRecording(): Promise<void> {
47
+ if (isWeb || !SessionRecorderNative) {
48
+ throw new Error('SessionRecorderNative is not available on web platform');
49
+ }
50
+ return SessionRecorderNative.stopGestureRecording();
51
+ },
52
+
53
+ async isGestureRecordingActive(): Promise<boolean> {
54
+ if (isWeb || !SessionRecorderNative) {
55
+ throw new Error('SessionRecorderNative is not available on web platform');
56
+ }
57
+ return SessionRecorderNative.isGestureRecordingActive();
58
+ },
59
+
60
+ setGestureCallback(callback: (event: any) => void): void {
61
+ if (isWeb || !SessionRecorderNative) {
62
+ throw new Error('SessionRecorderNative is not available on web platform');
63
+ }
64
+ // Native side will also invoke callback if provided; also subscribe to events here
65
+ try {
66
+ SessionRecorderNative.setGestureCallback(callback as any);
67
+ } catch { }
68
+ eventEmitter?.removeAllListeners('onGestureDetected');
69
+ eventEmitter?.addListener('onGestureDetected', callback);
70
+ },
71
+
72
+ recordGesture(gestureType: string, x: number, y: number, target?: string, metadata?: any): void {
73
+ if (isWeb || !SessionRecorderNative) {
74
+ throw new Error('SessionRecorderNative is not available on web platform');
75
+ }
76
+ SessionRecorderNative.recordGesture(gestureType, x, y, target, metadata);
77
+ },
78
+
79
+ addListener(_eventName: string): void {
80
+ // Required for RN event emitter contracts
81
+ },
82
+
83
+ removeListeners(_count: number): void {
84
+ // Required for RN event emitter contracts
85
+ },
86
+ };
87
+
88
+ export interface NativeGestureEvent {
89
+ type:
90
+ | 'tap'
91
+ | 'pan_start'
92
+ | 'pan_move'
93
+ | 'pan_end'
94
+ | 'long_press'
95
+ | 'pinch'
96
+ | 'swipe';
97
+ timestamp: number;
98
+ x: number;
99
+ y: number;
100
+ target?: string;
101
+ targetInfo?: {
102
+ identifier: string;
103
+ label?: string;
104
+ role?: string;
105
+ testId?: string;
106
+ text?: string;
107
+ };
108
+ metadata?: {
109
+ pressure?: number;
110
+ velocity?: number;
111
+ scale?: number;
112
+ direction?: string;
113
+ distance?: number;
114
+ };
115
+ }
116
+
117
+ export default SafeSessionRecorderNative;
118
+
119
+ // Export event emitter for gesture events to maintain previous API
120
+ export const gestureEventEmitter = eventEmitter;
@@ -0,0 +1,5 @@
1
+ export {
2
+ default as SessionRecorderNative,
3
+ gestureEventEmitter,
4
+ type NativeGestureEvent,
5
+ } from './SessionRecorderNative';