@onekeyfe/react-native-range-downloader 3.0.81-alpha.4 → 3.0.81-alpha.6
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.
|
@@ -530,6 +530,29 @@ final class FirmwareArtifactStore {
|
|
|
530
530
|
}
|
|
531
531
|
}
|
|
532
532
|
|
|
533
|
+
func cachedArtifact(
|
|
534
|
+
_ params: FirmwareArtifactDownloadParams
|
|
535
|
+
) throws -> StoredFirmwareArtifact? {
|
|
536
|
+
try Self.validateDownloadParams(params)
|
|
537
|
+
try rejectIfCancelled(transactionId: params.transactionId)
|
|
538
|
+
let expectedSha256 = params.expectedSha256.lowercased()
|
|
539
|
+
let finalURL = artifactURL(sha256: expectedSha256)
|
|
540
|
+
guard let artifact = try? validateStoredArtifact(
|
|
541
|
+
fileURL: finalURL,
|
|
542
|
+
expectedSize: Int64(params.expectedSize),
|
|
543
|
+
expectedSha256: expectedSha256
|
|
544
|
+
) else {
|
|
545
|
+
return nil
|
|
546
|
+
}
|
|
547
|
+
try retainExpectedArtifact(
|
|
548
|
+
leaseRef: params.leaseRef,
|
|
549
|
+
transactionId: params.transactionId,
|
|
550
|
+
artifactRef: artifact.artifactRef
|
|
551
|
+
)
|
|
552
|
+
try rejectIfCancelled(transactionId: params.transactionId)
|
|
553
|
+
return artifact
|
|
554
|
+
}
|
|
555
|
+
|
|
533
556
|
func cancelDownloads(transactionId: String) async throws {
|
|
534
557
|
guard Self.isSafeIdentifier(transactionId) else {
|
|
535
558
|
throw FirmwareArtifactStoreError.invalidInput(
|
|
@@ -2,6 +2,16 @@ import Foundation
|
|
|
2
2
|
import NitroModules
|
|
3
3
|
import ReactNativeNativeLogger
|
|
4
4
|
|
|
5
|
+
private func settledFirmwareArtifactPromise<T>(
|
|
6
|
+
_ operation: () throws -> T
|
|
7
|
+
) -> Promise<T> {
|
|
8
|
+
do {
|
|
9
|
+
return Promise.resolved(withResult: try operation())
|
|
10
|
+
} catch {
|
|
11
|
+
return Promise.rejected(withError: error)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
5
15
|
// MARK: - Nitro HybridObject entry point
|
|
6
16
|
//
|
|
7
17
|
// Thin Nitro shim over `RangeDownloader.shared`. The heavy lifting — concurrent
|
|
@@ -108,7 +118,20 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
108
118
|
func downloadFirmwareArtifact(
|
|
109
119
|
params: FirmwareArtifactDownloadParams
|
|
110
120
|
) throws -> Promise<FirmwareArtifactReceipt> {
|
|
111
|
-
|
|
121
|
+
do {
|
|
122
|
+
if let artifact = try FirmwareArtifactStore.shared.cachedArtifact(params) {
|
|
123
|
+
return Promise.resolved(
|
|
124
|
+
withResult: FirmwareArtifactReceipt(
|
|
125
|
+
artifactRef: artifact.artifactRef,
|
|
126
|
+
size: Double(artifact.size),
|
|
127
|
+
sha256: artifact.sha256
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
} catch {
|
|
132
|
+
return Promise.rejected(withError: error)
|
|
133
|
+
}
|
|
134
|
+
return Promise.async {
|
|
112
135
|
let artifact = try await FirmwareArtifactStore.shared.download(params)
|
|
113
136
|
return FirmwareArtifactReceipt(
|
|
114
137
|
artifactRef: artifact.artifactRef,
|
|
@@ -131,7 +154,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
131
154
|
func discardFirmwareArtifact(
|
|
132
155
|
params: FirmwareArtifactRefParams
|
|
133
156
|
) throws -> Promise<Void> {
|
|
134
|
-
|
|
157
|
+
settledFirmwareArtifactPromise {
|
|
135
158
|
try FirmwareArtifactStore.shared.discard(artifactRef: params.artifactRef)
|
|
136
159
|
}
|
|
137
160
|
}
|
|
@@ -139,7 +162,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
139
162
|
func openFirmwareArtifact(
|
|
140
163
|
params: FirmwareArtifactRefParams
|
|
141
164
|
) throws -> Promise<FirmwareArtifactReaderInfo> {
|
|
142
|
-
|
|
165
|
+
settledFirmwareArtifactPromise {
|
|
143
166
|
let reader = try FirmwareArtifactStore.shared.open(
|
|
144
167
|
artifactRef: params.artifactRef
|
|
145
168
|
)
|
|
@@ -153,7 +176,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
153
176
|
func readFirmwareArtifact(
|
|
154
177
|
params: FirmwareArtifactReaderReadParams
|
|
155
178
|
) throws -> Promise<ArrayBuffer> {
|
|
156
|
-
|
|
179
|
+
settledFirmwareArtifactPromise {
|
|
157
180
|
guard
|
|
158
181
|
params.offset.isFinite,
|
|
159
182
|
params.offset >= 0,
|
|
@@ -180,7 +203,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
180
203
|
func closeFirmwareArtifact(
|
|
181
204
|
params: FirmwareArtifactReaderCloseParams
|
|
182
205
|
) throws -> Promise<Void> {
|
|
183
|
-
|
|
206
|
+
settledFirmwareArtifactPromise {
|
|
184
207
|
try FirmwareArtifactStore.shared.close(readerId: params.readerId)
|
|
185
208
|
}
|
|
186
209
|
}
|
|
@@ -188,7 +211,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
188
211
|
func materializeFirmwareArchive(
|
|
189
212
|
params: FirmwareArchiveMaterializeParams
|
|
190
213
|
) throws -> Promise<FirmwareArchiveMaterializeResult> {
|
|
191
|
-
|
|
214
|
+
settledFirmwareArtifactPromise {
|
|
192
215
|
let entries = try FirmwareArtifactStore.shared.materializeArchive(
|
|
193
216
|
leaseRef: params.leaseRef,
|
|
194
217
|
artifactRef: params.archiveArtifactRef,
|
|
@@ -212,7 +235,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
212
235
|
func createFirmwareArtifactLease(
|
|
213
236
|
params: FirmwareArtifactLeaseCreateParams
|
|
214
237
|
) throws -> Promise<FirmwareArtifactLease> {
|
|
215
|
-
|
|
238
|
+
settledFirmwareArtifactPromise {
|
|
216
239
|
FirmwareArtifactLease(
|
|
217
240
|
leaseRef: try FirmwareArtifactStore.shared.createLease(
|
|
218
241
|
transactionId: params.transactionId
|
|
@@ -224,7 +247,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
224
247
|
func retainFirmwareArtifact(
|
|
225
248
|
params: FirmwareArtifactLeaseRetainParams
|
|
226
249
|
) throws -> Promise<Void> {
|
|
227
|
-
|
|
250
|
+
settledFirmwareArtifactPromise {
|
|
228
251
|
try FirmwareArtifactStore.shared.retain(
|
|
229
252
|
leaseRef: params.leaseRef,
|
|
230
253
|
artifactRef: params.artifactRef
|
|
@@ -235,7 +258,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
235
258
|
func releaseFirmwareArtifactLease(
|
|
236
259
|
params: FirmwareArtifactLeaseReleaseParams
|
|
237
260
|
) throws -> Promise<Void> {
|
|
238
|
-
|
|
261
|
+
settledFirmwareArtifactPromise {
|
|
239
262
|
try FirmwareArtifactStore.shared.releaseLease(
|
|
240
263
|
leaseRef: params.leaseRef,
|
|
241
264
|
disposition: params.disposition
|
|
@@ -244,7 +267,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
244
267
|
}
|
|
245
268
|
|
|
246
269
|
func sweepFirmwareArtifactOrphans() throws -> Promise<FirmwareArtifactSweepResult> {
|
|
247
|
-
|
|
270
|
+
settledFirmwareArtifactPromise {
|
|
248
271
|
let result = try FirmwareArtifactStore.shared.sweepOrphans()
|
|
249
272
|
return FirmwareArtifactSweepResult(
|
|
250
273
|
deletedFiles: Double(result.deletedFiles),
|
|
@@ -1634,24 +1657,24 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1634
1657
|
if completion.completed {
|
|
1635
1658
|
return
|
|
1636
1659
|
}
|
|
1660
|
+
let failure: Error
|
|
1661
|
+
if let recordedError = completion.error {
|
|
1662
|
+
failure = recordedError
|
|
1663
|
+
} else if FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
1664
|
+
descriptor.transactionId
|
|
1665
|
+
) {
|
|
1666
|
+
failure = FirmwareBackgroundDownloadError.cancelled
|
|
1667
|
+
} else if let taskError = error {
|
|
1668
|
+
failure =
|
|
1669
|
+
isFirmwareArtifactTLSError(taskError)
|
|
1670
|
+
? FirmwareBackgroundDownloadError.tlsRejected
|
|
1671
|
+
: FirmwareBackgroundDownloadError.transferFailed
|
|
1672
|
+
} else {
|
|
1673
|
+
failure = FirmwareBackgroundDownloadError.transferFailed
|
|
1674
|
+
}
|
|
1637
1675
|
finishFirmwareTask(
|
|
1638
1676
|
key: descriptor.key,
|
|
1639
|
-
result: .failure(
|
|
1640
|
-
completion.error ??
|
|
1641
|
-
(
|
|
1642
|
-
FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
1643
|
-
descriptor.transactionId
|
|
1644
|
-
)
|
|
1645
|
-
? FirmwareBackgroundDownloadError.cancelled
|
|
1646
|
-
: nil
|
|
1647
|
-
) ??
|
|
1648
|
-
error.map {
|
|
1649
|
-
isFirmwareArtifactTLSError($0)
|
|
1650
|
-
? FirmwareBackgroundDownloadError.tlsRejected
|
|
1651
|
-
: FirmwareBackgroundDownloadError.transferFailed
|
|
1652
|
-
} ??
|
|
1653
|
-
FirmwareBackgroundDownloadError.transferFailed
|
|
1654
|
-
)
|
|
1677
|
+
result: .failure(failure)
|
|
1655
1678
|
)
|
|
1656
1679
|
return
|
|
1657
1680
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/react-native-range-downloader",
|
|
3
|
-
"version": "3.0.81-alpha.
|
|
3
|
+
"version": "3.0.81-alpha.6",
|
|
4
4
|
"description": "react-native-range-downloader",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"typescript": "^5.9.2"
|
|
89
89
|
},
|
|
90
90
|
"peerDependencies": {
|
|
91
|
-
"@onekeyfe/react-native-sni-connect": "3.0.81-alpha.
|
|
91
|
+
"@onekeyfe/react-native-sni-connect": "3.0.81-alpha.6",
|
|
92
92
|
"react": "*",
|
|
93
93
|
"react-native": "*",
|
|
94
94
|
"react-native-nitro-modules": "0.33.2"
|