@onekeyfe/hd-core 1.2.0-alpha.2 → 1.2.0-alpha.21

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 (406) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +75 -0
  2. package/__tests__/DeviceCommands.test.ts +285 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +43 -0
  4. package/__tests__/connectSettings.test.ts +19 -0
  5. package/__tests__/core-dispose.test.ts +34 -0
  6. package/__tests__/core-error-output.test.ts +39 -0
  7. package/__tests__/device-features-state.test.ts +78 -0
  8. package/__tests__/device-identity.test.ts +30 -0
  9. package/__tests__/device-lifecycle-events.test.ts +117 -0
  10. package/__tests__/device-pool-state.test.ts +132 -0
  11. package/__tests__/device-settings.test.ts +391 -0
  12. package/__tests__/device-state-contract.test.ts +27 -0
  13. package/__tests__/device-state-events.test.ts +162 -0
  14. package/__tests__/device-state-mapper.test.ts +241 -0
  15. package/__tests__/device-state-projector.test.ts +94 -0
  16. package/__tests__/device-state-store.test.ts +82 -0
  17. package/__tests__/device-utils.test.ts +106 -0
  18. package/__tests__/device-wallet-session-store.test.ts +213 -0
  19. package/__tests__/deviceFeaturesUtils.test.ts +39 -0
  20. package/__tests__/deviceSettings.test.ts +103 -0
  21. package/__tests__/evmLedgerLegacySafety.test.ts +10 -6
  22. package/__tests__/evmSignTypedData.test.ts +80 -0
  23. package/__tests__/filesystemValidation.test.ts +53 -0
  24. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +402 -0
  25. package/__tests__/get-device-state.test.ts +410 -0
  26. package/__tests__/homescreen.test.ts +24 -0
  27. package/__tests__/kaspaSignTransaction.test.ts +591 -0
  28. package/__tests__/logBlockEvent.test.ts +26 -0
  29. package/__tests__/networkUtils.test.ts +386 -0
  30. package/__tests__/open-wallet-session-error-response.test.ts +43 -0
  31. package/__tests__/open-wallet-session.test.ts +559 -0
  32. package/__tests__/preInitialize.test.ts +33 -0
  33. package/__tests__/pro2Wallpaper.test.ts +50 -0
  34. package/__tests__/protocol-v2-bootloader-mode.test.ts +37 -0
  35. package/__tests__/protocol-v2-firmware-targets.test.ts +19 -0
  36. package/__tests__/protocol-v2.test.ts +3954 -1191
  37. package/__tests__/protocolV2FileWrite.test.ts +92 -0
  38. package/__tests__/protocolV2UiInteraction.test.ts +266 -0
  39. package/__tests__/public-device-state-api.test.ts +257 -0
  40. package/__tests__/public-pro2-api-boundary.test.ts +110 -0
  41. package/__tests__/refresh-device-state.test.ts +101 -0
  42. package/__tests__/request-context-logging.test.ts +16 -0
  43. package/__tests__/search-devices.test.ts +136 -0
  44. package/dist/api/BaseMethod.d.ts +8 -0
  45. package/dist/api/BaseMethod.d.ts.map +1 -1
  46. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  47. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  48. package/dist/api/ClearSessionCache.d.ts +9 -0
  49. package/dist/api/ClearSessionCache.d.ts.map +1 -0
  50. package/dist/api/DirList.d.ts.map +1 -1
  51. package/dist/api/FileRead.d.ts.map +1 -1
  52. package/dist/api/FileWrite.d.ts +1 -0
  53. package/dist/api/FileWrite.d.ts.map +1 -1
  54. package/dist/api/FirmwareUpdateV2.d.ts +2 -2
  55. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  56. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  57. package/dist/api/FirmwareUpdateV4.d.ts +25 -5
  58. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  59. package/dist/api/GetDeviceState.d.ts +7 -0
  60. package/dist/api/GetDeviceState.d.ts.map +1 -0
  61. package/dist/api/GetFeatures.d.ts +1 -1
  62. package/dist/api/GetFeatures.d.ts.map +1 -1
  63. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  64. package/dist/api/GetPassphraseState.d.ts +1 -6
  65. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  66. package/dist/api/OpenWalletSession.d.ts +14 -0
  67. package/dist/api/OpenWalletSession.d.ts.map +1 -0
  68. package/dist/api/PathInfo.d.ts.map +1 -1
  69. package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
  70. package/dist/api/SearchDevices.d.ts +3 -0
  71. package/dist/api/SearchDevices.d.ts.map +1 -1
  72. package/dist/api/UploadPortfolio.d.ts +17 -0
  73. package/dist/api/UploadPortfolio.d.ts.map +1 -0
  74. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  75. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  76. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  77. package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
  78. package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
  79. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  80. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  81. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  82. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  83. package/dist/api/device/DeviceUnlock.d.ts +1 -1
  84. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  85. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  86. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  87. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  88. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +1 -0
  89. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  90. package/dist/api/firmware/getBinary.d.ts +11 -3
  91. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  92. package/dist/api/firmware/progressThrottle.d.ts +3 -0
  93. package/dist/api/firmware/progressThrottle.d.ts.map +1 -0
  94. package/dist/api/helpers/filesystemValidation.d.ts +3 -0
  95. package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
  96. package/dist/api/helpers/paramsValidator.d.ts +1 -0
  97. package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
  98. package/dist/api/helpers/protocolV2FileWrite.d.ts +33 -0
  99. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -0
  100. package/dist/api/index.d.ts +12 -19
  101. package/dist/api/index.d.ts.map +1 -1
  102. package/dist/api/kaspa/KaspaSignTransaction.d.ts +5 -1
  103. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  104. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  105. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +6 -0
  106. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -0
  107. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +7 -0
  108. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -0
  109. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +1 -1
  110. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  111. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +3 -2
  112. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  113. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +1 -1
  114. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
  115. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +28 -0
  116. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -0
  117. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  118. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +6 -0
  119. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -0
  120. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +26 -0
  121. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -0
  122. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  123. package/dist/api/protocol-v2/{FilesystemFixPermission.d.ts → FilesystemPermissionFix.d.ts} +2 -2
  124. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
  125. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +6 -0
  126. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -0
  127. package/dist/api/protocol-v2/helpers.d.ts +27 -19
  128. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  129. package/dist/api/ton/TonSignData.d.ts +1 -5
  130. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  131. package/dist/api/utils.d.ts +2 -1
  132. package/dist/api/utils.d.ts.map +1 -1
  133. package/dist/constants/index.d.ts +2 -1
  134. package/dist/constants/index.d.ts.map +1 -1
  135. package/dist/core/RequestQueue.d.ts.map +1 -1
  136. package/dist/core/deviceEventRegistration.d.ts +11 -0
  137. package/dist/core/deviceEventRegistration.d.ts.map +1 -0
  138. package/dist/core/index.d.ts +3 -1
  139. package/dist/core/index.d.ts.map +1 -1
  140. package/dist/data-manager/DataManager.d.ts +1 -1
  141. package/dist/data-manager/DataManager.d.ts.map +1 -1
  142. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  143. package/dist/device/Device.d.ts +35 -11
  144. package/dist/device/Device.d.ts.map +1 -1
  145. package/dist/device/DeviceCommands.d.ts +8 -6
  146. package/dist/device/DeviceCommands.d.ts.map +1 -1
  147. package/dist/device/DeviceFeaturesState.d.ts +3 -0
  148. package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
  149. package/dist/device/DevicePool.d.ts +4 -2
  150. package/dist/device/DevicePool.d.ts.map +1 -1
  151. package/dist/device/DeviceStateMapper.d.ts +13 -0
  152. package/dist/device/DeviceStateMapper.d.ts.map +1 -0
  153. package/dist/device/DeviceStateProjector.d.ts +7 -0
  154. package/dist/device/DeviceStateProjector.d.ts.map +1 -0
  155. package/dist/device/DeviceStateStore.d.ts +21 -0
  156. package/dist/device/DeviceStateStore.d.ts.map +1 -0
  157. package/dist/device/DeviceWalletSessionStore.d.ts +20 -0
  158. package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -0
  159. package/dist/device/cloneDeviceState.d.ts +2 -0
  160. package/dist/device/cloneDeviceState.d.ts.map +1 -0
  161. package/dist/device/deviceIdentity.d.ts +5 -0
  162. package/dist/device/deviceIdentity.d.ts.map +1 -0
  163. package/dist/deviceProfile/buildDeviceFeatures.d.ts +9 -3
  164. package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
  165. package/dist/deviceProfile/index.d.ts +0 -1
  166. package/dist/deviceProfile/index.d.ts.map +1 -1
  167. package/dist/events/device.d.ts +11 -2
  168. package/dist/events/device.d.ts.map +1 -1
  169. package/dist/events/logBlockEvent.d.ts.map +1 -1
  170. package/dist/events/ui-request.d.ts +18 -2
  171. package/dist/events/ui-request.d.ts.map +1 -1
  172. package/dist/index.d.ts +1361 -609
  173. package/dist/index.js +5898 -2860
  174. package/dist/inject.d.ts.map +1 -1
  175. package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
  176. package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
  177. package/dist/protocols/protocol-v2/features.d.ts +23 -28
  178. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  179. package/dist/protocols/protocol-v2/firmware.d.ts +11 -9
  180. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  181. package/dist/protocols/protocol-v2/index.d.ts +3 -2
  182. package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
  183. package/dist/protocols/protocol-v2/lockedError.d.ts +2 -0
  184. package/dist/protocols/protocol-v2/lockedError.d.ts.map +1 -0
  185. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +16 -0
  186. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
  187. package/dist/protocols/protocol-v2/uiInteraction.d.ts +39 -0
  188. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
  189. package/dist/protocols/protocol-v2/unlockRetry.d.ts +11 -0
  190. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -0
  191. package/dist/protocols/protocol-v2/walletSession.d.ts +19 -0
  192. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -0
  193. package/dist/types/api/checkAllFirmwareRelease.d.ts +1 -2
  194. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  195. package/dist/types/api/deviceSettings.d.ts +11 -2
  196. package/dist/types/api/deviceSettings.d.ts.map +1 -1
  197. package/dist/types/api/deviceUnlock.d.ts +2 -2
  198. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  199. package/dist/types/api/firmwareUpdate.d.ts +6 -6
  200. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  201. package/dist/types/api/getDeviceState.d.ts +12 -0
  202. package/dist/types/api/getDeviceState.d.ts.map +1 -0
  203. package/dist/types/api/getFeatures.d.ts.map +1 -1
  204. package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
  205. package/dist/types/api/getPassphraseState.d.ts +2 -10
  206. package/dist/types/api/getPassphraseState.d.ts.map +1 -1
  207. package/dist/types/api/index.d.ts +22 -25
  208. package/dist/types/api/index.d.ts.map +1 -1
  209. package/dist/types/api/kaspaSignTransaction.d.ts +27 -2
  210. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  211. package/dist/types/api/openWalletSession.d.ts +41 -0
  212. package/dist/types/api/openWalletSession.d.ts.map +1 -0
  213. package/dist/types/api/protocolV2.d.ts +23 -28
  214. package/dist/types/api/protocolV2.d.ts.map +1 -1
  215. package/dist/types/api/sessionCache.d.ts +10 -0
  216. package/dist/types/api/sessionCache.d.ts.map +1 -0
  217. package/dist/types/device.d.ts +121 -5
  218. package/dist/types/device.d.ts.map +1 -1
  219. package/dist/types/params.d.ts +1 -0
  220. package/dist/types/params.d.ts.map +1 -1
  221. package/dist/types/settings.d.ts +21 -1
  222. package/dist/types/settings.d.ts.map +1 -1
  223. package/dist/utils/assets.d.ts +2 -1
  224. package/dist/utils/assets.d.ts.map +1 -1
  225. package/dist/utils/deviceFeaturesCompat.d.ts +13 -0
  226. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
  227. package/dist/utils/deviceFeaturesUtils.d.ts +13 -3
  228. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  229. package/dist/utils/deviceInfoUtils.d.ts +9 -8
  230. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  231. package/dist/utils/deviceSettings.d.ts +38 -7
  232. package/dist/utils/deviceSettings.d.ts.map +1 -1
  233. package/dist/utils/deviceVersionUtils.d.ts +6 -5
  234. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  235. package/dist/utils/homescreen.d.ts.map +1 -1
  236. package/dist/utils/index.d.ts +5 -2
  237. package/dist/utils/index.d.ts.map +1 -1
  238. package/dist/utils/networkUtils.d.ts +9 -1
  239. package/dist/utils/networkUtils.d.ts.map +1 -1
  240. package/dist/utils/patch.d.ts +1 -1
  241. package/dist/utils/patch.d.ts.map +1 -1
  242. package/dist/utils/pro2Wallpaper.d.ts +12 -0
  243. package/dist/utils/pro2Wallpaper.d.ts.map +1 -0
  244. package/dist/utils/tracing.d.ts.map +1 -1
  245. package/package.json +4 -4
  246. package/src/api/BaseMethod.ts +36 -9
  247. package/src/api/CheckBootloaderRelease.ts +1 -2
  248. package/src/api/CheckFirmwareRelease.ts +1 -2
  249. package/src/api/ClearSessionCache.ts +28 -0
  250. package/src/api/DirList.ts +5 -3
  251. package/src/api/DirMake.ts +3 -3
  252. package/src/api/DirRemove.ts +3 -3
  253. package/src/api/FileDelete.ts +3 -3
  254. package/src/api/FileRead.ts +23 -7
  255. package/src/api/FileWrite.ts +23 -168
  256. package/src/api/FirmwareUpdate.ts +4 -4
  257. package/src/api/FirmwareUpdateV2.ts +133 -45
  258. package/src/api/FirmwareUpdateV3.ts +3 -5
  259. package/src/api/FirmwareUpdateV4.ts +1138 -357
  260. package/src/api/GetDeviceState.ts +55 -0
  261. package/src/api/GetFeatures.ts +8 -3
  262. package/src/api/GetOnekeyFeatures.ts +3 -72
  263. package/src/api/GetPassphraseState.ts +11 -18
  264. package/src/api/OpenWalletSession.ts +221 -0
  265. package/src/api/PathInfo.ts +5 -3
  266. package/src/api/PromptWebDeviceAccess.ts +2 -3
  267. package/src/api/SearchDevices.ts +29 -4
  268. package/src/api/UploadPortfolio.ts +40 -0
  269. package/src/api/alephium/AlephiumSignTransaction.ts +2 -2
  270. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +4 -8
  271. package/src/api/benfen/BenfenGetAddress.ts +1 -1
  272. package/src/api/btc/BTCGetPublicKey.ts +1 -1
  273. package/src/api/cardano/CardanoSignMessage.ts +1 -1
  274. package/src/api/cardano/CardanoSignTransaction.ts +1 -1
  275. package/src/api/device/DeviceCancel.ts +1 -0
  276. package/src/api/device/DeviceChangePin.ts +24 -0
  277. package/src/api/device/DeviceFullyUploadResource.ts +4 -5
  278. package/src/api/device/DeviceLock.ts +1 -0
  279. package/src/api/device/DeviceRebootToBoardloader.ts +5 -4
  280. package/src/api/device/DeviceRebootToBootloader.ts +5 -4
  281. package/src/api/device/DeviceSettings.ts +183 -1
  282. package/src/api/device/DeviceUnlock.ts +11 -1
  283. package/src/api/device/DeviceUpdateBootloader.ts +1 -2
  284. package/src/api/device/DeviceWipe.ts +19 -0
  285. package/src/api/evm/EVMSignTypedData.ts +3 -5
  286. package/src/api/evm/legacyV1/getAddress.ts +2 -2
  287. package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
  288. package/src/api/evm/legacyV1/signMessage.ts +2 -2
  289. package/src/api/evm/legacyV1/signTypedData.ts +2 -2
  290. package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
  291. package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
  292. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +21 -7
  293. package/src/api/firmware/getBinary.ts +8 -3
  294. package/src/api/firmware/progressThrottle.ts +44 -0
  295. package/src/api/helpers/batchGetPublickeys.ts +2 -2
  296. package/src/api/helpers/filesystemValidation.ts +61 -0
  297. package/src/api/helpers/paramsValidator.ts +1 -1
  298. package/src/api/helpers/protocolV2FileWrite.ts +193 -0
  299. package/src/api/index.ts +14 -20
  300. package/src/api/kaspa/KaspaSignTransaction.ts +341 -22
  301. package/src/api/kaspa/helpers/TransferSerialize.ts +14 -0
  302. package/src/api/nervos/NervosSignTransaction.ts +2 -2
  303. package/src/api/nexa/NexaSignTransaction.ts +1 -1
  304. package/src/api/protocol-v2/{FactoryGetDeviceInfo.ts → DeviceFactoryInfoGet.ts} +4 -4
  305. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +32 -0
  306. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +7 -9
  307. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +41 -6
  308. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +6 -4
  309. package/src/api/protocol-v2/DeviceInfoGet.ts +145 -0
  310. package/src/api/protocol-v2/DeviceReboot.ts +5 -3
  311. package/src/api/protocol-v2/DeviceStatusGet.ts +16 -0
  312. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +131 -0
  313. package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
  314. package/src/api/protocol-v2/{FilesystemFixPermission.ts → FilesystemPermissionFix.ts} +3 -3
  315. package/src/api/protocol-v2/Ping.ts +1 -1
  316. package/src/api/protocol-v2/{GetProtoVersion.ts → ProtocolInfoRequest.ts} +3 -3
  317. package/src/api/protocol-v2/helpers.ts +58 -62
  318. package/src/api/ton/TonSignData.ts +1 -5
  319. package/src/api/utils.ts +7 -3
  320. package/src/constants/index.ts +7 -1
  321. package/src/core/RequestQueue.ts +1 -0
  322. package/src/core/deviceEventRegistration.ts +23 -0
  323. package/src/core/index.ts +140 -35
  324. package/src/data/messages/messages-protocol-v2.json +825 -709
  325. package/src/data/messages/messages.json +286 -1
  326. package/src/data-manager/DataManager.ts +13 -6
  327. package/src/data-manager/connectSettings.ts +4 -0
  328. package/src/device/Device.ts +480 -192
  329. package/src/device/DeviceCommands.ts +81 -25
  330. package/src/device/DeviceFeaturesState.ts +25 -0
  331. package/src/device/DevicePool.ts +67 -19
  332. package/src/device/DeviceStateMapper.ts +349 -0
  333. package/src/device/DeviceStateProjector.ts +95 -0
  334. package/src/device/DeviceStateStore.ts +201 -0
  335. package/src/device/DeviceWalletSessionStore.ts +105 -0
  336. package/src/device/cloneDeviceState.ts +39 -0
  337. package/src/device/deviceIdentity.ts +18 -0
  338. package/src/deviceProfile/buildDeviceFeatures.ts +235 -210
  339. package/src/deviceProfile/index.ts +0 -1
  340. package/src/events/device.ts +17 -1
  341. package/src/events/logBlockEvent.ts +8 -1
  342. package/src/events/ui-request.ts +24 -2
  343. package/src/inject.ts +23 -34
  344. package/src/protocols/protocol-v2/deviceSession.ts +24 -0
  345. package/src/protocols/protocol-v2/features.ts +68 -82
  346. package/src/protocols/protocol-v2/firmware.ts +12 -36
  347. package/src/protocols/protocol-v2/index.ts +3 -1
  348. package/src/protocols/protocol-v2/lockedError.ts +10 -0
  349. package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +61 -0
  350. package/src/protocols/protocol-v2/uiInteraction.ts +210 -0
  351. package/src/protocols/protocol-v2/unlockRetry.ts +76 -0
  352. package/src/protocols/protocol-v2/walletSession.ts +107 -0
  353. package/src/types/api/checkAllFirmwareRelease.ts +1 -2
  354. package/src/types/api/deviceSettings.ts +26 -2
  355. package/src/types/api/deviceUnlock.ts +5 -2
  356. package/src/types/api/firmwareUpdate.ts +28 -20
  357. package/src/types/api/getDeviceState.ts +19 -0
  358. package/src/types/api/getFeatures.ts +3 -0
  359. package/src/types/api/getOnekeyFeatures.ts +3 -0
  360. package/src/types/api/getPassphraseState.ts +8 -11
  361. package/src/types/api/index.ts +30 -53
  362. package/src/types/api/kaspaSignTransaction.ts +40 -2
  363. package/src/types/api/openWalletSession.ts +64 -0
  364. package/src/types/api/protocolV2.ts +58 -55
  365. package/src/types/api/sessionCache.ts +14 -0
  366. package/src/types/device.ts +170 -4
  367. package/src/types/params.ts +4 -0
  368. package/src/types/settings.ts +42 -30
  369. package/src/utils/assets.ts +4 -1
  370. package/src/utils/deviceFeaturesCompat.ts +173 -0
  371. package/src/utils/deviceFeaturesUtils.ts +68 -24
  372. package/src/utils/deviceInfoUtils.ts +26 -64
  373. package/src/utils/deviceSettings.ts +161 -39
  374. package/src/utils/deviceVersionUtils.ts +25 -44
  375. package/src/utils/findDefectiveBatchDevice.ts +3 -3
  376. package/src/utils/homescreen.ts +10 -0
  377. package/src/utils/index.ts +21 -1
  378. package/src/utils/networkUtils.ts +270 -14
  379. package/src/utils/pro2Wallpaper.ts +109 -0
  380. package/src/utils/tracing.ts +3 -1
  381. package/dist/api/GetDeviceInfo.d.ts +0 -9
  382. package/dist/api/GetDeviceInfo.d.ts.map +0 -1
  383. package/dist/api/protocol-v2/DevReboot.d.ts +0 -7
  384. package/dist/api/protocol-v2/DevReboot.d.ts.map +0 -1
  385. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts +0 -29
  386. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts.map +0 -1
  387. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +0 -7
  388. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +0 -1
  389. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +0 -6
  390. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +0 -1
  391. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts +0 -13
  392. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts.map +0 -1
  393. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +0 -1
  394. package/dist/api/protocol-v2/GetProtoVersion.d.ts +0 -6
  395. package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +0 -1
  396. package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
  397. package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
  398. package/dist/types/api/getDeviceInfo.d.ts +0 -85
  399. package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
  400. package/src/api/GetDeviceInfo.ts +0 -145
  401. package/src/api/protocol-v2/DevReboot.ts +0 -24
  402. package/src/api/protocol-v2/DeviceGetDeviceInfo.ts +0 -118
  403. package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +0 -29
  404. package/src/api/protocol-v2/FilesystemDiskControl.ts +0 -50
  405. package/src/deviceProfile/buildDeviceProfile.ts +0 -334
  406. package/src/types/api/getDeviceInfo.ts +0 -99
