@onetokenfe/hd-core 1.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/.eslintrc +6 -0
  2. package/README.md +32 -0
  3. package/__tests__/benfen.test.ts +68 -0
  4. package/__tests__/checkBootloaderReleast.test.ts +115 -0
  5. package/__tests__/evmSignTransaction.test.ts +419 -0
  6. package/jest.config.js +6 -0
  7. package/package.json +48 -0
  8. package/src/api/BaseMethod.ts +275 -0
  9. package/src/api/CheckAllFirmwareRelease.ts +73 -0
  10. package/src/api/CheckBLEFirmwareRelease.ts +23 -0
  11. package/src/api/CheckBootloaderRelease.ts +32 -0
  12. package/src/api/CheckBridgeRelease.ts +28 -0
  13. package/src/api/CheckBridgeStatus.ts +32 -0
  14. package/src/api/CheckFirmwareRelease.ts +31 -0
  15. package/src/api/CheckFirmwareTypeAvailable.tsx +30 -0
  16. package/src/api/CipherKeyValue.ts +68 -0
  17. package/src/api/FirmwareUpdate.ts +219 -0
  18. package/src/api/FirmwareUpdateV2.ts +408 -0
  19. package/src/api/FirmwareUpdateV3.ts +560 -0
  20. package/src/api/GetFeatures.ts +23 -0
  21. package/src/api/GetLogs.ts +40 -0
  22. package/src/api/GetOnetokenFeatures.ts +25 -0
  23. package/src/api/GetPassphraseState.ts +28 -0
  24. package/src/api/PromptWebDeviceAccess.ts +77 -0
  25. package/src/api/SearchDevices.ts +50 -0
  26. package/src/api/alephium/AlephiumGetAddress.ts +84 -0
  27. package/src/api/alephium/AlephiumSignMessage.ts +51 -0
  28. package/src/api/alephium/AlephiumSignTransaction.ts +135 -0
  29. package/src/api/algo/AlgoGetAddress.ts +73 -0
  30. package/src/api/algo/AlgoSignTransaction.ts +52 -0
  31. package/src/api/allnetwork/AllNetworkGetAddress.ts +88 -0
  32. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +529 -0
  33. package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +162 -0
  34. package/src/api/aptos/AptosGetAddress.ts +129 -0
  35. package/src/api/aptos/AptosGetPublicKey.ts +64 -0
  36. package/src/api/aptos/AptosSignInMessage.ts +55 -0
  37. package/src/api/aptos/AptosSignMessage.ts +79 -0
  38. package/src/api/aptos/AptosSignTransaction.ts +72 -0
  39. package/src/api/benfen/BenfenGetAddress.ts +122 -0
  40. package/src/api/benfen/BenfenGetPublicKey.ts +68 -0
  41. package/src/api/benfen/BenfenSignMessage.ts +50 -0
  42. package/src/api/benfen/BenfenSignTransaction.ts +105 -0
  43. package/src/api/benfen/normalize.ts +51 -0
  44. package/src/api/btc/BTCGetAddress.ts +91 -0
  45. package/src/api/btc/BTCGetPublicKey.ts +174 -0
  46. package/src/api/btc/BTCSignMessage.ts +73 -0
  47. package/src/api/btc/BTCSignPsbt.ts +65 -0
  48. package/src/api/btc/BTCSignTransaction.ts +148 -0
  49. package/src/api/btc/BTCVerifyMessage.ts +46 -0
  50. package/src/api/btc/helpers/btcParamsUtils.ts +64 -0
  51. package/src/api/btc/helpers/signtx.ts +251 -0
  52. package/src/api/btc/helpers/signtxLegacy.ts +227 -0
  53. package/src/api/btc/helpers/versionLimit.ts +25 -0
  54. package/src/api/btc/helpers/xpubUtils.ts +132 -0
  55. package/src/api/cardano/CardanoGetAddress.ts +139 -0
  56. package/src/api/cardano/CardanoGetPublicKey.ts +72 -0
  57. package/src/api/cardano/CardanoSignMessage.ts +73 -0
  58. package/src/api/cardano/CardanoSignTransaction.ts +404 -0
  59. package/src/api/cardano/helper/addressParameters.ts +120 -0
  60. package/src/api/cardano/helper/auxiliaryData.ts +133 -0
  61. package/src/api/cardano/helper/cardanoInputs.ts +55 -0
  62. package/src/api/cardano/helper/cardanoOutputs.ts +89 -0
  63. package/src/api/cardano/helper/certificate.ts +246 -0
  64. package/src/api/cardano/helper/token.ts +44 -0
  65. package/src/api/cardano/helper/utils.ts +17 -0
  66. package/src/api/cardano/helper/witnesses.ts +62 -0
  67. package/src/api/conflux/ConfluxGetAddress.ts +78 -0
  68. package/src/api/conflux/ConfluxSignMessage.ts +49 -0
  69. package/src/api/conflux/ConfluxSignMessageCIP23.ts +49 -0
  70. package/src/api/conflux/ConfluxSignTransaction.ts +135 -0
  71. package/src/api/cosmos/CosmosGetAddress.ts +80 -0
  72. package/src/api/cosmos/CosmosGetPublicKey.ts +77 -0
  73. package/src/api/cosmos/CosmosSignTransaction.ts +68 -0
  74. package/src/api/device/DeviceBackup.ts +15 -0
  75. package/src/api/device/DeviceCancel.ts +15 -0
  76. package/src/api/device/DeviceChangePin.ts +25 -0
  77. package/src/api/device/DeviceFlags.ts +26 -0
  78. package/src/api/device/DeviceFullyUploadResource.ts +80 -0
  79. package/src/api/device/DeviceLock.ts +15 -0
  80. package/src/api/device/DeviceRebootToBoardloader.ts +30 -0
  81. package/src/api/device/DeviceRebootToBootloader.ts +28 -0
  82. package/src/api/device/DeviceRecovery.ts +44 -0
  83. package/src/api/device/DeviceReset.ts +46 -0
  84. package/src/api/device/DeviceSettings.ts +96 -0
  85. package/src/api/device/DeviceSupportFeatures.ts +29 -0
  86. package/src/api/device/DeviceUnlock.ts +13 -0
  87. package/src/api/device/DeviceUpdateBootloader.ts +111 -0
  88. package/src/api/device/DeviceUpdateReboot.ts +17 -0
  89. package/src/api/device/DeviceUploadResource.ts +204 -0
  90. package/src/api/device/DeviceVerify.ts +65 -0
  91. package/src/api/device/DeviceWipe.ts +15 -0
  92. package/src/api/dynex/DnxGetAddress.ts +75 -0
  93. package/src/api/dynex/DnxSignTransaction.ts +126 -0
  94. package/src/api/evm/EVMGetAddress.ts +88 -0
  95. package/src/api/evm/EVMGetPublicKey.ts +116 -0
  96. package/src/api/evm/EVMSignMessage.ts +49 -0
  97. package/src/api/evm/EVMSignMessageEIP712.ts +56 -0
  98. package/src/api/evm/EVMSignTransaction.ts +141 -0
  99. package/src/api/evm/EVMSignTypedData.ts +477 -0
  100. package/src/api/evm/EVMVerifyMessage.ts +46 -0
  101. package/src/api/evm/latest/getAddress.ts +13 -0
  102. package/src/api/evm/latest/getPublicKey.ts +17 -0
  103. package/src/api/evm/latest/signMessage.ts +19 -0
  104. package/src/api/evm/latest/signTransaction.ts +303 -0
  105. package/src/api/evm/latest/signTypedData.ts +34 -0
  106. package/src/api/evm/latest/signTypedHash.ts +46 -0
  107. package/src/api/evm/latest/verifyMessage.ts +15 -0
  108. package/src/api/evm/legacyV1/getAddress.ts +16 -0
  109. package/src/api/evm/legacyV1/getPublicKey.ts +20 -0
  110. package/src/api/evm/legacyV1/signMessage.ts +22 -0
  111. package/src/api/evm/legacyV1/signTransaction.ts +37 -0
  112. package/src/api/evm/legacyV1/signTypedData.ts +37 -0
  113. package/src/api/evm/legacyV1/signTypedHash.ts +50 -0
  114. package/src/api/evm/legacyV1/verifyMessage.ts +19 -0
  115. package/src/api/filecoin/FilecoinGetAddress.ts +80 -0
  116. package/src/api/filecoin/FilecoinSignTransaction.ts +57 -0
  117. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +476 -0
  118. package/src/api/firmware/bootloaderHelper.ts +46 -0
  119. package/src/api/firmware/getBinary.ts +99 -0
  120. package/src/api/firmware/releaseHelper.ts +78 -0
  121. package/src/api/firmware/updateBootloader.ts +82 -0
  122. package/src/api/firmware/uploadFirmware.ts +541 -0
  123. package/src/api/helpers/batchGetPublickeys.ts +84 -0
  124. package/src/api/helpers/bigNumberUtils.ts +58 -0
  125. package/src/api/helpers/hexUtils.ts +111 -0
  126. package/src/api/helpers/paramsValidator.ts +165 -0
  127. package/src/api/helpers/pathUtils.ts +145 -0
  128. package/src/api/helpers/stringUtils.ts +11 -0
  129. package/src/api/helpers/typeNameUtils.ts +137 -0
  130. package/src/api/index.ts +161 -0
  131. package/src/api/kaspa/KaspaGetAddress.ts +103 -0
  132. package/src/api/kaspa/KaspaSignTransaction.ts +182 -0
  133. package/src/api/kaspa/helpers/BufferWriter.ts +177 -0
  134. package/src/api/kaspa/helpers/HashWriter.ts +74 -0
  135. package/src/api/kaspa/helpers/SignatureType.ts +7 -0
  136. package/src/api/kaspa/helpers/TransferSerialize.ts +144 -0
  137. package/src/api/lightning/LnurlAuth.ts +52 -0
  138. package/src/api/near/NearGetAddress.ts +75 -0
  139. package/src/api/near/NearSignTransaction.ts +46 -0
  140. package/src/api/nem/NEMGetAddress.ts +72 -0
  141. package/src/api/nem/NEMSignTransaction.ts +251 -0
  142. package/src/api/neo/NeoGetAddress.ts +80 -0
  143. package/src/api/neo/NeoSignTransaction.ts +59 -0
  144. package/src/api/nervos/NervosGetAddress.ts +80 -0
  145. package/src/api/nervos/NervosSignTransaction.ts +116 -0
  146. package/src/api/nexa/NexaGetAddress.ts +88 -0
  147. package/src/api/nexa/NexaSignTransaction.ts +107 -0
  148. package/src/api/nostr/NostrDecryptMessage.ts +57 -0
  149. package/src/api/nostr/NostrEncryptMessage.ts +57 -0
  150. package/src/api/nostr/NostrGetPublicKey.ts +74 -0
  151. package/src/api/nostr/NostrSignEvent.ts +65 -0
  152. package/src/api/nostr/NostrSignSchnorr.ts +52 -0
  153. package/src/api/nostr/helper/index.ts +28 -0
  154. package/src/api/polkadot/PolkadotGetAddress.ts +83 -0
  155. package/src/api/polkadot/PolkadotSignTransaction.ts +53 -0
  156. package/src/api/polkadot/networks.ts +72 -0
  157. package/src/api/scdo/ScdoGetAddress.ts +76 -0
  158. package/src/api/scdo/ScdoSignMessage.ts +45 -0
  159. package/src/api/scdo/ScdoSignTransaction.ts +106 -0
  160. package/src/api/solana/SolGetAddress.ts +68 -0
  161. package/src/api/solana/SolSignMessage.ts +61 -0
  162. package/src/api/solana/SolSignOffchainMessage.ts +61 -0
  163. package/src/api/solana/SolSignTransaction.ts +108 -0
  164. package/src/api/starcoin/StarcoinGetAddress.ts +69 -0
  165. package/src/api/starcoin/StarcoinGetPublicKey.ts +70 -0
  166. package/src/api/starcoin/StarcoinSignMessage.ts +42 -0
  167. package/src/api/starcoin/StarcoinSignTransaction.ts +38 -0
  168. package/src/api/starcoin/StarcoinVerifyMessage.ts +35 -0
  169. package/src/api/stellar/StellarGetAddress.ts +68 -0
  170. package/src/api/stellar/StellarSignTransaction.ts +220 -0
  171. package/src/api/sui/SuiGetAddress.ts +117 -0
  172. package/src/api/sui/SuiGetPublicKey.ts +66 -0
  173. package/src/api/sui/SuiSignMessage.ts +48 -0
  174. package/src/api/sui/SuiSignTransaction.ts +126 -0
  175. package/src/api/sui/normalize.ts +28 -0
  176. package/src/api/test/TestInitializeDeviceDuration.ts +22 -0
  177. package/src/api/ton/TonGetAddress.ts +96 -0
  178. package/src/api/ton/TonSignMessage.ts +217 -0
  179. package/src/api/ton/TonSignProof.ts +62 -0
  180. package/src/api/tron/TronGetAddress.ts +75 -0
  181. package/src/api/tron/TronSignMessage.ts +89 -0
  182. package/src/api/tron/TronSignTransaction.ts +214 -0
  183. package/src/api/u2f/GetNextU2FCounter.ts +15 -0
  184. package/src/api/u2f/SetU2FCounter.ts +19 -0
  185. package/src/api/utils.ts +23 -0
  186. package/src/api/xrp/XrpGetAddress.ts +96 -0
  187. package/src/api/xrp/XrpSignTransaction.ts +71 -0
  188. package/src/constants/errors.ts +15 -0
  189. package/src/constants/index.ts +2 -0
  190. package/src/constants/ui-request.ts +3 -0
  191. package/src/core/RequestQueue.ts +134 -0
  192. package/src/core/index.ts +1320 -0
  193. package/src/data/coins/bitcoin.json +44 -0
  194. package/src/data/config.ts +25 -0
  195. package/src/data/messages/messages.json +13167 -0
  196. package/src/data/messages/messages_legacy_v1.json +10282 -0
  197. package/src/data-manager/CoinManager.ts +31 -0
  198. package/src/data-manager/DataManager.ts +499 -0
  199. package/src/data-manager/MessagesConfig.ts +28 -0
  200. package/src/data-manager/TransportManager.ts +140 -0
  201. package/src/data-manager/connectSettings.ts +121 -0
  202. package/src/data-manager/index.ts +3 -0
  203. package/src/device/Device.ts +884 -0
  204. package/src/device/DeviceCommands.ts +631 -0
  205. package/src/device/DeviceConnector.ts +124 -0
  206. package/src/device/DeviceList.ts +39 -0
  207. package/src/device/DevicePool.ts +266 -0
  208. package/src/events/call.ts +95 -0
  209. package/src/events/core.ts +65 -0
  210. package/src/events/device.ts +92 -0
  211. package/src/events/firmware.ts +43 -0
  212. package/src/events/iframe.ts +55 -0
  213. package/src/events/index.ts +10 -0
  214. package/src/events/log.ts +23 -0
  215. package/src/events/logBlockEvent.ts +6 -0
  216. package/src/events/ui-promise.ts +14 -0
  217. package/src/events/ui-request.ts +216 -0
  218. package/src/events/ui-response.ts +59 -0
  219. package/src/events/utils.ts +19 -0
  220. package/src/index.ts +70 -0
  221. package/src/inject.ts +408 -0
  222. package/src/lowLevelInject.ts +61 -0
  223. package/src/topLevelInject.ts +62 -0
  224. package/src/types/api/alephiumGetAddress.ts +31 -0
  225. package/src/types/api/alephiumSignMessage.ts +14 -0
  226. package/src/types/api/alephiumSignTransaction.ts +18 -0
  227. package/src/types/api/algoGetAddress.ts +23 -0
  228. package/src/types/api/algoSignTransaction.ts +17 -0
  229. package/src/types/api/allNetworkGetAddress.ts +130 -0
  230. package/src/types/api/aptosGetAddress.ts +28 -0
  231. package/src/types/api/aptosGetPublicKey.ts +27 -0
  232. package/src/types/api/aptosSignInMessage.ts +17 -0
  233. package/src/types/api/aptosSignMessage.ts +26 -0
  234. package/src/types/api/aptosSignTransaction.ts +18 -0
  235. package/src/types/api/benfenGetAddress.ts +24 -0
  236. package/src/types/api/benfenGetPublicKey.ts +23 -0
  237. package/src/types/api/benfenSignMessage.ts +13 -0
  238. package/src/types/api/benfenSignTransaction.ts +19 -0
  239. package/src/types/api/btcGetAddress.ts +26 -0
  240. package/src/types/api/btcGetPublicKey.ts +26 -0
  241. package/src/types/api/btcSignMessage.ts +16 -0
  242. package/src/types/api/btcSignPsbt.ts +13 -0
  243. package/src/types/api/btcSignTransaction.ts +98 -0
  244. package/src/types/api/btcVerifyMessage.ts +15 -0
  245. package/src/types/api/cardano.ts +212 -0
  246. package/src/types/api/cardanoGetAddress.ts +49 -0
  247. package/src/types/api/cardanoGetPublicKey.ts +33 -0
  248. package/src/types/api/cardanoSignMessage.ts +31 -0
  249. package/src/types/api/cardanoSignTransaction.ts +8 -0
  250. package/src/types/api/checkAllFirmwareRelease.ts +34 -0
  251. package/src/types/api/checkBLEFirmwareRelease.ts +15 -0
  252. package/src/types/api/checkBootloaderRelease.ts +19 -0
  253. package/src/types/api/checkBridgeRelease.ts +14 -0
  254. package/src/types/api/checkBridgeStatus.ts +3 -0
  255. package/src/types/api/checkFirmwareRelease.ts +23 -0
  256. package/src/types/api/checkFirmwareTypeAvailable.ts +12 -0
  257. package/src/types/api/cipherKeyValue.ts +28 -0
  258. package/src/types/api/confluxGetAddress.ts +24 -0
  259. package/src/types/api/confluxSignMessage.ts +13 -0
  260. package/src/types/api/confluxSignMessageCIP23.ts +14 -0
  261. package/src/types/api/confluxSignTransaction.ts +32 -0
  262. package/src/types/api/cosmosGetAddress.ts +24 -0
  263. package/src/types/api/cosmosGetPublicKey.ts +28 -0
  264. package/src/types/api/cosmosSignTransaction.ts +17 -0
  265. package/src/types/api/deviceBackup.ts +4 -0
  266. package/src/types/api/deviceCancel.ts +4 -0
  267. package/src/types/api/deviceChangePin.ts +11 -0
  268. package/src/types/api/deviceFlags.ts +11 -0
  269. package/src/types/api/deviceFullyUploadResource.ts +15 -0
  270. package/src/types/api/deviceLock.ts +4 -0
  271. package/src/types/api/deviceRebootToBoardloader.ts +6 -0
  272. package/src/types/api/deviceRebootToBootloader.ts +4 -0
  273. package/src/types/api/deviceRecovery.ts +19 -0
  274. package/src/types/api/deviceReset.ts +20 -0
  275. package/src/types/api/deviceSettings.ts +23 -0
  276. package/src/types/api/deviceSupportFeatures.ts +6 -0
  277. package/src/types/api/deviceUnlock.ts +4 -0
  278. package/src/types/api/deviceUpdateBootloader.ts +13 -0
  279. package/src/types/api/deviceUpdateReboot.ts +3 -0
  280. package/src/types/api/deviceUploadResource.ts +21 -0
  281. package/src/types/api/deviceVerify.ts +15 -0
  282. package/src/types/api/deviceWipe.ts +4 -0
  283. package/src/types/api/dnxGetAddress.ts +23 -0
  284. package/src/types/api/dnxSignTransaction.ts +36 -0
  285. package/src/types/api/event.ts +8 -0
  286. package/src/types/api/evmGetAddress.ts +24 -0
  287. package/src/types/api/evmGetPublicKey.ts +36 -0
  288. package/src/types/api/evmSignMessage.ts +14 -0
  289. package/src/types/api/evmSignMessageEIP712.ts +14 -0
  290. package/src/types/api/evmSignTransaction.ts +80 -0
  291. package/src/types/api/evmSignTypedData.ts +42 -0
  292. package/src/types/api/evmVerifyMessage.ts +15 -0
  293. package/src/types/api/export.ts +194 -0
  294. package/src/types/api/filecoinGetAddress.ts +24 -0
  295. package/src/types/api/filecoinSignTransaction.ts +24 -0
  296. package/src/types/api/firmwareUpdate.ts +66 -0
  297. package/src/types/api/getFeatures.ts +4 -0
  298. package/src/types/api/getLogs.ts +3 -0
  299. package/src/types/api/getNextU2FCounter.ts +7 -0
  300. package/src/types/api/getOnetokenFeatures.ts +7 -0
  301. package/src/types/api/getPassphraseState.ts +6 -0
  302. package/src/types/api/index.ts +404 -0
  303. package/src/types/api/init.ts +11 -0
  304. package/src/types/api/kaspaGetAddress.ts +26 -0
  305. package/src/types/api/kaspaSignTransaction.ts +44 -0
  306. package/src/types/api/lnurlAuth.ts +22 -0
  307. package/src/types/api/nearGetAddress.ts +23 -0
  308. package/src/types/api/nearSignTransaction.ts +13 -0
  309. package/src/types/api/nemGetAddress.ts +24 -0
  310. package/src/types/api/nemSignTransaction.ts +118 -0
  311. package/src/types/api/neoGetAddress.ts +24 -0
  312. package/src/types/api/neoSignTransaction.ts +18 -0
  313. package/src/types/api/nervosGetAddress.ts +24 -0
  314. package/src/types/api/nervosSignTransaction.ts +19 -0
  315. package/src/types/api/nexaGetAddress.ts +26 -0
  316. package/src/types/api/nexaSignTransaction.ts +28 -0
  317. package/src/types/api/nostrDecryptMessage.ts +25 -0
  318. package/src/types/api/nostrEncryptMessage.ts +25 -0
  319. package/src/types/api/nostrGetPublicKey.ts +28 -0
  320. package/src/types/api/nostrSignEvent.ts +52 -0
  321. package/src/types/api/nostrSignSchnorr.ts +22 -0
  322. package/src/types/api/polkadotGetAddress.ts +30 -0
  323. package/src/types/api/polkadotSignTransaction.ts +19 -0
  324. package/src/types/api/promptWebDeviceAccess.ts +6 -0
  325. package/src/types/api/scdoGetAddress.ts +23 -0
  326. package/src/types/api/scdoSignMessage.ts +13 -0
  327. package/src/types/api/scdoSignTransaction.ts +24 -0
  328. package/src/types/api/searchDevices.ts +4 -0
  329. package/src/types/api/setU2FCounter.ts +7 -0
  330. package/src/types/api/solGetAddress.ts +23 -0
  331. package/src/types/api/solSignMessage.ts +17 -0
  332. package/src/types/api/solSignOffchainMessage.ts +24 -0
  333. package/src/types/api/solSignTransaction.ts +27 -0
  334. package/src/types/api/starcoinGetAddress.ts +23 -0
  335. package/src/types/api/starcoinGetPublicKey.ts +23 -0
  336. package/src/types/api/starcoinSignMessage.ts +13 -0
  337. package/src/types/api/starcoinSignTransaction.ts +13 -0
  338. package/src/types/api/starcoinVerifyMessage.ts +14 -0
  339. package/src/types/api/stellarGetAddress.ts +23 -0
  340. package/src/types/api/stellarSignTransaction.ts +154 -0
  341. package/src/types/api/suiGetAddress.ts +28 -0
  342. package/src/types/api/suiGetPublicKey.ts +27 -0
  343. package/src/types/api/suiSignMessage.ts +13 -0
  344. package/src/types/api/suiSignTransaction.ts +17 -0
  345. package/src/types/api/testInitializeDeviceDuration.ts +6 -0
  346. package/src/types/api/tonGetAddress.ts +34 -0
  347. package/src/types/api/tonSignMessage.ts +42 -0
  348. package/src/types/api/tonSignProof.ts +25 -0
  349. package/src/types/api/tronGetAddress.ts +23 -0
  350. package/src/types/api/tronSignMessage.ts +14 -0
  351. package/src/types/api/tronSignTransaction.ts +89 -0
  352. package/src/types/api/uiResponse.ts +3 -0
  353. package/src/types/api/xrpGetAddress.ts +28 -0
  354. package/src/types/api/xrpSignTransaction.ts +29 -0
  355. package/src/types/device.ts +194 -0
  356. package/src/types/firmware.ts +41 -0
  357. package/src/types/global.d.ts +3 -0
  358. package/src/types/index.ts +5 -0
  359. package/src/types/params.ts +64 -0
  360. package/src/types/settings.ts +144 -0
  361. package/src/utils/arrayUtils.ts +7 -0
  362. package/src/utils/assets.ts +5 -0
  363. package/src/utils/bridgeUpdate.ts +80 -0
  364. package/src/utils/capabilitieUtils.ts +12 -0
  365. package/src/utils/deviceFeaturesUtils.ts +352 -0
  366. package/src/utils/deviceInfoUtils.ts +167 -0
  367. package/src/utils/deviceSettings.ts +109 -0
  368. package/src/utils/deviceVersionUtils.ts +79 -0
  369. package/src/utils/findDefectiveBatchDevice.ts +39 -0
  370. package/src/utils/getMutex.ts +41 -0
  371. package/src/utils/getSynchronize.ts +25 -0
  372. package/src/utils/homescreen.ts +345 -0
  373. package/src/utils/index.ts +44 -0
  374. package/src/utils/logger.ts +190 -0
  375. package/src/utils/networkUtils.ts +25 -0
  376. package/src/utils/patch.ts +14 -0
  377. package/src/utils/promiseUtils.ts +4 -0
  378. package/src/utils/release.ts +42 -0
  379. package/src/utils/semver.test.js +53 -0
  380. package/src/utils/tracing.ts +238 -0
  381. package/src/utils/versionUtils.ts +120 -0
  382. package/tsconfig.json +11 -0
