@onekeyfe/react-native-range-downloader 3.0.81 → 3.0.82

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 (146) hide show
  1. package/ReactNativeRangeDownloader.podspec +7 -0
  2. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRules.kt +291 -0
  3. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactOrphanSweep.kt +111 -0
  4. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt +822 -0
  5. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +148 -0
  6. package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRulesTest.kt +114 -0
  7. package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDeadlineTest.kt +26 -0
  8. package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactOrphanSweepTest.kt +107 -0
  9. package/ios/FirmwareArchiveMinizipBridge.h +33 -0
  10. package/ios/FirmwareArchiveMinizipBridge.mm +213 -0
  11. package/ios/FirmwareArtifactStore.swift +1508 -0
  12. package/ios/RangeDownloadLogic.swift +317 -0
  13. package/ios/ReactNativeRangeDownloader.swift +214 -6
  14. package/lib/module/index.js +2 -1
  15. package/lib/module/index.js.map +1 -1
  16. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +92 -1
  17. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
  18. package/lib/typescript/src/index.d.ts +1 -0
  19. package/lib/typescript/src/index.d.ts.map +1 -1
  20. package/nitrogen/generated/android/c++/JDownloadChannel.hpp +8 -6
  21. package/nitrogen/generated/android/c++/JFirmwareArchiveExpectedEntry.hpp +69 -0
  22. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeParams.hpp +87 -0
  23. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeResult.hpp +80 -0
  24. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializedArtifact.hpp +63 -0
  25. package/nitrogen/generated/android/c++/JFirmwareArtifactCancelParams.hpp +57 -0
  26. package/nitrogen/generated/android/c++/JFirmwareArtifactCapabilities.hpp +88 -0
  27. package/nitrogen/generated/android/c++/JFirmwareArtifactDownloadParams.hpp +98 -0
  28. package/nitrogen/generated/android/c++/JFirmwareArtifactLease.hpp +57 -0
  29. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseCreateParams.hpp +57 -0
  30. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseReleaseParams.hpp +61 -0
  31. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseRetainParams.hpp +61 -0
  32. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderCloseParams.hpp +57 -0
  33. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderInfo.hpp +61 -0
  34. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderReadParams.hpp +65 -0
  35. package/nitrogen/generated/android/c++/JFirmwareArtifactReceipt.hpp +69 -0
  36. package/nitrogen/generated/android/c++/JFirmwareArtifactRefParams.hpp +57 -0
  37. package/nitrogen/generated/android/c++/JFirmwareArtifactSweepResult.hpp +61 -0
  38. package/nitrogen/generated/android/c++/JFunc_void_RangeDownloadEvent.hpp +3 -3
  39. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.cpp +274 -25
  40. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.hpp +32 -22
  41. package/nitrogen/generated/android/c++/JRangeDownloadEvent.hpp +2 -2
  42. package/nitrogen/generated/android/c++/JRangeDownloadOutcome.hpp +6 -7
  43. package/nitrogen/generated/android/c++/JRangeDownloadParams.hpp +2 -2
  44. package/nitrogen/generated/android/c++/JRangeDownloadResult.hpp +2 -2
  45. package/nitrogen/generated/android/c++/JRangeFallbackKind.hpp +12 -13
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/DownloadChannel.kt +5 -2
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveExpectedEntry.kt +47 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams.kt +44 -0
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeResult.kt +38 -0
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializedArtifact.kt +41 -0
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCancelParams.kt +38 -0
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCapabilities.kt +47 -0
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams.kt +68 -0
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLease.kt +38 -0
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseCreateParams.kt +38 -0
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseReleaseParams.kt +41 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseRetainParams.kt +41 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderCloseParams.kt +38 -0
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderInfo.kt +41 -0
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderReadParams.kt +44 -0
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReceipt.kt +47 -0
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactRefParams.kt +38 -0
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactSweepResult.kt +41 -0
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/Func_void_RangeDownloadEvent.kt +1 -1
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/HybridReactNativeRangeDownloaderSpec.kt +65 -19
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadEvent.kt +2 -2
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadOutcome.kt +3 -1
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadParams.kt +2 -2
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadResult.kt +2 -2
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeFallbackKind.kt +3 -1
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/reactnativerangedownloaderOnLoad.kt +1 -1
  72. package/nitrogen/generated/android/reactnativerangedownloader+autolinking.cmake +1 -1
  73. package/nitrogen/generated/android/reactnativerangedownloader+autolinking.gradle +1 -1
  74. package/nitrogen/generated/android/reactnativerangedownloaderOnLoad.cpp +28 -18
  75. package/nitrogen/generated/android/reactnativerangedownloaderOnLoad.hpp +14 -5
  76. package/nitrogen/generated/ios/ReactNativeRangeDownloader+autolinking.rb +2 -2
  77. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.cpp +49 -1
  78. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.hpp +348 -4
  79. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Umbrella.hpp +54 -1
  80. package/nitrogen/generated/ios/ReactNativeRangeDownloaderAutolinking.mm +1 -1
  81. package/nitrogen/generated/ios/ReactNativeRangeDownloaderAutolinking.swift +9 -8
  82. package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.cpp +1 -1
  83. package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.hpp +159 -1
  84. package/nitrogen/generated/ios/swift/DownloadChannel.swift +5 -1
  85. package/nitrogen/generated/ios/swift/FirmwareArchiveExpectedEntry.swift +44 -0
  86. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeParams.swift +58 -0
  87. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeResult.swift +35 -0
  88. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializedArtifact.swift +34 -0
  89. package/nitrogen/generated/ios/swift/FirmwareArtifactCancelParams.swift +29 -0
  90. package/nitrogen/generated/ios/swift/FirmwareArtifactCapabilities.swift +50 -0
  91. package/nitrogen/generated/ios/swift/FirmwareArtifactDownloadParams.swift +131 -0
  92. package/nitrogen/generated/ios/swift/FirmwareArtifactLease.swift +29 -0
  93. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseCreateParams.swift +29 -0
  94. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseReleaseParams.swift +34 -0
  95. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseRetainParams.swift +34 -0
  96. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderCloseParams.swift +29 -0
  97. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderInfo.swift +34 -0
  98. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderReadParams.swift +39 -0
  99. package/nitrogen/generated/ios/swift/FirmwareArtifactReceipt.swift +44 -0
  100. package/nitrogen/generated/ios/swift/FirmwareArtifactRefParams.swift +29 -0
  101. package/nitrogen/generated/ios/swift/FirmwareArtifactSweepResult.swift +34 -0
  102. package/nitrogen/generated/ios/swift/Func_void.swift +1 -2
  103. package/nitrogen/generated/ios/swift/Func_void_FirmwareArchiveMaterializeResult.swift +46 -0
  104. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactLease.swift +46 -0
  105. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReaderInfo.swift +46 -0
  106. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReceipt.swift +46 -0
  107. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactSweepResult.swift +46 -0
  108. package/nitrogen/generated/ios/swift/Func_void_RangeDownloadEvent.swift +1 -2
  109. package/nitrogen/generated/ios/swift/Func_void_RangeDownloadResult.swift +1 -2
  110. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -2
  111. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +46 -0
  112. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec.swift +15 -4
  113. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec_cxx.swift +230 -2
  114. package/nitrogen/generated/ios/swift/RangeDownloadEvent.swift +11 -42
  115. package/nitrogen/generated/ios/swift/RangeDownloadOutcome.swift +1 -1
  116. package/nitrogen/generated/ios/swift/RangeDownloadParams.swift +72 -139
  117. package/nitrogen/generated/ios/swift/RangeDownloadResult.swift +16 -53
  118. package/nitrogen/generated/ios/swift/RangeFallbackKind.swift +1 -1
  119. package/nitrogen/generated/shared/c++/DownloadChannel.hpp +5 -1
  120. package/nitrogen/generated/shared/c++/FirmwareArchiveExpectedEntry.hpp +95 -0
  121. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeParams.hpp +95 -0
  122. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeResult.hpp +85 -0
  123. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializedArtifact.hpp +89 -0
  124. package/nitrogen/generated/shared/c++/FirmwareArtifactCancelParams.hpp +83 -0
  125. package/nitrogen/generated/shared/c++/FirmwareArtifactCapabilities.hpp +96 -0
  126. package/nitrogen/generated/shared/c++/FirmwareArtifactDownloadParams.hpp +124 -0
  127. package/nitrogen/generated/shared/c++/FirmwareArtifactLease.hpp +83 -0
  128. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseCreateParams.hpp +83 -0
  129. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseReleaseParams.hpp +87 -0
  130. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseRetainParams.hpp +87 -0
  131. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderCloseParams.hpp +83 -0
  132. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderInfo.hpp +87 -0
  133. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderReadParams.hpp +91 -0
  134. package/nitrogen/generated/shared/c++/FirmwareArtifactReceipt.hpp +95 -0
  135. package/nitrogen/generated/shared/c++/FirmwareArtifactRefParams.hpp +83 -0
  136. package/nitrogen/generated/shared/c++/FirmwareArtifactSweepResult.hpp +87 -0
  137. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.cpp +13 -1
  138. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.hpp +59 -1
  139. package/nitrogen/generated/shared/c++/RangeDownloadEvent.hpp +25 -17
  140. package/nitrogen/generated/shared/c++/RangeDownloadOutcome.hpp +1 -1
  141. package/nitrogen/generated/shared/c++/RangeDownloadParams.hpp +43 -35
  142. package/nitrogen/generated/shared/c++/RangeDownloadResult.hpp +22 -14
  143. package/nitrogen/generated/shared/c++/RangeFallbackKind.hpp +1 -1
  144. package/package.json +4 -4
  145. package/src/ReactNativeRangeDownloader.nitro.ts +130 -1
  146. package/src/index.tsx +3 -1
