@onekeyfe/hd-core 1.2.0-alpha.24 → 1.2.0-alpha.26

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 (493) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +2 -0
  2. package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
  3. package/__tests__/connectSettings.test.ts +47 -5
  4. package/__tests__/device-state-events.test.ts +124 -0
  5. package/__tests__/evmLedgerLegacySafety.test.ts +3 -1
  6. package/__tests__/firmware-update/check-all-firmware-release.test.ts +127 -0
  7. package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
  8. package/__tests__/firmware-update/firmware-host-binding.test.ts +70 -0
  9. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  10. package/__tests__/firmware-update/firmware-update-plan.test.ts +354 -0
  11. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +213 -0
  12. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +39 -30
  13. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  14. package/__tests__/kaspa-public-types.type-test.ts +16 -0
  15. package/__tests__/kaspaSignTransaction.test.ts +4 -3
  16. package/__tests__/method-protocol-support.test.ts +113 -0
  17. package/__tests__/protocol-v2.test.ts +400 -123
  18. package/__tests__/public-device-state-api.test.ts +10 -8
  19. package/__tests__/tron-sign-message-init.test.ts +74 -0
  20. package/dist/api/BaseMethod.d.ts +6 -2
  21. package/dist/api/BaseMethod.d.ts.map +1 -1
  22. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  23. package/dist/api/CipherKeyValue.d.ts +1 -0
  24. package/dist/api/CipherKeyValue.d.ts.map +1 -1
  25. package/dist/api/DirList.d.ts +1 -0
  26. package/dist/api/DirList.d.ts.map +1 -1
  27. package/dist/api/DirMake.d.ts +1 -0
  28. package/dist/api/DirMake.d.ts.map +1 -1
  29. package/dist/api/DirRemove.d.ts +1 -0
  30. package/dist/api/DirRemove.d.ts.map +1 -1
  31. package/dist/api/FileDelete.d.ts +1 -0
  32. package/dist/api/FileDelete.d.ts.map +1 -1
  33. package/dist/api/FileRead.d.ts +1 -0
  34. package/dist/api/FileRead.d.ts.map +1 -1
  35. package/dist/api/FileWrite.d.ts +1 -0
  36. package/dist/api/FileWrite.d.ts.map +1 -1
  37. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  38. package/dist/api/FirmwareUpdateV2.d.ts +11 -0
  39. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  40. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  41. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  42. package/dist/api/FirmwareUpdateV4.d.ts +23 -5
  43. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  44. package/dist/api/GetDeviceState.d.ts +1 -0
  45. package/dist/api/GetDeviceState.d.ts.map +1 -1
  46. package/dist/api/GetFeatures.d.ts.map +1 -1
  47. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  48. package/dist/api/GetPassphraseState.d.ts +1 -0
  49. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  50. package/dist/api/OpenWalletSession.d.ts +1 -0
  51. package/dist/api/OpenWalletSession.d.ts.map +1 -1
  52. package/dist/api/PathInfo.d.ts +1 -0
  53. package/dist/api/PathInfo.d.ts.map +1 -1
  54. package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
  55. package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
  56. package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
  57. package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
  58. package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
  59. package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
  60. package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
  61. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
  62. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  63. package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
  64. package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
  65. package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
  66. package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
  67. package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
  68. package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
  69. package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
  70. package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
  71. package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
  72. package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
  73. package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
  74. package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
  75. package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
  76. package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
  77. package/dist/api/btc/BTCGetAddress.d.ts +1 -0
  78. package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
  79. package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
  80. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  81. package/dist/api/btc/BTCSignMessage.d.ts +1 -0
  82. package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
  83. package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
  84. package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
  85. package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
  86. package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
  87. package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
  88. package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
  89. package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
  90. package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
  91. package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
  92. package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
  93. package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
  94. package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
  95. package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
  96. package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
  97. package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
  98. package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
  99. package/dist/api/conflux/ConfluxGetAddress.d.ts +1 -0
  100. package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
  101. package/dist/api/conflux/ConfluxSignMessage.d.ts +1 -0
  102. package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
  103. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +1 -0
  104. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
  105. package/dist/api/conflux/ConfluxSignTransaction.d.ts +1 -0
  106. package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
  107. package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
  108. package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
  109. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
  110. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  111. package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
  112. package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
  113. package/dist/api/device/DeviceCancel.d.ts +1 -0
  114. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  115. package/dist/api/device/DeviceChangePin.d.ts +1 -0
  116. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  117. package/dist/api/device/DeviceLock.d.ts +1 -0
  118. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  119. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
  120. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  121. package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
  122. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  123. package/dist/api/device/DeviceSettings.d.ts +1 -0
  124. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  125. package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
  126. package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
  127. package/dist/api/device/DeviceUnlock.d.ts +1 -0
  128. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  129. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  130. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  131. package/dist/api/device/DeviceWipe.d.ts +1 -0
  132. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  133. package/dist/api/device/PreInitialize.d.ts +1 -0
  134. package/dist/api/device/PreInitialize.d.ts.map +1 -1
  135. package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
  136. package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
  137. package/dist/api/evm/EVMGetAddress.d.ts +1 -0
  138. package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
  139. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  140. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  141. package/dist/api/evm/EVMSignMessage.d.ts +1 -0
  142. package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
  143. package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
  144. package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
  145. package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
  146. package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
  147. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  148. package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
  149. package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
  150. package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
  151. package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
  152. package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
  153. package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
  154. package/dist/api/firmware/FirmwareArtifactSource.d.ts +25 -0
  155. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  156. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  157. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  158. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +7 -0
  159. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  160. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  161. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  162. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +23 -0
  163. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  164. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +30 -0
  165. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  166. package/dist/api/firmware/getBinary.d.ts +7 -0
  167. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  168. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  169. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  170. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  171. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  172. package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -0
  173. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
  174. package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -0
  175. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  176. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  177. package/dist/api/lightning/LnurlAuth.d.ts +0 -4
  178. package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
  179. package/dist/api/near/NearGetAddress.d.ts +1 -0
  180. package/dist/api/near/NearGetAddress.d.ts.map +1 -1
  181. package/dist/api/near/NearSignTransaction.d.ts +1 -0
  182. package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
  183. package/dist/api/nem/NEMGetAddress.d.ts +1 -0
  184. package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
  185. package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
  186. package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
  187. package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
  188. package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
  189. package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
  190. package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
  191. package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
  192. package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
  193. package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
  194. package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
  195. package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
  196. package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
  197. package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
  198. package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
  199. package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
  200. package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
  201. package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
  202. package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
  203. package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -0
  204. package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
  205. package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
  206. package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
  207. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +1 -0
  208. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -1
  209. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +1 -0
  210. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -1
  211. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +1 -0
  212. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  213. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -0
  214. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  215. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +1 -0
  216. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
  217. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +1 -0
  218. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -1
  219. package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
  220. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  221. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +1 -0
  222. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -1
  223. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +1 -0
  224. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
  225. package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
  226. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  227. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +1 -0
  228. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -1
  229. package/dist/api/protocol-v2/Ping.d.ts +1 -0
  230. package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
  231. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +1 -0
  232. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  233. package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
  234. package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
  235. package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
  236. package/dist/api/solana/SolGetAddress.d.ts +1 -0
  237. package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
  238. package/dist/api/solana/SolSignMessage.d.ts +1 -0
  239. package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
  240. package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -0
  241. package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
  242. package/dist/api/solana/SolSignTransaction.d.ts +1 -0
  243. package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
  244. package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
  245. package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
  246. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
  247. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
  248. package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
  249. package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
  250. package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
  251. package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
  252. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
  253. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
  254. package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
  255. package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
  256. package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
  257. package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
  258. package/dist/api/sui/SuiGetAddress.d.ts +1 -0
  259. package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
  260. package/dist/api/sui/SuiGetPublicKey.d.ts +1 -0
  261. package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
  262. package/dist/api/sui/SuiSignMessage.d.ts +1 -0
  263. package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
  264. package/dist/api/sui/SuiSignTransaction.d.ts +1 -0
  265. package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
  266. package/dist/api/ton/TonGetAddress.d.ts +1 -0
  267. package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
  268. package/dist/api/ton/TonSignData.d.ts +1 -0
  269. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  270. package/dist/api/ton/TonSignMessage.d.ts +1 -0
  271. package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
  272. package/dist/api/ton/TonSignProof.d.ts +1 -0
  273. package/dist/api/ton/TonSignProof.d.ts.map +1 -1
  274. package/dist/api/tron/TronGetAddress.d.ts +1 -0
  275. package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
  276. package/dist/api/tron/TronSignMessage.d.ts +5 -0
  277. package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
  278. package/dist/api/tron/TronSignTransaction.d.ts +1 -0
  279. package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
  280. package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
  281. package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
  282. package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
  283. package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
  284. package/dist/core/index.d.ts.map +1 -1
  285. package/dist/data-manager/DataManager.d.ts +1 -0
  286. package/dist/data-manager/DataManager.d.ts.map +1 -1
  287. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  288. package/dist/device/Device.d.ts +3 -1
  289. package/dist/device/Device.d.ts.map +1 -1
  290. package/dist/index.d.ts +271 -87
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +2864 -893
  293. package/dist/inject.d.ts.map +1 -1
  294. package/dist/lowLevelInject.d.ts.map +1 -1
  295. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -1
  296. package/dist/topLevelInject.d.ts.map +1 -1
  297. package/dist/types/api/checkAllFirmwareRelease.d.ts +3 -0
  298. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  299. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  300. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  301. package/dist/types/api/export.d.ts +5 -2
  302. package/dist/types/api/export.d.ts.map +1 -1
  303. package/dist/types/api/firmwareUpdate.d.ts +69 -0
  304. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  305. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  306. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  307. package/dist/types/api/firmwareUpdatePlan.d.ts +27 -0
  308. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  309. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  310. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  311. package/dist/types/api/index.d.ts +9 -1
  312. package/dist/types/api/index.d.ts.map +1 -1
  313. package/dist/types/api/kaspaSignTransaction.d.ts +15 -2
  314. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  315. package/dist/types/device.d.ts +0 -1
  316. package/dist/types/device.d.ts.map +1 -1
  317. package/dist/types/settings.d.ts +13 -0
  318. package/dist/types/settings.d.ts.map +1 -1
  319. package/dist/utils/deviceInfoUtils.d.ts +0 -1
  320. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  321. package/dist/utils/deviceVersionUtils.d.ts +1 -0
  322. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  323. package/dist/utils/index.d.ts +1 -1
  324. package/dist/utils/index.d.ts.map +1 -1
  325. package/package.json +4 -4
  326. package/src/api/BaseMethod.ts +21 -18
  327. package/src/api/CheckAllFirmwareRelease.ts +44 -4
  328. package/src/api/CipherKeyValue.ts +4 -0
  329. package/src/api/DirList.ts +4 -1
  330. package/src/api/DirMake.ts +4 -1
  331. package/src/api/DirRemove.ts +4 -1
  332. package/src/api/FileDelete.ts +4 -1
  333. package/src/api/FileRead.ts +4 -1
  334. package/src/api/FileWrite.ts +4 -1
  335. package/src/api/FirmwareUpdate.ts +0 -8
  336. package/src/api/FirmwareUpdateV2.ts +292 -120
  337. package/src/api/FirmwareUpdateV3.ts +256 -61
  338. package/src/api/FirmwareUpdateV4.ts +767 -289
  339. package/src/api/GetDeviceState.ts +4 -0
  340. package/src/api/GetFeatures.ts +1 -4
  341. package/src/api/GetOnekeyFeatures.ts +0 -5
  342. package/src/api/GetPassphraseState.ts +4 -0
  343. package/src/api/OpenWalletSession.ts +4 -0
  344. package/src/api/PathInfo.ts +4 -1
  345. package/src/api/UploadPortfolio.ts +1 -1
  346. package/src/api/alephium/AlephiumGetAddress.ts +0 -4
  347. package/src/api/alephium/AlephiumSignMessage.ts +0 -4
  348. package/src/api/alephium/AlephiumSignTransaction.ts +0 -4
  349. package/src/api/algo/AlgoGetAddress.ts +4 -0
  350. package/src/api/algo/AlgoSignTransaction.ts +4 -0
  351. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +5 -13
  352. package/src/api/aptos/AptosGetAddress.ts +4 -0
  353. package/src/api/aptos/AptosGetPublicKey.ts +4 -0
  354. package/src/api/aptos/AptosSignInMessage.ts +4 -0
  355. package/src/api/aptos/AptosSignMessage.ts +4 -0
  356. package/src/api/aptos/AptosSignTransaction.ts +4 -0
  357. package/src/api/benfen/BenfenGetAddress.ts +11 -7
  358. package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
  359. package/src/api/benfen/BenfenSignMessage.ts +0 -4
  360. package/src/api/benfen/BenfenSignTransaction.ts +0 -4
  361. package/src/api/btc/BTCGetAddress.ts +8 -1
  362. package/src/api/btc/BTCGetPublicKey.ts +8 -1
  363. package/src/api/btc/BTCSignMessage.ts +8 -1
  364. package/src/api/btc/BTCSignPsbt.ts +4 -0
  365. package/src/api/btc/BTCSignTransaction.ts +8 -1
  366. package/src/api/btc/BTCVerifyMessage.ts +8 -1
  367. package/src/api/btc/helpers/versionLimit.ts +7 -4
  368. package/src/api/cardano/CardanoGetAddress.ts +4 -0
  369. package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
  370. package/src/api/cardano/CardanoSignMessage.ts +4 -0
  371. package/src/api/cardano/CardanoSignTransaction.ts +4 -0
  372. package/src/api/conflux/ConfluxGetAddress.ts +4 -0
  373. package/src/api/conflux/ConfluxSignMessage.ts +4 -0
  374. package/src/api/conflux/ConfluxSignMessageCIP23.ts +4 -0
  375. package/src/api/conflux/ConfluxSignTransaction.ts +6 -5
  376. package/src/api/cosmos/CosmosGetAddress.ts +4 -0
  377. package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
  378. package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
  379. package/src/api/device/DeviceCancel.ts +4 -0
  380. package/src/api/device/DeviceChangePin.ts +4 -0
  381. package/src/api/device/DeviceLock.ts +4 -0
  382. package/src/api/device/DeviceRebootToBoardloader.ts +4 -0
  383. package/src/api/device/DeviceRebootToBootloader.ts +4 -0
  384. package/src/api/device/DeviceSettings.ts +4 -0
  385. package/src/api/device/DeviceSupportFeatures.ts +4 -0
  386. package/src/api/device/DeviceUnlock.ts +4 -0
  387. package/src/api/device/DeviceUpdateBootloader.ts +122 -6
  388. package/src/api/device/DeviceWipe.ts +4 -0
  389. package/src/api/device/PreInitialize.ts +4 -0
  390. package/src/api/dynex/DnxGetAddress.ts +0 -6
  391. package/src/api/dynex/DnxSignTransaction.ts +0 -6
  392. package/src/api/evm/EVMGetAddress.ts +4 -0
  393. package/src/api/evm/EVMGetPublicKey.ts +4 -0
  394. package/src/api/evm/EVMSignMessage.ts +4 -0
  395. package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
  396. package/src/api/evm/EVMSignTransaction.ts +4 -0
  397. package/src/api/evm/EVMSignTypedData.ts +4 -0
  398. package/src/api/evm/EVMVerifyMessage.ts +4 -0
  399. package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
  400. package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
  401. package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
  402. package/src/api/firmware/FirmwareHostBinding.ts +100 -0
  403. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +50 -0
  404. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  405. package/src/api/firmware/FirmwareUpdatePlan.ts +628 -0
  406. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +392 -0
  407. package/src/api/firmware/updateBootloader.ts +19 -4
  408. package/src/api/firmware/uploadFirmware.ts +140 -22
  409. package/src/api/kaspa/KaspaGetAddress.ts +4 -0
  410. package/src/api/kaspa/KaspaSignTransaction.ts +37 -15
  411. package/src/api/kaspa/helpers/TransferSerialize.ts +3 -7
  412. package/src/api/lightning/LnurlAuth.ts +0 -4
  413. package/src/api/near/NearGetAddress.ts +4 -0
  414. package/src/api/near/NearSignTransaction.ts +4 -0
  415. package/src/api/nem/NEMGetAddress.ts +4 -0
  416. package/src/api/nem/NEMSignTransaction.ts +4 -0
  417. package/src/api/neo/NeoGetAddress.ts +0 -4
  418. package/src/api/neo/NeoSignTransaction.ts +0 -4
  419. package/src/api/nervos/NervosGetAddress.ts +0 -4
  420. package/src/api/nervos/NervosSignTransaction.ts +0 -4
  421. package/src/api/nexa/NexaGetAddress.ts +0 -4
  422. package/src/api/nexa/NexaSignTransaction.ts +0 -4
  423. package/src/api/nostr/NostrDecryptMessage.ts +4 -0
  424. package/src/api/nostr/NostrEncryptMessage.ts +4 -0
  425. package/src/api/nostr/NostrGetPublicKey.ts +4 -0
  426. package/src/api/nostr/NostrSignEvent.ts +4 -0
  427. package/src/api/nostr/NostrSignSchnorr.ts +4 -0
  428. package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
  429. package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
  430. package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +4 -1
  431. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +4 -1
  432. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +4 -1
  433. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +4 -1
  434. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +4 -1
  435. package/src/api/protocol-v2/DeviceInfoGet.ts +4 -8
  436. package/src/api/protocol-v2/DeviceReboot.ts +4 -2
  437. package/src/api/protocol-v2/DeviceStatusGet.ts +4 -1
  438. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +4 -1
  439. package/src/api/protocol-v2/FilesystemFormat.ts +4 -1
  440. package/src/api/protocol-v2/FilesystemPermissionFix.ts +4 -1
  441. package/src/api/protocol-v2/Ping.ts +4 -1
  442. package/src/api/protocol-v2/ProtocolInfoRequest.ts +4 -1
  443. package/src/api/scdo/ScdoGetAddress.ts +0 -4
  444. package/src/api/scdo/ScdoSignMessage.ts +0 -4
  445. package/src/api/scdo/ScdoSignTransaction.ts +0 -4
  446. package/src/api/solana/SolGetAddress.ts +4 -0
  447. package/src/api/solana/SolSignMessage.ts +4 -0
  448. package/src/api/solana/SolSignOffchainMessage.ts +4 -0
  449. package/src/api/solana/SolSignTransaction.ts +4 -0
  450. package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
  451. package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
  452. package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
  453. package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
  454. package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
  455. package/src/api/stellar/StellarGetAddress.ts +1 -10
  456. package/src/api/stellar/StellarSignTransaction.ts +1 -14
  457. package/src/api/sui/SuiGetAddress.ts +4 -0
  458. package/src/api/sui/SuiGetPublicKey.ts +4 -0
  459. package/src/api/sui/SuiSignMessage.ts +4 -0
  460. package/src/api/sui/SuiSignTransaction.ts +4 -0
  461. package/src/api/ton/TonGetAddress.ts +4 -0
  462. package/src/api/ton/TonSignData.ts +5 -1
  463. package/src/api/ton/TonSignMessage.ts +4 -0
  464. package/src/api/ton/TonSignProof.ts +4 -0
  465. package/src/api/tron/TronGetAddress.ts +4 -0
  466. package/src/api/tron/TronSignMessage.ts +18 -7
  467. package/src/api/tron/TronSignTransaction.ts +4 -0
  468. package/src/api/xrp/XrpGetAddress.ts +4 -0
  469. package/src/api/xrp/XrpSignTransaction.ts +5 -1
  470. package/src/core/index.ts +4 -17
  471. package/src/data-manager/DataManager.ts +33 -33
  472. package/src/data-manager/connectSettings.ts +11 -0
  473. package/src/device/Device.ts +53 -53
  474. package/src/index.ts +5 -0
  475. package/src/inject.ts +22 -2
  476. package/src/lowLevelInject.ts +5 -1
  477. package/src/protocols/protocol-v2/unlockRetry.ts +18 -11
  478. package/src/topLevelInject.ts +5 -1
  479. package/src/types/api/checkAllFirmwareRelease.ts +3 -0
  480. package/src/types/api/deviceUpdateBootloader.ts +6 -0
  481. package/src/types/api/export.ts +20 -0
  482. package/src/types/api/firmwareUpdate.ts +76 -0
  483. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  484. package/src/types/api/firmwareUpdatePlan.ts +36 -0
  485. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  486. package/src/types/api/index.ts +14 -0
  487. package/src/types/api/kaspaSignTransaction.ts +20 -2
  488. package/src/types/device.ts +0 -1
  489. package/src/types/settings.ts +13 -0
  490. package/src/utils/deviceInfoUtils.ts +0 -3
  491. package/src/utils/deviceVersionUtils.ts +1 -1
  492. package/src/utils/index.ts +0 -1
  493. package/tsconfig.type-tests.json +8 -0
