@trezor/connect 9.6.5-beta.2 → 9.7.0-beta.2

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 (415) hide show
  1. package/CHANGELOG.md +43 -15
  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 +6 -4
  75. package/lib/api/ethereum/api/ethereumSignTypedData.js +183 -171
  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.d.ts +11 -0
  82. package/lib/api/evoluGetDelegatedIdentityKey.js +41 -0
  83. package/lib/api/evoluGetNode.js +24 -17
  84. package/lib/api/evoluSignRegistrationRequest.d.ts +12 -0
  85. package/lib/api/evoluSignRegistrationRequest.js +35 -0
  86. package/lib/api/firmware/calculateFirmwareHash.js +44 -32
  87. package/lib/api/firmware/getBinary.js +30 -22
  88. package/lib/api/firmware/index.js +46 -8
  89. package/lib/api/firmware/modifyFirmware.js +13 -12
  90. package/lib/api/firmware/parseFirmwareHeaders.js +29 -30
  91. package/lib/api/firmware/uploadFirmware.js +84 -67
  92. package/lib/api/firmware/verifyEntropy.js +88 -83
  93. package/lib/api/getAccountDescriptor.js +118 -120
  94. package/lib/api/getAccountInfo.d.ts +14 -14
  95. package/lib/api/getAccountInfo.js +316 -287
  96. package/lib/api/getAddress.js +128 -118
  97. package/lib/api/getCoinInfo.js +22 -17
  98. package/lib/api/getDeviceState.js +16 -10
  99. package/lib/api/getFeatures.d.ts +5 -1
  100. package/lib/api/getFeatures.js +15 -12
  101. package/lib/api/getFirmwareHash.js +23 -18
  102. package/lib/api/getNonce.js +12 -9
  103. package/lib/api/getOwnershipId.js +57 -51
  104. package/lib/api/getOwnershipProof.js +66 -60
  105. package/lib/api/getPublicKey.js +72 -66
  106. package/lib/api/getSettings.js +12 -9
  107. package/lib/api/index.d.ts +2 -0
  108. package/lib/api/index.js +350 -58
  109. package/lib/api/loadDevice.js +40 -35
  110. package/lib/api/monero/api/index.js +28 -5
  111. package/lib/api/monero/api/moneroGetAddress.js +108 -82
  112. package/lib/api/monero/api/moneroGetWatchKey.js +37 -32
  113. package/lib/api/monero/api/moneroKeyImageSync.js +111 -107
  114. package/lib/api/monero/api/moneroSignTransaction.js +173 -185
  115. package/lib/api/nem/api/index.js +16 -3
  116. package/lib/api/nem/api/nemGetAddress.js +107 -102
  117. package/lib/api/nem/api/nemSignTransaction.js +25 -20
  118. package/lib/api/nem/nemSignTx.js +128 -125
  119. package/lib/api/pushTransaction.js +31 -27
  120. package/lib/api/recoveryDevice.js +44 -39
  121. package/lib/api/requestLogin.d.ts +0 -1
  122. package/lib/api/requestLogin.js +47 -52
  123. package/lib/api/resetDevice.js +100 -90
  124. package/lib/api/ripple/api/index.js +16 -3
  125. package/lib/api/ripple/api/rippleGetAddress.js +92 -88
  126. package/lib/api/ripple/api/rippleSignTransaction.js +44 -34
  127. package/lib/api/setBrightness.js +21 -16
  128. package/lib/api/setBusy.js +27 -20
  129. package/lib/api/setProxy.js +22 -15
  130. package/lib/api/showDeviceTutorial.js +18 -15
  131. package/lib/api/signMessage.js +50 -46
  132. package/lib/api/signTransaction.js +325 -238
  133. package/lib/api/solana/additionalInfo.js +17 -14
  134. package/lib/api/solana/api/index.js +28 -5
  135. package/lib/api/solana/api/solanaComposeTransaction.js +46 -50
  136. package/lib/api/solana/api/solanaGetAddress.js +92 -90
  137. package/lib/api/solana/api/solanaGetPublicKey.js +56 -52
  138. package/lib/api/solana/api/solanaSignTransaction.js +175 -168
  139. package/lib/api/solana/solanaDefinitions.js +32 -25
  140. package/lib/api/solana/solanaUtils.d.ts +2 -2
  141. package/lib/api/solana/solanaUtils.js +231 -177
  142. package/lib/api/stellar/api/index.js +16 -3
  143. package/lib/api/stellar/api/stellarGetAddress.js +92 -88
  144. package/lib/api/stellar/api/stellarSignTransaction.js +51 -44
  145. package/lib/api/stellar/stellarSignTx.js +184 -179
  146. package/lib/api/tezos/api/index.js +22 -4
  147. package/lib/api/tezos/api/tezosGetAddress.js +92 -88
  148. package/lib/api/tezos/api/tezosGetPublicKey.js +55 -51
  149. package/lib/api/tezos/api/tezosSignTransaction.js +23 -18
  150. package/lib/api/tezos/tezosSignTx.js +183 -169
  151. package/lib/api/thpGetCredentials.js +23 -20
  152. package/lib/api/thpRemoveCredentials.js +28 -21
  153. package/lib/api/unlockPath.js +28 -21
  154. package/lib/api/verifyMessage.js +35 -33
  155. package/lib/api/wipeDevice.js +39 -34
  156. package/lib/backend/BackendManager.js +127 -107
  157. package/lib/backend/Blockchain.d.ts +1 -1
  158. package/lib/backend/Blockchain.js +220 -205
  159. package/lib/backend/BlockchainLink.js +17 -5
  160. package/lib/backend/fees/BitcoinFeeLevels.js +41 -34
  161. package/lib/backend/fees/EthereumFeeLevels.js +51 -51
  162. package/lib/backend/fees/MiscFeeLevels.js +25 -24
  163. package/lib/backend/fees/index.js +28 -21
  164. package/lib/constants/cardano.js +11 -8
  165. package/lib/constants/errors.js +72 -65
  166. package/lib/constants/firmware.js +5 -5
  167. package/lib/constants/index.js +16 -3
  168. package/lib/constants/nem.js +19 -16
  169. package/lib/constants/network.js +15 -22
  170. package/lib/constants/utxo.js +4 -1
  171. package/lib/core/AbstractMethod.d.ts +1 -1
  172. package/lib/core/AbstractMethod.js +248 -224
  173. package/lib/core/index.js +936 -775
  174. package/lib/core/method.js +19 -16
  175. package/lib/core/method.native.js +28 -23
  176. package/lib/core/onCallFirmwareUpdate.js +368 -299
  177. package/lib/data/DataManager.js +85 -77
  178. package/lib/data/analyticsInfo.js +35 -29
  179. package/lib/data/coinInfo.js +154 -156
  180. package/lib/data/config.d.ts +1 -1
  181. package/lib/data/config.js +362 -326
  182. package/lib/data/connectSettings.js +131 -144
  183. package/lib/data/defaultFeeLevels.js +154 -108
  184. package/lib/data/firmwareInfo.d.ts +1 -0
  185. package/lib/data/firmwareInfo.js +407 -377
  186. package/lib/data/thpSettings.js +36 -35
  187. package/lib/data/udevInfo.js +24 -24
  188. package/lib/data/version.d.ts +1 -1
  189. package/lib/data/version.js +6 -5
  190. package/lib/device/Device.d.ts +10 -7
  191. package/lib/device/Device.js +731 -749
  192. package/lib/device/DeviceCommands.js +226 -194
  193. package/lib/device/DeviceCurrentSession.d.ts +427 -337
  194. package/lib/device/DeviceCurrentSession.js +235 -236
  195. package/lib/device/DeviceList.d.ts +2 -0
  196. package/lib/device/DeviceList.js +219 -181
  197. package/lib/device/StateStorage.js +32 -29
  198. package/lib/device/TransportList.d.ts +1 -1
  199. package/lib/device/TransportList.js +37 -36
  200. package/lib/device/TransportManager.js +136 -140
  201. package/lib/device/calculateRevisionForDevice.js +20 -14
  202. package/lib/device/checkFirmwareRevision.js +66 -53
  203. package/lib/device/resolveDescriptorForTaproot.js +26 -16
  204. package/lib/device/thp/handshake.js +95 -82
  205. package/lib/device/thp/index.js +53 -38
  206. package/lib/device/thp/pairing.js +209 -199
  207. package/lib/device/thp/session.js +27 -19
  208. package/lib/device/thp/thpCall.js +53 -43
  209. package/lib/device/workflow/checkFirmwareHash.js +77 -67
  210. package/lib/device/workflow/checkFirmwareHashWithRetries.js +32 -29
  211. package/lib/device/workflow/handshake.js +50 -41
  212. package/lib/device/workflow/index.js +10 -2
  213. package/lib/device/workflow/trezorPushNotification.js +68 -63
  214. package/lib/device/workflow/validateState.js +156 -123
  215. package/lib/events/blockchain.js +13 -10
  216. package/lib/events/call.d.ts +6 -4
  217. package/lib/events/call.js +14 -13
  218. package/lib/events/core.js +24 -21
  219. package/lib/events/device.d.ts +2 -2
  220. package/lib/events/device.js +32 -19
  221. package/lib/events/iframe.js +13 -10
  222. package/lib/events/index.d.ts +0 -1
  223. package/lib/events/index.js +6 -3
  224. package/lib/events/popup.js +20 -17
  225. package/lib/events/transport.d.ts +2 -2
  226. package/lib/events/transport.js +16 -11
  227. package/lib/events/ui-promise.js +4 -1
  228. package/lib/events/ui-request.d.ts +0 -4
  229. package/lib/events/ui-request.js +48 -46
  230. package/lib/events/ui-response.d.ts +2 -2
  231. package/lib/events/ui-response.js +20 -17
  232. package/lib/events/webextension.js +9 -6
  233. package/lib/exports.js +10 -2
  234. package/lib/factory.d.ts +3 -2
  235. package/lib/factory.js +34 -141
  236. package/lib/impl/core-in-module.d.ts +1 -8
  237. package/lib/impl/core-in-module.js +186 -211
  238. package/lib/impl/dynamic.d.ts +0 -1
  239. package/lib/impl/dynamic.js +108 -97
  240. package/lib/index-browser.d.ts +1 -0
  241. package/lib/index-browser.js +18 -16
  242. package/lib/index.d.ts +2 -0
  243. package/lib/index.js +144 -148
  244. package/lib/tsconfig.lib.tsbuildinfo +1 -1
  245. package/lib/types/account.js +4 -1
  246. package/lib/types/api/applyFlags.js +4 -1
  247. package/lib/types/api/applySettings.d.ts +3 -3
  248. package/lib/types/api/applySettings.js +7 -7
  249. package/lib/types/api/authenticateDevice.js +7 -4
  250. package/lib/types/api/authorizeCoinjoin.js +13 -10
  251. package/lib/types/api/backupDevice.js +4 -1
  252. package/lib/types/api/bitcoin/index.d.ts +5 -2
  253. package/lib/types/api/bitcoin/index.js +14 -11
  254. package/lib/types/api/bleUnpair.js +4 -1
  255. package/lib/types/api/blockchainDisconnect.js +4 -1
  256. package/lib/types/api/blockchainEstimateFee.js +4 -1
  257. package/lib/types/api/blockchainEvmRpcCall.js +4 -1
  258. package/lib/types/api/blockchainGetAccountBalanceHistory.js +4 -1
  259. package/lib/types/api/blockchainGetCurrentFiatRates.js +4 -1
  260. package/lib/types/api/blockchainGetFiatRatesForTimestamps.js +4 -1
  261. package/lib/types/api/blockchainGetInfo.js +4 -1
  262. package/lib/types/api/blockchainGetTransactions.js +4 -1
  263. package/lib/types/api/blockchainSetCustomBackend.js +4 -1
  264. package/lib/types/api/blockchainSubscribe.js +4 -1
  265. package/lib/types/api/blockchainSubscribeFiatRates.js +4 -1
  266. package/lib/types/api/blockchainUnsubscribe.js +4 -1
  267. package/lib/types/api/blockchainUnsubscribeFiatRates.js +4 -1
  268. package/lib/types/api/cancel.js +4 -1
  269. package/lib/types/api/cancelCoinjoinAuthorization.js +5 -2
  270. package/lib/types/api/cardano/index.d.ts +4 -4
  271. package/lib/types/api/cardano/index.js +173 -180
  272. package/lib/types/api/cardanoComposeTransaction.js +76 -65
  273. package/lib/types/api/cardanoGetAddress.js +4 -1
  274. package/lib/types/api/cardanoGetNativeScriptHash.js +4 -1
  275. package/lib/types/api/cardanoGetPublicKey.js +4 -1
  276. package/lib/types/api/cardanoSignMessage.js +4 -1
  277. package/lib/types/api/cardanoSignTransaction.js +4 -1
  278. package/lib/types/api/changeLanguage.d.ts +1 -1
  279. package/lib/types/api/changeLanguage.js +13 -13
  280. package/lib/types/api/changePin.js +4 -1
  281. package/lib/types/api/changeWipeCode.js +4 -1
  282. package/lib/types/api/cipherKeyValue.d.ts +2 -2
  283. package/lib/types/api/cipherKeyValue.js +11 -8
  284. package/lib/types/api/composeTransaction.js +4 -1
  285. package/lib/types/api/device.js +1 -2
  286. package/lib/types/api/disableWebUSB.js +4 -1
  287. package/lib/types/api/discoverAccounts.js +204 -55
  288. package/lib/types/api/dispose.js +4 -1
  289. package/lib/types/api/eos/index.d.ts +3 -3
  290. package/lib/types/api/eos/index.js +106 -162
  291. package/lib/types/api/eosGetPublicKey.js +4 -1
  292. package/lib/types/api/eosSignTransaction.js +4 -1
  293. package/lib/types/api/ethereum/index.d.ts +11 -7
  294. package/lib/types/api/ethereum/index.js +70 -65
  295. package/lib/types/api/ethereumGetAddress.js +4 -1
  296. package/lib/types/api/ethereumGetPublicKey.js +4 -1
  297. package/lib/types/api/ethereumSignMessage.js +4 -1
  298. package/lib/types/api/ethereumSignTransaction.js +4 -1
  299. package/lib/types/api/ethereumSignTypedData.js +4 -1
  300. package/lib/types/api/ethereumVerifyMessage.js +4 -1
  301. package/lib/types/api/evoluGetDelegatedIdentityKey.d.ts +9 -0
  302. package/lib/types/api/evoluGetDelegatedIdentityKey.js +6 -0
  303. package/lib/types/api/evoluGetNode.js +4 -1
  304. package/lib/types/api/evoluSignRegistrationRequest.d.ts +4 -0
  305. package/lib/types/api/evoluSignRegistrationRequest.js +6 -0
  306. package/lib/types/api/firmwareUpdate.d.ts +1 -1
  307. package/lib/types/api/firmwareUpdate.js +12 -12
  308. package/lib/types/api/getAccountDescriptor.js +8 -5
  309. package/lib/types/api/getAccountInfo.js +4 -1
  310. package/lib/types/api/getAddress.js +11 -11
  311. package/lib/types/api/getCoinInfo.js +4 -1
  312. package/lib/types/api/getDeviceState.js +4 -1
  313. package/lib/types/api/getFeatures.js +4 -1
  314. package/lib/types/api/getFirmwareHash.js +4 -1
  315. package/lib/types/api/getNonce.d.ts +1 -1
  316. package/lib/types/api/getNonce.js +4 -1
  317. package/lib/types/api/getOwnershipId.js +8 -5
  318. package/lib/types/api/getOwnershipProof.js +14 -9
  319. package/lib/types/api/getPublicKey.js +25 -28
  320. package/lib/types/api/getSettings.js +4 -1
  321. package/lib/types/api/index.d.ts +4 -0
  322. package/lib/types/api/index.js +4 -1
  323. package/lib/types/api/init.js +4 -1
  324. package/lib/types/api/loadDevice.js +4 -1
  325. package/lib/types/api/manifest.js +4 -1
  326. package/lib/types/api/monero/index.js +117 -114
  327. package/lib/types/api/moneroGetAddress.js +4 -1
  328. package/lib/types/api/moneroGetWatchKey.js +4 -1
  329. package/lib/types/api/moneroKeyImageSync.js +4 -1
  330. package/lib/types/api/moneroSignTransaction.js +4 -1
  331. package/lib/types/api/nem/index.d.ts +7 -7
  332. package/lib/types/api/nem/index.js +78 -112
  333. package/lib/types/api/nemGetAddress.js +7 -7
  334. package/lib/types/api/nemSignTransaction.js +4 -1
  335. package/lib/types/api/off.js +4 -1
  336. package/lib/types/api/on.js +4 -1
  337. package/lib/types/api/pushTransaction.js +10 -10
  338. package/lib/types/api/recoveryDevice.d.ts +1 -1
  339. package/lib/types/api/recoveryDevice.js +7 -7
  340. package/lib/types/api/removeAllListeners.js +4 -1
  341. package/lib/types/api/renderWebUSBButton.js +4 -1
  342. package/lib/types/api/requestLogin.d.ts +4 -24
  343. package/lib/types/api/requestLogin.js +11 -13
  344. package/lib/types/api/requestWebUSBDevice.js +4 -1
  345. package/lib/types/api/resetDevice.js +4 -1
  346. package/lib/types/api/ripple/index.js +17 -14
  347. package/lib/types/api/rippleGetAddress.js +4 -1
  348. package/lib/types/api/rippleSignTransaction.js +4 -1
  349. package/lib/types/api/setBrightness.js +4 -1
  350. package/lib/types/api/setBusy.js +4 -1
  351. package/lib/types/api/setProxy.js +4 -1
  352. package/lib/types/api/setTransports.js +4 -1
  353. package/lib/types/api/showDeviceTutorial.js +4 -1
  354. package/lib/types/api/signMessage.js +4 -1
  355. package/lib/types/api/signTransaction.js +4 -1
  356. package/lib/types/api/solana/index.js +55 -56
  357. package/lib/types/api/solanaComposeTransaction.js +4 -1
  358. package/lib/types/api/solanaGetAddress.js +4 -1
  359. package/lib/types/api/solanaGetPublicKey.js +4 -1
  360. package/lib/types/api/solanaSignTransaction.js +4 -1
  361. package/lib/types/api/stellar/index.d.ts +146 -146
  362. package/lib/types/api/stellar/index.js +151 -221
  363. package/lib/types/api/stellarGetAddress.js +4 -1
  364. package/lib/types/api/stellarSignTransaction.js +4 -1
  365. package/lib/types/api/tezos/index.js +46 -43
  366. package/lib/types/api/tezosGetAddress.js +4 -1
  367. package/lib/types/api/tezosGetPublicKey.js +4 -1
  368. package/lib/types/api/tezosSignTransaction.js +4 -1
  369. package/lib/types/api/thpGetCredentials.js +4 -1
  370. package/lib/types/api/thpRemoveCredentials.js +4 -1
  371. package/lib/types/api/uiResponse.js +4 -1
  372. package/lib/types/api/unlockPath.js +6 -3
  373. package/lib/types/api/verifyMessage.js +4 -1
  374. package/lib/types/api/wipeDevice.js +4 -1
  375. package/lib/types/coinInfo.js +62 -77
  376. package/lib/types/device.d.ts +11 -2
  377. package/lib/types/device.js +9 -4
  378. package/lib/types/fees.js +31 -37
  379. package/lib/types/firmware.js +4 -1
  380. package/lib/types/index.d.ts +1 -0
  381. package/lib/types/index.js +18 -3
  382. package/lib/types/params.js +25 -16
  383. package/lib/types/settings.js +4 -1
  384. package/lib/types/utils.js +4 -1
  385. package/lib/types/workflow.js +4 -1
  386. package/lib/utils/accountUtils.js +76 -81
  387. package/lib/utils/addressUtils.js +21 -21
  388. package/lib/utils/assetUtils.js +29 -26
  389. package/lib/utils/assets-browser.js +19 -13
  390. package/lib/utils/assets.js +10 -9
  391. package/lib/utils/assets.native.js +24 -23
  392. package/lib/utils/assetsTypes.js +4 -1
  393. package/lib/utils/debug.js +18 -13
  394. package/lib/utils/deviceFeaturesUtils.js +105 -127
  395. package/lib/utils/ethereumUtils.js +9 -6
  396. package/lib/utils/firmwareReleaseConfigUtils.js +69 -57
  397. package/lib/utils/firmwareUtils.js +45 -57
  398. package/lib/utils/formatUtils.d.ts +0 -1
  399. package/lib/utils/formatUtils.js +63 -62
  400. package/lib/utils/hdnodeUtils.d.ts +0 -1
  401. package/lib/utils/hdnodeUtils.js +51 -57
  402. package/lib/utils/interactionTimeout.js +26 -23
  403. package/lib/utils/pathUtils.js +132 -148
  404. package/lib/utils/popupPromiseManager.js +23 -14
  405. package/lib/utils/proxy-event-emitter.js +63 -60
  406. package/lib/utils/uiPromiseManager.js +55 -43
  407. package/lib/utils/urlUtils.js +20 -26
  408. package/lib/utils/versionCheck.js +10 -10
  409. package/lib/workers/workers-browser.d.ts +5 -5
  410. package/lib/workers/workers-browser.js +5 -2
  411. package/lib/workers/workers.d.ts +1 -1
  412. package/lib/workers/workers.js +49 -38
  413. package/lib/workers/workers.native.d.ts +5 -5
  414. package/lib/workers/workers.native.js +4 -1
  415. package/package.json +26 -23
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFirmwareLocation = exports.getFirmwareStatus = exports.getFirmwareReleaseConfigInfo = exports.getReleaseInfo = exports.getLanguage = exports.initializeFirmwareConfig = exports.createRemoteFirmwareConfig = exports.createLocalFirmwareConfig = exports.getReleaseByVersion = exports.getReleaseConfig = exports.getOnlineReleaseByVersion = exports.getBundledRelease = exports.getOnlineFirmwareBaseUrl = void 0;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getFirmwareLocation = exports.getFirmwareStatus = exports.getFirmwareReleaseConfigInfo = exports.getReleaseInfo = exports.getCurrentVersion = exports.getLanguage = exports.initializeFirmwareConfig = exports.createRemoteFirmwareConfig = exports.createLocalFirmwareConfig = exports.getReleaseByVersion = exports.getReleaseConfig = exports.getOnlineReleaseByVersion = exports.getBundledRelease = exports.getOnlineFirmwareBaseUrl = void 0;
4
7
  const device_utils_1 = require("@trezor/device-utils");