@@ -1,6 +1,323 @@
1
1
  import Foundation
2
2
  import CommonCrypto
3
3
 
4
+ enum FirmwareArtifactStoreError: Error, CustomStringConvertible {
5
+ case invalidInput(String)
6
+ case downloadFailed(String)
7
+ case integrityMismatch(String)
8
+ case readerInvalid(String)
9
+ case archiveInvalid(String)
10
+
11
+ var description: String {
12
+ switch self {
13
+ case let .invalidInput(message), let .downloadFailed(message),
14
+ let .integrityMismatch(message), let .readerInvalid(message),
15
+ let .archiveInvalid(message):
16
+ return message
17
+ }
18
+ }
19
+ }
20
+
21
+ enum FirmwareArtifactDeadlineError: Error {
22
+ case exceeded
23
+ }
24
+
25
+ enum FirmwareArtifactWallClockDeadline {
26
+ static func run<T>(
27
+ timeoutSeconds: TimeInterval,
28
+ operation: @escaping @Sendable () async throws -> T
29
+ ) async throws -> T {
30
+ let timeoutNanoseconds = UInt64(max(0.001, timeoutSeconds) * 1_000_000_000.0)
31
+ return try await withThrowingTaskGroup(of: T.self) { group in
32
+ group.addTask {
33
+ try await operation()
34
+ }
35
+ group.addTask {
36
+ try await Task.sleep(nanoseconds: timeoutNanoseconds)
37
+ throw FirmwareArtifactDeadlineError.exceeded
38
+ }
39
+ defer { group.cancelAll() }
40
+ guard let result = try await group.next() else {
41
+ throw FirmwareArtifactDeadlineError.exceeded
42
+ }
43
+ return result
44
+ }
45
+ }
46
+ }
47
+
48
+ func firmwareArtifactDownloadKey(
49
+ transactionId: String,
50
+ taskId: String,
51
+ expectedSize: Int64?,
52
+ expectedSha256: String?,
53
+ downloadToken: String
54
+ ) -> String {
55
+ "\(transactionId)|\(taskId)|\(expectedSize.map(String.init) ?? "unknown")|\(expectedSha256 ?? "unknown")|\(downloadToken)"
56
+ }
57
+
58
+ enum FirmwareArchiveDiscoveredEntriesIssue: Equatable {
59
+ case empty
60
+ case duplicateName
61
+ }
62
+
63
+ func firmwareArchiveDiscoveredEntriesIssue(
64
+ _ entryNames: [String]
65
+ ) -> FirmwareArchiveDiscoveredEntriesIssue? {
66
+ guard !entryNames.isEmpty else {
67
+ return .empty
68
+ }
69
+ var names = Set<String>()
70
+ guard entryNames.allSatisfy({ names.insert($0).inserted }) else {
71
+ return .duplicateName
72
+ }
73
+ return nil
74
+ }
75
+
76
+ func firmwareArtifactDownloadToken(
77
+ expectedSha256: String?,
78
+ url: String
79
+ ) -> String {
80
+ if let expectedSha256 {
81
+ return expectedSha256.lowercased()
82
+ }
83
+ let urlData = Data(url.utf8)
84
+ var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
85
+ urlData.withUnsafeBytes {
86
+ _ = CC_SHA256($0.baseAddress, CC_LONG(urlData.count), &hash)
87
+ }
88
+ return hash.map { String(format: "%02x", $0) }.joined()
89
+ }
90
+
91
+ func firmwareArtifactPartialFileName(
92
+ transactionId: String,
93
+ taskId: String,
94
+ downloadToken: String
95
+ ) -> String {
96
+ let transactionData = Data(transactionId.utf8)
97
+ var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
98
+ transactionData.withUnsafeBytes {
99
+ _ = CC_SHA256($0.baseAddress, CC_LONG(transactionData.count), &hash)
100
+ }
101
+ let transactionToken = hash
102
+ .prefix(8)
103
+ .map { String(format: "%02x", $0) }
104
+ .joined()
105
+ return "\(downloadToken).\(taskId).\(transactionToken).partial"
106
+ }
107
+
108
+ func firmwareArtifactContentRangeIsValid(
109
+ _ value: String,
110
+ expectedStart: Int64,
111
+ expectedTotal: Int64?,
112
+ maxBytes: Int64
113
+ ) -> Bool {
114
+ guard value.lowercased().hasPrefix("bytes ") else {
115
+ return false
116
+ }
117
+ guard
118
+ let bounds = RangeDownloadLogic.parseContentRangeBounds(value),
119
+ let total = RangeDownloadLogic.parseContentRangeTotal(value)
120
+ else {
121
+ return false
122
+ }
123
+ let totalMatches = expectedTotal.map { total == $0 } ?? (total > 0 && total <= maxBytes)
124
+ return bounds.start == expectedStart &&
125
+ bounds.end >= bounds.start &&
126
+ bounds.end < total &&
127
+ totalMatches
128
+ }
129
+
130
+ func firmwareArtifactResponseFits(
131
+ expectedContentLength: Int64,
132
+ baseOffset: Int64,
133
+ maxBytes: Int64
134
+ ) -> Bool {
135
+ guard baseOffset >= 0, baseOffset <= maxBytes else {
136
+ return false
137
+ }
138
+ return expectedContentLength < 0 ||
139
+ expectedContentLength <= maxBytes - baseOffset
140
+ }
141
+
142
+ let firmwareArtifactFinalGrace: TimeInterval = 24 * 60 * 60
143
+ let firmwareArtifactPartialGrace: TimeInterval = 7 * 24 * 60 * 60
144
+ let firmwareArtifactScratchGrace: TimeInterval = firmwareArtifactPartialGrace
145
+ let firmwareArtifactMaxBytes: Int64 = 512 * 1024 * 1024
146
+ let firmwareArtifactMaxReadBytes: Int64 = 256 * 1024
147
+
148
+ func firmwareArtifactExactInt64(
149
+ _ value: Double,
150
+ minimum: Int64,
151
+ maximum: Int64
152
+ ) -> Int64? {
153
+ guard
154
+ minimum <= maximum,
155
+ value.isFinite,
156
+ value.rounded() == value,
157
+ let converted = Int64(exactly: value),
158
+ converted >= minimum,
159
+ converted <= maximum
160
+ else {
161
+ return nil
162
+ }
163
+ return converted
164
+ }
165
+
166
+ func firmwareArtifactIdentifierIsSafe(_ value: String) -> Bool {
167
+ value.range(
168
+ of: "^[A-Za-z0-9._:-]{1,160}$",
169
+ options: .regularExpression
170
+ ) != nil
171
+ }
172
+
173
+ private func firmwareArtifactScratchNameIsValid(
174
+ _ name: String,
175
+ prefix: String
176
+ ) -> Bool {
177
+ guard name.hasPrefix(prefix) else {
178
+ return false
179
+ }
180
+ let rawUUID = String(name.dropFirst(prefix.count))
181
+ guard
182
+ rawUUID.count == 36,
183
+ let uuid = UUID(uuidString: rawUUID)
184
+ else {
185
+ return false
186
+ }
187
+ return uuid.uuidString.caseInsensitiveCompare(rawUUID) == .orderedSame
188
+ }
189
+
190
+ private func firmwareArtifactEntrySize(
191
+ _ entryURL: URL,
192
+ values: URLResourceValues,
193
+ fileManager: FileManager
194
+ ) -> Int64 {
195
+ if values.isRegularFile == true {
196
+ return Int64(values.fileSize ?? 0)
197
+ }
198
+ guard
199
+ values.isDirectory == true,
200
+ let enumerator = fileManager.enumerator(
201
+ at: entryURL,
202
+ includingPropertiesForKeys: [
203
+ .isRegularFileKey,
204
+ .isSymbolicLinkKey,
205
+ .fileSizeKey,
206
+ ],
207
+ options: [],
208
+ errorHandler: nil
209
+ )
210
+ else {
211
+ return 0
212
+ }
213
+ var size: Int64 = 0
214
+ for case let childURL as URL in enumerator {
215
+ guard
216
+ let childValues = try? childURL.resourceValues(
217
+ forKeys: [.isRegularFileKey, .isSymbolicLinkKey, .fileSizeKey]
218
+ ),
219
+ childValues.isRegularFile == true,
220
+ childValues.isSymbolicLink != true
221
+ else {
222
+ continue
223
+ }
224
+ size += Int64(childValues.fileSize ?? 0)
225
+ }
226
+ return size
227
+ }
228
+
229
+ func sweepFirmwareArtifactOrphansAtRoot(
230
+ _ rootURL: URL,
231
+ retainedSha256: Set<String>,
232
+ activeSha256: Set<String>,
233
+ openPaths: Set<String>,
234
+ now: Date = Date(),
235
+ fileManager: FileManager = .default
236
+ ) throws -> (deletedFiles: Int, deletedBytes: Int64) {
237
+ var deletedFiles = 0
238
+ var deletedBytes: Int64 = 0
239
+ let resourceKeys: Set<URLResourceKey> = [
240
+ .isRegularFileKey,
241
+ .isDirectoryKey,
242
+ .isSymbolicLinkKey,
243
+ .contentModificationDateKey,
244
+ .fileSizeKey,
245
+ ]
246
+ let entries = try fileManager.contentsOfDirectory(
247
+ at: rootURL,
248
+ includingPropertiesForKeys: Array(resourceKeys),
249
+ options: []
250
+ )
251
+ for entryURL in entries {
252
+ let name = entryURL.lastPathComponent
253
+ let values = try entryURL.resourceValues(forKeys: resourceKeys)
254
+ let isArchiveScratch = firmwareArtifactScratchNameIsValid(
255
+ name,
256
+ prefix: "archive-"
257
+ )
258
+ let isPromoteScratch = firmwareArtifactScratchNameIsValid(
259
+ name,
260
+ prefix: ".promote-"
261
+ )
262
+ let isScratchCandidate = values.isSymbolicLink != true &&
263
+ ((isArchiveScratch && values.isDirectory == true) ||
264
+ (isPromoteScratch && values.isRegularFile == true))
265
+ if isScratchCandidate {
266
+ guard
267
+ let modifiedAt = values.contentModificationDate,
268
+ now.timeIntervalSince(modifiedAt) >= firmwareArtifactScratchGrace
269
+ else {
270
+ continue
271
+ }
272
+ let size = firmwareArtifactEntrySize(
273
+ entryURL,
274
+ values: values,
275
+ fileManager: fileManager
276
+ )
277
+ try fileManager.removeItem(at: entryURL)
278
+ deletedFiles += 1
279
+ deletedBytes += size
280
+ continue
281
+ }
282
+
283
+ guard
284
+ values.isRegularFile == true,
285
+ values.isSymbolicLink != true,
286
+ name.count >= 64
287
+ else {
288
+ continue
289
+ }
290
+ let sha256 = String(name.prefix(64))
291
+ guard
292
+ sha256.range(of: "^[a-f0-9]{64}$", options: .regularExpression) != nil,
293
+ !retainedSha256.contains(sha256),
294
+ !activeSha256.contains(sha256),
295
+ !openPaths.contains(entryURL.path)
296
+ else {
297
+ continue
298
+ }
299
+ let grace: TimeInterval
300
+ if name.hasSuffix(".bin") {
301
+ grace = firmwareArtifactFinalGrace
302
+ } else if name.hasSuffix(".partial") {
303
+ grace = firmwareArtifactPartialGrace
304
+ } else {
305
+ continue
306
+ }
307
+ guard
308
+ let modifiedAt = values.contentModificationDate,
309
+ now.timeIntervalSince(modifiedAt) >= grace
310
+ else {
311
+ continue
312
+ }
313
+ let size = Int64(values.fileSize ?? 0)
314
+ try fileManager.removeItem(at: entryURL)
315
+ deletedFiles += 1
316
+ deletedBytes += size
317
+ }
318
+ return (deletedFiles, deletedBytes)
319
+ }
320
+
4
321
  // MARK: - Dependency-free RangeDownloader logic (OCDS §4 / §5)
