react-native-update 10.55.1 → 10.56.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 (76) hide show
  1. package/README-CN.md +35 -0
  2. package/README.md +37 -0
  3. package/android/build.gradle +53 -27
  4. package/android/jni/Application.mk +6 -1
  5. package/android/jni/hpatch.c +59 -4
  6. package/android/lib/arm64-v8a/librnupdate.so +0 -0
  7. package/android/lib/armeabi-v7a/librnupdate.so +0 -0
  8. package/android/lib/x86/librnupdate.so +0 -0
  9. package/android/lib/x86_64/librnupdate.so +0 -0
  10. package/android/proguard.pro +70 -14
  11. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +15 -8
  12. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +1 -0
  13. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +1 -2
  14. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +25 -0
  15. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +98 -34
  16. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +29 -0
  17. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +15 -0
  18. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +59 -0
  19. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +27 -1
  20. package/android/src/main/java/cn/reactnative/modules/update/NativeCheckOrchestrator.java +57 -16
  21. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +38 -46
  22. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +279 -183
  23. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +14 -0
  24. package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +222 -215
  25. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +5 -0
  26. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +23 -25
  27. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +29 -29
  28. package/cpp/patch_core/archive_limits.h +6 -0
  29. package/cpp/patch_core/jni_util.h +6 -2
  30. package/cpp/patch_core/patch_core.cpp +237 -84
  31. package/cpp/patch_core/patch_core.h +11 -0
  32. package/cpp/patch_core/patch_core_android.cpp +49 -33
  33. package/cpp/patch_core/update_core_android.cpp +134 -103
  34. package/cpp/update_flow_core/flow_json.cpp +150 -17
  35. package/cpp/update_flow_core/flow_json.h +13 -1
  36. package/cpp/update_flow_core/update_flow_core.cpp +78 -8
  37. package/cpp/update_flow_core/update_flow_core.h +9 -0
  38. package/cpp/update_flow_core/update_flow_jni.cpp +44 -25
  39. package/harmony/hvigor-plugin.ts +168 -21
  40. package/harmony/pushy/src/README.md +74 -0
  41. package/harmony/pushy/src/main/cpp/CMakeLists.txt +13 -3
  42. package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +11 -5
  43. package/harmony/pushy/src/main/cpp/pushy.cpp +103 -18
  44. package/harmony/pushy/src/main/ets/ArchiveLimits.ts +61 -5
  45. package/harmony/pushy/src/main/ets/DownloadTask.ts +255 -166
  46. package/harmony/pushy/src/main/ets/ErrorCodes.ts +75 -0
  47. package/harmony/pushy/src/main/ets/EventHub.ts +22 -20
  48. package/harmony/pushy/src/main/ets/InstallRecord.ts +79 -21
  49. package/harmony/pushy/src/main/ets/Logger.ts +42 -16
  50. package/harmony/pushy/src/main/ets/NativeCheckOrchestrator.ts +98 -17
  51. package/harmony/pushy/src/main/ets/NativePatchCore.ts +10 -3
  52. package/harmony/pushy/src/main/ets/PathUtils.ts +9 -3
  53. package/harmony/pushy/src/main/ets/PushyTurboModule.ts +139 -53
  54. package/harmony/pushy/src/main/ets/UpdateContext.ts +269 -159
  55. package/harmony/pushy/src/main/module.json5 +5 -1
  56. package/harmony/pushy.har +0 -0
  57. package/ios/PrivacyInfo.xcprivacy +79 -0
  58. package/ios/RCTPushy/RCTPushy.mm +399 -170
  59. package/ios/RCTPushy/RCTPushyDownloader.h +14 -0
  60. package/ios/RCTPushy/RCTPushyDownloader.mm +136 -11
  61. package/package.json +14 -24
  62. package/react-native-update.podspec +36 -3
  63. package/src/client.ts +236 -82
  64. package/src/context.ts +40 -27
  65. package/src/core.ts +41 -16
  66. package/src/endpoint.ts +2 -1
  67. package/src/error.ts +49 -11
  68. package/src/index.ts +14 -0
  69. package/src/locales/en.ts +1 -23
  70. package/src/locales/zh.ts +1 -22
  71. package/src/provider.tsx +159 -111
  72. package/src/type.ts +0 -2
  73. package/src/updateFlowCore.ts +10 -2
  74. package/src/utils.ts +61 -4
  75. package/android/src/main/java/cn/reactnative/modules/update/ReactNativeHostHandler.java +0 -13
  76. package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleSupport.java +0 -45
@@ -5,13 +5,16 @@ import com.facebook.react.bridge.ReactApplicationContext;
5
5
  import com.facebook.react.bridge.ReadableMap;
