@salve-software/salvetron-react-native 1.0.1

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 (285) hide show
  1. package/LICENSE +21 -0
  2. package/NitroRnTuiSdk.podspec +31 -0
  3. package/README.md +90 -0
  4. package/android/CMakeLists.txt +32 -0
  5. package/android/build.gradle +148 -0
  6. package/android/fix-prefab.gradle +51 -0
  7. package/android/gradle.properties +5 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  10. package/android/src/main/java/com/margelo/nitro/rntuisdk/HybridRnTuiSdk.kt +235 -0
  11. package/android/src/main/java/com/margelo/nitro/rntuisdk/PerformanceMonitor.kt +260 -0
  12. package/android/src/main/java/com/margelo/nitro/rntuisdk/RnTuiSdkPackage.kt +18 -0
  13. package/ios/Bridge.h +8 -0
  14. package/ios/HybridRnTuiSdk.swift +245 -0
  15. package/ios/PerformanceMonitor.swift +223 -0
  16. package/lib/commonjs/index.js +17 -0
  17. package/lib/commonjs/index.js.map +1 -0
  18. package/lib/commonjs/library/client/constants.js +33 -0
  19. package/lib/commonjs/library/client/constants.js.map +1 -0
  20. package/lib/commonjs/library/client/index.js +28 -0
  21. package/lib/commonjs/library/client/index.js.map +1 -0
  22. package/lib/commonjs/library/client/salvetron-client.js +363 -0
  23. package/lib/commonjs/library/client/salvetron-client.js.map +1 -0
  24. package/lib/commonjs/library/device/device-handler.js +80 -0
  25. package/lib/commonjs/library/device/device-handler.js.map +1 -0
  26. package/lib/commonjs/library/device/index.js +9 -0
  27. package/lib/commonjs/library/device/index.js.map +1 -0
  28. package/lib/commonjs/library/device/types.js +2 -0
  29. package/lib/commonjs/library/device/types.js.map +1 -0
  30. package/lib/commonjs/library/device/utils/generate-uuid.js +14 -0
  31. package/lib/commonjs/library/device/utils/generate-uuid.js.map +1 -0
  32. package/lib/commonjs/library/index.js +136 -0
  33. package/lib/commonjs/library/index.js.map +1 -0
  34. package/lib/commonjs/library/interceptors/index.js +11 -0
  35. package/lib/commonjs/library/interceptors/index.js.map +1 -0
  36. package/lib/commonjs/library/interceptors/js-console.js +88 -0
  37. package/lib/commonjs/library/interceptors/js-console.js.map +1 -0
  38. package/lib/commonjs/library/interceptors/xhr.js +74 -0
  39. package/lib/commonjs/library/interceptors/xhr.js.map +1 -0
  40. package/lib/commonjs/library/network-handler/index.js +17 -0
  41. package/lib/commonjs/library/network-handler/index.js.map +1 -0
  42. package/lib/commonjs/library/network-handler/network-handler.js +103 -0
  43. package/lib/commonjs/library/network-handler/network-handler.js.map +1 -0
  44. package/lib/commonjs/library/network-handler/types.js +6 -0
  45. package/lib/commonjs/library/network-handler/types.js.map +1 -0
  46. package/lib/commonjs/library/network-handler/utils/generate-request-id.js +13 -0
  47. package/lib/commonjs/library/network-handler/utils/generate-request-id.js.map +1 -0
  48. package/lib/commonjs/library/network-handler/utils/index.js +41 -0
  49. package/lib/commonjs/library/network-handler/utils/index.js.map +1 -0
  50. package/lib/commonjs/library/network-handler/utils/parse-response-headers.js +26 -0
  51. package/lib/commonjs/library/network-handler/utils/parse-response-headers.js.map +1 -0
  52. package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js +18 -0
  53. package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js.map +1 -0
  54. package/lib/commonjs/library/network-handler/utils/response-to-string.js +35 -0
  55. package/lib/commonjs/library/network-handler/utils/response-to-string.js.map +1 -0
  56. package/lib/commonjs/library/network-handler/utils/should-ignore-url.js +13 -0
  57. package/lib/commonjs/library/network-handler/utils/should-ignore-url.js.map +1 -0
  58. package/lib/commonjs/library/performance-handler/index.js +13 -0
  59. package/lib/commonjs/library/performance-handler/index.js.map +1 -0
  60. package/lib/commonjs/library/performance-handler/performance-handler.js +94 -0
  61. package/lib/commonjs/library/performance-handler/performance-handler.js.map +1 -0
  62. package/lib/commonjs/library/performance-handler/types.js +6 -0
  63. package/lib/commonjs/library/performance-handler/types.js.map +1 -0
  64. package/lib/commonjs/library/project/index.js +15 -0
  65. package/lib/commonjs/library/project/index.js.map +1 -0
  66. package/lib/commonjs/library/project/project-handler.js +31 -0
  67. package/lib/commonjs/library/project/project-handler.js.map +1 -0
  68. package/lib/commonjs/library/types.js +2 -0
  69. package/lib/commonjs/library/types.js.map +1 -0
  70. package/lib/commonjs/package.json +1 -0
  71. package/lib/commonjs/specs/rn-tui-sdk.nitro.js +6 -0
  72. package/lib/commonjs/specs/rn-tui-sdk.nitro.js.map +1 -0
  73. package/lib/module/index.js +6 -0
  74. package/lib/module/index.js.map +1 -0
  75. package/lib/module/library/client/constants.js +29 -0
  76. package/lib/module/library/client/constants.js.map +1 -0
  77. package/lib/module/library/client/index.js +6 -0
  78. package/lib/module/library/client/index.js.map +1 -0
  79. package/lib/module/library/client/salvetron-client.js +359 -0
  80. package/lib/module/library/client/salvetron-client.js.map +1 -0
  81. package/lib/module/library/device/device-handler.js +75 -0
  82. package/lib/module/library/device/device-handler.js.map +1 -0
  83. package/lib/module/library/device/index.js +5 -0
  84. package/lib/module/library/device/index.js.map +1 -0
  85. package/lib/module/library/device/types.js +2 -0
  86. package/lib/module/library/device/types.js.map +1 -0
  87. package/lib/module/library/device/utils/generate-uuid.js +10 -0
  88. package/lib/module/library/device/utils/generate-uuid.js.map +1 -0
  89. package/lib/module/library/index.js +135 -0
  90. package/lib/module/library/index.js.map +1 -0
  91. package/lib/module/library/interceptors/index.js +7 -0
  92. package/lib/module/library/interceptors/index.js.map +1 -0
  93. package/lib/module/library/interceptors/js-console.js +83 -0
  94. package/lib/module/library/interceptors/js-console.js.map +1 -0
  95. package/lib/module/library/interceptors/xhr.js +69 -0
  96. package/lib/module/library/interceptors/xhr.js.map +1 -0
  97. package/lib/module/library/network-handler/index.js +4 -0
  98. package/lib/module/library/network-handler/index.js.map +1 -0
  99. package/lib/module/library/network-handler/network-handler.js +98 -0
  100. package/lib/module/library/network-handler/network-handler.js.map +1 -0
  101. package/lib/module/library/network-handler/types.js +4 -0
  102. package/lib/module/library/network-handler/types.js.map +1 -0
  103. package/lib/module/library/network-handler/utils/generate-request-id.js +9 -0
  104. package/lib/module/library/network-handler/utils/generate-request-id.js.map +1 -0
  105. package/lib/module/library/network-handler/utils/index.js +8 -0
  106. package/lib/module/library/network-handler/utils/index.js.map +1 -0
  107. package/lib/module/library/network-handler/utils/parse-response-headers.js +22 -0
  108. package/lib/module/library/network-handler/utils/parse-response-headers.js.map +1 -0
  109. package/lib/module/library/network-handler/utils/read-blob-as-text.js +14 -0
  110. package/lib/module/library/network-handler/utils/read-blob-as-text.js.map +1 -0
  111. package/lib/module/library/network-handler/utils/response-to-string.js +31 -0
  112. package/lib/module/library/network-handler/utils/response-to-string.js.map +1 -0
  113. package/lib/module/library/network-handler/utils/should-ignore-url.js +9 -0
  114. package/lib/module/library/network-handler/utils/should-ignore-url.js.map +1 -0
  115. package/lib/module/library/performance-handler/index.js +4 -0
  116. package/lib/module/library/performance-handler/index.js.map +1 -0
  117. package/lib/module/library/performance-handler/performance-handler.js +89 -0
  118. package/lib/module/library/performance-handler/performance-handler.js.map +1 -0
  119. package/lib/module/library/performance-handler/types.js +4 -0
  120. package/lib/module/library/performance-handler/types.js.map +1 -0
  121. package/lib/module/library/project/index.js +6 -0
  122. package/lib/module/library/project/index.js.map +1 -0
  123. package/lib/module/library/project/project-handler.js +26 -0
  124. package/lib/module/library/project/project-handler.js.map +1 -0
  125. package/lib/module/library/types.js +2 -0
  126. package/lib/module/library/types.js.map +1 -0
  127. package/lib/module/specs/rn-tui-sdk.nitro.js +4 -0
  128. package/lib/module/specs/rn-tui-sdk.nitro.js.map +1 -0
  129. package/lib/typescript/src/index.d.ts +4 -0
  130. package/lib/typescript/src/index.d.ts.map +1 -0
  131. package/lib/typescript/src/library/client/constants.d.ts +23 -0
  132. package/lib/typescript/src/library/client/constants.d.ts.map +1 -0
  133. package/lib/typescript/src/library/client/index.d.ts +4 -0
  134. package/lib/typescript/src/library/client/index.d.ts.map +1 -0
  135. package/lib/typescript/src/library/client/salvetron-client.d.ts +73 -0
  136. package/lib/typescript/src/library/client/salvetron-client.d.ts.map +1 -0
  137. package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts +2 -0
  138. package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts.map +1 -0
  139. package/lib/typescript/src/library/device/device-handler.d.ts +11 -0
  140. package/lib/typescript/src/library/device/device-handler.d.ts.map +1 -0
  141. package/lib/typescript/src/library/device/index.d.ts +3 -0
  142. package/lib/typescript/src/library/device/index.d.ts.map +1 -0
  143. package/lib/typescript/src/library/device/types.d.ts +8 -0
  144. package/lib/typescript/src/library/device/types.d.ts.map +1 -0
  145. package/lib/typescript/src/library/device/utils/generate-uuid.d.ts +2 -0
  146. package/lib/typescript/src/library/device/utils/generate-uuid.d.ts.map +1 -0
  147. package/lib/typescript/src/library/index.d.ts +106 -0
  148. package/lib/typescript/src/library/index.d.ts.map +1 -0
  149. package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts +2 -0
  150. package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts.map +1 -0
  151. package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts +2 -0
  152. package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts.map +1 -0
  153. package/lib/typescript/src/library/interceptors/index.d.ts +5 -0
  154. package/lib/typescript/src/library/interceptors/index.d.ts.map +1 -0
  155. package/lib/typescript/src/library/interceptors/js-console.d.ts +17 -0
  156. package/lib/typescript/src/library/interceptors/js-console.d.ts.map +1 -0
  157. package/lib/typescript/src/library/interceptors/xhr.d.ts +14 -0
  158. package/lib/typescript/src/library/interceptors/xhr.d.ts.map +1 -0
  159. package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts +2 -0
  160. package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts.map +1 -0
  161. package/lib/typescript/src/library/network-handler/index.d.ts +2 -0
  162. package/lib/typescript/src/library/network-handler/index.d.ts.map +1 -0
  163. package/lib/typescript/src/library/network-handler/network-handler.d.ts +19 -0
  164. package/lib/typescript/src/library/network-handler/network-handler.d.ts.map +1 -0
  165. package/lib/typescript/src/library/network-handler/types.d.ts +6 -0
  166. package/lib/typescript/src/library/network-handler/types.d.ts.map +1 -0
  167. package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts +2 -0
  168. package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts.map +1 -0
  169. package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts +2 -0
  170. package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts.map +1 -0
  171. package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts +2 -0
  172. package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts.map +1 -0
  173. package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts +2 -0
  174. package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts.map +1 -0
  175. package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts +2 -0
  176. package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts.map +1 -0
  177. package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts +5 -0
  178. package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts.map +1 -0
  179. package/lib/typescript/src/library/network-handler/utils/index.d.ts +6 -0
  180. package/lib/typescript/src/library/network-handler/utils/index.d.ts.map +1 -0
  181. package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts +5 -0
  182. package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts.map +1 -0
  183. package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts +5 -0
  184. package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts.map +1 -0
  185. package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts +5 -0
  186. package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts.map +1 -0
  187. package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts +5 -0
  188. package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts.map +1 -0
  189. package/lib/typescript/src/library/performance-handler/index.d.ts +3 -0
  190. package/lib/typescript/src/library/performance-handler/index.d.ts.map +1 -0
  191. package/lib/typescript/src/library/performance-handler/performance-handler.d.ts +27 -0
  192. package/lib/typescript/src/library/performance-handler/performance-handler.d.ts.map +1 -0
  193. package/lib/typescript/src/library/performance-handler/types.d.ts +20 -0
  194. package/lib/typescript/src/library/performance-handler/types.d.ts.map +1 -0
  195. package/lib/typescript/src/library/project/index.d.ts +4 -0
  196. package/lib/typescript/src/library/project/index.d.ts.map +1 -0
  197. package/lib/typescript/src/library/project/project-handler.d.ts +7 -0
  198. package/lib/typescript/src/library/project/project-handler.d.ts.map +1 -0
  199. package/lib/typescript/src/library/types.d.ts +39 -0
  200. package/lib/typescript/src/library/types.d.ts.map +1 -0
  201. package/lib/typescript/src/specs/rn-tui-sdk.nitro.d.ts +100 -0
  202. package/lib/typescript/src/specs/rn-tui-sdk.nitro.d.ts.map +1 -0
  203. package/nitro.json +24 -0
  204. package/nitrogen/generated/.gitattributes +1 -0
  205. package/nitrogen/generated/android/NitroRnTuiSdk+autolinking.cmake +81 -0
  206. package/nitrogen/generated/android/NitroRnTuiSdk+autolinking.gradle +27 -0
  207. package/nitrogen/generated/android/NitroRnTuiSdkOnLoad.cpp +58 -0
  208. package/nitrogen/generated/android/NitroRnTuiSdkOnLoad.hpp +34 -0
  209. package/nitrogen/generated/android/c++/JDeviceInfoResult.hpp +69 -0
  210. package/nitrogen/generated/android/c++/JFunc_void_NativeLogEntry.hpp +80 -0
  211. package/nitrogen/generated/android/c++/JFunc_void_PerformanceMetrics.hpp +77 -0
  212. package/nitrogen/generated/android/c++/JHybridNitroRnTuiSdkSpec.cpp +124 -0
  213. package/nitrogen/generated/android/c++/JHybridNitroRnTuiSdkSpec.hpp +74 -0
  214. package/nitrogen/generated/android/c++/JNativeLogEntry.hpp +71 -0
  215. package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +64 -0
  216. package/nitrogen/generated/android/c++/JPerformanceMetrics.hpp +69 -0
  217. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/DeviceInfoResult.kt +47 -0
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/Func_void_NativeLogEntry.kt +80 -0
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/Func_void_PerformanceMetrics.kt +80 -0
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/HybridNitroRnTuiSdkSpec.kt +108 -0
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/NativeLogEntry.kt +47 -0
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/NativeLogLevel.kt +25 -0
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/NitroRnTuiSdkOnLoad.kt +35 -0
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rntuisdk/PerformanceMetrics.kt +47 -0
  225. package/nitrogen/generated/ios/NitroRnTuiSdk+autolinking.rb +62 -0
  226. package/nitrogen/generated/ios/NitroRnTuiSdk-Swift-Cxx-Bridge.cpp +49 -0
  227. package/nitrogen/generated/ios/NitroRnTuiSdk-Swift-Cxx-Bridge.hpp +185 -0
  228. package/nitrogen/generated/ios/NitroRnTuiSdk-Swift-Cxx-Umbrella.hpp +58 -0
  229. package/nitrogen/generated/ios/NitroRnTuiSdkAutolinking.mm +33 -0
  230. package/nitrogen/generated/ios/NitroRnTuiSdkAutolinking.swift +26 -0
  231. package/nitrogen/generated/ios/c++/HybridNitroRnTuiSdkSpecSwift.cpp +11 -0
  232. package/nitrogen/generated/ios/c++/HybridNitroRnTuiSdkSpecSwift.hpp +175 -0
  233. package/nitrogen/generated/ios/swift/DeviceInfoResult.swift +44 -0
  234. package/nitrogen/generated/ios/swift/Func_void_NativeLogEntry.swift +46 -0
  235. package/nitrogen/generated/ios/swift/Func_void_PerformanceMetrics.swift +46 -0
  236. package/nitrogen/generated/ios/swift/HybridNitroRnTuiSdkSpec.swift +66 -0
  237. package/nitrogen/generated/ios/swift/HybridNitroRnTuiSdkSpec_cxx.swift +289 -0
  238. package/nitrogen/generated/ios/swift/NativeLogEntry.swift +44 -0
  239. package/nitrogen/generated/ios/swift/NativeLogLevel.swift +48 -0
  240. package/nitrogen/generated/ios/swift/PerformanceMetrics.swift +44 -0
  241. package/nitrogen/generated/shared/c++/DeviceInfoResult.hpp +95 -0
  242. package/nitrogen/generated/shared/c++/HybridNitroRnTuiSdkSpec.cpp +32 -0
  243. package/nitrogen/generated/shared/c++/HybridNitroRnTuiSdkSpec.hpp +83 -0
  244. package/nitrogen/generated/shared/c++/NativeLogEntry.hpp +97 -0
  245. package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +84 -0
  246. package/nitrogen/generated/shared/c++/PerformanceMetrics.hpp +95 -0
  247. package/package.json +128 -0
  248. package/react-native.config.js +16 -0
  249. package/src/index.ts +7 -0
  250. package/src/library/client/constants.ts +35 -0
  251. package/src/library/client/index.ts +9 -0
  252. package/src/library/client/salvetron-client.ts +433 -0
  253. package/src/library/device/__tests__/device-handler.test.ts +86 -0
  254. package/src/library/device/device-handler.ts +85 -0
  255. package/src/library/device/index.ts +3 -0
  256. package/src/library/device/types.ts +7 -0
  257. package/src/library/device/utils/generate-uuid.ts +7 -0
  258. package/src/library/index.ts +158 -0
  259. package/src/library/interceptors/__tests__/js-console.test.ts +186 -0
  260. package/src/library/interceptors/__tests__/xhr.test.ts +313 -0
  261. package/src/library/interceptors/index.ts +5 -0
  262. package/src/library/interceptors/js-console.ts +93 -0
  263. package/src/library/interceptors/xhr.ts +123 -0
  264. package/src/library/network-handler/__tests__/network-handler.test.ts +265 -0
  265. package/src/library/network-handler/index.ts +1 -0
  266. package/src/library/network-handler/network-handler.ts +141 -0
  267. package/src/library/network-handler/types.ts +6 -0
  268. package/src/library/network-handler/utils/__tests__/generate-request-id.test.ts +22 -0
  269. package/src/library/network-handler/utils/__tests__/parse-response-headers.test.ts +71 -0
  270. package/src/library/network-handler/utils/__tests__/read-blob-as-text.test.ts +79 -0
  271. package/src/library/network-handler/utils/__tests__/response-to-string.test.ts +85 -0
  272. package/src/library/network-handler/utils/__tests__/should-ignore-url.test.ts +45 -0
  273. package/src/library/network-handler/utils/generate-request-id.ts +6 -0
  274. package/src/library/network-handler/utils/index.ts +5 -0
  275. package/src/library/network-handler/utils/parse-response-headers.ts +20 -0
  276. package/src/library/network-handler/utils/read-blob-as-text.ts +11 -0
  277. package/src/library/network-handler/utils/response-to-string.ts +32 -0
  278. package/src/library/network-handler/utils/should-ignore-url.ts +6 -0
  279. package/src/library/performance-handler/index.ts +2 -0
  280. package/src/library/performance-handler/performance-handler.ts +104 -0
  281. package/src/library/performance-handler/types.ts +22 -0
  282. package/src/library/project/index.ts +4 -0
  283. package/src/library/project/project-handler.ts +28 -0
  284. package/src/library/types.ts +78 -0
  285. package/src/specs/rn-tui-sdk.nitro.ts +114 -0