@@ -14,18 +14,43 @@ import { BaseMethod } from './BaseMethod';
14
14
  import { validateParams } from './helpers/paramsValidator';
15
15
  import { DevicePool } from '../device/DevicePool';
16
16
  import { getBinary, getInfo, getSysResourceBinary } from './firmware/getBinary';
17
- import { updateResources, uploadFirmware } from './firmware/uploadFirmware';
18
- import { LoggerNames, getLogger, wait } from '../utils';
17
+ import {
18
+ updateResources,
19
+ updateResourcesFromSources,
20
+ uploadFirmwareFromSource,
21
+ } from './firmware/uploadFirmware';
22
+ import { LoggerNames, getDeviceUUID, getLogger, wait } from '../utils';
19
23
  import { FirmwareUpdateTipMessage, createUiMessage } from '../events/ui-request';
20
24
  import { DeviceModelToTypes } from '../types';
21
25
  import { DataManager } from '../data-manager';
22
26
  import { DEVICE } from '../events';
27
+ import { type FirmwareByteSource, openFirmwareByteSource } from './firmware/FirmwareArtifactSource';
28
+ import { resolveFirmwareUpdateHostBinding } from './firmware/FirmwareHostBinding';
29
+ import {
30
+ assertFirmwareUpdatePreparedPlanDeviceIdentity,
31
+ assertFirmwareUpdatePreparedPlanBinding,
32
+ getFirmwareUpdateResourceName,
33
+ } from './firmware/FirmwareUpdatePreparedPlan';
23
34
 