6
6
  import java.util.Map;
7
7
 
8
+ /**
9
+ * New-architecture bridge: the codegen spec overrides only, every method
10
+ * forwards to UpdateModuleImpl.
11
+ */
8
12
  public class UpdateModule extends NativePushySpec {
9
- private final UpdateContext updateContext;
13
+ private final UpdateModuleImpl impl;
10
14
 
11
15
  public UpdateModule(ReactApplicationContext reactContext, UpdateContext updateContext) {
12
16
  super(reactContext);
13
- this.updateContext = updateContext;
14
- UpdateEventEmitter.register(reactContext);
17
+ this.impl = new UpdateModuleImpl(reactContext, updateContext);
15
18
  }
16
19
 
17
20
  public UpdateModule(ReactApplicationContext reactContext) {
@@ -20,7 +23,7 @@ public class UpdateModule extends NativePushySpec {
20
23
 
21
24
  @Override
22
25
  protected Map<String, Object> getTypedExportedConstants() {
23
- return UpdateModuleSupport.getConstants(updateContext);
26
+ return impl.getConstants();
24
27
  }
25
28
 
26
29
  @Override
@@ -30,87 +33,82 @@ public class UpdateModule extends NativePushySpec {
30
33
 
31
34
  @Override
32
35
  public void downloadFullUpdate(ReadableMap options, Promise promise) {
33
- UpdateModuleImpl.downloadFullUpdate(updateContext, options, promise);
36
+ impl.downloadFullUpdate(options, promise);
34
37
  }
35
38
 
36
39
  @Override
37
40
  public void downloadAndInstallApk(ReadableMap options, Promise promise) {
38
- UpdateModuleImpl.downloadAndInstallApk(
39
- getReactApplicationContext(),
40
- updateContext,
41
- options,
42
- promise
43
- );
41
+ impl.downloadAndInstallApk(options, promise);
44
42
  }
45
43
 
46
44
  @Override
47
45
  public void downloadPatchFromPackage(ReadableMap options, Promise promise) {
48
- UpdateModuleImpl.downloadPatchFromPackage(updateContext, options, promise);
46
+ impl.downloadPatchFromPackage(options, promise);
49
47
  }
50
48
 
51
49
  @Override
52
50
  public void downloadPatchFromPpk(ReadableMap options, Promise promise) {
53
- UpdateModuleImpl.downloadPatchFromPpk(updateContext, options, promise);
51
+ impl.downloadPatchFromPpk(options, promise);
54
52
  }
55
53
 
56
54
  @Override
57
55
  public void reloadUpdate(ReadableMap options, Promise promise) {
58
- UpdateModuleImpl.reloadUpdate(updateContext, getReactApplicationContext(), options, promise);
56
+ impl.reloadUpdate(options, promise);
59
57
  }
60
58
 
61
59
  @Override
62
60
  public void restartApp(Promise promise) {
63
- UpdateModuleImpl.restartApp(updateContext, getReactApplicationContext(), null, promise);
61
+ impl.restartApp(null, promise);
64
62
  }
65
63
 
66
64
  @Override
67
65
  public void setNeedUpdate(ReadableMap options, Promise promise) {
68
- UpdateModuleImpl.setNeedUpdate(updateContext, options, promise);
66
+ impl.setNeedUpdate(options, promise);
69
67
  }
70
68
 
71
69
  @Override
72
70
  public void markSuccess(Promise promise) {
73
- UpdateModuleImpl.markSuccess(updateContext, promise);
71
+ impl.markSuccess(promise);
74
72
  }
75
73
 
76
74
  @Override
77
75
  public void getBundleHash(Promise promise) {
78
- UpdateModuleImpl.getBundleHash(updateContext, promise);
76
+ impl.getBundleHash(promise);
79
77
  }
80
78
 
81
79
  @Override
82
80
  public void resetToPackagedBundle(Promise promise) {
83
- UpdateModuleImpl.resetToPackagedBundle(updateContext, promise);
81
+ impl.resetToPackagedBundle(promise);
84
82
  }
85
83
 
86
84
  @Override
87
85
  public void setUuid(String uuid, Promise promise) {
88
- UpdateModuleImpl.setUuid(updateContext, uuid, promise);
86
+ impl.setUuid(uuid, promise);
89
87
  }
90
88
 
91
89
  @Override
92
90
  public void syncNativeConfig(String config, Promise promise) {
93
- UpdateModuleImpl.syncNativeConfig(updateContext, config, promise);
91
+ impl.syncNativeConfig(config, promise);
94
92
  }
95
93
 
96
94
  @Override
97
95
  public void getNativeCheckCache(Promise promise) {
98
- UpdateModuleImpl.getNativeCheckCache(updateContext, promise);
96
+ impl.getNativeCheckCache(promise);
99
97
  }
100
98
 
101
99
  @Override
102
100
  public void markJsCheckCompleted(String config, Promise promise) {
103
- UpdateModuleImpl.markJsCheckCompleted(updateContext, config, promise);
101
+ impl.markJsCheckCompleted(config, promise);
104
102
  }
105
103
 
106
104
  @Override
107
105
  public void setLocalHashInfo(String hash, String info, Promise promise) {
108
- UpdateModuleImpl.setLocalHashInfo(updateContext, hash, info, promise);
106
+ impl.setLocalHashInfo(hash, info, promise);
109
107
  }
110
108
 
111
109
  @Override
112
110
  public void getLocalHashInfo(String hash, Promise promise) {
113
- UpdateModuleImpl.getLocalHashInfo(updateContext, hash, promise);
111
+ impl.getLocalHashInfo(hash, promise);
114
112
  }
115
113
 
116
114
  @Override
@@ -7,13 +7,18 @@ import com.facebook.react.bridge.ReactMethod;
7
7
  import com.facebook.react.bridge.ReadableMap;
8
8
  import java.util.Map;
9
9
 
10
+ /**
11
+ * Old-architecture bridge: @ReactMethod declarations only, every method
12
+ * forwards to UpdateModuleImpl. Each state-changing method takes a trailing
13
+ * Promise, like the TurboModule spec, so a failed persistence rejects instead
14
+ * of resolving early (CODE_AUDIT 2.3).
15
+ */
10
16
  public class UpdateModule extends ReactContextBaseJavaModule {
11
- private final UpdateContext updateContext;
17
+ private final UpdateModuleImpl impl;
12
18
 
13
19
  public UpdateModule(ReactApplicationContext reactContext, UpdateContext updateContext) {
14
20
  super(reactContext);
15
- this.updateContext = updateContext;
16
- UpdateEventEmitter.register(reactContext);
21
+ this.impl = new UpdateModuleImpl(reactContext, updateContext);
17
22
  }
18
23
 
19
24
  public UpdateModule(ReactApplicationContext reactContext) {
@@ -22,7 +27,7 @@ public class UpdateModule extends ReactContextBaseJavaModule {
22
27
 
23
28
  @Override
24
29
  public Map<String, Object> getConstants() {
25
- return UpdateModuleSupport.getConstants(updateContext);
30
+ return impl.getConstants();
26
31
  }
27
32
 
28
33
  @Override
@@ -32,87 +37,82 @@ public class UpdateModule extends ReactContextBaseJavaModule {
32
37
 
33
38
  @ReactMethod
34
39
  public void downloadFullUpdate(ReadableMap options, Promise promise) {
35
- UpdateModuleImpl.downloadFullUpdate(updateContext, options, promise);
40
+ impl.downloadFullUpdate(options, promise);
36
41
  }
37
42
 
38
43
  @ReactMethod
39
44
  public void downloadAndInstallApk(ReadableMap options, Promise promise) {
40
- UpdateModuleImpl.downloadAndInstallApk(
41
- getReactApplicationContext(),
42
- updateContext,
43
- options,
44
- promise
45
- );
45
+ impl.downloadAndInstallApk(options, promise);
46
46
  }
47
47
 
48
48
  @ReactMethod
49
49
  public void downloadPatchFromPackage(ReadableMap options, Promise promise) {
50
- UpdateModuleImpl.downloadPatchFromPackage(updateContext, options, promise);
50
+ impl.downloadPatchFromPackage(options, promise);
51
51
  }
52
52
 
53
53
  @ReactMethod
54
54
  public void downloadPatchFromPpk(ReadableMap options, Promise promise) {
55
- UpdateModuleImpl.downloadPatchFromPpk(updateContext, options, promise);
55
+ impl.downloadPatchFromPpk(options, promise);
56
56
  }
57
57
 
58
58
  @ReactMethod
59
59
  public void reloadUpdate(ReadableMap options, Promise promise) {
60
- UpdateModuleImpl.reloadUpdate(updateContext, getReactApplicationContext(), options, promise);
60
+ impl.reloadUpdate(options, promise);
61
61
  }
62
62
 
63
63
  @ReactMethod
64
64
  public void restartApp(Promise promise) {
65
- UpdateModuleImpl.restartApp(updateContext, getReactApplicationContext(), null, promise);
65
+ impl.restartApp(null, promise);
66
66
  }
67
67
 
68
68
  @ReactMethod
69
- public void setNeedUpdate(ReadableMap options) {
70
- UpdateModuleImpl.setNeedUpdate(updateContext, options);
69
+ public void setNeedUpdate(ReadableMap options, Promise promise) {
70
+ impl.setNeedUpdate(options, promise);
71
71
  }
72
72
 
73
73
  @ReactMethod
74
- public void markSuccess() {
75
- UpdateModuleImpl.markSuccess(updateContext);
74
+ public void markSuccess(Promise promise) {
75
+ impl.markSuccess(promise);
76
76
  }
77
77
 
78
78
  @ReactMethod
79
79
  public void getBundleHash(Promise promise) {
80
- UpdateModuleImpl.getBundleHash(updateContext, promise);
80
+ impl.getBundleHash(promise);
81
81
  }
82
82
 
83
83
  @ReactMethod
84
84
  public void resetToPackagedBundle(Promise promise) {
85
- UpdateModuleImpl.resetToPackagedBundle(updateContext, promise);
85
+ impl.resetToPackagedBundle(promise);
86
86
  }
87
87
 
88
88
  @ReactMethod
89
- public void setUuid(String uuid) {
90
- UpdateModuleImpl.setUuid(updateContext, uuid);
89
+ public void setUuid(String uuid, Promise promise) {
90
+ impl.setUuid(uuid, promise);
91
91
  }
92
92
 
93
93
  @ReactMethod
94
94
  public void syncNativeConfig(String config, Promise promise) {
95
- UpdateModuleImpl.syncNativeConfig(updateContext, config, promise);
95
+ impl.syncNativeConfig(config, promise);
96
96
  }
97
97
 
98
98
  @ReactMethod
99
99
  public void getNativeCheckCache(Promise promise) {
100
- UpdateModuleImpl.getNativeCheckCache(updateContext, promise);
100
+ impl.getNativeCheckCache(promise);
101
101
  }
102
102
 
103
103
  @ReactMethod
104
104
  public void markJsCheckCompleted(String config, Promise promise) {
105
- UpdateModuleImpl.markJsCheckCompleted(updateContext, config, promise);
105
+ impl.markJsCheckCompleted(config, promise);
106
106
  }
107
107
 
108
108
  @ReactMethod
109
- public void setLocalHashInfo(String hash, String info) {
110
- UpdateModuleImpl.setLocalHashInfo(updateContext, hash, info);
109
+ public void setLocalHashInfo(String hash, String info, Promise promise) {
110
+ impl.setLocalHashInfo(hash, info, promise);
111
111
  }
112
112
 
113
113
  @ReactMethod
114
114
  public void getLocalHashInfo(String hash, Promise promise) {
115
- UpdateModuleImpl.getLocalHashInfo(updateContext, hash, promise);
115
+ impl.getLocalHashInfo(hash, promise);
116
116
  }
117
117
 
118
118
  @ReactMethod
@@ -31,6 +31,12 @@ constexpr long long kRatioCheckMinBytes = 1LL * 1024 * 1024;
31
31
  constexpr long long kMaxManifestBytes = 16LL * 1024 * 1024;
32
32
  // Free disk required beyond the bytes about to be written.
33
33
  constexpr long long kFreeDiskMarginBytes = 64LL * 1024 * 1024;
34
+ // A download whose length is unknown up front (chunked / encoded body) can
35
+ // only reserve the margin when the response arrives; the disk is re-probed
36
+ // before any write that would run past the bytes reserved so far, each
37
+ // probe reserving at least this many bytes ahead (a single larger chunk
38
+ // reserves its own size), so no write can ever eat into the margin.
39
+ constexpr long long kUnknownLengthFreeSpaceProbeBytes = 8LL * 1024 * 1024;
34
40
 
35
41
  } // namespace archive_limits
36
42
  } // namespace pushy
@@ -45,12 +45,16 @@ inline std::vector<std::string> JArrayToVector(
45
45
  return result;
46
46
  }
47
47
 
48
- inline void ThrowRuntimeException(JNIEnv* env, const std::string& message) {
48
+ inline void ThrowRuntimeException(JNIEnv* env, const char* message) {
49
49
  jclass exception = env->FindClass("java/lang/RuntimeException");
50
50
  if (exception != nullptr) {
51
- env->ThrowNew(exception, message.c_str());
51
+ env->ThrowNew(exception, message);
52
52
  }
53
53
  }
54
54
 
55
+ inline void ThrowRuntimeException(JNIEnv* env, const std::string& message) {
56
+ ThrowRuntimeException(env, message.c_str());
57
+ }
58
+
55
59
  } // namespace jni_util
56
60
  } // namespace pushy