@ledgerhq/live-common 23.1.0 → 24.0.0-next.2

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 (470) hide show
  1. package/lib/__tests__/mocks/account.js +3 -3
  2. package/lib/__tests__/mocks/account.js.map +1 -1
  3. package/lib/__tests__/test-helpers/bridge.d.ts +1 -4
  4. package/lib/__tests__/test-helpers/bridge.d.ts.map +1 -1
  5. package/lib/__tests__/test-helpers/bridge.js +1 -28
  6. package/lib/__tests__/test-helpers/bridge.js.map +1 -1
  7. package/lib/__tests__/test-helpers/setup.js +51 -0
  8. package/lib/__tests__/test-helpers/setup.js.map +1 -1
  9. package/lib/api/Ripple.d.ts.map +1 -1
  10. package/lib/api/Ripple.js +113 -68
  11. package/lib/api/Ripple.js.map +1 -1
  12. package/lib/apps/support.d.ts.map +1 -1
  13. package/lib/apps/support.js +6 -2
  14. package/lib/apps/support.js.map +1 -1
  15. package/lib/bot/index.d.ts.map +1 -1
  16. package/lib/bot/index.js +13 -19
  17. package/lib/bot/index.js.map +1 -1
  18. package/lib/bot/test.bot.d.ts +1 -1
  19. package/lib/bot/test.bot.d.ts.map +1 -1
  20. package/lib/bot/test.bot.js +1 -2
  21. package/lib/bot/test.bot.js.map +1 -1
  22. package/lib/countervalues/logic.integration.test.d.ts +2 -0
  23. package/lib/countervalues/logic.integration.test.d.ts.map +1 -0
  24. package/lib/countervalues/{logic.test.js → logic.integration.test.js} +1 -1
  25. package/lib/countervalues/logic.integration.test.js.map +1 -0
  26. package/lib/countervalues/react.d.ts +1 -21
  27. package/lib/countervalues/react.d.ts.map +1 -1
  28. package/lib/countervalues/react.js +1 -77
  29. package/lib/countervalues/react.js.map +1 -1
  30. package/lib/derivation.d.ts +1 -0
  31. package/lib/derivation.d.ts.map +1 -1
  32. package/lib/derivation.js +3 -2
  33. package/lib/derivation.js.map +1 -1
  34. package/lib/env.d.ts +16 -6
  35. package/lib/env.d.ts.map +1 -1
  36. package/lib/env.js +11 -1
  37. package/lib/env.js.map +1 -1
  38. package/lib/env.react.d.ts +1 -1
  39. package/lib/env.react.d.ts.map +1 -1
  40. package/lib/errors.d.ts +0 -3
  41. package/lib/errors.d.ts.map +1 -1
  42. package/lib/errors.js +2 -3
  43. package/lib/errors.js.map +1 -1
  44. package/lib/exchange/index.d.ts +5 -0
  45. package/lib/exchange/index.d.ts.map +1 -1
  46. package/lib/exchange/index.js.map +1 -1
  47. package/lib/exchange/swap/checkQuote.d.ts +4 -0
  48. package/lib/exchange/swap/checkQuote.d.ts.map +1 -0
  49. package/lib/{families/tezos/bridge.test.js → exchange/swap/checkQuote.js} +35 -36
  50. package/lib/exchange/swap/checkQuote.js.map +1 -0
  51. package/lib/exchange/swap/checkQuote.test.d.ts +2 -0
  52. package/lib/exchange/swap/checkQuote.test.d.ts.map +1 -0
  53. package/lib/{families/filecoin/bridge.test.js → exchange/swap/checkQuote.test.js} +53 -42
  54. package/lib/exchange/swap/checkQuote.test.js.map +1 -0
  55. package/lib/exchange/swap/completeExchange.d.ts.map +1 -1
  56. package/lib/exchange/swap/completeExchange.js +9 -9
  57. package/lib/exchange/swap/completeExchange.js.map +1 -1
  58. package/lib/exchange/swap/getExchangeRates.d.ts.map +1 -1
  59. package/lib/exchange/swap/getExchangeRates.js +3 -1
  60. package/lib/exchange/swap/getExchangeRates.js.map +1 -1
  61. package/lib/exchange/swap/getExchangeRates.test.js +1 -2
  62. package/lib/exchange/swap/getExchangeRates.test.js.map +1 -1
  63. package/lib/exchange/swap/getProviders.d.ts.map +1 -1
  64. package/lib/exchange/swap/getProviders.js +10 -4
  65. package/lib/exchange/swap/getProviders.js.map +1 -1
  66. package/lib/exchange/swap/getStatus.d.ts +1 -3
  67. package/lib/exchange/swap/getStatus.d.ts.map +1 -1
  68. package/lib/exchange/swap/getStatus.js +2 -30
  69. package/lib/exchange/swap/getStatus.js.map +1 -1
  70. package/lib/exchange/swap/hooks/usePollKYCStatus.test.js +4 -5
  71. package/lib/exchange/swap/hooks/usePollKYCStatus.test.js.map +1 -1
  72. package/lib/exchange/swap/hooks/useProviderRates.d.ts +3 -4
  73. package/lib/exchange/swap/hooks/useProviderRates.d.ts.map +1 -1
  74. package/lib/exchange/swap/hooks/useProviderRates.js +35 -5
  75. package/lib/exchange/swap/hooks/useProviderRates.js.map +1 -1
  76. package/lib/exchange/swap/hooks/useProviderRates.test.js +107 -3
  77. package/lib/exchange/swap/hooks/useProviderRates.test.js.map +1 -1
  78. package/lib/exchange/swap/hooks/useSwapProviders.test.js +1 -2
  79. package/lib/exchange/swap/hooks/useSwapProviders.test.js.map +1 -1
  80. package/lib/exchange/swap/hooks/useSwapTransaction.d.ts +5 -4
  81. package/lib/exchange/swap/hooks/useSwapTransaction.d.ts.map +1 -1
  82. package/lib/exchange/swap/hooks/useSwapTransaction.js +6 -6
  83. package/lib/exchange/swap/hooks/useSwapTransaction.js.map +1 -1
  84. package/lib/exchange/swap/hooks/useUpdateMaxAmount.d.ts +4 -3
  85. package/lib/exchange/swap/hooks/useUpdateMaxAmount.d.ts.map +1 -1
  86. package/lib/exchange/swap/hooks/useUpdateMaxAmount.js +8 -5
  87. package/lib/exchange/swap/hooks/useUpdateMaxAmount.js.map +1 -1
  88. package/lib/exchange/swap/hooks/useUpdateMaxAmount.test.js +37 -7
  89. package/lib/exchange/swap/hooks/useUpdateMaxAmount.test.js.map +1 -1
  90. package/lib/exchange/swap/index.d.ts +10 -8
  91. package/lib/exchange/swap/index.d.ts.map +1 -1
  92. package/lib/exchange/swap/index.js +43 -18
  93. package/lib/exchange/swap/index.js.map +1 -1
  94. package/lib/exchange/swap/index.test.d.ts +2 -0
  95. package/lib/exchange/swap/index.test.d.ts.map +1 -0
  96. package/lib/exchange/swap/index.test.js +30 -0
  97. package/lib/exchange/swap/index.test.js.map +1 -0
  98. package/lib/exchange/swap/initSwap.d.ts +1 -1
  99. package/lib/exchange/swap/initSwap.d.ts.map +1 -1
  100. package/lib/exchange/swap/initSwap.js +30 -25
  101. package/lib/exchange/swap/initSwap.js.map +1 -1
  102. package/lib/exchange/swap/mock.d.ts +5 -2
  103. package/lib/exchange/swap/mock.d.ts.map +1 -1
  104. package/lib/exchange/swap/mock.js +127 -6
  105. package/lib/exchange/swap/mock.js.map +1 -1
  106. package/lib/exchange/swap/postSwapState.d.ts +4 -0
  107. package/lib/exchange/swap/postSwapState.d.ts.map +1 -0
  108. package/lib/exchange/swap/postSwapState.js +121 -0
  109. package/lib/exchange/swap/postSwapState.js.map +1 -0
  110. package/lib/exchange/swap/types.d.ts +30 -2
  111. package/lib/exchange/swap/types.d.ts.map +1 -1
  112. package/lib/exchange/swap/updateAccountSwapStatus.d.ts.map +1 -1
  113. package/lib/exchange/swap/updateAccountSwapStatus.js +2 -2
  114. package/lib/exchange/swap/updateAccountSwapStatus.js.map +1 -1
  115. package/lib/exchange/swap/utils/index.d.ts +19 -2
  116. package/lib/exchange/swap/utils/index.d.ts.map +1 -1
  117. package/lib/exchange/swap/utils/index.js +96 -20
  118. package/lib/exchange/swap/utils/index.js.map +1 -1
  119. package/lib/exchange/swap/utils/index.test.js +95 -48
  120. package/lib/exchange/swap/utils/index.test.js.map +1 -1
  121. package/lib/families/algorand/bridge.integration.test.d.ts +2 -0
  122. package/lib/families/algorand/bridge.integration.test.d.ts.map +1 -0
  123. package/lib/families/algorand/{test-dataset.js → bridge.integration.test.js} +12 -11
  124. package/lib/families/algorand/bridge.integration.test.js.map +1 -0
  125. package/lib/families/bitcoin/bridge.integration.test.d.ts +2 -0
  126. package/lib/families/bitcoin/bridge.integration.test.d.ts.map +1 -0
  127. package/lib/families/bitcoin/{test-dataset.js → bridge.integration.test.js} +17 -14
  128. package/lib/families/bitcoin/bridge.integration.test.js.map +1 -0
  129. package/lib/families/bitcoin/descriptor.d.ts.map +1 -1
  130. package/lib/families/bitcoin/descriptor.js +2 -1
  131. package/lib/families/bitcoin/descriptor.js.map +1 -1
  132. package/lib/families/bitcoin/satstack.d.ts.map +1 -1
  133. package/lib/families/bitcoin/satstack.js +5 -6
  134. package/lib/families/bitcoin/satstack.js.map +1 -1
  135. package/lib/families/bitcoin/satstack.test.js +4 -1
  136. package/lib/families/bitcoin/satstack.test.js.map +1 -1
  137. package/lib/families/bitcoin/specs.d.ts.map +1 -1
  138. package/lib/families/bitcoin/specs.js +1 -2
  139. package/lib/families/bitcoin/specs.js.map +1 -1
  140. package/lib/families/cardano/bridge.integration.test.d.ts +2 -0
  141. package/lib/families/cardano/bridge.integration.test.d.ts.map +1 -0
  142. package/lib/families/cardano/{test-dataset.js → bridge.integration.test.js} +4 -2
  143. package/lib/families/cardano/bridge.integration.test.js.map +1 -0
  144. package/lib/families/celo/bridge.integration.test.d.ts +2 -0
  145. package/lib/families/celo/bridge.integration.test.d.ts.map +1 -0
  146. package/lib/families/celo/bridge.integration.test.js +16 -0
  147. package/lib/families/celo/bridge.integration.test.js.map +1 -0
  148. package/lib/families/cosmos/bridge.integration.test.d.ts +2 -0
  149. package/lib/families/cosmos/bridge.integration.test.d.ts.map +1 -0
  150. package/lib/families/cosmos/{test-dataset.js → bridge.integration.test.js} +5 -4
  151. package/lib/families/cosmos/bridge.integration.test.js.map +1 -0
  152. package/lib/families/cosmos/speculos-deviceActions.js +2 -2
  153. package/lib/families/crypto_org/bridge.integration.test.d.ts +2 -0
  154. package/lib/families/crypto_org/bridge.integration.test.d.ts.map +1 -0
  155. package/lib/families/crypto_org/bridge.integration.test.js +16 -0
  156. package/lib/families/crypto_org/bridge.integration.test.js.map +1 -0
  157. package/lib/families/elrond/bridge.integration.test.d.ts +2 -0
  158. package/lib/families/elrond/bridge.integration.test.d.ts.map +1 -0
  159. package/lib/families/elrond/{test-dataset.js → bridge.integration.test.js} +5 -5
  160. package/lib/families/elrond/bridge.integration.test.js.map +1 -0
  161. package/lib/families/ethereum/bridge.integration.test.d.ts +2 -0
  162. package/lib/families/ethereum/bridge.integration.test.d.ts.map +1 -0
  163. package/lib/families/ethereum/{test-dataset.js → bridge.integration.test.js} +8 -24
  164. package/lib/families/ethereum/bridge.integration.test.js.map +1 -0
  165. package/lib/families/ethereum/datasets/ethereum1.d.ts +3 -0
  166. package/lib/families/ethereum/datasets/ethereum1.d.ts.map +1 -0
  167. package/lib/families/ethereum/datasets/ethereum1.js +22 -0
  168. package/lib/families/ethereum/datasets/ethereum1.js.map +1 -0
  169. package/lib/families/ethereum/modules/compound.resilience.integration.test.d.ts +2 -0
  170. package/lib/families/ethereum/modules/compound.resilience.integration.test.d.ts.map +1 -0
  171. package/lib/families/ethereum/modules/{compound.resilience.test.js → compound.resilience.integration.test.js} +3 -3
  172. package/lib/families/ethereum/modules/compound.resilience.integration.test.js.map +1 -0
  173. package/lib/families/ethereum/modules/erc1155.d.ts.map +1 -1
  174. package/lib/families/ethereum/modules/erc1155.js +5 -1
  175. package/lib/families/ethereum/modules/erc1155.js.map +1 -1
  176. package/lib/families/ethereum/modules/erc721.d.ts.map +1 -1
  177. package/lib/families/ethereum/modules/erc721.js +5 -0
  178. package/lib/families/ethereum/modules/erc721.js.map +1 -1
  179. package/lib/families/ethereum/nft.unit.test.js +35 -15
  180. package/lib/families/ethereum/nft.unit.test.js.map +1 -1
  181. package/lib/families/ethereum/synchronisation.d.ts.map +1 -1
  182. package/lib/families/ethereum/synchronisation.integration.test.d.ts +2 -0
  183. package/lib/families/ethereum/synchronisation.integration.test.d.ts.map +1 -0
  184. package/lib/families/ethereum/{synchronisation.test.js → synchronisation.integration.test.js} +4 -4
  185. package/lib/families/ethereum/synchronisation.integration.test.js.map +1 -0
  186. package/lib/families/ethereum/synchronisation.js +17 -13
  187. package/lib/families/ethereum/synchronisation.js.map +1 -1
  188. package/lib/families/filecoin/bridge.integration.test.d.ts +2 -0
  189. package/lib/families/filecoin/bridge.integration.test.d.ts.map +1 -0
  190. package/lib/families/filecoin/{test-dataset.js → bridge.integration.test.js} +84 -3
  191. package/lib/families/filecoin/bridge.integration.test.js.map +1 -0
  192. package/lib/families/hedera/bridge.integration.test.d.ts +2 -0
  193. package/lib/families/hedera/bridge.integration.test.d.ts.map +1 -0
  194. package/lib/families/hedera/{test-dataset.js → bridge.integration.test.js} +5 -3
  195. package/lib/families/hedera/bridge.integration.test.js.map +1 -0
  196. package/lib/families/polkadot/bridge.integration.test.d.ts +2 -0
  197. package/lib/families/polkadot/bridge.integration.test.d.ts.map +1 -0
  198. package/lib/families/polkadot/{test-dataset.js → bridge.integration.test.js} +138 -4
  199. package/lib/families/polkadot/bridge.integration.test.js.map +1 -0
  200. package/lib/families/ripple/bridge.integration.test.d.ts +2 -0
  201. package/lib/families/ripple/bridge.integration.test.d.ts.map +1 -0
  202. package/lib/families/ripple/{test-dataset.js → bridge.integration.test.js} +4 -2
  203. package/lib/families/ripple/bridge.integration.test.js.map +1 -0
  204. package/lib/families/solana/api/chain/account/token.d.ts +1 -1
  205. package/lib/families/solana/api/chain/account/vote.d.ts +12 -12
  206. package/lib/families/solana/api/chain/instruction/system/types.d.ts +4 -4
  207. package/lib/families/solana/bridge.integration.test.d.ts +2 -0
  208. package/lib/families/solana/bridge.integration.test.d.ts.map +1 -0
  209. package/lib/families/solana/{test-dataset.js → bridge.integration.test.js} +289 -73
  210. package/lib/families/solana/bridge.integration.test.js.map +1 -0
  211. package/lib/families/stellar/bridge.integration.test.d.ts +2 -0
  212. package/lib/families/stellar/bridge.integration.test.d.ts.map +1 -0
  213. package/lib/families/stellar/{test-dataset.js → bridge.integration.test.js} +9 -8
  214. package/lib/families/stellar/bridge.integration.test.js.map +1 -0
  215. package/lib/families/stellar/js-estimateMaxSpendable.d.ts.map +1 -1
  216. package/lib/families/stellar/js-estimateMaxSpendable.js +2 -2
  217. package/lib/families/stellar/js-estimateMaxSpendable.js.map +1 -1
  218. package/lib/families/tezos/{test-dataset.d.ts → bridge.integration.test.d.ts} +2 -5
  219. package/lib/families/tezos/bridge.integration.test.d.ts.map +1 -0
  220. package/lib/families/tezos/{test-dataset.js → bridge.integration.test.js} +73 -2
  221. package/lib/families/tezos/bridge.integration.test.js.map +1 -0
  222. package/lib/families/tezos/synchronisation.js +2 -2
  223. package/lib/families/tezos/synchronisation.js.map +1 -1
  224. package/lib/families/tron/bridge.integration.test.d.ts +2 -0
  225. package/lib/families/tron/bridge.integration.test.d.ts.map +1 -0
  226. package/lib/families/tron/{test-dataset.js → bridge.integration.test.js} +5 -4
  227. package/lib/families/tron/bridge.integration.test.js.map +1 -0
  228. package/lib/hw/actions/initSwap.d.ts +4 -3
  229. package/lib/hw/actions/initSwap.d.ts.map +1 -1
  230. package/lib/hw/actions/initSwap.js +7 -5
  231. package/lib/hw/actions/initSwap.js.map +1 -1
  232. package/lib/load/speculos.d.ts.map +1 -1
  233. package/lib/load/speculos.js +5 -2
  234. package/lib/load/speculos.js.map +1 -1
  235. package/lib/nft/nftOperationId.d.ts +15 -0
  236. package/lib/nft/nftOperationId.d.ts.map +1 -0
  237. package/lib/nft/nftOperationId.js +50 -0
  238. package/lib/nft/nftOperationId.js.map +1 -0
  239. package/lib/operation.d.ts +1 -1
  240. package/lib/operation.d.ts.map +1 -1
  241. package/lib/operation.js +23 -1
  242. package/lib/operation.js.map +1 -1
  243. package/lib/portfolio/v2/index.d.ts +6 -1
  244. package/lib/portfolio/v2/index.d.ts.map +1 -1
  245. package/lib/portfolio/v2/index.js +7 -3
  246. package/lib/portfolio/v2/index.js.map +1 -1
  247. package/lib/portfolio/v2/range.d.ts +7 -1
  248. package/lib/portfolio/v2/range.d.ts.map +1 -1
  249. package/lib/portfolio/v2/range.js +37 -18
  250. package/lib/portfolio/v2/range.js.map +1 -1
  251. package/lib/portfolio/v2/range.test.d.ts +2 -0
  252. package/lib/portfolio/v2/range.test.d.ts.map +1 -0
  253. package/lib/portfolio/v2/range.test.js +51 -0
  254. package/lib/portfolio/v2/range.test.js.map +1 -0
  255. package/package.json +14 -10
  256. package/src/__tests__/mocks/account.ts +3 -3
  257. package/src/__tests__/test-helpers/bridge.ts +2 -35
  258. package/src/__tests__/test-helpers/setup.ts +39 -0
  259. package/src/api/Ripple.ts +97 -52
  260. package/src/apps/support.ts +6 -2
  261. package/src/bot/index.ts +26 -24
  262. package/src/bot/test.bot.ts +2 -2
  263. package/src/countervalues/{logic.test.ts → logic.integration.test.ts} +0 -0
  264. package/src/countervalues/react.tsx +2 -131
  265. package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +15 -1
  266. package/src/derivation.ts +2 -1
  267. package/src/env.ts +12 -2
  268. package/src/errors.ts +0 -1
  269. package/src/exchange/index.ts +7 -0
  270. package/src/exchange/swap/checkQuote.test.ts +53 -0
  271. package/src/exchange/swap/checkQuote.ts +34 -0
  272. package/src/exchange/swap/completeExchange.ts +9 -11
  273. package/src/exchange/swap/getExchangeRates.test.ts +1 -2
  274. package/src/exchange/swap/getExchangeRates.ts +5 -3
  275. package/src/exchange/swap/getProviders.ts +12 -4
  276. package/src/exchange/swap/getStatus.ts +2 -12
  277. package/src/exchange/swap/hooks/usePollKYCStatus.test.ts +1 -3
  278. package/src/exchange/swap/hooks/useProviderRates.test.ts +104 -3
  279. package/src/exchange/swap/hooks/useProviderRates.ts +57 -9
  280. package/src/exchange/swap/hooks/useSwapProviders.test.ts +1 -3
  281. package/src/exchange/swap/hooks/useSwapTransaction.ts +14 -13
  282. package/src/exchange/swap/hooks/useUpdateMaxAmount.test.ts +33 -7
  283. package/src/exchange/swap/hooks/useUpdateMaxAmount.ts +13 -7
  284. package/src/exchange/swap/index.test.ts +36 -0
  285. package/src/exchange/swap/index.ts +51 -30
  286. package/src/exchange/swap/initSwap.ts +54 -40
  287. package/src/exchange/swap/mock.ts +128 -13
  288. package/src/exchange/swap/postSwapState.ts +61 -0
  289. package/src/exchange/swap/types.ts +68 -5
  290. package/src/exchange/swap/updateAccountSwapStatus.ts +4 -4
  291. package/src/exchange/swap/utils/index.test.ts +127 -63
  292. package/src/exchange/swap/utils/index.ts +128 -23
  293. package/src/families/algorand/{test-dataset.ts → bridge.integration.test.ts} +13 -10
  294. package/src/families/bitcoin/__snapshots__/bridge.integration.test.ts.snap +27607 -0
  295. package/src/families/bitcoin/{test-dataset.ts → bridge.integration.test.ts} +18 -13
  296. package/src/families/bitcoin/descriptor.ts +1 -0
  297. package/src/families/bitcoin/satstack.test.ts +4 -1
  298. package/src/families/bitcoin/satstack.ts +9 -5
  299. package/src/families/bitcoin/specs.ts +0 -1
  300. package/src/families/cardano/__snapshots__/{bridge.test.ts.snap → bridge.integration.test.ts.snap} +0 -0
  301. package/src/families/cardano/{test-dataset.ts → bridge.integration.test.ts} +3 -1
  302. package/src/families/celo/bridge.integration.test.ts +14 -0
  303. package/src/families/cosmos/__snapshots__/{bridge.test.ts.snap → bridge.integration.test.ts.snap} +0 -0
  304. package/src/families/cosmos/{test-dataset.ts → bridge.integration.test.ts} +17 -15
  305. package/src/families/cosmos/speculos-deviceActions.ts +2 -2
  306. package/src/families/crypto_org/__snapshots__/bridge.integration.test.ts.snap +2968 -0
  307. package/src/families/crypto_org/bridge.integration.test.ts +14 -0
  308. package/src/families/elrond/__snapshots__/bridge.integration.test.ts.snap +207 -0
  309. package/src/families/elrond/{test-dataset.ts → bridge.integration.test.ts} +6 -4
  310. package/src/families/ethereum/__snapshots__/bridge.integration.test.ts.snap +3263 -0
  311. package/src/families/ethereum/{test-dataset.ts → bridge.integration.test.ts} +6 -19
  312. package/src/families/ethereum/datasets/ethereum1.ts +20 -0
  313. package/src/families/ethereum/modules/{compound.resilience.test.ts → compound.resilience.integration.test.ts} +1 -1
  314. package/src/families/ethereum/modules/erc1155.ts +12 -5
  315. package/src/families/ethereum/modules/erc721.ts +11 -0
  316. package/src/families/ethereum/nft.unit.test.ts +24 -17
  317. package/src/families/ethereum/{synchronisation.test.ts → synchronisation.integration.test.ts} +1 -1
  318. package/src/families/ethereum/synchronisation.ts +22 -18
  319. package/src/families/filecoin/__snapshots__/{bridge.test.ts.snap → bridge.integration.test.ts.snap} +0 -0
  320. package/src/families/filecoin/{test-dataset.ts → bridge.integration.test.ts} +35 -3
  321. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +5 -0
  322. package/src/families/hedera/{test-dataset.ts → bridge.integration.test.ts} +5 -2
  323. package/src/families/polkadot/{test-dataset.ts → bridge.integration.test.ts} +81 -5
  324. package/src/families/ripple/{test-dataset.ts → bridge.integration.test.ts} +5 -1
  325. package/src/families/solana/__snapshots__/{bridge.test.ts.snap → bridge.integration.test.ts.snap} +0 -0
  326. package/src/families/solana/{test-dataset.ts → bridge.integration.test.ts} +170 -5
  327. package/src/families/stellar/__snapshots__/{bridge.test.ts.snap → bridge.integration.test.ts.snap} +0 -0
  328. package/src/families/stellar/{test-dataset.ts → bridge.integration.test.ts} +5 -3
  329. package/src/families/stellar/js-estimateMaxSpendable.ts +3 -1
  330. package/src/families/tezos/{test-dataset.ts → bridge.integration.test.ts} +22 -1
  331. package/src/families/tezos/synchronisation.ts +1 -1
  332. package/src/families/tron/{test-dataset.ts → bridge.integration.test.ts} +6 -5
  333. package/src/hw/actions/initSwap.ts +20 -9
  334. package/src/load/speculos.ts +5 -2
  335. package/src/nft/nftOperationId.ts +47 -0
  336. package/src/operation.ts +50 -1
  337. package/src/portfolio/v2/index.ts +7 -2
  338. package/src/portfolio/v2/range.test.ts +66 -0
  339. package/src/portfolio/v2/range.ts +22 -8
  340. package/lib/__tests__/portfolio.d.ts +0 -2
  341. package/lib/__tests__/portfolio.d.ts.map +0 -1
  342. package/lib/__tests__/portfolio.js +0 -297
  343. package/lib/__tests__/portfolio.js.map +0 -1
  344. package/lib/__tests__/test-helpers/libcore-setup.d.ts +0 -3
  345. package/lib/__tests__/test-helpers/libcore-setup.d.ts.map +0 -1
  346. package/lib/__tests__/test-helpers/libcore-setup.js +0 -68
  347. package/lib/__tests__/test-helpers/libcore-setup.js.map +0 -1
  348. package/lib/__tests__/test-helpers/libcore-setup.native.d.ts +0 -10
  349. package/lib/__tests__/test-helpers/libcore-setup.native.d.ts.map +0 -1
  350. package/lib/__tests__/test-helpers/libcore-setup.native.js +0 -16
  351. package/lib/__tests__/test-helpers/libcore-setup.native.js.map +0 -1
  352. package/lib/countervalues/logic.test.d.ts +0 -2
  353. package/lib/countervalues/logic.test.d.ts.map +0 -1
  354. package/lib/countervalues/logic.test.js.map +0 -1
  355. package/lib/families/algorand/test-dataset.d.ts +0 -5
  356. package/lib/families/algorand/test-dataset.d.ts.map +0 -1
  357. package/lib/families/algorand/test-dataset.js.map +0 -1
  358. package/lib/families/bitcoin/test-dataset.d.ts +0 -5
  359. package/lib/families/bitcoin/test-dataset.d.ts.map +0 -1
  360. package/lib/families/bitcoin/test-dataset.js.map +0 -1
  361. package/lib/families/cardano/bridge.test.d.ts +0 -2
  362. package/lib/families/cardano/bridge.test.d.ts.map +0 -1
  363. package/lib/families/cardano/bridge.test.js +0 -11
  364. package/lib/families/cardano/bridge.test.js.map +0 -1
  365. package/lib/families/cardano/test-dataset.d.ts +0 -5
  366. package/lib/families/cardano/test-dataset.d.ts.map +0 -1
  367. package/lib/families/cardano/test-dataset.js.map +0 -1
  368. package/lib/families/cosmos/bridge.test.d.ts +0 -2
  369. package/lib/families/cosmos/bridge.test.d.ts.map +0 -1
  370. package/lib/families/cosmos/bridge.test.js +0 -11
  371. package/lib/families/cosmos/bridge.test.js.map +0 -1
  372. package/lib/families/cosmos/test-dataset.d.ts +0 -5
  373. package/lib/families/cosmos/test-dataset.d.ts.map +0 -1
  374. package/lib/families/cosmos/test-dataset.js.map +0 -1
  375. package/lib/families/crypto_org/test-dataset.d.ts +0 -5
  376. package/lib/families/crypto_org/test-dataset.d.ts.map +0 -1
  377. package/lib/families/crypto_org/test-dataset.js +0 -12
  378. package/lib/families/crypto_org/test-dataset.js.map +0 -1
  379. package/lib/families/elrond/test-dataset.d.ts +0 -5
  380. package/lib/families/elrond/test-dataset.d.ts.map +0 -1
  381. package/lib/families/elrond/test-dataset.js.map +0 -1
  382. package/lib/families/ethereum/modules/compound.resilience.test.d.ts +0 -2
  383. package/lib/families/ethereum/modules/compound.resilience.test.d.ts.map +0 -1
  384. package/lib/families/ethereum/modules/compound.resilience.test.js.map +0 -1
  385. package/lib/families/ethereum/synchronisation.test.d.ts +0 -2
  386. package/lib/families/ethereum/synchronisation.test.d.ts.map +0 -1
  387. package/lib/families/ethereum/synchronisation.test.js.map +0 -1
  388. package/lib/families/ethereum/test-dataset.d.ts +0 -6
  389. package/lib/families/ethereum/test-dataset.d.ts.map +0 -1
  390. package/lib/families/ethereum/test-dataset.js.map +0 -1
  391. package/lib/families/filecoin/bridge.test.d.ts +0 -2
  392. package/lib/families/filecoin/bridge.test.d.ts.map +0 -1
  393. package/lib/families/filecoin/bridge.test.js.map +0 -1
  394. package/lib/families/filecoin/test-dataset.d.ts +0 -5
  395. package/lib/families/filecoin/test-dataset.d.ts.map +0 -1
  396. package/lib/families/filecoin/test-dataset.js.map +0 -1
  397. package/lib/families/hedera/test-dataset.d.ts +0 -5
  398. package/lib/families/hedera/test-dataset.d.ts.map +0 -1
  399. package/lib/families/hedera/test-dataset.js.map +0 -1
  400. package/lib/families/polkadot/bridge.test.d.ts +0 -2
  401. package/lib/families/polkadot/bridge.test.d.ts.map +0 -1
  402. package/lib/families/polkadot/bridge.test.js +0 -145
  403. package/lib/families/polkadot/bridge.test.js.map +0 -1
  404. package/lib/families/polkadot/test-dataset.d.ts +0 -5
  405. package/lib/families/polkadot/test-dataset.d.ts.map +0 -1
  406. package/lib/families/polkadot/test-dataset.js.map +0 -1
  407. package/lib/families/ripple/bridge.test.d.ts +0 -2
  408. package/lib/families/ripple/bridge.test.d.ts.map +0 -1
  409. package/lib/families/ripple/bridge.test.js +0 -11
  410. package/lib/families/ripple/bridge.test.js.map +0 -1
  411. package/lib/families/ripple/test-dataset.d.ts +0 -5
  412. package/lib/families/ripple/test-dataset.d.ts.map +0 -1
  413. package/lib/families/ripple/test-dataset.js.map +0 -1
  414. package/lib/families/solana/bridge.test.d.ts +0 -2
  415. package/lib/families/solana/bridge.test.d.ts.map +0 -1
  416. package/lib/families/solana/bridge.test.js +0 -11
  417. package/lib/families/solana/bridge.test.js.map +0 -1
  418. package/lib/families/solana/test-dataset.d.ts +0 -23
  419. package/lib/families/solana/test-dataset.d.ts.map +0 -1
  420. package/lib/families/solana/test-dataset.js.map +0 -1
  421. package/lib/families/solana/test-specifics.d.ts +0 -9
  422. package/lib/families/solana/test-specifics.d.ts.map +0 -1
  423. package/lib/families/solana/test-specifics.js +0 -237
  424. package/lib/families/solana/test-specifics.js.map +0 -1
  425. package/lib/families/stellar/bridge.test.d.ts +0 -2
  426. package/lib/families/stellar/bridge.test.d.ts.map +0 -1
  427. package/lib/families/stellar/bridge.test.js +0 -11
  428. package/lib/families/stellar/bridge.test.js.map +0 -1
  429. package/lib/families/stellar/test-dataset.d.ts +0 -7
  430. package/lib/families/stellar/test-dataset.d.ts.map +0 -1
  431. package/lib/families/stellar/test-dataset.js.map +0 -1
  432. package/lib/families/tezos/bridge.test.d.ts +0 -2
  433. package/lib/families/tezos/bridge.test.d.ts.map +0 -1
  434. package/lib/families/tezos/bridge.test.js.map +0 -1
  435. package/lib/families/tezos/test-dataset.d.ts.map +0 -1
  436. package/lib/families/tezos/test-dataset.js.map +0 -1
  437. package/lib/families/tron/test-dataset.d.ts +0 -5
  438. package/lib/families/tron/test-dataset.d.ts.map +0 -1
  439. package/lib/families/tron/test-dataset.js.map +0 -1
  440. package/lib/generated/test-dataset.d.ts +0 -19
  441. package/lib/generated/test-dataset.d.ts.map +0 -1
  442. package/lib/generated/test-dataset.js +0 -38
  443. package/lib/generated/test-dataset.js.map +0 -1
  444. package/lib/portfolio/index.d.ts +0 -30
  445. package/lib/portfolio/index.d.ts.map +0 -1
  446. package/lib/portfolio/index.js +0 -399
  447. package/lib/portfolio/index.js.map +0 -1
  448. package/lib/portfolio/range.d.ts +0 -12
  449. package/lib/portfolio/range.d.ts.map +0 -1
  450. package/lib/portfolio/range.js +0 -73
  451. package/lib/portfolio/range.js.map +0 -1
  452. package/src/__tests__/__snapshots__/portfolio.ts.snap +0 -2770
  453. package/src/__tests__/portfolio.ts +0 -360
  454. package/src/__tests__/test-helpers/libcore-setup.native.ts +0 -19
  455. package/src/__tests__/test-helpers/libcore-setup.ts +0 -51
  456. package/src/families/bitcoin/bridge.test.ts.bak +0 -6
  457. package/src/families/cardano/bridge.test.ts +0 -6
  458. package/src/families/cosmos/bridge.test.ts +0 -6
  459. package/src/families/crypto_org/test-dataset.ts +0 -13
  460. package/src/families/ethereum/bridge.test.ts.bak +0 -8
  461. package/src/families/filecoin/bridge.test.ts +0 -39
  462. package/src/families/polkadot/bridge.test.ts +0 -81
  463. package/src/families/ripple/bridge.test.ts +0 -6
  464. package/src/families/solana/bridge.test.ts +0 -6
  465. package/src/families/solana/test-specifics.ts +0 -170
  466. package/src/families/stellar/bridge.test.ts +0 -6
  467. package/src/families/tezos/bridge.test.ts +0 -24
  468. package/src/generated/test-dataset.ts +0 -48
  469. package/src/portfolio/index.ts +0 -505
  470. package/src/portfolio/range.ts +0 -71
