react-native-update 10.59.2 → 10.61.0

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 (877) hide show
  1. package/README-CN.md +13 -7
  2. package/README.md +15 -6
  3. package/android/build.gradle +25 -33
  4. package/android/jni/Android.mk +18 -24
  5. package/android/jni/Application.mk +3 -1
  6. package/android/lib/arm64-v8a/librnpushy.so +0 -0
  7. package/android/lib/armeabi-v7a/librnpushy.so +0 -0
  8. package/android/lib/x86/librnpushy.so +0 -0
  9. package/android/lib/x86_64/librnpushy.so +0 -0
  10. package/android/proguard.pro +9 -7
  11. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +3 -8
  12. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +24 -6
  13. package/android/src/main/java/cn/reactnative/modules/update/BundlePreparationResult.java +2 -0
  14. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +50 -51
  15. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +12 -13
  16. package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +3 -0
  17. package/android/src/main/java/cn/reactnative/modules/update/CrashHold.java +22 -30
  18. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +284 -452
  19. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +8 -4
  20. package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -3
  21. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +1 -1
  22. package/android/src/main/java/cn/reactnative/modules/update/FlowBridge.java +39 -8
  23. package/android/src/main/java/cn/reactnative/modules/update/HttpClients.java +63 -0
  24. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +0 -45
  25. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +68 -116
  26. package/android/src/main/java/cn/reactnative/modules/update/NativeCore.java +10 -2
  27. package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +1 -1
  28. package/android/src/main/java/cn/reactnative/modules/update/PushyRuntime.java +53 -62
  29. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +9 -24
  30. package/android/src/main/java/cn/reactnative/modules/update/ResumePlan.java +31 -0
  31. package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +42 -80
  32. package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +22 -39
  33. package/android/src/main/java/cn/reactnative/modules/update/SyncCoordinator.java +474 -500
  34. package/android/src/main/java/cn/reactnative/modules/update/Texts.java +15 -1
  35. package/android/src/main/java/cn/reactnative/modules/update/Threads.java +44 -0
  36. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +265 -188
  37. package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +1 -1
  38. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +75 -17
  39. package/android/src/main/java/cn/reactnative/modules/update/{UpdateModuleImpl.java → UpdateModule.java} +114 -96
  40. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +16 -19
  41. package/android/src/main/java/cn/reactnative/modules/update/VersionScopedKeys.java +64 -0
  42. package/android/src/oldarch/cn/reactnative/modules/update/NativePushySpec.java +71 -0
  43. package/cpp/android_jni/archive_limits_jni.cpp +83 -0
  44. package/cpp/android_jni/install_record_jni.cpp +89 -0
  45. package/cpp/android_jni/jni_log.h +30 -0
  46. package/cpp/android_jni/jni_natives.h +46 -0
  47. package/cpp/android_jni/jni_registration.cpp +146 -0
  48. package/cpp/android_jni/jni_util.h +160 -0
  49. package/cpp/android_jni/resume_plan_jni.cpp +58 -0
  50. package/cpp/android_jni/update_core_android.cpp +448 -0
  51. package/cpp/android_jni/update_flow_jni.cpp +150 -0
  52. package/{android/jni → cpp/hpatch}/hpatch.c +5 -5
  53. package/{android/jni → cpp/hpatch}/hpatch.h +4 -1
  54. package/cpp/patch_core/archive_limits.cpp +194 -0
  55. package/cpp/patch_core/archive_limits.h +101 -10
  56. package/cpp/patch_core/archive_patch_core.cpp +98 -15
  57. package/cpp/patch_core/archive_patch_core.h +51 -0
  58. package/cpp/patch_core/digest.h +5 -4
  59. package/cpp/patch_core/error_codes.h +15 -11
  60. package/cpp/patch_core/install_record.cpp +430 -0
  61. package/cpp/patch_core/install_record.h +165 -9
  62. package/cpp/patch_core/native_texts.h +102 -0
  63. package/cpp/patch_core/patch_core.cpp +62 -16
  64. package/cpp/patch_core/patch_core.h +27 -7
  65. package/cpp/patch_core/patch_manifest.cpp +201 -0
  66. package/cpp/patch_core/patch_manifest.h +74 -0
  67. package/cpp/patch_core/resume_plan.cpp +226 -0
  68. package/cpp/patch_core/resume_plan.h +88 -0
  69. package/cpp/patch_core/state_ops.h +5 -3
  70. package/cpp/update_flow_core/flow_json.cpp +82 -8
  71. package/cpp/update_flow_core/flow_json.h +21 -0
  72. package/cpp/update_flow_core/native_config.cpp +436 -0
  73. package/cpp/update_flow_core/native_config.h +84 -0
  74. package/cpp/update_flow_core/native_round.cpp +321 -0
  75. package/cpp/update_flow_core/native_round.h +94 -0
  76. package/cpp/update_flow_core/round_engine.cpp +456 -0
  77. package/cpp/update_flow_core/round_engine.h +106 -0
  78. package/cpp/update_flow_core/update_flow_core.cpp +5 -14
  79. package/cpp/update_flow_core/update_flow_core.h +2 -2
  80. package/harmony/hvigor-plugin.ts +11 -19
  81. package/harmony/pushy/src/main/cpp/CMakeLists.txt +19 -26
  82. package/harmony/pushy/src/main/cpp/PushyPackage.h +2 -2
  83. package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +57 -94
  84. package/harmony/pushy/src/main/cpp/pushy.cpp +817 -518
  85. package/harmony/pushy/src/main/ets/ArchiveLimits.ts +55 -75
  86. package/harmony/pushy/src/main/ets/DownloadTask.ts +279 -539
  87. package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +6 -6
  88. package/harmony/pushy/src/main/ets/ErrorCodes.ts +3 -15
  89. package/harmony/pushy/src/main/ets/EventHub.ts +1 -1
  90. package/harmony/pushy/src/main/ets/InstallRecord.ts +54 -151
  91. package/harmony/pushy/src/main/ets/Logger.ts +20 -34
  92. package/harmony/pushy/src/main/ets/NativePatchCore.ts +150 -41
  93. package/harmony/pushy/src/main/ets/PushyConfiguration.ts +8 -85
  94. package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +8 -3
  95. package/harmony/pushy/src/main/ets/PushyTurboModule.ts +11 -25
  96. package/harmony/pushy/src/main/ets/SaveFile.ts +99 -18
  97. package/harmony/pushy/src/main/ets/SyncCoordinator.ts +291 -543
  98. package/harmony/pushy/src/main/ets/Texts.ts +8 -7
  99. package/harmony/pushy/src/main/ets/UpdateContext.ts +245 -152
  100. package/harmony/pushy.har +0 -0
  101. package/ios/RCTPushy/RCTPushy+Launch.mm +190 -0
  102. package/ios/RCTPushy/RCTPushy.h +12 -0
  103. package/ios/RCTPushy/RCTPushy.mm +135 -2666
  104. package/ios/RCTPushy/RCTPushyCommon.h +28 -0
  105. package/ios/RCTPushy/RCTPushyConfiguration.h +0 -8
  106. package/ios/RCTPushy/RCTPushyConfiguration.mm +40 -123
  107. package/ios/RCTPushy/RCTPushyDownloader.mm +152 -198
  108. package/ios/RCTPushy/RCTPushyInstallRecord.mm +101 -0
  109. package/ios/RCTPushy/RCTPushyInstaller.mm +732 -0
  110. package/ios/RCTPushy/RCTPushyInternal.h +185 -0
  111. package/ios/RCTPushy/RCTPushyOrchestrator.mm +969 -0
  112. package/ios/RCTPushy/RCTPushyState.mm +382 -0
  113. package/package.json +46 -25
  114. package/react-native-update.podspec +73 -82
  115. package/src/client.ts +126 -1633
  116. package/src/clientActivation.ts +324 -0
  117. package/src/clientCheck.ts +405 -0
  118. package/src/clientDownload.ts +448 -0
  119. package/src/clientNativeConfig.ts +171 -0
  120. package/src/clientReporter.ts +398 -0
  121. package/src/clientState.ts +51 -0
  122. package/src/context.ts +1 -1
  123. package/src/core.ts +39 -10
  124. package/src/endpoint.ts +22 -8
  125. package/src/error.ts +18 -35
  126. package/src/i18n.ts +18 -83
  127. package/src/locales/en.ts +1 -5
  128. package/src/locales/zh.ts +1 -5
  129. package/src/provider.tsx +86 -67
  130. package/src/telemetry.ts +0 -13
  131. package/src/type.ts +0 -15
  132. package/src/updateFlowCore.ts +116 -10
  133. package/src/utils.ts +49 -42
  134. package/android/jni/HDiffPatch/.travis.yml +0 -33
  135. package/android/jni/HDiffPatch/CHANGELOG.md +0 -153
  136. package/android/jni/HDiffPatch/Makefile +0 -157
  137. package/android/jni/HDiffPatch/_atosize.h +0 -83
  138. package/android/jni/HDiffPatch/_clock_for_demo.h +0 -47
  139. package/android/jni/HDiffPatch/_dir_ignore.h +0 -191
  140. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +0 -37
  141. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +0 -7
  142. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +0 -1
  143. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +0 -1
  144. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +0 -18
  145. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +0 -20
  146. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +0 -28
  147. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +0 -8
  148. package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +0 -8
  149. package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +0 -219
  150. package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +0 -156
  151. package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +0 -65
  152. package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +0 -105
  153. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +0 -237
  154. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +0 -3
  155. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +0 -318
  156. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +0 -3
  157. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +0 -182
  158. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +0 -3
  159. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +0 -30
  160. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  161. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +0 -408
  162. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  163. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +0 -573
  164. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  165. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  166. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +0 -396
  167. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  168. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +0 -268
  169. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  170. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +0 -361
  171. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  172. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +0 -301
  173. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  174. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  175. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +0 -411
  176. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  177. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +0 -504
  178. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  179. package/android/jni/HDiffPatch/checksum_plugin_demo.h +0 -344
  180. package/android/jni/HDiffPatch/compress_parallel.cpp +0 -166
  181. package/android/jni/HDiffPatch/compress_parallel.h +0 -59
  182. package/android/jni/HDiffPatch/compress_plugin_demo.h +0 -1152
  183. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +0 -797
  184. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +0 -65
  185. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +0 -200
  186. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +0 -178
  187. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +0 -357
  188. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +0 -87
  189. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +0 -151
  190. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +0 -770
  191. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +0 -236
  192. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +0 -47
  193. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +0 -112
  194. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +0 -53
  195. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +0 -331
  196. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +0 -144
  197. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +0 -176
  198. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +0 -84
  199. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +0 -146
  200. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +0 -61
  201. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +0 -152
  202. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +0 -76
  203. package/android/jni/HDiffPatch/hdiffz.cpp +0 -1570
  204. package/android/jni/HDiffPatch/hpatch_dir_listener.h +0 -290
  205. package/android/jni/HDiffPatch/hpatchz.c +0 -1221
  206. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +0 -1025
  207. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +0 -116
  208. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +0 -72
  209. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +0 -213
  210. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +0 -63
  211. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +0 -170
  212. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +0 -86
  213. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +0 -89
  214. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +0 -13
  215. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +0 -398
  216. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +0 -194
  217. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +0 -13
  218. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +0 -204
  219. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +0 -207
  220. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +0 -815
  221. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +0 -586
  222. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +0 -381
  223. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +0 -352
  224. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +0 -137
  225. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +0 -137
  226. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +0 -70
  227. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +0 -628
  228. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +0 -87
  229. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +0 -363
  230. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +0 -139
  231. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +0 -68
  232. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +0 -115
  233. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +0 -342
  234. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +0 -94
  235. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +0 -52
  236. package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +0 -174
  237. package/android/jni/HDiffPatch/libParallel/parallel_channel.h +0 -73
  238. package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +0 -367
  239. package/android/jni/HDiffPatch/libParallel/parallel_import.h +0 -92
  240. package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +0 -100
  241. package/android/jni/lzma/Asm/x86/7zAsm.asm +0 -147
  242. package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +0 -147
  243. package/android/jni/lzma/Asm/x86/AesOpt.asm +0 -237
  244. package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +0 -1258
  245. package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +0 -205
  246. package/android/jni/lzma/C/7z.h +0 -202
  247. package/android/jni/lzma/C/7zAlloc.c +0 -80
  248. package/android/jni/lzma/C/7zAlloc.h +0 -19
  249. package/android/jni/lzma/C/7zArcIn.c +0 -1771
  250. package/android/jni/lzma/C/7zBuf.c +0 -36
  251. package/android/jni/lzma/C/7zBuf.h +0 -35
  252. package/android/jni/lzma/C/7zBuf2.c +0 -52
  253. package/android/jni/lzma/C/7zCrc.c +0 -128
  254. package/android/jni/lzma/C/7zCrc.h +0 -25
  255. package/android/jni/lzma/C/7zCrcOpt.c +0 -115
  256. package/android/jni/lzma/C/7zDec.c +0 -591
  257. package/android/jni/lzma/C/7zFile.c +0 -286
  258. package/android/jni/lzma/C/7zFile.h +0 -83
  259. package/android/jni/lzma/C/7zStream.c +0 -176
  260. package/android/jni/lzma/C/7zVersion.h +0 -27
  261. package/android/jni/lzma/C/7zVersion.rc +0 -55
  262. package/android/jni/lzma/C/Aes.c +0 -306
  263. package/android/jni/lzma/C/Aes.h +0 -38
  264. package/android/jni/lzma/C/AesOpt.c +0 -184
  265. package/android/jni/lzma/C/Alloc.c +0 -455
  266. package/android/jni/lzma/C/Alloc.h +0 -51
  267. package/android/jni/lzma/C/Bcj2.c +0 -257
  268. package/android/jni/lzma/C/Bcj2.h +0 -146
  269. package/android/jni/lzma/C/Bcj2Enc.c +0 -311
  270. package/android/jni/lzma/C/Bra.c +0 -230
  271. package/android/jni/lzma/C/Bra.h +0 -64
  272. package/android/jni/lzma/C/Bra86.c +0 -82
  273. package/android/jni/lzma/C/BraIA64.c +0 -53
  274. package/android/jni/lzma/C/CpuArch.c +0 -218
  275. package/android/jni/lzma/C/CpuArch.h +0 -336
  276. package/android/jni/lzma/C/Delta.c +0 -64
  277. package/android/jni/lzma/C/Delta.h +0 -19
  278. package/android/jni/lzma/C/DllSecur.c +0 -108
  279. package/android/jni/lzma/C/DllSecur.h +0 -20
  280. package/android/jni/lzma/C/LzFind.c +0 -1127
  281. package/android/jni/lzma/C/LzFind.h +0 -121
  282. package/android/jni/lzma/C/LzFindMt.c +0 -853
  283. package/android/jni/lzma/C/LzFindMt.h +0 -101
  284. package/android/jni/lzma/C/LzHash.h +0 -57
  285. package/android/jni/lzma/C/Lzma2DecMt.c +0 -1082
  286. package/android/jni/lzma/C/Lzma2DecMt.h +0 -79
  287. package/android/jni/lzma/C/Lzma2Enc.c +0 -803
  288. package/android/jni/lzma/C/Lzma2Enc.h +0 -55
  289. package/android/jni/lzma/C/Lzma86.h +0 -111
  290. package/android/jni/lzma/C/Lzma86Dec.c +0 -54
  291. package/android/jni/lzma/C/Lzma86Enc.c +0 -106
  292. package/android/jni/lzma/C/LzmaEnc.c +0 -2976
  293. package/android/jni/lzma/C/LzmaEnc.h +0 -76
  294. package/android/jni/lzma/C/LzmaLib.c +0 -40
  295. package/android/jni/lzma/C/LzmaLib.h +0 -131
  296. package/android/jni/lzma/C/MtCoder.c +0 -601
  297. package/android/jni/lzma/C/MtCoder.h +0 -141
  298. package/android/jni/lzma/C/MtDec.c +0 -1138
  299. package/android/jni/lzma/C/MtDec.h +0 -201
  300. package/android/jni/lzma/C/Ppmd.h +0 -85
  301. package/android/jni/lzma/C/Ppmd7.c +0 -712
  302. package/android/jni/lzma/C/Ppmd7.h +0 -142
  303. package/android/jni/lzma/C/Ppmd7Dec.c +0 -191
  304. package/android/jni/lzma/C/Ppmd7Enc.c +0 -187
  305. package/android/jni/lzma/C/RotateDefs.h +0 -30
  306. package/android/jni/lzma/C/Sha256.c +0 -248
  307. package/android/jni/lzma/C/Sha256.h +0 -26
  308. package/android/jni/lzma/C/Sort.c +0 -141
  309. package/android/jni/lzma/C/Sort.h +0 -18
  310. package/android/jni/lzma/C/Threads.c +0 -95
  311. package/android/jni/lzma/C/Threads.h +0 -70
  312. package/android/jni/lzma/C/ThreadsP.c +0 -396
  313. package/android/jni/lzma/C/ThreadsP.h +0 -31
  314. package/android/jni/lzma/C/Util/7z/7z.dsp +0 -241
  315. package/android/jni/lzma/C/Util/7z/7z.dsw +0 -29
  316. package/android/jni/lzma/C/Util/7z/7zMain.c +0 -686
  317. package/android/jni/lzma/C/Util/7z/Precomp.c +0 -4
  318. package/android/jni/lzma/C/Util/7z/Precomp.h +0 -10
  319. package/android/jni/lzma/C/Util/7z/makefile +0 -40
  320. package/android/jni/lzma/C/Util/7z/makefile.gcc +0 -75
  321. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +0 -258
  322. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +0 -168
  323. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +0 -29
  324. package/android/jni/lzma/C/Util/Lzma/makefile +0 -28
  325. package/android/jni/lzma/C/Util/Lzma/makefile.gcc +0 -44
  326. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +0 -4
  327. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +0 -178
  328. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +0 -29
  329. package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +0 -14
  330. package/android/jni/lzma/C/Util/LzmaLib/makefile +0 -34
  331. package/android/jni/lzma/C/Util/LzmaLib/resource.rc +0 -3
  332. package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +0 -4
  333. package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +0 -10
  334. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +0 -640
  335. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +0 -231
  336. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +0 -29
  337. package/android/jni/lzma/C/Util/SfxSetup/makefile +0 -37
  338. package/android/jni/lzma/C/Util/SfxSetup/makefile_con +0 -38
  339. package/android/jni/lzma/C/Util/SfxSetup/resource.rc +0 -5
  340. package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
  341. package/android/jni/lzma/C/Xz.c +0 -90
  342. package/android/jni/lzma/C/Xz.h +0 -460
  343. package/android/jni/lzma/C/XzCrc64.c +0 -86
  344. package/android/jni/lzma/C/XzCrc64.h +0 -26
  345. package/android/jni/lzma/C/XzCrc64Opt.c +0 -69
  346. package/android/jni/lzma/C/XzDec.c +0 -2766
  347. package/android/jni/lzma/C/XzEnc.c +0 -1329
  348. package/android/jni/lzma/C/XzEnc.h +0 -60
  349. package/android/jni/lzma/C/XzIn.c +0 -319
  350. package/android/jni/lzma/CPP/7zip/7zip.mak +0 -240
  351. package/android/jni/lzma/CPP/7zip/Aes.mak +0 -7
  352. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +0 -3
  353. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +0 -76
  354. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +0 -569
  355. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +0 -70
  356. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +0 -678
  357. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +0 -92
  358. package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +0 -423
  359. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +0 -139
  360. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +0 -61
  361. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +0 -763
  362. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +0 -181
  363. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +0 -942
  364. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +0 -19
  365. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +0 -148
  366. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +0 -1666
  367. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +0 -445
  368. package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +0 -202
  369. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +0 -901
  370. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +0 -335
  371. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +0 -174
  372. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +0 -22
  373. package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +0 -21
  374. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +0 -22
  375. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +0 -35
  376. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +0 -2500
  377. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +0 -139
  378. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +0 -3
  379. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +0 -8
  380. package/android/jni/lzma/CPP/7zip/Archive/Archive.def +0 -12
  381. package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +0 -19
  382. package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +0 -151
  383. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +0 -1125
  384. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +0 -447
  385. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +0 -17
  386. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +0 -25
  387. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +0 -232
  388. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +0 -110
  389. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +0 -46
  390. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +0 -67
  391. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +0 -88
  392. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +0 -28
  393. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +0 -191
  394. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +0 -89
  395. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +0 -18
  396. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +0 -37
  397. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -3
  398. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +0 -6
  399. package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +0 -8
  400. package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +0 -122
  401. package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +0 -608
  402. package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
  403. package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +0 -629
  404. package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +0 -359
  405. package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +0 -8
  406. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +0 -1308
  407. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +0 -11
  408. package/android/jni/lzma/CPP/7zip/Asm.mak +0 -9
  409. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +0 -1910
  410. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +0 -29
  411. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +0 -3
  412. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +0 -8
  413. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +0 -154
  414. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +0 -7
  415. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +0 -3
  416. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +0 -8
  417. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +0 -96
  418. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +0 -5
  419. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +0 -3
  420. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +0 -8
  421. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +0 -116
  422. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +0 -5
  423. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +0 -799
  424. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +0 -477
  425. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +0 -29
  426. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +0 -3
  427. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +0 -8
  428. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +0 -59
  429. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +0 -195
  430. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +0 -3
  431. package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +0 -715
  432. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
  433. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +0 -912
  434. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +0 -29
  435. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +0 -482
  436. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +0 -3
  437. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +0 -8
  438. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +0 -134
  439. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +0 -5
  440. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +0 -246
  441. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +0 -86
  442. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +0 -137
  443. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +0 -11
  444. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +0 -803
  445. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +0 -29
  446. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +0 -364
  447. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +0 -3
  448. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +0 -13
  449. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +0 -117
  450. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +0 -6
  451. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +0 -16
  452. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
  453. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
  454. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +0 -988
  455. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +0 -29
  456. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +0 -241
  457. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +0 -3
  458. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +0 -14
  459. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +0 -153
  460. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +0 -1
  461. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +0 -50
  462. package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +0 -250
  463. package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +0 -120
  464. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +0 -536
  465. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +0 -192
  466. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +0 -46
  467. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +0 -10
  468. package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +0 -475
  469. package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +0 -166
  470. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +0 -435
  471. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +0 -205
  472. package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +0 -163
  473. package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +0 -92
  474. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +0 -127
  475. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +0 -48
  476. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +0 -367
  477. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +0 -252
  478. package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +0 -3
  479. package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +0 -6
  480. package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +0 -3
  481. package/android/jni/lzma/CPP/7zip/Common/MethodId.h +0 -10
  482. package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +0 -509
  483. package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +0 -264
  484. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +0 -39
  485. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +0 -26
  486. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +0 -111
  487. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +0 -66
  488. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +0 -51
  489. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +0 -35
  490. package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +0 -108
  491. package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +0 -78
  492. package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +0 -106
  493. package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +0 -8
  494. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +0 -156
  495. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +0 -60
  496. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +0 -285
  497. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +0 -157
  498. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +0 -56
  499. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +0 -13
  500. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +0 -57
  501. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +0 -26
  502. package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +0 -48
  503. package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +0 -24
  504. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +0 -666
  505. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +0 -120
  506. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +0 -24
  507. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +0 -24
  508. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +0 -31
  509. package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +0 -17
  510. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +0 -23
  511. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +0 -35
  512. package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +0 -41
  513. package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +0 -92
  514. package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +0 -344
  515. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +0 -120
  516. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +0 -49
  517. package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +0 -15
  518. package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +0 -128
  519. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +0 -265
  520. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +0 -96
  521. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +0 -122
  522. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +0 -42
  523. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +0 -22
  524. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +0 -343
  525. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +0 -113
  526. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +0 -182
  527. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +0 -46
  528. package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +0 -22
  529. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +0 -170
  530. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +0 -86
  531. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +0 -152
  532. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +0 -58
  533. package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +0 -22
  534. package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +0 -8
  535. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +0 -150
  536. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +0 -92
  537. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +0 -245
  538. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +0 -46
  539. package/android/jni/lzma/CPP/7zip/Crc.mak +0 -8
  540. package/android/jni/lzma/CPP/7zip/Crc64.mak +0 -8
  541. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +0 -280
  542. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +0 -118
  543. package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +0 -17
  544. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +0 -112
  545. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +0 -57
  546. package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +0 -16
  547. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +0 -233
  548. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +0 -40
  549. package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +0 -8
  550. package/android/jni/lzma/CPP/7zip/GuiCommon.rc +0 -84
  551. package/android/jni/lzma/CPP/7zip/Guid.txt +0 -220
  552. package/android/jni/lzma/CPP/7zip/ICoder.h +0 -399
  553. package/android/jni/lzma/CPP/7zip/IDecl.h +0 -28
  554. package/android/jni/lzma/CPP/7zip/IPassword.h +0 -23
  555. package/android/jni/lzma/CPP/7zip/IProgress.h +0 -19
  556. package/android/jni/lzma/CPP/7zip/IStream.h +0 -127
  557. package/android/jni/lzma/CPP/7zip/LzmaDec.mak +0 -5
  558. package/android/jni/lzma/CPP/7zip/MyVersion.h +0 -2
  559. package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +0 -2
  560. package/android/jni/lzma/CPP/7zip/PropID.h +0 -127
  561. package/android/jni/lzma/CPP/7zip/SubBuild.mak +0 -3
  562. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +0 -993
  563. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +0 -235
  564. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +0 -29
  565. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +0 -3
  566. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +0 -8
  567. package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +0 -28
  568. package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +0 -3
  569. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +0 -1295
  570. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +0 -136
  571. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +0 -1715
  572. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +0 -403
  573. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +0 -155
  574. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +0 -10
  575. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +0 -161
  576. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +0 -112
  577. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +0 -3618
  578. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +0 -77
  579. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +0 -37
  580. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +0 -11
  581. package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +0 -190
  582. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +0 -1096
  583. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +0 -42
  584. package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +0 -27
  585. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +0 -482
  586. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +0 -94
  587. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +0 -34
  588. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +0 -280
  589. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +0 -31
  590. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +0 -347
  591. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +0 -110
  592. package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +0 -114
  593. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +0 -1074
  594. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +0 -424
  595. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +0 -3553
  596. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +0 -436
  597. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +0 -668
  598. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +0 -18
  599. package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +0 -14
  600. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +0 -80
  601. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +0 -10
  602. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +0 -25
  603. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +0 -10
  604. package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +0 -8
  605. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +0 -19
  606. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +0 -16
  607. package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +0 -1704
  608. package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +0 -200
  609. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +0 -64
  610. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +0 -66
  611. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +0 -771
  612. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +0 -162
  613. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +0 -233
  614. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +0 -27
  615. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +0 -70
  616. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +0 -55
  617. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +0 -94
  618. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +0 -26
  619. package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +0 -130
  620. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +0 -41
  621. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +0 -14
  622. package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +0 -43
  623. package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +0 -13
  624. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +0 -69
  625. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +0 -33
  626. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +0 -825
  627. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +0 -164
  628. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +0 -367
  629. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +0 -48
  630. package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +0 -1359
  631. package/android/jni/lzma/CPP/7zip/UI/Console/List.h +0 -27
  632. package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +0 -1154
  633. package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +0 -175
  634. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +0 -115
  635. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +0 -66
  636. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +0 -183
  637. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +0 -62
  638. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +0 -3
  639. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +0 -8
  640. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +0 -702
  641. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +0 -124
  642. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +0 -110
  643. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +0 -27
  644. package/android/jni/lzma/CPP/7zip/UI/Console/makefile +0 -64
  645. package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +0 -7
  646. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +0 -37
  647. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +0 -16
  648. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +0 -1025
  649. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +0 -21
  650. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +0 -9
  651. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +0 -64
  652. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +0 -28
  653. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +0 -4
  654. package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +0 -16
  655. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +0 -1037
  656. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +0 -328
  657. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +0 -28
  658. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +0 -14
  659. package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +0 -40
  660. package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +0 -76
  661. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +0 -122
  662. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +0 -69
  663. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +0 -91
  664. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +0 -17
  665. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +0 -58
  666. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +0 -28
  667. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +0 -14
  668. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +0 -5
  669. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +0 -196
  670. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +0 -170
  671. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +0 -12
  672. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +0 -1337
  673. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +0 -351
  674. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +0 -40
  675. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +0 -48
  676. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +0 -80
  677. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +0 -3
  678. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +0 -23
  679. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +0 -10
  680. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +0 -95
  681. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +0 -255
  682. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +0 -62
  683. package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +0 -177
  684. package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +0 -15
  685. package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +0 -59
  686. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +0 -418
  687. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +0 -113
  688. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +0 -98
  689. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +0 -24
  690. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +0 -280
  691. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +0 -38
  692. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +0 -51
  693. package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +0 -27
  694. package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +0 -2
  695. package/android/jni/lzma/CPP/Build.mak +0 -156
  696. package/android/jni/lzma/CPP/Common/AutoPtr.h +0 -35
  697. package/android/jni/lzma/CPP/Common/CRC.cpp +0 -7
  698. package/android/jni/lzma/CPP/Common/C_FileIO.cpp +0 -92
  699. package/android/jni/lzma/CPP/Common/C_FileIO.h +0 -53
  700. package/android/jni/lzma/CPP/Common/ComTry.h +0 -21
  701. package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +0 -197
  702. package/android/jni/lzma/CPP/Common/CommandLineParser.h +0 -63
  703. package/android/jni/lzma/CPP/Common/Common.h +0 -43
  704. package/android/jni/lzma/CPP/Common/CrcReg.cpp +0 -98
  705. package/android/jni/lzma/CPP/Common/Defs.h +0 -15
  706. package/android/jni/lzma/CPP/Common/DynamicBuffer.h +0 -64
  707. package/android/jni/lzma/CPP/Common/IntToString.cpp +0 -193
  708. package/android/jni/lzma/CPP/Common/IntToString.h +0 -28
  709. package/android/jni/lzma/CPP/Common/Lang.h +0 -23
  710. package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +0 -132
  711. package/android/jni/lzma/CPP/Common/ListFileUtils.h +0 -18
  712. package/android/jni/lzma/CPP/Common/MyBuffer.h +0 -259
  713. package/android/jni/lzma/CPP/Common/MyBuffer2.h +0 -100
  714. package/android/jni/lzma/CPP/Common/MyCom.h +0 -277
  715. package/android/jni/lzma/CPP/Common/MyException.h +0 -14
  716. package/android/jni/lzma/CPP/Common/MyGuidDef.h +0 -54
  717. package/android/jni/lzma/CPP/Common/MyInitGuid.h +0 -45
  718. package/android/jni/lzma/CPP/Common/MyLinux.h +0 -42
  719. package/android/jni/lzma/CPP/Common/MyString.cpp +0 -1659
  720. package/android/jni/lzma/CPP/Common/MyString.h +0 -868
  721. package/android/jni/lzma/CPP/Common/MyTypes.h +0 -35
  722. package/android/jni/lzma/CPP/Common/MyUnknown.h +0 -17
  723. package/android/jni/lzma/CPP/Common/MyVector.cpp +0 -3
  724. package/android/jni/lzma/CPP/Common/MyVector.h +0 -634
  725. package/android/jni/lzma/CPP/Common/MyWindows.cpp +0 -145
  726. package/android/jni/lzma/CPP/Common/MyWindows.h +0 -231
  727. package/android/jni/lzma/CPP/Common/NewHandler.cpp +0 -163
  728. package/android/jni/lzma/CPP/Common/NewHandler.h +0 -88
  729. package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +0 -40
  730. package/android/jni/lzma/CPP/Common/StdAfx.h +0 -8
  731. package/android/jni/lzma/CPP/Common/StdInStream.cpp +0 -89
  732. package/android/jni/lzma/CPP/Common/StdInStream.h +0 -38
  733. package/android/jni/lzma/CPP/Common/StdOutStream.cpp +0 -163
  734. package/android/jni/lzma/CPP/Common/StdOutStream.h +0 -71
  735. package/android/jni/lzma/CPP/Common/StringConvert.cpp +0 -319
  736. package/android/jni/lzma/CPP/Common/StringConvert.h +0 -88
  737. package/android/jni/lzma/CPP/Common/StringToInt.cpp +0 -144
  738. package/android/jni/lzma/CPP/Common/StringToInt.h +0 -21
  739. package/android/jni/lzma/CPP/Common/TextConfig.cpp +0 -124
  740. package/android/jni/lzma/CPP/Common/TextConfig.h +0 -19
  741. package/android/jni/lzma/CPP/Common/UTFConvert.cpp +0 -288
  742. package/android/jni/lzma/CPP/Common/UTFConvert.h +0 -12
  743. package/android/jni/lzma/CPP/Common/Wildcard.cpp +0 -676
  744. package/android/jni/lzma/CPP/Common/Wildcard.h +0 -149
  745. package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +0 -7
  746. package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +0 -42
  747. package/android/jni/lzma/CPP/Windows/COM.h +0 -70
  748. package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +0 -185
  749. package/android/jni/lzma/CPP/Windows/CommonDialog.h +0 -23
  750. package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +0 -66
  751. package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +0 -65
  752. package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +0 -52
  753. package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +0 -251
  754. package/android/jni/lzma/CPP/Windows/Control/Dialog.h +0 -170
  755. package/android/jni/lzma/CPP/Windows/Control/Edit.h +0 -19
  756. package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +0 -10
  757. package/android/jni/lzma/CPP/Windows/Control/ImageList.h +0 -87
  758. package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +0 -155
  759. package/android/jni/lzma/CPP/Windows/Control/ListView.h +0 -146
  760. package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +0 -35
  761. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +0 -143
  762. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +0 -50
  763. package/android/jni/lzma/CPP/Windows/Control/ReBar.h +0 -34
  764. package/android/jni/lzma/CPP/Windows/Control/Static.h +0 -28
  765. package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +0 -42
  766. package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +0 -8
  767. package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +0 -43
  768. package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +0 -27
  769. package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +0 -200
  770. package/android/jni/lzma/CPP/Windows/Control/Window2.h +0 -51
  771. package/android/jni/lzma/CPP/Windows/DLL.cpp +0 -109
  772. package/android/jni/lzma/CPP/Windows/DLL.h +0 -58
  773. package/android/jni/lzma/CPP/Windows/Defs.h +0 -17
  774. package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +0 -66
  775. package/android/jni/lzma/CPP/Windows/ErrorMsg.h +0 -15
  776. package/android/jni/lzma/CPP/Windows/FileDir.cpp +0 -714
  777. package/android/jni/lzma/CPP/Windows/FileDir.h +0 -117
  778. package/android/jni/lzma/CPP/Windows/FileFind.cpp +0 -749
  779. package/android/jni/lzma/CPP/Windows/FileFind.h +0 -161
  780. package/android/jni/lzma/CPP/Windows/FileIO.cpp +0 -432
  781. package/android/jni/lzma/CPP/Windows/FileIO.h +0 -212
  782. package/android/jni/lzma/CPP/Windows/FileLink.cpp +0 -440
  783. package/android/jni/lzma/CPP/Windows/FileMapping.cpp +0 -12
  784. package/android/jni/lzma/CPP/Windows/FileMapping.h +0 -66
  785. package/android/jni/lzma/CPP/Windows/FileName.cpp +0 -839
  786. package/android/jni/lzma/CPP/Windows/FileName.h +0 -115
  787. package/android/jni/lzma/CPP/Windows/FileSystem.cpp +0 -131
  788. package/android/jni/lzma/CPP/Windows/FileSystem.h +0 -27
  789. package/android/jni/lzma/CPP/Windows/Handle.h +0 -37
  790. package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +0 -112
  791. package/android/jni/lzma/CPP/Windows/MemoryLock.h +0 -40
  792. package/android/jni/lzma/CPP/Windows/NtCheck.h +0 -46
  793. package/android/jni/lzma/CPP/Windows/PropVariant.cpp +0 -347
  794. package/android/jni/lzma/CPP/Windows/PropVariant.h +0 -114
  795. package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +0 -138
  796. package/android/jni/lzma/CPP/Windows/PropVariantConv.h +0 -37
  797. package/android/jni/lzma/CPP/Windows/Registry.cpp +0 -390
  798. package/android/jni/lzma/CPP/Windows/Registry.h +0 -84
  799. package/android/jni/lzma/CPP/Windows/ResourceString.cpp +0 -103
  800. package/android/jni/lzma/CPP/Windows/ResourceString.h +0 -16
  801. package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +0 -181
  802. package/android/jni/lzma/CPP/Windows/SecurityUtils.h +0 -167
  803. package/android/jni/lzma/CPP/Windows/Shell.cpp +0 -358
  804. package/android/jni/lzma/CPP/Windows/Shell.h +0 -94
  805. package/android/jni/lzma/CPP/Windows/StdAfx.h +0 -8
  806. package/android/jni/lzma/CPP/Windows/Synchronization.cpp +0 -10
  807. package/android/jni/lzma/CPP/Windows/Synchronization.h +0 -164
  808. package/android/jni/lzma/CPP/Windows/System.cpp +0 -142
  809. package/android/jni/lzma/CPP/Windows/System.h +0 -40
  810. package/android/jni/lzma/CPP/Windows/Thread.h +0 -38
  811. package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +0 -213
  812. package/android/jni/lzma/CPP/Windows/TimeUtils.h +0 -32
  813. package/android/jni/lzma/CPP/Windows/Window.cpp +0 -179
  814. package/android/jni/lzma/CPP/Windows/Window.h +0 -284
  815. package/android/jni/lzma/CS/7zip/Common/CRC.cs +0 -55
  816. package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +0 -274
  817. package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +0 -72
  818. package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +0 -47
  819. package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +0 -24
  820. package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +0 -367
  821. package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +0 -132
  822. package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +0 -110
  823. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +0 -76
  824. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +0 -398
  825. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +0 -1480
  826. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +0 -364
  827. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +0 -90
  828. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +0 -20
  829. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +0 -340
  830. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +0 -29
  831. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +0 -70
  832. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +0 -42
  833. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +0 -234
  834. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +0 -117
  835. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +0 -157
  836. package/android/jni/lzma/CS/7zip/ICoder.cs +0 -157
  837. package/android/jni/lzma/DOC/7zC.txt +0 -187
  838. package/android/jni/lzma/DOC/7zFormat.txt +0 -469
  839. package/android/jni/lzma/DOC/Methods.txt +0 -173
  840. package/android/jni/lzma/DOC/installer.txt +0 -166
  841. package/android/jni/lzma/DOC/lzma-history.txt +0 -446
  842. package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
  843. package/android/jni/lzma/DOC/lzma.txt +0 -328
  844. package/android/jni/lzma/Java/SevenZip/CRC.java +0 -52
  845. package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +0 -382
  846. package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +0 -131
  847. package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +0 -85
  848. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +0 -88
  849. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +0 -329
  850. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +0 -1416
  851. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +0 -55
  852. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +0 -99
  853. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +0 -88
  854. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +0 -151
  855. package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +0 -6
  856. package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +0 -253
  857. package/android/jni/lzma/Java/SevenZip/LzmaBench.java +0 -392
  858. package/android/jni/lzma/bin/7zS2.sfx +0 -0
  859. package/android/jni/lzma/bin/7zS2con.sfx +0 -0
  860. package/android/jni/lzma/bin/7zSD.sfx +0 -0
  861. package/android/jni/lzma/bin/7zdec.exe +0 -0
  862. package/android/jni/lzma/bin/7zr.exe +0 -0
  863. package/android/jni/lzma/bin/installer/config.txt +0 -5
  864. package/android/jni/lzma/bin/installer/cr.bat +0 -5
  865. package/android/jni/lzma/bin/lzma.exe +0 -0
  866. package/android/jni/lzma/bin/x64/7zr.exe +0 -0
  867. package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +0 -6
  868. package/android/src/main/java/cn/reactnative/modules/update/PushyConfiguration.java +0 -104
  869. package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +0 -37
  870. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +0 -121
  871. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +0 -125
  872. package/cpp/patch_core/jni_natives.h +0 -27
  873. package/cpp/patch_core/jni_registration.cpp +0 -103
  874. package/cpp/patch_core/jni_util.h +0 -60
  875. package/cpp/patch_core/patch_core_android.cpp +0 -97
  876. package/cpp/patch_core/update_core_android.cpp +0 -485
  877. package/cpp/update_flow_core/update_flow_jni.cpp +0 -150
