@onekeyfe/react-native-range-downloader 3.0.81-alpha.9 → 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 (135) hide show
  1. package/ReactNativeRangeDownloader.podspec +1 -2
  2. package/android/build.gradle +0 -1
  3. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt +9 -25
  4. package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +6 -2
  5. package/ios/FirmwareArtifactStore.swift +33 -40
  6. package/ios/RangeDownloadLogic.swift +41 -2
  7. package/ios/ReactNativeRangeDownloader.swift +20 -15
  8. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +1 -0
  9. package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
  10. package/nitrogen/generated/android/c++/JDownloadChannel.hpp +6 -7
  11. package/nitrogen/generated/android/c++/JFirmwareArchiveExpectedEntry.hpp +2 -2
  12. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeParams.hpp +2 -2
  13. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeResult.hpp +2 -2
  14. package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializedArtifact.hpp +2 -2
  15. package/nitrogen/generated/android/c++/JFirmwareArtifactCancelParams.hpp +2 -2
  16. package/nitrogen/generated/android/c++/JFirmwareArtifactCapabilities.hpp +2 -2
  17. package/nitrogen/generated/android/c++/JFirmwareArtifactDownloadParams.hpp +2 -2
  18. package/nitrogen/generated/android/c++/JFirmwareArtifactLease.hpp +2 -2
  19. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseCreateParams.hpp +2 -2
  20. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseReleaseParams.hpp +2 -2
  21. package/nitrogen/generated/android/c++/JFirmwareArtifactLeaseRetainParams.hpp +2 -2
  22. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderCloseParams.hpp +2 -2
  23. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderInfo.hpp +2 -2
  24. package/nitrogen/generated/android/c++/JFirmwareArtifactReaderReadParams.hpp +2 -2
  25. package/nitrogen/generated/android/c++/JFirmwareArtifactReceipt.hpp +9 -5
  26. package/nitrogen/generated/android/c++/JFirmwareArtifactRefParams.hpp +2 -2
  27. package/nitrogen/generated/android/c++/JFirmwareArtifactSweepResult.hpp +2 -2
  28. package/nitrogen/generated/android/c++/JFunc_void_RangeDownloadEvent.hpp +3 -3
  29. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.cpp +39 -38
  30. package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.hpp +20 -22
  31. package/nitrogen/generated/android/c++/JRangeDownloadEvent.hpp +2 -2
  32. package/nitrogen/generated/android/c++/JRangeDownloadOutcome.hpp +6 -7
  33. package/nitrogen/generated/android/c++/JRangeDownloadParams.hpp +2 -2
  34. package/nitrogen/generated/android/c++/JRangeDownloadResult.hpp +2 -2
  35. package/nitrogen/generated/android/c++/JRangeFallbackKind.hpp +12 -13
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/DownloadChannel.kt +3 -1
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveExpectedEntry.kt +2 -2
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams.kt +2 -2
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeResult.kt +2 -2
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializedArtifact.kt +2 -2
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCancelParams.kt +2 -2
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCapabilities.kt +2 -2
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams.kt +2 -2
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLease.kt +2 -2
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseCreateParams.kt +2 -2
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseReleaseParams.kt +2 -2
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseRetainParams.kt +2 -2
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderCloseParams.kt +2 -2
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderInfo.kt +2 -2
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReaderReadParams.kt +2 -2
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactReceipt.kt +8 -5
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactRefParams.kt +2 -2
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactSweepResult.kt +2 -2
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/Func_void_RangeDownloadEvent.kt +1 -1
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/HybridReactNativeRangeDownloaderSpec.kt +16 -19
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadEvent.kt +2 -2
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadOutcome.kt +3 -1
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadParams.kt +2 -2
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadResult.kt +2 -2
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeFallbackKind.kt +3 -1
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/reactnativerangedownloaderOnLoad.kt +1 -1
  62. package/nitrogen/generated/android/reactnativerangedownloader+autolinking.cmake +1 -1
  63. package/nitrogen/generated/android/reactnativerangedownloader+autolinking.gradle +1 -1
  64. package/nitrogen/generated/android/reactnativerangedownloaderOnLoad.cpp +28 -18
  65. package/nitrogen/generated/android/reactnativerangedownloaderOnLoad.hpp +14 -5
  66. package/nitrogen/generated/ios/ReactNativeRangeDownloader+autolinking.rb +2 -2
  67. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.cpp +1 -1
  68. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.hpp +5 -5
  69. package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Umbrella.hpp +1 -1
  70. package/nitrogen/generated/ios/ReactNativeRangeDownloaderAutolinking.mm +1 -1
  71. package/nitrogen/generated/ios/ReactNativeRangeDownloaderAutolinking.swift +9 -8
  72. package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.cpp +1 -1
  73. package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.hpp +7 -1
  74. package/nitrogen/generated/ios/swift/DownloadChannel.swift +1 -1
  75. package/nitrogen/generated/ios/swift/FirmwareArchiveExpectedEntry.swift +9 -34
  76. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeParams.swift +14 -45
  77. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeResult.swift +3 -16
  78. package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializedArtifact.swift +5 -18
  79. package/nitrogen/generated/ios/swift/FirmwareArtifactCancelParams.swift +3 -10
  80. package/nitrogen/generated/ios/swift/FirmwareArtifactCapabilities.swift +9 -40
  81. package/nitrogen/generated/ios/swift/FirmwareArtifactDownloadParams.swift +51 -128
  82. package/nitrogen/generated/ios/swift/FirmwareArtifactLease.swift +3 -10
  83. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseCreateParams.swift +3 -10
  84. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseReleaseParams.swift +5 -18
  85. package/nitrogen/generated/ios/swift/FirmwareArtifactLeaseRetainParams.swift +5 -18
  86. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderCloseParams.swift +3 -10
  87. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderInfo.swift +5 -18
  88. package/nitrogen/generated/ios/swift/FirmwareArtifactReaderReadParams.swift +7 -26
  89. package/nitrogen/generated/ios/swift/FirmwareArtifactReceipt.swift +14 -28
  90. package/nitrogen/generated/ios/swift/FirmwareArtifactRefParams.swift +3 -10
  91. package/nitrogen/generated/ios/swift/FirmwareArtifactSweepResult.swift +5 -18
  92. package/nitrogen/generated/ios/swift/Func_void.swift +1 -2
  93. package/nitrogen/generated/ios/swift/Func_void_FirmwareArchiveMaterializeResult.swift +1 -2
  94. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactLease.swift +1 -2
  95. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReaderInfo.swift +1 -2
  96. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactReceipt.swift +1 -2
  97. package/nitrogen/generated/ios/swift/Func_void_FirmwareArtifactSweepResult.swift +1 -2
  98. package/nitrogen/generated/ios/swift/Func_void_RangeDownloadEvent.swift +1 -2
  99. package/nitrogen/generated/ios/swift/Func_void_RangeDownloadResult.swift +1 -2
  100. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -2
  101. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_ArrayBuffer_.swift +1 -2
  102. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec.swift +3 -4
  103. package/nitrogen/generated/ios/swift/HybridReactNativeRangeDownloaderSpec_cxx.swift +9 -2
  104. package/nitrogen/generated/ios/swift/RangeDownloadEvent.swift +11 -42
  105. package/nitrogen/generated/ios/swift/RangeDownloadOutcome.swift +1 -1
  106. package/nitrogen/generated/ios/swift/RangeDownloadParams.swift +72 -139
  107. package/nitrogen/generated/ios/swift/RangeDownloadResult.swift +16 -53
  108. package/nitrogen/generated/ios/swift/RangeFallbackKind.swift +1 -1
  109. package/nitrogen/generated/shared/c++/DownloadChannel.hpp +1 -1
  110. package/nitrogen/generated/shared/c++/FirmwareArchiveExpectedEntry.hpp +22 -14
  111. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeParams.hpp +19 -11
  112. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeResult.hpp +13 -5
  113. package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializedArtifact.hpp +16 -8
  114. package/nitrogen/generated/shared/c++/FirmwareArtifactCancelParams.hpp +13 -5
  115. package/nitrogen/generated/shared/c++/FirmwareArtifactCapabilities.hpp +22 -14
  116. package/nitrogen/generated/shared/c++/FirmwareArtifactDownloadParams.hpp +43 -35
  117. package/nitrogen/generated/shared/c++/FirmwareArtifactLease.hpp +13 -5
  118. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseCreateParams.hpp +13 -5
  119. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseReleaseParams.hpp +16 -8
  120. package/nitrogen/generated/shared/c++/FirmwareArtifactLeaseRetainParams.hpp +16 -8
  121. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderCloseParams.hpp +13 -5
  122. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderInfo.hpp +16 -8
  123. package/nitrogen/generated/shared/c++/FirmwareArtifactReaderReadParams.hpp +19 -11
  124. package/nitrogen/generated/shared/c++/FirmwareArtifactReceipt.hpp +24 -12
  125. package/nitrogen/generated/shared/c++/FirmwareArtifactRefParams.hpp +13 -5
  126. package/nitrogen/generated/shared/c++/FirmwareArtifactSweepResult.hpp +16 -8
  127. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.cpp +1 -1
  128. package/nitrogen/generated/shared/c++/HybridReactNativeRangeDownloaderSpec.hpp +1 -1
  129. package/nitrogen/generated/shared/c++/RangeDownloadEvent.hpp +25 -17
  130. package/nitrogen/generated/shared/c++/RangeDownloadOutcome.hpp +1 -1
  131. package/nitrogen/generated/shared/c++/RangeDownloadParams.hpp +43 -35
  132. package/nitrogen/generated/shared/c++/RangeDownloadResult.hpp +22 -14
  133. package/nitrogen/generated/shared/c++/RangeFallbackKind.hpp +1 -1
  134. package/package.json +5 -7
  135. 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', '>= 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(
@@ -549,7 +541,8 @@ final class FirmwareArtifactStore {
549
541
  transactionId: params.transactionId,
550
542
  taskId: params.taskId,
551
543
  expectedSize: validated.expectedSize,
552
- expectedSha256: validated.expectedSha256
544
+ expectedSha256: validated.expectedSha256,
545
+ downloadToken: validated.downloadToken
553
546
  )
554
547
  markDownloadActive(validated.downloadToken, delta: 1)
555
548
  do {
@@ -1149,6 +1142,20 @@ final class FirmwareArtifactStore {
1149
1142
  if let expectedEntries {
1150
1143
  return try validateArchiveRequirements(expectedEntries)
1151
1144
  }
1145
+ if let issue = firmwareArchiveDiscoveredEntriesIssue(
1146
+ archiveEntries.map(\.name)
1147
+ ) {
1148
+ switch issue {
1149
+ case .empty:
1150
+ throw FirmwareArtifactStoreError.archiveInvalid(
1151
+ "Firmware archive must contain at least one entry"
1152
+ )
1153
+ case .duplicateName:
1154
+ throw FirmwareArtifactStoreError.archiveInvalid(
1155
+ "Firmware archive contains duplicate entry names"
1156
+ )
1157
+ }
1158
+ }
1152
1159
  return archiveEntries.map {
1153
1160
  FirmwareArchiveRequirement(
1154
1161
  entryName: $0.name,
@@ -1319,27 +1326,13 @@ final class FirmwareArtifactStore {
1319
1326
  self?.isTransactionCancelled(params.transactionId) == true
1320
1327
  }
1321
1328
  )
1322
- let pinnedSession: SniConnectPinnedSession?
1323
- if params.routeType == "pinnedIp" {
1324
- pinnedSession = try SniConnectPinnedTransport.makeSession(
1325
- hostname: hostname,
1326
- ip: params.resolvedIp!,
1327
- dataDelegate: streamDelegate
1328
- )
1329
- } else {
1330
- pinnedSession = nil
1331
- }
1332
- let session = pinnedSession?.session ?? URLSession(
1329
+ let session = URLSession(
1333
1330
  configuration: .ephemeral,
1334
1331
  delegate: streamDelegate,
1335
1332
  delegateQueue: nil
1336
1333
  )
1337
1334
  defer {
1338
- if let pinnedSession {
1339
- pinnedSession.close()
1340
- } else {
1341
- session.finishTasksAndInvalidate()
1342
- }
1335
+ session.finishTasksAndInvalidate()
1343
1336
  }
1344
1337
 
1345
1338
  do {
@@ -49,9 +49,28 @@ func firmwareArtifactDownloadKey(
49
49
  transactionId: String,
50
50
  taskId: String,
51
51
  expectedSize: Int64?,
52
- expectedSha256: String?
52
+ expectedSha256: String?,
53
+ downloadToken: String
53
54
  ) -> String {
54
- "\(transactionId)|\(taskId)|\(expectedSize.map(String.init) ?? "unknown")|\(expectedSha256 ?? "unknown")"
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
55
74
  }
56
75
 
57
76
  func firmwareArtifactDownloadToken(
@@ -123,6 +142,26 @@ func firmwareArtifactResponseFits(
123
142
  let firmwareArtifactFinalGrace: TimeInterval = 24 * 60 * 60
124
143
  let firmwareArtifactPartialGrace: TimeInterval = 7 * 24 * 60 * 60
125
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
+ }
126
165
 
127
166
  func firmwareArtifactIdentifierIsSafe(_ value: String) -> Bool {
128
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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"}
@@ -2,7 +2,7 @@
2
2
  /// JDownloadChannel.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -19,7 +19,7 @@ namespace margelo::nitro::reactnativerangedownloader {
19
19
  */
20
20
  struct JDownloadChannel final: public jni::JavaClass<JDownloadChannel> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/DownloadChannel;";
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/DownloadChannel;";
23
23
 
24
24
  public:
25
25
  /**
@@ -41,19 +41,18 @@ namespace margelo::nitro::reactnativerangedownloader {
41
41
  [[maybe_unused]]
42
42
  static jni::alias_ref<JDownloadChannel> fromCpp(DownloadChannel value) {
43
43
  static const auto clazz = javaClassStatic();
44
- static const auto fieldBUNDLE = clazz->getStaticField<JDownloadChannel>("BUNDLE");
45
- static const auto fieldAPK = clazz->getStaticField<JDownloadChannel>("APK");
46
- static const auto fieldCHART = clazz->getStaticField<JDownloadChannel>("CHART");
47
- static const auto fieldFIRMWARE = clazz->getStaticField<JDownloadChannel>("FIRMWARE");
48
-
49
44
  switch (value) {
50
45
  case DownloadChannel::BUNDLE:
46
+ static const auto fieldBUNDLE = clazz->getStaticField<JDownloadChannel>("BUNDLE");
51
47
  return clazz->getStaticFieldValue(fieldBUNDLE);
52
48
  case DownloadChannel::APK:
49
+ static const auto fieldAPK = clazz->getStaticField<JDownloadChannel>("APK");
53
50
  return clazz->getStaticFieldValue(fieldAPK);
54
51
  case DownloadChannel::CHART:
52
+ static const auto fieldCHART = clazz->getStaticField<JDownloadChannel>("CHART");
55
53
  return clazz->getStaticFieldValue(fieldCHART);
56
54
  case DownloadChannel::FIRMWARE:
55
+ static const auto fieldFIRMWARE = clazz->getStaticField<JDownloadChannel>("FIRMWARE");
57
56
  return clazz->getStaticFieldValue(fieldFIRMWARE);
58
57
  default:
59
58
  std::string stringValue = std::to_string(static_cast<int>(value));
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArchiveExpectedEntry.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::reactnativerangedownloader {
21
21
  */
22
22
  struct JFirmwareArchiveExpectedEntry final: public jni::JavaClass<JFirmwareArchiveExpectedEntry> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveExpectedEntry;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveExpectedEntry;";
25
25
 
26
26
  public:
27
27
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArchiveMaterializeParams.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -25,7 +25,7 @@ namespace margelo::nitro::reactnativerangedownloader {
25
25
  */
26
26
  struct JFirmwareArchiveMaterializeParams final: public jni::JavaClass<JFirmwareArchiveMaterializeParams> {
27
27
  public:
28
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams;";
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams;";
29
29
 
30
30
  public:
31
31
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArchiveMaterializeResult.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -26,7 +26,7 @@ namespace margelo::nitro::reactnativerangedownloader {
26
26
  */
27
27
  struct JFirmwareArchiveMaterializeResult final: public jni::JavaClass<JFirmwareArchiveMaterializeResult> {
28
28
  public:
29
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeResult;";
29
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeResult;";
30
30
 
31
31
  public:
32
32
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArchiveMaterializedArtifact.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -23,7 +23,7 @@ namespace margelo::nitro::reactnativerangedownloader {
23
23
  */
24
24
  struct JFirmwareArchiveMaterializedArtifact final: public jni::JavaClass<JFirmwareArchiveMaterializedArtifact> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializedArtifact;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializedArtifact;";
27
27
 
28
28
  public:
29
29
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArtifactCancelParams.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::reactnativerangedownloader {
21
21
  */
22
22
  struct JFirmwareArtifactCancelParams final: public jni::JavaClass<JFirmwareArtifactCancelParams> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCancelParams;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCancelParams;";
25
25
 
26
26
  public:
27
27
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArtifactCapabilities.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -22,7 +22,7 @@ namespace margelo::nitro::reactnativerangedownloader {
22
22
  */
23
23
  struct JFirmwareArtifactCapabilities final: public jni::JavaClass<JFirmwareArtifactCapabilities> {
24
24
  public:
25
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCapabilities;";
25
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactCapabilities;";
26
26
 
27
27
  public:
28
28
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArtifactDownloadParams.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -22,7 +22,7 @@ namespace margelo::nitro::reactnativerangedownloader {
22
22
  */
23
23
  struct JFirmwareArtifactDownloadParams final: public jni::JavaClass<JFirmwareArtifactDownloadParams> {
24
24
  public:
25
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams;";
25
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams;";
26
26
 
27
27
  public:
28
28
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArtifactLease.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::reactnativerangedownloader {
21
21
  */
22
22
  struct JFirmwareArtifactLease final: public jni::JavaClass<JFirmwareArtifactLease> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLease;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLease;";
25
25
 
26
26
  public:
27
27
  /**
@@ -2,7 +2,7 @@
2
2
  /// JFirmwareArtifactLeaseCreateParams.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::reactnativerangedownloader {
21
21
  */
22
22
  struct JFirmwareArtifactLeaseCreateParams final: public jni::JavaClass<JFirmwareArtifactLeaseCreateParams> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseCreateParams;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/FirmwareArtifactLeaseCreateParams;";
25
25
 
26
26
  public:
27
27
  /**