24
35
  import type { Features, KnownDevice } from '../types';
25
36
  import type { FirmwareBinary } from './firmware/getBinary';
37
+ import type {
38
+ FirmwareArtifactReader,
39
+ FirmwareArtifactReference,
40
+ } from '../types/api/firmwareUpdate';
41
+ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePreparedPlan';
26
42
 
27
43
  type Params = {
28
44
  binary?: ArrayBuffer;
45
+ artifact?: FirmwareArtifactReference;
46
+ resourceArtifact?: FirmwareArtifactReference;
47
+ resourceEntries?: Array<{
48
+ entryName: string;
49
+ artifact: FirmwareArtifactReference;
50
+ }>;
51
+ artifactReader?: FirmwareArtifactReader;
52
+ preparedPlan?: FirmwareUpdatePreparedPlan;
53
+ platform?: FirmwareUpdatePreparedPlan['platform'];
29
54
  version?: number[];
30
55
  updateType: 'firmware' | 'ble';
31
56
  forcedUpdateRes?: boolean;
@@ -106,6 +131,13 @@ const normalizeFirmwareBinary = (binary: unknown): FirmwareBinary | undefined =>
106
131
  return normalized.buffer;
107
132
  };
108
133
 
134
+ const toArrayBuffer = (binary: FirmwareBinary): ArrayBuffer => {
135
+ if (binary instanceof ArrayBuffer) {
136
+ return binary;
137
+ }
138
+ return new Uint8Array(binary.buffer, binary.byteOffset, binary.byteLength).slice().buffer;
139
+ };
140
+
109
141
  export default class FirmwareUpdateV2 extends BaseMethod<Params> {
110
142
  checkPromise: Deferred<any> | null = null;
111
143
 
@@ -152,6 +184,38 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
152
184
  binary: payload.binary,
153
185
  };