@@ -1,23 +1,30 @@
1
1
  #include <napi/native_api.h>
2
2
 
3
3
  #include "flow_json.h"
4
- #include "update_flow_core.h"
4
+ #include "native_config.h"
5
+ #include "native_round.h"
6
+ #include "round_engine.h"
5
7
  #include <js_native_api.h>
6
8
  #include <js_native_api_types.h>
7
9
 
10
+ #include <cerrno>
11
+ #include <exception>
12
+ #include <cstdint>
8
13
  #include <string>
14
+ #include <unistd.h>
15
+ #include <utility>
9
16
  #include <vector>
10
17
 
18
+ #include "archive_limits.h"
11
19
  #include "archive_patch_core.h"
12
20
  #include "digest.h"
21
+ #include "install_record.h"
13
22
  #include "hbc_transform_wire.h"
14
23
  #include "patch_core.h"
24
+ #include "resume_plan.h"
15
25
  #include "state_core.h"
16
26
  #include "state_ops.h"
17
27
 
18
- extern "C" {
19
- }
20
-
21
28
  namespace {
22
29
 
23
30
  using pushy::state_ops::StateOperation;
@@ -314,7 +321,11 @@ napi_value NewBoolean(napi_env env, bool value) {
314
321
 
315
322
  napi_value NewString(napi_env env, const std::string& value) {
316
323
  napi_value result = nullptr;
317
- napi_create_string_utf8(env, value.c_str(), value.size(), &result);
324
+ if (napi_create_string_utf8(env, value.c_str(), value.size(), &result) !=
325
+ napi_ok) {
326
+ ThrowError(env, "Failed to create string");
327
+ return nullptr;
328
+ }
318
329
  return result;
319
330
  }
320
331
 
@@ -337,14 +348,19 @@ void SetBoolProperty(
337
348
  napi_set_named_property(env, object, name, NewBoolean(env, value));
338
349
  }
339
350
 
351
+ // Per-operation outputs reported next to the state; all default to "nothing".
352
+ struct StateResultExtras {
353
+ bool changed = false;
354
+ std::string stale_version_to_delete;
355
+ std::string load_version;
356
+ bool did_rollback = false;
357
+ bool consumed_first_time = false;
358
+ };
359
+
340
360
  napi_value NewStateResult(
341
361
  napi_env env,
342
362
  const pushy::state::State& state,
343
- bool changed,
344
- const std::string& stale_version_to_delete,
345
- const std::string& load_version,
346
- bool did_rollback,
347
- bool consumed_first_time) {
363
+ const StateResultExtras& extras = StateResultExtras()) {
348
364
  napi_value result = nullptr;
349
365
  napi_create_object(env, &result);
350
366
 
@@ -355,21 +371,12 @@ napi_value NewStateResult(
355
371
  SetBoolProperty(env, result, "firstTime", state.first_time);
356
372
  SetBoolProperty(env, result, "firstTimeOk", state.first_time_ok);
357
373
  SetStringProperty(env, result, "rolledBackVersion", state.rolled_back_version);
358
- SetBoolProperty(env, result, "changed", changed);
359
- SetStringProperty(env, result, "staleVersionToDelete", stale_version_to_delete);
360
- SetStringProperty(env, result, "loadVersion", load_version);
361
- SetBoolProperty(env, result, "didRollback", did_rollback);
362
- SetBoolProperty(env, result, "consumedFirstTime", consumed_first_time);
363
- return result;
364
- }
365
-
366
- napi_value NewArchivePatchPlanResult(
367
- napi_env env,
368
- const pushy::archive_patch::ArchivePatchPlan& plan) {
369
- napi_value result = nullptr;
370
- napi_create_object(env, &result);
371
- SetStringProperty(env, result, "mergeSourceSubdir", plan.merge_source_subdir);
372
- SetBoolProperty(env, result, "enableMerge", plan.enable_merge);
374
+ SetBoolProperty(env, result, "changed", extras.changed);
375
+ SetStringProperty(
376
+ env, result, "staleVersionToDelete", extras.stale_version_to_delete);
377
+ SetStringProperty(env, result, "loadVersion", extras.load_version);
378
+ SetBoolProperty(env, result, "didRollback", extras.did_rollback);
379
+ SetBoolProperty(env, result, "consumedFirstTime", extras.consumed_first_time);
373
380
  return result;
374
381
  }
375
382
 
@@ -394,24 +401,18 @@ napi_value NewCopyGroupArray(
394
401
  NewString(env, groups[index].to_paths[target_index]));
395
402
  }
396
403
  napi_set_named_property(env, group, "toPaths", to_paths);
404
+ if (groups[index].has_expected_crc) {
405
+ // A CRC32 fits a double exactly, like the manifest's JSON number.
406
+ napi_value crc = nullptr;
407
+ napi_create_double(
408
+ env, static_cast<double>(groups[index].expected_crc), &crc);
409
+ napi_set_named_property(env, group, "expectedCrc", crc);
410
+ }
397
411
  napi_set_element(env, result, index, group);
398
412
  }
399
413
  return result;
400
414
  }
