@trezor/connect 9.7.0-beta.1 → 9.7.0

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 (408) hide show
  1. package/CHANGELOG.md +49 -16
  2. package/README.md +1 -1
  3. package/lib/api/applyFlags.js +31 -26
  4. package/lib/api/applySettings.js +43 -40
  5. package/lib/api/authenticateDevice.js +82 -54
  6. package/lib/api/authorizeCoinjoin.js +35 -28
  7. package/lib/api/backupDevice.js +32 -27
  8. package/lib/api/bitcoin/TransactionComposer.js +131 -123
  9. package/lib/api/bitcoin/createPendingTx.js +55 -52
  10. package/lib/api/bitcoin/enhanceSignTx.js +57 -55
  11. package/lib/api/bitcoin/index.js +4 -1
  12. package/lib/api/bitcoin/inputs.js +71 -46
  13. package/lib/api/bitcoin/outputs.js +108 -85
  14. package/lib/api/bitcoin/refTx.d.ts +1 -1
  15. package/lib/api/bitcoin/refTx.js +233 -201
  16. package/lib/api/bitcoin/signtx.js +208 -152
  17. package/lib/api/bitcoin/signtxLegacy.js +169 -119
  18. package/lib/api/bitcoin/signtxVerify.js +80 -67
  19. package/lib/api/bitcoin/transactionBytes.js +61 -59
  20. package/lib/api/bleUnpair.js +28 -25
  21. package/lib/api/blockchainDisconnect.js +31 -24
  22. package/lib/api/blockchainEstimateFee.js +94 -61
  23. package/lib/api/blockchainEvmRpcCall.js +51 -34
  24. package/lib/api/blockchainGetAccountBalanceHistory.d.ts +1 -1
  25. package/lib/api/blockchainGetAccountBalanceHistory.js +50 -32
  26. package/lib/api/blockchainGetCurrentFiatRates.d.ts +1 -1
  27. package/lib/api/blockchainGetCurrentFiatRates.js +43 -29
  28. package/lib/api/blockchainGetFiatRatesForTimestamps.d.ts +1 -1
  29. package/lib/api/blockchainGetFiatRatesForTimestamps.js +49 -32
  30. package/lib/api/blockchainGetInfo.js +31 -22
  31. package/lib/api/blockchainGetTransactions.d.ts +1 -1
  32. package/lib/api/blockchainGetTransactions.js +36 -24
  33. package/lib/api/blockchainSetCustomBackend.js +34 -25
  34. package/lib/api/blockchainSubscribe.js +57 -36
  35. package/lib/api/blockchainSubscribeFiatRates.js +36 -24
  36. package/lib/api/blockchainUnsubscribe.js +57 -37
  37. package/lib/api/blockchainUnsubscribeFiatRates.js +31 -22
  38. package/lib/api/cancelCoinjoinAuthorization.js +26 -20
  39. package/lib/api/cardano/api/cardanoComposeTransaction.js +75 -50
  40. package/lib/api/cardano/api/cardanoGetAddress.js +105 -102
  41. package/lib/api/cardano/api/cardanoGetNativeScriptHash.js +59 -56
  42. package/lib/api/cardano/api/cardanoGetPublicKey.js +58 -58
  43. package/lib/api/cardano/api/cardanoSignMessage.js +81 -78
  44. package/lib/api/cardano/api/cardanoSignTransaction.js +269 -240
  45. package/lib/api/cardano/api/index.js +40 -7
  46. package/lib/api/cardano/cardanoAddressParameters.js +71 -65
  47. package/lib/api/cardano/cardanoAuxiliaryData.js +68 -63
  48. package/lib/api/cardano/cardanoCertificate.js +124 -119
  49. package/lib/api/cardano/cardanoInputs.js +33 -33
  50. package/lib/api/cardano/cardanoOutputs.d.ts +1 -1
  51. package/lib/api/cardano/cardanoOutputs.js +63 -61
  52. package/lib/api/cardano/cardanoTokenBundle.d.ts +2 -2
  53. package/lib/api/cardano/cardanoTokenBundle.js +18 -13
  54. package/lib/api/cardano/cardanoUtils.js +94 -89
  55. package/lib/api/cardano/cardanoWitnesses.js +46 -42
  56. package/lib/api/changeLanguage.js +40 -29
  57. package/lib/api/changePin.js +21 -16
  58. package/lib/api/changeWipeCode.js +24 -16
  59. package/lib/api/cipherKeyValue.js +42 -41
  60. package/lib/api/common/Discovery.js +114 -112
  61. package/lib/api/common/paramsValidator.js +110 -116
  62. package/lib/api/composeTransaction.d.ts +1 -1
  63. package/lib/api/composeTransaction.js +307 -256
  64. package/lib/api/discoverAccounts.js +291 -191
  65. package/lib/api/eos/api/eosGetPublicKey.js +56 -52
  66. package/lib/api/eos/api/eosSignTransaction.js +35 -26
  67. package/lib/api/eos/api/index.js +16 -3
  68. package/lib/api/eos/eosSignTx.js +308 -312
  69. package/lib/api/ethereum/api/ethereumGetAddress.js +106 -107
  70. package/lib/api/ethereum/api/ethereumGetPublicKey.js +72 -62
  71. package/lib/api/ethereum/api/ethereumSignMessage.js +55 -48
  72. package/lib/api/ethereum/api/ethereumSignTransaction.d.ts +33 -0
  73. package/lib/api/ethereum/api/ethereumSignTransaction.js +137 -132
  74. package/lib/api/ethereum/api/ethereumSignTypedData.d.ts +4 -4
  75. package/lib/api/ethereum/api/ethereumSignTypedData.js +183 -181
  76. package/lib/api/ethereum/api/ethereumVerifyMessage.js +27 -24
  77. package/lib/api/ethereum/api/index.js +40 -7
  78. package/lib/api/ethereum/ethereumDefinitions.js +94 -87
  79. package/lib/api/ethereum/ethereumSignTx.js +116 -111
  80. package/lib/api/ethereum/ethereumSignTypedData.js +98 -95
  81. package/lib/api/evoluGetDelegatedIdentityKey.js +30 -26
  82. package/lib/api/evoluGetNode.js +24 -19
  83. package/lib/api/evoluSignRegistrationRequest.js +26 -21
  84. package/lib/api/firmware/calculateFirmwareHash.js +44 -32
  85. package/lib/api/firmware/getBinary.js +30 -22
  86. package/lib/api/firmware/index.js +46 -8
  87. package/lib/api/firmware/modifyFirmware.js +13 -12
  88. package/lib/api/firmware/parseFirmwareHeaders.js +29 -30
  89. package/lib/api/firmware/uploadFirmware.js +84 -67
  90. package/lib/api/firmware/verifyEntropy.js +88 -83
  91. package/lib/api/getAccountDescriptor.js +118 -120
  92. package/lib/api/getAccountInfo.d.ts +14 -14
  93. package/lib/api/getAccountInfo.js +316 -287
  94. package/lib/api/getAddress.js +128 -118
  95. package/lib/api/getCoinInfo.js +22 -17
  96. package/lib/api/getDeviceState.js +16 -10
  97. package/lib/api/getFeatures.d.ts +1 -1
  98. package/lib/api/getFeatures.js +15 -12
  99. package/lib/api/getFirmwareHash.js +23 -18
  100. package/lib/api/getNonce.js +12 -9
  101. package/lib/api/getOwnershipId.js +57 -51
  102. package/lib/api/getOwnershipProof.js +66 -60
  103. package/lib/api/getPublicKey.js +72 -66
  104. package/lib/api/getSettings.js +12 -9
  105. package/lib/api/index.js +346 -58
  106. package/lib/api/loadDevice.js +40 -35
  107. package/lib/api/monero/api/index.js +28 -5
  108. package/lib/api/monero/api/moneroGetAddress.js +108 -97
  109. package/lib/api/monero/api/moneroGetWatchKey.js +37 -32
  110. package/lib/api/monero/api/moneroKeyImageSync.js +111 -107
  111. package/lib/api/monero/api/moneroSignTransaction.js +173 -185
  112. package/lib/api/nem/api/index.js +16 -3
  113. package/lib/api/nem/api/nemGetAddress.js +107 -102
  114. package/lib/api/nem/api/nemSignTransaction.js +25 -20
  115. package/lib/api/nem/nemSignTx.js +128 -125
  116. package/lib/api/pushTransaction.js +31 -27
  117. package/lib/api/recoveryDevice.js +44 -39
  118. package/lib/api/requestLogin.d.ts +0 -1
  119. package/lib/api/requestLogin.js +47 -52
  120. package/lib/api/resetDevice.js +100 -90
  121. package/lib/api/ripple/api/index.js +16 -3
  122. package/lib/api/ripple/api/rippleGetAddress.js +92 -88
  123. package/lib/api/ripple/api/rippleSignTransaction.js +44 -34
  124. package/lib/api/setBrightness.js +21 -16
  125. package/lib/api/setBusy.js +27 -20
  126. package/lib/api/setProxy.js +22 -15
  127. package/lib/api/showDeviceTutorial.js +18 -15
  128. package/lib/api/signMessage.js +50 -46
  129. package/lib/api/signTransaction.js +325 -238
  130. package/lib/api/solana/additionalInfo.js +17 -14
  131. package/lib/api/solana/api/index.js +28 -5
  132. package/lib/api/solana/api/solanaComposeTransaction.js +46 -50
  133. package/lib/api/solana/api/solanaGetAddress.js +92 -90
  134. package/lib/api/solana/api/solanaGetPublicKey.js +56 -52
  135. package/lib/api/solana/api/solanaSignTransaction.js +175 -168
  136. package/lib/api/solana/solanaDefinitions.js +32 -25
  137. package/lib/api/solana/solanaUtils.d.ts +2 -2
  138. package/lib/api/solana/solanaUtils.js +231 -177
  139. package/lib/api/stellar/api/index.js +16 -3
  140. package/lib/api/stellar/api/stellarGetAddress.js +92 -88
  141. package/lib/api/stellar/api/stellarSignTransaction.js +51 -44
  142. package/lib/api/stellar/stellarSignTx.js +184 -179
  143. package/lib/api/tezos/api/index.js +22 -4
  144. package/lib/api/tezos/api/tezosGetAddress.js +92 -88
  145. package/lib/api/tezos/api/tezosGetPublicKey.js +55 -51
  146. package/lib/api/tezos/api/tezosSignTransaction.js +23 -18
  147. package/lib/api/tezos/tezosSignTx.js +183 -169
  148. package/lib/api/thpGetCredentials.js +23 -20
  149. package/lib/api/thpRemoveCredentials.js +28 -21
  150. package/lib/api/unlockPath.js +28 -21
  151. package/lib/api/verifyMessage.js +35 -33
  152. package/lib/api/wipeDevice.js +39 -34
  153. package/lib/backend/BackendManager.js +127 -107
  154. package/lib/backend/Blockchain.d.ts +1 -1
  155. package/lib/backend/Blockchain.js +220 -205
  156. package/lib/backend/BlockchainLink.js +17 -5
  157. package/lib/backend/fees/BitcoinFeeLevels.js +41 -34
  158. package/lib/backend/fees/EthereumFeeLevels.js +51 -51
  159. package/lib/backend/fees/MiscFeeLevels.js +25 -24
  160. package/lib/backend/fees/index.js +28 -21
  161. package/lib/constants/cardano.js +11 -8
  162. package/lib/constants/errors.js +72 -65
  163. package/lib/constants/firmware.js +5 -5
  164. package/lib/constants/index.js +16 -3
  165. package/lib/constants/nem.js +19 -16
  166. package/lib/constants/network.js +15 -22
  167. package/lib/constants/utxo.js +4 -1
  168. package/lib/core/AbstractMethod.d.ts +1 -1
  169. package/lib/core/AbstractMethod.js +248 -224
  170. package/lib/core/index.js +936 -775
  171. package/lib/core/method.js +19 -16
  172. package/lib/core/method.native.js +28 -23
  173. package/lib/core/onCallFirmwareUpdate.js +368 -299
  174. package/lib/data/DataManager.js +85 -77
  175. package/lib/data/analyticsInfo.js +35 -29
  176. package/lib/data/coinInfo.js +154 -156
  177. package/lib/data/config.d.ts +1 -1
  178. package/lib/data/config.js +362 -330
  179. package/lib/data/connectSettings.js +131 -144
  180. package/lib/data/defaultFeeLevels.js +154 -108
  181. package/lib/data/firmwareInfo.d.ts +1 -0
  182. package/lib/data/firmwareInfo.js +407 -377
  183. package/lib/data/thpSettings.js +36 -35
  184. package/lib/data/udevInfo.js +24 -24
  185. package/lib/data/version.d.ts +1 -1
  186. package/lib/data/version.js +6 -5
  187. package/lib/device/Device.d.ts +6 -7
  188. package/lib/device/Device.js +731 -749
  189. package/lib/device/DeviceCommands.js +226 -194
  190. package/lib/device/DeviceCurrentSession.d.ts +333 -333
  191. package/lib/device/DeviceCurrentSession.js +235 -236
  192. package/lib/device/DeviceList.d.ts +2 -0
  193. package/lib/device/DeviceList.js +219 -181
  194. package/lib/device/StateStorage.js +32 -29
  195. package/lib/device/TransportList.d.ts +1 -1
  196. package/lib/device/TransportList.js +37 -36
  197. package/lib/device/TransportManager.js +136 -140
  198. package/lib/device/calculateRevisionForDevice.js +20 -14
  199. package/lib/device/checkFirmwareRevision.js +66 -54
  200. package/lib/device/resolveDescriptorForTaproot.js +26 -16
  201. package/lib/device/thp/handshake.js +95 -82
  202. package/lib/device/thp/index.js +53 -38
  203. package/lib/device/thp/pairing.js +209 -199
  204. package/lib/device/thp/session.js +27 -19
  205. package/lib/device/thp/thpCall.js +53 -43
  206. package/lib/device/workflow/checkFirmwareHash.js +77 -67
  207. package/lib/device/workflow/checkFirmwareHashWithRetries.js +32 -29
  208. package/lib/device/workflow/handshake.js +50 -41
  209. package/lib/device/workflow/index.js +10 -2
  210. package/lib/device/workflow/trezorPushNotification.js +68 -64
  211. package/lib/device/workflow/validateState.js +155 -129
  212. package/lib/events/blockchain.js +13 -10
  213. package/lib/events/call.d.ts +6 -4
  214. package/lib/events/call.js +14 -13
  215. package/lib/events/core.js +24 -21
  216. package/lib/events/device.d.ts +2 -2
  217. package/lib/events/device.js +32 -19
  218. package/lib/events/iframe.js +13 -10
  219. package/lib/events/index.d.ts +0 -1
  220. package/lib/events/index.js +6 -3
  221. package/lib/events/popup.js +20 -17
  222. package/lib/events/transport.d.ts +2 -2
  223. package/lib/events/transport.js +16 -11
  224. package/lib/events/ui-promise.js +4 -1
  225. package/lib/events/ui-request.d.ts +0 -4
  226. package/lib/events/ui-request.js +48 -46
  227. package/lib/events/ui-response.d.ts +2 -2
  228. package/lib/events/ui-response.js +20 -17
  229. package/lib/events/webextension.js +9 -6
  230. package/lib/exports.js +10 -2
  231. package/lib/factory.d.ts +3 -2
  232. package/lib/factory.js +34 -143
  233. package/lib/impl/core-in-module.d.ts +1 -6
  234. package/lib/impl/core-in-module.js +187 -191
  235. package/lib/impl/dynamic.d.ts +0 -1
  236. package/lib/impl/dynamic.js +108 -97
  237. package/lib/index-browser.d.ts +1 -0
  238. package/lib/index-browser.js +18 -16
  239. package/lib/index.d.ts +2 -0
  240. package/lib/index.js +144 -148
  241. package/lib/types/account.js +4 -1
  242. package/lib/types/api/applyFlags.js +4 -1
  243. package/lib/types/api/applySettings.d.ts +2 -2
  244. package/lib/types/api/applySettings.js +7 -7
  245. package/lib/types/api/authenticateDevice.js +7 -4
  246. package/lib/types/api/authorizeCoinjoin.js +13 -10
  247. package/lib/types/api/backupDevice.js +4 -1
  248. package/lib/types/api/bitcoin/index.d.ts +5 -2
  249. package/lib/types/api/bitcoin/index.js +14 -11
  250. package/lib/types/api/bleUnpair.js +4 -1
  251. package/lib/types/api/blockchainDisconnect.js +4 -1
  252. package/lib/types/api/blockchainEstimateFee.js +4 -1
  253. package/lib/types/api/blockchainEvmRpcCall.js +4 -1
  254. package/lib/types/api/blockchainGetAccountBalanceHistory.js +4 -1
  255. package/lib/types/api/blockchainGetCurrentFiatRates.js +4 -1
  256. package/lib/types/api/blockchainGetFiatRatesForTimestamps.js +4 -1
  257. package/lib/types/api/blockchainGetInfo.js +4 -1
  258. package/lib/types/api/blockchainGetTransactions.js +4 -1
  259. package/lib/types/api/blockchainSetCustomBackend.js +4 -1
  260. package/lib/types/api/blockchainSubscribe.js +4 -1
  261. package/lib/types/api/blockchainSubscribeFiatRates.js +4 -1
  262. package/lib/types/api/blockchainUnsubscribe.js +4 -1
  263. package/lib/types/api/blockchainUnsubscribeFiatRates.js +4 -1
  264. package/lib/types/api/cancel.js +4 -1
  265. package/lib/types/api/cancelCoinjoinAuthorization.js +5 -2
  266. package/lib/types/api/cardano/index.d.ts +4 -4
  267. package/lib/types/api/cardano/index.js +173 -180
  268. package/lib/types/api/cardanoComposeTransaction.js +76 -65
  269. package/lib/types/api/cardanoGetAddress.js +4 -1
  270. package/lib/types/api/cardanoGetNativeScriptHash.js +4 -1
  271. package/lib/types/api/cardanoGetPublicKey.js +4 -1
  272. package/lib/types/api/cardanoSignMessage.js +4 -1
  273. package/lib/types/api/cardanoSignTransaction.js +4 -1
  274. package/lib/types/api/changeLanguage.d.ts +1 -1
  275. package/lib/types/api/changeLanguage.js +13 -13
  276. package/lib/types/api/changePin.js +4 -1
  277. package/lib/types/api/changeWipeCode.js +4 -1
  278. package/lib/types/api/cipherKeyValue.d.ts +2 -2
  279. package/lib/types/api/cipherKeyValue.js +11 -8
  280. package/lib/types/api/composeTransaction.js +4 -1
  281. package/lib/types/api/device.js +1 -2
  282. package/lib/types/api/disableWebUSB.js +4 -1
  283. package/lib/types/api/discoverAccounts.js +204 -55
  284. package/lib/types/api/dispose.js +4 -1
  285. package/lib/types/api/eos/index.d.ts +3 -3
  286. package/lib/types/api/eos/index.js +106 -162
  287. package/lib/types/api/eosGetPublicKey.js +4 -1
  288. package/lib/types/api/eosSignTransaction.js +4 -1
  289. package/lib/types/api/ethereum/index.d.ts +7 -7
  290. package/lib/types/api/ethereum/index.js +70 -67
  291. package/lib/types/api/ethereumGetAddress.js +4 -1
  292. package/lib/types/api/ethereumGetPublicKey.js +4 -1
  293. package/lib/types/api/ethereumSignMessage.js +4 -1
  294. package/lib/types/api/ethereumSignTransaction.js +4 -1
  295. package/lib/types/api/ethereumSignTypedData.js +4 -1
  296. package/lib/types/api/ethereumVerifyMessage.js +4 -1
  297. package/lib/types/api/evoluGetDelegatedIdentityKey.js +4 -1
  298. package/lib/types/api/evoluGetNode.js +4 -1
  299. package/lib/types/api/evoluSignRegistrationRequest.js +4 -1
  300. package/lib/types/api/firmwareUpdate.d.ts +1 -1
  301. package/lib/types/api/firmwareUpdate.js +12 -12
  302. package/lib/types/api/getAccountDescriptor.js +8 -5
  303. package/lib/types/api/getAccountInfo.js +4 -1
  304. package/lib/types/api/getAddress.js +11 -11
  305. package/lib/types/api/getCoinInfo.js +4 -1
  306. package/lib/types/api/getDeviceState.js +4 -1
  307. package/lib/types/api/getFeatures.js +4 -1
  308. package/lib/types/api/getFirmwareHash.js +4 -1
  309. package/lib/types/api/getNonce.d.ts +1 -1
  310. package/lib/types/api/getNonce.js +4 -1
  311. package/lib/types/api/getOwnershipId.js +8 -5
  312. package/lib/types/api/getOwnershipProof.js +14 -9
  313. package/lib/types/api/getPublicKey.js +25 -28
  314. package/lib/types/api/getSettings.js +4 -1
  315. package/lib/types/api/index.js +4 -1
  316. package/lib/types/api/init.js +4 -1
  317. package/lib/types/api/loadDevice.js +4 -1
  318. package/lib/types/api/manifest.js +4 -1
  319. package/lib/types/api/monero/index.js +117 -114
  320. package/lib/types/api/moneroGetAddress.js +4 -1
  321. package/lib/types/api/moneroGetWatchKey.js +4 -1
  322. package/lib/types/api/moneroKeyImageSync.js +4 -1
  323. package/lib/types/api/moneroSignTransaction.js +4 -1
  324. package/lib/types/api/nem/index.d.ts +7 -7
  325. package/lib/types/api/nem/index.js +78 -112
  326. package/lib/types/api/nemGetAddress.js +7 -7
  327. package/lib/types/api/nemSignTransaction.js +4 -1
  328. package/lib/types/api/off.js +4 -1
  329. package/lib/types/api/on.js +4 -1
  330. package/lib/types/api/pushTransaction.js +10 -10
  331. package/lib/types/api/recoveryDevice.d.ts +1 -1
  332. package/lib/types/api/recoveryDevice.js +7 -7
  333. package/lib/types/api/removeAllListeners.js +4 -1
  334. package/lib/types/api/renderWebUSBButton.js +4 -1
  335. package/lib/types/api/requestLogin.d.ts +4 -24
  336. package/lib/types/api/requestLogin.js +11 -13
  337. package/lib/types/api/requestWebUSBDevice.js +4 -1
  338. package/lib/types/api/resetDevice.js +4 -1
  339. package/lib/types/api/ripple/index.js +17 -14
  340. package/lib/types/api/rippleGetAddress.js +4 -1
  341. package/lib/types/api/rippleSignTransaction.js +4 -1
  342. package/lib/types/api/setBrightness.js +4 -1
  343. package/lib/types/api/setBusy.js +4 -1
  344. package/lib/types/api/setProxy.js +4 -1
  345. package/lib/types/api/setTransports.js +4 -1
  346. package/lib/types/api/showDeviceTutorial.js +4 -1
  347. package/lib/types/api/signMessage.js +4 -1
  348. package/lib/types/api/signTransaction.js +4 -1
  349. package/lib/types/api/solana/index.js +55 -56
  350. package/lib/types/api/solanaComposeTransaction.js +4 -1
  351. package/lib/types/api/solanaGetAddress.js +4 -1
  352. package/lib/types/api/solanaGetPublicKey.js +4 -1
  353. package/lib/types/api/solanaSignTransaction.js +4 -1
  354. package/lib/types/api/stellar/index.d.ts +146 -146
  355. package/lib/types/api/stellar/index.js +151 -221
  356. package/lib/types/api/stellarGetAddress.js +4 -1
  357. package/lib/types/api/stellarSignTransaction.js +4 -1
  358. package/lib/types/api/tezos/index.js +46 -43
  359. package/lib/types/api/tezosGetAddress.js +4 -1
  360. package/lib/types/api/tezosGetPublicKey.js +4 -1
  361. package/lib/types/api/tezosSignTransaction.js +4 -1
  362. package/lib/types/api/thpGetCredentials.js +4 -1
  363. package/lib/types/api/thpRemoveCredentials.js +4 -1
  364. package/lib/types/api/uiResponse.js +4 -1
  365. package/lib/types/api/unlockPath.js +6 -3
  366. package/lib/types/api/verifyMessage.js +4 -1
  367. package/lib/types/api/wipeDevice.js +4 -1
  368. package/lib/types/coinInfo.js +62 -77
  369. package/lib/types/device.d.ts +7 -2
  370. package/lib/types/device.js +7 -4
  371. package/lib/types/fees.js +31 -37
  372. package/lib/types/firmware.js +4 -1
  373. package/lib/types/index.d.ts +1 -0
  374. package/lib/types/index.js +18 -3
  375. package/lib/types/params.js +25 -16
  376. package/lib/types/settings.js +4 -1
  377. package/lib/types/utils.js +4 -1
  378. package/lib/types/workflow.js +4 -1
  379. package/lib/utils/accountUtils.js +76 -81
  380. package/lib/utils/addressUtils.js +21 -21
  381. package/lib/utils/assetUtils.js +29 -26
  382. package/lib/utils/assets-browser.js +19 -13
  383. package/lib/utils/assets.js +10 -9
  384. package/lib/utils/assets.native.js +24 -23
  385. package/lib/utils/assetsTypes.js +4 -1
  386. package/lib/utils/debug.js +18 -13
  387. package/lib/utils/deviceFeaturesUtils.js +105 -127
  388. package/lib/utils/ethereumUtils.js +9 -6
  389. package/lib/utils/firmwareReleaseConfigUtils.js +69 -57
  390. package/lib/utils/firmwareUtils.js +45 -57
  391. package/lib/utils/formatUtils.d.ts +0 -1
  392. package/lib/utils/formatUtils.js +63 -62
  393. package/lib/utils/hdnodeUtils.d.ts +0 -1
  394. package/lib/utils/hdnodeUtils.js +51 -57
  395. package/lib/utils/interactionTimeout.js +26 -23
  396. package/lib/utils/pathUtils.js +132 -148
  397. package/lib/utils/popupPromiseManager.js +23 -14
  398. package/lib/utils/proxy-event-emitter.js +63 -60
  399. package/lib/utils/uiPromiseManager.js +55 -43
  400. package/lib/utils/urlUtils.js +20 -26
  401. package/lib/utils/versionCheck.js +10 -10
  402. package/lib/workers/workers-browser.d.ts +5 -5
  403. package/lib/workers/workers-browser.js +5 -2
  404. package/lib/workers/workers.d.ts +1 -1
  405. package/lib/workers/workers.js +49 -38
  406. package/lib/workers/workers.native.d.ts +5 -5
  407. package/lib/workers/workers.native.js +4 -1
  408. package/package.json +23 -20
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.onCallFirmwareUpdate = void 0;
4
7
  const utils_1 = require("@trezor/utils");
