@ledgerhq/live-common 27.0.0 → 27.1.0-next.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 (565) hide show
  1. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.js +2 -2
  2. package/lib/__tests__/test-helpers/environment.d.ts +2 -0
  3. package/lib/__tests__/test-helpers/environment.d.ts.map +1 -0
  4. package/lib/__tests__/test-helpers/environment.js +107 -0
  5. package/lib/__tests__/test-helpers/environment.js.map +1 -0
  6. package/lib/__tests__/test-helpers/setup.d.ts +1 -1
  7. package/lib/__tests__/test-helpers/setup.d.ts.map +1 -1
  8. package/lib/__tests__/test-helpers/setup.js +1 -101
  9. package/lib/__tests__/test-helpers/setup.js.map +1 -1
  10. package/lib/account/serialization.d.ts +2 -0
  11. package/lib/account/serialization.d.ts.map +1 -1
  12. package/lib/account/serialization.js +105 -47
  13. package/lib/account/serialization.js.map +1 -1
  14. package/lib/apps/support.d.ts.map +1 -1
  15. package/lib/apps/support.js +1 -0
  16. package/lib/apps/support.js.map +1 -1
  17. package/lib/bot/bot-test-context.d.ts +3 -0
  18. package/lib/bot/bot-test-context.d.ts.map +1 -0
  19. package/lib/bot/bot-test-context.js +26 -0
  20. package/lib/bot/bot-test-context.js.map +1 -0
  21. package/lib/bot/bot-test-context.test.d.ts +2 -0
  22. package/lib/bot/bot-test-context.test.d.ts.map +1 -0
  23. package/lib/bot/bot-test-context.test.js +41 -0
  24. package/lib/bot/bot-test-context.test.js.map +1 -0
  25. package/lib/bot/cli.d.ts +2 -0
  26. package/lib/bot/cli.d.ts.map +1 -0
  27. package/lib/bot/cli.js +14 -0
  28. package/lib/bot/cli.js.map +1 -0
  29. package/lib/bot/engine.d.ts +5 -5
  30. package/lib/bot/engine.d.ts.map +1 -1
  31. package/lib/bot/engine.js +161 -112
  32. package/lib/bot/engine.js.map +1 -1
  33. package/lib/bot/formatters.d.ts +2 -2
  34. package/lib/bot/formatters.d.ts.map +1 -1
  35. package/lib/bot/formatters.js +41 -15
  36. package/lib/bot/formatters.js.map +1 -1
  37. package/lib/bot/index.d.ts +1 -1
  38. package/lib/bot/index.d.ts.map +1 -1
  39. package/lib/bot/index.js +90 -15
  40. package/lib/bot/index.js.map +1 -1
  41. package/lib/bot/specs.d.ts +2 -1
  42. package/lib/bot/specs.d.ts.map +1 -1
  43. package/lib/bot/specs.js +13 -9
  44. package/lib/bot/specs.js.map +1 -1
  45. package/lib/bot/types.d.ts +5 -2
  46. package/lib/bot/types.d.ts.map +1 -1
  47. package/lib/countervalues/logic.integration.test.js +65 -0
  48. package/lib/countervalues/logic.integration.test.js.map +1 -1
  49. package/lib/countervalues/modules/weth.d.ts.map +1 -1
  50. package/lib/countervalues/modules/weth.js +5 -10
  51. package/lib/countervalues/modules/weth.js.map +1 -1
  52. package/lib/currencies/sortByMarketcap.d.ts +0 -2
  53. package/lib/currencies/sortByMarketcap.d.ts.map +1 -1
  54. package/lib/currencies/sortByMarketcap.js +3 -17
  55. package/lib/currencies/sortByMarketcap.js.map +1 -1
  56. package/lib/currencies/sortByMarketcap.test.js +0 -5
  57. package/lib/currencies/sortByMarketcap.test.js.map +1 -1
  58. package/lib/env.js +1 -1
  59. package/lib/families/algorand/specs.d.ts.map +1 -1
  60. package/lib/families/algorand/specs.js +18 -10
  61. package/lib/families/algorand/specs.js.map +1 -1
  62. package/lib/families/algorand/speculos-deviceActions.d.ts +1 -4
  63. package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
  64. package/lib/families/algorand/speculos-deviceActions.js +25 -8
  65. package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
  66. package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
  67. package/lib/families/bitcoin/bridge/mock.js +6 -1
  68. package/lib/families/bitcoin/bridge/mock.js.map +1 -1
  69. package/lib/families/bitcoin/datasets/bitcoin_cash.d.ts.map +1 -1
  70. package/lib/families/bitcoin/datasets/bitcoin_cash.js +1 -1
  71. package/lib/families/bitcoin/datasets/bitcoin_cash.js.map +1 -1
  72. package/lib/families/bitcoin/datasets/dash.d.ts.map +1 -1
  73. package/lib/families/bitcoin/datasets/dash.js +1 -1
  74. package/lib/families/bitcoin/datasets/dash.js.map +1 -1
  75. package/lib/families/bitcoin/datasets/decred.d.ts.map +1 -1
  76. package/lib/families/bitcoin/datasets/decred.js +1 -1
  77. package/lib/families/bitcoin/datasets/decred.js.map +1 -1
  78. package/lib/families/bitcoin/datasets/digibyte.d.ts.map +1 -1
  79. package/lib/families/bitcoin/datasets/digibyte.js +8 -2
  80. package/lib/families/bitcoin/datasets/digibyte.js.map +1 -1
  81. package/lib/families/bitcoin/datasets/dogecoin.d.ts.map +1 -1
  82. package/lib/families/bitcoin/datasets/dogecoin.js +1 -1
  83. package/lib/families/bitcoin/datasets/dogecoin.js.map +1 -1
  84. package/lib/families/bitcoin/datasets/komodo.js +1 -1
  85. package/lib/families/bitcoin/datasets/komodo.js.map +1 -1
  86. package/lib/families/bitcoin/datasets/litecoin.d.ts.map +1 -1
  87. package/lib/families/bitcoin/datasets/litecoin.js +8 -2
  88. package/lib/families/bitcoin/datasets/litecoin.js.map +1 -1
  89. package/lib/families/bitcoin/datasets/peercoin.js +1 -1
  90. package/lib/families/bitcoin/datasets/peercoin.js.map +1 -1
  91. package/lib/families/bitcoin/datasets/pivx.js +1 -1
  92. package/lib/families/bitcoin/datasets/pivx.js.map +1 -1
  93. package/lib/families/bitcoin/datasets/qtum.js +1 -1
  94. package/lib/families/bitcoin/datasets/qtum.js.map +1 -1
  95. package/lib/families/bitcoin/datasets/stakenet.d.ts.map +1 -1
  96. package/lib/families/bitcoin/datasets/stakenet.js +1 -1
  97. package/lib/families/bitcoin/datasets/stakenet.js.map +1 -1
  98. package/lib/families/bitcoin/datasets/vertcoin.d.ts.map +1 -1
  99. package/lib/families/bitcoin/datasets/vertcoin.js +1 -1
  100. package/lib/families/bitcoin/datasets/vertcoin.js.map +1 -1
  101. package/lib/families/bitcoin/datasets/viacoin.d.ts.map +1 -1
  102. package/lib/families/bitcoin/datasets/viacoin.js +1 -1
  103. package/lib/families/bitcoin/datasets/viacoin.js.map +1 -1
  104. package/lib/families/bitcoin/datasets/zcash.d.ts.map +1 -1
  105. package/lib/families/bitcoin/datasets/zcash.js +1 -1
  106. package/lib/families/bitcoin/datasets/zcash.js.map +1 -1
  107. package/lib/families/bitcoin/datasets/zencash.d.ts.map +1 -1
  108. package/lib/families/bitcoin/datasets/zencash.js +1 -1
  109. package/lib/families/bitcoin/datasets/zencash.js.map +1 -1
  110. package/lib/families/bitcoin/platformAdapter.test.d.ts +2 -0
  111. package/lib/families/bitcoin/platformAdapter.test.d.ts.map +1 -0
  112. package/lib/families/bitcoin/platformAdapter.test.js +48 -0
  113. package/lib/families/bitcoin/platformAdapter.test.js.map +1 -0
  114. package/lib/families/bitcoin/specs.d.ts.map +1 -1
  115. package/lib/families/bitcoin/specs.js +62 -24
  116. package/lib/families/bitcoin/specs.js.map +1 -1
  117. package/lib/families/bitcoin/speculos-deviceActions.d.ts +1 -4
  118. package/lib/families/bitcoin/speculos-deviceActions.d.ts.map +1 -1
  119. package/lib/families/bitcoin/speculos-deviceActions.js +2 -4
  120. package/lib/families/bitcoin/speculos-deviceActions.js.map +1 -1
  121. package/lib/families/cardano/js-estimateMaxSpendable.js +1 -1
  122. package/lib/families/cardano/js-estimateMaxSpendable.js.map +1 -1
  123. package/lib/families/cardano/specs.d.ts.map +1 -1
  124. package/lib/families/cardano/specs.js +19 -8
  125. package/lib/families/cardano/specs.js.map +1 -1
  126. package/lib/families/cardano/speculos-deviceActions.d.ts +1 -4
  127. package/lib/families/cardano/speculos-deviceActions.d.ts.map +1 -1
  128. package/lib/families/cardano/speculos-deviceActions.js +2 -2
  129. package/lib/families/cardano/speculos-deviceActions.js.map +1 -1
  130. package/lib/families/celo/api/hubble.d.ts +6 -1
  131. package/lib/families/celo/api/hubble.d.ts.map +1 -1
  132. package/lib/families/celo/api/hubble.js +135 -13
  133. package/lib/families/celo/api/hubble.js.map +1 -1
  134. package/lib/families/celo/api/index.d.ts +1 -1
  135. package/lib/families/celo/api/index.d.ts.map +1 -1
  136. package/lib/families/celo/api/index.js +2 -1
  137. package/lib/families/celo/api/index.js.map +1 -1
  138. package/lib/families/celo/api/sdk.d.ts +22 -0
  139. package/lib/families/celo/api/sdk.d.ts.map +1 -1
  140. package/lib/families/celo/api/sdk.js +168 -1
  141. package/lib/families/celo/api/sdk.js.map +1 -1
  142. package/lib/families/celo/bridge/js.d.ts.map +1 -1
  143. package/lib/families/celo/bridge/js.js +4 -42
  144. package/lib/families/celo/bridge/js.js.map +1 -1
  145. package/lib/families/celo/cli-transaction.d.ts +12 -2
  146. package/lib/families/celo/cli-transaction.d.ts.map +1 -1
  147. package/lib/families/celo/cli-transaction.js +38 -4
  148. package/lib/families/celo/cli-transaction.js.map +1 -1
  149. package/lib/families/celo/datasets/celo.scanAccounts.1.d.ts +1 -0
  150. package/lib/families/celo/datasets/celo.scanAccounts.1.d.ts.map +1 -1
  151. package/lib/families/celo/datasets/celo.scanAccounts.1.js +298 -2
  152. package/lib/families/celo/datasets/celo.scanAccounts.1.js.map +1 -1
  153. package/lib/families/celo/errors.d.ts +2 -0
  154. package/lib/families/celo/errors.d.ts.map +1 -0
  155. package/lib/families/celo/errors.js +6 -0
  156. package/lib/families/celo/errors.js.map +1 -0
  157. package/lib/families/celo/js-buildTransaction.d.ts +2 -3
  158. package/lib/families/celo/js-buildTransaction.d.ts.map +1 -1
  159. package/lib/families/celo/js-buildTransaction.js +194 -19
  160. package/lib/families/celo/js-buildTransaction.js.map +1 -1
  161. package/lib/families/celo/js-createTransaction.d.ts.map +1 -1
  162. package/lib/families/celo/js-createTransaction.js +3 -1
  163. package/lib/families/celo/js-createTransaction.js.map +1 -1
  164. package/lib/families/celo/js-estimateMaxSpendable.d.ts.map +1 -1
  165. package/lib/families/celo/js-estimateMaxSpendable.js.map +1 -1
  166. package/lib/families/celo/js-getFeesForTransaction.d.ts +2 -3
  167. package/lib/families/celo/js-getFeesForTransaction.d.ts.map +1 -1
  168. package/lib/families/celo/js-getFeesForTransaction.js +137 -10
  169. package/lib/families/celo/js-getFeesForTransaction.js.map +1 -1
  170. package/lib/families/celo/js-getTransactionStatus.d.ts +2 -3
  171. package/lib/families/celo/js-getTransactionStatus.d.ts.map +1 -1
  172. package/lib/families/celo/js-getTransactionStatus.js +97 -41
  173. package/lib/families/celo/js-getTransactionStatus.js.map +1 -1
  174. package/lib/families/celo/js-prepareTransaction.d.ts +2 -3
  175. package/lib/families/celo/js-prepareTransaction.d.ts.map +1 -1
  176. package/lib/families/celo/js-prepareTransaction.js +8 -3
  177. package/lib/families/celo/js-prepareTransaction.js.map +1 -1
  178. package/lib/families/celo/js-signOperation.d.ts.map +1 -1
  179. package/lib/families/celo/js-signOperation.js +17 -3
  180. package/lib/families/celo/js-signOperation.js.map +1 -1
  181. package/lib/families/celo/js-synchronisation.d.ts.map +1 -1
  182. package/lib/families/celo/js-synchronisation.js +51 -6
  183. package/lib/families/celo/js-synchronisation.js.map +1 -1
  184. package/lib/families/celo/logic.d.ts +21 -0
  185. package/lib/families/celo/logic.d.ts.map +1 -0
  186. package/lib/families/celo/logic.js +132 -0
  187. package/lib/families/celo/logic.js.map +1 -0
  188. package/lib/families/celo/preload.d.ts +10 -0
  189. package/lib/families/celo/preload.d.ts.map +1 -0
  190. package/lib/families/celo/preload.js +118 -0
  191. package/lib/families/celo/preload.js.map +1 -0
  192. package/lib/families/celo/react.d.ts +4 -0
  193. package/lib/families/celo/react.d.ts.map +1 -0
  194. package/lib/families/celo/react.js +47 -0
  195. package/lib/families/celo/react.js.map +1 -0
  196. package/lib/families/celo/serialization.d.ts +4 -0
  197. package/lib/families/celo/serialization.d.ts.map +1 -0
  198. package/lib/families/celo/serialization.js +55 -0
  199. package/lib/families/celo/serialization.js.map +1 -0
  200. package/lib/families/celo/specs/createActivateVoteMutation.d.ts +4 -0
  201. package/lib/families/celo/specs/createActivateVoteMutation.d.ts.map +1 -0
  202. package/lib/families/celo/specs/createActivateVoteMutation.js +38 -0
  203. package/lib/families/celo/specs/createActivateVoteMutation.js.map +1 -0
  204. package/lib/families/celo/specs/createLockMutation.d.ts +4 -0
  205. package/lib/families/celo/specs/createLockMutation.d.ts.map +1 -0
  206. package/lib/families/celo/specs/createLockMutation.js +40 -0
  207. package/lib/families/celo/specs/createLockMutation.js.map +1 -0
  208. package/lib/families/celo/specs/createRegisterAccountMutation.d.ts +4 -0
  209. package/lib/families/celo/specs/createRegisterAccountMutation.d.ts.map +1 -0
  210. package/lib/families/celo/specs/createRegisterAccountMutation.js +31 -0
  211. package/lib/families/celo/specs/createRegisterAccountMutation.js.map +1 -0
  212. package/lib/families/celo/specs/createRevokeVoteMutation.d.ts +4 -0
  213. package/lib/families/celo/specs/createRevokeVoteMutation.d.ts.map +1 -0
  214. package/lib/families/celo/specs/createRevokeVoteMutation.js +39 -0
  215. package/lib/families/celo/specs/createRevokeVoteMutation.js.map +1 -0
  216. package/lib/families/celo/specs/createSendMutation.d.ts +5 -0
  217. package/lib/families/celo/specs/createSendMutation.d.ts.map +1 -0
  218. package/lib/families/celo/specs/createSendMutation.js +44 -0
  219. package/lib/families/celo/specs/createSendMutation.js.map +1 -0
  220. package/lib/families/celo/specs/createUnlockMutation.d.ts +4 -0
  221. package/lib/families/celo/specs/createUnlockMutation.d.ts.map +1 -0
  222. package/lib/families/celo/specs/createUnlockMutation.js +37 -0
  223. package/lib/families/celo/specs/createUnlockMutation.js.map +1 -0
  224. package/lib/families/celo/specs/createVoteMutation.d.ts +4 -0
  225. package/lib/families/celo/specs/createVoteMutation.d.ts.map +1 -0
  226. package/lib/families/celo/specs/createVoteMutation.js +51 -0
  227. package/lib/families/celo/specs/createVoteMutation.js.map +1 -0
  228. package/lib/families/celo/specs/createWithdrawMutation.d.ts +4 -0
  229. package/lib/families/celo/specs/createWithdrawMutation.d.ts.map +1 -0
  230. package/lib/families/celo/specs/createWithdrawMutation.js +36 -0
  231. package/lib/families/celo/specs/createWithdrawMutation.js.map +1 -0
  232. package/lib/families/celo/specs/index.d.ts +9 -0
  233. package/lib/families/celo/specs/index.d.ts.map +1 -0
  234. package/lib/families/celo/specs/index.js +25 -0
  235. package/lib/families/celo/specs/index.js.map +1 -0
  236. package/lib/families/celo/specs.d.ts +1 -1
  237. package/lib/families/celo/specs.d.ts.map +1 -1
  238. package/lib/families/celo/specs.js +22 -37
  239. package/lib/families/celo/specs.js.map +1 -1
  240. package/lib/families/celo/speculos-deviceActions.d.ts +1 -4
  241. package/lib/families/celo/speculos-deviceActions.d.ts.map +1 -1
  242. package/lib/families/celo/speculos-deviceActions.js +24 -4
  243. package/lib/families/celo/speculos-deviceActions.js.map +1 -1
  244. package/lib/families/celo/transaction.d.ts.map +1 -1
  245. package/lib/families/celo/transaction.js +8 -6
  246. package/lib/families/celo/transaction.js.map +1 -1
  247. package/lib/families/celo/types.d.ts +102 -1
  248. package/lib/families/celo/types.d.ts.map +1 -1
  249. package/lib/families/celo/validators.d.ts +3 -0
  250. package/lib/families/celo/validators.d.ts.map +1 -0
  251. package/lib/families/celo/validators.js +6 -0
  252. package/lib/families/celo/validators.js.map +1 -0
  253. package/lib/families/cosmos/specs.d.ts.map +1 -1
  254. package/lib/families/cosmos/specs.js +41 -25
  255. package/lib/families/cosmos/specs.js.map +1 -1
  256. package/lib/families/cosmos/speculos-deviceActions.d.ts +1 -4
  257. package/lib/families/cosmos/speculos-deviceActions.d.ts.map +1 -1
  258. package/lib/families/cosmos/speculos-deviceActions.js +2 -4
  259. package/lib/families/cosmos/speculos-deviceActions.js.map +1 -1
  260. package/lib/families/crypto_org/specs.d.ts.map +1 -1
  261. package/lib/families/crypto_org/specs.js +3 -0
  262. package/lib/families/crypto_org/specs.js.map +1 -1
  263. package/lib/families/crypto_org/speculos-deviceActions.d.ts +1 -4
  264. package/lib/families/crypto_org/speculos-deviceActions.d.ts.map +1 -1
  265. package/lib/families/crypto_org/speculos-deviceActions.js +2 -2
  266. package/lib/families/crypto_org/speculos-deviceActions.js.map +1 -1
  267. package/lib/families/elrond/specs.d.ts.map +1 -1
  268. package/lib/families/elrond/specs.js +15 -2
  269. package/lib/families/elrond/specs.js.map +1 -1
  270. package/lib/families/elrond/speculos-deviceActions.d.ts +1 -4
  271. package/lib/families/elrond/speculos-deviceActions.d.ts.map +1 -1
  272. package/lib/families/elrond/speculos-deviceActions.js +2 -4
  273. package/lib/families/elrond/speculos-deviceActions.js.map +1 -1
  274. package/lib/families/ethereum/platformAdapter.test.d.ts +2 -0
  275. package/lib/families/ethereum/platformAdapter.test.d.ts.map +1 -0
  276. package/lib/families/ethereum/platformAdapter.test.js +88 -0
  277. package/lib/families/ethereum/platformAdapter.test.js.map +1 -0
  278. package/lib/families/ethereum/specs.d.ts.map +1 -1
  279. package/lib/families/ethereum/specs.js +36 -12
  280. package/lib/families/ethereum/specs.js.map +1 -1
  281. package/lib/families/ethereum/speculos-deviceActions.d.ts +1 -4
  282. package/lib/families/ethereum/speculos-deviceActions.d.ts.map +1 -1
  283. package/lib/families/ethereum/speculos-deviceActions.js +2 -4
  284. package/lib/families/ethereum/speculos-deviceActions.js.map +1 -1
  285. package/lib/families/filecoin/specs.d.ts.map +1 -1
  286. package/lib/families/filecoin/specs.js +2 -0
  287. package/lib/families/filecoin/specs.js.map +1 -1
  288. package/lib/families/filecoin/speculos-deviceActions.d.ts +1 -4
  289. package/lib/families/filecoin/speculos-deviceActions.d.ts.map +1 -1
  290. package/lib/families/filecoin/speculos-deviceActions.js +2 -2
  291. package/lib/families/filecoin/speculos-deviceActions.js.map +1 -1
  292. package/lib/families/hedera/specs.d.ts.map +1 -1
  293. package/lib/families/hedera/specs.js +11 -3
  294. package/lib/families/hedera/specs.js.map +1 -1
  295. package/lib/families/hedera/speculos-deviceActions.d.ts +1 -4
  296. package/lib/families/hedera/speculos-deviceActions.d.ts.map +1 -1
  297. package/lib/families/hedera/speculos-deviceActions.js +4 -4
  298. package/lib/families/hedera/speculos-deviceActions.js.map +1 -1
  299. package/lib/families/osmosis/specs.d.ts.map +1 -1
  300. package/lib/families/osmosis/specs.js +13 -5
  301. package/lib/families/osmosis/specs.js.map +1 -1
  302. package/lib/families/osmosis/speculos-deviceActions.d.ts +1 -4
  303. package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -1
  304. package/lib/families/osmosis/speculos-deviceActions.js +2 -4
  305. package/lib/families/osmosis/speculos-deviceActions.js.map +1 -1
  306. package/lib/families/polkadot/platformAdapter.test.d.ts +2 -0
  307. package/lib/families/polkadot/platformAdapter.test.d.ts.map +1 -0
  308. package/lib/families/polkadot/platformAdapter.test.js +51 -0
  309. package/lib/families/polkadot/platformAdapter.test.js.map +1 -0
  310. package/lib/families/polkadot/specs.d.ts.map +1 -1
  311. package/lib/families/polkadot/specs.js +12 -1
  312. package/lib/families/polkadot/specs.js.map +1 -1
  313. package/lib/families/polkadot/speculos-deviceActions.d.ts +1 -4
  314. package/lib/families/polkadot/speculos-deviceActions.d.ts.map +1 -1
  315. package/lib/families/polkadot/speculos-deviceActions.js +2 -4
  316. package/lib/families/polkadot/speculos-deviceActions.js.map +1 -1
  317. package/lib/families/ripple/platformAdapter.test.d.ts +2 -0
  318. package/lib/families/ripple/platformAdapter.test.d.ts.map +1 -0
  319. package/lib/families/ripple/platformAdapter.test.js +51 -0
  320. package/lib/families/ripple/platformAdapter.test.js.map +1 -0
  321. package/lib/families/ripple/specs.d.ts.map +1 -1
  322. package/lib/families/ripple/specs.js +9 -4
  323. package/lib/families/ripple/specs.js.map +1 -1
  324. package/lib/families/ripple/speculos-deviceActions.d.ts +1 -4
  325. package/lib/families/ripple/speculos-deviceActions.d.ts.map +1 -1
  326. package/lib/families/ripple/speculos-deviceActions.js +2 -4
  327. package/lib/families/ripple/speculos-deviceActions.js.map +1 -1
  328. package/lib/families/solana/api/chain/instruction/token/types.d.ts +2 -2
  329. package/lib/families/solana/specs.d.ts.map +1 -1
  330. package/lib/families/solana/specs.js +29 -11
  331. package/lib/families/solana/specs.js.map +1 -1
  332. package/lib/families/solana/speculos-deviceActions.d.ts +0 -5
  333. package/lib/families/solana/speculos-deviceActions.d.ts.map +1 -1
  334. package/lib/families/solana/speculos-deviceActions.js +0 -4
  335. package/lib/families/solana/speculos-deviceActions.js.map +1 -1
  336. package/lib/families/stellar/api/horizon.d.ts.map +1 -1
  337. package/lib/families/stellar/api/horizon.js +15 -10
  338. package/lib/families/stellar/api/horizon.js.map +1 -1
  339. package/lib/families/stellar/specs.d.ts.map +1 -1
  340. package/lib/families/stellar/specs.js +30 -12
  341. package/lib/families/stellar/specs.js.map +1 -1
  342. package/lib/families/stellar/speculos-deviceActions.d.ts +1 -4
  343. package/lib/families/stellar/speculos-deviceActions.d.ts.map +1 -1
  344. package/lib/families/stellar/speculos-deviceActions.js +2 -4
  345. package/lib/families/stellar/speculos-deviceActions.js.map +1 -1
  346. package/lib/families/tezos/bakers.whitelist-default.d.ts.map +1 -1
  347. package/lib/families/tezos/bakers.whitelist-default.js +1 -1
  348. package/lib/families/tezos/bakers.whitelist-default.js.map +1 -1
  349. package/lib/families/tezos/specs.d.ts.map +1 -1
  350. package/lib/families/tezos/specs.js +2 -0
  351. package/lib/families/tezos/specs.js.map +1 -1
  352. package/lib/families/tezos/speculos-deviceActions.d.ts +1 -4
  353. package/lib/families/tezos/speculos-deviceActions.d.ts.map +1 -1
  354. package/lib/families/tezos/speculos-deviceActions.js +2 -2
  355. package/lib/families/tezos/speculos-deviceActions.js.map +1 -1
  356. package/lib/families/tron/specs.d.ts.map +1 -1
  357. package/lib/families/tron/specs.js +49 -17
  358. package/lib/families/tron/specs.js.map +1 -1
  359. package/lib/families/tron/speculos-deviceActions.d.ts +1 -4
  360. package/lib/families/tron/speculos-deviceActions.d.ts.map +1 -1
  361. package/lib/families/tron/speculos-deviceActions.js +2 -4
  362. package/lib/families/tron/speculos-deviceActions.js.map +1 -1
  363. package/lib/generated/cli-transaction.d.ts +12 -2
  364. package/lib/generated/cli-transaction.d.ts.map +1 -1
  365. package/lib/hw/getGenuineCheckFromDeviceId.d.ts +22 -0
  366. package/lib/hw/getGenuineCheckFromDeviceId.d.ts.map +1 -0
  367. package/lib/hw/getGenuineCheckFromDeviceId.js +49 -0
  368. package/lib/hw/getGenuineCheckFromDeviceId.js.map +1 -0
  369. package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts +2 -0
  370. package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts.map +1 -0
  371. package/lib/hw/getGenuineCheckFromDeviceId.test.js +84 -0
  372. package/lib/hw/getGenuineCheckFromDeviceId.test.js.map +1 -0
  373. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts +17 -0
  374. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts.map +1 -0
  375. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js +27 -0
  376. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js.map +1 -0
  377. package/lib/hw/hooks/useGenuineCheck.d.ts +34 -0
  378. package/lib/hw/hooks/useGenuineCheck.d.ts.map +1 -0
  379. package/lib/hw/hooks/useGenuineCheck.js +115 -0
  380. package/lib/hw/hooks/useGenuineCheck.js.map +1 -0
  381. package/lib/hw/hooks/useGenuineCheck.test.d.ts +2 -0
  382. package/lib/hw/hooks/useGenuineCheck.test.d.ts.map +1 -0
  383. package/lib/hw/hooks/useGenuineCheck.test.js +316 -0
  384. package/lib/hw/hooks/useGenuineCheck.test.js.map +1 -0
  385. package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts +29 -0
  386. package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts.map +1 -0
  387. package/lib/hw/hooks/useGetLatestAvailableFirmware.js +72 -0
  388. package/lib/hw/hooks/useGetLatestAvailableFirmware.js.map +1 -0
  389. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts +2 -0
  390. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts.map +1 -0
  391. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js +155 -0
  392. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js.map +1 -0
  393. package/lib/load/speculos.d.ts +1 -0
  394. package/lib/load/speculos.d.ts.map +1 -1
  395. package/lib/load/speculos.js +2 -1
  396. package/lib/load/speculos.js.map +1 -1
  397. package/lib/mock/fixtures/cryptoCurrencies.d.ts +5 -0
  398. package/lib/mock/fixtures/cryptoCurrencies.d.ts.map +1 -0
  399. package/lib/mock/fixtures/cryptoCurrencies.js +91 -0
  400. package/lib/mock/fixtures/cryptoCurrencies.js.map +1 -0
  401. package/lib/operation.d.ts.map +1 -1
  402. package/lib/operation.js +6 -0
  403. package/lib/operation.js.map +1 -1
  404. package/lib/platform/converters.test.js +44 -218
  405. package/lib/platform/converters.test.js.map +1 -1
  406. package/lib/platform/logic.d.ts +44 -0
  407. package/lib/platform/logic.d.ts.map +1 -1
  408. package/lib/platform/logic.js +147 -1
  409. package/lib/platform/logic.js.map +1 -1
  410. package/lib/platform/logic.test.d.ts +2 -0
  411. package/lib/platform/logic.test.d.ts.map +1 -0
  412. package/lib/platform/logic.test.js +903 -0
  413. package/lib/platform/logic.test.js.map +1 -0
  414. package/lib/platform/react.d.ts +6 -0
  415. package/lib/platform/react.d.ts.map +1 -1
  416. package/lib/platform/react.js +6 -0
  417. package/lib/platform/react.js.map +1 -1
  418. package/lib/platform/tracking.d.ts +1 -1
  419. package/lib/platform/tracking.d.ts.map +1 -1
  420. package/lib/platform/tracking.test.js +14 -41
  421. package/lib/platform/tracking.test.js.map +1 -1
  422. package/lib/reconciliation.d.ts.map +1 -1
  423. package/lib/reconciliation.js +39 -10
  424. package/lib/reconciliation.js.map +1 -1
  425. package/package.json +5 -7
  426. package/src/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.ts +2 -2
  427. package/src/__tests__/test-helpers/environment.ts +91 -0
  428. package/src/__tests__/test-helpers/setup.ts +2 -91
  429. package/src/account/serialization.ts +125 -66
  430. package/src/apps/support.ts +1 -0
  431. package/src/bot/bot-test-context.test.ts +37 -0
  432. package/src/bot/bot-test-context.ts +24 -0
  433. package/src/bot/cli.ts +18 -0
  434. package/src/bot/engine.ts +109 -73
  435. package/src/bot/formatters.ts +40 -14
  436. package/src/bot/index.ts +124 -18
  437. package/src/bot/specs.ts +10 -5
  438. package/src/bot/types.ts +7 -3
  439. package/src/countervalues/logic.integration.test.ts +50 -0
  440. package/src/countervalues/modules/weth.ts +9 -12
  441. package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +59 -1
  442. package/src/currencies/sortByMarketcap.test.ts +1 -12
  443. package/src/currencies/sortByMarketcap.ts +2 -22
  444. package/src/env.ts +1 -1
  445. package/src/families/algorand/__snapshots__/bridge.integration.test.ts.snap +733 -8
  446. package/src/families/algorand/specs.ts +26 -16
  447. package/src/families/algorand/speculos-deviceActions.ts +31 -10
  448. package/src/families/bitcoin/__snapshots__/bridge.integration.test.ts.snap +43309 -7957
  449. package/src/families/bitcoin/bridge/mock.ts +7 -1
  450. package/src/families/bitcoin/datasets/bitcoin_cash.ts +73 -13
  451. package/src/families/bitcoin/datasets/dash.ts +29 -17
  452. package/src/families/bitcoin/datasets/decred.ts +42 -12
  453. package/src/families/bitcoin/datasets/digibyte.ts +9 -3
  454. package/src/families/bitcoin/datasets/dogecoin.ts +29 -17
  455. package/src/families/bitcoin/datasets/komodo.ts +22 -22
  456. package/src/families/bitcoin/datasets/litecoin.ts +9 -3
  457. package/src/families/bitcoin/datasets/peercoin.ts +17 -17
  458. package/src/families/bitcoin/datasets/pivx.ts +17 -17
  459. package/src/families/bitcoin/datasets/qtum.ts +40 -40
  460. package/src/families/bitcoin/datasets/stakenet.ts +56 -26
  461. package/src/families/bitcoin/datasets/vertcoin.ts +43 -55
  462. package/src/families/bitcoin/datasets/viacoin.ts +35 -23
  463. package/src/families/bitcoin/datasets/zcash.ts +78 -12
  464. package/src/families/bitcoin/datasets/zencash.ts +56 -10
  465. package/src/families/bitcoin/platformAdapter.test.ts +58 -0
  466. package/src/families/bitcoin/specs.ts +81 -41
  467. package/src/families/bitcoin/speculos-deviceActions.ts +68 -69
  468. package/src/families/cardano/js-estimateMaxSpendable.ts +1 -1
  469. package/src/families/cardano/specs.ts +28 -11
  470. package/src/families/cardano/speculos-deviceActions.ts +65 -66
  471. package/src/families/celo/__snapshots__/bridge.integration.test.ts.snap +134 -857
  472. package/src/families/celo/api/hubble.ts +113 -16
  473. package/src/families/celo/api/index.ts +1 -1
  474. package/src/families/celo/api/sdk.ts +88 -0
  475. package/src/families/celo/bridge/js.ts +2 -3
  476. package/src/families/celo/cli-transaction.ts +46 -2
  477. package/src/families/celo/datasets/celo.scanAccounts.1.ts +365 -5
  478. package/src/families/celo/errors.ts +5 -0
  479. package/src/families/celo/js-buildTransaction.ts +173 -20
  480. package/src/families/celo/js-createTransaction.ts +2 -0
  481. package/src/families/celo/js-estimateMaxSpendable.ts +2 -2
  482. package/src/families/celo/js-getFeesForTransaction.ts +118 -19
  483. package/src/families/celo/js-getTransactionStatus.ts +72 -17
  484. package/src/families/celo/js-prepareTransaction.ts +13 -7
  485. package/src/families/celo/js-signOperation.ts +22 -5
  486. package/src/families/celo/js-synchronisation.ts +32 -0
  487. package/src/families/celo/logic.ts +184 -0
  488. package/src/families/celo/preload.ts +78 -0
  489. package/src/families/celo/react.ts +35 -0
  490. package/src/families/celo/serialization.ts +61 -0
  491. package/src/families/celo/specs/createActivateVoteMutation.ts +44 -0
  492. package/src/families/celo/specs/createLockMutation.ts +46 -0
  493. package/src/families/celo/specs/createRegisterAccountMutation.ts +34 -0
  494. package/src/families/celo/specs/createRevokeVoteMutation.ts +43 -0
  495. package/src/families/celo/specs/createSendMutation.ts +44 -0
  496. package/src/families/celo/specs/createUnlockMutation.ts +44 -0
  497. package/src/families/celo/specs/createVoteMutation.ts +67 -0
  498. package/src/families/celo/specs/createWithdrawMutation.ts +44 -0
  499. package/src/families/celo/specs/index.ts +8 -0
  500. package/src/families/celo/specs.ts +34 -34
  501. package/src/families/celo/speculos-deviceActions.ts +63 -45
  502. package/src/families/celo/transaction.ts +12 -4
  503. package/src/families/celo/types.ts +113 -0
  504. package/src/families/celo/validators.ts +2 -0
  505. package/src/families/cosmos/__snapshots__/bridge.integration.test.ts.snap +246 -5
  506. package/src/families/cosmos/specs.ts +44 -28
  507. package/src/families/cosmos/speculos-deviceActions.ts +82 -83
  508. package/src/families/crypto_org/specs.ts +3 -0
  509. package/src/families/crypto_org/speculos-deviceActions.ts +58 -59
  510. package/src/families/elrond/specs.ts +21 -4
  511. package/src/families/elrond/speculos-deviceActions.ts +41 -42
  512. package/src/families/ethereum/__snapshots__/bridge.integration.test.ts.snap +90 -90
  513. package/src/families/ethereum/platformAdapter.test.ts +112 -0
  514. package/src/families/ethereum/specs.ts +47 -23
  515. package/src/families/ethereum/speculos-deviceActions.ts +93 -95
  516. package/src/families/filecoin/specs.ts +2 -1
  517. package/src/families/filecoin/speculos-deviceActions.ts +61 -62
  518. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +57 -2
  519. package/src/families/hedera/specs.ts +13 -5
  520. package/src/families/hedera/speculos-deviceActions.ts +59 -60
  521. package/src/families/osmosis/specs.ts +15 -7
  522. package/src/families/osmosis/speculos-deviceActions.ts +82 -83
  523. package/src/families/polkadot/platformAdapter.test.ts +61 -0
  524. package/src/families/polkadot/specs.ts +20 -2
  525. package/src/families/polkadot/speculos-deviceActions.ts +83 -82
  526. package/src/families/ripple/platformAdapter.test.ts +54 -0
  527. package/src/families/ripple/specs.ts +14 -7
  528. package/src/families/ripple/speculos-deviceActions.ts +72 -73
  529. package/src/families/solana/specs.ts +33 -14
  530. package/src/families/solana/speculos-deviceActions.ts +0 -5
  531. package/src/families/stellar/api/horizon.ts +10 -6
  532. package/src/families/stellar/specs.ts +37 -19
  533. package/src/families/stellar/speculos-deviceActions.ts +85 -87
  534. package/src/families/tezos/bakers.whitelist-default.ts +0 -1
  535. package/src/families/tezos/specs.ts +2 -0
  536. package/src/families/tezos/speculos-deviceActions.ts +76 -77
  537. package/src/families/tron/specs.ts +67 -30
  538. package/src/families/tron/speculos-deviceActions.ts +81 -84
  539. package/src/hw/getGenuineCheckFromDeviceId.test.ts +98 -0
  540. package/src/hw/getGenuineCheckFromDeviceId.ts +61 -0
  541. package/src/hw/getLatestAvailableFirmwareFromDeviceId.ts +37 -0
  542. package/src/hw/hooks/useGenuineCheck.test.ts +232 -0
  543. package/src/hw/hooks/useGenuineCheck.ts +138 -0
  544. package/src/hw/hooks/useGetLatestAvailableFirmware.test.ts +111 -0
  545. package/src/hw/hooks/useGetLatestAvailableFirmware.ts +90 -0
  546. package/src/load/speculos.ts +2 -0
  547. package/src/mock/fixtures/cryptoCurrencies.ts +88 -0
  548. package/src/operation.ts +6 -0
  549. package/src/platform/converters.test.ts +49 -282
  550. package/src/platform/logic.test.ts +756 -0
  551. package/src/platform/logic.ts +285 -0
  552. package/src/platform/react.ts +6 -0
  553. package/src/platform/tracking.test.ts +6 -7
  554. package/src/platform/tracking.ts +1 -1
  555. package/src/reconciliation.ts +88 -43
  556. package/lib/bot/test.bot.d.ts +0 -2
  557. package/lib/bot/test.bot.d.ts.map +0 -1
  558. package/lib/bot/test.bot.js +0 -62
  559. package/lib/bot/test.bot.js.map +0 -1
  560. package/lib/generated/speculos-deviceActions.d.ts +0 -56
  561. package/lib/generated/speculos-deviceActions.d.ts.map +0 -1
  562. package/lib/generated/speculos-deviceActions.js +0 -42
  563. package/lib/generated/speculos-deviceActions.js.map +0 -1
  564. package/src/bot/test.bot.ts +0 -21
  565. package/src/generated/speculos-deviceActions.ts +0 -37
