react-native-inapp-inspector 2.3.15 → 2.3.17

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 (381) hide show
  1. package/README.md +1 -0
  2. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +438 -7
  3. package/bin/cli.js +0 -0
  4. package/dist/commonjs/capture.d.ts +26 -0
  5. package/dist/commonjs/capture.js +32 -0
  6. package/dist/commonjs/components/AnalyticsEventCard.js +11 -11
  7. package/dist/commonjs/components/AnimatedEntrance.js +6 -70
  8. package/dist/commonjs/components/DomainHeader.js +3 -48
  9. package/dist/commonjs/components/EmptyState.js +2 -2
  10. package/dist/commonjs/components/HeadersSection.js +14 -34
  11. package/dist/commonjs/components/Inspector/AnalyticsTab.js +1 -24
  12. package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -23
  13. package/dist/commonjs/components/Inspector/CrashTab.js +4 -25
  14. package/dist/commonjs/components/Inspector/DebuggingTab.js +2 -2
  15. package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
  16. package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
  17. package/dist/commonjs/components/Inspector/InspectorHeader.js +675 -285
  18. package/dist/commonjs/components/Inspector/MainScreen.js +66 -69
  19. package/dist/commonjs/components/Inspector/MediaGalleryTab.d.ts +2 -0
  20. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +307 -0
  21. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +11 -0
  22. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +393 -0
  23. package/dist/commonjs/components/Inspector/NetworkTab.js +196 -206
  24. package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
  25. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
  26. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +4 -9
  27. package/dist/commonjs/components/Inspector/PerformanceTab.js +8 -1
  28. package/dist/commonjs/components/Inspector/ReduxTab.js +4 -24
  29. package/dist/commonjs/components/Inspector/SettingsPanel.js +1280 -173
  30. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +2 -2
  31. package/dist/commonjs/components/Inspector/StorageTab.js +3 -26
  32. package/dist/commonjs/components/Inspector/TabBar.js +55 -25
  33. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -10
  34. package/dist/commonjs/components/JsonViewer.js +43 -20
  35. package/dist/commonjs/components/LogCard.js +5 -5
  36. package/dist/commonjs/components/MetaAccordion.js +78 -80
  37. package/dist/commonjs/components/NetworkIcons.d.ts +13 -0
  38. package/dist/commonjs/components/NetworkIcons.js +83 -2
  39. package/dist/commonjs/components/SectionHeader.js +3 -48
  40. package/dist/commonjs/components/SkeletonPlaceholder.js +2 -2
  41. package/dist/commonjs/components/SourcePageCard.js +43 -45
  42. package/dist/commonjs/components/Toast.js +4 -4
  43. package/dist/commonjs/components/TouchableScale.js +9 -65
  44. package/dist/commonjs/components/TreeNode.js +2 -14
  45. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  46. package/dist/commonjs/constants/telemetryConfig.js +3 -3
  47. package/dist/commonjs/constants/version.d.ts +1 -1
  48. package/dist/commonjs/constants/version.js +1 -1
  49. package/dist/commonjs/customHooks/useAccordion.d.ts +3 -8
  50. package/dist/commonjs/customHooks/useAccordion.js +6 -36
  51. package/dist/commonjs/helpers/index.d.ts +3 -1
  52. package/dist/commonjs/helpers/index.js +11 -1
  53. package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
  54. package/dist/commonjs/helpers/remoteConfig.js +165 -0
  55. package/dist/commonjs/helpers/searchQueryParser.js +2 -0
  56. package/dist/commonjs/helpers/telemetry.d.ts +5 -0
  57. package/dist/commonjs/helpers/telemetry.js +339 -8
  58. package/dist/commonjs/i18n/locales/en.json +66 -2
  59. package/dist/commonjs/index.d.ts +2 -0
  60. package/dist/commonjs/index.js +70 -23
  61. package/dist/commonjs/native/NativeInspector.d.ts +60 -0
  62. package/dist/commonjs/native/NativeInspector.js +109 -2
  63. package/dist/commonjs/native/NativeNetworkInspector.d.ts +8 -0
  64. package/dist/commonjs/styles/AppColors.d.ts +36 -0
  65. package/dist/commonjs/styles/AppColors.js +36 -0
  66. package/dist/commonjs/styles/AppFonts.d.ts +2 -0
  67. package/dist/commonjs/styles/AppFonts.js +1 -0
  68. package/dist/commonjs/styles/index.d.ts +25 -1
  69. package/dist/commonjs/styles/index.js +22 -1
  70. package/dist/commonjs/types/enums.d.ts +2 -0
  71. package/dist/commonjs/types/enums.js +2 -0
  72. package/dist/commonjs/types/index.d.ts +2 -2
  73. package/dist/commonjs/types/interfaces.d.ts +12 -0
  74. package/dist/esm/capture.d.ts +26 -0
  75. package/dist/esm/capture.js +29 -0
  76. package/dist/esm/components/AnalyticsEventCard.js +11 -11
  77. package/dist/esm/components/AnimatedEntrance.js +4 -38
  78. package/dist/esm/components/DomainHeader.js +4 -16
  79. package/dist/esm/components/EmptyState.js +2 -2
  80. package/dist/esm/components/HeadersSection.js +16 -36
  81. package/dist/esm/components/Inspector/AnalyticsTab.js +3 -26
  82. package/dist/esm/components/Inspector/ConsoleTab.js +3 -25
  83. package/dist/esm/components/Inspector/CrashTab.js +6 -27
  84. package/dist/esm/components/Inspector/DebuggingTab.js +3 -3
  85. package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
  86. package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
  87. package/dist/esm/components/Inspector/InspectorHeader.js +678 -288
  88. package/dist/esm/components/Inspector/MainScreen.js +67 -70
  89. package/dist/esm/components/Inspector/MediaGalleryTab.d.ts +2 -0
  90. package/dist/esm/components/Inspector/MediaGalleryTab.js +267 -0
  91. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +11 -0
  92. package/dist/esm/components/Inspector/MediaPreviewModal.js +353 -0
  93. package/dist/esm/components/Inspector/NetworkTab.js +199 -209
  94. package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
  95. package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
  96. package/dist/esm/components/Inspector/NpmUpdateToast.js +5 -10
  97. package/dist/esm/components/Inspector/PerformanceTab.js +8 -1
  98. package/dist/esm/components/Inspector/ReduxTab.js +6 -26
  99. package/dist/esm/components/Inspector/SettingsPanel.js +1283 -176
  100. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +2 -2
  101. package/dist/esm/components/Inspector/StorageTab.js +3 -26
  102. package/dist/esm/components/Inspector/TabBar.js +56 -26
  103. package/dist/esm/components/Inspector/UpdateAvailableModal.js +6 -11
  104. package/dist/esm/components/JsonViewer.js +43 -20
  105. package/dist/esm/components/LogCard.js +5 -5
  106. package/dist/esm/components/MetaAccordion.js +79 -81
  107. package/dist/esm/components/NetworkIcons.d.ts +13 -0
  108. package/dist/esm/components/NetworkIcons.js +68 -0
  109. package/dist/esm/components/SectionHeader.js +4 -16
  110. package/dist/esm/components/SkeletonPlaceholder.js +2 -2
  111. package/dist/esm/components/SourcePageCard.js +44 -46
  112. package/dist/esm/components/Toast.js +4 -4
  113. package/dist/esm/components/TouchableScale.js +7 -33
  114. package/dist/esm/components/TreeNode.js +4 -16
  115. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  116. package/dist/esm/constants/telemetryConfig.js +3 -3
  117. package/dist/esm/constants/version.d.ts +1 -1
  118. package/dist/esm/constants/version.js +1 -1
  119. package/dist/esm/customHooks/useAccordion.d.ts +3 -8
  120. package/dist/esm/customHooks/useAccordion.js +7 -37
  121. package/dist/esm/helpers/index.d.ts +3 -1
  122. package/dist/esm/helpers/index.js +9 -0
  123. package/dist/esm/helpers/remoteConfig.d.ts +4 -0
  124. package/dist/esm/helpers/remoteConfig.js +160 -0
  125. package/dist/esm/helpers/searchQueryParser.js +2 -0
  126. package/dist/esm/helpers/telemetry.d.ts +5 -0
  127. package/dist/esm/helpers/telemetry.js +332 -9
  128. package/dist/esm/i18n/locales/en.json +66 -2
  129. package/dist/esm/index.d.ts +2 -0
  130. package/dist/esm/index.js +66 -23
  131. package/dist/esm/native/NativeInspector.d.ts +60 -0
  132. package/dist/esm/native/NativeInspector.js +100 -1
  133. package/dist/esm/native/NativeNetworkInspector.d.ts +8 -0
  134. package/dist/esm/styles/AppColors.d.ts +36 -0
  135. package/dist/esm/styles/AppColors.js +36 -0
  136. package/dist/esm/styles/AppFonts.d.ts +2 -0
  137. package/dist/esm/styles/AppFonts.js +1 -0
  138. package/dist/esm/styles/index.d.ts +25 -1
  139. package/dist/esm/styles/index.js +22 -1
  140. package/dist/esm/types/enums.d.ts +2 -0
  141. package/dist/esm/types/enums.js +2 -0
  142. package/dist/esm/types/index.d.ts +2 -2
  143. package/dist/esm/types/interfaces.d.ts +12 -0
  144. package/ios/NetworkInspectorModule.h +1 -0
  145. package/ios/NetworkInspectorModule.mm +736 -7
  146. package/package.json +10 -2
  147. package/react-native-inapp-inspector.podspec +1 -0
  148. package/src/capture.ts +101 -0
  149. package/src/components/AnalyticsEventCard.tsx +15 -13
  150. package/src/components/AnimatedEntrance.tsx +3 -47
  151. package/src/components/DomainHeader.tsx +4 -17
  152. package/src/components/EmptyState.tsx +2 -2
  153. package/src/components/HeadersSection.tsx +31 -56
  154. package/src/components/Inspector/AnalyticsTab.tsx +2 -25
  155. package/src/components/Inspector/ConsoleTab.tsx +2 -24
  156. package/src/components/Inspector/CrashTab.tsx +4 -25
  157. package/src/components/Inspector/DebuggingTab.tsx +2 -2
  158. package/src/components/Inspector/FeedbackModal.tsx +626 -0
  159. package/src/components/Inspector/InspectorHeader.tsx +1230 -728
  160. package/src/components/Inspector/MainScreen.tsx +97 -82
  161. package/src/components/Inspector/MediaGalleryTab.tsx +355 -0
  162. package/src/components/Inspector/MediaPreviewModal.tsx +435 -0
  163. package/src/components/Inspector/NetworkTab.tsx +83 -93
  164. package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
  165. package/src/components/Inspector/NpmUpdateToast.tsx +4 -9
  166. package/src/components/Inspector/PerformanceTab.tsx +8 -1
  167. package/src/components/Inspector/ReduxTab.tsx +5 -25
  168. package/src/components/Inspector/SettingsPanel.tsx +1493 -225
  169. package/src/components/Inspector/SkeletonPlaceholder.tsx +2 -2
  170. package/src/components/Inspector/StorageTab.tsx +3 -26
  171. package/src/components/Inspector/TabBar.tsx +63 -32
  172. package/src/components/Inspector/UpdateAvailableModal.tsx +6 -10
  173. package/src/components/JsonViewer.tsx +101 -60
  174. package/src/components/LogCard.tsx +10 -8
  175. package/src/components/MetaAccordion.tsx +6 -6
  176. package/src/components/NetworkIcons.tsx +242 -0
  177. package/src/components/SectionHeader.tsx +4 -16
  178. package/src/components/SkeletonPlaceholder.tsx +2 -2
  179. package/src/components/SourcePageCard.tsx +57 -55
  180. package/src/components/Toast.tsx +4 -4
  181. package/src/components/TouchableScale.tsx +8 -38
  182. package/src/components/TreeNode.tsx +5 -20
  183. package/src/constants/telemetryConfig.ts +3 -5
  184. package/src/constants/version.ts +1 -1
  185. package/src/customHooks/useAccordion.tsx +10 -43
  186. package/src/helpers/index.ts +11 -1
  187. package/src/helpers/remoteConfig.ts +212 -0
  188. package/src/helpers/searchQueryParser.ts +3 -0
  189. package/src/helpers/telemetry.ts +381 -10
  190. package/src/i18n/locales/en.json +69 -2
  191. package/src/index.tsx +93 -23
  192. package/src/native/NativeInspector.ts +186 -1
  193. package/src/native/NativeNetworkInspector.ts +9 -0
  194. package/src/styles/AppColors.ts +38 -0
  195. package/src/styles/AppFonts.ts +2 -0
  196. package/src/styles/index.ts +23 -2
  197. package/src/types/enums.ts +4 -0
  198. package/src/types/index.ts +2 -2
  199. package/src/types/interfaces.ts +12 -0
  200. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  201. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  202. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  203. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  204. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  205. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  206. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  207. package/android/.gradle/8.9/gc.properties +0 -0
  208. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  209. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  210. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  211. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  212. package/android/.gradle/9.2.0/gc.properties +0 -0
  213. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  214. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  215. package/android/.gradle/vcs-1/gc.properties +0 -0
  216. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +0 -1
  217. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
  218. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +0 -1
  219. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
  220. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
  221. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
  222. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
  223. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
  224. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
  225. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
  226. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
  227. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
  228. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  229. package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +0 -10
  230. package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +0 -104
  231. package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
  232. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +0 -128
  233. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +0 -31
  234. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +0 -22
  235. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +0 -24
  236. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +0 -16
  237. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +0 -17
  238. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +0 -19
  239. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +0 -18
  240. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +0 -177
  241. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +0 -17
  242. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +0 -23
  243. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +0 -16
  244. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +0 -20
  245. package/android/build/generated/source/codegen/schema.json +0 -1
  246. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
  247. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  248. package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
  249. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  250. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  251. package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
  252. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  253. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  254. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  255. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  256. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  257. package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
  258. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  259. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  260. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  261. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  262. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
  263. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  264. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  265. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
  266. package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
  267. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
  268. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  269. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  270. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  271. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
  272. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  273. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  274. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  275. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  276. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  277. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  278. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
  279. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
  280. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  281. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  304. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  305. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  306. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  307. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  308. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  309. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  310. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  311. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  312. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  313. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  314. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  315. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  316. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  317. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  318. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  319. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  320. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  321. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  322. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  323. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  324. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  325. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  326. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  327. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  328. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  329. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  330. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  331. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  332. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  333. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  334. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  335. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  336. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  337. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  338. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  339. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  340. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  341. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  342. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  343. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  344. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  345. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  346. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  347. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  348. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  349. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  350. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  351. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  352. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  353. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  354. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  355. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  356. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  357. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  358. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  359. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  360. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  361. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  362. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  363. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  364. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  365. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  366. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  367. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  368. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  369. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  370. package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
  371. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
  372. package/android/build/reports/problems/problems-report.html +0 -659
  373. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  374. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  375. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  376. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  377. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  378. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  379. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  380. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
  381. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorPackage.class +0 -0