5
8
  const versionUtils_1 = require("@trezor/utils/lib/versionUtils");
@@ -9,319 +12,385 @@ const firmwareInfo_1 = require("../data/firmwareInfo");
9
12
  const events_1 = require("../events");
10
13
  const types_1 = require("../types");
11
14
  const firmwareUtils_1 = require("../utils/firmwareUtils");
12
- const waitForReconnectedDevice = async ({ bootloader, method, intermediary }, { deviceList, device, registerEvents, postMessage, log, abortSignal, uiPromises, }) => {
13
- const target = intermediary || !bootloader ? 'normal' : 'bootloader';
14
- let i = 0;
15
- if (method !== 'auto') {
16
- log.debug('onCallFirmwareUpdate', 'waiting for device to disconnect');
17
- postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
18
- device: device.toMessageObject(),
19
- disconnected: false,
20
- method,
21
- target,
22
- i,
23
- }));
24
- await new Promise(resolve => {
25
- deviceList.once('device-disconnect', resolve);
26
- });
27
- }
28
- log.debug('onCallFirmwareUpdate', `waiting for device to reconnect in ${bootloader ? 'bootloader' : 'normal'} mode`);
29
- let reconnectedDevice;
30
- let thpPairingError = false;
31
- do {
32
- postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
33
- device: device.toMessageObject(),
34
- disconnected: true,
35
- method,
36
- target,
37
- i,
15
+ const waitForReconnectedDevice = async ({
16
+ bootloader,
17
+ method,
18
+ intermediary
19
+ }, {
20
+ deviceList,
21
+ device,
22
+ registerEvents,
23
+ postMessage,
24
+ log,
25
+ abortSignal,
26
+ uiPromises
27
+ }) => {
28
+ const target = intermediary || !bootloader ? 'normal' : 'bootloader';
29
+ let i = 0;
30
+ if (method !== 'auto') {
31
+ log.debug('onCallFirmwareUpdate', 'waiting for device to disconnect');
32
+ postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
33
+ device: device.toMessageObject(),
34
+ disconnected: false,
35
+ method,
36
+ target,
37
+ i
38
+ }));
39
+ await new Promise(resolve => {
40
+ deviceList.once('device-disconnect', resolve);
41
+ });
42
+ }
43
+ log.debug('onCallFirmwareUpdate', `waiting for device to reconnect in ${bootloader ? 'bootloader' : 'normal'} mode`);
44
+ let reconnectedDevice;
45
+ let thpPairingError = false;
46
+ do {
47
+ postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
48
+ device: device.toMessageObject(),
49
+ disconnected: true,
50
+ method,
51
+ target,
52
+ i
53
+ }));
54
+ await (0, utils_1.resolveAfter)(2000);
55
+ try {
56
+ reconnectedDevice = deviceList.getOnlyDevice();
57
+ } catch {}
58
+ if (reconnectedDevice && !reconnectedDevice.features) {
59
+ log.debug('onCallFirmwareUpdate', 'we were unable to read device.features on the first interaction after seeing it, retrying...');
60
+ let runFn;
61
+ if (reconnectedDevice.getThpState()?.properties) {
62
+ const uiPromise = uiPromises.create(events_1.UI.RECEIVE_CONFIRMATION, reconnectedDevice);
63
+ postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
64
+ view: thpPairingError ? 'thp-pairing-failed' : 'thp-pairing-start'
38
65
  }));
