@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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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
- Promise.async {
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.4",
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.4",
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"