@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,41 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var bot_test_context_1 = require("./bot-test-context");
4
+ var formatters_1 = require("./formatters");
5
+ describe("test the botTest context itself", function () {
6
+ test("botTest", function () {
7
+ var f = function () {
8
+ try {
9
+ (0, bot_test_context_1.botTest)("CTX", function () { return expect(true).toEqual(false); });
10
+ }
11
+ catch (e) {
12
+ return (0, bot_test_context_1.getContext)(e);
13
+ }
14
+ };
15
+ expect(f()).toEqual("CTX");
16
+ });
17
+ test("double botTest", function () {
18
+ var f = function () {
19
+ try {
20
+ (0, bot_test_context_1.botTest)("1", function () { return (0, bot_test_context_1.botTest)("2", function () { return expect(true).toEqual(false); }); });
21
+ }
22
+ catch (e) {
23
+ return (0, bot_test_context_1.getContext)(e);
24
+ }
25
+ };
26
+ expect(f()).toEqual("1 > 2");
27
+ });
28
+ test("formatError", function () {
29
+ var _a;
30
+ var f = function () {
31
+ try {
32
+ (0, bot_test_context_1.botTest)("CTX", function () { return expect(true).toEqual(false); });
33
+ }
34
+ catch (e) {
35
+ return (0, formatters_1.formatError)(e);
36
+ }
37
+ };
38
+ expect((_a = f()) === null || _a === void 0 ? void 0 : _a.slice(0, 8)).toEqual("TEST CTX");
39
+ });
40
+ });
41
+ //# sourceMappingURL=bot-test-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-test-context.test.js","sourceRoot":"","sources":["../../src/bot/bot-test-context.test.ts"],"names":[],"mappings":";;AAAA,uDAAyD;AACzD,2CAA2C;AAE3C,QAAQ,CAAC,iCAAiC,EAAE;IAC1C,IAAI,CAAC,SAAS,EAAE;QACd,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,CAAC;aACnD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,6BAAU,EAAC,CAAC,CAAC,CAAC;aACtB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE;QACrB,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,GAAG,EAAE,cAAM,OAAA,IAAA,0BAAO,EAAC,GAAG,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,EAA/C,CAA+C,CAAC,CAAC;aACrE;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,6BAAU,EAAC,CAAC,CAAC,CAAC;aACtB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE;;QAClB,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,CAAC;aACnD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,wBAAW,EAAC,CAAC,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,MAAA,CAAC,EAAE,0CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "../__tests__/test-helpers/environment";
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bot/cli.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC"}
package/lib/bot/cli.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ require("../__tests__/test-helpers/environment");
4
+ var _1 = require(".");
5
+ var _a = process.env, BOT_FILTER_CURRENCY = _a.BOT_FILTER_CURRENCY, BOT_FILTER_FAMILY = _a.BOT_FILTER_FAMILY;
6
+ var arg = {};
7
+ if (BOT_FILTER_CURRENCY) {
8
+ arg.currency = BOT_FILTER_CURRENCY;
9
+ }
10
+ if (BOT_FILTER_FAMILY) {
11
+ arg.family = BOT_FILTER_FAMILY;
12
+ }
13
+ (0, _1.bot)(arg);
14
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bot/cli.ts"],"names":[],"mappings":";;AAAA,iDAA+C;AAC/C,sBAAwB;AAElB,IAAA,KAA6C,OAAO,CAAC,GAAG,EAAtD,mBAAmB,yBAAA,EAAE,iBAAiB,uBAAgB,CAAC;AAC/D,IAAM,GAAG,GAGL,EAAE,CAAC;AAEP,IAAI,mBAAmB,EAAE;IACvB,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC;CACpC;AAED,IAAI,iBAAiB,EAAE;IACrB,GAAG,CAAC,MAAM,GAAG,iBAAiB,CAAC;CAChC;AAED,IAAA,MAAG,EAAC,GAAG,CAAC,CAAC"}
@@ -1,17 +1,18 @@
1
+ import { OperatorFunction } from "rxjs";
1
2
  import type { AppCandidate } from "../load/speculos";
2
3
  import type { AppSpec, SpecReport, MutationReport, DeviceAction } from "./types";
3
4
  import type { Account, SignOperationEvent } from "@ledgerhq/types-live";
4
- import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
5
5
  import type { Transaction, TransactionStatus } from "../generated/types";