39
- await (0, utils_1.resolveAfter)(2000);
40
- try {
41
- reconnectedDevice = deviceList.getOnlyDevice();
66
+ const uiResp = await uiPromise.promise;
67
+ if (!uiResp.payload) {
68
+ throw constants_1.ERRORS.TypedError('Method_PermissionsNotGranted');
42
69
  }
43
- catch {
44
- }
45
- if (reconnectedDevice && !reconnectedDevice.features) {
46
- log.debug('onCallFirmwareUpdate', 'we were unable to read device.features on the first interaction after seeing it, retrying...');
47
- let runFn;
48
- if (reconnectedDevice.getThpState()?.properties) {
49
- const uiPromise = uiPromises.create(events_1.UI.RECEIVE_CONFIRMATION, reconnectedDevice);
50
- postMessage((0, events_1.createUiMessage)(events_1.UI.REQUEST_CONFIRMATION, {
51
- view: thpPairingError ? 'thp-pairing-failed' : 'thp-pairing-start',
52
- }));
53
- const uiResp = await uiPromise.promise;
54
- if (!uiResp.payload) {
55
- throw constants_1.ERRORS.TypedError('Method_PermissionsNotGranted');
56
- }
57
- runFn = () => Promise.resolve();
58
- }
59
- try {
60
- registerEvents(reconnectedDevice);
61
- await reconnectedDevice.run(runFn, {
62
- skipFirmwareChecks: true,
63
- skipLanguageChecks: true,
64
- });
65
- }
66
- catch (error) {
67
- uiPromises.rejectAll(error);
68
- if (error.code === 'Device_ThpPairingTagInvalid') {
69
- thpPairingError = true;
70
- }
71
- }
70
+ runFn = () => Promise.resolve();
71
+ }
72
+ try {
73
+ registerEvents(reconnectedDevice);
74
+ await reconnectedDevice.run(runFn, {
75
+ skipFirmwareChecks: true,
76
+ skipLanguageChecks: true
77
+ });
78
+ } catch (error) {
79
+ uiPromises.rejectAll(error);
80
+ if (error.code === 'Device_ThpPairingTagInvalid') {
81
+ thpPairingError = true;
72
82
  }
73
- i++;
74
- log.debug('onCallFirmwareUpdate', '...still waiting for device to reconnect', i);
75
- } while (!abortSignal.aborted &&
76
- (!reconnectedDevice?.features ||
77
- bootloader === !reconnectedDevice.features.bootloader_mode ||
78
- (intermediary &&
79
- !(0, versionUtils_1.isNewer)([
80
- reconnectedDevice.features.major_version,
81
- reconnectedDevice.features.minor_version,
82
- reconnectedDevice.features.patch_version,
83
- ], [
84
- device.features.major_version,
85
- device.features.minor_version,
86
- device.features.patch_version,
87
- ]))));
88
- if (!reconnectedDevice) {
89
- throw constants_1.ERRORS.TypedError('Method_Interrupted');
83
+ }
90
84
  }
