@onetokenfe/hd-core 1.1.23

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 (382) hide show
  1. package/.eslintrc +6 -0
  2. package/README.md +32 -0
  3. package/__tests__/benfen.test.ts +68 -0
  4. package/__tests__/checkBootloaderReleast.test.ts +115 -0
  5. package/__tests__/evmSignTransaction.test.ts +419 -0
  6. package/jest.config.js +6 -0
  7. package/package.json +48 -0
  8. package/src/api/BaseMethod.ts +275 -0
  9. package/src/api/CheckAllFirmwareRelease.ts +73 -0
  10. package/src/api/CheckBLEFirmwareRelease.ts +23 -0
  11. package/src/api/CheckBootloaderRelease.ts +32 -0
  12. package/src/api/CheckBridgeRelease.ts +28 -0
  13. package/src/api/CheckBridgeStatus.ts +32 -0
  14. package/src/api/CheckFirmwareRelease.ts +31 -0
  15. package/src/api/CheckFirmwareTypeAvailable.tsx +30 -0
  16. package/src/api/CipherKeyValue.ts +68 -0
  17. package/src/api/FirmwareUpdate.ts +219 -0
  18. package/src/api/FirmwareUpdateV2.ts +408 -0
  19. package/src/api/FirmwareUpdateV3.ts +560 -0
  20. package/src/api/GetFeatures.ts +23 -0
  21. package/src/api/GetLogs.ts +40 -0
  22. package/src/api/GetOnetokenFeatures.ts +25 -0
  23. package/src/api/GetPassphraseState.ts +28 -0
  24. package/src/api/PromptWebDeviceAccess.ts +77 -0
  25. package/src/api/SearchDevices.ts +50 -0
  26. package/src/api/alephium/AlephiumGetAddress.ts +84 -0
  27. package/src/api/alephium/AlephiumSignMessage.ts +51 -0
  28. package/src/api/alephium/AlephiumSignTransaction.ts +135 -0
  29. package/src/api/algo/AlgoGetAddress.ts +73 -0
  30. package/src/api/algo/AlgoSignTransaction.ts +52 -0
  31. package/src/api/allnetwork/AllNetworkGetAddress.ts +88 -0
  32. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +529 -0
  33. package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +162 -0
  34. package/src/api/aptos/AptosGetAddress.ts +129 -0
  35. package/src/api/aptos/AptosGetPublicKey.ts +64 -0
  36. package/src/api/aptos/AptosSignInMessage.ts +55 -0
  37. package/src/api/aptos/AptosSignMessage.ts +79 -0
  38. package/src/api/aptos/AptosSignTransaction.ts +72 -0
  39. package/src/api/benfen/BenfenGetAddress.ts +122 -0
  40. package/src/api/benfen/BenfenGetPublicKey.ts +68 -0
  41. package/src/api/benfen/BenfenSignMessage.ts +50 -0
  42. package/src/api/benfen/BenfenSignTransaction.ts +105 -0
  43. package/src/api/benfen/normalize.ts +51 -0
  44. package/src/api/btc/BTCGetAddress.ts +91 -0
  45. package/src/api/btc/BTCGetPublicKey.ts +174 -0
  46. package/src/api/btc/BTCSignMessage.ts +73 -0
  47. package/src/api/btc/BTCSignPsbt.ts +65 -0
  48. package/src/api/btc/BTCSignTransaction.ts +148 -0
  49. package/src/api/btc/BTCVerifyMessage.ts +46 -0
  50. package/src/api/btc/helpers/btcParamsUtils.ts +64 -0
  51. package/src/api/btc/helpers/signtx.ts +251 -0
  52. package/src/api/btc/helpers/signtxLegacy.ts +227 -0
  53. package/src/api/btc/helpers/versionLimit.ts +25 -0
  54. package/src/api/btc/helpers/xpubUtils.ts +132 -0
  55. package/src/api/cardano/CardanoGetAddress.ts +139 -0
  56. package/src/api/cardano/CardanoGetPublicKey.ts +72 -0
  57. package/src/api/cardano/CardanoSignMessage.ts +73 -0
  58. package/src/api/cardano/CardanoSignTransaction.ts +404 -0
  59. package/src/api/cardano/helper/addressParameters.ts +120 -0
  60. package/src/api/cardano/helper/auxiliaryData.ts +133 -0
  61. package/src/api/cardano/helper/cardanoInputs.ts +55 -0
  62. package/src/api/cardano/helper/cardanoOutputs.ts +89 -0
  63. package/src/api/cardano/helper/certificate.ts +246 -0
  64. package/src/api/cardano/helper/token.ts +44 -0
  65. package/src/api/cardano/helper/utils.ts +17 -0
  66. package/src/api/cardano/helper/witnesses.ts +62 -0
  67. package/src/api/conflux/ConfluxGetAddress.ts +78 -0
  68. package/src/api/conflux/ConfluxSignMessage.ts +49 -0
  69. package/src/api/conflux/ConfluxSignMessageCIP23.ts +49 -0
  70. package/src/api/conflux/ConfluxSignTransaction.ts +135 -0
  71. package/src/api/cosmos/CosmosGetAddress.ts +80 -0
  72. package/src/api/cosmos/CosmosGetPublicKey.ts +77 -0
  73. package/src/api/cosmos/CosmosSignTransaction.ts +68 -0
  74. package/src/api/device/DeviceBackup.ts +15 -0
  75. package/src/api/device/DeviceCancel.ts +15 -0
  76. package/src/api/device/DeviceChangePin.ts +25 -0
  77. package/src/api/device/DeviceFlags.ts +26 -0
  78. package/src/api/device/DeviceFullyUploadResource.ts +80 -0
  79. package/src/api/device/DeviceLock.ts +15 -0
  80. package/src/api/device/DeviceRebootToBoardloader.ts +30 -0
  81. package/src/api/device/DeviceRebootToBootloader.ts +28 -0
  82. package/src/api/device/DeviceRecovery.ts +44 -0
  83. package/src/api/device/DeviceReset.ts +46 -0
  84. package/src/api/device/DeviceSettings.ts +96 -0
  85. package/src/api/device/DeviceSupportFeatures.ts +29 -0
  86. package/src/api/device/DeviceUnlock.ts +13 -0
  87. package/src/api/device/DeviceUpdateBootloader.ts +111 -0
  88. package/src/api/device/DeviceUpdateReboot.ts +17 -0
  89. package/src/api/device/DeviceUploadResource.ts +204 -0
  90. package/src/api/device/DeviceVerify.ts +65 -0
  91. package/src/api/device/DeviceWipe.ts +15 -0
  92. package/src/api/dynex/DnxGetAddress.ts +75 -0
  93. package/src/api/dynex/DnxSignTransaction.ts +126 -0
  94. package/src/api/evm/EVMGetAddress.ts +88 -0
  95. package/src/api/evm/EVMGetPublicKey.ts +116 -0
  96. package/src/api/evm/EVMSignMessage.ts +49 -0
  97. package/src/api/evm/EVMSignMessageEIP712.ts +56 -0
  98. package/src/api/evm/EVMSignTransaction.ts +141 -0
  99. package/src/api/evm/EVMSignTypedData.ts +477 -0
  100. package/src/api/evm/EVMVerifyMessage.ts +46 -0
  101. package/src/api/evm/latest/getAddress.ts +13 -0
  102. package/src/api/evm/latest/getPublicKey.ts +17 -0
  103. package/src/api/evm/latest/signMessage.ts +19 -0
  104. package/src/api/evm/latest/signTransaction.ts +303 -0
  105. package/src/api/evm/latest/signTypedData.ts +34 -0
  106. package/src/api/evm/latest/signTypedHash.ts +46 -0
  107. package/src/api/evm/latest/verifyMessage.ts +15 -0
  108. package/src/api/evm/legacyV1/getAddress.ts +16 -0
  109. package/src/api/evm/legacyV1/getPublicKey.ts +20 -0
  110. package/src/api/evm/legacyV1/signMessage.ts +22 -0
  111. package/src/api/evm/legacyV1/signTransaction.ts +37 -0
  112. package/src/api/evm/legacyV1/signTypedData.ts +37 -0
  113. package/src/api/evm/legacyV1/signTypedHash.ts +50 -0
  114. package/src/api/evm/legacyV1/verifyMessage.ts +19 -0
  115. package/src/api/filecoin/FilecoinGetAddress.ts +80 -0
  116. package/src/api/filecoin/FilecoinSignTransaction.ts +57 -0
  117. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +476 -0
  118. package/src/api/firmware/bootloaderHelper.ts +46 -0
  119. package/src/api/firmware/getBinary.ts +99 -0
  120. package/src/api/firmware/releaseHelper.ts +78 -0
  121. package/src/api/firmware/updateBootloader.ts +82 -0
  122. package/src/api/firmware/uploadFirmware.ts +541 -0
  123. package/src/api/helpers/batchGetPublickeys.ts +84 -0
  124. package/src/api/helpers/bigNumberUtils.ts +58 -0
  125. package/src/api/helpers/hexUtils.ts +111 -0
  126. package/src/api/helpers/paramsValidator.ts +165 -0
  127. package/src/api/helpers/pathUtils.ts +145 -0
  128. package/src/api/helpers/stringUtils.ts +11 -0
  129. package/src/api/helpers/typeNameUtils.ts +137 -0
  130. package/src/api/index.ts +161 -0
  131. package/src/api/kaspa/KaspaGetAddress.ts +103 -0
  132. package/src/api/kaspa/KaspaSignTransaction.ts +182 -0
  133. package/src/api/kaspa/helpers/BufferWriter.ts +177 -0
  134. package/src/api/kaspa/helpers/HashWriter.ts +74 -0
  135. package/src/api/kaspa/helpers/SignatureType.ts +7 -0
  136. package/src/api/kaspa/helpers/TransferSerialize.ts +144 -0
  137. package/src/api/lightning/LnurlAuth.ts +52 -0
  138. package/src/api/near/NearGetAddress.ts +75 -0
  139. package/src/api/near/NearSignTransaction.ts +46 -0
  140. package/src/api/nem/NEMGetAddress.ts +72 -0
  141. package/src/api/nem/NEMSignTransaction.ts +251 -0
  142. package/src/api/neo/NeoGetAddress.ts +80 -0
  143. package/src/api/neo/NeoSignTransaction.ts +59 -0
  144. package/src/api/nervos/NervosGetAddress.ts +80 -0
  145. package/src/api/nervos/NervosSignTransaction.ts +116 -0
  146. package/src/api/nexa/NexaGetAddress.ts +88 -0
  147. package/src/api/nexa/NexaSignTransaction.ts +107 -0
  148. package/src/api/nostr/NostrDecryptMessage.ts +57 -0
  149. package/src/api/nostr/NostrEncryptMessage.ts +57 -0
  150. package/src/api/nostr/NostrGetPublicKey.ts +74 -0
  151. package/src/api/nostr/NostrSignEvent.ts +65 -0
  152. package/src/api/nostr/NostrSignSchnorr.ts +52 -0
  153. package/src/api/nostr/helper/index.ts +28 -0
  154. package/src/api/polkadot/PolkadotGetAddress.ts +83 -0
  155. package/src/api/polkadot/PolkadotSignTransaction.ts +53 -0
  156. package/src/api/polkadot/networks.ts +72 -0
  157. package/src/api/scdo/ScdoGetAddress.ts +76 -0
  158. package/src/api/scdo/ScdoSignMessage.ts +45 -0
  159. package/src/api/scdo/ScdoSignTransaction.ts +106 -0
  160. package/src/api/solana/SolGetAddress.ts +68 -0
  161. package/src/api/solana/SolSignMessage.ts +61 -0
  162. package/src/api/solana/SolSignOffchainMessage.ts +61 -0
  163. package/src/api/solana/SolSignTransaction.ts +108 -0
  164. package/src/api/starcoin/StarcoinGetAddress.ts +69 -0
  165. package/src/api/starcoin/StarcoinGetPublicKey.ts +70 -0
  166. package/src/api/starcoin/StarcoinSignMessage.ts +42 -0
  167. package/src/api/starcoin/StarcoinSignTransaction.ts +38 -0
  168. package/src/api/starcoin/StarcoinVerifyMessage.ts +35 -0
  169. package/src/api/stellar/StellarGetAddress.ts +68 -0
  170. package/src/api/stellar/StellarSignTransaction.ts +220 -0
  171. package/src/api/sui/SuiGetAddress.ts +117 -0
  172. package/src/api/sui/SuiGetPublicKey.ts +66 -0
  173. package/src/api/sui/SuiSignMessage.ts +48 -0
  174. package/src/api/sui/SuiSignTransaction.ts +126 -0
  175. package/src/api/sui/normalize.ts +28 -0
  176. package/src/api/test/TestInitializeDeviceDuration.ts +22 -0
  177. package/src/api/ton/TonGetAddress.ts +96 -0
  178. package/src/api/ton/TonSignMessage.ts +217 -0
  179. package/src/api/ton/TonSignProof.ts +62 -0
  180. package/src/api/tron/TronGetAddress.ts +75 -0
  181. package/src/api/tron/TronSignMessage.ts +89 -0
  182. package/src/api/tron/TronSignTransaction.ts +214 -0
  183. package/src/api/u2f/GetNextU2FCounter.ts +15 -0
  184. package/src/api/u2f/SetU2FCounter.ts +19 -0
  185. package/src/api/utils.ts +23 -0
  186. package/src/api/xrp/XrpGetAddress.ts +96 -0
  187. package/src/api/xrp/XrpSignTransaction.ts +71 -0
  188. package/src/constants/errors.ts +15 -0
  189. package/src/constants/index.ts +2 -0
  190. package/src/constants/ui-request.ts +3 -0
  191. package/src/core/RequestQueue.ts +134 -0
  192. package/src/core/index.ts +1320 -0
  193. package/src/data/coins/bitcoin.json +44 -0
  194. package/src/data/config.ts +25 -0
  195. package/src/data/messages/messages.json +13167 -0
  196. package/src/data/messages/messages_legacy_v1.json +10282 -0
  197. package/src/data-manager/CoinManager.ts +31 -0
  198. package/src/data-manager/DataManager.ts +499 -0
  199. package/src/data-manager/MessagesConfig.ts +28 -0
  200. package/src/data-manager/TransportManager.ts +140 -0
  201. package/src/data-manager/connectSettings.ts +121 -0
  202. package/src/data-manager/index.ts +3 -0
  203. package/src/device/Device.ts +884 -0
  204. package/src/device/DeviceCommands.ts +631 -0
  205. package/src/device/DeviceConnector.ts +124 -0
  206. package/src/device/DeviceList.ts +39 -0
  207. package/src/device/DevicePool.ts +266 -0
  208. package/src/events/call.ts +95 -0
  209. package/src/events/core.ts +65 -0
  210. package/src/events/device.ts +92 -0
  211. package/src/events/firmware.ts +43 -0
  212. package/src/events/iframe.ts +55 -0
  213. package/src/events/index.ts +10 -0
  214. package/src/events/log.ts +23 -0
  215. package/src/events/logBlockEvent.ts +6 -0
  216. package/src/events/ui-promise.ts +14 -0
  217. package/src/events/ui-request.ts +216 -0
  218. package/src/events/ui-response.ts +59 -0
  219. package/src/events/utils.ts +19 -0
  220. package/src/index.ts +70 -0
  221. package/src/inject.ts +408 -0
  222. package/src/lowLevelInject.ts +61 -0
  223. package/src/topLevelInject.ts +62 -0
  224. package/src/types/api/alephiumGetAddress.ts +31 -0
  225. package/src/types/api/alephiumSignMessage.ts +14 -0
  226. package/src/types/api/alephiumSignTransaction.ts +18 -0
  227. package/src/types/api/algoGetAddress.ts +23 -0
  228. package/src/types/api/algoSignTransaction.ts +17 -0
  229. package/src/types/api/allNetworkGetAddress.ts +130 -0
  230. package/src/types/api/aptosGetAddress.ts +28 -0
  231. package/src/types/api/aptosGetPublicKey.ts +27 -0
  232. package/src/types/api/aptosSignInMessage.ts +17 -0
  233. package/src/types/api/aptosSignMessage.ts +26 -0
  234. package/src/types/api/aptosSignTransaction.ts +18 -0
  235. package/src/types/api/benfenGetAddress.ts +24 -0
  236. package/src/types/api/benfenGetPublicKey.ts +23 -0
  237. package/src/types/api/benfenSignMessage.ts +13 -0
  238. package/src/types/api/benfenSignTransaction.ts +19 -0
  239. package/src/types/api/btcGetAddress.ts +26 -0
  240. package/src/types/api/btcGetPublicKey.ts +26 -0
  241. package/src/types/api/btcSignMessage.ts +16 -0
  242. package/src/types/api/btcSignPsbt.ts +13 -0
  243. package/src/types/api/btcSignTransaction.ts +98 -0
  244. package/src/types/api/btcVerifyMessage.ts +15 -0
  245. package/src/types/api/cardano.ts +212 -0
  246. package/src/types/api/cardanoGetAddress.ts +49 -0
  247. package/src/types/api/cardanoGetPublicKey.ts +33 -0
  248. package/src/types/api/cardanoSignMessage.ts +31 -0
  249. package/src/types/api/cardanoSignTransaction.ts +8 -0
  250. package/src/types/api/checkAllFirmwareRelease.ts +34 -0
  251. package/src/types/api/checkBLEFirmwareRelease.ts +15 -0
  252. package/src/types/api/checkBootloaderRelease.ts +19 -0
  253. package/src/types/api/checkBridgeRelease.ts +14 -0
  254. package/src/types/api/checkBridgeStatus.ts +3 -0
  255. package/src/types/api/checkFirmwareRelease.ts +23 -0
  256. package/src/types/api/checkFirmwareTypeAvailable.ts +12 -0
  257. package/src/types/api/cipherKeyValue.ts +28 -0
  258. package/src/types/api/confluxGetAddress.ts +24 -0
  259. package/src/types/api/confluxSignMessage.ts +13 -0
  260. package/src/types/api/confluxSignMessageCIP23.ts +14 -0
  261. package/src/types/api/confluxSignTransaction.ts +32 -0
  262. package/src/types/api/cosmosGetAddress.ts +24 -0
  263. package/src/types/api/cosmosGetPublicKey.ts +28 -0
  264. package/src/types/api/cosmosSignTransaction.ts +17 -0
  265. package/src/types/api/deviceBackup.ts +4 -0
  266. package/src/types/api/deviceCancel.ts +4 -0
  267. package/src/types/api/deviceChangePin.ts +11 -0
  268. package/src/types/api/deviceFlags.ts +11 -0
  269. package/src/types/api/deviceFullyUploadResource.ts +15 -0
  270. package/src/types/api/deviceLock.ts +4 -0
  271. package/src/types/api/deviceRebootToBoardloader.ts +6 -0
  272. package/src/types/api/deviceRebootToBootloader.ts +4 -0
  273. package/src/types/api/deviceRecovery.ts +19 -0
  274. package/src/types/api/deviceReset.ts +20 -0
  275. package/src/types/api/deviceSettings.ts +23 -0
  276. package/src/types/api/deviceSupportFeatures.ts +6 -0
  277. package/src/types/api/deviceUnlock.ts +4 -0
  278. package/src/types/api/deviceUpdateBootloader.ts +13 -0
  279. package/src/types/api/deviceUpdateReboot.ts +3 -0
  280. package/src/types/api/deviceUploadResource.ts +21 -0
  281. package/src/types/api/deviceVerify.ts +15 -0
  282. package/src/types/api/deviceWipe.ts +4 -0
  283. package/src/types/api/dnxGetAddress.ts +23 -0
  284. package/src/types/api/dnxSignTransaction.ts +36 -0
  285. package/src/types/api/event.ts +8 -0
  286. package/src/types/api/evmGetAddress.ts +24 -0
  287. package/src/types/api/evmGetPublicKey.ts +36 -0
  288. package/src/types/api/evmSignMessage.ts +14 -0
  289. package/src/types/api/evmSignMessageEIP712.ts +14 -0
  290. package/src/types/api/evmSignTransaction.ts +80 -0
  291. package/src/types/api/evmSignTypedData.ts +42 -0
  292. package/src/types/api/evmVerifyMessage.ts +15 -0
  293. package/src/types/api/export.ts +194 -0
  294. package/src/types/api/filecoinGetAddress.ts +24 -0
  295. package/src/types/api/filecoinSignTransaction.ts +24 -0
  296. package/src/types/api/firmwareUpdate.ts +66 -0
  297. package/src/types/api/getFeatures.ts +4 -0
  298. package/src/types/api/getLogs.ts +3 -0
  299. package/src/types/api/getNextU2FCounter.ts +7 -0
  300. package/src/types/api/getOnetokenFeatures.ts +7 -0
  301. package/src/types/api/getPassphraseState.ts +6 -0
  302. package/src/types/api/index.ts +404 -0
  303. package/src/types/api/init.ts +11 -0
  304. package/src/types/api/kaspaGetAddress.ts +26 -0
  305. package/src/types/api/kaspaSignTransaction.ts +44 -0
  306. package/src/types/api/lnurlAuth.ts +22 -0
  307. package/src/types/api/nearGetAddress.ts +23 -0
  308. package/src/types/api/nearSignTransaction.ts +13 -0
  309. package/src/types/api/nemGetAddress.ts +24 -0
  310. package/src/types/api/nemSignTransaction.ts +118 -0
  311. package/src/types/api/neoGetAddress.ts +24 -0
  312. package/src/types/api/neoSignTransaction.ts +18 -0
  313. package/src/types/api/nervosGetAddress.ts +24 -0
  314. package/src/types/api/nervosSignTransaction.ts +19 -0
  315. package/src/types/api/nexaGetAddress.ts +26 -0
  316. package/src/types/api/nexaSignTransaction.ts +28 -0
  317. package/src/types/api/nostrDecryptMessage.ts +25 -0
  318. package/src/types/api/nostrEncryptMessage.ts +25 -0
  319. package/src/types/api/nostrGetPublicKey.ts +28 -0
  320. package/src/types/api/nostrSignEvent.ts +52 -0
  321. package/src/types/api/nostrSignSchnorr.ts +22 -0
  322. package/src/types/api/polkadotGetAddress.ts +30 -0
  323. package/src/types/api/polkadotSignTransaction.ts +19 -0
  324. package/src/types/api/promptWebDeviceAccess.ts +6 -0
  325. package/src/types/api/scdoGetAddress.ts +23 -0
  326. package/src/types/api/scdoSignMessage.ts +13 -0
  327. package/src/types/api/scdoSignTransaction.ts +24 -0
  328. package/src/types/api/searchDevices.ts +4 -0
  329. package/src/types/api/setU2FCounter.ts +7 -0
  330. package/src/types/api/solGetAddress.ts +23 -0
  331. package/src/types/api/solSignMessage.ts +17 -0
  332. package/src/types/api/solSignOffchainMessage.ts +24 -0
  333. package/src/types/api/solSignTransaction.ts +27 -0
  334. package/src/types/api/starcoinGetAddress.ts +23 -0
  335. package/src/types/api/starcoinGetPublicKey.ts +23 -0
  336. package/src/types/api/starcoinSignMessage.ts +13 -0
  337. package/src/types/api/starcoinSignTransaction.ts +13 -0
  338. package/src/types/api/starcoinVerifyMessage.ts +14 -0
  339. package/src/types/api/stellarGetAddress.ts +23 -0
  340. package/src/types/api/stellarSignTransaction.ts +154 -0
  341. package/src/types/api/suiGetAddress.ts +28 -0
  342. package/src/types/api/suiGetPublicKey.ts +27 -0
  343. package/src/types/api/suiSignMessage.ts +13 -0
  344. package/src/types/api/suiSignTransaction.ts +17 -0
  345. package/src/types/api/testInitializeDeviceDuration.ts +6 -0
  346. package/src/types/api/tonGetAddress.ts +34 -0
  347. package/src/types/api/tonSignMessage.ts +42 -0
  348. package/src/types/api/tonSignProof.ts +25 -0
  349. package/src/types/api/tronGetAddress.ts +23 -0
  350. package/src/types/api/tronSignMessage.ts +14 -0
  351. package/src/types/api/tronSignTransaction.ts +89 -0
  352. package/src/types/api/uiResponse.ts +3 -0
  353. package/src/types/api/xrpGetAddress.ts +28 -0
  354. package/src/types/api/xrpSignTransaction.ts +29 -0
  355. package/src/types/device.ts +194 -0
  356. package/src/types/firmware.ts +41 -0
  357. package/src/types/global.d.ts +3 -0
  358. package/src/types/index.ts +5 -0
  359. package/src/types/params.ts +64 -0
  360. package/src/types/settings.ts +144 -0
  361. package/src/utils/arrayUtils.ts +7 -0
  362. package/src/utils/assets.ts +5 -0
  363. package/src/utils/bridgeUpdate.ts +80 -0
  364. package/src/utils/capabilitieUtils.ts +12 -0
  365. package/src/utils/deviceFeaturesUtils.ts +352 -0
  366. package/src/utils/deviceInfoUtils.ts +167 -0
  367. package/src/utils/deviceSettings.ts +109 -0
  368. package/src/utils/deviceVersionUtils.ts +79 -0
  369. package/src/utils/findDefectiveBatchDevice.ts +39 -0
  370. package/src/utils/getMutex.ts +41 -0
  371. package/src/utils/getSynchronize.ts +25 -0
  372. package/src/utils/homescreen.ts +345 -0
  373. package/src/utils/index.ts +44 -0
  374. package/src/utils/logger.ts +190 -0
  375. package/src/utils/networkUtils.ts +25 -0
  376. package/src/utils/patch.ts +14 -0
  377. package/src/utils/promiseUtils.ts +4 -0
  378. package/src/utils/release.ts +42 -0
  379. package/src/utils/semver.test.js +53 -0
  380. package/src/utils/tracing.ts +238 -0
  381. package/src/utils/versionUtils.ts +120 -0
  382. package/tsconfig.json +11 -0