@@ -0,0 +1,86 @@
1
+ jest.mock('react-native', () => ({
2
+ Platform: {
3
+ OS: 'ios',
4
+ },
5
+ }));
6
+
7
+ import { Platform } from 'react-native';
8
+
9
+ import { DeviceHandler } from '../device-handler';
10
+
11
+ import { NitroRnTuiSdk } from '../../../index';
12
+
13
+ import { generateUUID } from '../utils/generate-uuid';
14
+
15
+ jest.mock('../../../index', () => ({
16
+ NitroRnTuiSdk: {
17
+ getDeviceInfo: jest.fn(),
18
+ getStoredDeviceId: jest.fn(),
19
+ storeDeviceId: jest.fn(),
20
+ },
21
+ }));
22
+
23
+ jest.mock('../utils/generate-uuid', () => ({
24
+ generateUUID: jest.fn(),
25
+ }));
26
+
27
+ describe('DeviceHandler', () => {
28
+ beforeEach(() => {
29
+ jest.clearAllMocks();
30
+
31
+ (
32
+ generateUUID as jest.Mock
33
+ ).mockReturnValue('generated-uuid');
34
+ });
35
+
36
+ it('should fallback to iOS device name', () => {
37
+ Platform.OS = 'ios';
38
+
39
+ (
40
+ NitroRnTuiSdk.getDeviceInfo as jest.Mock
41
+ ).mockReturnValue({});
42
+
43
+ const handler = new DeviceHandler();
44
+
45
+ expect(
46
+ handler.getDeviceName(),
47
+ ).toBe('iOS Device');
48
+ });
49
+
50
+ it('should fallback to Android device name', () => {
51
+ Platform.OS = 'android';
52
+
53
+ (
54
+ NitroRnTuiSdk.getDeviceInfo as jest.Mock
55
+ ).mockReturnValue({});
56
+
57
+ const handler = new DeviceHandler();
58
+
59
+ expect(
60
+ handler.getDeviceName(),
61
+ ).toBe('Android Device');
62
+ });
63
+
64
+ it('should return platform in device info', () => {
65
+ Platform.OS = 'android';
66
+
67
+ (
68
+ NitroRnTuiSdk.getDeviceInfo as jest.Mock
69
+ ).mockReturnValue({
70
+ deviceId: 'id',
71
+ deviceName: 'Pixel',
72
+ appName: 'App',
73
+ bundleId: 'com.test',
74
+ });
75
+
76
+ const handler = new DeviceHandler();
77
+
78
+ expect(handler.getDeviceInfo()).toEqual({
79
+ deviceId: 'id',
80
+ deviceName: 'Pixel',
81
+ platform: 'android',
82
+ appName: 'App',
83
+ bundleId: 'com.test',
84
+ });
85
+ });
86
+ });
@@ -0,0 +1,85 @@
1
+ import { Platform } from 'react-native'
2
+ import { NitroRnTuiSdk } from '../../index'
3
+ import { generateUUID } from './utils/generate-uuid'
4
+ import type { DeviceInfoData } from './types'
5
+
6
+ export class DeviceHandler {
7
+ private cachedDeviceId: string | null = null
8
+ private cachedDeviceName: string | null = null
9
+
10
+ private getOrCreateDeviceId(): string {
11
+ if (this.cachedDeviceId) {
12
+ return this.cachedDeviceId
13
+ }
14
+
15
+ try {
16
+ const nativeInfo = NitroRnTuiSdk.getDeviceInfo()
17
+ if (nativeInfo.deviceId) {
18
+ this.cachedDeviceId = nativeInfo.deviceId
19
+ return nativeInfo.deviceId
20
+ }
21
+
22
+ const storedId = NitroRnTuiSdk.getStoredDeviceId()
23
+ if (storedId) {
24
+ this.cachedDeviceId = storedId
25
+ return storedId
26
+ }
27
+
28
+ const newId = generateUUID()
29
+ NitroRnTuiSdk.storeDeviceId(newId)
30
+ this.cachedDeviceId = newId
31
+ return newId
32
+ } catch (err) {
33
+ this.cachedDeviceId = generateUUID()
34
+ return this.cachedDeviceId
35
+ }
36
+ }
37
+
38
+ getDeviceName(): string {
39
+ if (this.cachedDeviceName) {
40
+ return this.cachedDeviceName
41
+ }
42
+
43
+ const nativeInfo = NitroRnTuiSdk.getDeviceInfo()
44
+ if (nativeInfo.deviceName) {
45
+ this.cachedDeviceName = nativeInfo.deviceName
46
+ return nativeInfo.deviceName
47
+ }
48
+
49
+ const model = Platform.OS === 'ios' ? 'iOS Device' : 'Android Device'
50
+ this.cachedDeviceName = model
51
+ return model
52
+ }
53
+
54
+ getAppName(): string {
55
+ try {
56
+ const nativeInfo = NitroRnTuiSdk.getDeviceInfo()
57
+ return nativeInfo.appName || 'React Native App'
58
+ } catch {
59
+ return 'React Native App'
60
+ }
61
+ }
62
+
63
+ getBundleId(): string {
64
+ try {
65
+ const nativeInfo = NitroRnTuiSdk.getDeviceInfo()
66
+ return nativeInfo.bundleId || ''
67
+ } catch {
68
+ return ''
69
+ }
70
+ }
71
+
72
+ getDeviceInfo(): DeviceInfoData {
73
+ const deviceId = this.getOrCreateDeviceId()
74
+ const deviceName = this.getDeviceName()
75
+ const appName = this.getAppName()
76
+
77
+ return {
78
+ deviceId,
79
+ deviceName,
80
+ platform: Platform.OS as 'ios' | 'android',
81
+ appName,
82
+ bundleId: this.getBundleId(),
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,3 @@
1
+ import { DeviceHandler } from './device-handler'
2
+
3
+ export const deviceHandler = new DeviceHandler()
@@ -0,0 +1,7 @@
1
+ export interface DeviceInfoData {
2
+ deviceId: string;
3
+ deviceName: string;
4
+ platform: 'ios' | 'android';
5
+ appName: string;
6
+ bundleId: string;
7
+ }
@@ -0,0 +1,7 @@
1
+ export function generateUUID(): string {
2
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
3
+ const r = (Math.random() * 16) | 0;
4
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
5
+ return v.toString(16);
6
+ });
7
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Salvetron SDK for React Native
3
+ *
4
+ * Captures network requests and sends them to the Salvetron CLI
5
+ * for debugging and inspection.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import Salvetron from '@salve-software/salvetron-react-native';
10
+ *
11
+ * if (__DEV__) {
12
+ * Salvetron.connect({
13
+ * host: 'localhost',
14
+ * port: 8765,
15
+ * });
16
+ * }
17
+ * ```
18
+ */
19
+
20
+ import { client } from './client'
21
+ import type { SalvetronConfig } from './types'
22
+
23
+ /**
24
+ * Salvetron SDK main interface
25
+ */
26
+ export default {
27
+ /**
28
+ * Connect to Salvetron CLI
29
+ *
30
+ * @param config - Configuration options
31
+ * @example
32
+ * ```typescript
33
+ * Salvetron.connect({
34
+ * host: '192.168.1.100', // Mac IP address
35
+ * port: 8765,
36
+ * enableNetworkCapture: true,
37
+ * ignoredUrls: [/my-internal-api/],
38
+ * onConnect: () => console.log('Connected to Salvetron'),
39
+ * onDisconnect: () => console.log('Disconnected from Salvetron'),
40
+ * });
41
+ * ```
42
+ */
43
+ connect(config?: SalvetronConfig): void {
44
+ client.connect(config)
45
+ },
46
+
47
+ /**
48
+ * Disconnect from Salvetron CLI
49
+ */
50
+ disconnect(): void {
51
+ client.disconnect()
52
+ },
53
+
54
+ /**
55
+ * Check if currently connected to Salvetron
56
+ */
57
+ isConnected(): boolean {
58
+ return client.isConnected()
59
+ },
60
+
61
+ /**
62
+ * Send a log message (info level)
63
+ * @param message - The log message
64
+ * @param metadata - Optional metadata object
65
+ */
66
+ log(message: string, metadata?: Record<string, unknown>): void {
67
+ client.sendLog('info', message, metadata)
68
+ },
69
+
70
+ /**
71
+ * Send a debug log message
72
+ * @param message - The log message
73
+ * @param metadata - Optional metadata object
74
+ */
75
+ debug(message: string, metadata?: Record<string, unknown>): void {
76
+ client.sendLog('debug', message, metadata)
77
+ },
78
+
79
+ /**
80
+ * Send an info log message
81
+ * @param message - The log message
82
+ * @param metadata - Optional metadata object
83
+ */
84
+ info(message: string, metadata?: Record<string, unknown>): void {
85
+ client.sendLog('info', message, metadata)
86
+ },
87
+
88
+ /**
89
+ * Send a warning log message
90
+ * @param message - The log message
91
+ * @param metadata - Optional metadata object
92
+ */
93
+ warn(message: string, metadata?: Record<string, unknown>): void {
94
+ client.sendLog('warn', message, metadata)
95
+ },
96
+
97
+ /**
98
+ * Send an error log message
99
+ * @param message - The log message
100
+ * @param metadata - Optional metadata object
101
+ */
102
+ error(message: string, metadata?: Record<string, unknown>): void {
103
+ client.sendLog('error', message, metadata)
104
+ },
105
+
106
+ /**
107
+ * Stop capturing native platform logs (NSLog/print on iOS, Logcat on Android)
108
+ * Native log capture starts automatically on connect()
109
+ */
110
+ stopNativeLogCapture(): void {
111
+ client.stopNativeLogCapture()
112
+ },
113
+
114
+ /**
115
+ * Check if native log capture is currently active
116
+ * @returns true if native log capture is enabled
117
+ */
118
+ isNativeLogCaptureEnabled(): boolean {
119
+ return client.isNativeLogCaptureEnabled()
120
+ },
121
+
122
+ /**
123
+ * Start performance monitoring to track FPS, memory, and CPU
124
+ * @returns true if successfully enabled
125
+ */
126
+ startPerformanceMonitoring(): boolean {
127
+ return client.startPerformanceMonitoring()
128
+ },
129
+
130
+ /**
131
+ * Stop performance monitoring
132
+ */
133
+ stopPerformanceMonitoring(): void {
134
+ client.stopPerformanceMonitoring()
135
+ },
136
+
137
+ /**
138
+ * Check if performance monitoring is currently active
139
+ * @returns true if performance monitoring is enabled
140
+ */
141
+ isPerformanceMonitoringEnabled(): boolean {
142
+ return client.isPerformanceMonitoringEnabled()
143
+ },
144
+ }
145
+
146
+ // Export types for consumers
147
+ export type {
148
+ SalvetronConfig,
149
+ NetworkRequestEvent,
150
+ NetworkResponseEvent,
151
+ NetworkEvent,
152
+ LogEvent,
153
+ NativeLogEvent,
154
+ LogLevel,
155
+ LogSource,
156
+ NativeLogSource,
157
+ PerformanceMetricsEvent,
158
+ } from './types'
@@ -0,0 +1,186 @@
1
+ import { JSConsoleInterceptor } from '../js-console'
2
+ import type { JSConsoleCallbacks } from '../js-console'
3
+
4
+ describe('JSConsoleInterceptor', () => {
5
+ let interceptor: JSConsoleInterceptor
6
+
7
+ // Capture real originals before any patching
8
+ const realLog = console.log
9
+ const realWarn = console.warn
10
+ const realError = console.error
11
+
12
+ const createCallbacks = (): { callbacks: JSConsoleCallbacks; onLog: jest.Mock } => {
13
+ const onLog = jest.fn()
14
+ return { callbacks: { onLog }, onLog }
15
+ }
16
+
17
+ beforeEach(() => {
18
+ jest.clearAllMocks()
19
+
20
+ // Reset singleton so each test gets a fresh instance
21
+ ;(JSConsoleInterceptor as any).instance = null
22
+ interceptor = JSConsoleInterceptor.getInstance()
23
+
24
+ // Ensure stopped before each test
25
+ interceptor.stop()
26
+ })
27
+
28
+ afterEach(() => {
29
+ // Always restore console methods after each test
30
+ interceptor.stop()
31
+ jest.restoreAllMocks()
32
+ })
33
+
34
+ afterAll(() => {
35
+ // Guarantee originals are back after the suite
36
+ console.log = realLog
37
+ console.warn = realWarn
38
+ console.error = realError
39
+ })
40
+
41
+ // ── start / stop basics ──────────────────────────────────────────────────
42
+
43
+ it('should return true on first start', () => {
44
+ const { callbacks } = createCallbacks()
45
+ expect(interceptor.start(callbacks)).toBe(true)
46
+ expect(interceptor.isEnabled()).toBe(true)
47
+ })
48
+
49
+ it('should no-op (return false) on double start', () => {
50
+ const { callbacks } = createCallbacks()
51
+ interceptor.start(callbacks)
52
+ expect(interceptor.start(callbacks)).toBe(false)
53
+ })
54
+
55
+ it('should no-op stop when not enabled', () => {
56
+ expect(() => interceptor.stop()).not.toThrow()
57
+ expect(interceptor.isEnabled()).toBe(false)
58
+ })
59
+
60
+ // ── console.log forwarding ───────────────────────────────────────────────
61
+
62
+ it('console.log("hello") → onLog("log", "hello", undefined)', () => {
63
+ const { callbacks, onLog } = createCallbacks()
64
+ interceptor.start(callbacks)
65
+
66
+ console.log('hello')
67
+
68
+ expect(onLog).toHaveBeenCalledTimes(1)
69
+ expect(onLog).toHaveBeenCalledWith('log', 'hello', undefined)
70
+ })
71
+
72
+ it('console.warn("bad", { x: 1 }) → onLog("warn", "bad", { args: [{ x: 1 }] })', () => {
73
+ const { callbacks, onLog } = createCallbacks()
74
+ interceptor.start(callbacks)
75
+
76
+ console.warn('bad', { x: 1 })
77
+
78
+ expect(onLog).toHaveBeenCalledTimes(1)
79
+ expect(onLog).toHaveBeenCalledWith('warn', 'bad', { args: [{ x: 1 }] })
80
+ })
81
+
82
+ it('console.error("boom") → onLog("error", "boom", undefined)', () => {
83
+ const { callbacks, onLog } = createCallbacks()
84
+ interceptor.start(callbacks)
85
+
86
+ console.error('boom')
87
+
88
+ expect(onLog).toHaveBeenCalledTimes(1)
89
+ expect(onLog).toHaveBeenCalledWith('error', 'boom', undefined)
90
+ })
91
+
92
+ // ── multi-arg metadata ────────────────────────────────────────────────────
93
+
94
+ it('multi-arg: console.log("a", "b", "c") → metadata: { args: ["b", "c"] }', () => {
95
+ const { callbacks, onLog } = createCallbacks()
96
+ interceptor.start(callbacks)
97
+
98
+ console.log('a', 'b', 'c')
99
+
100
+ expect(onLog).toHaveBeenCalledWith('log', 'a', { args: ['b', 'c'] })
101
+ })
102
+
103
+ // ── [Salvetron] guard ─────────────────────────────────────────────────────
104
+
105
+ it('console.log("[Salvetron] internal") is not forwarded; original still called', () => {
106
+ const { callbacks, onLog } = createCallbacks()
107
+
108
+ // Replace the stored original BEFORE start() so the patched closure captures our spy
109
+ const originalSpy = jest.fn()
110
+ ;(interceptor as any).originalLog = originalSpy
111
+
112
+ interceptor.start(callbacks)
113
+
114
+ console.log('[Salvetron] internal')
115
+
116
+ // Restore properly: stop() will restore console.log to originalSpy,
117
+ // then we put realLog back so subsequent tests are unaffected.
118
+ interceptor.stop()
119
+ console.log = realLog
120
+
121
+ expect(onLog).not.toHaveBeenCalled()
122
+ expect(originalSpy).toHaveBeenCalledWith('[Salvetron] internal')
123
+ })
124
+
125
+ it('non-string first arg with [Salvetron] prefix check does not throw', () => {
126
+ const { callbacks, onLog } = createCallbacks()
127
+ interceptor.start(callbacks)
128
+
129
+ // Non-string first arg: should not match [Salvetron] guard, should forward
130
+ expect(() => console.log({ y: 2 })).not.toThrow()
131
+ expect(onLog).toHaveBeenCalledWith('log', '[object Object]', undefined)
132
+ })
133
+
134
+ // ── console.debug / console.info not intercepted ─────────────────────────
135
+
136
+ it('console.debug and console.info are not patched after start', () => {
137
+ const originalDebug = console.debug
138
+ const originalInfo = console.info
139
+ const { callbacks } = createCallbacks()
140
+
141
+ interceptor.start(callbacks)
142
+
143
+ expect(console.debug).toBe(originalDebug)
144
+ expect(console.info).toBe(originalInfo)
145
+ })
146
+
147
+ // ── restore after stop ────────────────────────────────────────────────────
148
+
149
+ it('console.log/warn/error are restored after stop()', () => {
150
+ const { callbacks } = createCallbacks()
151
+ interceptor.start(callbacks)
152
+
153
+ // Methods should be patched
154
+ expect(console.log).not.toBe(realLog)
155
+ expect(console.warn).not.toBe(realWarn)
156
+ expect(console.error).not.toBe(realError)
157
+
158
+ interceptor.stop()
159
+
160
+ expect(console.log).toBe(realLog)
161
+ expect(console.warn).toBe(realWarn)
162
+ expect(console.error).toBe(realError)
163
+ expect(interceptor.isEnabled()).toBe(false)
164
+ })
165
+
166
+ // ── error swallow ─────────────────────────────────────────────────────────
167
+
168
+ it('if onLog throws, original is still called and error is swallowed', () => {
169
+ const throwingCallbacks: JSConsoleCallbacks = {
170
+ onLog: () => { throw new Error('forwarding failed') },
171
+ }
172
+ const originalSpy = jest.fn()
173
+ interceptor.start(throwingCallbacks)
174
+
175
+ // Replace stored original to spy on it
176
+ ;(interceptor as any).originalLog = originalSpy
177
+
178
+ expect(() => console.log('test')).not.toThrow()
179
+ expect(originalSpy).toHaveBeenCalledWith('test')
180
+
181
+ // stop() restores console.log to originalSpy (not realLog), so explicitly
182
+ // put realLog back to avoid corrupting subsequent tests.
183
+ interceptor.stop()
184
+ console.log = realLog
185
+ })
186
+ })