@onekeyfe/react-native-range-downloader 3.0.81-alpha.10 → 3.0.81-alpha.11
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.
- package/ReactNativeRangeDownloader.podspec +1 -2
- package/android/build.gradle +0 -1
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt +9 -25
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +6 -2
- package/ios/FirmwareArtifactStore.swift +17 -39
- package/ios/RangeDownloadLogic.swift +20 -0
- package/ios/ReactNativeRangeDownloader.swift +20 -15
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +1 -0
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JFirmwareArtifactReceipt.hpp +7 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReceipt.kt +6 -3
- package/nitrogen/generated/ios/swift/FirmwareArtifactReceipt.swift +13 -2
- package/nitrogen/generated/shared/c++/FirmwareArtifactReceipt.hpp +6 -2
- package/package.json +1 -2
- package/src/ReactNativeRangeDownloader.nitro.ts +3 -0
|
@@ -23,13 +23,12 @@ Pod::Spec.new do |s|
|
|
|
23
23
|
s.dependency 'React-jsi'
|
|
24
24
|
s.dependency 'React-callinvoker'
|
|
25
25
|
s.dependency 'ReactNativeNativeLogger'
|
|
26
|
-
s.dependency 'SniConnect', package["peerDependencies"]["@onekeyfe/react-native-sni-connect"]
|
|
27
26
|
s.public_header_files = "ios/FirmwareArchiveMinizipBridge.h"
|
|
28
27
|
s.pod_target_xcconfig = {
|
|
29
28
|
'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/SSZipArchive/SSZipArchive/minizip"',
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
s.dependency 'SSZipArchive', '
|
|
31
|
+
s.dependency 'SSZipArchive', '2.5.5'
|
|
33
32
|
|
|
34
33
|
load 'nitrogen/generated/ios/ReactNativeRangeDownloader+autolinking.rb'
|
|
35
34
|
add_nitrogen_files(s)
|
package/android/build.gradle
CHANGED
|
@@ -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
|
|
package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt
CHANGED
|
@@ -2,7 +2,6 @@ package com.margelo.nitro.reactnativerangedownloader
|
|
|
2
2
|
|
|
3
3
|
import android.system.Os
|
|
4
4
|
import com.margelo.nitro.NitroModules
|
|
5
|
-
import com.sniconnect.SniPinnedTransport
|
|
6
5
|
import java.io.BufferedInputStream
|
|
7
6
|
import java.io.File
|
|
8
7
|
import java.io.FileInputStream
|
|
@@ -70,7 +69,7 @@ private class FirmwareDownloadLock {
|
|
|
70
69
|
internal object FirmwareArtifactStore {
|
|
71
70
|
const val MAX_READ_BYTES = 256 * 1024
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
const val MAX_ARTIFACT_BYTES = 512L * 1024 * 1024
|
|
74
73
|
private val sha256Pattern = Regex("^[a-fA-F0-9]{64}$")
|
|
75
74
|
private val artifactRefPattern = Regex("^fw:[a-f0-9]{64}$")
|
|
76
75
|
private val leaseRefPattern = Regex("^fwlease:[a-f0-9-]{36}$")
|
|
@@ -331,7 +330,6 @@ internal object FirmwareArtifactStore {
|
|
|
331
330
|
val maxBytes: Long,
|
|
332
331
|
val expectedSha256: String?,
|
|
333
332
|
val downloadToken: String,
|
|
334
|
-
val hostname: String,
|
|
335
333
|
val overallDeadlineSeconds: Double,
|
|
336
334
|
)
|
|
337
335
|
|
|
@@ -379,24 +377,17 @@ internal object FirmwareArtifactStore {
|
|
|
379
377
|
}
|
|
380
378
|
val overallDeadlineSeconds =
|
|
381
379
|
validateFirmwareDownloadDeadlineSeconds(params.overallDeadlineSeconds)
|
|
382
|
-
require(params.routeType == "domain"
|
|
380
|
+
require(params.routeType == "domain") {
|
|
383
381
|
"Invalid firmware route type"
|
|
384
382
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
"Pinned route requires resolvedIp"
|
|
388
|
-
}
|
|
389
|
-
} else {
|
|
390
|
-
require(params.resolvedIp == null) {
|
|
391
|
-
"Domain route must not include resolvedIp"
|
|
392
|
-
}
|
|
383
|
+
require(params.resolvedIp == null) {
|
|
384
|
+
"Domain route must not include resolvedIp"
|
|
393
385
|
}
|
|
394
386
|
return ValidatedDownload(
|
|
395
387
|
expectedSize = expectedSize,
|
|
396
388
|
maxBytes = maxBytes,
|
|
397
389
|
expectedSha256 = expectedSha256,
|
|
398
390
|
downloadToken = expectedSha256 ?: sha256(params.url),
|
|
399
|
-
hostname = url.host,
|
|
400
391
|
overallDeadlineSeconds = overallDeadlineSeconds,
|
|
401
392
|
)
|
|
402
393
|
}
|
|
@@ -455,18 +446,11 @@ internal object FirmwareArtifactStore {
|
|
|
455
446
|
requestBuilder.header("Range", "bytes=$resumeOffset-")
|
|
456
447
|
}
|
|
457
448
|
|
|
458
|
-
val client =
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
)
|
|
463
|
-
} else {
|
|
464
|
-
OkHttpClient.Builder()
|
|
465
|
-
.protocols(listOf(Protocol.HTTP_1_1))
|
|
466
|
-
.followRedirects(false)
|
|
467
|
-
.followSslRedirects(false)
|
|
468
|
-
.build()
|
|
469
|
-
}
|
|
449
|
+
val client = OkHttpClient.Builder()
|
|
450
|
+
.protocols(listOf(Protocol.HTTP_1_1))
|
|
451
|
+
.followRedirects(false)
|
|
452
|
+
.followSslRedirects(false)
|
|
453
|
+
.build()
|
|
470
454
|
val call = client.newCall(requestBuilder.build())
|
|
471
455
|
call.timeout().timeout(
|
|
472
456
|
ceil(validated.overallDeadlineSeconds * 1000).toLong(),
|
|
@@ -272,8 +272,8 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
|
|
|
272
272
|
|
|
273
273
|
override fun getFirmwareArtifactCapabilities(): FirmwareArtifactCapabilities {
|
|
274
274
|
return FirmwareArtifactCapabilities(
|
|
275
|
-
firmwareArtifactProtocolVersion =
|
|
276
|
-
supportedRouteTypes = arrayOf("domain"
|
|
275
|
+
firmwareArtifactProtocolVersion = 4.0,
|
|
276
|
+
supportedRouteTypes = arrayOf("domain"),
|
|
277
277
|
supportsArchiveMaterialization = true,
|
|
278
278
|
maxReadBytes = FirmwareArtifactStore.MAX_READ_BYTES.toDouble(),
|
|
279
279
|
)
|
|
@@ -288,6 +288,7 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
|
|
|
288
288
|
artifactRef = artifact.artifactRef,
|
|
289
289
|
size = artifact.size.toDouble(),
|
|
290
290
|
sha256 = artifact.sha256,
|
|
291
|
+
expectedSha256Verified = params.expectedSha256 != null,
|
|
291
292
|
)
|
|
292
293
|
}
|
|
293
294
|
}
|
|
@@ -324,9 +325,11 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
|
|
|
324
325
|
require(
|
|
325
326
|
params.offset.isFinite() &&
|
|
326
327
|
params.offset >= 0 &&
|
|
328
|
+
params.offset <= FirmwareArtifactStore.MAX_ARTIFACT_BYTES.toDouble() &&
|
|
327
329
|
params.offset.toLong().toDouble() == params.offset &&
|
|
328
330
|
params.length.isFinite() &&
|
|
329
331
|
params.length > 0 &&
|
|
332
|
+
params.length <= FirmwareArtifactStore.MAX_READ_BYTES.toDouble() &&
|
|
330
333
|
params.length.toInt().toDouble() == params.length
|
|
331
334
|
) {
|
|
332
335
|
"Invalid firmware artifact read"
|
|
@@ -366,6 +369,7 @@ class ReactNativeRangeDownloader : HybridReactNativeRangeDownloaderSpec() {
|
|
|
366
369
|
artifactRef = entry.artifact.artifactRef,
|
|
367
370
|
size = entry.artifact.size.toDouble(),
|
|
368
371
|
sha256 = entry.artifact.sha256,
|
|
372
|
+
expectedSha256Verified = params.expectedEntries != null,
|
|
369
373
|
),
|
|
370
374
|
)
|
|
371
375
|
}.toTypedArray(),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import CryptoKit
|
|
2
2
|
import Foundation
|
|
3
3
|
import ReactNativeNativeLogger
|
|
4
|
-
import SniConnect
|
|
5
4
|
|
|
6
5
|
func isFirmwareArtifactTLSError(_ error: Error) -> Bool {
|
|
7
6
|
var current: NSError? = error as NSError
|
|
@@ -384,7 +383,8 @@ private actor FirmwareArtifactDownloadCoordinator {
|
|
|
384
383
|
|
|
385
384
|
final class FirmwareArtifactStore {
|
|
386
385
|
static let shared = FirmwareArtifactStore()
|
|
387
|
-
static let maxReadBytes =
|
|
386
|
+
static let maxReadBytes = Int(firmwareArtifactMaxReadBytes)
|
|
387
|
+
static let maxArtifactBytes = firmwareArtifactMaxBytes
|
|
388
388
|
private static let defaultDownloadDeadline: TimeInterval = 180
|
|
389
389
|
private static let maxDownloadDeadline: TimeInterval = 24 * 60 * 60
|
|
390
390
|
|
|
@@ -461,30 +461,26 @@ final class FirmwareArtifactStore {
|
|
|
461
461
|
}
|
|
462
462
|
let expectedSize: Int64?
|
|
463
463
|
if let value = params.expectedSize {
|
|
464
|
-
guard
|
|
465
|
-
value
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
else {
|
|
464
|
+
guard let converted = firmwareArtifactExactInt64(
|
|
465
|
+
value,
|
|
466
|
+
minimum: 1,
|
|
467
|
+
maximum: Self.maxArtifactBytes
|
|
468
|
+
) else {
|
|
470
469
|
throw FirmwareArtifactStoreError.invalidInput(
|
|
471
470
|
"Invalid firmware artifact expected size"
|
|
472
471
|
)
|
|
473
472
|
}
|
|
474
|
-
expectedSize =
|
|
473
|
+
expectedSize = converted
|
|
475
474
|
} else {
|
|
476
475
|
expectedSize = nil
|
|
477
476
|
}
|
|
478
|
-
guard
|
|
479
|
-
params.maxBytes
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
params.maxBytes <= Double(512 * 1024 * 1024)
|
|
484
|
-
else {
|
|
477
|
+
guard let maxBytes = firmwareArtifactExactInt64(
|
|
478
|
+
params.maxBytes,
|
|
479
|
+
minimum: 1,
|
|
480
|
+
maximum: Self.maxArtifactBytes
|
|
481
|
+
) else {
|
|
485
482
|
throw FirmwareArtifactStoreError.invalidInput("Invalid firmware artifact size")
|
|
486
483
|
}
|
|
487
|
-
let maxBytes = Int64(params.maxBytes)
|
|
488
484
|
guard expectedSize.map({ $0 <= maxBytes }) ?? true else {
|
|
489
485
|
throw FirmwareArtifactStoreError.invalidInput(
|
|
490
486
|
"Firmware artifact expected size exceeds maxBytes"
|
|
@@ -501,7 +497,7 @@ final class FirmwareArtifactStore {
|
|
|
501
497
|
)
|
|
502
498
|
}
|
|
503
499
|
}
|
|
504
|
-
guard params.routeType == "domain"
|
|
500
|
+
guard params.routeType == "domain" else {
|
|
505
501
|
throw FirmwareArtifactStoreError.invalidInput("Invalid firmware route type")
|
|
506
502
|
}
|
|
507
503
|
let deadline = params.overallDeadlineSeconds ?? defaultDownloadDeadline
|
|
@@ -512,11 +508,7 @@ final class FirmwareArtifactStore {
|
|
|
512
508
|
else {
|
|
513
509
|
throw FirmwareArtifactStoreError.invalidInput("Invalid firmware download deadline")
|
|
514
510
|
}
|
|
515
|
-
if params.
|
|
516
|
-
guard let resolvedIp = params.resolvedIp, !resolvedIp.isEmpty else {
|
|
517
|
-
throw FirmwareArtifactStoreError.invalidInput("Pinned route requires resolvedIp")
|
|
518
|
-
}
|
|
519
|
-
} else if params.resolvedIp != nil {
|
|
511
|
+
if params.resolvedIp != nil {
|
|
520
512
|
throw FirmwareArtifactStoreError.invalidInput("Domain route must not include resolvedIp")
|
|
521
513
|
}
|
|
522
514
|
return ValidatedDownload(
|
|
@@ -1334,27 +1326,13 @@ final class FirmwareArtifactStore {
|
|
|
1334
1326
|
self?.isTransactionCancelled(params.transactionId) == true
|
|
1335
1327
|
}
|
|
1336
1328
|
)
|
|
1337
|
-
let
|
|
1338
|
-
if params.routeType == "pinnedIp" {
|
|
1339
|
-
pinnedSession = try SniConnectPinnedTransport.makeSession(
|
|
1340
|
-
hostname: hostname,
|
|
1341
|
-
ip: params.resolvedIp!,
|
|
1342
|
-
dataDelegate: streamDelegate
|
|
1343
|
-
)
|
|
1344
|
-
} else {
|
|
1345
|
-
pinnedSession = nil
|
|
1346
|
-
}
|
|
1347
|
-
let session = pinnedSession?.session ?? URLSession(
|
|
1329
|
+
let session = URLSession(
|
|
1348
1330
|
configuration: .ephemeral,
|
|
1349
1331
|
delegate: streamDelegate,
|
|
1350
1332
|
delegateQueue: nil
|
|
1351
1333
|
)
|
|
1352
1334
|
defer {
|
|
1353
|
-
|
|
1354
|
-
pinnedSession.close()
|
|
1355
|
-
} else {
|
|
1356
|
-
session.finishTasksAndInvalidate()
|
|
1357
|
-
}
|
|
1335
|
+
session.finishTasksAndInvalidate()
|
|
1358
1336
|
}
|
|
1359
1337
|
|
|
1360
1338
|
do {
|
|
@@ -142,6 +142,26 @@ func firmwareArtifactResponseFits(
|
|
|
142
142
|
let firmwareArtifactFinalGrace: TimeInterval = 24 * 60 * 60
|
|
143
143
|
let firmwareArtifactPartialGrace: TimeInterval = 7 * 24 * 60 * 60
|
|
144
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
|
+
}
|
|
145
165
|
|
|
146
166
|
func firmwareArtifactIdentifierIsSafe(_ value: String) -> Bool {
|
|
147
167
|
value.range(
|
|
@@ -108,8 +108,8 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
108
108
|
|
|
109
109
|
func getFirmwareArtifactCapabilities() throws -> FirmwareArtifactCapabilities {
|
|
110
110
|
FirmwareArtifactCapabilities(
|
|
111
|
-
firmwareArtifactProtocolVersion:
|
|
112
|
-
supportedRouteTypes: ["domain"
|
|
111
|
+
firmwareArtifactProtocolVersion: 4,
|
|
112
|
+
supportedRouteTypes: ["domain"],
|
|
113
113
|
supportsArchiveMaterialization: true,
|
|
114
114
|
maxReadBytes: Double(FirmwareArtifactStore.maxReadBytes)
|
|
115
115
|
)
|
|
@@ -124,7 +124,8 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
124
124
|
withResult: FirmwareArtifactReceipt(
|
|
125
125
|
artifactRef: artifact.artifactRef,
|
|
126
126
|
size: Double(artifact.size),
|
|
127
|
-
sha256: artifact.sha256
|
|
127
|
+
sha256: artifact.sha256,
|
|
128
|
+
expectedSha256Verified: params.expectedSha256 != nil
|
|
128
129
|
)
|
|
129
130
|
)
|
|
130
131
|
}
|
|
@@ -136,7 +137,8 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
136
137
|
return FirmwareArtifactReceipt(
|
|
137
138
|
artifactRef: artifact.artifactRef,
|
|
138
139
|
size: Double(artifact.size),
|
|
139
|
-
sha256: artifact.sha256
|
|
140
|
+
sha256: artifact.sha256,
|
|
141
|
+
expectedSha256Verified: params.expectedSha256 != nil
|
|
140
142
|
)
|
|
141
143
|
}
|
|
142
144
|
}
|
|
@@ -185,14 +187,16 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
185
187
|
) throws -> Promise<ArrayBuffer> {
|
|
186
188
|
settledFirmwareArtifactPromise {
|
|
187
189
|
guard
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
+
)
|
|
196
200
|
else {
|
|
197
201
|
throw FirmwareArtifactStoreError.readerInvalid(
|
|
198
202
|
"Invalid firmware artifact read"
|
|
@@ -200,8 +204,8 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
200
204
|
}
|
|
201
205
|
let data = try FirmwareArtifactStore.shared.read(
|
|
202
206
|
readerId: params.readerId,
|
|
203
|
-
offset:
|
|
204
|
-
length: Int(
|
|
207
|
+
offset: offset,
|
|
208
|
+
length: Int(length)
|
|
205
209
|
)
|
|
206
210
|
return try ArrayBuffer.copy(data: data)
|
|
207
211
|
}
|
|
@@ -231,7 +235,8 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
231
235
|
receipt: FirmwareArtifactReceipt(
|
|
232
236
|
artifactRef: entry.artifact.artifactRef,
|
|
233
237
|
size: Double(entry.artifact.size),
|
|
234
|
-
sha256: entry.artifact.sha256
|
|
238
|
+
sha256: entry.artifact.sha256,
|
|
239
|
+
expectedSha256Verified: params.expectedEntries != nil
|
|
235
240
|
)
|
|
236
241
|
)
|
|
237
242
|
}
|
|
@@ -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,GAAG,UAAU,CAAC;AAEtE,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,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,10 +37,13 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
37
37
|
double size = this->getFieldValue(fieldSize);
|
|
38
38
|
static const auto fieldSha256 = clazz->getField<jni::JString>("sha256");
|
|
39
39
|
jni::local_ref<jni::JString> sha256 = this->getFieldValue(fieldSha256);
|
|
40
|
+
static const auto fieldExpectedSha256Verified = clazz->getField<jboolean>("expectedSha256Verified");
|
|
41
|
+
jboolean expectedSha256Verified = this->getFieldValue(fieldExpectedSha256Verified);
|
|
40
42
|
return FirmwareArtifactReceipt(
|
|
41
43
|
artifactRef->toStdString(),
|
|
42
44
|
size,
|
|
43
|
-
sha256->toStdString()
|
|
45
|
+
sha256->toStdString(),
|
|
46
|
+
static_cast<bool>(expectedSha256Verified)
|
|
44
47
|
);
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -50,14 +53,15 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
50
53
|
*/
|
|
51
54
|
[[maybe_unused]]
|
|
52
55
|
static jni::local_ref<JFirmwareArtifactReceipt::javaobject> fromCpp(const FirmwareArtifactReceipt& value) {
|
|
53
|
-
using JSignature = JFirmwareArtifactReceipt(jni::alias_ref<jni::JString>, double, jni::alias_ref<jni::JString
|
|
56
|
+
using JSignature = JFirmwareArtifactReceipt(jni::alias_ref<jni::JString>, double, jni::alias_ref<jni::JString>, jboolean);
|
|
54
57
|
static const auto clazz = javaClassStatic();
|
|
55
58
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
56
59
|
return create(
|
|
57
60
|
clazz,
|
|
58
61
|
jni::make_jstring(value.artifactRef),
|
|
59
62
|
value.size,
|
|
60
|
-
jni::make_jstring(value.sha256)
|
|
63
|
+
jni::make_jstring(value.sha256),
|
|
64
|
+
value.expectedSha256Verified
|
|
61
65
|
);
|
|
62
66
|
}
|
|
63
67
|
};
|
|
@@ -25,7 +25,10 @@ data class FirmwareArtifactReceipt(
|
|
|
25
25
|
val size: Double,
|
|
26
26
|
@DoNotStrip
|
|
27
27
|
@Keep
|
|
28
|
-
val sha256: String
|
|
28
|
+
val sha256: String,
|
|
29
|
+
@DoNotStrip
|
|
30
|
+
@Keep
|
|
31
|
+
val expectedSha256Verified: Boolean
|
|
29
32
|
) {
|
|
30
33
|
/* primary constructor */
|
|
31
34
|
|
|
@@ -37,8 +40,8 @@ data class FirmwareArtifactReceipt(
|
|
|
37
40
|
@Keep
|
|
38
41
|
@Suppress("unused")
|
|
39
42
|
@JvmStatic
|
|
40
|
-
private fun fromCpp(artifactRef: String, size: Double, sha256: String): FirmwareArtifactReceipt {
|
|
41
|
-
return FirmwareArtifactReceipt(artifactRef, size, sha256)
|
|
43
|
+
private fun fromCpp(artifactRef: String, size: Double, sha256: String, expectedSha256Verified: Boolean): FirmwareArtifactReceipt {
|
|
44
|
+
return FirmwareArtifactReceipt(artifactRef, size, sha256, expectedSha256Verified)
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
}
|
|
@@ -19,8 +19,8 @@ public extension FirmwareArtifactReceipt {
|
|
|
19
19
|
/**
|
|
20
20
|
* Create a new instance of `FirmwareArtifactReceipt`.
|
|
21
21
|
*/
|
|
22
|
-
init(artifactRef: String, size: Double, sha256: String) {
|
|
23
|
-
self.init(std.string(artifactRef), size, std.string(sha256))
|
|
22
|
+
init(artifactRef: String, size: Double, sha256: String, expectedSha256Verified: Bool) {
|
|
23
|
+
self.init(std.string(artifactRef), size, std.string(sha256), expectedSha256Verified)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
var artifactRef: String {
|
|
@@ -55,4 +55,15 @@ public extension FirmwareArtifactReceipt {
|
|
|
55
55
|
self.__sha256 = std.string(newValue)
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
|
|
59
|
+
var expectedSha256Verified: Bool {
|
|
60
|
+
@inline(__always)
|
|
61
|
+
get {
|
|
62
|
+
return self.__expectedSha256Verified
|
|
63
|
+
}
|
|
64
|
+
@inline(__always)
|
|
65
|
+
set {
|
|
66
|
+
self.__expectedSha256Verified = newValue
|
|
67
|
+
}
|
|
68
|
+
}
|
|
58
69
|
}
|
|
@@ -37,10 +37,11 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
37
37
|
std::string artifactRef SWIFT_PRIVATE;
|
|
38
38
|
double size SWIFT_PRIVATE;
|
|
39
39
|
std::string sha256 SWIFT_PRIVATE;
|
|
40
|
+
bool expectedSha256Verified SWIFT_PRIVATE;
|
|
40
41
|
|
|
41
42
|
public:
|
|
42
43
|
FirmwareArtifactReceipt() = default;
|
|
43
|
-
explicit FirmwareArtifactReceipt(std::string artifactRef, double size, std::string sha256): artifactRef(artifactRef), size(size), sha256(sha256) {}
|
|
44
|
+
explicit FirmwareArtifactReceipt(std::string artifactRef, double size, std::string sha256, bool expectedSha256Verified): artifactRef(artifactRef), size(size), sha256(sha256), expectedSha256Verified(expectedSha256Verified) {}
|
|
44
45
|
};
|
|
45
46
|
|
|
46
47
|
} // namespace margelo::nitro::reactnativerangedownloader
|
|
@@ -55,7 +56,8 @@ namespace margelo::nitro {
|
|
|
55
56
|
return margelo::nitro::reactnativerangedownloader::FirmwareArtifactReceipt(
|
|
56
57
|
JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "artifactRef")),
|
|
57
58
|
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "size")),
|
|
58
|
-
JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "sha256"))
|
|
59
|
+
JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "sha256")),
|
|
60
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "expectedSha256Verified"))
|
|
59
61
|
);
|
|
60
62
|
}
|
|
61
63
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::reactnativerangedownloader::FirmwareArtifactReceipt& arg) {
|
|
@@ -63,6 +65,7 @@ namespace margelo::nitro {
|
|
|
63
65
|
obj.setProperty(runtime, "artifactRef", JSIConverter<std::string>::toJSI(runtime, arg.artifactRef));
|
|
64
66
|
obj.setProperty(runtime, "size", JSIConverter<double>::toJSI(runtime, arg.size));
|
|
65
67
|
obj.setProperty(runtime, "sha256", JSIConverter<std::string>::toJSI(runtime, arg.sha256));
|
|
68
|
+
obj.setProperty(runtime, "expectedSha256Verified", JSIConverter<bool>::toJSI(runtime, arg.expectedSha256Verified));
|
|
66
69
|
return obj;
|
|
67
70
|
}
|
|
68
71
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -76,6 +79,7 @@ namespace margelo::nitro {
|
|
|
76
79
|
if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "artifactRef"))) return false;
|
|
77
80
|
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "size"))) return false;
|
|
78
81
|
if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "sha256"))) return false;
|
|
82
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "expectedSha256Verified"))) return false;
|
|
79
83
|
return true;
|
|
80
84
|
}
|
|
81
85
|
};
|
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.11",
|
|
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,6 @@
|
|
|
88
88
|
"typescript": "^5.9.2"
|
|
89
89
|
},
|
|
90
90
|
"peerDependencies": {
|
|
91
|
-
"@onekeyfe/react-native-sni-connect": "3.0.81-alpha.8",
|
|
92
91
|
"react": "*",
|
|
93
92
|
"react-native": "*",
|
|
94
93
|
"react-native-nitro-modules": "0.33.2"
|
|
@@ -86,6 +86,9 @@ export interface FirmwareArtifactReceipt {
|
|
|
86
86
|
artifactRef: string;
|
|
87
87
|
size: number;
|
|
88
88
|
sha256: string;
|
|
89
|
+
// True only when sha256 was compared with expectedSha256 supplied by the caller.
|
|
90
|
+
// A locally computed content-address digest without that expectation is not trusted integrity.
|
|
91
|
+
expectedSha256Verified: boolean;
|
|
89
92
|
}
|
|
90
93
|
|
|
91
94
|
export interface FirmwareArtifactCapabilities {
|