6
6
  export declare function runWithAppSpec<T extends Transaction>(spec: AppSpec<T>, reportLog: (arg0: string) => void): Promise<SpecReport<T>>;
7
- export declare function runOnAccount<T extends Transaction>({ appCandidate, spec, device, account, accounts, mutationsCount, syncAllAccountsTime, preloadedData, }: {
7
+ export declare function runOnAccount<T extends Transaction>({ appCandidate, spec, device, account, accounts, accountIdsNeedResync, mutationsCount, resyncAccountsDuration, preloadedData, }: {
8
8
  appCandidate: any;
9
9
  spec: AppSpec<T>;
10
10
  device: any;
11
11
  account: any;
12
12
  accounts: any;
13
+ accountIdsNeedResync: string[];
13
14
  mutationsCount: Record<string, number>;
14
- syncAllAccountsTime: number;
15
+ resyncAccountsDuration: number;
15
16
  preloadedData: any;
16
17
  }): Promise<MutationReport<T>>;
17
18
  export declare function autoSignTransaction<T extends Transaction>({ transport, deviceAction, appCandidate, account, transaction, status, }: {
@@ -21,6 +22,5 @@ export declare function autoSignTransaction<T extends Transaction>({ transport,
21
22
  account: Account;
22
23
  transaction: T;
23
24
  status: TransactionStatus;
24
- }): import("rxjs").OperatorFunction<SignOperationEvent, SignOperationEvent>;
25
- export declare function getImplicitDeviceAction(currency: CryptoCurrency): any;
25
+ }): OperatorFunction<SignOperationEvent, SignOperationEvent>;
26
26
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/bot/engine.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EACV,cAAc,EACd,YAAY,EAIb,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EACV,OAAO,EAEP,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAuBzE,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,EACxD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAiMxB;AACD,wBAAsB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,EACxD,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,aAAa,GACd,EAAE;IACD,YAAY,EAAE,GAAG,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,GAAG,CAAC;CACpB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA2P7B;AAkBD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,EACzD,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,MAAM,GACP,EAAE;IACD,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B,2EAsEA;AACD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,OAS/D"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/bot/engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAuBpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EACV,cAAc,EACd,YAAY,EAIb,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EACV,OAAO,EAEP,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAwBzE,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,EACxD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CA0MxB;AACD,wBAAsB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,EACxD,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,EAAE;IACD,YAAY,EAAE,GAAG,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,GAAG,CAAC;CACpB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA+Q7B;AAkBD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,EACzD,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,MAAM,GACP,EAAE;IACD,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAsE3D"}
package/lib/bot/engine.js CHANGED
@@ -61,7 +61,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
61
61
  return (mod && mod.__esModule) ? mod : { "default": mod };
62
62
  };
63
63
  exports.__esModule = true;
64
- exports.getImplicitDeviceAction = exports.autoSignTransaction = exports.runOnAccount = exports.runWithAppSpec = void 0;
64
+ exports.autoSignTransaction = exports.runOnAccount = exports.runWithAppSpec = void 0;
65
65
  var expect_1 = __importDefault(require("expect"));
66
66
  var invariant_1 = __importDefault(require("invariant"));
67
67
  var performance_now_1 = __importDefault(require("performance-now"));
@@ -76,10 +76,10 @@ var operation_1 = require("../operation");
76
76
  var env_1 = require("../env");
77
77
  var promise_2 = require("../promise");
78
78
  var speculos_1 = require("../load/speculos");
79
- var speculos_deviceActions_1 = __importDefault(require("../generated/speculos-deviceActions"));
80
79
  var formatters_1 = require("./formatters");
81
80
  var cache_1 = require("../bridge/cache");
82
81
  var cross_1 = require("../cross");
82
+ var bot_test_context_1 = require("./bot-test-context");
83
83
  var appCandidates;
84
84
  var localCache = {};
