@ledgerhq/coin-tron 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/.eslintrc.js +20 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +25 -0
  4. package/LICENSE.txt +21 -0
  5. package/jest.config.js +8 -0
  6. package/jest.integ.config.js +7 -0
  7. package/lib/bridge/broadcast.d.ts +7 -0
  8. package/lib/bridge/broadcast.d.ts.map +1 -0
  9. package/lib/bridge/broadcast.js +26 -0
  10. package/lib/bridge/broadcast.js.map +1 -0
  11. package/lib/bridge/buildOptimisticOperation.d.ts +5 -0
  12. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
  13. package/lib/bridge/buildOptimisticOperation.js +101 -0
  14. package/lib/bridge/buildOptimisticOperation.js.map +1 -0
  15. package/lib/bridge/createTransaction.d.ts +4 -0
  16. package/lib/bridge/createTransaction.d.ts.map +1 -0
  17. package/lib/bridge/createTransaction.js +19 -0
  18. package/lib/bridge/createTransaction.js.map +1 -0
  19. package/lib/bridge/deviceTransactionConfig.d.ts +20 -0
  20. package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -0
  21. package/lib/bridge/deviceTransactionConfig.js +65 -0
  22. package/lib/bridge/deviceTransactionConfig.js.map +1 -0
  23. package/lib/bridge/estimateMaxSpendable.d.ts +5 -0
  24. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  25. package/lib/bridge/estimateMaxSpendable.js +30 -0
  26. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  27. package/lib/bridge/getEstimateFees.d.ts +6 -0
  28. package/lib/bridge/getEstimateFees.d.ts.map +1 -0
  29. package/lib/bridge/getEstimateFees.js +52 -0
  30. package/lib/bridge/getEstimateFees.js.map +1 -0
  31. package/lib/bridge/getTransactionStatus.d.ts +4 -0
  32. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  33. package/lib/bridge/getTransactionStatus.js +218 -0
  34. package/lib/bridge/getTransactionStatus.js.map +1 -0
  35. package/lib/bridge/index.d.ts +10 -0
  36. package/lib/bridge/index.d.ts.map +1 -0
  37. package/lib/bridge/index.js +60 -0
  38. package/lib/bridge/index.js.map +1 -0
  39. package/lib/bridge/preload.d.ts +8 -0
  40. package/lib/bridge/preload.d.ts.map +1 -0
  41. package/lib/bridge/preload.js +32 -0
  42. package/lib/bridge/preload.js.map +1 -0
  43. package/lib/bridge/prepareTransaction.d.ts +4 -0
  44. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  45. package/lib/bridge/prepareTransaction.js +19 -0
  46. package/lib/bridge/prepareTransaction.js.map +1 -0
  47. package/lib/bridge/serialization.d.ts +9 -0
  48. package/lib/bridge/serialization.d.ts.map +1 -0
  49. package/lib/bridge/serialization.js +238 -0
  50. package/lib/bridge/serialization.js.map +1 -0
  51. package/lib/bridge/signOperation.d.ts +5 -0
  52. package/lib/bridge/signOperation.d.ts.map +1 -0
  53. package/lib/bridge/signOperation.js +92 -0
  54. package/lib/bridge/signOperation.js.map +1 -0
  55. package/lib/bridge/synchronization.d.ts +5 -0
  56. package/lib/bridge/synchronization.d.ts.map +1 -0
  57. package/lib/bridge/synchronization.integ.test.d.ts +3 -0
  58. package/lib/bridge/synchronization.integ.test.d.ts.map +1 -0
  59. package/lib/bridge/synchronization.integ.test.js +96 -0
  60. package/lib/bridge/synchronization.integ.test.js.map +1 -0
  61. package/lib/bridge/synchronization.js +216 -0
  62. package/lib/bridge/synchronization.js.map +1 -0
  63. package/lib/bridge/transaction.d.ts +15 -0
  64. package/lib/bridge/transaction.d.ts.map +1 -0
  65. package/lib/bridge/transaction.js +61 -0
  66. package/lib/bridge/transaction.js.map +1 -0
  67. package/lib/config.d.ts +10 -0
  68. package/lib/config.d.ts.map +1 -0
  69. package/lib/config.js +17 -0
  70. package/lib/config.js.map +1 -0
  71. package/lib/index.d.ts +3 -0
  72. package/lib/index.d.ts.map +1 -0
  73. package/lib/index.js +21 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/logic/constants.d.ts +4 -0
  76. package/lib/logic/constants.d.ts.map +1 -0
  77. package/lib/logic/constants.js +7 -0
  78. package/lib/logic/constants.js.map +1 -0
  79. package/lib/logic/pagination.d.ts +3 -0
  80. package/lib/logic/pagination.d.ts.map +1 -0
  81. package/lib/logic/pagination.js +19 -0
  82. package/lib/logic/pagination.js.map +1 -0
  83. package/lib/logic/utils.d.ts +12 -0
  84. package/lib/logic/utils.d.ts.map +1 -0
  85. package/lib/logic/utils.js +177 -0
  86. package/lib/logic/utils.js.map +1 -0
  87. package/lib/network/format.d.ts +9 -0
  88. package/lib/network/format.d.ts.map +1 -0
  89. package/lib/network/format.js +127 -0
  90. package/lib/network/format.js.map +1 -0
  91. package/lib/network/index.d.ts +30 -0
  92. package/lib/network/index.d.ts.map +1 -0
  93. package/lib/network/index.integ.test.d.ts +2 -0
  94. package/lib/network/index.integ.test.d.ts.map +1 -0
  95. package/lib/network/index.integ.test.js +38 -0
  96. package/lib/network/index.integ.test.js.map +1 -0
  97. package/lib/network/index.js +555 -0
  98. package/lib/network/index.js.map +1 -0
  99. package/lib/network/index.test.d.ts +2 -0
  100. package/lib/network/index.test.d.ts.map +1 -0
  101. package/lib/network/index.test.js +66 -0
  102. package/lib/network/index.test.js.map +1 -0
  103. package/lib/network/superRepresentativesData.mock.d.ts +69 -0
  104. package/lib/network/superRepresentativesData.mock.d.ts.map +1 -0
  105. package/lib/network/superRepresentativesData.mock.js +2208 -0
  106. package/lib/network/superRepresentativesData.mock.js.map +1 -0
  107. package/lib/network/types.d.ts +122 -0
  108. package/lib/network/types.d.ts.map +1 -0
  109. package/lib/network/types.fixture.d.ts +498 -0
  110. package/lib/network/types.fixture.d.ts.map +1 -0
  111. package/lib/network/types.fixture.js +4375 -0
  112. package/lib/network/types.fixture.js.map +1 -0
  113. package/lib/network/types.js +13 -0
  114. package/lib/network/types.js.map +1 -0
  115. package/lib/signer/getAddress.d.ts +6 -0
  116. package/lib/signer/getAddress.d.ts.map +1 -0
  117. package/lib/signer/getAddress.js +19 -0
  118. package/lib/signer/getAddress.js.map +1 -0
  119. package/lib/signer/index.d.ts +6 -0
  120. package/lib/signer/index.d.ts.map +1 -0
  121. package/lib/signer/index.js +11 -0
  122. package/lib/signer/index.js.map +1 -0
  123. package/lib/test/bot-deviceActions.d.ts +4 -0
  124. package/lib/test/bot-deviceActions.d.ts.map +1 -0
  125. package/lib/test/bot-deviceActions.js +103 -0
  126. package/lib/test/bot-deviceActions.js.map +1 -0
  127. package/lib/test/bot-specs.d.ts +7 -0
  128. package/lib/test/bot-specs.d.ts.map +1 -0
  129. package/lib/test/bot-specs.js +433 -0
  130. package/lib/test/bot-specs.js.map +1 -0
  131. package/lib/test/bridgeDatasetTest.d.ts +4 -0
  132. package/lib/test/bridgeDatasetTest.d.ts.map +1 -0
  133. package/lib/test/bridgeDatasetTest.js +1284 -0
  134. package/lib/test/bridgeDatasetTest.js.map +1 -0
  135. package/lib/test/cli.d.ts +52 -0
  136. package/lib/test/cli.d.ts.map +1 -0
  137. package/lib/test/cli.js +155 -0
  138. package/lib/test/cli.js.map +1 -0
  139. package/lib/test/index.d.ts +6 -0
  140. package/lib/test/index.d.ts.map +1 -0
  141. package/lib/test/index.js +26 -0
  142. package/lib/test/index.js.map +1 -0
  143. package/lib/types/bridge.d.ts +245 -0
  144. package/lib/types/bridge.d.ts.map +1 -0
  145. package/lib/types/bridge.js +16 -0
  146. package/lib/types/bridge.js.map +1 -0
  147. package/lib/types/errors.d.ts +49 -0
  148. package/lib/types/errors.d.ts.map +1 -0
  149. package/lib/types/errors.js +21 -0
  150. package/lib/types/errors.js.map +1 -0
  151. package/lib/types/index.d.ts +4 -0
  152. package/lib/types/index.d.ts.map +1 -0
  153. package/lib/types/index.js +21 -0
  154. package/lib/types/index.js.map +1 -0
  155. package/lib/types/signer.d.ts +10 -0
  156. package/lib/types/signer.d.ts.map +1 -0
  157. package/lib/types/signer.js +3 -0
  158. package/lib/types/signer.js.map +1 -0
  159. package/lib-es/bridge/broadcast.d.ts +7 -0
  160. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  161. package/lib-es/bridge/broadcast.js +24 -0
  162. package/lib-es/bridge/broadcast.js.map +1 -0
  163. package/lib-es/bridge/buildOptimisticOperation.d.ts +5 -0
  164. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
  165. package/lib-es/bridge/buildOptimisticOperation.js +94 -0
  166. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
  167. package/lib-es/bridge/createTransaction.d.ts +4 -0
  168. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  169. package/lib-es/bridge/createTransaction.js +14 -0
  170. package/lib-es/bridge/createTransaction.js.map +1 -0
  171. package/lib-es/bridge/deviceTransactionConfig.d.ts +20 -0
  172. package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -0
  173. package/lib-es/bridge/deviceTransactionConfig.js +63 -0
  174. package/lib-es/bridge/deviceTransactionConfig.js.map +1 -0
  175. package/lib-es/bridge/estimateMaxSpendable.d.ts +5 -0
  176. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  177. package/lib-es/bridge/estimateMaxSpendable.js +25 -0
  178. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  179. package/lib-es/bridge/getEstimateFees.d.ts +6 -0
  180. package/lib-es/bridge/getEstimateFees.d.ts.map +1 -0
  181. package/lib-es/bridge/getEstimateFees.js +47 -0
  182. package/lib-es/bridge/getEstimateFees.js.map +1 -0
  183. package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
  184. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  185. package/lib-es/bridge/getTransactionStatus.js +213 -0
  186. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  187. package/lib-es/bridge/index.d.ts +10 -0
  188. package/lib-es/bridge/index.d.ts.map +1 -0
  189. package/lib-es/bridge/index.js +53 -0
  190. package/lib-es/bridge/index.js.map +1 -0
  191. package/lib-es/bridge/preload.d.ts +8 -0
  192. package/lib-es/bridge/preload.d.ts.map +1 -0
  193. package/lib-es/bridge/preload.js +27 -0
  194. package/lib-es/bridge/preload.js.map +1 -0
  195. package/lib-es/bridge/prepareTransaction.d.ts +4 -0
  196. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  197. package/lib-es/bridge/prepareTransaction.js +15 -0
  198. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  199. package/lib-es/bridge/serialization.d.ts +9 -0
  200. package/lib-es/bridge/serialization.d.ts.map +1 -0
  201. package/lib-es/bridge/serialization.js +229 -0
  202. package/lib-es/bridge/serialization.js.map +1 -0
  203. package/lib-es/bridge/signOperation.d.ts +5 -0
  204. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  205. package/lib-es/bridge/signOperation.js +85 -0
  206. package/lib-es/bridge/signOperation.js.map +1 -0
  207. package/lib-es/bridge/synchronization.d.ts +5 -0
  208. package/lib-es/bridge/synchronization.d.ts.map +1 -0
  209. package/lib-es/bridge/synchronization.integ.test.d.ts +3 -0
  210. package/lib-es/bridge/synchronization.integ.test.d.ts.map +1 -0
  211. package/lib-es/bridge/synchronization.integ.test.js +89 -0
  212. package/lib-es/bridge/synchronization.integ.test.js.map +1 -0
  213. package/lib-es/bridge/synchronization.js +209 -0
  214. package/lib-es/bridge/synchronization.js.map +1 -0
  215. package/lib-es/bridge/transaction.d.ts +15 -0
  216. package/lib-es/bridge/transaction.d.ts.map +1 -0
  217. package/lib-es/bridge/transaction.js +55 -0
  218. package/lib-es/bridge/transaction.js.map +1 -0
  219. package/lib-es/config.d.ts +10 -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/index.d.ts +3 -0
  224. package/lib-es/index.d.ts.map +1 -0
  225. package/lib-es/index.js +3 -0
  226. package/lib-es/index.js.map +1 -0
  227. package/lib-es/logic/constants.d.ts +4 -0
  228. package/lib-es/logic/constants.d.ts.map +1 -0
  229. package/lib-es/logic/constants.js +4 -0
  230. package/lib-es/logic/constants.js.map +1 -0
  231. package/lib-es/logic/pagination.d.ts +3 -0
  232. package/lib-es/logic/pagination.d.ts.map +1 -0
  233. package/lib-es/logic/pagination.js +15 -0
  234. package/lib-es/logic/pagination.js.map +1 -0
  235. package/lib-es/logic/utils.d.ts +12 -0
  236. package/lib-es/logic/utils.d.ts.map +1 -0
  237. package/lib-es/logic/utils.js +167 -0
  238. package/lib-es/logic/utils.js.map +1 -0
  239. package/lib-es/network/format.d.ts +9 -0
  240. package/lib-es/network/format.d.ts.map +1 -0
  241. package/lib-es/network/format.js +117 -0
  242. package/lib-es/network/format.js.map +1 -0
  243. package/lib-es/network/index.d.ts +30 -0
  244. package/lib-es/network/index.d.ts.map +1 -0
  245. package/lib-es/network/index.integ.test.d.ts +2 -0
  246. package/lib-es/network/index.integ.test.d.ts.map +1 -0
  247. package/lib-es/network/index.integ.test.js +36 -0
  248. package/lib-es/network/index.integ.test.js.map +1 -0
  249. package/lib-es/network/index.js +524 -0
  250. package/lib-es/network/index.js.map +1 -0
  251. package/lib-es/network/index.test.d.ts +2 -0
  252. package/lib-es/network/index.test.d.ts.map +1 -0
  253. package/lib-es/network/index.test.js +63 -0
  254. package/lib-es/network/index.test.js.map +1 -0
  255. package/lib-es/network/superRepresentativesData.mock.d.ts +69 -0
  256. package/lib-es/network/superRepresentativesData.mock.d.ts.map +1 -0
  257. package/lib-es/network/superRepresentativesData.mock.js +2206 -0
  258. package/lib-es/network/superRepresentativesData.mock.js.map +1 -0
  259. package/lib-es/network/types.d.ts +122 -0
  260. package/lib-es/network/types.d.ts.map +1 -0
  261. package/lib-es/network/types.fixture.d.ts +498 -0
  262. package/lib-es/network/types.fixture.d.ts.map +1 -0
  263. package/lib-es/network/types.fixture.js +4371 -0
  264. package/lib-es/network/types.fixture.js.map +1 -0
  265. package/lib-es/network/types.js +8 -0
  266. package/lib-es/network/types.js.map +1 -0
  267. package/lib-es/signer/getAddress.d.ts +6 -0
  268. package/lib-es/signer/getAddress.d.ts.map +1 -0
  269. package/lib-es/signer/getAddress.js +17 -0
  270. package/lib-es/signer/getAddress.js.map +1 -0
  271. package/lib-es/signer/index.d.ts +6 -0
  272. package/lib-es/signer/index.d.ts.map +1 -0
  273. package/lib-es/signer/index.js +6 -0
  274. package/lib-es/signer/index.js.map +1 -0
  275. package/lib-es/test/bot-deviceActions.d.ts +4 -0
  276. package/lib-es/test/bot-deviceActions.d.ts.map +1 -0
  277. package/lib-es/test/bot-deviceActions.js +100 -0
  278. package/lib-es/test/bot-deviceActions.js.map +1 -0
  279. package/lib-es/test/bot-specs.d.ts +7 -0
  280. package/lib-es/test/bot-specs.d.ts.map +1 -0
  281. package/lib-es/test/bot-specs.js +428 -0
  282. package/lib-es/test/bot-specs.js.map +1 -0
  283. package/lib-es/test/bridgeDatasetTest.d.ts +4 -0
  284. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -0
  285. package/lib-es/test/bridgeDatasetTest.js +1278 -0
  286. package/lib-es/test/bridgeDatasetTest.js.map +1 -0
  287. package/lib-es/test/cli.d.ts +52 -0
  288. package/lib-es/test/cli.d.ts.map +1 -0
  289. package/lib-es/test/cli.js +149 -0
  290. package/lib-es/test/cli.js.map +1 -0
  291. package/lib-es/test/index.d.ts +6 -0
  292. package/lib-es/test/index.d.ts.map +1 -0
  293. package/lib-es/test/index.js +6 -0
  294. package/lib-es/test/index.js.map +1 -0
  295. package/lib-es/types/bridge.d.ts +245 -0
  296. package/lib-es/types/bridge.d.ts.map +1 -0
  297. package/lib-es/types/bridge.js +11 -0
  298. package/lib-es/types/bridge.js.map +1 -0
  299. package/lib-es/types/errors.d.ts +49 -0
  300. package/lib-es/types/errors.d.ts.map +1 -0
  301. package/lib-es/types/errors.js +18 -0
  302. package/lib-es/types/errors.js.map +1 -0
  303. package/lib-es/types/index.d.ts +4 -0
  304. package/lib-es/types/index.d.ts.map +1 -0
  305. package/lib-es/types/index.js +5 -0
  306. package/lib-es/types/index.js.map +1 -0
  307. package/lib-es/types/signer.d.ts +10 -0
  308. package/lib-es/types/signer.d.ts.map +1 -0
  309. package/lib-es/types/signer.js +2 -0
  310. package/lib-es/types/signer.js.map +1 -0
  311. package/package.json +133 -0
  312. package/src/bridge/broadcast.ts +24 -0
  313. package/src/bridge/buildOptimisticOperation.ts +133 -0
  314. package/src/bridge/createTransaction.ts +16 -0
  315. package/src/bridge/deviceTransactionConfig.ts +99 -0
  316. package/src/bridge/estimateMaxSpendable.ts +32 -0
  317. package/src/bridge/getEstimateFees.ts +52 -0
  318. package/src/bridge/getTransactionStatus.ts +263 -0
  319. package/src/bridge/index.ts +78 -0
  320. package/src/bridge/preload.ts +24 -0
  321. package/src/bridge/prepareTransaction.ts +12 -0
  322. package/src/bridge/serialization.ts +288 -0
  323. package/src/bridge/signOperation.ts +123 -0
  324. package/src/bridge/synchronization.integ.test.ts +105 -0
  325. package/src/bridge/synchronization.ts +284 -0
  326. package/src/bridge/transaction.ts +84 -0
  327. package/src/config.ts +24 -0
  328. package/src/index.ts +3 -0
  329. package/src/logic/constants.ts +4 -0
  330. package/src/logic/pagination.ts +21 -0
  331. package/src/logic/utils.ts +231 -0
  332. package/src/network/format.ts +148 -0
  333. package/src/network/index.integ.test.ts +33 -0
  334. package/src/network/index.test.ts +61 -0
  335. package/src/network/index.ts +747 -0
  336. package/src/network/superRepresentativesData.mock.ts +2205 -0
  337. package/src/network/types.fixture.ts +4476 -0
  338. package/src/network/types.ts +147 -0
  339. package/src/signer/getAddress.ts +13 -0
  340. package/src/signer/index.ts +7 -0
  341. package/src/test/bot-deviceActions.ts +121 -0
  342. package/src/test/bot-specs.ts +457 -0
  343. package/src/test/bridgeDatasetTest.ts +1343 -0
  344. package/src/test/cli.ts +219 -0
  345. package/src/test/index.ts +6 -0
  346. package/src/types/bridge.ts +304 -0
  347. package/src/types/errors.ts +22 -0
  348. package/src/types/index.ts +4 -0
  349. package/src/types/signer.ts +9 -0
  350. package/tsconfig.json +14 -0
  351. package/types/tronweb/index.d.ts +5 -0
