react-native-dev-guard 0.0.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +190 -44
- package/android/src/main/cpp/devguard-lib.cpp +12 -11
- package/android/src/main/java/com/devguard/DevGuardModule.kt +15 -0
- package/cpp/devguard_core.c +82 -4
- package/cpp/devguard_core.h +15 -13
- package/ios/DevGuard.mm +20 -6
- package/lib/components/LockScreen.d.ts +2 -0
- package/lib/components/LockScreen.js +90 -44
- package/lib/index.d.ts +4 -1
- package/lib/index.js +179 -152
- package/lib/internal/obf.d.ts +72 -0
- package/lib/internal/obf.js +100 -0
- package/lib/services/CacheService.d.ts +5 -1
- package/lib/services/CacheService.js +8 -12
- package/lib/services/DevGuardLogger.d.ts +1 -1
- package/lib/services/DevGuardLogger.js +13 -3
- package/lib/services/DeviceTokenService.d.ts +4 -1
- package/lib/services/DeviceTokenService.js +5 -2
- package/lib/services/GuardEnforcement.d.ts +3 -12
- package/lib/services/GuardEnforcement.js +34 -15
- package/lib/services/HardwareService.d.ts +14 -1
- package/lib/services/HardwareService.js +63 -1
- package/lib/services/cacheCrypto.d.ts +6 -0
- package/lib/services/cacheCrypto.js +40 -0
- package/lib/types/branding.d.ts +21 -0
- package/lib/types/branding.js +30 -0
- package/lib/utils/contactUrls.d.ts +4 -0
- package/lib/utils/contactUrls.js +18 -0
- package/package.json +28 -8
- package/react-native-dev-guard.podspec +19 -0
- package/screenshots/access-suspended.png +0 -0
- package/screenshots/payment-reminder.png +0 -0
- package/screenshots/welcome-screen.png +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/cache-v2-ca87e29d866016c47643.json +0 -1287
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-afc39e04c88d618b9499.json +0 -182
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-004ad46f03b4d6b2acd6.json +0 -59
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/index-2026-05-15T08-21-19-0083.json +0 -92
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/target-devguard-Debug-8c0ebbb0cdb88d164b64.json +0 -160
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.ninja_deps +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.ninja_log +0 -15
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeCache.txt +0 -391
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -236
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/rules.ninja +0 -74
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/android_gradle_build.json +0 -40
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/build.ninja +0 -154
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/build_file_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/compile_commands.json +0 -12
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/configure_fingerprint.bin +0 -29
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/prefab_config.json +0 -4
- package/android/.cxx/Debug/4s4f1av3/arm64-v8a/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/cache-v2-02400eb6fc4793fa6bf2.json +0 -1287
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-d0fc95efa84cbe47849a.json +0 -379
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-a7a363de64e45a261589.json +0 -59
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/index-2026-05-15T08-21-21-0243.json +0 -92
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/target-devguard-Debug-53eeaa7145cf9770f3d7.json +0 -160
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.ninja_deps +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.ninja_log +0 -10
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeCache.txt +0 -391
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/CMakeOutput.log +0 -240
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/rules.ninja +0 -74
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/android_gradle_build.json +0 -40
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/build.ninja +0 -154
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/build_file_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/compile_commands.json +0 -12
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/configure_fingerprint.bin +0 -29
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/prefab_config.json +0 -4
- package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/hash_key.txt +0 -26
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/cache-v2-ec883f5c922c646acf2d.json +0 -1287
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/cmakeFiles-v1-028bf03c3b9bd0e609c0.json +0 -379
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/codemodel-v2-6c0215a4bb6e3b0b5223.json +0 -59
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/index-2026-05-15T08-21-22-0722.json +0 -92
- package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/target-devguard-Debug-2139b18dc63b630666db.json +0 -160
- package/android/.cxx/Debug/4s4f1av3/x86/.ninja_deps +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/.ninja_log +0 -10
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeCache.txt +0 -391
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/CMakeOutput.log +0 -230
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/rules.ninja +0 -74
- package/android/.cxx/Debug/4s4f1av3/x86/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/android_gradle_build.json +0 -40
- package/android/.cxx/Debug/4s4f1av3/x86/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/4s4f1av3/x86/build.ninja +0 -154
- package/android/.cxx/Debug/4s4f1av3/x86/build_file_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/x86/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/4s4f1av3/x86/compile_commands.json +0 -12
- package/android/.cxx/Debug/4s4f1av3/x86/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86/configure_fingerprint.bin +0 -29
- package/android/.cxx/Debug/4s4f1av3/x86/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/4s4f1av3/x86/prefab_config.json +0 -4
- package/android/.cxx/Debug/4s4f1av3/x86/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/cache-v2-7ec870c116aeb770686e.json +0 -1287
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-f2e6a276d8adf420c6b9.json +0 -379
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/codemodel-v2-a4f2c2fefb1e4261b2d6.json +0 -59
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/index-2026-05-15T08-21-24-0187.json +0 -92
- package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/target-devguard-Debug-077cad881ac8d6864f8f.json +0 -160
- package/android/.cxx/Debug/4s4f1av3/x86_64/.ninja_deps +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/.ninja_log +0 -10
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeCache.txt +0 -391
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/CMakeOutput.log +0 -230
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/rules.ninja +0 -74
- package/android/.cxx/Debug/4s4f1av3/x86_64/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/android_gradle_build.json +0 -40
- package/android/.cxx/Debug/4s4f1av3/x86_64/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/4s4f1av3/x86_64/build.ninja +0 -154
- package/android/.cxx/Debug/4s4f1av3/x86_64/build_file_index.txt +0 -1
- package/android/.cxx/Debug/4s4f1av3/x86_64/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/4s4f1av3/x86_64/compile_commands.json +0 -12
- package/android/.cxx/Debug/4s4f1av3/x86_64/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/4s4f1av3/x86_64/configure_fingerprint.bin +0 -29
- package/android/.cxx/Debug/4s4f1av3/x86_64/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/4s4f1av3/x86_64/prefab_config.json +0 -4
- package/android/.cxx/Debug/4s4f1av3/x86_64/symbol_folder_index.txt +0 -1
- package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/x86/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/x86_64/compile_commands.json +0 -12
- 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/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/07ab8b2284230b9b98454cb3baa5db54/results.bin +0 -1
- package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/BuildConfig.dex +0 -0
- package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/DevGuardModule.dex +0 -0
- package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/DevGuardPackage.dex +0 -0
- package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
- package/android/build/.transforms/ae351402e6cba75b162136aa850e1ba2/results.bin +0 -1
- package/android/build/.transforms/ae351402e6cba75b162136aa850e1ba2/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/generated/source/buildConfig/debug/com/devguard/BuildConfig.java +0 -10
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -9
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
- 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/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/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_command_devguard +0 -4
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_model.json +0 -187
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_stderr_devguard.txt +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_stdout_devguard.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_111_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_1463_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_324_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_475_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_622_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_command_devguard +0 -4
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_model.json +0 -187
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_stderr_devguard.txt +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_stdout_devguard.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_111_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_1459_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_324_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_475_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_622_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_command_devguard +0 -4
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_model.json +0 -187
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_stderr_devguard.txt +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_stdout_devguard.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_111_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_1459_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_324_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_475_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_622_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_command_devguard +0 -4
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_model.json +0 -187
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_stderr_devguard.txt +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_stdout_devguard.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_111_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_1459_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_324_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_475_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_622_timing.txt +0 -2
- package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/arm64-v8a/libdevguard.so +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/armeabi-v7a/libdevguard.so +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/x86/libdevguard.so +0 -0
- package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/x86_64/libdevguard.so +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/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-dev-guard_debug.kotlin_module +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/devguard/BuildConfig.class +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libdevguard.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libdevguard.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libdevguard.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libdevguard.so +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 -11
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -9
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libdevguard.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libdevguard.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libdevguard.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libdevguard.so +0 -0
- 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-dev-guard_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/DevGuardModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/DevGuardPackage.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/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/logs/manifest-merger-debug-report.txt +0 -21
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-dev-guard_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/devguard/DevGuardModule.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/devguard/DevGuardPackage.class +0 -0
package/lib/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useDevGuard = exports.DevGuardProvider = void 0;
|
|
6
|
+
exports.resolveBrandingFooter = exports.useDevGuard = exports.DevGuardProvider = void 0;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_1 = require("react");
|
|
9
9
|
const react_native_1 = require("react-native");
|
|
@@ -21,10 +21,10 @@ const DiagnosticOverlay_1 = require("./components/DiagnosticOverlay");
|
|
|
21
21
|
const DevGuardLogger_1 = require("./services/DevGuardLogger");
|
|
22
22
|
const GuardEnforcement_1 = require("./services/GuardEnforcement");
|
|
23
23
|
const RemoteWipeService_1 = require("./services/RemoteWipeService");
|
|
24
|
+
const obf_1 = require("./internal/obf");
|
|
24
25
|
const react_native_2 = require("react-native");
|
|
25
26
|
const react_native_safe_area_context_1 = require("react-native-safe-area-context");
|
|
26
27
|
const { DevGuard: DevGuardNative } = react_native_1.NativeModules;
|
|
27
|
-
const API_URL = 'https://api.devguard.uk/devguard';
|
|
28
28
|
const DevGuardContext = (0, react_1.createContext)(undefined);
|
|
29
29
|
const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = true, failSafe = 'open' }) => {
|
|
30
30
|
const authSecret = secret ?? apiKey;
|
|
@@ -35,9 +35,15 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
35
35
|
const heartbeatTimer = (0, react_1.useRef)(null);
|
|
36
36
|
const lastSyncTime = (0, react_1.useRef)(0);
|
|
37
37
|
const [showDiagnostics, setShowDiagnostics] = (0, react_1.useState)(false);
|
|
38
|
+
const isCompromisedRef = (0, react_1.useRef)(false);
|
|
38
39
|
const lastLifecycleSyncTime = (0, react_1.useRef)(0);
|
|
39
|
-
//
|
|
40
|
+
// Mirror of `response` for use inside long-lived closures (AppState listener,
|
|
41
|
+
// heartbeat). Those callbacks are registered once, so reading the `response`
|
|
42
|
+
// state directly would capture a stale (initial null) value — breaking
|
|
43
|
+
// telemetry consent and lifecycle gating. The ref always holds the latest.
|
|
44
|
+
// (Parity with Flutter, where these reads hit the `_cachedResponse` field.)
|
|
40
45
|
const responseRef = (0, react_1.useRef)(null);
|
|
46
|
+
const verifyChainRef = (0, react_1.useRef)(Promise.resolve());
|
|
41
47
|
(0, react_1.useEffect)(() => {
|
|
42
48
|
responseRef.current = response;
|
|
43
49
|
}, [response]);
|
|
@@ -90,144 +96,154 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
90
96
|
return true;
|
|
91
97
|
};
|
|
92
98
|
const verify = async (force = false, trigger) => {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
const hardware = HardwareService_1.HardwareService.getInstance();
|
|
99
|
-
const deviceId = await hardware.getDeviceId();
|
|
100
|
-
// Use the ref (not the possibly-stale closed-over `response`) so advanced
|
|
101
|
-
// telemetry consent is honored on heartbeat/lifecycle-triggered syncs.
|
|
102
|
-
const metadata = await hardware.getMetadata(responseRef.current?.betaFeatures);
|
|
103
|
-
const timestamp = Date.now().toString();
|
|
104
|
-
// Align payload with Flutter: Metadata map is the core payload 'p'
|
|
105
|
-
const payload = JSON.stringify({
|
|
106
|
-
...metadata,
|
|
107
|
-
projectId,
|
|
108
|
-
timestamp: parseInt(timestamp, 10)
|
|
109
|
-
});
|
|
110
|
-
// GZip + Base64 Tunneling (v1-gzip)
|
|
111
|
-
const compressed = pako_1.default.gzip(payload);
|
|
112
|
-
const uint8ToBase64 = (data) => {
|
|
113
|
-
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
114
|
-
let result = '';
|
|
115
|
-
let i;
|
|
116
|
-
const l = data.length;
|
|
117
|
-
for (i = 2; i < l; i += 3) {
|
|
118
|
-
result += chars[data[i - 2] >> 2];
|
|
119
|
-
result += chars[((data[i - 2] & 0x03) << 4) | (data[i - 1] >> 4)];
|
|
120
|
-
result += chars[((data[i - 1] & 0x0f) << 2) | (data[i] >> 6)];
|
|
121
|
-
result += chars[data[i] & 0x3f];
|
|
122
|
-
}
|
|
123
|
-
if (i === l + 1) {
|
|
124
|
-
result += chars[data[i - 2] >> 2];
|
|
125
|
-
result += chars[(data[i - 2] & 0x03) << 4];
|
|
126
|
-
result += '==';
|
|
127
|
-
}
|
|
128
|
-
else if (i === l) {
|
|
129
|
-
result += chars[data[i - 2] >> 2];
|
|
130
|
-
result += chars[((data[i - 2] & 0x03) << 4) | (data[i - 1] >> 4)];
|
|
131
|
-
result += chars[(data[i - 1] & 0x0f) << 2];
|
|
132
|
-
result += '=';
|
|
133
|
-
}
|
|
134
|
-
return result;
|
|
135
|
-
};
|
|
136
|
-
const base64Payload = uint8ToBase64(compressed);
|
|
137
|
-
const signature = await DevGuardNative.generateSignature(projectId, parseInt(timestamp, 10));
|
|
138
|
-
const fetchUrl = API_URL;
|
|
139
|
-
const fetchOptions = {
|
|
140
|
-
method: 'POST',
|
|
141
|
-
headers: {
|
|
142
|
-
'Content-Type': 'application/json',
|
|
143
|
-
'X-DevGuard-Signature': signature,
|
|
144
|
-
'X-DevGuard-Timestamp': timestamp,
|
|
145
|
-
'X-DevGuard-Tunnel': 'v1-gzip',
|
|
146
|
-
...(authSecret ? { 'X-DevGuard-API-Key': authSecret } : {})
|
|
147
|
-
},
|
|
148
|
-
body: JSON.stringify({
|
|
149
|
-
projectId,
|
|
150
|
-
deviceId: metadata.deviceId,
|
|
151
|
-
deviceName: metadata.deviceName,
|
|
152
|
-
model: metadata.model,
|
|
153
|
-
os: metadata.os,
|
|
154
|
-
version: metadata.version,
|
|
155
|
-
isPhysicalDevice: metadata.isPhysicalDevice,
|
|
156
|
-
username: metadata.username,
|
|
157
|
-
email: metadata.email,
|
|
158
|
-
phone: metadata.phone,
|
|
159
|
-
customData: metadata.customData,
|
|
160
|
-
fingerprint: metadata.fingerprint,
|
|
161
|
-
deviceToken: metadata.deviceToken,
|
|
162
|
-
location: metadata.location,
|
|
163
|
-
p: base64Payload
|
|
164
|
-
})
|
|
165
|
-
};
|
|
166
|
-
const fetchResponse = await fetch(fetchUrl, fetchOptions);
|
|
167
|
-
if (!fetchResponse.ok) {
|
|
168
|
-
throw new Error('API_UNREACHABLE');
|
|
99
|
+
const run = async () => {
|
|
100
|
+
if (!shouldSync(force, trigger)) {
|
|
101
|
+
console.log(obf_1.Obf.syncSkipped);
|
|
102
|
+
return;
|
|
169
103
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
104
|
+
try {
|
|
105
|
+
const hardware = HardwareService_1.HardwareService.getInstance();
|
|
106
|
+
const deviceId = await hardware.getDeviceId();
|
|
107
|
+
// Use the ref (not the possibly-stale closed-over `response`) so advanced
|
|
108
|
+
// telemetry consent is honored on heartbeat/lifecycle-triggered syncs.
|
|
109
|
+
const metadata = await hardware.getMetadata(responseRef.current?.betaFeatures);
|
|
110
|
+
const timestamp = Date.now().toString();
|
|
111
|
+
// Align payload with Flutter: Metadata map is the core payload 'p'
|
|
112
|
+
const payload = JSON.stringify({
|
|
113
|
+
...metadata,
|
|
114
|
+
[obf_1.Obf.projectId]: projectId,
|
|
115
|
+
timestamp: parseInt(timestamp, 10)
|
|
116
|
+
});
|
|
117
|
+
// GZip + Base64 Tunneling (v1-gzip)
|
|
118
|
+
const compressed = pako_1.default.gzip(payload);
|
|
119
|
+
const uint8ToBase64 = (data) => {
|
|
120
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
121
|
+
let result = '';
|
|
122
|
+
let i;
|
|
123
|
+
const l = data.length;
|
|
124
|
+
for (i = 2; i < l; i += 3) {
|
|
125
|
+
result += chars[data[i - 2] >> 2];
|
|
126
|
+
result += chars[((data[i - 2] & 0x03) << 4) | (data[i - 1] >> 4)];
|
|
127
|
+
result += chars[((data[i - 1] & 0x0f) << 2) | (data[i] >> 6)];
|
|
128
|
+
result += chars[data[i] & 0x3f];
|
|
129
|
+
}
|
|
130
|
+
if (i === l + 1) {
|
|
131
|
+
result += chars[data[i - 2] >> 2];
|
|
132
|
+
result += chars[(data[i - 2] & 0x03) << 4];
|
|
133
|
+
result += '==';
|
|
179
134
|
}
|
|
180
|
-
else {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
135
|
+
else if (i === l) {
|
|
136
|
+
result += chars[data[i - 2] >> 2];
|
|
137
|
+
result += chars[((data[i - 2] & 0x03) << 4) | (data[i - 1] >> 4)];
|
|
138
|
+
result += chars[(data[i - 1] & 0x0f) << 2];
|
|
139
|
+
result += '=';
|
|
184
140
|
}
|
|
141
|
+
return result;
|
|
142
|
+
};
|
|
143
|
+
const base64Payload = uint8ToBase64(compressed);
|
|
144
|
+
const signature = await DevGuardNative.generateSignature(projectId, parseInt(timestamp, 10));
|
|
145
|
+
const fetchUrl = obf_1.Obf.defaultApiUrl;
|
|
146
|
+
const fetchOptions = {
|
|
147
|
+
method: 'POST',
|
|
148
|
+
headers: {
|
|
149
|
+
[obf_1.Obf.contentType]: obf_1.Obf.appJson,
|
|
150
|
+
[obf_1.Obf.hdrSig]: signature,
|
|
151
|
+
[obf_1.Obf.hdrTs]: timestamp,
|
|
152
|
+
[obf_1.Obf.hdrTunnel]: obf_1.Obf.tunnelV1,
|
|
153
|
+
...(authSecret ? { [obf_1.Obf.hdrApiKey]: authSecret } : {})
|
|
154
|
+
},
|
|
155
|
+
body: JSON.stringify({
|
|
156
|
+
[obf_1.Obf.projectId]: projectId,
|
|
157
|
+
[obf_1.Obf.deviceId]: metadata.deviceId,
|
|
158
|
+
[obf_1.Obf.deviceName]: metadata.deviceName,
|
|
159
|
+
[obf_1.Obf.model]: metadata.model,
|
|
160
|
+
[obf_1.Obf.os]: metadata.os,
|
|
161
|
+
[obf_1.Obf.version]: metadata.version,
|
|
162
|
+
[obf_1.Obf.isPhysicalDevice]: metadata.isPhysicalDevice,
|
|
163
|
+
[obf_1.Obf.username]: metadata.username,
|
|
164
|
+
[obf_1.Obf.email]: metadata.email,
|
|
165
|
+
[obf_1.Obf.phone]: metadata.phone,
|
|
166
|
+
[obf_1.Obf.customData]: metadata.customData,
|
|
167
|
+
[obf_1.Obf.fingerprint]: metadata.fingerprint,
|
|
168
|
+
[obf_1.Obf.deviceToken]: metadata.deviceToken,
|
|
169
|
+
[obf_1.Obf.location]: metadata.location,
|
|
170
|
+
[obf_1.Obf.payloadField]: base64Payload
|
|
171
|
+
})
|
|
172
|
+
};
|
|
173
|
+
const fetchResponse = await fetch(fetchUrl, fetchOptions);
|
|
174
|
+
if (!fetchResponse.ok) {
|
|
175
|
+
throw new Error(obf_1.Obf.apiUnreachable);
|
|
176
|
+
}
|
|
177
|
+
const responseText = await fetchResponse.text();
|
|
178
|
+
const result = JSON.parse(responseText);
|
|
179
|
+
// Verify Response Signature
|
|
180
|
+
const responseSig = fetchResponse.headers.get(obf_1.Obf.respSig);
|
|
181
|
+
if (responseSig) {
|
|
182
|
+
const isValid = await DevGuardNative.verifyResponse(responseText, responseSig);
|
|
183
|
+
if (!isValid) {
|
|
184
|
+
if (result[obf_1.Obf.betaFeatures]?.[obf_1.Obf.bypassSignature] === true) {
|
|
185
|
+
console.warn(obf_1.Obf.invalidSigBypassLog);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.error(obf_1.Obf.invalidSigLog);
|
|
189
|
+
const enforced = await GuardEnforcement_1.GuardEnforcement.apply({ ...result, status: 'LOCKED' }, metadata, isCompromisedRef.current);
|
|
190
|
+
responseRef.current = enforced;
|
|
191
|
+
setResponse(enforced);
|
|
192
|
+
setStatus('LOCKED');
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
console.warn(obf_1.Obf.missingSigLog);
|
|
199
|
+
}
|
|
200
|
+
// Client-side enforcement (emulator / compromised) — parity with Flutter.
|
|
201
|
+
const enforced = await GuardEnforcement_1.GuardEnforcement.apply(result, metadata, isCompromisedRef.current);
|
|
202
|
+
const finalStatus = String(enforced[obf_1.Obf.statusField] || 'ERROR').toUpperCase();
|
|
203
|
+
responseRef.current = enforced; // keep ref fresh for chained/triggered syncs
|
|
204
|
+
setResponse(enforced);
|
|
205
|
+
setStatus(finalStatus);
|
|
206
|
+
setShowWarning(finalStatus === 'WARNING');
|
|
207
|
+
lastSyncTime.current = Date.now();
|
|
208
|
+
CacheService_1.CacheService.saveResponse(projectId, enforced);
|
|
209
|
+
// Handle Beta Features (Parity with Flutter)
|
|
210
|
+
if (finalStatus === 'WARNING' && result.betaFeatures?.vibrateOnWarning === true) {
|
|
211
|
+
react_native_1.Vibration.vibrate();
|
|
212
|
+
}
|
|
213
|
+
const wipeNonce = result.betaFeatures?.wipeNonce;
|
|
214
|
+
if (typeof wipeNonce === 'number' && wipeNonce > 0) {
|
|
215
|
+
await executeRemoteWipe(wipeNonce);
|
|
216
|
+
}
|
|
217
|
+
// Heartbeat management
|
|
218
|
+
startHeartbeat(result);
|
|
219
|
+
// Handle Device Token (Parity with Flutter)
|
|
220
|
+
if (result.deviceToken) {
|
|
221
|
+
await DeviceTokenService_1.DeviceTokenService.getInstance().saveToken(result.deviceToken, result.betaFeatures?.secureEnclave === true);
|
|
222
|
+
}
|
|
223
|
+
// Handle Remote Commands (Parity with Flutter)
|
|
224
|
+
if (result.remoteCommand && result.remoteCommand !== 'none') {
|
|
225
|
+
await handleRemoteCommand(result.remoteCommand);
|
|
226
|
+
}
|
|
227
|
+
// Clear logs after successful sync
|
|
228
|
+
if (metadata.usageLogs && metadata.usageLogs.length > 0) {
|
|
229
|
+
await UsageLogger_1.UsageLogger.getInstance().clearLogs();
|
|
185
230
|
}
|
|
186
231
|
}
|
|
187
|
-
|
|
188
|
-
console.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
setStatus(finalStatus);
|
|
196
|
-
setShowWarning(finalStatus === 'WARNING');
|
|
197
|
-
lastSyncTime.current = Date.now();
|
|
198
|
-
CacheService_1.CacheService.saveResponse(projectId, enforced);
|
|
199
|
-
// Handle beta features from server response
|
|
200
|
-
if (finalStatus === 'WARNING' && result.betaFeatures?.vibrateOnWarning === true) {
|
|
201
|
-
react_native_1.Vibration.vibrate();
|
|
202
|
-
}
|
|
203
|
-
const wipeNonce = result.betaFeatures?.wipeNonce;
|
|
204
|
-
if (typeof wipeNonce === 'number' && wipeNonce > 0) {
|
|
205
|
-
await executeRemoteWipe(wipeNonce);
|
|
206
|
-
}
|
|
207
|
-
// Heartbeat management
|
|
208
|
-
startHeartbeat(result);
|
|
209
|
-
// Persist server-issued device token
|
|
210
|
-
if (result.deviceToken) {
|
|
211
|
-
await DeviceTokenService_1.DeviceTokenService.getInstance().saveToken(result.deviceToken, result.betaFeatures?.secureEnclave === true);
|
|
212
|
-
}
|
|
213
|
-
// Handle remote commands from server
|
|
214
|
-
if (result.remoteCommand && result.remoteCommand !== 'none') {
|
|
215
|
-
await handleRemoteCommand(result.remoteCommand);
|
|
216
|
-
}
|
|
217
|
-
// Clear logs after successful sync
|
|
218
|
-
if (metadata.usageLogs && metadata.usageLogs.length > 0) {
|
|
219
|
-
await UsageLogger_1.UsageLogger.getInstance().clearLogs();
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
catch (e) {
|
|
223
|
-
console.error('DevGuard Verification Failed:', e);
|
|
224
|
-
if (failSafe === 'open' && status === 'PENDING') {
|
|
225
|
-
setStatus('ACTIVE');
|
|
226
|
-
}
|
|
227
|
-
else if (failSafe === 'closed') {
|
|
228
|
-
setStatus('LOCKED');
|
|
232
|
+
catch (e) {
|
|
233
|
+
console.error('DevGuard Verification Failed:', e);
|
|
234
|
+
if (failSafe === 'open' && status === 'PENDING') {
|
|
235
|
+
setStatus('ACTIVE');
|
|
236
|
+
}
|
|
237
|
+
else if (failSafe === 'closed') {
|
|
238
|
+
setStatus('LOCKED');
|
|
239
|
+
}
|
|
229
240
|
}
|
|
230
|
-
}
|
|
241
|
+
};
|
|
242
|
+
// Always serialize verify runs — never reset the chain on force, or parallel
|
|
243
|
+
// fetches race and a stale WARNING response can overwrite LOCKED (physical E2E).
|
|
244
|
+
const chained = verifyChainRef.current.then(() => run()).catch(() => { });
|
|
245
|
+
verifyChainRef.current = chained;
|
|
246
|
+
return chained;
|
|
231
247
|
};
|
|
232
248
|
const startHeartbeat = (res) => {
|
|
233
249
|
if (heartbeatTimer.current)
|
|
@@ -264,7 +280,11 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
264
280
|
await DeviceTokenService_1.DeviceTokenService.getInstance().clearToken();
|
|
265
281
|
}
|
|
266
282
|
};
|
|
267
|
-
/**
|
|
283
|
+
/**
|
|
284
|
+
* Hardened, nonce-based remote wipe (parity with Flutter + .cursorrules §3).
|
|
285
|
+
* Only triggers when the server nonce is greater than the last executed one,
|
|
286
|
+
* then persists the new nonce so the wipe runs exactly once per command.
|
|
287
|
+
*/
|
|
268
288
|
const executeRemoteWipe = async (nonce) => {
|
|
269
289
|
const lastHandled = await CacheService_1.CacheService.getLastWipeNonce(projectId);
|
|
270
290
|
if (lastHandled !== null && nonce <= lastHandled)
|
|
@@ -279,20 +299,20 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
279
299
|
const hashedKey = crypto_js_1.default.SHA256(key).toString();
|
|
280
300
|
const timestamp = Date.now().toString();
|
|
281
301
|
const signature = await DevGuardNative.generateSignature(projectId, parseInt(timestamp, 10));
|
|
282
|
-
const payload = JSON.stringify({ projectId, providedKey: hashedKey });
|
|
283
|
-
const fetchResponse = await fetch(`${
|
|
302
|
+
const payload = JSON.stringify({ [obf_1.Obf.projectId]: projectId, [obf_1.Obf.providedKey]: hashedKey });
|
|
303
|
+
const fetchResponse = await fetch(`${obf_1.Obf.defaultApiUrl}${obf_1.Obf.unlockPath}`, {
|
|
284
304
|
method: 'POST',
|
|
285
305
|
headers: {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
...(authSecret ? {
|
|
306
|
+
[obf_1.Obf.contentType]: obf_1.Obf.appJson,
|
|
307
|
+
[obf_1.Obf.hdrSig]: signature,
|
|
308
|
+
[obf_1.Obf.hdrTs]: timestamp,
|
|
309
|
+
...(authSecret ? { [obf_1.Obf.hdrApiKey]: authSecret } : {})
|
|
290
310
|
},
|
|
291
311
|
body: payload
|
|
292
312
|
});
|
|
293
313
|
if (fetchResponse.ok) {
|
|
294
314
|
const text = await fetchResponse.text();
|
|
295
|
-
if (text ===
|
|
315
|
+
if (text === obf_1.Obf.unlocked) {
|
|
296
316
|
await verify();
|
|
297
317
|
return true;
|
|
298
318
|
}
|
|
@@ -307,7 +327,7 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
307
327
|
const setDeviceUser = async (username, email, phone, customData) => {
|
|
308
328
|
await HardwareService_1.HardwareService.getInstance().setDeviceUser(username, email, phone, customData);
|
|
309
329
|
if (!username && !email && !phone && !customData)
|
|
310
|
-
return;
|
|
330
|
+
return; // "if all values will null then no request will need to trigger to server okay"
|
|
311
331
|
await verify(true);
|
|
312
332
|
};
|
|
313
333
|
(0, react_1.useEffect)(() => {
|
|
@@ -321,15 +341,13 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
321
341
|
// Run heavy operations safely in the background JS event loop
|
|
322
342
|
setTimeout(async () => {
|
|
323
343
|
try {
|
|
324
|
-
await
|
|
344
|
+
const deviceId = await HardwareService_1.HardwareService.getInstance().getDeviceId();
|
|
345
|
+
await DevGuardLogger_1.DevGuardLogger.init(deviceId);
|
|
325
346
|
const isJailbroken = await react_native_jailbreak_1.default.check();
|
|
347
|
+
isCompromisedRef.current = isJailbroken;
|
|
326
348
|
if (isJailbroken) {
|
|
327
|
-
|
|
328
|
-
setResponse(
|
|
329
|
-
status: 'LOCKED',
|
|
330
|
-
title: 'Security Alert',
|
|
331
|
-
message: 'This application cannot run on jailbroken or rooted devices for security reasons.',
|
|
332
|
-
});
|
|
349
|
+
const locked = await GuardEnforcement_1.GuardEnforcement.apply({ status: 'ACTIVE' }, { isPhysicalDevice: true }, true);
|
|
350
|
+
setResponse(locked);
|
|
333
351
|
setStatus('LOCKED');
|
|
334
352
|
return;
|
|
335
353
|
}
|
|
@@ -375,7 +393,7 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
375
393
|
}, []);
|
|
376
394
|
const isLocked = status === 'LOCKED' || status === 'EXPIRED';
|
|
377
395
|
const showBugIcon = response?.betaFeatures?.showDiagnosticLogs === true;
|
|
378
|
-
return ((0, jsx_runtime_1.jsxs)(DevGuardContext.Provider, { value: { status, verify, unlock, setDeviceUser, isLocked, response }, children: [showWarning && status === 'WARNING' && ((0, jsx_runtime_1.jsx)(SecurityToast_1.SecurityToast, { title: response?.title || 'Security Warning', message: response?.message })), autoProtect && isLocked ? ((0, jsx_runtime_1.jsx)(LockScreen_1.LockScreen, { status: status, title: response?.title, message: response?.message, contactEmail: response?.contactEmail, contactPhone: response?.contactPhone, contactWhatsapp: response?.contactWhatsapp, allowUnlock: response?.allowUnlock, onUnlock: unlock })) : ((0, jsx_runtime_1.jsxs)(react_native_2.View, { style: { flex: 1 }, children: [children, showBugIcon && ((0, jsx_runtime_1.jsx)(react_native_safe_area_context_1.SafeAreaInsetsContext.Consumer, { children: (insets) => {
|
|
396
|
+
return ((0, jsx_runtime_1.jsxs)(DevGuardContext.Provider, { value: { status, verify, unlock, setDeviceUser, isLocked, response }, children: [showWarning && status === 'WARNING' && ((0, jsx_runtime_1.jsx)(SecurityToast_1.SecurityToast, { title: response?.title || 'Security Warning', message: response?.message })), autoProtect && isLocked ? ((0, jsx_runtime_1.jsxs)(react_native_2.View, { style: { flex: 1 }, children: [(0, jsx_runtime_1.jsx)(LockScreen_1.LockScreen, { status: status, title: response?.title, message: response?.message, contactEmail: response?.contactEmail, contactPhone: response?.contactPhone, contactWhatsapp: response?.contactWhatsapp, allowUnlock: response?.allowUnlock === true, branding: response?.branding, onUnlock: unlock }), (0, jsx_runtime_1.jsx)(react_native_2.View, { style: styles.hiddenWhileLocked, pointerEvents: "none", children: children })] })) : ((0, jsx_runtime_1.jsxs)(react_native_2.View, { style: { flex: 1 }, children: [children, showBugIcon && ((0, jsx_runtime_1.jsx)(react_native_safe_area_context_1.SafeAreaInsetsContext.Consumer, { children: (insets) => {
|
|
379
397
|
const safeInsets = insets || { top: 0, bottom: 0, right: 0, left: 0 };
|
|
380
398
|
return ((0, jsx_runtime_1.jsx)(react_native_2.TouchableOpacity, { style: [
|
|
381
399
|
styles.bugIcon,
|
|
@@ -385,6 +403,13 @@ const DevGuardProvider = ({ children, projectId, secret, apiKey, autoProtect = t
|
|
|
385
403
|
};
|
|
386
404
|
exports.DevGuardProvider = DevGuardProvider;
|
|
387
405
|
const styles = react_native_2.StyleSheet.create({
|
|
406
|
+
hiddenWhileLocked: {
|
|
407
|
+
position: 'absolute',
|
|
408
|
+
width: 1,
|
|
409
|
+
height: 1,
|
|
410
|
+
opacity: 0,
|
|
411
|
+
overflow: 'hidden',
|
|
412
|
+
},
|
|
388
413
|
bugIcon: {
|
|
389
414
|
position: 'absolute',
|
|
390
415
|
right: 20,
|
|
@@ -408,3 +433,5 @@ const useDevGuard = () => {
|
|
|
408
433
|
return context;
|
|
409
434
|
};
|
|
410
435
|
exports.useDevGuard = useDevGuard;
|
|
436
|
+
var branding_1 = require("./types/branding");
|
|
437
|
+
Object.defineProperty(exports, "resolveBrandingFooter", { enumerable: true, get: function () { return branding_1.resolveBrandingFooter; } });
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** Auto-generated by tool/genObf.js — do not edit by hand. */
|
|
2
|
+
export declare const Obf: {
|
|
3
|
+
readonly symX9: string;
|
|
4
|
+
readonly symV2: string;
|
|
5
|
+
readonly symS3: string;
|
|
6
|
+
readonly symG4: string;
|
|
7
|
+
readonly symH5: string;
|
|
8
|
+
readonly symX6: string;
|
|
9
|
+
readonly symD7: string;
|
|
10
|
+
readonly symR8: string;
|
|
11
|
+
readonly symE1: string;
|
|
12
|
+
readonly contentType: string;
|
|
13
|
+
readonly appJson: string;
|
|
14
|
+
readonly hdrSig: string;
|
|
15
|
+
readonly hdrTs: string;
|
|
16
|
+
readonly hdrTunnel: string;
|
|
17
|
+
readonly hdrApiKey: string;
|
|
18
|
+
readonly respSig: string;
|
|
19
|
+
readonly tunnelV1: string;
|
|
20
|
+
readonly projectId: string;
|
|
21
|
+
readonly deviceId: string;
|
|
22
|
+
readonly deviceName: string;
|
|
23
|
+
readonly model: string;
|
|
24
|
+
readonly os: string;
|
|
25
|
+
readonly version: string;
|
|
26
|
+
readonly isPhysicalDevice: string;
|
|
27
|
+
readonly username: string;
|
|
28
|
+
readonly email: string;
|
|
29
|
+
readonly phone: string;
|
|
30
|
+
readonly customData: string;
|
|
31
|
+
readonly fingerprint: string;
|
|
32
|
+
readonly deviceToken: string;
|
|
33
|
+
readonly location: string;
|
|
34
|
+
readonly payloadField: string;
|
|
35
|
+
readonly unlockPath: string;
|
|
36
|
+
readonly providedKey: string;
|
|
37
|
+
readonly unlocked: string;
|
|
38
|
+
readonly defaultApiUrl: string;
|
|
39
|
+
readonly betaFeatures: string;
|
|
40
|
+
readonly bypassSignature: string;
|
|
41
|
+
readonly statusField: string;
|
|
42
|
+
readonly emulatorTitle: string;
|
|
43
|
+
readonly emulatorMessage: string;
|
|
44
|
+
readonly securityTitle: string;
|
|
45
|
+
readonly compromisedMessage: string;
|
|
46
|
+
readonly compromisedLog: string;
|
|
47
|
+
readonly missingSigLog: string;
|
|
48
|
+
readonly invalidSigBypassLog: string;
|
|
49
|
+
readonly invalidSigLog: string;
|
|
50
|
+
readonly invalidUnlockKey: string;
|
|
51
|
+
readonly enterUnlockKey: string;
|
|
52
|
+
readonly licenseKeyHint: string;
|
|
53
|
+
readonly cancelLabel: string;
|
|
54
|
+
readonly unlockLabel: string;
|
|
55
|
+
readonly whatsappSupport: string;
|
|
56
|
+
readonly emailSupport: string;
|
|
57
|
+
readonly callSupport: string;
|
|
58
|
+
readonly defaultLockMessage: string;
|
|
59
|
+
readonly contactOpenError: string;
|
|
60
|
+
readonly poweredBy: string;
|
|
61
|
+
readonly securedBy: string;
|
|
62
|
+
readonly brandDefault: string;
|
|
63
|
+
readonly brandWebsite: string;
|
|
64
|
+
readonly apiUnreachable: string;
|
|
65
|
+
readonly syncSkipped: string;
|
|
66
|
+
};
|
|
67
|
+
/** Native policy gate result codes (dg_e1). */
|
|
68
|
+
export declare const PolicyLock: {
|
|
69
|
+
readonly allow: 0;
|
|
70
|
+
readonly emulator: 1;
|
|
71
|
+
readonly compromised: 2;
|
|
72
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Auto-generated by tool/genObf.js — do not edit by hand. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PolicyLock = exports.Obf = void 0;
|
|
5
|
+
const MASK = [0xF1, 0x3A, 0xC7, 0x82, 0x5E, 0xD9, 0x44, 0xAB];
|
|
6
|
+
function _d(encoded) {
|
|
7
|
+
const bytes = Uint8Array.from(encoded.map((b, i) => b ^ MASK[i % MASK.length]));
|
|
8
|
+
let out = '';
|
|
9
|
+
let i = 0;
|
|
10
|
+
while (i < bytes.length) {
|
|
11
|
+
const c = bytes[i++];
|
|
12
|
+
if (c < 0x80)
|
|
13
|
+
out += String.fromCharCode(c);
|
|
14
|
+
else if (c < 0xe0)
|
|
15
|
+
out += String.fromCharCode(((c & 0x1f) << 6) | (bytes[i++] & 0x3f));
|
|
16
|
+
else if (c < 0xf0) {
|
|
17
|
+
out += String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i++] & 0x3f) << 6) | (bytes[i++] & 0x3f));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const code = ((c & 0x07) << 18) |
|
|
21
|
+
((bytes[i++] & 0x3f) << 12) |
|
|
22
|
+
((bytes[i++] & 0x3f) << 6) |
|
|
23
|
+
(bytes[i++] & 0x3f);
|
|
24
|
+
const offset = code - 0x10000;
|
|
25
|
+
out += String.fromCharCode(0xd800 + (offset >> 10), 0xdc00 + (offset & 0x3ff));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
exports.Obf = {
|
|
31
|
+
get symX9() { return _d([149, 93, 152, 250, 103]); },
|
|
32
|
+
get symV2() { return _d([149, 93, 152, 244, 108]); },
|
|
33
|
+
get symS3() { return _d([149, 93, 152, 241, 109]); },
|
|
34
|
+
get symG4() { return _d([149, 93, 152, 229, 106]); },
|
|
35
|
+
get symH5() { return _d([149, 93, 152, 234, 107]); },
|
|
36
|
+
get symX6() { return _d([149, 93, 152, 250, 104]); },
|
|
37
|
+
get symD7() { return _d([149, 93, 152, 230, 105]); },
|
|
38
|
+
get symR8() { return _d([149, 93, 152, 240, 102]); },
|
|
39
|
+
get symE1() { return _d([149, 93, 152, 231, 111]); },
|
|
40
|
+
get contentType() { return _d([178, 85, 169, 246, 59, 183, 48, 134, 165, 67, 183, 231]); },
|
|
41
|
+
get appJson() { return _d([144, 74, 183, 238, 55, 186, 37, 223, 152, 85, 169, 173, 52, 170, 43, 197]); },
|
|
42
|
+
get hdrSig() { return _d([169, 23, 131, 231, 40, 158, 49, 202, 131, 94, 234, 209, 55, 190, 42, 202, 133, 79, 181, 231]); },
|
|
43
|
+
get hdrTs() { return _d([169, 23, 131, 231, 40, 158, 49, 202, 131, 94, 234, 214, 55, 180, 33, 216, 133, 91, 170, 242]); },
|
|
44
|
+
get hdrTunnel() { return _d([169, 23, 131, 231, 40, 158, 49, 202, 131, 94, 234, 214, 43, 183, 42, 206, 157]); },
|
|
45
|
+
get hdrApiKey() { return _d([169, 23, 131, 231, 40, 158, 49, 202, 131, 94, 234, 195, 14, 144, 105, 224, 148, 67]); },
|
|
46
|
+
get respSig() { return _d([137, 23, 163, 231, 40, 190, 49, 202, 131, 94, 234, 240, 59, 170, 52, 196, 159, 73, 162, 175, 45, 176, 35, 197, 144, 78, 178, 240, 59]); },
|
|
47
|
+
get tunnelV1() { return _d([135, 11, 234, 229, 36, 176, 52]); },
|
|
48
|
+
get projectId() { return _d([129, 72, 168, 232, 59, 186, 48, 226, 149]); },
|
|
49
|
+
get deviceId() { return _d([149, 95, 177, 235, 61, 188, 13, 207]); },
|
|
50
|
+
get deviceName() { return _d([149, 95, 177, 235, 61, 188, 10, 202, 156, 95]); },
|
|
51
|
+
get model() { return _d([156, 85, 163, 231, 50]); },
|
|
52
|
+
get os() { return _d([158, 73]); },
|
|
53
|
+
get version() { return _d([135, 95, 181, 241, 55, 182, 42]); },
|
|
54
|
+
get isPhysicalDevice() { return _d([152, 73, 151, 234, 39, 170, 45, 200, 144, 86, 131, 231, 40, 176, 39, 206]); },
|
|
55
|
+
get username() { return _d([132, 73, 162, 240, 48, 184, 41, 206]); },
|
|
56
|
+
get email() { return _d([148, 87, 166, 235, 50]); },
|
|
57
|
+
get phone() { return _d([129, 82, 168, 236, 59]); },
|
|
58
|
+
get customData() { return _d([146, 79, 180, 246, 49, 180, 0, 202, 133, 91]); },
|
|
59
|
+
get fingerprint() { return _d([151, 83, 169, 229, 59, 171, 52, 217, 152, 84, 179]); },
|
|
60
|
+
get deviceToken() { return _d([149, 95, 177, 235, 61, 188, 16, 196, 154, 95, 169]); },
|
|
61
|
+
get location() { return _d([157, 85, 164, 227, 42, 176, 43, 197]); },
|
|
62
|
+
get payloadField() { return _d([129]); },
|
|
63
|
+
get unlockPath() { return _d([222, 79, 169, 238, 49, 186, 47]); },
|
|
64
|
+
get providedKey() { return _d([129, 72, 168, 244, 55, 189, 33, 207, 186, 95, 190]); },
|
|
65
|
+
get unlocked() { return _d([164, 84, 171, 237, 61, 178, 33, 207]); },
|
|
66
|
+
get defaultApiUrl() { return _d([153, 78, 179, 242, 45, 227, 107, 132, 144, 74, 174, 172, 58, 188, 50, 204, 132, 91, 181, 230, 112, 172, 47, 132, 149, 95, 177, 229, 43, 184, 54, 207]); },
|
|
67
|
+
get betaFeatures() { return _d([147, 95, 179, 227, 24, 188, 37, 223, 132, 72, 162, 241]); },
|
|
68
|
+
get bypassSignature() { return _d([147, 67, 183, 227, 45, 170, 23, 194, 150, 84, 166, 246, 43, 171, 33]); },
|
|
69
|
+
get statusField() { return _d([130, 78, 166, 246, 43, 170]); },
|
|
70
|
+
get emulatorTitle() { return _d([180, 87, 178, 238, 63, 173, 43, 217, 209, 126, 162, 246, 59, 186, 48, 206, 149]); },
|
|
71
|
+
get emulatorMessage() { return _d([165, 82, 174, 241, 126, 184, 52, 219, 157, 83, 164, 227, 42, 176, 43, 197, 209, 89, 166, 236, 48, 182, 48, 139, 131, 79, 169, 162, 49, 183, 100, 206, 156, 79, 171, 227, 42, 182, 54, 216, 209, 85, 181, 162, 45, 176, 41, 222, 157, 91, 179, 237, 44, 170, 100, 205, 158, 72, 231, 241, 59, 186, 49, 217, 152, 78, 190, 162, 44, 188, 37, 216, 158, 84, 180, 172]); },
|
|
72
|
+
get securityTitle() { return _d([162, 95, 164, 247, 44, 176, 48, 210, 209, 123, 171, 231, 44, 173]); },
|
|
73
|
+
get compromisedMessage() { return _d([165, 82, 174, 241, 126, 184, 52, 219, 157, 83, 164, 227, 42, 176, 43, 197, 209, 89, 166, 236, 48, 182, 48, 139, 131, 79, 169, 162, 49, 183, 100, 193, 144, 83, 171, 224, 44, 182, 47, 206, 159, 26, 168, 240, 126, 171, 43, 196, 133, 95, 163, 162, 58, 188, 50, 194, 146, 95, 180, 162, 56, 182, 54, 139, 130, 95, 164, 247, 44, 176, 48, 210, 209, 72, 162, 227, 45, 182, 42, 216, 223]); },
|
|
74
|
+
get compromisedLog() { return _d([181, 95, 177, 197, 43, 184, 54, 207, 209, 105, 162, 225, 43, 171, 45, 223, 136, 26, 134, 238, 59, 171, 48, 145, 209, 121, 168, 239, 46, 171, 43, 198, 152, 73, 162, 230, 126, 189, 33, 221, 152, 89, 162, 162, 58, 188, 48, 206, 146, 78, 162, 230, 112]); },
|
|
75
|
+
get missingSigLog() { return _d([181, 95, 177, 197, 43, 184, 54, 207, 209, 105, 162, 225, 43, 171, 45, 223, 136, 26, 134, 238, 59, 171, 48, 145, 209, 119, 174, 241, 45, 176, 42, 204, 209, 73, 162, 240, 40, 188, 54, 139, 131, 95, 180, 242, 49, 183, 55, 206, 209, 73, 174, 229, 48, 184, 48, 222, 131, 95, 233]); },
|
|
76
|
+
get invalidSigBypassLog() { return _d([181, 95, 177, 197, 43, 184, 54, 207, 209, 105, 162, 225, 43, 171, 45, 223, 136, 26, 144, 227, 44, 183, 45, 197, 150, 0, 231, 203, 48, 175, 37, 199, 152, 94, 231, 241, 59, 171, 50, 206, 131, 26, 181, 231, 45, 169, 43, 197, 130, 95, 231, 241, 55, 190, 42, 202, 133, 79, 181, 231, 114, 249, 38, 222, 133, 26, 165, 251, 46, 184, 55, 216, 162, 83, 160, 236, 63, 173, 49, 217, 148, 26, 174, 241, 126, 152, 7, 255, 184, 108, 130, 172]); },
|
|
77
|
+
get invalidSigLog() { return _d([181, 95, 177, 197, 43, 184, 54, 207, 209, 105, 162, 225, 43, 171, 45, 223, 136, 26, 134, 238, 59, 171, 48, 145, 209, 115, 169, 244, 63, 181, 45, 207, 209, 73, 162, 240, 40, 188, 54, 139, 131, 95, 180, 242, 49, 183, 55, 206, 209, 73, 174, 229, 48, 184, 48, 222, 131, 95, 230, 162, 14, 182, 55, 216, 152, 88, 171, 231, 126, 173, 37, 198, 129, 95, 181, 235, 48, 190, 100, 207, 148, 78, 162, 225, 42, 188, 32, 133]); },
|
|
78
|
+
get invalidUnlockKey() { return _d([184, 84, 177, 227, 50, 176, 32, 139, 132, 84, 171, 237, 61, 178, 100, 192, 148, 67, 233, 162, 14, 181, 33, 202, 130, 95, 231, 246, 44, 160, 100, 202, 150, 91, 174, 236, 112]); },
|
|
79
|
+
get enterUnlockKey() { return _d([1, 165, 83, 19, 126, 156, 42, 223, 148, 72, 231, 215, 48, 181, 43, 200, 154, 26, 140, 231, 39]); },
|
|
80
|
+
get licenseKeyHint() { return _d([180, 84, 179, 231, 44, 249, 8, 194, 146, 95, 169, 241, 59, 249, 15, 206, 136]); },
|
|
81
|
+
get cancelLabel() { return _d([178, 91, 169, 225, 59, 181]); },
|
|
82
|
+
get unlockLabel() { return _d([164, 84, 171, 237, 61, 178]); },
|
|
83
|
+
get whatsappSupport() { return _d([166, 82, 166, 246, 45, 152, 52, 219, 209, 105, 178, 242, 46, 182, 54, 223]); },
|
|
84
|
+
get emailSupport() { return _d([180, 87, 166, 235, 50, 249, 23, 222, 129, 74, 168, 240, 42]); },
|
|
85
|
+
get callSupport() { return _d([178, 91, 171, 238, 126, 138, 49, 219, 129, 85, 181, 246]); },
|
|
86
|
+
get defaultLockMessage() { return _d([165, 82, 174, 241, 126, 184, 52, 219, 157, 83, 164, 227, 42, 176, 43, 197, 209, 82, 166, 241, 126, 187, 33, 206, 159, 26, 181, 231, 51, 182, 48, 206, 157, 67, 231, 238, 49, 186, 47, 206, 149, 26, 165, 251, 126, 173, 44, 206, 209, 94, 162, 244, 59, 181, 43, 219, 148, 72, 233]); },
|
|
87
|
+
get contactOpenError() { return _d([178, 85, 178, 238, 58, 249, 42, 196, 133, 26, 168, 242, 59, 183, 100, 223, 153, 95, 231, 225, 49, 183, 48, 202, 146, 78, 231, 227, 46, 169, 40, 194, 146, 91, 179, 235, 49, 183, 106, 139, 161, 86, 162, 227, 45, 188, 100, 198, 144, 81, 162, 162, 45, 172, 54, 206, 209, 83, 179, 162, 55, 170, 100, 194, 159, 73, 179, 227, 50, 181, 33, 207, 209, 91, 169, 230, 126, 186, 43, 197, 151, 83, 160, 247, 44, 188, 32, 133]); },
|
|
88
|
+
get poweredBy() { return _d([161, 85, 176, 231, 44, 188, 32, 139, 147, 67]); },
|
|
89
|
+
get securedBy() { return _d([162, 95, 164, 247, 44, 188, 32, 139, 147, 67]); },
|
|
90
|
+
get brandDefault() { return _d([181, 95, 177, 197, 43, 184, 54, 207]); },
|
|
91
|
+
get brandWebsite() { return _d([153, 78, 179, 242, 45, 227, 107, 132, 149, 95, 177, 229, 43, 184, 54, 207, 223, 79, 172]); },
|
|
92
|
+
get apiUnreachable() { return _d([176, 106, 142, 221, 11, 151, 22, 238, 176, 121, 143, 195, 28, 149, 1]); },
|
|
93
|
+
get syncSkipped() { return _d([181, 95, 177, 197, 43, 184, 54, 207, 203, 26, 148, 251, 48, 186, 100, 216, 154, 83, 183, 242, 59, 189, 100, 207, 132, 95, 231, 246, 49, 249, 52, 196, 157, 83, 164, 251, 112]); },
|
|
94
|
+
};
|
|
95
|
+
/** Native policy gate result codes (dg_e1). */
|
|
96
|
+
exports.PolicyLock = {
|
|
97
|
+
allow: 0,
|
|
98
|
+
emulator: 1,
|
|
99
|
+
compromised: 2,
|
|
100
|
+
};
|
|
@@ -4,7 +4,11 @@ export declare class CacheService {
|
|
|
4
4
|
static saveResponse(projectId: string, response: any): Promise<void>;
|
|
5
5
|
static getResponse(projectId: string): Promise<any | null>;
|
|
6
6
|
static clear(): Promise<void>;
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Returns the last remote-wipe nonce this client has executed, or null.
|
|
9
|
+
* Stored separately from the response cache so it survives a cache wipe
|
|
10
|
+
* (parity with Flutter's nonce persistence).
|
|
11
|
+
*/
|
|
8
12
|
static getLastWipeNonce(projectId: string): Promise<number | null>;
|
|
9
13
|
static setLastWipeNonce(projectId: string, nonce: number): Promise<void>;
|
|
10
14
|
}
|