85
85
  var cache = (0, cache_1.makeBridgeCacheSystem)({
@@ -110,7 +110,7 @@ function crossAccount(account) {
110
110
  }
111
111
  function runWithAppSpec(spec, reportLog) {
112
112
  return __awaiter(this, void 0, void 0, function () {
113
- var seed, coinapps, mutationReports, appQuery, currency, dependency, appCandidate, deviceParams, device, appReport, bridge, syncConfig, t_1, preloadedData, preloadTime, scanTime_1, firstSyncDurations_1, accounts, i, _a, _b, preloadStats, mutationsCount, length_1, totalTries, j, i, syncAllAccountsTime, account, report, e_1;
113
+ var seed, coinapps, mutationReports, appQuery, currency, dependency, appCandidate, deviceParams, device, appReport, bridge, syncConfig, t, preloadedData, preloadDuration, beforeScanTime, accounts, i, _a, _b, preloadStats, mutationsCount, length_1, totalTries, accountIdsNeedResync_1, j, _loop_1, i, e_1;
114
114
  return __generator(this, function (_c) {
115
115
  switch (_c.label) {
116
116
  case 0:
@@ -139,39 +139,34 @@ function runWithAppSpec(spec, reportLog) {
139
139
  };
140
140
  _c.label = 3;
141
141
  case 3:
142
- _c.trys.push([3, 22, 23, 26]);
142
+ _c.trys.push([3, 19, 20, 23]);
143
143
  return [4 /*yield*/, (0, speculos_1.createSpeculosDevice)(deviceParams)];
144
144
  case 4:
145
145
  device = _c.sent();
146
+ appReport.appPath = device.appPath;
146
147
  bridge = (0, bridge_1.getCurrencyBridge)(currency);
147
148
  syncConfig = {
148
149
  paginationConfig: {}
149
150
  };
150
- t_1 = (0, performance_now_1["default"])();
151
+ t = (0, performance_now_1["default"])();
151
152
  return [4 /*yield*/, cache.prepareCurrency(currency)];
152
153
  case 5:
153
154
  preloadedData = _c.sent();
154
- preloadTime = (0, performance_now_1["default"])() - t_1;
155
- // Scan all existing accounts
156
- t_1 = (0, performance_now_1["default"])();
157
- scanTime_1 = 0;
158
- firstSyncDurations_1 = {};
155
+ preloadDuration = (0, performance_now_1["default"])() - t;
156
+ appReport.preloadDuration = preloadDuration;
157
+ beforeScanTime = (0, performance_now_1["default"])();
158
+ t = (0, performance_now_1["default"])();
159
159
  return [4 /*yield*/, bridge
160
160
  .scanAccounts({
161
161
  currency: currency,
162
162
  deviceId: device.id,
163
163
  syncConfig: syncConfig
164
164
  })
165
- .pipe((0, operators_1.filter)(function (e) { return e.type === "discovered"; }), (0, operators_1.map)(function (e) { return e.account; }), (0, operators_1.tap)(function (account) {
166
- var dt = (0, performance_now_1["default"])() - t_1;
167
- firstSyncDurations_1[account.id] = dt;
168
- t_1 = (0, performance_now_1["default"])();
169
- scanTime_1 += dt;
170
- }), (0, operators_1.reduce)(function (all, a) { return all.concat(a); }, []), (0, operators_1.timeoutWith)((0, env_1.getEnv)("BOT_TIMEOUT_SCAN_ACCOUNTS"), (0, rxjs_1.throwError)(new Error("scan accounts timeout for currency " + currency.name))))
165
+ .pipe((0, operators_1.filter)(function (e) { return e.type === "discovered"; }), (0, operators_1.map)(function (e) { return e.account; }), (0, operators_1.reduce)(function (all, a) { return all.concat(a); }, []), (0, operators_1.timeoutWith)((0, env_1.getEnv)("BOT_TIMEOUT_SCAN_ACCOUNTS"), (0, rxjs_1.throwError)(new Error("scan accounts timeout for currency " + currency.name))))
171
166
  .toPromise()];
172
167
  case 6:
173
168
  accounts = _c.sent();
174
- appReport.scanTime = scanTime_1;
169
+ appReport.scanDuration = (0, performance_now_1["default"])() - beforeScanTime;
175
170
  i = 0;
176
171
  _c.label = 7;
177
172
  case 7:
@@ -188,15 +183,8 @@ function runWithAppSpec(spec, reportLog) {
188
183
  case 10:
189
184
  appReport.accountsBefore = accounts;
190
185
  (0, invariant_1["default"])(accounts.length > 0, "unexpected empty accounts for " + currency.name);
191
- preloadStats = preloadTime > 10 ? " (preload: ".concat((0, formatters_1.formatTime)(preloadTime), ")") : "";
192
- reportLog("Spec ".concat(spec.name, " found ").concat(accounts.length, " ").concat(currency.name, " accounts").concat(preloadStats, ". Will use ").concat((0, formatters_1.formatAppCandidate)(appCandidate), "\n").concat(accounts
193
- .map(function (a) {
194
- return "(" +
195
- (0, formatters_1.formatTime)(firstSyncDurations_1[a.id] || 0) +
196
- ") " +
197
- (0, account_1.formatAccount)(a, "head");
198
- })
199
- .join("\n"), "\n"));
186
+ preloadStats = preloadDuration > 10 ? " (preload: ".concat((0, formatters_1.formatTime)(preloadDuration), ")") : "";
187
+ reportLog("Spec ".concat(spec.name, " found ").concat(accounts.length, " ").concat(currency.name, " accounts").concat(preloadStats, ". Will use ").concat((0, formatters_1.formatAppCandidate)(appCandidate), "\n").concat(accounts.map(function (a) { return (0, account_1.formatAccount)(a, "head"); }).join("\n"), "\n"));
200
188
  if (accounts.every(account_1.isAccountEmpty)) {
201
189
  reportLog("This SEED does not have ".concat(currency.name, ". Please send funds to ").concat(accounts
202
190
  .map(function (a) { return a.freshAddress; })
@@ -207,90 +195,118 @@ function runWithAppSpec(spec, reportLog) {
207
195
  mutationsCount = {};
208
196
  length_1 = accounts.length;
209
197
  totalTries = spec.multipleRuns || 1;
198
+ accountIdsNeedResync_1 = [];
210
199
  j = 0;
211
200
  _c.label = 11;
212
201
  case 11:
213
- if (!(j < totalTries)) return [3 /*break*/, 20];
202
+ if (!(j < totalTries)) return [3 /*break*/, 17];
203
+ _loop_1 = function (i) {
204
+ var resynced, resyncAccountsDuration, account, report, finalAccount_1;
205
+ return __generator(this, function (_d) {
206
+ switch (_d.label) {
207
+ case 0:
208
+ (0, logs_1.log)("engine", "spec ".concat(spec.name, " sync all accounts (try ").concat(j, " run ").concat(i, ")"));
209
+ // resync all accounts that needs to be resynced
210
+ t = (0, performance_now_1["default"])();
211
+ return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts.filter(function (a) { return accountIdsNeedResync_1.includes(a.id); }), syncAccount)];
212
+ case 1:
213
+ resynced = _d.sent();
214
+ accounts = accounts.map(function (a) {
215
+ var i = accountIdsNeedResync_1.indexOf(a.id);
216
+ return i !== -1 ? resynced[i] : a;
217
+ });
218
+ accountIdsNeedResync_1 = [];
219
+ appReport.accountsAfter = accounts;
220
+ resyncAccountsDuration = (0, performance_now_1["default"])() - t;
221
+ account = accounts[i];
222
+ return [4 /*yield*/, runOnAccount({
223
+ appCandidate: appCandidate,
224
+ spec: spec,
225
+ device: device,
226
+ account: account,
227
+ accounts: accounts,
228
+ mutationsCount: mutationsCount,
229
+ resyncAccountsDuration: resyncAccountsDuration,
230
+ accountIdsNeedResync: accountIdsNeedResync_1,
231
+ preloadedData: preloadedData
232
+ })];
233
+ case 2:
234
+ report = _d.sent();
235
+ if (report.finalAccount) {
236
+ finalAccount_1 = report.finalAccount;
237
+ accountIdsNeedResync_1 = accountIdsNeedResync_1.filter(function (id) { return id !== finalAccount_1.id; });
238
+ accounts = accounts.map(function (a) {
239
+ return a.id === finalAccount_1.id ? finalAccount_1 : a;
240
+ });
241
+ }
242
+ // eslint-disable-next-line no-console
243
+ console.log((0, formatters_1.formatReportForConsole)(report));
244
+ mutationReports.push(report);
245
+ appReport.mutations = mutationReports;
246
+ if (!(report.error ||
247
+ (report.latestSignOperationEvent &&
248
+ report.latestSignOperationEvent.type ===
249
+ "device-signature-requested"))) return [3 /*break*/, 5];
250
+ (0, logs_1.log)("engine", "spec ".concat(spec.name, " is recreating the device because deviceAction didn't finished"));
251
+ return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
252
+ case 3:
253
+ _d.sent();
254
+ return [4 /*yield*/, (0, speculos_1.createSpeculosDevice)(deviceParams)];
255
+ case 4:
256
+ device = _d.sent();
257
+ _d.label = 5;
258
+ case 5: return [2 /*return*/];
259
+ }
260
+ });
261
+ };
214
262
  i = 0;
215
263
  _c.label = 12;
216
264
  case 12:
217
- if (!(i < length_1)) return [3 /*break*/, 18];
218
- (0, logs_1.log)("engine", "spec ".concat(spec.name, " sync all accounts (try ").concat(j, " run ").concat(i, ")"));
219
- // resync all accounts (necessary between mutations)
220
- t_1 = (0, performance_now_1["default"])();
221
- return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts, syncAccount)];
265
+ if (!(i < length_1)) return [3 /*break*/, 15];
266
+ return [5 /*yield**/, _loop_1(i)];
222
267
  case 13:
223
- accounts = _c.sent();
224
- appReport.accountsAfter = accounts;
225
- syncAllAccountsTime = (0, performance_now_1["default"])() - t_1;
226
- account = accounts[i];
227
- return [4 /*yield*/, runOnAccount({
228
- appCandidate: appCandidate,
229
- spec: spec,
230
- device: device,
231
- account: account,
232
- accounts: accounts,
233
- mutationsCount: mutationsCount,
234
- syncAllAccountsTime: syncAllAccountsTime,
235
- preloadedData: preloadedData
236
- })];
237
- case 14:
238
- report = _c.sent();
239
- // eslint-disable-next-line no-console
240
- console.log((0, formatters_1.formatReportForConsole)(report));
241
- mutationReports.push(report);
242
- appReport.mutations = mutationReports;
243
- if (!(report.error ||
244
- (report.latestSignOperationEvent &&
245
- report.latestSignOperationEvent.type ===
246
- "device-signature-requested"))) return [3 /*break*/, 17];
247
- (0, logs_1.log)("engine", "spec ".concat(spec.name, " is recreating the device because deviceAction didn't finished"));
248
- return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
249
- case 15:
250
268
  _c.sent();
251
- return [4 /*yield*/, (0, speculos_1.createSpeculosDevice)(deviceParams)];
252
- case 16:
253
- device = _c.sent();
254
- _c.label = 17;
255
- case 17:
269
+ _c.label = 14;
270
+ case 14:
256
271
  i++;
257
272
  return [3 /*break*/, 12];
258
- case 18:
273
+ case 15:
259
274
  mutationsCount = {};
260
- _c.label = 19;
261
- case 19:
275
+ _c.label = 16;
276
+ case 16:
262
277
  j++;
263
278
  return [3 /*break*/, 11];
264
- case 20: return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts, syncAccount)];
265
- case 21:
279
+ case 17: return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts, syncAccount)];
280
+ case 18:
266
281
  accounts = _c.sent();
267
282
  appReport.mutations = mutationReports;
268
283
  appReport.accountsAfter = accounts;
269
- return [3 /*break*/, 26];
270
- case 22:
284
+ return [3 /*break*/, 23];
285
+ case 19:
271
286
  e_1 = _c.sent();
272
- console.error(e_1);
287
+ if (process.env.CI)
288
+ console.error(e_1);
273
289
  appReport.fatalError = e_1;
274
290
  (0, logs_1.log)("engine", "spec ".concat(spec.name, " failed with ").concat(String(e_1)));
275
- return [3 /*break*/, 26];
276
- case 23:
291
+ return [3 /*break*/, 23];
292
+ case 20:
277
293
  (0, logs_1.log)("engine", "spec ".concat(spec.name, " finished"));
278
- if (!device) return [3 /*break*/, 25];
294
+ if (!device) return [3 /*break*/, 22];
279
295
  return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
280
- case 24:
296
+ case 21:
281
297
  _c.sent();
282
- _c.label = 25;
283
- case 25: return [7 /*endfinally*/];
284
- case 26: return [2 /*return*/, appReport];
298
+ _c.label = 22;
299
+ case 22: return [7 /*endfinally*/];
300
+ case 23: return [2 /*return*/, appReport];
285
301
  }
286
302
  });
287
303
  });