@@ -0,0 +1,524 @@
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 { hours, makeLRUCache } from "@ledgerhq/live-network/cache";
11
+ import network from "@ledgerhq/live-network";
12
+ import { promiseAllBatched } from "@ledgerhq/live-promise";
13
+ import { log } from "@ledgerhq/logs";
14
+ import { BigNumber } from "bignumber.js";
15
+ import compact from "lodash/compact";
16
+ import drop from "lodash/drop";
17
+ import get from "lodash/get";
18
+ import sumBy from "lodash/sumBy";
19
+ import take from "lodash/take";
20
+ import TronWeb from "tronweb";
21
+ import { TronTransactionExpired } from "../types/errors";
22
+ import { getCoinConfig } from "../config";
23
+ import { abiEncodeTrc20Transfer, defaultTronResources, extractBandwidthInfo, hexToAscii, } from "../logic/utils";
24
+ import { decode58Check, encode58Check, formatTrongridTrc20TxResponse, formatTrongridTxResponse, } from "./format";
25
+ import { isMalformedTransactionTronAPI, isTransactionTronAPI, } from "./types";
26
+ import { stringify } from "querystring";
27
+ const getBaseApiUrl = () => getCoinConfig().explorer.url;
28
+ function post(endPoint, body) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const { data } = yield network({
31
+ method: "POST",
32
+ url: `${getBaseApiUrl()}${endPoint}`,
33
+ data: body,
34
+ });
35
+ // Ugly but trongrid send a 200 status event if there are errors
36
+ if ("Error" in data) {
37
+ log("tron-error", stringify(data.Error), {
38
+ endPoint,
39
+ body,
40
+ });
41
+ throw new Error(stringify(data.Error));
42
+ }
43
+ return data;
44
+ });
45
+ }
46
+ function fetch(endPoint) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ return fetchWithBaseUrl(`${getBaseApiUrl()}${endPoint}`);
49
+ });
50
+ }
51
+ function fetchWithBaseUrl(url) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const { data } = yield network({ url });
54
+ // Ugly but trongrid send a 200 status event if there are errors
55
+ if ("Error" in data) {
56
+ log("tron-error", stringify(data.Error), {
57
+ url,
58
+ });
59
+ throw new Error(stringify(data.Error));
60
+ }
61
+ return data;
62
+ });
63
+ }
64
+ export const freezeTronTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
65
+ const txData = {
66
+ frozen_balance: transaction.amount.toNumber(),
67
+ resource: transaction.resource,
68
+ owner_address: decode58Check(account.freshAddress),
69
+ };
70
+ const url = `/wallet/freezebalancev2`;
71
+ const result = yield post(url, txData);
72
+ return result;
73
+ });
74
+ export const unfreezeTronTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
75
+ const txData = {
76
+ owner_address: decode58Check(account.freshAddress),
77
+ resource: transaction.resource,
78
+ unfreeze_balance: transaction.amount.toNumber(),
79
+ };
80
+ const url = `/wallet/unfreezebalancev2`;
81
+ const result = yield post(url, txData);
82
+ return result;
83
+ });
84
+ export const withdrawExpireUnfreezeTronTransaction = (account, _transaction) => __awaiter(void 0, void 0, void 0, function* () {
85
+ const txData = {
86
+ owner_address: decode58Check(account.freshAddress),
87
+ };
88
+ const url = `/wallet/withdrawexpireunfreeze`;
89
+ const result = yield post(url, txData);
90
+ return result;
91
+ });
92
+ export const unDelegateResourceTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
93
+ const txData = {
94
+ balance: transaction.amount.toNumber(),
95
+ resource: transaction.resource,
96
+ owner_address: decode58Check(account.freshAddress),
97
+ receiver_address: decode58Check(transaction.recipient),
98
+ };
99
+ const url = `/wallet/undelegateresource`;
100
+ const result = yield post(url, txData);
101
+ return result;
102
+ });
103
+ export const legacyUnfreezeTronTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
104
+ const txData = {
105
+ resource: transaction.resource,
106
+ owner_address: decode58Check(account.freshAddress),
107
+ receiver_address: transaction.recipient ? decode58Check(transaction.recipient) : undefined,
108
+ };
109
+ const url = `/wallet/unfreezebalance`;
110
+ const result = yield post(url, txData);
111
+ return result;
112
+ });
113
+ export function getDelegatedResource(account, transaction, resource) {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ const url = `/wallet/getdelegatedresourcev2`;
116
+ const { delegatedResource = [], } = yield post(url, {
117
+ fromAddress: decode58Check(account.freshAddress),
118
+ toAddress: decode58Check(transaction.recipient),
119
+ });
120
+ const { frozen_balance_for_bandwidth, frozen_balance_for_energy } = delegatedResource.reduce((accum, cur) => {
121
+ if (cur.frozen_balance_for_bandwidth) {
122
+ accum.frozen_balance_for_bandwidth += cur.frozen_balance_for_bandwidth;
123
+ }
124
+ if (cur.frozen_balance_for_energy) {
125
+ accum.frozen_balance_for_energy += cur.frozen_balance_for_energy;
126
+ }
127
+ return accum;
128
+ }, { frozen_balance_for_bandwidth: 0, frozen_balance_for_energy: 0 });
129
+ const amount = resource === "BANDWIDTH" ? frozen_balance_for_bandwidth : frozen_balance_for_energy;
130
+ return new BigNumber(amount);
131
+ });
132
+ }
133
+ // Send trx or trc10/trc20 tokens
134
+ export const createTronTransaction = (account, transaction, subAccount) => __awaiter(void 0, void 0, void 0, function* () {
135
+ const [tokenType, tokenId] = subAccount && subAccount.type === "TokenAccount"
136
+ ? drop(subAccount.token.id.split("/"), 1)
137
+ : [undefined, undefined];
138
+ // trc20
139
+ if (tokenType === "trc20" && tokenId) {
140
+ const tokenContractAddress = subAccount.token.contractAddress;
141
+ const txData = {
142
+ function_selector: "transfer(address,uint256)",
143
+ fee_limit: 50000000,
144
+ call_value: 0,
145
+ contract_address: decode58Check(tokenContractAddress),
146
+ parameter: abiEncodeTrc20Transfer(decode58Check(transaction.recipient), transaction.amount),
147
+ owner_address: decode58Check(account.freshAddress),
148
+ };
149
+ const url = `/wallet/triggersmartcontract`;
150
+ const { transaction: preparedTransaction } = yield post(url, txData);
151
+ return extendTronTxExpirationTimeBy10mn(preparedTransaction);
152
+ }
153
+ else {
154
+ // trx/trc10
155
+ const txData = {
156
+ to_address: decode58Check(transaction.recipient),
157
+ owner_address: decode58Check(account.freshAddress),
158
+ amount: transaction.amount.toNumber(),
159
+ asset_name: tokenId && Buffer.from(tokenId).toString("hex"),
160
+ };
161
+ const url = subAccount ? `/wallet/transferasset` : `/wallet/createtransaction`;
162
+ const preparedTransaction = yield post(url, txData);
163
+ // for the ledger Vault we need to increase the expiration
164
+ return extendTronTxExpirationTimeBy10mn(preparedTransaction);
165
+ }
166
+ });
167
+ function extendTronTxExpirationTimeBy10mn(preparedTransaction) {
168
+ const VAULT_EXPIRATION_TIME = 600;
169
+ const HttpProvider = TronWeb.providers.HttpProvider;
170
+ const fullNode = new HttpProvider(getBaseApiUrl());
171
+ const solidityNode = new HttpProvider(getBaseApiUrl());
172
+ const eventServer = new HttpProvider(getBaseApiUrl());
173
+ const tronWeb = new TronWeb(fullNode, solidityNode, eventServer);
174
+ //FIXME: test it and rewrite it
175
+ return tronWeb.transactionBuilder.extendExpiration(preparedTransaction, VAULT_EXPIRATION_TIME);
176
+ }
177
+ export const broadcastTron = (trxTransaction) => __awaiter(void 0, void 0, void 0, function* () {
178
+ const result = yield post(`/wallet/broadcasttransaction`, trxTransaction);
179
+ if (result.code === "TRANSACTION_EXPIRATION_ERROR") {
180
+ throw new TronTransactionExpired();
181
+ }
182
+ return result;
183
+ });
184
+ export function fetchTronAccount(addr) {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ try {
187
+ const data = yield fetch(`/v1/accounts/${addr}`);
188
+ return data.data;
189
+ }
190
+ catch (e) {
191
+ return [];
192
+ }
193
+ });
194
+ }
195
+ export function fetchCurrentBlockHeight() {
196
+ return __awaiter(this, void 0, void 0, function* () {
197
+ const data = yield fetch(`/wallet/getnowblock`);
198
+ return data.block_header.raw_data.number;
199
+ });
200
+ }
201
+ // For the moment, fetching transaction info is the only way to get fees from a transaction
202
+ function fetchTronTxDetail(txId) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ const { fee, blockNumber, withdraw_amount, unfreeze_amount } = yield fetch(`/wallet/gettransactioninfobyid?value=${encodeURIComponent(txId)}`);
205
+ return {
206
+ fee,
207
+ blockNumber,
208
+ withdraw_amount,
209
+ unfreeze_amount,
210
+ };
211
+ });
212
+ }
213
+ function getAllTransactions(initialUrl, shouldFetchMoreTxs, getTxs) {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ let all = [];
216
+ let url = initialUrl;
217
+ while (url && shouldFetchMoreTxs(all)) {
218
+ const { nextUrl, results } = yield getTxs(url);
219
+ url = nextUrl;
220
+ all = all.concat(results);
221
+ }
222
+ return all;
223
+ });
224
+ }
225
+ const getTransactions = (cacheTransactionInfoById) => (url) => __awaiter(void 0, void 0, void 0, function* () {
226
+ var _a;
227
+ const transactions = yield fetchWithBaseUrl(url);
228
+ const nextUrl = (_a = transactions.meta.links) === null || _a === void 0 ? void 0 : _a.next;
229
+ const results = yield promiseAllBatched(3, transactions.data || [], (tx) => __awaiter(void 0, void 0, void 0, function* () {
230
+ if (isMalformedTransactionTronAPI(tx)) {
231
+ return tx;
232
+ }
233
+ const txID = tx.txID;
234
+ const detail = cacheTransactionInfoById[txID] || (yield fetchTronTxDetail(txID));
235
+ cacheTransactionInfoById[txID] = detail;
236
+ return Object.assign(Object.assign({}, tx), { detail });
237
+ }));
238
+ return {
239
+ results,
240
+ nextUrl,
241
+ };
242
+ });
243
+ const getTrc20 = (url) => __awaiter(void 0, void 0, void 0, function* () {
244
+ var _b;
245
+ const transactions = yield fetchWithBaseUrl(url);
246
+ return {
247
+ results: transactions.data,
248
+ nextUrl: (_b = transactions.meta.links) === null || _b === void 0 ? void 0 : _b.next,
249
+ };
250
+ });
251
+ export function fetchTronAccountTxs(addr, shouldFetchMoreTxs, cacheTransactionInfoById) {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ const entireTxs = (yield getAllTransactions(`${getBaseApiUrl()}/v1/accounts/${addr}/transactions?limit=100`, shouldFetchMoreTxs, getTransactions(cacheTransactionInfoById)))
254
+ .filter((tx) => isTransactionTronAPI(tx))
255
+ .filter(tx => {
256
+ // custom smart contract tx has internal txs
257
+ const hasInternalTxs = tx.txID && tx.internal_transactions && tx.internal_transactions.length > 0;
258
+ // and also a duplicated malformed tx that we have to ignore
259
+ const isDuplicated = tx.tx_id;
260
+ const type = tx.raw_data.contract[0].type;
261
+ if (hasInternalTxs) {
262
+ // log once
263
+ log("tron-error", `unsupported transaction ${tx.txID}`);
264
+ }
265
+ return !isDuplicated && !hasInternalTxs && type !== "TriggerSmartContract";
266
+ })
267
+ .map(tx => formatTrongridTxResponse(tx));
268
+ // we need to fetch and filter trc20 transactions from another endpoint
269
+ const entireTrc20Txs = (yield getAllTransactions(`${getBaseApiUrl()}/v1/accounts/${addr}/transactions/trc20?get_detail=true`, shouldFetchMoreTxs, getTrc20)).map(tx => formatTrongridTrc20TxResponse(tx));
270
+ const txInfos = compact(entireTxs.concat(entireTrc20Txs)).sort((a, b) => b.date.getTime() - a.date.getTime());
271
+ return txInfos;
272
+ });
273
+ }
274
+ export const getContractUserEnergyRatioConsumption = (address) => __awaiter(void 0, void 0, void 0, function* () {
275
+ const result = yield fetchTronContract(address);
276
+ if (result) {
277
+ const { consume_user_resource_percent } = result;
278
+ return consume_user_resource_percent;
279
+ }
280
+ return 0;
281
+ });
282
+ export const fetchTronContract = (addr) => __awaiter(void 0, void 0, void 0, function* () {
283
+ try {
284
+ const data = yield post(`/wallet/getcontract`, {
285
+ value: decode58Check(addr),
286
+ });
287
+ return Object.keys(data).length !== 0 ? data : undefined;
288
+ }
289
+ catch (e) {
290
+ return undefined;
291
+ }
292
+ });
293
+ export const getTronAccountNetwork = (address) => __awaiter(void 0, void 0, void 0, function* () {
294
+ const result = yield fetch(`/wallet/getaccountresource?address=${encodeURIComponent(decode58Check(address))}`);
295
+ const { freeNetUsed = 0, freeNetLimit = 0, NetUsed = 0, NetLimit = 0, EnergyUsed = 0, EnergyLimit = 0, } = result;
296
+ return {
297
+ family: "tron",
298
+ freeNetUsed: new BigNumber(freeNetUsed),
299
+ freeNetLimit: new BigNumber(freeNetLimit),
300
+ netUsed: new BigNumber(NetUsed),
301
+ netLimit: new BigNumber(NetLimit),
302
+ energyUsed: new BigNumber(EnergyUsed),
303
+ energyLimit: new BigNumber(EnergyLimit),
304
+ };
305
+ });
306
+ export const validateAddress = (address) => __awaiter(void 0, void 0, void 0, function* () {
307
+ try {
308
+ const result = yield post(`/wallet/validateaddress`, {
309
+ address: decode58Check(address),
310
+ });
311
+ return result.result || false;
312
+ }
313
+ catch (e) {
314
+ // FIXME we should not silent errors!
315
+ log("tron-error", "validateAddress fails with " + e.message, {
316
+ address,
317
+ });
318
+ return false;
319
+ }
320
+ });
321
+ // cache for account names (name is unchanged over time)
322
+ const accountNamesCache = makeLRUCache((addr) => __awaiter(void 0, void 0, void 0, function* () { return getAccountName(addr); }), (addr) => addr, hours(3, 300));
323
+ // cache for super representative brokerages (brokerage is unchanged over time)
324
+ const srBrokeragesCache = makeLRUCache((addr) => __awaiter(void 0, void 0, void 0, function* () { return getBrokerage(addr); }), (addr) => addr, hours(3, 300));
325
+ export const getAccountName = (addr) => __awaiter(void 0, void 0, void 0, function* () {
326
+ const tronAcc = yield fetchTronAccount(addr);
327
+ const acc = tronAcc[0];
328
+ const accountName = acc && acc.account_name ? hexToAscii(acc.account_name) : undefined;
329
+ accountNamesCache.hydrate(addr, accountName); // put it in cache
330
+ return accountName;
331
+ });
332
+ export const getBrokerage = (addr) => __awaiter(void 0, void 0, void 0, function* () {
333
+ const { brokerage } = yield fetch(`/wallet/getBrokerage?address=${encodeURIComponent(addr)}`);
334
+ srBrokeragesCache.hydrate(addr, brokerage); // put it in cache
335
+ return brokerage;
336
+ });
337
+ const superRepresentativesCache = makeLRUCache(() => __awaiter(void 0, void 0, void 0, function* () {
338
+ const superRepresentatives = yield fetchSuperRepresentatives();
339
+ log("tron/superRepresentatives", "loaded " + superRepresentatives.length + " super representatives");
340
+ return superRepresentatives;
341
+ }), () => "", hours(1, 300));
342
+ export const getTronSuperRepresentatives = () => __awaiter(void 0, void 0, void 0, function* () {
343
+ return yield superRepresentativesCache();
344
+ });
345
+ export const hydrateSuperRepresentatives = (list) => {
346
+ log("tron/superRepresentatives", "hydrate " + list.length + " super representatives");
347
+ superRepresentativesCache.hydrate("", list);
348
+ };
349
+ const fetchSuperRepresentatives = () => __awaiter(void 0, void 0, void 0, function* () {
350
+ const result = yield fetch(`/wallet/listwitnesses`);
351
+ const sorted = result.witnesses.sort((a, b) => b.voteCount - a.voteCount);
352
+ const superRepresentatives = yield promiseAllBatched(3, sorted, (w) => __awaiter(void 0, void 0, void 0, function* () {
353
+ const encodedAddress = encode58Check(w.address);
354
+ const accountName = yield accountNamesCache(encodedAddress);
355
+ const brokerage = yield srBrokeragesCache(encodedAddress);
356
+ return Object.assign(Object.assign({}, w), { address: encodedAddress, name: accountName, brokerage, voteCount: w.voteCount || 0, isJobs: w.isJobs || false });
357
+ }));
358
+ hydrateSuperRepresentatives(superRepresentatives); // put it in cache
359
+ return superRepresentatives;
360
+ });
361
+ export const getNextVotingDate = () => __awaiter(void 0, void 0, void 0, function* () {
362
+ const { num } = yield fetch(`/wallet/getnextmaintenancetime`);
363
+ return new Date(num);
364
+ });
365
+ export const getTronSuperRepresentativeData = (max) => __awaiter(void 0, void 0, void 0, function* () {
366
+ const list = yield getTronSuperRepresentatives();
367
+ const nextVotingDate = yield getNextVotingDate();
368
+ return {
369
+ list: max ? take(list, max) : list,
370
+ totalVotes: sumBy(list, "voteCount"),
371
+ nextVotingDate,
372
+ };
373
+ });
374
+ export const voteTronSuperRepresentatives = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
375
+ const payload = {
376
+ owner_address: decode58Check(account.freshAddress),
377
+ votes: transaction.votes.map(v => ({
378
+ vote_address: decode58Check(v.address),
379
+ vote_count: v.voteCount,
380
+ })),
381
+ };
382
+ return yield post(`/wallet/votewitnessaccount`, payload);
383
+ });
384
+ export function getTronResources(acc_1, txs_1) {
385
+ return __awaiter(this, arguments, void 0, function* (acc, txs, cacheTransactionInfoById = {}) {
386
+ if (!acc) {
387
+ return defaultTronResources;
388
+ }
389
+ const delegatedFrozenBandwidth = get(acc, "delegated_frozenV2_balance_for_bandwidth", undefined);
390
+ const delegatedFrozenEnergy = get(acc, "account_resource.delegated_frozenV2_balance_for_energy", undefined);
391
+ const frozenBalances = get(acc, "frozenV2", undefined);
392
+ const legacyFrozenBandwidth = get(acc, "frozen[0]", undefined);
393
+ const legacyFrozenEnergy = get(acc, "account_resource.frozen_balance_for_energy", undefined);
394
+ const legacyFrozen = {
395
+ bandwidth: legacyFrozenBandwidth
396
+ ? {
397
+ amount: new BigNumber(legacyFrozenBandwidth.frozen_balance),
398
+ expiredAt: new Date(legacyFrozenBandwidth.expire_time),
399
+ }
400
+ : undefined,
401
+ energy: legacyFrozenEnergy
402
+ ? {
403
+ amount: new BigNumber(legacyFrozenEnergy.frozen_balance),
404
+ expiredAt: new Date(legacyFrozenEnergy.expire_time),
405
+ }
406
+ : undefined,
407
+ };
408
+ const { frozenEnergy, frozenBandwidth } = frozenBalances.reduce((accum, cur) => {
409
+ var _a;
410
+ const amount = new BigNumber((_a = cur === null || cur === void 0 ? void 0 : cur.amount) !== null && _a !== void 0 ? _a : 0);
411
+ if (cur.type === "ENERGY") {
412
+ accum.frozenEnergy = accum.frozenEnergy.plus(amount);
413
+ }
414
+ else if (cur.type === undefined) {
415
+ accum.frozenBandwidth = accum.frozenBandwidth.plus(amount);
416
+ }
417
+ return accum;
418
+ }, {
419
+ frozenEnergy: new BigNumber(0),
420
+ frozenBandwidth: new BigNumber(0),
421
+ });
422
+ const unFrozenBalances = get(acc, "unfrozenV2", undefined);
423
+ const unFrozen = unFrozenBalances
424
+ ? unFrozenBalances.reduce((accum, cur) => {
425
+ if (cur && cur.type === "ENERGY") {
426
+ accum.energy.push({
427
+ amount: new BigNumber(cur.unfreeze_amount),
428
+ expireTime: new Date(cur.unfreeze_expire_time),
429
+ });
430
+ }
431
+ else if (cur) {
432
+ accum.bandwidth.push({
433
+ amount: new BigNumber(cur.unfreeze_amount),
434
+ expireTime: new Date(cur.unfreeze_expire_time),
435
+ });
436
+ }
437
+ return accum;
438
+ }, { bandwidth: [], energy: [] })
439
+ : { bandwidth: [], energy: [] };
440
+ const encodedAddress = encode58Check(acc.address);
441
+ const tronNetworkInfo = yield getTronAccountNetwork(encodedAddress);
442
+ const unwithdrawnReward = yield getUnwithdrawnReward(encodedAddress);
443
+ const energy = tronNetworkInfo.energyLimit.minus(tronNetworkInfo.energyUsed);
444
+ const bandwidth = extractBandwidthInfo(tronNetworkInfo);
445
+ const frozen = {
446
+ bandwidth: frozenBandwidth.isGreaterThan(0)
447
+ ? {
448
+ amount: frozenBandwidth,
449
+ }
450
+ : undefined,
451
+ energy: frozenEnergy.isGreaterThan(0)
452
+ ? {
453
+ amount: frozenEnergy,
454
+ }
455
+ : undefined,
456
+ };
457
+ const delegatedFrozen = {
458
+ bandwidth: delegatedFrozenBandwidth
459
+ ? {
460
+ amount: new BigNumber(delegatedFrozenBandwidth),
461
+ }
462
+ : undefined,
463
+ energy: delegatedFrozenEnergy
464
+ ? {
465
+ amount: new BigNumber(delegatedFrozenEnergy),
466
+ }
467
+ : undefined,
468
+ };
469
+ const tronPower = new BigNumber(get(frozen, "bandwidth.amount", 0))
470
+ .plus(get(frozen, "energy.amount", 0))
471
+ .plus(get(delegatedFrozen, "bandwidth.amount", 0))
472
+ .plus(get(delegatedFrozen, "energy.amount", 0))
473
+ .plus(get(legacyFrozen, "energy.amount", 0))
474
+ .plus(get(legacyFrozen, "bandwidth.amount", 0))
475
+ .dividedBy(1000000)
476
+ .integerValue(BigNumber.ROUND_FLOOR)
477
+ .toNumber();
478
+ const votes = get(acc, "votes", []).map((v) => ({
479
+ address: v.vote_address,
480
+ voteCount: v.vote_count,
481
+ }));
482
+ const lastWithdrawnRewardDate = acc.latest_withdraw_time
483
+ ? new Date(acc.latest_withdraw_time)
484
+ : undefined;
485
+ // TODO: rely on the account object when trongrid will provide this info.
486
+ const getLastVotedDate = (txs) => {
487
+ const lastOp = txs.find(({ type }) => type === "VoteWitnessContract");
488
+ return lastOp ? lastOp.date : null;
489
+ };
490
+ const lastVotedDate = txs ? getLastVotedDate(txs) : undefined;
491
+ return {
492
+ energy,
493
+ bandwidth,
494
+ frozen,
495
+ unFrozen,
496
+ delegatedFrozen,
497
+ legacyFrozen,
498
+ votes,
499
+ tronPower,
500
+ unwithdrawnReward,
501
+ lastWithdrawnRewardDate,
502
+ lastVotedDate,
503
+ cacheTransactionInfoById,
504
+ };
505
+ });
506
+ }
507
+ export const getUnwithdrawnReward = (addr) => __awaiter(void 0, void 0, void 0, function* () {
508
+ try {
509
+ const { reward = 0 } = yield fetch(`/wallet/getReward?address=${encodeURIComponent(decode58Check(addr))}`);
510
+ return new BigNumber(reward);
511
+ }
512
+ catch (e) {
513
+ return Promise.resolve(new BigNumber(0));
514
+ }
515
+ });
516
+ export const claimRewardTronTransaction = (account) => __awaiter(void 0, void 0, void 0, function* () {
517
+ const url = `/wallet/withdrawbalance`;
518
+ const data = {
519
+ owner_address: decode58Check(account.freshAddress),
520
+ };
521
+ const result = yield post(url, data);
522
+ return result;
523
+ });
524
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const TRON_BASE_URL_TEST = "https://httpbin.org";
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/network/index.test.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,wBAAwB,CAAC"}
@@ -0,0 +1,63 @@
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 { HttpResponse, http } from "msw";
11
+ import { setupServer } from "msw/node";
12
+ import { TRANSACTION_DETAIL_FIXTURE, TRANSACTION_FIXTURE, TRC20_FIXTURE } from "./types.fixture";
13
+ import { setCoinConfig } from "../config";
14
+ import { fetchTronAccountTxs } from ".";
15
+ export const TRON_BASE_URL_TEST = "https://httpbin.org";
16
+ const handlers = [
17
+ http.get(`${TRON_BASE_URL_TEST}/v1/accounts/:addr/transactions`, () => {
18
+ // const url = new URL(request.url);
19
+ // const _ = url.searchParams.get("get_detail");
20
+ return HttpResponse.json(TRANSACTION_FIXTURE);
21
+ }),
22
+ http.get(`${TRON_BASE_URL_TEST}/v1/accounts/:addr/transactions/trc20`, () => {
23
+ // const url = new URL(request.url);
24
+ // const _ = url.searchParams.get("get_detail");
25
+ return HttpResponse.json(TRC20_FIXTURE);
26
+ }),
27
+ http.get(`${TRON_BASE_URL_TEST}/wallet/gettransactioninfobyid`, ({ request }) => {
28
+ var _a;
29
+ const url = new URL(request.url);
30
+ const value = (_a = url.searchParams.get("value")) !== null && _a !== void 0 ? _a : "UNKNOWN";
31
+ return HttpResponse.json(TRANSACTION_DETAIL_FIXTURE(value));
32
+ }),
33
+ ];
34
+ const mockServer = setupServer(...handlers);
35
+ describe("fetchTronAccountTxs", () => {
36
+ beforeAll(() => {
37
+ setCoinConfig(() => ({
38
+ status: {
39
+ type: "active",
40
+ },
41
+ explorer: {
42
+ url: TRON_BASE_URL_TEST,
43
+ },
44
+ }));
45
+ mockServer.listen();
46
+ });
47
+ beforeEach(() => {
48
+ mockServer.resetHandlers();
49
+ });
50
+ afterAll(() => {
51
+ mockServer.close();
52
+ });
53
+ it("convert correctly operations from the blockchain", () => __awaiter(void 0, void 0, void 0, function* () {
54
+ // WHEN
55
+ const results = yield fetchTronAccountTxs("ADDRESS", txs => txs.length < 100, {});
56
+ // THEN
57
+ const tx = results.find(tx => tx.blockHeight === 62258698);
58
+ expect(tx).toBeDefined();
59
+ expect(tx.from).toEqual("TQ7pF3NTDL2Tjz5rdJ6ECjQWjaWHpLZJMH");
60
+ expect(tx.to).toEqual("TAVrrARNdnjHgCGMQYeQV7hv4PSu7mVsMj");
61
+ }));
62
+ });
63
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/network/index.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAG,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,MAAM,QAAQ,GAAG;IACf,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,iCAAiC,EAAE,GAAG,EAAE;QACpE,oCAAoC;QACpC,gDAAgD;QAChD,OAAO,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,uCAAuC,EAAE,GAAG,EAAE;QAC1E,oCAAoC;QACpC,gDAAgD;QAChD,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,gCAAgC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,mCAAI,SAAS,CAAC;QACzD,OAAO,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;CACH,CAAC;AAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC;AAE5C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YACnB,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,QAAQ,EAAE;gBACR,GAAG,EAAE,kBAAkB;aACxB;SACF,CAAC,CAAC,CAAC;QAEJ,UAAU,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAS,EAAE;QAChE,OAAO;QACP,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QAElF,OAAO;QACP,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,EAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAC/D,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}