@hot-updater/react-native 0.23.1 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +393 -49
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +204 -0
- package/android/src/main/java/com/hotupdater/HotUpdater.kt +48 -36
- package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +134 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +168 -95
- package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +15 -3
- package/android/src/main/java/com/hotupdater/SignatureVerifier.kt +17 -12
- package/android/src/newarch/HotUpdaterModule.kt +88 -23
- package/android/src/oldarch/HotUpdaterModule.kt +89 -22
- package/android/src/oldarch/HotUpdaterSpec.kt +6 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +401 -77
- package/ios/HotUpdater/Internal/BundleMetadata.swift +177 -0
- package/ios/HotUpdater/Internal/HotUpdater.mm +213 -47
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +96 -25
- package/ios/HotUpdater/Internal/SignatureVerifier.swift +35 -29
- package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +2 -2
- package/ios/HotUpdater/Public/HotUpdater.h +8 -2
- package/lib/commonjs/DefaultResolver.js +38 -0
- package/lib/commonjs/DefaultResolver.js.map +1 -0
- package/lib/commonjs/checkForUpdate.js +33 -45
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/error.js +45 -1
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/fetchUpdateInfo.js +7 -45
- package/lib/commonjs/fetchUpdateInfo.js.map +1 -1
- package/lib/commonjs/index.js +249 -208
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native.js +103 -3
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
- package/lib/commonjs/types.js +12 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/wrap.js +70 -1
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/module/DefaultResolver.js +34 -0
- package/lib/module/DefaultResolver.js.map +1 -0
- package/lib/module/checkForUpdate.js +34 -43
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/error.js +45 -0
- package/lib/module/error.js.map +1 -1
- package/lib/module/fetchUpdateInfo.js +7 -45
- package/lib/module/fetchUpdateInfo.js.map +1 -1
- package/lib/module/index.js +250 -203
- package/lib/module/index.js.map +1 -1
- package/lib/module/native.js +87 -2
- package/lib/module/native.js.map +1 -1
- package/lib/module/specs/NativeHotUpdater.js.map +1 -1
- package/lib/module/types.js +12 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/wrap.js +71 -2
- package/lib/module/wrap.js.map +1 -1
- package/lib/typescript/commonjs/DefaultResolver.d.ts +10 -0
- package/lib/typescript/commonjs/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts +12 -13
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/error.d.ts +120 -0
- package/lib/typescript/commonjs/error.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts +3 -5
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +38 -44
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +58 -2
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +62 -0
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +115 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.d.ts +132 -7
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/module/DefaultResolver.d.ts +10 -0
- package/lib/typescript/module/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/module/checkForUpdate.d.ts +12 -13
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/error.d.ts +120 -0
- package/lib/typescript/module/error.d.ts.map +1 -1
- package/lib/typescript/module/fetchUpdateInfo.d.ts +3 -5
- package/lib/typescript/module/fetchUpdateInfo.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +38 -44
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +58 -2
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts +62 -0
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +115 -0
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/wrap.d.ts +132 -7
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/package.json +6 -6
- package/plugin/build/withHotUpdater.js +3 -3
- package/src/DefaultResolver.ts +36 -0
- package/src/checkForUpdate.ts +51 -56
- package/src/error.ts +153 -0
- package/src/fetchUpdateInfo.ts +10 -58
- package/src/index.ts +315 -206
- package/src/native.ts +88 -2
- package/src/specs/NativeHotUpdater.ts +63 -0
- package/src/types.ts +135 -0
- package/src/wrap.tsx +245 -34
- package/android/src/main/java/com/hotupdater/HotUpdaterFactory.kt +0 -52
- package/ios/HotUpdater/Internal/HotUpdaterFactory.swift +0 -24
- package/lib/commonjs/runUpdateProcess.js +0 -69
- package/lib/commonjs/runUpdateProcess.js.map +0 -1
- package/lib/module/runUpdateProcess.js +0 -64
- package/lib/module/runUpdateProcess.js.map +0 -1
- package/lib/typescript/commonjs/runUpdateProcess.d.ts +0 -49
- package/lib/typescript/commonjs/runUpdateProcess.d.ts.map +0 -1
- package/lib/typescript/module/runUpdateProcess.d.ts +0 -49
- package/lib/typescript/module/runUpdateProcess.d.ts.map +0 -1
- package/src/runUpdateProcess.ts +0 -80
|
@@ -12,6 +12,8 @@ import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
|
12
12
|
import kotlinx.coroutines.CoroutineScope
|
|
13
13
|
import kotlinx.coroutines.Dispatchers
|
|
14
14
|
import kotlinx.coroutines.launch
|
|
15
|
+
import org.json.JSONArray
|
|
16
|
+
import org.json.JSONObject
|
|
15
17
|
|
|
16
18
|
class HotUpdaterModule internal constructor(
|
|
17
19
|
context: ReactApplicationContext,
|
|
@@ -20,11 +22,18 @@ class HotUpdaterModule internal constructor(
|
|
|
20
22
|
|
|
21
23
|
override fun getName(): String = NAME
|
|
22
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Gets the singleton HotUpdaterImpl instance
|
|
27
|
+
*/
|
|
28
|
+
private fun getInstance(): HotUpdaterImpl = HotUpdater.getInstance(mReactApplicationContext)
|
|
29
|
+
|
|
23
30
|
@ReactMethod
|
|
24
31
|
override fun reload(promise: Promise) {
|
|
25
32
|
CoroutineScope(Dispatchers.Main.immediate).launch {
|
|
26
33
|
try {
|
|
27
|
-
|
|
34
|
+
val impl = getInstance()
|
|
35
|
+
val currentActivity = mReactApplicationContext.currentActivity
|
|
36
|
+
impl.reload(currentActivity)
|
|
28
37
|
promise.resolve(null)
|
|
29
38
|
} catch (e: Exception) {
|
|
30
39
|
Log.d("HotUpdater", "Failed to reload", e)
|
|
@@ -40,30 +49,54 @@ class HotUpdaterModule internal constructor(
|
|
|
40
49
|
) {
|
|
41
50
|
(mReactApplicationContext.currentActivity as FragmentActivity?)?.lifecycleScope?.launch {
|
|
42
51
|
try {
|
|
43
|
-
|
|
52
|
+
// Parameter validation
|
|
53
|
+
if (params == null) {
|
|
54
|
+
promise.reject("UNKNOWN_ERROR", "Missing or invalid parameters for updateBundle")
|
|
55
|
+
return@launch
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
val bundleId = params.getString("bundleId")
|
|
59
|
+
if (bundleId == null || bundleId.isEmpty()) {
|
|
60
|
+
promise.reject("MISSING_BUNDLE_ID", "Missing or empty 'bundleId'")
|
|
61
|
+
return@launch
|
|
62
|
+
}
|
|
63
|
+
|
|
44
64
|
val fileUrl = params.getString("fileUrl")
|
|
45
|
-
val fileHash = params.getString("fileHash")
|
|
46
65
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
val progressParams =
|
|
55
|
-
WritableNativeMap().apply {
|
|
56
|
-
putDouble("progress", progress)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this@HotUpdaterModule
|
|
60
|
-
.mReactApplicationContext
|
|
61
|
-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
62
|
-
.emit("onProgress", progressParams)
|
|
66
|
+
// Validate fileUrl format if provided
|
|
67
|
+
if (fileUrl != null && fileUrl.isNotEmpty()) {
|
|
68
|
+
try {
|
|
69
|
+
java.net.URL(fileUrl)
|
|
70
|
+
} catch (e: java.net.MalformedURLException) {
|
|
71
|
+
promise.reject("INVALID_FILE_URL", "Invalid 'fileUrl' provided: $fileUrl")
|
|
72
|
+
return@launch
|
|
63
73
|
}
|
|
64
|
-
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
val fileHash = params.getString("fileHash")
|
|
77
|
+
|
|
78
|
+
val impl = getInstance()
|
|
79
|
+
|
|
80
|
+
impl.updateBundle(
|
|
81
|
+
bundleId,
|
|
82
|
+
fileUrl,
|
|
83
|
+
fileHash,
|
|
84
|
+
) { progress ->
|
|
85
|
+
val progressParams =
|
|
86
|
+
WritableNativeMap().apply {
|
|
87
|
+
putDouble("progress", progress)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
this@HotUpdaterModule
|
|
91
|
+
.mReactApplicationContext
|
|
92
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
93
|
+
.emit("onProgress", progressParams)
|
|
94
|
+
}
|
|
95
|
+
promise.resolve(true)
|
|
96
|
+
} catch (e: HotUpdaterException) {
|
|
97
|
+
promise.reject(e.code, e.message)
|
|
65
98
|
} catch (e: Exception) {
|
|
66
|
-
promise.reject("
|
|
99
|
+
promise.reject("UNKNOWN_ERROR", e.message ?: "An unknown error occurred")
|
|
67
100
|
}
|
|
68
101
|
}
|
|
69
102
|
}
|
|
@@ -84,13 +117,47 @@ class HotUpdaterModule internal constructor(
|
|
|
84
117
|
|
|
85
118
|
override fun getConstants(): Map<String, Any?> {
|
|
86
119
|
val constants: MutableMap<String, Any?> = HashMap()
|
|
87
|
-
constants["MIN_BUNDLE_ID"] = HotUpdater.getMinBundleId(
|
|
120
|
+
constants["MIN_BUNDLE_ID"] = HotUpdater.getMinBundleId()
|
|
88
121
|
constants["APP_VERSION"] = HotUpdater.getAppVersion(mReactApplicationContext)
|
|
89
122
|
constants["CHANNEL"] = HotUpdater.getChannel(mReactApplicationContext)
|
|
90
123
|
constants["FINGERPRINT_HASH"] = HotUpdater.getFingerprintHash(mReactApplicationContext)
|
|
91
124
|
return constants
|
|
92
125
|
}
|
|
93
126
|
|
|
127
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
128
|
+
override fun notifyAppReady(params: ReadableMap): String {
|
|
129
|
+
val bundleId = params?.getString("bundleId")
|
|
130
|
+
val result = JSONObject()
|
|
131
|
+
|
|
132
|
+
if (bundleId == null) {
|
|
133
|
+
result.put("status", "STABLE")
|
|
134
|
+
return result.toString()
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
val impl = getInstance()
|
|
138
|
+
val statusMap = impl.notifyAppReady(bundleId)
|
|
139
|
+
|
|
140
|
+
result.put("status", statusMap["status"] as? String ?: "STABLE")
|
|
141
|
+
statusMap["crashedBundleId"]?.let {
|
|
142
|
+
result.put("crashedBundleId", it as String)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return result.toString()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
149
|
+
override fun getCrashHistory(): String {
|
|
150
|
+
val impl = getInstance()
|
|
151
|
+
val crashHistory = impl.getCrashHistory()
|
|
152
|
+
return JSONArray(crashHistory).toString()
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
156
|
+
override fun clearCrashHistory(): Boolean {
|
|
157
|
+
val impl = getInstance()
|
|
158
|
+
return impl.clearCrashHistory()
|
|
159
|
+
}
|
|
160
|
+
|
|
94
161
|
companion object {
|
|
95
162
|
const val NAME = "HotUpdater"
|
|
96
163
|
}
|
|
@@ -14,4 +14,10 @@ abstract class HotUpdaterSpec internal constructor(
|
|
|
14
14
|
)
|
|
15
15
|
|
|
16
16
|
abstract fun reload(promise: Promise)
|
|
17
|
+
|
|
18
|
+
abstract fun notifyAppReady(params: ReadableMap): String
|
|
19
|
+
|
|
20
|
+
abstract fun getCrashHistory(): String
|
|
21
|
+
|
|
22
|
+
abstract fun clearCrashHistory(): Boolean
|
|
17
23
|
}
|