@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.
@@ -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', '>= 2.5.4'
31
+ s.dependency 'SSZipArchive', '2.5.5'
33
32
 
34
33
  load 'nitrogen/generated/ios/ReactNativeRangeDownloader+autolinking.rb'
35
34
  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,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
- private const val MAX_ARTIFACT_BYTES = 512L * 1024 * 1024
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" || params.routeType == "pinnedIp") {
380
+ require(params.routeType == "domain") {
383
381
  "Invalid firmware route type"
384
382
  }
385
- if (params.routeType == "pinnedIp") {
386
- require(!params.resolvedIp.isNullOrEmpty()) {
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 = if (params.routeType == "pinnedIp") {
459
- SniPinnedTransport.createClient(
460
- ip = checkNotNull(params.resolvedIp),
461
- hostname = validated.hostname,
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 = 3.0,
276
- supportedRouteTypes = arrayOf("domain", "pinnedIp"),
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 = 256 * 1024
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.isFinite,
466
- value > 0,
467
- value <= Double(Int64.max),
468
- value.rounded() == value
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 = Int64(value)
473
+ expectedSize = converted
475
474
  } else {
476
475
  expectedSize = nil
477
476
  }
478
- guard
479
- params.maxBytes.isFinite,
480
- params.maxBytes > 0,
481
- params.maxBytes <= Double(Int64.max),
482
- params.maxBytes.rounded() == params.maxBytes,
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" || params.routeType == "pinnedIp" else {
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.routeType == "pinnedIp" {
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 pinnedSession: SniConnectPinnedSession?
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
- if let pinnedSession {
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: 3,
112
- supportedRouteTypes: ["domain", "pinnedIp"],
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
- params.offset.isFinite,
189
- params.offset >= 0,
190
- params.offset <= Double(Int64.max),
191
- params.offset.rounded() == params.offset,
192
- params.length.isFinite,
193
- params.length > 0,
194
- params.length <= Double(Int.max),
195
- params.length.rounded() == params.length
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: Int64(params.offset),
204
- length: Int(params.length)
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
  }
@@ -45,6 +45,7 @@ export interface FirmwareArtifactReceipt {
45
45
  artifactRef: string;
46
46
  size: number;
47
47
  sha256: string;
48
+ expectedSha256Verified: boolean;
48
49
  }
49
50
  export interface FirmwareArtifactCapabilities {
50
51
  firmwareArtifactProtocolVersion: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"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"}
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.10",
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 {