@@ -0,0 +1,160 @@
1
+ const MODULE_KEYS = [
2
+ 'apis',
3
+ 'logs',
4
+ 'analytics',
5
+ 'redux',
6
+ 'storage',
7
+ 'device',
8
+ 'crash',
9
+ 'bundle',
10
+ 'performance',
11
+ 'debugging',
12
+ ];
13
+ let cachedRemoteConfigInstance = null;
14
+ export function getFirebaseRemoteConfig(customInstance) {
15
+ if (customInstance && typeof customInstance === 'object') {
16
+ cachedRemoteConfigInstance = customInstance;
17
+ return customInstance;
18
+ }
19
+ if (cachedRemoteConfigInstance) {
20
+ return cachedRemoteConfigInstance;
21
+ }
22
+ try {
23
+ const rcModule = require('@react-native-firebase/remote-config');
24
+ const instance = typeof rcModule.default === 'function'
25
+ ? rcModule.default()
26
+ : typeof rcModule === 'function'
27
+ ? rcModule()
28
+ : rcModule;
29
+ cachedRemoteConfigInstance = instance;
30
+ return instance;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function isFirebaseRemoteConfigAvailable(customInstance) {
37
+ return Boolean(getFirebaseRemoteConfig(customInstance));
38
+ }
39
+ function extractValue(val) {
40
+ if (val === null || val === undefined)
41
+ return undefined;
42
+ if (typeof val === 'boolean')
43
+ return val;
44
+ if (typeof val === 'number')
45
+ return val !== 0;
46
+ if (typeof val === 'string') {
47
+ const lower = val.trim().toLowerCase();
48
+ if (lower === 'true' || lower === '1' || lower === 'enabled' || lower === 'on')
49
+ return true;
50
+ if (lower === 'false' || lower === '0' || lower === 'disabled' || lower === 'off')
51
+ return false;
52
+ try {
53
+ return JSON.parse(val);
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ }
59
+ if (typeof val.asBoolean === 'function') {
60
+ return val.asBoolean();
61
+ }
62
+ if (typeof val.asString === 'function') {
63
+ const str = val.asString();
64
+ const lower = str.trim().toLowerCase();
65
+ if (lower === 'true' || lower === '1' || lower === 'enabled' || lower === 'on')
66
+ return true;
67
+ if (lower === 'false' || lower === '0' || lower === 'disabled' || lower === 'off')
68
+ return false;
69
+ try {
70
+ return JSON.parse(str);
71
+ }
72
+ catch {
73
+ return undefined;
74
+ }
75
+ }
76
+ return undefined;
77
+ }
78
+ export async function fetchRemoteConfigModuleStatus(customInstance, fetchTimeoutMs = 8000) {
79
+ const rc = getFirebaseRemoteConfig(customInstance);
80
+ if (!rc) {
81
+ return null;
82
+ }
83
+ try {
84
+ const fetchPromise = (async () => {
85
+ if (typeof rc.fetchAndActivate === 'function') {
86
+ await rc.fetchAndActivate();
87
+ }
88
+ else {
89
+ if (typeof rc.fetch === 'function') {
90
+ await rc.fetch();
91
+ }
92
+ if (typeof rc.activate === 'function') {
93
+ await rc.activate();
94
+ }
95
+ }
96
+ })();
97
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Remote Config fetch timeout')), fetchTimeoutMs));
98
+ await Promise.race([fetchPromise, timeoutPromise]).catch(() => {
99
+ });
100
+ const result = {};
101
+ const jsonKeys = [
102
+ 'inspector_modules',
103
+ 'inapp_inspector_modules',
104
+ 'react_native_inapp_inspector_modules',
105
+ ];
106
+ for (const jKey of jsonKeys) {
107
+ let rawVal;
108
+ if (typeof rc.getValue === 'function') {
109
+ try {
110
+ rawVal = rc.getValue(jKey);
111
+ }
112
+ catch { }
113
+ }
114
+ else if (rc[jKey] !== undefined) {
115
+ rawVal = rc[jKey];
116
+ }
117
+ const parsed = extractValue(rawVal);
118
+ if (parsed && typeof parsed === 'object') {
119
+ for (const modKey of MODULE_KEYS) {
120
+ if (typeof parsed[modKey] === 'boolean') {
121
+ result[modKey] = parsed[modKey];
122
+ }
123
+ }
124
+ }
125
+ }
126
+ for (const modKey of MODULE_KEYS) {
127
+ const paramKeys = [
128
+ `inspector_module_${modKey}`,
129
+ `inapp_inspector_${modKey}`,
130
+ `inspector_${modKey}`,
131
+ `inapp_inspector_module_${modKey}`,
132
+ `rn_inspector_${modKey}`,
133
+ ];
134
+ for (const pKey of paramKeys) {
135
+ let rawVal;
136
+ if (typeof rc.getValue === 'function') {
137
+ try {
138
+ rawVal = rc.getValue(pKey);
139
+ }
140
+ catch { }
141
+ }
142
+ else if (rc[pKey] !== undefined) {
143
+ rawVal = rc[pKey];
144
+ }
145
+ const boolVal = extractValue(rawVal);
146
+ if (typeof boolVal === 'boolean') {
147
+ result[modKey] = boolVal;
148
+ break;
149
+ }
150
+ }
151
+ }
152
+ if (result.apis === undefined) {
153
+ result.apis = true;
154
+ }
155
+ return Object.keys(result).length > 0 ? result : null;
156
+ }
157
+ catch (error) {
158
+ return null;
159
+ }
160
+ }
@@ -1,6 +1,8 @@
1
+ import { markSearchFilterUsed } from './telemetry';
1
2
  export function matchNetworkLogQuery(log, searchQuery, routePath, _options) {
2
3
  if (!searchQuery || searchQuery.trim().length === 0)
3
4
  return true;
5
+ markSearchFilterUsed();
4
6
  const rawTokens = searchQuery.trim().toLowerCase().split(/\s+/).filter(Boolean);
5
7
  if (rawTokens.length === 0)
6
8
  return true;
@@ -1,2 +1,7 @@
1
1
  export declare function setTelemetryEnabled(enabled: boolean): void;
2
+ export declare function markSearchFilterUsed(): void;
2
3
  export declare function trackActiveTelemetryHeartbeat(telemetryEnabled?: boolean, environment?: string): Promise<void>;
4
+ export declare function trackTelemetryEvent(eventName: string, eventParams?: Record<string, any>): Promise<void>;
5
+ export declare function trackInspectorTabView(tabName: string): void;
6
+ export declare function trackInspectorScreenView(screenName: string): void;
7
+ export declare function trackInspectorScreenRecord(action: 'start' | 'stop' | 'toggle', recordingType?: string): void;
@@ -1,6 +1,13 @@
1
- import { Platform } from 'react-native';
1
+ import React from 'react';
2
+ import { Appearance, Dimensions, PixelRatio, Platform, NativeModules } from 'react-native';
2
3
  import { LIB_VERSION } from '../constants/version';
3
4
  import { loadSettings, saveSettings } from './settingsStore';
5
+ import { isReduxConnected } from '../customHooks/reduxLogger';
6
+ import { isFirebaseAnalyticsPatched } from '../customHooks/analyticsLogger';
7
+ import { getCrashRecords } from '../customHooks/crashHandler';
8
+ import { getNetworkLogs } from '../customHooks/networkLogger';
9
+ import { isNativeModuleAvailable } from '../native/NativeInspector';
10
+ import { getAppName, getBundleIdentifier, getAppVersionAndBuild, isLocalDebugEnvironment, } from './index';
4
11
  import { ENC_MID, ENC_SEC, TELEMETRY_SALT, } from '../constants/telemetryConfig';
5
12
  const PKG_NAME = 'react-native-inapp-inspector';
6
13
  const KEY_MATERIAL = `${PKG_NAME}::${TELEMETRY_SALT}`;
@@ -60,19 +67,33 @@ function getCollectUrl() {
60
67
  }
61
68
  const PING_INTERVAL_MS = 24 * 60 * 60 * 1000;
62
69
  let isTelemetryEnabled = true;
70
+ let _hasSearchFilterBeenUsed = false;
63
71
  export function setTelemetryEnabled(enabled) {
64
72
  isTelemetryEnabled = enabled;
65
73
  }
74
+ export function markSearchFilterUsed() {
75
+ _hasSearchFilterBeenUsed = true;
76
+ }
66
77
  async function getOrCreateClientId() {
67
78
  try {
68
79
  const settings = await loadSettings();
69
- if (settings.telemetryClientId) {
70
- return settings.telemetryClientId;
80
+ if (settings.telemetryClientId || settings.telemetryDeviceId) {
81
+ const id = settings.telemetryClientId || settings.telemetryDeviceId || '';
82
+ if (!settings.telemetryDeviceId) {
83
+ await saveSettings({ ...settings, telemetryDeviceId: id });
84
+ }
85
+ return id;
71
86
  }
72
87
  const part1 = Math.floor(100000000 + Math.random() * 900000000);
73
88
  const part2 = Math.floor(1000000000 + Math.random() * 9000000000);
74
89
  const newId = `${part1}.${part2}`;
75
- saveSettings({ ...settings, telemetryClientId: newId });
90
+ const now = Date.now();
91
+ await saveSettings({
92
+ ...settings,
93
+ telemetryClientId: newId,
94
+ telemetryDeviceId: newId,
95
+ deviceFirstSeen: settings.deviceFirstSeen || now,
96
+ });
76
97
  return newId;
77
98
  }
78
99
  catch {
@@ -109,26 +130,181 @@ function isDeviceEmulator() {
109
130
  }
110
131
  return false;
111
132
  }
112
- function getSystemMetadata(environment) {
133
+ function getDeviceLocaleInfo() {
134
+ try {
135
+ const opts = typeof Intl !== 'undefined' && Intl.DateTimeFormat ? Intl.DateTimeFormat().resolvedOptions() : {};
136
+ const timeZone = opts.timeZone || 'unknown';
137
+ const locale = opts.locale || 'unknown';
138
+ let countryCode = 'unknown';
139
+ if (locale && locale !== 'unknown') {
140
+ const parts = locale.split(/[-_]/);
141
+ if (parts.length > 1) {
142
+ countryCode = parts[parts.length - 1].toUpperCase();
143
+ }
144
+ }
145
+ return { countryCode, locale, timeZone };
146
+ }
147
+ catch {
148
+ return { countryCode: 'unknown', locale: 'unknown', timeZone: 'unknown' };
149
+ }
150
+ }
151
+ function getSystemMetadata(environment, currentSettings) {
113
152
  const rnConstants = Platform.constants;
114
153
  const rnVersion = rnConstants?.reactNativeVersion
115
154
  ? `${rnConstants.reactNativeVersion.major}.${rnConstants.reactNativeVersion.minor}.${rnConstants.reactNativeVersion.patch}`
116
155
  : 'unknown';
117
156
  const isHermes = Boolean(typeof global.HermesInternal === 'object' && global.HermesInternal !== null);
118
157
  const isFabric = Boolean(global?.nativeFabricUIManager !== undefined);
158
+ const isBridgeless = Boolean(global?._rn_bridgeless || global?.RN$Bridgeless);
119
159
  const isDev = Boolean(typeof __DEV__ !== 'undefined' && __DEV__);
120
160
  const isEmulator = isDeviceEmulator();
161
+ const { countryCode, locale, timeZone } = getDeviceLocaleInfo();
162
+ let screenRes = 'unknown';
163
+ let screenDensity = 1;
164
+ let fontScale = 1;
165
+ let deviceFormFactor = 'phone';
166
+ let screenOrientation = 'portrait';
167
+ try {
168
+ const dim = Dimensions.get('window');
169
+ screenRes = `${Math.round(dim.width)}x${Math.round(dim.height)}`;
170
+ screenDensity = PixelRatio.get();
171
+ fontScale = PixelRatio.getFontScale();
172
+ screenOrientation = dim.width > dim.height ? 'landscape' : 'portrait';
173
+ const isTablet = (Platform.OS === 'ios' && Boolean(Platform.isPad)) ||
174
+ (Math.min(dim.width, dim.height) >= 600);
175
+ deviceFormFactor = isTablet ? 'tablet' : 'phone';
176
+ }
177
+ catch { }
178
+ let appearanceMode = 'unknown';
179
+ try {
180
+ appearanceMode = Appearance?.getColorScheme?.() || 'unknown';
181
+ }
182
+ catch { }
183
+ const isExpo = Boolean(globalThis?.expo ||
184
+ globalThis?.__expo ||
185
+ globalThis?.__turboModuleProxy?.name === 'Expo' ||
186
+ Platform.constants?.ExpoVersion);
187
+ let hermesVersion = 'non_hermes';
188
+ let jsEngine = 'jsc';
189
+ if (isHermes) {
190
+ jsEngine = 'hermes';
191
+ try {
192
+ const props = global.HermesInternal?.getRuntimeProperties?.() || {};
193
+ hermesVersion = props['OSS Release Version'] || (props['Bytecode Version'] ? `bc_v${props['Bytecode Version']}` : 'hermes');
194
+ }
195
+ catch {
196
+ hermesVersion = 'hermes';
197
+ }
198
+ }
199
+ else if (globalThis?._v8) {
200
+ jsEngine = 'v8';
201
+ }
202
+ let reduxAttached = false;
203
+ try {
204
+ reduxAttached = isReduxConnected();
205
+ }
206
+ catch { }
207
+ let analyticsAttached = false;
208
+ try {
209
+ analyticsAttached = isFirebaseAnalyticsPatched();
210
+ }
211
+ catch { }
212
+ const hasNativeModule = isNativeModuleAvailable();
213
+ const hasMmkv = Boolean(NativeModules?.RNMMKV || globalThis?.MMKV);
214
+ let capturedCrashesCount = 0;
215
+ try {
216
+ capturedCrashesCount = getCrashRecords().length;
217
+ }
218
+ catch { }
219
+ let capturedApisBracket = '0';
220
+ try {
221
+ const apiCount = getNetworkLogs().length;
222
+ capturedApisBracket =
223
+ apiCount === 0
224
+ ? '0'
225
+ : apiCount <= 10
226
+ ? '1-10'
227
+ : apiCount <= 50
228
+ ? '11-50'
229
+ : apiCount <= 100
230
+ ? '51-100'
231
+ : '100+';
232
+ }
233
+ catch { }
234
+ let isMetroConnected = false;
235
+ try {
236
+ isMetroConnected = isLocalDebugEnvironment();
237
+ }
238
+ catch { }
239
+ const defaultLandingTab = currentSettings?.defaultTab || 'apis';
240
+ const fabMode = hasNativeModule && currentSettings?.useNativeFab !== false
241
+ ? 'native_ui_thread'
242
+ : 'js_floating_button';
243
+ const deviceBrand = String(rnConstants?.Brand ||
244
+ (Platform.OS === 'ios' ? 'Apple' : 'unknown'));
245
+ const deviceModel = String(rnConstants?.Model ||
246
+ rnConstants?.systemName ||
247
+ (Platform.OS === 'ios' ? 'iPhone/iPad' : 'unknown'));
248
+ const deviceManufacturer = String(rnConstants?.Manufacturer ||
249
+ (Platform.OS === 'ios' ? 'Apple' : 'unknown'));
250
+ let appName = 'App';
251
+ let bundleId = 'unknown';
252
+ let appVersion = 'unknown';
253
+ let appBuild = 'unknown';
254
+ try {
255
+ appName = getAppName() || 'App';
256
+ bundleId = getBundleIdentifier() || 'unknown';
257
+ const verInfo = getAppVersionAndBuild();
258
+ appVersion = verInfo.version || 'unknown';
259
+ appBuild = verInfo.build || 'unknown';
260
+ }
261
+ catch { }
262
+ const reactVer = typeof React !== 'undefined' && React.version ? React.version : 'unknown';
121
263
  return {
264
+ pkg_name: PKG_NAME,
265
+ pkg_version: LIB_VERSION,
122
266
  lib_version: LIB_VERSION,
267
+ install_type: isDev ? 'local_dev' : 'bundled_production',
268
+ app_name: appName,
269
+ bundle_id: bundleId,
270
+ app_version: appVersion,
271
+ app_build: appBuild,
272
+ react_version: reactVer,
123
273
  platform: Platform.OS,
124
274
  os_version: String(Platform.Version || 'unknown'),
125
275
  rn_version: rnVersion,
276
+ country_code: countryCode,
277
+ device_locale: locale,
278
+ time_zone: timeZone,
279
+ device_brand: deviceBrand,
280
+ device_model: deviceModel,
281
+ device_manufacturer: deviceManufacturer,
282
+ device_form_factor: deviceFormFactor,
283
+ screen_resolution: screenRes,
284
+ screen_density: screenDensity,
285
+ screen_orientation: screenOrientation,
286
+ font_scale: fontScale,
287
+ appearance_mode: appearanceMode,
288
+ is_expo: isExpo,
289
+ js_engine: jsEngine,
290
+ hermes_version: hermesVersion,
126
291
  is_hermes: isHermes,
127
292
  is_fabric: isFabric,
293
+ is_bridgeless: isBridgeless,
294
+ has_native_module: hasNativeModule,
295
+ has_mmkv: hasMmkv,
296
+ fab_mode: fabMode,
297
+ default_landing_tab: defaultLandingTab,
298
+ captured_crashes_count: capturedCrashesCount,
299
+ captured_apis_bracket: capturedApisBracket,
300
+ search_filter_used: _hasSearchFilterBeenUsed,
301
+ is_metro_connected: isMetroConnected,
128
302
  is_dev: isDev,
129
303
  is_emulator: isEmulator,
130
304
  device_type: isEmulator ? 'emulator' : 'real_device',
131
305
  app_mode: isDev ? 'local_mode' : 'bundled_application',
306
+ redux_attached: reduxAttached,
307
+ analytics_attached: analyticsAttached,
132
308
  environment: environment || (isDev ? 'DEV' : 'PROD'),
133
309
  engagement_time_msec: 1000,
134
310
  };
@@ -146,21 +322,168 @@ export async function trackActiveTelemetryHeartbeat(telemetryEnabled = true, env
146
322
  const settings = await loadSettings();
147
323
  const lastPing = settings.telemetryLastPing || 0;
148
324
  const now = Date.now();
149
- if (now - lastPing < PING_INTERVAL_MS)
325
+ const isNewDevice = !settings.deviceRegistered;
326
+ if (!isNewDevice && now - lastPing < PING_INTERVAL_MS)
150
327
  return;
151
328
  const clientId = await getOrCreateClientId();
152
- const params = getSystemMetadata(environment);
329
+ const params = getSystemMetadata(environment, settings);
330
+ const deviceParams = {
331
+ ...params,
332
+ device_id: clientId,
333
+ is_new_device: isNewDevice,
334
+ device_first_seen: settings.deviceFirstSeen || now,
335
+ };
336
+ const eventsToDispatch = isNewDevice
337
+ ? [
338
+ { name: 'active_device', params: deviceParams },
339
+ { name: 'first_device_install', params: deviceParams },
340
+ { name: 'inspector_active_heartbeat', params: deviceParams },
341
+ ]
342
+ : [
343
+ { name: 'active_device', params: deviceParams },
344
+ { name: 'inspector_active_heartbeat', params: deviceParams },
345
+ ];
153
346
  await fetch(url, {
154
347
  method: 'POST',
155
348
  headers: { 'Content-Type': 'application/json' },
156
349
  body: JSON.stringify({
157
350
  client_id: clientId,
351
+ user_id: clientId,
158
352
  non_personalized_ads: true,
159
- events: [{ name: 'inspector_active_heartbeat', params }],
353
+ user_properties: {
354
+ device_id: { value: clientId },
355
+ pkg_name: { value: params.pkg_name },
356
+ pkg_version: { value: params.pkg_version },
357
+ install_type: { value: params.install_type },
358
+ app_name: { value: params.app_name },
359
+ bundle_id: { value: params.bundle_id },
360
+ app_version: { value: params.app_version },
361
+ react_version: { value: params.react_version },
362
+ country: { value: params.country_code },
363
+ country_code: { value: params.country_code },
364
+ locale: { value: params.device_locale },
365
+ time_zone: { value: params.time_zone },
366
+ device_brand: { value: params.device_brand },
367
+ device_model: { value: params.device_model },
368
+ device_form_factor: { value: params.device_form_factor },
369
+ screen_resolution: { value: params.screen_resolution },
370
+ appearance_mode: { value: params.appearance_mode },
371
+ is_expo: { value: String(params.is_expo) },
372
+ js_engine: { value: params.js_engine },
373
+ is_fabric: { value: String(params.is_fabric) },
374
+ is_bridgeless: { value: String(params.is_bridgeless) },
375
+ has_native_module: { value: String(params.has_native_module) },
376
+ has_mmkv: { value: String(params.has_mmkv) },
377
+ fab_mode: { value: params.fab_mode },
378
+ default_landing_tab: { value: params.default_landing_tab },
379
+ captured_crashes_count: { value: String(params.captured_crashes_count) },
380
+ captured_apis_bracket: { value: params.captured_apis_bracket },
381
+ search_filter_used: { value: String(params.search_filter_used) },
382
+ is_metro_connected: { value: String(params.is_metro_connected) },
383
+ redux_attached: { value: String(params.redux_attached) },
384
+ analytics_attached: { value: String(params.analytics_attached) },
385
+ platform: { value: params.platform },
386
+ rn_version: { value: params.rn_version },
387
+ lib_version: { value: params.lib_version },
388
+ },
389
+ events: eventsToDispatch,
160
390
  }),
161
391
  });
162
- saveSettings({ ...settings, telemetryLastPing: now });
392
+ await saveSettings({
393
+ ...settings,
394
+ telemetryClientId: clientId,
395
+ telemetryDeviceId: clientId,
396
+ deviceRegistered: true,
397
+ deviceFirstSeen: settings.deviceFirstSeen || now,
398
+ telemetryLastPing: now,
399
+ telemetryLastActive: now,
400
+ });
163
401
  }
164
402
  catch {
165
403
  }
166
404
  }
405
+ export async function trackTelemetryEvent(eventName, eventParams) {
406
+ if (!isTelemetryEnabled)
407
+ return;
408
+ const url = getCollectUrl();
409
+ if (!url)
410
+ return;
411
+ try {
412
+ const clientId = await getOrCreateClientId();
413
+ const settings = await loadSettings().catch(() => ({}));
414
+ const metadata = getSystemMetadata(undefined, settings);
415
+ const params = {
416
+ ...metadata,
417
+ device_id: clientId,
418
+ ...eventParams,
419
+ engagement_time_msec: 100,
420
+ };
421
+ await fetch(url, {
422
+ method: 'POST',
423
+ headers: { 'Content-Type': 'application/json' },
424
+ body: JSON.stringify({
425
+ client_id: clientId,
426
+ user_id: clientId,
427
+ non_personalized_ads: true,
428
+ user_properties: {
429
+ device_id: { value: clientId },
430
+ pkg_name: { value: metadata.pkg_name },
431
+ pkg_version: { value: metadata.pkg_version },
432
+ install_type: { value: metadata.install_type },
433
+ app_name: { value: metadata.app_name },
434
+ bundle_id: { value: metadata.bundle_id },
435
+ app_version: { value: metadata.app_version },
436
+ react_version: { value: metadata.react_version },
437
+ country: { value: metadata.country_code },
438
+ country_code: { value: metadata.country_code },
439
+ locale: { value: metadata.device_locale },
440
+ time_zone: { value: metadata.time_zone },
441
+ device_brand: { value: metadata.device_brand },
442
+ device_model: { value: metadata.device_model },
443
+ device_form_factor: { value: metadata.device_form_factor },
444
+ screen_resolution: { value: metadata.screen_resolution },
445
+ appearance_mode: { value: metadata.appearance_mode },
446
+ is_expo: { value: String(metadata.is_expo) },
447
+ js_engine: { value: metadata.js_engine },
448
+ is_fabric: { value: String(metadata.is_fabric) },
449
+ is_bridgeless: { value: String(metadata.is_bridgeless) },
450
+ has_native_module: { value: String(metadata.has_native_module) },
451
+ has_mmkv: { value: String(metadata.has_mmkv) },
452
+ fab_mode: { value: metadata.fab_mode },
453
+ default_landing_tab: { value: metadata.default_landing_tab },
454
+ captured_crashes_count: { value: String(metadata.captured_crashes_count) },
455
+ captured_apis_bracket: { value: metadata.captured_apis_bracket },
456
+ search_filter_used: { value: String(metadata.search_filter_used) },
457
+ is_metro_connected: { value: String(metadata.is_metro_connected) },
458
+ redux_attached: { value: String(metadata.redux_attached) },
459
+ analytics_attached: { value: String(metadata.analytics_attached) },
460
+ platform: { value: metadata.platform },
461
+ rn_version: { value: metadata.rn_version },
462
+ lib_version: { value: metadata.lib_version },
463
+ },
464
+ events: [{ name: eventName, params }],
465
+ }),
466
+ });
467
+ }
468
+ catch {
469
+ }
470
+ }
471
+ export function trackInspectorTabView(tabName) {
472
+ trackTelemetryEvent('inspector_tab_view', {
473
+ tab_name: tabName,
474
+ screen_name: `tab_${tabName}`,
475
+ screen_class: 'NetworkInspector',
476
+ });
477
+ }
478
+ export function trackInspectorScreenView(screenName) {
479
+ trackTelemetryEvent('screen_view', {
480
+ screen_name: screenName,
481
+ screen_class: 'NetworkInspector',
482
+ });
483
+ }
484
+ export function trackInspectorScreenRecord(action, recordingType = 'screen') {
485
+ trackTelemetryEvent('inspector_screen_record', {
486
+ action,
487
+ recording_type: recordingType,
488
+ });
489
+ }
@@ -24,7 +24,19 @@
24
24
  "updateAvailableTitle": "Update Available",
25
25
  "updateAvailableMessage": "react-native-inapp-inspector v{{version}} is available on NPM (installed: v{{installed}}).",
26
26
  "clearEverythingTitle": "Clear Everything",
27
- "clearEverythingMessage": "This clears all tabs — APIs, Logs, Analytics and Redux timeline. Continue?",
27
+ "clearEverythingMessage": "This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?",
28
+ "photo": "Photo",
29
+ "record": "Record",
30
+ "rec": "REC",
31
+ "clear": "Clear",
32
+ "about": "About",
33
+ "screenshotCaptured": "📸 Screenshot captured & saved",
34
+ "screenshotFailed": "Failed to capture screenshot",
35
+ "screenshotError": "Error taking screenshot",
36
+ "recordingStarted": "🔴 Video recording started",
37
+ "recordingSaved": "🎥 Recording saved ({{duration}}s)",
38
+ "recordingError": "Recording error",
39
+ "recordingStartFailed": "Failed to start recording",
28
40
  "paramCount": "{{count}} param",
29
41
  "paramCount_plural": "{{count}} params",
30
42
  "sourceFirebase": "FB",
@@ -41,7 +53,8 @@
41
53
  "performance": "Performance",
42
54
  "crash": "Crash",
43
55
  "device": "Device",
44
- "storage": "Storage"
56
+ "storage": "Storage",
57
+ "media": "Media"
45
58
  },
46
59
  "settings": {
47
60
  "mainTitle": "Settings & Modules",
@@ -58,6 +71,7 @@
58
71
  "modulesAndTools": "Modules & Tools",
59
72
  "uiPreferences": "UI & Display",
60
73
  "ramLimits": "RAM & Limits",
74
+ "screenVideoCapture": "Screen & Video Capture",
61
75
  "zeroOverheadTitle": "Zero Background Overhead",
62
76
  "zeroOverheadDesc": "Check the modules you wish to activate. Disabled modules consume 0% CPU & memory until saved.",
63
77
  "unsavedPending": "● Unsaved selections pending",
@@ -161,6 +175,32 @@
161
175
  "clearHistoryDesc": "{{count}} crash logs stored",
162
176
  "historyCleared": "Crash logs cleared."
163
177
  },
178
+ "media": {
179
+ "title": "Screen & Video Capture",
180
+ "badge": "Native H.264 / GIF",
181
+ "desc": "Configure screenshot formats, quality, video FPS, audio narration, GIF recording & storage",
182
+ "screenshotCardTitle": "Screenshot Formats & Quality",
183
+ "screenshotCardDesc": "High-resolution full-window snapshot configuration",
184
+ "imageFormat": "Image Format",
185
+ "imageFormatDesc": "PNG (lossless), JPEG (compact), or WEBP",
186
+ "autoHide": "Auto-Hide Inspector Overlay",
187
+ "autoHideDesc": "Excludes inspector UI from screenshots",
188
+ "enabled": "ENABLED",
189
+ "videoCardTitle": "Video & GIF Recording",
190
+ "videoCardDesc": "H.264 MP4 recording & animated GIF export",
191
+ "audioMode": "Audio Narration Mode",
192
+ "audioModeDesc": "Muted, App Audio, or Voice Narration",
193
+ "frameRate": "Frame Rate",
194
+ "frameRateDesc": "Higher FPS yields smoother recordings",
195
+ "gifAutoOpt": "GIF Auto-Optimization",
196
+ "gifAutoOptDesc": "Converts video recordings for GitHub PRs & Slack",
197
+ "purgeAll": "Purge All Captured Media",
198
+ "purgeAllDesc": "Deletes all stored screenshots, videos, and GIFs",
199
+ "purgeCacheBtn": "Purge Cache",
200
+ "purgeConfirmTitle": "Purge Media Storage",
201
+ "purgeConfirmMessage": "This deletes all captured media files from local cache. Continue?",
202
+ "purgedSuccess": "Media storage purged"
203
+ },
164
204
  "general": {
165
205
  "darkMode": "Dark Mode Theme",
166
206
  "darkModeDescription": "Toggle sleek dark aesthetic or light contrast",
@@ -1054,5 +1094,29 @@
1054
1094
  "frameCopy": "Copy",
1055
1095
  "frameCopied": "Copied",
1056
1096
  "componentHierarchy": "Component Hierarchy"
1097
+ },
1098
+ "mediaGallery": {
1099
+ "all": "All ({{count}})",
1100
+ "photos": "Photos",
1101
+ "videos": "Videos",
1102
+ "gifs": "GIFs",
1103
+ "purge": "Purge ({{size}})",
1104
+ "purgeTitle": "Purge All Media",
1105
+ "purgeMessage": "This will permanently delete all {{count}} captured screenshots, videos, and GIFs ({{size}}). Continue?",
1106
+ "noMediaTitle": "No Captured Media",
1107
+ "noMediaDesc": "Use the Photo or Video Record button in the toolbar to capture whole-app screenshots, screen recordings, or GIFs.",
1108
+ "deleted": "Deleted media item",
1109
+ "allPurged": "All captured media purged",
1110
+ "converting": "Converting...",
1111
+ "convertToGif": "Convert to GIF",
1112
+ "convertedSuccess": "Converted to Animated GIF successfully!",
1113
+ "convertFailed": "Failed to convert to GIF",
1114
+ "share": "Share",
1115
+ "copyUri": "Copy URI",
1116
+ "uriCopied": "File URI copied to clipboard",
1117
+ "delete": "Delete",
1118
+ "deleteTitle": "Delete Media",
1119
+ "deleteMessage": "Are you sure you want to delete {{filename}}?",
1120
+ "shareUnavailable": "Sharing not available on this device"
1057
1121
  }
1058
1122
  }