@ledgerhq/live-common 27.0.0 → 27.0.1-next.0

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 (405) 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.map +1 -1
  11. package/lib/account/serialization.js +83 -40
  12. package/lib/account/serialization.js.map +1 -1
  13. package/lib/bot/bot-test-context.d.ts +3 -0
  14. package/lib/bot/bot-test-context.d.ts.map +1 -0
  15. package/lib/bot/bot-test-context.js +26 -0
  16. package/lib/bot/bot-test-context.js.map +1 -0
  17. package/lib/bot/bot-test-context.test.d.ts +2 -0
  18. package/lib/bot/bot-test-context.test.d.ts.map +1 -0
  19. package/lib/bot/bot-test-context.test.js +41 -0
  20. package/lib/bot/bot-test-context.test.js.map +1 -0
  21. package/lib/bot/cli.d.ts +2 -0
  22. package/lib/bot/cli.d.ts.map +1 -0
  23. package/lib/bot/cli.js +14 -0
  24. package/lib/bot/cli.js.map +1 -0
  25. package/lib/bot/engine.d.ts +5 -5
  26. package/lib/bot/engine.d.ts.map +1 -1
  27. package/lib/bot/engine.js +161 -112
  28. package/lib/bot/engine.js.map +1 -1
  29. package/lib/bot/formatters.d.ts +2 -2
  30. package/lib/bot/formatters.d.ts.map +1 -1
  31. package/lib/bot/formatters.js +41 -15
  32. package/lib/bot/formatters.js.map +1 -1
  33. package/lib/bot/index.d.ts +1 -1
  34. package/lib/bot/index.d.ts.map +1 -1
  35. package/lib/bot/index.js +90 -15
  36. package/lib/bot/index.js.map +1 -1
  37. package/lib/bot/specs.d.ts +2 -1
  38. package/lib/bot/specs.d.ts.map +1 -1
  39. package/lib/bot/specs.js +13 -9
  40. package/lib/bot/specs.js.map +1 -1
  41. package/lib/bot/types.d.ts +5 -2
  42. package/lib/bot/types.d.ts.map +1 -1
  43. package/lib/countervalues/logic.integration.test.js +65 -0
  44. package/lib/countervalues/logic.integration.test.js.map +1 -1
  45. package/lib/countervalues/modules/weth.d.ts.map +1 -1
  46. package/lib/countervalues/modules/weth.js +5 -10
  47. package/lib/countervalues/modules/weth.js.map +1 -1
  48. package/lib/currencies/sortByMarketcap.d.ts +0 -2
  49. package/lib/currencies/sortByMarketcap.d.ts.map +1 -1
  50. package/lib/currencies/sortByMarketcap.js +3 -17
  51. package/lib/currencies/sortByMarketcap.js.map +1 -1
  52. package/lib/currencies/sortByMarketcap.test.js +0 -5
  53. package/lib/currencies/sortByMarketcap.test.js.map +1 -1
  54. package/lib/env.js +1 -1
  55. package/lib/families/algorand/specs.d.ts.map +1 -1
  56. package/lib/families/algorand/specs.js +18 -10
  57. package/lib/families/algorand/specs.js.map +1 -1
  58. package/lib/families/algorand/speculos-deviceActions.d.ts +1 -4
  59. package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
  60. package/lib/families/algorand/speculos-deviceActions.js +25 -8
  61. package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
  62. package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
  63. package/lib/families/bitcoin/bridge/mock.js +6 -1
  64. package/lib/families/bitcoin/bridge/mock.js.map +1 -1
  65. package/lib/families/bitcoin/datasets/bitcoin_cash.d.ts.map +1 -1
  66. package/lib/families/bitcoin/datasets/bitcoin_cash.js +1 -1
  67. package/lib/families/bitcoin/datasets/bitcoin_cash.js.map +1 -1
  68. package/lib/families/bitcoin/datasets/dash.d.ts.map +1 -1
  69. package/lib/families/bitcoin/datasets/dash.js +1 -1
  70. package/lib/families/bitcoin/datasets/dash.js.map +1 -1
  71. package/lib/families/bitcoin/datasets/decred.d.ts.map +1 -1
  72. package/lib/families/bitcoin/datasets/decred.js +1 -1
  73. package/lib/families/bitcoin/datasets/decred.js.map +1 -1
  74. package/lib/families/bitcoin/datasets/digibyte.d.ts.map +1 -1
  75. package/lib/families/bitcoin/datasets/digibyte.js +8 -2
  76. package/lib/families/bitcoin/datasets/digibyte.js.map +1 -1
  77. package/lib/families/bitcoin/datasets/dogecoin.d.ts.map +1 -1
  78. package/lib/families/bitcoin/datasets/dogecoin.js +1 -1
  79. package/lib/families/bitcoin/datasets/dogecoin.js.map +1 -1
  80. package/lib/families/bitcoin/datasets/komodo.js +1 -1
  81. package/lib/families/bitcoin/datasets/komodo.js.map +1 -1
  82. package/lib/families/bitcoin/datasets/litecoin.d.ts.map +1 -1
  83. package/lib/families/bitcoin/datasets/litecoin.js +8 -2
  84. package/lib/families/bitcoin/datasets/litecoin.js.map +1 -1
  85. package/lib/families/bitcoin/datasets/peercoin.js +1 -1
  86. package/lib/families/bitcoin/datasets/peercoin.js.map +1 -1
  87. package/lib/families/bitcoin/datasets/pivx.js +1 -1
  88. package/lib/families/bitcoin/datasets/pivx.js.map +1 -1
  89. package/lib/families/bitcoin/datasets/qtum.js +1 -1
  90. package/lib/families/bitcoin/datasets/qtum.js.map +1 -1
  91. package/lib/families/bitcoin/datasets/stakenet.d.ts.map +1 -1
  92. package/lib/families/bitcoin/datasets/stakenet.js +1 -1
  93. package/lib/families/bitcoin/datasets/stakenet.js.map +1 -1
  94. package/lib/families/bitcoin/datasets/vertcoin.d.ts.map +1 -1
  95. package/lib/families/bitcoin/datasets/vertcoin.js +1 -1
  96. package/lib/families/bitcoin/datasets/vertcoin.js.map +1 -1
  97. package/lib/families/bitcoin/datasets/viacoin.d.ts.map +1 -1
  98. package/lib/families/bitcoin/datasets/viacoin.js +1 -1
  99. package/lib/families/bitcoin/datasets/viacoin.js.map +1 -1
  100. package/lib/families/bitcoin/datasets/zcash.d.ts.map +1 -1
  101. package/lib/families/bitcoin/datasets/zcash.js +1 -1
  102. package/lib/families/bitcoin/datasets/zcash.js.map +1 -1
  103. package/lib/families/bitcoin/datasets/zencash.d.ts.map +1 -1
  104. package/lib/families/bitcoin/datasets/zencash.js +1 -1
  105. package/lib/families/bitcoin/datasets/zencash.js.map +1 -1
  106. package/lib/families/bitcoin/platformAdapter.test.d.ts +2 -0
  107. package/lib/families/bitcoin/platformAdapter.test.d.ts.map +1 -0
  108. package/lib/families/bitcoin/platformAdapter.test.js +48 -0
  109. package/lib/families/bitcoin/platformAdapter.test.js.map +1 -0
  110. package/lib/families/bitcoin/specs.d.ts.map +1 -1
  111. package/lib/families/bitcoin/specs.js +62 -24
  112. package/lib/families/bitcoin/specs.js.map +1 -1
  113. package/lib/families/bitcoin/speculos-deviceActions.d.ts +1 -4
  114. package/lib/families/bitcoin/speculos-deviceActions.d.ts.map +1 -1
  115. package/lib/families/bitcoin/speculos-deviceActions.js +2 -4
  116. package/lib/families/bitcoin/speculos-deviceActions.js.map +1 -1
  117. package/lib/families/cardano/js-estimateMaxSpendable.js +1 -1
  118. package/lib/families/cardano/js-estimateMaxSpendable.js.map +1 -1
  119. package/lib/families/cardano/specs.d.ts.map +1 -1
  120. package/lib/families/cardano/specs.js +19 -8
  121. package/lib/families/cardano/specs.js.map +1 -1
  122. package/lib/families/cardano/speculos-deviceActions.d.ts +1 -4
  123. package/lib/families/cardano/speculos-deviceActions.d.ts.map +1 -1
  124. package/lib/families/cardano/speculos-deviceActions.js +2 -2
  125. package/lib/families/cardano/speculos-deviceActions.js.map +1 -1
  126. package/lib/families/celo/specs.d.ts.map +1 -1
  127. package/lib/families/celo/specs.js +2 -0
  128. package/lib/families/celo/specs.js.map +1 -1
  129. package/lib/families/celo/speculos-deviceActions.d.ts +1 -4
  130. package/lib/families/celo/speculos-deviceActions.d.ts.map +1 -1
  131. package/lib/families/celo/speculos-deviceActions.js +2 -4
  132. package/lib/families/celo/speculos-deviceActions.js.map +1 -1
  133. package/lib/families/cosmos/specs.d.ts.map +1 -1
  134. package/lib/families/cosmos/specs.js +41 -25
  135. package/lib/families/cosmos/specs.js.map +1 -1
  136. package/lib/families/cosmos/speculos-deviceActions.d.ts +1 -4
  137. package/lib/families/cosmos/speculos-deviceActions.d.ts.map +1 -1
  138. package/lib/families/cosmos/speculos-deviceActions.js +2 -4
  139. package/lib/families/cosmos/speculos-deviceActions.js.map +1 -1
  140. package/lib/families/crypto_org/specs.d.ts.map +1 -1
  141. package/lib/families/crypto_org/specs.js +3 -0
  142. package/lib/families/crypto_org/specs.js.map +1 -1
  143. package/lib/families/crypto_org/speculos-deviceActions.d.ts +1 -4
  144. package/lib/families/crypto_org/speculos-deviceActions.d.ts.map +1 -1
  145. package/lib/families/crypto_org/speculos-deviceActions.js +2 -2
  146. package/lib/families/crypto_org/speculos-deviceActions.js.map +1 -1
  147. package/lib/families/elrond/specs.d.ts.map +1 -1
  148. package/lib/families/elrond/specs.js +15 -2
  149. package/lib/families/elrond/specs.js.map +1 -1
  150. package/lib/families/elrond/speculos-deviceActions.d.ts +1 -4
  151. package/lib/families/elrond/speculos-deviceActions.d.ts.map +1 -1
  152. package/lib/families/elrond/speculos-deviceActions.js +2 -4
  153. package/lib/families/elrond/speculos-deviceActions.js.map +1 -1
  154. package/lib/families/ethereum/platformAdapter.test.d.ts +2 -0
  155. package/lib/families/ethereum/platformAdapter.test.d.ts.map +1 -0
  156. package/lib/families/ethereum/platformAdapter.test.js +88 -0
  157. package/lib/families/ethereum/platformAdapter.test.js.map +1 -0
  158. package/lib/families/ethereum/specs.d.ts.map +1 -1
  159. package/lib/families/ethereum/specs.js +36 -12
  160. package/lib/families/ethereum/specs.js.map +1 -1
  161. package/lib/families/ethereum/speculos-deviceActions.d.ts +1 -4
  162. package/lib/families/ethereum/speculos-deviceActions.d.ts.map +1 -1
  163. package/lib/families/ethereum/speculos-deviceActions.js +2 -4
  164. package/lib/families/ethereum/speculos-deviceActions.js.map +1 -1
  165. package/lib/families/filecoin/specs.d.ts.map +1 -1
  166. package/lib/families/filecoin/specs.js +2 -0
  167. package/lib/families/filecoin/specs.js.map +1 -1
  168. package/lib/families/filecoin/speculos-deviceActions.d.ts +1 -4
  169. package/lib/families/filecoin/speculos-deviceActions.d.ts.map +1 -1
  170. package/lib/families/filecoin/speculos-deviceActions.js +2 -2
  171. package/lib/families/filecoin/speculos-deviceActions.js.map +1 -1
  172. package/lib/families/hedera/specs.d.ts.map +1 -1
  173. package/lib/families/hedera/specs.js +11 -3
  174. package/lib/families/hedera/specs.js.map +1 -1
  175. package/lib/families/hedera/speculos-deviceActions.d.ts +1 -4
  176. package/lib/families/hedera/speculos-deviceActions.d.ts.map +1 -1
  177. package/lib/families/hedera/speculos-deviceActions.js +4 -4
  178. package/lib/families/hedera/speculos-deviceActions.js.map +1 -1
  179. package/lib/families/osmosis/specs.d.ts.map +1 -1
  180. package/lib/families/osmosis/specs.js +13 -5
  181. package/lib/families/osmosis/specs.js.map +1 -1
  182. package/lib/families/osmosis/speculos-deviceActions.d.ts +1 -4
  183. package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -1
  184. package/lib/families/osmosis/speculos-deviceActions.js +2 -4
  185. package/lib/families/osmosis/speculos-deviceActions.js.map +1 -1
  186. package/lib/families/polkadot/platformAdapter.test.d.ts +2 -0
  187. package/lib/families/polkadot/platformAdapter.test.d.ts.map +1 -0
  188. package/lib/families/polkadot/platformAdapter.test.js +51 -0
  189. package/lib/families/polkadot/platformAdapter.test.js.map +1 -0
  190. package/lib/families/polkadot/specs.d.ts.map +1 -1
  191. package/lib/families/polkadot/specs.js +12 -1
  192. package/lib/families/polkadot/specs.js.map +1 -1
  193. package/lib/families/polkadot/speculos-deviceActions.d.ts +1 -4
  194. package/lib/families/polkadot/speculos-deviceActions.d.ts.map +1 -1
  195. package/lib/families/polkadot/speculos-deviceActions.js +2 -4
  196. package/lib/families/polkadot/speculos-deviceActions.js.map +1 -1
  197. package/lib/families/ripple/platformAdapter.test.d.ts +2 -0
  198. package/lib/families/ripple/platformAdapter.test.d.ts.map +1 -0
  199. package/lib/families/ripple/platformAdapter.test.js +51 -0
  200. package/lib/families/ripple/platformAdapter.test.js.map +1 -0
  201. package/lib/families/ripple/specs.d.ts.map +1 -1
  202. package/lib/families/ripple/specs.js +9 -4
  203. package/lib/families/ripple/specs.js.map +1 -1
  204. package/lib/families/ripple/speculos-deviceActions.d.ts +1 -4
  205. package/lib/families/ripple/speculos-deviceActions.d.ts.map +1 -1
  206. package/lib/families/ripple/speculos-deviceActions.js +2 -4
  207. package/lib/families/ripple/speculos-deviceActions.js.map +1 -1
  208. package/lib/families/solana/specs.d.ts.map +1 -1
  209. package/lib/families/solana/specs.js +29 -11
  210. package/lib/families/solana/specs.js.map +1 -1
  211. package/lib/families/solana/speculos-deviceActions.d.ts +0 -5
  212. package/lib/families/solana/speculos-deviceActions.d.ts.map +1 -1
  213. package/lib/families/solana/speculos-deviceActions.js +0 -4
  214. package/lib/families/solana/speculos-deviceActions.js.map +1 -1
  215. package/lib/families/stellar/api/horizon.d.ts.map +1 -1
  216. package/lib/families/stellar/api/horizon.js +15 -10
  217. package/lib/families/stellar/api/horizon.js.map +1 -1
  218. package/lib/families/stellar/specs.d.ts.map +1 -1
  219. package/lib/families/stellar/specs.js +30 -12
  220. package/lib/families/stellar/specs.js.map +1 -1
  221. package/lib/families/stellar/speculos-deviceActions.d.ts +1 -4
  222. package/lib/families/stellar/speculos-deviceActions.d.ts.map +1 -1
  223. package/lib/families/stellar/speculos-deviceActions.js +2 -4
  224. package/lib/families/stellar/speculos-deviceActions.js.map +1 -1
  225. package/lib/families/tezos/bakers.whitelist-default.d.ts.map +1 -1
  226. package/lib/families/tezos/bakers.whitelist-default.js +1 -1
  227. package/lib/families/tezos/bakers.whitelist-default.js.map +1 -1
  228. package/lib/families/tezos/specs.d.ts.map +1 -1
  229. package/lib/families/tezos/specs.js +2 -0
  230. package/lib/families/tezos/specs.js.map +1 -1
  231. package/lib/families/tezos/speculos-deviceActions.d.ts +1 -4
  232. package/lib/families/tezos/speculos-deviceActions.d.ts.map +1 -1
  233. package/lib/families/tezos/speculos-deviceActions.js +2 -2
  234. package/lib/families/tezos/speculos-deviceActions.js.map +1 -1
  235. package/lib/families/tron/specs.d.ts.map +1 -1
  236. package/lib/families/tron/specs.js +49 -17
  237. package/lib/families/tron/specs.js.map +1 -1
  238. package/lib/families/tron/speculos-deviceActions.d.ts +1 -4
  239. package/lib/families/tron/speculos-deviceActions.d.ts.map +1 -1
  240. package/lib/families/tron/speculos-deviceActions.js +2 -4
  241. package/lib/families/tron/speculos-deviceActions.js.map +1 -1
  242. package/lib/hw/getGenuineCheckFromDeviceId.d.ts +22 -0
  243. package/lib/hw/getGenuineCheckFromDeviceId.d.ts.map +1 -0
  244. package/lib/hw/getGenuineCheckFromDeviceId.js +49 -0
  245. package/lib/hw/getGenuineCheckFromDeviceId.js.map +1 -0
  246. package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts +2 -0
  247. package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts.map +1 -0
  248. package/lib/hw/getGenuineCheckFromDeviceId.test.js +84 -0
  249. package/lib/hw/getGenuineCheckFromDeviceId.test.js.map +1 -0
  250. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts +17 -0
  251. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts.map +1 -0
  252. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js +27 -0
  253. package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js.map +1 -0
  254. package/lib/hw/hooks/useGenuineCheck.d.ts +34 -0
  255. package/lib/hw/hooks/useGenuineCheck.d.ts.map +1 -0
  256. package/lib/hw/hooks/useGenuineCheck.js +115 -0
  257. package/lib/hw/hooks/useGenuineCheck.js.map +1 -0
  258. package/lib/hw/hooks/useGenuineCheck.test.d.ts +2 -0
  259. package/lib/hw/hooks/useGenuineCheck.test.d.ts.map +1 -0
  260. package/lib/hw/hooks/useGenuineCheck.test.js +316 -0
  261. package/lib/hw/hooks/useGenuineCheck.test.js.map +1 -0
  262. package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts +29 -0
  263. package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts.map +1 -0
  264. package/lib/hw/hooks/useGetLatestAvailableFirmware.js +72 -0
  265. package/lib/hw/hooks/useGetLatestAvailableFirmware.js.map +1 -0
  266. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts +2 -0
  267. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts.map +1 -0
  268. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js +155 -0
  269. package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js.map +1 -0
  270. package/lib/load/speculos.d.ts +1 -0
  271. package/lib/load/speculos.d.ts.map +1 -1
  272. package/lib/load/speculos.js +2 -1
  273. package/lib/load/speculos.js.map +1 -1
  274. package/lib/mock/fixtures/cryptoCurrencies.d.ts +5 -0
  275. package/lib/mock/fixtures/cryptoCurrencies.d.ts.map +1 -0
  276. package/lib/mock/fixtures/cryptoCurrencies.js +91 -0
  277. package/lib/mock/fixtures/cryptoCurrencies.js.map +1 -0
  278. package/lib/platform/converters.test.js +44 -218
  279. package/lib/platform/converters.test.js.map +1 -1
  280. package/lib/platform/logic.d.ts +44 -0
  281. package/lib/platform/logic.d.ts.map +1 -1
  282. package/lib/platform/logic.js +147 -1
  283. package/lib/platform/logic.js.map +1 -1
  284. package/lib/platform/logic.test.d.ts +2 -0
  285. package/lib/platform/logic.test.d.ts.map +1 -0
  286. package/lib/platform/logic.test.js +903 -0
  287. package/lib/platform/logic.test.js.map +1 -0
  288. package/lib/platform/react.d.ts +6 -0
  289. package/lib/platform/react.d.ts.map +1 -1
  290. package/lib/platform/react.js +6 -0
  291. package/lib/platform/react.js.map +1 -1
  292. package/lib/platform/tracking.d.ts +1 -1
  293. package/lib/platform/tracking.d.ts.map +1 -1
  294. package/lib/platform/tracking.test.js +14 -41
  295. package/lib/platform/tracking.test.js.map +1 -1
  296. package/lib/reconciliation.d.ts.map +1 -1
  297. package/lib/reconciliation.js +28 -10
  298. package/lib/reconciliation.js.map +1 -1
  299. package/package.json +5 -6
  300. package/src/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.ts +2 -2
  301. package/src/__tests__/test-helpers/environment.ts +91 -0
  302. package/src/__tests__/test-helpers/setup.ts +2 -91
  303. package/src/account/serialization.ts +103 -64
  304. package/src/bot/bot-test-context.test.ts +37 -0
  305. package/src/bot/bot-test-context.ts +24 -0
  306. package/src/bot/cli.ts +18 -0
  307. package/src/bot/engine.ts +109 -73
  308. package/src/bot/formatters.ts +40 -14
  309. package/src/bot/index.ts +124 -18
  310. package/src/bot/specs.ts +10 -5
  311. package/src/bot/types.ts +7 -3
  312. package/src/countervalues/logic.integration.test.ts +50 -0
  313. package/src/countervalues/modules/weth.ts +9 -12
  314. package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +59 -1
  315. package/src/currencies/sortByMarketcap.test.ts +1 -12
  316. package/src/currencies/sortByMarketcap.ts +2 -22
  317. package/src/env.ts +1 -1
  318. package/src/families/algorand/__snapshots__/bridge.integration.test.ts.snap +733 -8
  319. package/src/families/algorand/specs.ts +26 -16
  320. package/src/families/algorand/speculos-deviceActions.ts +31 -10
  321. package/src/families/bitcoin/__snapshots__/bridge.integration.test.ts.snap +43309 -7957
  322. package/src/families/bitcoin/bridge/mock.ts +7 -1
  323. package/src/families/bitcoin/datasets/bitcoin_cash.ts +73 -13
  324. package/src/families/bitcoin/datasets/dash.ts +29 -17
  325. package/src/families/bitcoin/datasets/decred.ts +42 -12
  326. package/src/families/bitcoin/datasets/digibyte.ts +9 -3
  327. package/src/families/bitcoin/datasets/dogecoin.ts +29 -17
  328. package/src/families/bitcoin/datasets/komodo.ts +22 -22
  329. package/src/families/bitcoin/datasets/litecoin.ts +9 -3
  330. package/src/families/bitcoin/datasets/peercoin.ts +17 -17
  331. package/src/families/bitcoin/datasets/pivx.ts +17 -17
  332. package/src/families/bitcoin/datasets/qtum.ts +40 -40
  333. package/src/families/bitcoin/datasets/stakenet.ts +56 -26
  334. package/src/families/bitcoin/datasets/vertcoin.ts +43 -55
  335. package/src/families/bitcoin/datasets/viacoin.ts +35 -23
  336. package/src/families/bitcoin/datasets/zcash.ts +78 -12
  337. package/src/families/bitcoin/datasets/zencash.ts +56 -10
  338. package/src/families/bitcoin/platformAdapter.test.ts +58 -0
  339. package/src/families/bitcoin/specs.ts +81 -41
  340. package/src/families/bitcoin/speculos-deviceActions.ts +68 -69
  341. package/src/families/cardano/js-estimateMaxSpendable.ts +1 -1
  342. package/src/families/cardano/specs.ts +28 -11
  343. package/src/families/cardano/speculos-deviceActions.ts +65 -66
  344. package/src/families/celo/specs.ts +2 -0
  345. package/src/families/celo/speculos-deviceActions.ts +42 -43
  346. package/src/families/cosmos/__snapshots__/bridge.integration.test.ts.snap +246 -5
  347. package/src/families/cosmos/specs.ts +44 -28
  348. package/src/families/cosmos/speculos-deviceActions.ts +82 -83
  349. package/src/families/crypto_org/specs.ts +3 -0
  350. package/src/families/crypto_org/speculos-deviceActions.ts +58 -59
  351. package/src/families/elrond/specs.ts +21 -4
  352. package/src/families/elrond/speculos-deviceActions.ts +41 -42
  353. package/src/families/ethereum/__snapshots__/bridge.integration.test.ts.snap +90 -90
  354. package/src/families/ethereum/platformAdapter.test.ts +112 -0
  355. package/src/families/ethereum/specs.ts +47 -23
  356. package/src/families/ethereum/speculos-deviceActions.ts +93 -95
  357. package/src/families/filecoin/specs.ts +2 -1
  358. package/src/families/filecoin/speculos-deviceActions.ts +61 -62
  359. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +57 -2
  360. package/src/families/hedera/specs.ts +13 -5
  361. package/src/families/hedera/speculos-deviceActions.ts +59 -60
  362. package/src/families/osmosis/specs.ts +15 -7
  363. package/src/families/osmosis/speculos-deviceActions.ts +82 -83
  364. package/src/families/polkadot/platformAdapter.test.ts +61 -0
  365. package/src/families/polkadot/specs.ts +20 -2
  366. package/src/families/polkadot/speculos-deviceActions.ts +83 -82
  367. package/src/families/ripple/platformAdapter.test.ts +54 -0
  368. package/src/families/ripple/specs.ts +14 -7
  369. package/src/families/ripple/speculos-deviceActions.ts +72 -73
  370. package/src/families/solana/specs.ts +33 -14
  371. package/src/families/solana/speculos-deviceActions.ts +0 -5
  372. package/src/families/stellar/api/horizon.ts +10 -6
  373. package/src/families/stellar/specs.ts +37 -19
  374. package/src/families/stellar/speculos-deviceActions.ts +85 -87
  375. package/src/families/tezos/bakers.whitelist-default.ts +0 -1
  376. package/src/families/tezos/specs.ts +2 -0
  377. package/src/families/tezos/speculos-deviceActions.ts +76 -77
  378. package/src/families/tron/specs.ts +67 -30
  379. package/src/families/tron/speculos-deviceActions.ts +81 -84
  380. package/src/hw/getGenuineCheckFromDeviceId.test.ts +98 -0
  381. package/src/hw/getGenuineCheckFromDeviceId.ts +61 -0
  382. package/src/hw/getLatestAvailableFirmwareFromDeviceId.ts +37 -0
  383. package/src/hw/hooks/useGenuineCheck.test.ts +232 -0
  384. package/src/hw/hooks/useGenuineCheck.ts +138 -0
  385. package/src/hw/hooks/useGetLatestAvailableFirmware.test.ts +111 -0
  386. package/src/hw/hooks/useGetLatestAvailableFirmware.ts +90 -0
  387. package/src/load/speculos.ts +2 -0
  388. package/src/mock/fixtures/cryptoCurrencies.ts +88 -0
  389. package/src/platform/converters.test.ts +49 -282
  390. package/src/platform/logic.test.ts +756 -0
  391. package/src/platform/logic.ts +285 -0
  392. package/src/platform/react.ts +6 -0
  393. package/src/platform/tracking.test.ts +6 -7
  394. package/src/platform/tracking.ts +1 -1
  395. package/src/reconciliation.ts +66 -43
  396. package/lib/bot/test.bot.d.ts +0 -2
  397. package/lib/bot/test.bot.d.ts.map +0 -1
  398. package/lib/bot/test.bot.js +0 -62
  399. package/lib/bot/test.bot.js.map +0 -1
  400. package/lib/generated/speculos-deviceActions.d.ts +0 -56
  401. package/lib/generated/speculos-deviceActions.d.ts.map +0 -1
  402. package/lib/generated/speculos-deviceActions.js +0 -42
  403. package/lib/generated/speculos-deviceActions.js.map +0 -1
  404. package/src/bot/test.bot.ts +0 -21
  405. 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
+ }