5
8
  const utils_1 = require("@trezor/utils");
6
9
  const DataManager_1 = require("./DataManager");
@@ -8,444 +11,471 @@ const assetUtils_1 = require("../utils/assetUtils");
8
11
  const assets_1 = require("../utils/assets");
9
12
  const firmwareUtils_1 = require("../utils/firmwareUtils");
10
13
  const RELEASES_URL_REMOTE_BASE = {
11
- BASE_URL: 'https://data.trezor.io',
12
- MIDDLE_PATH: 'firmware',
14
+ BASE_URL: 'https://data.trezor.io',
15
+ MIDDLE_PATH: 'firmware'
13
16
  };
14
17
  const UNSIGNED_URL_REMOTE_BASE = {
15
- BASE_URL: 'https://data.trezor.io',
16
- MIDDLE_PATH: 'dev/firmware/releases/unsigned',
18
+ BASE_URL: 'https://data.trezor.io',
19
+ MIDDLE_PATH: 'dev/firmware/releases/unsigned'
17
20
  };
18
21
  const UNSIGNED_STABLE_URL_REMOTE_BASE = {
19
- BASE_URL: 'https://data.trezor.io',
20
- MIDDLE_PATH: 'dev/firmware/releases/unsigned-stable',
22
+ BASE_URL: 'https://data.trezor.io',
23
+ MIDDLE_PATH: 'dev/firmware/releases/unsigned-stable'
21
24
  };
22
25
  const SIGNED_URL_REMOTE_BASE = {
23
- BASE_URL: 'https://suite.corp.sldev.cz',
24
- MIDDLE_PATH: 'firmware/signed',
26
+ BASE_URL: 'https://suite.corp.sldev.cz',
27
+ MIDDLE_PATH: 'firmware/signed'
25
28
  };
26
29
  const SIGNED_LOCALHOST = {
27
- BASE_URL: 'http://localhost:3000',
28
- MIDDLE_PATH: 'firmware/signed',
30
+ BASE_URL: 'http://localhost:3000',
31
+ MIDDLE_PATH: 'firmware/signed'
29
32
  };
30
33
  const UNSIGNED_LOCALHOST = {
31
- BASE_URL: 'http://localhost:3000',
32
- MIDDLE_PATH: 'firmware/unsigned',
34
+ BASE_URL: 'http://localhost:3000',
35
+ MIDDLE_PATH: 'firmware/unsigned'
33
36
  };
34
37
  const FIRMWARE_REMOTE_BASE_URLS = {
35
- production: RELEASES_URL_REMOTE_BASE,
36
- 'test-unsigned': UNSIGNED_URL_REMOTE_BASE,
37
- 'test-unsigned-stable': UNSIGNED_STABLE_URL_REMOTE_BASE,
38
- 'test-signed': SIGNED_URL_REMOTE_BASE,
39
- 'localhost-unsigned': UNSIGNED_LOCALHOST,
40
- 'localhost-signed': SIGNED_LOCALHOST,
38
+ production: RELEASES_URL_REMOTE_BASE,
39
+ 'test-unsigned': UNSIGNED_URL_REMOTE_BASE,
40
+ 'test-unsigned-stable': UNSIGNED_STABLE_URL_REMOTE_BASE,
41
+ 'test-signed': SIGNED_URL_REMOTE_BASE,
42
+ 'localhost-unsigned': UNSIGNED_LOCALHOST,
43
+ 'localhost-signed': SIGNED_LOCALHOST
41
44
  };
