@ledgerhq/coin-sui 0.2.0-nightly.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/.eslintrc.js +23 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +19 -0
  4. package/CHANGELOG.md +16 -0
  5. package/LICENSE.txt +21 -0
  6. package/jest.config.js +9 -0
  7. package/jest.integ.config.js +7 -0
  8. package/lib/api/chain/index.d.ts +16 -0
  9. package/lib/api/chain/index.d.ts.map +1 -0
  10. package/lib/api/chain/index.js +3 -0
  11. package/lib/api/chain/index.js.map +1 -0
  12. package/lib/bridge/bridge.integration.test.d.ts +4 -0
  13. package/lib/bridge/bridge.integration.test.d.ts.map +1 -0
  14. package/lib/bridge/bridge.integration.test.js +136 -0
  15. package/lib/bridge/bridge.integration.test.js.map +1 -0
  16. package/lib/bridge/broadcast.d.ts +12 -0
  17. package/lib/bridge/broadcast.d.ts.map +1 -0
  18. package/lib/bridge/broadcast.js +20 -0
  19. package/lib/bridge/broadcast.js.map +1 -0
  20. package/lib/bridge/broadcast.test.d.ts +2 -0
  21. package/lib/bridge/broadcast.test.d.ts.map +1 -0
  22. package/lib/bridge/broadcast.test.js +48 -0
  23. package/lib/bridge/broadcast.test.js.map +1 -0
  24. package/lib/bridge/buildOptimisticOperation.d.ts +4 -0
  25. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
  26. package/lib/bridge/buildOptimisticOperation.js +76 -0
  27. package/lib/bridge/buildOptimisticOperation.js.map +1 -0
  28. package/lib/bridge/buildOptimisticOperation.test.d.ts +2 -0
  29. package/lib/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  30. package/lib/bridge/buildOptimisticOperation.test.js +52 -0
  31. package/lib/bridge/buildOptimisticOperation.test.js.map +1 -0
  32. package/lib/bridge/buildTransaction.d.ts +9 -0
  33. package/lib/bridge/buildTransaction.d.ts.map +1 -0
  34. package/lib/bridge/buildTransaction.js +19 -0
  35. package/lib/bridge/buildTransaction.js.map +1 -0
  36. package/lib/bridge/buildTransaction.test.d.ts +2 -0
  37. package/lib/bridge/buildTransaction.test.d.ts.map +1 -0
  38. package/lib/bridge/buildTransaction.test.js +17 -0
  39. package/lib/bridge/buildTransaction.test.js.map +1 -0
  40. package/lib/bridge/createTransaction.d.ts +10 -0
  41. package/lib/bridge/createTransaction.d.ts.map +1 -0
  42. package/lib/bridge/createTransaction.js +24 -0
  43. package/lib/bridge/createTransaction.js.map +1 -0
  44. package/lib/bridge/estimateMaxSpendable.d.ts +14 -0
  45. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  46. package/lib/bridge/estimateMaxSpendable.js +44 -0
  47. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  48. package/lib/bridge/estimateMaxSpendable.test.d.ts +2 -0
  49. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  50. package/lib/bridge/estimateMaxSpendable.test.js +25 -0
  51. package/lib/bridge/estimateMaxSpendable.test.js.map +1 -0
  52. package/lib/bridge/formatters.d.ts +10 -0
  53. package/lib/bridge/formatters.d.ts.map +1 -0
  54. package/lib/bridge/formatters.js +24 -0
  55. package/lib/bridge/formatters.js.map +1 -0
  56. package/lib/bridge/formatters.test.d.ts +2 -0
  57. package/lib/bridge/formatters.test.d.ts.map +1 -0
  58. package/lib/bridge/formatters.test.js +18 -0
  59. package/lib/bridge/formatters.test.js.map +1 -0
  60. package/lib/bridge/getFeesForTransaction.d.ts +15 -0
  61. package/lib/bridge/getFeesForTransaction.d.ts.map +1 -0
  62. package/lib/bridge/getFeesForTransaction.js +32 -0
  63. package/lib/bridge/getFeesForTransaction.js.map +1 -0
  64. package/lib/bridge/getFeesForTransaction.test.d.ts +2 -0
  65. package/lib/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  66. package/lib/bridge/getFeesForTransaction.test.js +35 -0
  67. package/lib/bridge/getFeesForTransaction.test.js.map +1 -0
  68. package/lib/bridge/getTransactionStatus.d.ts +12 -0
  69. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  70. package/lib/bridge/getTransactionStatus.js +59 -0
  71. package/lib/bridge/getTransactionStatus.js.map +1 -0
  72. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  73. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  74. package/lib/bridge/getTransactionStatus.test.js +48 -0
  75. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  76. package/lib/bridge/index.d.ts +10 -0
  77. package/lib/bridge/index.d.ts.map +1 -0
  78. package/lib/bridge/index.js +63 -0
  79. package/lib/bridge/index.js.map +1 -0
  80. package/lib/bridge/preload.d.ts +11 -0
  81. package/lib/bridge/preload.d.ts.map +1 -0
  82. package/lib/bridge/preload.js +41 -0
  83. package/lib/bridge/preload.js.map +1 -0
  84. package/lib/bridge/prepareTransaction.d.ts +13 -0
  85. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  86. package/lib/bridge/prepareTransaction.js +43 -0
  87. package/lib/bridge/prepareTransaction.js.map +1 -0
  88. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  89. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  90. package/lib/bridge/prepareTransaction.test.js +45 -0
  91. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  92. package/lib/bridge/serialization.d.ts +7 -0
  93. package/lib/bridge/serialization.d.ts.map +1 -0
  94. package/lib/bridge/serialization.js +27 -0
  95. package/lib/bridge/serialization.js.map +1 -0
  96. package/lib/bridge/serialization.test.d.ts +2 -0
  97. package/lib/bridge/serialization.test.d.ts.map +1 -0
  98. package/lib/bridge/serialization.test.js +131 -0
  99. package/lib/bridge/serialization.test.js.map +1 -0
  100. package/lib/bridge/signOperation.d.ts +9 -0
  101. package/lib/bridge/signOperation.d.ts.map +1 -0
  102. package/lib/bridge/signOperation.js +72 -0
  103. package/lib/bridge/signOperation.js.map +1 -0
  104. package/lib/bridge/signOperation.test.d.ts +2 -0
  105. package/lib/bridge/signOperation.test.d.ts.map +1 -0
  106. package/lib/bridge/signOperation.test.js +76 -0
  107. package/lib/bridge/signOperation.test.js.map +1 -0
  108. package/lib/bridge/synchronisation.d.ts +21 -0
  109. package/lib/bridge/synchronisation.d.ts.map +1 -0
  110. package/lib/bridge/synchronisation.js +65 -0
  111. package/lib/bridge/synchronisation.js.map +1 -0
  112. package/lib/bridge/synchronisation.test.d.ts +2 -0
  113. package/lib/bridge/synchronisation.test.d.ts.map +1 -0
  114. package/lib/bridge/synchronisation.test.js +118 -0
  115. package/lib/bridge/synchronisation.test.js.map +1 -0
  116. package/lib/bridge/transaction.d.ts +15 -0
  117. package/lib/bridge/transaction.d.ts.map +1 -0
  118. package/lib/bridge/transaction.js +55 -0
  119. package/lib/bridge/transaction.js.map +1 -0
  120. package/lib/bridge/transaction.test.d.ts +2 -0
  121. package/lib/bridge/transaction.test.d.ts.map +1 -0
  122. package/lib/bridge/transaction.test.js +65 -0
  123. package/lib/bridge/transaction.test.js.map +1 -0
  124. package/lib/bridge/utils.d.ts +27 -0
  125. package/lib/bridge/utils.d.ts.map +1 -0
  126. package/lib/bridge/utils.js +57 -0
  127. package/lib/bridge/utils.js.map +1 -0
  128. package/lib/config.d.ts +15 -0
  129. package/lib/config.d.ts.map +1 -0
  130. package/lib/config.js +9 -0
  131. package/lib/config.js.map +1 -0
  132. package/lib/index.d.ts +3 -0
  133. package/lib/index.d.ts.map +1 -0
  134. package/lib/index.js +21 -0
  135. package/lib/index.js.map +1 -0
  136. package/lib/logic/broadcast.d.ts +9 -0
  137. package/lib/logic/broadcast.d.ts.map +1 -0
  138. package/lib/logic/broadcast.js +26 -0
  139. package/lib/logic/broadcast.js.map +1 -0
  140. package/lib/logic/craftTransaction.d.ts +17 -0
  141. package/lib/logic/craftTransaction.d.ts.map +1 -0
  142. package/lib/logic/craftTransaction.js +22 -0
  143. package/lib/logic/craftTransaction.js.map +1 -0
  144. package/lib/logic/estimateFees.d.ts +10 -0
  145. package/lib/logic/estimateFees.d.ts.map +1 -0
  146. package/lib/logic/estimateFees.js +20 -0
  147. package/lib/logic/estimateFees.js.map +1 -0
  148. package/lib/logic/index.d.ts +4 -0
  149. package/lib/logic/index.d.ts.map +1 -0
  150. package/lib/logic/index.js +10 -0
  151. package/lib/logic/index.js.map +1 -0
  152. package/lib/network/index.d.ts +18 -0
  153. package/lib/network/index.d.ts.map +1 -0
  154. package/lib/network/index.js +17 -0
  155. package/lib/network/index.js.map +1 -0
  156. package/lib/network/sdk.d.ts +61 -0
  157. package/lib/network/sdk.d.ts.map +1 -0
  158. package/lib/network/sdk.integration.test.d.ts +2 -0
  159. package/lib/network/sdk.integration.test.d.ts.map +1 -0
  160. package/lib/network/sdk.integration.test.js +70 -0
  161. package/lib/network/sdk.integration.test.js.map +1 -0
  162. package/lib/network/sdk.js +205 -0
  163. package/lib/network/sdk.js.map +1 -0
  164. package/lib/network/sdk.test.d.ts +2 -0
  165. package/lib/network/sdk.test.d.ts.map +1 -0
  166. package/lib/network/sdk.test.js +166 -0
  167. package/lib/network/sdk.test.js.map +1 -0
  168. package/lib/signer/getAddress.d.ts +6 -0
  169. package/lib/signer/getAddress.d.ts.map +1 -0
  170. package/lib/signer/getAddress.js +20 -0
  171. package/lib/signer/getAddress.js.map +1 -0
  172. package/lib/signer/getAddress.test.d.ts +2 -0
  173. package/lib/signer/getAddress.test.d.ts.map +1 -0
  174. package/lib/signer/getAddress.test.js +106 -0
  175. package/lib/signer/getAddress.test.js.map +1 -0
  176. package/lib/signer/index.d.ts +6 -0
  177. package/lib/signer/index.d.ts.map +1 -0
  178. package/lib/signer/index.js +11 -0
  179. package/lib/signer/index.js.map +1 -0
  180. package/lib/test/cli.d.ts +16 -0
  181. package/lib/test/cli.d.ts.map +1 -0
  182. package/lib/test/cli.js +16 -0
  183. package/lib/test/cli.js.map +1 -0
  184. package/lib/types/bridge.d.ts +72 -0
  185. package/lib/types/bridge.d.ts.map +1 -0
  186. package/lib/types/bridge.fixture.d.ts +30 -0
  187. package/lib/types/bridge.fixture.d.ts.map +1 -0
  188. package/lib/types/bridge.fixture.js +86 -0
  189. package/lib/types/bridge.fixture.js.map +1 -0
  190. package/lib/types/bridge.js +3 -0
  191. package/lib/types/bridge.js.map +1 -0
  192. package/lib/types/index.d.ts +4 -0
  193. package/lib/types/index.d.ts.map +1 -0
  194. package/lib/types/index.js +20 -0
  195. package/lib/types/index.js.map +1 -0
  196. package/lib/types/model.d.ts +6 -0
  197. package/lib/types/model.d.ts.map +1 -0
  198. package/lib/types/model.js +3 -0
  199. package/lib/types/model.js.map +1 -0
  200. package/lib/types/signer.d.ts +13 -0
  201. package/lib/types/signer.d.ts.map +1 -0
  202. package/lib/types/signer.js +3 -0
  203. package/lib/types/signer.js.map +1 -0
  204. package/lib/utils.d.ts +7 -0
  205. package/lib/utils.d.ts.map +1 -0
  206. package/lib/utils.js +13 -0
  207. package/lib/utils.js.map +1 -0
  208. package/lib-es/api/chain/index.d.ts +16 -0
  209. package/lib-es/api/chain/index.d.ts.map +1 -0
  210. package/lib-es/api/chain/index.js +2 -0
  211. package/lib-es/api/chain/index.js.map +1 -0
  212. package/lib-es/bridge/bridge.integration.test.d.ts +4 -0
  213. package/lib-es/bridge/bridge.integration.test.d.ts.map +1 -0
  214. package/lib-es/bridge/bridge.integration.test.js +130 -0
  215. package/lib-es/bridge/bridge.integration.test.js.map +1 -0
  216. package/lib-es/bridge/broadcast.d.ts +12 -0
  217. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  218. package/lib-es/bridge/broadcast.js +16 -0
  219. package/lib-es/bridge/broadcast.js.map +1 -0
  220. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  221. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  222. package/lib-es/bridge/broadcast.test.js +46 -0
  223. package/lib-es/bridge/broadcast.test.js.map +1 -0
  224. package/lib-es/bridge/buildOptimisticOperation.d.ts +4 -0
  225. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
  226. package/lib-es/bridge/buildOptimisticOperation.js +69 -0
  227. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
  228. package/lib-es/bridge/buildOptimisticOperation.test.d.ts +2 -0
  229. package/lib-es/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  230. package/lib-es/bridge/buildOptimisticOperation.test.js +47 -0
  231. package/lib-es/bridge/buildOptimisticOperation.test.js.map +1 -0
  232. package/lib-es/bridge/buildTransaction.d.ts +9 -0
  233. package/lib-es/bridge/buildTransaction.d.ts.map +1 -0
  234. package/lib-es/bridge/buildTransaction.js +11 -0
  235. package/lib-es/bridge/buildTransaction.js.map +1 -0
  236. package/lib-es/bridge/buildTransaction.test.d.ts +2 -0
  237. package/lib-es/bridge/buildTransaction.test.d.ts.map +1 -0
  238. package/lib-es/bridge/buildTransaction.test.js +15 -0
  239. package/lib-es/bridge/buildTransaction.test.js.map +1 -0
  240. package/lib-es/bridge/createTransaction.d.ts +10 -0
  241. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  242. package/lib-es/bridge/createTransaction.js +20 -0
  243. package/lib-es/bridge/createTransaction.js.map +1 -0
  244. package/lib-es/bridge/estimateMaxSpendable.d.ts +14 -0
  245. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  246. package/lib-es/bridge/estimateMaxSpendable.js +37 -0
  247. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  248. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +2 -0
  249. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  250. package/lib-es/bridge/estimateMaxSpendable.test.js +23 -0
  251. package/lib-es/bridge/estimateMaxSpendable.test.js.map +1 -0
  252. package/lib-es/bridge/formatters.d.ts +10 -0
  253. package/lib-es/bridge/formatters.d.ts.map +1 -0
  254. package/lib-es/bridge/formatters.js +19 -0
  255. package/lib-es/bridge/formatters.js.map +1 -0
  256. package/lib-es/bridge/formatters.test.d.ts +2 -0
  257. package/lib-es/bridge/formatters.test.d.ts.map +1 -0
  258. package/lib-es/bridge/formatters.test.js +16 -0
  259. package/lib-es/bridge/formatters.test.js.map +1 -0
  260. package/lib-es/bridge/getFeesForTransaction.d.ts +15 -0
  261. package/lib-es/bridge/getFeesForTransaction.d.ts.map +1 -0
  262. package/lib-es/bridge/getFeesForTransaction.js +29 -0
  263. package/lib-es/bridge/getFeesForTransaction.js.map +1 -0
  264. package/lib-es/bridge/getFeesForTransaction.test.d.ts +2 -0
  265. package/lib-es/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  266. package/lib-es/bridge/getFeesForTransaction.test.js +30 -0
  267. package/lib-es/bridge/getFeesForTransaction.test.js.map +1 -0
  268. package/lib-es/bridge/getTransactionStatus.d.ts +12 -0
  269. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  270. package/lib-es/bridge/getTransactionStatus.js +55 -0
  271. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  272. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  273. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  274. package/lib-es/bridge/getTransactionStatus.test.js +43 -0
  275. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  276. package/lib-es/bridge/index.d.ts +10 -0
  277. package/lib-es/bridge/index.d.ts.map +1 -0
  278. package/lib-es/bridge/index.js +56 -0
  279. package/lib-es/bridge/index.js.map +1 -0
  280. package/lib-es/bridge/preload.d.ts +11 -0
  281. package/lib-es/bridge/preload.d.ts.map +1 -0
  282. package/lib-es/bridge/preload.js +32 -0
  283. package/lib-es/bridge/preload.js.map +1 -0
  284. package/lib-es/bridge/prepareTransaction.d.ts +13 -0
  285. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  286. package/lib-es/bridge/prepareTransaction.js +36 -0
  287. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  288. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  289. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  290. package/lib-es/bridge/prepareTransaction.test.js +40 -0
  291. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  292. package/lib-es/bridge/serialization.d.ts +7 -0
  293. package/lib-es/bridge/serialization.d.ts.map +1 -0
  294. package/lib-es/bridge/serialization.js +20 -0
  295. package/lib-es/bridge/serialization.js.map +1 -0
  296. package/lib-es/bridge/serialization.test.d.ts +2 -0
  297. package/lib-es/bridge/serialization.test.d.ts.map +1 -0
  298. package/lib-es/bridge/serialization.test.js +126 -0
  299. package/lib-es/bridge/serialization.test.js.map +1 -0
  300. package/lib-es/bridge/signOperation.d.ts +9 -0
  301. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  302. package/lib-es/bridge/signOperation.js +68 -0
  303. package/lib-es/bridge/signOperation.js.map +1 -0
  304. package/lib-es/bridge/signOperation.test.d.ts +2 -0
  305. package/lib-es/bridge/signOperation.test.d.ts.map +1 -0
  306. package/lib-es/bridge/signOperation.test.js +71 -0
  307. package/lib-es/bridge/signOperation.test.js.map +1 -0
  308. package/lib-es/bridge/synchronisation.d.ts +21 -0
  309. package/lib-es/bridge/synchronisation.d.ts.map +1 -0
  310. package/lib-es/bridge/synchronisation.js +61 -0
  311. package/lib-es/bridge/synchronisation.js.map +1 -0
  312. package/lib-es/bridge/synchronisation.test.d.ts +2 -0
  313. package/lib-es/bridge/synchronisation.test.d.ts.map +1 -0
  314. package/lib-es/bridge/synchronisation.test.js +113 -0
  315. package/lib-es/bridge/synchronisation.test.js.map +1 -0
  316. package/lib-es/bridge/transaction.d.ts +15 -0
  317. package/lib-es/bridge/transaction.d.ts.map +1 -0
  318. package/lib-es/bridge/transaction.js +49 -0
  319. package/lib-es/bridge/transaction.js.map +1 -0
  320. package/lib-es/bridge/transaction.test.d.ts +2 -0
  321. package/lib-es/bridge/transaction.test.d.ts.map +1 -0
  322. package/lib-es/bridge/transaction.test.js +63 -0
  323. package/lib-es/bridge/transaction.test.js.map +1 -0
  324. package/lib-es/bridge/utils.d.ts +27 -0
  325. package/lib-es/bridge/utils.d.ts.map +1 -0
  326. package/lib-es/bridge/utils.js +51 -0
  327. package/lib-es/bridge/utils.js.map +1 -0
  328. package/lib-es/config.d.ts +15 -0
  329. package/lib-es/config.d.ts.map +1 -0
  330. package/lib-es/config.js +4 -0
  331. package/lib-es/config.js.map +1 -0
  332. package/lib-es/index.d.ts +3 -0
  333. package/lib-es/index.d.ts.map +1 -0
  334. package/lib-es/index.js +3 -0
  335. package/lib-es/index.js.map +1 -0
  336. package/lib-es/logic/broadcast.d.ts +9 -0
  337. package/lib-es/logic/broadcast.d.ts.map +1 -0
  338. package/lib-es/logic/broadcast.js +19 -0
  339. package/lib-es/logic/broadcast.js.map +1 -0
  340. package/lib-es/logic/craftTransaction.d.ts +17 -0
  341. package/lib-es/logic/craftTransaction.d.ts.map +1 -0
  342. package/lib-es/logic/craftTransaction.js +15 -0
  343. package/lib-es/logic/craftTransaction.js.map +1 -0
  344. package/lib-es/logic/estimateFees.d.ts +10 -0
  345. package/lib-es/logic/estimateFees.d.ts.map +1 -0
  346. package/lib-es/logic/estimateFees.js +13 -0
  347. package/lib-es/logic/estimateFees.js.map +1 -0
  348. package/lib-es/logic/index.d.ts +4 -0
  349. package/lib-es/logic/index.d.ts.map +1 -0
  350. package/lib-es/logic/index.js +4 -0
  351. package/lib-es/logic/index.js.map +1 -0
  352. package/lib-es/network/index.d.ts +18 -0
  353. package/lib-es/network/index.d.ts.map +1 -0
  354. package/lib-es/network/index.js +10 -0
  355. package/lib-es/network/index.js.map +1 -0
  356. package/lib-es/network/sdk.d.ts +61 -0
  357. package/lib-es/network/sdk.d.ts.map +1 -0
  358. package/lib-es/network/sdk.integration.test.d.ts +2 -0
  359. package/lib-es/network/sdk.integration.test.d.ts.map +1 -0
  360. package/lib-es/network/sdk.integration.test.js +65 -0
  361. package/lib-es/network/sdk.integration.test.js.map +1 -0
  362. package/lib-es/network/sdk.js +189 -0
  363. package/lib-es/network/sdk.js.map +1 -0
  364. package/lib-es/network/sdk.test.d.ts +2 -0
  365. package/lib-es/network/sdk.test.d.ts.map +1 -0
  366. package/lib-es/network/sdk.test.js +164 -0
  367. package/lib-es/network/sdk.test.js.map +1 -0
  368. package/lib-es/signer/getAddress.d.ts +6 -0
  369. package/lib-es/signer/getAddress.d.ts.map +1 -0
  370. package/lib-es/signer/getAddress.js +18 -0
  371. package/lib-es/signer/getAddress.js.map +1 -0
  372. package/lib-es/signer/getAddress.test.d.ts +2 -0
  373. package/lib-es/signer/getAddress.test.d.ts.map +1 -0
  374. package/lib-es/signer/getAddress.test.js +101 -0
  375. package/lib-es/signer/getAddress.test.js.map +1 -0
  376. package/lib-es/signer/index.d.ts +6 -0
  377. package/lib-es/signer/index.d.ts.map +1 -0
  378. package/lib-es/signer/index.js +6 -0
  379. package/lib-es/signer/index.js.map +1 -0
  380. package/lib-es/test/cli.d.ts +16 -0
  381. package/lib-es/test/cli.d.ts.map +1 -0
  382. package/lib-es/test/cli.js +13 -0
  383. package/lib-es/test/cli.js.map +1 -0
  384. package/lib-es/types/bridge.d.ts +72 -0
  385. package/lib-es/types/bridge.d.ts.map +1 -0
  386. package/lib-es/types/bridge.fixture.d.ts +30 -0
  387. package/lib-es/types/bridge.fixture.d.ts.map +1 -0
  388. package/lib-es/types/bridge.fixture.js +80 -0
  389. package/lib-es/types/bridge.fixture.js.map +1 -0
  390. package/lib-es/types/bridge.js +2 -0
  391. package/lib-es/types/bridge.js.map +1 -0
  392. package/lib-es/types/index.d.ts +4 -0
  393. package/lib-es/types/index.d.ts.map +1 -0
  394. package/lib-es/types/index.js +4 -0
  395. package/lib-es/types/index.js.map +1 -0
  396. package/lib-es/types/model.d.ts +6 -0
  397. package/lib-es/types/model.d.ts.map +1 -0
  398. package/lib-es/types/model.js +2 -0
  399. package/lib-es/types/model.js.map +1 -0
  400. package/lib-es/types/signer.d.ts +13 -0
  401. package/lib-es/types/signer.d.ts.map +1 -0
  402. package/lib-es/types/signer.js +2 -0
  403. package/lib-es/types/signer.js.map +1 -0
  404. package/lib-es/utils.d.ts +7 -0
  405. package/lib-es/utils.d.ts.map +1 -0
  406. package/lib-es/utils.js +9 -0
  407. package/lib-es/utils.js.map +1 -0
  408. package/package.json +152 -0
  409. package/src/api/chain/index.ts +17 -0
  410. package/src/bridge/bridge.integration.test.ts +140 -0
  411. package/src/bridge/broadcast.test.ts +52 -0
  412. package/src/bridge/broadcast.ts +21 -0
  413. package/src/bridge/buildOptimisticOperation.test.ts +53 -0
  414. package/src/bridge/buildOptimisticOperation.ts +105 -0
  415. package/src/bridge/buildTransaction.test.ts +17 -0
  416. package/src/bridge/buildTransaction.ts +14 -0
  417. package/src/bridge/createTransaction.ts +23 -0
  418. package/src/bridge/estimateMaxSpendable.test.ts +27 -0
  419. package/src/bridge/estimateMaxSpendable.ts +46 -0
  420. package/src/bridge/formatters.test.ts +17 -0
  421. package/src/bridge/formatters.ts +26 -0
  422. package/src/bridge/getFeesForTransaction.test.ts +36 -0
  423. package/src/bridge/getFeesForTransaction.ts +37 -0
  424. package/src/bridge/getTransactionStatus.test.ts +57 -0
  425. package/src/bridge/getTransactionStatus.ts +73 -0
  426. package/src/bridge/index.ts +77 -0
  427. package/src/bridge/preload.ts +46 -0
  428. package/src/bridge/prepareTransaction.test.ts +47 -0
  429. package/src/bridge/prepareTransaction.ts +44 -0
  430. package/src/bridge/serialization.test.ts +135 -0
  431. package/src/bridge/serialization.ts +24 -0
  432. package/src/bridge/signOperation.test.ts +80 -0
  433. package/src/bridge/signOperation.ts +101 -0
  434. package/src/bridge/synchronisation.test.ts +140 -0
  435. package/src/bridge/synchronisation.ts +75 -0
  436. package/src/bridge/transaction.test.ts +73 -0
  437. package/src/bridge/transaction.ts +61 -0
  438. package/src/bridge/utils.ts +69 -0
  439. package/src/config.ts +19 -0
  440. package/src/index.ts +3 -0
  441. package/src/logic/broadcast.ts +19 -0
  442. package/src/logic/craftTransaction.ts +28 -0
  443. package/src/logic/estimateFees.ts +14 -0
  444. package/src/logic/index.ts +3 -0
  445. package/src/network/index.ts +17 -0
  446. package/src/network/sdk.integration.test.ts +75 -0
  447. package/src/network/sdk.test.ts +203 -0
  448. package/src/network/sdk.ts +262 -0
  449. package/src/signer/getAddress.test.ts +119 -0
  450. package/src/signer/getAddress.ts +26 -0
  451. package/src/signer/index.ts +7 -0
  452. package/src/test/cli.ts +21 -0
  453. package/src/types/bridge.fixture.ts +84 -0
  454. package/src/types/bridge.ts +95 -0
  455. package/src/types/index.ts +3 -0
  456. package/src/types/model.ts +7 -0
  457. package/src/types/signer.ts +12 -0
  458. package/src/utils.ts +8 -0
  459. package/tsconfig.json +14 -0