5
322
  //
6
323
  // This file holds the DETERMINISTIC, dependency-light pieces of the range
@@ -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
@@ -95,6 +105,188 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
95
105
  }
96
106
  return NSTemporaryDirectory()
97
107
  }
108
+
109
+ func getFirmwareArtifactCapabilities() throws -> FirmwareArtifactCapabilities {
110
+ FirmwareArtifactCapabilities(
111
+ firmwareArtifactProtocolVersion: 4,
112
+ supportedRouteTypes: ["domain"],
113
+ supportsArchiveMaterialization: true,
114
+ maxReadBytes: Double(FirmwareArtifactStore.maxReadBytes)
115
+ )
116
+ }
117
+
118
+ func downloadFirmwareArtifact(
119
+ params: FirmwareArtifactDownloadParams
120
+ ) throws -> Promise<FirmwareArtifactReceipt> {
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
+ expectedSha256Verified: params.expectedSha256 != nil
129
+ )
130
+ )
131
+ }
132
+ } catch {
133
+ return Promise.rejected(withError: error)
134
+ }
135
+ return Promise.async {
136
+ let artifact = try await FirmwareArtifactStore.shared.download(params)
137
+ return FirmwareArtifactReceipt(
138
+ artifactRef: artifact.artifactRef,
139
+ size: Double(artifact.size),
140
+ sha256: artifact.sha256,
141
+ expectedSha256Verified: params.expectedSha256 != nil
142
+ )
143
+ }
144
+ }
145
+
146
+ func cancelFirmwareArtifactDownloads(
147
+ params: FirmwareArtifactCancelParams
148
+ ) throws -> Promise<Void> {
149
+ guard FirmwareArtifactStore.isSafeIdentifier(params.transactionId) else {
150
+ return Promise.rejected(
151
+ withError: FirmwareArtifactStoreError.invalidInput(
152
+ "Invalid firmware transactionId"
153
+ )
154
+ )
155
+ }
156
+ return Promise.async {
157
+ try await FirmwareArtifactStore.shared.cancelDownloads(
158
+ transactionId: params.transactionId
159
+ )
160
+ }
161
+ }
162
+
163
+ func discardFirmwareArtifact(
164
+ params: FirmwareArtifactRefParams
165
+ ) throws -> Promise<Void> {
166
+ settledFirmwareArtifactPromise {
167
+ try FirmwareArtifactStore.shared.discard(artifactRef: params.artifactRef)
168
+ }
169
+ }
170
+
171
+ func openFirmwareArtifact(
172
+ params: FirmwareArtifactRefParams
173
+ ) throws -> Promise<FirmwareArtifactReaderInfo> {
174
+ settledFirmwareArtifactPromise {
175
+ let reader = try FirmwareArtifactStore.shared.open(
176
+ artifactRef: params.artifactRef
177
+ )
178
+ return FirmwareArtifactReaderInfo(
179
+ readerId: reader.readerId,
180
+ size: Double(reader.size)
181
+ )
182
+ }
183
+ }
184
+
185
+ func readFirmwareArtifact(
186
+ params: FirmwareArtifactReaderReadParams
187
+ ) throws -> Promise<ArrayBuffer> {
188
+ settledFirmwareArtifactPromise {
189
+ guard
190
+ let offset = firmwareArtifactExactInt64(
191
+ params.offset,
192
+ minimum: 0,
193
+ maximum: FirmwareArtifactStore.maxArtifactBytes
194
+ ),
195
+ let length = firmwareArtifactExactInt64(
196
+ params.length,
197
+ minimum: 1,
198
+ maximum: firmwareArtifactMaxReadBytes
199
+ )
200
+ else {
201
+ throw FirmwareArtifactStoreError.readerInvalid(
202
+ "Invalid firmware artifact read"
203
+ )
204
+ }
205
+ let data = try FirmwareArtifactStore.shared.read(
206
+ readerId: params.readerId,
207
+ offset: offset,
208
+ length: Int(length)
209
+ )
210
+ return try ArrayBuffer.copy(data: data)
211
+ }
212
+ }
213
+
214
+ func closeFirmwareArtifact(
215
+ params: FirmwareArtifactReaderCloseParams
216
+ ) throws -> Promise<Void> {
217
+ settledFirmwareArtifactPromise {
218
+ try FirmwareArtifactStore.shared.close(readerId: params.readerId)
219
+ }
220
+ }
221
+
222
+ func materializeFirmwareArchive(
223
+ params: FirmwareArchiveMaterializeParams
224
+ ) throws -> Promise<FirmwareArchiveMaterializeResult> {
225
+ settledFirmwareArtifactPromise {
226
+ let entries = try FirmwareArtifactStore.shared.materializeArchive(
227
+ leaseRef: params.leaseRef,
228
+ artifactRef: params.archiveArtifactRef,
229
+ expectedEntries: params.expectedEntries
230
+ )
231
+ return FirmwareArchiveMaterializeResult(
232
+ artifacts: entries.map { entry in
233
+ FirmwareArchiveMaterializedArtifact(
234
+ entryName: entry.entryName,
235
+ receipt: FirmwareArtifactReceipt(
236
+ artifactRef: entry.artifact.artifactRef,
237
+ size: Double(entry.artifact.size),
238
+ sha256: entry.artifact.sha256,
239
+ expectedSha256Verified: params.expectedEntries != nil
240
+ )
241
+ )
242
+ }
243
+ )
244
+ }
245
+ }
246
+
247
+ func createFirmwareArtifactLease(
248
+ params: FirmwareArtifactLeaseCreateParams
249
+ ) throws -> Promise<FirmwareArtifactLease> {
250
+ settledFirmwareArtifactPromise {
251
+ FirmwareArtifactLease(
252
+ leaseRef: try FirmwareArtifactStore.shared.createLease(
253
+ transactionId: params.transactionId
254
+ )
255
+ )
256
+ }
257
+ }
258
+
259
+ func retainFirmwareArtifact(
260
+ params: FirmwareArtifactLeaseRetainParams
261
+ ) throws -> Promise<Void> {
262
+ settledFirmwareArtifactPromise {
263
+ try FirmwareArtifactStore.shared.retain(
264
+ leaseRef: params.leaseRef,
265
+ artifactRef: params.artifactRef
266
+ )
267
+ }
268
+ }
269
+
270
+ func releaseFirmwareArtifactLease(
271
+ params: FirmwareArtifactLeaseReleaseParams
272
+ ) throws -> Promise<Void> {
273
+ settledFirmwareArtifactPromise {
274
+ try FirmwareArtifactStore.shared.releaseLease(
275
+ leaseRef: params.leaseRef,
276
+ disposition: params.disposition
277
+ )
278
+ }
279
+ }
280
+
281
+ func sweepFirmwareArtifactOrphans() throws -> Promise<FirmwareArtifactSweepResult> {
282
+ settledFirmwareArtifactPromise {
283
+ let result = try FirmwareArtifactStore.shared.sweepOrphans()
284
+ return FirmwareArtifactSweepResult(
285
+ deletedFiles: Double(result.deletedFiles),
286
+ deletedBytes: Double(result.deletedBytes)
287
+ )
288
+ }
289
+ }
98
290
  }