@@ -1,3 +1,6 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ import { testBridge } from "../../__tests__/test-helpers/bridge";
3
+
1
4
  import invariant from "invariant";
2
5
  import { BigNumber } from "bignumber.js";
3
6
  import type { AccountRaw, DatasetTest } from "../../types";
@@ -11,24 +14,7 @@ import type { Transaction } from "./types";
11
14
  import ethereumScanAccounts1 from "./datasets/ethereum.scanAccounts.1";
12
15
  import ethereum_classic from "./datasets/ethereum_classic";
13
16
  import { syncAccount } from "../../__tests__/test-helpers/bridge";
14
- export const ethereum1: AccountRaw = {
15
- id: "js:1:ethereum:0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5:",
16
- seedIdentifier: "0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5",
17
- name: "Ethereum legacy xpub6Bem...JyAdpYZy",
18
- derivationMode: "",
19
- index: 0,
20
- freshAddress: "0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5",
21
- freshAddressPath: "44'/60'/0'/0/0",
22
- freshAddresses: [],
23
- pendingOperations: [],
24
- operations: [],
25
- currencyId: "ethereum",
26
- unitMagnitude: 18,
27
- balance: "",
28
- blockHeight: 0,
29
- lastSyncDate: "",
30
- xpub: "",
31
- };
17
+ import { ethereum1 } from "./datasets/ethereum1";
32
18
 