91
- registerEvents(reconnectedDevice);
92
- await reconnectedDevice.currentRun;
93
- if (!reconnectedDevice.isUsedHere()) {
94
- await reconnectedDevice.acquire();
95
- }
96
- return reconnectedDevice;
85
+ i++;
86
+ log.debug('onCallFirmwareUpdate', '...still waiting for device to reconnect', i);
87
+ } while (!abortSignal.aborted && (!reconnectedDevice?.features || bootloader === !reconnectedDevice.features.bootloader_mode || intermediary && !(0, versionUtils_1.isNewer)([reconnectedDevice.features.major_version, reconnectedDevice.features.minor_version, reconnectedDevice.features.patch_version], [device.features.major_version, device.features.minor_version, device.features.patch_version])));
88
+ if (!reconnectedDevice) {
89
+ throw constants_1.ERRORS.TypedError('Method_Interrupted');
90
+ }
91
+ registerEvents(reconnectedDevice);
92
+ await reconnectedDevice.currentRun;
93
+ if (!reconnectedDevice.isUsedHere()) {
94
+ await reconnectedDevice.acquire();
95
+ }
96
+ return reconnectedDevice;
97
97
  };
98
- const waitForBluetoothReboot = ({ device, target, postMessage }) => new Promise(resolve => {
99
- postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
100
- device: device.toMessageObject(),
101
- disconnected: false,
102
- method: 'auto',
103
- target,
104
- i: 0,
105
- }));
106
- const handler = () => {
107
- const deviceIsReady = (target === 'bootloader' && device.features?.bootloader_mode) ||
108
- (target === 'normal' && device.getThpState()?.properties);
109
- if (deviceIsReady) {
110
- device.lifecycle.off('device-changed', handler);
111
- resolve();
112
- }
113
- };
114
- device.lifecycle.on('device-changed', handler);
98
+ const waitForBluetoothReboot = ({
99
+ device,
100
+ target,
101
+ postMessage
102
+ }) => new Promise(resolve => {
103
+ postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_RECONNECT, {
104
+ device: device.toMessageObject(),
105
+ disconnected: false,
106
+ method: 'auto',
107
+ target,
108
+ i: 0
109
+ }));
110
+ const handler = () => {
111
+ const deviceIsReady = target === 'bootloader' && device.features?.bootloader_mode || target === 'normal' && device.getThpState()?.properties;
112
+ if (deviceIsReady) {
113
+ device.lifecycle.off('device-changed', handler);
114
+ resolve();
115
+ }
116
+ };
117
+ device.lifecycle.on('device-changed', handler);
115
118
  });