@@ -2,7 +2,12 @@ import { EDeviceType, type EFirmwareType } from '@onekeyfe/hd-shared';
2
2
 
3
3
  import type { IVersionArray } from './settings';
4
4
  import type { PROTO } from '../constants';
5
- import type { OneKeyDeviceCommType, ProtocolV2DeviceInfo } from '@onekeyfe/hd-transport';
5
+ import type {
6
+ Enum_SafetyCheckLevel,
7
+ OneKeyDeviceCommType,
8
+ ProtocolV2DeviceInfo,
9
+ DeviceStatus as ProtocolV2DeviceStatus,
10
+ } from '@onekeyfe/hd-transport';
6
11
 
7
12
  export type DeviceStatus = 'available' | 'occupied' | 'used';
8
13
 
@@ -23,6 +28,12 @@ export type UnavailableCapabilities = { [key: string]: UnavailableCapability };
23
28
 
24
29
  export type KnownDevice = {
25
30
  connectId: string | null;
31
+ /**
32
+ * Stable physical-device identity. Current SDK responses always include this
33
+ * value; it remains optional in the type during the uuid compatibility window.
34
+ */
35
+ serialNo?: string;
36
+ /** @deprecated Use serialNo instead. */
26
37
  uuid: string;
27
38
  deviceId: string | null;
28
39
  deviceType: IDeviceType | null;
@@ -34,7 +45,8 @@ export type KnownDevice = {
34
45
  error?: typeof undefined;
35
46
  mode: EOneKeyDeviceMode;
36
47
  features?: Features;
37
- sessionId?: string | null;
48
+ /** Unified SDK device-state snapshot; features remains a legacy projection. */
49
+ state?: DeviceState;
38
50
  unavailableCapabilities: UnavailableCapabilities;
39
51
  bleFirmwareVersion: IVersionArray | null;
40
52
  firmwareVersion: IVersionArray | null;
@@ -47,6 +59,17 @@ export type KnownDevice = {
47
59
 
48
60
  export type SearchDevice = {
49
61
  connectId: string | null;
62
+ /**
63
+ * Available after device initialization. BLE discovery does not connect to the
64
+ * device, so it returns null until a later initialized device response. Current
65
+ * SDK responses always include the field; it remains optional in the type during
66
+ * the uuid compatibility window.
67
+ */
68
+ serialNo?: string | null;
69
+ /**
70
+ * @deprecated Ambiguous legacy identifier. Use serialNo for hardware identity
71
+ * and connectId for transport routing.
72
+ */
50
73
  uuid: string;
51
74
  deviceId: string | null;
52
75
  deviceType: IDeviceType;
@@ -91,6 +114,7 @@ export type DeviceFeaturesProtocol = 'V1' | 'V2' | 'unknown';
91
114
  export type DeviceFeaturesMode =
92
115
  | 'normal'
93
116
  | 'bootloader'
117
+ | 'romloader'
94
118
  | 'notInitialized'
95
119
  | 'backupMode'
96
120
  | 'unknown';
@@ -126,9 +150,135 @@ export type DeviceFeaturesRaw = {
126
150
  protocolV1Features?: PROTO.Features;
127
151
  protocolV1OneKeyFeatures?: OnekeyFeatures;
128
152
  protocolV2DeviceInfo?: ProtocolV2DeviceInfo;
153
+ protocolV2DeviceStatus?: ProtocolV2DeviceStatus;
129
154
  };
130
155
 
131
- export type Features = {
156
+ export type DeviceFeaturesRawPatch = {
157
+ [Key in keyof DeviceFeaturesRaw]?: DeviceFeaturesRaw[Key] | null;
158
+ };
159
+
160
+ export type DeviceStateProtocol = DeviceFeaturesProtocol;
161
+ export type DeviceStateMode = DeviceFeaturesMode;
162
+ export type DeviceStateSection = 'identity' | 'status' | 'settings' | 'versions' | 'verification';
163
+
164
+ export type DeviceStateUpdateSource =
165
+ | 'initialize'
166
+ | 'device-info'
167
+ | 'device-status'
168
+ | 'settings-read'
169
+ | 'settings-write'
170
+ | 'change-pin'
171
+ | 'lock'
172
+ | 'unlock'
173
+ | 'passphrase'
174
+ | 'session-clear'
175
+ | 'firmware-update'
176
+ | 'transport-reconnect'
177
+ | 'compatibility';
178
+
179
+ export type DeviceStateIdentity = {
180
+ deviceType: IDeviceType;
181
+ firmwareType: EFirmwareType;
182
+ model: string | null;
183
+ vendor: string | null;
184
+ deviceId: string | null;
185
+ serialNo: string;
186
+ label: string | null;
187
+ bleName: string | null;
188
+ };
189
+
190
+ export type DeviceStateStatus = {
191
+ mode: DeviceStateMode;
192
+ initialized: boolean | null;
193
+ unlocked: boolean | null;
194
+ firmwarePresent: boolean | null;
195
+ backupRequired: boolean | null;
196
+ noBackup: boolean | null;
197
+ unfinishedBackup: boolean | null;
198
+ recoveryMode: boolean | null;
199
+ passphraseProtection: boolean | null;
200
+ pinProtection: boolean | null;
201
+ attachToPinEnabled: boolean | null;
202
+ unlockedAttachPin: boolean | null;
203
+ };
204
+
205
+ export type DeviceStateSettings = {
206
+ language: string | null;
207
+ bleEnabled: boolean | null;
208
+ sdCardPresent: boolean | null;
209
+ sdProtection: boolean | null;
210
+ wipeCodeProtection: boolean | null;
211
+ passphraseAlwaysOnDevice: boolean | null;
212
+ safetyChecks: Enum_SafetyCheckLevel | null;
213
+ autoLockDelayMs: number | null;
214
+ autoShutdownDelayMs: number | null;
215
+ displayRotation: number | null;
216
+ experimentalFeatures: boolean | null;
217
+ wallpaperPath: string | null;
218
+ brightness: number | null;
219
+ animationEnabled: boolean | null;
220
+ tapToWake: boolean | null;
221
+ hapticFeedback: boolean | null;
222
+ deviceNameDisplayEnabled: boolean | null;
223
+ airgapMode: boolean | null;
224
+ fidoEnabled: boolean | null;
225
+ usbLockEnabled: boolean | null;
226
+ randomKeypad: boolean | null;
227
+ };
228
+
229
+ export type DeviceStateVersions = {
230
+ firmware: string | null;
231
+ bootloader: string | null;
232
+ board: string | null;
233
+ ble: string | null;
234
+ /** @deprecated Kept for legacy consumers; new code should read se01. */
235
+ se?: string | null;
236
+ se01?: string | null;
237
+ se02?: string | null;
238
+ se03?: string | null;
239
+ se04?: string | null;
240
+ se01Boot?: string | null;
241
+ se02Boot?: string | null;
242
+ se03Boot?: string | null;
243
+ se04Boot?: string | null;
244
+ };
245
+
246
+ export type DeviceState = {
247
+ schemaVersion: 1;
248
+ revision: number;
249
+ updatedAt: number;
250
+ protocol: DeviceStateProtocol;
251
+ /** Device-message protocol version, independent of the SDK V1/V2 protocol family. */
252
+ protocolVersion: number | null;
253
+ identity: DeviceStateIdentity;
254
+ status: DeviceStateStatus;
255
+ settings: DeviceStateSettings;
256
+ versions: DeviceStateVersions;
257
+ capabilities: Array<number | string>;
258
+ verification?: Partial<DeviceFeaturesVerify>;
259
+ };
260
+
261
+ export type DeviceStatePatch = {
262
+ protocol?: DeviceStateProtocol;
263
+ protocolVersion?: number | null;
264
+ identity?: Partial<DeviceStateIdentity>;
265
+ status?: Partial<DeviceStateStatus>;
266
+ settings?: Partial<DeviceStateSettings>;
267
+ versions?: Partial<DeviceStateVersions>;
268
+ capabilities?: Array<number | string>;
269
+ verification?: DeviceFeaturesVerify;
270
+ raw?: DeviceFeaturesRawPatch;
271
+ };
272
+
273
+ export type DeviceStateEvent = {
274
+ connectId: string | null;
275
+ state: DeviceState;
276
+ revision: number;
277
+ source: DeviceStateUpdateSource;
278
+ changedKeys: string[];
279
+ };
280
+
281
+ export type NormalizedFeatures = {
132
282
  protocol: DeviceFeaturesProtocol;
133
283
  protocolVersion?: number | null;
134
284
  deviceType: IDeviceType;
@@ -157,10 +307,22 @@ export type Features = {
157
307
  sdProtection: boolean | null;
158
308
  wipeCodeProtection: boolean | null;
159
309
  passphraseAlwaysOnDevice: boolean | null;
160
- safetyChecks: string | null;
310
+ attachToPinEnabled?: boolean | null;
311
+ safetyChecks: Enum_SafetyCheckLevel | null;
161
312
  autoLockDelayMs: number | null;
313
+ autoShutdownDelayMs: number | null;
162
314
  displayRotation: number | null;
163
315
  experimentalFeatures: boolean | null;
316
+ wallpaperPath: string | null;
317
+ brightness: number | null;
318
+ animationEnabled: boolean | null;
319
+ tapToWake: boolean | null;
320
+ hapticFeedback: boolean | null;
321
+ deviceNameDisplayEnabled: boolean | null;
322
+ airgapMode: boolean | null;
323
+ fidoEnabled: boolean | null;
324
+ usbLockEnabled: boolean | null;
325
+ randomKeypad: boolean | null;
164
326
  firmwareVersion: string | null;
165
327
  bootloaderVersion: string | null;
166
328
  boardVersion: string | null;
@@ -181,6 +343,10 @@ export type Features = {
181
343
  raw?: DeviceFeaturesRaw;
182
344
  };
183
345
 
346
+ export type Features = NormalizedFeatures &
347
+ Partial<Omit<PROTO.Features, keyof NormalizedFeatures>> &
348
+ Partial<Omit<PROTO.OnekeyFeatures, keyof NormalizedFeatures | keyof PROTO.Features>>;
349
+
184
350
  export type OnekeyFeatures = PROTO.OnekeyFeatures;
185
351
 
186
352
  export type IDeviceType =
@@ -14,6 +14,10 @@ export interface CommonParams {
14
14
  * Timeout time for single polling
15
15
  */
16
16
  timeout?: number;
17
+ /**
18
+ * DeviceInfoGet timeout during Protocol V2 initialization.
19
+ */
20
+ protocolV2DeviceInfoTimeoutMs?: number;
17
21
  /**
18
22
  * passphrase state
19
23
  */
@@ -40,6 +40,40 @@ export type IVersionArray = [number, number, number];
40
40
 
41
41
  export type ILocale = 'zh-CN' | 'en-US';
42
42
 
43
+ export type IProtocolV2FirmwareComponentTarget =
44
+ | 'ROMLOADER'
45
+ | 'BOOTLOADER'
46
+ | 'APPLICATION_P1'
47
+ | 'APPLICATION_P2'
48
+ | 'COPROCESSOR'
49
+ | 'SE01'
50
+ | 'SE02'
51
+ | 'SE03'
52
+ | 'SE04';
53
+
54
+ export type IProtocolV2FirmwareComponent = {
55
+ target: IProtocolV2FirmwareComponentTarget;
56
+ url: string;
57
+ fingerprint?: string;
58
+ version?: IVersionArray;
59
+ };
60
+
61
+ /** Pro2 RESC bundle okpkg descriptor for incremental FileWrite synchronization. */
62
+ export type IProtocolV2ResourceBundle = {
63
+ /** Bundle name, such as images, animation, translations, or fonts_roobert. */
64
+ name: string;
65
+ /** Download URL. */
66
+ url: string;
67
+ /** Device target path, such as vol0:/bundles/images/images.okpkg. */
68
+ devicePath: string;
69
+ /** okpkg payload_version used to skip matching content after FileRead. */
70
+ version?: IVersionArray;
71
+ /** okpkg payload_hash used for SHA3-512 comparison after FileRead. */
72
+ payloadHash?: string;
73
+ /** okpkg header_hash used for SHA3-512 comparison after FileRead. */
74
+ headerHash?: string;
75
+ };
76
+
43
77
  /** STM32 firmware config */
44
78
  export type IFirmwareReleaseInfo = {
45
79
  required: boolean;
@@ -58,6 +92,11 @@ export type IFirmwareReleaseInfo = {
58
92
  bootloaderVersion?: IVersionArray;
59
93
  displayBootloaderVersion?: IVersionArray;
60
94
  bootloaderRelatedFirmwareVersion?: IVersionArray;
95
+ upgradeType?: 'payload-package-set' | string;
96
+ components?: Record<string, IProtocolV2FirmwareComponent>;
97
+ installOrder?: string[];
98
+ /** Pro2 RESC bundles for incremental direct FileWrite synchronization. */
99
+ resourceBundles?: IProtocolV2ResourceBundle[];
61
100
  bootloaderChangelog?: {
62
101
  [k in ILocale]: string;
63
102
  };
@@ -83,43 +122,16 @@ export type IBLEFirmwareReleaseInfo = {
83
122
  };
84
123
  };
85
124
 
86
- type IKnownDevice = Exclude<IDeviceType, 'unknown' | 'pro2'>;
125
+ type IKnownDevice = Exclude<IDeviceType, 'unknown'>;
87
126
 
88
- /**
89
- * Device firmware configuration map
90
- *
91
- * IMPORTANT: This type is used for firmware update logic.
92
- * - DO NOT remove existing firmware fields
93
- * - Only ADD new optional firmware fields for new versions
94
- * - 'firmware' field is required for backward compatibility
95
- * - 'ble' field is required for BLE firmware updates
96
- *
97
- * @example
98
- * // When adding firmware-v8:
99
- * // {
100
- * // firmware: IFirmwareReleaseInfo[];
101
- * // 'firmware-v2'?: IFirmwareReleaseInfo[];
102
- * // 'firmware-v8'?: IFirmwareReleaseInfo[];
103
- * // 'firmware-v8'?: IFirmwareReleaseInfo[]; // New
104
- * // 'firmware-btc-v8'?: IFirmwareReleaseInfo[];
105
- * // 'firmware-btc-v8'?: IFirmwareReleaseInfo[]; // New
106
- * // ble: IBLEFirmwareReleaseInfo[];
107
- * // }
108
- */
109
127
  export type DeviceTypeMap = {
110
128
  [k in IKnownDevice]: {
111
- /** Base firmware field (required for backward compatibility) */
112
129
  firmware: IFirmwareReleaseInfo[];
113
- /** Firmware v2 (Touch/Pro specific) */
130
+ /** Pro2 Protocol V2 payload package set */
131
+ 'firmware-v1'?: IFirmwareReleaseInfo[];
114
132
  'firmware-v2'?: IFirmwareReleaseInfo[];
115
- /** Universal firmware v7 */
116
133
  'firmware-v8'?: IFirmwareReleaseInfo[];
117
- /** Bitcoin-only firmware v7 */
118
134
  'firmware-btc-v8'?: IFirmwareReleaseInfo[];
119
- // Future firmware versions should be added here as optional fields:
120
- // 'firmware-v8'?: IFirmwareReleaseInfo[];
121
- // 'firmware-btc-v8'?: IFirmwareReleaseInfo[];
122
- /** BLE firmware (required) */
123
135
  ble: IBLEFirmwareReleaseInfo[];
124
136
  };
125
137
  };
@@ -1,5 +1,8 @@
1
1
  import { httpRequest as browserHttpRequest } from './networkUtils';
2
2
 
3
- export const httpRequest = (url: string, type: string): any => browserHttpRequest(url, type);
3
+ import type { HttpRequestOptions } from './networkUtils';
4
+
5
+ export const httpRequest = (url: string, type: string, options?: HttpRequestOptions): any =>
6
+ browserHttpRequest(url, type, options);
4
7
 
5
8
  export const getTimeStamp = () => new Date().getTime();
@@ -0,0 +1,173 @@
1
+ import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
2
+ import { Enum_Capability } from '@onekeyfe/hd-transport';
3
+
4
+ import type { PROTO } from '../constants';
5
+ import type { Features, IDeviceType } from '../types';
6
+
7
+ export type DeviceFeaturesInput = Features | PROTO.Features;
8
+
9
+ type CompatibleDeviceFeatures = Partial<Features> &
10
+ Partial<PROTO.Features> & {
11
+ onekey_serial?: string;
12
+ onekey_version?: string;
13
+ };
14
+
15
+ const asCompatibleFeatures = (features: DeviceFeaturesInput): CompatibleDeviceFeatures =>
16
+ features as CompatibleDeviceFeatures;
17
+
18
+ const firstNonEmptyString = (...values: Array<string | null | undefined>) =>
19
+ values.find(value => typeof value === 'string' && value.length > 0);
20
+
21
+ const firstMeaningfulVersion = (...versions: Array<string | null | undefined>) =>
22
+ versions.find(version => Boolean(version && version !== '0.0.0')) ?? null;
23
+
24
+ const versionFromParts = (major?: number | null, minor?: number | null, patch?: number | null) =>
25
+ [major, minor, patch].map(part => Number(part) || 0).join('.');
26
+
27
+ export const resolveDeviceSerialNo = (features?: DeviceFeaturesInput): string => {
28
+ if (!features) return '';
29
+ const compatible = asCompatibleFeatures(features);
30
+ return (
31
+ firstNonEmptyString(
32
+ compatible.serialNo,
33
+ compatible.onekey_serial_no,
34
+ compatible.onekey_serial,
35
+ compatible.serial_no
36
+ ) ?? ''
37
+ );
38
+ };
39
+
40
+ export const resolveDeviceType = (features?: DeviceFeaturesInput): IDeviceType => {
41
+ if (!features || typeof features !== 'object') {
42
+ return EDeviceType.Unknown;
43
+ }
44
+
45
+ const compatible = asCompatibleFeatures(features);
46
+ if (compatible.deviceType && compatible.deviceType !== EDeviceType.Unknown) {
47
+ return compatible.deviceType;
48
+ }
49
+
50
+ switch (compatible.onekey_device_type?.toString().toUpperCase()) {
51
+ case 'CLASSIC':
52
+ return EDeviceType.Classic;
53
+ case 'CLASSIC1S':
54
+ return EDeviceType.Classic1s;
55
+ case 'MINI':
56
+ return EDeviceType.Mini;
57
+ case 'TOUCH':
58
+ return EDeviceType.Touch;
59
+ case 'PRO':
60
+ return EDeviceType.Pro;
61
+ case 'PRO2':
62
+ return EDeviceType.Pro2;
63
+ case 'PURE':
64
+ return EDeviceType.ClassicPure;
65
+ default:
66
+ break;
67
+ }
68
+
69
+ if (compatible.model?.toString().toLowerCase() === EDeviceType.Pro2) {
70
+ return EDeviceType.Pro2;
71
+ }
72
+
73
+ const serialNo = resolveDeviceSerialNo(features);
74
+ const prefix = serialNo.slice(0, 2).toLowerCase();
75
+ if (prefix === 'bi' || prefix === 'cl') return EDeviceType.Classic;
76
+ if (prefix === 'cp') return EDeviceType.ClassicPure;
77
+ if (prefix === 'mi') return EDeviceType.Mini;
78
+ if (prefix === 'tc') return EDeviceType.Touch;
79
+ if (prefix === 'pr') return EDeviceType.Pro;
80
+ if (prefix === 'p2') return EDeviceType.Pro2;
81
+
82
+ const bootloaderMode = compatible.bootloaderMode ?? compatible.bootloader_mode;
83
+ if (!serialNo && bootloaderMode === true && compatible.model === '1') {
84
+ return EDeviceType.Classic;
85
+ }
86
+
87
+ return compatible.deviceType ?? EDeviceType.Unknown;
88
+ };
89
+
90
+ export const resolveDeviceFirmwareType = (features?: DeviceFeaturesInput): EFirmwareType => {
91
+ if (!features) {
92
+ return EFirmwareType.Universal;
93
+ }
94
+
95
+ const compatible = asCompatibleFeatures(features);
96
+ if (compatible.firmwareType) {
97
+ return compatible.firmwareType;
98
+ }
99
+ if (compatible.fw_vendor === 'OneKey Bitcoin-only') {
100
+ return EFirmwareType.BitcoinOnly;
101
+ }
102
+
103
+ const capabilities = compatible.capabilities as Array<number | string> | null | undefined;
104
+ const supportsBitcoinLike = capabilities?.some(
105
+ capability =>
106
+ capability === Enum_Capability.Capability_Bitcoin_like ||
107
+ capability === 'Capability_Bitcoin_like'
108
+ );
109
+ return capabilities?.length && !supportsBitcoinLike
110
+ ? EFirmwareType.BitcoinOnly
111
+ : EFirmwareType.Universal;
112
+ };
113
+
114
+ export const resolveDeviceBleName = (features?: DeviceFeaturesInput): string | null => {
115
+ if (!features) return null;
116
+ const compatible = asCompatibleFeatures(features);
117
+ return (
118
+ firstNonEmptyString(compatible.bleName, compatible.onekey_ble_name, compatible.ble_name) ?? null
119
+ );
120
+ };
121
+
122
+ export const resolveDeviceFirmwareVersion = (features?: DeviceFeaturesInput): string | null => {
123
+ if (!features) return null;
124
+ const compatible = asCompatibleFeatures(features);
125
+ return firstMeaningfulVersion(
126
+ compatible.firmwareVersion,
127
+ compatible.onekey_firmware_version,
128
+ compatible.onekey_version,
129
+ versionFromParts(compatible.major_version, compatible.minor_version, compatible.patch_version)
130
+ );
131
+ };
132
+
133
+ export const resolveDeviceBootloaderVersion = (features?: DeviceFeaturesInput): string | null => {
134
+ if (!features) return null;
135
+ const compatible = asCompatibleFeatures(features);
136
+ const bootloaderMode = compatible.bootloaderMode ?? compatible.bootloader_mode;
137
+ return firstMeaningfulVersion(
138
+ compatible.bootloaderVersion,
139
+ compatible.onekey_boot_version,
140
+ compatible.bootloader_version,
141
+ compatible.onekey_bootloader_version,
142
+ bootloaderMode
143
+ ? versionFromParts(
144
+ compatible.major_version,
145
+ compatible.minor_version,
146
+ compatible.patch_version
147
+ )
148
+ : null
149
+ );
150
+ };
151
+
152
+ export const resolveDeviceBoardVersion = (features?: DeviceFeaturesInput): string | null => {
153
+ if (!features) return null;
154
+ const compatible = asCompatibleFeatures(features);
155
+ return firstMeaningfulVersion(
156
+ compatible.boardVersion,
157
+ compatible.onekey_board_version,
158
+ compatible.boardloader_version,
159
+ compatible.onekey_romloader_version,
160
+ compatible.romloader_version
161
+ );
162
+ };
163
+
164
+ export const resolveDeviceBleFirmwareVersion = (features?: DeviceFeaturesInput): string | null => {
165
+ if (!features) return null;
166
+ const compatible = asCompatibleFeatures(features);
167
+ return firstMeaningfulVersion(
168
+ compatible.bleVersion,
169
+ compatible.onekey_ble_version,
170
+ compatible.ble_ver,
171
+ compatible.onekey_coprocessor_version
172
+ );
173
+ };