@@ -0,0 +1,352 @@
1
+ import semver from 'semver';
2
+ import { isNaN } from 'lodash';
3
+ import { EDeviceType, type EFirmwareType, ERRORS, HardwareErrorCode } from '@onetokenfe/hd-shared';
4
+ import { Enum_Capability } from '@onetokenfe/hd-transport';
5
+
6
+ import { toHardened } from '../api/helpers/pathUtils';
7
+ import { DeviceModelToTypes, DeviceTypeToModels } from '../types';
8
+ import DataManager, { type IFirmwareField, type MessageVersion } from '../data-manager/DataManager';
9
+ import { PROTOBUF_MESSAGE_CONFIG } from '../data-manager/MessagesConfig';
10
+ import { getDeviceType } from './deviceInfoUtils';
11
+ import { getDeviceFirmwareVersion } from './deviceVersionUtils';
12
+ import { existCapability } from './capabilitieUtils';
13
+
14
+ import type { Device } from '../device/Device';
15
+ import type { DeviceCommands } from '../device/DeviceCommands';
16
+ import type { Features, SupportFeatureType } from '../types';
17
+
18
+ export const getSupportMessageVersion = (
19
+ features: Features | undefined
20
+ ): { messages: JSON; messageVersion: MessageVersion } => {
21
+ if (!features)
22
+ return {
23
+ messages: DataManager.messages.latest,
24
+ messageVersion: 'latest',
25
+ };
26
+
27
+ const currentDeviceVersion = getDeviceFirmwareVersion(features).join('.');
28
+ const deviceType = getDeviceType(features);
29
+
30
+ const deviceVersionConfigs =
31
+ PROTOBUF_MESSAGE_CONFIG[deviceType] ||
32
+ (DeviceTypeToModels[deviceType] &&
33
+ DeviceTypeToModels[deviceType]
34
+ .map(model => PROTOBUF_MESSAGE_CONFIG[model])
35
+ .find(range => range !== undefined));
36
+
37
+ const sortedDeviceVersionConfigs =
38
+ deviceVersionConfigs?.sort((a, b) => semver.compare(b.minVersion, a.minVersion)) ?? [];
39
+
40
+ for (const { minVersion, messageVersion } of sortedDeviceVersionConfigs) {
41
+ if (semver.gte(currentDeviceVersion, minVersion)) {
42
+ return {
43
+ messages: DataManager.messages[messageVersion],
44
+ messageVersion,
45
+ };
46
+ }
47
+ }
48
+
49
+ return {
50
+ messages: DataManager.messages.latest,
51
+ messageVersion: 'latest',
52
+ };
53
+ };
54
+
55
+ export const supportInputPinOnSoftware = (features: Features): SupportFeatureType => {
56
+ if (!features) return { support: false };
57
+
58
+ const deviceType = getDeviceType(features);
59
+ if (deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro) {
60
+ return { support: false };
61
+ }
62
+
63
+ const currentVersion = getDeviceFirmwareVersion(features).join('.');
64
+ return { support: semver.gte(currentVersion, '2.3.0'), require: '2.3.0' };
65
+ };
66
+
67
+ export const supportNewPassphrase = (features?: Features): SupportFeatureType => {
68
+ if (!features) return { support: false };
69
+
70
+ const deviceType = getDeviceType(features);
71
+ if (deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro) {
72
+ return { support: true };
73
+ }
74
+
75
+ const currentVersion = getDeviceFirmwareVersion(features).join('.');
76
+
77
+ return { support: semver.gte(currentVersion, '2.4.0'), require: '2.4.0' };
78
+ };
79
+
80
+ export const getPassphraseStateWithRefreshDeviceInfo = async (
81
+ device: Device,
82
+ options?: {
83
+ expectPassphraseState?: string;
84
+ onlyMainPin?: boolean;
85
+ }
86
+ ) => {
87
+ const { features, commands } = device;
88
+ const locked = features?.unlocked === false;
89
+
90
+ const { passphraseState, newSession, unlockedAttachPin } = await getPassphraseState(
91
+ features,
92
+ commands,
93
+ {
94
+ ...options,
95
+ }
96
+ );
97
+
98
+ const isModeT =
99
+ getDeviceType(features) === EDeviceType.Touch || getDeviceType(features) === EDeviceType.Pro;
100
+
101
+ // 如果可以获取到 passphraseState,但是设备 features 显示设备未开启 passphrase,需要刷新设备状态
102
+ // if passphraseState can be obtained, but the device features show that the device has not enabled passphrase, the device status needs to be refreshed
103
+ const needRefreshWithPassphrase = passphraseState && features?.passphrase_protection !== true;
104
+ // 如果 Touch/Pro 在之前是锁定状态,刷新设备状态
105
+ // if Touch/Pro was locked before, refresh the device state
106
+ const needRefreshWithLocked = isModeT && locked;
107
+
108
+ if (needRefreshWithLocked || needRefreshWithPassphrase) {
109
+ // refresh device state
110
+ await device.getFeatures();
111
+ }
112
+
113
+ // Attach to pin try to fix internal state
114
+ if (features?.device_id) {
115
+ device.updateInternalState(
116
+ device.features?.passphrase_protection ?? false,
117
+ passphraseState,
118
+ device.features?.device_id ?? '',
119
+ newSession,
120
+ device.features?.session_id
121
+ );
122
+ }
123
+
124
+ return { passphraseState, newSession, unlockedAttachPin };
125
+ };
126
+
127
+ export const getPassphraseState = async (
128
+ features: Features | undefined,
129
+ commands: DeviceCommands,
130
+ options?: {
131
+ expectPassphraseState?: string;
132
+ onlyMainPin?: boolean;
133
+ }
134
+ ): Promise<{
135
+ passphraseState: string | undefined;
136
+ newSession: string | undefined;
137
+ unlockedAttachPin: boolean | undefined;
138
+ }> => {
139
+ if (!features)
140
+ return { passphraseState: undefined, newSession: undefined, unlockedAttachPin: undefined };
141
+
142
+ const firmwareVersion = getDeviceFirmwareVersion(features);
143
+ const deviceType = getDeviceType(features);
144
+
145
+ const supportAttachPinCapability = existCapability(
146
+ features,
147
+ Enum_Capability.Capability_AttachToPin
148
+ );
149
+ const supportGetPassphraseState =
150
+ supportAttachPinCapability ||
151
+ (deviceType === EDeviceType.Pro && semver.gte(firmwareVersion.join('.'), '4.15.0'));
152
+
153
+ if (supportGetPassphraseState) {
154
+ const { message, type } = await commands.typedCall('GetPassphraseState', 'PassphraseState', {
155
+ passphrase_state: options?.onlyMainPin ? undefined : options?.expectPassphraseState,
156
+ });
157
+
158
+ // @ts-expect-error
159
+ if (type === 'CallMethodError') {
160
+ throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'Get the passphrase state error');
161
+ }
162
+
163
+ return {
164
+ passphraseState: message.passphrase_state,
165
+ newSession: message.session_id,
166
+ unlockedAttachPin: message.unlocked_attach_pin,
167
+ };
168
+ }
169
+
170
+ const { message, type } = await commands.typedCall('GetAddress', 'Address', {
171
+ address_n: [toHardened(44), toHardened(1), toHardened(0), 0, 0],
172
+ coin_name: 'Testnet',
173
+ script_type: 'SPENDADDRESS',
174
+ show_display: false,
175
+ });
176
+
177
+ // @ts-expect-error
178
+ if (type === 'CallMethodError') {
179
+ throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'Get the passphrase state error');
180
+ }
181
+
182
+ return {
183
+ passphraseState: message.address,
184
+ newSession: undefined,
185
+ unlockedAttachPin: undefined,
186
+ };
187
+ };
188
+
189
+ export const supportBatchPublicKey = (
190
+ features?: Features,
191
+ options?: {
192
+ includeNode?: boolean;
193
+ }
194
+ ): boolean => {
195
+ if (!features) return false;
196
+ const currentVersion = getDeviceFirmwareVersion(features).join('.');
197
+
198
+ const deviceType = getDeviceType(features);
199
+ // btc batch get public key
200
+ if (!!options?.includeNode && deviceType === EDeviceType.Pro) {
201
+ return semver.gte(currentVersion, '4.14.0');
202
+ }
203
+ if (!!options?.includeNode && deviceType === EDeviceType.Touch) {
204
+ return semver.gte(currentVersion, '4.11.0');
205
+ }
206
+ if (!!options?.includeNode && DeviceModelToTypes.model_classic1s.includes(deviceType)) {
207
+ return semver.gte(currentVersion, '3.12.0');
208
+ }
209
+ if (!!options?.includeNode && DeviceModelToTypes.model_mini.includes(deviceType)) {
210
+ return semver.gte(currentVersion, '3.10.0');
211
+ }
212
+ if (options?.includeNode) {
213
+ return false;
214
+ }
215
+
216
+ // support batch get public key
217
+ if (deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro) {
218
+ return semver.gte(currentVersion, '3.1.0');
219
+ }
220
+
221
+ return semver.gte(currentVersion, '2.6.0');
222
+ };
223
+
224
+ export const supportModifyHomescreen = (features?: Features): SupportFeatureType => {
225
+ if (!features) return { support: false };
226
+ const currentVersion = getDeviceFirmwareVersion(features).join('.');
227
+
228
+ const deviceType = getDeviceType(features);
229
+ if (DeviceModelToTypes.model_mini.includes(deviceType)) {
230
+ return { support: true };
231
+ }
232
+
233
+ return { support: semver.gte(currentVersion, '3.4.0') };
234
+ };
235
+
236
+ export const getLatestFirmwareField = (firmwareType?: EFirmwareType): IFirmwareField => {
237
+ if (firmwareType === 'bitcoinonly') {
238
+ return `firmware-btc-v8`;
239
+ }
240
+ return `firmware-v8`;
241
+ };
242
+
243
+ /**
244
+ * Since 3.5.0, Touch uses the firmware-v3 field to get firmware release info
245
+ */
246
+ export const getFirmwareUpdateField = ({
247
+ features,
248
+ updateType,
249
+ targetVersion,
250
+ firmwareType,
251
+ }: {
252
+ features: Features;
253
+ updateType: 'firmware' | 'ble';
254
+ targetVersion?: string;
255
+ firmwareType: EFirmwareType;
256
+ }): 'ble' | IFirmwareField => {
257
+ const deviceType = getDeviceType(features);
258
+ const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
259
+ if (updateType === 'ble') {
260
+ return 'ble';
261
+ }
262
+ const latestFirmwareField = getLatestFirmwareField(firmwareType);
263
+
264
+ if (DeviceModelToTypes.model_mini.includes(deviceType)) {
265
+ return latestFirmwareField;
266
+ }
267
+
268
+ if (deviceType === EDeviceType.Touch) {
269
+ if (targetVersion) {
270
+ if (semver.eq(targetVersion, '4.0.0')) return 'firmware-v2';
271
+ if (semver.gt(targetVersion, '4.0.0')) return latestFirmwareField;
272
+ }
273
+
274
+ if (semver.lt(deviceFirmwareVersion.join('.'), '3.4.0')) return 'firmware';
275
+
276
+ return latestFirmwareField;
277
+ }
278
+ if (deviceType === EDeviceType.Pro) {
279
+ return latestFirmwareField;
280
+ }
281
+ return 'firmware';
282
+ };
283
+ /**
284
+ * Returns the optional firmware version
285
+ * Used in firmware web update
286
+ * https://firmware.onetoken.so/
287
+ */
288
+ export const getFirmwareUpdateFieldArray = (
289
+ features: Features,
290
+ updateType: 'firmware' | 'ble' | 'bootloader'
291
+ ): ('ble' | IFirmwareField)[] => {
292
+ const deviceType = getDeviceType(features);
293
+ if (updateType === 'ble') {
294
+ return ['ble'];
295
+ }
296
+
297
+ if (
298
+ deviceType === 'classic' ||
299
+ deviceType === 'classic1s' ||
300
+ deviceType === 'mini' ||
301
+ deviceType === 'classicpure'
302
+ ) {
303
+ return ['firmware-v8'];
304
+ }
305
+
306
+ if (deviceType === 'touch') {
307
+ const currentVersion = getDeviceFirmwareVersion(features).join('.');
308
+ if (semver.gt(currentVersion, '4.0.0')) {
309
+ return ['firmware-v8', 'firmware'];
310
+ }
311
+ if (semver.gte(currentVersion, '4.0.0')) {
312
+ return ['firmware-v2', 'firmware'];
313
+ }
314
+ if (!currentVersion || semver.lt(currentVersion, '3.0.0')) {
315
+ return ['firmware-v8', 'firmware-v2', 'firmware'];
316
+ }
317
+ return ['firmware'];
318
+ }
319
+
320
+ if (deviceType === 'pro') {
321
+ return ['firmware-v8'];
322
+ }
323
+
324
+ return ['firmware'];
325
+ };
326
+
327
+ export function fixVersion(version: string) {
328
+ let parts = version.split('.');
329
+
330
+ while (parts.length < 3) {
331
+ parts.push('0');
332
+ }
333
+ parts = parts.map(part => (isNaN(parseInt(part, 10)) ? '0' : part));
334
+
335
+ return parts.join('.');
336
+ }
337
+
338
+ export const fixFeaturesFirmwareVersion = (features: Features): Features => {
339
+ // 修复 Touch、Pro 设备 bootloader 低于 2.5.2 版本时,返回的 features 中没有 firmware_version 错误的问题
340
+ // fix Touch、Pro device when bootloader version is lower than 2.5.2, the features returned do not have firmware_version error
341
+ const tempFeatures = { ...features };
342
+
343
+ if (tempFeatures.onetoken_firmware_version && !semver.valid(tempFeatures.onetoken_firmware_version)) {
344
+ tempFeatures.onetoken_firmware_version = fixVersion(tempFeatures.onetoken_firmware_version);
345
+ }
346
+
347
+ if (tempFeatures.onetoken_version && !semver.valid(tempFeatures.onetoken_version)) {
348
+ tempFeatures.onetoken_version = fixVersion(tempFeatures.onetoken_version);
349
+ }
350
+
351
+ return tempFeatures;
352
+ };
@@ -0,0 +1,167 @@
1
+ import { isEmpty } from 'lodash';
2
+ import { EDeviceType, EFirmwareType } from '@onetokenfe/hd-shared';
3
+ import { Enum_Capability } from '@onetokenfe/hd-transport';
4
+
5
+ import { DeviceModelToTypes } from '../types';
6
+ import { existCapability } from './capabilitieUtils';
7
+
8
+ import type { Features, IDeviceModel, IDeviceType, IVersionRange } from '../types';
9
+
10
+ /**
11
+ * get device type by features
12
+ */
13
+ export const getDeviceType = (features?: Features): IDeviceType => {
14
+ if (!features || typeof features !== 'object') {
15
+ return EDeviceType.Unknown;
16
+ }
17
+
18
+ // classic1s 3.5.0 pro 4.6.0
19
+ switch (features.onetoken_device_type) {
20
+ case 'CLASSIC':
21
+ return EDeviceType.Classic;
22
+ case 'CLASSIC1S':
23
+ return EDeviceType.Classic1s;
24
+ case 'MINI':
25
+ return EDeviceType.Mini;
26
+ case 'TOUCH':
27
+ return EDeviceType.Touch;
28
+ case 'PRO':
29
+ return EDeviceType.Pro;
30
+ case 'PURE':
31
+ return EDeviceType.ClassicPure;
32
+ default:
33
+ // future And old device onetoken_device_type is empty
34
+ if (!isEmpty(features.onetoken_serial_no)) {
35
+ return EDeviceType.Unknown;
36
+ }
37
+ // old device type
38
+ }
39
+
40
+ // low version hardware
41
+ // onetoken_serial_no > onetoken_serial > serial_no
42
+ const serialNo = getDeviceUUID(features);
43
+
44
+ // not exist serialNo, bootloader mode, model 1 is classic
45
+ if (isEmpty(serialNo) && features.bootloader_mode === true && features.model === '1') {
46
+ return EDeviceType.Classic;
47
+ }
48
+
49
+ if (isEmpty(serialNo)) return EDeviceType.Unknown;
50
+
51
+ const miniFlag = serialNo.slice(0, 2);
52
+ // By May 2021, the miniFlag is 'bixin' for all classic devices
53
+ if (miniFlag.toLowerCase() === 'bi') return EDeviceType.Classic;
54
+ if (miniFlag.toLowerCase() === 'cl') return EDeviceType.Classic;
55
+ if (miniFlag.toLowerCase() === 'cp') return EDeviceType.ClassicPure;
56
+ if (miniFlag.toLowerCase() === 'mi') return EDeviceType.Mini;
57
+ if (miniFlag.toLowerCase() === 'tc') return EDeviceType.Touch;
58
+ if (miniFlag.toLowerCase() === 'pr') return EDeviceType.Pro;
59
+
60
+ // unknown device
61
+ return EDeviceType.Unknown;
62
+ };
63
+
64
+ /**
65
+ * get device type by ble name
66
+ * @param name Ble name
67
+ */
68
+ export const getDeviceTypeByBleName = (name?: string): IDeviceType => {
69
+ if (!name) return EDeviceType.Unknown;
70
+
71
+ if (name.startsWith('BixinKey')) return EDeviceType.Classic;
72
+ if (name.startsWith('K')) return EDeviceType.Classic;
73
+
74
+ if (name.startsWith('T')) return EDeviceType.Touch;
75
+ if (name.startsWith('Touch')) return EDeviceType.Touch;
76
+
77
+ if (name.startsWith('Pro')) return EDeviceType.Pro;
78
+
79
+ return EDeviceType.Unknown;
80
+ };
81
+
82
+ /**
83
+ * Get Connected Device ble name by features
84
+ * @returns
85
+ */
86
+ export const getDeviceBleName = (features?: Features): string | null => {
87
+ if (features == null) return null;
88
+ return features.onetoken_ble_name || features.ble_name || null;
89
+ };
90
+
91
+ /**
92
+ * Get Connected Device UUID by features
93
+ */
94
+ export const getDeviceUUID = (features: Features) => {
95
+ const serialNo = features.onetoken_serial_no || features.onetoken_serial || features.serial_no;
96
+ return serialNo ?? '';
97
+ };
98
+
99
+ /**
100
+ * Get Connected Device label by features
101
+ */
102
+ export const getDeviceLabel = (features?: Features) => {
103
+ if (!features) return null;
104
+
105
+ const deviceType = getDeviceType(features);
106
+ if (deviceType == null) return null;
107
+
108
+ if (typeof features.label === 'string' && !isEmpty(features.label)) {
109
+ return features.label;
110
+ }
111
+
112
+ const bleName = getDeviceBleName(features);
113
+ if (!isEmpty(bleName)) return bleName;
114
+
115
+ if (deviceType === EDeviceType.ClassicPure) {
116
+ return 'OneToken Classic 1S';
117
+ }
118
+
119
+ return `OneToken ${deviceType.charAt(0).toUpperCase() + deviceType.slice(1)}`;
120
+ };
121
+
122
+ /**
123
+ * Get firmware version range by features
124
+ * Type has a higher priority than Model
125
+ */
126
+ export const getMethodVersionRange = (
127
+ features: Features | undefined,
128
+ getVersionRange: (deviceModel: IDeviceType | IDeviceModel) => IVersionRange | undefined
129
+ ): IVersionRange | undefined => {
130
+ const deviceType = getDeviceType(features);
131
+ let versionRange: IVersionRange | undefined = getVersionRange(deviceType);
132
+
133
+ if (versionRange) {
134
+ return versionRange;
135
+ }
136
+
137
+ const modelFallbacks: IDeviceModel[] = [
138
+ 'model_classic1s',
139
+ 'model_classic',
140
+ 'model_mini',
141
+ 'model_touch',
142
+ ];
143
+ for (const model of modelFallbacks) {
144
+ if (DeviceModelToTypes[model].includes(deviceType)) {
145
+ versionRange = getVersionRange(model);
146
+ if (versionRange) {
147
+ return versionRange;
148
+ }
149
+ }
150
+ }
151
+
152
+ return versionRange;
153
+ };
154
+
155
+ export const getFirmwareType = (features: Features | undefined) => {
156
+ if (!features) {
157
+ return EFirmwareType.Universal;
158
+ }
159
+ if (features.fw_vendor === 'OneToken Bitcoin-only') {
160
+ return EFirmwareType.BitcoinOnly;
161
+ }
162
+ // old firmware
163
+ return features?.capabilities?.length > 0 &&
164
+ !existCapability(features, Enum_Capability.Capability_Bitcoin_like)
165
+ ? EFirmwareType.BitcoinOnly
166
+ : EFirmwareType.Universal;
167
+ };
@@ -0,0 +1,109 @@
1
+ import { EDeviceType } from '@onetokenfe/hd-shared';
2
+
3
+ import type { IDeviceType } from '../types';
4
+
5
+ export const LANGUAGE_LABELS = {
6
+ en: 'English',
7
+ zh_cn: '简体中文',
8
+ zh_hk: '繁體中文',
9
+ ja: '日本語',
10
+ ko: '한국어',
11
+ fr: 'Français',
12
+ de: 'Deutsch',
13
+ ru: 'Russian',
14
+ es: 'Spanish',
15
+ it: 'Italiano',
16
+ pt_br: 'Portuguese (Brazil)',
17
+ } as const;
18
+
19
+ export type LanguageKey = keyof typeof LANGUAGE_LABELS;
20
+ export type LanguageOption = { code: LanguageKey; label: (typeof LANGUAGE_LABELS)[LanguageKey] };
21
+
22
+ export const getLanguageConfig = (deviceType: IDeviceType): Record<string, string>[] => {
23
+ let keys: LanguageKey[] = [];
24
+
25
+ switch (deviceType) {
26
+ case EDeviceType.Classic:
27
+ case EDeviceType.Mini:
28
+ keys = ['en', 'zh_cn'];
29
+ break;
30
+ case EDeviceType.Classic1s:
31
+ case EDeviceType.ClassicPure:
32
+ keys = ['en', 'zh_cn', 'zh_hk', 'ja', 'pt_br', 'de', 'ko'];
33
+ break;
34
+
35
+ case EDeviceType.Touch:
36
+ case EDeviceType.Pro:
37
+ keys = Object.keys(LANGUAGE_LABELS) as LanguageKey[];
38
+ break;
39
+ default:
40
+ keys = [];
41
+ break;
42
+ }
43
+
44
+ return keys.map(key => ({ code: key, label: LANGUAGE_LABELS[key] }));
45
+ };
46
+
47
+ export type DurationParts = {
48
+ seconds: number;
49
+ minute: number;
50
+ hour: number;
51
+ day: number;
52
+ };
53
+
54
+ export const getAutoLockOptions = (_deviceType: IDeviceType): DurationParts[] => {
55
+ switch (_deviceType) {
56
+ case EDeviceType.Mini:
57
+ case EDeviceType.Classic:
58
+ case EDeviceType.Classic1s:
59
+ case EDeviceType.ClassicPure:
60
+ return [
61
+ { seconds: 0, minute: 1, hour: 0, day: 0 },
62
+ { seconds: 0, minute: 2, hour: 0, day: 0 },
63
+ { seconds: 0, minute: 5, hour: 0, day: 0 },
64
+ { seconds: 0, minute: 10, hour: 0, day: 0 },
65
+ { seconds: 0, minute: 0, hour: 0, day: 0 },
66
+ ];
67
+ case EDeviceType.Touch:
68
+ case EDeviceType.Pro:
69
+ return [
70
+ { seconds: 30, minute: 0, hour: 0, day: 0 },
71
+ { seconds: 0, minute: 1, hour: 0, day: 0 },
72
+ { seconds: 0, minute: 2, hour: 0, day: 0 },
73
+ { seconds: 0, minute: 5, hour: 0, day: 0 },
74
+ { seconds: 0, minute: 10, hour: 0, day: 0 },
75
+ { seconds: 0, minute: 30, hour: 0, day: 0 },
76
+ { seconds: 0, minute: 0, hour: 0, day: 0 },
77
+ ];
78
+ default:
79
+ return [];
80
+ }
81
+ };
82
+
83
+ export const getAutoShutDownOptions = (_deviceType: IDeviceType): DurationParts[] => {
84
+ switch (_deviceType) {
85
+ case EDeviceType.Mini:
86
+ return [];
87
+ case EDeviceType.Classic:
88
+ case EDeviceType.Classic1s:
89
+ case EDeviceType.ClassicPure:
90
+ return [
91
+ { seconds: 0, minute: 1, hour: 0, day: 0 },
92
+ { seconds: 0, minute: 3, hour: 0, day: 0 },
93
+ { seconds: 0, minute: 5, hour: 0, day: 0 },
94
+ { seconds: 0, minute: 10, hour: 0, day: 0 },
95
+ { seconds: 0, minute: 0, hour: 0, day: 0 },
96
+ ];
97
+ case EDeviceType.Touch:
98
+ case EDeviceType.Pro:
99
+ return [
100
+ { seconds: 0, minute: 1, hour: 0, day: 0 },
101
+ { seconds: 0, minute: 2, hour: 0, day: 0 },
102
+ { seconds: 0, minute: 5, hour: 0, day: 0 },
103
+ { seconds: 0, minute: 10, hour: 0, day: 0 },
104
+ { seconds: 0, minute: 0, hour: 0, day: 0 },
105
+ ];
106
+ default:
107
+ return [];
108
+ }
109
+ };
@@ -0,0 +1,79 @@
1
+ import semver from 'semver';
2
+
3
+ import type { Features, IVersionArray } from '../types';
4
+
5
+ /**
6
+ * Get Connected Device version by features
7
+ */
8
+ export const getDeviceFirmwareVersion = (features: Features | undefined): IVersionArray => {
9
+ if (!features) return [0, 0, 0];
10
+
11
+ if (semver.valid(features.onetoken_firmware_version)) {
12
+ return features.onetoken_firmware_version?.split('.') as unknown as IVersionArray;
13
+ }
14
+
15
+ if (semver.valid(features.onetoken_version)) {
16
+ return features.onetoken_version?.split('.') as unknown as IVersionArray;
17
+ }
18
+
19
+ return [0, 0, 0];
20
+ };
21
+
22
+ /**
23
+ * Get Connected Device bluetooth firmware version by features
24
+ */
25
+ export const getDeviceBLEFirmwareVersion = (features: Features): IVersionArray => {
26
+ const bleVer = features?.onetoken_ble_version || features?.ble_ver;
27
+
28
+ if (!bleVer) {
29
+ return [0, 0, 0];
30
+ }
31
+
32
+ if (!semver.valid(bleVer)) {
33
+ return [0, 0, 0];
34
+ }
35
+
36
+ if (bleVer) {
37
+ return bleVer.split('.').map(Number) as IVersionArray;
38
+ }
39
+ return [0, 0, 0];
40
+ };
41
+
42
+ /**
43
+ * Get Connected Device bootloader version by features
44
+ */
45
+ export const getDeviceBootloaderVersion = (features: Features | undefined): IVersionArray => {
46
+ if (!features) return [0, 0, 0];
47
+
48
+ // classic1s 3.5.0 pro 4.6.0
49
+ if (semver.valid(features.onetoken_boot_version)) {
50
+ return features.onetoken_boot_version?.split('.') as unknown as IVersionArray;
51
+ }
52
+
53
+ // low version hardware
54
+ if (!features.bootloader_version) {
55
+ if (features.bootloader_mode) {
56
+ return [
57
+ features?.major_version ?? 0,
58
+ features?.minor_version ?? 0,
59
+ features?.patch_version ?? 0,
60
+ ];
61
+ }
62
+ return [0, 0, 0];
63
+ }
64
+ if (semver.valid(features.bootloader_version)) {
65
+ return features.bootloader_version?.split('.') as unknown as IVersionArray;
66
+ }
67
+ return [0, 0, 0];
68
+ };
69
+
70
+ /**
71
+ * Get Connected Device boardloader version by features
72
+ */
73
+ export const getDeviceBoardloaderVersion = (features: Features): IVersionArray => {
74
+ if (semver.valid(features?.onetoken_board_version)) {
75
+ return features?.onetoken_board_version?.split('.') as unknown as IVersionArray;
76
+ }
77
+
78
+ return [0, 0, 0];
79
+ };