@onekeyfe/hd-core 0.0.1

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 (329) hide show
  1. package/.eslintrc +6 -0
  2. package/README.md +3 -0
  3. package/dist/api/BTCGetAddress.d.ts +8 -0
  4. package/dist/api/BTCGetAddress.d.ts.map +1 -0
  5. package/dist/api/BTCGetPublicKey.d.ts +8 -0
  6. package/dist/api/BTCGetPublicKey.d.ts.map +1 -0
  7. package/dist/api/BTCSignMessage.d.ts +10 -0
  8. package/dist/api/BTCSignMessage.d.ts.map +1 -0
  9. package/dist/api/BTCSignTransaction.d.ts +17 -0
  10. package/dist/api/BTCSignTransaction.d.ts.map +1 -0
  11. package/dist/api/BTCVerifyMessage.d.ts +9 -0
  12. package/dist/api/BTCVerifyMessage.d.ts.map +1 -0
  13. package/dist/api/BaseMethod.d.ts +24 -0
  14. package/dist/api/BaseMethod.d.ts.map +1 -0
  15. package/dist/api/CheckBLEFirmwareRelease.d.ts +6 -0
  16. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -0
  17. package/dist/api/CheckFirmwareRelease.d.ts +6 -0
  18. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -0
  19. package/dist/api/CheckTransportRelease.d.ts +6 -0
  20. package/dist/api/CheckTransportRelease.d.ts.map +1 -0
  21. package/dist/api/DeviceBackup.d.ts +9 -0
  22. package/dist/api/DeviceBackup.d.ts.map +1 -0
  23. package/dist/api/DeviceChangePin.d.ts +9 -0
  24. package/dist/api/DeviceChangePin.d.ts.map +1 -0
  25. package/dist/api/DeviceFlags.d.ts +9 -0
  26. package/dist/api/DeviceFlags.d.ts.map +1 -0
  27. package/dist/api/DeviceRebootToBootloader.d.ts +9 -0
  28. package/dist/api/DeviceRebootToBootloader.d.ts.map +1 -0
  29. package/dist/api/DeviceRecovery.d.ts +9 -0
  30. package/dist/api/DeviceRecovery.d.ts.map +1 -0
  31. package/dist/api/DeviceReset.d.ts +9 -0
  32. package/dist/api/DeviceReset.d.ts.map +1 -0
  33. package/dist/api/DeviceSettings.d.ts +9 -0
  34. package/dist/api/DeviceSettings.d.ts.map +1 -0
  35. package/dist/api/DeviceUpdateReboot.d.ts +9 -0
  36. package/dist/api/DeviceUpdateReboot.d.ts.map +1 -0
  37. package/dist/api/DeviceWipe.d.ts +9 -0
  38. package/dist/api/DeviceWipe.d.ts.map +1 -0
  39. package/dist/api/EVMGetAddress.d.ts +8 -0
  40. package/dist/api/EVMGetAddress.d.ts.map +1 -0
  41. package/dist/api/EVMGetPublicKey.d.ts +8 -0
  42. package/dist/api/EVMGetPublicKey.d.ts.map +1 -0
  43. package/dist/api/EVMSignMessage.d.ts +10 -0
  44. package/dist/api/EVMSignMessage.d.ts.map +1 -0
  45. package/dist/api/EVMSignMessageEIP712.d.ts +10 -0
  46. package/dist/api/EVMSignMessageEIP712.d.ts.map +1 -0
  47. package/dist/api/EVMSignTransaction.d.ts +20 -0
  48. package/dist/api/EVMSignTransaction.d.ts.map +1 -0
  49. package/dist/api/EVMSignTypedData.d.ts +18 -0
  50. package/dist/api/EVMSignTypedData.d.ts.map +1 -0
  51. package/dist/api/EVMVerifyMessage.d.ts +9 -0
  52. package/dist/api/EVMVerifyMessage.d.ts.map +1 -0
  53. package/dist/api/GetFeatures.d.ts +51 -0
  54. package/dist/api/GetFeatures.d.ts.map +1 -0
  55. package/dist/api/SearchDevices.d.ts +16 -0
  56. package/dist/api/SearchDevices.d.ts.map +1 -0
  57. package/dist/api/helpers/bigNumberUtils.d.ts +4 -0
  58. package/dist/api/helpers/bigNumberUtils.d.ts.map +1 -0
  59. package/dist/api/helpers/btc/signtx.d.ts +5 -0
  60. package/dist/api/helpers/btc/signtx.d.ts.map +1 -0
  61. package/dist/api/helpers/btc/signtxLegacy.d.ts +5 -0
  62. package/dist/api/helpers/btc/signtxLegacy.d.ts.map +1 -0
  63. package/dist/api/helpers/btcParamsUtils.d.ts +11 -0
  64. package/dist/api/helpers/btcParamsUtils.d.ts.map +1 -0
  65. package/dist/api/helpers/hexUtils.d.ts +7 -0
  66. package/dist/api/helpers/hexUtils.d.ts.map +1 -0
  67. package/dist/api/helpers/paramsValidator.d.ts +8 -0
  68. package/dist/api/helpers/paramsValidator.d.ts.map +1 -0
  69. package/dist/api/helpers/pathUtils.d.ts +12 -0
  70. package/dist/api/helpers/pathUtils.d.ts.map +1 -0
  71. package/dist/api/helpers/stringUtils.d.ts +2 -0
  72. package/dist/api/helpers/stringUtils.d.ts.map +1 -0
  73. package/dist/api/helpers/typeNameUtils.d.ts +9 -0
  74. package/dist/api/helpers/typeNameUtils.d.ts.map +1 -0
  75. package/dist/api/index.d.ts +27 -0
  76. package/dist/api/index.d.ts.map +1 -0
  77. package/dist/api/utils.d.ts +5 -0
  78. package/dist/api/utils.d.ts.map +1 -0
  79. package/dist/constants/errors.d.ts +25 -0
  80. package/dist/constants/errors.d.ts.map +1 -0
  81. package/dist/constants/index.d.ts +3 -0
  82. package/dist/constants/index.d.ts.map +1 -0
  83. package/dist/constants/ui-request.d.ts +13 -0
  84. package/dist/constants/ui-request.d.ts.map +1 -0
  85. package/dist/core/index.d.ts +14 -0
  86. package/dist/core/index.d.ts.map +1 -0
  87. package/dist/data/version.d.ts +3 -0
  88. package/dist/data/version.d.ts.map +1 -0
  89. package/dist/data-manager/CoinManager.d.ts +13 -0
  90. package/dist/data-manager/CoinManager.d.ts.map +1 -0
  91. package/dist/data-manager/DataManager.d.ts +17 -0
  92. package/dist/data-manager/DataManager.d.ts.map +1 -0
  93. package/dist/data-manager/TransportManager.d.ts +15 -0
  94. package/dist/data-manager/TransportManager.d.ts.map +1 -0
  95. package/dist/data-manager/connectSettings.d.ts +9 -0
  96. package/dist/data-manager/connectSettings.d.ts.map +1 -0
  97. package/dist/data-manager/index.d.ts +3 -0
  98. package/dist/data-manager/index.d.ts.map +1 -0
  99. package/dist/device/Device.d.ts +64 -0
  100. package/dist/device/Device.d.ts.map +1 -0
  101. package/dist/device/DeviceCommands.d.ts +35 -0
  102. package/dist/device/DeviceCommands.d.ts.map +1 -0
  103. package/dist/device/DeviceConnector.d.ts +28 -0
  104. package/dist/device/DeviceConnector.d.ts.map +1 -0
  105. package/dist/device/DeviceList.d.ts +12 -0
  106. package/dist/device/DeviceList.d.ts.map +1 -0
  107. package/dist/events/call.d.ts +41 -0
  108. package/dist/events/call.d.ts.map +1 -0
  109. package/dist/events/core.d.ts +16 -0
  110. package/dist/events/core.d.ts.map +1 -0
  111. package/dist/events/device.d.ts +23 -0
  112. package/dist/events/device.d.ts.map +1 -0
  113. package/dist/events/iframe.d.ts +24 -0
  114. package/dist/events/iframe.d.ts.map +1 -0
  115. package/dist/events/index.d.ts +8 -0
  116. package/dist/events/index.d.ts.map +1 -0
  117. package/dist/events/ui-promise.d.ts +12 -0
  118. package/dist/events/ui-promise.d.ts.map +1 -0
  119. package/dist/events/ui-request.d.ts +20 -0
  120. package/dist/events/ui-request.d.ts.map +1 -0
  121. package/dist/events/ui-response.d.ts +15 -0
  122. package/dist/events/ui-response.d.ts.map +1 -0
  123. package/dist/events/utils.d.ts +15 -0
  124. package/dist/events/utils.d.ts.map +1 -0
  125. package/dist/index.d.ts +823 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +12396 -0
  128. package/dist/inject.d.ts +14 -0
  129. package/dist/inject.d.ts.map +1 -0
  130. package/dist/types/api/btcGetAddress.d.ts +14 -0
  131. package/dist/types/api/btcGetAddress.d.ts.map +1 -0
  132. package/dist/types/api/btcGetPublicKey.d.ts +13 -0
  133. package/dist/types/api/btcGetPublicKey.d.ts.map +1 -0
  134. package/dist/types/api/btcSignMessage.d.ts +9 -0
  135. package/dist/types/api/btcSignMessage.d.ts.map +1 -0
  136. package/dist/types/api/btcSignTransaction.d.ts +74 -0
  137. package/dist/types/api/btcSignTransaction.d.ts.map +1 -0
  138. package/dist/types/api/btcVerifyMessage.d.ts +10 -0
  139. package/dist/types/api/btcVerifyMessage.d.ts.map +1 -0
  140. package/dist/types/api/checkBLEFirmwareRelease.d.ts +4 -0
  141. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -0
  142. package/dist/types/api/checkFirmwareRelease.d.ts +4 -0
  143. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -0
  144. package/dist/types/api/checkTransportRelease.d.ts +4 -0
  145. package/dist/types/api/checkTransportRelease.d.ts.map +1 -0
  146. package/dist/types/api/deviceBackup.d.ts +4 -0
  147. package/dist/types/api/deviceBackup.d.ts.map +1 -0
  148. package/dist/types/api/deviceChangePin.d.ts +7 -0
  149. package/dist/types/api/deviceChangePin.d.ts.map +1 -0
  150. package/dist/types/api/deviceFlags.d.ts +7 -0
  151. package/dist/types/api/deviceFlags.d.ts.map +1 -0
  152. package/dist/types/api/deviceRebootToBootloader.d.ts +4 -0
  153. package/dist/types/api/deviceRebootToBootloader.d.ts.map +1 -0
  154. package/dist/types/api/deviceRecovery.d.ts +15 -0
  155. package/dist/types/api/deviceRecovery.d.ts.map +1 -0
  156. package/dist/types/api/deviceReset.d.ts +16 -0
  157. package/dist/types/api/deviceReset.d.ts.map +1 -0
  158. package/dist/types/api/deviceSettings.d.ts +16 -0
  159. package/dist/types/api/deviceSettings.d.ts.map +1 -0
  160. package/dist/types/api/deviceUpdateReboot.d.ts +4 -0
  161. package/dist/types/api/deviceUpdateReboot.d.ts.map +1 -0
  162. package/dist/types/api/deviceWipe.d.ts +4 -0
  163. package/dist/types/api/deviceWipe.d.ts.map +1 -0
  164. package/dist/types/api/event.d.ts +4 -0
  165. package/dist/types/api/event.d.ts.map +1 -0
  166. package/dist/types/api/evmGetAddress.d.ts +11 -0
  167. package/dist/types/api/evmGetAddress.d.ts.map +1 -0
  168. package/dist/types/api/evmGetPublicKey.d.ts +11 -0
  169. package/dist/types/api/evmGetPublicKey.d.ts.map +1 -0
  170. package/dist/types/api/evmSignMessage.d.ts +8 -0
  171. package/dist/types/api/evmSignMessage.d.ts.map +1 -0
  172. package/dist/types/api/evmSignMessageEIP712.d.ts +9 -0
  173. package/dist/types/api/evmSignMessageEIP712.d.ts.map +1 -0
  174. package/dist/types/api/evmSignTransaction.d.ts +36 -0
  175. package/dist/types/api/evmSignTransaction.d.ts.map +1 -0
  176. package/dist/types/api/evmSignTypedData.d.ts +33 -0
  177. package/dist/types/api/evmSignTypedData.d.ts.map +1 -0
  178. package/dist/types/api/evmVerifyMessage.d.ts +9 -0
  179. package/dist/types/api/evmVerifyMessage.d.ts.map +1 -0
  180. package/dist/types/api/getFeatures.d.ts +4 -0
  181. package/dist/types/api/getFeatures.d.ts.map +1 -0
  182. package/dist/types/api/index.d.ts +66 -0
  183. package/dist/types/api/index.d.ts.map +1 -0
  184. package/dist/types/api/init.d.ts +3 -0
  185. package/dist/types/api/init.d.ts.map +1 -0
  186. package/dist/types/api/searchDevices.d.ts +4 -0
  187. package/dist/types/api/searchDevices.d.ts.map +1 -0
  188. package/dist/types/api/uiResponse.d.ts +3 -0
  189. package/dist/types/api/uiResponse.d.ts.map +1 -0
  190. package/dist/types/device.d.ts +29 -0
  191. package/dist/types/device.d.ts.map +1 -0
  192. package/dist/types/firmware.d.ts +37 -0
  193. package/dist/types/firmware.d.ts.map +1 -0
  194. package/dist/types/index.d.ts +6 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/params.d.ts +16 -0
  197. package/dist/types/params.d.ts.map +1 -0
  198. package/dist/types/settings.d.ts +65 -0
  199. package/dist/types/settings.d.ts.map +1 -0
  200. package/dist/utils/assets.d.ts +3 -0
  201. package/dist/utils/assets.d.ts.map +1 -0
  202. package/dist/utils/deferred.d.ts +9 -0
  203. package/dist/utils/deferred.d.ts.map +1 -0
  204. package/dist/utils/deviceFeaturesUtils.d.ts +52 -0
  205. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -0
  206. package/dist/utils/findDefectiveBatchDevice.d.ts +3 -0
  207. package/dist/utils/findDefectiveBatchDevice.d.ts.map +1 -0
  208. package/dist/utils/index.d.ts +6 -0
  209. package/dist/utils/index.d.ts.map +1 -0
  210. package/dist/utils/logger.d.ts +24 -0
  211. package/dist/utils/logger.d.ts.map +1 -0
  212. package/dist/utils/networkUtils.d.ts +2 -0
  213. package/dist/utils/networkUtils.d.ts.map +1 -0
  214. package/dist/utils/promiseUtils.d.ts +2 -0
  215. package/dist/utils/promiseUtils.d.ts.map +1 -0
  216. package/dist/utils/versionUtils.d.ts +6 -0
  217. package/dist/utils/versionUtils.d.ts.map +1 -0
  218. package/package.json +39 -0
  219. package/src/api/BTCGetAddress.ts +71 -0
  220. package/src/api/BTCGetPublicKey.ts +70 -0
  221. package/src/api/BTCSignMessage.ts +40 -0
  222. package/src/api/BTCSignTransaction.ts +141 -0
  223. package/src/api/BTCVerifyMessage.ts +40 -0
  224. package/src/api/BaseMethod.ts +71 -0
  225. package/src/api/CheckBLEFirmwareRelease.ts +18 -0
  226. package/src/api/CheckFirmwareRelease.ts +15 -0
  227. package/src/api/CheckTransportRelease.ts +19 -0
  228. package/src/api/DeviceBackup.ts +12 -0
  229. package/src/api/DeviceChangePin.ts +22 -0
  230. package/src/api/DeviceFlags.ts +23 -0
  231. package/src/api/DeviceRebootToBootloader.ts +13 -0
  232. package/src/api/DeviceRecovery.ts +41 -0
  233. package/src/api/DeviceReset.ts +43 -0
  234. package/src/api/DeviceSettings.ts +45 -0
  235. package/src/api/DeviceUpdateReboot.ts +13 -0
  236. package/src/api/DeviceWipe.ts +12 -0
  237. package/src/api/EVMGetAddress.ts +54 -0
  238. package/src/api/EVMGetPublicKey.ts +58 -0
  239. package/src/api/EVMSignMessage.ts +40 -0
  240. package/src/api/EVMSignMessageEIP712.ts +40 -0
  241. package/src/api/EVMSignTransaction.ts +195 -0
  242. package/src/api/EVMSignTypedData.ts +212 -0
  243. package/src/api/EVMVerifyMessage.ts +33 -0
  244. package/src/api/GetFeatures.ts +12 -0
  245. package/src/api/SearchDevices.ts +40 -0
  246. package/src/api/helpers/bigNumberUtils.ts +58 -0
  247. package/src/api/helpers/btc/signtx.ts +232 -0
  248. package/src/api/helpers/btc/signtxLegacy.ts +205 -0
  249. package/src/api/helpers/btcParamsUtils.ts +57 -0
  250. package/src/api/helpers/hexUtils.ts +50 -0
  251. package/src/api/helpers/paramsValidator.ts +95 -0
  252. package/src/api/helpers/pathUtils.ts +111 -0
  253. package/src/api/helpers/stringUtils.ts +8 -0
  254. package/src/api/helpers/typeNameUtils.ts +132 -0
  255. package/src/api/index.ts +26 -0
  256. package/src/api/utils.ts +18 -0
  257. package/src/constants/errors.ts +47 -0
  258. package/src/constants/index.ts +2 -0
  259. package/src/constants/ui-request.ts +12 -0
  260. package/src/core/index.ts +305 -0
  261. package/src/data/coins/bitcoin.json +42 -0
  262. package/src/data/messages/messages.json +8658 -0
  263. package/src/data/version.ts +3 -0
  264. package/src/data-manager/CoinManager.ts +31 -0
  265. package/src/data-manager/DataManager.ts +148 -0
  266. package/src/data-manager/TransportManager.ts +87 -0
  267. package/src/data-manager/connectSettings.ts +109 -0
  268. package/src/data-manager/index.ts +2 -0
  269. package/src/device/Device.ts +411 -0
  270. package/src/device/DeviceCommands.ts +207 -0
  271. package/src/device/DeviceConnector.ts +173 -0
  272. package/src/device/DeviceList.ts +47 -0
  273. package/src/events/call.ts +72 -0
  274. package/src/events/core.ts +41 -0
  275. package/src/events/device.ts +28 -0
  276. package/src/events/iframe.ts +34 -0
  277. package/src/events/index.ts +7 -0
  278. package/src/events/ui-promise.ts +14 -0
  279. package/src/events/ui-request.ts +28 -0
  280. package/src/events/ui-response.ts +25 -0
  281. package/src/events/utils.ts +19 -0
  282. package/src/index.ts +29 -0
  283. package/src/inject.ts +103 -0
  284. package/src/types/api/btcGetAddress.ts +24 -0
  285. package/src/types/api/btcGetPublicKey.ts +19 -0
  286. package/src/types/api/btcSignMessage.ts +13 -0
  287. package/src/types/api/btcSignTransaction.ts +98 -0
  288. package/src/types/api/btcVerifyMessage.ts +14 -0
  289. package/src/types/api/checkBLEFirmwareRelease.ts +6 -0
  290. package/src/types/api/checkFirmwareRelease.ts +4 -0
  291. package/src/types/api/checkTransportRelease.ts +4 -0
  292. package/src/types/api/deviceBackup.ts +4 -0
  293. package/src/types/api/deviceChangePin.ts +11 -0
  294. package/src/types/api/deviceFlags.ts +11 -0
  295. package/src/types/api/deviceRebootToBootloader.ts +4 -0
  296. package/src/types/api/deviceRecovery.ts +19 -0
  297. package/src/types/api/deviceReset.ts +20 -0
  298. package/src/types/api/deviceSettings.ts +17 -0
  299. package/src/types/api/deviceUpdateReboot.ts +4 -0
  300. package/src/types/api/deviceWipe.ts +4 -0
  301. package/src/types/api/event.ts +8 -0
  302. package/src/types/api/evmGetAddress.ts +17 -0
  303. package/src/types/api/evmGetPublicKey.ts +17 -0
  304. package/src/types/api/evmSignMessage.ts +12 -0
  305. package/src/types/api/evmSignMessageEIP712.ts +13 -0
  306. package/src/types/api/evmSignTransaction.ts +43 -0
  307. package/src/types/api/evmSignTypedData.ts +40 -0
  308. package/src/types/api/evmVerifyMessage.ts +13 -0
  309. package/src/types/api/getFeatures.ts +4 -0
  310. package/src/types/api/index.ts +80 -0
  311. package/src/types/api/init.ts +3 -0
  312. package/src/types/api/searchDevices.ts +4 -0
  313. package/src/types/api/uiResponse.ts +3 -0
  314. package/src/types/device.ts +71 -0
  315. package/src/types/firmware.ts +40 -0
  316. package/src/types/global.d.ts +3 -0
  317. package/src/types/index.ts +5 -0
  318. package/src/types/params.ts +15 -0
  319. package/src/types/settings.ts +77 -0
  320. package/src/utils/assets.ts +5 -0
  321. package/src/utils/deferred.ts +35 -0
  322. package/src/utils/deviceFeaturesUtils.ts +49 -0
  323. package/src/utils/findDefectiveBatchDevice.ts +10 -0
  324. package/src/utils/index.ts +7 -0
  325. package/src/utils/logger.ts +113 -0
  326. package/src/utils/networkUtils.ts +18 -0
  327. package/src/utils/promiseUtils.ts +4 -0
  328. package/src/utils/versionUtils.ts +120 -0
  329. package/tsconfig.json +7 -0
