@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
@@ -0,0 +1,118 @@
1
+ import { type PropagateTraceHeaderCorsUrls } from '@opentelemetry/instrumentation-xml-http-request/build/src/types';
2
+ import {
3
+ type MaskingOptions,
4
+ type SessionRecorderOptions,
5
+ } from './session-recorder';
6
+
7
+ /**
8
+ * Utility type that makes all properties required recursively
9
+ * Removes optional modifiers and undefined types from nested objects
10
+ */
11
+ export type DeepRequired<T> = T extends Function
12
+ ? T
13
+ : T extends ReadonlyArray<infer U>
14
+ ? Array<DeepRequired<NonNullable<U>>>
15
+ : T extends Array<infer U>
16
+ ? Array<DeepRequired<NonNullable<U>>>
17
+ : T extends object
18
+ ? { -readonly [K in keyof T]-?: DeepRequired<NonNullable<T[K]>> }
19
+ : NonNullable<T>;
20
+
21
+ /**
22
+ * Fully resolved configuration interface
23
+ * All optional properties from SessionRecorderOptions are now required
24
+ */
25
+ export interface SessionRecorderConfigs
26
+ extends DeepRequired<SessionRecorderOptions> {}
27
+
28
+ /**
29
+ * Base configuration interface with common properties
30
+ * Shared by all service configuration interfaces
31
+ */
32
+ export interface BaseConfig {
33
+ /** API key for authentication */
34
+ apiKey: string;
35
+ /** Base URL for the API calls */
36
+ apiBaseUrl: string;
37
+ /** OTLP collector endpoint for traces */
38
+ exporterEndpoint: string;
39
+ }
40
+
41
+ /**
42
+ * Type for masking configuration used by the Tracer
43
+ * Contains only trace-related masking options
44
+ */
45
+ export type TracerReactNativeMasking = Pick<
46
+ MaskingOptions,
47
+ | 'isContentMaskingEnabled'
48
+ | 'maskBody'
49
+ | 'maskHeaders'
50
+ | 'maskBodyFieldsList'
51
+ | 'maskHeadersList'
52
+ | 'headersToInclude'
53
+ | 'headersToExclude'
54
+ >;
55
+
56
+ /**
57
+ * Configuration interface for the Tracer class
58
+ * Contains all settings needed for OpenTelemetry tracing
59
+ */
60
+ export interface TracerReactNativeConfig extends BaseConfig {
61
+ /** Application name */
62
+ application: string;
63
+ /** Application version */
64
+ version: string;
65
+ /** Environment (e.g., 'production', 'staging') */
66
+ environment: string;
67
+ /** URLs to ignore during tracing */
68
+ ignoreUrls: Array<string | RegExp>;
69
+ /** Trace ID ratio for sampling */
70
+ sampleTraceRatio: number;
71
+ /** URLs for CORS trace header propagation */
72
+ propagateTraceHeaderCorsUrls: PropagateTraceHeaderCorsUrls;
73
+ /** Whether to schematize document span payload */
74
+ schemifyDocSpanPayload: boolean;
75
+ /** Maximum size for capturing HTTP payload */
76
+ maxCapturingHttpPayloadSize: number;
77
+ /** If true, captures body in traces */
78
+ captureBody: boolean;
79
+ /** If true, captures headers in traces */
80
+ captureHeaders: boolean;
81
+ /** Configuration for masking sensitive data in session recordings */
82
+ masking: TracerReactNativeMasking;
83
+ }
84
+
85
+ /**
86
+ * Type for masking configuration used by the Recorder
87
+ * Contains only screen recording masking options
88
+ */
89
+ export type RecorderMaskingConfig = Pick<
90
+ MaskingOptions,
91
+ | 'maskTextInputs'
92
+ | 'maskImages'
93
+ | 'maskButtons'
94
+ | 'maskLabels'
95
+ | 'maskWebViews'
96
+ | 'maskSandboxedViews'
97
+ >;
98
+
99
+ /**
100
+ * Configuration interface for the Recorder class
101
+ * Contains settings for screen recording and gesture capture
102
+ */
103
+ export interface RecorderConfig extends BaseConfig {
104
+ /** Whether to record gestures */
105
+ recordGestures?: boolean;
106
+ /** Whether to record navigation */
107
+ recordNavigation?: boolean;
108
+ /** Whether to record screen */
109
+ recordScreen?: boolean;
110
+ /** Configuration for masking sensitive data in screen recordings */
111
+ masking?: RecorderMaskingConfig;
112
+ }
113
+
114
+ /**
115
+ * Configuration interface for the ApiService class
116
+ * Contains settings for API communication
117
+ */
118
+ export interface ApiServiceConfig extends BaseConfig {}
@@ -0,0 +1,7 @@
1
+ // Ambient module to prevent TypeScript errors when expo-constants is not installed.
2
+ // In non-Expo projects, this module is never required at runtime because we import
3
+ // through an optional shim that resolves to undefined.
4
+ declare module 'expo-constants' {
5
+ const Constants: any;
6
+ export default Constants;
7
+ }
@@ -0,0 +1,27 @@
1
+ export * from './session-recorder';
2
+ export * from './session';
3
+ export * from './configs';
4
+
5
+ // Import types for use in this file
6
+ import type { eventWithTime } from '@rrweb/types';
7
+
8
+ export interface ReactNativeScreenData {
9
+ width: number;
10
+ height: number;
11
+ base64Image: string;
12
+ timestamp: number;
13
+ screenName?: string;
14
+ }
15
+
16
+ export interface ReactNativeTouchData {
17
+ pageX: number;
18
+ pageY: number;
19
+ target?: string;
20
+ pressure?: number;
21
+ timestamp: number;
22
+ }
23
+
24
+ // Event recording interface
25
+ export interface EventRecorder {
26
+ recordEvent(event: eventWithTime): void;
27
+ }
@@ -0,0 +1,381 @@
1
+ import { type Span } from '@opentelemetry/api';
2
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
3
+ import { type PropagateTraceHeaderCorsUrls } from '@opentelemetry/sdk-trace-web';
4
+ import type { ISession } from './session';
5
+
6
+ // WidgetButtonPlacement moved to configs.ts
7
+
8
+ export enum SessionState {
9
+ started = '2',
10
+ paused = '1',
11
+ stopped = '0',
12
+ }
13
+
14
+ /**
15
+ * Enumeration for widget button placement positions
16
+ */
17
+ export enum WidgetButtonPlacement {
18
+ topLeft = 'top-left',
19
+ topRight = 'top-right',
20
+ bottomLeft = 'bottom-left',
21
+ bottomRight = 'bottom-right',
22
+ }
23
+
24
+ /**
25
+ * Enumeration for log levels
26
+ */
27
+ export enum LogLevel {
28
+ DEBUG = 0,
29
+ INFO = 1,
30
+ WARN = 2,
31
+ ERROR = 3,
32
+ }
33
+
34
+ /**
35
+ * Main configuration interface for the Session Recorder
36
+ * Contains all configurable options for session recording, tracing, and UI
37
+ */
38
+ export interface SessionRecorderOptions {
39
+ /**
40
+ * The API key used to authenticate with the session debugger service.
41
+ */
42
+ apiKey: string;
43
+
44
+ /**
45
+ * The version of the application using the session debugger.
46
+ */
47
+ version: string;
48
+
49
+ /**
50
+ * The name of the application being debugged.
51
+ */
52
+ application: string;
53
+
54
+ /**
55
+ * The environment where the application is running (e.g., 'production', 'staging').
56
+ */
57
+ environment: string;
58
+
59
+ /**
60
+ * (Optional) OTLP collector endpoint.
61
+ */
62
+ exporterEndpoint?: string;
63
+
64
+ /**
65
+ * (Optional) Base URL for the API calls.
66
+ * This allows customization of the API endpoint for sending session data.
67
+ */
68
+ apiBaseUrl?: string;
69
+
70
+ /**
71
+ * (Optional) An array of URLs or regular expressions that should be ignored by the session debugger.
72
+ * Any URL that partially matches any regex in this array will not be traced.
73
+ * Additionally, URLs that exactly match any string in the array will also be ignored.
74
+ */
75
+ ignoreUrls?: Array<string | RegExp>;
76
+
77
+ /**
78
+ * (Optional) Enables the continuous recording feature and UI.
79
+ * If false, the UI toggle is hidden and attempts to start a continuous
80
+ * session are ignored.
81
+ * @default true
82
+ */
83
+ showContinuousRecording?: boolean;
84
+
85
+ /**
86
+ * Optional widget configuration
87
+ */
88
+ widget?: {
89
+ /** Enables/disables the widget entirely
90
+ * @default true
91
+ */
92
+ enabled?: boolean;
93
+ /** Floating button config
94
+ * @default visible: true, placement: 'bottom-right'
95
+ */
96
+ button?: {
97
+ visible?: boolean;
98
+ placement?: WidgetButtonPlacement;
99
+ };
100
+
101
+ /**
102
+ * (Optional) Configuration for customizable UI text and labels
103
+ * @default See PopoverTextConfig defaults
104
+ */
105
+ textOverrides?: TextOverridesOptions;
106
+ };
107
+
108
+ /**
109
+ * (Optional) Trace ID Ratio for sampling
110
+ * @default 0.15
111
+ */
112
+ sampleTraceRatio?: number;
113
+
114
+ /**
115
+ * (Optional) URLs or regex patterns for CORS trace header propagation
116
+ */
117
+ propagateTraceHeaderCorsUrls?: PropagateTraceHeaderCorsUrls;
118
+
119
+ /**
120
+ * (Optional) If true, schematizes document span payload
121
+ * @default true
122
+ */
123
+ schemifyDocSpanPayload?: boolean;
124
+
125
+ /**
126
+ * (Optional) Maximum size for capturing HTTP payload
127
+ * @default 100000
128
+ */
129
+ maxCapturingHttpPayloadSize?: number;
130
+
131
+ /** If true, captures body in traces
132
+ * @default true
133
+ */
134
+ captureBody?: boolean;
135
+ /** If true, captures headers in traces
136
+ * @default true
137
+ */
138
+ captureHeaders?: boolean;
139
+ /**
140
+ * (Optional) Configuration for masking sensitive data in session recordings
141
+ * @default { maskAllInputs: true, isContentMaskingEnabled: true }
142
+ */
143
+ masking?: MaskingOptions;
144
+ /** Whether to record gestures */
145
+ recordGestures?: boolean;
146
+ /** Whether to record navigation */
147
+ recordNavigation?: boolean;
148
+ /** Whether to record screen */
149
+ recordScreen?: boolean;
150
+ /**
151
+ * (Optional) Logger configuration overrides
152
+ * Allows setting log level, console enabling, and prefix customizations
153
+ */
154
+ logger?: {
155
+ level?: number;
156
+ enabled?: boolean;
157
+ };
158
+ }
159
+
160
+ /**
161
+ * Interface for customizable widget text configuration
162
+ * Allows overriding default text labels and messages in the UI
163
+ */
164
+ export interface TextOverridesOptions {
165
+ /** Title for the initial popover when continuous recording is enabled */
166
+ initialTitleWithContinuous?: string;
167
+ /** Title for the initial popover when continuous recording is disabled */
168
+ initialTitleWithoutContinuous?: string;
169
+ /** Description for the initial popover when continuous recording is enabled */
170
+ initialDescriptionWithContinuous?: string;
171
+ /** Description for the initial popover when continuous recording is disabled */
172
+ initialDescriptionWithoutContinuous?: string;
173
+ /** Label for the continuous recording toggle */
174
+ continuousRecordingLabel?: string;
175
+ /** Text for the start recording button */
176
+ startRecordingButtonText?: string;
177
+ /** Title for the final popover */
178
+ finalTitle?: string;
179
+ /** Description for the final popover */
180
+ finalDescription?: string;
181
+ /** Placeholder text for the comment textarea */
182
+ commentPlaceholder?: string;
183
+ /** Text for the save button in final popover */
184
+ saveButtonText?: string;
185
+ /** Text for the cancel button in final popover */
186
+ cancelButtonText?: string;
187
+ /** Title for the continuous recording overlay */
188
+ continuousOverlayTitle?: string;
189
+ /** Description for the continuous recording overlay */
190
+ continuousOverlayDescription?: string;
191
+ /** Text for the save last snapshot button */
192
+ saveLastSnapshotButtonText?: string;
193
+ /** Title for the submit session dialog */
194
+ submitDialogTitle?: string;
195
+ /** Subtitle for the submit session dialog */
196
+ submitDialogSubtitle?: string;
197
+ /** Label for the comment field in submit dialog */
198
+ submitDialogCommentLabel?: string;
199
+ /** Placeholder for the comment field in submit dialog */
200
+ submitDialogCommentPlaceholder?: string;
201
+ /** Text for the submit button in dialog */
202
+ submitDialogSubmitText?: string;
203
+ /** Text for the cancel button in dialog */
204
+ submitDialogCancelText?: string;
205
+ }
206
+
207
+ /**
208
+ * Interface for masking configuration options
209
+ * Controls what data is masked in both traces and screen recordings
210
+ */
211
+ export interface MaskingOptions {
212
+ // Span masking
213
+ /** If true, enables masking for debug span payload in traces */
214
+ isContentMaskingEnabled?: boolean;
215
+ /** Custom function for masking body in traces */
216
+ maskBody?: (payload: any, span: Span) => any;
217
+ /** Custom function for masking headers in traces */
218
+ maskHeaders?: (headers: any, span: any) => any;
219
+
220
+ /** List of body fields to mask in traces */
221
+ maskBodyFieldsList?: string[];
222
+ /** List of headers to mask in traces */
223
+ maskHeadersList?: string[];
224
+
225
+ /** List of headers to include in traces (if specified, only these headers will be captured) */
226
+ headersToInclude?: string[];
227
+ /** List of headers to exclude from traces */
228
+ headersToExclude?: string[];
229
+
230
+ // Screen masking options
231
+ /** Whether to mask text inputs (UITextField, UITextView, React Native text components) */
232
+ maskTextInputs?: boolean;
233
+ /** Whether to mask images (UIImageView, React Native Image components) */
234
+ maskImages?: boolean;
235
+ /** Whether to mask buttons (UIButton) */
236
+ maskButtons?: boolean;
237
+ /** Whether to mask labels (UILabel) */
238
+ maskLabels?: boolean;
239
+ /** Whether to mask web views (WKWebView) */
240
+ maskWebViews?: boolean;
241
+ /** Whether to mask sandboxed views (system views that don't belong to current process) */
242
+ maskSandboxedViews?: boolean;
243
+ }
244
+ /**
245
+ * Main interface for the Session Recorder
246
+ * Defines the public API for session recording functionality
247
+ */
248
+ export interface ISessionRecorder {
249
+ /**
250
+ * The current session ID
251
+ */
252
+ readonly sessionId: string | null;
253
+
254
+ /**
255
+ * Whether continuous recording is enabled
256
+ */
257
+ readonly continuousRecording: boolean;
258
+
259
+ /**
260
+ * The current debug session object
261
+ */
262
+ readonly session: ISession | null;
263
+
264
+ /**
265
+ * The type of session (plain or continuous)
266
+ */
267
+ readonly sessionType: SessionType;
268
+
269
+ /**
270
+ * The current state of the session
271
+ */
272
+ readonly sessionState: SessionState | null;
273
+
274
+ /**
275
+ * Session attributes for additional context
276
+ */
277
+ readonly sessionAttributes: Record<string, any>;
278
+
279
+ /**
280
+ * Current error message
281
+ */
282
+ error: string;
283
+
284
+ /**
285
+ * The HTML button element for the session widget's recorder button
286
+ */
287
+ readonly sessionWidgetButtonElement: HTMLButtonElement;
288
+
289
+ /**
290
+ * Initialize the session debugger with custom configurations
291
+ * @param configs - custom configurations for session debugger
292
+ */
293
+ init(configs: SessionRecorderOptions): void;
294
+
295
+ /**
296
+ * Save the continuous recording session
297
+ * @returns Promise that resolves to the save response
298
+ */
299
+ save(): Promise<any>;
300
+
301
+ /**
302
+ * Start a new session
303
+ * @param type - the type of session to start
304
+ * @param session - optional existing session to start
305
+ */
306
+ start(type?: SessionType, session?: ISession): void;
307
+
308
+ /**
309
+ * Stop the current session with an optional comment
310
+ * @param comment - user-provided comment to include in session feedback metadata
311
+ */
312
+ stop(comment?: string): Promise<void>;
313
+
314
+ /**
315
+ * Cancel the current session
316
+ */
317
+ cancel(): Promise<void>;
318
+
319
+ /**
320
+ * Pause the current session
321
+ */
322
+ pause(): Promise<void>;
323
+
324
+ /**
325
+ * Resume the current session
326
+ */
327
+ resume(): Promise<void>;
328
+
329
+ /**
330
+ * Set the session metadata
331
+ * @param attributes - the attributes to set
332
+ */
333
+ setSessionAttributes(attributes: Record<string, any>): void;
334
+ }
335
+
336
+ /**
337
+ * Interface representing screen capture events
338
+ * Contains metadata about screen recordings
339
+ */
340
+ export interface ScreenEvent {
341
+ screenName: string;
342
+ timestamp: number;
343
+ params?: Record<string, any>;
344
+ type?: string;
345
+ metadata?: Record<string, any>;
346
+ dataUrl?: string;
347
+ }
348
+
349
+ /**
350
+ * Interface representing gesture/touch events
351
+ * Contains information about user interactions with the screen
352
+ */
353
+ export interface GestureEvent {
354
+ type: string;
355
+ timestamp: number;
356
+ x?: number;
357
+ y?: number;
358
+ direction?: string;
359
+ target?: string;
360
+ coordinates?: { x: number; y: number };
361
+ targetInfo?: {
362
+ identifier: string;
363
+ label?: string;
364
+ role?: string;
365
+ testId?: string;
366
+ text?: string;
367
+ };
368
+ metadata?: Record<string, any>;
369
+ }
370
+
371
+ /**
372
+ * Interface representing navigation events
373
+ * Contains information about screen/route changes
374
+ */
375
+ export interface NavigationEvent {
376
+ type: string;
377
+ timestamp: number;
378
+ routeName?: string;
379
+ params?: Record<string, any>;
380
+ metadata?: Record<string, any>;
381
+ }
@@ -0,0 +1,65 @@
1
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+
3
+ export interface IResourceAttributes {
4
+ browserInfo?: string;
5
+ cookiesEnabled?: string;
6
+ deviceInfo?: string;
7
+ hardwareConcurrency?: number;
8
+ osInfo?: string;
9
+ pixelRatio?: number;
10
+ screenSize?: string;
11
+ packageVersion?: string;
12
+ [key: string]: any;
13
+ }
14
+
15
+ export interface ISessionAttributes {
16
+ userEmail?: string;
17
+ userId?: string;
18
+ userName?: string;
19
+ accountId?: string;
20
+ accountName?: string;
21
+ [key: string]: any;
22
+ }
23
+
24
+ export interface ISessionView {
25
+ _id: string;
26
+ name: string;
27
+ components?: string[];
28
+ }
29
+
30
+ export interface ISession {
31
+ _id: string;
32
+ shortId: string;
33
+ workspace: string;
34
+ project: string;
35
+ continuousDebugSession?: string;
36
+ creationType: SessionType;
37
+ name: string;
38
+ startedAt: string | Date;
39
+ stoppedAt: string | Date;
40
+ durationInSeconds?: number;
41
+ createdAt: string | Date;
42
+ updatedAt: string | Date;
43
+ tags: any[];
44
+
45
+ resourceAttributes?: IResourceAttributes;
46
+ sessionAttributes?: ISessionAttributes;
47
+ views: ISessionView[];
48
+ starred: boolean;
49
+ starredItems: string[];
50
+ s3Files: {
51
+ _id?: string;
52
+ bucket: string;
53
+ key: string;
54
+ dataType: DebugSessionDataType;
55
+ url?: string;
56
+ }[];
57
+ finishedS3Transfer?: boolean;
58
+ tempApiKey?: string;
59
+ }
60
+
61
+ export enum DebugSessionDataType {
62
+ OTLP_TRACES = 'OTLP_TRACES',
63
+ OTLP_LOGS = 'OTLP_LOGS',
64
+ RRWEB_EVENTS = 'RRWEB_EVENTS',
65
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Auto-generated app metadata
3
+ * This file is generated at build time to provide app metadata without developer intervention
4
+ */
5
+
6
+ // This file is automatically generated by the build process
7
+ // It extracts metadata from app.json, app.config.js, or package.json
8
+
9
+ export interface AppMetadata {
10
+ name?: string;
11
+ version?: string;
12
+ bundleId?: string;
13
+ buildNumber?: string;
14
+ displayName?: string;
15
+ }
16
+
17
+ // Auto-detected values from project configuration files
18
+ export const APP_METADATA: AppMetadata = {
19
+ name: '@multiplayer-app/session-recorder-react-native',
20
+ version: '0.0.1',
21
+ bundleId: undefined,
22
+ buildNumber: undefined,
23
+ displayName: undefined,
24
+ };
25
+
26
+ /**
27
+ * Get auto-detected app metadata
28
+ */
29
+ export function getAutoDetectedAppMetadata(): AppMetadata {
30
+ return { ...APP_METADATA };
31
+ }
@@ -0,0 +1,5 @@
1
+ // Expo variant: re-export expo-constants default to be consumed via the optional shim path
2
+ import Constants from 'expo-constants';
3
+ import type { OptionalExpoConstants } from './constants.optional';
4
+
5
+ export default Constants as OptionalExpoConstants;
@@ -0,0 +1,18 @@
1
+ // Non-Expo fallback: export undefined to avoid bundling expo-constants in non-Expo apps
2
+ // Define a lightweight type that includes only the members we read.
3
+ export type OptionalExpoConstants =
4
+ | {
5
+ expoVersion?: string;
6
+ platform?: { ios?: unknown; android?: unknown };
7
+ expoConfig?: {
8
+ name?: string;
9
+ version?: string;
10
+ ios?: { buildNumber?: string | number; bundleIdentifier?: string };
11
+ android?: { versionCode?: string | number; package?: string };
12
+ };
13
+ }
14
+ | undefined;
15
+
16
+ const OptionalConstants: OptionalExpoConstants = undefined;
17
+
18
+ export default OptionalConstants;
@@ -0,0 +1,32 @@
1
+ type Listener<T> = (state: T, prevState: T) => void;
2
+
3
+ export type Store<T> = {
4
+ getState: () => T;
5
+ setState: (partial: Partial<T> | ((prev: T) => T), action?: string) => void;
6
+ subscribe: (listener: Listener<T>) => () => void;
7
+ };
8
+
9
+ export function createStore<T extends object>(initialState: T): Store<T> {
10
+ let state: T = initialState;
11
+ const listeners = new Set<Listener<T>>();
12
+
13
+ const getState = () => state;
14
+
15
+ const setState: Store<T>['setState'] = (partial) => {
16
+ const prevState = state;
17
+ const nextState =
18
+ typeof partial === 'function'
19
+ ? (partial as (prev: T) => T)(prevState)
20
+ : ({ ...prevState, ...partial } as T);
21
+ if (Object.is(nextState, prevState)) return;
22
+ state = nextState;
23
+ listeners.forEach((l) => l(state, prevState));
24
+ };
25
+
26
+ const subscribe: Store<T>['subscribe'] = (listener) => {
27
+ listeners.add(listener);
28
+ return () => listeners.delete(listener);
29
+ };
30
+
31
+ return { getState, setState, subscribe };
32
+ }
@@ -1,3 +1,4 @@
1
+ // Export all utility functions
1
2
  export * from './platform';
2
3
  export * from './session';
3
4
  export * from './time';