@@ -0,0 +1,21 @@
1
+ import type { AccountBridge } from "@ledgerhq/types-live";
2
+ import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
3
+ import { broadcast as logicBroadcast } from "../logic";
4
+ import { SuiSignedOperation, Transaction } from "../types";
5
+
6
+ /**
7
+ * Broadcast the signed transaction
8
+ * @param {Object} params - The parameters for broadcasting the transaction.
9
+ * @param {Object} params.signedOperation - The signed operation to be broadcasted.
10
+ * @param {Object} params.signedOperation.operation - The operation details.
11
+ * @param {Object} params.signedOperation.rawData - The raw data of the signed operation.
12
+ * @returns {Promise<Object>} The operation with the hash of the transaction.
13
+ */
14
+ export const broadcast: AccountBridge<Transaction>["broadcast"] = async ({ signedOperation }) => {
15
+ const {
16
+ operation,
17
+ rawData: { unsigned, serializedSignature },
18
+ } = signedOperation as unknown as SuiSignedOperation;
19
+ const hash = await logicBroadcast(unsigned, serializedSignature);
20
+ return patchOperationWithHash(operation, hash);
21
+ };
@@ -0,0 +1,53 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
3
+ import { buildOptimisticOperation } from "./buildOptimisticOperation";
4
+ import { SuiAccount, Transaction } from "../types";
5
+
6
+ describe("buildOptimisticOperation", () => {
7
+ it("should build optimistic operation for transfer", () => {
8
+ // GIVEN
9
+ const account: SuiAccount = createFixtureAccount();
10
+ const transaction: Transaction = createFixtureTransaction();
11
+ const fee = new BigNumber(10);
12
+
13
+ // WHEN
14
+ const result = buildOptimisticOperation(account, transaction, fee);
15
+
16
+ // THEN
17
+ expect(result).toEqual({
18
+ id: "js:2:sui:0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0:sui--OUT",
19
+ hash: "",
20
+ type: "OUT",
21
+ value: transaction.amount.plus(fee), // amount + fee
22
+ fee: new BigNumber(10),
23
+ senders: ["0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0"],
24
+ recipients: ["0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24"],
25
+ accountId: "js:2:sui:0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0:sui",
26
+ date: expect.any(Date),
27
+ blockHash: null,
28
+ blockHeight: null,
29
+ extra: {
30
+ transferAmount: new BigNumber(3000000000),
31
+ },
32
+ });
33
+ });
34
+
35
+ it("should calculate correct value for OUT type", () => {
36
+ // GIVEN
37
+ const account: SuiAccount = createFixtureAccount();
38
+ const transaction: Transaction = createFixtureTransaction();
39
+ const amount = new BigNumber(500);
40
+ const fee = new BigNumber(50);
41
+ const tx = {
42
+ ...transaction,
43
+ amount,
44
+ };
45
+
46
+ // WHEN
47
+ const result = buildOptimisticOperation(account, tx, fee);
48
+
49
+ // THEN
50
+ expect(result.value).toEqual(amount.plus(fee));
51
+ expect(result.fee).toEqual(fee);
52
+ });
53
+ });
@@ -0,0 +1,105 @@
1
+ import BigNumber from "bignumber.js";
2
+ import type { Account, OperationType } from "@ledgerhq/types-live";
3
+ import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
4
+ import {
5
+ CommandDescriptor,
6
+ SuiAccount,
7
+ SuiOperation,
8
+ SuiOperationExtra,
9
+ SuiOperationMode,
10
+ Transaction,
11
+ } from "../types";
12
+ import { assertUnreachable } from "./utils";
13
+
14
+ const MODE_TO_TYPE: Record<SuiOperationMode | "default", OperationType> = {
15
+ send: "OUT",
16
+ default: "OUT",
17
+ };
18
+
19
+ const getExtra = (type: string, transaction: Transaction): SuiOperationExtra => {
20
+ const extra: SuiOperationExtra = {};
21
+
22
+ switch (type) {
23
+ case "OUT":
24
+ return { ...extra, transferAmount: new BigNumber(transaction.amount) };
25
+ }
26
+
27
+ return extra;
28
+ };
29
+
30
+ export const buildOptimisticOperation = (
31
+ account: SuiAccount,
32
+ transaction: Transaction,
33
+ fee: BigNumber,
34
+ ): SuiOperation => {
35
+ const commandDescriptor: CommandDescriptor = {
36
+ command: {
37
+ kind: "transfer" as const,
38
+ sender: account.freshAddress,
39
+ recipient: transaction.recipient,
40
+ amount: transaction.amount.toNumber(),
41
+ },
42
+ fee: fee.toNumber(),
43
+ warnings: {},
44
+ errors: {},
45
+ };
46
+
47
+ const optimisticOperation = buildOptimisticOperationForCommand(
48
+ account,
49
+ transaction,
50
+ commandDescriptor,
51
+ );
52
+
53
+ return optimisticOperation;
54
+ };
55
+
56
+ function buildOptimisticOperationForCommand(
57
+ account: Account,
58
+ transaction: Transaction,
59
+ commandDescriptor: CommandDescriptor,
60
+ ): SuiOperation {
61
+ const { command } = commandDescriptor;
62
+ switch (command.kind) {
63
+ case "transfer":
64
+ return optimisticOpForTransfer(account, transaction, commandDescriptor);
65
+ default:
66
+ // @ts-expect-error Seem like a bug in TS, remove once more commands are added
67
+ return assertUnreachable(command);
68
+ }
69
+ }
70
+
71
+ function optimisticOpForTransfer(
72
+ account: Account,
73
+ transaction: Transaction,
74
+ commandDescriptor: CommandDescriptor,
75
+ ): SuiOperation {
76
+ const type = MODE_TO_TYPE.default;
77
+ const value =
78
+ type === "OUT"
79
+ ? new BigNumber(transaction.amount).plus(commandDescriptor.fee)
80
+ : new BigNumber(commandDescriptor.fee);
81
+ const extra = getExtra(type, transaction);
82
+
83
+ const commons = optimisticOpcommons(commandDescriptor);
84
+ return {
85
+ ...commons,
86
+ id: encodeOperationId(account.id, "", type),
87
+ type,
88
+ value,
89
+ senders: [account.freshAddress],
90
+ recipients: [transaction.recipient].filter(Boolean),
91
+ accountId: account.id,
92
+ date: new Date(),
93
+ extra,
94
+ };
95
+ }
96
+
97
+ function optimisticOpcommons(commandDescriptor: CommandDescriptor) {
98
+ return {
99
+ hash: "",
100
+ fee: new BigNumber(commandDescriptor.fee),
101
+ blockHash: null,
102
+ blockHeight: null,
103
+ extra: {},
104
+ };
105
+ }
@@ -0,0 +1,17 @@
1
+ import { buildTransaction } from "./buildTransaction";
2
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
3
+
4
+ describe("buildTransaction", () => {
5
+ it("returns unsigned tx bytes for given tx", async () => {
6
+ // GIVEN
7
+ const account = createFixtureAccount();
8
+ const transaction = createFixtureTransaction();
9
+
10
+ // WHEN
11
+ const result = await buildTransaction(account, transaction);
12
+
13
+ // THEN
14
+ expect(result).not.toBeNull();
15
+ expect(result.unsigned).toBeInstanceOf(Uint8Array);
16
+ });
17
+ });
@@ -0,0 +1,14 @@
1
+ import pick from "lodash/pick";
2
+ import type { SuiAccount, Transaction } from "../types";
3
+ import { craftTransaction, type CreateExtrinsicArg } from "../logic";
4
+
5
+ export const extractExtrinsicArg = (transaction: Transaction): CreateExtrinsicArg =>
6
+ pick(transaction, ["mode", "amount", "recipient", "useAllAmount"]);
7
+
8
+ /**
9
+ * @param {Account} account
10
+ * @param {Transaction} transaction
11
+ */
12
+ export const buildTransaction = async (account: SuiAccount, transaction: Transaction) => {
13
+ return craftTransaction(account.freshAddress, extractExtrinsicArg(transaction));
14
+ };
@@ -0,0 +1,23 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import type { Transaction } from "../types";
3
+ import { AccountBridge } from "@ledgerhq/types-live";
4
+
5
+ /**
6
+ * Create an empty transaction
7
+ *
8
+ * @returns {Transaction}
9
+ */
10
+ export const createTransaction: AccountBridge<Transaction>["createTransaction"] = () => {
11
+ const transaction: Transaction = {
12
+ family: "sui" as const,
13
+ mode: "send",
14
+ amount: new BigNumber(0),
15
+ recipient: "",
16
+ useAllAmount: false,
17
+ fees: null,
18
+ errors: {},
19
+ };
20
+ return transaction;
21
+ };
22
+
23
+ export default createTransaction;
@@ -0,0 +1,27 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { estimateMaxSpendable } from "./estimateMaxSpendable";
3
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
4
+ import { SuiAccount, Transaction } from "../types";
5
+
6
+ const mockEstimateFees = jest.fn();
7
+ jest.mock("../logic", () => ({
8
+ estimateFees: () => mockEstimateFees(),
9
+ }));
10
+
11
+ describe("estimateMaxSpendable", () => {
12
+ it("should return the correct spendable amount when fees are deducted", async () => {
13
+ // GIVEN
14
+ const balance = new BigNumber(100);
15
+ const account: SuiAccount = createFixtureAccount({ spendableBalance: balance });
16
+ const transaction: Transaction = createFixtureTransaction();
17
+ const fees = new BigNumber(10);
18
+ mockEstimateFees.mockResolvedValue(fees);
19
+
20
+ // WHEN
21
+ const result = await estimateMaxSpendable({ account, transaction });
22
+
23
+ // THEN
24
+ expect(mockEstimateFees).toHaveBeenCalledTimes(1);
25
+ expect(result).toEqual(balance.minus(fees));
26
+ });
27
+ });
@@ -0,0 +1,46 @@
1
+ import type { AccountBridge } from "@ledgerhq/types-live";
2
+ import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
3
+ import type { SuiAccount, Transaction } from "../types";
4
+ import getFeesForTransaction from "./getFeesForTransaction";
5
+ import createTransaction from "./createTransaction";
6
+ import { BigNumber } from "bignumber.js";
7
+
8
+ /**
9
+ * Returns the maximum possible amount for transaction
10
+ * @typedef {Object} EstimateMaxSpendableParams
11
+ * @property {SuiAccount} account - The account from which to estimate the maximum spendable amount.
12
+ * @property {SuiAccount} [parentAccount] - The parent account, if applicable.
13
+ * @property {Transaction} transaction - The transaction details for which to estimate the maximum spendable amount.
14
+ *
15
+ * @returns {Promise<BigNumber>} The estimated maximum spendable amount.
16
+ */
17
+ export const estimateMaxSpendable: AccountBridge<Transaction>["estimateMaxSpendable"] = async ({
18
+ account,
19
+ parentAccount,
20
+ transaction,
21
+ }) => {
22
+ try {
23
+ const mainAccount = getMainAccount(account, parentAccount) as SuiAccount;
24
+
25
+ const estimatedTransaction = {
26
+ ...createTransaction(account),
27
+ ...transaction,
28
+ useAllAmount: true,
29
+ };
30
+ const fees = await getFeesForTransaction({
31
+ account: mainAccount,
32
+ transaction: estimatedTransaction,
33
+ });
34
+
35
+ let spendableBalance = mainAccount.spendableBalance;
36
+ if (fees) {
37
+ spendableBalance = BigNumber.max(spendableBalance.minus(fees), 0);
38
+ }
39
+
40
+ return spendableBalance;
41
+ } catch (e) {
42
+ return new BigNumber(0);
43
+ }
44
+ };
45
+
46
+ export default estimateMaxSpendable;
@@ -0,0 +1,17 @@
1
+ import { fromOperationExtraRaw, toOperationExtraRaw } from "./formatters";
2
+
3
+ describe("formatters", () => {
4
+ describe("fromOperationExtraRaw", () => {
5
+ it("should return an empty object when no extraRaw is provided", () => {
6
+ const result = fromOperationExtraRaw(undefined);
7
+ expect(result).toEqual({});
8
+ });
9
+ });
10
+
11
+ describe("toOperationExtraRaw", () => {
12
+ it("should return an empty object when no extra is provided", () => {
13
+ const result = toOperationExtraRaw(undefined);
14
+ expect(result).toEqual({});
15
+ });
16
+ });
17
+ });
@@ -0,0 +1,26 @@
1
+ import { OperationExtra, OperationExtraRaw } from "@ledgerhq/types-live";
2
+ import type { SuiOperationExtra, SuiOperationExtraRaw } from "../types";
3
+
4
+ export function fromOperationExtraRaw(extraRaw: OperationExtraRaw) {
5
+ if (extraRaw) {
6
+ // reserved for future use
7
+ }
8
+
9
+ const extra: SuiOperationExtra = {};
10
+
11
+ return extra;
12
+ }
13
+
14
+ export function toOperationExtraRaw(extra: OperationExtra) {
15
+ if (extra) {
16
+ // reserved for future use
17
+ }
18
+ const extraRaw: SuiOperationExtraRaw = {};
19
+
20
+ return extraRaw;
21
+ }
22
+
23
+ export default {
24
+ fromOperationExtraRaw,
25
+ toOperationExtraRaw,
26
+ };
@@ -0,0 +1,36 @@
1
+ import getEstimatedFees from "./getFeesForTransaction";
2
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
3
+
4
+ const estimateFees = jest.fn();
5
+
6
+ jest.mock("../logic", () => {
7
+ return {
8
+ estimateFees: (arg: any) => estimateFees(arg),
9
+ };
10
+ });
11
+
12
+ describe("getEstimatedFees", () => {
13
+ const transaction = createFixtureTransaction();
14
+
15
+ beforeEach(() => {
16
+ estimateFees.mockClear();
17
+ });
18
+
19
+ it("returns fees estimation by sui sdk", async () => {
20
+ // GIVEN
21
+ const account = createFixtureAccount();
22
+ const gasBudget = BigInt("3976000");
23
+ estimateFees.mockResolvedValue(gasBudget);
24
+
25
+ // WHEN
26
+ const result = await getEstimatedFees({
27
+ account,
28
+ transaction,
29
+ });
30
+
31
+ // THEN
32
+ expect(estimateFees).toHaveBeenCalledTimes(1);
33
+ expect(estimateFees.mock.lastCall).not.toBeNull();
34
+ expect(result.toString()).toEqual(gasBudget.toString());
35
+ });
36
+ });
@@ -0,0 +1,37 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets";
3
+ import type { SuiAccount, Transaction } from "../types";
4
+ import { calculateAmount } from "./utils";
5
+ import { estimateFees } from "../logic";
6
+
7
+ /**
8
+ * Fetch the transaction fees for a transaction
9
+ *
10
+ * @param {Object} params
11
+ * @param {SuiAccount} params.account - The account to estimate fees for
12
+ * @param {Transaction} params.transaction - The transaction to estimate fees for
13
+ * @returns {Promise<BigNumber>} The estimated fees
14
+ */
15
+ export default async function getEstimatedFees({
16
+ account,
17
+ transaction,
18
+ }: {
19
+ account: SuiAccount;
20
+ transaction: Transaction;
21
+ }): Promise<BigNumber> {
22
+ const t = {
23
+ ...transaction,
24
+ recipient: getAbandonSeedAddress(account.currency.id),
25
+ // Always use a fake recipient to estimate fees
26
+ amount: calculateAmount({
27
+ account,
28
+ transaction: {
29
+ ...transaction,
30
+ fees: new BigNumber(transaction.fees || 0),
31
+ },
32
+ }), // Remove fees if present since we are fetching fees
33
+ };
34
+
35
+ const fees = await estimateFees(account.freshAddress, t);
36
+ return new BigNumber(fees.toString());
37
+ }
@@ -0,0 +1,57 @@
1
+ import {
2
+ NotEnoughBalance,
3
+ RecipientRequired,
4
+ InvalidAddress,
5
+ InvalidAddressBecauseDestinationIsAlsoSource,
6
+ AmountRequired,
7
+ FeeNotLoaded,
8
+ } from "@ledgerhq/errors";
9
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
10
+ import getTransactionStatus from "./getTransactionStatus";
11
+
12
+ const account = createFixtureAccount();
13
+
14
+ describe("getTransactionStatus", () => {
15
+ it("should return errors if recipient empty", async () => {
16
+ const transaction = createFixtureTransaction({ recipient: null });
17
+ const result = await getTransactionStatus(account, transaction);
18
+
19
+ const expected = { recipient: new RecipientRequired() };
20
+ expect(result.errors).toEqual(expected);
21
+ });
22
+ it("should return errors if recipient is invalid sui adress", async () => {
23
+ const transaction = createFixtureTransaction({ recipient: "notValidSuiAddress" });
24
+ const result = await getTransactionStatus(account, transaction);
25
+
26
+ const expected = { recipient: new InvalidAddress() };
27
+ expect(result.errors).toEqual(expected);
28
+ });
29
+ it("should return errors if recipient equals to sender", async () => {
30
+ const transaction = createFixtureTransaction({ recipient: account.freshAddress });
31
+ const result = await getTransactionStatus(account, transaction);
32
+
33
+ const expected = { recipient: new InvalidAddressBecauseDestinationIsAlsoSource() };
34
+ expect(result.errors).toEqual(expected);
35
+ });
36
+ it("should return errors if amount not provided", async () => {
37
+ const transaction = createFixtureTransaction({ amount: null });
38
+ const result = await getTransactionStatus(account, transaction);
39
+
40
+ const expected = { amount: new AmountRequired() };
41
+ expect(result.errors).toEqual(expected);
42
+ });
43
+ it("should return errors if amount exceeds balance", async () => {
44
+ const transaction = createFixtureTransaction({ amount: account.balance.plus(1) });
45
+ const result = await getTransactionStatus(account, transaction);
46
+
47
+ const expected = { amount: new NotEnoughBalance() };
48
+ expect(result.errors).toEqual(expected);
49
+ });
50
+ it("should return errors if amount exceeds balance", async () => {
51
+ const transaction = createFixtureTransaction({ fees: null });
52
+ const result = await getTransactionStatus(account, transaction);
53
+
54
+ const expected = { fees: new FeeNotLoaded() };
55
+ expect(result.errors).toEqual(expected);
56
+ });
57
+ });
@@ -0,0 +1,73 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import {
3
+ NotEnoughBalance,
4
+ RecipientRequired,
5
+ InvalidAddress,
6
+ InvalidAddressBecauseDestinationIsAlsoSource,
7
+ AmountRequired,
8
+ FeeNotLoaded,
9
+ FeeTooHigh,
10
+ } from "@ledgerhq/errors";
11
+ import { AccountBridge } from "@ledgerhq/types-live";
12
+ import type { SuiAccount, Transaction, TransactionStatus } from "../types";
13
+ import { isValidSuiAddress } from "@mysten/sui/utils";
14
+ import { ensureAddressFormat } from "../utils";
15
+
16
+ /**
17
+ * Get the status of a transaction.
18
+ * @function getTransactionStatus
19
+ * @param {SuiAccount} account - The account associated with the transaction.
20
+ * @param {Transaction} transaction - The transaction object containing details such as amount, fees, and recipient.
21
+ * @returns {Promise<Object>} A promise that resolves to an object containing the transaction status, including errors, warnings, estimated fees, amount, and total spent.
22
+ */
23
+ export const getTransactionStatus: AccountBridge<
24
+ Transaction,
25
+ SuiAccount,
26
+ TransactionStatus
27
+ >["getTransactionStatus"] = async (account, transaction) => {
28
+ const errors: Record<string, Error> = {};
29
+ const warnings: Record<string, Error> = {};
30
+ const amount = new BigNumber(transaction?.amount || 0);
31
+ const estimatedFees = new BigNumber(transaction?.fees || 0);
32
+ const totalSpent = amount.plus(estimatedFees);
33
+
34
+ if (amount.lte(0)) {
35
+ errors.amount = new AmountRequired();
36
+ } else if (estimatedFees.times(10).gt(amount)) {
37
+ warnings.feeTooHigh = new FeeTooHigh();
38
+ }
39
+
40
+ if (transaction) {
41
+ if (!transaction.recipient) {
42
+ errors.recipient = new RecipientRequired();
43
+ } else if (!isValidSuiAddress(transaction.recipient)) {
44
+ errors.recipient = new InvalidAddress(undefined, {
45
+ currencyName: account.currency.name,
46
+ });
47
+ }
48
+
49
+ if (ensureAddressFormat(account.freshAddress) === ensureAddressFormat(transaction.recipient)) {
50
+ errors.recipient = new InvalidAddressBecauseDestinationIsAlsoSource();
51
+ }
52
+
53
+ if (totalSpent.eq(0) && transaction.useAllAmount) {
54
+ errors.amount = new NotEnoughBalance();
55
+ }
56
+ if (totalSpent.gt(account.balance)) {
57
+ errors.amount = new NotEnoughBalance();
58
+ }
59
+ if (!transaction.fees) {
60
+ errors.fees = new FeeNotLoaded();
61
+ }
62
+ }
63
+
64
+ return {
65
+ errors,
66
+ warnings,
67
+ estimatedFees,
68
+ amount: amount.lt(0) ? new BigNumber(0) : amount,
69
+ totalSpent,
70
+ };
71
+ };
72
+
73
+ export default getTransactionStatus;
@@ -0,0 +1,77 @@
1
+ import getAddressWrapper from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
2
+ import {
3
+ getSerializedAddressParameters,
4
+ updateTransaction,
5
+ makeAccountBridgeReceive,
6
+ makeScanAccounts,
7
+ } from "@ledgerhq/coin-framework/bridge/jsHelpers";
8
+ import { CoinConfig } from "@ledgerhq/coin-framework/config";
9
+ import { SignerContext } from "@ledgerhq/coin-framework/signer";
10
+ import type { AccountBridge, CurrencyBridge } from "@ledgerhq/types-live";
11
+ import suiConfig, { type SuiCoinConfig } from "../config";
12
+ import signerGetAddress from "../signer";
13
+ import { SuiAccount, SuiSigner, TransactionStatus, type Transaction } from "../types";
14
+ import { broadcast } from "./broadcast";
15
+ import { createTransaction } from "./createTransaction";
16
+ import { estimateMaxSpendable } from "./estimateMaxSpendable";
17
+ import { getTransactionStatus } from "./getTransactionStatus";
18
+ import { getPreloadStrategy, hydrate, preload } from "./preload";
19
+ import { prepareTransaction } from "./prepareTransaction";
20
+ import { assignFromAccountRaw, assignToAccountRaw } from "./serialization";
21
+ import { fromOperationExtraRaw, toOperationExtraRaw } from "./formatters";
22
+ import { buildSignOperation } from "./signOperation";
23
+ import { getAccountShape, sync } from "./synchronisation";
24
+
25
+ function buildCurrencyBridge(signerContext: SignerContext<SuiSigner>): CurrencyBridge {
26
+ const getAddress = signerGetAddress(signerContext);
27
+
28
+ const scanAccounts = makeScanAccounts({
29
+ getAccountShape,
30
+ getAddressFn: getAddressWrapper(getAddress),
31
+ });
32
+
33
+ return {
34
+ getPreloadStrategy,
35
+ preload,
36
+ hydrate,
37
+ scanAccounts,
38
+ };
39
+ }
40
+
41
+ function buildAccountBridge(
42
+ signerContext: SignerContext<SuiSigner>,
43
+ ): AccountBridge<Transaction, SuiAccount, TransactionStatus> {
44
+ const getAddress = signerGetAddress(signerContext);
45
+
46
+ const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
47
+ const signOperation = buildSignOperation(signerContext);
48
+
49
+ return {
50
+ estimateMaxSpendable,
51
+ createTransaction,
52
+ updateTransaction,
53
+ getTransactionStatus,
54
+ prepareTransaction,
55
+ sync,
56
+ receive,
57
+ signOperation,
58
+ broadcast,
59
+ assignFromAccountRaw,
60
+ assignToAccountRaw,
61
+ fromOperationExtraRaw,
62
+ toOperationExtraRaw,
63
+ getSerializedAddressParameters,
64
+ };
65
+ }
66
+
67
+ export function createBridges(
68
+ signerContext: SignerContext<SuiSigner>,
69
+ coinConfig: CoinConfig<SuiCoinConfig>,
70
+ ) {
71
+ suiConfig.setCoinConfig(coinConfig);
72
+
73
+ return {
74
+ currencyBridge: buildCurrencyBridge(signerContext),
75
+ accountBridge: buildAccountBridge(signerContext),
76
+ };
77
+ }