@@ -0,0 +1,3 @@
1
+ export const VERSION = '1.0.0-alpha.1';
2
+
3
+ export const DEFAULT_DOMAIN = `https://localhost:8088/`;
@@ -0,0 +1,31 @@
1
+ import { fromHardened } from '../api/helpers/pathUtils';
2
+ import bitcoin from '../data/coins/bitcoin.json';
3
+
4
+ const btcCoins = bitcoin.map(coin => coin.name);
5
+
6
+ export type BitcoinInfo = {
7
+ name: string;
8
+ slip44: number;
9
+ label: string;
10
+ };
11
+
12
+ export default class CoinManager {
13
+ static getCoins(): string[] {
14
+ return btcCoins;
15
+ }
16
+
17
+ static getBitcoinCoinInfo(info: { name?: string; path?: number[] }): BitcoinInfo | undefined {
18
+ let coinInfo: BitcoinInfo | undefined;
19
+ if (info.name) {
20
+ const coinName = info.name.toLowerCase();
21
+ coinInfo = bitcoin.find(
22
+ c => c.name.toLowerCase() === coinName || c.label.toLowerCase() === coinName
23
+ );
24
+ } else if (info.path) {
25
+ const slip44 = fromHardened(info.path[1]);
26
+ coinInfo = bitcoin.find(c => c.slip44 === slip44);
27
+ }
28
+
29
+ return coinInfo;
30
+ }
31
+ }
@@ -0,0 +1,148 @@
1
+ import axios from 'axios';
2
+ import semver from 'semver';
3
+ import MessagesJSON from '../data/messages/messages.json';
4
+ import { getTimeStamp } from '../utils';
5
+ import {
6
+ getDeviceType,
7
+ getDeviceFirmwareVersion,
8
+ getDeviceBLEFirmwareVersion,
9
+ } from '../utils/deviceFeaturesUtils';
10
+
11
+ import type {
12
+ ConnectSettings,
13
+ DeviceTypeMap,
14
+ AssetsMap,
15
+ RemoteConfigResponse,
16
+ Features,
17
+ IDeviceFirmwareStatus,
18
+ IDeviceBLEFirmwareStatus,
19
+ ITransportStatus,
20
+ } from '../types';
21
+
22
+ export default class DataManager {
23
+ static deviceMap: DeviceTypeMap = {
24
+ classic: {
25
+ firmware: [],
26
+ ble: [],
27
+ },
28
+ mini: {
29
+ firmware: [],
30
+ ble: [],
31
+ },
32
+ touch: {
33
+ firmware: [],
34
+ ble: [],
35
+ },
36
+ pro: {
37
+ firmware: [],
38
+ ble: [],
39
+ },
40
+ };
41
+
42
+ static assets: AssetsMap | null = null;
43
+
44
+ static settings: ConnectSettings;
45
+
46
+ static messages: { default: JSON } = {
47
+ default: MessagesJSON as unknown as JSON,
48
+ };
49
+
50
+ static getFirmwareStatus = (features: Features): IDeviceFirmwareStatus => {
51
+ const deviceType = getDeviceType(features);
52
+ const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
53
+ if (features.firmware_present === false) {
54
+ return 'none';
55
+ }
56
+
57
+ if (deviceType === 'classic' && features.bootloader_mode) {
58
+ return 'unknown';
59
+ }
60
+
61
+ const targetDeviceConfigList = this.deviceMap[deviceType]?.firmware ?? [];
62
+ const latestFirmware = targetDeviceConfigList[targetDeviceConfigList.length - 1];
63
+
64
+ if (!latestFirmware) return 'valid';
65
+
66
+ const latestVersion = latestFirmware.version.join('.');
67
+ const currentVersion = deviceFirmwareVersion.join('.');
68
+
69
+ /** latest is greater or equal current */
70
+ if (semver.gt(latestVersion, currentVersion)) {
71
+ if (latestFirmware.required) return 'required';
72
+
73
+ return 'outdated';
74
+ }
75
+
76
+ return 'valid';
77
+ };
78
+
79
+ static getBLEFirmwareStatus = (features: Features): IDeviceBLEFirmwareStatus => {
80
+ const deviceType = getDeviceType(features);
81
+ const deviceBLEFirmwareVersion = getDeviceBLEFirmwareVersion(features);
82
+
83
+ /** mini has no device ble_ver */
84
+ if (!deviceBLEFirmwareVersion) {
85
+ return 'none';
86
+ }
87
+
88
+ const targetDeviceConfigList = this.deviceMap[deviceType]?.ble ?? [];
89
+ const latestBLEFirmware = targetDeviceConfigList[targetDeviceConfigList.length - 1];
90
+
91
+ if (!latestBLEFirmware) return 'valid';
92
+
93
+ const latestVersion = latestBLEFirmware.version.join('.');
94
+ const currentVersion = deviceBLEFirmwareVersion.join('.');
95
+
96
+ /** latest is greater or equal current */
97
+ if (semver.gt(latestVersion, currentVersion)) {
98
+ if (latestBLEFirmware.required) return 'required';
99
+
100
+ return 'outdated';
101
+ }
102
+
103
+ return 'valid';
104
+ };
105
+
106
+ static getTransportStatus = (localVersion: string): ITransportStatus => {
107
+ const latestTransportVersion = this.assets?.bridge?.version;
108
+ if (!latestTransportVersion) return 'valid';
109
+ const isLatest = semver.gte(localVersion, latestTransportVersion.join('.'));
110
+ return isLatest ? 'valid' : 'outdated';
111
+ };
112
+
113
+ static async load(settings: ConnectSettings) {
114
+ this.settings = settings;
115
+ try {
116
+ const { data } = await axios.get<RemoteConfigResponse>(
117
+ `https://data.onekey.so/config.json?noCache=${getTimeStamp()}`
118
+ );
119
+ this.deviceMap = {
120
+ classic: data.classic,
121
+ mini: data.mini,
122
+ touch: data.touch,
123
+ pro: data.pro,
124
+ };
125
+ this.assets = {
126
+ bridge: data.bridge,
127
+ };
128
+ } catch (e) {
129
+ // ignore
130
+ }
131
+ }
132
+
133
+ static getProtobufMessages() {
134
+ return this.messages.default;
135
+ }
136
+
137
+ static getSettings(key?: undefined): ConnectSettings;
138
+
139
+ static getSettings<T extends keyof ConnectSettings>(key: T): ConnectSettings[T];
140
+
141
+ static getSettings(key?: keyof ConnectSettings) {
142
+ if (!this.settings) return null;
143
+ if (typeof key === 'string') {
144
+ return this.settings[key];
145
+ }
146
+ return this.settings;
147
+ }
148
+ }
@@ -0,0 +1,87 @@
1
+ import { Transport } from '@onekeyfe/hd-transport';
2
+ import { ERRORS } from '../constants';
3
+ import { initLog } from '../utils';
4
+ import DataManager from './DataManager';
5
+
6
+ const Log = initLog('Transport');
7
+ /**
8
+ * transport 在同一个环境中只会存在一个
9
+ * 这里设计成单例获取
10
+ * 方便进行环境判断,读取不同的 transport
11
+ */
12
+ export default class TransportManager {
13
+ static transport: Transport;
14
+
15
+ static defaultMessages: JSON | Record<string, any>;
16
+
17
+ static currentMessages: JSON | Record<string, any>;
18
+
19
+ static reactNativeInit = false;
20
+
21
+ static load() {
22
+ console.log('transport manager load');
23
+ this.defaultMessages = DataManager.getProtobufMessages();
24
+ this.currentMessages = this.defaultMessages;
25
+ }
26
+
27
+ static async configure() {
28
+ try {
29
+ const env = DataManager.getSettings('env');
30
+ Log.debug('Initializing transports');
31
+ if (env === 'react-native') {
32
+ if (!this.reactNativeInit) {
33
+ await this.transport.init();
34
+ this.reactNativeInit = true;
35
+ } else {
36
+ Log.debug('React Native Do Not Initializing transports');
37
+ }
38
+ } else {
39
+ await this.transport.init();
40
+ }
41
+ Log.debug('Configuring transports');
42
+ await this.transport.configure(JSON.stringify(this.defaultMessages));
43
+ Log.debug('Configuring transports done');
44
+ } catch (error) {
45
+ Log.debug('Initializing transports error: ', error);
46
+ }
47
+ }
48
+
49
+ static async reconfigure(messages?: JSON | number[] | null) {
50
+ if (Array.isArray(messages)) {
51
+ messages = DataManager.getProtobufMessages();
52
+ }
53
+ if (this.currentMessages === messages || !messages) {
54
+ return;
55
+ }
56
+ try {
57
+ await this.transport.configure(JSON.stringify(messages));
58
+ this.currentMessages = messages;
59
+ } catch (error) {
60
+ throw ERRORS.TypedError('Transport_InvalidProtobuf', error.message);
61
+ }
62
+ }
63
+
64
+ static setTransport(TransportConstructor: any) {
65
+ const env = DataManager.getSettings('env');
66
+ if (env === 'react-native') {
67
+ /** Actually initializes the ReactNativeTransport */
68
+ this.transport = new TransportConstructor({ scanTimeout: 3000 }) as unknown as Transport;
69
+ } else {
70
+ /** Actually initializes the HttpTransport */
71
+ this.transport = new TransportConstructor() as unknown as Transport;
72
+ }
73
+ console.log('set transport: ', this.transport);
74
+ }
75
+
76
+ static getTransport() {
77
+ return this.transport;
78
+ }
79
+
80
+ static getDefaultMessages() {
81
+ return this.defaultMessages;
82
+ }
83
+
84
+ static getCurrentMessages() {
85
+ return this.currentMessages;
86
+ }
87
+ }
@@ -0,0 +1,109 @@
1
+ /* eslint-disable vars-on-top */
2
+
3
+ import type { ConnectSettings } from '../types';
4
+ import { VERSION, DEFAULT_DOMAIN } from '../data/version';
5
+
6
+ export const DEFAULT_PRIORITY = 2;
7
+
8
+ declare const chrome: any;
9
+ declare global {
10
+ // eslint-disable-next-line no-var
11
+ var ONEKEY_CONNECT_SRC: string;
12
+ }
13
+
14
+ const initialSettings: ConnectSettings = {
15
+ configSrc: './data/config.json', // constant
16
+ version: VERSION, // constant
17
+ debug: false,
18
+ priority: DEFAULT_PRIORITY,
19
+ trustedHost: false,
20
+ connectSrc: DEFAULT_DOMAIN,
21
+ iframeSrc: `${DEFAULT_DOMAIN}iframe.html`,
22
+ parentOrigin: window.location ? window.location.origin : '',
23
+ supportedBrowser:
24
+ typeof navigator !== 'undefined' ? !/Trident|MSIE|Edge/.test(navigator.userAgent) : true,
25
+ env: 'web',
26
+ lazyLoad: false,
27
+ timestamp: new Date().getTime(),
28
+ };
29
+
30
+ export const getEnv = () => {
31
+ if (
32
+ typeof chrome !== 'undefined' &&
33
+ chrome.runtime &&
34
+ typeof chrome.runtime.onConnect !== 'undefined'
35
+ ) {
36
+ return 'webextension';
37
+ }
38
+ if (typeof navigator !== 'undefined') {
39
+ if (
40
+ typeof navigator.product === 'string' &&
41
+ navigator.product.toLowerCase() === 'reactnative'
42
+ ) {
43
+ return 'react-native';
44
+ }
45
+ const userAgent = navigator.userAgent.toLowerCase();
46
+ if (userAgent.indexOf(' electron/') > -1) {
47
+ return 'electron';
48
+ }
49
+ }
50
+ return 'web';
51
+ };
52
+
53
+ export const corsValidator = (url?: string) => {
54
+ if (typeof url !== 'string') return;
55
+ if (url.match(/^https:\/\/([A-Za-z0-9\-_]+\.)*onekey\.so\//)) return url;
56
+ if (url.match(/^https?:\/\/localhost:[58][0-9]{3}\//)) return url;
57
+ return url;
58
+ };
59
+
60
+ export const parseConnectSettings = (input: Partial<ConnectSettings> = {}) => {
61
+ const settings: ConnectSettings = { ...initialSettings };
62
+
63
+ if (Object.prototype.hasOwnProperty.call(input, 'debug')) {
64
+ settings.debug = input.debug;
65
+ }
66
+
67
+ if (input.isFrame) {
68
+ settings.parentOrigin = input.parentOrigin;
69
+ }
70
+
71
+ if (typeof input.connectSrc === 'string') {
72
+ settings.connectSrc = input.connectSrc;
73
+ }
74
+
75
+ let globalSrc: string | undefined;
76
+ if (typeof window !== 'undefined') {
77
+ globalSrc = window.ONEKEY_CONNECT_SRC;
78
+ } else if (typeof global !== 'undefined') {
79
+ globalSrc = global.ONEKEY_CONNECT_SRC;
80
+ }
81
+
82
+ if (typeof globalSrc === 'string') {
83
+ settings.connectSrc = corsValidator(globalSrc);
84
+ settings.debug = true;
85
+ }
86
+
87
+ const src = settings.connectSrc || DEFAULT_DOMAIN;
88
+ settings.iframeSrc = `${src}iframe.html`;
89
+
90
+ if (input.transportReconnect) {
91
+ settings.transportReconnect = input.transportReconnect;
92
+ }
93
+
94
+ if (input.lazyLoad) {
95
+ settings.lazyLoad = input.lazyLoad;
96
+ }
97
+
98
+ if (typeof input.env === 'string') {
99
+ settings.env = input.env;
100
+ } else {
101
+ settings.env = getEnv();
102
+ }
103
+
104
+ if (input.timestamp) {
105
+ settings.timestamp = input.timestamp;
106
+ }
107
+
108
+ return settings;
109
+ };
@@ -0,0 +1,2 @@
1
+ export * from './connectSettings';
2
+ export { default as DataManager } from './DataManager';