401
415
 
402
- pushy::delta::PatchManifest BuildManifest(
403
- const std::vector<std::string>& copy_froms,
404
- const std::vector<std::string>& copy_tos,
405
- const std::vector<std::string>& deletes) {
406
- pushy::delta::PatchManifest manifest;
407
- for (size_t index = 0; index < copy_froms.size(); ++index) {
408
- manifest.copies.push_back(
409
- pushy::delta::CopyOperation{copy_froms[index], copy_tos[index]});
410
- }
411
- manifest.deletes = deletes;
412
- return manifest;
413
- }
414
-
415
416
  napi_value SyncStateWithBinaryVersion(napi_env env, napi_callback_info info) {
416
417
  napi_value args[3] = {nullptr, nullptr, nullptr};
417
418
  size_t argc = 3;
@@ -436,7 +437,9 @@ napi_value SyncStateWithBinaryVersion(napi_env env, napi_callback_info info) {
436
437
 
437
438
  const pushy::state::BinaryVersionSyncResult result =
438
439
  pushy::state::SyncBinaryVersion(state, package_version, build_time);
439
- return NewStateResult(env, result.state, result.changed, std::string(), std::string(), false, false);
440
+ StateResultExtras extras;
441
+ extras.changed = result.changed;
442
+ return NewStateResult(env, result.state, extras);
440
443
  }
441
444
 
442
445
  napi_value RunStateCore(napi_env env, napi_callback_info info) {
@@ -477,59 +480,32 @@ napi_value RunStateCore(napi_env env, napi_callback_info info) {
477
480
 
478
481
  switch (static_cast<StateOperation>(operation)) {
479
482
  case StateOperation::kSwitchVersion:
480
- return NewStateResult(
481
- env,
482
- pushy::state::SwitchVersion(state, string_arg),
483
- false,
484
- std::string(),
485
- std::string(),
486
- false,
487
- false);
483
+ return NewStateResult(env, pushy::state::SwitchVersion(state, string_arg));
488
484
  case StateOperation::kMarkSuccess: {
489
485
  const pushy::state::MarkSuccessResult result = pushy::state::MarkSuccess(state);
490
- return NewStateResult(
491
- env,
492
- result.state,
493
- false,
494
- result.stale_version_to_delete,
495
- std::string(),
496
- false,
497
- false);
486
+ StateResultExtras extras;
487
+ extras.stale_version_to_delete = result.stale_version_to_delete;
488
+ return NewStateResult(env, result.state, extras);
498
489
  }
499
490
  case StateOperation::kRollback: {
500
491
  const pushy::state::State next = pushy::state::Rollback(state);
501
- return NewStateResult(
502
- env, next, false, std::string(), next.current_version, true, false);
492
+ StateResultExtras extras;
493
+ extras.load_version = next.current_version;
494
+ extras.did_rollback = true;
495
+ return NewStateResult(env, next, extras);
503
496
  }
504
497
  case StateOperation::kClearFirstTime:
505
- return NewStateResult(
506
- env,
507
- pushy::state::ClearFirstTime(state),
508
- false,
509
- std::string(),
510
- std::string(),
511
- false,
512
- false);
498
+ return NewStateResult(env, pushy::state::ClearFirstTime(state));
513
499
  case StateOperation::kClearRollbackMark:
514
- return NewStateResult(
515
- env,
516
- pushy::state::ClearRollbackMark(state),
517
- false,
518
- std::string(),
519
- std::string(),
520
- false,
521
- false);
500
+ return NewStateResult(env, pushy::state::ClearRollbackMark(state));
522
501
  case StateOperation::kResolveLaunch: {
523
502
  const pushy::state::LaunchDecision decision =
524
503
  pushy::state::ResolveLaunchState(state, flag_a, flag_b);
525
- return NewStateResult(
526
- env,
527
- decision.state,
528
- false,
529
- std::string(),
530
- decision.load_version,
531
- decision.did_rollback,
532
- decision.consumed_first_time);
504
+ StateResultExtras extras;
505
+ extras.load_version = decision.load_version;
506
+ extras.did_rollback = decision.did_rollback;
507
+ extras.consumed_first_time = decision.consumed_first_time;
508
+ return NewStateResult(env, decision.state, extras);
533
509
  }
534
510
  }
535
511
 
@@ -537,105 +513,10 @@ napi_value RunStateCore(napi_env env, napi_callback_info info) {
537
513
  return nullptr;
538
514
  }
539
515
 
540
- napi_value BuildArchivePatchPlan(napi_env env, napi_callback_info info) {
541
- napi_value args[6] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
542
- size_t argc = 6;
543
- if (!GetArgCount(env, info, &argc, args) || argc < 5) {
544
- ThrowError(env, "Wrong number of arguments");
545
- return nullptr;
546
- }
547
-
548
- int32_t patch_type = 0;
549
- if (!GetInt32(env, args[0], &patch_type)) {
550
- return nullptr;
551
- }
552
-
553
- std::vector<std::string> entry_names;
554
- std::vector<std::string> copy_froms;
555
- std::vector<std::string> copy_tos;
556
- std::vector<std::string> deletes;
557
- if (!GetStringArray(env, args[1], &entry_names) ||
558
- !GetStringArray(env, args[2], &copy_froms) ||
559
- !GetStringArray(env, args[3], &copy_tos) ||
560
- !GetStringArray(env, args[4], &deletes)) {
561
- return nullptr;
562
- }
563
- if (copy_froms.size() != copy_tos.size()) {
564
- ThrowError(env, "copyFroms and copyTos length mismatch");
565
- return nullptr;
566
- }
567
-
568
- std::string bundle_patch_entry_name =
569
- pushy::archive_patch::DefaultBundleDeltaEntryName();
570
- if (argc >= 6) {
571
- bool ok = false;
572
- const std::string candidate = GetString(env, args[5], &ok);
573
- if (!ok) {
574
- return nullptr;
575
- }
576
- if (!candidate.empty()) {
577
- bundle_patch_entry_name = candidate;
578
- }
579
- }
580
-
581
- const pushy::delta::PatchManifest manifest =
582
- BuildManifest(copy_froms, copy_tos, deletes);
583
- pushy::archive_patch::ArchivePatchType archive_type;
584
- if (!pushy::archive_patch::TryParseArchivePatchType(patch_type, &archive_type)) {
585
- ThrowError(env, "Unknown archive delta type");
586
- return nullptr;
587
- }
588
- pushy::archive_patch::ArchivePatchPlan plan;
589
- const pushy::delta::Status status = pushy::archive_patch::BuildArchivePatchPlan(
590
- archive_type,
591
- manifest,
592
- entry_names,
593
- &plan,
594
- bundle_patch_entry_name);
595
- if (!status.ok) {
596
- ThrowError(env, status.message);
597
- return nullptr;
598
- }
599
-
600
- return NewArchivePatchPlanResult(env, plan);
601
- }
602
-
603
- napi_value BuildCopyGroups(napi_env env, napi_callback_info info) {
604
- napi_value args[2] = {nullptr, nullptr};
605
- size_t argc = 2;
606
- if (!GetArgCount(env, info, &argc, args) || argc < 2) {
607
- ThrowError(env, "Wrong number of arguments");
608
- return nullptr;
609
- }
610
-
611
- std::vector<std::string> copy_froms;
612
- std::vector<std::string> copy_tos;
613
- if (!GetStringArray(env, args[0], &copy_froms) ||
614
- !GetStringArray(env, args[1], &copy_tos)) {
615
- return nullptr;
616
- }
617
- if (copy_froms.size() != copy_tos.size()) {
618
- ThrowError(env, "copyFroms and copyTos length mismatch");
619
- return nullptr;
620
- }
621
-
622
- const pushy::delta::PatchManifest manifest =
623
- BuildManifest(copy_froms, copy_tos, std::vector<std::string>());
624
- std::vector<pushy::archive_patch::CopyGroup> groups;
625
- const pushy::delta::Status status =
626
- pushy::archive_patch::BuildCopyGroups(manifest, &groups);
627
- if (!status.ok) {
628
- ThrowError(env, status.message);
629
- return nullptr;
630
- }
631
-
632
- return NewCopyGroupArray(env, groups);
633
- }
634
-
635
516
  // ---------------------------------------------------------------------------
636
517
  // Async work plumbing for the heavy patch operations.
637
518
  //
638
- // applyDeltaFromSource and cleanupOldEntries run hdiff / recursive file IO
519
+ // applyArchiveDelta and cleanupOldEntries run hdiff / recursive file IO
639
520
  // that can take hundreds of ms to seconds. The Pushy TurboModule executes on
640
521
  // the UI thread, so running these synchronously froze the UI. These are now
641
522
  // wrapped in napi_create_async_work: arguments are parsed on the JS thread, the
@@ -643,8 +524,7 @@ napi_value BuildCopyGroups(napi_env env, napi_callback_info info) {
643
524
  // back on the JS thread.
644
525
  // ---------------------------------------------------------------------------
645
526
 
646
- // Reject an already-created deferred with an Error(message). Used when async
647
- // work fails to be created/queued, so the Promise never hangs pending.
527
+ // Reject an already-created deferred with an Error(message).
648
528
  void RejectDeferredWithMessage(
649
529
  napi_env env,
650
530
  napi_deferred deferred,
@@ -656,16 +536,134 @@ void RejectDeferredWithMessage(
656
536
  napi_reject_deferred(env, deferred, error);
657
537
  }
658
538
 
659
- struct ApplyPatchWork {
539
+ void ResolveDeferredWithUndefined(napi_env env, napi_deferred deferred) {
540
+ napi_value undefined_value = nullptr;
541
+ napi_get_undefined(env, &undefined_value);
542
+ napi_resolve_deferred(env, deferred, undefined_value);
543
+ }
544
+
545
+ // Resolves with undefined, or rejects with the status message.
546
+ void SettleWithStatus(
547
+ napi_env env,
548
+ napi_deferred deferred,
549
+ const pushy::delta::Status& status) {
550
+ if (status.ok) {
551
+ ResolveDeferredWithUndefined(env, deferred);
552
+ } else {
553
+ RejectDeferredWithMessage(env, deferred, status.message.c_str());
554
+ }
555
+ }
556
+
557
+ template <typename W>
558
+ struct AsyncCall {
660
559
  napi_async_work work = nullptr;
661
560
  napi_deferred deferred = nullptr;
662
- pushy::delta::FileSourcePatchOptions options;
561
+ W data;
562
+ void (*execute)(W&) = nullptr;
563
+ void (*settle)(napi_env, napi_deferred, const W&) = nullptr;
564
+ // Set when execute threw: the promise rejects with it instead of settling
565
+ // from half-written results.
566
+ bool threw = false;
567
+ std::string failure;
568
+ };
569
+
570
+ // The message of the exception being handled, without throwing again.
571
+ void RecordFailure(std::string* failure) noexcept {
572
+ try {
573
+ throw;
574
+ } catch (const std::exception& error) {
575
+ try {
576
+ *failure = error.what();
577
+ } catch (...) {
578
+ }
579
+ } catch (...) {
580
+ }
581
+ }
582
+
583
+ // Runs execute(data) on a libuv worker thread and returns a Promise that
584
+ // settle(env, deferred, data) settles back on the JS thread. Every path
585
+ // settles the promise exactly once and frees the call: a creation or queue
586
+ // failure rejects immediately, and work that was cancelled or aborted before
587
+ // it ran is rejected instead of settled from meaningless results.
588
+ template <typename W>
589
+ napi_value QueueWork(
590
+ napi_env env,
591
+ const char* name,
592
+ W data,
593
+ void (*execute)(W&),
594
+ void (*settle)(napi_env, napi_deferred, const W&)) {
595
+ auto* call = new AsyncCall<W>();
596
+ call->data = std::move(data);
597
+ call->execute = execute;
598
+ call->settle = settle;
599
+
600
+ napi_value promise = nullptr;
601
+ if (napi_create_promise(env, &call->deferred, &promise) != napi_ok) {
602
+ delete call;
603
+ ThrowError(env, "Unable to create promise");
604
+ return nullptr;
605
+ }
606
+
607
+ napi_value resource_name = nullptr;
608
+ napi_create_string_utf8(env, name, NAPI_AUTO_LENGTH, &resource_name);
609
+ if (napi_create_async_work(
610
+ env,
611
+ nullptr,
612
+ resource_name,
613
+ [](napi_env, void* raw) {
614
+ // A worker thread: an exception escaping here terminates the
615
+ // process (CODE_AUDIT 4.4).
616
+ auto* c = static_cast<AsyncCall<W>*>(raw);
617
+ try {
618
+ c->execute(c->data);
619
+ } catch (...) {
620
+ c->threw = true;
621
+ RecordFailure(&c->failure);
622
+ }
623
+ },
624
+ [](napi_env cb_env, napi_status status, void* raw) {
625
+ auto* c = static_cast<AsyncCall<W>*>(raw);
626
+ if (status != napi_ok) {
627
+ RejectDeferredWithMessage(cb_env, c->deferred, "async work aborted");
628
+ } else if (c->threw) {
629
+ RejectDeferredWithMessage(
630
+ cb_env, c->deferred,
631
+ c->failure.empty() ? "native error" : c->failure.c_str());
632
+ } else {
633
+ try {
634
+ c->settle(cb_env, c->deferred, c->data);
635
+ } catch (...) {
636
+ RejectDeferredWithMessage(cb_env, c->deferred, "native error");
637
+ }
638
+ }
639
+ napi_delete_async_work(cb_env, c->work);
640
+ delete c;
641
+ },
642
+ call,
643
+ &call->work) != napi_ok) {
644
+ // Work was never created: settle the promise and free the call so it
645
+ // neither leaks nor hangs pending forever.
646
+ RejectDeferredWithMessage(env, call->deferred, "Unable to create async work");
647
+ delete call;
648
+ return promise;
649
+ }
650
+ if (napi_queue_async_work(env, call->work) != napi_ok) {
651
+ // Queueing failed: the complete callback will never run, so clean up here.
652
+ napi_delete_async_work(env, call->work);
653
+ RejectDeferredWithMessage(env, call->deferred, "Unable to queue async work");
654
+ delete call;
655
+ return promise;
656
+ }
657
+ return promise;
658
+ }
659
+
660
+ struct ApplyArchiveDeltaWork {
661
+ pushy::archive_patch::ArchivePatchRequest request;
662
+ std::vector<pushy::archive_patch::CopyGroup> host_copies;
663
663
  pushy::delta::Status status{false, ""};
664
664
  };
665
665
 
666
666
  struct CleanupWork {
667
- napi_async_work work = nullptr;
668
- napi_deferred deferred = nullptr;
669
667
  std::string root_dir;
670
668
  // Every version that may still be in use: persisted current/last AND the
671
669
  // version this process booted from (two switches without a restart must not
@@ -679,13 +677,76 @@ struct CleanupWork {
679
677
  // of MB; hashing it synchronously on the UI thread (where the TurboModule
680
678
  // runs) froze the app for hundreds of ms per archive/bundle/activation.
681
679
  struct Sha256FileWork {
682
- napi_async_work work = nullptr;
683
- napi_deferred deferred = nullptr;
684
680
  std::string path;
685
681
  std::string hex;
686
682
  };
687
683
 
688
- napi_value ApplyPatchFromFileSource(napi_env env, napi_callback_info info) {
684
+ // Digest of a byte range of an fd the caller keeps open (rawfile
685
+ // descriptors: the embedded bundle lives at [offset, offset + length) inside
686
+ // the HAP). The fd is never closed here; JS closes it after the promise
687
+ // settles.
688
+ struct Sha256RangeWork {
689
+ int fd = -1;
690
+ int64_t offset = 0;
691
+ int64_t length = 0;
692
+ std::string hex;
693
+ std::string error;
694
+ };
695
+
696
+ // pread loop (positioned: never moves a file offset the caller may share).
697
+ // A short read before `length` bytes is an error, not EOF.
698
+ void HashFdRange(Sha256RangeWork& w) {
699
+ pushy::digest::Sha256 hasher;
700
+ std::vector<uint8_t> buffer(256 * 1024);
701
+ int64_t position = w.offset;
702
+ int64_t remaining = w.length;
703
+ while (remaining > 0) {
704
+ const size_t want = static_cast<size_t>(
705
+ remaining < static_cast<int64_t>(buffer.size())
706
+ ? remaining
707
+ : static_cast<int64_t>(buffer.size()));
708
+ const ssize_t read = pread(w.fd, buffer.data(), want, static_cast<off_t>(position));
709
+ if (read < 0) {
710
+ if (errno == EINTR) {
711
+ continue;
712
+ }
713
+ w.error = "sha256HexRawFdAsync: read failed (errno " +
714
+ std::to_string(errno) + ")";
715
+ return;
716
+ }
717
+ if (read == 0) {
718
+ w.error = "sha256HexRawFdAsync: unexpected end of file";
719
+ return;
720
+ }
721
+ hasher.Update(buffer.data(), static_cast<size_t>(read));
722
+ position += read;
723
+ remaining -= read;
724
+ }
725
+ w.hex = hasher.HexDigest();
726
+ }
727
+
728
+ bool GetNonNegativeInt64(
729
+ napi_env env,
730
+ napi_value value,
731
+ const char* name,
732
+ int64_t* out_value) {
733
+ napi_valuetype type = napi_undefined;
734
+ if (value == nullptr || !GetValueType(env, value, &type) ||
735
+ type != napi_number ||
736
+ napi_get_value_int64(env, value, out_value) != napi_ok ||
737
+ *out_value < 0) {
738
+ ThrowError(env, std::string("sha256HexRawFdAsync: ") + name +
739
+ " must be a non-negative number");
740
+ return false;
741
+ }
742
+ return true;
743
+ }
744
+
745
+ // applyArchiveDelta(request) -> Promise<CopyGroupResult[]>. The manifest
746
+ // text is parsed (with the rest of the patch) on the worker thread; the
747
+ // promise resolves with the copies the caller still owes (empty unless
748
+ // hostCopiesResources) and rejects with the core's message.
749
+ napi_value ApplyArchiveDelta(napi_env env, napi_callback_info info) {
689
750
  napi_value args[1] = {nullptr};
690
751
  size_t argc = 1;
691
752
  if (!GetArgCount(env, info, &argc, args) || argc < 1) {
@@ -696,105 +757,60 @@ napi_value ApplyPatchFromFileSource(napi_env env, napi_callback_info info) {
696
757
  return nullptr;
697
758
  }
698
759
 
699
- std::vector<std::string> copy_froms;
700
- std::vector<std::string> copy_tos;
701
- std::vector<std::string> deletes;
702
- std::string source_root;
703
- std::string target_root;
704
- std::string origin_bundle_path;
705
- std::string bundle_patch_path;
706
- std::string bundle_output_path;
707
- std::string merge_source_subdir;
708
- std::string bundle_hbc_transform_meta;
709
- bool enable_merge = true;
710
-
711
- if (!GetOptionalStringArrayProperty(env, args[0], "copyFroms", &copy_froms) ||
712
- !GetOptionalStringArrayProperty(env, args[0], "copyTos", &copy_tos) ||
713
- !GetOptionalStringArrayProperty(env, args[0], "deletes", &deletes) ||
714
- !GetOptionalStringProperty(env, args[0], "sourceRoot", &source_root) ||
715
- !GetOptionalStringProperty(env, args[0], "targetRoot", &target_root) ||
716
- !GetOptionalStringProperty(env, args[0], "originBundlePath", &origin_bundle_path) ||
717
- !GetOptionalStringProperty(env, args[0], "bundleDeltaPath", &bundle_patch_path) ||
718
- !GetOptionalStringProperty(env, args[0], "bundleOutputPath", &bundle_output_path) ||
719
- !GetOptionalStringProperty(env, args[0], "mergeSourceSubdir", &merge_source_subdir) ||
760
+ ApplyArchiveDeltaWork work;
761
+ pushy::archive_patch::ArchivePatchRequest& request = work.request;
762
+ napi_value patch_type_value = nullptr;
763
+ int32_t patch_type = 0;
764
+ std::string bundle_patch_entry_name;
765
+ if (!GetNamedProperty(env, args[0], "archiveType", &patch_type_value) ||
766
+ !GetInt32(env, patch_type_value, &patch_type) ||
767
+ !GetOptionalStringArrayProperty(
768
+ env, args[0], "entryNames", &request.archive.entry_names) ||
769
+ !GetOptionalStringProperty(
770
+ env, args[0], "manifestJson", &request.archive.manifest_json) ||
771
+ !GetOptionalStringProperty(
772
+ env, args[0], "bundleDeltaEntry", &bundle_patch_entry_name) ||
720
773
  !GetOptionalStringProperty(
721
- env, args[0], "bundleHbcTransformMeta", &bundle_hbc_transform_meta) ||
722
- !GetOptionalBoolProperty(env, args[0], "enableMerge", true, &enable_merge)) {
774
+ env, args[0], "copySourcePrefix", &request.archive.copy_source_prefix) ||
775
+ !GetOptionalStringProperty(env, args[0], "sourceRoot", &request.source_root) ||
776
+ !GetOptionalStringProperty(env, args[0], "targetRoot", &request.target_root) ||
777
+ !GetOptionalStringProperty(
778
+ env, args[0], "originBundlePath", &request.origin_bundle_path) ||
779
+ !GetOptionalStringProperty(
780
+ env, args[0], "bundleDeltaPath", &request.bundle_patch_path) ||
781
+ !GetOptionalStringProperty(
782
+ env, args[0], "bundleOutputPath", &request.bundle_output_path) ||
783
+ !GetOptionalBoolProperty(
784
+ env, args[0], "hostCopiesResources", false,
785
+ &request.host_copies_resources)) {
723
786
  return nullptr;
724
787
  }
725
- if (copy_froms.size() != copy_tos.size()) {
726
- ThrowError(env, "copyFroms and copyTos length mismatch");
788
+ // The shared parser keeps Android and HarmonyOS in agreement on which
789
+ // integer values are valid; neither silently falls back to kFull.
790
+ if (!pushy::archive_patch::TryParseArchivePatchType(
791
+ patch_type, &request.archive.type)) {
792
+ ThrowError(env, "Unknown archive delta type");
727
793
  return nullptr;
728
794
  }
729
-
730
- auto* work_data = new ApplyPatchWork();
731
- work_data->options.manifest = BuildManifest(copy_froms, copy_tos, deletes);
732
- work_data->options.source_root = source_root;
733
- work_data->options.target_root = target_root;
734
- work_data->options.origin_bundle_path = origin_bundle_path;
735
- work_data->options.bundle_patch_path = bundle_patch_path;
736
- work_data->options.bundle_output_path = bundle_output_path;
737
- work_data->options.merge_source_subdir = merge_source_subdir;
738
- work_data->options.bundle_hbc_transform_meta = bundle_hbc_transform_meta;
739
- work_data->options.enable_merge = enable_merge;
740
-
741
- napi_value promise = nullptr;
742
- if (napi_create_promise(env, &work_data->deferred, &promise) != napi_ok) {
743
- delete work_data;
744
- ThrowError(env, "Unable to create promise");
745
- return nullptr;
795
+ if (!bundle_patch_entry_name.empty()) {
796
+ request.archive.bundle_patch_entry_name = bundle_patch_entry_name;
746
797
  }
747
798
 
748
- napi_value resource_name = nullptr;
749
- napi_create_string_utf8(
750
- env, "applyDeltaFromSource", NAPI_AUTO_LENGTH, &resource_name);
751
- if (napi_create_async_work(
752
- env,
753
- nullptr,
754
- resource_name,
755
- [](napi_env, void* data) {
756
- auto* w = static_cast<ApplyPatchWork*>(data);
757
- w->status = pushy::delta::ApplyPatchFromFileSource(w->options);
758
- },
759
- [](napi_env cb_env, napi_status status, void* data) {
760
- auto* w = static_cast<ApplyPatchWork*>(data);
761
- if (status != napi_ok) {
762
- // Cancelled/aborted before execute ran: w->status is
763
- // meaningless; still settle the promise so it never hangs.
764
- RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
765
- } else if (w->status.ok) {
766
- napi_value undefined_value = nullptr;
767
- napi_get_undefined(cb_env, &undefined_value);
768
- napi_resolve_deferred(cb_env, w->deferred, undefined_value);
769
- } else {
770
- napi_value error = nullptr;
771
- napi_value message = nullptr;
772
- napi_create_string_utf8(
773
- cb_env, w->status.message.c_str(), NAPI_AUTO_LENGTH, &message);
774
- napi_create_error(cb_env, nullptr, message, &error);
775
- napi_reject_deferred(cb_env, w->deferred, error);
776
- }
777
- napi_delete_async_work(cb_env, w->work);
778
- delete w;
779
- },
780
- work_data,
781
- &work_data->work) != napi_ok) {
782
- // Work was never created: settle the promise and free the data so it does
783
- // not leak / hang pending forever.
784
- RejectDeferredWithMessage(
785
- env, work_data->deferred, "Unable to create async work");
786
- delete work_data;
787
- return promise;
788
- }
789
- if (napi_queue_async_work(env, work_data->work) != napi_ok) {
790
- // Queued failed: the complete callback will never run, so clean up here.
791
- napi_delete_async_work(env, work_data->work);
792
- RejectDeferredWithMessage(
793
- env, work_data->deferred, "Unable to queue async work");
794
- delete work_data;
795
- return promise;
796
- }
797
- return promise;
799
+ return QueueWork<ApplyArchiveDeltaWork>(
800
+ env,
801
+ "applyArchiveDelta",
802
+ std::move(work),
803
+ [](ApplyArchiveDeltaWork& w) {
804
+ w.status =
805
+ pushy::archive_patch::ApplyArchivePatch(w.request, &w.host_copies);
806
+ },
807
+ [](napi_env cb_env, napi_deferred deferred, const ApplyArchiveDeltaWork& w) {
808
+ if (!w.status.ok) {
809
+ RejectDeferredWithMessage(cb_env, deferred, w.status.message.c_str());
810
+ return;
811
+ }
812
+ napi_resolve_deferred(cb_env, deferred, NewCopyGroupArray(cb_env, w.host_copies));
813
+ });
798
814
  }
799
815
 
800
816
  // cleanupOldEntries(rootDir, keepNames: string[], maxAgeDays)
@@ -820,64 +836,22 @@ napi_value CleanupOldEntries(napi_env env, napi_callback_info info) {
820
836
  return nullptr;
821
837
  }
822
838
 
823
- auto* work_data = new CleanupWork();
824
- work_data->root_dir = root_dir;
825
- work_data->keep_names = std::move(keep_names);
826
- work_data->max_age_days = max_age_days;
839
+ CleanupWork work;
840
+ work.root_dir = root_dir;
841
+ work.keep_names = std::move(keep_names);
842
+ work.max_age_days = max_age_days;
827
843
 
828
- napi_value promise = nullptr;
829
- if (napi_create_promise(env, &work_data->deferred, &promise) != napi_ok) {
830
- delete work_data;
831
- ThrowError(env, "Unable to create promise");
832
- return nullptr;
833
- }
834
-
835
- napi_value resource_name = nullptr;
836
- napi_create_string_utf8(
837
- env, "cleanupOldEntries", NAPI_AUTO_LENGTH, &resource_name);
838
- if (napi_create_async_work(
839
- env,
840
- nullptr,
841
- resource_name,
842
- [](napi_env, void* data) {
843
- auto* w = static_cast<CleanupWork*>(data);
844
- w->status = pushy::delta::CleanupOldEntries(
845
- w->root_dir, w->keep_names, w->max_age_days);
846
- },
847
- [](napi_env cb_env, napi_status status, void* data) {
848
- auto* w = static_cast<CleanupWork*>(data);
849
- if (status != napi_ok) {
850
- RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
851
- } else if (w->status.ok) {
852
- napi_value undefined_value = nullptr;
853
- napi_get_undefined(cb_env, &undefined_value);
854
- napi_resolve_deferred(cb_env, w->deferred, undefined_value);
855
- } else {
856
- napi_value error = nullptr;
857
- napi_value message = nullptr;
858
- napi_create_string_utf8(
859
- cb_env, w->status.message.c_str(), NAPI_AUTO_LENGTH, &message);
860
- napi_create_error(cb_env, nullptr, message, &error);
861
- napi_reject_deferred(cb_env, w->deferred, error);
862
- }
863
- napi_delete_async_work(cb_env, w->work);
864
- delete w;
865
- },
866
- work_data,
867
- &work_data->work) != napi_ok) {
868
- RejectDeferredWithMessage(
869
- env, work_data->deferred, "Unable to create async work");
870
- delete work_data;
871
- return promise;
872
- }
873
- if (napi_queue_async_work(env, work_data->work) != napi_ok) {
874
- napi_delete_async_work(env, work_data->work);
875
- RejectDeferredWithMessage(
876
- env, work_data->deferred, "Unable to queue async work");
877
- delete work_data;
878
- return promise;
879
- }
880
- return promise;
844
+ return QueueWork<CleanupWork>(
845
+ env,
846
+ "cleanupOldEntries",
847
+ std::move(work),
848
+ [](CleanupWork& w) {
849
+ w.status = pushy::delta::CleanupOldEntries(
850
+ w.root_dir, w.keep_names, w.max_age_days);
851
+ },
852
+ [](napi_env cb_env, napi_deferred deferred, const CleanupWork& w) {
853
+ SettleWithStatus(cb_env, deferred, w.status);
854
+ });
881
855
  }
882
856
 
883
857
  // sha256HexFileAsync(path) -> Promise<hex>. Rejects when the file cannot be
@@ -899,144 +873,350 @@ napi_value Sha256HexFileAsync(napi_env env, napi_callback_info info) {
899
873
  return nullptr;
900
874
  }
901
875
 
902
- auto* work_data = new Sha256FileWork();
903
- work_data->path = std::move(path);
876
+ Sha256FileWork work;
877
+ work.path = std::move(path);
904
878
 
905
- napi_value promise = nullptr;
906
- if (napi_create_promise(env, &work_data->deferred, &promise) != napi_ok) {
907
- delete work_data;
908
- ThrowError(env, "Unable to create promise");
879
+ return QueueWork<Sha256FileWork>(
880
+ env,
881
+ "sha256HexFileAsync",
882
+ std::move(work),
883
+ [](Sha256FileWork& w) { w.hex = pushy::digest::Sha256File(w.path); },
884
+ [](napi_env cb_env, napi_deferred deferred, const Sha256FileWork& w) {
885
+ if (w.hex.empty()) {
886
+ RejectDeferredWithMessage(
887
+ cb_env, deferred, "sha256HexFileAsync: cannot read file");
888
+ } else {
889
+ napi_resolve_deferred(cb_env, deferred, NewString(cb_env, w.hex));
890
+ }
891
+ });
892
+ }
893
+
894
+ // sha256HexRawFdAsync(fd, offset, length) -> Promise<hex>, hashed on a libuv
895
+ // worker thread. Used for the embedded bundle (resourceManager.getRawFd): the
896
+ // UI thread neither reads the multi-MB bundle into memory nor hashes it.
897
+ // Rejects on any read failure or short read.
898
+ napi_value Sha256HexRawFdAsync(napi_env env, napi_callback_info info) {
899
+ napi_value args[3] = {nullptr, nullptr, nullptr};
900
+ size_t argc = 3;
901
+ if (!GetArgCount(env, info, &argc, args) || argc < 3) {
902
+ ThrowError(env, "sha256HexRawFdAsync: expected (fd, offset, length)");
909
903
  return nullptr;
910
904
  }
911
-
912
- napi_value resource_name = nullptr;
913
- napi_create_string_utf8(
914
- env, "sha256HexFileAsync", NAPI_AUTO_LENGTH, &resource_name);
915
- if (napi_create_async_work(
916
- env,
917
- nullptr,
918
- resource_name,
919
- [](napi_env, void* data) {
920
- auto* w = static_cast<Sha256FileWork*>(data);
921
- w->hex = pushy::digest::Sha256File(w->path);
922
- },
923
- [](napi_env cb_env, napi_status status, void* data) {
924
- auto* w = static_cast<Sha256FileWork*>(data);
925
- if (status != napi_ok) {
926
- RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
927
- } else if (w->hex.empty()) {
928
- RejectDeferredWithMessage(
929
- cb_env, w->deferred, "sha256HexFileAsync: cannot read file");
930
- } else {
931
- napi_resolve_deferred(cb_env, w->deferred, NewString(cb_env, w->hex));
932
- }
933
- napi_delete_async_work(cb_env, w->work);
934
- delete w;
935
- },
936
- work_data,
937
- &work_data->work) != napi_ok) {
938
- RejectDeferredWithMessage(
939
- env, work_data->deferred, "Unable to create async work");
940
- delete work_data;
941
- return promise;
905
+ int32_t fd = -1;
906
+ if (!GetInt32(env, args[0], &fd)) {
907
+ return nullptr;
942
908
  }
943
- if (napi_queue_async_work(env, work_data->work) != napi_ok) {
944
- napi_delete_async_work(env, work_data->work);
945
- RejectDeferredWithMessage(
946
- env, work_data->deferred, "Unable to queue async work");
947
- delete work_data;
948
- return promise;
909
+ if (fd < 0) {
910
+ ThrowError(env, "sha256HexRawFdAsync: fd must be non-negative");
911
+ return nullptr;
949
912
  }
950
- return promise;
913
+ int64_t offset = 0;
914
+ int64_t length = 0;
915
+ if (!GetNonNegativeInt64(env, args[1], "offset", &offset) ||
916
+ !GetNonNegativeInt64(env, args[2], "length", &length)) {
917
+ return nullptr;
918
+ }
919
+
920
+ Sha256RangeWork work;
921
+ work.fd = fd;
922
+ work.offset = offset;
923
+ work.length = length;
924
+
925
+ return QueueWork<Sha256RangeWork>(
926
+ env,
927
+ "sha256HexRawFdAsync",
928
+ std::move(work),
929
+ HashFdRange,
930
+ [](napi_env cb_env, napi_deferred deferred, const Sha256RangeWork& w) {
931
+ if (!w.error.empty() || w.hex.empty()) {
932
+ RejectDeferredWithMessage(
933
+ cb_env,
934
+ deferred,
935
+ w.error.empty() ? "sha256HexRawFdAsync: no digest"
936
+ : w.error.c_str());
937
+ } else {
938
+ napi_resolve_deferred(cb_env, deferred, NewString(cb_env, w.hex));
939
+ }
940
+ });
951
941
  }
952
942
 
953
- bool ExportFunction(
943
+ // ---- Completion records (cpp/patch_core/install_record.h) ----
944
+
945
+ // Reads the first `count` arguments as strings, of which the first
946
+ // `non_empty` must not be empty; throws and returns false otherwise.
947
+ bool GetStringArgs(
954
948
  napi_env env,
955
- napi_value exports,
949
+ napi_callback_info info,
956
950
  const char* name,
957
- napi_callback callback) {
958
- napi_value fn = nullptr;
959
- if (napi_create_function(env, name, NAPI_AUTO_LENGTH, callback, nullptr, &fn) !=
960
- napi_ok) {
961
- ThrowError(env, std::string("Unable to create function ") + name);
951
+ size_t count,
952
+ size_t non_empty,
953
+ std::string* out) {
954
+ napi_value args[5] = {nullptr, nullptr, nullptr, nullptr, nullptr};
955
+ size_t argc = count;
956
+ if (count > 5 || !GetArgCount(env, info, &argc, args) || argc < count) {
957
+ ThrowError(env, std::string(name) + ": wrong number of arguments");
962
958
  return false;
963
959
  }
964
-
965
- if (napi_set_named_property(env, exports, name, fn) != napi_ok) {
966
- ThrowError(env, std::string("Unable to export function ") + name);
967
- return false;
960
+ for (size_t i = 0; i < count; i++) {
961
+ bool ok = false;
962
+ out[i] = GetString(env, args[i], &ok);
963
+ if (!ok) {
964
+ return false;
965
+ }
966
+ if (i < non_empty && out[i].empty()) {
967
+ ThrowError(env, std::string(name) + ": argument " + std::to_string(i) +
968
+ " must be a non-empty string");
969
+ return false;
970
+ }
968
971
  }
969
972
  return true;
970
973
  }
971
974
 
972
- } // namespace
975
+ // isInstallComplete(versionDir, versionHash, bundleFileName) -> boolean.
976
+ // Synchronous: a stat and a read of the (at most 64 KB) record, no digest.
977
+ napi_value InstallRecordIsComplete(napi_env env, napi_callback_info info) {
978
+ std::string args[3];
979
+ if (!GetStringArgs(env, info, "isInstallComplete", 3, 3, args)) {
980
+ return nullptr;
981
+ }
982
+ return NewBoolean(env, pushy::install_record::IsComplete(args[0], args[1], args[2]));
983
+ }
973
984
 
985
+ // recordedBundleSha256(versionDir) -> string; "" when the record has none.
986
+ // Synchronous like isInstallComplete.
987
+ napi_value InstallRecordBundleSha256(napi_env env, napi_callback_info info) {
988
+ std::string args[1];
989
+ if (!GetStringArgs(env, info, "recordedBundleSha256", 1, 1, args)) {
990
+ return nullptr;
991
+ }
992
+ return NewString(env, pushy::install_record::RecordedBundleSha256(args[0]));
993
+ }
974
994
 
975
- // sha256(Uint8Array | ArrayBuffer) -> 小写 hex。同步:bundleHash 的输入是
976
- // rawfile 里的 bundle(已整体读入内存,与 pdiff 的读法一致),哈希本身毫秒级。
977
- static napi_value MakeUtf8String(napi_env env, const std::string& value);
995
+ // One install_record call on a libuv worker thread: hashing a bundle (tens
996
+ // of MB) or fsyncing must not block the JS thread.
997
+ struct InstallRecordWork {
998
+ std::string args[4];
999
+ bool grandfathered = false;
1000
+ pushy::delta::Status status{false, ""};
1001
+ };
978
1002
 
979
- // Streaming file digest (bounded memory). Synchronous: small files only —
980
- // archives and bundles go through sha256HexFileAsync.
981
- static napi_value Sha256HexFile(napi_env env, napi_callback_info info) {
982
- size_t argc = 1;
983
- napi_value args[1] = {nullptr};
984
- if (!GetArgCount(env, info, &argc, args) || argc < 1) {
985
- ThrowError(env, "sha256HexFile: missing path argument");
1003
+ void SettleInstallRecordWork(
1004
+ napi_env env,
1005
+ napi_deferred deferred,
1006
+ const InstallRecordWork& w) {
1007
+ SettleWithStatus(env, deferred, w.status);
1008
+ }
1009
+
1010
+ // sealInstallRecord(stagingDir, versionHash, bundleFileName, artifactSha256)
1011
+ // -> Promise<void>: hashes the staged bundle and writes the record.
1012
+ napi_value SealInstallRecord(napi_env env, napi_callback_info info) {
1013
+ InstallRecordWork work;
1014
+ if (!GetStringArgs(env, info, "sealInstallRecord", 4, 3, work.args)) {
986
1015
  return nullptr;
987
1016
  }
988
- bool ok = false;
989
- std::string path = GetString(env, args[0], &ok);
990
- if (!ok) {
991
- // GetString already raised the pending exception.
1017
+ return QueueWork<InstallRecordWork>(
1018
+ env,
1019
+ "sealInstallRecord",
1020
+ std::move(work),
1021
+ [](InstallRecordWork& w) {
1022
+ w.status = pushy::install_record::Seal(
1023
+ w.args[0], w.args[1], w.args[2], w.args[3], std::string())
1024
+ .status;
1025
+ },
1026
+ SettleInstallRecordWork);
1027
+ }
1028
+
1029
+ // promoteStaging(stagingDir, versionDir) -> Promise<void>: renames the sealed
1030
+ // staging directory to the (removed) version directory.
1031
+ napi_value PromoteStaging(napi_env env, napi_callback_info info) {
1032
+ InstallRecordWork work;
1033
+ if (!GetStringArgs(env, info, "promoteStaging", 2, 2, work.args)) {
992
1034
  return nullptr;
993
1035
  }
994
- return MakeUtf8String(env, pushy::digest::Sha256File(path));
1036
+ return QueueWork<InstallRecordWork>(
1037
+ env,
1038
+ "promoteStaging",
1039
+ std::move(work),
1040
+ [](InstallRecordWork& w) {
1041
+ w.status = pushy::install_record::Promote(w.args[0], w.args[1]);
1042
+ },
1043
+ SettleInstallRecordWork);
995
1044
  }
996
1045
 
997
- static napi_value Sha256Hex(napi_env env, napi_callback_info info) {
998
- size_t argc = 1;
999
- napi_value args[1] = {nullptr};
1000
- if (!GetArgCount(env, info, &argc, args) || argc < 1) {
1001
- ThrowError(env, "sha256Hex: missing data argument");
1046
+ // checkActivation(versionDir, versionHash, bundleFileName, grandfathered)
1047
+ // -> Promise<void>, rejected with the reason the version must not be
1048
+ // activated.
1049
+ napi_value CheckActivation(napi_env env, napi_callback_info info) {
1050
+ InstallRecordWork work;
1051
+ if (!GetStringArgs(env, info, "checkActivation", 3, 3, work.args)) {
1052
+ return nullptr;
1053
+ }
1054
+ napi_value args[4] = {nullptr, nullptr, nullptr, nullptr};
1055
+ size_t argc = 4;
1056
+ if (!GetArgCount(env, info, &argc, args) || argc < 4) {
1057
+ ThrowError(env, "checkActivation: wrong number of arguments");
1002
1058
  return nullptr;
1003
1059
  }
1060
+ if (!GetBoolean(env, args[3], &work.grandfathered)) {
1061
+ return nullptr;
1062
+ }
1063
+ return QueueWork<InstallRecordWork>(
1064
+ env,
1065
+ "checkActivation",
1066
+ std::move(work),
1067
+ [](InstallRecordWork& w) {
1068
+ pushy::install_record::Activation activation;
1069
+ w.status = pushy::install_record::CheckActivation(
1070
+ w.args[0], w.args[1], w.args[2], w.grandfathered, &activation);
1071
+ },
1072
+ SettleInstallRecordWork);
1073
+ }
1004
1074
 
1005
- void* data = nullptr;
1006
- size_t length = 0;
1007
- bool is_typedarray = false;
1008
- napi_is_typedarray(env, args[0], &is_typedarray);
1009
- if (is_typedarray) {
1010
- napi_typedarray_type type;
1011
- napi_value arraybuffer = nullptr;
1012
- size_t offset = 0;
1013
- if (napi_get_typedarray_info(
1014
- env, args[0], &type, &length, &data, &arraybuffer, &offset) !=
1015
- napi_ok) {
1016
- ThrowError(env, "sha256Hex: cannot read typed array");
1017
- return nullptr;
1018
- }
1019
- } else {
1020
- bool is_arraybuffer = false;
1021
- napi_is_arraybuffer(env, args[0], &is_arraybuffer);
1022
- if (!is_arraybuffer ||
1023
- napi_get_arraybuffer_info(env, args[0], &data, &length) != napi_ok) {
1024
- ThrowError(env, "sha256Hex: expected Uint8Array or ArrayBuffer");
1025
- return nullptr;
1075
+ // ---- Archive extraction limits (cpp/patch_core/archive_limits.h) ----
1076
+
1077
+ // Reads `count` number arguments (byte counts: integers below 2^53).
1078
+ bool GetInt64Args(
1079
+ napi_env env,
1080
+ napi_callback_info info,
1081
+ const char* name,
1082
+ size_t count,
1083
+ int64_t* out) {
1084
+ napi_value args[4] = {nullptr, nullptr, nullptr, nullptr};
1085
+ size_t argc = count;
1086
+ if (count > 4 || !GetArgCount(env, info, &argc, args) || argc < count) {
1087
+ ThrowError(env, std::string(name) + ": wrong number of arguments");
1088
+ return false;
1089
+ }
1090
+ for (size_t i = 0; i < count; i++) {
1091
+ napi_valuetype type = napi_undefined;
1092
+ if (!GetValueType(env, args[i], &type) || type != napi_number ||
1093
+ napi_get_value_int64(env, args[i], &out[i]) != napi_ok) {
1094
+ ThrowError(env, std::string(name) + ": argument " + std::to_string(i) +
1095
+ " must be a number");
1096
+ return false;
1026
1097
  }
1027
1098
  }
1099
+ return true;
1100
+ }
1028
1101
 
1029
- pushy::digest::Sha256 hasher;
1030
- if (length > 0) {
1031
- hasher.Update(static_cast<const uint8_t*>(data), length);
1102
+ // checkUncompressedSize(archiveBytes, uncompressedBytes) -> string | undefined:
1103
+ // the reason the whole archive's expansion is refused.
1104
+ napi_value CheckUncompressedSize(napi_env env, napi_callback_info info) {
1105
+ int64_t args[2] = {0, 0};
1106
+ if (!GetInt64Args(env, info, "checkUncompressedSize", 2, args)) {
1107
+ return nullptr;
1032
1108
  }
1033
- const std::string hex = hasher.HexDigest();
1109
+ const pushy::delta::Status status =
1110
+ pushy::archive_limits::CheckUncompressedSize(args[0], args[1]);
1111
+ return status.ok ? nullptr : NewString(env, status.message);
1112
+ }
1034
1113
 
1114
+ // planFreeSpaceProbe(knownTotal, writtenBefore, chunkBytes, reservedUntil)
1115
+ // -> {probe, reserve, reservedUntil}, before one chunk of a download is
1116
+ // written.
1117
+ napi_value PlanFreeSpaceProbe(napi_env env, napi_callback_info info) {
1118
+ int64_t args[4] = {0, 0, 0, 0};
1119
+ if (!GetInt64Args(env, info, "planFreeSpaceProbe", 4, args)) {
1120
+ return nullptr;
1121
+ }
1122
+ const pushy::archive_limits::FreeSpaceProbe plan =
1123
+ pushy::archive_limits::PlanUnknownLengthFreeSpaceProbe(
1124
+ args[0], args[1], args[2], args[3]);
1035
1125
  napi_value result = nullptr;
1036
- napi_create_string_utf8(env, hex.c_str(), hex.size(), &result);
1126
+ napi_value reserve = nullptr;
1127
+ napi_value reserved_until = nullptr;
1128
+ if (napi_create_object(env, &result) != napi_ok ||
1129
+ napi_create_int64(env, plan.reserve, &reserve) != napi_ok ||
1130
+ napi_create_int64(env, plan.reserved_until, &reserved_until) != napi_ok) {
1131
+ ThrowError(env, "planFreeSpaceProbe: cannot create the result");
1132
+ return nullptr;
1133
+ }
1134
+ SetBoolProperty(env, result, "probe", plan.probe);
1135
+ napi_set_named_property(env, result, "reserve", reserve);
1136
+ napi_set_named_property(env, result, "reservedUntil", reserved_until);
1037
1137
  return result;
1038
1138
  }
1039
1139
 
1140
+ struct ExtractedDirectoryWork {
1141
+ std::string directory;
1142
+ int64_t archive_bytes = 0;
1143
+ pushy::delta::Status status{false, ""};
1144
+ };
1145
+
1146
+ // checkExtractedDirectory(directory, archiveBytes) -> Promise<void>: walks
1147
+ // the freshly unpacked tree on a libuv worker thread and rejects with the
1148
+ // first violation.
1149
+ napi_value CheckExtractedDirectory(napi_env env, napi_callback_info info) {
1150
+ napi_value args[2] = {nullptr, nullptr};
1151
+ size_t argc = 2;
1152
+ if (!GetArgCount(env, info, &argc, args) || argc < 2) {
1153
+ ThrowError(env, "checkExtractedDirectory: wrong number of arguments");
1154
+ return nullptr;
1155
+ }
1156
+ ExtractedDirectoryWork work;
1157
+ bool ok = false;
1158
+ work.directory = GetString(env, args[0], &ok);
1159
+ if (!ok) {
1160
+ return nullptr;
1161
+ }
1162
+ napi_valuetype type = napi_undefined;
1163
+ if (work.directory.empty() || !GetValueType(env, args[1], &type) ||
1164
+ type != napi_number ||
1165
+ napi_get_value_int64(env, args[1], &work.archive_bytes) != napi_ok) {
1166
+ ThrowError(env, "checkExtractedDirectory: expected a directory and a size");
1167
+ return nullptr;
1168
+ }
1169
+ return QueueWork<ExtractedDirectoryWork>(
1170
+ env,
1171
+ "checkExtractedDirectory",
1172
+ std::move(work),
1173
+ [](ExtractedDirectoryWork& w) {
1174
+ w.status = pushy::archive_limits::CheckExtractedDirectory(
1175
+ w.directory, w.archive_bytes);
1176
+ },
1177
+ [](napi_env cb_env, napi_deferred deferred, const ExtractedDirectoryWork& w) {
1178
+ SettleWithStatus(cb_env, deferred, w.status);
1179
+ });
1180
+ }
1181
+
1182
+ // Every exported callback runs through Guarded: a C++ exception from the
1183
+ // shared cores (std::bad_alloc, std::length_error) must not unwind into NAPI,
1184
+ // so it becomes a JS Error instead (CODE_AUDIT 4.4).
1185
+ template <napi_value (*Callback)(napi_env, napi_callback_info)>
1186
+ napi_value Guarded(napi_env env, napi_callback_info info) {
1187
+ try {
1188
+ return Callback(env, info);
1189
+ } catch (...) {
1190
+ std::string failure;
1191
+ RecordFailure(&failure);
1192
+ napi_throw_error(env, nullptr,
1193
+ failure.empty() ? "native error" : failure.c_str());
1194
+ }
1195
+ return nullptr;
1196
+ }
1197
+
1198
+ bool ExportFunction(
1199
+ napi_env env,
1200
+ napi_value exports,
1201
+ const char* name,
1202
+ napi_callback callback) {
1203
+ napi_value fn = nullptr;
1204
+ if (napi_create_function(env, name, NAPI_AUTO_LENGTH, callback, nullptr, &fn) !=
1205
+ napi_ok) {
1206
+ ThrowError(env, std::string("Unable to create function ") + name);
1207
+ return false;
1208
+ }
1209
+
1210
+ if (napi_set_named_property(env, exports, name, fn) != napi_ok) {
1211
+ ThrowError(env, std::string("Unable to export function ") + name);
1212
+ return false;
1213
+ }
1214
+ return true;
1215
+ }
1216
+
1217
+ } // namespace
1218
+
1219
+
1040
1220
  // CRC32(zip/zlib 多项式)。同步:输入是已在内存的 rawfile 资源字节,用于
1041
1221
  // pdiff 拷贝前与 __diff.json copiesCrc 比对(不符则整次 patch 失败落 full)。
1042
1222
  static napi_value Crc32(napi_env env, napi_callback_info info) {
@@ -1093,139 +1273,258 @@ static napi_value GetSupportedDiffVersion(napi_env env, napi_callback_info) {
1093
1273
  return result;
1094
1274
  }
1095
1275
 
1096
- // ---- update-flow decision layer (NATIVE_CHECKUPDATE_DESIGN §10) ----
1097
- // String-in/string-out JSON, matching the decision layer's own boundary.
1098
- // Returning undefined (nullptr without a pending exception) means "input did
1099
- // not parse"; the ArkTS orchestrator skips the check round.
1276
+ // ---- native round (update_flow_core/native_round.h) ----
1277
+ // JSON text in and out. Returning undefined (nullptr without a pending
1278
+ // exception) means the core rejected the input; the ArkTS orchestrator fails
1279
+ // the round.
1280
+
1281
+ // Reads the first `count` arguments (at most 5) into `args`, and those of
1282
+ // them flagged in `strings` (bit i = argument i) as strings into `out[i]`
1283
+ // (null/undefined read as ""). False with an exception pending otherwise.
1284
+ bool GetFlowArgs(napi_env env, napi_callback_info info, const char* name,
1285
+ size_t count, unsigned strings, napi_value* args,
1286
+ std::string* out) {
1287
+ size_t argc = count;
1288
+ if (!GetArgCount(env, info, &argc, args) || argc < count) {
1289
+ ThrowError(env, std::string(name) + ": missing arguments");
1290
+ return false;
1291
+ }
1292
+ for (size_t i = 0; i < count; i++) {
1293
+ bool ok = true;
1294
+ if ((strings >> i) & 1u) {
1295
+ out[i] = GetString(env, args[i], &ok);
1296
+ }
1297
+ if (!ok) {
1298
+ return false;
1299
+ }
1300
+ }
1301
+ return true;
1302
+ }
1100
1303
 
1101
- static napi_value MakeUtf8String(napi_env env, const std::string& value) {
1102
- napi_value result = nullptr;
1103
- if (napi_create_string_utf8(env, value.c_str(), value.size(), &result) !=
1104
- napi_ok) {
1105
- ThrowError(env, "Failed to create string");
1304
+ bool GetFlowNumber(napi_env env, napi_value value, const char* name,
1305
+ double* out) {
1306
+ if (napi_get_value_double(env, value, out) != napi_ok) {
1307
+ ThrowError(env, std::string(name) + ": expected number");
1308
+ return false;
1309
+ }
1310
+ return true;
1311
+ }
1312
+
1313
+ // The parsed object, or Undefined (which the core rejects).
1314
+ flowjson::Value ParseFlowObject(const std::string& json) {
1315
+ bool ok = false;
1316
+ flowjson::Value value = flowjson::Parse(json, &ok);
1317
+ return ok && value.IsObject() ? value : flowjson::Value::Undefined();
1318
+ }
1319
+
1320
+ napi_value FlowJsonOrUndefined(napi_env env, const flowjson::Value& value) {
1321
+ return value.IsUndefined() ? nullptr
1322
+ : NewString(env, flowjson::Stringify(value));
1323
+ }
1324
+
1325
+ // prepareRound(configJson, envJson, randomSample)
1326
+ static napi_value FlowPrepareRound(napi_env env, napi_callback_info info) {
1327
+ napi_value args[3] = {nullptr, nullptr, nullptr};
1328
+ std::string text[3];
1329
+ double sample = 0;
1330
+ if (!GetFlowArgs(env, info, "prepareRound", 3, 0b011, args, text) ||
1331
+ !GetFlowNumber(env, args[2], "prepareRound", &sample)) {
1106
1332
  return nullptr;
1107
1333
  }
1108
- return result;
1334
+ return FlowJsonOrUndefined(
1335
+ env, flowcore::PrepareRound(text[0], ParseFlowObject(text[1]), sample));
1109
1336
  }
1110
1337
 
1111
- static napi_value FlowBuildRequestBody(napi_env env,
1112
- napi_callback_info info) {
1113
- size_t argc = 1;
1114
- napi_value args[1] = {nullptr};
1115
- if (!GetArgCount(env, info, &argc, args) || argc < 1) {
1116
- ThrowError(env, "buildRequestBody: missing input argument");
1338
+ // stepRound(stateJson?, eventJson) — one step of the round driver
1339
+ // (round_engine.h); stateJson undefined/null starts fresh. Synchronous and
1340
+ // cheap: the round's IO stays in ArkTS.
1341
+ static napi_value FlowStepRound(napi_env env, napi_callback_info info) {
1342
+ napi_value args[2] = {nullptr, nullptr};
1343
+ std::string text[2];
1344
+ if (!GetFlowArgs(env, info, "stepRound", 2, 0b11, args, text)) {
1117
1345
  return nullptr;
1118
1346
  }
1119
- bool ok = false;
1120
- std::string input_json = GetString(env, args[0], &ok);
1121
- if (!ok) {
1347
+ return NewString(env, flowcore::StepRoundJson(text[0], text[1]));
1348
+ }
1349
+
1350
+ // nextQueryStep(stateJson, responseText?) — responseText undefined/null for
1351
+ // a failed (or no) request.
1352
+ static napi_value FlowNextQueryStep(napi_env env, napi_callback_info info) {
1353
+ napi_value args[2] = {nullptr, nullptr};
1354
+ std::string text[2];
1355
+ if (!GetFlowArgs(env, info, "nextQueryStep", 2, 0b11, args, text)) {
1122
1356
  return nullptr;
1123
1357
  }
1124
- bool parsed = false;
1125
- flowjson::Value input = flowjson::Parse(input_json, &parsed);
1126
- if (!parsed || !input.IsObject()) {
1358
+ return FlowJsonOrUndefined(
1359
+ env, flowcore::NextQueryStep(
1360
+ ParseFlowObject(text[0]),
1361
+ IsNullOrUndefined(env, args[1])
1362
+ ? flowjson::Value::Undefined()
1363
+ : flowjson::Value::String(std::move(text[1]))));
1364
+ }
1365
+
1366
+ // handleResponse(responseText, configJson, envJson, requestBody,
1367
+ // responseAtSeconds)
1368
+ static napi_value FlowHandleResponse(napi_env env, napi_callback_info info) {
1369
+ napi_value args[5] = {nullptr, nullptr, nullptr, nullptr, nullptr};
1370
+ std::string text[5];
1371
+ double responseAt = 0;
1372
+ if (!GetFlowArgs(env, info, "handleResponse", 5, 0b01111, args, text) ||
1373
+ !GetFlowNumber(env, args[4], "handleResponse", &responseAt)) {
1127
1374
  return nullptr;
1128
1375
  }
1129
- return MakeUtf8String(
1130
- env, flowjson::Stringify(flowcore::BuildRequestBody(input)));
1376
+ return FlowJsonOrUndefined(
1377
+ env, flowcore::HandleRoundResponse(text[0], text[1],
1378
+ ParseFlowObject(text[2]), text[3],
1379
+ responseAt));
1131
1380
  }
1132
1381
 
1133
- static napi_value FlowOrderEndpointCandidates(napi_env env,
1134
- napi_callback_info info) {
1382
+ // ---- persisted native config (update_flow_core/native_config.h) ----
1383
+ // null/undefined arguments read as "" (an absent config): never equivalent,
1384
+ // not_configured at the gate, not an object for the normalizer.
1385
+
1386
+ static napi_value FlowConfigsEquivalent(napi_env env, napi_callback_info info) {
1135
1387
  size_t argc = 2;
1136
1388
  napi_value args[2] = {nullptr, nullptr};
1137
1389
  if (!GetArgCount(env, info, &argc, args) || argc < 2) {
1138
- ThrowError(env, "orderEndpointCandidates: missing arguments");
1390
+ ThrowError(env, "configsEquivalent: missing arguments");
1139
1391
  return nullptr;
1140
1392
  }
1141
1393
  bool ok = false;
1142
- std::string endpoints_json = GetString(env, args[0], &ok);
1394
+ std::string a = GetString(env, args[0], &ok);
1143
1395
  if (!ok) {
1144
1396
  return nullptr;
1145
1397
  }
1146
- double sample = 0;
1147
- if (napi_get_value_double(env, args[1], &sample) != napi_ok) {
1148
- ThrowError(env, "orderEndpointCandidates: expected number sample");
1149
- return nullptr;
1150
- }
1151
- bool parsed = false;
1152
- flowjson::Value endpoints = flowjson::Parse(endpoints_json, &parsed);
1153
- if (!parsed || !endpoints.IsArray()) {
1398
+ std::string b = GetString(env, args[1], &ok);
1399
+ if (!ok) {
1154
1400
  return nullptr;
1155
1401
  }
1156
- return MakeUtf8String(env,
1157
- flowjson::Stringify(flowcore::OrderEndpointCandidates(
1158
- endpoints, sample)));
1402
+ napi_value result = nullptr;
1403
+ napi_get_boolean(env, flowcore::ConfigsEquivalent(a, b), &result);
1404
+ return result;
1159
1405
  }
1160
1406
 
1161
- static napi_value FlowIsValidResponse(napi_env env,
1162
- napi_callback_info info) {
1407
+ static napi_value FlowRunnableConfig(napi_env env, napi_callback_info info) {
1163
1408
  size_t argc = 1;
1164
1409
  napi_value args[1] = {nullptr};
1165
1410
  if (!GetArgCount(env, info, &argc, args) || argc < 1) {
1166
- ThrowError(env, "isValidResponse: missing arguments");
1411
+ ThrowError(env, "runnableConfig: missing argument");
1167
1412
  return nullptr;
1168
1413
  }
1169
1414
  bool ok = false;
1170
- std::string response_text = GetString(env, args[0], &ok);
1415
+ std::string config_json = GetString(env, args[0], &ok);
1171
1416
  if (!ok) {
1172
- // Exception pending (non-string argument): propagate it as a throw
1173
- // instead of a boolean that the caller would treat as a verdict.
1174
1417
  return nullptr;
1175
1418
  }
1176
- napi_value result = nullptr;
1177
- napi_get_boolean(env, flowcore::IsValidResponse(response_text),
1178
- &result);
1179
- return result;
1419
+ return NewString(env, flowcore::RunnableConfigJson(config_json));
1180
1420
  }
1181
1421
 
1182
- static napi_value FlowHandleResponse(napi_env env,
1183
- napi_callback_info info) {
1184
- size_t argc = 3;
1185
- napi_value args[3] = {nullptr, nullptr, nullptr};
1186
- if (!GetArgCount(env, info, &argc, args) || argc < 3) {
1187
- ThrowError(env, "handleResponse: missing arguments");
1422
+ // Throws Error("Invalid native configuration: ...") for options the host
1423
+ // must fix.
1424
+ static napi_value FlowNormalizeConfiguration(napi_env env,
1425
+ napi_callback_info info) {
1426
+ size_t argc = 1;
1427
+ napi_value args[1] = {nullptr};
1428
+ if (!GetArgCount(env, info, &argc, args) || argc < 1) {
1429
+ ThrowError(env, "normalizeConfiguration: missing argument");
1188
1430
  return nullptr;
1189
1431
  }
1190
1432
  bool ok = false;
1191
- std::string response_text = GetString(env, args[0], &ok);
1433
+ std::string options_json = GetString(env, args[0], &ok);
1192
1434
  if (!ok) {
1193
1435
  return nullptr;
1194
1436
  }
1195
- std::string identity_json = GetString(env, args[1], &ok);
1196
- if (!ok) {
1437
+ std::string config;
1438
+ std::string error;
1439
+ if (!flowcore::NormalizeConfiguration(options_json, &config, &error)) {
1440
+ ThrowError(env, error);
1197
1441
  return nullptr;
1198
1442
  }
1199
- std::string after_download = GetString(env, args[2], &ok);
1200
- if (!ok) {
1443
+ return NewString(env, config);
1444
+ }
1445
+
1446
+ // ---- resumable download (patch_core/resume_plan.h) ----
1447
+ // Strings in (null/undefined read as ""), JSON text out; DownloadTask.ts
1448
+ // keeps the IO.
1449
+
1450
+ // planRequest(sidecar, url, partialSize)
1451
+ static napi_value ResumePlanRequest(napi_env env, napi_callback_info info) {
1452
+ napi_value args[3] = {nullptr, nullptr, nullptr};
1453
+ std::string text[3];
1454
+ double partial_size = 0;
1455
+ if (!GetFlowArgs(env, info, "resumePlanRequest", 3, 0b011, args, text) ||
1456
+ !GetFlowNumber(env, args[2], "resumePlanRequest", &partial_size)) {
1201
1457
  return nullptr;
1202
1458
  }
1203
- bool parsed = false;
1204
- flowjson::Value identity = flowjson::Parse(identity_json, &parsed);
1205
- if (!parsed || !identity.IsObject()) {
1459
+ return NewString(env, pushy::resume::PlanRequestJson(
1460
+ text[0], text[1], static_cast<long long>(partial_size)));
1461
+ }
1462
+
1463
+ // classifyResponse(status, resumeOffset, contentRange, contentEncoding,
1464
+ // contentLength, sidecar, url, partialSize)
1465
+ static napi_value ResumeClassifyResponse(napi_env env, napi_callback_info info) {
1466
+ napi_value args[8] = {};
1467
+ std::string text[8];
1468
+ double status = 0;
1469
+ double resume_offset = 0;
1470
+ double content_length = 0;
1471
+ double partial_size = 0;
1472
+ if (!GetFlowArgs(env, info, "resumeClassifyResponse", 8, 0b01101100, args, text) ||
1473
+ !GetFlowNumber(env, args[0], "resumeClassifyResponse", &status) ||
1474
+ !GetFlowNumber(env, args[1], "resumeClassifyResponse", &resume_offset) ||
1475
+ !GetFlowNumber(env, args[4], "resumeClassifyResponse", &content_length) ||
1476
+ !GetFlowNumber(env, args[7], "resumeClassifyResponse", &partial_size)) {
1477
+ return nullptr;
1478
+ }
1479
+ return NewString(env, pushy::resume::ClassifyResponseJson(
1480
+ static_cast<int>(status),
1481
+ static_cast<long long>(resume_offset), text[2], text[3],
1482
+ static_cast<long long>(content_length), text[5], text[6],
1483
+ static_cast<long long>(partial_size)));
1484
+ }
1485
+
1486
+ // sidecar(url, etag, lastModified, previousSidecar, total)
1487
+ static napi_value ResumeSidecar(napi_env env, napi_callback_info info) {
1488
+ napi_value args[5] = {};
1489
+ std::string text[5];
1490
+ double total = 0;
1491
+ if (!GetFlowArgs(env, info, "resumeSidecar", 5, 0b01111, args, text) ||
1492
+ !GetFlowNumber(env, args[4], "resumeSidecar", &total)) {
1206
1493
  return nullptr;
1207
1494
  }
1208
- return MakeUtf8String(env,
1209
- flowjson::Stringify(flowcore::HandleResponse(
1210
- response_text, identity, false, after_download)));
1495
+ return NewString(env, pushy::resume::SidecarJson(text[0], text[1], text[2], text[3],
1496
+ static_cast<long long>(total)));
1211
1497
  }
1212
1498
 
1213
1499
  napi_value Init(napi_env env, napi_value exports) {
1214
- if (!ExportFunction(env, exports, "syncStateWithBinaryVersion", SyncStateWithBinaryVersion) ||
1215
- !ExportFunction(env, exports, "runStateCore", RunStateCore) ||
1216
- !ExportFunction(env, exports, "buildArchivePlan", BuildArchivePatchPlan) ||
1217
- !ExportFunction(env, exports, "buildCopyGroups", BuildCopyGroups) ||
1218
- !ExportFunction(env, exports, "applyDeltaFromSource", ApplyPatchFromFileSource) ||
1219
- !ExportFunction(env, exports, "cleanupOldEntries", CleanupOldEntries) ||
1220
- !ExportFunction(env, exports, "sha256Hex", Sha256Hex) ||
1221
- !ExportFunction(env, exports, "sha256HexFile", Sha256HexFile) ||
1222
- !ExportFunction(env, exports, "sha256HexFileAsync", Sha256HexFileAsync) ||
1223
- !ExportFunction(env, exports, "crc32", Crc32) ||
1224
- !ExportFunction(env, exports, "getSupportedDiffVersion", GetSupportedDiffVersion) ||
1225
- !ExportFunction(env, exports, "buildRequestBody", FlowBuildRequestBody) ||
1226
- !ExportFunction(env, exports, "orderEndpointCandidates", FlowOrderEndpointCandidates) ||
1227
- !ExportFunction(env, exports, "isValidResponse", FlowIsValidResponse) ||
1228
- !ExportFunction(env, exports, "handleResponse", FlowHandleResponse)) {
1500
+ // <generated:exports> (scripts/contract.ts; bun scripts/generate-contract.ts)
1501
+ if (!ExportFunction(env, exports, "syncStateWithBinaryVersion", Guarded<SyncStateWithBinaryVersion>) ||
1502
+ !ExportFunction(env, exports, "runStateCore", Guarded<RunStateCore>) ||
1503
+ !ExportFunction(env, exports, "applyArchiveDelta", Guarded<ApplyArchiveDelta>) ||
1504
+ !ExportFunction(env, exports, "cleanupOldEntries", Guarded<CleanupOldEntries>) ||
1505
+ !ExportFunction(env, exports, "sha256HexFileAsync", Guarded<Sha256HexFileAsync>) ||
1506
+ !ExportFunction(env, exports, "sha256HexRawFdAsync", Guarded<Sha256HexRawFdAsync>) ||
1507
+ !ExportFunction(env, exports, "isInstallComplete", Guarded<InstallRecordIsComplete>) ||
1508
+ !ExportFunction(env, exports, "recordedBundleSha256", Guarded<InstallRecordBundleSha256>) ||
1509
+ !ExportFunction(env, exports, "sealInstallRecord", Guarded<SealInstallRecord>) ||
1510
+ !ExportFunction(env, exports, "promoteStaging", Guarded<PromoteStaging>) ||
1511
+ !ExportFunction(env, exports, "checkActivation", Guarded<CheckActivation>) ||
1512
+ !ExportFunction(env, exports, "checkUncompressedSize", Guarded<CheckUncompressedSize>) ||
1513
+ !ExportFunction(env, exports, "checkExtractedDirectory", Guarded<CheckExtractedDirectory>) ||
1514
+ !ExportFunction(env, exports, "planFreeSpaceProbe", Guarded<PlanFreeSpaceProbe>) ||
1515
+ !ExportFunction(env, exports, "crc32", Guarded<Crc32>) ||
1516
+ !ExportFunction(env, exports, "getSupportedDiffVersion", Guarded<GetSupportedDiffVersion>) ||
1517
+ !ExportFunction(env, exports, "prepareRound", Guarded<FlowPrepareRound>) ||
1518
+ !ExportFunction(env, exports, "nextQueryStep", Guarded<FlowNextQueryStep>) ||
1519
+ !ExportFunction(env, exports, "stepRound", Guarded<FlowStepRound>) ||
1520
+ !ExportFunction(env, exports, "handleResponse", Guarded<FlowHandleResponse>) ||
1521
+ !ExportFunction(env, exports, "configsEquivalent", Guarded<FlowConfigsEquivalent>) ||
1522
+ !ExportFunction(env, exports, "runnableConfig", Guarded<FlowRunnableConfig>) ||
1523
+ !ExportFunction(env, exports, "normalizeConfiguration", Guarded<FlowNormalizeConfiguration>) ||
1524
+ !ExportFunction(env, exports, "resumePlanRequest", Guarded<ResumePlanRequest>) ||
1525
+ !ExportFunction(env, exports, "resumeClassifyResponse", Guarded<ResumeClassifyResponse>) ||
1526
+ !ExportFunction(env, exports, "resumeSidecar", Guarded<ResumeSidecar>)) {
1527
+ // </generated:exports>
1229
1528
  return nullptr;
1230
1529
  }
1231
1530
  return exports;