116
119
  const getInstallationParams = (device, params) => {
117
- const btcOnly = params.btcOnly ?? device.firmwareType === types_1.FirmwareType.BitcoinOnly;
118
- if (!device.features.bootloader_mode) {
119
- const version = params.binary
120
- ? (0, firmware_1.parseFirmwareHeaders)(Buffer.from(params.binary)).version
121
- : undefined;
122
- const isUpdatingToNewerVersion = !version
123
- ? device.firmwareReleaseConfigInfo?.isNewer
124
- : (0, versionUtils_1.isNewer)(version, [
125
- device.features.major_version,
126
- device.features.minor_version,
127
- device.features.patch_version,
128
- ]);
129
- const isUpdatingToEqualFirmwareType = (device.firmwareType === types_1.FirmwareType.BitcoinOnly) === btcOnly;
130
- const upgrade = device.atLeast('2.6.3') && isUpdatingToNewerVersion && isUpdatingToEqualFirmwareType;
131
- const manual = !device.atLeast(['1.10.0', '2.6.0']) && !upgrade;
132
- const getUpdateFlowType = () => {
133
- if (manual)
134
- return 'manual';
135
- return upgrade ? 'reboot_and_upgrade' : 'reboot_and_wait';
136
- };
137
- return {
138
- manual,
139
- upgrade,
140
- updateFlowType: getUpdateFlowType(),
141
- btcOnly,
142
- };
143
- }
144
- else {
145
- return {
146
- manual: false,
147
- upgrade: false,
148
- updateFlowType: 'unknown_flow',
149
- btcOnly,
150
- };
151
- }
120
+ const btcOnly = params.btcOnly ?? device.firmwareType === types_1.FirmwareType.BitcoinOnly;
121
+ if (!device.features.bootloader_mode) {
122
+ const version = params.binary ? (0, firmware_1.parseFirmwareHeaders)(Buffer.from(params.binary)).version : undefined;
123
+ const isUpdatingToNewerVersion = !version ? device.firmwareReleaseConfigInfo?.isNewer : (0, versionUtils_1.isNewer)(version, [device.features.major_version, device.features.minor_version, device.features.patch_version]);
124
+ const isUpdatingToEqualFirmwareType = device.firmwareType === types_1.FirmwareType.BitcoinOnly === btcOnly;
125
+ const upgrade = device.atLeast('2.6.3') && isUpdatingToNewerVersion && isUpdatingToEqualFirmwareType;
126
+ const manual = !device.atLeast(['1.10.0', '2.6.0']) && !upgrade;
127
+ const getUpdateFlowType = () => {
128
+ if (manual) return 'manual';
129
+ return upgrade ? 'reboot_and_upgrade' : 'reboot_and_wait';
130
+ };
131
+ return {
132
+ manual,
133
+ upgrade,
134
+ updateFlowType: getUpdateFlowType(),
135
+ btcOnly
136
+ };
137
+ } else {
138
+ return {
139
+ manual: false,
140
+ upgrade: false,
141
+ updateFlowType: 'unknown_flow',
142
+ btcOnly
143
+ };
144
+ }
152
145
  };