@@ -0,0 +1,190 @@
1
+ import { LOG, createLogMessage } from '../events/log';
2
+
3
+ import type { CoreMessage } from '../events';
4
+
5
+ type LogMessage = {
6
+ level: string;
7
+ prefix: string;
8
+ message: any[];
9
+ timestamp: number;
10
+ };
11
+
12
+ const MAX_ENTRIES = 500;
13
+
14
+ let postMessage: (message: CoreMessage) => void;
15
+
16
+ class Log {
17
+ prefix: string;
18
+
19
+ enabled: boolean;
20
+
21
+ messages: LogMessage[];
22
+
23
+ constructor(prefix: string, enabled: boolean) {
24
+ this.prefix = prefix;
25
+ this.enabled = enabled;
26
+ this.messages = [];
27
+ }
28
+
29
+ addMessage(level: string, prefix: string, ...args: any[]) {
30
+ this.messages.push({
31
+ level,
32
+ prefix,
33
+ message: args,
34
+ timestamp: new Date().getTime(),
35
+ });
36
+ if (this.messages.length > MAX_ENTRIES) {
37
+ this.messages.shift();
38
+ }
39
+ }
40
+
41
+ log(...args: any[]) {
42
+ this.addMessage('log', this.prefix, ...args);
43
+ sendLogMessage(this.prefix, ...args);
44
+ if (!this.enabled) {
45
+ return;
46
+ }
47
+ console.log(this.prefix, ...args);
48
+ }
49
+
50
+ error(...args: any[]) {
51
+ this.addMessage('error', this.prefix, ...args);
52
+ sendLogMessage(this.prefix, ...args);
53
+ if (!this.enabled) {
54
+ return;
55
+ }
56
+ console.error(this.prefix, ...args);
57
+ }
58
+
59
+ warn(...args: any[]) {
60
+ this.addMessage('warn', this.prefix, ...args);
61
+ sendLogMessage(this.prefix, ...args);
62
+ if (!this.enabled) {
63
+ return;
64
+ }
65
+ console.warn(this.prefix, ...args);
66
+ }
67
+
68
+ debug(...args: any[]) {
69
+ this.addMessage('debug', this.prefix, ...args);
70
+ sendLogMessage(this.prefix, ...args);
71
+ if (!this.enabled) {
72
+ return;
73
+ }
74
+ console.log(this.prefix, ...args);
75
+ }
76
+ }
77
+
78
+ const _logs: { [k: string]: Log } = {};
79
+
80
+ export const initLog = (prefix: string, enabled?: boolean) => {
81
+ const instance = new Log(prefix, !!enabled);
82
+ _logs[prefix] = instance;
83
+ return instance;
84
+ };
85
+
86
+ export const enableLog = (enabled?: boolean) => {
87
+ Object.keys(_logs).forEach(key => {
88
+ _logs[key].enabled = !!enabled;
89
+ });
90
+ };
91
+
92
+ export const enableLogByPrefix = (prefix: string, enabled: boolean) => {
93
+ if (_logs[prefix]) {
94
+ _logs[prefix].enabled = enabled;
95
+ }
96
+ };
97
+
98
+ export const getLog = () => {
99
+ let logs: LogMessage[] = [];
100
+ Object.keys(_logs).forEach(key => {
101
+ logs = logs.concat(_logs[key].messages);
102
+ });
103
+ logs.sort((a, b) => a.timestamp - b.timestamp);
104
+ return logs;
105
+ };
106
+
107
+ export const setLoggerPostMessage = (postMessageFn: (message: CoreMessage) => void) => {
108
+ postMessage = postMessageFn;
109
+ };
110
+
111
+ const serializeLog = (...args: any[]) =>
112
+ args.map(arg => {
113
+ if (typeof arg === 'string') {
114
+ return arg;
115
+ }
116
+ if (typeof arg === 'number') {
117
+ return arg;
118
+ }
119
+ if (typeof arg === 'boolean') {
120
+ return arg;
121
+ }
122
+ if (typeof arg === 'undefined') {
123
+ return arg;
124
+ }
125
+ if (typeof arg === 'object') {
126
+ return JSON.stringify(arg, getCircularReplacer());
127
+ }
128
+ return arg;
129
+ });
130
+
131
+ const getCircularReplacer = () => {
132
+ const seen = new WeakSet();
133
+ return (_: string, value: any) => {
134
+ if (typeof value === 'object' && value !== null) {
135
+ if (seen.has(value)) {
136
+ return;
137
+ }
138
+ seen.add(value);
139
+ }
140
+ return value;
141
+ };
142
+ };
143
+
144
+ const sendLogMessage = (prefix: string, ...args: any[]) => {
145
+ postMessage?.(createLogMessage(LOG.OUTPUT, serializeLog(prefix, ...args)));
146
+ };
147
+
148
+ export enum LoggerNames {
149
+ Core = '@onetoken/hd-core',
150
+ Transport = 'Transport',
151
+ Device = 'Device',
152
+ DeviceCommands = 'DeviceCommands',
153
+ DeviceConnector = 'DeviceConnector',
154
+ DeviceList = 'DeviceList',
155
+ DevicePool = 'DevicePool',
156
+ HdCommonConnectSdk = '@onetoken/common-connect-sdk',
157
+ HdBleSdk = '@onetoken/hd-ble-sdk',
158
+ HdTransportHttp = '@onetoken/hd-transport-http',
159
+ HdTransportLowLevel = '@onetoken/hd-transport-lowlevel',
160
+ HdBleTransport = '@onetoken/hd-ble-transport',
161
+ HdWebBleTransport = '@onetoken/hd-web-ble-transport',
162
+ HdTransportWebUsb = '@onetoken/hd-transport-webusb',
163
+ Connect = '@onetoken/connect',
164
+ Iframe = 'IFrame',
165
+ SendMessage = '[SendMessage]',
166
+ Method = '[Method]',
167
+ }
168
+
169
+ export const LoggerMap = {
170
+ [LoggerNames.Core]: initLog(LoggerNames.Core),
171
+ [LoggerNames.Transport]: initLog(LoggerNames.Transport),
172
+ [LoggerNames.Device]: initLog(LoggerNames.Device),
173
+ [LoggerNames.DeviceCommands]: initLog(LoggerNames.DeviceCommands),
174
+ [LoggerNames.DeviceConnector]: initLog(LoggerNames.DeviceConnector),
175
+ [LoggerNames.DeviceList]: initLog(LoggerNames.DeviceList),
176
+ [LoggerNames.DevicePool]: initLog(LoggerNames.DevicePool),
177
+ [LoggerNames.HdBleSdk]: initLog(LoggerNames.HdBleSdk),
178
+ [LoggerNames.HdTransportHttp]: initLog(LoggerNames.HdTransportHttp),
179
+ [LoggerNames.HdBleTransport]: initLog(LoggerNames.HdBleTransport),
180
+ [LoggerNames.HdWebBleTransport]: initLog(LoggerNames.HdWebBleTransport),
181
+ [LoggerNames.HdTransportLowLevel]: initLog(LoggerNames.HdTransportLowLevel),
182
+ [LoggerNames.HdTransportWebUsb]: initLog(LoggerNames.HdTransportWebUsb),
183
+ [LoggerNames.Connect]: initLog(LoggerNames.Connect),
184
+ [LoggerNames.Iframe]: initLog(LoggerNames.Iframe),
185
+ [LoggerNames.SendMessage]: initLog(LoggerNames.SendMessage),
186
+ [LoggerNames.Method]: initLog(LoggerNames.Method),
187
+ [LoggerNames.HdCommonConnectSdk]: initLog(LoggerNames.Method),
188
+ };
189
+
190
+ export const getLogger = (key: LoggerNames) => LoggerMap[key];
@@ -0,0 +1,25 @@
1
+ import axios from 'axios';
2
+
3
+ export const httpRequest = async (url: string, type = 'text') => {
4
+ const headers: any = {};
5
+ if (url.indexOf('ngrok-free.app') > -1) {
6
+ headers['ngrok-skip-browser-warning'] = true;
7
+ }
8
+ const response = await axios.request({
9
+ url,
10
+ withCredentials: false,
11
+ responseType: type === 'binary' ? 'arraybuffer' : 'json',
12
+ headers,
13
+ });
14
+
15
+ if (+response.status === 200) {
16
+ if (type === 'json') {
17
+ return response.data;
18
+ }
19
+ if (type === 'binary') {
20
+ return response.data;
21
+ }
22
+ return response.data;
23
+ }
24
+ throw new Error(`httpRequest error: ${url} ${response.statusText}`);
25
+ };
@@ -0,0 +1,14 @@
1
+ import type { DefaultMessageResponse } from '../device/DeviceCommands';
2
+
3
+ export function patchFeatures(response: DefaultMessageResponse) {
4
+ if (response.type !== 'Features') {
5
+ return response;
6
+ }
7
+
8
+ // Bootloader 小于 1.8.7 时 major_version 可能小于 0,需要转换为 1
9
+ if (response.message.major_version < 1) {
10
+ response.message.major_version = 1;
11
+ }
12
+
13
+ return response;
14
+ }
@@ -0,0 +1,4 @@
1
+ export const resolveAfter = (msec: number, value?: any) =>
2
+ new Promise<any>(resolve => {
3
+ setTimeout(resolve, msec, value);
4
+ });
@@ -0,0 +1,42 @@
1
+ import semver from 'semver';
2
+
3
+ import type {
4
+ IBLEFirmwareReleaseInfo,
5
+ IDeviceFirmwareStatus,
6
+ IFirmwareReleaseInfo,
7
+ IVersionArray,
8
+ } from '../types';
9
+
10
+ export const getReleaseStatus = (
11
+ releases: (IFirmwareReleaseInfo | IBLEFirmwareReleaseInfo)[],
12
+ currentVersion: string
13
+ ): IDeviceFirmwareStatus => {
14
+ const newVersions = releases.filter(r => semver.gt(r.version.join('.'), currentVersion));
15
+ if (newVersions.length === 0) {
16
+ return 'valid';
17
+ }
18
+ if (newVersions.some(r => r.required)) {
19
+ return 'required';
20
+ }
21
+ return 'outdated';
22
+ };
23
+
24
+ export const getReleaseChangelog = (
25
+ releases: (IFirmwareReleaseInfo | IBLEFirmwareReleaseInfo)[],
26
+ currentVersion: string
27
+ ): IFirmwareReleaseInfo['changelog'][] => {
28
+ const newVersions = releases.filter(r => semver.gt(r.version.join('.'), currentVersion));
29
+ return newVersions.map(r => r.changelog);
30
+ };
31
+
32
+ export const findLatestRelease = <T extends { version: IVersionArray }>(
33
+ releases: T[]
34
+ ): T | undefined => {
35
+ let leastRelease = releases[0];
36
+ releases.forEach(release => {
37
+ if (semver.gt(release.version.join('.'), leastRelease.version.join('.'))) {
38
+ leastRelease = release;
39
+ }
40
+ });
41
+ return leastRelease;
42
+ };
@@ -0,0 +1,53 @@
1
+ import semver from 'semver';
2
+
3
+ const semverTest = [
4
+ {
5
+ description: 'success - normal version',
6
+ version: '2.10.0',
7
+ expected: '2.10.0',
8
+ },
9
+ {
10
+ description: 'success - 0.0.0 version',
11
+ version: '0.0.0',
12
+ expected: '0.0.0',
13
+ },
14
+ {
15
+ description: 'error - 0 version',
16
+ version: '0',
17
+ expected: null,
18
+ },
19
+ {
20
+ description: 'error - unnecessary version',
21
+ version: '2.10.0 QA',
22
+ expected: null,
23
+ },
24
+ {
25
+ description: 'error - normal version',
26
+ version: '2.10',
27
+ expected: null,
28
+ },
29
+ {
30
+ description: 'error - null version',
31
+ version: null,
32
+ expected: null,
33
+ },
34
+ {
35
+ description: 'error - empty version',
36
+ version: '',
37
+ expected: null,
38
+ },
39
+ {
40
+ description: 'error - undefined version',
41
+ version: undefined,
42
+ expected: null,
43
+ },
44
+ ];
45
+
46
+ describe('Check Semver', () => {
47
+ semverTest.forEach(data => {
48
+ test(data.description, () => {
49
+ const { version, expected } = data;
50
+ expect(semver.valid(version)).toBe(expected);
51
+ });
52
+ });
53
+ });
@@ -0,0 +1,238 @@
1
+ /**
2
+ * SDK Tracing Utilities
3
+ * Tracks object instances and request call chains across multiple SDK instances
4
+ */
5
+
6
+ import { LoggerNames, getLogger } from './logger';
7
+
8
+ // Global counters (cross-SDK instances)
9
+
10
+ const Log = getLogger(LoggerNames.Core);
11
+
12
+ let globalInstanceCounter = 0;
13
+ let sdkInstanceCounter = 0;
14
+
15
+ /**
16
+ * Generate SDK instance ID
17
+ * @returns Format: "SDK-<number>-<timestamp>"
18
+ * @example "SDK-1-123456"
19
+ */
20
+ export function generateSdkInstanceId(): string {
21
+ sdkInstanceCounter++;
22
+ const timestamp = Date.now().toString().slice(-6);
23
+ return `SDK-${sdkInstanceCounter}-${timestamp}`;
24
+ }
25
+
26
+ /**
27
+ * Generate globally unique instance ID
28
+ * @param type Instance type (Device, DeviceCommands, BaseMethod, etc.)
29
+ * @param sdkInstanceId SDK instance ID (optional)
30
+ * @returns Format: <SDK>.<type>-<number>-<timestamp>
31
+ * @example "SDK-1.Device-1-123456" or "Device-1-123456"
32
+ */
33
+ export function generateInstanceId(type: string, sdkInstanceId?: string): string {
34
+ globalInstanceCounter++;
35
+ const timestamp = Date.now().toString().slice(-6);
36
+ const baseId = `${type}-${globalInstanceCounter}-${timestamp}`;
37
+ return sdkInstanceId ? `${sdkInstanceId}.${baseId}` : baseId;
38
+ }
39
+
40
+ // Request context management
41
+
42
+ /**
43
+ * Request context information
44
+ */
45
+ export interface RequestContext {
46
+ /** Request unique ID (reuses BaseMethod.responseID) */
47
+ responseID: number;
48
+ /** SDK instance ID */
49
+ sdkInstanceId?: string;
50
+ /** API method name */
51
+ methodName: string;
52
+ /** Device connection ID */
53
+ connectId?: string;
54
+ /** Device instance ID */
55
+ deviceInstanceId?: string;
56
+ /** DeviceCommands instance ID */
57
+ commandsInstanceId?: string;
58
+ /** Parent request ID (for nested calls like allNetworkGetAddress) */
59
+ parentResponseID?: number;
60
+ /** Request start time */
61
+ startTime: number;
62
+ /** Request end time */
63
+ endTime?: number;
64
+ /** Request status */
65
+ status?: 'pending' | 'running' | 'success' | 'error' | 'cancelled';
66
+ /** Error message */
67
+ error?: string;
68
+ }
69
+
70
+ /**
71
+ * SDK instance tracing context
72
+ */
73
+ export interface SdkTracingContext {
74
+ /** SDK instance ID */
75
+ sdkInstanceId: string;
76
+ /** Creation timestamp */
77
+ createdAt: number;
78
+ /** Active requests */
79
+ activeRequests: Map<number, RequestContext>;
80
+ }
81
+
82
+ // Global SDK instance tracking map
83
+ const sdkInstances = new Map<string, SdkTracingContext>();
84
+
85
+ // Global request map (cross-SDK instances for quick lookup)
86
+ const globalActiveRequests = new Map<number, RequestContext>();
87
+
88
+ /**
89
+ * Create SDK instance tracing context
90
+ */
91
+ export function createSdkTracingContext(): SdkTracingContext {
92
+ const sdkInstanceId = generateSdkInstanceId();
93
+ const context: SdkTracingContext = {
94
+ sdkInstanceId,
95
+ createdAt: Date.now(),
96
+ activeRequests: new Map(),
97
+ };
98
+
99
+ sdkInstances.set(sdkInstanceId, context);
100
+
101
+ return context;
102
+ }
103
+
104
+ /**
105
+ * Create and register request context
106
+ * @param responseID Request ID (reuses BaseMethod.responseID)
107
+ * @param methodName API method name
108
+ * @param options Additional options
109
+ */
110
+ export function createRequestContext(
111
+ responseID: number,
112
+ methodName: string,
113
+ options?: {
114
+ sdkInstanceId?: string;
115
+ connectId?: string;
116
+ deviceInstanceId?: string;
117
+ commandsInstanceId?: string;
118
+ parentResponseID?: number;
119
+ }
120
+ ): RequestContext {
121
+ const context: RequestContext = {
122
+ responseID,
123
+ sdkInstanceId: options?.sdkInstanceId,
124
+ methodName,
125
+ connectId: options?.connectId,
126
+ deviceInstanceId: options?.deviceInstanceId,
127
+ commandsInstanceId: options?.commandsInstanceId,
128
+ parentResponseID: options?.parentResponseID,
129
+ startTime: Date.now(),
130
+ status: 'pending',
131
+ };
132
+
133
+ // Register to global map
134
+ globalActiveRequests.set(context.responseID, context);
135
+
136
+ // Register to SDK instance map
137
+ if (options?.sdkInstanceId) {
138
+ const sdkContext = sdkInstances.get(options.sdkInstanceId);
139
+ if (sdkContext) {
140
+ sdkContext.activeRequests.set(context.responseID, context);
141
+ }
142
+ }
143
+
144
+ return context;
145
+ }
146
+
147
+ /**
148
+ * Update request context
149
+ */
150
+ export function updateRequestContext(responseID: number, updates: Partial<RequestContext>): void {
151
+ const context = globalActiveRequests.get(responseID);
152
+ if (context) {
153
+ Object.assign(context, updates);
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Complete request context
159
+ */
160
+ export function completeRequestContext(responseID: number, error?: Error): void {
161
+ const context = globalActiveRequests.get(responseID);
162
+ if (context) {
163
+ context.endTime = Date.now();
164
+ context.status = error ? 'error' : 'success';
165
+ if (error) {
166
+ context.error = error.message;
167
+ Log.error(
168
+ `[RequestContext] [completeRequestContext] Error: ${formatRequestContext(context)}`
169
+ );
170
+ }
171
+
172
+ // Remove from active list
173
+ globalActiveRequests.delete(responseID);
174
+
175
+ // Remove from SDK instance
176
+ if (context.sdkInstanceId) {
177
+ const sdkContext = sdkInstances.get(context.sdkInstanceId);
178
+ if (sdkContext) {
179
+ sdkContext.activeRequests.delete(responseID);
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ // Query API
186
+
187
+ /**
188
+ * Get active requests for specific Device instance
189
+ */
190
+ export function getActiveRequestsByDeviceInstance(deviceInstanceId: string): RequestContext[] {
191
+ return Array.from(globalActiveRequests.values()).filter(
192
+ ctx => ctx.deviceInstanceId === deviceInstanceId
193
+ );
194
+ }
195
+
196
+ // Format output
197
+
198
+ /**
199
+ * Format request context for logging
200
+ */
201
+ export function formatRequestContext(context: RequestContext): string {
202
+ const duration = context.endTime
203
+ ? context.endTime - context.startTime
204
+ : Date.now() - context.startTime;
205
+
206
+ const parts = [
207
+ `[req:${context.responseID}]`,
208
+ context.sdkInstanceId ? `sdk=${context.sdkInstanceId}` : null,
209
+ `method=${context.methodName}`,
210
+ context.connectId ? `connectId=${context.connectId}` : null,
211
+ context.deviceInstanceId ? `deviceInst=${context.deviceInstanceId}` : null,
212
+ context.commandsInstanceId ? `commandsInst=${context.commandsInstanceId}` : null,
213
+ context.parentResponseID ? `parent=${context.parentResponseID}` : null,
214
+ `duration=${duration}ms`,
215
+ `status=${context.status}`,
216
+ `error=${context.error}`,
217
+ ].filter(Boolean);
218
+
219
+ return parts.join(' ');
220
+ }
221
+
222
+ // Cleanup and reset
223
+
224
+ /**
225
+ * Cleanup specific SDK instance
226
+ */
227
+ export function cleanupSdkInstance(sdkInstanceId: string): void {
228
+ const sdkContext = sdkInstances.get(sdkInstanceId);
229
+ if (sdkContext) {
230
+ // Remove SDK requests from global active requests
231
+ for (const responseID of sdkContext.activeRequests.keys()) {
232
+ globalActiveRequests.delete(responseID);
233
+ }
234
+
235
+ // Remove SDK instance
236
+ sdkInstances.delete(sdkInstanceId);
237
+ }
238
+ }
@@ -0,0 +1,120 @@
1
+ const VER_NUMS = 3;
2
+
3
+ // eslint-disable-next-line prefer-regex-literals
4
+ const versionRegex = new RegExp(/^[0-9]{1,3}(\.[0-9]{1,3}){0,2}$/);
5
+
6
+ /**
7
+ * Validates version string
8
+ * @param {string} version Version string
9
+ * @returns {boolean} True if version string is valid, false if not
10
+ */
11
+ export const isValidVersionString = (version: string) => versionRegex.test(version);
12
+
13
+ /**
14
+ * Validates a version array
15
+ * @param {number[]} version Version array
16
+ * @returns {boolean} True if version array is valid, false if not
17
+ */
18
+ export const isValidVersionArray = (version: number[]) => {
19
+ // Check if we're getting an actual array
20
+ if (!Array.isArray(version)) {
21
+ return false;
22
+ }
23
+
24
+ // Array has to have something in it and be no longer than the VER_NUMS const
25
+ if (version.length === 0 || version.length > VER_NUMS) {
26
+ return false;
27
+ }
28
+
29
+ // There's no major version 0 (invalid number)
30
+ if (version[0] === 0) {
31
+ return false;
32
+ }
33
+
34
+ // Check for invalid numbers in the array
35
+ for (let i = 0; i < version.length; i++) {
36
+ if (typeof version[i] !== 'number' || version[i] < 0) {
37
+ return false;
38
+ }
39
+ }
40
+
41
+ return true;
42
+ };
43
+
44
+ /**
45
+ * Fills the missing version numbers with zeros (ie: [1, 2] will become [1, 2, 0])
46
+ * @param {number[]} version Version array
47
+ * @returns {number[]} Version array with all positions filled
48
+ */
49
+ export const normalizeVersionArray = (version: number[]) => {
50
+ if (version.length === VER_NUMS) {
51
+ return version;
52
+ }
53
+
54
+ // Filling zero's for partial versions
55
+ const partialVersion = [...version];
56
+ for (let i = version.length; i < VER_NUMS; i++) {
57
+ partialVersion.push(0);
58
+ }
59
+
60
+ return partialVersion;
61
+ };
62
+
63
+ /**
64
+ * Returns a valid version array from a version string
65
+ * @param {string} version Version string
66
+ * @returns {number[]} Version array
67
+ */
68
+ export const versionSplit = (version: string): number[] => {
69
+ if (!isValidVersionString(version)) {
70
+ return [0, 0, 0];
71
+ }
72
+
73
+ return version.split('.').map(v => Number(v));
74
+ };
75
+
76
+ /**
77
+ * Compares two versions and returns if the version is newer (1), older (-1) or equal (0).
78
+ * @param {string | number[]} a Version to compare from
79
+ * @param {string | number[]} b Version to compare with
80
+ * @returns {number} Returns 1 if newer, -1 if older and 0 if equal
81
+ */
82
+ export const versionCompare = (a: string | number[], b: string | number[]) => {
83
+ // Quick compare for same version
84
+ if (typeof a === 'string' && typeof b === 'string' && a === b) {
85
+ return 0;
86
+ }
87
+
88
+ // Convert string to version arrays
89
+ const pa = typeof a === 'string' ? versionSplit(a) : a;
90
+ const pb = typeof b === 'string' ? versionSplit(b) : b;
91
+
92
+ // Check version validity
93
+ const vpa = isValidVersionArray(pa);
94
+ const vpb = isValidVersionArray(pb);
95
+
96
+ if (!vpa && !vpb) {
97
+ // Both arrays are invalid
98
+ return 0;
99
+ }
100
+ if (!vpa && vpb) {
101
+ // First array is Invalid
102
+ return -1;
103
+ }
104
+ if (vpa && !vpb) {
105
+ // Second array is invalid
106
+ return 1;
107
+ }
108
+
109
+ // Normalize arrays (to contain the right version array length)
110
+ const npa = normalizeVersionArray(pa);
111
+ const npb = normalizeVersionArray(pb);
112
+
113
+ // Compare versions numbers
114
+ for (let i = 0; i < VER_NUMS; i++) {
115
+ if (npa[i] > npb[i]) return 1;
116
+ if (npb[i] > npa[i]) return -1;
117
+ }
118
+
119
+ return 0;
120
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.lib.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "types": [
6
+ "w3c-web-usb",
7
+ "web-bluetooth"
8
+ ]
9
+ },
10
+ "include": ["./src",]
11
+ }