42
45
  const getOnlineFirmwareBaseUrl = () => {
43
- const firmwareUpdateSource = DataManager_1.DataManager.getSettings('firmwareUpdateSource');
44
- if (!firmwareUpdateSource) {
45
- return {
46
- ...FIRMWARE_REMOTE_BASE_URLS['production'],
47
- env: 'production',
48
- };
49
- }
46
+ const firmwareUpdateSource = DataManager_1.DataManager.getSettings('firmwareUpdateSource');
47
+ if (!firmwareUpdateSource) {
50
48
  return {
51
- ...FIRMWARE_REMOTE_BASE_URLS[firmwareUpdateSource],
52
- env: firmwareUpdateSource,
49
+ ...FIRMWARE_REMOTE_BASE_URLS['production'],
50
+ env: 'production'
53
51
  };
52
+ }
53
+ return {
54
+ ...FIRMWARE_REMOTE_BASE_URLS[firmwareUpdateSource],
55
+ env: firmwareUpdateSource
56
+ };
54
57
  };
55
58
  exports.getOnlineFirmwareBaseUrl = getOnlineFirmwareBaseUrl;
56
59
  const getBundledFirmwareVersion = (deviceModel, firmwareType) => {
57
- const localFirmwareReleaseConfig = DataManager_1.DataManager.getLocalFirmwareReleaseConfig();
58
- const modelReleases = localFirmwareReleaseConfig.releases[deviceModel];
59
- const bundledRelease = modelReleases?.[firmwareType];
60
- if (!bundledRelease) {
61
- return;
62
- }
63
- const bundledVersion = bundledRelease.releasePath.match(/(\d+\.\d+\.\d+)/);
64
- if (!bundledVersion) {
65
- throw new Error('Fimrware bundled version was not found.');
66
- }
67
- return bundledVersion[0];
60
+ const localFirmwareReleaseConfig = DataManager_1.DataManager.getLocalFirmwareReleaseConfig();
61
+ const modelReleases = localFirmwareReleaseConfig.releases[deviceModel];
62
+ const bundledRelease = modelReleases?.[firmwareType];
63
+ if (!bundledRelease) {
64
+ return;
65
+ }
66
+ const bundledVersion = bundledRelease.releasePath.match(/(\d+\.\d+\.\d+)/);
67
+ if (!bundledVersion) {
68
+ throw new Error('Fimrware bundled version was not found.');
69
+ }
70
+ return bundledVersion[0];
68
71
  };
69
72
  const getBundledRelease = (deviceModel, firmwareType) => {
70
- const version = getBundledFirmwareVersion(deviceModel, firmwareType);
71
- if (!version) {
72
- return;
73
- }
74
- const versionArray = utils_1.versionUtils.tryParse(version);
75
- if (!versionArray) {
76
- throw new Error('There was error parsing bundled release.');
77
- }
78
- return (0, assetUtils_1.getReleaseAsset)(deviceModel, versionArray, firmwareType);
73
+ const version = getBundledFirmwareVersion(deviceModel, firmwareType);
74
+ if (!version) {
75
+ return;
76
+ }
77
+ const versionArray = utils_1.versionUtils.tryParse(version);
78
+ if (!versionArray) {
79
+ throw new Error('There was error parsing bundled release.');
80
+ }
81
+ return (0, assetUtils_1.getReleaseAsset)(deviceModel, versionArray, firmwareType);
79
82
  };
80
83
  exports.getBundledRelease = getBundledRelease;
81
- const getOnlineReleaseByPath = async (releasePath) => {
82
- const onlineFirmwareBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
83
- const url = `${onlineFirmwareBaseUrl.BASE_URL}/${releasePath}`;
84
- const response = await (0, assets_1.httpRequest)(url, 'json', {
85
- signal: AbortSignal.timeout(10000),
86
- skipLocalForceDownload: true,
87
- });
88
- return response;
84
+ const getOnlineReleaseByPath = async releasePath => {
85
+ const onlineFirmwareBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
86
+ const url = `${onlineFirmwareBaseUrl.BASE_URL}/${releasePath}`;
87
+ const response = await (0, assets_1.httpRequest)(url, 'json', {
88
+ signal: AbortSignal.timeout(10000),
89
+ skipLocalForceDownload: true
90
+ });
91
+ return response;
89
92
  };
90
93
  const getOnlineReleasePath = (deviceModel, firmwareVersion, firmwareType) => {
91
- const onlineFirmwareBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
92
- const firmwareTypeFileString = firmwareType === device_utils_1.FirmwareType.BitcoinOnly ? 'bitcoinonly' : 'universal';
93
- const relaseJsonFilename = `${deviceModel.toLowerCase()}-${firmwareVersion.join('.')}-${firmwareTypeFileString}.json`;
94
- const origin = `${onlineFirmwareBaseUrl.MIDDLE_PATH}/${deviceModel.toLowerCase()}/${firmwareTypeFileString}`;
95
- const releasePath = `${origin}/${relaseJsonFilename}`;
96
- return releasePath;
94
+ const onlineFirmwareBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
95
+ const firmwareTypeFileString = firmwareType === device_utils_1.FirmwareType.BitcoinOnly ? 'bitcoinonly' : 'universal';
96
+ const relaseJsonFilename = `${deviceModel.toLowerCase()}-${firmwareVersion.join('.')}-${firmwareTypeFileString}.json`;
97
+ const origin = `${onlineFirmwareBaseUrl.MIDDLE_PATH}/${deviceModel.toLowerCase()}/${firmwareTypeFileString}`;
98
+ const releasePath = `${origin}/${relaseJsonFilename}`;
99
+ return releasePath;
97
100
  };
98
101
  const getOnlineReleaseByVersion = async (deviceModel, firmwareVersion, firmwareType) => {
99
- const releasePath = getOnlineReleasePath(deviceModel, firmwareVersion, firmwareType);
100
- const onlineRelease = await getOnlineReleaseByPath(releasePath);
101
- if (!onlineRelease || !utils_1.versionUtils.isEqual(onlineRelease.version, firmwareVersion)) {
102
- return;
103
- }
104
- return onlineRelease;
102
+ const releasePath = getOnlineReleasePath(deviceModel, firmwareVersion, firmwareType);
103
+ const onlineRelease = await getOnlineReleaseByPath(releasePath);
104
+ if (!onlineRelease || !utils_1.versionUtils.isEqual(onlineRelease.version, firmwareVersion)) {
105
+ return;
106
+ }
107
+ return onlineRelease;
105
108
  };
106
109
  exports.getOnlineReleaseByVersion = getOnlineReleaseByVersion;
107
110
  const getReleaseConfig = (features, firmwareType) => {
108
- const { internal_model } = features;
109
- if (internal_model === device_utils_1.DeviceModelInternal.UNKNOWN) {
110
- return undefined;
111
- }
112
- const firmwareReleaseConfig = DataManager_1.DataManager.getFirmwareReleaseConfig();
113
- if (!firmwareReleaseConfig) {
114
- throw new Error('Firmware release config not loaded.');
115
- }
116
- const deviceMessageRelease = firmwareReleaseConfig[internal_model];
117
- if (!deviceMessageRelease) {
118
- return;
119
- }
120
- return deviceMessageRelease[firmwareType];
111
+ const {
112
+ internal_model
113
+ } = features;
114
+ if (internal_model === device_utils_1.DeviceModelInternal.UNKNOWN) {
115
+ return undefined;
116
+ }
117
+ const firmwareReleaseConfig = DataManager_1.DataManager.getFirmwareReleaseConfig();
118
+ if (!firmwareReleaseConfig) {
119
+ throw new Error('Firmware release config not loaded.');
120
+ }
121
+ const deviceMessageRelease = firmwareReleaseConfig[internal_model];
122
+ if (!deviceMessageRelease) {
123
+ return;
124
+ }
125
+ return deviceMessageRelease[firmwareType];
121
126
  };
122
127
  exports.getReleaseConfig = getReleaseConfig;
123
128
  const getReleaseByVersion = async (features, firmwareVersion, firmwareType) => {
124
- const deviceModel = features.internal_model;
125
- const tryGetRelease = async (getter) => {
126
- try {
127
- return await getter();
128
- }
129
- catch {
130
- return;
131
- }
132
- };
133
- const releaseFromConfig = (0, exports.getReleaseConfig)(features, firmwareType)?.release;
134
- if (releaseFromConfig && utils_1.versionUtils.isEqual(firmwareVersion, releaseFromConfig.version)) {
135
- return releaseFromConfig;
136
- }
137
- const releaseName = (0, firmwareUtils_1.buildLocalReleaseName)(firmwareType, deviceModel, firmwareVersion);
138
- const { firmwareDir, firmwareList } = DataManager_1.DataManager.getLocalFirmwares();
139
- if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && firmwareList.includes(releaseName)) {
140
- const localReleasePath = `${firmwareDir}${releaseName}`;
141
- const localReleaseBuffer = await (0, assets_1.httpRequest)(localReleasePath, 'json');
142
- return JSON.parse(localReleaseBuffer.toString());
143
- }
144
- const release = (await tryGetRelease(() => (0, assetUtils_1.getReleaseAsset)(deviceModel, firmwareVersion, firmwareType))) ||
145
- (await tryGetRelease(() => (0, exports.getOnlineReleaseByVersion)(deviceModel, firmwareVersion, firmwareType)));
146
- if (release && utils_1.versionUtils.isEqual(release.version, firmwareVersion)) {
147
- return release;
148
- }
149
- return;
129
+ const deviceModel = features.internal_model;
130
+ const tryGetRelease = async getter => {
131
+ try {
132
+ return await getter();
133
+ } catch {
134
+ return;
135
+ }
136
+ };
137
+ const releaseFromConfig = (0, exports.getReleaseConfig)(features, firmwareType)?.release;
138
+ if (releaseFromConfig && utils_1.versionUtils.isEqual(firmwareVersion, releaseFromConfig.version)) {
139
+ return releaseFromConfig;
140
+ }
141
+ const releaseName = (0, firmwareUtils_1.buildLocalReleaseName)(firmwareType, deviceModel, firmwareVersion);
142
+ const {
143
+ firmwareDir,
144
+ firmwareList
145
+ } = DataManager_1.DataManager.getLocalFirmwares();
146
+ if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && firmwareList.includes(releaseName)) {
147
+ const localReleasePath = `${firmwareDir}${releaseName}`;
148
+ const localReleaseBuffer = await (0, assets_1.httpRequest)(localReleasePath, 'json');
149
+ return JSON.parse(localReleaseBuffer.toString());
150
+ }
151
+ const release = (await tryGetRelease(() => (0, assetUtils_1.getReleaseAsset)(deviceModel, firmwareVersion, firmwareType))) || (await tryGetRelease(() => (0, exports.getOnlineReleaseByVersion)(deviceModel, firmwareVersion, firmwareType)));
152
+ if (release && utils_1.versionUtils.isEqual(release.version, firmwareVersion)) {
153
+ return release;
154
+ }
155
+ return;
150
156
  };