288
304
  }
289
305
  exports.runWithAppSpec = runWithAppSpec;
290
306
  function runOnAccount(_a) {
291
- var appCandidate = _a.appCandidate, spec = _a.spec, device = _a.device, account = _a.account, accounts = _a.accounts, mutationsCount = _a.mutationsCount, syncAllAccountsTime = _a.syncAllAccountsTime, preloadedData = _a.preloadedData;
307
+ var appCandidate = _a.appCandidate, spec = _a.spec, device = _a.device, account = _a.account, accounts = _a.accounts, accountIdsNeedResync = _a.accountIdsNeedResync, mutationsCount = _a.mutationsCount, resyncAccountsDuration = _a.resyncAccountsDuration, preloadedData = _a.preloadedData;
292
308
  return __awaiter(this, void 0, void 0, function () {
293
- var mutations, latestSignOperationEvent, report, accountBridge, accountBeforeTransaction_1, maxSpendable, candidates, unavailableMutationReasons, mutations_1, mutations_1_1, mutation_1, count, arg, r, candidate, tx, mutation_2, updates, status_1, errors, transaction_1, updates_1, updates_1_1, patch, e_2_1, warnings, recovered, signedOperation, optimisticOperation_1, _b, testBefore_1, step, result, error_1;
309
+ var mutations, latestSignOperationEvent, report, accountBridge, accountBeforeTransaction_1, maxSpendable, candidates, unavailableMutationReasons, mutations_1, mutations_1_1, mutation_1, count, arg, r, candidate, tx, mutation_2, updates, status_1, errors_1, transaction_1, updates_1, updates_1_1, patch, e_2_1, warnings, recovered, signedOperation, optimisticOperation_1, _b, testBefore_1, step, result, error_1;
294
310
  var e_3, _c, e_2, _d;
295
311
  return __generator(this, function (_e) {
296
312
  switch (_e.label) {
@@ -299,7 +315,7 @@ function runOnAccount(_a) {
299
315
  report = {
300
316
  spec: spec,
301
317
  appCandidate: appCandidate,
302
- syncAllAccountsTime: syncAllAccountsTime
318
+ resyncAccountsDuration: resyncAccountsDuration
303
319
  };
304
320
  _e.label = 1;
305
321
  case 1:
@@ -342,7 +358,8 @@ function runOnAccount(_a) {
342
358
  });
343
359
  }
344
360
  catch (error) {
345
- console.error(error);
361
+ if (process.env.CI)
362
+ console.error(error);
346
363
  unavailableMutationReasons.push({
347
364
  mutation: mutation_1,
348
365
  error: error
@@ -366,7 +383,7 @@ function runOnAccount(_a) {
366
383
  tx = candidate.tx, mutation_2 = candidate.mutation, updates = candidate.updates;
367
384
  report.mutation = mutation_2;
368
385
  report.mutationTime = (0, performance_now_1["default"])();
369
- errors = [];
386
+ errors_1 = [];
370
387
  return [4 /*yield*/, accountBridge.prepareTransaction(account, tx)];
371
388
  case 3:
372
389
  transaction_1 = _e.sent();
@@ -413,10 +430,10 @@ function runOnAccount(_a) {
413
430
  status_1 = _e.sent();
414
431
  report.status = status_1;
415
432
  report.statusTime = (0, performance_now_1["default"])();
416
- errors = Object.values(status_1.errors);
433
+ errors_1 = Object.values(status_1.errors);
417
434
  warnings = Object.values(status_1.warnings);
418
435
  if (!mutation_2.recoverBadTransactionStatus) return [3 /*break*/, 16];
419
- if (!(errors.length || warnings.length)) return [3 /*break*/, 16];
436
+ if (!(errors_1.length || warnings.length)) return [3 /*break*/, 16];
420
437
  recovered = mutation_2.recoverBadTransactionStatus({
421
438
  transaction: transaction_1,
422
439
  status: status_1,
@@ -437,8 +454,12 @@ function runOnAccount(_a) {
437
454
  _e.label = 16;
438
455
  case 16:
439
456
  // without recovering mechanism, we simply assume an error is a failure
440
- if (errors.length) {
441
- throw errors[0];
457
+ if (errors_1.length) {
458
+ (0, bot_test_context_1.botTest)("mutation must not have tx status errors", function () {
459
+ // all mutation must express transaction that are POSSIBLE
460
+ // recoveredFromTransactionStatus can also be used to solve this for tricky cases
461
+ throw errors_1[0];
462
+ });
442
463
  }
443
464
  mutationsCount[mutation_2.name] = (mutationsCount[mutation_2.name] || 0) + 1;
444
465
  // sign the transaction with speculos
@@ -454,7 +475,7 @@ function runOnAccount(_a) {
454
475
  (0, logs_1.log)("engine", "spec ".concat(spec.name, "/").concat(account.name, ": ").concat(e.type));
455
476
  }), autoSignTransaction({
456
477
  transport: device.transport,
457
- deviceAction: mutation_2.deviceAction || getImplicitDeviceAction(account.currency),
478
+ deviceAction: mutation_2.deviceAction || spec.genericDeviceAction,
458
479
  appCandidate: appCandidate,
459
480
  account: account,
460
481
  transaction: transaction_1,
@@ -466,12 +487,23 @@ function runOnAccount(_a) {
466
487
  signedOperation = _e.sent();
467
488
  report.signedOperation = signedOperation;
468
489
  report.signedTime = (0, performance_now_1["default"])();
490
+ // at this stage, we are about to broadcast we assume we will need to resync receiver account
491
+ if (report.destination) {
492
+ accountIdsNeedResync.push(report.destination.id);
493
+ }
494
+ accountIdsNeedResync.push(account.id);
469
495
  if (!(0, env_1.getEnv)("DISABLE_TRANSACTION_BROADCAST")) return [3 /*break*/, 18];
470
496
  _b = signedOperation.operation;
471
497
  return [3 /*break*/, 20];
472
- case 18: return [4 /*yield*/, accountBridge.broadcast({
498
+ case 18: return [4 /*yield*/, accountBridge
499
+ .broadcast({
473
500
  account: account,
474
501
  signedOperation: signedOperation
502
+ })["catch"](function (e) {
503
+ // wrap the error into some bot test context
504
+ (0, bot_test_context_1.botTest)("during broadcast", function () {
505
+ throw e;
506
+ });
475
507
  })];
476
508
  case 19:
477
509
  _b = _e.sent();
@@ -487,7 +519,9 @@ function runOnAccount(_a) {
487
519
  (mutation_2.testTimeout || spec.testTimeout || 30 * 1000);
488
520
  var operation = account.operations.find(function (o) { return o.id === optimisticOperation_1.id; });
489
521
  if (timedOut && !operation) {
490
- throw new Error("could not find optimisticOperation " + optimisticOperation_1.id);
522
+ (0, bot_test_context_1.botTest)("waiting operation id to appear after broadcast", function () {
523
+ throw new Error("could not find optimisticOperation " + optimisticOperation_1.id);
524
+ });
491
525
  }
492
526
  if (operation) {
493
527
  try {
@@ -531,8 +565,9 @@ function runOnAccount(_a) {
531
565
  return [3 /*break*/, 23];
532
566
  case 22:
533
567
  error_1 = _e.sent();
534
- console.error(error_1);
535
- (0, logs_1.log)("mutation-error", spec.name + ": " + (0, formatters_1.formatError)(error_1));
568
+ if (process.env.CI)
569
+ console.error(error_1);
570
+ (0, logs_1.log)("mutation-error", spec.name + ": " + (0, formatters_1.formatError)(error_1, true));
536
571
  report.error = error_1;
537
572
  return [3 /*break*/, 23];
538
573
  case 23:
@@ -625,21 +660,17 @@ function autoSignTransaction(_a) {
625
660
  });
626
661
  }
627
662
  exports.autoSignTransaction = autoSignTransaction;
628
- function getImplicitDeviceAction(currency) {
629
- var actions = speculos_deviceActions_1["default"][currency.family];
630
- var accept = actions && actions.acceptTransaction;
631
- (0, invariant_1["default"])(accept, "a acceptTransaction is missing for family %s", currency.family);
632
- return accept;
633
- }
634
- exports.getImplicitDeviceAction = getImplicitDeviceAction;
635
663
  function awaitAccountOperation(_a) {
636
664
  var account = _a.account, step = _a.step;
637
665
  (0, logs_1.log)("engine", "awaitAccountOperation on " + account.name);
638
666
  var syncCounter = 0;
639
667
  var acc = account;
668
+ var lastSync = (0, performance_now_1["default"])();
669
+ var loopDebounce = 1000;
670
+ var targetInterval = (0, env_1.getEnv)("SYNC_PENDING_INTERVAL");
640
671
  function loop() {
641
672
  return __awaiter(this, void 0, void 0, function () {
642
- var operation, r;
673
+ var operation, spent, r;
643
674
  return __generator(this, function (_a) {
644
675
  switch (_a.label) {
645
676
  case 0:
@@ -651,9 +682,11 @@ function awaitAccountOperation(_a) {
651
682
  operation: operation
652
683
  }];
653
684
  }
654
- return [4 /*yield*/, (0, promise_2.delay)(5000)];
685
+ spent = (0, performance_now_1["default"])() - lastSync;
686
+ return [4 /*yield*/, (0, promise_2.delay)(Math.max(loopDebounce, targetInterval - spent))];
655
687
  case 1:
656
688
  _a.sent();
689
+ lastSync = (0, performance_now_1["default"])();
657
690
  (0, logs_1.log)("engine", "sync #" + syncCounter++ + " on " + account.name);
658
691
  return [4 /*yield*/, syncAccount(acc)];
659
692
  case 2:
@@ -674,18 +707,34 @@ function transactionTest(_a) {
674
707
  var timingThreshold = 30 * 60 * 1000;
675
708
  // FIXME: .valueOf to do arithmetic operations on date with typescript
676
709
  var dt = Date.now().valueOf() - operation.date.valueOf();
677
- (0, invariant_1["default"])(dt > 0, "operation.date must not be in in future");
678
- (0, expect_1["default"])(dt).toBeLessThan(timingThreshold);
679
- (0, invariant_1["default"])(!operation.hasFailed, "operation has failed");
710
+ (0, bot_test_context_1.botTest)("operation.date must not be in future", function () {
711
+ return (0, expect_1["default"])(dt).toBeGreaterThanOrEqual(0);
712
+ });
713
+ (0, bot_test_context_1.botTest)("operation.date less than 30mn ago", function () {
714
+ return (0, expect_1["default"])(dt).toBeLessThan(timingThreshold);
715
+ });
716
+ (0, bot_test_context_1.botTest)("operation must not failed", function () {
717
+ (0, expect_1["default"])(!operation.hasFailed).toBe(true);
718
+ });
680
719
  var blockAvgTime = account.currency.blockAvgTime;
681
720
  if (blockAvgTime && account.blockHeight) {
682
- var expected = (0, operation_1.getOperationConfirmationNumber)(operation, account);
683
- var expectedMax = Math.ceil(timingThreshold / blockAvgTime);
684
- (0, invariant_1["default"])(expected <= expectedMax, "There are way too much operation confirmation for a small amount of time. %s < %s", expected, expectedMax);
721
+ var expected_1 = (0, operation_1.getOperationConfirmationNumber)(operation, account);
722
+ var expectedMax_1 = Math.ceil(timingThreshold / blockAvgTime);
723
+ (0, bot_test_context_1.botTest)("low amount of confirmations", function () {
724
+ return (0, invariant_1["default"])(expected_1 <= expectedMax_1, "There are way too much operation confirmation for a small amount of time. %s < %s", expected_1, expectedMax_1);
725
+ });
685
726
  }
686
- (0, invariant_1["default"])(!optimisticOperation.value.isNaN(), "optimisticOperation.value must not be NaN");
687
- (0, invariant_1["default"])(!optimisticOperation.fee.isNaN(), "optimisticOperation.fee must not be NaN");
688
- (0, invariant_1["default"])(!operation.value.isNaN(), "operation.value must not be NaN");
689
- (0, invariant_1["default"])(!operation.fee.isNaN(), "operation.fee must not be NaN");
727
+ (0, bot_test_context_1.botTest)("optimisticOperation.value must not be NaN", function () {
728
+ return (0, expect_1["default"])(!optimisticOperation.value.isNaN()).toBe(true);
729
+ });
730
+ (0, bot_test_context_1.botTest)("optimisticOperation.fee must not be NaN", function () {
731
+ return (0, expect_1["default"])(!optimisticOperation.fee.isNaN()).toBe(true);
732
+ });
733
+ (0, bot_test_context_1.botTest)("operation.value must not be NaN", function () {
734
+ return (0, expect_1["default"])(!operation.value.isNaN()).toBe(true);
735
+ });
736
+ (0, bot_test_context_1.botTest)("operation.fee must not be NaN", function () {
737
+ return (0, expect_1["default"])(!operation.fee.isNaN()).toBe(true);
738
+ });
690
739
  }
691
740
  //# sourceMappingURL=engine.js.map