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.
Files changed (353) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +190 -44
  3. package/android/src/main/cpp/devguard-lib.cpp +12 -11
  4. package/android/src/main/java/com/devguard/DevGuardModule.kt +15 -0
  5. package/cpp/devguard_core.c +82 -4
  6. package/cpp/devguard_core.h +15 -13
  7. package/ios/DevGuard.mm +20 -6
  8. package/lib/components/LockScreen.d.ts +2 -0
  9. package/lib/components/LockScreen.js +90 -44
  10. package/lib/index.d.ts +4 -1
  11. package/lib/index.js +179 -152
  12. package/lib/internal/obf.d.ts +72 -0
  13. package/lib/internal/obf.js +100 -0
  14. package/lib/services/CacheService.d.ts +5 -1
  15. package/lib/services/CacheService.js +8 -12
  16. package/lib/services/DevGuardLogger.d.ts +1 -1
  17. package/lib/services/DevGuardLogger.js +13 -3
  18. package/lib/services/DeviceTokenService.d.ts +4 -1
  19. package/lib/services/DeviceTokenService.js +5 -2
  20. package/lib/services/GuardEnforcement.d.ts +3 -12
  21. package/lib/services/GuardEnforcement.js +34 -15
  22. package/lib/services/HardwareService.d.ts +14 -1
  23. package/lib/services/HardwareService.js +63 -1
  24. package/lib/services/cacheCrypto.d.ts +6 -0
  25. package/lib/services/cacheCrypto.js +40 -0
  26. package/lib/types/branding.d.ts +21 -0
  27. package/lib/types/branding.js +30 -0
  28. package/lib/utils/contactUrls.d.ts +4 -0
  29. package/lib/utils/contactUrls.js +18 -0
  30. package/package.json +28 -8
  31. package/react-native-dev-guard.podspec +19 -0
  32. package/screenshots/access-suspended.png +0 -0
  33. package/screenshots/payment-reminder.png +0 -0
  34. package/screenshots/welcome-screen.png +0 -0
  35. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  36. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  37. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  38. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/cache-v2-ca87e29d866016c47643.json +0 -1287
  39. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-afc39e04c88d618b9499.json +0 -182
  40. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-004ad46f03b4d6b2acd6.json +0 -59
  41. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/index-2026-05-15T08-21-19-0083.json +0 -92
  42. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.cmake/api/v1/reply/target-devguard-Debug-8c0ebbb0cdb88d164b64.json +0 -160
  43. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.ninja_deps +0 -0
  44. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/.ninja_log +0 -15
  45. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeCache.txt +0 -391
  46. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
  47. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
  48. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
  49. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
  50. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
  51. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -236
  52. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
  53. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
  54. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
  55. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/CMakeFiles/rules.ninja +0 -74
  56. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/additional_project_files.txt +0 -0
  57. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/android_gradle_build.json +0 -40
  58. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/android_gradle_build_mini.json +0 -27
  59. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/build.ninja +0 -154
  60. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/build_file_index.txt +0 -1
  61. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/cmake_install.cmake +0 -54
  62. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/compile_commands.json +0 -12
  63. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/compile_commands.json.bin +0 -0
  64. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/configure_fingerprint.bin +0 -29
  65. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/metadata_generation_command.txt +0 -19
  66. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/prefab_config.json +0 -4
  67. package/android/.cxx/Debug/4s4f1av3/arm64-v8a/symbol_folder_index.txt +0 -1
  68. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  69. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  70. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  71. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/cache-v2-02400eb6fc4793fa6bf2.json +0 -1287
  72. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-d0fc95efa84cbe47849a.json +0 -379
  73. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-a7a363de64e45a261589.json +0 -59
  74. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/index-2026-05-15T08-21-21-0243.json +0 -92
  75. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.cmake/api/v1/reply/target-devguard-Debug-53eeaa7145cf9770f3d7.json +0 -160
  76. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.ninja_deps +0 -0
  77. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/.ninja_log +0 -10
  78. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeCache.txt +0 -391
  79. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
  80. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
  81. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
  82. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
  83. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
  84. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/CMakeOutput.log +0 -240
  85. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/TargetDirectories.txt +0 -3
  86. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/cmake.check_cache +0 -1
  87. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
  88. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/CMakeFiles/rules.ninja +0 -74
  89. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/additional_project_files.txt +0 -0
  90. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/android_gradle_build.json +0 -40
  91. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/android_gradle_build_mini.json +0 -27
  92. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/build.ninja +0 -154
  93. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/build_file_index.txt +0 -1
  94. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/cmake_install.cmake +0 -54
  95. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/compile_commands.json +0 -12
  96. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/compile_commands.json.bin +0 -0
  97. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/configure_fingerprint.bin +0 -29
  98. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/metadata_generation_command.txt +0 -19
  99. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/prefab_config.json +0 -4
  100. package/android/.cxx/Debug/4s4f1av3/armeabi-v7a/symbol_folder_index.txt +0 -1
  101. package/android/.cxx/Debug/4s4f1av3/hash_key.txt +0 -26
  102. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  103. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  104. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  105. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/cache-v2-ec883f5c922c646acf2d.json +0 -1287
  106. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/cmakeFiles-v1-028bf03c3b9bd0e609c0.json +0 -379
  107. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/codemodel-v2-6c0215a4bb6e3b0b5223.json +0 -59
  108. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/index-2026-05-15T08-21-22-0722.json +0 -92
  109. package/android/.cxx/Debug/4s4f1av3/x86/.cmake/api/v1/reply/target-devguard-Debug-2139b18dc63b630666db.json +0 -160
  110. package/android/.cxx/Debug/4s4f1av3/x86/.ninja_deps +0 -0
  111. package/android/.cxx/Debug/4s4f1av3/x86/.ninja_log +0 -10
  112. package/android/.cxx/Debug/4s4f1av3/x86/CMakeCache.txt +0 -391
  113. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
  114. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
  115. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
  116. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
  117. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
  118. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/CMakeOutput.log +0 -230
  119. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/TargetDirectories.txt +0 -3
  120. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/cmake.check_cache +0 -1
  121. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
  122. package/android/.cxx/Debug/4s4f1av3/x86/CMakeFiles/rules.ninja +0 -74
  123. package/android/.cxx/Debug/4s4f1av3/x86/additional_project_files.txt +0 -0
  124. package/android/.cxx/Debug/4s4f1av3/x86/android_gradle_build.json +0 -40
  125. package/android/.cxx/Debug/4s4f1av3/x86/android_gradle_build_mini.json +0 -27
  126. package/android/.cxx/Debug/4s4f1av3/x86/build.ninja +0 -154
  127. package/android/.cxx/Debug/4s4f1av3/x86/build_file_index.txt +0 -1
  128. package/android/.cxx/Debug/4s4f1av3/x86/cmake_install.cmake +0 -54
  129. package/android/.cxx/Debug/4s4f1av3/x86/compile_commands.json +0 -12
  130. package/android/.cxx/Debug/4s4f1av3/x86/compile_commands.json.bin +0 -0
  131. package/android/.cxx/Debug/4s4f1av3/x86/configure_fingerprint.bin +0 -29
  132. package/android/.cxx/Debug/4s4f1av3/x86/metadata_generation_command.txt +0 -19
  133. package/android/.cxx/Debug/4s4f1av3/x86/prefab_config.json +0 -4
  134. package/android/.cxx/Debug/4s4f1av3/x86/symbol_folder_index.txt +0 -1
  135. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  136. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  137. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  138. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/cache-v2-7ec870c116aeb770686e.json +0 -1287
  139. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-f2e6a276d8adf420c6b9.json +0 -379
  140. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/codemodel-v2-a4f2c2fefb1e4261b2d6.json +0 -59
  141. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/index-2026-05-15T08-21-24-0187.json +0 -92
  142. package/android/.cxx/Debug/4s4f1av3/x86_64/.cmake/api/v1/reply/target-devguard-Debug-077cad881ac8d6864f8f.json +0 -160
  143. package/android/.cxx/Debug/4s4f1av3/x86_64/.ninja_deps +0 -0
  144. package/android/.cxx/Debug/4s4f1av3/x86_64/.ninja_log +0 -10
  145. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeCache.txt +0 -391
  146. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeCCompiler.cmake +0 -77
  147. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeCXXCompiler.cmake +0 -89
  148. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_C.bin +0 -0
  149. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeDetermineCompilerABI_CXX.bin +0 -0
  150. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/3.18.1-g262b901/CMakeSystem.cmake +0 -15
  151. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/CMakeOutput.log +0 -230
  152. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/TargetDirectories.txt +0 -3
  153. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/cmake.check_cache +0 -1
  154. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/devguard.dir/devguard-lib.cpp.o +0 -0
  155. package/android/.cxx/Debug/4s4f1av3/x86_64/CMakeFiles/rules.ninja +0 -74
  156. package/android/.cxx/Debug/4s4f1av3/x86_64/additional_project_files.txt +0 -0
  157. package/android/.cxx/Debug/4s4f1av3/x86_64/android_gradle_build.json +0 -40
  158. package/android/.cxx/Debug/4s4f1av3/x86_64/android_gradle_build_mini.json +0 -27
  159. package/android/.cxx/Debug/4s4f1av3/x86_64/build.ninja +0 -154
  160. package/android/.cxx/Debug/4s4f1av3/x86_64/build_file_index.txt +0 -1
  161. package/android/.cxx/Debug/4s4f1av3/x86_64/cmake_install.cmake +0 -54
  162. package/android/.cxx/Debug/4s4f1av3/x86_64/compile_commands.json +0 -12
  163. package/android/.cxx/Debug/4s4f1av3/x86_64/compile_commands.json.bin +0 -0
  164. package/android/.cxx/Debug/4s4f1av3/x86_64/configure_fingerprint.bin +0 -29
  165. package/android/.cxx/Debug/4s4f1av3/x86_64/metadata_generation_command.txt +0 -19
  166. package/android/.cxx/Debug/4s4f1av3/x86_64/prefab_config.json +0 -4
  167. package/android/.cxx/Debug/4s4f1av3/x86_64/symbol_folder_index.txt +0 -1
  168. package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -12
  169. package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +0 -12
  170. package/android/.cxx/tools/debug/x86/compile_commands.json +0 -12
  171. package/android/.cxx/tools/debug/x86_64/compile_commands.json +0 -12
  172. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  173. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  174. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  175. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  176. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  177. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  178. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  179. package/android/.gradle/8.9/gc.properties +0 -0
  180. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  181. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  182. package/android/.gradle/vcs-1/gc.properties +0 -0
  183. package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/results.bin +0 -1
  184. package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/BuildConfig.dex +0 -0
  185. package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/DevGuardModule.dex +0 -0
  186. package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/devguard/DevGuardPackage.dex +0 -0
  187. package/android/build/.transforms/07ab8b2284230b9b98454cb3baa5db54/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  188. package/android/build/.transforms/ae351402e6cba75b162136aa850e1ba2/results.bin +0 -1
  189. package/android/build/.transforms/ae351402e6cba75b162136aa850e1ba2/transformed/classes/classes_dex/classes.dex +0 -0
  190. package/android/build/generated/source/buildConfig/debug/com/devguard/BuildConfig.java +0 -10
  191. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -9
  192. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  193. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  194. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  195. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  196. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  197. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  198. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_command_devguard +0 -4
  199. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_model.json +0 -187
  200. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_stderr_devguard.txt +0 -0
  201. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/build_stdout_devguard.txt +0 -2
  202. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_111_timing.txt +0 -3
  203. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_1463_timing.txt +0 -3
  204. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_324_timing.txt +0 -2
  205. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_475_timing.txt +0 -3
  206. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/generate_cxx_metadata_622_timing.txt +0 -2
  207. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/arm64-v8a/metadata_generation_record.json +0 -41
  208. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_command_devguard +0 -4
  209. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_model.json +0 -187
  210. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_stderr_devguard.txt +0 -0
  211. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/build_stdout_devguard.txt +0 -2
  212. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_111_timing.txt +0 -3
  213. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_1459_timing.txt +0 -3
  214. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_324_timing.txt +0 -2
  215. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_475_timing.txt +0 -2
  216. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/generate_cxx_metadata_622_timing.txt +0 -3
  217. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/armeabi-v7a/metadata_generation_record.json +0 -41
  218. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_command_devguard +0 -4
  219. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_model.json +0 -187
  220. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_stderr_devguard.txt +0 -0
  221. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/build_stdout_devguard.txt +0 -2
  222. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_111_timing.txt +0 -2
  223. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_1459_timing.txt +0 -2
  224. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_324_timing.txt +0 -2
  225. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_475_timing.txt +0 -2
  226. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/generate_cxx_metadata_622_timing.txt +0 -2
  227. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86/metadata_generation_record.json +0 -41
  228. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_command_devguard +0 -4
  229. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_model.json +0 -187
  230. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_stderr_devguard.txt +0 -0
  231. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/build_stdout_devguard.txt +0 -2
  232. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_111_timing.txt +0 -2
  233. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_1459_timing.txt +0 -3
  234. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_324_timing.txt +0 -2
  235. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_475_timing.txt +0 -2
  236. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/generate_cxx_metadata_622_timing.txt +0 -2
  237. package/android/build/intermediates/cxx/Debug/4s4f1av3/logs/x86_64/metadata_generation_record.json +0 -41
  238. package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/arm64-v8a/libdevguard.so +0 -0
  239. package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/armeabi-v7a/libdevguard.so +0 -0
  240. package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/x86/libdevguard.so +0 -0
  241. package/android/build/intermediates/cxx/Debug/4s4f1av3/obj/x86_64/libdevguard.so +0 -0
  242. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  243. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  244. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  245. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  246. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  247. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-dev-guard_debug.kotlin_module +0 -0
  248. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/devguard/BuildConfig.class +0 -0
  249. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libdevguard.so +0 -0
  250. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libdevguard.so +0 -0
  251. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libdevguard.so +0 -0
  252. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libdevguard.so +0 -0
  253. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  254. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -11
  255. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -9
  256. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libdevguard.so +0 -0
  257. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libdevguard.so +0 -0
  258. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libdevguard.so +0 -0
  259. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libdevguard.so +0 -0
  260. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  261. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  262. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-dev-guard_debug.kotlin_module +0 -0
  263. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/BuildConfig.class +0 -0
  264. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/DevGuardModule.class +0 -0
  265. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/devguard/DevGuardPackage.class +0 -0
  266. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  267. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  268. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  269. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  270. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  271. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  272. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  273. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  274. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  275. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  276. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  277. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  278. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  279. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  280. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  281. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  304. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  305. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  306. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  307. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  308. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  309. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  310. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  311. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  312. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  313. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  314. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  315. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  316. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  317. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  318. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  319. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  320. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  321. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  322. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  323. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  324. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  325. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  326. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  327. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  328. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  329. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  330. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  331. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  332. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  333. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  334. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  335. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  336. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  337. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  338. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  339. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  340. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  341. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  342. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  343. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  344. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  345. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  346. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  347. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  348. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  349. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -21
  350. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  351. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-dev-guard_debug.kotlin_module +0 -0
  352. package/android/build/tmp/kotlin-classes/debug/com/devguard/DevGuardModule.class +0 -0
  353. 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