153
- const getFwHeader = (binary) => Buffer.from(binary.slice(0, 6000)).toString('hex');
154
- const getBinaryHelper = async ({ device, params, firmwareType, isIntermediary, log, }) => {
155
- if (params.binary) {
156
- return Promise.resolve({
157
- binary: params.binary,
158
- binaryVersion: (0, firmware_1.parseFirmwareHeaders)(Buffer.from(params.binary)).version,
159
- release: undefined,
160
- });
161
- }
162
- if (!device.firmwareReleaseConfigInfo) {
163
- throw constants_1.ERRORS.TypedError('Runtime', 'device.firmwareReleaseConfigInfo is not set');
164
- }
165
- const deviceModel = device.features?.internal_model;
166
- const { release: { version }, intermediary, } = device.firmwareReleaseConfigInfo;
167
- log.debug('onCallFirmwareUpdate loading binary', 'isIntermediary', isIntermediary, 'version', version, 'firmwareType', firmwareType, 'deviceModel', deviceModel);
168
- const release = await (0, firmwareInfo_1.getReleaseByVersion)(device.features, version, firmwareType);
169
- if (!release) {
170
- throw new Error('Missing Firmware release for device');
171
- }
172
- const { baseUrl, path } = (0, firmwareInfo_1.getFirmwareLocation)({
173
- firmwareVersion: version,
174
- remotePath: release.url,
175
- deviceModel,
176
- firmwareType,
177
- intermediaryVersion: isIntermediary && intermediary ? intermediary.version : undefined,
146
+ const getFwHeader = binary => Buffer.from(binary.slice(0, 6000)).toString('hex');
147
+ const getBinaryHelper = async ({
148
+ device,
149
+ params,
150
+ firmwareType,
151
+ isIntermediary,
152
+ log
153
+ }) => {
154
+ if (params.binary) {
155
+ return Promise.resolve({
156
+ binary: params.binary,
157
+ binaryVersion: (0, firmware_1.parseFirmwareHeaders)(Buffer.from(params.binary)).version,
158
+ release: undefined
178
159
  });
179
- return (0, firmware_1.getBinary)({ baseUrl, path, release });
160
+ }
161
+ if (!device.firmwareReleaseConfigInfo) {
162
+ throw constants_1.ERRORS.TypedError('Runtime', 'device.firmwareReleaseConfigInfo is not set');
163
+ }
164
+ const deviceModel = device.features?.internal_model;
165
+ const {
166
+ release: {
167
+ version
168
+ },
169
+ intermediary
170
+ } = device.firmwareReleaseConfigInfo;
171
+ log.debug('onCallFirmwareUpdate loading binary', 'isIntermediary', isIntermediary, 'version', version, 'firmwareType', firmwareType, 'deviceModel', deviceModel);
172
+ const release = await (0, firmwareInfo_1.getReleaseByVersion)(device.features, version, firmwareType);
173
+ if (!release) {
174
+ throw new Error('Missing Firmware release for device');
175
+ }
176
+ const {
177
+ baseUrl,
178
+ path
179
+ } = (0, firmwareInfo_1.getFirmwareLocation)({
180
+ firmwareVersion: version,
181
+ remotePath: release.url,
182
+ deviceModel,
183
+ firmwareType,
184
+ intermediaryVersion: isIntermediary && intermediary ? intermediary.version : undefined
185
+ });
186
+ return (0, firmware_1.getBinary)({
187
+ baseUrl,
188
+ path,
189
+ release
190
+ });
180
191
  };
181
- const onCallFirmwareUpdate = async ({ params, context, }) => {
182
- const { deviceList, registerEvents, postMessage, initDevice, log } = context;
183
- log.debug('onCallFirmwareUpdate with params: ', params);
184
- const firmwareType = params.btcOnly ? types_1.FirmwareType.BitcoinOnly : types_1.FirmwareType.Universal;
185
- const device = await initDevice(params?.device?.path);
186
- if (!device.features) {
187
- throw constants_1.ERRORS.TypedError('Device_NotFound', 'Device missing features');
188
- }
189
- if (deviceList.getDeviceCount() > 1) {
190
- throw constants_1.ERRORS.TypedError('Device_MultipleNotSupported', 'Firmware update allowed with only 1 device connected');
191
- }
192
- log.debug('onCallFirmwareUpdate', 'device', device);
193
- registerEvents(device);
194
- const { manual, upgrade, updateFlowType, btcOnly } = getInstallationParams(device, params);
195
- log.debug('onCallFirmwareUpdate', 'installation params', {
196
- manual,
197
- upgrade,
198
- updateFlowType,
199
- btcOnly,
200
- });
201
- const intermediary = !params.binary && device?.firmwareReleaseConfigInfo?.intermediary;
202
- postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_PROGRESS, {
203
- device: device.toMessageObject(),
204
- operation: 'downloading',
205
- progress: 0,
206
- }));
207
- let intermediaryBinaryInfo;
208
- let finalBinaryInfo;
209
- const fwFetchPromises = [];
210
- if (intermediary) {
211
- fwFetchPromises.push(getBinaryHelper({ device, params, firmwareType, isIntermediary: true, log }));
212
- }
213
- fwFetchPromises.push(getBinaryHelper({ device, params, firmwareType, isIntermediary: false, log }));
214
- const [firstResult, finalResult] = await Promise.all(fwFetchPromises);
215
- if (intermediary) {
216
- intermediaryBinaryInfo = firstResult;
217
- finalBinaryInfo = finalResult;
218
- }
219
- else {
220
- finalBinaryInfo = firstResult;
221
- }
222
- const firstBinaryInfo = intermediary ? intermediaryBinaryInfo : finalBinaryInfo;
223
- if (!firstBinaryInfo) {
224
- throw new Error('Missing binary, something went wrong.');
225
- }
226
- postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_PROGRESS, {
227
- device: device.toMessageObject(),
228
- operation: 'downloading',
229
- progress: 100,
192
+ const onCallFirmwareUpdate = async ({
193
+ params,
194
+ context
195
+ }) => {
196
+ const {
197
+ deviceList,
198
+ registerEvents,
199
+ postMessage,
200
+ initDevice,
201
+ log
202
+ } = context;
203
+ log.debug('onCallFirmwareUpdate with params: ', params);
204
+ const firmwareType = params.btcOnly ? types_1.FirmwareType.BitcoinOnly : types_1.FirmwareType.Universal;
205
+ const device = await initDevice(params?.device?.path);
206
+ if (!device.features) {
207
+ throw constants_1.ERRORS.TypedError('Device_NotFound', 'Device missing features');
208
+ }
209
+ if (deviceList.getDeviceCount() > 1) {
210
+ throw constants_1.ERRORS.TypedError('Device_MultipleNotSupported', 'Firmware update allowed with only 1 device connected');
211
+ }
212
+ log.debug('onCallFirmwareUpdate', 'device', device);
213
+ registerEvents(device);
214
+ const {
215
+ manual,
216
+ upgrade,
217
+ updateFlowType,
218
+ btcOnly
219
+ } = getInstallationParams(device, params);
220
+ log.debug('onCallFirmwareUpdate', 'installation params', {
221
+ manual,
222
+ upgrade,
223
+ updateFlowType,
224
+ btcOnly
225
+ });
226
+ const intermediary = !params.binary && device?.firmwareReleaseConfigInfo?.intermediary;
227
+ postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_PROGRESS, {
228
+ device: device.toMessageObject(),
229
+ operation: 'downloading',
230
+ progress: 0
231
+ }));
232
+ let intermediaryBinaryInfo;
233
+ let finalBinaryInfo;
234
+ const fwFetchPromises = [];
235
+ if (intermediary) {
236
+ fwFetchPromises.push(getBinaryHelper({
237
+ device,
238
+ params,
239
+ firmwareType,
240
+ isIntermediary: true,
241
+ log
230
242
  }));
231
- if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && finalBinaryInfo.release) {
232
- const message = (0, events_1.createUiMessage)(events_1.UI.FIRMWARE_DOWNLOADED, {
233
- binary: finalBinaryInfo.binary,
234
- binaryVersion: finalBinaryInfo.binaryVersion,
235
- releaseVersion: finalBinaryInfo.release?.version,
236
- firmwareType,
237
- release: finalBinaryInfo.release,
238
- internalModel: device.features.internal_model,
239
- });
240
- postMessage(message);
241
- }
242
- const deviceInitiallyConnectedInBootloader = device.features.bootloader_mode;
243
- let reconnectedDevice = device;
244
- if (deviceInitiallyConnectedInBootloader) {
245
- log.warn('onCallFirmwareUpdate', 'device is already in bootloader mode.');
246
- await device.acquire();
247
- }
248
- else if (manual) {
249
- reconnectedDevice = await waitForReconnectedDevice({ bootloader: true, method: 'manual' }, { ...context, device });
250
- }
251
- else {
252
- const rebootParams = upgrade
253
- ? {
254
- boot_command: constants_1.PROTO.BootCommand.INSTALL_UPGRADE,
255
- firmware_header: getFwHeader(firstBinaryInfo.binary),
256
- }
257
- : {};
258
- await device.acquire();
259
- const disconnectedPromise = new Promise(resolve => {
260
- deviceList.once('device-disconnect', resolve);
261
- });
262
- await device.getCommands().typedCall('RebootToBootloader', 'Success', rebootParams);
263
- log.info('onCallFirmwareUpdate', 'waiting for disconnected event after rebootToBootloader...');
264
- if (device.descriptor.apiType === 'bluetooth') {
265
- await device.release();
266
- await waitForBluetoothReboot({ device, target: 'bootloader', postMessage });
267
- }
268
- else {
269
- await disconnectedPromise;
270
- if (device.features.major_version === 1) {
271
- await (0, utils_1.resolveAfter)(2000);
272
- }
273
- }
274
- reconnectedDevice = await waitForReconnectedDevice({ bootloader: true, method: 'auto' }, { ...context, device });
243
+ }
244
+ fwFetchPromises.push(getBinaryHelper({
245
+ device,
246
+ params,
247
+ firmwareType,
248
+ isIntermediary: false,
249
+ log
250
+ }));
251
+ const [firstResult, finalResult] = await Promise.all(fwFetchPromises);
252
+ if (intermediary) {
253
+ intermediaryBinaryInfo = firstResult;
254
+ finalBinaryInfo = finalResult;
255
+ } else {
256
+ finalBinaryInfo = firstResult;
257
+ }
258
+ const firstBinaryInfo = intermediary ? intermediaryBinaryInfo : finalBinaryInfo;
259
+ if (!firstBinaryInfo) {
260
+ throw new Error('Missing binary, something went wrong.');
261
+ }
262
+ postMessage((0, events_1.createUiMessage)(events_1.UI.FIRMWARE_PROGRESS, {
263
+ device: device.toMessageObject(),
264
+ operation: 'downloading',
265
+ progress: 100
266
+ }));
267
+ if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && finalBinaryInfo.release) {
268
+ const message = (0, events_1.createUiMessage)(events_1.UI.FIRMWARE_DOWNLOADED, {
269
+ binary: finalBinaryInfo.binary,
270
+ binaryVersion: finalBinaryInfo.binaryVersion,
271
+ releaseVersion: finalBinaryInfo.release?.version,
272
+ firmwareType,
273
+ release: finalBinaryInfo.release,
274
+ internalModel: device.features.internal_model
275
+ });
276
+ postMessage(message);
277
+ }
278
+ const deviceInitiallyConnectedInBootloader = device.features.bootloader_mode;
279
+ let reconnectedDevice = device;
280
+ if (deviceInitiallyConnectedInBootloader) {
281
+ log.warn('onCallFirmwareUpdate', 'device is already in bootloader mode.');
282
+ await device.acquire();
283
+ } else if (manual) {
284
+ reconnectedDevice = await waitForReconnectedDevice({
285
+ bootloader: true,
286
+ method: 'manual'
287
+ }, {
288
+ ...context,
289
+ device
290
+ });
291
+ } else {
292
+ const rebootParams = upgrade ? {
293
+ boot_command: constants_1.PROTO.BootCommand.INSTALL_UPGRADE,
294
+ firmware_header: getFwHeader(firstBinaryInfo.binary)
295
+ } : {};
296
+ await device.acquire();
297
+ const disconnectedPromise = new Promise(resolve => {
298
+ deviceList.once('device-disconnect', resolve);
299
+ });
300
+ await device.getCommands().typedCall('RebootToBootloader', 'Success', rebootParams);
301
+ log.info('onCallFirmwareUpdate', 'waiting for disconnected event after rebootToBootloader...');
302
+ if (device.descriptor.apiType === 'bluetooth') {
303
+ await device.release();
304
+ await waitForBluetoothReboot({
305
+ device,
306
+ target: 'bootloader',
307
+ postMessage
308
+ });
309
+ } else {
310
+ await disconnectedPromise;
311
+ if (device.features.major_version === 1) {
312
+ await (0, utils_1.resolveAfter)(2000);
313
+ }
275
314
  }
276
- const bootloaderVersion = reconnectedDevice.getVersion();
315
+ reconnectedDevice = await waitForReconnectedDevice({
316
+ bootloader: true,
317
+ method: 'auto'
318
+ }, {
319
+ ...context,
320
+ device
321
+ });
322
+ }
323
+ const bootloaderVersion = reconnectedDevice.getVersion();
324
+ await reconnectedDevice.initialize(false);
325
+ let stripped = (0, firmware_1.stripFwHeaders)(firstBinaryInfo.binary);
326
+ const payload = !intermediary && (0, firmware_1.shouldStripFwHeaders)(device.features) ? stripped : firstBinaryInfo.binary;
327
+ await (0, firmware_1.uploadFirmware)({
328
+ typedCall: reconnectedDevice.getCommands().typedCall,
329
+ postMessage,
330
+ device: reconnectedDevice,
331
+ firmwareUploadRequest: {
332
+ payload
333
+ },
334
+ updateFlowType
335
+ });
336
+ log.info('onCallFirmwareUpdate', 'firmware uploaded');
337
+ if (intermediary) {
338
+ log.info('onCallFirmwareUpdate', '...but it was the intermediary firmware, so one more go');
339
+ reconnectedDevice = await waitForReconnectedDevice({
340
+ bootloader: true,
341
+ method: 'manual',
342
+ intermediary: true
343
+ }, {
344
+ ...context,
345
+ device: reconnectedDevice
346
+ });
347
+ stripped = (0, firmware_1.stripFwHeaders)(finalBinaryInfo.binary);
277
348
  await reconnectedDevice.initialize(false);
278
- let stripped = (0, firmware_1.stripFwHeaders)(firstBinaryInfo.binary);
279
- const payload = !intermediary && (0, firmware_1.shouldStripFwHeaders)(device.features) ? stripped : firstBinaryInfo.binary;
280
349
  await (0, firmware_1.uploadFirmware)({
281
- typedCall: reconnectedDevice.getCommands().typedCall,
282
- postMessage,
283
- device: reconnectedDevice,
284
- firmwareUploadRequest: { payload },
285
- updateFlowType,
350
+ typedCall: reconnectedDevice.getCommands().typedCall,
351
+ postMessage,
352
+ device: reconnectedDevice,
353
+ firmwareUploadRequest: {
354
+ payload: stripped
355
+ },
356
+ updateFlowType
286
357
  });
287
- log.info('onCallFirmwareUpdate', 'firmware uploaded');
288
- if (intermediary) {
289
- log.info('onCallFirmwareUpdate', '...but it was the intermediary firmware, so one more go');
290
- reconnectedDevice = await waitForReconnectedDevice({ bootloader: true, method: 'manual', intermediary: true }, { ...context, device: reconnectedDevice });
291
- stripped = (0, firmware_1.stripFwHeaders)(finalBinaryInfo.binary);
292
- await reconnectedDevice.initialize(false);
293
- await (0, firmware_1.uploadFirmware)({
294
- typedCall: reconnectedDevice.getCommands().typedCall,
295
- postMessage,
296
- device: reconnectedDevice,
297
- firmwareUploadRequest: { payload: stripped },
298
- updateFlowType,
299
- });
300
- }
301
- let method = 'wait';
302
- if (device.descriptor.apiType === 'bluetooth') {
303
- await waitForBluetoothReboot({ device, target: 'normal', postMessage });
304
- method = 'auto';
305
- }
306
- reconnectedDevice = await waitForReconnectedDevice({ bootloader: false, method }, { ...context, device: reconnectedDevice });
307
- const installedVersion = reconnectedDevice.getVersion();
308
- if (!bootloaderVersion || !installedVersion) {
309
- throw constants_1.ERRORS.TypedError('Runtime', 'reconnectedDevice.installedVersion is not set');
310
- }
311
- const { binaryVersion, release } = finalBinaryInfo;
312
- const assertBinaryVersion = (0, versionUtils_1.isEqual)(installedVersion, binaryVersion);
313
- const assertReleaseVersion = release?.version
314
- ? (0, versionUtils_1.isEqual)(installedVersion, release?.version)
315
- : true;
316
- await reconnectedDevice.release();
317
- log.info('onCallFirmwareUpdate', `firmware updated to version ${installedVersion}`);
318
- return {
319
- versionCheck: assertBinaryVersion && assertReleaseVersion,
320
- bootloaderVersion,
321
- installedVersion,
322
- binaryVersion,
323
- releaseVersion: release?.version,
324
- };
358
+ }
359
+ let method = 'wait';
360
+ if (device.descriptor.apiType === 'bluetooth') {
361
+ await waitForBluetoothReboot({
362
+ device,
363
+ target: 'normal',
364
+ postMessage
365
+ });
366
+ method = 'auto';
367
+ }
368
+ reconnectedDevice = await waitForReconnectedDevice({
369
+ bootloader: false,
370
+ method
371
+ }, {
372
+ ...context,
373
+ device: reconnectedDevice
374
+ });
375
+ const installedVersion = reconnectedDevice.getVersion();
376
+ if (!bootloaderVersion || !installedVersion) {
377
+ throw constants_1.ERRORS.TypedError('Runtime', 'reconnectedDevice.installedVersion is not set');
378
+ }
379
+ const {
380
+ binaryVersion,
381
+ release
382
+ } = finalBinaryInfo;
383
+ const assertBinaryVersion = (0, versionUtils_1.isEqual)(installedVersion, binaryVersion);
384
+ const assertReleaseVersion = release?.version ? (0, versionUtils_1.isEqual)(installedVersion, release?.version) : true;
385
+ await reconnectedDevice.release();
386
+ log.info('onCallFirmwareUpdate', `firmware updated to version ${installedVersion}`);
387
+ return {
388
+ versionCheck: assertBinaryVersion && assertReleaseVersion,
389
+ bootloaderVersion,
390
+ installedVersion,
391
+ binaryVersion,
392
+ releaseVersion: release?.version
393
+ };
325
394
  };
326
395
  exports.onCallFirmwareUpdate = onCallFirmwareUpdate;
327
396
  //# sourceMappingURL=onCallFirmwareUpdate.js.map