99
291
 
100
292
  // MARK: - RangeDownloader (migrated core)
@@ -326,16 +518,32 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
326
518
  @objc private func handleBackgroundEventsNotification(_ note: Notification) {
327
519
  guard let identifier = note.userInfo?["identifier"] as? String,
328
520
  Self.channel(forIdentifier: identifier) != nil else { return }
329
- // Re-create the session with this delegate so queued completion events are
330
- // delivered here on a background relaunch.
331
- _ = session(forIdentifier: identifier)
332
521
  if let handler = note.userInfo?["completionHandler"] as? () -> Void {
333
- lock.lock()
334
- backgroundCompletionHandlers[identifier] = handler
335
- lock.unlock()
522
+ attachBackgroundEvents(
523
+ identifier: identifier,
524
+ completionHandler: handler
525
+ )
336
526
  }
337
527
  }
338
528
 
529
+ private func attachBackgroundEvents(
530
+ identifier: String,
531
+ completionHandler: @escaping () -> Void
532
+ ) {
533
+ let replacedHandler: (() -> Void)? = lock.withLockValue {
534
+ backgroundCompletionHandlers.updateValue(
535
+ completionHandler,
536
+ forKey: identifier
537
+ )
538
+ }
539
+ // UIKit should provide one live handler per session. Complete an older
540
+ // handler instead of leaking it if the callback is unexpectedly repeated.
541
+ replacedHandler?()
542
+ // Store the handler before creating the session. Delegate delivery can
543
+ // begin immediately when a background relaunch reattaches this identifier.
544
+ _ = session(forIdentifier: identifier)
545
+ }
546
+
339
547
  // MARK: - Session cache