154
186
  }
187
+
188
+ if ('artifact' in payload) {
189
+ const hostBinding = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration);
190
+ const target = payload.isUpdateBootloader ? 'bootloader' : payload.updateType;
191
+ const resourceBindings = [
192
+ ...(payload.resourceArtifact
193
+ ? [{ target: 'resource' as const, artifact: payload.resourceArtifact }]
194
+ : []),
195
+ ...(payload.resourceEntries ?? []).map(
196
+ (entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
197
+ target: 'resource' as const,
198
+ entryName: entry.entryName,
199
+ artifact: entry.artifact,
200
+ })
201
+ ),
202
+ ];
203
+ assertFirmwareUpdatePreparedPlanBinding({
204
+ preparedPlan: payload.preparedPlan,
205
+ executor: 'v2',
206
+ platform: payload.platform,
207
+ scopeTargets: [target, ...(target === 'firmware' ? (['resource'] as const) : [])],
208
+ bindings: [{ target, artifact: payload.artifact }, ...resourceBindings],
209
+ });
210
+ this.params = {
211
+ ...this.params,
212
+ preparedPlan: payload.preparedPlan,
213
+ artifact: payload.artifact,
214
+ resourceArtifact: payload.resourceArtifact,
215
+ resourceEntries: payload.resourceEntries,
216
+ artifactReader: hostBinding.artifactReader,
217
+ };
218
+ }
155
219
  }
