@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
@@ -1,4 +1,11 @@
1
1
  import { ERRORS, HardwareError, HardwareErrorCode } from '@onekeyfe/hd-shared';
2
+ import {
3
+ DeviceErrorCode,
4
+ type FailureType,
5
+ type Messages,
6
+ type Transport,
7
+ type TransportCallOptions,
8
+ } from '@onekeyfe/hd-transport';
2
9
 
3
10
  import TransportManager from '../data-manager/TransportManager';
4
11
  import DataManager from '../data-manager/DataManager';
@@ -12,12 +19,6 @@ import {
12
19
  } from '../utils/tracing';
13
20
 
14
21
  import type { Device } from './Device';
15
- import type {
16
- FailureType,
17
- Messages,
18
- Transport,
19
- TransportCallOptions,
20
- } from '@onekeyfe/hd-transport';
21
22
 
22
23
  export type PassphrasePromptResponse = {
23
24
  passphrase?: string;
@@ -51,11 +52,16 @@ const HIGH_VOLUME_DEBUG_CALLS = new Set([
51
52
  'FirmwareUpload',
52
53
  'ResourceAck',
53
54
  ]);
55
+ const SENSITIVE_DEBUG_CALLS = new Set(['DeviceSessionGet']);
54
56
 
55
57
  function shouldReduceDebugForCall(type: string) {
56
58
  return HIGH_VOLUME_DEBUG_CALLS.has(type);
57
59
  }
58
60
 
61
+ function shouldBlockDebugForCall(type: string) {
62
+ return SENSITIVE_DEBUG_CALLS.has(type);
63
+ }
64
+
59
65
  function getBinaryByteLength(value: unknown): number | undefined {
60
66
  if (value instanceof ArrayBuffer) {
61
67
  return value.byteLength;
@@ -98,6 +104,12 @@ function sanitizeDebugPayload(value: unknown, key = '', depth = 0): unknown {
98
104
  return summarizeRedactedData(value);
99
105
  }
100
106
 
107
+ // Redact passphrase-bearing keys as defense in depth so wallet identifiers and
108
+ // host passphrases cannot reach diagnostic logs through a future call path.
109
+ if (key && /passphrase/i.test(key)) {
110
+ return '[redacted passphrase]';
111
+ }
112
+
101
113
  const byteLength = getBinaryByteLength(value);
102
114
  if (byteLength !== undefined) {
103
115
  return `[binary: ${byteLength} bytes]`;
@@ -141,10 +153,9 @@ function sanitizeDebugPayload(value: unknown, key = '', depth = 0): unknown {
141
153
  }
142
154
 
143
155
  /**
144
- * 交互式 Ack(ButtonAck / PinMatrixAck / PassphraseAck 等)不应继承原调用的
145
- * timeoutMs:设备在等待用户操作(确认、输入 PIN/passphrase),思考时间不可预估,
146
- * 沿用业务调用的超时会把用户操作截断。仅保留 expectedTypes / intermediateTypes
147
- * 等与响应类型相关的选项。
156
+ * Interactive acknowledgements must not inherit timeoutMs from the original call.
157
+ * User confirmation and PIN/passphrase entry have unbounded think time. Preserve only
158
+ * response-related options such as expectedTypes and intermediateTypes.
148
159
  */
149
160
  const stripInteractiveAckTimeout = (
150
161
  options?: TransportCallOptions
@@ -440,6 +451,7 @@ export class DeviceCommands {
440
451
  'PinMatrixAck',
441
452
  'PassphraseAck',
442
453
  'Cancel',
454
+ 'DeviceSessionGet',
443
455
  'BixinPinInputOnDevice',
444
456
  'FilesystemFileRead',
445
457
  'FilesystemFileWrite',
@@ -450,7 +462,7 @@ export class DeviceCommands {
450
462
  'FirmwareUpload',
451
463
  'ResourceAck',
452
464
  ] as any;
453
- if (!skipTypes.includes(type) && msg) {
465
+ if (!skipTypes.includes(type) && !shouldBlockDebugForCall(type) && msg) {
454
466
  // Use debug channel to avoid noise escalation
455
467
  Log.debug('[DeviceCommands] [typedCall] Sending payload', type, sanitizeDebugPayload(msg));
456
468
  }
@@ -475,12 +487,14 @@ export class DeviceCommands {
475
487
  // throw bridge network error
476
488
  if (error instanceof HardwareError) {
477
489
  if (error.errorCode === HardwareErrorCode.ResponseUnexpectTypeError) {
478
- Log.debug('[DeviceCommands] [typedCall] Unexpected response type', {
479
- request: type,
480
- expected: resType,
481
- received: response.type,
482
- response: sanitizeDebugPayload(response.message),
483
- });
490
+ if (!shouldBlockDebugForCall(type)) {
491
+ Log.debug('[DeviceCommands] [typedCall] Unexpected response type', {
492
+ request: type,
493
+ expected: resType,
494
+ received: response.type,
495
+ response: sanitizeDebugPayload(response.message),
496
+ });
497
+ }
484
498
  // Do not intercept CallMethodError
485
499
  // Do not intercept “assertType: Response of unexpected type” error
486
500
  // Blocking the above two messages will not know what the specific error message is, and the specific error should be handled by the subsequent business logic.
@@ -519,8 +533,8 @@ export class DeviceCommands {
519
533
  options?: TransportCallOptions
520
534
  ): Promise<DefaultMessageResponse> {
521
535
  try {
522
- if (shouldReduceDebugForCall(callType)) {
523
- // 高频文件写入每个 chunk 都会经过这里,避免 debug log 反向拖慢传输。
536
+ if (shouldReduceDebugForCall(callType) || shouldBlockDebugForCall(callType)) {
537
+ // Skip high-volume or security-sensitive response payloads.
524
538
  } else if (DataManager.getSettings('env') === 'react-native') {
525
539
  Log.debug('_filterCommonTypes: ', JSON.stringify(sanitizeDebugPayload(res)));
526
540
  } else {
@@ -532,8 +546,9 @@ export class DeviceCommands {
532
546
 
533
547
  this.device.clearCancelableAction();
534
548
  if (res.type === 'Failure') {
535
- const { code, message } = res.message as {
549
+ const { code, subcode, message } = res.message as {
536
550
  code?: string | FailureType;
551
+ subcode?: number;
537
552
  message?: string;
538
553
  };
539
554
  let error: HardwareError | null = null;
@@ -577,8 +592,31 @@ export class DeviceCommands {
577
592
  }
578
593
 
579
594
  if (code === 'Failure_ProcessError') {
580
- // Handle firmware verification failures
595
+ const normalizedMessage = message?.trim() ?? '';
596
+ const isLegacyProtocolV2ActionCancelledFailure =
597
+ this.device.isProtocolV2() &&
598
+ /^(?:cancelled on device|confirm dismissed)$/i.test(normalizedMessage);
599
+ const isLegacyProtocolV2LockedFailure =
600
+ this.device.isProtocolV2() && /^device (?:is )?locked$/i.test(normalizedMessage);
581
601
  if (
602
+ subcode === DeviceErrorCode.DeviceError_ActionCancelled ||
603
+ isLegacyProtocolV2ActionCancelledFailure
604
+ ) {
605
+ error = ERRORS.TypedError(HardwareErrorCode.ActionCancelled, message, {
606
+ failureCode: code,
607
+ subcode,
608
+ firmwareMessage: message,
609
+ });
610
+ } else if (
611
+ subcode === DeviceErrorCode.DeviceError_DeviceLocked ||
612
+ isLegacyProtocolV2LockedFailure
613
+ ) {
614
+ error = ERRORS.TypedError(HardwareErrorCode.DeviceLocked, message, {
615
+ failureCode: code,
616
+ subcode,
617
+ firmwareMessage: message,
618
+ });
619
+ } else if (
582
620
  message?.includes('Bootloader file verify failed') ||
583
621
  message?.includes('verify failed')
584
622
  ) {
@@ -655,7 +693,7 @@ export class DeviceCommands {
655
693
 
656
694
  if (res.type === 'PassphraseRequest') {
657
695
  const existsAttachPinUser = res.message.exists_attach_pin_user;
658
- return this._promptPassphrase({
696
+ return this.promptPassphrase({
659
697
  existsAttachPinUser,
660
698
  }).then(response => {
661
699
  const { passphrase, passphraseOnDevice, attachPinOnDevice } = response;
@@ -753,10 +791,27 @@ export class DeviceCommands {
753
791
  });
754
792
  }
755
793
 
756
- _promptPassphrase(options: PassphraseRequestPayload) {
794
+ promptPassphrase(
795
+ options: PassphraseRequestPayload,
796
+ promptOptions: { cancelDeviceOnReject?: boolean } = {}
797
+ ) {
757
798
  return new Promise<PassphrasePromptResponse>((resolve, reject) => {
758
- const cancelAndReject = (_error?: Error) =>
759
- cancelDeviceInPrompt(this.device, false)
799
+ const cancelAndReject = (_error?: Error) => {
800
+ const rejectWithCancelledError = () => {
801
+ reject(
802
+ ERRORS.TypedError(
803
+ HardwareErrorCode.CallQueueActionCancelled,
804
+ `${DEVICE.PASSPHRASE} canceled`
805
+ )
806
+ );
807
+ };
808
+
809
+ if (promptOptions.cancelDeviceOnReject === false) {
810
+ rejectWithCancelledError();
811
+ return Promise.resolve();
812
+ }
813
+
814
+ return cancelDeviceInPrompt(this.device, false)
760
815
  .then(onCancel => {
761
816
  const error = ERRORS.TypedError(
762
817
  HardwareErrorCode.CallQueueActionCancelled,
@@ -773,6 +828,7 @@ export class DeviceCommands {
773
828
  .catch(error => {
774
829
  reject(error);
775
830
  });
831
+ };
776
832
 
777
833
  if (this.device.listenerCount(DEVICE.PASSPHRASE) > 0) {
778
834
  this.device.setCancelableAction(cancelAndReject);
@@ -0,0 +1,25 @@
1
+ import type { Features } from '../types';
2
+
3
+ /**
4
+ * Merge a field-level device-state patch.
5
+ *
6
+ * `undefined` means the response omitted a field and preserves the cache; `null`
7
+ * means the device explicitly returned an empty value and must be cached. Callers
8
+ * provide complete object fields such as raw; this function does not deep-merge.
9
+ */
10
+ export function mergeDeviceFeaturesPatch(previous: Features, patch: Partial<Features>): Features {
11
+ let next = previous;
12
+
13
+ for (const [key, value] of Object.entries(patch) as Array<
14
+ [keyof Features, Features[keyof Features] | undefined]
15
+ >) {
16
+ if (value !== undefined && !Object.is(previous[key], value)) {
17
+ if (next === previous) {
18
+ next = { ...previous };
19
+ }
20
+ (next as Record<keyof Features, Features[keyof Features]>)[key] = value;
21
+ }
22
+ }
23
+
24
+ return next;
25
+ }
@@ -106,26 +106,32 @@ export class DevicePool extends EventEmitter {
106
106
  if (exist) {
107
107
  // Log.debug('find existed Device: ', connectId);
108
108
  device.updateDescriptor(exist, true);
109
+ await this._refreshRuntimeState(device, initOptions);
109
110
  devices[connectId] = device;
110
111
  deviceList.push(device);
111
- await this._checkDevicePool(initOptions);
112
+ await this._checkDevicePool(initOptions, connectId);
112
113
  return { devices, deviceList };
113
114
  }
114
115
  Log.debug('found device in cache, but path is different: ', connectId);
115
116
  }
116
117
  }
117
118
 
118
- for await (const descriptor of descriptorList) {
119
+ const matchedDescriptor = connectId
120
+ ? descriptorList.find(descriptor => descriptor.path === connectId)
121
+ : undefined;
122
+ const descriptorsToInitialize = matchedDescriptor ? [matchedDescriptor] : descriptorList;
123
+
124
+ for await (const descriptor of descriptorsToInitialize) {
119
125
  const device = await this._createDevice(descriptor, initOptions);
120
126
 
121
- const uuid = device.getCurrentSerialNo();
122
- if (uuid) {
123
- if (this.devicesCache[uuid]) {
124
- const cache = this.devicesCache[uuid];
127
+ const connectId = device.getConnectId();
128
+ if (connectId) {
129
+ if (this.devicesCache[connectId]) {
130
+ const cache = this.devicesCache[connectId];
125
131
  cache.updateDescriptor(descriptor, true);
126
132
  }
127
- this.devicesCache[uuid] = device;
128
- devices[uuid] = device;
133
+ this.devicesCache[connectId] = device;
134
+ devices[connectId] = device;
129
135
  }
130
136
 
131
137
  deviceList.push(device);
@@ -133,7 +139,7 @@ export class DevicePool extends EventEmitter {
133
139
  // Log.debug('get devices result : ', devices, deviceList);
134
140
  // console.log('device poll -> connected: ', this.connectedPool);
135
141
  // console.log('device poll -> disconnected: ', this.disconnectPool);
136
- await this._checkDevicePool(initOptions);
142
+ await this._checkDevicePool(initOptions, matchedDescriptor ? connectId : undefined);
137
143
  return { devices, deviceList };
138
144
  }
139
145
 
@@ -151,32 +157,73 @@ export class DevicePool extends EventEmitter {
151
157
  device = Device.fromDescriptor(descriptor);
152
158
  device.deviceConnector = this.connector;
153
159
  await device.connect(initOptions?.connectProtocol);
154
- await device.initialize(initOptions);
155
- await device.release();
160
+ try {
161
+ await device.initialize(initOptions);
162
+ if (initOptions?.refreshRuntimeState && device.isProtocolV2()) {
163
+ await this._refreshProtocolV2DiscoveryState(device);
164
+ }
165
+ } finally {
166
+ await device.release();
167
+ }
156
168
  }
157
169
  return device;
158
170
  }
159
171
 
160
- static async _checkDevicePool(initOptions?: InitOptions) {
161
- await this._sendConnectMessage(initOptions);
172
+ static async _refreshRuntimeState(device: Device, initOptions?: InitOptions) {
173
+ if (!initOptions?.refreshRuntimeState || !device.isProtocolV2()) return;
174
+ let refreshError: unknown;
175
+ await device.run(
176
+ async () => {
177
+ try {
178
+ await this._refreshProtocolV2DiscoveryState(device);
179
+ } catch (error) {
180
+ // Device.run releases after the callback; then propagate the actual read error.
181
+ refreshError = error;
182
+ }
183
+ },
184
+ { connectProtocol: initOptions.connectProtocol }
185
+ );
186
+ if (refreshError instanceof Error) throw refreshError;
187
+ if (refreshError) throw new Error(String(refreshError));
188
+ }
189
+
190
+ /**
191
+ * Device lists require live mode and name data. A status failure remains a connection
192
+ * error; settings only supplies a label, so its failure retains the existing name.
193
+ * Device.getDeviceState skips unsupported status/settings calls in loader mode.
194
+ */
195
+ static async _refreshProtocolV2DiscoveryState(device: Device) {
196
+ await device.getDeviceState({ refreshSections: ['status'] });
197
+ try {
198
+ await device.getDeviceState({ refreshSections: ['settings'] });
199
+ } catch (error) {
200
+ Log.debug('Unable to refresh Protocol V2 device label during discovery', error);
201
+ }
202
+ }
203
+
204
+ static async _checkDevicePool(initOptions?: InitOptions, connectId?: string) {
205
+ await this._sendConnectMessage(initOptions, connectId);
162
206
  this._sendDisconnectMessage();
163
207
  }
164
208
 
165
- static async _sendConnectMessage(initOptions?: InitOptions) {
209
+ static async _sendConnectMessage(initOptions?: InitOptions, connectId?: string) {
166
210
  for (let i = this.connectedPool.length - 1; i >= 0; i--) {
167
211
  const descriptor = this.connectedPool[i];
168
- const device = await this._createDevice(descriptor, initOptions);
169
- Log.debug('emit DEVICE.CONNECT: ', device?.features);
170
- this.emitter.emit(DEVICE.CONNECT, device);
171
- this.connectedPool.splice(i, 1);
212
+ if (!connectId || descriptor.path === connectId) {
213
+ const device = await this._createDevice(descriptor, initOptions);
214
+ Log.debug('emit DEVICE.CONNECT: ', device?.features);
215
+ this.emitter.emit(DEVICE.CONNECT, device);
216
+ this.connectedPool.splice(i, 1);
217
+ }
172
218
  }
173
219
  }
174
220
 
175
221
  static _sendDisconnectMessage() {
176
222
  for (let i = this.disconnectPool.length - 1; i >= 0; i--) {
177
- const descriptor = this.connectedPool[i];
223
+ const descriptor = this.disconnectPool[i];
178
224
  const device = descriptor?.path ? this.getDeviceByPath(descriptor.path) : null;
179
225
  if (device) {
226
+ device.markTransportDisconnected();
180
227
  this.emitter.emit(DEVICE.DISCONNECT, device);
181
228
  }
182
229
  this.disconnectPool.splice(i, 1);
@@ -216,6 +263,7 @@ export class DevicePool extends EventEmitter {
216
263
  }
217
264
 
218
265
  Log.debug('emit DEVICE.DISCONNECT: ', device.features);
266
+ device.markTransportDisconnected();
219
267
  this.emitter.emit(DEVICE.DISCONNECT, device);
220
268
  });
221
269
  }