340
548
 
341
549
  private func session(forChannel channel: DownloadChannel, segmentCount: Int) -> URLSession {
@@ -10,6 +10,7 @@ export const ReactNativeRangeDownloader = ReactNativeRangeDownloaderHybridObject
10
10
  export const RangeDownloadChannel = {
11
11
  Bundle: 'bundle',
12
12
  Apk: 'apk',
13
- Chart: 'chart'
13
+ Chart: 'chart',
14
+ Firmware: 'firmware'
14
15
  };
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NitroModules","ReactNativeRangeDownloaderHybridObject","createHybridObject","ReactNativeRangeDownloader","RangeDownloadChannel","Bundle","Apk","Chart"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAGzD,MAAMC,sCAAsC,GAC1CD,YAAY,CAACE,kBAAkB,CAC7B,4BACF,CAAC;AAEH,OAAO,MAAMC,0BAA0B,GAAGF,sCAAsC;;AAEhF;AACA;AACA;AACA,OAAO,MAAMG,oBAAoB,GAAG;EAClCC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,KAAK;EACVC,KAAK,EAAE;AACT,CAAU","ignoreList":[]}
1
+ {"version":3,"names":["NitroModules","ReactNativeRangeDownloaderHybridObject","createHybridObject","ReactNativeRangeDownloader","RangeDownloadChannel","Bundle","Apk","Chart","Firmware"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAGzD,MAAMC,sCAAsC,GAC1CD,YAAY,CAACE,kBAAkB,CAC7B,4BACF,CAAC;AAEH,OAAO,MAAMC,0BAA0B,GACrCF,sCAAsC;;AAExC;AACA;AACA;AACA,OAAO,MAAMG,oBAAoB,GAAG;EAClCC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,KAAK;EACVC,KAAK,EAAE,OAAO;EACdC,QAAQ,EAAE;AACZ,CAAU","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { HybridObject } from 'react-native-nitro-modules';
2
- export type DownloadChannel = 'bundle' | 'apk' | 'chart';
2
+ export type DownloadChannel = 'bundle' | 'apk' | 'chart' | 'firmware';
3
3
  export interface RangeDownloadParams {
4
4
  channel: DownloadChannel;
5
5
  taskId: string;
@@ -28,6 +28,85 @@ export interface RangeDownloadEvent {
28
28
  progress: number;
29
29
  message: string;
30
30
  }
31
+ export interface FirmwareArtifactDownloadParams {
32
+ taskId: string;
33
+ transactionId: string;
34
+ leaseRef: string;
35
+ artifactId: string;
36
+ url: string;
37
+ routeType: string;
38
+ resolvedIp?: string;
39
+ expectedSize?: number;
40
+ expectedSha256?: string;
41
+ maxBytes: number;
42
+ overallDeadlineSeconds?: number;
43
+ }
44
+ export interface FirmwareArtifactReceipt {
45
+ artifactRef: string;
46
+ size: number;
47
+ sha256: string;
48
+ expectedSha256Verified: boolean;
49
+ }
50
+ export interface FirmwareArtifactCapabilities {
51
+ firmwareArtifactProtocolVersion: number;
52
+ supportedRouteTypes: string[];
53
+ supportsArchiveMaterialization: boolean;
54
+ maxReadBytes: number;
55
+ }
56
+ export interface FirmwareArtifactRefParams {
57
+ artifactRef: string;
58
+ }
59
+ export interface FirmwareArtifactCancelParams {
60
+ transactionId: string;
61
+ }
62
+ export interface FirmwareArtifactReaderInfo {
63
+ readerId: string;
64
+ size: number;
65
+ }
66
+ export interface FirmwareArtifactReaderReadParams {
67
+ readerId: string;
68
+ offset: number;
69
+ length: number;
70
+ }
71
+ export interface FirmwareArtifactReaderCloseParams {
72
+ readerId: string;
73
+ }
74
+ export interface FirmwareArchiveMaterializeParams {
75
+ leaseRef: string;
76
+ archiveArtifactRef: string;
77
+ expectedEntries?: FirmwareArchiveExpectedEntry[];
78
+ }
79
+ export interface FirmwareArchiveExpectedEntry {
80
+ artifactId: string;
81
+ entryName: string;
82
+ expectedSize: number;
83
+ expectedSha256: string;
84
+ }
85
+ export interface FirmwareArchiveMaterializedArtifact {
86
+ entryName: string;
87
+ receipt: FirmwareArtifactReceipt;
88
+ }
89
+ export interface FirmwareArchiveMaterializeResult {
90
+ artifacts: FirmwareArchiveMaterializedArtifact[];
91
+ }
92
+ export interface FirmwareArtifactLeaseCreateParams {
93
+ transactionId: string;
94
+ }
95
+ export interface FirmwareArtifactLease {
96
+ leaseRef: string;
97
+ }
98
+ export interface FirmwareArtifactLeaseRetainParams {
99
+ leaseRef: string;
100
+ artifactRef: string;
101
+ }
102
+ export interface FirmwareArtifactLeaseReleaseParams {
103
+ leaseRef: string;
104
+ disposition: string;
105
+ }
106
+ export interface FirmwareArtifactSweepResult {
107
+ deletedFiles: number;
108
+ deletedBytes: number;
109
+ }
31
110
  export interface ReactNativeRangeDownloader extends HybridObject<{
32
111
  ios: 'swift';
33
112
  android: 'kotlin';
@@ -38,5 +117,17 @@ export interface ReactNativeRangeDownloader extends HybridObject<{
38
117
  addDownloadListener(callback: (event: RangeDownloadEvent) => void): number;
39
118
  removeDownloadListener(id: number): void;
40
119
  getDownloadsDir(): string;
120
+ getFirmwareArtifactCapabilities(): FirmwareArtifactCapabilities;
121
+ downloadFirmwareArtifact(params: FirmwareArtifactDownloadParams): Promise<FirmwareArtifactReceipt>;
122
+ cancelFirmwareArtifactDownloads(params: FirmwareArtifactCancelParams): Promise<void>;
123
+ discardFirmwareArtifact(params: FirmwareArtifactRefParams): Promise<void>;
124
+ openFirmwareArtifact(params: FirmwareArtifactRefParams): Promise<FirmwareArtifactReaderInfo>;
125
+ readFirmwareArtifact(params: FirmwareArtifactReaderReadParams): Promise<ArrayBuffer>;
126
+ closeFirmwareArtifact(params: FirmwareArtifactReaderCloseParams): Promise<void>;
127
+ materializeFirmwareArchive(params: FirmwareArchiveMaterializeParams): Promise<FirmwareArchiveMaterializeResult>;
128
+ createFirmwareArtifactLease(params: FirmwareArtifactLeaseCreateParams): Promise<FirmwareArtifactLease>;
129
+ retainFirmwareArtifact(params: FirmwareArtifactLeaseRetainParams): Promise<void>;
130
+ releaseFirmwareArtifactLease(params: FirmwareArtifactLeaseReleaseParams): Promise<void>;
131
+ sweepFirmwareArtifactOrphans(): Promise<FirmwareArtifactSweepResult>;
41
132
  }
42
133
  //# sourceMappingURL=ReactNativeRangeDownloader.nitro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAI5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAWD,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,UAAU,CAAC;AAKf,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,WAAW,GACX,iBAAiB,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IAIzD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAMpE,gBAAgB,CACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAKjB,MAAM,CACJ,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,CAAC;IAC3E,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAKzC,eAAe,IAAI,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"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"}