@onekeyfe/react-native-range-downloader 3.0.81-alpha.7 → 3.0.81

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.
Files changed (111) hide show
  1. package/ReactNativeRangeDownloader.podspec +0 -8
  2. package/android/build.gradle +0 -1
  3. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +0 -144
  4. package/ios/RangeDownloadLogic.swift +0 -120
  5. package/ios/ReactNativeRangeDownloader.swift +6 -623
  6. package/lib/module/index.js +1 -2
  7. package/lib/module/index.js.map +1 -1
  8. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +1 -91
  9. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
  10. package/lib/typescript/src/index.d.ts +0 -1
  11. package/lib/typescript/src/index.d.ts.map +1 -1
  12. package/nitrogen/generated/android/c++/JDownloadChannel.hpp +0 -3
  13. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.cpp +0 -248
  14. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.hpp +0 -12
  15. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/DownloadChannel.kt +1 -2
  16. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/HybridReactNativeRangeDownloaderSpec.kt +0 -49
  17. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.cpp +0 -48
  18. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.hpp +0 -329
  19. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Umbrella.hpp +0 -53
  20. package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.hpp +0 -152
  21. package/nitrogen/generated/ios/swift/DownloadChannel.swift +0 -4
  22. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec.swift +0 -12
  23. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec_cxx.swift +0 -221
  24. package/nitrogen/generated/shared/c++/DownloadChannel.hpp +0 -4
  25. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.cpp +0 -12
  26. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.hpp +0 -58
  27. package/package.json +2 -4
  28. package/src/ReactNativeRangeDownloader.nitro.ts +1 -127
  29. package/src/index.tsx +1 -3
  30. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRules.kt +0 -284
  31. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt +0 -774
  32. package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRulesTest.kt +0 -75
  33. package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDeadlineTest.kt +0 -26
  34. package/ios/FirmwareArchiveMinizipBridge.h +0 -33
  35. package/ios/FirmwareArchiveMinizipBridge.mm +0 -213
  36. package/ios/FirmwareArtifactStore.swift +0 -1445
  37. package/ios/FirmwareBackgroundSessionEventRouter.swift +0 -17
  38. package/nitrogen/generated/android/c++/JFirmwareArchiveExpectedEntry.hpp +0 -69
  39. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeParams.hpp +0 -86
  40. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeResult.hpp +0 -80
  41. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializedArtifact.hpp +0 -63
  42. package/nitrogen/generated/android/c++/JFirmwareArtifactCancelParams.hpp +0 -57
  43. package/nitrogen/generated/android/c++/JFirmwareArtifactCapabilities.hpp +0 -88
  44. package/nitrogen/generated/android/c++/JFirmwareArtifactDownloadParams.hpp +0 -98
  45. package/nitrogen/generated/android/c++/JFirmwareArtifactLease.hpp +0 -57
  46. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseCreateParams.hpp +0 -57
  47. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseReleaseParams.hpp +0 -61
  48. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseRetainParams.hpp +0 -61
  49. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderCloseParams.hpp +0 -57
  50. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderInfo.hpp +0 -61
  51. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderReadParams.hpp +0 -65
  52. package/nitrogen/generated/android/c++/JFirmwareArtifactReceipt.hpp +0 -65
  53. package/nitrogen/generated/android/c++/JFirmwareArtifactRefParams.hpp +0 -57
  54. package/nitrogen/generated/android/c++/JFirmwareArtifactSweepResult.hpp +0 -61
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveExpectedEntry.kt +0 -47
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams.kt +0 -44
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeResult.kt +0 -38
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializedArtifact.kt +0 -41
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCancelParams.kt +0 -38
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCapabilities.kt +0 -47
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams.kt +0 -68
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLease.kt +0 -38
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseCreateParams.kt +0 -38
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseReleaseParams.kt +0 -41
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseRetainParams.kt +0 -41
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderCloseParams.kt +0 -38
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderInfo.kt +0 -41
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderReadParams.kt +0 -44
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReceipt.kt +0 -44
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactRefParams.kt +0 -38
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactSweepResult.kt +0 -41
  72. package/nitrogen/generated/ios/swift/FirmwareArchiveExpectedEntry.swift +0 -69
  73. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeParams.swift +0 -70
  74. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeResult.swift +0 -48
  75. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializedArtifact.swift +0 -47
  76. package/nitrogen/generated/ios/swift/FirmwareArtifactCancelParams.swift +0 -36
  77. package/nitrogen/generated/ios/swift/FirmwareArtifactCapabilities.swift +0 -81
  78. package/nitrogen/generated/ios/swift/FirmwareArtifactDownloadParams.swift +0 -177
  79. package/nitrogen/generated/ios/swift/FirmwareArtifactLease.swift +0 -36
  80. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseCreateParams.swift +0 -36
  81. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseReleaseParams.swift +0 -47
  82. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseRetainParams.swift +0 -47
  83. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderCloseParams.swift +0 -36
  84. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderInfo.swift +0 -47
  85. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderReadParams.swift +0 -58
  86. package/nitrogen/generated/ios/swift/FirmwareArtifactReceipt.swift +0 -58
  87. package/nitrogen/generated/ios/swift/FirmwareArtifactRefParams.swift +0 -36
  88. package/nitrogen/generated/ios/swift/FirmwareArtifactSweepResult.swift +0 -47
  89. package/nitrogen/generated/ios/swift/Func_void_FirmwareArchiveMaterializeResult.swift +0 -47
  90. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactLease.swift +0 -47
  91. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReaderInfo.swift +0 -47
  92. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReceipt.swift +0 -47
  93. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactSweepResult.swift +0 -47
  94. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +0 -47
  95. package/nitrogen/generated/shared/c++/FirmwareArchiveExpectedEntry.hpp +0 -87
  96. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeParams.hpp +0 -86
  97. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeResult.hpp +0 -77
  98. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializedArtifact.hpp +0 -81
  99. package/nitrogen/generated/shared/c++/FirmwareArtifactCancelParams.hpp +0 -75
  100. package/nitrogen/generated/shared/c++/FirmwareArtifactCapabilities.hpp +0 -88
  101. package/nitrogen/generated/shared/c++/FirmwareArtifactDownloadParams.hpp +0 -116
  102. package/nitrogen/generated/shared/c++/FirmwareArtifactLease.hpp +0 -75
  103. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseCreateParams.hpp +0 -75
  104. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseReleaseParams.hpp +0 -79
  105. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseRetainParams.hpp +0 -79
  106. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderCloseParams.hpp +0 -75
  107. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderInfo.hpp +0 -79
  108. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderReadParams.hpp +0 -83
  109. package/nitrogen/generated/shared/c++/FirmwareArtifactReceipt.hpp +0 -83
  110. package/nitrogen/generated/shared/c++/FirmwareArtifactRefParams.hpp +0 -75
  111. package/nitrogen/generated/shared/c++/FirmwareArtifactSweepResult.hpp +0 -79