151
157
  exports.getReleaseByVersion = getReleaseByVersion;
152
- const createLocalFirmwareConfig = (baseConfig) => {
153
- const releaseEntries = Object.entries(baseConfig.releases)
154
- .map(([deviceModel, modelReleases]) => {
155
- const modelKey = deviceModel;
156
- if (modelKey === device_utils_1.DeviceModelInternal.UNKNOWN)
157
- return null;
158
- const { 'bitcoin-only': bitcoinOnlyConfig, universal: universalConfig } = modelReleases ?? {};
159
- if (!bitcoinOnlyConfig?.releasePath || !universalConfig?.releasePath)
160
- return null;
161
- const btcOnlyRelease = (0, exports.getBundledRelease)(modelKey, device_utils_1.FirmwareType.BitcoinOnly);
162
- const universalRelease = (0, exports.getBundledRelease)(modelKey, device_utils_1.FirmwareType.Universal);
163
- if (!btcOnlyRelease || !universalRelease)
164
- return null;
165
- const releases = {
166
- [device_utils_1.FirmwareType.BitcoinOnly]: { ...bitcoinOnlyConfig, release: btcOnlyRelease },
167
- [device_utils_1.FirmwareType.Universal]: { ...universalConfig, release: universalRelease },
168
- };
169
- return [modelKey, releases];
170
- })
171
- .filter(entry => entry !== null);
172
- return Object.fromEntries(releaseEntries);
158
+ const createLocalFirmwareConfig = baseConfig => {
159
+ const releaseEntries = Object.entries(baseConfig.releases).map(([deviceModel, modelReleases]) => {
160
+ const modelKey = deviceModel;
161
+ if (modelKey === device_utils_1.DeviceModelInternal.UNKNOWN) return null;
162
+ const {
163
+ 'bitcoin-only': bitcoinOnlyConfig,
164
+ universal: universalConfig
165
+ } = modelReleases ?? {};
166
+ if (!bitcoinOnlyConfig?.releasePath || !universalConfig?.releasePath) return null;
167
+ const btcOnlyRelease = (0, exports.getBundledRelease)(modelKey, device_utils_1.FirmwareType.BitcoinOnly);
168
+ const universalRelease = (0, exports.getBundledRelease)(modelKey, device_utils_1.FirmwareType.Universal);
169
+ if (!btcOnlyRelease || !universalRelease) return null;
170
+ const releases = {
171
+ [device_utils_1.FirmwareType.BitcoinOnly]: {
172
+ ...bitcoinOnlyConfig,
173
+ release: btcOnlyRelease
174
+ },
175
+ [device_utils_1.FirmwareType.Universal]: {
176
+ ...universalConfig,
177
+ release: universalRelease
178
+ }
179
+ };
180
+ return [modelKey, releases];
181
+ }).filter(entry => entry !== null);
182
+ return Object.fromEntries(releaseEntries);
173
183
  };
174
184
  exports.createLocalFirmwareConfig = createLocalFirmwareConfig;
175
- const createRemoteFirmwareConfig = async (config) => {
176
- const releaseEntryPromises = Object.entries(config.releases).map(async ([deviceModel, modelReleases]) => {
177
- const modelKey = deviceModel;
178
- if (modelKey === device_utils_1.DeviceModelInternal.UNKNOWN)
179
- return null;
180
- const { 'bitcoin-only': bitcoinOnlyConfig, universal: universalConfig } = modelReleases ?? {};
181
- if (!bitcoinOnlyConfig?.releasePath || !universalConfig?.releasePath)
182
- return null;
183
- const [bitcoinOnlyRelease, universalRelease] = await Promise.all([
184
- getOnlineReleaseByPath(bitcoinOnlyConfig.releasePath),
185
- getOnlineReleaseByPath(universalConfig.releasePath),
186
- ]);
187
- if (!universalRelease || !bitcoinOnlyRelease)
188
- return null;
189
- const releases = {
190
- [device_utils_1.FirmwareType.BitcoinOnly]: {
191
- ...bitcoinOnlyConfig,
192
- release: bitcoinOnlyRelease,
193
- },
194
- [device_utils_1.FirmwareType.Universal]: { ...universalConfig, release: universalRelease },
195
- };
196
- return [modelKey, releases];
197
- });
198
- const validEntries = (await Promise.all(releaseEntryPromises)).filter(entry => entry !== null);
199
- return Object.fromEntries(validEntries);
185
+ const createRemoteFirmwareConfig = async config => {
186
+ const releaseEntryPromises = Object.entries(config.releases).map(async ([deviceModel, modelReleases]) => {
187
+ const modelKey = deviceModel;
188
+ if (modelKey === device_utils_1.DeviceModelInternal.UNKNOWN) return null;
189
+ const {
190
+ 'bitcoin-only': bitcoinOnlyConfig,
191
+ universal: universalConfig
192
+ } = modelReleases ?? {};
193
+ if (!bitcoinOnlyConfig?.releasePath || !universalConfig?.releasePath) return null;
194
+ const [bitcoinOnlyRelease, universalRelease] = await Promise.all([getOnlineReleaseByPath(bitcoinOnlyConfig.releasePath), getOnlineReleaseByPath(universalConfig.releasePath)]);
195
+ if (!universalRelease || !bitcoinOnlyRelease) return null;
196
+ const releases = {
197
+ [device_utils_1.FirmwareType.BitcoinOnly]: {
198
+ ...bitcoinOnlyConfig,
199
+ release: bitcoinOnlyRelease
200
+ },
201
+ [device_utils_1.FirmwareType.Universal]: {
202
+ ...universalConfig,
203
+ release: universalRelease
204
+ }
205
+ };
206
+ return [modelKey, releases];
207
+ });
208
+ const validEntries = (await Promise.all(releaseEntryPromises)).filter(entry => entry !== null);
209
+ return Object.fromEntries(validEntries);
200
210
  };
201
211
  exports.createRemoteFirmwareConfig = createRemoteFirmwareConfig;
202
212
  const initializeFirmwareConfig = async (config, isRemote) => {
203
- if (isRemote) {
204
- try {
205
- const remoteReleases = await (0, exports.createRemoteFirmwareConfig)(config);
206
- return {
207
- releases: remoteReleases,
208
- intermediaries: config.intermediaries,
209
- };
210
- }
211
- catch {
212
- }
213
- }
214
- const localFirmwareReleaseConfig = DataManager_1.DataManager.getLocalFirmwareReleaseConfig();
215
- const localReleases = (0, exports.createLocalFirmwareConfig)(localFirmwareReleaseConfig);
216
- return {
217
- releases: localReleases,
218
- intermediaries: localFirmwareReleaseConfig.intermediaries,
219
- };
213
+ if (isRemote) {
214
+ try {
215
+ const remoteReleases = await (0, exports.createRemoteFirmwareConfig)(config);
216
+ return {
217
+ releases: remoteReleases,
218
+ intermediaries: config.intermediaries
219
+ };
220
+ } catch {}
221
+ }
222
+ const localFirmwareReleaseConfig = DataManager_1.DataManager.getLocalFirmwareReleaseConfig();
223
+ const localReleases = (0, exports.createLocalFirmwareConfig)(localFirmwareReleaseConfig);
224
+ return {
225
+ releases: localReleases,
226
+ intermediaries: localFirmwareReleaseConfig.intermediaries
227
+ };
220
228
  };
221
229
  exports.initializeFirmwareConfig = initializeFirmwareConfig;
222
- const getLanguage = (languageBinPath) => {
223
- const baseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
224
- const url = `${baseUrl.BASE_URL}/${languageBinPath}`;
225
- return (0, assets_1.httpRequest)(url, 'binary');
230
+ const getLanguage = languageBinPath => {
231
+ const baseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
232
+ const url = `${baseUrl.BASE_URL}/${languageBinPath}`;
233
+ return (0, assets_1.httpRequest)(url, 'binary');
226
234
  };
227
235
  exports.getLanguage = getLanguage;
228
- const getCurrentVersion = (features) => {
229
- if (!(0, firmwareUtils_1.isStrictFeatures)(features)) {
230
- throw new Error('Features of unexpected shape provided.');
231
- }
232
- const { bootloader_mode, major_version, minor_version, patch_version, fw_major, fw_minor, fw_patch, } = features;
233
- const fw_version = [fw_major, fw_minor, fw_patch];
234
- const version = [major_version, minor_version, patch_version];
235
- const bootloaderVersion = bootloader_mode ? version : null;
236
- const fwVersion = bootloader_mode ? fw_version : version;
237
- return {
238
- bootloaderVersion,
239
- firmwareVersion: fwVersion.includes(null) ? null : fwVersion,
240
- };
236
+ const getCurrentVersion = features => {
237
+ if (!(0, firmwareUtils_1.isStrictFeatures)(features)) {
238
+ throw new Error('Features of unexpected shape provided.');
239
+ }
240
+ const {
241
+ bootloader_mode,
242
+ major_version,
243
+ minor_version,
244
+ patch_version,
245
+ fw_major,
246
+ fw_minor,
247
+ fw_patch
248
+ } = features;
249
+ const fw_version = [fw_major, fw_minor, fw_patch];
250
+ const version = [major_version, minor_version, patch_version];
251
+ const bootloaderVersion = bootloader_mode ? version : null;
252
+ const fwVersion = bootloader_mode ? fw_version : version;
253
+ return {
254
+ bootloaderVersion,
255
+ firmwareVersion: fwVersion.includes(null) ? null : fwVersion
256
+ };
241
257
  };
242
- const getIntermediaryMessageRelease = (features) => {
243
- const config = DataManager_1.DataManager.getFirmwareIntermediaryReleaseConfig();
244
- if (!config) {
245
- throw new Error('Firmware release config not loaded.');
246
- }
247
- const deviceIntermediaryReleases = config[features.internal_model];
248
- if (!deviceIntermediaryReleases || deviceIntermediaryReleases.length === 0) {
249
- return;
250
- }
251
- const { bootloaderVersion, firmwareVersion } = getCurrentVersion(features);
252
- const currentVersion = features.bootloader_mode ? bootloaderVersion : firmwareVersion;
253
- const minVersionKey = features.bootloader_mode
254
- ? 'min_bootloader_version'
255
- : 'min_firmware_version';
256
- if (!currentVersion) {
257
- return undefined;
258
- }
259
- return deviceIntermediaryReleases.find(release => utils_1.versionUtils.isNewer(release[minVersionKey], currentVersion));
258
+ exports.getCurrentVersion = getCurrentVersion;
259
+ const getIntermediaryMessageRelease = features => {
260
+ const config = DataManager_1.DataManager.getFirmwareIntermediaryReleaseConfig();
261
+ if (!config) {
262
+ throw new Error('Firmware release config not loaded.');
263
+ }
264
+ const deviceIntermediaryReleases = config[features.internal_model];
265
+ if (!deviceIntermediaryReleases || deviceIntermediaryReleases.length === 0) {
266
+ return;
267
+ }
268
+ const {
269
+ bootloaderVersion,
270
+ firmwareVersion
271
+ } = (0, exports.getCurrentVersion)(features);
272
+ const currentVersion = features.bootloader_mode ? bootloaderVersion : firmwareVersion;
273
+ const minVersionKey = features.bootloader_mode ? 'min_bootloader_version' : 'min_firmware_version';
274
+ if (!currentVersion) {
275
+ return undefined;
276
+ }
277
+ return deviceIntermediaryReleases.find(release => utils_1.versionUtils.isNewer(release[minVersionKey], currentVersion));
260
278
  };
261
- const getIsBitcoinOnlyAvailable = (features) => {
262
- const { internal_model } = features;
263
- if (internal_model === device_utils_1.DeviceModelInternal.UNKNOWN) {
264
- return false;
265
- }
266
- const firmwareReleaseConfig = DataManager_1.DataManager.getFirmwareReleaseConfig();
267
- if (!firmwareReleaseConfig) {
268
- throw new Error('Firmware release config not loaded.');
269
- }
270
- const deviceMessageRelease = firmwareReleaseConfig[internal_model];
271
- return !!deviceMessageRelease && !!deviceMessageRelease[device_utils_1.FirmwareType.BitcoinOnly];
279
+ const getIsBitcoinOnlyAvailable = features => {
280
+ const {
281
+ internal_model
282
+ } = features;
283
+ if (internal_model === device_utils_1.DeviceModelInternal.UNKNOWN) {
284
+ return false;
285
+ }
286
+ const firmwareReleaseConfig = DataManager_1.DataManager.getFirmwareReleaseConfig();
287
+ if (!firmwareReleaseConfig) {
288
+ throw new Error('Firmware release config not loaded.');
289
+ }
290
+ const deviceMessageRelease = firmwareReleaseConfig[internal_model];
291
+ return !!deviceMessageRelease && !!deviceMessageRelease[device_utils_1.FirmwareType.BitcoinOnly];
272
292
  };
273
- const isValidConditionalRelease = (release) => !!(release.version && release.min_firmware_version && release.min_bootloader_version);
293
+ const isValidConditionalRelease = release => !!(release.version && release.min_firmware_version && release.min_bootloader_version);
274
294
  const calculateShouldOfferRelease = (rolloutProbability, deviceId) => {
275
- if (rolloutProbability < 0 || rolloutProbability > 100) {
276
- throw new Error('Probability must be between 0 and 100.');
277
- }
278
- if (deviceId === null) {
279
- return rolloutProbability > 0;
280
- }
281
- else {
282
- const deterministicValueToCompare = (0, utils_1.getIntegerInRangeFromString)(deviceId, 101);
283
- return deterministicValueToCompare < rolloutProbability;
284
- }
295
+ if (rolloutProbability < 0 || rolloutProbability > 100) {
296
+ throw new Error('Probability must be between 0 and 100.');
297
+ }
298
+ if (deviceId === null) {
299
+ return rolloutProbability > 0;
300
+ } else {
301
+ const deterministicValueToCompare = (0, utils_1.getIntegerInRangeFromString)(deviceId, 101);
302
+ return deterministicValueToCompare < rolloutProbability;
303
+ }
285
304
  };
286
305
  const getChangelog = (releases, features) => {
287
- if (features.bootloader_mode) {
288
- if (features.firmware_present && features.major_version === 1) {
289
- return null;
290
- }
291
- if (features.firmware_present && features.major_version === 2) {
292
- return releases.filter(r => utils_1.versionUtils.isNewer(r.version, [
293
- features.fw_major,
294
- features.fw_minor,
295
- features.fw_patch,
296
- ]));
297
- }
298
- return releases;
306
+ if (features.bootloader_mode) {
307
+ if (features.firmware_present && features.major_version === 1) {
308
+ return null;
309
+ }
310
+ if (features.firmware_present && features.major_version === 2) {
311
+ return releases.filter(r => utils_1.versionUtils.isNewer(r.version, [features.fw_major, features.fw_minor, features.fw_patch]));
299
312
  }
300
- return releases.filter(r => utils_1.versionUtils.isNewer(r.version, [
301
- features.major_version,
302
- features.minor_version,
303
- features.patch_version,
304
- ]));
313
+ return releases;
314
+ }
315
+ return releases.filter(r => utils_1.versionUtils.isNewer(r.version, [features.major_version, features.minor_version, features.patch_version]));
305
316
  };
306
- const isRequired = (changelog) => {
307
- if (!changelog || !changelog.length)
308
- return null;
309
- return changelog.some(item => item.required);
317
+ const isRequired = changelog => {
318
+ if (!changelog || !changelog.length) return null;
319
+ return changelog.some(item => item.required);
310
320
  };
311
- const getReleaseInfo = ({ features, release, conditions, intermediary, firmwareType, isBitcoinOnlyAvailable, releasesOfDevice, }) => {
312
- if (!(0, firmwareUtils_1.isStrictFeatures)(features)) {
313
- throw new Error('Features of unexpected shape provided.');
314
- }
315
- if (!isValidConditionalRelease(release)) {
316
- throw new Error(`Release object in unexpected shape.`);
317
- }
318
- const { min_firmware_version, min_bootloader_version } = release;
319
- const changelog = getChangelog(releasesOfDevice, features);
320
- let isNewer = false;
321
- let requiresIntermediary = false;
322
- if (features.bootloader_mode && release.bootloader_version) {
323
- const { bootloaderVersion, firmwareVersion } = getCurrentVersion(features);
324
- if (utils_1.versionUtils.isVersionArray(firmwareVersion)) {
325
- isNewer = utils_1.versionUtils.isNewer(release.version, firmwareVersion);
326
- requiresIntermediary = utils_1.versionUtils.isNewer(min_firmware_version, firmwareVersion);
327
- }
328
- else if (utils_1.versionUtils.isVersionArray(bootloaderVersion)) {
329
- isNewer = utils_1.versionUtils.isNewer(release.bootloader_version, bootloaderVersion);
330
- requiresIntermediary = utils_1.versionUtils.isNewer(min_bootloader_version, bootloaderVersion);
331
- }
332
- else {
333
- throw new Error('Version is not version array.');
334
- }
335
- }
336
- else {
337
- const { firmwareVersion } = getCurrentVersion(features);
338
- if (!utils_1.versionUtils.isVersionArray(firmwareVersion)) {
339
- throw new Error('Firmware version is not version array.');
340
- }
341
- isNewer = utils_1.versionUtils.isNewer(release.version, firmwareVersion);
342
- requiresIntermediary = utils_1.versionUtils.isNewer(min_firmware_version, firmwareVersion);
343
- }
344
- const { rollout_probability } = conditions;
345
- const shouldBeOffered = calculateShouldOfferRelease(rollout_probability, features.device_id);
346
- if (requiresIntermediary && intermediary) {
347
- isNewer = true;
348
- }
349
- return {
350
- firmwareType,
351
- isBitcoinOnlyAvailable,
352
- releaseConditions: {
353
- ...conditions,
354
- shouldBeOffered,
355
- },
356
- release,
357
- intermediary: requiresIntermediary ? intermediary : undefined,
358
- isRequired: isRequired(changelog),
359
- isNewer,
360
- translations: release.translations,
361
- };
321
+ const getReleaseInfo = ({
322
+ features,
323
+ release,
324
+ conditions,
325
+ intermediary,
326
+ firmwareType,
327
+ isBitcoinOnlyAvailable,
328
+ releasesOfDevice
329
+ }) => {
330
+ if (!(0, firmwareUtils_1.isStrictFeatures)(features)) {
331
+ throw new Error('Features of unexpected shape provided.');
332
+ }
333
+ if (!isValidConditionalRelease(release)) {
334
+ throw new Error(`Release object in unexpected shape.`);
335
+ }
336
+ const {
337
+ min_firmware_version,
338
+ min_bootloader_version
339
+ } = release;
340
+ const changelog = getChangelog(releasesOfDevice, features);
341
+ let isNewer = false;
342
+ let requiresIntermediary = false;
343
+ if (features.bootloader_mode && release.bootloader_version) {
344
+ const {
345
+ bootloaderVersion,
346
+ firmwareVersion
347
+ } = (0, exports.getCurrentVersion)(features);
348
+ if (utils_1.versionUtils.isVersionArray(firmwareVersion)) {
349
+ isNewer = utils_1.versionUtils.isNewer(release.version, firmwareVersion);
350
+ requiresIntermediary = utils_1.versionUtils.isNewer(min_firmware_version, firmwareVersion);
351
+ } else if (utils_1.versionUtils.isVersionArray(bootloaderVersion)) {
352
+ isNewer = utils_1.versionUtils.isNewer(release.bootloader_version, bootloaderVersion);
353
+ requiresIntermediary = utils_1.versionUtils.isNewer(min_bootloader_version, bootloaderVersion);
354
+ } else {
355
+ throw new Error('Version is not version array.');
356
+ }
357
+ } else {
358
+ const {
359
+ firmwareVersion
360
+ } = (0, exports.getCurrentVersion)(features);
361
+ if (!utils_1.versionUtils.isVersionArray(firmwareVersion)) {
362
+ throw new Error('Firmware version is not version array.');
363
+ }
364
+ isNewer = utils_1.versionUtils.isNewer(release.version, firmwareVersion);
365
+ requiresIntermediary = utils_1.versionUtils.isNewer(min_firmware_version, firmwareVersion);
366
+ }
367
+ const {
368
+ rollout_probability
369
+ } = conditions;
370
+ const shouldBeOffered = calculateShouldOfferRelease(rollout_probability, features.device_id);
371
+ if (requiresIntermediary && intermediary) {
372
+ isNewer = true;
373
+ }
374
+ return {
375
+ firmwareType,
376
+ isBitcoinOnlyAvailable,
377
+ releaseConditions: {
378
+ ...conditions,
379
+ shouldBeOffered
380
+ },
381
+ release,
382
+ intermediary: requiresIntermediary ? intermediary : undefined,
383
+ isRequired: isRequired(changelog),
384
+ isNewer,
385
+ translations: release.translations
386
+ };
362
387
  };
363
388
  exports.getReleaseInfo = getReleaseInfo;
364
389
  const getFirmwareReleaseConfigInfo = (features, firmwareType) => {
365
- const deviceMessageRelease = (0, exports.getReleaseConfig)(features, firmwareType);
366
- if (!deviceMessageRelease?.release) {
367
- return;
368
- }
369
- const { release, conditions, firmware_type } = deviceMessageRelease;
370
- const currentVersion = getCurrentVersion(features);
371
- const inBootloaderMode = features.bootloader_mode && !!currentVersion.bootloaderVersion;
372
- const versionContext = inBootloaderMode
373
- ? {
374
- version: currentVersion.bootloaderVersion,
375
- minVersionKey: 'min_bootloader_version',
376
- }
377
- : {
378
- version: currentVersion.firmwareVersion,
379
- minVersionKey: 'min_firmware_version',
380
- };
381
- const isCompatible = versionContext.version &&
382
- utils_1.versionUtils.isNewerOrEqual(versionContext.version, release[versionContext.minVersionKey]);
383
- const releasesOfDevice = (0, assetUtils_1.getReleasesAssetByDeviceModelAndFirmwareType)(features.internal_model, firmwareType);
384
- let suitableRelease = release;
385
- if (!isCompatible) {
386
- const alternativeRelease = (0, firmwareUtils_1.findBestCompatibleRelease)(releasesOfDevice, currentVersion, versionContext.minVersionKey);
387
- if (alternativeRelease) {
388
- suitableRelease = alternativeRelease;
389
- }
390
- }
391
- const intermediary = getIntermediaryMessageRelease(features);
392
- const finalTargetRelease = intermediary ? release : suitableRelease;
393
- return (0, exports.getReleaseInfo)({
394
- isBitcoinOnlyAvailable: getIsBitcoinOnlyAvailable(features),
395
- features,
396
- release: finalTargetRelease,
397
- conditions,
398
- intermediary,
399
- firmwareType: firmware_type,
400
- releasesOfDevice,
401
- });
390
+ const deviceMessageRelease = (0, exports.getReleaseConfig)(features, firmwareType);
391
+ if (!deviceMessageRelease?.release) {
392
+ return;
393
+ }
394
+ const {
395
+ release,
396
+ conditions,
397
+ firmware_type
398
+ } = deviceMessageRelease;
399
+ const currentVersion = (0, exports.getCurrentVersion)(features);
400
+ const inBootloaderMode = features.bootloader_mode && !!currentVersion.bootloaderVersion;
401
+ const versionContext = inBootloaderMode ? {
402
+ version: currentVersion.bootloaderVersion,
403
+ minVersionKey: 'min_bootloader_version'
404
+ } : {
405
+ version: currentVersion.firmwareVersion,
406
+ minVersionKey: 'min_firmware_version'
407
+ };
408
+ const isCompatible = versionContext.version && utils_1.versionUtils.isNewerOrEqual(versionContext.version, release[versionContext.minVersionKey]);
409
+ const releasesOfDevice = (0, assetUtils_1.getReleasesAssetByDeviceModelAndFirmwareType)(features.internal_model, firmwareType);
410
+ let suitableRelease = release;
411
+ if (!isCompatible) {
412
+ const alternativeRelease = (0, firmwareUtils_1.findBestCompatibleRelease)(releasesOfDevice, currentVersion, versionContext.minVersionKey);
413
+ if (alternativeRelease) {
414
+ suitableRelease = alternativeRelease;
415
+ }
416
+ }
417
+ const intermediary = getIntermediaryMessageRelease(features);
418
+ const finalTargetRelease = intermediary ? release : suitableRelease;
419
+ return (0, exports.getReleaseInfo)({
420
+ isBitcoinOnlyAvailable: getIsBitcoinOnlyAvailable(features),
421
+ features,
422
+ release: finalTargetRelease,
423
+ conditions,
424
+ intermediary,
425
+ firmwareType: firmware_type,
426
+ releasesOfDevice
427
+ });
402
428
  };
403
429
  exports.getFirmwareReleaseConfigInfo = getFirmwareReleaseConfigInfo;
404
430
  const getFirmwareStatus = (features, firmwareType) => {
405
- if (features.firmware_present === false) {
406
- return 'none';
407
- }
408
- if (features.major_version === 1 && features.bootloader_mode) {
409
- return 'unknown';
410
- }
411
- const releaseInfo = (0, exports.getFirmwareReleaseConfigInfo)(features, firmwareType);
412
- if (!releaseInfo)
413
- return 'custom';
414
- if (releaseInfo.isRequired)
415
- return 'required';
416
- if (releaseInfo.isNewer)
417
- return 'outdated';
418
- return 'valid';
431
+ if (features.firmware_present === false) {
432
+ return 'none';
433
+ }
434
+ if (features.major_version === 1 && features.bootloader_mode) {
435
+ return 'unknown';
436
+ }
437
+ const releaseInfo = (0, exports.getFirmwareReleaseConfigInfo)(features, firmwareType);
438
+ if (!releaseInfo) return 'custom';
439
+ if (releaseInfo.isRequired) return 'required';
440
+ if (releaseInfo.isNewer) return 'outdated';
441
+ return 'valid';
419
442
  };
420
443
  exports.getFirmwareStatus = getFirmwareStatus;
421
- const getFirmwareLocation = ({ firmwareVersion, remotePath, deviceModel, firmwareType, intermediaryVersion, }) => {
422
- const firmwareName = intermediaryVersion
423
- ? (0, firmwareUtils_1.buildIntermediaryFirmwareFileName)(deviceModel, intermediaryVersion)
424
- : (0, firmwareUtils_1.buildLocalFirmwareFileName)(firmwareType, deviceModel, firmwareVersion);
425
- const versionString = firmwareVersion.join('.');
426
- const bundledBaseUrl = (0, utils_1.removeTrailingSlashes)(DataManager_1.DataManager.getSettings('binFilesBaseUrl'));
427
- const isRealBundled = !bundledBaseUrl.includes('data.trezor.io');
428
- const bundledVersion = getBundledFirmwareVersion(deviceModel, firmwareType);
429
- const isIntermediary = bundledBaseUrl && intermediaryVersion;
430
- const isMatchingBundledVersion = bundledBaseUrl && isRealBundled && bundledVersion === versionString;
431
- if (isIntermediary || isMatchingBundledVersion) {
432
- return {
433
- baseUrl: bundledBaseUrl,
434
- path: `firmware/${deviceModel.toLowerCase()}/${firmwareName}`,
435
- };
436
- }
437
- const { firmwareDir, firmwareList } = DataManager_1.DataManager.getLocalFirmwares();
438
- if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && firmwareList.includes(firmwareName)) {
439
- return {
440
- baseUrl: firmwareDir,
441
- path: firmwareName,
442
- };
443
- }
444
- const onlineBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
444
+ const getFirmwareLocation = ({
445
+ firmwareVersion,
446
+ remotePath,
447
+ deviceModel,
448
+ firmwareType,
449
+ intermediaryVersion
450
+ }) => {
451
+ const firmwareName = intermediaryVersion ? (0, firmwareUtils_1.buildIntermediaryFirmwareFileName)(deviceModel, intermediaryVersion) : (0, firmwareUtils_1.buildLocalFirmwareFileName)(firmwareType, deviceModel, firmwareVersion);
452
+ const versionString = firmwareVersion.join('.');
453
+ const bundledBaseUrl = (0, utils_1.removeTrailingSlashes)(DataManager_1.DataManager.getSettings('binFilesBaseUrl'));
454
+ const isRealBundled = !bundledBaseUrl.includes('data.trezor.io');
455
+ const bundledVersion = getBundledFirmwareVersion(deviceModel, firmwareType);
456
+ const isIntermediary = bundledBaseUrl && intermediaryVersion;
457
+ const isMatchingBundledVersion = bundledBaseUrl && isRealBundled && bundledVersion === versionString;
458
+ if (isIntermediary || isMatchingBundledVersion) {
459
+ return {
460
+ baseUrl: bundledBaseUrl,
461
+ path: `firmware/${deviceModel.toLowerCase()}/${firmwareName}`
462
+ };
463
+ }
464
+ const {
465
+ firmwareDir,
466
+ firmwareList
467
+ } = DataManager_1.DataManager.getLocalFirmwares();
468
+ if ((0, firmwareUtils_1.isFirmwareCacheUsedForSelectedSource)() && firmwareList.includes(firmwareName)) {
445
469
  return {
446
- baseUrl: onlineBaseUrl.BASE_URL,
447
- path: remotePath,
470
+ baseUrl: firmwareDir,
471
+ path: firmwareName
448
472
  };
473
+ }
474
+ const onlineBaseUrl = (0, exports.getOnlineFirmwareBaseUrl)();
475
+ return {
476
+ baseUrl: onlineBaseUrl.BASE_URL,
477
+ path: remotePath
478
+ };
449
479
  };
450
480
  exports.getFirmwareLocation = getFirmwareLocation;
451
481
  //# sourceMappingURL=firmwareInfo.js.map