- // Latest response for long-lived closures (AppState listener, heartbeat).
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
- if (!shouldSync(force, trigger)) {
94
- console.log('DevGuard: Sync skipped due to policy.');
95
- return;
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
- const responseText = await fetchResponse.text();
171
- const result = JSON.parse(responseText);
172
- // Verify Response Signature
173
- const responseSig = fetchResponse.headers.get('X-DevGuard-Response-Signature');
174
- if (responseSig) {
175
- const isValid = await DevGuardNative.verifyResponse(responseText, responseSig);
176
- if (!isValid) {
177
- if (result.betaFeatures?.bypassSignature === true) {
178
- console.warn('DevGuard: Response signature mismatch, but bypassSignature is ACTIVE.');
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
- console.error('DevGuard: Response signature mismatch! Possible tampering detected.');
182
- setStatus('LOCKED');
183
- return;
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
- else {
188
- console.warn('DevGuard: Missing server response signature.');
189
- }
190
- // Client-side enforcement (e.g. blockEmulators).
191
- const enforced = GuardEnforcement_1.GuardEnforcement.apply(result, metadata);
192
- const finalStatus = String(enforced.status || 'ERROR').toUpperCase();
193
- responseRef.current = enforced; // keep ref fresh for chained/triggered syncs
194
- setResponse(enforced);
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
- /** Nonce-based remote wipe — runs once per server command. */
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(`${API_URL}/unlock`, {
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
- 'Content-Type': 'application/json',
287
- 'X-DevGuard-Signature': signature,
288
- 'X-DevGuard-Timestamp': timestamp,
289
- ...(authSecret ? { 'X-DevGuard-API-Key': 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 === 'Unlocked') {
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 DevGuardLogger_1.DevGuardLogger.init();
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
- console.warn('DevGuard Security Alert: Compromised device detected.');
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
- /** Last remote-wipe nonce executed on this device, or null. */
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
  }