33
19
  const expectedTokenAccount = (a) => {
34
20
  invariant(a && a.type === "TokenAccount", "expected token account");
@@ -171,4 +157,5 @@ const dataset: DatasetTest<Transaction> = {
171
157
  ethereum_classic,
172
158
  },
173
159
  };
174
- export default dataset;
160
+
161
+ testBridge(dataset);
@@ -0,0 +1,20 @@
1
+ import type { AccountRaw } from "../../../types";
2
+
3
+ export const ethereum1: AccountRaw = {
4
+ id: "js:1:ethereum:0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5:",
5
+ seedIdentifier: "0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5",
6
+ name: "Ethereum legacy xpub6Bem...JyAdpYZy",
7
+ derivationMode: "",
8
+ index: 0,
9
+ freshAddress: "0x0E3F0bb9516F01f2C34c25E0957518b8aC9414c5",
10
+ freshAddressPath: "44'/60'/0'/0/0",
11
+ freshAddresses: [],
12
+ pendingOperations: [],
13
+ operations: [],
14
+ currencyId: "ethereum",
15
+ unitMagnitude: 18,
16
+ balance: "",
17
+ blockHeight: 0,
18
+ lastSyncDate: "",
19
+ xpub: "",
20
+ };
@@ -4,7 +4,7 @@ import { fromAccountRaw } from "../../../account";
4
4
  import type { Account } from "../../../types";