156
220
 
157
221
  postTipMessage = (message: string) => {
@@ -348,152 +412,260 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
348
412
  'Protocol V2 firmware update must use firmwareUpdateV4'
349
413
  );
350
414
  }
415
+ if (params.preparedPlan) {
416
+ assertFirmwareUpdatePreparedPlanDeviceIdentity({
417
+ preparedPlan: params.preparedPlan,
418
+ deviceIdentity: getDeviceUUID(features) || undefined,
419
+ });
420
+ }
351
421
 
352
422
  const deviceFirmwareType = device.getCurrentFirmwareType();
353
423
  const firmwareType = params.firmwareType ?? deviceFirmwareType;
354
424
 
355
425
  this.checkVersionForCopyTouchResource(features, firmwareType);
356
426
 
357
- let preparedBinary: FirmwareBinary | undefined;
358
- const acquireFirmwareBinary = async (): Promise<FirmwareBinary> => {
359
- try {
360
- if (preparedBinary) {
361
- return preparedBinary;
362
- }
363
-
364
- if (params.binary !== undefined) {
365
- preparedBinary = normalizeFirmwareBinary(params.binary);
366
- if (!preparedBinary) {
367
- throw new Error('firmware binary is empty or invalid');
427
+ let preparedSource: FirmwareByteSource | undefined;
428
+ try {
429
+ const acquireFirmwareSource = async (): Promise<FirmwareByteSource> => {
430
+ try {
431
+ if (preparedSource) {
432
+ return preparedSource;
368
433
  }
369
- return preparedBinary;
370
- }
371
434
 
372
- if (!device.features) {
373
- throw ERRORS.TypedError(
374
- HardwareErrorCode.RuntimeError,
375
- 'no features found for this device'
376
- );
377
- }
378
-
379
- this.postTipMessage('DownloadFirmware');
380
- const firmware = await getBinary({
381
- features: device.features,
382
- version: params.version,
383
- updateType: params.updateType,
384
- isUpdateBootloader: params.isUpdateBootloader,
385
- firmwareType,
386
- requestOptions: FIRMWARE_DOWNLOAD_REQUEST_OPTIONS,
387
- });
388
- preparedBinary = normalizeFirmwareBinary(firmware.binary);
389
- if (!preparedBinary) {
390
- throw new Error('downloaded firmware binary is empty or invalid');
391
- }
392
- this.postTipMessage('DownloadFirmwareSuccess');
393
- return preparedBinary;
394
- } catch (err) {
395
- throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateDownloadFailed, err.message ?? err);
396
- }
397
- };
435
+ if (params.binary !== undefined) {
436
+ const binary = normalizeFirmwareBinary(params.binary);
437
+ if (!binary) {
438
+ throw new Error('firmware binary is empty or invalid');
439
+ }
440
+ const source = await openFirmwareByteSource({
441
+ binary: toArrayBuffer(binary),
442
+ });
443
+ if (!source) {
444
+ throw new Error('firmware binary is empty or invalid');
445
+ }
446
+ preparedSource = source;
447
+ return source;
448
+ }
398
449
 
399
- if (!device.isBootloader() && features) {
400
- const serialNo = device.getCurrentSerialNo();
401
- // should go to bootloader mode manually
402
- if (this.isEnteredManuallyBoot()) {
403
- return Promise.reject(ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));
404
- }
450
+ if (params.artifact) {
451
+ const source = await openFirmwareByteSource({
452
+ artifact: params.artifact,
453
+ reader: params.artifactReader,
454
+ });
455
+ if (!source) {
456
+ throw new Error('firmware artifact is not prepared');
457
+ }
458
+ preparedSource = source;
459
+ return source;
460
+ }
405
461
 
406
- // check & upgrade firmware resource
407
- if (this.isSupportResourceUpdate(params.updateType)) {
408
- this.postTipMessage('CheckLatestUiResource');
409
- const resourceUrl = DataManager.getSysResourcesLatestRelease({
410
- features,
411
- forcedUpdateRes: params.forcedUpdateRes,
412
- firmwareType,
413
- });
414
- if (resourceUrl) {
415
- this.postTipMessage('DownloadLatestUiResource');
416
- const resource = await getSysResourceBinary(resourceUrl);
417
- this.postTipMessage('DownloadLatestUiResourceSuccess');
418
- if (resource) {
419
- await updateResources(
420
- this.device.getCommands().typedCall.bind(this.device.getCommands()),
421
- this.postMessage,
422
- device,
423
- resource.binary
462
+ if (!device.features) {
463
+ throw ERRORS.TypedError(
464
+ HardwareErrorCode.RuntimeError,
465
+ 'no features found for this device'
424
466
  );
425
467
  }
426
- }
427
- }
428
468
 
429
- // check if the device commands has been disposed
430
- this.device?.commands?.checkDisposed();
431
-
432
- // A failed firmware download must leave the device in normal mode.
433
- await acquireFirmwareBinary();
469
+ if (
470
+ params.artifactReader ||
471
+ DataManager.getSettings('firmwareManifestMode') === 'external-only'
472
+ ) {
473
+ throw ERRORS.TypedError(
474
+ HardwareErrorCode.RuntimeError,
475
+ 'Firmware must be prepared by the external firmware host',
476
+ {
477
+ firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
478
+ artifactName: 'firmware',
479
+ }
480
+ );
481
+ }
434
482
 
435
- // The request may outlive the current transport command instance.
436
- this.device?.commands?.checkDisposed();
483
+ this.postTipMessage('DownloadFirmware');
484
+ const firmware = await getBinary({
485
+ features: device.features,
486
+ version: params.version,
487
+ updateType: params.updateType,
488
+ isUpdateBootloader: params.isUpdateBootloader,
489
+ firmwareType,
490
+ requestOptions: FIRMWARE_DOWNLOAD_REQUEST_OPTIONS,
491
+ });
492
+ const binary = normalizeFirmwareBinary(firmware.binary);
493
+ if (!binary) {
494
+ throw new Error('downloaded firmware binary is empty or invalid');
495
+ }
496
+ const source = await openFirmwareByteSource({
497
+ binary: toArrayBuffer(binary),
498
+ });
499
+ if (!source) {
500
+ throw new Error('downloaded firmware binary is empty or invalid');
501
+ }
502
+ preparedSource = source;
503
+ this.postTipMessage('DownloadFirmwareSuccess');
504
+ return source;
505
+ } catch (err) {
506
+ throw ERRORS.TypedError(
507
+ HardwareErrorCode.FirmwareUpdateDownloadFailed,
508
+ err.message ?? err
509
+ );
510
+ }
511
+ };
437
512
 
438
- // auto go to bootloader mode
439
- try {
440
- this.postTipMessage('AutoRebootToBootloader');
441
- const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
442
- // @ts-expect-error
443
- if (bootRes.type === 'CallMethodError') {
444
- throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
513
+ if (!device.isBootloader() && features) {
514
+ const serialNo = device.getCurrentSerialNo();
515
+ // should go to bootloader mode manually
516
+ if (this.isEnteredManuallyBoot()) {
517
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot);
445
518
  }
446
- this.postTipMessage('GoToBootloaderSuccess');
447
- this.checkDeviceToBootloader(this.payload.connectId);
448
519
 
449
- // force clean classic device cache so that the device can initialize again
450
- if (DeviceModelToTypes.model_classic.includes(deviceType)) {
451
- DevicePool.clearDeviceCache(serialNo);
520
+ // All network-backed input must be ready before the first device mutation.
521
+ await acquireFirmwareSource();
522
+
523
+ // check & upgrade firmware resource
524
+ if (this.isSupportResourceUpdate(params.updateType)) {
525
+ this.postTipMessage('CheckLatestUiResource');
526
+ const resourceUrl = DataManager.getSysResourcesLatestRelease({
527
+ features,
528
+ forcedUpdateRes: params.forcedUpdateRes,
529
+ firmwareType,
530
+ });
531
+ if (resourceUrl) {
532
+ this.postTipMessage('DownloadLatestUiResource');
533
+ if (params.resourceEntries?.length) {
534
+ const sources: Array<{
535
+ entryName: string;
536
+ source: FirmwareByteSource;
537
+ }> = [];
538
+ try {
539
+ for (const entry of params.resourceEntries) {
540
+ const resourceName = getFirmwareUpdateResourceName(entry.entryName);
541
+ const source = await openFirmwareByteSource({
542
+ artifact: entry.artifact,
543
+ reader: params.artifactReader,
544
+ });
545
+ if (!source) {
546
+ throw new Error('Firmware resource entry is not prepared');
547
+ }
548
+ sources.push({ entryName: resourceName, source });
549
+ }
550
+ await updateResourcesFromSources(
551
+ this.device.getCommands().typedCall.bind(this.device.getCommands()),
552
+ this.postMessage,
553
+ device,
554
+ sources.map(entry => ({
555
+ entryName: entry.entryName,
556
+ source: entry.source,
557
+ }))
558
+ );
559
+ } finally {
560
+ await Promise.all(
561
+ sources.map(entry => entry.source.close().catch(() => undefined))
562
+ );
563
+ }
564
+ this.postTipMessage('DownloadLatestUiResourceSuccess');
565
+ } else {
566
+ let resourceBinary: ArrayBuffer | Buffer;
567
+ if (params.resourceArtifact) {
568
+ throw ERRORS.TypedError(
569
+ HardwareErrorCode.RuntimeError,
570
+ 'Firmware resource archive must be materialized into prepared entries',
571
+ {
572
+ firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
573
+ artifactName: 'resource',
574
+ }
575
+ );
576
+ } else {
577
+ if (
578
+ params.artifactReader ||
579
+ DataManager.getSettings('firmwareManifestMode') === 'external-only'
580
+ ) {
581
+ throw ERRORS.TypedError(
582
+ HardwareErrorCode.RuntimeError,
583
+ 'Firmware resource must be prepared by the external firmware host',
584
+ {
585
+ firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
586
+ artifactName: 'resource',
587
+ }
588
+ );
589
+ }
590
+ resourceBinary = (await getSysResourceBinary(resourceUrl)).binary;
591
+ }
592
+ this.postTipMessage('DownloadLatestUiResourceSuccess');
593
+ await updateResources(
594
+ this.device.getCommands().typedCall.bind(this.device.getCommands()),
595
+ this.postMessage,
596
+ device,
597
+ resourceBinary
598
+ );
599
+ }
600
+ }
452
601
  }
453
- delete DevicePool.devicesCache[''];
454
- await this.checkPromise?.promise;
455
- this.checkPromise = null;
456
602
 
457
- // check if the device commands has been disposed
603
+ // The request may outlive the current transport command instance.
458
604
  this.device?.commands?.checkDisposed();
459
605
 
460
- /**
461
- * Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
462
- */
463
- const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
464
- await wait(isTouch ? 3000 : 1500);
465
- } catch (e) {
466
- if (e instanceof HardwareError) {
467
- return Promise.reject(e);
606
+ // auto go to bootloader mode
607
+ try {
608
+ this.postTipMessage('AutoRebootToBootloader');
609
+ const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
610
+ // @ts-expect-error
611
+ if (bootRes.type === 'CallMethodError') {
612
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
613
+ }
614
+ this.postTipMessage('GoToBootloaderSuccess');
615
+ this.checkDeviceToBootloader(this.payload.connectId);
616
+
617
+ // force clean classic device cache so that the device can initialize again
618
+ if (DeviceModelToTypes.model_classic.includes(deviceType)) {
619
+ DevicePool.clearDeviceCache(serialNo);
620
+ }
621
+ delete DevicePool.devicesCache[''];
622
+ await this.checkPromise?.promise;
623
+ this.checkPromise = null;
624
+
625
+ // check if the device commands has been disposed
626
+ this.device?.commands?.checkDisposed();
627
+
628
+ /**
629
+ * Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
630
+ */
631
+ const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
632
+ await wait(isTouch ? 3000 : 1500);
633
+ } catch (e) {
634
+ if (e instanceof HardwareError) {
635
+ return Promise.reject(e);
636
+ }
637
+ console.log('auto go to bootloader mode failed: ', e);
638
+ return Promise.reject(
639
+ ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
640
+ );
468
641
  }
469
- console.log('auto go to bootloader mode failed: ', e);
470
- return Promise.reject(
471
- ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
472
- );
473
642
  }
474
- }
475
643
 
476
- // Devices already in bootloader mode still acquire through the same helper.
477
- const binary = await acquireFirmwareBinary();
644
+ // Devices already in bootloader mode still acquire through the same helper.
645
+ const source = await acquireFirmwareSource();
478
646
 
479
- // check if the device commands has been disposed
480
- this.device?.commands?.checkDisposed();
647
+ // check if the device commands has been disposed
648
+ this.device?.commands?.checkDisposed();
481
649
 
482
- await this.device.acquire();
650
+ await this.device.acquire();
483
651
 
484
- const response = await uploadFirmware(
485
- params.updateType,
486
- this.device.getCommands().typedCall.bind(this.device.getCommands()),
487
- this.postMessage,
488
- device,
489
- { payload: binary, rebootOnSuccess: true },
490
- params.isUpdateBootloader
491
- );
652
+ const response = await uploadFirmwareFromSource(
653
+ params.updateType,
654
+ this.device.getCommands().typedCall.bind(this.device.getCommands()),
655
+ this.postMessage,
656
+ device,
657
+ source,
658
+ true,
659
+ params.isUpdateBootloader
660
+ );
492
661
 
493
- if (this.connectId) {
494
- DevicePool.clearDeviceCache(this.connectId);
495
- }
662
+ if (this.connectId) {
663
+ DevicePool.clearDeviceCache(this.connectId);
664
+ }
496
665
 
497
- return response;
666
+ return response;
667
+ } finally {
668
+ await preparedSource?.close().catch(() => undefined);
669
+ }
498
670
  }
499
671
  }