@@ -0,0 +1,232 @@
1
+ import { renderHook, act } from "@testing-library/react-hooks";
2
+ import { of, throwError } from "rxjs";
3
+ import {
4
+ UserRefusedAllowManager,
5
+ DisconnectedDeviceDuringOperation,
6
+ } from "@ledgerhq/errors";
7
+ import { useGenuineCheck } from "./useGenuineCheck";
8
+ import { getGenuineCheckFromDeviceId } from "../getGenuineCheckFromDeviceId";
9
+
10
+ jest.mock("../getGenuineCheckFromDeviceId");
11
+ jest.useFakeTimers();
12
+
13
+ const mockedGetGenuineCheckFromDeviceId = jest.mocked(
14
+ getGenuineCheckFromDeviceId
15
+ );
16
+
17
+ describe("useGenuineCheck", () => {
18
+ afterEach(() => {
19
+ mockedGetGenuineCheckFromDeviceId.mockClear();
20
+ jest.clearAllTimers();
21
+ });
22
+
23
+ describe("When the genuine check requests for a device permission", () => {
24
+ it("should notify the hook consumer of the request", async () => {
25
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
26
+ of({
27
+ socketEvent: { type: "device-permission-requested", wording: "" },
28
+ deviceIsLocked: false,
29
+ })
30
+ );
31
+ const { result } = renderHook(() =>
32
+ useGenuineCheck({
33
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
34
+ deviceId: "A_DEVICE_ID",
35
+ })
36
+ );
37
+
38
+ await act(async () => {
39
+ jest.advanceTimersByTime(1);
40
+ });
41
+
42
+ expect(result.current.devicePermissionState).toEqual("requested");
43
+ expect(result.current.genuineState).toEqual("unchecked");
44
+ expect(result.current.error).toBeNull();
45
+ });
46
+
47
+ it("should notify the hook consumer if the device permission is granted", async () => {
48
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
49
+ of({
50
+ socketEvent: { type: "device-permission-granted" },
51
+ deviceIsLocked: false,
52
+ })
53
+ );
54
+ const { result } = renderHook(() =>
55
+ useGenuineCheck({
56
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
57
+ deviceId: "A_DEVICE_ID",
58
+ })
59
+ );
60
+
61
+ await act(async () => {
62
+ jest.advanceTimersByTime(1);
63
+ });
64
+
65
+ expect(result.current.devicePermissionState).toEqual("granted");
66
+ expect(result.current.genuineState).toEqual("unchecked");
67
+ expect(result.current.error).toBeNull();
68
+ });
69
+
70
+ it("should notify the hook consumer if the device permission is refused", async () => {
71
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
72
+ throwError(new UserRefusedAllowManager())
73
+ );
74
+ const { result } = renderHook(() =>
75
+ useGenuineCheck({
76
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
77
+ deviceId: "A_DEVICE_ID",
78
+ })
79
+ );
80
+
81
+ await act(async () => {
82
+ jest.advanceTimersByTime(1);
83
+ });
84
+
85
+ expect(result.current.devicePermissionState).toEqual("refused");
86
+ expect(result.current.genuineState).toEqual("unchecked");
87
+ expect(result.current.error).toBeNull();
88
+ });
89
+ });
90
+
91
+ describe("When an error occurred during the genuine check", () => {
92
+ it("should notify the hook consumer that an error occurred", async () => {
93
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
94
+ throwError(new DisconnectedDeviceDuringOperation())
95
+ );
96
+ const { result } = renderHook(() =>
97
+ useGenuineCheck({
98
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
99
+ deviceId: "A_DEVICE_ID",
100
+ })
101
+ );
102
+
103
+ await act(async () => {
104
+ jest.advanceTimersByTime(1);
105
+ });
106
+
107
+ expect(result.current.genuineState).toEqual("unchecked");
108
+ expect(result.current.error).toBeInstanceOf(
109
+ DisconnectedDeviceDuringOperation
110
+ );
111
+ });
112
+ });
113
+
114
+ describe("When the genuine check is completed", () => {
115
+ describe("and it is a success", () => {
116
+ it("should notify the hook consumer of the success", async () => {
117
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
118
+ of({
119
+ socketEvent: { type: "result", payload: "0000" },
120
+ deviceIsLocked: false,
121
+ })
122
+ );
123
+ const { result } = renderHook(() =>
124
+ useGenuineCheck({
125
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
126
+ deviceId: "A_DEVICE_ID",
127
+ })
128
+ );
129
+
130
+ await act(async () => {
131
+ jest.advanceTimersByTime(1);
132
+ });
133
+
134
+ expect(result.current.genuineState).toEqual("genuine");
135
+ expect(result.current.error).toBeNull();
136
+ });
137
+ });
138
+
139
+ describe("and the device is not genuine", () => {
140
+ it("should notify the hook consumer that the device is not genuine", async () => {
141
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
142
+ of({
143
+ socketEvent: { type: "result", payload: "1111" },
144
+ deviceIsLocked: false,
145
+ })
146
+ );
147
+ const { result } = renderHook(() =>
148
+ useGenuineCheck({
149
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
150
+ deviceId: "A_DEVICE_ID",
151
+ })
152
+ );
153
+
154
+ await act(async () => {
155
+ jest.advanceTimersByTime(1);
156
+ });
157
+
158
+ expect(result.current.genuineState).toEqual("non-genuine");
159
+ expect(result.current.error).toBeNull();
160
+ });
161
+ });
162
+ });
163
+
164
+ describe("When the hook consumer requests to reset the genuine check state", () => {
165
+ it("should reset the device permission and genuine states", async () => {
166
+ // In the case of an unsuccessful genuine check
167
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
168
+ of(
169
+ {
170
+ socketEvent: { type: "device-permission-granted" },
171
+ deviceIsLocked: false,
172
+ },
173
+ {
174
+ socketEvent: { type: "result", payload: "1111" },
175
+ deviceIsLocked: false,
176
+ }
177
+ )
178
+ );
179
+
180
+ const { result } = renderHook(() =>
181
+ useGenuineCheck({
182
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
183
+ isHookEnabled: true,
184
+ deviceId: "A_DEVICE_ID",
185
+ })
186
+ );
187
+
188
+ await act(async () => {
189
+ jest.advanceTimersByTime(1);
190
+ });
191
+
192
+ expect(result.current.devicePermissionState).toEqual("granted");
193
+ expect(result.current.genuineState).toEqual("non-genuine");
194
+ expect(result.current.error).toBeNull();
195
+
196
+ // We ask to reset the genuine check state
197
+ await act(async () => {
198
+ result.current.resetGenuineCheckState();
199
+ });
200
+
201
+ expect(result.current.devicePermissionState).toEqual("unrequested");
202
+ expect(result.current.genuineState).toEqual("unchecked");
203
+ expect(result.current.error).toBeNull();
204
+ });
205
+ });
206
+
207
+ describe("When the device is locked before doing a genuine check, and it timed out", () => {
208
+ it("should notify the hook consumer of the need to unlock the device", async () => {
209
+ mockedGetGenuineCheckFromDeviceId.mockReturnValue(
210
+ of({
211
+ socketEvent: null,
212
+ deviceIsLocked: true,
213
+ })
214
+ );
215
+
216
+ const { result } = renderHook(() =>
217
+ useGenuineCheck({
218
+ getGenuineCheckFromDeviceId: mockedGetGenuineCheckFromDeviceId,
219
+ deviceId: "A_DEVICE_ID",
220
+ })
221
+ );
222
+
223
+ await act(async () => {
224
+ jest.advanceTimersByTime(1);
225
+ });
226
+
227
+ expect(result.current.devicePermissionState).toEqual("unlock-needed");
228
+ expect(result.current.genuineState).toEqual("unchecked");
229
+ expect(result.current.error).toBeNull();
230
+ });
231
+ });
232
+ });
@@ -0,0 +1,138 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { UserRefusedAllowManager } from "@ledgerhq/errors";
3
+ import type { DeviceId } from "@ledgerhq/types-live";
4
+ import { getGenuineCheckFromDeviceId as defaultGetGenuineCheckFromDeviceId } from "../getGenuineCheckFromDeviceId";
5
+ import type {
6
+ GetGenuineCheckFromDeviceIdArgs,
7
+ GetGenuineCheckFromDeviceIdResult,
8
+ GetGenuineCheckFromDeviceIdOutput,
9
+ } from "../getGenuineCheckFromDeviceId";
10
+
11
+ export type GenuineState = "unchecked" | "genuine" | "non-genuine";
12
+ export type DevicePermissionState =
13
+ | "unrequested"
14
+ | "unlock-needed"
15
+ | "unlocked"
16
+ | "requested"
17
+ | "granted"
18
+ | "refused";
19
+
20
+ export type UseGenuineCheckArgs = {
21
+ isHookEnabled?: boolean;
22
+ deviceId: DeviceId;
23
+ lockedDeviceTimeoutMs?: number;
24
+ };
25
+
26
+ export type UseGenuineCheckDependencies = {
27
+ getGenuineCheckFromDeviceId?: (
28
+ args: GetGenuineCheckFromDeviceIdArgs
29
+ ) => GetGenuineCheckFromDeviceIdOutput;
30
+ };
31
+
32
+ export type UseGenuineCheckResult = {
33
+ genuineState: GenuineState;
34
+ devicePermissionState: DevicePermissionState;
35
+ error: Error | null;
36
+ resetGenuineCheckState: () => void;
37
+ };
38
+
39
+ const SOCKET_EVENT_PAYLOAD_GENUINE = "0000";
40
+
41
+ /**
42
+ * Hook to check that a device is genuine
43
+ * It replaces a DeviceAction if we're only interested in getting the genuine check
44
+ * @param getGenuineCheckFromDeviceId An optional function to get a genuine check for a given device id,
45
+ * by default set to live-common/hw/getGenuineCheckFromDeviceId.
46
+ * This dependency injection is needed for LLD to have the hook working on the internal thread
47
+ * @param isHookEnabled A boolean to enable (true, default value) or disable (false) the hook
48
+ * @param deviceId A device id, or an empty string if device is usb plugged
49
+ * @param lockedDeviceTimeoutMs Time of no response from device after which the device is considered locked, in ms. Default 1000ms.
50
+ * @returns An object containing:
51
+ * - genuineState: the current GenuineState
52
+ * - devicePermissionState: the current DevicePermissionState
53
+ * - error: any error that occurred during the genuine check, or null
54
+ */
55
+ export const useGenuineCheck = ({
56
+ getGenuineCheckFromDeviceId = defaultGetGenuineCheckFromDeviceId,
57
+ isHookEnabled = true,
58
+ deviceId,
59
+ lockedDeviceTimeoutMs = 1000,
60
+ }: UseGenuineCheckArgs &
61
+ UseGenuineCheckDependencies): UseGenuineCheckResult => {
62
+ const [genuineState, setGenuineState] = useState<GenuineState>("unchecked");
63
+ const [devicePermissionState, setDevicePermissionState] =
64
+ useState<DevicePermissionState>("unrequested");
65
+ const [error, setError] = useState<Error | null>(null);
66
+
67
+ const resetGenuineCheckState = useCallback(() => {
68
+ setDevicePermissionState("unrequested");
69
+ setGenuineState("unchecked");
70
+ }, []);
71
+
72
+ useEffect(() => {
73
+ if (!isHookEnabled) {
74
+ return;
75
+ }
76
+
77
+ const sub = getGenuineCheckFromDeviceId({
78
+ deviceId,
79
+ lockedDeviceTimeoutMs,
80
+ }).subscribe({
81
+ next: ({
82
+ socketEvent,
83
+ deviceIsLocked,
84
+ }: GetGenuineCheckFromDeviceIdResult) => {
85
+ if (socketEvent) {
86
+ switch (socketEvent.type) {
87
+ case "device-permission-requested":
88
+ setDevicePermissionState("requested");
89
+ break;
90
+ case "device-permission-granted":
91
+ setDevicePermissionState("granted");
92
+ break;
93
+ case "result":
94
+ if (socketEvent.payload === SOCKET_EVENT_PAYLOAD_GENUINE) {
95
+ setGenuineState("genuine");
96
+ } else {
97
+ setGenuineState("non-genuine");
98
+ }
99
+ break;
100
+ }
101
+ } else {
102
+ // If no socketEvent, the device is locked or has been unlocked
103
+ if (deviceIsLocked) {
104
+ setDevicePermissionState("unlock-needed");
105
+ } else {
106
+ setDevicePermissionState("unlocked");
107
+ }
108
+ }
109
+ },
110
+ error: (e: any) => {
111
+ if (e instanceof UserRefusedAllowManager) {
112
+ setDevicePermissionState("refused");
113
+ } else if (e instanceof Error) {
114
+ // Probably an error of type DisconnectedDeviceDuringOperation or something else
115
+ setError(e);
116
+ } else {
117
+ setError(new Error(`Unknown error: ${e}`));
118
+ }
119
+ },
120
+ });
121
+
122
+ return () => {
123
+ sub.unsubscribe();
124
+ };
125
+ }, [
126
+ isHookEnabled,
127
+ deviceId,
128
+ lockedDeviceTimeoutMs,
129
+ getGenuineCheckFromDeviceId,
130
+ ]);
131
+
132
+ return {
133
+ genuineState,
134
+ devicePermissionState,
135
+ error,
136
+ resetGenuineCheckState,
137
+ };
138
+ };
@@ -0,0 +1,111 @@
1
+ import { FirmwareUpdateContext } from "@ledgerhq/types-live";
2
+ import { renderHook, act } from "@testing-library/react-hooks";
3
+ import { of } from "rxjs";
4
+ import { getLatestAvailableFirmwareFromDeviceId } from "../getLatestAvailableFirmwareFromDeviceId";
5
+ import { useGetLatestAvailableFirmware } from "./useGetLatestAvailableFirmware";
6
+
7
+ jest.mock("../getLatestAvailableFirmwareFromDeviceId");
8
+ jest.useFakeTimers();
9
+
10
+ const mockedGetLatestAvailableFirmwareFromDeviceId = jest.mocked(
11
+ getLatestAvailableFirmwareFromDeviceId
12
+ );
13
+
14
+ const aLatestFirmwareContext: FirmwareUpdateContext = {
15
+ osu: {
16
+ next_se_firmware_final_version: 1,
17
+ previous_se_firmware_final_version: [],
18
+ id: 0,
19
+ name: "OSU",
20
+ description: null,
21
+ display_name: null,
22
+ notes: null,
23
+ perso: "",
24
+ firmware: "",
25
+ firmware_key: "",
26
+ hash: "",
27
+ date_creation: "",
28
+ date_last_modified: "",
29
+ device_versions: [],
30
+ providers: [],
31
+ },
32
+ final: {
33
+ id: 1,
34
+ name: "FINAL",
35
+ description: null,
36
+ display_name: null,
37
+ notes: null,
38
+ perso: "",
39
+ firmware: "",
40
+ firmware_key: "",
41
+ hash: "",
42
+ date_creation: "",
43
+ date_last_modified: "",
44
+ device_versions: [],
45
+ providers: [],
46
+ version: "",
47
+ se_firmware: 1,
48
+ osu_versions: [],
49
+ mcu_versions: [],
50
+ application_versions: [],
51
+ },
52
+ shouldFlashMCU: false,
53
+ };
54
+
55
+ // TODO: rename into useGetLatestAvailableFirmware ?
56
+ describe("useGetLatestAvailableFirmware", () => {
57
+ afterEach(() => {
58
+ mockedGetLatestAvailableFirmwareFromDeviceId.mockClear();
59
+ jest.clearAllTimers();
60
+ });
61
+
62
+ describe("When no new firmware update is available for a device", () => {
63
+ it("should notify the hook consumer that there is no latest available firmware", async () => {
64
+ mockedGetLatestAvailableFirmwareFromDeviceId.mockReturnValue(
65
+ of({
66
+ firmwareUpdateContext: undefined,
67
+ })
68
+ );
69
+ const { result } = renderHook(() =>
70
+ useGetLatestAvailableFirmware({
71
+ getLatestAvailableFirmwareFromDeviceId:
72
+ mockedGetLatestAvailableFirmwareFromDeviceId,
73
+ deviceId: "A_DEVICE_ID",
74
+ })
75
+ );
76
+
77
+ await act(async () => {
78
+ jest.advanceTimersByTime(1);
79
+ });
80
+
81
+ expect(result.current.status).toEqual("no-available-firmware");
82
+ expect(result.current.error).toBeNull();
83
+ expect(result.current.latestFirmware).toBeNull();
84
+ });
85
+ });
86
+
87
+ describe("When a new firmware update is available for a device", () => {
88
+ it("should notify the hook consumer that there is a new latest available firmware", async () => {
89
+ mockedGetLatestAvailableFirmwareFromDeviceId.mockReturnValue(
90
+ of({
91
+ firmwareUpdateContext: aLatestFirmwareContext,
92
+ })
93
+ );
94
+ const { result } = renderHook(() =>
95
+ useGetLatestAvailableFirmware({
96
+ getLatestAvailableFirmwareFromDeviceId:
97
+ mockedGetLatestAvailableFirmwareFromDeviceId,
98
+ deviceId: "A_DEVICE_ID",
99
+ })
100
+ );
101
+
102
+ await act(async () => {
103
+ jest.advanceTimersByTime(1);
104
+ });
105
+
106
+ expect(result.current.status).toEqual("available-firmware");
107
+ expect(result.current.error).toBeNull();
108
+ expect(result.current.latestFirmware).toEqual(aLatestFirmwareContext);
109
+ });
110
+ });
111
+ });
@@ -0,0 +1,90 @@
1
+ import { useEffect, useState } from "react";
2
+ import type { FirmwareUpdateContext, DeviceId } from "@ledgerhq/types-live";
3
+ import type {
4
+ GetLatestAvailableFirmwareFromDeviceIdArgs,
5
+ GetLatestAvailableFirmwareFromDeviceIdResult,
6
+ GetLatestAvailableFirmwareFromDeviceIdOutput,
7
+ } from "../getLatestAvailableFirmwareFromDeviceId";
8
+ import { getLatestAvailableFirmwareFromDeviceId as defaultGetLatestAvailableFirmwareFromDeviceId } from "../getLatestAvailableFirmwareFromDeviceId";
9
+
10
+ export type FirmwareUpdateGettingStatus =
11
+ | "unchecked"
12
+ | "checking"
13
+ | "no-available-firmware"
14
+ | "available-firmware";
15
+
16
+ export type useGetLatestAvailableFirmwareDependencies = {
17
+ getLatestAvailableFirmwareFromDeviceId?: (
18
+ args: GetLatestAvailableFirmwareFromDeviceIdArgs
19
+ ) => GetLatestAvailableFirmwareFromDeviceIdOutput;
20
+ };
21
+
22
+ export type useGetLatestAvailableFirmwareArgs = {
23
+ isHookEnabled?: boolean;
24
+ deviceId: DeviceId;
25
+ };
26
+
27
+ export type useGetLatestAvailableFirmwareResult = {
28
+ latestFirmware: FirmwareUpdateContext | null;
29
+ status: FirmwareUpdateGettingStatus;
30
+ error: Error | null;
31
+ };
32
+
33
+ /**
34
+ * Hook to get the latest available firmware for a device
35
+ * @param getLatestAvailableFirmwareFromDeviceId An optional function to get the latest available firmware
36
+ * for a given device id, by default set to live-common/hw/getLatestAvailableFirmwareFromDeviceId.
37
+ * This dependency injection is needed for LLD to have the hook working on the internal thread
38
+ * @param isHookEnabled A boolean to enable (true, default value) or disable (false) the hook
39
+ * @param deviceId A device id, or an empty string if device is usb plugged
40
+ * @returns An object containing:
41
+ * - latestFirmware A FirmwareUpdateContext if found, or null if still processing or no available firmware update
42
+ * - status A FirmwareUpdateGettingStatus to notify consumer on the hook state
43
+ * - error: any error that occurred during the process, or null
44
+ */
45
+ export const useGetLatestAvailableFirmware = ({
46
+ getLatestAvailableFirmwareFromDeviceId = defaultGetLatestAvailableFirmwareFromDeviceId,
47
+ isHookEnabled = true,
48
+ deviceId,
49
+ }: useGetLatestAvailableFirmwareArgs &
50
+ useGetLatestAvailableFirmwareDependencies): useGetLatestAvailableFirmwareResult => {
51
+ const [latestFirmware, setLatestFirmware] =
52
+ useState<FirmwareUpdateContext | null>(null);
53
+ const [error, setError] = useState<Error | null>(null);
54
+ const [status, setStatus] =
55
+ useState<FirmwareUpdateGettingStatus>("unchecked");
56
+
57
+ useEffect(() => {
58
+ if (!isHookEnabled) {
59
+ return;
60
+ }
61
+ setStatus("checking");
62
+
63
+ const sub = getLatestAvailableFirmwareFromDeviceId({ deviceId }).subscribe({
64
+ next: ({
65
+ firmwareUpdateContext,
66
+ }: GetLatestAvailableFirmwareFromDeviceIdResult) => {
67
+ if (!firmwareUpdateContext) {
68
+ setLatestFirmware(null);
69
+ setStatus("no-available-firmware");
70
+ } else {
71
+ setLatestFirmware(firmwareUpdateContext);
72
+ setStatus("available-firmware");
73
+ }
74
+ },
75
+ error: (e: any) => {
76
+ if (e instanceof Error) {
77
+ setError(e);
78
+ } else {
79
+ setError(new Error(`Unknown error: ${e}`));
80
+ }
81
+ },
82
+ });
83
+
84
+ return () => {
85
+ sub.unsubscribe();
86
+ };
87
+ }, [deviceId, getLatestAvailableFirmwareFromDeviceId, isHookEnabled]);
88
+
89
+ return { latestFirmware, error, status };
90
+ };
@@ -49,6 +49,7 @@ export async function createSpeculosDevice(
49
49
  ): Promise<{
50
50
  transport: SpeculosTransport;
51
51
  id: string;
52
+ appPath: string;
52
53
  }> {
53
54
  const { model, firmware, appName, appVersion, seed, coinapps, dependency } =
54
55
  arg;
@@ -202,6 +203,7 @@ export async function createSpeculosDevice(
202
203
  return {
203
204
  id: speculosID,
204
205
  transport,
206
+ appPath,
205
207
  };
206
208
  }
207
209
  export type AppCandidate = {
@@ -0,0 +1,88 @@
1
+ import BigNumber from "bignumber.js";
2
+ import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
3
+ import type { Account } from "@ledgerhq/types-live";
4
+ import { cryptocurrenciesById } from "@ledgerhq/cryptoassets";
5
+
6
+ export function createFixtureCryptoCurrency(family: string): CryptoCurrency {
7
+ return {
8
+ type: "CryptoCurrency",
9
+ id: "testCoinId",
10
+ coinType: 8008,
11
+ name: "MyCoin",
12
+ managerAppName: "MyCoin",
13
+ ticker: "MYC",
14
+ countervalueTicker: "MYC",
15
+ scheme: "mycoin",
16
+ color: "#ff0000",
17
+ family,
18
+ units: [
19
+ {
20
+ name: "MYC",
21
+ code: "MYC",
22
+ magnitude: 8,
23
+ },
24
+ {
25
+ name: "SmallestUnit",
26
+ code: "SMALLESTUNIT",
27
+ magnitude: 0,
28
+ },
29
+ ],
30
+ explorerViews: [
31
+ {
32
+ address: "https://mycoinexplorer.com/account/$address",
33
+ tx: "https://mycoinexplorer.com/transaction/$hash",
34
+ token: "https://mycoinexplorer.com/token/$contractAddress/?a=$address",
35
+ },
36
+ ],
37
+ };
38
+ }
39
+
40
+ const defaultEthCryptoFamily = cryptocurrenciesById["ethereum"];
41
+
42
+ export function createFixtureAccount(
43
+ id = "00",
44
+ currency: CryptoCurrency = defaultEthCryptoFamily
45
+ ): Account {
46
+ return {
47
+ type: "Account",
48
+ id: `ethereumjs:2:ethereum:0x0${id}:`,
49
+ seedIdentifier: "0x01",
50
+ derivationMode: "ethM",
51
+ index: 0,
52
+ freshAddress: "0x01",
53
+ freshAddressPath: "44'/60'/0'/0/0",
54
+ freshAddresses: [],
55
+ name: "Ethereum 1",
56
+ starred: false,
57
+ used: false,
58
+ balance: new BigNumber("51281813126095913"),
59
+ spendableBalance: new BigNumber("51281813126095913"),
60
+ creationDate: new Date(),
61
+ blockHeight: 8168983,
62
+ currency,
63
+ unit: {
64
+ name: "satoshi",
65
+ code: "BTC",
66
+ magnitude: 5,
67
+ },
68
+ operationsCount: 0,
69
+ operations: [],
70
+ pendingOperations: [],
71
+ lastSyncDate: new Date(),
72
+ balanceHistoryCache: {
73
+ HOUR: {
74
+ balances: [],
75
+ latestDate: undefined,
76
+ },
77
+ DAY: {
78
+ balances: [],
79
+ latestDate: undefined,
80
+ },
81
+ WEEK: {
82
+ balances: [],
83
+ latestDate: undefined,
84
+ },
85
+ },
86
+ swapHistory: [],
87
+ };
88
+ }
package/src/operation.ts CHANGED
@@ -178,6 +178,7 @@ export function getOperationAmountNumber(op: Operation): BigNumber {
178
178
  case "REWARD":
179
179
  case "REWARD_PAYOUT":
180
180
  case "SUPPLY":
181
+ case "WITHDRAW":
181
182
  return op.value;
182
183
 
183
184
  case "OUT":
@@ -191,6 +192,7 @@ export function getOperationAmountNumber(op: Operation): BigNumber {
191
192
  case "OPT_OUT":
192
193
  case "REDEEM":
193
194
  case "SLASH":
195
+ case "LOCK":
194
196
  return op.value.negated();
195
197
 
196
198
  case "FREEZE":
@@ -202,6 +204,10 @@ export function getOperationAmountNumber(op: Operation): BigNumber {
202
204
  case "SET_CONTROLLER":
203
205
  case "NOMINATE":
204
206
  case "CHILL":
207
+ case "REVOKE":
208
+ case "APPROVE":
209
+ case "ACTIVATE":
210
+ case "UNLOCK":
205
211
  return op.fee.negated();
206
212
 
207
213
  default: