@hot-updater/react-native 1.0.0-rc.14 → 1.0.0-rc.16
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/proguard-rules.pro +2 -2
- package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
- package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +650 -636
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +3 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +0 -13
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +10 -14
- package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +19 -0
- package/android/src/main/java/com/hotupdater/TarArchiveInputStream.kt +214 -375
- package/android/src/main/java/com/hotupdater/TarBrArchiveExtractor.kt +119 -0
- package/android/src/newarch/HotUpdater.kt +7 -9
- package/android/src/newarch/HotUpdaterModule.kt +40 -20
- package/android/src/oldarch/HotUpdater.kt +7 -9
- package/android/src/oldarch/HotUpdaterModule.kt +40 -20
- package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +1126 -74
- package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +4 -5
- package/android/src/test/java/com/hotupdater/TarBrArchiveExtractorTest.kt +206 -0
- package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
- package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +773 -1016
- package/ios/HotUpdater/Internal/BundleMetadata.swift +5 -0
- package/ios/HotUpdater/Internal/FileUtilities.swift +64 -0
- package/ios/HotUpdater/Internal/HotUpdater-Bridging-Header.h +0 -1
- package/ios/HotUpdater/Internal/HotUpdater.mm +5 -27
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +47 -31
- package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
- package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
- package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +13 -72
- package/lib/commonjs/checkForUpdate.js +7 -10
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +9 -4
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +1 -1
- package/lib/commonjs/error.js +4 -13
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/fetchJSON.js +9 -2
- package/lib/commonjs/fetchJSON.js.map +1 -1
- package/lib/commonjs/httpClient.js +151 -39
- package/lib/commonjs/httpClient.js.map +1 -1
- package/lib/commonjs/httpClient.spec.js +247 -5
- package/lib/commonjs/httpClient.spec.js.map +1 -1
- package/lib/commonjs/index.js +15 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.spec.js +101 -0
- package/lib/commonjs/index.spec.js.map +1 -1
- package/lib/commonjs/native.js +7 -8
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.spec.js +21 -16
- package/lib/commonjs/native.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +7 -0
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.js +4 -1
- package/lib/commonjs/notifyAppReadyInsights.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.spec.js +59 -0
- package/lib/commonjs/notifyAppReadyInsights.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +55 -1
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +1 -1
- package/lib/commonjs/sdkVersion.js +1 -1
- package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
- package/lib/commonjs/store.js +3 -10
- package/lib/commonjs/store.js.map +1 -1
- package/lib/commonjs/store.notification.spec.js +12 -4
- package/lib/commonjs/store.notification.spec.js.map +1 -1
- package/lib/commonjs/store.spec.js +2 -136
- package/lib/commonjs/store.spec.js.map +1 -1
- package/lib/commonjs/uuidv7.js +41 -0
- package/lib/commonjs/uuidv7.js.map +1 -0
- package/lib/commonjs/uuidv7.spec.js +30 -0
- package/lib/commonjs/uuidv7.spec.js.map +1 -0
- package/lib/commonjs/wrap.js +1 -3
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/commonjs/wrap.spec.js +7 -0
- package/lib/commonjs/wrap.spec.js.map +1 -1
- package/lib/module/checkForUpdate.js +7 -10
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/checkForUpdate.releaseCatalog.spec.js +9 -4
- package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +1 -1
- package/lib/module/error.js +4 -13
- package/lib/module/error.js.map +1 -1
- package/lib/module/fetchJSON.js +7 -1
- package/lib/module/fetchJSON.js.map +1 -1
- package/lib/module/httpClient.js +153 -41
- package/lib/module/httpClient.js.map +1 -1
- package/lib/module/httpClient.spec.js +248 -6
- package/lib/module/httpClient.spec.js.map +1 -1
- package/lib/module/index.js +15 -8
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.spec.js +102 -1
- package/lib/module/index.spec.js.map +1 -1
- package/lib/module/native.js +7 -8
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.spec.js +21 -16
- package/lib/module/native.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.boundary.spec.js +7 -0
- package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.js +5 -2
- package/lib/module/notifyAppReadyInsights.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.spec.js +59 -0
- package/lib/module/notifyAppReadyInsights.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.transport.spec.js +55 -1
- package/lib/module/notifyAppReadyInsights.transport.spec.js.map +1 -1
- package/lib/module/sdkVersion.js +1 -1
- package/lib/module/specs/NativeHotUpdater.js.map +1 -1
- package/lib/module/store.js +3 -10
- package/lib/module/store.js.map +1 -1
- package/lib/module/store.notification.spec.js +12 -4
- package/lib/module/store.notification.spec.js.map +1 -1
- package/lib/module/store.spec.js +2 -136
- package/lib/module/store.spec.js.map +1 -1
- package/lib/module/uuidv7.js +36 -0
- package/lib/module/uuidv7.js.map +1 -0
- package/lib/module/uuidv7.spec.js +30 -0
- package/lib/module/uuidv7.spec.js.map +1 -0
- package/lib/module/wrap.js +1 -3
- package/lib/module/wrap.js.map +1 -1
- package/lib/module/wrap.spec.js +7 -0
- package/lib/module/wrap.spec.js.map +1 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts +1 -2
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/error.d.ts +4 -13
- package/lib/typescript/commonjs/error.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchJSON.d.ts +4 -0
- package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/commonjs/httpClient.d.ts +6 -0
- package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +0 -2
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +1 -6
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +1 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +1 -1
- package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +8 -35
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/commonjs/store.d.ts +1 -3
- package/lib/typescript/commonjs/store.d.ts.map +1 -1
- package/lib/typescript/commonjs/uuidv7.d.ts +10 -0
- package/lib/typescript/commonjs/uuidv7.d.ts.map +1 -0
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.types.d.ts +7 -4
- package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
- package/lib/typescript/module/checkForUpdate.d.ts +1 -2
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/error.d.ts +4 -13
- package/lib/typescript/module/error.d.ts.map +1 -1
- package/lib/typescript/module/fetchJSON.d.ts +4 -0
- package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/module/httpClient.d.ts +6 -0
- package/lib/typescript/module/httpClient.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +0 -2
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +1 -6
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts +1 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +1 -1
- package/lib/typescript/module/sdkVersion.d.ts +1 -1
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts +8 -35
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/store.d.ts +1 -3
- package/lib/typescript/module/store.d.ts.map +1 -1
- package/lib/typescript/module/uuidv7.d.ts +10 -0
- package/lib/typescript/module/uuidv7.d.ts.map +1 -0
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/lib/typescript/module/wrap.types.d.ts +7 -4
- package/lib/typescript/module/wrap.types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/checkForUpdate.releaseCatalog.spec.ts +10 -4
- package/src/checkForUpdate.ts +5 -11
- package/src/error.ts +4 -14
- package/src/fetchJSON.ts +12 -1
- package/src/httpClient.spec.ts +289 -8
- package/src/httpClient.ts +224 -67
- package/src/index.spec.ts +70 -1
- package/src/index.ts +18 -7
- package/src/native.spec.ts +23 -16
- package/src/native.ts +12 -24
- package/src/notifyAppReadyInsights.boundary.spec.ts +8 -0
- package/src/notifyAppReadyInsights.spec.ts +60 -0
- package/src/notifyAppReadyInsights.transport.spec.ts +66 -0
- package/src/notifyAppReadyInsights.ts +13 -1
- package/src/sdkVersion.ts +1 -1
- package/src/specs/NativeHotUpdater.ts +8 -36
- package/src/store.notification.spec.ts +13 -3
- package/src/store.spec.ts +0 -157
- package/src/store.ts +2 -23
- package/src/uuidv7.spec.ts +25 -0
- package/src/uuidv7.ts +38 -0
- package/src/wrap.spec.ts +8 -0
- package/src/wrap.tsx +0 -2
- package/src/wrap.types.ts +9 -4
- package/android/src/main/java/com/hotupdater/DecompressService.kt +0 -89
- package/android/src/main/java/com/hotupdater/DecompressionStrategy.kt +0 -26
- package/android/src/main/java/com/hotupdater/TarBrDecompressionStrategy.kt +0 -117
- package/android/src/main/java/com/hotupdater/TarGzDecompressionStrategy.kt +0 -117
- package/android/src/main/java/com/hotupdater/ZipDecompressionStrategy.kt +0 -192
- package/android/src/test/java/com/hotupdater/TarArchiveInputStreamTest.kt +0 -68
- package/ios/HotUpdater/Internal/ArchiveExtractionUtilities.swift +0 -178
- package/ios/HotUpdater/Internal/DecompressService.swift +0 -112
- package/ios/HotUpdater/Internal/DecompressionStrategy.swift +0 -22
- package/ios/HotUpdater/Internal/StreamingTarArchiveExtractor.swift +0 -370
- package/ios/HotUpdater/Internal/TarBrDecompressionStrategy.swift +0 -39
- package/ios/HotUpdater/Internal/TarGzDecompressionStrategy.swift +0 -59
- package/ios/HotUpdater/Internal/ZipArchiveExtractor.swift +0 -482
- package/ios/HotUpdater/Internal/ZipDecompressionStrategy.swift +0 -56
|
@@ -21,6 +21,7 @@ data class BundleMetadata(
|
|
|
21
21
|
val pendingUpdateStrategy: String? = null,
|
|
22
22
|
val pendingTransition: PendingSelectionTransition? = null,
|
|
23
23
|
val verificationPending: Boolean = false,
|
|
24
|
+
val launchInProgress: Boolean = false,
|
|
24
25
|
val highestSeenCatalogs: Map<String, CatalogHighWater> = emptyMap(),
|
|
25
26
|
val currentSelectionContexts: Map<String, String> = emptyMap(),
|
|
26
27
|
val updatedAt: Long = System.currentTimeMillis(),
|
|
@@ -71,6 +72,7 @@ data class BundleMetadata(
|
|
|
71
72
|
pendingTransition =
|
|
72
73
|
json.optJSONObject("pendingTransition")?.let(PendingSelectionTransition::fromJson),
|
|
73
74
|
verificationPending = json.optBoolean("verificationPending", false),
|
|
75
|
+
launchInProgress = json.optBoolean("launchInProgress", false),
|
|
74
76
|
highestSeenCatalogs = highestSeenCatalogs,
|
|
75
77
|
currentSelectionContexts = currentSelectionContexts,
|
|
76
78
|
updatedAt = json.optLong("updatedAt", System.currentTimeMillis()),
|
|
@@ -121,6 +123,7 @@ data class BundleMetadata(
|
|
|
121
123
|
put("pendingUpdateStrategy", pendingUpdateStrategy ?: JSONObject.NULL)
|
|
122
124
|
put("pendingTransition", pendingTransition?.toJson() ?: JSONObject.NULL)
|
|
123
125
|
put("verificationPending", verificationPending)
|
|
126
|
+
put("launchInProgress", launchInProgress)
|
|
124
127
|
put(
|
|
125
128
|
"highestSeenCatalogs",
|
|
126
129
|
JSONObject().apply {
|
|
@@ -17,12 +17,6 @@ class HotUpdaterException(
|
|
|
17
17
|
"Missing or empty 'bundleId'",
|
|
18
18
|
)
|
|
19
19
|
|
|
20
|
-
fun invalidFileUrl() =
|
|
21
|
-
HotUpdaterException(
|
|
22
|
-
"INVALID_FILE_URL",
|
|
23
|
-
"Invalid 'fileUrl' provided",
|
|
24
|
-
)
|
|
25
|
-
|
|
26
20
|
// Bundle storage errors
|
|
27
21
|
fun directoryCreationFailed() =
|
|
28
22
|
HotUpdaterException(
|
|
@@ -45,13 +39,6 @@ class HotUpdaterException(
|
|
|
45
39
|
"Download incomplete: received $actualSize bytes, expected $expectedSize bytes",
|
|
46
40
|
)
|
|
47
41
|
|
|
48
|
-
fun extractionFormatError(cause: Throwable? = null) =
|
|
49
|
-
HotUpdaterException(
|
|
50
|
-
"EXTRACTION_FORMAT_ERROR",
|
|
51
|
-
"The downloaded bundle file is not a valid compressed archive",
|
|
52
|
-
cause,
|
|
53
|
-
)
|
|
54
|
-
|
|
55
42
|
fun invalidBundle() =
|
|
56
43
|
HotUpdaterException(
|
|
57
44
|
"INVALID_BUNDLE",
|
|
@@ -83,14 +83,12 @@ class HotUpdaterImpl {
|
|
|
83
83
|
val fileSystem = FileManagerService(appContext)
|
|
84
84
|
val preferences = createPreferences(appContext)
|
|
85
85
|
val downloadService = OkHttpDownloadService()
|
|
86
|
-
val decompressService = DecompressService()
|
|
87
86
|
val isolationKey = getIsolationKey(appContext)
|
|
88
87
|
|
|
89
88
|
return BundleFileStorageService(
|
|
90
89
|
appContext,
|
|
91
90
|
fileSystem,
|
|
92
91
|
downloadService,
|
|
93
|
-
decompressService,
|
|
94
92
|
preferences,
|
|
95
93
|
isolationKey,
|
|
96
94
|
)
|
|
@@ -268,22 +266,22 @@ class HotUpdaterImpl {
|
|
|
268
266
|
fun getJSBundleFile(): String = prepareLaunchIfNeeded().bundleUrl
|
|
269
267
|
|
|
270
268
|
/**
|
|
271
|
-
* Updates the bundle from
|
|
269
|
+
* Updates the bundle from its manifest and complete asset descriptors.
|
|
272
270
|
* @param bundleId ID of the bundle to update
|
|
273
|
-
* @param
|
|
274
|
-
* @param
|
|
271
|
+
* @param manifestUrl URL of the target manifest
|
|
272
|
+
* @param manifestFileHash Hash or signature used to verify the target manifest
|
|
273
|
+
* @param assets Complete target asset descriptor map
|
|
275
274
|
* @param progressCallback Callback for download progress updates
|
|
276
275
|
* @throws HotUpdaterException if the update fails
|
|
277
276
|
*/
|
|
278
277
|
suspend fun updateBundle(
|
|
279
278
|
bundleId: String,
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
manifestFileHash: String?,
|
|
284
|
-
changedAssets: Map<String, ChangedAssetDescriptor>?,
|
|
279
|
+
manifestUrl: String,
|
|
280
|
+
manifestFileHash: String,
|
|
281
|
+
assets: Map<String, ChangedAssetDescriptor>,
|
|
285
282
|
channel: String?,
|
|
286
283
|
selection: PersistedSelection? = null,
|
|
284
|
+
archiveUrl: String? = null,
|
|
287
285
|
progressCallback: (UpdateProgressPayload) -> Unit,
|
|
288
286
|
) {
|
|
289
287
|
if (selection != null && !bundleStorage.stageReleaseSelection(selection)) {
|
|
@@ -291,11 +289,10 @@ class HotUpdaterImpl {
|
|
|
291
289
|
}
|
|
292
290
|
bundleStorage.updateBundle(
|
|
293
291
|
bundleId,
|
|
294
|
-
fileUrl,
|
|
295
|
-
fileHash,
|
|
296
292
|
manifestUrl,
|
|
297
293
|
manifestFileHash,
|
|
298
|
-
|
|
294
|
+
assets,
|
|
295
|
+
archiveUrl,
|
|
299
296
|
progressCallback,
|
|
300
297
|
)
|
|
301
298
|
|
|
@@ -467,7 +464,6 @@ class HotUpdaterImpl {
|
|
|
467
464
|
|
|
468
465
|
/**
|
|
469
466
|
* Gets the current launched bundle ID.
|
|
470
|
-
* Reads manifest.json first and falls back to the legacy BUNDLE_ID file.
|
|
471
467
|
* Built-in bundle fallback is handled in JS.
|
|
472
468
|
*/
|
|
473
469
|
fun getBundleId(): String? {
|
|
@@ -65,6 +65,13 @@ interface DownloadService {
|
|
|
65
65
|
fileSizeCallback: ((Long) -> Unit)? = null,
|
|
66
66
|
progressCallback: (DownloadProgress) -> Unit,
|
|
67
67
|
): DownloadResult
|
|
68
|
+
|
|
69
|
+
suspend fun downloadFileOnce(
|
|
70
|
+
fileUrl: URL,
|
|
71
|
+
destination: File,
|
|
72
|
+
fileSizeCallback: ((Long) -> Unit)? = null,
|
|
73
|
+
progressCallback: (DownloadProgress) -> Unit,
|
|
74
|
+
): DownloadResult = downloadFile(fileUrl, destination, fileSizeCallback, progressCallback)
|
|
68
75
|
}
|
|
69
76
|
|
|
70
77
|
/**
|
|
@@ -185,6 +192,18 @@ class OkHttpDownloadService : DownloadService {
|
|
|
185
192
|
DownloadResult.Error(lastException ?: Exception("Download failed after $MAX_RETRIES attempts"))
|
|
186
193
|
}
|
|
187
194
|
|
|
195
|
+
override suspend fun downloadFileOnce(
|
|
196
|
+
fileUrl: URL,
|
|
197
|
+
destination: File,
|
|
198
|
+
fileSizeCallback: ((Long) -> Unit)?,
|
|
199
|
+
progressCallback: (DownloadProgress) -> Unit,
|
|
200
|
+
): DownloadResult =
|
|
201
|
+
try {
|
|
202
|
+
attemptDownload(fileUrl, destination, fileSizeCallback, progressCallback)
|
|
203
|
+
} catch (error: Exception) {
|
|
204
|
+
DownloadResult.Error(error)
|
|
205
|
+
}
|
|
206
|
+
|
|
188
207
|
private suspend fun attemptDownload(
|
|
189
208
|
fileUrl: URL,
|
|
190
209
|
destination: File,
|