@onekeyfe/react-native-range-downloader 3.0.81-alpha.5 → 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),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-range-downloader",
3
- "version": "3.0.81-alpha.5",
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.5",
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"