5
5
  import { getAccountBridge } from "../../../bridge";
6
6
  import { makeBridgeCacheSystem } from "../../../bridge/cache";
7
- import { ethereum1 } from "../test-dataset";
7
+ import { ethereum1 } from "../datasets/ethereum1";
8
8
  import { setEnv } from "../../../env";
9
9
  setEnv("COMPOUND_API", "https://status.ledger.com"); // hack to hit an endpoint that actually is going to 404
10
10
 
@@ -8,8 +8,8 @@ import {
8
8
  } from "@ledgerhq/errors";
9
9
  import { validateRecipient } from "../transaction";
10
10
  import type { ModeModule, Transaction } from "../types";
11
- import type { Account } from "../../../types";
12
11
  import { prepareTransaction } from "./erc721";
12
+ import { Account } from "../../../types";
13
13
 
14
14
  const NotOwnedNft = createCustomErrorClass("NotOwnedNft");
15
15
  const NotEnoughNftOwned = createCustomErrorClass("NotEnoughNftOwned");
@@ -124,10 +124,17 @@ const erc1155Transfer: ModeModule = {
124
124
  */
125
125
  fillOptimisticOperation(a, t, op) {
126
126
  op.type = "FEES";
127
- op.extra = {
128
- ...op.extra,
129
- approving: true, // workaround to track the status ENABLING
130
- };
127
+ op.nftOperations = t.tokenIds?.map((tokenId, i) => ({
128
+ ...op,
129
+ id: "", // operation ID will be filled by patchOperationWithHash
130
+ type: "NFT_OUT",
131
+ senders: [eip55.encode(a.freshAddress)],
132
+ recipients: [eip55.encode(t.recipient)],
133
+ standard: "ERC1155",
134
+ contract: eip55.encode(t.collection ?? ""),
135
+ tokenId,
136
+ value: t.quantities?.[i] || new BigNumber(0),
137
+ }));
131
138
  },
132
139
 
133
140
  prepareTransaction,
@@ -118,6 +118,17 @@ const erc721Transfer: ModeModule = {
118
118
  */
119
119
  fillOptimisticOperation(a, t, op) {
120
120
  op.type = "FEES";
121
+ op.nftOperations = t.tokenIds?.map((tokenId, i) => ({
122
+ ...op,
123
+ id: "", // operation ID will be filled by patchOperationWithHash
124
+ type: "NFT_OUT",
125
+ senders: [eip55.encode(a.freshAddress)],
126
+ recipients: [eip55.encode(t.recipient)],
127
+ standard: "ERC721",
128
+ contract: eip55.encode(t.collection ?? ""),
129
+ tokenId,
130
+ value: t.quantities?.[i] || new BigNumber(0),
131
+ }));
121
132
  },
122
133
 
123
134
  getResolutionConfig: () => ({ nft: true }),
@@ -13,6 +13,7 @@ import {
13
13
  nftsFromOperations,
14
14
  } from "../../nft";
15
15
  import { Transaction } from "./types";
16
+ import { encodeERC1155OperationId } from "../../nft/nftOperationId";
16
17
 
17
18
  describe("nft merging", () => {
18
19
  const makeNFT = (
@@ -92,18 +93,21 @@ describe("nft merging", () => {
92
93
  describe("OpenSea lazy minting bs", () => {
93
94
  test("should have a correct on-chain nft amount even with OpenSea lazy minting", () => {
94
95
  const makeNftOperation = (
95
- type: Operation["type"],
96
- value: string | number,
97
- dateOrder: number
96
+ params: [Operation["type"], number],
97
+ index: number
98
98
  ): Operation => {
99
+ const [type, value] = params;
100
+
99
101
  if (!["NFT_IN", "NFT_OUT"].includes(type)) {
100
102
  return {} as Operation;
101
103
  }
102
104
 
103
- const id = encodeAccountId({
105
+ const now = Date.now() + index;
106
+ const currencyId = "polygon";
107
+ const accountId = encodeAccountId({
104
108
  type: "type",
105
- currencyId: "polygon",
106
109
  xpubOrAddress: "0xbob",
110
+ currencyId,
107
111
  derivationMode: "",
108
112
  version: "1",
109
113
  });
@@ -112,11 +116,12 @@ describe("OpenSea lazy minting bs", () => {
112
116
  const contract = "0x0000000000000000000000000000000000000000";
113
117
  const fee = new BigNumber(0);
114
118
  const tokenId = "42069";
115
- const hash = "FaKeHasH";
116
- const date = new Date(Date.now() + dateOrder ?? 0);
119
+ const hash = "FaKeHasH" + now;
120
+ const date = new Date(now);
121
+ const nftId = encodeNftId(accountId, contract, tokenId, currencyId);
117
122
 
118
123
  return {
119
- id,
124
+ id: encodeERC1155OperationId(nftId, hash, type),
120
125
  hash,
121
126
  senders: [sender],
122
127
  recipients: [receiver],
@@ -126,20 +131,22 @@ describe("OpenSea lazy minting bs", () => {
126
131
  tokenId,
127
132
  value: new BigNumber(value),
128
133
  type,
129
- accountId: id,
134
+ accountId,
130
135
  date,
131
136
  } as Operation;
132
137
  };
133
138
 
134
139
  // scenario with bob lazy minting 10 NFTs
135
- const ops = [
136
- makeNftOperation("NFT_OUT", 5, 0), // lazy mint sending 5 NFT
137
- makeNftOperation("NFT_IN", 1, 1), // receiving 1 of them back
138
- makeNftOperation("NFT_IN", 2, 2), // receiving 2 of them back
139
- makeNftOperation("NFT_OUT", 2, 3), // lazy mint sending 5 NFT (transformed by OpenSea in 2 txs) 1/2 (off-chain)
140
- makeNftOperation("NFT_OUT", 3, 4), // lazy mint sending 5 NFT (transformed by OpenSea in 2 txs) 2/2 (on-chain)
141
- makeNftOperation("NFT_IN", 1, 5), // receiving 1 back
142
- ];
140
+ const ops = (
141
+ [
142
+ ["NFT_OUT", 5], // lazy mint sending 5 NFT
143
+ ["NFT_IN", 1], // receiving 1 of them back
144
+ ["NFT_IN", 2], // receiving 2 of them back
145
+ ["NFT_OUT", 2], // lazy mint sending 5 NFT (transformed by OpenSea in 2 txs) 1/2 (off-chain)
146
+ ["NFT_OUT", 3], // lazy mint sending 5 NFT (transformed by OpenSea in 2 txs) 2/2 (on-chain)
147
+ ["NFT_IN", 1], // receiving 1 back
148
+ ] as [Operation["type"], number][]
149
+ ).map((params, i) => makeNftOperation(params, i));
143
150
 
144
151
  // What happened for bob:
145
152
  //
@@ -5,7 +5,7 @@ import { getAccountCurrency } from "../../account/helpers";
5
5
  import type { Account, SubAccount } from "../../types";
6
6
  import { getAccountBridge } from "../../bridge";
7
7
  import { makeBridgeCacheSystem } from "../../bridge/cache";
8
- import { ethereum1 } from "./test-dataset";
8
+ import { ethereum1 } from "./datasets/ethereum1";
9
9
 
10
10
  describe("blacklistedTokenIds functionality", () => {
11
11
  const account = fromAccountRaw(ethereum1);
@@ -20,6 +20,11 @@ import { API, apiForCurrency, Tx } from "../../api/Ethereum";
20
20
  import { digestTokenAccounts, prepareTokenAccounts } from "./modules";
21
21
  import { findTokenByAddressInCurrency } from "@ledgerhq/cryptoassets";
22
22
  import { encodeNftId, isNFTActive, nftsFromOperations } from "../../nft";
23
+ import { encodeOperationId } from "../../operation";
24
+ import {
25
+ encodeERC1155OperationId,
26
+ encodeERC721OperationId,
27
+ } from "../../nft/nftOperationId";
23
28
 
24
29
  export const getAccountShape: GetAccountShape = async (
25
30
  infoInput,
@@ -167,7 +172,9 @@ export const getAccountShape: GetAccountShape = async (
167
172
  const nfts = isNFTActive(currency)
168
173
  ? mergeNfts(
169
174
  initialAccount?.nfts || [],
170
- nftsFromOperations(operations).filter((n) => n.amount.gt(0))
175
+ nftsFromOperations(
176
+ mergeOps(operations, initialAccount?.pendingOperations || [])
177
+ ).filter((n) => n.amount.gt(0))
171
178
  )
172
179
  : undefined;
173
180
 
@@ -289,7 +296,7 @@ const txToOps =
289
296
  if (sending) {
290
297
  const type = "OUT";
291
298
  all.push({
292
- id: `${accountId}-${hash}-${type}`,
299
+ id: encodeOperationId(accountId, hash, type),
293
300
  hash,
294
301
  type,
295
302
  value,
@@ -308,7 +315,7 @@ const txToOps =
308
315
  if (receiving) {
309
316
  const type = "IN";
310
317
  all.push({
311
- id: `${accountId}-${hash}-${type}`,
318
+ id: encodeOperationId(accountId, hash, type),
312
319
  hash,
313
320
  type,
314
321
  value,
@@ -349,7 +356,7 @@ const txToOps =
349
356
  if (sending) {
350
357
  const type = "NFT_OUT";
351
358
  all.push({
352
- id: `${nftId}-${hash}-${type}`,
359
+ id: encodeERC721OperationId(nftId, hash, type),
353
360
  senders: [sender],
354
361
  recipients: [receiver],
355
362
  contract,
@@ -371,7 +378,7 @@ const txToOps =
371
378
  if (receiving) {
372
379
  const type = "NFT_IN";
373
380
  all.push({
374
- id: `${nftId}-${hash}-${type}`,
381
+ id: encodeERC721OperationId(nftId, hash, type),
375
382
  senders: [sender],
376
383
  recipients: [receiver],
377
384
  contract,
@@ -414,17 +421,12 @@ const txToOps =
414
421
  event.transfers.forEach((transfer, j) => {
415
422
  const tokenId = transfer.id;
416
423
  const value = new BigNumber(transfer.value);
417
- const nftId = encodeNftId(
418
- id,
419
- event.contract,
420
- tokenId,
421
- currency.id
422
- );
424
+ const nftId = encodeNftId(id, contract, tokenId, currency.id);
423
425
 
424
426
  if (sending) {
425
427
  const type = "NFT_OUT";
426
428
  all.push({
427
- id: `${nftId}-${hash}-${type}-i${i}_${j}`,
429
+ id: encodeERC1155OperationId(nftId, hash, type, i, j),
428
430
  senders: [sender],
429
431
  recipients: [receiver],
430
432
  contract,
@@ -447,7 +449,7 @@ const txToOps =
447
449
  if (receiving) {
448
450
  const type = "NFT_IN";
449
451
  all.push({
450
- id: `${nftId}-${hash}-${type}-i${i}_${j}`,
452
+ id: encodeERC1155OperationId(nftId, hash, type, i, j),
451
453
  senders: [sender],
452
454
  recipients: [receiver],
453
455
  contract,
@@ -481,7 +483,7 @@ const txToOps =
481
483
  if (sending) {
482
484
  const type = value.eq(0) ? "FEES" : "OUT";
483
485
  ops.push({
484
- id: `${id}-${hash}-${type}`,
486
+ id: encodeOperationId(id, hash, type),
485
487
  hash,
486
488
  type,
487
489
  value: hasFailed ? new BigNumber(fee) : value.plus(fee),
@@ -502,10 +504,11 @@ const txToOps =
502
504
  }
503
505
 
504
506
  if (receiving) {
507
+ const type = "IN";
505
508
  ops.push({
506
- id: `${id}-${hash}-IN`,
509
+ id: encodeOperationId(id, hash, type),
507
510
  hash: hash,
508
- type: "IN",
511
+ type,
509
512
  value,
510
513
  fee,
511
514
  blockHeight,
@@ -531,10 +534,11 @@ const txToOps =
531
534
  subOperations.length ||
532
535
  nftOperations.length)
533
536
  ) {
537
+ const type = "NONE";
534
538
  ops.push({
535
- id: `${id}-${hash}-NONE`,
539
+ id: encodeOperationId(id, hash, type),
536
540
  hash: hash,
537
- type: "NONE",
541
+ type,
538
542
  value: new BigNumber(0),
539
543
  fee,
540
544
  blockHeight,
@@ -1,10 +1,17 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ import { testBridge } from "../../__tests__/test-helpers/bridge";
3
+ import { getAccountBridge } from "../../bridge";
4
+ import {
5
+ decodeAccountId,
6
+ encodeAccountId,
7
+ fromAccountRaw,
8
+ } from "../../account";
1
9
  import { BigNumber } from "bignumber.js";
2
10
  import {
3
11
  AmountRequired,
4
12
  InvalidAddress,
5
13
  NotEnoughBalance,
6
14
  } from "@ledgerhq/errors";
7
-
8
15
  import type { DatasetTest } from "../../types";
9
16
  import type { Transaction } from "./types";
10
17
  import { fromTransactionRaw } from "../filecoin/transaction";
@@ -13,7 +20,6 @@ import { CurrenciesData } from "../../types";
13
20
  const SEED_IDENTIFIER = "f1p74d4mlmeyc4agflhjqsnvoyzyfdai7fmkyso2a";
14
21
  const ACCOUNT_1 = "f1p74d4mlmeyc4agflhjqsnvoyzyfdai7fmkyso2a";
15
22
 
16
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
23
  const filecoin: CurrenciesData<Transaction> = {
18
24
  FIXME_ignoreAccountFields: [],
19
25
  scanAccounts: [
@@ -150,4 +156,30 @@ const dataset: DatasetTest<Transaction> = {
150
156
  filecoin,
151
157
  },
152
158
  };
153
- export default dataset;
159
+
160
+ testBridge(dataset);
161
+
162
+ describe("estimateMaxSpendable", () => {
163
+ test("it should failed on invalid recipient", async () => {
164
+ const accounts = dataset.currencies["filecoin"].accounts || [];
165
+ const accountData = accounts[0];
166
+
167
+ const account = fromAccountRaw({
168
+ ...accountData.raw,
169
+ id: encodeAccountId({
170
+ ...decodeAccountId(accountData.raw.id),
171
+ type: dataset.implementations[0],
172
+ }),
173
+ });
174
+
175
+ const accountBridge = getAccountBridge(account);
176
+ const estimate = async () => {
177
+ await accountBridge.estimateMaxSpendable({
178
+ account,
179
+ transaction: { recipient: "notavalidrecipient" },
180
+ });
181
+ };
182
+
183
+ await expect(estimate).rejects.toThrowError(new InvalidAddress());
184
+ });
185
+ });
@@ -0,0 +1,5 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`hedera currency bridge scanAccounts hedera seed 1 1`] = `Array []`;
4
+
5
+ exports[`hedera currency bridge scanAccounts hedera seed 1 2`] = `Array []`;
@@ -1,3 +1,5 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ import { testBridge } from "../../__tests__/test-helpers/bridge";
1
3
  import type { CurrenciesData, DatasetTest } from "../../types";
2
4
  import type { Transaction } from "./types";
3
5
  import {
@@ -88,7 +90,8 @@ const hedera: CurrenciesData<Transaction> = {
88
90
  const dataset: DatasetTest<Transaction> = {
89
91
  implementations: ["js"],
90
92
  currencies: {
91
- // hedera, // LIVE-2376
93
+ hedera,
92
94
  },
93
95
  };
94
- export default dataset;
96
+
97
+ testBridge(dataset);
@@ -1,4 +1,9 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ import { testBridge } from "../../__tests__/test-helpers/bridge";
3
+ import { disconnect } from "./api";
1
4
  import { BigNumber } from "bignumber.js";
5
+ import { canUnbond, MAX_UNLOCKINGS } from "./logic";
6
+ import type { Account } from "../../types";
2
7
  import {
3
8
  NotEnoughBalance,
4
9
  RecipientRequired,
@@ -15,7 +20,7 @@ import {
15
20
  PolkadotAllFundsWarning,
16
21
  PolkadotDoMaxSendInstead,
17
22
  } from "./errors";
18
- import type { DatasetTest } from "../../types";
23
+ import type { DatasetTest, CurrenciesData } from "../../types";
19
24
  import { fromTransactionRaw } from "./transaction";
20
25
  import type { Transaction } from "./types";
21
26
  const ACCOUNT_SAME_STASHCONTROLLER =
@@ -26,8 +31,7 @@ const ACCOUNT_EMPTY = "111111111111111111111111111111111HC1";
26
31
  const ACCOUNT_WITH_NO_OPERATION =
27
32
  "12EsPA79dvhtjp1bYvCiEWPsQmmdKGss44GzE3CT9tTo9g4Q";
28
33
 
29
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
30
- const polkadot = {
34
+ const polkadot: CurrenciesData<Transaction> = {
31
35
  FIXME_ignoreAccountFields: [
32
36
  "polkadotResources.unlockings", // Due to completion date that change everyday (estimated time)
33
37
  "polkadotResources.nominations", // TODO: try to only ignore status
@@ -685,7 +689,79 @@ const polkadot = {
685
689
  const dataset: DatasetTest<Transaction> = {
686
690
  implementations: ["js"],
687
691
  currencies: {
688
- // polkadot, // LL-7806
692
+ polkadot,
689
693
  },
690
694
  };
691
- export default dataset;
695
+
696
+ // Disconnect all api clients that could be open.
697
+ afterAll(async () => {
698
+ await disconnect();
699
+ });
700
+
701
+ testBridge(dataset);
702
+
703
+ describe("canUnbond", () => {
704
+ test("can unbond", () => {
705
+ const account: Partial<Account> = {
706
+ polkadotResources: {
707
+ controller: "",
708
+ stash: "",
709
+ nonce: 0,
710
+ numSlashingSpans: 0,
711
+ lockedBalance: new BigNumber(10000),
712
+ unlockedBalance: new BigNumber(0),
713
+ unlockingBalance: new BigNumber(0),
714
+ nominations: [],
715
+ unlockings: [
716
+ ...Array(MAX_UNLOCKINGS - 1).map(() => ({
717
+ amount: new BigNumber(Math.random()),
718
+ completionDate: new Date(),
719
+ })),
720
+ ],
721
+ },
722
+ };
723
+ expect(canUnbond(account as Account)).toBeTruthy();
724
+ });
725
+ test("can't unbond because unlockings is too much", () => {
726
+ const account: Partial<Account> = {
727
+ polkadotResources: {
728
+ controller: "",
729
+ stash: "",
730
+ nonce: 0,
731
+ numSlashingSpans: 0,
732
+ lockedBalance: new BigNumber(1000000),
733
+ unlockedBalance: new BigNumber(0),
734
+ unlockingBalance: new BigNumber(0),
735
+ nominations: [],
736
+ unlockings: [
737
+ ...Array(MAX_UNLOCKINGS).map(() => ({
738
+ amount: new BigNumber(Math.random()),
739
+ completionDate: new Date(),
740
+ })),
741
+ ],
742
+ },
743
+ };
744
+ expect(canUnbond(account as Account)).toBeFalsy();
745
+ });
746
+ test("can't unbond because not enough lockedBalance", () => {
747
+ const account: Partial<Account> = {
748
+ polkadotResources: {
749
+ controller: "",
750
+ stash: "",
751
+ nonce: 0,
752
+ numSlashingSpans: 0,
753
+ lockedBalance: new BigNumber(100),
754
+ unlockedBalance: new BigNumber(0),
755
+ unlockingBalance: new BigNumber(100),
756
+ nominations: [],
757
+ unlockings: [
758
+ ...Array(MAX_UNLOCKINGS).map(() => ({
759
+ amount: new BigNumber(Math.random()),
760
+ completionDate: new Date(),
761
+ })),
762
+ ],
763
+ },
764
+ };
765
+ expect(canUnbond(account as Account)).toBeFalsy();
766
+ });
767
+ });
@@ -1,3 +1,6 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ import { testBridge } from "../../__tests__/test-helpers/bridge";
3
+
1
4
  // import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets";
2
5
  import { BigNumber } from "bignumber.js";
3
6
  import type { DatasetTest } from "../../types";
@@ -160,4 +163,5 @@ const dataset: DatasetTest<Transaction> = {
160
163
  },
161
164
  },
162
165
  };
163
- export default dataset;
166
+
167
+ testBridge(dataset);