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.
- package/README.md +1 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +438 -7
- package/bin/cli.js +0 -0
- package/dist/commonjs/capture.d.ts +26 -0
- package/dist/commonjs/capture.js +32 -0
- package/dist/commonjs/components/AnalyticsEventCard.js +11 -11
- package/dist/commonjs/components/AnimatedEntrance.js +6 -70
- package/dist/commonjs/components/DomainHeader.js +3 -48
- package/dist/commonjs/components/EmptyState.js +2 -2
- package/dist/commonjs/components/HeadersSection.js +14 -34
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +1 -24
- package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -23
- package/dist/commonjs/components/Inspector/CrashTab.js +4 -25
- package/dist/commonjs/components/Inspector/DebuggingTab.js +2 -2
- package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +675 -285
- package/dist/commonjs/components/Inspector/MainScreen.js +66 -69
- package/dist/commonjs/components/Inspector/MediaGalleryTab.d.ts +2 -0
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +307 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +11 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +393 -0
- package/dist/commonjs/components/Inspector/NetworkTab.js +196 -206
- package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +4 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +8 -1
- package/dist/commonjs/components/Inspector/ReduxTab.js +4 -24
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1280 -173
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +2 -2
- package/dist/commonjs/components/Inspector/StorageTab.js +3 -26
- package/dist/commonjs/components/Inspector/TabBar.js +55 -25
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -10
- package/dist/commonjs/components/JsonViewer.js +43 -20
- package/dist/commonjs/components/LogCard.js +5 -5
- package/dist/commonjs/components/MetaAccordion.js +78 -80
- package/dist/commonjs/components/NetworkIcons.d.ts +13 -0
- package/dist/commonjs/components/NetworkIcons.js +83 -2
- package/dist/commonjs/components/SectionHeader.js +3 -48
- package/dist/commonjs/components/SkeletonPlaceholder.js +2 -2
- package/dist/commonjs/components/SourcePageCard.js +43 -45
- package/dist/commonjs/components/Toast.js +4 -4
- package/dist/commonjs/components/TouchableScale.js +9 -65
- package/dist/commonjs/components/TreeNode.js +2 -14
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
- package/dist/commonjs/constants/telemetryConfig.js +3 -3
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/useAccordion.d.ts +3 -8
- package/dist/commonjs/customHooks/useAccordion.js +6 -36
- package/dist/commonjs/helpers/index.d.ts +3 -1
- package/dist/commonjs/helpers/index.js +11 -1
- package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
- package/dist/commonjs/helpers/remoteConfig.js +165 -0
- package/dist/commonjs/helpers/searchQueryParser.js +2 -0
- package/dist/commonjs/helpers/telemetry.d.ts +5 -0
- package/dist/commonjs/helpers/telemetry.js +339 -8
- package/dist/commonjs/i18n/locales/en.json +66 -2
- package/dist/commonjs/index.d.ts +2 -0
- package/dist/commonjs/index.js +70 -23
- package/dist/commonjs/native/NativeInspector.d.ts +60 -0
- package/dist/commonjs/native/NativeInspector.js +109 -2
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +8 -0
- package/dist/commonjs/styles/AppColors.d.ts +36 -0
- package/dist/commonjs/styles/AppColors.js +36 -0
- package/dist/commonjs/styles/AppFonts.d.ts +2 -0
- package/dist/commonjs/styles/AppFonts.js +1 -0
- package/dist/commonjs/styles/index.d.ts +25 -1
- package/dist/commonjs/styles/index.js +22 -1
- package/dist/commonjs/types/enums.d.ts +2 -0
- package/dist/commonjs/types/enums.js +2 -0
- package/dist/commonjs/types/index.d.ts +2 -2
- package/dist/commonjs/types/interfaces.d.ts +12 -0
- package/dist/esm/capture.d.ts +26 -0
- package/dist/esm/capture.js +29 -0
- package/dist/esm/components/AnalyticsEventCard.js +11 -11
- package/dist/esm/components/AnimatedEntrance.js +4 -38
- package/dist/esm/components/DomainHeader.js +4 -16
- package/dist/esm/components/EmptyState.js +2 -2
- package/dist/esm/components/HeadersSection.js +16 -36
- package/dist/esm/components/Inspector/AnalyticsTab.js +3 -26
- package/dist/esm/components/Inspector/ConsoleTab.js +3 -25
- package/dist/esm/components/Inspector/CrashTab.js +6 -27
- package/dist/esm/components/Inspector/DebuggingTab.js +3 -3
- package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +678 -288
- package/dist/esm/components/Inspector/MainScreen.js +67 -70
- package/dist/esm/components/Inspector/MediaGalleryTab.d.ts +2 -0
- package/dist/esm/components/Inspector/MediaGalleryTab.js +267 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +11 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +353 -0
- package/dist/esm/components/Inspector/NetworkTab.js +199 -209
- package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
- package/dist/esm/components/Inspector/NpmUpdateToast.js +5 -10
- package/dist/esm/components/Inspector/PerformanceTab.js +8 -1
- package/dist/esm/components/Inspector/ReduxTab.js +6 -26
- package/dist/esm/components/Inspector/SettingsPanel.js +1283 -176
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +2 -2
- package/dist/esm/components/Inspector/StorageTab.js +3 -26
- package/dist/esm/components/Inspector/TabBar.js +56 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +6 -11
- package/dist/esm/components/JsonViewer.js +43 -20
- package/dist/esm/components/LogCard.js +5 -5
- package/dist/esm/components/MetaAccordion.js +79 -81
- package/dist/esm/components/NetworkIcons.d.ts +13 -0
- package/dist/esm/components/NetworkIcons.js +68 -0
- package/dist/esm/components/SectionHeader.js +4 -16
- package/dist/esm/components/SkeletonPlaceholder.js +2 -2
- package/dist/esm/components/SourcePageCard.js +44 -46
- package/dist/esm/components/Toast.js +4 -4
- package/dist/esm/components/TouchableScale.js +7 -33
- package/dist/esm/components/TreeNode.js +4 -16
- package/dist/esm/constants/telemetryConfig.d.ts +3 -3
- package/dist/esm/constants/telemetryConfig.js +3 -3
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/useAccordion.d.ts +3 -8
- package/dist/esm/customHooks/useAccordion.js +7 -37
- package/dist/esm/helpers/index.d.ts +3 -1
- package/dist/esm/helpers/index.js +9 -0
- package/dist/esm/helpers/remoteConfig.d.ts +4 -0
- package/dist/esm/helpers/remoteConfig.js +160 -0
- package/dist/esm/helpers/searchQueryParser.js +2 -0
- package/dist/esm/helpers/telemetry.d.ts +5 -0
- package/dist/esm/helpers/telemetry.js +332 -9
- package/dist/esm/i18n/locales/en.json +66 -2
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +66 -23
- package/dist/esm/native/NativeInspector.d.ts +60 -0
- package/dist/esm/native/NativeInspector.js +100 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +8 -0
- package/dist/esm/styles/AppColors.d.ts +36 -0
- package/dist/esm/styles/AppColors.js +36 -0
- package/dist/esm/styles/AppFonts.d.ts +2 -0
- package/dist/esm/styles/AppFonts.js +1 -0
- package/dist/esm/styles/index.d.ts +25 -1
- package/dist/esm/styles/index.js +22 -1
- package/dist/esm/types/enums.d.ts +2 -0
- package/dist/esm/types/enums.js +2 -0
- package/dist/esm/types/index.d.ts +2 -2
- package/dist/esm/types/interfaces.d.ts +12 -0
- package/ios/NetworkInspectorModule.h +1 -0
- package/ios/NetworkInspectorModule.mm +736 -7
- package/package.json +10 -2
- package/react-native-inapp-inspector.podspec +1 -0
- package/src/capture.ts +101 -0
- package/src/components/AnalyticsEventCard.tsx +15 -13
- package/src/components/AnimatedEntrance.tsx +3 -47
- package/src/components/DomainHeader.tsx +4 -17
- package/src/components/EmptyState.tsx +2 -2
- package/src/components/HeadersSection.tsx +31 -56
- package/src/components/Inspector/AnalyticsTab.tsx +2 -25
- package/src/components/Inspector/ConsoleTab.tsx +2 -24
- package/src/components/Inspector/CrashTab.tsx +4 -25
- package/src/components/Inspector/DebuggingTab.tsx +2 -2
- package/src/components/Inspector/FeedbackModal.tsx +626 -0
- package/src/components/Inspector/InspectorHeader.tsx +1230 -728
- package/src/components/Inspector/MainScreen.tsx +97 -82
- package/src/components/Inspector/MediaGalleryTab.tsx +355 -0
- package/src/components/Inspector/MediaPreviewModal.tsx +435 -0
- package/src/components/Inspector/NetworkTab.tsx +83 -93
- package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
- package/src/components/Inspector/NpmUpdateToast.tsx +4 -9
- package/src/components/Inspector/PerformanceTab.tsx +8 -1
- package/src/components/Inspector/ReduxTab.tsx +5 -25
- package/src/components/Inspector/SettingsPanel.tsx +1493 -225
- package/src/components/Inspector/SkeletonPlaceholder.tsx +2 -2
- package/src/components/Inspector/StorageTab.tsx +3 -26
- package/src/components/Inspector/TabBar.tsx +63 -32
- package/src/components/Inspector/UpdateAvailableModal.tsx +6 -10
- package/src/components/JsonViewer.tsx +101 -60
- package/src/components/LogCard.tsx +10 -8
- package/src/components/MetaAccordion.tsx +6 -6
- package/src/components/NetworkIcons.tsx +242 -0
- package/src/components/SectionHeader.tsx +4 -16
- package/src/components/SkeletonPlaceholder.tsx +2 -2
- package/src/components/SourcePageCard.tsx +57 -55
- package/src/components/Toast.tsx +4 -4
- package/src/components/TouchableScale.tsx +8 -38
- package/src/components/TreeNode.tsx +5 -20
- package/src/constants/telemetryConfig.ts +3 -5
- package/src/constants/version.ts +1 -1
- package/src/customHooks/useAccordion.tsx +10 -43
- package/src/helpers/index.ts +11 -1
- package/src/helpers/remoteConfig.ts +212 -0
- package/src/helpers/searchQueryParser.ts +3 -0
- package/src/helpers/telemetry.ts +381 -10
- package/src/i18n/locales/en.json +69 -2
- package/src/index.tsx +93 -23
- package/src/native/NativeInspector.ts +186 -1
- package/src/native/NativeNetworkInspector.ts +9 -0
- package/src/styles/AppColors.ts +38 -0
- package/src/styles/AppFonts.ts +2 -0
- package/src/styles/index.ts +23 -2
- package/src/types/enums.ts +4 -0
- package/src/types/index.ts +2 -2
- package/src/types/interfaces.ts +12 -0
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +0 -1
- package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +0 -1
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
- package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
- package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +0 -10
- package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +0 -104
- package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
- package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +0 -128
- package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +0 -31
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +0 -22
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +0 -24
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +0 -16
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +0 -17
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +0 -19
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +0 -18
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +0 -177
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +0 -17
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +0 -23
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +0 -16
- package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +0 -20
- package/android/build/generated/source/codegen/schema.json +0 -1
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
- package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
- package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
- package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
- package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
- package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
- package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
- package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
- package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
- package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
- package/android/build/reports/problems/problems-report.html +0 -659
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
- 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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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({
|
|
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
|
|
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
|
}
|