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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +216 -155
  3. package/SessionRecorderNative.podspec +9 -14
  4. package/android/build.gradle +21 -44
  5. package/android/gradle.properties +4 -4
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeConfig.kt +52 -0
  8. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeModule.kt +860 -0
  9. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativeModuleSpec.kt +51 -0
  10. package/android/src/main/java/com/multiplayer/sessionrecordernative/SessionRecorderNativePackage.kt +33 -0
  11. package/android/src/main/java/com/multiplayer/sessionrecordernative/model/TargetInfo.kt +9 -0
  12. package/android/src/main/java/com/multiplayer/sessionrecordernative/util/ViewUtils.kt +72 -0
  13. package/android/src/main/java/com/xxx/XxxModule.kt +23 -0
  14. package/ios/SessionRecorderNative.podspec +4 -2
  15. package/ios/SessionRecorderNative.swift +1 -1
  16. package/ios/SessionRecorderNativeSpec.swift +3 -3
  17. package/ios/Xxx.h +5 -0
  18. package/ios/Xxx.mm +21 -0
  19. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js +23 -0
  20. package/lib/module/components/ScreenRecorderView/ScreenRecorderView.js.map +1 -0
  21. package/lib/module/components/ScreenRecorderView/index.js +4 -0
  22. package/lib/module/components/ScreenRecorderView/index.js.map +1 -0
  23. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js +64 -0
  24. package/lib/module/components/SessionRecorderWidget/ErrorBanner.js.map +1 -0
  25. package/lib/module/components/SessionRecorderWidget/FinalPopover.js +74 -0
  26. package/lib/module/components/SessionRecorderWidget/FinalPopover.js.map +1 -0
  27. package/lib/module/components/SessionRecorderWidget/FloatingButton.js +191 -0
  28. package/lib/module/components/SessionRecorderWidget/FloatingButton.js.map +1 -0
  29. package/lib/module/components/SessionRecorderWidget/InitialPopover.js +138 -0
  30. package/lib/module/components/SessionRecorderWidget/InitialPopover.js.map +1 -0
  31. package/lib/module/components/SessionRecorderWidget/ModalContainer.js +177 -0
  32. package/lib/module/components/SessionRecorderWidget/ModalContainer.js.map +1 -0
  33. package/lib/module/components/SessionRecorderWidget/ModalHeader.js +27 -0
  34. package/lib/module/components/SessionRecorderWidget/ModalHeader.js.map +1 -0
  35. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js +133 -0
  36. package/lib/module/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -0
  37. package/lib/module/components/SessionRecorderWidget/icons.js +93 -0
  38. package/lib/module/components/SessionRecorderWidget/icons.js.map +1 -0
  39. package/lib/module/components/SessionRecorderWidget/index.js +5 -0
  40. package/lib/module/components/SessionRecorderWidget/index.js.map +1 -0
  41. package/lib/module/components/SessionRecorderWidget/styles.js +173 -0
  42. package/lib/module/components/SessionRecorderWidget/styles.js.map +1 -0
  43. package/lib/module/components/index.js +5 -0
  44. package/lib/module/components/index.js.map +1 -0
  45. package/lib/module/config/constants.js +42 -0
  46. package/lib/module/config/constants.js.map +1 -0
  47. package/lib/module/config/defaults.js +81 -0
  48. package/lib/module/config/defaults.js.map +1 -0
  49. package/lib/module/config/index.js +9 -0
  50. package/lib/module/config/index.js.map +1 -0
  51. package/lib/module/config/masking.js +35 -0
  52. package/lib/module/config/masking.js.map +1 -0
  53. package/lib/module/config/session-recorder.js +44 -0
  54. package/lib/module/config/session-recorder.js.map +1 -0
  55. package/lib/module/config/validators.js +28 -0
  56. package/lib/module/config/validators.js.map +1 -0
  57. package/lib/module/config/widget.js +35 -0
  58. package/lib/module/config/widget.js.map +1 -0
  59. package/lib/module/context/SessionRecorderContext.js +93 -0
  60. package/lib/module/context/SessionRecorderContext.js.map +1 -0
  61. package/lib/module/context/SessionRecorderStore.js +12 -0
  62. package/lib/module/context/SessionRecorderStore.js.map +1 -0
  63. package/lib/module/context/useSessionRecorderStore.js +20 -0
  64. package/lib/module/context/useSessionRecorderStore.js.map +1 -0
  65. package/lib/module/context/useStoreSelector.js +27 -0
  66. package/lib/module/context/useStoreSelector.js.map +1 -0
  67. package/lib/module/index.js +13 -0
  68. package/lib/module/index.js.map +1 -0
  69. package/lib/module/native/SessionRecorderNative.js +74 -0
  70. package/lib/module/native/SessionRecorderNative.js.map +1 -0
  71. package/lib/module/native/index.js +4 -0
  72. package/lib/module/native/index.js.map +1 -0
  73. package/lib/module/otel/helpers.js +218 -0
  74. package/lib/module/otel/helpers.js.map +1 -0
  75. package/lib/module/otel/index.js +95 -0
  76. package/lib/module/otel/index.js.map +1 -0
  77. package/lib/module/otel/instrumentations/index.js +102 -0
  78. package/lib/module/otel/instrumentations/index.js.map +1 -0
  79. package/lib/module/package.json +1 -0
  80. package/lib/module/patch/index.js +4 -0
  81. package/lib/module/patch/index.js.map +1 -0
  82. package/lib/module/patch/xhr.js +116 -0
  83. package/lib/module/patch/xhr.js.map +1 -0
  84. package/lib/module/recorder/eventExporter.js +130 -0
  85. package/lib/module/recorder/eventExporter.js.map +1 -0
  86. package/lib/module/recorder/gestureRecorder.js +641 -0
  87. package/lib/module/recorder/gestureRecorder.js.map +1 -0
  88. package/lib/module/recorder/index.js +168 -0
  89. package/lib/module/recorder/index.js.map +1 -0
  90. package/lib/module/recorder/navigationTracker.js +228 -0
  91. package/lib/module/recorder/navigationTracker.js.map +1 -0
  92. package/lib/module/recorder/screenRecorder.js +495 -0
  93. package/lib/module/recorder/screenRecorder.js.map +1 -0
  94. package/lib/module/services/api.service.js +149 -0
  95. package/lib/module/services/api.service.js.map +1 -0
  96. package/lib/module/services/network.service.js +178 -0
  97. package/lib/module/services/network.service.js.map +1 -0
  98. package/lib/module/services/screenMaskingService.js +107 -0
  99. package/lib/module/services/screenMaskingService.js.map +1 -0
  100. package/lib/module/services/storage.service.js +179 -0
  101. package/lib/module/services/storage.service.js.map +1 -0
  102. package/lib/module/session-recorder.js +541 -0
  103. package/lib/module/session-recorder.js.map +1 -0
  104. package/lib/module/types/configs.js +4 -0
  105. package/lib/module/types/configs.js.map +1 -0
  106. package/lib/module/types/expo-constants.d.js +2 -0
  107. package/lib/module/types/expo-constants.d.js.map +1 -0
  108. package/lib/module/types/index.js +11 -0
  109. package/lib/module/types/index.js.map +1 -0
  110. package/lib/module/types/session-recorder.js +68 -0
  111. package/lib/module/types/session-recorder.js.map +1 -0
  112. package/lib/module/types/session.js +9 -0
  113. package/lib/module/types/session.js.map +1 -0
  114. package/lib/module/utils/app-metadata.js +28 -0
  115. package/lib/module/utils/app-metadata.js.map +1 -0
  116. package/lib/module/utils/constants.optional.expo.js +6 -0
  117. package/lib/module/utils/constants.optional.expo.js.map +1 -0
  118. package/lib/module/utils/constants.optional.js +8 -0
  119. package/lib/module/utils/constants.optional.js.map +1 -0
  120. package/lib/module/utils/createStore.js +27 -0
  121. package/lib/module/utils/createStore.js.map +1 -0
  122. package/lib/module/utils/index.js +11 -0
  123. package/lib/module/utils/index.js.map +1 -0
  124. package/lib/module/utils/logger.js +193 -0
  125. package/lib/module/utils/logger.js.map +1 -0
  126. package/lib/module/utils/platform.js +340 -0
  127. package/lib/module/utils/platform.js.map +1 -0
  128. package/lib/module/utils/request-utils.js +58 -0
  129. package/lib/module/utils/request-utils.js.map +1 -0
  130. package/lib/module/utils/rrweb-events.js +276 -0
  131. package/lib/module/utils/rrweb-events.js.map +1 -0
  132. package/lib/module/utils/session.js +21 -0
  133. package/lib/module/utils/session.js.map +1 -0
  134. package/lib/module/utils/shallowEqual.js +17 -0
  135. package/lib/module/utils/shallowEqual.js.map +1 -0
  136. package/lib/module/utils/time.js +17 -0
  137. package/lib/module/utils/time.js.map +1 -0
  138. package/lib/module/utils/type-utils.js +69 -0
  139. package/lib/module/utils/type-utils.js.map +1 -0
  140. package/lib/module/version.js +4 -0
  141. package/lib/module/version.js.map +1 -0
  142. package/lib/typescript/package.json +1 -0
  143. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts +6 -0
  144. package/lib/typescript/src/components/ScreenRecorderView/ScreenRecorderView.d.ts.map +1 -0
  145. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts +2 -0
  146. package/lib/typescript/src/components/ScreenRecorderView/index.d.ts.map +1 -0
  147. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ErrorBanner.d.ts +1 -0
  148. package/lib/typescript/src/components/SessionRecorderWidget/ErrorBanner.d.ts.map +1 -0
  149. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FinalPopover.d.ts +2 -1
  150. package/lib/typescript/src/components/SessionRecorderWidget/FinalPopover.d.ts.map +1 -0
  151. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/FloatingButton.d.ts +1 -0
  152. package/lib/typescript/src/components/SessionRecorderWidget/FloatingButton.d.ts.map +1 -0
  153. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/InitialPopover.d.ts +2 -1
  154. package/lib/typescript/src/components/SessionRecorderWidget/InitialPopover.d.ts.map +1 -0
  155. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalContainer.d.ts +1 -0
  156. package/lib/typescript/src/components/SessionRecorderWidget/ModalContainer.d.ts.map +1 -0
  157. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/ModalHeader.d.ts +1 -0
  158. package/lib/typescript/src/components/SessionRecorderWidget/ModalHeader.d.ts.map +1 -0
  159. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/SessionRecorderWidget.d.ts +1 -0
  160. package/lib/typescript/src/components/SessionRecorderWidget/SessionRecorderWidget.d.ts.map +1 -0
  161. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/icons.d.ts +1 -0
  162. package/lib/typescript/src/components/SessionRecorderWidget/icons.d.ts.map +1 -0
  163. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts +3 -0
  164. package/lib/typescript/src/components/SessionRecorderWidget/index.d.ts.map +1 -0
  165. package/{dist → lib/typescript/src}/components/SessionRecorderWidget/styles.d.ts +4 -3
  166. package/lib/typescript/src/components/SessionRecorderWidget/styles.d.ts.map +1 -0
  167. package/{dist → lib/typescript/src}/components/index.d.ts +1 -0
  168. package/lib/typescript/src/components/index.d.ts.map +1 -0
  169. package/{dist → lib/typescript/src}/config/constants.d.ts +1 -0
  170. package/lib/typescript/src/config/constants.d.ts.map +1 -0
  171. package/{dist → lib/typescript/src}/config/defaults.d.ts +2 -1
  172. package/lib/typescript/src/config/defaults.d.ts.map +1 -0
  173. package/{dist → lib/typescript/src}/config/index.d.ts +1 -0
  174. package/lib/typescript/src/config/index.d.ts.map +1 -0
  175. package/lib/typescript/src/config/masking.d.ts +3 -0
  176. package/lib/typescript/src/config/masking.d.ts.map +1 -0
  177. package/lib/typescript/src/config/session-recorder.d.ts +3 -0
  178. package/lib/typescript/src/config/session-recorder.d.ts.map +1 -0
  179. package/{dist → lib/typescript/src}/config/validators.d.ts +1 -0
  180. package/lib/typescript/src/config/validators.d.ts.map +1 -0
  181. package/{dist → lib/typescript/src}/config/widget.d.ts +2 -1
  182. package/lib/typescript/src/config/widget.d.ts.map +1 -0
  183. package/{dist → lib/typescript/src}/context/SessionRecorderContext.d.ts +3 -2
  184. package/lib/typescript/src/context/SessionRecorderContext.d.ts.map +1 -0
  185. package/{dist → lib/typescript/src}/context/SessionRecorderStore.d.ts +2 -1
  186. package/lib/typescript/src/context/SessionRecorderStore.d.ts.map +1 -0
  187. package/{dist → lib/typescript/src}/context/useSessionRecorderStore.d.ts +2 -1
  188. package/lib/typescript/src/context/useSessionRecorderStore.d.ts.map +1 -0
  189. package/{dist → lib/typescript/src}/context/useStoreSelector.d.ts +2 -1
  190. package/lib/typescript/src/context/useStoreSelector.d.ts.map +1 -0
  191. package/{dist → lib/typescript/src}/index.d.ts +1 -0
  192. package/lib/typescript/src/index.d.ts.map +1 -0
  193. package/{dist → lib/typescript/src}/native/SessionRecorderNative.d.ts +21 -3
  194. package/lib/typescript/src/native/SessionRecorderNative.d.ts.map +1 -0
  195. package/{dist → lib/typescript/src}/native/index.d.ts +1 -0
  196. package/lib/typescript/src/native/index.d.ts.map +1 -0
  197. package/{dist → lib/typescript/src}/otel/helpers.d.ts +3 -2
  198. package/lib/typescript/src/otel/helpers.d.ts.map +1 -0
  199. package/{dist → lib/typescript/src}/otel/index.d.ts +2 -2
  200. package/lib/typescript/src/otel/index.d.ts.map +1 -0
  201. package/{dist → lib/typescript/src}/otel/instrumentations/index.d.ts +2 -1
  202. package/lib/typescript/src/otel/instrumentations/index.d.ts.map +1 -0
  203. package/lib/typescript/src/patch/index.d.ts +2 -0
  204. package/lib/typescript/src/patch/index.d.ts.map +1 -0
  205. package/{dist → lib/typescript/src}/patch/xhr.d.ts +1 -0
  206. package/lib/typescript/src/patch/xhr.d.ts.map +1 -0
  207. package/{dist → lib/typescript/src}/recorder/eventExporter.d.ts +2 -1
  208. package/lib/typescript/src/recorder/eventExporter.d.ts.map +1 -0
  209. package/{dist → lib/typescript/src}/recorder/gestureRecorder.d.ts +3 -2
  210. package/lib/typescript/src/recorder/gestureRecorder.d.ts.map +1 -0
  211. package/{dist → lib/typescript/src}/recorder/index.d.ts +3 -2
  212. package/lib/typescript/src/recorder/index.d.ts.map +1 -0
  213. package/{dist → lib/typescript/src}/recorder/navigationTracker.d.ts +2 -1
  214. package/lib/typescript/src/recorder/navigationTracker.d.ts.map +1 -0
  215. package/{dist → lib/typescript/src}/recorder/screenRecorder.d.ts +4 -4
  216. package/lib/typescript/src/recorder/screenRecorder.d.ts.map +1 -0
  217. package/{dist → lib/typescript/src}/services/api.service.d.ts +2 -1
  218. package/lib/typescript/src/services/api.service.d.ts.map +1 -0
  219. package/{dist → lib/typescript/src}/services/network.service.d.ts +1 -0
  220. package/lib/typescript/src/services/network.service.d.ts.map +1 -0
  221. package/{dist → lib/typescript/src}/services/screenMaskingService.d.ts +2 -1
  222. package/lib/typescript/src/services/screenMaskingService.d.ts.map +1 -0
  223. package/{dist → lib/typescript/src}/services/storage.service.d.ts +2 -1
  224. package/lib/typescript/src/services/storage.service.d.ts.map +1 -0
  225. package/{dist → lib/typescript/src}/session-recorder.d.ts +3 -2
  226. package/lib/typescript/src/session-recorder.d.ts.map +1 -0
  227. package/{dist → lib/typescript/src}/types/configs.d.ts +3 -2
  228. package/lib/typescript/src/types/configs.d.ts.map +1 -0
  229. package/{dist → lib/typescript/src}/types/index.d.ts +1 -0
  230. package/lib/typescript/src/types/index.d.ts.map +1 -0
  231. package/{dist → lib/typescript/src}/types/session-recorder.d.ts +3 -2
  232. package/lib/typescript/src/types/session-recorder.d.ts.map +1 -0
  233. package/{dist → lib/typescript/src}/types/session.d.ts +1 -0
  234. package/lib/typescript/src/types/session.d.ts.map +1 -0
  235. package/{dist → lib/typescript/src}/utils/app-metadata.d.ts +1 -0
  236. package/lib/typescript/src/utils/app-metadata.d.ts.map +1 -0
  237. package/{dist → lib/typescript/src}/utils/constants.optional.d.ts +1 -0
  238. package/lib/typescript/src/utils/constants.optional.d.ts.map +1 -0
  239. package/{dist → lib/typescript/src}/utils/constants.optional.expo.d.ts +1 -0
  240. package/lib/typescript/src/utils/constants.optional.expo.d.ts.map +1 -0
  241. package/{dist → lib/typescript/src}/utils/createStore.d.ts +1 -0
  242. package/lib/typescript/src/utils/createStore.d.ts.map +1 -0
  243. package/{dist → lib/typescript/src}/utils/index.d.ts +1 -0
  244. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  245. package/{dist → lib/typescript/src}/utils/logger.d.ts +1 -0
  246. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  247. package/{dist → lib/typescript/src}/utils/platform.d.ts +2 -1
  248. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  249. package/{dist → lib/typescript/src}/utils/request-utils.d.ts +1 -0
  250. package/lib/typescript/src/utils/request-utils.d.ts.map +1 -0
  251. package/{dist → lib/typescript/src}/utils/rrweb-events.d.ts +2 -1
  252. package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -0
  253. package/{dist → lib/typescript/src}/utils/session.d.ts +1 -0
  254. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  255. package/{dist → lib/typescript/src}/utils/shallowEqual.d.ts +1 -0
  256. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  257. package/{dist → lib/typescript/src}/utils/time.d.ts +1 -0
  258. package/lib/typescript/src/utils/time.d.ts.map +1 -0
  259. package/{dist → lib/typescript/src}/utils/type-utils.d.ts +1 -0
  260. package/lib/typescript/src/utils/type-utils.d.ts.map +1 -0
  261. package/{dist → lib/typescript/src}/version.d.ts +1 -0
  262. package/lib/typescript/src/version.d.ts.map +1 -0
  263. package/package.json +133 -44
  264. package/src/components/ScreenRecorderView/ScreenRecorderView.tsx +20 -0
  265. package/src/components/SessionRecorderWidget/ErrorBanner.tsx +58 -0
  266. package/src/components/SessionRecorderWidget/FinalPopover.tsx +96 -0
  267. package/src/components/SessionRecorderWidget/FloatingButton.tsx +176 -0
  268. package/src/components/SessionRecorderWidget/InitialPopover.tsx +167 -0
  269. package/src/components/SessionRecorderWidget/ModalContainer.tsx +189 -0
  270. package/src/components/SessionRecorderWidget/ModalHeader.tsx +24 -0
  271. package/src/components/SessionRecorderWidget/SessionRecorderWidget.tsx +136 -0
  272. package/src/components/SessionRecorderWidget/icons.tsx +52 -0
  273. package/{dist/components/SessionRecorderWidget/index.d.ts → src/components/SessionRecorderWidget/index.ts} +1 -0
  274. package/src/components/SessionRecorderWidget/styles.ts +169 -0
  275. package/src/components/index.ts +2 -0
  276. package/src/config/constants.ts +68 -0
  277. package/src/config/defaults.ts +101 -0
  278. package/src/config/index.ts +6 -0
  279. package/src/config/masking.ts +34 -0
  280. package/src/config/session-recorder.ts +59 -0
  281. package/src/config/validators.ts +31 -0
  282. package/src/config/widget.ts +38 -0
  283. package/src/context/SessionRecorderContext.tsx +138 -0
  284. package/src/context/SessionRecorderStore.ts +21 -0
  285. package/src/context/useSessionRecorderStore.ts +27 -0
  286. package/src/context/useStoreSelector.ts +34 -0
  287. package/src/index.ts +10 -0
  288. package/src/native/SessionRecorderNative.ts +164 -0
  289. package/src/native/index.ts +1 -0
  290. package/src/otel/helpers.ts +274 -0
  291. package/src/otel/index.ts +135 -0
  292. package/src/otel/instrumentations/index.ts +115 -0
  293. package/src/patch/index.ts +1 -0
  294. package/src/patch/xhr.ts +149 -0
  295. package/src/recorder/eventExporter.ts +155 -0
  296. package/src/recorder/gestureRecorder.ts +681 -0
  297. package/src/recorder/index.ts +190 -0
  298. package/src/recorder/navigationTracker.ts +245 -0
  299. package/src/recorder/screenRecorder.ts +549 -0
  300. package/src/services/api.service.ts +215 -0
  301. package/src/services/network.service.ts +182 -0
  302. package/src/services/screenMaskingService.ts +122 -0
  303. package/src/services/storage.service.ts +219 -0
  304. package/src/session-recorder.ts +591 -0
  305. package/src/types/configs.ts +96 -0
  306. package/src/types/expo-constants.d.ts +7 -0
  307. package/src/types/index.ts +29 -0
  308. package/src/types/session-recorder.ts +386 -0
  309. package/src/types/session.ts +65 -0
  310. package/src/utils/app-metadata.ts +31 -0
  311. package/src/utils/constants.optional.expo.ts +5 -0
  312. package/src/utils/constants.optional.ts +16 -0
  313. package/src/utils/createStore.ts +29 -0
  314. package/src/utils/index.ts +8 -0
  315. package/src/utils/logger.ts +216 -0
  316. package/src/utils/platform.ts +370 -0
  317. package/src/utils/request-utils.ts +61 -0
  318. package/src/utils/rrweb-events.ts +316 -0
  319. package/src/utils/session.ts +19 -0
  320. package/src/utils/shallowEqual.ts +14 -0
  321. package/src/utils/time.ts +17 -0
  322. package/src/utils/type-utils.ts +75 -0
  323. package/src/version.ts +1 -0
  324. package/REACT_NATIVE_SETUP.md +0 -91
  325. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  326. package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  327. package/android/gradlew +0 -249
  328. package/android/gradlew.bat +0 -92
  329. package/copy-react-native-dist.sh +0 -56
  330. package/dist/components/ScreenRecorderView/ScreenRecorderView.d.ts +0 -5
  331. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +0 -1
  332. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +0 -1
  333. package/dist/components/ScreenRecorderView/index.js +0 -1
  334. package/dist/components/ScreenRecorderView/index.js.map +0 -1
  335. package/dist/components/SessionRecorderWidget/ErrorBanner.js +0 -1
  336. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +0 -1
  337. package/dist/components/SessionRecorderWidget/FinalPopover.js +0 -1
  338. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +0 -1
  339. package/dist/components/SessionRecorderWidget/FloatingButton.js +0 -1
  340. package/dist/components/SessionRecorderWidget/FloatingButton.js.map +0 -1
  341. package/dist/components/SessionRecorderWidget/InitialPopover.js +0 -1
  342. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +0 -1
  343. package/dist/components/SessionRecorderWidget/ModalContainer.js +0 -1
  344. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +0 -1
  345. package/dist/components/SessionRecorderWidget/ModalHeader.js +0 -1
  346. package/dist/components/SessionRecorderWidget/ModalHeader.js.map +0 -1
  347. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +0 -1
  348. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +0 -1
  349. package/dist/components/SessionRecorderWidget/icons.js +0 -1
  350. package/dist/components/SessionRecorderWidget/icons.js.map +0 -1
  351. package/dist/components/SessionRecorderWidget/index.js +0 -1
  352. package/dist/components/SessionRecorderWidget/index.js.map +0 -1
  353. package/dist/components/SessionRecorderWidget/styles.js +0 -1
  354. package/dist/components/SessionRecorderWidget/styles.js.map +0 -1
  355. package/dist/components/index.js +0 -1
  356. package/dist/components/index.js.map +0 -1
  357. package/dist/config/constants.js +0 -1
  358. package/dist/config/constants.js.map +0 -1
  359. package/dist/config/defaults.js +0 -1
  360. package/dist/config/defaults.js.map +0 -1
  361. package/dist/config/index.js +0 -1
  362. package/dist/config/index.js.map +0 -1
  363. package/dist/config/masking.d.ts +0 -2
  364. package/dist/config/masking.js +0 -1
  365. package/dist/config/masking.js.map +0 -1
  366. package/dist/config/session-recorder.d.ts +0 -2
  367. package/dist/config/session-recorder.js +0 -1
  368. package/dist/config/session-recorder.js.map +0 -1
  369. package/dist/config/validators.js +0 -1
  370. package/dist/config/validators.js.map +0 -1
  371. package/dist/config/widget.js +0 -1
  372. package/dist/config/widget.js.map +0 -1
  373. package/dist/context/SessionRecorderContext.js +0 -1
  374. package/dist/context/SessionRecorderContext.js.map +0 -1
  375. package/dist/context/SessionRecorderStore.js +0 -1
  376. package/dist/context/SessionRecorderStore.js.map +0 -1
  377. package/dist/context/useSessionRecorderStore.js +0 -1
  378. package/dist/context/useSessionRecorderStore.js.map +0 -1
  379. package/dist/context/useStoreSelector.js +0 -1
  380. package/dist/context/useStoreSelector.js.map +0 -1
  381. package/dist/index.js +0 -1
  382. package/dist/index.js.map +0 -1
  383. package/dist/native/GestureRecorderNative.d.ts +0 -57
  384. package/dist/native/GestureRecorderNative.js +0 -1
  385. package/dist/native/GestureRecorderNative.js.map +0 -1
  386. package/dist/native/GestureRecorderNativeTurboSpec.d.ts +0 -31
  387. package/dist/native/GestureRecorderNativeTurboSpec.js +0 -1
  388. package/dist/native/GestureRecorderNativeTurboSpec.js.map +0 -1
  389. package/dist/native/SessionRecorderNative.js +0 -1
  390. package/dist/native/SessionRecorderNative.js.map +0 -1
  391. package/dist/native/SessionRecorderNativeTurboSpec.d.ts +0 -17
  392. package/dist/native/SessionRecorderNativeTurboSpec.js +0 -1
  393. package/dist/native/SessionRecorderNativeTurboSpec.js.map +0 -1
  394. package/dist/native/index.js +0 -1
  395. package/dist/native/index.js.map +0 -1
  396. package/dist/otel/helpers.js +0 -1
  397. package/dist/otel/helpers.js.map +0 -1
  398. package/dist/otel/index.js +0 -1
  399. package/dist/otel/index.js.map +0 -1
  400. package/dist/otel/instrumentations/index.js +0 -1
  401. package/dist/otel/instrumentations/index.js.map +0 -1
  402. package/dist/patch/index.d.ts +0 -1
  403. package/dist/patch/index.js +0 -1
  404. package/dist/patch/index.js.map +0 -1
  405. package/dist/patch/xhr.js +0 -1
  406. package/dist/patch/xhr.js.map +0 -1
  407. package/dist/recorder/eventExporter.js +0 -1
  408. package/dist/recorder/eventExporter.js.map +0 -1
  409. package/dist/recorder/gestureRecorder.js +0 -1
  410. package/dist/recorder/gestureRecorder.js.map +0 -1
  411. package/dist/recorder/index.js +0 -1
  412. package/dist/recorder/index.js.map +0 -1
  413. package/dist/recorder/navigationTracker.js +0 -1
  414. package/dist/recorder/navigationTracker.js.map +0 -1
  415. package/dist/recorder/screenRecorder.js +0 -1
  416. package/dist/recorder/screenRecorder.js.map +0 -1
  417. package/dist/services/api.service.js +0 -1
  418. package/dist/services/api.service.js.map +0 -1
  419. package/dist/services/network.service.js +0 -1
  420. package/dist/services/network.service.js.map +0 -1
  421. package/dist/services/screenMaskingService.js +0 -1
  422. package/dist/services/screenMaskingService.js.map +0 -1
  423. package/dist/services/storage.service.js +0 -1
  424. package/dist/services/storage.service.js.map +0 -1
  425. package/dist/session-recorder.js +0 -1
  426. package/dist/session-recorder.js.map +0 -1
  427. package/dist/types/configs.js +0 -1
  428. package/dist/types/configs.js.map +0 -1
  429. package/dist/types/index.js +0 -1
  430. package/dist/types/index.js.map +0 -1
  431. package/dist/types/session-recorder.js +0 -1
  432. package/dist/types/session-recorder.js.map +0 -1
  433. package/dist/types/session.js +0 -1
  434. package/dist/types/session.js.map +0 -1
  435. package/dist/utils/app-metadata.js +0 -1
  436. package/dist/utils/app-metadata.js.map +0 -1
  437. package/dist/utils/constants.optional.expo.js +0 -1
  438. package/dist/utils/constants.optional.expo.js.map +0 -1
  439. package/dist/utils/constants.optional.js +0 -1
  440. package/dist/utils/constants.optional.js.map +0 -1
  441. package/dist/utils/createStore.js +0 -1
  442. package/dist/utils/createStore.js.map +0 -1
  443. package/dist/utils/index.js +0 -1
  444. package/dist/utils/index.js.map +0 -1
  445. package/dist/utils/logger.js +0 -1
  446. package/dist/utils/logger.js.map +0 -1
  447. package/dist/utils/platform.js +0 -1
  448. package/dist/utils/platform.js.map +0 -1
  449. package/dist/utils/request-utils.js +0 -1
  450. package/dist/utils/request-utils.js.map +0 -1
  451. package/dist/utils/rrweb-events.js +0 -1
  452. package/dist/utils/rrweb-events.js.map +0 -1
  453. package/dist/utils/session.js +0 -1
  454. package/dist/utils/session.js.map +0 -1
  455. package/dist/utils/shallowEqual.js +0 -1
  456. package/dist/utils/shallowEqual.js.map +0 -1
  457. package/dist/utils/time.js +0 -1
  458. package/dist/utils/time.js.map +0 -1
  459. package/dist/utils/type-utils.js +0 -1
  460. package/dist/utils/type-utils.js.map +0 -1
  461. package/dist/version.js +0 -1
  462. package/dist/version.js.map +0 -1
  463. package/docs/AUTO_METADATA_DETECTION.md +0 -108
  464. package/react-native.config.js +0 -13
  465. /package/{dist/components/ScreenRecorderView/index.d.ts → src/components/ScreenRecorderView/index.ts} +0 -0
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+
3
+ import { trace, SpanStatusCode } from '@opentelemetry/api';
4
+ import { Dimensions, Platform } from 'react-native';
5
+ import { createRecordingMetaEvent, createFullSnapshotEvent, createIncrementalSnapshotWithImageUpdate as createIncrementalSnapshotUtil, generateScreenHash, logger } from "../utils/index.js";
6
+ import { screenMaskingService } from "../services/screenMaskingService.js";
7
+ import { captureRef } from 'react-native-view-shot';
8
+ const isWeb = Platform.OS === 'web';
9
+ export class ScreenRecorder {
10
+ isRecording = false;
11
+ events = [];
12
+ captureCount = 0;
13
+ maxCaptures = 100; // Limit captures to prevent memory issues
14
+ captureQuality = 0.2;
15
+ captureScale = 0.66;
16
+ captureFormat = 'jpg';
17
+ screenDimensions = null;
18
+ nodeIdCounter = 1;
19
+ viewShotRef = null;
20
+ lastScreenCapture = null;
21
+ lastScreenHash = null;
22
+ enableChangeDetection = true;
23
+ hashSampleSize = 100;
24
+ currentImageNodeId = null;
25
+ init(config, eventRecorder) {
26
+ this.config = config;
27
+ this.eventRecorder = eventRecorder;
28
+ this._getScreenDimensions();
29
+
30
+ // Initialize masking configuration
31
+ this.maskingConfig = {
32
+ enabled: true,
33
+ ...this.config.masking
34
+ };
35
+
36
+ // Update the masking service configuration
37
+ screenMaskingService.updateConfig(this.maskingConfig);
38
+ }
39
+ start() {
40
+ this.isRecording = true;
41
+ this.events = [];
42
+ this.captureCount = 0;
43
+ this.lastScreenCapture = null;
44
+ this.lastScreenHash = null;
45
+ this.currentImageNodeId = null; // Reset image node ID for new session
46
+ logger.info('ScreenRecorder', 'Screen recording started');
47
+ // Emit screen recording started meta event
48
+
49
+ this.recordEvent(createRecordingMetaEvent());
50
+ this._startPeriodicCapture();
51
+
52
+ // Capture initial screen immediately
53
+ this._captureScreen();
54
+
55
+ // Screen recording started
56
+ }
57
+ stop() {
58
+ this.isRecording = false;
59
+ this._stopPeriodicCapture();
60
+ // Screen recording stopped
61
+ }
62
+ pause() {
63
+ this.isRecording = false;
64
+ this._stopPeriodicCapture();
65
+ }
66
+ resume() {
67
+ this.isRecording = true;
68
+ // this._startPeriodicCapture()
69
+ }
70
+ _getScreenDimensions() {
71
+ try {
72
+ this.screenDimensions = Dimensions.get('window');
73
+ } catch (error) {
74
+ // Failed to get screen dimensions - silently continue
75
+ this.screenDimensions = {
76
+ width: 375,
77
+ height: 667
78
+ }; // Default fallback
79
+ }
80
+ }
81
+ _startPeriodicCapture() {
82
+ if (this.captureInterval) {
83
+ clearInterval(this.captureInterval);
84
+ }
85
+
86
+ // Capture screen every 5 seconds (reduced frequency)
87
+ this.captureInterval = setInterval(() => {
88
+ this._captureScreen();
89
+ }, 5000);
90
+ }
91
+ _stopPeriodicCapture() {
92
+ if (this.captureInterval) {
93
+ clearInterval(this.captureInterval);
94
+ this.captureInterval = undefined;
95
+ }
96
+ }
97
+ async _captureScreen(timestamp) {
98
+ if (!this.isRecording || this.captureCount >= this.maxCaptures) return;
99
+ try {
100
+ const base64Image = await this._captureScreenBase64();
101
+ if (base64Image) {
102
+ // Check if screen has changed by comparing with previous capture
103
+ const hasChanged = this.enableChangeDetection ? this._hasScreenChanged(base64Image) : true;
104
+ if (hasChanged) {
105
+ // Use incremental snapshot if we have an existing image node, otherwise create full snapshot
106
+ if (this.currentImageNodeId !== null && this.lastScreenCapture) {
107
+ const success = this.updateScreenWithIncrementalSnapshot(base64Image, timestamp);
108
+ if (!success) {
109
+ // Fallback to full snapshot if incremental update fails
110
+ this._createAndEmitFullSnapshotEvent(base64Image, timestamp);
111
+ }
112
+ } else {
113
+ // First capture or no existing image node - create full snapshot
114
+ this._createAndEmitFullSnapshotEvent(base64Image, timestamp);
115
+ }
116
+ this.lastScreenCapture = base64Image;
117
+ this.lastScreenHash = this._generateScreenHash(base64Image);
118
+ this.captureCount++;
119
+ }
120
+ }
121
+ } catch (error) {
122
+ this._recordScreenCaptureError(error);
123
+ }
124
+ }
125
+ async _captureScreenBase64() {
126
+ try {
127
+ // Check if we're on web platform
128
+ if (isWeb) {
129
+ logger.warn('ScreenRecorder', 'Screen capture not available on web platform');
130
+ return null;
131
+ }
132
+
133
+ // Try native masking first if available
134
+ if (screenMaskingService.isScreenMaskingAvailable()) {
135
+ logger.info('ScreenRecorder', 'Using native masking for screen capture');
136
+ const maskedImage = await screenMaskingService.captureMaskedScreen({
137
+ quality: this.captureQuality,
138
+ scale: this.captureScale
139
+ });
140
+ if (maskedImage) {
141
+ return maskedImage;
142
+ }
143
+ logger.warn('ScreenRecorder', 'Native masking failed, falling back to view-shot');
144
+ }
145
+
146
+ // Fallback to react-native-view-shot
147
+ if (!this.viewShotRef) {
148
+ logger.warn('ScreenRecorder', 'ViewShot ref not available for screen capture');
149
+ return null;
150
+ }
151
+
152
+ // Check if captureRef is available
153
+ if (!captureRef) {
154
+ logger.warn('ScreenRecorder', 'react-native-view-shot not available');
155
+ return null;
156
+ }
157
+
158
+ // Capture the screen using react-native-view-shot
159
+ const result = await captureRef(this.viewShotRef, {
160
+ format: this.captureFormat,
161
+ quality: this.captureQuality,
162
+ result: 'base64'
163
+ });
164
+ return result;
165
+ } catch (error) {
166
+ logger.error('ScreenRecorder', 'Failed to capture screen. Make sure react-native-view-shot is properly installed and linked:', error);
167
+ return null;
168
+ }
169
+ }
170
+ _createAndEmitFullSnapshotEvent(base64Image, timestamp) {
171
+ if (!this.screenDimensions) return;
172
+
173
+ // Use the new createFullSnapshot method
174
+ const fullSnapshotEvent = this.createFullSnapshot(base64Image, timestamp);
175
+ this.recordEvent(fullSnapshotEvent);
176
+ }
177
+
178
+ /**
179
+ * Create a full snapshot event with the given base64 image
180
+ * @param base64Image - Base64 encoded image data
181
+ * @param timestamp - Optional timestamp to use for the event
182
+ * @returns Full snapshot event
183
+ */
184
+ createFullSnapshot(base64Image, timestamp) {
185
+ if (!this.screenDimensions) {
186
+ throw new Error('Screen dimensions not available');
187
+ }
188
+ const {
189
+ width,
190
+ height
191
+ } = this.screenDimensions;
192
+ this.nodeIdCounter = 1;
193
+
194
+ // Use utility function to create full snapshot event
195
+ const fullSnapshotEvent = createFullSnapshotEvent(base64Image, width, height, this.captureFormat, {
196
+ current: this.nodeIdCounter
197
+ }, timestamp);
198
+
199
+ // Store the image node ID for future incremental updates
200
+ // The image node ID is the first node created (after the document)
201
+ this.currentImageNodeId = 0; // First element node is the image
202
+
203
+ return fullSnapshotEvent;
204
+ }
205
+
206
+ /**
207
+ * Create an incremental snapshot event with mutation data to update image src
208
+ * @param base64Image - New base64 encoded image data
209
+ * @param captureFormat - Image format (png, jpg, etc.)
210
+ * @param timestamp - Optional timestamp to use for the event
211
+ * @returns Incremental snapshot event with mutation data
212
+ */
213
+ createIncrementalSnapshotWithImageUpdate(base64Image, captureFormat, timestamp) {
214
+ return createIncrementalSnapshotUtil(base64Image, captureFormat || this.captureFormat, timestamp);
215
+ }
216
+
217
+ /**
218
+ * Update the screen with a new image using incremental snapshot
219
+ * @param base64Image - New base64 encoded image data
220
+ * @param timestamp - Optional timestamp to use for the event
221
+ * @returns true if update was successful, false otherwise
222
+ */
223
+ updateScreenWithIncrementalSnapshot(base64Image, timestamp) {
224
+ if (this.currentImageNodeId === null) {
225
+ logger.warn('ScreenRecorder', 'No image node ID available for incremental update');
226
+ return false;
227
+ }
228
+ const incrementalEvent = this.createIncrementalSnapshotWithImageUpdate(base64Image, 'jpg', timestamp);
229
+ this.recordEvent(incrementalEvent);
230
+ return true;
231
+ }
232
+
233
+ /**
234
+ * Force a full snapshot (useful when screen dimensions change or for debugging)
235
+ * @param base64Image - Base64 encoded image data
236
+ */
237
+ forceFullSnapshot(base64Image) {
238
+ this._createAndEmitFullSnapshotEvent(base64Image);
239
+ this.lastScreenCapture = base64Image;
240
+ this.lastScreenHash = this._generateScreenHash(base64Image);
241
+ this.captureCount++;
242
+ }
243
+
244
+ /**
245
+ * Check if the screen has changed by comparing with the previous capture
246
+ * @param currentBase64 - Current screen capture as base64
247
+ * @returns true if screen has changed, false otherwise
248
+ */
249
+ _hasScreenChanged(currentBase64) {
250
+ // If this is the first capture, consider it changed
251
+ if (!this.lastScreenCapture) {
252
+ return true;
253
+ }
254
+
255
+ // Generate hash for current capture
256
+ const currentHash = this._generateScreenHash(currentBase64);
257
+
258
+ // Compare with previous hash
259
+ return currentHash !== this.lastScreenHash;
260
+ }
261
+
262
+ /**
263
+ * Generate a simple hash for screen comparison
264
+ * This is a lightweight hash that focuses on the beginning and end of the base64 string
265
+ * to detect changes without doing a full comparison
266
+ * @param base64Image - Base64 encoded image
267
+ * @returns Hash string for comparison
268
+ */
269
+ _generateScreenHash(base64Image) {
270
+ return generateScreenHash(base64Image, this.hashSampleSize);
271
+ }
272
+ _sendEvent(_event) {
273
+ // Screen event recorded
274
+ // Send event to backend or store locally
275
+ }
276
+ _recordOpenTelemetrySpan(event) {
277
+ try {
278
+ const span = trace.getTracer('screen').startSpan(`Screen.${event.type}`, {
279
+ attributes: {
280
+ 'screen.type': event.type,
281
+ 'screen.timestamp': event.timestamp,
282
+ 'screen.platform': 'react-native'
283
+ }
284
+ });
285
+ if (event.metadata) {
286
+ Object.entries(event.metadata).forEach(([key, value]) => {
287
+ span.setAttribute(`screen.metadata.${key}`, String(value));
288
+ });
289
+ }
290
+ span.setStatus({
291
+ code: SpanStatusCode.OK
292
+ });
293
+ span.end();
294
+ } catch (error) {
295
+ // Failed to record OpenTelemetry span for screen - silently continue
296
+ }
297
+ }
298
+ _recordScreenCaptureError(error) {
299
+ try {
300
+ const span = trace.getTracer('screen').startSpan('Screen.capture.error', {
301
+ attributes: {
302
+ 'screen.error': true,
303
+ 'screen.error.type': error.name,
304
+ 'screen.error.message': error.message,
305
+ 'screen.timestamp': Date.now()
306
+ }
307
+ });
308
+ span.setStatus({
309
+ code: SpanStatusCode.ERROR,
310
+ message: error.message
311
+ });
312
+ span.recordException(error);
313
+ span.end();
314
+ } catch (spanError) {
315
+ // Failed to record error span - silently continue
316
+ }
317
+ }
318
+ async captureSpecificElement(elementRef, _options) {
319
+ try {
320
+ if (isWeb || !captureRef) {
321
+ logger.warn('ScreenRecorder', 'Element capture not available on web platform');
322
+ return null;
323
+ }
324
+ return await captureRef(elementRef);
325
+ } catch (error) {
326
+ // Failed to capture specific element - silently continue
327
+ return null;
328
+ }
329
+ }
330
+
331
+ // Configuration methods
332
+ setCaptureInterval(intervalMs) {
333
+ if (this.captureInterval) {
334
+ clearInterval(this.captureInterval);
335
+ }
336
+ if (this.isRecording) {
337
+ this.captureInterval = setInterval(() => {
338
+ this._captureScreen();
339
+ }, intervalMs);
340
+ }
341
+ }
342
+ setCaptureQuality(quality) {
343
+ this.captureQuality = Math.max(0.1, Math.min(1.0, quality));
344
+ }
345
+ setCaptureFormat(format) {
346
+ this.captureFormat = format;
347
+ }
348
+ setMaxCaptures(max) {
349
+ this.maxCaptures = Math.max(1, max);
350
+ }
351
+
352
+ /**
353
+ * Enable or disable change detection
354
+ * @param enabled - Whether to enable change detection
355
+ */
356
+ setChangeDetection(enabled) {
357
+ this.enableChangeDetection = enabled;
358
+ }
359
+
360
+ /**
361
+ * Set the hash sample size for change detection
362
+ * @param size - Number of characters to sample from each part of the image
363
+ */
364
+ setHashSampleSize(size) {
365
+ this.hashSampleSize = Math.max(10, Math.min(1000, size));
366
+ }
367
+
368
+ // Performance monitoring
369
+ recordScreenPerformance(screenName, loadTime) {
370
+ const event = {
371
+ screenName,
372
+ type: 'screenCapture',
373
+ timestamp: Date.now(),
374
+ metadata: {
375
+ screenName,
376
+ loadTime,
377
+ performance: 'monitoring',
378
+ captureCount: this.captureCount
379
+ }
380
+ };
381
+ this.events.push(event);
382
+ this._sendEvent(event);
383
+ this._recordOpenTelemetrySpan(event);
384
+ this.events.push(event);
385
+ this._sendEvent(event);
386
+ this._recordOpenTelemetrySpan(event);
387
+ }
388
+
389
+ // Error tracking
390
+ recordScreenError(error, screenName) {
391
+ const event = {
392
+ screenName: screenName || 'unknown',
393
+ type: 'screenCapture',
394
+ timestamp: Date.now(),
395
+ metadata: {
396
+ error: true,
397
+ errorType: error.name,
398
+ errorMessage: error.message,
399
+ screenName,
400
+ captureCount: this.captureCount
401
+ }
402
+ };
403
+ this.events.push(event);
404
+ this._sendEvent(event);
405
+ this._recordOpenTelemetrySpan(event);
406
+ this.events.push(event);
407
+ this._sendEvent(event);
408
+ this._recordScreenCaptureError(error);
409
+ }
410
+
411
+ // Get recorded events
412
+ getEvents() {
413
+ return [...this.events];
414
+ }
415
+
416
+ // Clear events
417
+ clearEvents() {
418
+ this.events = [];
419
+ this.captureCount = 0;
420
+ }
421
+
422
+ // Get screen capture statistics
423
+ getScreenStats() {
424
+ const stats = {
425
+ totalCaptures: this.captureCount,
426
+ totalEvents: this.events.length,
427
+ averageCaptureTime: 0,
428
+ successRate: 0
429
+ };
430
+ if (this.events.length > 0) {
431
+ const captureTimes = this.events.map(event => event.metadata?.captureTime || 0).filter(time => time > 0);
432
+ if (captureTimes.length > 0) {
433
+ stats.averageCaptureTime = captureTimes.reduce((a, b) => a + b, 0) / captureTimes.length;
434
+ }
435
+ const successfulCaptures = this.events.filter(event => event.dataUrl).length;
436
+ stats.successRate = successfulCaptures / this.events.length * 100;
437
+ }
438
+ return stats;
439
+ }
440
+
441
+ // Get recording status
442
+ isRecordingEnabled() {
443
+ return this.isRecording;
444
+ }
445
+
446
+ // Get current configuration
447
+ getConfiguration() {
448
+ return {
449
+ captureInterval: this.captureInterval ? 2000 : 0,
450
+ // Default 5 seconds
451
+ captureQuality: this.captureQuality,
452
+ captureFormat: this.captureFormat,
453
+ maxCaptures: this.maxCaptures,
454
+ screenDimensions: this.screenDimensions
455
+ };
456
+ }
457
+
458
+ // Shutdown
459
+ shutdown() {
460
+ this.stop();
461
+ this.clearEvents();
462
+ // Screen recorder shutdown
463
+ }
464
+
465
+ /**
466
+ * Set the viewshot ref for screen capture
467
+ * @param ref - React Native View ref for screen capture
468
+ */
469
+ setViewShotRef(ref) {
470
+ this.viewShotRef = ref;
471
+ }
472
+
473
+ /**
474
+ * Force capture screen (useful after touch interactions)
475
+ * This bypasses the change detection and always captures
476
+ * @param timestamp - Optional timestamp to use for the capture event
477
+ */
478
+ forceCapture(timestamp) {
479
+ if (!this.isRecording) {
480
+ return;
481
+ }
482
+ this._captureScreen(timestamp);
483
+ }
484
+
485
+ /**
486
+ * Record an rrweb event
487
+ * @param event - The rrweb event to record
488
+ */
489
+ recordEvent(event) {
490
+ if (this.eventRecorder) {
491
+ this.eventRecorder.recordEvent(event);
492
+ }
493
+ }
494
+ }
495
+ //# sourceMappingURL=screenRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["trace","SpanStatusCode","Dimensions","Platform","createRecordingMetaEvent","createFullSnapshotEvent","createIncrementalSnapshotWithImageUpdate","createIncrementalSnapshotUtil","generateScreenHash","logger","screenMaskingService","captureRef","isWeb","OS","ScreenRecorder","isRecording","events","captureCount","maxCaptures","captureQuality","captureScale","captureFormat","screenDimensions","nodeIdCounter","viewShotRef","lastScreenCapture","lastScreenHash","enableChangeDetection","hashSampleSize","currentImageNodeId","init","config","eventRecorder","_getScreenDimensions","maskingConfig","enabled","masking","updateConfig","start","info","recordEvent","_startPeriodicCapture","_captureScreen","stop","_stopPeriodicCapture","pause","resume","get","error","width","height","captureInterval","clearInterval","setInterval","undefined","timestamp","base64Image","_captureScreenBase64","hasChanged","_hasScreenChanged","success","updateScreenWithIncrementalSnapshot","_createAndEmitFullSnapshotEvent","_generateScreenHash","_recordScreenCaptureError","warn","isScreenMaskingAvailable","maskedImage","captureMaskedScreen","quality","scale","result","format","fullSnapshotEvent","createFullSnapshot","Error","current","incrementalEvent","forceFullSnapshot","currentBase64","currentHash","_sendEvent","_event","_recordOpenTelemetrySpan","event","span","getTracer","startSpan","type","attributes","metadata","Object","entries","forEach","key","value","setAttribute","String","setStatus","code","OK","end","name","message","Date","now","ERROR","recordException","spanError","captureSpecificElement","elementRef","_options","setCaptureInterval","intervalMs","setCaptureQuality","Math","max","min","setCaptureFormat","setMaxCaptures","setChangeDetection","setHashSampleSize","size","recordScreenPerformance","screenName","loadTime","performance","push","recordScreenError","errorType","errorMessage","getEvents","clearEvents","getScreenStats","stats","totalCaptures","totalEvents","length","averageCaptureTime","successRate","captureTimes","map","captureTime","filter","time","reduce","a","b","successfulCaptures","dataUrl","isRecordingEnabled","getConfiguration","shutdown","setViewShotRef","ref","forceCapture"],"sourceRoot":"../../../src","sources":["recorder/screenRecorder.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ export class ApiService {
4
+ baseUrl = 'https://api.multiplayer.app';
5
+ constructor() {
6
+ this.config = {
7
+ apiKey: '',
8
+ apiBaseUrl: '',
9
+ exporterEndpoint: ''
10
+ };
11
+ }
12
+ init(config) {
13
+ this.config = {
14
+ ...this.config,
15
+ ...config
16
+ };
17
+ if (config.apiBaseUrl) {
18
+ this.baseUrl = config.apiBaseUrl;
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Update the API service configuration
24
+ * @param config - Partial configuration to update
25
+ */
26
+ updateConfigs(config) {
27
+ if (this.config) {
28
+ this.config = {
29
+ ...this.config,
30
+ ...config
31
+ };
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Set the API key
37
+ * @param apiKey - The API key to set
38
+ */
39
+ setApiKey(apiKey) {
40
+ if (this.config) {
41
+ this.config.apiKey = apiKey;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Make a request to the session debugger API
47
+ * @param path - API endpoint path (relative to the base URL)
48
+ * @param method - HTTP method (GET, POST, PATCH, etc.)
49
+ * @param body - request payload
50
+ * @param signal - AbortSignal to set request's signal
51
+ */
52
+ async makeRequest(path, method, body, signal) {
53
+ const url = `${this.baseUrl}/v0/radar${path}`;
54
+ const params = {
55
+ method,
56
+ body: body ? JSON.stringify(body) : null,
57
+ headers: {
58
+ 'Content-Type': 'application/json',
59
+ ...(this.config?.apiKey && {
60
+ 'X-Api-Key': this.config.apiKey
61
+ })
62
+ }
63
+ };
64
+ try {
65
+ const response = await fetch(url, {
66
+ ...params,
67
+ signal
68
+ });
69
+ if (!response.ok) {
70
+ throw new Error('Network response was not ok: ' + response.statusText);
71
+ }
72
+ if (response.status === 204) {
73
+ return null;
74
+ }
75
+ return await response.json();
76
+ } catch (error) {
77
+ if (error?.name === 'AbortError') {
78
+ throw new Error('Request aborted');
79
+ }
80
+ throw new Error('Error making request: ' + error.message);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Start a new debug session
86
+ * @param request - Session start request data
87
+ * @param signal - Optional AbortSignal for request cancellation
88
+ */
89
+ async startSession(request, signal) {
90
+ try {
91
+ const res = await this.makeRequest('/debug-sessions/start', 'POST', request, signal);
92
+ return res;
93
+ } catch (error) {
94
+ throw error;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Stop an active debug session
100
+ * @param sessionId - ID of the session to stop
101
+ * @param request - Session stop request data
102
+ */
103
+ async stopSession(sessionId, request) {
104
+ return this.makeRequest(`/debug-sessions/${sessionId}/stop`, 'PATCH', request);
105
+ }
106
+
107
+ /**
108
+ * Cancel an active debug session
109
+ * @param sessionId - ID of the session to cancel
110
+ */
111
+ async cancelSession(sessionId) {
112
+ return this.makeRequest(`/debug-sessions/${sessionId}/cancel`, 'DELETE');
113
+ }
114
+
115
+ /**
116
+ * Start a new continuous debug session
117
+ * @param request - Session start request data
118
+ * @param signal - Optional AbortSignal for request cancellation
119
+ */
120
+ async startContinuousDebugSession(request, signal) {
121
+ return this.makeRequest('/continuous-debug-sessions/start', 'POST', request, signal);
122
+ }
123
+
124
+ /**
125
+ * Save a continuous debug session
126
+ * @param sessionId - ID of the session to save
127
+ * @param request - Session save request data
128
+ * @param signal - Optional AbortSignal for request cancellation
129
+ */
130
+ async saveContinuousDebugSession(sessionId, request, signal) {
131
+ return this.makeRequest(`/continuous-debug-sessions/${sessionId}/save`, 'POST', request, signal);
132
+ }
133
+
134
+ /**
135
+ * Stop an active continuous debug session
136
+ * @param sessionId - ID of the session to stop
137
+ */
138
+ async stopContinuousDebugSession(sessionId) {
139
+ return this.makeRequest(`/continuous-debug-sessions/${sessionId}/cancel`, 'DELETE');
140
+ }
141
+
142
+ /**
143
+ * Check debug session should be started remotely
144
+ */
145
+ async checkRemoteSession(requestBody, signal) {
146
+ return this.makeRequest('/remote-debug-session/check', 'POST', requestBody, signal);
147
+ }
148
+ }
149
+ //# sourceMappingURL=api.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ApiService","baseUrl","constructor","config","apiKey","apiBaseUrl","exporterEndpoint","init","updateConfigs","setApiKey","makeRequest","path","method","body","signal","url","params","JSON","stringify","headers","response","fetch","ok","Error","statusText","status","json","error","name","message","startSession","request","res","stopSession","sessionId","cancelSession","startContinuousDebugSession","saveContinuousDebugSession","stopContinuousDebugSession","checkRemoteSession","requestBody"],"sourceRoot":"../../../src","sources":["services/api.service.ts"],"mappings":"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","ignoreList":[]}