@ledgerhq/coin-hedera 1.13.0-nightly.2 → 1.13.0-nightly.4

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 (386) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +1 -1
  3. package/CHANGELOG.md +26 -0
  4. package/jest.config.js +1 -1
  5. package/jest.integ.config.js +8 -0
  6. package/lib/api/index.d.ts +4 -0
  7. package/lib/api/index.d.ts.map +1 -0
  8. package/lib/api/index.js +119 -0
  9. package/lib/api/index.js.map +1 -0
  10. package/lib/bridge/broadcast.d.ts +1 -1
  11. package/lib/bridge/broadcast.d.ts.map +1 -1
  12. package/lib/bridge/broadcast.js +6 -9
  13. package/lib/bridge/broadcast.js.map +1 -1
  14. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -1
  15. package/lib/bridge/buildOptimisticOperation.js +14 -11
  16. package/lib/bridge/buildOptimisticOperation.js.map +1 -1
  17. package/lib/bridge/createTransaction.d.ts +1 -1
  18. package/lib/bridge/createTransaction.d.ts.map +1 -1
  19. package/lib/bridge/createTransaction.js +2 -0
  20. package/lib/bridge/createTransaction.js.map +1 -1
  21. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -1
  22. package/lib/bridge/estimateMaxSpendable.js +2 -2
  23. package/lib/bridge/estimateMaxSpendable.js.map +1 -1
  24. package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
  25. package/lib/bridge/getTransactionStatus.js +11 -10
  26. package/lib/bridge/getTransactionStatus.js.map +1 -1
  27. package/lib/bridge/prepareTransaction.d.ts.map +1 -1
  28. package/lib/bridge/prepareTransaction.js +6 -5
  29. package/lib/bridge/prepareTransaction.js.map +1 -1
  30. package/lib/bridge/signOperation.d.ts +1 -1
  31. package/lib/bridge/signOperation.d.ts.map +1 -1
  32. package/lib/bridge/signOperation.js +53 -14
  33. package/lib/bridge/signOperation.js.map +1 -1
  34. package/lib/bridge/synchronisation.d.ts.map +1 -1
  35. package/lib/bridge/synchronisation.js +24 -11
  36. package/lib/bridge/synchronisation.js.map +1 -1
  37. package/lib/bridge/utils.d.ts +3 -13
  38. package/lib/bridge/utils.d.ts.map +1 -1
  39. package/lib/bridge/utils.js +10 -119
  40. package/lib/bridge/utils.js.map +1 -1
  41. package/lib/config.d.ts +8 -0
  42. package/lib/config.d.ts.map +1 -0
  43. package/lib/config.js +9 -0
  44. package/lib/config.js.map +1 -0
  45. package/lib/constants.d.ts +11 -8
  46. package/lib/constants.d.ts.map +1 -1
  47. package/lib/constants.js +17 -13
  48. package/lib/constants.js.map +1 -1
  49. package/lib/deviceTransactionConfig.d.ts +1 -1
  50. package/lib/deviceTransactionConfig.d.ts.map +1 -1
  51. package/lib/deviceTransactionConfig.js +3 -3
  52. package/lib/deviceTransactionConfig.js.map +1 -1
  53. package/lib/logic/broadcast.d.ts +3 -0
  54. package/lib/logic/broadcast.d.ts.map +1 -0
  55. package/lib/logic/broadcast.js +11 -0
  56. package/lib/logic/broadcast.js.map +1 -0
  57. package/lib/logic/combine.d.ts +2 -0
  58. package/lib/logic/combine.d.ts.map +1 -0
  59. package/lib/logic/combine.js +19 -0
  60. package/lib/logic/combine.js.map +1 -0
  61. package/lib/logic/craftTransaction.d.ts +8 -0
  62. package/lib/logic/craftTransaction.d.ts.map +1 -0
  63. package/lib/logic/craftTransaction.js +107 -0
  64. package/lib/logic/craftTransaction.js.map +1 -0
  65. package/lib/logic/estimateFees.d.ts +5 -0
  66. package/lib/logic/estimateFees.d.ts.map +1 -0
  67. package/lib/logic/estimateFees.js +25 -0
  68. package/lib/logic/estimateFees.js.map +1 -0
  69. package/lib/logic/getAssetFromToken.d.ts +4 -0
  70. package/lib/logic/getAssetFromToken.d.ts.map +1 -0
  71. package/lib/logic/getAssetFromToken.js +14 -0
  72. package/lib/logic/getAssetFromToken.js.map +1 -0
  73. package/lib/logic/getBalance.d.ts +4 -0
  74. package/lib/logic/getBalance.d.ts.map +1 -0
  75. package/lib/logic/getBalance.js +36 -0
  76. package/lib/logic/getBalance.js.map +1 -0
  77. package/lib/logic/getTokenFromAsset.d.ts +4 -0
  78. package/lib/logic/getTokenFromAsset.d.ts.map +1 -0
  79. package/lib/logic/getTokenFromAsset.js +13 -0
  80. package/lib/logic/getTokenFromAsset.js.map +1 -0
  81. package/lib/logic/index.d.ts +10 -0
  82. package/lib/logic/index.d.ts.map +1 -0
  83. package/lib/logic/index.js +22 -0
  84. package/lib/logic/index.js.map +1 -0
  85. package/lib/logic/lastBlock.d.ts +12 -0
  86. package/lib/logic/lastBlock.d.ts.map +1 -0
  87. package/lib/logic/lastBlock.js +25 -0
  88. package/lib/logic/lastBlock.js.map +1 -0
  89. package/lib/logic/listOperations.d.ts +19 -0
  90. package/lib/logic/listOperations.d.ts.map +1 -0
  91. package/lib/logic/listOperations.js +179 -0
  92. package/lib/logic/listOperations.js.map +1 -0
  93. package/lib/logic/utils.d.ts +55 -0
  94. package/lib/logic/utils.d.ts.map +1 -0
  95. package/lib/logic/utils.js +197 -0
  96. package/lib/logic/utils.js.map +1 -0
  97. package/lib/network/api.d.ts +24 -0
  98. package/lib/network/api.d.ts.map +1 -0
  99. package/lib/network/api.js +119 -0
  100. package/lib/network/api.js.map +1 -0
  101. package/lib/network/rpc.d.ts +12 -0
  102. package/lib/network/rpc.d.ts.map +1 -0
  103. package/lib/network/rpc.js +22 -0
  104. package/lib/network/rpc.js.map +1 -0
  105. package/lib/{api → network}/utils.d.ts +1 -5
  106. package/lib/network/utils.d.ts.map +1 -0
  107. package/lib/network/utils.js +52 -0
  108. package/lib/network/utils.js.map +1 -0
  109. package/lib/test/bridgeDatasetTest.d.ts.map +1 -1
  110. package/lib/test/bridgeDatasetTest.js +5 -1
  111. package/lib/test/bridgeDatasetTest.js.map +1 -1
  112. package/lib/test/fixtures/account.fixture.d.ts +17 -0
  113. package/lib/test/fixtures/account.fixture.d.ts.map +1 -1
  114. package/lib/test/fixtures/account.fixture.js +18 -1
  115. package/lib/test/fixtures/account.fixture.js.map +1 -1
  116. package/lib/test/fixtures/currency.fixture.d.ts.map +1 -1
  117. package/lib/test/fixtures/currency.fixture.js +1 -1
  118. package/lib/test/fixtures/currency.fixture.js.map +1 -1
  119. package/lib/test/fixtures/mirror.fixture.d.ts +1 -1
  120. package/lib/test/fixtures/mirror.fixture.d.ts.map +1 -1
  121. package/lib/test/fixtures/network.fixture.d.ts +3 -0
  122. package/lib/test/fixtures/network.fixture.d.ts.map +1 -0
  123. package/lib/test/fixtures/network.fixture.js +9 -0
  124. package/lib/test/fixtures/network.fixture.js.map +1 -0
  125. package/lib/test/fixtures/transaction.fixture.d.ts.map +1 -1
  126. package/lib/test/fixtures/transaction.fixture.js +3 -0
  127. package/lib/test/fixtures/transaction.fixture.js.map +1 -1
  128. package/lib/transaction.d.ts +1 -1
  129. package/lib/transaction.d.ts.map +1 -1
  130. package/lib/transaction.js +35 -6
  131. package/lib/transaction.js.map +1 -1
  132. package/lib/types/alpaca.d.ts +3 -0
  133. package/lib/types/alpaca.d.ts.map +1 -0
  134. package/lib/{api/types.js → types/alpaca.js} +1 -1
  135. package/lib/types/alpaca.js.map +1 -0
  136. package/lib/types/bridge.d.ts +28 -9
  137. package/lib/types/bridge.d.ts.map +1 -1
  138. package/lib/types/index.d.ts +2 -0
  139. package/lib/types/index.d.ts.map +1 -1
  140. package/lib/types/index.js +2 -0
  141. package/lib/types/index.js.map +1 -1
  142. package/lib/{api/types.d.ts → types/mirror.d.ts} +21 -2
  143. package/lib/types/mirror.d.ts.map +1 -0
  144. package/lib/types/mirror.js +3 -0
  145. package/lib/types/mirror.js.map +1 -0
  146. package/lib-es/api/index.d.ts +4 -0
  147. package/lib-es/api/index.d.ts.map +1 -0
  148. package/lib-es/api/index.js +112 -0
  149. package/lib-es/api/index.js.map +1 -0
  150. package/lib-es/bridge/broadcast.d.ts +1 -1
  151. package/lib-es/bridge/broadcast.d.ts.map +1 -1
  152. package/lib-es/bridge/broadcast.js +4 -7
  153. package/lib-es/bridge/broadcast.js.map +1 -1
  154. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -1
  155. package/lib-es/bridge/buildOptimisticOperation.js +12 -9
  156. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -1
  157. package/lib-es/bridge/createTransaction.d.ts +1 -1
  158. package/lib-es/bridge/createTransaction.d.ts.map +1 -1
  159. package/lib-es/bridge/createTransaction.js +2 -0
  160. package/lib-es/bridge/createTransaction.js.map +1 -1
  161. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -1
  162. package/lib-es/bridge/estimateMaxSpendable.js +2 -2
  163. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
  164. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
  165. package/lib-es/bridge/getTransactionStatus.js +7 -6
  166. package/lib-es/bridge/getTransactionStatus.js.map +1 -1
  167. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
  168. package/lib-es/bridge/prepareTransaction.js +4 -3
  169. package/lib-es/bridge/prepareTransaction.js.map +1 -1
  170. package/lib-es/bridge/signOperation.d.ts +1 -1
  171. package/lib-es/bridge/signOperation.d.ts.map +1 -1
  172. package/lib-es/bridge/signOperation.js +53 -14
  173. package/lib-es/bridge/signOperation.js.map +1 -1
  174. package/lib-es/bridge/synchronisation.d.ts.map +1 -1
  175. package/lib-es/bridge/synchronisation.js +24 -11
  176. package/lib-es/bridge/synchronisation.js.map +1 -1
  177. package/lib-es/bridge/utils.d.ts +3 -13
  178. package/lib-es/bridge/utils.d.ts.map +1 -1
  179. package/lib-es/bridge/utils.js +7 -113
  180. package/lib-es/bridge/utils.js.map +1 -1
  181. package/lib-es/config.d.ts +8 -0
  182. package/lib-es/config.d.ts.map +1 -0
  183. package/lib-es/config.js +4 -0
  184. package/lib-es/config.js.map +1 -0
  185. package/lib-es/constants.d.ts +11 -8
  186. package/lib-es/constants.d.ts.map +1 -1
  187. package/lib-es/constants.js +13 -9
  188. package/lib-es/constants.js.map +1 -1
  189. package/lib-es/deviceTransactionConfig.d.ts +1 -1
  190. package/lib-es/deviceTransactionConfig.d.ts.map +1 -1
  191. package/lib-es/deviceTransactionConfig.js +1 -1
  192. package/lib-es/deviceTransactionConfig.js.map +1 -1
  193. package/lib-es/logic/broadcast.d.ts +3 -0
  194. package/lib-es/logic/broadcast.d.ts.map +1 -0
  195. package/lib-es/logic/broadcast.js +7 -0
  196. package/lib-es/logic/broadcast.js.map +1 -0
  197. package/lib-es/logic/combine.d.ts +2 -0
  198. package/lib-es/logic/combine.d.ts.map +1 -0
  199. package/lib-es/logic/combine.js +12 -0
  200. package/lib-es/logic/combine.js.map +1 -0
  201. package/lib-es/logic/craftTransaction.d.ts +8 -0
  202. package/lib-es/logic/craftTransaction.d.ts.map +1 -0
  203. package/lib-es/logic/craftTransaction.js +100 -0
  204. package/lib-es/logic/craftTransaction.js.map +1 -0
  205. package/lib-es/logic/estimateFees.d.ts +5 -0
  206. package/lib-es/logic/estimateFees.d.ts.map +1 -0
  207. package/lib-es/logic/estimateFees.js +18 -0
  208. package/lib-es/logic/estimateFees.js.map +1 -0
  209. package/lib-es/logic/getAssetFromToken.d.ts +4 -0
  210. package/lib-es/logic/getAssetFromToken.d.ts.map +1 -0
  211. package/lib-es/logic/getAssetFromToken.js +10 -0
  212. package/lib-es/logic/getAssetFromToken.js.map +1 -0
  213. package/lib-es/logic/getBalance.d.ts +4 -0
  214. package/lib-es/logic/getBalance.d.ts.map +1 -0
  215. package/lib-es/logic/getBalance.js +32 -0
  216. package/lib-es/logic/getBalance.js.map +1 -0
  217. package/lib-es/logic/getTokenFromAsset.d.ts +4 -0
  218. package/lib-es/logic/getTokenFromAsset.d.ts.map +1 -0
  219. package/lib-es/logic/getTokenFromAsset.js +9 -0
  220. package/lib-es/logic/getTokenFromAsset.js.map +1 -0
  221. package/lib-es/logic/index.d.ts +10 -0
  222. package/lib-es/logic/index.d.ts.map +1 -0
  223. package/lib-es/logic/index.js +10 -0
  224. package/lib-es/logic/index.js.map +1 -0
  225. package/lib-es/logic/lastBlock.d.ts +12 -0
  226. package/lib-es/logic/lastBlock.d.ts.map +1 -0
  227. package/lib-es/logic/lastBlock.js +21 -0
  228. package/lib-es/logic/lastBlock.js.map +1 -0
  229. package/lib-es/logic/listOperations.d.ts +19 -0
  230. package/lib-es/logic/listOperations.d.ts.map +1 -0
  231. package/lib-es/logic/listOperations.js +172 -0
  232. package/lib-es/logic/listOperations.js.map +1 -0
  233. package/lib-es/logic/utils.d.ts +55 -0
  234. package/lib-es/logic/utils.d.ts.map +1 -0
  235. package/lib-es/logic/utils.js +174 -0
  236. package/lib-es/logic/utils.js.map +1 -0
  237. package/lib-es/network/api.d.ts +24 -0
  238. package/lib-es/network/api.d.ts.map +1 -0
  239. package/lib-es/network/api.js +113 -0
  240. package/lib-es/network/api.js.map +1 -0
  241. package/lib-es/network/rpc.d.ts +12 -0
  242. package/lib-es/network/rpc.d.ts.map +1 -0
  243. package/lib-es/network/rpc.js +19 -0
  244. package/lib-es/network/rpc.js.map +1 -0
  245. package/lib-es/{api → network}/utils.d.ts +1 -5
  246. package/lib-es/network/utils.d.ts.map +1 -0
  247. package/lib-es/network/utils.js +45 -0
  248. package/lib-es/network/utils.js.map +1 -0
  249. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -1
  250. package/lib-es/test/bridgeDatasetTest.js +5 -1
  251. package/lib-es/test/bridgeDatasetTest.js.map +1 -1
  252. package/lib-es/test/fixtures/account.fixture.d.ts +17 -0
  253. package/lib-es/test/fixtures/account.fixture.d.ts.map +1 -1
  254. package/lib-es/test/fixtures/account.fixture.js +17 -0
  255. package/lib-es/test/fixtures/account.fixture.js.map +1 -1
  256. package/lib-es/test/fixtures/currency.fixture.d.ts.map +1 -1
  257. package/lib-es/test/fixtures/currency.fixture.js +1 -1
  258. package/lib-es/test/fixtures/currency.fixture.js.map +1 -1
  259. package/lib-es/test/fixtures/mirror.fixture.d.ts +1 -1
  260. package/lib-es/test/fixtures/mirror.fixture.d.ts.map +1 -1
  261. package/lib-es/test/fixtures/network.fixture.d.ts +3 -0
  262. package/lib-es/test/fixtures/network.fixture.d.ts.map +1 -0
  263. package/lib-es/test/fixtures/network.fixture.js +5 -0
  264. package/lib-es/test/fixtures/network.fixture.js.map +1 -0
  265. package/lib-es/test/fixtures/transaction.fixture.d.ts.map +1 -1
  266. package/lib-es/test/fixtures/transaction.fixture.js +3 -0
  267. package/lib-es/test/fixtures/transaction.fixture.js.map +1 -1
  268. package/lib-es/transaction.d.ts +1 -1
  269. package/lib-es/transaction.d.ts.map +1 -1
  270. package/lib-es/transaction.js +35 -6
  271. package/lib-es/transaction.js.map +1 -1
  272. package/lib-es/types/alpaca.d.ts +3 -0
  273. package/lib-es/types/alpaca.d.ts.map +1 -0
  274. package/lib-es/types/alpaca.js +2 -0
  275. package/lib-es/types/alpaca.js.map +1 -0
  276. package/lib-es/types/bridge.d.ts +28 -9
  277. package/lib-es/types/bridge.d.ts.map +1 -1
  278. package/lib-es/types/index.d.ts +2 -0
  279. package/lib-es/types/index.d.ts.map +1 -1
  280. package/lib-es/types/index.js +2 -0
  281. package/lib-es/types/index.js.map +1 -1
  282. package/lib-es/{api/types.d.ts → types/mirror.d.ts} +21 -2
  283. package/lib-es/types/mirror.d.ts.map +1 -0
  284. package/lib-es/types/mirror.js +2 -0
  285. package/lib-es/types/mirror.js.map +1 -0
  286. package/package.json +8 -7
  287. package/src/api/index.integ.test.ts +401 -0
  288. package/src/api/index.test.ts +30 -0
  289. package/src/api/index.ts +149 -0
  290. package/src/bridge/broadcast.ts +5 -10
  291. package/src/bridge/buildOptimisticOperation.integration.test.ts +8 -8
  292. package/src/bridge/buildOptimisticOperation.ts +13 -10
  293. package/src/bridge/createTransaction.ts +3 -1
  294. package/src/bridge/estimateMaxSpendable.ts +6 -3
  295. package/src/bridge/getTransactionStatus.test.ts +11 -10
  296. package/src/bridge/getTransactionStatus.ts +12 -11
  297. package/src/bridge/js-estimateMaxSpendable.integration.test.ts +6 -3
  298. package/src/bridge/prepareTransaction.test.ts +9 -17
  299. package/src/bridge/prepareTransaction.ts +5 -4
  300. package/src/bridge/serialization.test.ts +6 -6
  301. package/src/bridge/signOperation.ts +69 -16
  302. package/src/bridge/synchronisation.ts +22 -14
  303. package/src/bridge/utils.integration.test.ts +25 -248
  304. package/src/bridge/utils.ts +14 -160
  305. package/src/config.ts +7 -0
  306. package/src/constants.ts +15 -9
  307. package/src/deviceTransactionConfig.ts +2 -2
  308. package/src/logic/broadcast.test.ts +58 -0
  309. package/src/logic/broadcast.ts +8 -0
  310. package/src/logic/combine.test.ts +119 -0
  311. package/src/logic/combine.ts +14 -0
  312. package/src/logic/craftTransaction.test.ts +215 -0
  313. package/src/logic/craftTransaction.ts +175 -0
  314. package/src/logic/estimateFees.test.ts +99 -0
  315. package/src/logic/estimateFees.ts +28 -0
  316. package/src/logic/getAssetFromToken.test.ts +27 -0
  317. package/src/logic/getAssetFromToken.ts +12 -0
  318. package/src/logic/getBalance.test.ts +200 -0
  319. package/src/logic/getBalance.ts +39 -0
  320. package/src/logic/getTokenFromAsset.test.ts +22 -0
  321. package/src/logic/getTokenFromAsset.ts +17 -0
  322. package/src/logic/index.ts +9 -0
  323. package/src/logic/lastBlock.test.ts +23 -0
  324. package/src/logic/lastBlock.ts +23 -0
  325. package/src/logic/listOperations.test.ts +388 -0
  326. package/src/logic/listOperations.ts +247 -0
  327. package/src/logic/utils.test.ts +432 -0
  328. package/src/logic/utils.ts +255 -0
  329. package/src/{api/mirror.test.ts → network/api.test.ts} +81 -35
  330. package/src/network/api.ts +159 -0
  331. package/src/network/rpc.test.ts +68 -0
  332. package/src/network/rpc.ts +25 -0
  333. package/src/network/utils.test.ts +175 -0
  334. package/src/network/utils.ts +58 -0
  335. package/src/test/bridgeDatasetTest.ts +6 -2
  336. package/src/test/fixtures/account.fixture.ts +18 -0
  337. package/src/test/fixtures/currency.fixture.ts +1 -1
  338. package/src/test/fixtures/mirror.fixture.ts +1 -1
  339. package/src/test/fixtures/network.fixture.ts +6 -0
  340. package/src/test/fixtures/transaction.fixture.ts +5 -2
  341. package/src/transaction.ts +40 -9
  342. package/src/types/alpaca.ts +3 -0
  343. package/src/types/bridge.ts +36 -10
  344. package/src/types/index.ts +2 -0
  345. package/src/{api/types.ts → types/mirror.ts} +23 -1
  346. package/lib/api/mirror.d.ts +0 -6
  347. package/lib/api/mirror.d.ts.map +0 -1
  348. package/lib/api/mirror.js +0 -84
  349. package/lib/api/mirror.js.map +0 -1
  350. package/lib/api/network.d.ts +0 -11
  351. package/lib/api/network.d.ts.map +0 -1
  352. package/lib/api/network.js +0 -80
  353. package/lib/api/network.js.map +0 -1
  354. package/lib/api/types.d.ts.map +0 -1
  355. package/lib/api/types.js.map +0 -1
  356. package/lib/api/utils.d.ts.map +0 -1
  357. package/lib/api/utils.js +0 -132
  358. package/lib/api/utils.js.map +0 -1
  359. package/lib/logic.d.ts +0 -11
  360. package/lib/logic.d.ts.map +0 -1
  361. package/lib/logic.js +0 -37
  362. package/lib/logic.js.map +0 -1
  363. package/lib-es/api/mirror.d.ts +0 -6
  364. package/lib-es/api/mirror.d.ts.map +0 -1
  365. package/lib-es/api/mirror.js +0 -74
  366. package/lib-es/api/mirror.js.map +0 -1
  367. package/lib-es/api/network.d.ts +0 -11
  368. package/lib-es/api/network.d.ts.map +0 -1
  369. package/lib-es/api/network.js +0 -71
  370. package/lib-es/api/network.js.map +0 -1
  371. package/lib-es/api/types.d.ts.map +0 -1
  372. package/lib-es/api/types.js +0 -2
  373. package/lib-es/api/types.js.map +0 -1
  374. package/lib-es/api/utils.d.ts.map +0 -1
  375. package/lib-es/api/utils.js +0 -124
  376. package/lib-es/api/utils.js.map +0 -1
  377. package/lib-es/logic.d.ts +0 -11
  378. package/lib-es/logic.d.ts.map +0 -1
  379. package/lib-es/logic.js +0 -29
  380. package/lib-es/logic.js.map +0 -1
  381. package/src/api/mirror.ts +0 -91
  382. package/src/api/network.test.ts +0 -49
  383. package/src/api/network.ts +0 -125
  384. package/src/api/utils.ts +0 -150
  385. package/src/logic.test.ts +0 -152
  386. package/src/logic.ts +0 -66
@@ -0,0 +1,179 @@
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.listOperations = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
9
+ const accountId_1 = require("@ledgerhq/coin-framework/account/accountId");
10
+ const operation_1 = require("@ledgerhq/coin-framework/operation");
11
+ const api_1 = require("../network/api");
12
+ const utils_1 = require("../network/utils");
13
+ const utils_2 = require("./utils");
14
+ function getCommonOperationData(rawTx, useEncodedHash, useSyntheticBlocks) {
15
+ const timestamp = new Date(Number.parseInt(rawTx.consensus_timestamp.split(".")[0], 10) * 1000);
16
+ const hash = useEncodedHash
17
+ ? (0, utils_2.base64ToUrlSafeBase64)(rawTx.transaction_hash)
18
+ : rawTx.transaction_hash;
19
+ const fee = new bignumber_js_1.default(rawTx.charged_tx_fee);
20
+ const hasFailed = rawTx.result !== "SUCCESS";
21
+ const syntheticBlock = (0, utils_2.getSyntheticBlock)(rawTx.consensus_timestamp);
22
+ const memo = (0, utils_2.getMemoFromBase64)(rawTx.memo_base64);
23
+ const extra = {
24
+ pagingToken: rawTx.consensus_timestamp,
25
+ consensusTimestamp: rawTx.consensus_timestamp,
26
+ ...(memo && { memo }),
27
+ };
28
+ return {
29
+ timestamp,
30
+ hash,
31
+ fee,
32
+ hasFailed,
33
+ blockHeight: useSyntheticBlocks ? syntheticBlock.blockHeight : 10,
34
+ blockHash: useSyntheticBlocks ? syntheticBlock.blockHash : null,
35
+ extra,
36
+ };
37
+ }
38
+ function processTokenTransfers({ rawTx, address, currency, ledgerAccountId, commonData, skipFeesForTokenOperations, }) {
39
+ const tokenTransfers = rawTx.token_transfers ?? [];
40
+ if (tokenTransfers.length === 0)
41
+ return null;
42
+ const tokenId = tokenTransfers[0].token_id;
43
+ const token = (0, tokens_1.findTokenByAddressInCurrency)(tokenId, currency.id);
44
+ if (!token)
45
+ return null;
46
+ const encodedTokenId = (0, accountId_1.encodeTokenAccountId)(ledgerAccountId, token);
47
+ const { type, value, senders, recipients } = (0, utils_1.parseTransfers)(tokenTransfers, address);
48
+ const { hash, fee, timestamp, blockHeight, blockHash, hasFailed } = commonData;
49
+ const extra = { ...commonData.extra };
50
+ let coinOperation;
51
+ // Add main FEES coin operation for send token transfer
52
+ if (type === "OUT" && !skipFeesForTokenOperations) {
53
+ coinOperation = {
54
+ id: (0, operation_1.encodeOperationId)(ledgerAccountId, hash, "FEES"),
55
+ accountId: ledgerAccountId,
56
+ type: "FEES",
57
+ value: fee,
58
+ recipients,
59
+ senders,
60
+ hash,
61
+ fee,
62
+ date: timestamp,
63
+ blockHeight,
64
+ blockHash,
65
+ hasFailed,
66
+ extra,
67
+ };
68
+ }
69
+ const tokenOperation = {
70
+ id: (0, operation_1.encodeOperationId)(encodedTokenId, hash, type),
71
+ accountId: encodedTokenId,
72
+ contract: token.contractAddress,
73
+ standard: "hts",
74
+ type,
75
+ value,
76
+ recipients,
77
+ senders,
78
+ hash,
79
+ fee,
80
+ date: timestamp,
81
+ blockHeight,
82
+ blockHash,
83
+ hasFailed,
84
+ extra,
85
+ };
86
+ return {
87
+ coinOperation,
88
+ tokenOperation,
89
+ };
90
+ }
91
+ function processTransfers({ rawTx, address, ledgerAccountId, commonData, mirrorTokens, }) {
92
+ const transfers = rawTx.transfers ?? [];
93
+ if (transfers.length === 0)
94
+ return null;
95
+ const { type, value, senders, recipients } = (0, utils_1.parseTransfers)(transfers, address);
96
+ const { hash, fee, timestamp, blockHeight, blockHash, hasFailed } = commonData;
97
+ const extra = { ...commonData.extra };
98
+ let operationType = type;
99
+ // try to enrich ASSOCIATE_TOKEN operation with extra.associatedTokenId
100
+ // this value is used by custom OperationDetails components in Hedera family
101
+ // accounts or contracts must first associate with an HTS token before they can receive or send that token; without association, token transfers fail
102
+ if (rawTx.name === "TOKENASSOCIATE") {
103
+ operationType = "ASSOCIATE_TOKEN";
104
+ const relatedMirrorToken = mirrorTokens.find(t => {
105
+ return t.created_timestamp === rawTx.consensus_timestamp;
106
+ });
107
+ if (relatedMirrorToken) {
108
+ extra.associatedTokenId = relatedMirrorToken.token_id;
109
+ }
110
+ }
111
+ return {
112
+ id: (0, operation_1.encodeOperationId)(ledgerAccountId, hash, operationType),
113
+ accountId: ledgerAccountId,
114
+ type: operationType,
115
+ value,
116
+ recipients,
117
+ senders,
118
+ hash,
119
+ fee,
120
+ date: timestamp,
121
+ blockHeight,
122
+ blockHash,
123
+ hasFailed,
124
+ extra,
125
+ };
126
+ }
127
+ async function listOperations({ currency, address, mirrorTokens, pagination, fetchAllPages, skipFeesForTokenOperations, useEncodedHash, useSyntheticBlocks, }) {
128
+ const coinOperations = [];
129
+ const tokenOperations = [];
130
+ const mirrorResult = await api_1.apiClient.getAccountTransactions({
131
+ address,
132
+ pagingToken: pagination.lastPagingToken ?? null,
133
+ order: pagination.order,
134
+ limit: pagination.limit,
135
+ fetchAllPages,
136
+ });
137
+ const ledgerAccountId = (0, accountId_1.encodeAccountId)({
138
+ type: "js",
139
+ version: "2",
140
+ currencyId: currency.id,
141
+ xpubOrAddress: address,
142
+ derivationMode: "hederaBip44",
143
+ });
144
+ for (const rawTx of mirrorResult.transactions) {
145
+ const commonData = getCommonOperationData(rawTx, useEncodedHash, useSyntheticBlocks);
146
+ // process token transfers
147
+ const tokenResult = processTokenTransfers({
148
+ rawTx,
149
+ address,
150
+ currency,
151
+ ledgerAccountId,
152
+ commonData,
153
+ skipFeesForTokenOperations,
154
+ });
155
+ if (tokenResult?.coinOperation)
156
+ coinOperations.push(tokenResult.coinOperation);
157
+ if (tokenResult?.tokenOperation)
158
+ tokenOperations.push(tokenResult.tokenOperation);
159
+ // process regular transfers only if there were no token transfers
160
+ if (!tokenResult) {
161
+ const coinOperation = processTransfers({
162
+ rawTx,
163
+ address,
164
+ ledgerAccountId,
165
+ commonData,
166
+ mirrorTokens,
167
+ });
168
+ if (coinOperation)
169
+ coinOperations.push(coinOperation);
170
+ }
171
+ }
172
+ return {
173
+ coinOperations,
174
+ tokenOperations,
175
+ nextCursor: mirrorResult.nextCursor,
176
+ };
177
+ }
178
+ exports.listOperations = listOperations;
179
+ //# sourceMappingURL=listOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listOperations.js","sourceRoot":"","sources":["../../src/logic/listOperations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { Transaction as HederaSDKTransaction } from "@hashgraph/sdk";
3
+ import { AssetInfo, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
4
+ import type { Currency, ExplorerView, TokenCurrency } from "@ledgerhq/types-cryptoassets";
5
+ import type { AccountLike, Operation as LiveOperation } from "@ledgerhq/types-live";
6
+ import { HEDERA_OPERATION_TYPES, HEDERA_TRANSACTION_MODES } from "../constants";
7
+ import type { HederaOperationExtra, Transaction, TransactionStatus } from "../types";
8
+ export declare const serializeSignature: (signature: Uint8Array) => string;
9
+ export declare const deserializeSignature: (signature: string) => Buffer;
10
+ export declare const serializeTransaction: (tx: HederaSDKTransaction) => string;
11
+ export declare const deserializeTransaction: (tx: string) => HederaSDKTransaction;
12
+ export declare const getOperationValue: ({ asset, operation, }: {
13
+ asset: AssetInfo;
14
+ operation: LiveOperation<HederaOperationExtra>;
15
+ }) => bigint;
16
+ export declare const getHederaTransactionBodyBytes: (tx: HederaSDKTransaction) => Uint8Array;
17
+ export declare const mapIntentToSDKOperation: (txIntent: TransactionIntent) => HEDERA_OPERATION_TYPES;
18
+ export declare const getMemoFromBase64: (memoBase64: string | undefined) => string | null;
19
+ export declare function base64ToUrlSafeBase64(data: string): string;
20
+ export declare const getTransactionExplorer: (explorerView: ExplorerView | null | undefined, operation: LiveOperation) => string | undefined;
21
+ export declare const isTokenAssociateTransaction: (tx: Transaction) => tx is import("@ledgerhq/types-live").TransactionCommon & {
22
+ family: "hedera";
23
+ memo?: string | undefined;
24
+ maxFee?: BigNumber;
25
+ } & {
26
+ mode: HEDERA_TRANSACTION_MODES.TokenAssociate;
27
+ assetReference: string;
28
+ assetOwner: string;
29
+ properties: {
30
+ token: TokenCurrency;
31
+ };
32
+ };
33
+ export declare const isAutoTokenAssociationEnabled: (account: AccountLike) => boolean;
34
+ export declare const isTokenAssociationRequired: (account: AccountLike, token: TokenCurrency | null | undefined) => boolean;
35
+ export declare const isValidExtra: (extra: unknown) => extra is HederaOperationExtra;
36
+ export declare const sendRecipientCanNext: (status: TransactionStatus) => boolean;
37
+ export declare const getCurrencyToUSDRate: import("@ledgerhq/live-network/cache").CacheRes<[currency: Currency], BigNumber | null>;
38
+ export declare const checkAccountTokenAssociationStatus: import("@ledgerhq/live-network/cache").CacheRes<[accountId: string, tokenId: string], boolean>;
39
+ export declare const safeParseAccountId: (address: string) => [Error, null] | [null, {
40
+ accountId: string;
41
+ checksum: string | null;
42
+ }];
43
+ /**
44
+ * Calculates a synthetic block height based on Hedera consensus timestamp.
45
+ *
46
+ * @param consensusTimestamp - Hedera consensus timestamp
47
+ * @param blockWindowSeconds - Duration of one synthetic block in seconds (default: 10)
48
+ * @returns Deterministic synthetic block (height and hash)
49
+ */
50
+ export declare function getSyntheticBlock(consensusTimestamp: string, blockWindowSeconds?: number): {
51
+ blockHeight: number;
52
+ blockHash: string;
53
+ blockTime: Date;
54
+ };
55
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAa,WAAW,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAMlF,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAEV,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,kBAAkB,cAAe,UAAU,WAEvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,cAAe,MAAM,WAErD,CAAC;AAEF,eAAO,MAAM,oBAAoB,OAAQ,oBAAoB,WAE5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAQ,MAAM,yBAEhD,CAAC;AAEF,eAAO,MAAM,iBAAiB;WAIrB,SAAS;eACL,cAAc,oBAAoB,CAAC;YAW/C,CAAC;AAMF,eAAO,MAAM,6BAA6B,OAAQ,oBAAoB,eAIrE,CAAC;AAEF,eAAO,MAAM,uBAAuB,aAAc,iBAAiB,2BAUlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAgB,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAQ3E,CAAC;AAGF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,eAAO,MAAM,sBAAsB,iBACnB,YAAY,GAAG,IAAI,GAAG,SAAS,aAClC,aAAa,KACvB,MAAM,GAAG,SAOX,CAAC;AAEF,eAAO,MAAM,2BAA2B,OAAQ,WAAW;;;;;;;;;;;CAE1D,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAa,WAAW,YAIjE,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAC5B,WAAW,SACb,aAAa,GAAG,IAAI,GAAG,SAAS,YAMxC,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,OAAO,kCAE1C,CAAC;AAKF,eAAO,MAAM,oBAAoB,WAAY,iBAAiB,YAI7D,CAAC;AAGF,eAAO,MAAM,oBAAoB,yFAoBhC,CAAC;AAEF,eAAO,MAAM,kCAAkC,gGAwB9C,CAAC;AAEF,eAAO,MAAM,kBAAkB,YACpB,MAAM,KACd,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA+BvE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,SAAiC;;;;EAapD"}
@@ -0,0 +1,197 @@
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.getSyntheticBlock = exports.safeParseAccountId = exports.checkAccountTokenAssociationStatus = exports.getCurrencyToUSDRate = exports.sendRecipientCanNext = exports.isValidExtra = exports.isTokenAssociationRequired = exports.isAutoTokenAssociationEnabled = exports.isTokenAssociateTransaction = exports.getTransactionExplorer = exports.base64ToUrlSafeBase64 = exports.getMemoFromBase64 = exports.mapIntentToSDKOperation = exports.getHederaTransactionBodyBytes = exports.getOperationValue = exports.deserializeTransaction = exports.serializeTransaction = exports.deserializeSignature = exports.serializeSignature = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const crypto_1 = require("crypto");
9
+ const invariant_1 = __importDefault(require("invariant"));
10
+ const sdk_1 = require("@hashgraph/sdk");
11
+ const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
12
+ const fiats_1 = require("@ledgerhq/cryptoassets/fiats");
13
+ const index_1 = __importDefault(require("@ledgerhq/live-countervalues/api/index"));
14
+ const errors_1 = require("@ledgerhq/errors");
15
+ const cache_1 = require("@ledgerhq/live-network/cache");
16
+ const constants_1 = require("../constants");
17
+ const api_1 = require("../network/api");
18
+ const rpc_1 = require("../network/rpc");
19
+ const errors_2 = require("../errors");
20
+ const serializeSignature = (signature) => {
21
+ return Buffer.from(signature).toString("base64");
22
+ };
23
+ exports.serializeSignature = serializeSignature;
24
+ const deserializeSignature = (signature) => {
25
+ return Buffer.from(signature, "base64");
26
+ };
27
+ exports.deserializeSignature = deserializeSignature;
28
+ const serializeTransaction = (tx) => {
29
+ return Buffer.from(tx.toBytes()).toString("hex");
30
+ };
31
+ exports.serializeTransaction = serializeTransaction;
32
+ const deserializeTransaction = (tx) => {
33
+ return sdk_1.Transaction.fromBytes(Buffer.from(tx, "hex"));
34
+ };
35
+ exports.deserializeTransaction = deserializeTransaction;
36
+ const getOperationValue = ({ asset, operation, }) => {
37
+ if (operation.type === "FEES") {
38
+ return BigInt(0);
39
+ }
40
+ if (asset.type === "native" && operation.type === "OUT") {
41
+ return BigInt(operation.value.toFixed(0)) - BigInt(operation.fee.toFixed(0));
42
+ }
43
+ return BigInt(operation.value.toFixed(0));
44
+ };
45
+ exports.getOperationValue = getOperationValue;
46
+ // this utils extracts the bodyBytes from a Hedera Transaction that are required for signing
47
+ // hardcoded `.get(0)` is here because we are always using single node account id
48
+ // this is because we want to avoid "signing" loop for users, as described here:
49
+ // https://github.com/LedgerHQ/ledger-live/pull/72/commits/1e942687d4301660e43e0c4b5419fcfa2733b290
50
+ const getHederaTransactionBodyBytes = (tx) => {
51
+ const bodyBytes = tx._signedTransactions.get(0)?.bodyBytes;
52
+ (0, invariant_1.default)(bodyBytes, "hedera: tx body bytes are missing");
53
+ return bodyBytes;
54
+ };
55
+ exports.getHederaTransactionBodyBytes = getHederaTransactionBodyBytes;
56
+ const mapIntentToSDKOperation = (txIntent) => {
57
+ if (txIntent.type === constants_1.HEDERA_TRANSACTION_MODES.TokenAssociate) {
58
+ return constants_1.HEDERA_OPERATION_TYPES.TokenAssociate;
59
+ }
60
+ if (txIntent.type === constants_1.HEDERA_TRANSACTION_MODES.Send && txIntent.asset.type !== "native") {
61
+ return constants_1.HEDERA_OPERATION_TYPES.TokenTransfer;
62
+ }
63
+ return constants_1.HEDERA_OPERATION_TYPES.CryptoTransfer;
64
+ };
65
+ exports.mapIntentToSDKOperation = mapIntentToSDKOperation;
66
+ const getMemoFromBase64 = (memoBase64) => {
67
+ try {
68
+ if (memoBase64 === undefined)
69
+ return null;
70
+ return Buffer.from(memoBase64, "base64").toString("utf-8");
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ };
76
+ exports.getMemoFromBase64 = getMemoFromBase64;
77
+ // NOTE: convert from the non-url-safe version of base64 to the url-safe version (that the explorer uses)
78
+ function base64ToUrlSafeBase64(data) {
79
+ // Might be nice to use this alternative if .nvmrc changes to >= Node v14.18.0
80
+ // base64url encoding option isn't supported until then
81
+ // Buffer.from(data, "base64").toString("base64url");
82
+ return data.replace(/\//g, "_").replace(/\+/g, "-");
83
+ }
84
+ exports.base64ToUrlSafeBase64 = base64ToUrlSafeBase64;
85
+ const getTransactionExplorer = (explorerView, operation) => {
86
+ const extra = (0, exports.isValidExtra)(operation.extra) ? operation.extra : null;
87
+ return explorerView?.tx?.replace("$hash", extra?.consensusTimestamp ?? extra?.transactionId ?? "0");
88
+ };
89
+ exports.getTransactionExplorer = getTransactionExplorer;
90
+ const isTokenAssociateTransaction = (tx) => {
91
+ return tx.mode === constants_1.HEDERA_TRANSACTION_MODES.TokenAssociate;
92
+ };
93
+ exports.isTokenAssociateTransaction = isTokenAssociateTransaction;
94
+ const isAutoTokenAssociationEnabled = (account) => {
95
+ const hederaAccount = "hederaResources" in account ? account : null;
96
+ return hederaAccount?.hederaResources?.isAutoTokenAssociationEnabled ?? false;
97
+ };
98
+ exports.isAutoTokenAssociationEnabled = isAutoTokenAssociationEnabled;
99
+ const isTokenAssociationRequired = (account, token) => {
100
+ const subAccounts = !!account && "subAccounts" in account ? account.subAccounts ?? [] : [];
101
+ const isTokenAssociated = subAccounts.some(item => item.token.id === token?.id);
102
+ return !!token && !isTokenAssociated && !(0, exports.isAutoTokenAssociationEnabled)(account);
103
+ };
104
+ exports.isTokenAssociationRequired = isTokenAssociationRequired;
105
+ const isValidExtra = (extra) => {
106
+ return !!extra && typeof extra === "object" && !Array.isArray(extra);
107
+ };
108
+ exports.isValidExtra = isValidExtra;
109
+ // disables the "Continue" button in the Send modal's Recipient step during token transfers if:
110
+ // - the recipient is not associated with the token
111
+ // - the association status can't be verified
112
+ const sendRecipientCanNext = (status) => {
113
+ const { missingAssociation, unverifiedAssociation } = status.warnings;
114
+ return !missingAssociation && !unverifiedAssociation;
115
+ };
116
+ exports.sendRecipientCanNext = sendRecipientCanNext;
117
+ // note: this is currently called frequently by getTransactionStatus; LRU cache prevents duplicated requests
118
+ exports.getCurrencyToUSDRate = (0, cache_1.makeLRUCache)(async (currency) => {
119
+ try {
120
+ const [rate] = await index_1.default.fetchLatest([
121
+ {
122
+ from: currency,
123
+ to: (0, fiats_1.getFiatCurrencyByTicker)("USD"),
124
+ startDate: new Date(),
125
+ },
126
+ ]);
127
+ (0, invariant_1.default)(rate, "no value returned from cvs api");
128
+ return new bignumber_js_1.default(rate);
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }, currency => currency.ticker, (0, cache_1.seconds)(3));
134
+ exports.checkAccountTokenAssociationStatus = (0, cache_1.makeLRUCache)(async (address, tokenId) => {
135
+ const [parsingError, parsingResult] = (0, exports.safeParseAccountId)(address);
136
+ if (parsingError) {
137
+ throw parsingError;
138
+ }
139
+ const addressWithoutChecksum = parsingResult.accountId;
140
+ const mirrorAccount = await api_1.apiClient.getAccount(addressWithoutChecksum);
141
+ // auto association is enabled
142
+ if (mirrorAccount.max_automatic_token_associations === -1) {
143
+ return true;
144
+ }
145
+ const isTokenAssociated = mirrorAccount.balance.tokens.some(token => {
146
+ return token.token_id === tokenId;
147
+ });
148
+ return isTokenAssociated;
149
+ }, (accountId, tokenId) => `${accountId}-${tokenId}`, (0, cache_1.seconds)(30));
150
+ const safeParseAccountId = (address) => {
151
+ const currency = (0, currencies_1.findCryptoCurrencyById)("hedera");
152
+ const currencyName = currency?.name ?? "Hedera";
153
+ try {
154
+ const accountId = sdk_1.AccountId.fromString(address);
155
+ // verify checksum if present
156
+ // FIXME: migrate to EntityIdHelper methods once SDK is upgraded:
157
+ // https://github.com/hiero-ledger/hiero-sdk-js/blob/main/src/EntityIdHelper.js#L197
158
+ // https://github.com/hiero-ledger/hiero-sdk-js/blob/main/src/EntityIdHelper.js#L446
159
+ const checksum = address.split("-")[1] ?? null;
160
+ if (checksum) {
161
+ const client = rpc_1.rpcClient.getInstance();
162
+ const recipientWithChecksum = accountId.toStringWithChecksum(client);
163
+ const expectedChecksum = recipientWithChecksum.split("-")[1];
164
+ if (checksum !== expectedChecksum) {
165
+ return [new errors_2.HederaRecipientInvalidChecksum(), null];
166
+ }
167
+ }
168
+ const result = {
169
+ accountId: accountId.toString(),
170
+ checksum,
171
+ };
172
+ return [null, result];
173
+ }
174
+ catch (err) {
175
+ return [new errors_1.InvalidAddress("", { currencyName }), null];
176
+ }
177
+ };
178
+ exports.safeParseAccountId = safeParseAccountId;
179
+ /**
180
+ * Calculates a synthetic block height based on Hedera consensus timestamp.
181
+ *
182
+ * @param consensusTimestamp - Hedera consensus timestamp
183
+ * @param blockWindowSeconds - Duration of one synthetic block in seconds (default: 10)
184
+ * @returns Deterministic synthetic block (height and hash)
185
+ */
186
+ function getSyntheticBlock(consensusTimestamp, blockWindowSeconds = constants_1.SYNTHETIC_BLOCK_WINDOW_SECONDS) {
187
+ const seconds = Math.floor(Number(consensusTimestamp));
188
+ if (Number.isNaN(seconds) || seconds === 0) {
189
+ throw new Error(`Invalid consensus timestamp: ${consensusTimestamp}`);
190
+ }
191
+ const blockHeight = Math.floor(seconds / blockWindowSeconds);
192
+ const blockHash = (0, crypto_1.createHash)("sha256").update(blockHeight.toString()).digest("hex");
193
+ const blockTime = new Date(seconds * 1000);
194
+ return { blockHeight, blockHash, blockTime };
195
+ }
196
+ exports.getSyntheticBlock = getSyntheticBlock;
197
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/logic/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { HederaMirrorAccount, HederaMirrorToken, HederaMirrorTransaction } from "../types";
2
+ declare function getAccountsForPublicKey(publicKey: string): Promise<HederaMirrorAccount[]>;
3
+ declare function getAccount(address: string): Promise<HederaMirrorAccount>;
4
+ declare function getAccountTransactions({ address, pagingToken, limit, order, fetchAllPages, }: {
5
+ address: string;
6
+ pagingToken: string | null;
7
+ limit?: number | undefined;
8
+ order?: "asc" | "desc" | undefined;
9
+ fetchAllPages: boolean;
10
+ }): Promise<{
11
+ transactions: HederaMirrorTransaction[];
12
+ nextCursor: string | null;
13
+ }>;
14
+ declare function getAccountTokens(address: string): Promise<HederaMirrorToken[]>;
15
+ declare function getLatestTransaction(): Promise<HederaMirrorTransaction>;
16
+ export declare const apiClient: {
17
+ getAccountsForPublicKey: typeof getAccountsForPublicKey;
18
+ getAccount: typeof getAccount;
19
+ getAccountTokens: typeof getAccountTokens;
20
+ getAccountTransactions: typeof getAccountTransactions;
21
+ getLatestTransaction: typeof getLatestTransaction;
22
+ };
23
+ export {};
24
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/network/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,mBAAmB,EAEnB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAWlB,iBAAe,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAcxF;AAED,iBAAe,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAavE;AAED,iBAAe,sBAAsB,CAAC,EACpC,OAAO,EACP,WAAW,EACX,KAAW,EACX,KAAc,EACd,aAAa,GACd,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,uBAAuB,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAgDlF;AAED,iBAAe,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgB7E;AAED,iBAAe,oBAAoB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAgBtE;AAED,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
@@ -0,0 +1,119 @@
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.apiClient = void 0;
7
+ const live_network_1 = __importDefault(require("@ledgerhq/live-network"));
8
+ const live_env_1 = require("@ledgerhq/live-env");
9
+ const errors_1 = require("@ledgerhq/errors");
10
+ const errors_2 = require("../errors");
11
+ const getMirrorApiUrl = () => (0, live_env_1.getEnv)("API_HEDERA_MIRROR");
12
+ const fetch = (path) => {
13
+ return (0, live_network_1.default)({
14
+ method: "GET",
15
+ url: `${getMirrorApiUrl()}${path}`,
16
+ });
17
+ };
18
+ async function getAccountsForPublicKey(publicKey) {
19
+ let res;
20
+ try {
21
+ res = await fetch(`/api/v1/accounts?account.publicKey=${publicKey}&balance=true&limit=100`);
22
+ }
23
+ catch (e) {
24
+ if (e instanceof errors_1.LedgerAPI4xx)
25
+ return [];
26
+ throw e;
27
+ }
28
+ const accounts = res.data.accounts;
29
+ return accounts;
30
+ }
31
+ async function getAccount(address) {
32
+ try {
33
+ const res = await fetch(`/api/v1/accounts/${address}`);
34
+ const account = res.data;
35
+ return account;
36
+ }
37
+ catch (error) {
38
+ if (error instanceof errors_1.LedgerAPI4xx && "status" in error && error.status === 404) {
39
+ throw new errors_2.HederaAddAccountError();
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ async function getAccountTransactions({ address, pagingToken, limit = 100, order = "desc", fetchAllPages, }) {
45
+ const transactions = [];
46
+ const params = new URLSearchParams({
47
+ "account.id": address,
48
+ limit: limit.toString(),
49
+ order,
50
+ });
51
+ // keeps old behavior when all pages are fetched
52
+ const getTimestampDirection = () => {
53
+ if (fetchAllPages)
54
+ return "gt";
55
+ return order === "asc" ? "gt" : "lt";
56
+ };
57
+ if (pagingToken) {
58
+ params.append("timestamp", `${getTimestampDirection()}:${pagingToken}`);
59
+ }
60
+ let nextCursor = null;
61
+ let nextUrl = `/api/v1/transactions?${params.toString()}`;
62
+ // WARNING: don't break the loop when `transactions` array is empty but `links.next` is present
63
+ // the mirror node API enforces a 60-day max time range per query, even if `timestamp` param is set
64
+ // see: https://hedera.com/blog/changes-to-the-hedera-operated-mirror-node
65
+ while (nextUrl) {
66
+ const res = await fetch(nextUrl);
67
+ const newTransactions = res.data.transactions;
68
+ transactions.push(...newTransactions);
69
+ nextUrl = res.data.links.next;
70
+ // stop fetching if pagination mode is used and we reached the limit
71
+ if (!fetchAllPages && transactions.length >= limit) {
72
+ break;
73
+ }
74
+ }
75
+ // ensure we don't exceed the limit in pagination mode
76
+ if (!fetchAllPages && transactions.length > limit) {
77
+ transactions.splice(limit);
78
+ }
79
+ // set the next cursor only if we have more transactions to fetch
80
+ if (!fetchAllPages && nextUrl) {
81
+ const lastTx = transactions.at(-1);
82
+ nextCursor = lastTx?.consensus_timestamp ?? null;
83
+ }
84
+ return { transactions, nextCursor };
85
+ }
86
+ async function getAccountTokens(address) {
87
+ const tokens = [];
88
+ const params = new URLSearchParams({
89
+ limit: "100",
90
+ });
91
+ let nextUrl = `/api/v1/accounts/${address}/tokens?${params.toString()}`;
92
+ while (nextUrl) {
93
+ const res = await fetch(nextUrl);
94
+ const newTokens = res.data.tokens;
95
+ tokens.push(...newTokens);
96
+ nextUrl = res.data.links.next;
97
+ }
98
+ return tokens;
99
+ }
100
+ async function getLatestTransaction() {
101
+ const params = new URLSearchParams({
102
+ limit: "1",
103
+ order: "desc",
104
+ });
105
+ const res = await fetch(`/api/v1/transactions?${params.toString()}`);
106
+ const transaction = res.data.transactions[0];
107
+ if (!transaction) {
108
+ throw new Error("No transactions found on the Hedera network");
109
+ }
110
+ return transaction;
111
+ }
112
+ exports.apiClient = {
113
+ getAccountsForPublicKey,
114
+ getAccount,
115
+ getAccountTokens,
116
+ getAccountTransactions,
117
+ getLatestTransaction,
118
+ };
119
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/network/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Transaction as HederaTransaction, TransactionResponse } from "@hashgraph/sdk";
2
+ import { Client } from "@hashgraph/sdk";
3
+ declare function broadcastTransaction(transaction: HederaTransaction): Promise<TransactionResponse>;
4
+ declare function getInstance(): Client;
5
+ declare function _resetInstance(): void;
6
+ export declare const rpcClient: {
7
+ getInstance: typeof getInstance;
8
+ broadcastTransaction: typeof broadcastTransaction;
9
+ _resetInstance: typeof _resetInstance;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/network/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,iBAAS,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAE1F;AAID,iBAAS,WAAW,IAAI,MAAM,CAI7B;AAGD,iBAAS,cAAc,SAEtB;AAED,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}