@ledgerhq/coin-icon 0.4.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 (341) hide show
  1. package/.eslintrc.js +20 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +41 -0
  4. package/CHANGELOG.md +495 -0
  5. package/LICENSE.txt +21 -0
  6. package/jest.config.js +11 -0
  7. package/lib/__test__/api/index.unit.test.d.ts +2 -0
  8. package/lib/__test__/api/index.unit.test.d.ts.map +1 -0
  9. package/lib/__test__/api/index.unit.test.js +173 -0
  10. package/lib/__test__/api/index.unit.test.js.map +1 -0
  11. package/lib/__test__/unit/buildTransaction.test.d.ts +2 -0
  12. package/lib/__test__/unit/buildTransaction.test.d.ts.map +1 -0
  13. package/lib/__test__/unit/buildTransaction.test.js +76 -0
  14. package/lib/__test__/unit/buildTransaction.test.js.map +1 -0
  15. package/lib/__test__/unit/getFeesForTransaction.unit.test.d.ts +2 -0
  16. package/lib/__test__/unit/getFeesForTransaction.unit.test.d.ts.map +1 -0
  17. package/lib/__test__/unit/getFeesForTransaction.unit.test.js +101 -0
  18. package/lib/__test__/unit/getFeesForTransaction.unit.test.js.map +1 -0
  19. package/lib/__test__/unit/getTransactionStatus.unit.test.d.ts +2 -0
  20. package/lib/__test__/unit/getTransactionStatus.unit.test.d.ts.map +1 -0
  21. package/lib/__test__/unit/getTransactionStatus.unit.test.js +178 -0
  22. package/lib/__test__/unit/getTransactionStatus.unit.test.js.map +1 -0
  23. package/lib/__test__/unit/logic.unit.test.d.ts +2 -0
  24. package/lib/__test__/unit/logic.unit.test.d.ts.map +1 -0
  25. package/lib/__test__/unit/logic.unit.test.js +112 -0
  26. package/lib/__test__/unit/logic.unit.test.js.map +1 -0
  27. package/lib/__test__/unit/serializations.unit.test.d.ts +2 -0
  28. package/lib/__test__/unit/serializations.unit.test.d.ts.map +1 -0
  29. package/lib/__test__/unit/serializations.unit.test.js +73 -0
  30. package/lib/__test__/unit/serializations.unit.test.js.map +1 -0
  31. package/lib/__test__/unit/transaction.unit.test.d.ts +2 -0
  32. package/lib/__test__/unit/transaction.unit.test.d.ts.map +1 -0
  33. package/lib/__test__/unit/transaction.unit.test.js +130 -0
  34. package/lib/__test__/unit/transaction.unit.test.js.map +1 -0
  35. package/lib/account.d.ts +7 -0
  36. package/lib/account.d.ts.map +1 -0
  37. package/lib/account.js +26 -0
  38. package/lib/account.js.map +1 -0
  39. package/lib/api/api-type.d.ts +62 -0
  40. package/lib/api/api-type.d.ts.map +1 -0
  41. package/lib/api/api-type.js +3 -0
  42. package/lib/api/api-type.js.map +1 -0
  43. package/lib/api/index.d.ts +13 -0
  44. package/lib/api/index.d.ts.map +1 -0
  45. package/lib/api/index.js +134 -0
  46. package/lib/api/index.js.map +1 -0
  47. package/lib/api/node.d.ts +31 -0
  48. package/lib/api/node.d.ts.map +1 -0
  49. package/lib/api/node.js +112 -0
  50. package/lib/api/node.js.map +1 -0
  51. package/lib/bridge/index.d.ts +13 -0
  52. package/lib/bridge/index.d.ts.map +1 -0
  53. package/lib/bridge/index.js +71 -0
  54. package/lib/bridge/index.js.map +1 -0
  55. package/lib/bridge.integration.test.d.ts +4 -0
  56. package/lib/bridge.integration.test.d.ts.map +1 -0
  57. package/lib/bridge.integration.test.js +105 -0
  58. package/lib/bridge.integration.test.js.map +1 -0
  59. package/lib/broadcast.d.ts +9 -0
  60. package/lib/broadcast.d.ts.map +1 -0
  61. package/lib/broadcast.js +25 -0
  62. package/lib/broadcast.js.map +1 -0
  63. package/lib/buildTransaction.d.ts +12 -0
  64. package/lib/buildTransaction.d.ts.map +1 -0
  65. package/lib/buildTransaction.js +55 -0
  66. package/lib/buildTransaction.js.map +1 -0
  67. package/lib/cli-transaction.d.ts +16 -0
  68. package/lib/cli-transaction.d.ts.map +1 -0
  69. package/lib/cli-transaction.js +35 -0
  70. package/lib/cli-transaction.js.map +1 -0
  71. package/lib/config.d.ts +15 -0
  72. package/lib/config.d.ts.map +1 -0
  73. package/lib/config.js +17 -0
  74. package/lib/config.js.map +1 -0
  75. package/lib/constants.d.ts +14 -0
  76. package/lib/constants.d.ts.map +1 -0
  77. package/lib/constants.js +17 -0
  78. package/lib/constants.js.map +1 -0
  79. package/lib/createTransaction.d.ts +8 -0
  80. package/lib/createTransaction.d.ts.map +1 -0
  81. package/lib/createTransaction.js +19 -0
  82. package/lib/createTransaction.js.map +1 -0
  83. package/lib/deviceTransactionConfig.d.ts +15 -0
  84. package/lib/deviceTransactionConfig.d.ts.map +1 -0
  85. package/lib/deviceTransactionConfig.js +24 -0
  86. package/lib/deviceTransactionConfig.js.map +1 -0
  87. package/lib/errors.d.ts +10 -0
  88. package/lib/errors.d.ts.map +1 -0
  89. package/lib/errors.js +8 -0
  90. package/lib/errors.js.map +1 -0
  91. package/lib/estimateMaxSpendable.d.ts +14 -0
  92. package/lib/estimateMaxSpendable.d.ts.map +1 -0
  93. package/lib/estimateMaxSpendable.js +38 -0
  94. package/lib/estimateMaxSpendable.js.map +1 -0
  95. package/lib/getFeesForTransaction.d.ts +14 -0
  96. package/lib/getFeesForTransaction.d.ts.map +1 -0
  97. package/lib/getFeesForTransaction.js +44 -0
  98. package/lib/getFeesForTransaction.js.map +1 -0
  99. package/lib/getTransactionStatus.d.ts +4 -0
  100. package/lib/getTransactionStatus.d.ts.map +1 -0
  101. package/lib/getTransactionStatus.js +114 -0
  102. package/lib/getTransactionStatus.js.map +1 -0
  103. package/lib/hw-getAddress.d.ts +6 -0
  104. package/lib/hw-getAddress.d.ts.map +1 -0
  105. package/lib/hw-getAddress.js +23 -0
  106. package/lib/hw-getAddress.js.map +1 -0
  107. package/lib/initAccount.d.ts +3 -0
  108. package/lib/initAccount.d.ts.map +1 -0
  109. package/lib/initAccount.js +13 -0
  110. package/lib/initAccount.js.map +1 -0
  111. package/lib/logic.d.ts +55 -0
  112. package/lib/logic.d.ts.map +1 -0
  113. package/lib/logic.js +124 -0
  114. package/lib/logic.js.map +1 -0
  115. package/lib/prepareTransaction.d.ts +9 -0
  116. package/lib/prepareTransaction.d.ts.map +1 -0
  117. package/lib/prepareTransaction.js +33 -0
  118. package/lib/prepareTransaction.js.map +1 -0
  119. package/lib/serialization.d.ts +7 -0
  120. package/lib/serialization.d.ts.map +1 -0
  121. package/lib/serialization.js +36 -0
  122. package/lib/serialization.js.map +1 -0
  123. package/lib/signOperation.d.ts +10 -0
  124. package/lib/signOperation.d.ts.map +1 -0
  125. package/lib/signOperation.js +96 -0
  126. package/lib/signOperation.js.map +1 -0
  127. package/lib/signer.d.ts +14 -0
  128. package/lib/signer.d.ts.map +1 -0
  129. package/lib/signer.js +3 -0
  130. package/lib/signer.js.map +1 -0
  131. package/lib/specs.d.ts +7 -0
  132. package/lib/specs.d.ts.map +1 -0
  133. package/lib/specs.js +100 -0
  134. package/lib/specs.js.map +1 -0
  135. package/lib/speculos-deviceActions.d.ts +4 -0
  136. package/lib/speculos-deviceActions.d.ts.map +1 -0
  137. package/lib/speculos-deviceActions.js +44 -0
  138. package/lib/speculos-deviceActions.js.map +1 -0
  139. package/lib/synchronization.d.ts +3 -0
  140. package/lib/synchronization.d.ts.map +1 -0
  141. package/lib/synchronization.js +76 -0
  142. package/lib/synchronization.js.map +1 -0
  143. package/lib/transaction.d.ts +15 -0
  144. package/lib/transaction.d.ts.map +1 -0
  145. package/lib/transaction.js +39 -0
  146. package/lib/transaction.js.map +1 -0
  147. package/lib/types/bridge.fixture.d.ts +5 -0
  148. package/lib/types/bridge.fixture.d.ts.map +1 -0
  149. package/lib/types/bridge.fixture.js +77 -0
  150. package/lib/types/bridge.fixture.js.map +1 -0
  151. package/lib/types/index.d.ts +46 -0
  152. package/lib/types/index.d.ts.map +1 -0
  153. package/lib/types/index.js +3 -0
  154. package/lib/types/index.js.map +1 -0
  155. package/lib-es/__test__/api/index.unit.test.d.ts +2 -0
  156. package/lib-es/__test__/api/index.unit.test.d.ts.map +1 -0
  157. package/lib-es/__test__/api/index.unit.test.js +145 -0
  158. package/lib-es/__test__/api/index.unit.test.js.map +1 -0
  159. package/lib-es/__test__/unit/buildTransaction.test.d.ts +2 -0
  160. package/lib-es/__test__/unit/buildTransaction.test.d.ts.map +1 -0
  161. package/lib-es/__test__/unit/buildTransaction.test.js +71 -0
  162. package/lib-es/__test__/unit/buildTransaction.test.js.map +1 -0
  163. package/lib-es/__test__/unit/getFeesForTransaction.unit.test.d.ts +2 -0
  164. package/lib-es/__test__/unit/getFeesForTransaction.unit.test.d.ts.map +1 -0
  165. package/lib-es/__test__/unit/getFeesForTransaction.unit.test.js +73 -0
  166. package/lib-es/__test__/unit/getFeesForTransaction.unit.test.js.map +1 -0
  167. package/lib-es/__test__/unit/getTransactionStatus.unit.test.d.ts +2 -0
  168. package/lib-es/__test__/unit/getTransactionStatus.unit.test.d.ts.map +1 -0
  169. package/lib-es/__test__/unit/getTransactionStatus.unit.test.js +153 -0
  170. package/lib-es/__test__/unit/getTransactionStatus.unit.test.js.map +1 -0
  171. package/lib-es/__test__/unit/logic.unit.test.d.ts +2 -0
  172. package/lib-es/__test__/unit/logic.unit.test.d.ts.map +1 -0
  173. package/lib-es/__test__/unit/logic.unit.test.js +107 -0
  174. package/lib-es/__test__/unit/logic.unit.test.js.map +1 -0
  175. package/lib-es/__test__/unit/serializations.unit.test.d.ts +2 -0
  176. package/lib-es/__test__/unit/serializations.unit.test.d.ts.map +1 -0
  177. package/lib-es/__test__/unit/serializations.unit.test.js +71 -0
  178. package/lib-es/__test__/unit/serializations.unit.test.js.map +1 -0
  179. package/lib-es/__test__/unit/transaction.unit.test.d.ts +2 -0
  180. package/lib-es/__test__/unit/transaction.unit.test.d.ts.map +1 -0
  181. package/lib-es/__test__/unit/transaction.unit.test.js +128 -0
  182. package/lib-es/__test__/unit/transaction.unit.test.js.map +1 -0
  183. package/lib-es/account.d.ts +7 -0
  184. package/lib-es/account.d.ts.map +1 -0
  185. package/lib-es/account.js +24 -0
  186. package/lib-es/account.js.map +1 -0
  187. package/lib-es/api/api-type.d.ts +62 -0
  188. package/lib-es/api/api-type.d.ts.map +1 -0
  189. package/lib-es/api/api-type.js +2 -0
  190. package/lib-es/api/api-type.js.map +1 -0
  191. package/lib-es/api/index.d.ts +13 -0
  192. package/lib-es/api/index.d.ts.map +1 -0
  193. package/lib-es/api/index.js +123 -0
  194. package/lib-es/api/index.js.map +1 -0
  195. package/lib-es/api/node.d.ts +31 -0
  196. package/lib-es/api/node.d.ts.map +1 -0
  197. package/lib-es/api/node.js +99 -0
  198. package/lib-es/api/node.js.map +1 -0
  199. package/lib-es/bridge/index.d.ts +13 -0
  200. package/lib-es/bridge/index.d.ts.map +1 -0
  201. package/lib-es/bridge/index.js +62 -0
  202. package/lib-es/bridge/index.js.map +1 -0
  203. package/lib-es/bridge.integration.test.d.ts +4 -0
  204. package/lib-es/bridge.integration.test.d.ts.map +1 -0
  205. package/lib-es/bridge.integration.test.js +99 -0
  206. package/lib-es/bridge.integration.test.js.map +1 -0
  207. package/lib-es/broadcast.d.ts +9 -0
  208. package/lib-es/broadcast.d.ts.map +1 -0
  209. package/lib-es/broadcast.js +21 -0
  210. package/lib-es/broadcast.js.map +1 -0
  211. package/lib-es/buildTransaction.d.ts +12 -0
  212. package/lib-es/buildTransaction.d.ts.map +1 -0
  213. package/lib-es/buildTransaction.js +48 -0
  214. package/lib-es/buildTransaction.js.map +1 -0
  215. package/lib-es/cli-transaction.d.ts +16 -0
  216. package/lib-es/cli-transaction.d.ts.map +1 -0
  217. package/lib-es/cli-transaction.js +29 -0
  218. package/lib-es/cli-transaction.js.map +1 -0
  219. package/lib-es/config.d.ts +15 -0
  220. package/lib-es/config.d.ts.map +1 -0
  221. package/lib-es/config.js +12 -0
  222. package/lib-es/config.js.map +1 -0
  223. package/lib-es/constants.d.ts +14 -0
  224. package/lib-es/constants.d.ts.map +1 -0
  225. package/lib-es/constants.js +14 -0
  226. package/lib-es/constants.js.map +1 -0
  227. package/lib-es/createTransaction.d.ts +8 -0
  228. package/lib-es/createTransaction.d.ts.map +1 -0
  229. package/lib-es/createTransaction.js +15 -0
  230. package/lib-es/createTransaction.js.map +1 -0
  231. package/lib-es/deviceTransactionConfig.d.ts +15 -0
  232. package/lib-es/deviceTransactionConfig.d.ts.map +1 -0
  233. package/lib-es/deviceTransactionConfig.js +22 -0
  234. package/lib-es/deviceTransactionConfig.js.map +1 -0
  235. package/lib-es/errors.d.ts +10 -0
  236. package/lib-es/errors.d.ts.map +1 -0
  237. package/lib-es/errors.js +5 -0
  238. package/lib-es/errors.js.map +1 -0
  239. package/lib-es/estimateMaxSpendable.d.ts +14 -0
  240. package/lib-es/estimateMaxSpendable.d.ts.map +1 -0
  241. package/lib-es/estimateMaxSpendable.js +31 -0
  242. package/lib-es/estimateMaxSpendable.js.map +1 -0
  243. package/lib-es/getFeesForTransaction.d.ts +14 -0
  244. package/lib-es/getFeesForTransaction.d.ts.map +1 -0
  245. package/lib-es/getFeesForTransaction.js +42 -0
  246. package/lib-es/getFeesForTransaction.js.map +1 -0
  247. package/lib-es/getTransactionStatus.d.ts +4 -0
  248. package/lib-es/getTransactionStatus.d.ts.map +1 -0
  249. package/lib-es/getTransactionStatus.js +109 -0
  250. package/lib-es/getTransactionStatus.js.map +1 -0
  251. package/lib-es/hw-getAddress.d.ts +6 -0
  252. package/lib-es/hw-getAddress.d.ts.map +1 -0
  253. package/lib-es/hw-getAddress.js +21 -0
  254. package/lib-es/hw-getAddress.js.map +1 -0
  255. package/lib-es/initAccount.d.ts +3 -0
  256. package/lib-es/initAccount.d.ts.map +1 -0
  257. package/lib-es/initAccount.js +9 -0
  258. package/lib-es/initAccount.js.map +1 -0
  259. package/lib-es/logic.d.ts +55 -0
  260. package/lib-es/logic.d.ts.map +1 -0
  261. package/lib-es/logic.js +109 -0
  262. package/lib-es/logic.js.map +1 -0
  263. package/lib-es/prepareTransaction.d.ts +9 -0
  264. package/lib-es/prepareTransaction.d.ts.map +1 -0
  265. package/lib-es/prepareTransaction.js +26 -0
  266. package/lib-es/prepareTransaction.js.map +1 -0
  267. package/lib-es/serialization.d.ts +7 -0
  268. package/lib-es/serialization.d.ts.map +1 -0
  269. package/lib-es/serialization.js +29 -0
  270. package/lib-es/serialization.js.map +1 -0
  271. package/lib-es/signOperation.d.ts +10 -0
  272. package/lib-es/signOperation.d.ts.map +1 -0
  273. package/lib-es/signOperation.js +89 -0
  274. package/lib-es/signOperation.js.map +1 -0
  275. package/lib-es/signer.d.ts +14 -0
  276. package/lib-es/signer.d.ts.map +1 -0
  277. package/lib-es/signer.js +2 -0
  278. package/lib-es/signer.js.map +1 -0
  279. package/lib-es/specs.d.ts +7 -0
  280. package/lib-es/specs.d.ts.map +1 -0
  281. package/lib-es/specs.js +95 -0
  282. package/lib-es/specs.js.map +1 -0
  283. package/lib-es/speculos-deviceActions.d.ts +4 -0
  284. package/lib-es/speculos-deviceActions.d.ts.map +1 -0
  285. package/lib-es/speculos-deviceActions.js +41 -0
  286. package/lib-es/speculos-deviceActions.js.map +1 -0
  287. package/lib-es/synchronization.d.ts +3 -0
  288. package/lib-es/synchronization.d.ts.map +1 -0
  289. package/lib-es/synchronization.js +69 -0
  290. package/lib-es/synchronization.js.map +1 -0
  291. package/lib-es/transaction.d.ts +15 -0
  292. package/lib-es/transaction.d.ts.map +1 -0
  293. package/lib-es/transaction.js +33 -0
  294. package/lib-es/transaction.js.map +1 -0
  295. package/lib-es/types/bridge.fixture.d.ts +5 -0
  296. package/lib-es/types/bridge.fixture.d.ts.map +1 -0
  297. package/lib-es/types/bridge.fixture.js +68 -0
  298. package/lib-es/types/bridge.fixture.js.map +1 -0
  299. package/lib-es/types/index.d.ts +46 -0
  300. package/lib-es/types/index.d.ts.map +1 -0
  301. package/lib-es/types/index.js +2 -0
  302. package/lib-es/types/index.js.map +1 -0
  303. package/package.json +85 -0
  304. package/src/__test__/api/index.unit.test.ts +151 -0
  305. package/src/__test__/unit/buildTransaction.test.ts +76 -0
  306. package/src/__test__/unit/getFeesForTransaction.unit.test.ts +76 -0
  307. package/src/__test__/unit/getTransactionStatus.unit.test.ts +172 -0
  308. package/src/__test__/unit/logic.unit.test.ts +145 -0
  309. package/src/__test__/unit/serializations.unit.test.ts +92 -0
  310. package/src/__test__/unit/transaction.unit.test.ts +144 -0
  311. package/src/account.ts +30 -0
  312. package/src/api/api-type.ts +65 -0
  313. package/src/api/index.ts +156 -0
  314. package/src/api/node.ts +115 -0
  315. package/src/bridge/index.ts +76 -0
  316. package/src/bridge.integration.test.ts +107 -0
  317. package/src/broadcast.ts +18 -0
  318. package/src/buildTransaction.ts +53 -0
  319. package/src/cli-transaction.ts +49 -0
  320. package/src/config.ts +29 -0
  321. package/src/constants.ts +14 -0
  322. package/src/createTransaction.ts +16 -0
  323. package/src/deviceTransactionConfig.ts +44 -0
  324. package/src/errors.ts +5 -0
  325. package/src/estimateMaxSpendable.ts +34 -0
  326. package/src/getFeesForTransaction.ts +46 -0
  327. package/src/getTransactionStatus.ts +139 -0
  328. package/src/hw-getAddress.ts +19 -0
  329. package/src/initAccount.ts +11 -0
  330. package/src/logic.ts +132 -0
  331. package/src/prepareTransaction.ts +24 -0
  332. package/src/serialization.ts +34 -0
  333. package/src/signOperation.ts +140 -0
  334. package/src/signer.ts +14 -0
  335. package/src/specs.ts +124 -0
  336. package/src/speculos-deviceActions.ts +46 -0
  337. package/src/synchronization.ts +70 -0
  338. package/src/transaction.ts +60 -0
  339. package/src/types/bridge.fixture.ts +75 -0
  340. package/src/types/index.ts +61 -0
  341. package/tsconfig.json +12 -0
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createFixtureOperation = exports.createFixtureTransaction = exports.createFixtureAccount = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const faker_1 = require("@faker-js/faker");
9
+ const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
10
+ const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
11
+ const index_1 = require("@ledgerhq/coin-framework/account/index");
12
+ function createFixtureAccount(account) {
13
+ const currency = (0, currencies_1.listCryptoCurrencies)(true).find(c => c.id === "icon");
14
+ const iconResources = (account === null || account === void 0 ? void 0 : account.iconResources) || {
15
+ nonce: 0,
16
+ votingPower: (0, bignumber_js_1.default)(0),
17
+ totalDelegated: (0, bignumber_js_1.default)(0),
18
+ };
19
+ const freshAddress = {
20
+ address: "hx1234567890abcdef",
21
+ derivationPath: "derivation_path",
22
+ };
23
+ const id = faker_1.faker.string.uuid();
24
+ const seedIdentifier = faker_1.faker.string.uuid();
25
+ const index = faker_1.faker.number.int();
26
+ return {
27
+ type: "Account",
28
+ id,
29
+ seedIdentifier,
30
+ derivationMode: "",
31
+ index,
32
+ freshAddress: freshAddress.address,
33
+ freshAddressPath: freshAddress.derivationPath,
34
+ used: true,
35
+ balance: (account === null || account === void 0 ? void 0 : account.balance) || new bignumber_js_1.default(0),
36
+ spendableBalance: (account === null || account === void 0 ? void 0 : account.spendableBalance) || new bignumber_js_1.default(0),
37
+ creationDate: faker_1.faker.date.past(),
38
+ blockHeight: faker_1.faker.number.int({ min: 100000, max: 200000 }),
39
+ currency,
40
+ operationsCount: (account === null || account === void 0 ? void 0 : account.operationsCount) || 0,
41
+ operations: (account === null || account === void 0 ? void 0 : account.operations) || [],
42
+ pendingOperations: (account === null || account === void 0 ? void 0 : account.pendingOperations) || [],
43
+ lastSyncDate: new Date(),
44
+ balanceHistoryCache: index_1.emptyHistoryCache,
45
+ swapHistory: [],
46
+ iconResources,
47
+ };
48
+ }
49
+ exports.createFixtureAccount = createFixtureAccount;
50
+ function createFixtureTransaction(tx) {
51
+ return {
52
+ amount: (tx === null || tx === void 0 ? void 0 : tx.amount) || new bignumber_js_1.default(0),
53
+ recipient: (tx === null || tx === void 0 ? void 0 : tx.recipient) || (0, abandonseed_1.getAbandonSeedAddress)("icon"),
54
+ mode: (tx === null || tx === void 0 ? void 0 : tx.mode) || "send",
55
+ family: "icon",
56
+ fees: (tx === null || tx === void 0 ? void 0 : tx.fees) || undefined,
57
+ };
58
+ }
59
+ exports.createFixtureTransaction = createFixtureTransaction;
60
+ function createFixtureOperation(operation) {
61
+ return {
62
+ id: (operation === null || operation === void 0 ? void 0 : operation.id) || faker_1.faker.string.uuid(),
63
+ hash: (operation === null || operation === void 0 ? void 0 : operation.hash) || faker_1.faker.string.uuid(),
64
+ type: (operation === null || operation === void 0 ? void 0 : operation.type) || "OUT",
65
+ value: (operation === null || operation === void 0 ? void 0 : operation.value) || new bignumber_js_1.default(faker_1.faker.string.numeric()),
66
+ fee: (operation === null || operation === void 0 ? void 0 : operation.fee) || new bignumber_js_1.default(0),
67
+ senders: (operation === null || operation === void 0 ? void 0 : operation.senders) || [],
68
+ recipients: (operation === null || operation === void 0 ? void 0 : operation.recipients) || [],
69
+ blockHeight: (operation === null || operation === void 0 ? void 0 : operation.blockHeight) || undefined,
70
+ blockHash: (operation === null || operation === void 0 ? void 0 : operation.blockHash) || undefined,
71
+ accountId: (operation === null || operation === void 0 ? void 0 : operation.accountId) || faker_1.faker.string.uuid(),
72
+ date: (operation === null || operation === void 0 ? void 0 : operation.date) || faker_1.faker.date.past(),
73
+ extra: {},
74
+ };
75
+ }
76
+ exports.createFixtureOperation = createFixtureOperation;
77
+ //# sourceMappingURL=bridge.fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.fixture.js","sourceRoot":"","sources":["../../src/types/bridge.fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { BigNumber } from "bignumber.js";
2
+ import { Account, AccountRaw, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw, Operation } from "@ledgerhq/types-live";
3
+ /**
4
+ * Icon account resources
5
+ */
6
+ export type IconResources = {
7
+ nonce: number;
8
+ votingPower: string | BigNumber;
9
+ totalDelegated: string | BigNumber;
10
+ };
11
+ /**
12
+ * Icon account resources from raw JSON
13
+ */
14
+ export type IconResourcesRaw = {
15
+ nonce: number;
16
+ votingPower: string | BigNumber;
17
+ totalDelegated: string | BigNumber;
18
+ };
19
+ /**
20
+ * Icon transaction
21
+ */
22
+ export type Transaction = TransactionCommon & {
23
+ mode: string;
24
+ family: "icon";
25
+ fees?: BigNumber | null | undefined;
26
+ stepLimit?: BigNumber;
27
+ };
28
+ /**
29
+ * Icon transaction from a raw JSON
30
+ */
31
+ export type TransactionRaw = TransactionCommonRaw & {
32
+ family: "icon";
33
+ mode: string;
34
+ fees?: string | null | undefined;
35
+ stepLimit?: string;
36
+ };
37
+ export type IconOperation = Operation;
38
+ export type IconAccount = Account & {
39
+ iconResources: IconResources;
40
+ };
41
+ export type IconAccountRaw = AccountRaw & {
42
+ iconResources: IconResourcesRaw;
43
+ };
44
+ export type TransactionStatus = TransactionStatusCommon;
45
+ export type TransactionStatusRaw = TransactionStatusCommonRaw;
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,SAAS,EACV,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CAEpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC;AAEtC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../../src/__test__/api/index.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import network from "@ledgerhq/live-network/network";
11
+ import { fetchOperationList } from "../../api";
12
+ import { isTestnet } from "../../logic";
13
+ import { getCoinConfig } from "../../config";
14
+ import querystring from "querystring";
15
+ import * as contants from "../../constants";
16
+ // Mock the necessary modules and functions
17
+ jest.mock("@ledgerhq/live-network/network");
18
+ jest.mock("@ledgerhq/coin-framework/operation");
19
+ jest.mock("@ledgerhq/cryptoassets");
20
+ jest.mock("../../logic");
21
+ jest.mock("../../config");
22
+ jest.mock("querystring");
23
+ jest.mock("@ledgerhq/logs");
24
+ describe("ICON API", () => {
25
+ const networkMock = network;
26
+ const isTestnetMock = isTestnet;
27
+ const getCoinConfigMock = getCoinConfig;
28
+ const querystringMock = querystring.stringify;
29
+ const mockedLogic = jest.mocked(contants);
30
+ isTestnetMock.mockReturnValue(true);
31
+ getCoinConfigMock.mockReturnValue({
32
+ infra: {
33
+ indexer: "mainnet-url",
34
+ indexer_testnet: "testnet-url",
35
+ },
36
+ });
37
+ beforeEach(() => {
38
+ jest.clearAllMocks();
39
+ });
40
+ describe("fetchOperationList", () => {
41
+ it("should recursively fetch operation list correctly", () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const accountId = "accountId";
43
+ const addr = "hx123";
44
+ const skip = 0;
45
+ const network = { id: "icon" };
46
+ const maxLength = 10;
47
+ // @ts-expect-error type
48
+ mockedLogic.LIMIT = 10;
49
+ const tx1 = {
50
+ hash: "tx1",
51
+ from_address: addr,
52
+ to_address: "hx456",
53
+ transaction_fee: "10",
54
+ block_number: 12345,
55
+ block_timestamp: 1609459200000,
56
+ status: "0x1",
57
+ value: "1000",
58
+ };
59
+ const tx2 = {
60
+ hash: "tx2",
61
+ from_address: "hx456",
62
+ to_address: addr,
63
+ transaction_fee: "5",
64
+ block_number: 12346,
65
+ block_timestamp: 1609459201000,
66
+ status: "0x1",
67
+ value: "2000",
68
+ };
69
+ const txHistory = [tx1, tx2];
70
+ querystringMock.mockReturnValue("address=hx123&skip=0&limit=10");
71
+ networkMock.mockResolvedValue({ data: txHistory });
72
+ const result = yield fetchOperationList(accountId, addr, skip, network, maxLength);
73
+ expect(result.length).toBe(2);
74
+ expect(networkMock).toHaveBeenCalledWith({
75
+ method: "GET",
76
+ url: `testnet-url/transactions/address/${addr}?address=${addr}&skip=${skip}&limit=${10}`,
77
+ });
78
+ }));
79
+ it("should recursively fetch operation list correctly", () => __awaiter(void 0, void 0, void 0, function* () {
80
+ const accountId = "accountId";
81
+ const addr = "hx123";
82
+ const skip = 0;
83
+ const network = { id: "icon" };
84
+ const maxLength = 10;
85
+ // @ts-expect-error type
86
+ mockedLogic.LIMIT = 2; // set a small limit for easier testing
87
+ const tx1 = {
88
+ hash: "tx1",
89
+ from_address: addr,
90
+ to_address: "hx456",
91
+ transaction_fee: "10",
92
+ block_number: 12345,
93
+ block_timestamp: 1609459200000,
94
+ status: "0x1",
95
+ value: "1000",
96
+ };
97
+ const tx2 = {
98
+ hash: "tx2",
99
+ from_address: "hx456",
100
+ to_address: addr,
101
+ transaction_fee: "5",
102
+ block_number: 12346,
103
+ block_timestamp: 1609459201000,
104
+ status: "0x1",
105
+ value: "2000",
106
+ };
107
+ const tx3 = {
108
+ hash: "tx3",
109
+ from_address: addr,
110
+ to_address: "hx456",
111
+ transaction_fee: "15",
112
+ block_number: 12347,
113
+ block_timestamp: 1609459202000,
114
+ status: "0x1",
115
+ value: "1500",
116
+ };
117
+ networkMock
118
+ .mockResolvedValueOnce({ data: [tx1, tx2] }) // First fetch returns two transactions
119
+ .mockResolvedValueOnce({ data: [tx3] }); // Second fetch returns one transaction
120
+ querystringMock
121
+ .mockReturnValueOnce("address=hx123&skip=0&limit=2")
122
+ .mockReturnValueOnce("address=hx123&skip=2&limit=2");
123
+ const result = yield fetchOperationList(accountId, addr, skip, network, maxLength);
124
+ // Verify that the function was called recursively
125
+ expect(networkMock).toHaveBeenCalledTimes(2);
126
+ // Verify that the result includes all transactions fetched
127
+ expect(result.length).toBe(3);
128
+ expect(result).toEqual([
129
+ expect.objectContaining({ hash: "tx1" }),
130
+ expect.objectContaining({ hash: "tx2" }),
131
+ expect.objectContaining({ hash: "tx3" }),
132
+ ]);
133
+ // Verify the URLs used in the network calls
134
+ expect(networkMock).toHaveBeenCalledWith({
135
+ method: "GET",
136
+ url: `testnet-url/transactions/address/${addr}?address=${addr}&skip=${skip}&limit=${2}`,
137
+ });
138
+ expect(networkMock).toHaveBeenCalledWith({
139
+ method: "GET",
140
+ url: `testnet-url/transactions/address/${addr}?address=${addr}&skip=${skip + 2}&limit=${2}`,
141
+ });
142
+ }));
143
+ });
144
+ });
145
+ //# sourceMappingURL=index.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../../src/__test__/api/index.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=buildTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTransaction.test.d.ts","sourceRoot":"","sources":["../../../src/__test__/unit/buildTransaction.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import BigNumber from "bignumber.js";
11
+ import { createFixtureAccount, createFixtureTransaction } from "../../types/bridge.fixture";
12
+ import { buildTransaction } from "../../buildTransaction";
13
+ const mockFrom = jest.fn().mockReturnThis();
14
+ const mockTo = jest.fn().mockReturnThis();
15
+ const mockValue = jest.fn().mockReturnThis();
16
+ const mockNid = jest.fn().mockReturnThis();
17
+ const mockNonce = jest.fn().mockReturnThis();
18
+ const mockTimestamp = jest.fn().mockReturnThis();
19
+ const mockVersion = jest.fn().mockReturnThis();
20
+ const mockStepLimit = jest.fn().mockReturnThis();
21
+ const mockBuild = jest.fn().mockReturnValue("mocked-transaction");
22
+ jest.mock("icon-sdk-js", () => ({
23
+ IconBuilder: {
24
+ IcxTransactionBuilder: jest.fn().mockImplementation(() => ({
25
+ from: mockFrom,
26
+ to: mockTo,
27
+ value: mockValue,
28
+ nid: mockNid,
29
+ nonce: mockNonce,
30
+ timestamp: mockTimestamp,
31
+ version: mockVersion,
32
+ stepLimit: mockStepLimit,
33
+ build: mockBuild,
34
+ })),
35
+ },
36
+ IconConverter: {
37
+ toHexNumber: jest.fn(value => `0x${value}`),
38
+ },
39
+ }));
40
+ jest.mock("../../logic", () => ({
41
+ getNid: jest.fn().mockReturnValue(1),
42
+ getNonce: jest.fn().mockReturnValue(1),
43
+ }));
44
+ describe("buildTransaction", () => {
45
+ const account = createFixtureAccount();
46
+ const transaction = createFixtureTransaction({
47
+ mode: "send",
48
+ recipient: "WHATEVER",
49
+ });
50
+ afterEach(() => {
51
+ jest.clearAllMocks();
52
+ });
53
+ it("should build a transfer transaction", () => __awaiter(void 0, void 0, void 0, function* () {
54
+ const stepLimit = new BigNumber(100000);
55
+ const result = yield buildTransaction(account, transaction, stepLimit);
56
+ expect(mockFrom).toHaveBeenCalledWith(account.freshAddress);
57
+ expect(mockTo).toHaveBeenCalledWith(transaction.recipient);
58
+ expect(mockValue).toHaveBeenCalledWith(expect.any(String));
59
+ expect(mockNid).toHaveBeenCalledWith(expect.any(String));
60
+ expect(mockNonce).toHaveBeenCalledWith(expect.any(String));
61
+ expect(mockTimestamp).toHaveBeenCalledWith(expect.any(String));
62
+ expect(mockVersion).toHaveBeenCalledWith(expect.any(String));
63
+ expect(mockStepLimit).toHaveBeenCalledWith(expect.any(String));
64
+ expect(result.unsigned).toBe("mocked-transaction");
65
+ }));
66
+ it("should throw an error for unsupported transaction mode", () => __awaiter(void 0, void 0, void 0, function* () {
67
+ const invalidTransaction = Object.assign(Object.assign({}, transaction), { mode: "invalid-mode" });
68
+ yield expect(buildTransaction(account, invalidTransaction)).rejects.toThrow("Unsupported transaction mode: invalid-mode");
69
+ }));
70
+ });
71
+ //# sourceMappingURL=buildTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTransaction.test.js","sourceRoot":"","sources":["../../../src/__test__/unit/buildTransaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getFeesForTransaction.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeesForTransaction.unit.test.d.ts","sourceRoot":"","sources":["../../../src/__test__/unit/getFeesForTransaction.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BigNumber } from "bignumber.js";
11
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets";
12
+ import { buildTransaction } from "../../buildTransaction";
13
+ import { getFees, getStepPrice } from "../../api/node";
14
+ import getEstimatedFees from "../../getFeesForTransaction";
15
+ import * as logic from "../../logic";
16
+ jest.mock("../../buildTransaction");
17
+ jest.mock("../../api/node");
18
+ jest.mock("@ledgerhq/cryptoassets");
19
+ jest.mock("../../logic");
20
+ const mockedLogic = jest.mocked(logic);
21
+ describe("getEstimatedFees", () => {
22
+ beforeAll(() => {
23
+ global.FEES_SAFETY_BUFFER = new BigNumber(100);
24
+ });
25
+ it("should fetch the estimated fees correctly", () => __awaiter(void 0, void 0, void 0, function* () {
26
+ const account = {
27
+ currency: { id: "icon" },
28
+ spendableBalance: new BigNumber(1000),
29
+ pendingOperations: [],
30
+ iconResources: { nonce: 1 },
31
+ };
32
+ const transaction = {
33
+ amount: new BigNumber(100),
34
+ recipient: "recipient-address",
35
+ fees: new BigNumber(10),
36
+ };
37
+ const unsignedTx = {
38
+ /* mock unsigned transaction */
39
+ };
40
+ const stepLimit = new BigNumber(100000);
41
+ const stepPrice = new BigNumber(10);
42
+ getAbandonSeedAddress.mockReturnValue("fake-recipient-address");
43
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(100));
44
+ buildTransaction.mockResolvedValue({ unsigned: unsignedTx });
45
+ getFees.mockResolvedValue(stepLimit);
46
+ getStepPrice.mockResolvedValue(stepPrice);
47
+ const estimatedFees = yield getEstimatedFees({ account, transaction });
48
+ expect(estimatedFees.isEqualTo(stepLimit.multipliedBy(stepPrice))).toBe(true);
49
+ expect(transaction.stepLimit).toEqual(stepLimit);
50
+ }));
51
+ it("should return FEES_SAFETY_BUFFER if an error occurs", () => __awaiter(void 0, void 0, void 0, function* () {
52
+ const account = {
53
+ currency: { id: "icon" },
54
+ spendableBalance: new BigNumber(1000),
55
+ pendingOperations: [],
56
+ iconResources: { nonce: 1 },
57
+ };
58
+ const transaction = {
59
+ amount: new BigNumber(100),
60
+ recipient: "recipient-address",
61
+ fees: new BigNumber(10),
62
+ };
63
+ getAbandonSeedAddress.mockReturnValue("fake-recipient-address");
64
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(100));
65
+ // @ts-expect-error type
66
+ mockedLogic.FEES_SAFETY_BUFFER = new BigNumber(100);
67
+ buildTransaction.mockRejectedValue(new Error("Error"));
68
+ // Mock getFees and getStepPrice if necessary, but they won't be called in this test case
69
+ const estimatedFees = yield getEstimatedFees({ account, transaction });
70
+ expect(estimatedFees.isEqualTo(new BigNumber(100))).toBe(true);
71
+ }));
72
+ });
73
+ //# sourceMappingURL=getFeesForTransaction.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeesForTransaction.unit.test.js","sourceRoot":"","sources":["../../../src/__test__/unit/getFeesForTransaction.unit.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AAErC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5B,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACpC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,SAAS,CAAC,GAAG,EAAE;QACZ,MAAc,CAAC,kBAAkB,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2CAA2C,EAAE,GAAS,EAAE;QACzD,MAAM,OAAO,GAAgB;YAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;YACxB,gBAAgB,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;YACrC,iBAAiB,EAAE,EAAE;YACrB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SACrB,CAAC;QAET,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,mBAAmB;YAC9B,IAAI,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;SACjB,CAAC;QAET,MAAM,UAAU,GAAG;QACjB,+BAA+B;SAChC,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QAEnC,qBAAmC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAC/E,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,gBAA8B,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3E,OAAqB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACnD,YAA0B,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAS,EAAE;QACnE,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;YACxB,gBAAgB,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;YACrC,iBAAiB,EAAE,EAAE;YACrB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SACrB,CAAC;QAET,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,mBAAmB;YAC9B,IAAI,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;SACjB,CAAC;QAER,qBAAmC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAC/E,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,wBAAwB;QACxB,WAAW,CAAC,kBAAkB,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QACnD,gBAA8B,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,yFAAyF;QAEzF,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getTransactionStatus.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransactionStatus.unit.test.d.ts","sourceRoot":"","sources":["../../../src/__test__/unit/getTransactionStatus.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,153 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BigNumber } from "bignumber.js";
11
+ import { NotEnoughBalance, RecipientRequired, InvalidAddress, FeeNotLoaded, InvalidAddressBecauseDestinationIsAlsoSource, AmountRequired, } from "@ledgerhq/errors";
12
+ import * as logic from "../../logic";
13
+ import { getSendTransactionStatus, getTransactionStatus } from "../../getTransactionStatus";
14
+ import * as TransactionStatus from "../../getTransactionStatus";
15
+ import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/index";
16
+ import { IconDoMaxSendInstead } from "../../errors";
17
+ jest.mock("../../logic");
18
+ jest.mock("../../api");
19
+ jest.mock("@ledgerhq/coin-framework/currencies/index");
20
+ const mockedLogic = jest.mocked(logic);
21
+ const mockedFormatCurrencyUnit = jest.mocked(formatCurrencyUnit);
22
+ describe("getSendTransactionStatus", () => {
23
+ let account;
24
+ let transaction;
25
+ beforeEach(() => {
26
+ account = {
27
+ spendableBalance: new BigNumber(1000),
28
+ currency: {
29
+ name: "Icon",
30
+ units: [
31
+ {
32
+ code: "ICX",
33
+ name: "",
34
+ magnitude: 0,
35
+ },
36
+ ],
37
+ },
38
+ iconResources: {
39
+ totalDelegated: new BigNumber(0),
40
+ votingPower: new BigNumber(0),
41
+ nonce: 0,
42
+ },
43
+ };
44
+ transaction = {
45
+ fees: new BigNumber(10),
46
+ recipient: "test-recipient",
47
+ useAllAmount: false,
48
+ };
49
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(100));
50
+ mockedLogic.getMinimumBalance.mockReturnValue(new BigNumber(50));
51
+ mockedLogic.isSelfTransaction.mockReturnValue(false);
52
+ mockedLogic.isValidAddress.mockReturnValue(true);
53
+ mockedFormatCurrencyUnit.mockReturnValue("1 ICX");
54
+ });
55
+ it("should return FeeNotLoaded error if fees are not loaded", () => __awaiter(void 0, void 0, void 0, function* () {
56
+ transaction.fees = null;
57
+ const result = yield getSendTransactionStatus(account, transaction);
58
+ expect(result.errors.fees).toBeInstanceOf(FeeNotLoaded);
59
+ }));
60
+ it("should return RecipientRequired error if recipient is missing", () => __awaiter(void 0, void 0, void 0, function* () {
61
+ transaction.recipient = "";
62
+ const result = yield getSendTransactionStatus(account, transaction);
63
+ expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
64
+ }));
65
+ it("should return InvalidAddressBecauseDestinationIsAlsoSource error if recipient is the same as source", () => __awaiter(void 0, void 0, void 0, function* () {
66
+ mockedLogic.isSelfTransaction.mockReturnValue(true);
67
+ const result = yield getSendTransactionStatus(account, transaction);
68
+ expect(result.errors.recipient).toBeInstanceOf(InvalidAddressBecauseDestinationIsAlsoSource);
69
+ }));
70
+ it("should return InvalidAddress error if recipient is invalid", () => __awaiter(void 0, void 0, void 0, function* () {
71
+ mockedLogic.isValidAddress.mockReturnValue(false);
72
+ const result = yield getSendTransactionStatus(account, transaction);
73
+ expect(result.errors.recipient).toBeInstanceOf(InvalidAddress);
74
+ }));
75
+ it("should return AmountRequired error if amount is less than or equal to zero", () => __awaiter(void 0, void 0, void 0, function* () {
76
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(0));
77
+ const result = yield getSendTransactionStatus(account, transaction);
78
+ expect(result.errors.amount).toBeInstanceOf(AmountRequired);
79
+ }));
80
+ it("should return NotEnoughBalance error if total spent exceeds spendable balance", () => __awaiter(void 0, void 0, void 0, function* () {
81
+ account.spendableBalance = new BigNumber(50);
82
+ const result = yield getSendTransactionStatus(account, transaction);
83
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughBalance);
84
+ }));
85
+ it("should return proper TransactionStatus when everything is valid", () => __awaiter(void 0, void 0, void 0, function* () {
86
+ const result = yield getSendTransactionStatus(account, transaction);
87
+ expect(result.errors).toEqual({});
88
+ expect(result.warnings).toEqual({});
89
+ expect(result.estimatedFees).toEqual(transaction.fees);
90
+ expect(result.amount).toEqual(new BigNumber(100));
91
+ expect(result.totalSpent).toEqual(new BigNumber(110));
92
+ }));
93
+ it("should return IconDoMaxSendInstead error if leftover balance is less than minimumBalanceExistential but greater than zero", () => __awaiter(void 0, void 0, void 0, function* () {
94
+ account.spendableBalance = new BigNumber(120);
95
+ const result = yield getSendTransactionStatus(account, transaction);
96
+ expect(result.errors.amount).toBeInstanceOf(IconDoMaxSendInstead);
97
+ expect(result.errors.amount.message).toBe("Balance cannot be below {{minimumBalance}}. Send max to empty account.");
98
+ }));
99
+ });
100
+ describe("getTransactionStatus", () => {
101
+ let account;
102
+ let transaction;
103
+ beforeEach(() => {
104
+ account = {
105
+ spendableBalance: new BigNumber(1000),
106
+ currency: { name: "ICON", units: [{ code: "ICX" }] },
107
+ };
108
+ transaction = {
109
+ fees: new BigNumber(10),
110
+ mode: "send",
111
+ useAllAmount: false,
112
+ };
113
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(100));
114
+ });
115
+ it("should delegate to getSendTransactionStatus for send mode", () => __awaiter(void 0, void 0, void 0, function* () {
116
+ const sendTransactionStatus = {
117
+ errors: {},
118
+ warnings: {},
119
+ estimatedFees: new BigNumber(10),
120
+ amount: new BigNumber(100),
121
+ totalSpent: new BigNumber(110),
122
+ };
123
+ jest
124
+ .spyOn(TransactionStatus, "getSendTransactionStatus")
125
+ .mockResolvedValue(sendTransactionStatus);
126
+ const result = yield getTransactionStatus(account, transaction);
127
+ expect(result).toEqual(sendTransactionStatus);
128
+ }));
129
+ it("should handle default case correctly", () => __awaiter(void 0, void 0, void 0, function* () {
130
+ transaction.mode = "other";
131
+ const result = yield getTransactionStatus(account, transaction);
132
+ expect(result.errors).toEqual({});
133
+ expect(result.warnings).toEqual({});
134
+ expect(result.estimatedFees).toEqual(transaction.fees);
135
+ expect(result.amount).toEqual(new BigNumber(100));
136
+ expect(result.totalSpent).toEqual(new BigNumber(110));
137
+ }));
138
+ it("should return NotEnoughBalance error if totalSpent is greater than spendableBalance", () => __awaiter(void 0, void 0, void 0, function* () {
139
+ transaction.mode = "";
140
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(1000));
141
+ transaction.fees = new BigNumber(100);
142
+ const result = yield getTransactionStatus(account, transaction);
143
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughBalance);
144
+ }));
145
+ it("should return AmountRequired error if amount is less than or equal to zero and useAllAmount is false", () => __awaiter(void 0, void 0, void 0, function* () {
146
+ transaction.mode = "";
147
+ mockedLogic.calculateAmount.mockReturnValue(new BigNumber(0));
148
+ transaction.useAllAmount = false;
149
+ const result = yield getTransactionStatus(account, transaction);
150
+ expect(result.errors.amount).toBeInstanceOf(AmountRequired);
151
+ }));
152
+ });
153
+ //# sourceMappingURL=getTransactionStatus.unit.test.js.map