@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,756 @@
1
+ import {
2
+ broadcastTransactionLogic,
3
+ completeExchangeLogic,
4
+ receiveOnAccountLogic,
5
+ signMessageLogic,
6
+ WebPlatformContext,
7
+ } from "./logic";
8
+
9
+ import { AppManifest } from "./types";
10
+ import {
11
+ createFixtureAccount,
12
+ createFixtureCryptoCurrency,
13
+ } from "../mock/fixtures/cryptoCurrencies";
14
+ import {
15
+ OperationType,
16
+ SignedOperation,
17
+ SignedOperationRaw,
18
+ TokenAccount,
19
+ } from "@ledgerhq/types-live";
20
+ import BigNumber from "bignumber.js";
21
+
22
+ import * as converters from "./converters";
23
+ import * as serializers from "./serializers";
24
+ import * as signMessage from "../hw/signMessage/index";
25
+ import { DerivationMode } from "../derivation";
26
+ import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
27
+ import { RawPlatformTransaction } from "./rawTypes";
28
+ import { setSupportedCurrencies } from "../currencies";
29
+ import { Transaction as EthereumTransaction } from "../families/ethereum/types";
30
+
31
+ describe("receiveOnAccountLogic", () => {
32
+ // Given
33
+ const mockPlatformReceiveRequested = jest.fn();
34
+ const mockPlatformReceiveFail = jest.fn();
35
+ const context = createContextContainingAccountId(
36
+ {
37
+ platformReceiveRequested: mockPlatformReceiveRequested,
38
+ platformReceiveFail: mockPlatformReceiveFail,
39
+ },
40
+ "11",
41
+ "12"
42
+ );
43
+ const uiNavigation = jest.fn();
44
+
45
+ beforeEach(() => {
46
+ mockPlatformReceiveRequested.mockClear();
47
+ mockPlatformReceiveFail.mockClear();
48
+ uiNavigation.mockClear();
49
+ });
50
+
51
+ describe("when nominal case", () => {
52
+ // Given
53
+ const accountId = "ethereumjs:2:ethereum:0x012:";
54
+ const expectedResult = "Function called";
55
+
56
+ beforeEach(() => uiNavigation.mockResolvedValueOnce(expectedResult));
57
+
58
+ it("calls uiNavigation callback with an accountAddress", async () => {
59
+ // Given
60
+ const convertedAccount = {
61
+ ...createPlatformAccount(),
62
+ address: "Converted address",
63
+ };
64
+ jest
65
+ .spyOn(converters, "accountToPlatformAccount")
66
+ .mockReturnValueOnce(convertedAccount);
67
+
68
+ // When
69
+ const result = await receiveOnAccountLogic(
70
+ context,
71
+ accountId,
72
+ uiNavigation
73
+ );
74
+
75
+ // Then
76
+ expect(uiNavigation).toBeCalledTimes(1);
77
+ expect(uiNavigation.mock.calls[0][2]).toEqual("Converted address");
78
+ expect(result).toEqual(expectedResult);
79
+ });
80
+
81
+ it("calls the tracking for success", async () => {
82
+ // When
83
+ await receiveOnAccountLogic(context, accountId, uiNavigation);
84
+
85
+ // Then
86
+ expect(mockPlatformReceiveRequested).toBeCalledTimes(1);
87
+ expect(mockPlatformReceiveFail).toBeCalledTimes(0);
88
+ });
89
+ });
90
+
91
+ describe("when account cannot be found", () => {
92
+ // Given
93
+ const nonFoundAccountId = "ethereumjs:2:ethereum:0x010:";
94
+
95
+ it("returns an error", async () => {
96
+ // When
97
+ await expect(async () => {
98
+ await receiveOnAccountLogic(context, nonFoundAccountId, uiNavigation);
99
+ }).rejects.toThrowError("Account required");
100
+
101
+ // Then
102
+ expect(uiNavigation).toBeCalledTimes(0);
103
+ });
104
+
105
+ it("calls the tracking for error", async () => {
106
+ // When
107
+ await expect(async () => {
108
+ await receiveOnAccountLogic(context, nonFoundAccountId, uiNavigation);
109
+ }).rejects.toThrow();
110
+
111
+ // Then
112
+ expect(mockPlatformReceiveRequested).toBeCalledTimes(1);
113
+ expect(mockPlatformReceiveFail).toBeCalledTimes(1);
114
+ });
115
+ });
116
+ });
117
+
118
+ describe("completeExchangeLogic", () => {
119
+ // Given
120
+ const mockPlatformCompleteExchangeRequested = jest.fn();
121
+ const context = createContextContainingAccountId(
122
+ {
123
+ platformCompleteExchangeRequested: mockPlatformCompleteExchangeRequested,
124
+ },
125
+ "11",
126
+ "12"
127
+ );
128
+ const uiNavigation = jest.fn();
129
+
130
+ beforeAll(() => {
131
+ setSupportedCurrencies(["bitcoin", "ethereum"]);
132
+ });
133
+ afterAll(() => {
134
+ setSupportedCurrencies([]);
135
+ });
136
+
137
+ beforeEach(() => {
138
+ mockPlatformCompleteExchangeRequested.mockClear();
139
+ uiNavigation.mockClear();
140
+ });
141
+
142
+ describe("when nominal case", () => {
143
+ // Given
144
+ const expectedResult = "Function called";
145
+
146
+ beforeEach(() => uiNavigation.mockResolvedValueOnce(expectedResult));
147
+
148
+ it("calls uiNavigation callback", async () => {
149
+ // Given
150
+ const fromAccount = createFixtureAccount("17");
151
+ context.accounts = [...context.accounts, fromAccount];
152
+ const rawPlatformTransaction = createRawEtherumTransaction();
153
+ const completeExchangeRequest = {
154
+ provider: "provider",
155
+ fromAccountId: "ethereumjs:2:ethereum:0x017:",
156
+ toAccountId: "ethereumjs:2:ethereum:0x042:",
157
+ transaction: rawPlatformTransaction,
158
+ binaryPayload: "binaryPayload",
159
+ signature: "signature",
160
+ feesStrategy: "medium",
161
+ exchangeType: 8,
162
+ };
163
+
164
+ const expectedTransaction: EthereumTransaction = {
165
+ family: "ethereum",
166
+ amount: new BigNumber("1000000000"),
167
+ recipient: "0x0123456",
168
+ nonce: 8,
169
+ data: Buffer.from("Some data...", "hex"),
170
+ gasPrice: new BigNumber("700000"),
171
+ userGasLimit: new BigNumber("1200000"),
172
+ feesStrategy: "medium",
173
+ estimatedGasLimit: null,
174
+ feeCustomUnit: { name: "Gwei", code: "Gwei", magnitude: 9 },
175
+ mode: "send",
176
+ networkInfo: null,
177
+ useAllAmount: false,
178
+ };
179
+
180
+ // When
181
+ const result = await completeExchangeLogic(
182
+ context,
183
+ completeExchangeRequest,
184
+ uiNavigation
185
+ );
186
+
187
+ // Then
188
+ expect(uiNavigation).toBeCalledTimes(1);
189
+ expect(uiNavigation.mock.calls[0][0]).toEqual({
190
+ provider: "provider",
191
+ exchange: {
192
+ fromAccount,
193
+ fromParentAccount: null,
194
+ toAccount: undefined,
195
+ toParentAccount: null,
196
+ },
197
+ transaction: expectedTransaction,
198
+ binaryPayload: "binaryPayload",
199
+ signature: "signature",
200
+ feesStrategy: "medium",
201
+ exchangeType: 8,
202
+ });
203
+ expect(result).toEqual(expectedResult);
204
+ });
205
+
206
+ it.each(["slow", "medium", "fast", "custom"])(
207
+ "calls uiNavigation with a transaction that has the %s feeStrategy",
208
+ async (expectedFeeStrategy) => {
209
+ // Given
210
+ const fromAccount = createFixtureAccount("17");
211
+ context.accounts = [...context.accounts, fromAccount];
212
+ const rawPlatformTransaction = createRawEtherumTransaction();
213
+ const completeExchangeRequest = {
214
+ provider: "provider",
215
+ fromAccountId: "ethereumjs:2:ethereum:0x017:",
216
+ toAccountId: "ethereumjs:2:ethereum:0x042:",
217
+ transaction: rawPlatformTransaction,
218
+ binaryPayload: "binaryPayload",
219
+ signature: "signature",
220
+ feesStrategy: expectedFeeStrategy,
221
+ exchangeType: 8,
222
+ };
223
+
224
+ // When
225
+ await completeExchangeLogic(
226
+ context,
227
+ completeExchangeRequest,
228
+ uiNavigation
229
+ );
230
+
231
+ // Then
232
+ expect(uiNavigation).toBeCalledTimes(1);
233
+ expect(
234
+ uiNavigation.mock.calls[0][0]["transaction"].feesStrategy
235
+ ).toEqual(expectedFeeStrategy);
236
+ }
237
+ );
238
+
239
+ it("calls the tracking for success", async () => {
240
+ // Given
241
+ const completeExchangeRequest = {
242
+ provider: "provider",
243
+ fromAccountId: "ethereumjs:2:ethereum:0x012:",
244
+ toAccountId: "ethereumjs:2:ethereum:0x042:",
245
+ transaction: createRawEtherumTransaction(),
246
+ binaryPayload: "binaryPayload",
247
+ signature: "signature",
248
+ feesStrategy: "feeStrategy",
249
+ exchangeType: 8,
250
+ };
251
+
252
+ // When
253
+ await completeExchangeLogic(
254
+ context,
255
+ completeExchangeRequest,
256
+ uiNavigation
257
+ );
258
+
259
+ // Then
260
+ expect(mockPlatformCompleteExchangeRequested).toBeCalledTimes(1);
261
+ });
262
+ });
263
+
264
+ describe("when Account is from a different family than the transaction", () => {
265
+ // Given
266
+ const expectedResult = "Function called";
267
+
268
+ beforeEach(() => uiNavigation.mockResolvedValueOnce(expectedResult));
269
+
270
+ it("returns an error", async () => {
271
+ // Given
272
+ const fromAccount = createFixtureAccount("17");
273
+ context.accounts = [...context.accounts, fromAccount];
274
+ const rawPlatformTransaction = createRawBitcoinTransaction();
275
+ const completeExchangeRequest = {
276
+ provider: "provider",
277
+ fromAccountId: "ethereumjs:2:ethereum:0x017:",
278
+ toAccountId: "ethereumjs:2:ethereum:0x042:",
279
+ transaction: rawPlatformTransaction,
280
+ binaryPayload: "binaryPayload",
281
+ signature: "signature",
282
+ feesStrategy: "feeStrategy",
283
+ exchangeType: 8,
284
+ };
285
+
286
+ // When
287
+ await expect(async () => {
288
+ await completeExchangeLogic(
289
+ context,
290
+ completeExchangeRequest,
291
+ uiNavigation
292
+ );
293
+ }).rejects.toThrowError(
294
+ "Account and transaction must be from the same family"
295
+ );
296
+
297
+ // Then
298
+ expect(uiNavigation).toBeCalledTimes(0);
299
+ });
300
+ });
301
+ });
302
+
303
+ describe("broadcastTransactionLogic", () => {
304
+ // Given
305
+ const mockplatformBroadcastFail = jest.fn();
306
+ const context = createContextContainingAccountId(
307
+ {
308
+ platformBroadcastFail: mockplatformBroadcastFail,
309
+ },
310
+ "11",
311
+ "12"
312
+ );
313
+ const uiNavigation = jest.fn();
314
+
315
+ beforeEach(() => {
316
+ mockplatformBroadcastFail.mockClear();
317
+ uiNavigation.mockClear();
318
+ });
319
+
320
+ describe("when nominal case", () => {
321
+ // Given
322
+ const accountId = "ethereumjs:2:ethereum:0x012:";
323
+ const rawSignedTransaction = createSignedOperationRaw();
324
+
325
+ it("calls uiNavigation callback with a signedOperation", async () => {
326
+ // Given
327
+ const expectedResult = "Function called";
328
+ const signedOperation = createSignedOperation();
329
+ jest
330
+ .spyOn(serializers, "deserializePlatformSignedTransaction")
331
+ .mockReturnValueOnce(signedOperation);
332
+ uiNavigation.mockResolvedValueOnce(expectedResult);
333
+
334
+ // When
335
+ const result = await broadcastTransactionLogic(
336
+ context,
337
+ accountId,
338
+ rawSignedTransaction,
339
+ uiNavigation
340
+ );
341
+
342
+ // Then
343
+ expect(uiNavigation).toBeCalledTimes(1);
344
+ expect(uiNavigation.mock.calls[0][2]).toEqual(signedOperation);
345
+ expect(result).toEqual(expectedResult);
346
+ });
347
+
348
+ it("calls the tracking for success", async () => {
349
+ // When
350
+ await broadcastTransactionLogic(
351
+ context,
352
+ accountId,
353
+ rawSignedTransaction,
354
+ uiNavigation
355
+ );
356
+
357
+ // Then
358
+ expect(mockplatformBroadcastFail).toBeCalledTimes(0);
359
+ });
360
+ });
361
+
362
+ describe("when account cannot be found", () => {
363
+ // Given
364
+ const nonFoundAccountId = "ethereumjs:2:ethereum:0x010:";
365
+ const rawSignedTransaction = createSignedOperationRaw();
366
+
367
+ it("returns an error", async () => {
368
+ // Given
369
+ const expectedResult = "Function called";
370
+ const signedOperation = createSignedOperation();
371
+ jest
372
+ .spyOn(serializers, "deserializePlatformSignedTransaction")
373
+ .mockReturnValueOnce(signedOperation);
374
+ uiNavigation.mockResolvedValueOnce(expectedResult);
375
+
376
+ // When
377
+ await expect(async () => {
378
+ await broadcastTransactionLogic(
379
+ context,
380
+ nonFoundAccountId,
381
+ rawSignedTransaction,
382
+ uiNavigation
383
+ );
384
+ }).rejects.toThrowError("Account required");
385
+
386
+ // Then
387
+ expect(uiNavigation).toBeCalledTimes(0);
388
+ });
389
+
390
+ it("calls the tracking for error", async () => {
391
+ // When
392
+ await expect(async () => {
393
+ await broadcastTransactionLogic(
394
+ context,
395
+ nonFoundAccountId,
396
+ rawSignedTransaction,
397
+ uiNavigation
398
+ );
399
+ }).rejects.toThrow();
400
+
401
+ // Then
402
+ expect(mockplatformBroadcastFail).toBeCalledTimes(1);
403
+ });
404
+ });
405
+ });
406
+
407
+ describe("signMessageLogic", () => {
408
+ // Given
409
+ const mockPlatformSignMessageRequested = jest.fn();
410
+ const mockPlatformSignMessageFail = jest.fn();
411
+ const context = createContextContainingAccountId(
412
+ {
413
+ platformSignMessageRequested: mockPlatformSignMessageRequested,
414
+ platformSignMessageFail: mockPlatformSignMessageFail,
415
+ },
416
+ "11",
417
+ "12"
418
+ );
419
+ const uiNavigation = jest.fn();
420
+
421
+ beforeEach(() => {
422
+ mockPlatformSignMessageRequested.mockClear();
423
+ mockPlatformSignMessageFail.mockClear();
424
+ uiNavigation.mockClear();
425
+ });
426
+
427
+ describe("when nominal case", () => {
428
+ // Given
429
+ const accountId = "ethereumjs:2:ethereum:0x012:";
430
+ const messageToSign = "Message to sign";
431
+ const spyPrepareMessageToSign = jest.spyOn(
432
+ signMessage,
433
+ "prepareMessageToSign"
434
+ );
435
+
436
+ beforeEach(() => spyPrepareMessageToSign.mockClear());
437
+
438
+ it("calls uiNavigation callback with a signedOperation", async () => {
439
+ // Given
440
+ const expectedResult = "Function called";
441
+ const formattedMessage = createMessageData();
442
+ spyPrepareMessageToSign.mockReturnValueOnce(formattedMessage);
443
+ uiNavigation.mockResolvedValueOnce(expectedResult);
444
+
445
+ // When
446
+ const result = await signMessageLogic(
447
+ context,
448
+ accountId,
449
+ messageToSign,
450
+ uiNavigation
451
+ );
452
+
453
+ // Then
454
+ expect(uiNavigation).toBeCalledTimes(1);
455
+ expect(uiNavigation.mock.calls[0][1]).toEqual(formattedMessage);
456
+ expect(result).toEqual(expectedResult);
457
+ });
458
+
459
+ it("calls the tracking for success", async () => {
460
+ // When
461
+ await signMessageLogic(context, accountId, messageToSign, uiNavigation);
462
+
463
+ // Then
464
+ expect(mockPlatformSignMessageRequested).toBeCalledTimes(1);
465
+ expect(mockPlatformSignMessageFail).toBeCalledTimes(0);
466
+ });
467
+ });
468
+
469
+ describe("when account cannot be found", () => {
470
+ // Given
471
+ const nonFoundAccountId = "ethereumjs:2:ethereum:0x010:";
472
+ const messageToSign = "Message to sign";
473
+
474
+ it("returns an error", async () => {
475
+ // When
476
+ await expect(async () => {
477
+ await signMessageLogic(
478
+ context,
479
+ nonFoundAccountId,
480
+ messageToSign,
481
+ uiNavigation
482
+ );
483
+ }).rejects.toThrowError("account not found");
484
+
485
+ // Then
486
+ expect(uiNavigation).toBeCalledTimes(0);
487
+ });
488
+
489
+ it("calls the tracking for error", async () => {
490
+ // When
491
+ await expect(async () => {
492
+ await signMessageLogic(
493
+ context,
494
+ nonFoundAccountId,
495
+ messageToSign,
496
+ uiNavigation
497
+ );
498
+ }).rejects.toThrow();
499
+
500
+ // Then
501
+ expect(mockPlatformSignMessageRequested).toBeCalledTimes(1);
502
+ expect(mockPlatformSignMessageFail).toBeCalledTimes(1);
503
+ });
504
+ });
505
+
506
+ describe("when account found is not of type 'Account'", () => {
507
+ // Given
508
+ const tokenAccountId = "15";
509
+ const messageToSign = "Message to sign";
510
+ context.accounts = [
511
+ createTokenAccount(tokenAccountId),
512
+ ...context.accounts,
513
+ ];
514
+
515
+ it("returns an error", async () => {
516
+ // When
517
+ await expect(async () => {
518
+ await signMessageLogic(
519
+ context,
520
+ tokenAccountId,
521
+ messageToSign,
522
+ uiNavigation
523
+ );
524
+ }).rejects.toThrowError("account provided should be the main one");
525
+
526
+ // Then
527
+ expect(uiNavigation).toBeCalledTimes(0);
528
+ });
529
+
530
+ it("calls the tracking for error", async () => {
531
+ // When
532
+ await expect(async () => {
533
+ await signMessageLogic(
534
+ context,
535
+ tokenAccountId,
536
+ messageToSign,
537
+ uiNavigation
538
+ );
539
+ }).rejects.toThrow();
540
+
541
+ // Then
542
+ expect(mockPlatformSignMessageRequested).toBeCalledTimes(1);
543
+ expect(mockPlatformSignMessageFail).toBeCalledTimes(1);
544
+ });
545
+ });
546
+
547
+ describe("when inner call prepareMessageToSign raise an error", () => {
548
+ // Given
549
+ const accountId = "ethereumjs:2:ethereum:0x012:";
550
+ const messageToSign = "Message to sign";
551
+ const spyPrepareMessageToSign = jest.spyOn(
552
+ signMessage,
553
+ "prepareMessageToSign"
554
+ );
555
+
556
+ beforeEach(() => spyPrepareMessageToSign.mockClear());
557
+
558
+ it("returns an error", async () => {
559
+ // Given
560
+ spyPrepareMessageToSign.mockImplementationOnce(() => {
561
+ throw new Error("Some error");
562
+ });
563
+
564
+ // When
565
+ await expect(async () => {
566
+ await signMessageLogic(context, accountId, messageToSign, uiNavigation);
567
+ }).rejects.toThrowError("Some error");
568
+
569
+ // Then
570
+ expect(uiNavigation).toBeCalledTimes(0);
571
+ });
572
+
573
+ it("calls the tracking for error", async () => {
574
+ // Given
575
+ spyPrepareMessageToSign.mockImplementationOnce(() => {
576
+ throw new Error("Some error");
577
+ });
578
+
579
+ // When
580
+ await expect(async () => {
581
+ await signMessageLogic(context, accountId, messageToSign, uiNavigation);
582
+ }).rejects.toThrow();
583
+
584
+ // Then
585
+ expect(mockPlatformSignMessageRequested).toBeCalledTimes(1);
586
+ expect(mockPlatformSignMessageFail).toBeCalledTimes(1);
587
+ });
588
+ });
589
+ });
590
+
591
+ function createAppManifest(id = "1"): AppManifest {
592
+ return {
593
+ id,
594
+ private: false,
595
+ name: "New App Manifest",
596
+ url: "https://www.ledger.com",
597
+ homepageUrl: "https://www.ledger.com",
598
+ supportUrl: "https://www.ledger.com",
599
+ icon: null,
600
+ platform: "all",
601
+ apiVersion: "1.0.0",
602
+ manifestVersion: "1.0.0",
603
+ branch: "debug",
604
+ params: undefined,
605
+ categories: [],
606
+ currencies: "*",
607
+ content: {
608
+ shortDescription: {
609
+ en: "short description",
610
+ },
611
+ description: {
612
+ en: "description",
613
+ },
614
+ },
615
+ permissions: [],
616
+ domains: [],
617
+ };
618
+ }
619
+
620
+ function createContextContainingAccountId(
621
+ tracking: Record<string, jest.Mock>,
622
+ ...accountIds: string[]
623
+ ): WebPlatformContext {
624
+ return {
625
+ manifest: createAppManifest(),
626
+ accounts: [
627
+ ...accountIds.map((val) => createFixtureAccount(val)),
628
+ createFixtureAccount(),
629
+ ],
630
+ tracking,
631
+ };
632
+ }
633
+
634
+ function createSignedOperation(): SignedOperation {
635
+ const operation = {
636
+ id: "42",
637
+ hash: "hashed",
638
+ type: "IN" as OperationType,
639
+ value: new BigNumber(0),
640
+ fee: new BigNumber(0),
641
+ senders: [],
642
+ recipients: [],
643
+ blockHeight: null,
644
+ blockHash: null,
645
+ accountId: "14",
646
+ date: new Date(),
647
+ extra: {},
648
+ };
649
+ return {
650
+ operation,
651
+ signature: "Signature",
652
+ expirationDate: null,
653
+ };
654
+ }
655
+
656
+ function createSignedOperationRaw(): SignedOperationRaw {
657
+ const rawOperation = {
658
+ id: "12",
659
+ hash: "123456",
660
+ type: "CREATE" as OperationType,
661
+ value: "0",
662
+ fee: "0",
663
+ senders: [],
664
+ recipients: [],
665
+ blockHeight: null,
666
+ blockHash: null,
667
+ accountId: "12",
668
+ date: "01/01/1970",
669
+ extra: {},
670
+ };
671
+ return {
672
+ operation: rawOperation,
673
+ signature: "Signature",
674
+ expirationDate: null,
675
+ };
676
+ }
677
+
678
+ function createPlatformAccount() {
679
+ return {
680
+ id: "12",
681
+ name: "",
682
+ address: "",
683
+ currency: "",
684
+ balance: new BigNumber(0),
685
+ spendableBalance: new BigNumber(0),
686
+ blockHeight: 0,
687
+ lastSyncDate: new Date(),
688
+ };
689
+ }
690
+
691
+ function createMessageData() {
692
+ return {
693
+ currency: createFixtureCryptoCurrency("eth"),
694
+ path: "path",
695
+ derivationMode: "ethM" as DerivationMode,
696
+ message: "default message",
697
+ rawMessage: "raw default message",
698
+ };
699
+ }
700
+
701
+ function createTokenAccount(id = "32"): TokenAccount {
702
+ return {
703
+ type: "TokenAccount",
704
+ id,
705
+ parentId: "whatever",
706
+ token: createTokenCurrency(),
707
+ balance: new BigNumber(0),
708
+ spendableBalance: new BigNumber(0),
709
+ creationDate: new Date(),
710
+ operationsCount: 0,
711
+ operations: [],
712
+ pendingOperations: [],
713
+ starred: false,
714
+ balanceHistoryCache: {
715
+ WEEK: { latestDate: null, balances: [] },
716
+ HOUR: { latestDate: null, balances: [] },
717
+ DAY: { latestDate: null, balances: [] },
718
+ },
719
+ swapHistory: [],
720
+ };
721
+ }
722
+
723
+ function createTokenCurrency(): TokenCurrency {
724
+ return {
725
+ type: "TokenCurrency",
726
+ id: "3",
727
+ contractAddress: "",
728
+ parentCurrency: createFixtureCryptoCurrency("eth"),
729
+ tokenType: "",
730
+ //-- CurrencyCommon
731
+ name: "",
732
+ ticker: "",
733
+ units: [],
734
+ };
735
+ }
736
+
737
+ function createRawEtherumTransaction(): RawPlatformTransaction {
738
+ return {
739
+ family: "ethereum" as any,
740
+ amount: "1000000000",
741
+ recipient: "0x0123456",
742
+ nonce: 8,
743
+ data: "Some data...",
744
+ gasPrice: "700000",
745
+ gasLimit: "1200000",
746
+ };
747
+ }
748
+
749
+ function createRawBitcoinTransaction(): RawPlatformTransaction {
750
+ return {
751
+ family: "bitcoin" as any,
752
+ amount: "1000000000",
753
+ recipient: "0x0123456",
754
+ feePerByte: "900000",
755
+ };
756
+ }