@@ -15,7 +15,6 @@ Pod::Spec.new do |s|
15
15
 
16
16
  s.source_files = [
17
17
  "ios/**/*.{swift}",
18
- "ios/**/*.{h}",
19
18
  "ios/**/*.{m,mm}",
20
19
  "cpp/**/*.{hpp,cpp}",
21
20
  ]
@@ -23,13 +22,6 @@ Pod::Spec.new do |s|
23
22
  s.dependency 'React-jsi'
24
23
  s.dependency 'React-callinvoker'
25
24
  s.dependency 'ReactNativeNativeLogger'
26
- s.dependency 'SniConnect', package["version"]
27
- s.public_header_files = "ios/FirmwareArchiveMinizipBridge.h"
28
- s.pod_target_xcconfig = {
29
- 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/SSZipArchive/SSZipArchive/minizip"',
30
- }
31
-
32
- s.dependency 'SSZipArchive', '>= 2.5.4'
33
25
 
34
26
  load 'nitrogen/generated/ios/ReactNativeRangeDownloader+autolinking.rb'
35
27
  add_nitrogen_files(s)
@@ -127,7 +127,6 @@ dependencies {
127
127
  implementation project(":react-native-nitro-modules")
128
128
 
129
129
  implementation project(":onekeyfe_react-native-native-logger")
130
- implementation project(":onekeyfe_react-native-sni-connect")
131
130
 
132
131
  implementation "com.squareup.okhttp3:okhttp:4.12.0"
133
132
 
@@ -2,16 +2,12 @@ package com.margelo.nitro.reactnativerangedownloader
2
2
 
3
3
  import com.facebook.proguard.annotations.DoNotStrip
4
4
  import com.margelo.nitro.NitroModules
5
- import com.margelo.nitro.core.ArrayBuffer
6
5
  import com.margelo.nitro.core.Promise
7
6
  import com.margelo.nitro.nativelogger.OneKeyLog
8
7
  import java.io.File
9
8
  import java.security.MessageDigest
10
9
  import java.util.concurrent.CopyOnWriteArrayList
11
10
  import java.util.concurrent.atomic.AtomicLong
12
- import kotlinx.coroutines.CoroutineScope
13
- import kotlinx.coroutines.Dispatchers
14
- import kotlinx.coroutines.SupervisorJob
15
11
 
16
12
  // P1: Nitro adapter for the Android concurrent multi-range downloader.
17
13
  //
@@ -37,7 +33,6 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
37
33
 
38
34
  private val listeners = CopyOnWriteArrayList<Listener>()
39
35
  private val nextListenerId = AtomicLong(1)
40
- private val firmwareArtifactScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
41
36
 
42
37
  // Active downloads keyed by "channel|taskId" so cancel/discardArtifacts can
43
38
  // flip the abort flag + stop the worker pool BEFORE deleting files, instead of
@@ -270,145 +265,6 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
270
265
  return ctx.cacheDir.absolutePath
271
266
  }
272
267
 
273
- override fun getFirmwareArtifactCapabilities(): FirmwareArtifactCapabilities {
274
- return FirmwareArtifactCapabilities(
275
- firmwareArtifactProtocolVersion = 2.0,
276
- supportedRouteTypes = arrayOf("domain", "pinnedIp"),
277
- supportsArchiveMaterialization = true,
278
- maxReadBytes = FirmwareArtifactStore.MAX_READ_BYTES.toDouble(),
279
- )
280
- }
281
-
282
- override fun downloadFirmwareArtifact(
283
- params: FirmwareArtifactDownloadParams,
284
- ): Promise<FirmwareArtifactReceipt> {
285
- return Promise.async(firmwareArtifactScope) {
286
- val artifact = FirmwareArtifactStore.download(params)
287
- FirmwareArtifactReceipt(
288
- artifactRef = artifact.artifactRef,
289
- size = artifact.size.toDouble(),
290
- sha256 = artifact.sha256,
291
- )
292
- }
293
- }
294
-
295
- override fun cancelFirmwareArtifactDownloads(
296
- params: FirmwareArtifactCancelParams,
297
- ): Promise<Unit> {
298
- return Promise.async(firmwareArtifactScope) {
299
- FirmwareArtifactStore.cancelDownloads(params.transactionId)
300
- }
301
- }
302
-
303
- override fun discardFirmwareArtifact(
304
- params: FirmwareArtifactRefParams,
305
- ): Promise<Unit> {
306
- return Promise.async(firmwareArtifactScope) {
307
- FirmwareArtifactStore.discard(params.artifactRef)
308
- }
309
- }
310
-
311
- override fun openFirmwareArtifact(
312
- params: FirmwareArtifactRefParams,
313
- ): Promise<FirmwareArtifactReaderInfo> {
314
- return Promise.async(firmwareArtifactScope) {
315
- val (readerId, size) = FirmwareArtifactStore.open(params.artifactRef)
316
- FirmwareArtifactReaderInfo(readerId = readerId, size = size.toDouble())
317
- }
318
- }
319
-
320
- override fun readFirmwareArtifact(
321
- params: FirmwareArtifactReaderReadParams,
322
- ): Promise<ArrayBuffer> {
323
- return Promise.async(firmwareArtifactScope) {
324
- require(
325
- params.offset.isFinite() &&
326
- params.offset >= 0 &&
327
- params.offset.toLong().toDouble() == params.offset &&
328
- params.length.isFinite() &&
329
- params.length > 0 &&
330
- params.length.toInt().toDouble() == params.length
331
- ) {
332
- "Invalid firmware artifact read"
333
- }
334
- ArrayBuffer.copy(
335
- FirmwareArtifactStore.read(
336
- readerId = params.readerId,
337
- offset = params.offset.toLong(),
338
- length = params.length.toInt(),
339
- ),
340
- )
341
- }
342
- }
343
-
344
- override fun closeFirmwareArtifact(
345
- params: FirmwareArtifactReaderCloseParams,
346
- ): Promise<Unit> {
347
- return Promise.async(firmwareArtifactScope) {
348
- FirmwareArtifactStore.close(params.readerId)
349
- }
350
- }
351
-
352
- override fun materializeFirmwareArchive(
353
- params: FirmwareArchiveMaterializeParams,
354
- ): Promise<FirmwareArchiveMaterializeResult> {
355
- return Promise.async(firmwareArtifactScope) {
356
- val artifacts = FirmwareArtifactStore.materializeArchive(
357
- params.leaseRef,
358
- params.archiveArtifactRef,
359
- params.expectedEntries,
360
- )
361
- FirmwareArchiveMaterializeResult(
362
- artifacts = artifacts.map { entry ->
363
- FirmwareArchiveMaterializedArtifact(
364
- entryName = entry.entryName,
365
- receipt = FirmwareArtifactReceipt(
366
- artifactRef = entry.artifact.artifactRef,
367
- size = entry.artifact.size.toDouble(),
368
- sha256 = entry.artifact.sha256,
369
- ),
370
- )
371
- }.toTypedArray(),
372
- )
373
- }
374
- }
375
-
376
- override fun createFirmwareArtifactLease(
377
- params: FirmwareArtifactLeaseCreateParams,
378
- ): Promise<FirmwareArtifactLease> {
379
- return Promise.async(firmwareArtifactScope) {
380
- FirmwareArtifactLease(
381
- leaseRef = FirmwareArtifactStore.createLease(params.transactionId),
382
- )
383
- }
384
- }
385
-
386
- override fun retainFirmwareArtifact(
387
- params: FirmwareArtifactLeaseRetainParams,
388
- ): Promise<Unit> {
389
- return Promise.async(firmwareArtifactScope) {
390
- FirmwareArtifactStore.retain(params.leaseRef, params.artifactRef)
391
- }
392
- }
393
-
394
- override fun releaseFirmwareArtifactLease(
395
- params: FirmwareArtifactLeaseReleaseParams,
396
- ): Promise<Unit> {
397
- return Promise.async(firmwareArtifactScope) {
398
- FirmwareArtifactStore.releaseLease(params.leaseRef, params.disposition)
399
- }
400
- }
401
-
402
- override fun sweepFirmwareArtifactOrphans(): Promise<FirmwareArtifactSweepResult> {
403
- return Promise.async(firmwareArtifactScope) {
404
- val (deletedFiles, deletedBytes) = FirmwareArtifactStore.sweepOrphans()
405
- FirmwareArtifactSweepResult(
406
- deletedFiles = deletedFiles.toDouble(),
407
- deletedBytes = deletedBytes.toDouble(),
408
- )
409
- }
410
- }
411
-
412
268
  // Broadcast one event to every registered listener. Listeners filter by
413
269
  // channel/taskId on their side (shared registry, per the design).
414
270
  private fun sendEvent(
@@ -1,126 +1,6 @@
1
1
  import Foundation
2
2
  import CommonCrypto
3
3
 
4
- enum FirmwareArtifactDeadlineError: Error {
5
- case exceeded
6
- }
7
-
8
- enum FirmwareArtifactWallClockDeadline {
9
- static func run<T>(
10
- timeoutSeconds: TimeInterval,
11
- operation: @escaping @Sendable () async throws -> T
12
- ) async throws -> T {
13
- let timeoutNanoseconds = UInt64(max(0.001, timeoutSeconds) * 1_000_000_000.0)
14
- return try await withThrowingTaskGroup(of: T.self) { group in
15
- group.addTask {
16
- try await operation()
17
- }
18
- group.addTask {
19
- try await Task.sleep(nanoseconds: timeoutNanoseconds)
20
- throw FirmwareArtifactDeadlineError.exceeded
21
- }
22
- defer { group.cancelAll() }
23
- guard let result = try await group.next() else {
24
- throw FirmwareArtifactDeadlineError.exceeded
25
- }
26
- return result
27
- }
28
- }
29
- }
30
-
31
- func firmwareArtifactDownloadKey(
32
- transactionId: String,
33
- expectedSize: Int64,
34
- expectedSha256: String
35
- ) -> String {
36
- "\(transactionId)|\(expectedSize)|\(expectedSha256)"
37
- }
38
-
39
- func firmwareArtifactPartialFileName(
40
- transactionId: String,
41
- taskId: String,
42
- expectedSha256: String
43
- ) -> String {
44
- let transactionData = Data(transactionId.utf8)
45
- var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
46
- transactionData.withUnsafeBytes {
47
- _ = CC_SHA256($0.baseAddress, CC_LONG(transactionData.count), &hash)
48
- }
49
- let transactionToken = hash
50
- .prefix(8)
51
- .map { String(format: "%02x", $0) }
52
- .joined()
53
- return "\(expectedSha256).\(taskId).\(transactionToken).partial"
54
- }
55
-
56
- func firmwareArtifactContentRangeIsValid(
57
- _ value: String,
58
- expectedStart: Int64,
59
- expectedTotal: Int64
60
- ) -> Bool {
61
- guard value.lowercased().hasPrefix("bytes ") else {
62
- return false
63
- }
64
- guard
65
- let bounds = RangeDownloadLogic.parseContentRangeBounds(value),
66
- let total = RangeDownloadLogic.parseContentRangeTotal(value)
67
- else {
68
- return false
69
- }
70
- return bounds.start == expectedStart &&
71
- bounds.end >= bounds.start &&
72
- bounds.end < total &&
73
- total == expectedTotal
74
- }
75
-
76
- func firmwareArtifactResponseFits(
77
- expectedContentLength: Int64,
78
- baseOffset: Int64,
79
- maxBytes: Int64
80
- ) -> Bool {
81
- guard baseOffset >= 0, baseOffset <= maxBytes else {
82
- return false
83
- }
84
- return expectedContentLength < 0 ||
85
- expectedContentLength <= maxBytes - baseOffset
86
- }
87
-
88
- enum FirmwareBackgroundDownloadError: LocalizedError, CustomStringConvertible {
89
- case cancelled
90
- case invalidTask
91
- case deadlineExceeded
92
- case redirectRejected
93
- case responseRejected
94
- case sizeRejected
95
- case tlsRejected
96
- case transferFailed
97
-
98
- var errorDescription: String? {
99
- switch self {
100
- case .cancelled:
101
- return "ARTIFACT_CANCELLED: firmware background download was cancelled"
102
- case .invalidTask:
103
- return "ARTIFACT_PROTOCOL_INVALID: firmware background task is invalid"
104
- case .deadlineExceeded:
105
- return "ARTIFACT_DEADLINE_EXCEEDED: firmware download exceeded its deadline"
106
- case .redirectRejected:
107
- return "ARTIFACT_REDIRECT_REJECTED: firmware redirect changed canonical identity"
108
- case .responseRejected:
109
- return "ARTIFACT_PROTOCOL_INVALID: firmware response is invalid"
110
- case .sizeRejected:
111
- return "ARTIFACT_PROTOCOL_INVALID: firmware artifact size is invalid"
112
- case .tlsRejected:
113
- return "ARTIFACT_TLS_FAILED: firmware TLS validation failed"
114
- case .transferFailed:
115
- return "ARTIFACT_NETWORK_FAILED: firmware background transfer failed"
116
- }
117
- }
118
-
119
- var description: String {
120
- errorDescription ?? "ARTIFACT_NETWORK_FAILED: firmware background transfer failed"
121
- }
122
- }
123
-
124
4
  // MARK: - Dependency-free RangeDownloader logic (OCDS §4 / §5)
125
5
  //
126
6
  // This file holds the DETERMINISTIC, dependency-light pieces of the range