@ledgerhq/coin-sui 0.16.0-nightly.1 → 0.16.0-nightly.11

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 (301) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +101 -0
  3. package/lib/bridge/preload.d.ts +3 -1
  4. package/lib/bridge/preload.d.ts.map +1 -1
  5. package/lib/bridge/preload.js +76 -5
  6. package/lib/bridge/preload.js.map +1 -1
  7. package/lib/logic/estimateFees.d.ts +4 -1
  8. package/lib/logic/estimateFees.d.ts.map +1 -1
  9. package/lib/logic/estimateFees.js +2 -1
  10. package/lib/logic/estimateFees.js.map +1 -1
  11. package/lib/network/sdk.d.ts.map +1 -1
  12. package/lib/network/sdk.js +18 -13
  13. package/lib/network/sdk.js.map +1 -1
  14. package/lib/types/bridge.d.ts +12 -0
  15. package/lib/types/bridge.d.ts.map +1 -1
  16. package/lib-es/bridge/preload.d.ts +3 -1
  17. package/lib-es/bridge/preload.d.ts.map +1 -1
  18. package/lib-es/bridge/preload.js +50 -4
  19. package/lib-es/bridge/preload.js.map +1 -1
  20. package/lib-es/logic/estimateFees.d.ts +4 -1
  21. package/lib-es/logic/estimateFees.d.ts.map +1 -1
  22. package/lib-es/logic/estimateFees.js +2 -1
  23. package/lib-es/logic/estimateFees.js.map +1 -1
  24. package/lib-es/network/sdk.d.ts.map +1 -1
  25. package/lib-es/network/sdk.js +18 -13
  26. package/lib-es/network/sdk.js.map +1 -1
  27. package/lib-es/types/bridge.d.ts +12 -0
  28. package/lib-es/types/bridge.d.ts.map +1 -1
  29. package/package.json +9 -8
  30. package/src/api/index.integration.test.ts +44 -7
  31. package/src/bridge/preload.test.ts +3 -3
  32. package/src/bridge/preload.ts +68 -6
  33. package/src/logic/estimateFees.test.ts +22 -16
  34. package/src/logic/estimateFees.ts +6 -1
  35. package/src/network/sdk.test.ts +44 -4
  36. package/src/network/sdk.ts +21 -13
  37. package/src/types/bridge.ts +13 -1
  38. package/lib/api/index.integration.test.d.ts +0 -2
  39. package/lib/api/index.integration.test.d.ts.map +0 -1
  40. package/lib/api/index.integration.test.js +0 -173
  41. package/lib/api/index.integration.test.js.map +0 -1
  42. package/lib/api/index.test.d.ts +0 -2
  43. package/lib/api/index.test.d.ts.map +0 -1
  44. package/lib/api/index.test.js +0 -173
  45. package/lib/api/index.test.js.map +0 -1
  46. package/lib/bridge/bridge.integration.test.d.ts +0 -4
  47. package/lib/bridge/bridge.integration.test.d.ts.map +0 -1
  48. package/lib/bridge/bridge.integration.test.js +0 -145
  49. package/lib/bridge/bridge.integration.test.js.map +0 -1
  50. package/lib/bridge/broadcast.test.d.ts +0 -2
  51. package/lib/bridge/broadcast.test.d.ts.map +0 -1
  52. package/lib/bridge/broadcast.test.js +0 -48
  53. package/lib/bridge/broadcast.test.js.map +0 -1
  54. package/lib/bridge/buildOptimisticOperation.test.d.ts +0 -2
  55. package/lib/bridge/buildOptimisticOperation.test.d.ts.map +0 -1
  56. package/lib/bridge/buildOptimisticOperation.test.js +0 -52
  57. package/lib/bridge/buildOptimisticOperation.test.js.map +0 -1
  58. package/lib/bridge/buildTransaction.integration.test.d.ts +0 -2
  59. package/lib/bridge/buildTransaction.integration.test.d.ts.map +0 -1
  60. package/lib/bridge/buildTransaction.integration.test.js +0 -72
  61. package/lib/bridge/buildTransaction.integration.test.js.map +0 -1
  62. package/lib/bridge/buildTransaction.test.d.ts +0 -2
  63. package/lib/bridge/buildTransaction.test.d.ts.map +0 -1
  64. package/lib/bridge/buildTransaction.test.js +0 -231
  65. package/lib/bridge/buildTransaction.test.js.map +0 -1
  66. package/lib/bridge/estimateMaxSpendable.test.d.ts +0 -2
  67. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +0 -1
  68. package/lib/bridge/estimateMaxSpendable.test.js +0 -52
  69. package/lib/bridge/estimateMaxSpendable.test.js.map +0 -1
  70. package/lib/bridge/formatters.test.d.ts +0 -2
  71. package/lib/bridge/formatters.test.d.ts.map +0 -1
  72. package/lib/bridge/formatters.test.js +0 -18
  73. package/lib/bridge/formatters.test.js.map +0 -1
  74. package/lib/bridge/getFeesForTransaction.test.d.ts +0 -2
  75. package/lib/bridge/getFeesForTransaction.test.d.ts.map +0 -1
  76. package/lib/bridge/getFeesForTransaction.test.js +0 -35
  77. package/lib/bridge/getFeesForTransaction.test.js.map +0 -1
  78. package/lib/bridge/getTransactionStatus.test.d.ts +0 -2
  79. package/lib/bridge/getTransactionStatus.test.d.ts.map +0 -1
  80. package/lib/bridge/getTransactionStatus.test.js +0 -69
  81. package/lib/bridge/getTransactionStatus.test.js.map +0 -1
  82. package/lib/bridge/index.test.d.ts +0 -2
  83. package/lib/bridge/index.test.d.ts.map +0 -1
  84. package/lib/bridge/index.test.js +0 -265
  85. package/lib/bridge/index.test.js.map +0 -1
  86. package/lib/bridge/preload.test.d.ts +0 -2
  87. package/lib/bridge/preload.test.d.ts.map +0 -1
  88. package/lib/bridge/preload.test.js +0 -52
  89. package/lib/bridge/preload.test.js.map +0 -1
  90. package/lib/bridge/prepareTransaction.test.d.ts +0 -2
  91. package/lib/bridge/prepareTransaction.test.d.ts.map +0 -1
  92. package/lib/bridge/prepareTransaction.test.js +0 -97
  93. package/lib/bridge/prepareTransaction.test.js.map +0 -1
  94. package/lib/bridge/serialization.test.d.ts +0 -2
  95. package/lib/bridge/serialization.test.d.ts.map +0 -1
  96. package/lib/bridge/serialization.test.js +0 -131
  97. package/lib/bridge/serialization.test.js.map +0 -1
  98. package/lib/bridge/signOperation.integration.test.d.ts +0 -2
  99. package/lib/bridge/signOperation.integration.test.d.ts.map +0 -1
  100. package/lib/bridge/signOperation.integration.test.js +0 -80
  101. package/lib/bridge/signOperation.integration.test.js.map +0 -1
  102. package/lib/bridge/signOperation.test.d.ts +0 -2
  103. package/lib/bridge/signOperation.test.d.ts.map +0 -1
  104. package/lib/bridge/signOperation.test.js +0 -445
  105. package/lib/bridge/signOperation.test.js.map +0 -1
  106. package/lib/bridge/synchronisation.test.d.ts +0 -2
  107. package/lib/bridge/synchronisation.test.d.ts.map +0 -1
  108. package/lib/bridge/synchronisation.test.js +0 -505
  109. package/lib/bridge/synchronisation.test.js.map +0 -1
  110. package/lib/bridge/transaction.test.d.ts +0 -2
  111. package/lib/bridge/transaction.test.d.ts.map +0 -1
  112. package/lib/bridge/transaction.test.js +0 -68
  113. package/lib/bridge/transaction.test.js.map +0 -1
  114. package/lib/logic/broadcast.test.d.ts +0 -2
  115. package/lib/logic/broadcast.test.d.ts.map +0 -1
  116. package/lib/logic/broadcast.test.js +0 -62
  117. package/lib/logic/broadcast.test.js.map +0 -1
  118. package/lib/logic/combine.test.d.ts +0 -2
  119. package/lib/logic/combine.test.d.ts.map +0 -1
  120. package/lib/logic/combine.test.js +0 -37
  121. package/lib/logic/combine.test.js.map +0 -1
  122. package/lib/logic/craftTransaction.integration.test.d.ts +0 -2
  123. package/lib/logic/craftTransaction.integration.test.d.ts.map +0 -1
  124. package/lib/logic/craftTransaction.integration.test.js +0 -98
  125. package/lib/logic/craftTransaction.integration.test.js.map +0 -1
  126. package/lib/logic/craftTransaction.test.d.ts +0 -2
  127. package/lib/logic/craftTransaction.test.d.ts.map +0 -1
  128. package/lib/logic/craftTransaction.test.js +0 -127
  129. package/lib/logic/craftTransaction.test.js.map +0 -1
  130. package/lib/logic/estimateFees.integration.test.d.ts +0 -2
  131. package/lib/logic/estimateFees.integration.test.d.ts.map +0 -1
  132. package/lib/logic/estimateFees.integration.test.js +0 -82
  133. package/lib/logic/estimateFees.integration.test.js.map +0 -1
  134. package/lib/logic/estimateFees.test.d.ts +0 -2
  135. package/lib/logic/estimateFees.test.d.ts.map +0 -1
  136. package/lib/logic/estimateFees.test.js +0 -70
  137. package/lib/logic/estimateFees.test.js.map +0 -1
  138. package/lib/logic/getBalance.integration.test.d.ts +0 -2
  139. package/lib/logic/getBalance.integration.test.d.ts.map +0 -1
  140. package/lib/logic/getBalance.integration.test.js +0 -56
  141. package/lib/logic/getBalance.integration.test.js.map +0 -1
  142. package/lib/logic/getBalance.test.d.ts +0 -2
  143. package/lib/logic/getBalance.test.d.ts.map +0 -1
  144. package/lib/logic/getBalance.test.js +0 -64
  145. package/lib/logic/getBalance.test.js.map +0 -1
  146. package/lib/logic/lastBlock.test.d.ts +0 -2
  147. package/lib/logic/lastBlock.test.d.ts.map +0 -1
  148. package/lib/logic/lastBlock.test.js +0 -27
  149. package/lib/logic/lastBlock.test.js.map +0 -1
  150. package/lib/logic/listOperations.test.d.ts +0 -2
  151. package/lib/logic/listOperations.test.d.ts.map +0 -1
  152. package/lib/logic/listOperations.test.js +0 -79
  153. package/lib/logic/listOperations.test.js.map +0 -1
  154. package/lib/network/sdk.integration.test.d.ts +0 -2
  155. package/lib/network/sdk.integration.test.d.ts.map +0 -1
  156. package/lib/network/sdk.integration.test.js +0 -215
  157. package/lib/network/sdk.integration.test.js.map +0 -1
  158. package/lib/network/sdk.test.d.ts +0 -2
  159. package/lib/network/sdk.test.d.ts.map +0 -1
  160. package/lib/network/sdk.test.js +0 -1784
  161. package/lib/network/sdk.test.js.map +0 -1
  162. package/lib/signer/getAddress.test.d.ts +0 -2
  163. package/lib/signer/getAddress.test.d.ts.map +0 -1
  164. package/lib/signer/getAddress.test.js +0 -106
  165. package/lib/signer/getAddress.test.js.map +0 -1
  166. package/lib/test/config.test.d.ts +0 -2
  167. package/lib/test/config.test.d.ts.map +0 -1
  168. package/lib/test/config.test.js +0 -44
  169. package/lib/test/config.test.js.map +0 -1
  170. package/lib-es/api/index.integration.test.d.ts +0 -2
  171. package/lib-es/api/index.integration.test.d.ts.map +0 -1
  172. package/lib-es/api/index.integration.test.js +0 -171
  173. package/lib-es/api/index.integration.test.js.map +0 -1
  174. package/lib-es/api/index.test.d.ts +0 -2
  175. package/lib-es/api/index.test.d.ts.map +0 -1
  176. package/lib-es/api/index.test.js +0 -148
  177. package/lib-es/api/index.test.js.map +0 -1
  178. package/lib-es/bridge/bridge.integration.test.d.ts +0 -4
  179. package/lib-es/bridge/bridge.integration.test.d.ts.map +0 -1
  180. package/lib-es/bridge/bridge.integration.test.js +0 -139
  181. package/lib-es/bridge/bridge.integration.test.js.map +0 -1
  182. package/lib-es/bridge/broadcast.test.d.ts +0 -2
  183. package/lib-es/bridge/broadcast.test.d.ts.map +0 -1
  184. package/lib-es/bridge/broadcast.test.js +0 -46
  185. package/lib-es/bridge/broadcast.test.js.map +0 -1
  186. package/lib-es/bridge/buildOptimisticOperation.test.d.ts +0 -2
  187. package/lib-es/bridge/buildOptimisticOperation.test.d.ts.map +0 -1
  188. package/lib-es/bridge/buildOptimisticOperation.test.js +0 -47
  189. package/lib-es/bridge/buildOptimisticOperation.test.js.map +0 -1
  190. package/lib-es/bridge/buildTransaction.integration.test.d.ts +0 -2
  191. package/lib-es/bridge/buildTransaction.integration.test.d.ts.map +0 -1
  192. package/lib-es/bridge/buildTransaction.integration.test.js +0 -67
  193. package/lib-es/bridge/buildTransaction.integration.test.js.map +0 -1
  194. package/lib-es/bridge/buildTransaction.test.d.ts +0 -2
  195. package/lib-es/bridge/buildTransaction.test.d.ts.map +0 -1
  196. package/lib-es/bridge/buildTransaction.test.js +0 -229
  197. package/lib-es/bridge/buildTransaction.test.js.map +0 -1
  198. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +0 -2
  199. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +0 -1
  200. package/lib-es/bridge/estimateMaxSpendable.test.js +0 -50
  201. package/lib-es/bridge/estimateMaxSpendable.test.js.map +0 -1
  202. package/lib-es/bridge/formatters.test.d.ts +0 -2
  203. package/lib-es/bridge/formatters.test.d.ts.map +0 -1
  204. package/lib-es/bridge/formatters.test.js +0 -16
  205. package/lib-es/bridge/formatters.test.js.map +0 -1
  206. package/lib-es/bridge/getFeesForTransaction.test.d.ts +0 -2
  207. package/lib-es/bridge/getFeesForTransaction.test.d.ts.map +0 -1
  208. package/lib-es/bridge/getFeesForTransaction.test.js +0 -30
  209. package/lib-es/bridge/getFeesForTransaction.test.js.map +0 -1
  210. package/lib-es/bridge/getTransactionStatus.test.d.ts +0 -2
  211. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +0 -1
  212. package/lib-es/bridge/getTransactionStatus.test.js +0 -64
  213. package/lib-es/bridge/getTransactionStatus.test.js.map +0 -1
  214. package/lib-es/bridge/index.test.d.ts +0 -2
  215. package/lib-es/bridge/index.test.d.ts.map +0 -1
  216. package/lib-es/bridge/index.test.js +0 -260
  217. package/lib-es/bridge/index.test.js.map +0 -1
  218. package/lib-es/bridge/preload.test.d.ts +0 -2
  219. package/lib-es/bridge/preload.test.d.ts.map +0 -1
  220. package/lib-es/bridge/preload.test.js +0 -50
  221. package/lib-es/bridge/preload.test.js.map +0 -1
  222. package/lib-es/bridge/prepareTransaction.test.d.ts +0 -2
  223. package/lib-es/bridge/prepareTransaction.test.d.ts.map +0 -1
  224. package/lib-es/bridge/prepareTransaction.test.js +0 -92
  225. package/lib-es/bridge/prepareTransaction.test.js.map +0 -1
  226. package/lib-es/bridge/serialization.test.d.ts +0 -2
  227. package/lib-es/bridge/serialization.test.d.ts.map +0 -1
  228. package/lib-es/bridge/serialization.test.js +0 -126
  229. package/lib-es/bridge/serialization.test.js.map +0 -1
  230. package/lib-es/bridge/signOperation.integration.test.d.ts +0 -2
  231. package/lib-es/bridge/signOperation.integration.test.d.ts.map +0 -1
  232. package/lib-es/bridge/signOperation.integration.test.js +0 -75
  233. package/lib-es/bridge/signOperation.integration.test.js.map +0 -1
  234. package/lib-es/bridge/signOperation.test.d.ts +0 -2
  235. package/lib-es/bridge/signOperation.test.d.ts.map +0 -1
  236. package/lib-es/bridge/signOperation.test.js +0 -440
  237. package/lib-es/bridge/signOperation.test.js.map +0 -1
  238. package/lib-es/bridge/synchronisation.test.d.ts +0 -2
  239. package/lib-es/bridge/synchronisation.test.d.ts.map +0 -1
  240. package/lib-es/bridge/synchronisation.test.js +0 -477
  241. package/lib-es/bridge/synchronisation.test.js.map +0 -1
  242. package/lib-es/bridge/transaction.test.d.ts +0 -2
  243. package/lib-es/bridge/transaction.test.d.ts.map +0 -1
  244. package/lib-es/bridge/transaction.test.js +0 -66
  245. package/lib-es/bridge/transaction.test.js.map +0 -1
  246. package/lib-es/logic/broadcast.test.d.ts +0 -2
  247. package/lib-es/logic/broadcast.test.d.ts.map +0 -1
  248. package/lib-es/logic/broadcast.test.js +0 -57
  249. package/lib-es/logic/broadcast.test.js.map +0 -1
  250. package/lib-es/logic/combine.test.d.ts +0 -2
  251. package/lib-es/logic/combine.test.d.ts.map +0 -1
  252. package/lib-es/logic/combine.test.js +0 -35
  253. package/lib-es/logic/combine.test.js.map +0 -1
  254. package/lib-es/logic/craftTransaction.integration.test.d.ts +0 -2
  255. package/lib-es/logic/craftTransaction.integration.test.d.ts.map +0 -1
  256. package/lib-es/logic/craftTransaction.integration.test.js +0 -93
  257. package/lib-es/logic/craftTransaction.integration.test.js.map +0 -1
  258. package/lib-es/logic/craftTransaction.test.d.ts +0 -2
  259. package/lib-es/logic/craftTransaction.test.d.ts.map +0 -1
  260. package/lib-es/logic/craftTransaction.test.js +0 -122
  261. package/lib-es/logic/craftTransaction.test.js.map +0 -1
  262. package/lib-es/logic/estimateFees.integration.test.d.ts +0 -2
  263. package/lib-es/logic/estimateFees.integration.test.d.ts.map +0 -1
  264. package/lib-es/logic/estimateFees.integration.test.js +0 -77
  265. package/lib-es/logic/estimateFees.integration.test.js.map +0 -1
  266. package/lib-es/logic/estimateFees.test.d.ts +0 -2
  267. package/lib-es/logic/estimateFees.test.d.ts.map +0 -1
  268. package/lib-es/logic/estimateFees.test.js +0 -65
  269. package/lib-es/logic/estimateFees.test.js.map +0 -1
  270. package/lib-es/logic/getBalance.integration.test.d.ts +0 -2
  271. package/lib-es/logic/getBalance.integration.test.d.ts.map +0 -1
  272. package/lib-es/logic/getBalance.integration.test.js +0 -51
  273. package/lib-es/logic/getBalance.integration.test.js.map +0 -1
  274. package/lib-es/logic/getBalance.test.d.ts +0 -2
  275. package/lib-es/logic/getBalance.test.d.ts.map +0 -1
  276. package/lib-es/logic/getBalance.test.js +0 -62
  277. package/lib-es/logic/getBalance.test.js.map +0 -1
  278. package/lib-es/logic/lastBlock.test.d.ts +0 -2
  279. package/lib-es/logic/lastBlock.test.d.ts.map +0 -1
  280. package/lib-es/logic/lastBlock.test.js +0 -25
  281. package/lib-es/logic/lastBlock.test.js.map +0 -1
  282. package/lib-es/logic/listOperations.test.d.ts +0 -2
  283. package/lib-es/logic/listOperations.test.d.ts.map +0 -1
  284. package/lib-es/logic/listOperations.test.js +0 -77
  285. package/lib-es/logic/listOperations.test.js.map +0 -1
  286. package/lib-es/network/sdk.integration.test.d.ts +0 -2
  287. package/lib-es/network/sdk.integration.test.d.ts.map +0 -1
  288. package/lib-es/network/sdk.integration.test.js +0 -210
  289. package/lib-es/network/sdk.integration.test.js.map +0 -1
  290. package/lib-es/network/sdk.test.d.ts +0 -2
  291. package/lib-es/network/sdk.test.d.ts.map +0 -1
  292. package/lib-es/network/sdk.test.js +0 -1756
  293. package/lib-es/network/sdk.test.js.map +0 -1
  294. package/lib-es/signer/getAddress.test.d.ts +0 -2
  295. package/lib-es/signer/getAddress.test.d.ts.map +0 -1
  296. package/lib-es/signer/getAddress.test.js +0 -101
  297. package/lib-es/signer/getAddress.test.js.map +0 -1
  298. package/lib-es/test/config.test.d.ts +0 -2
  299. package/lib-es/test/config.test.d.ts.map +0 -1
  300. package/lib-es/test/config.test.js +0 -39
  301. package/lib-es/test/config.test.js.map +0 -1
@@ -33,14 +33,17 @@ describe("estimateFees", () => {
33
33
 
34
34
  const result = await estimateFees(transactionIntent);
35
35
 
36
- expect(suiAPI.paymentInfo).toHaveBeenCalledWith(transactionIntent.sender, {
37
- recipient: transactionIntent.recipient,
38
- amount: BigNumber(transactionIntent.amount.toString()),
39
- coinType: "0x2::sui::SUI",
40
- errors: {},
41
- family: "sui",
42
- mode: "send",
43
- });
36
+ expect(suiAPI.paymentInfo).toHaveBeenCalledWith(
37
+ transactionIntent.sender,
38
+ expect.objectContaining({
39
+ recipient: transactionIntent.recipient,
40
+ amount: BigNumber(transactionIntent.amount.toString()),
41
+ coinType: "0x2::sui::SUI",
42
+ errors: {},
43
+ family: "sui",
44
+ mode: "send",
45
+ }),
46
+ );
44
47
  expect(result).toBe(BigInt(mockGasBudget));
45
48
  });
46
49
 
@@ -61,14 +64,17 @@ describe("estimateFees", () => {
61
64
 
62
65
  const result = await estimateFees(transactionIntent);
63
66
 
64
- expect(suiAPI.paymentInfo).toHaveBeenCalledWith(transactionIntent.sender, {
65
- recipient: transactionIntent.recipient,
66
- amount: BigNumber("0"),
67
- coinType: "0x2::sui::SUI",
68
- errors: {},
69
- family: "sui",
70
- mode: "send",
71
- });
67
+ expect(suiAPI.paymentInfo).toHaveBeenCalledWith(
68
+ transactionIntent.sender,
69
+ expect.objectContaining({
70
+ recipient: transactionIntent.recipient,
71
+ amount: BigNumber("0"),
72
+ coinType: "0x2::sui::SUI",
73
+ errors: {},
74
+ family: "sui",
75
+ mode: "send",
76
+ }),
77
+ );
72
78
  expect(result).toBe(BigInt(mockGasBudget));
73
79
  });
74
80
  });
@@ -9,7 +9,11 @@ export async function estimateFees({
9
9
  sender,
10
10
  asset,
11
11
  type,
12
- }: TransactionIntent): Promise<bigint> {
12
+ ...extra
13
+ }: TransactionIntent & {
14
+ useAllAmount?: boolean;
15
+ stakedSuiId?: string;
16
+ }): Promise<bigint> {
13
17
  let coinType = DEFAULT_COIN_TYPE;
14
18
  if (asset.type === "token" && asset.assetReference) {
15
19
  coinType = asset.assetReference;
@@ -35,6 +39,7 @@ export async function estimateFees({
35
39
  amount: BigNumber(amount.toString()),
36
40
  errors: {},
37
41
  coinType,
42
+ ...extra,
38
43
  });
39
44
  return BigInt(gasBudget);
40
45
  }
@@ -3,8 +3,12 @@ import coinConfig from "../config";
3
3
 
4
4
  import { BigNumber } from "bignumber.js";
5
5
  import { SuiClient } from "@mysten/sui/client";
6
- import type { TransactionBlockData, SuiTransactionBlockResponse } from "@mysten/sui/client";
7
- import assert from "assert";
6
+ import type {
7
+ TransactionBlockData,
8
+ SuiTransactionBlockResponse,
9
+ SuiTransactionBlockKind,
10
+ } from "@mysten/sui/client";
11
+ import assert, { fail } from "assert";
8
12
 
9
13
  // Mock SUI client for tests
10
14
  jest.mock("@mysten/sui/client", () => {
@@ -609,17 +613,48 @@ describe("SDK Functions", () => {
609
613
 
610
614
  describe("Staking Operations", () => {
611
615
  describe("Operation Type Detection", () => {
616
+ const address = "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24";
612
617
  test("getOperationType should return DELEGATE for staking transaction", () => {
613
- const address = "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24";
614
618
  expect(sdk.getOperationType(address, mockStakingTx(address, "-1000000000"))).toBe("DELEGATE");
615
619
  });
616
620
 
617
621
  test("getOperationType should return UNDELEGATE for unstaking transaction", () => {
618
- const address = "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24";
619
622
  expect(sdk.getOperationType(address, mockUnstakingTx(address, "1000000000"))).toBe(
620
623
  "UNDELEGATE",
621
624
  );
622
625
  });
626
+
627
+ function prependOtherMoveCall(block: SuiTransactionBlockKind) {
628
+ if (block?.kind === "ProgrammableTransaction") {
629
+ block.transactions.unshift({
630
+ MoveCall: {
631
+ function: "other_function",
632
+ module: "module",
633
+ package: "package",
634
+ },
635
+ });
636
+ }
637
+ }
638
+
639
+ test("getOperationType should return UNDELEGATE when it's not the first MoveCall ", () => {
640
+ const tx = mockUnstakingTx(address, "1000");
641
+ if (tx.transaction) {
642
+ prependOtherMoveCall(tx.transaction.data.transaction);
643
+ expect(sdk.getOperationType(address, tx)).toBe("UNDELEGATE");
644
+ } else {
645
+ fail("can't prepare fixture");
646
+ }
647
+ });
648
+
649
+ test("getOperationType should return DELEGATE when it's not the first MoveCall ", () => {
650
+ const tx = mockStakingTx(address, "-1000");
651
+ if (tx.transaction) {
652
+ prependOtherMoveCall(tx.transaction.data.transaction);
653
+ expect(sdk.getOperationType(address, tx)).toBe("DELEGATE");
654
+ } else {
655
+ fail("can't prepare fixture");
656
+ }
657
+ });
623
658
  });
624
659
 
625
660
  describe("Operation Amount Calculation", () => {
@@ -1748,6 +1783,7 @@ describe("filterOperations", () => {
1748
1783
  {
1749
1784
  type: "transfer",
1750
1785
  address: "0x65449f57946938c84c5127",
1786
+ peer: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
1751
1787
  amount: -10000000000n,
1752
1788
  asset: { type: "native" },
1753
1789
  },
@@ -1818,6 +1854,7 @@ describe("filterOperations", () => {
1818
1854
  {
1819
1855
  type: "transfer",
1820
1856
  address: "0x65449f57946938c84c5127",
1857
+ peer: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
1821
1858
  amount: 8824n,
1822
1859
  asset: {
1823
1860
  type: "token",
@@ -1909,18 +1946,21 @@ describe("filterOperations", () => {
1909
1946
  operations: [
1910
1947
  {
1911
1948
  address: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
1949
+ peer: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
1912
1950
  amount: -10000000000n,
1913
1951
  asset: { type: "native" },
1914
1952
  type: "transfer",
1915
1953
  },
1916
1954
  {
1917
1955
  address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
1956
+ peer: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
1918
1957
  amount: 9998990120n,
1919
1958
  asset: { type: "native" },
1920
1959
  type: "transfer",
1921
1960
  },
1922
1961
  {
1923
1962
  address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
1963
+ peer: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
1924
1964
  amount: 500000n,
1925
1965
  asset: { type: "token", assetReference: "0x123::test::TOKEN" },
1926
1966
  type: "transfer",
@@ -115,24 +115,26 @@ type ProgrammableTransaction = {
115
115
  transactions: SuiTransaction[];
116
116
  };
117
117
 
118
- function isMoveCallWithFunction(
118
+ function hasMoveCallWithFunction(
119
119
  functionName: string,
120
120
  block?: SuiTransactionBlockKind,
121
121
  ): block is ProgrammableTransaction {
122
122
  if (block?.kind === "ProgrammableTransaction") {
123
- const move = block.transactions.find(item => "MoveCall" in item) as any;
124
- return move?.MoveCall.function === functionName;
123
+ const move = block.transactions.find(
124
+ item => "MoveCall" in item && item["MoveCall"].function === functionName,
125
+ ) as any;
126
+ return Boolean(move);
125
127
  } else {
126
128
  return false;
127
129
  }
128
130
  }
129
131
 
130
132
  function isStaking(block?: SuiTransactionBlockKind): block is ProgrammableTransaction {
131
- return isMoveCallWithFunction("request_add_stake", block);
133
+ return hasMoveCallWithFunction("request_add_stake", block);
132
134
  }
133
135
 
134
136
  function isUnstaking(block?: SuiTransactionBlockKind): block is ProgrammableTransaction {
135
- return isMoveCallWithFunction("request_withdraw_stake", block);
137
+ return hasMoveCallWithFunction("request_withdraw_stake", block);
136
138
  }
137
139
 
138
140
  /**
@@ -463,17 +465,23 @@ export function toBlockOperation(
463
465
  if (typeof change.owner === "string" || !("AddressOwner" in change.owner)) return [];
464
466
  const address = change.owner.AddressOwner;
465
467
  const operationType = getOperationType(address, transaction);
468
+
469
+ function transferOp(peer: string | undefined): BlockOperation {
470
+ const op: BlockOperation = {
471
+ type: "transfer",
472
+ address: address,
473
+ asset: toSuiAsset(change.coinType),
474
+ amount: BigInt(change.amount),
475
+ };
476
+ if (peer) op.peer = peer;
477
+ return op;
478
+ }
479
+
466
480
  switch (operationType) {
467
481
  case "IN":
482
+ return [transferOp(getOperationSenders(transaction.transaction?.data).at(0))];
468
483
  case "OUT":
469
- return [
470
- {
471
- type: "transfer",
472
- address: change.owner.AddressOwner,
473
- asset: toSuiAsset(change.coinType),
474
- amount: BigInt(change.amount),
475
- },
476
- ];
484
+ return [transferOp(getOperationRecipients(transaction.transaction?.data).at(0))];
477
485
  case "DELEGATE":
478
486
  case "UNDELEGATE":
479
487
  return [
@@ -72,12 +72,24 @@ export type TransactionRaw = TransactionCommonRaw & {
72
72
  */
73
73
  export type SuiValidator = SuiValidatorSummary & { apy: number };
74
74
 
75
+ /**
76
+ * Sui token data from CAL
77
+ */
78
+ export type SuiToken = [
79
+ string, // parent currency id
80
+ string, // name
81
+ string, // ticker
82
+ string, // contract address
83
+ number, // precision
84
+ string, // ledgerSignature
85
+ ];
86
+
75
87
  /**
76
88
  * Sui currency data that will be preloaded.
77
89
  * You can for instance add a list of validators for Proof-of-Stake blockchains,
78
90
  * or any volatile data that could not be set as constants in the code (staking progress, fee estimation variables, etc.)
79
91
  */
80
- export type SuiPreloadData = { validators: SuiValidator[] };
92
+ export type SuiPreloadData = { validators: SuiValidator[]; tokens: SuiToken[] };
81
93
 
82
94
  export type SuiAccount = Account & {
83
95
  // On some blockchain, an account can have resources (gained, delegated, ...)
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.integration.test.d.ts","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":""}
@@ -1,173 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const _1 = require(".");
4
- const live_env_1 = require("@ledgerhq/live-env");
5
- describe("Sui Api", () => {
6
- let module;
7
- const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
8
- const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
9
- beforeAll(() => {
10
- module = (0, _1.createApi)({
11
- node: {
12
- url: (0, live_env_1.getEnv)("API_SUI_NODE_PROXY"),
13
- },
14
- });
15
- });
16
- describe("estimateFees", () => {
17
- it("returns a default value", async () => {
18
- // Given
19
- const amount = BigInt(100_000);
20
- // When
21
- const result = await module.estimateFees({
22
- intentType: "transaction",
23
- asset: { type: "native" },
24
- type: "send",
25
- sender: SENDER,
26
- recipient: RECIPIENT,
27
- amount: amount,
28
- });
29
- // Then
30
- expect(result.value).toBeGreaterThan(0);
31
- });
32
- });
33
- describe("listOperations, testing cursor logic", () => {
34
- // this account has a lot of operations
35
- const binance = "0x935029ca5219502a47ac9b69f556ccf6e2198b5e7815cf50f68846f723739cbd";
36
- async function testListOperations(order) {
37
- const baseOpts = { minHeight: 0 };
38
- if (order) {
39
- baseOpts.order = order;
40
- }
41
- const [operations1, token1] = await module.listOperations(binance, baseOpts);
42
- expect(operations1.length).toBeGreaterThan(2);
43
- expect(token1).toBeTruthy();
44
- const [operations2, _] = await module.listOperations(binance, {
45
- ...baseOpts,
46
- lastPagingToken: token1,
47
- });
48
- expect(operations2.length).toBeGreaterThan(2);
49
- expect(operations2[0].tx.hash).not.toBe(operations1[0].tx.hash);
50
- // check that none of the operations in operations2 are in operations1
51
- expect(operations2.every(op2 => !operations1.some(op1 => op1.tx.hash === op2.tx.hash))).toBeTruthy();
52
- }
53
- it("should fetch operations successfully in desc order", async () => {
54
- await testListOperations("desc");
55
- });
56
- it("should fetch operations successfully in asc order", async () => {
57
- await testListOperations("asc");
58
- });
59
- it("should fetch operations successfully in default order", async () => {
60
- await testListOperations(undefined);
61
- });
62
- it("shouldn't return cursor on last page", async () => {
63
- const [operations, cursor] = await module.listOperations("0xd8908c165dee785924e7421a0fd0418a19d5daeec395fd505a92a0fd3117e428", { minHeight: 0, order: "asc" });
64
- // assume it has not a lot of operations
65
- // at time of writing, it has only 2 operations
66
- expect(operations.length).toBeLessThan(10);
67
- expect(operations.length).toBeGreaterThan(0);
68
- expect(cursor).toBe("");
69
- });
70
- });
71
- describe("listOperations", () => {
72
- let txs;
73
- beforeAll(async () => {
74
- [txs] = await module.listOperations(SENDER, { minHeight: 0, order: "asc" });
75
- });
76
- it("returns a list regarding address parameter", async () => {
77
- expect(txs.length).toBeGreaterThanOrEqual(10);
78
- txs.forEach(operation => {
79
- const isSenderOrReceipt = operation.senders.includes(SENDER) || operation.recipients.includes(SENDER);
80
- expect(isSenderOrReceipt).toBeTruthy();
81
- });
82
- });
83
- it("returns all operations", async () => {
84
- expect(txs.length).toBeGreaterThanOrEqual(10);
85
- const checkSet = new Set(txs.map(elt => elt.tx.hash));
86
- expect(checkSet.size).toBeLessThanOrEqual(txs.length);
87
- });
88
- it("at least operation should be IN", async () => {
89
- expect(txs.length).toBeGreaterThanOrEqual(10);
90
- expect(txs.some(t => t.type === "IN")).toBeTruthy();
91
- });
92
- it("at least operation should be OUT", async () => {
93
- expect(txs.length).toBeGreaterThanOrEqual(10);
94
- expect(txs.some(t => t.type === "OUT")).toBeTruthy();
95
- });
96
- it("uses the minHeight to filter", async () => {
97
- const minHeightTxs = await module.listOperations(SENDER, {
98
- minHeight: 154925948,
99
- order: "asc",
100
- });
101
- expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
102
- });
103
- it("returns block height as a number", async () => {
104
- expect(txs.every(t => typeof t.tx.block.height === "number")).toBeTruthy();
105
- });
106
- it("should fail when address is invalid", async () => {
107
- // capture exception with jest
108
- await expect(module.listOperations("0xABCDEF0000000000000000000000000000000001", {
109
- minHeight: 0,
110
- order: "asc",
111
- })).rejects.toThrow("Invalid params");
112
- });
113
- });
114
- describe("getBalance", () => {
115
- it("returns a list regarding address parameter", async () => {
116
- // When
117
- const [acc] = await module.getBalance(SENDER);
118
- // Then
119
- expect(acc.value).toBeGreaterThan(0);
120
- });
121
- });
122
- describe("getLastBlock", () => {
123
- it("returns the last block", async () => {
124
- // When
125
- const result = await module.lastBlock();
126
- // Then
127
- expect(result.hash).toBeDefined();
128
- expect(result.height).toBeDefined();
129
- expect(result.time).toBeInstanceOf(Date);
130
- });
131
- });
132
- describe("getBlockInfo", () => {
133
- test("getBlockInfo should get block info by id or sequence number", async () => {
134
- const block = await module.getBlockInfo(164167623);
135
- expect(block.height).toEqual(164167623);
136
- expect(block.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
137
- expect(block.time).toEqual(new Date(1751696298663));
138
- expect(block.parent?.height).toEqual(164167622);
139
- expect(block.parent?.hash).toEqual("6VKtVnpxstb968SzSrgYJ7zy5LXgFB6PnNHSJsT8Wr4E");
140
- });
141
- });
142
- describe("getBlock", () => {
143
- test("getBlock should get block by id or sequence number", async () => {
144
- const block = await module.getBlock(164167623);
145
- expect(block.info.height).toEqual(164167623);
146
- expect(block.info.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
147
- expect(block.info.time).toEqual(new Date(1751696298663));
148
- expect(block.info.parent?.height).toEqual(164167622);
149
- expect(block.info.parent?.hash).toEqual("6VKtVnpxstb968SzSrgYJ7zy5LXgFB6PnNHSJsT8Wr4E");
150
- expect(block.transactions.length).toEqual(19);
151
- });
152
- });
153
- describe("getStakes", () => {
154
- test("Account 0xea438b6ce07762ea61e04af4d405dfcf197d5f77d30765f365f75460380f3cce", async () => {
155
- const stakes = await module.getStakes("0xea438b6ce07762ea61e04af4d405dfcf197d5f77d30765f365f75460380f3cce");
156
- expect(stakes.items.length).toBeGreaterThan(0);
157
- stakes.items.forEach(stake => {
158
- expect(stake.uid).toMatch(/0x[0-9a-z]+/);
159
- expect(stake.address).toMatch(/0x[0-9a-z]+/);
160
- expect(stake.delegate).toMatch(/0x[0-9a-z]+/);
161
- expect(stake.state).toMatch(/(activating|active|inactive)/);
162
- expect(stake.asset).toEqual({ type: "native" });
163
- expect(stake.amount).toBeGreaterThan(0);
164
- expect(stake.amountDeposited).toBeGreaterThan(0);
165
- expect(stake.amountRewarded).toBeGreaterThanOrEqual(0);
166
- // @ts-expect-error properties are defined
167
- expect(stake.amount).toEqual(stake.amountDeposited + stake.amountRewarded);
168
- expect(stake.details).toBeDefined();
169
- });
170
- });
171
- });
172
- });
173
- //# sourceMappingURL=index.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":""}
@@ -1,173 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const index_1 = require("./index");
27
- const logic = __importStar(require("../logic"));
28
- jest.mock("../logic");
29
- jest.mock("../config", () => ({
30
- __esModule: true,
31
- default: {
32
- setCoinConfig: jest.fn(),
33
- getCoinConfig: jest.fn(),
34
- },
35
- }));
36
- const mockConfig = {
37
- node: { url: "http://localhost:1234" },
38
- status: { type: "active" },
39
- };
40
- describe("api/index", () => {
41
- let api;
42
- beforeEach(() => {
43
- jest.clearAllMocks();
44
- api = (0, index_1.createApi)(mockConfig);
45
- });
46
- it("should set coin config and return API object", () => {
47
- expect(typeof api).toBe("object");
48
- expect(Object.keys(api)).toEqual(expect.arrayContaining([
49
- "broadcast",
50
- "combine",
51
- "craftTransaction",
52
- "estimateFees",
53
- "getBalance",
54
- "lastBlock",
55
- "listOperations",
56
- ]));
57
- });
58
- it("should call broadcast from logic", async () => {
59
- const mockBroadcast = jest.spyOn(logic, "broadcast").mockResolvedValue("broadcasted");
60
- const result = await api.broadcast("tx");
61
- expect(mockBroadcast).toHaveBeenCalledWith("tx");
62
- expect(result).toBe("broadcasted");
63
- });
64
- it("should call combine from logic", async () => {
65
- const mockCombine = jest.spyOn(logic, "combine").mockReturnValue("combined-tx");
66
- const arg1 = "txstring";
67
- const arg2 = "sigstring";
68
- const result = api.combine(arg1, arg2);
69
- expect(mockCombine).toHaveBeenCalledWith(arg1, arg2);
70
- expect(result).toBe("combined-tx");
71
- });
72
- it("should call craftTransaction via craft wrapper and return hex string", async () => {
73
- const unsigned = Buffer.from("unsignedTx");
74
- jest.spyOn(logic, "craftTransaction").mockResolvedValue({ unsigned });
75
- const txIntent = { foo: "bar" };
76
- const { transaction: result } = await api.craftTransaction(txIntent);
77
- expect(result).toBe(unsigned.toString("hex"));
78
- expect(logic.craftTransaction).toHaveBeenCalledWith(txIntent, true);
79
- });
80
- it("should call estimateFees via estimate wrapper and return FeeEstimation", async () => {
81
- jest.spyOn(logic, "estimateFees").mockResolvedValue(123n);
82
- const txIntent = { foo: "bar" };
83
- const result = await api.estimateFees(txIntent);
84
- expect(result).toEqual({ value: 123n });
85
- expect(logic.estimateFees).toHaveBeenCalledWith(txIntent);
86
- });
87
- it("should call getBalance from logic", async () => {
88
- const mockGetBalance = jest
89
- .spyOn(logic, "getBalance")
90
- .mockResolvedValue([{ value: 42n, asset: { type: "native" } }]);
91
- const result = await api.getBalance("address");
92
- expect(mockGetBalance).toHaveBeenCalledWith("address");
93
- expect(result).toEqual([{ value: 42n, asset: { type: "native" } }]);
94
- });
95
- it("should call lastBlock from logic", async () => {
96
- const mockLastBlock = jest
97
- .spyOn(logic, "lastBlock")
98
- .mockResolvedValue({ hash: "h", height: 1, time: new Date() });
99
- const result = await api.lastBlock();
100
- expect(mockLastBlock).toHaveBeenCalled();
101
- expect(result).toHaveProperty("hash");
102
- expect(result).toHaveProperty("height");
103
- expect(result).toHaveProperty("time");
104
- });
105
- it("should call listOperations from logic", async () => {
106
- const minimalOperation = {
107
- id: "op1",
108
- type: "IN",
109
- senders: ["sender1"],
110
- recipients: ["recipient1"],
111
- value: 1n,
112
- asset: { type: "native" },
113
- tx: {
114
- hash: "hash1",
115
- block: { height: 1 },
116
- fees: 1n,
117
- date: new Date(),
118
- },
119
- };
120
- const mockListOperations = jest
121
- .spyOn(logic, "listOperations")
122
- .mockResolvedValue([[minimalOperation], ""]); // Return empty string for cursor
123
- const result = await api.listOperations("address", { minHeight: 0, order: "asc" });
124
- expect(mockListOperations).toHaveBeenCalledWith("address", { minHeight: 0, order: "asc" });
125
- expect(result).toEqual([[minimalOperation], ""]);
126
- });
127
- it("should call getStakes from logic", async () => {
128
- const value = {
129
- items: [
130
- {
131
- uid: "stake-uid",
132
- address: "stake-address",
133
- delegate: "stake-delegate",
134
- state: "activating",
135
- asset: { type: "native" },
136
- amount: 3n,
137
- amountDeposited: 1n,
138
- amountRewarded: 2n,
139
- details: { foo: "bar" },
140
- },
141
- ],
142
- };
143
- const mockGetStakes = jest.spyOn(logic, "getStakes").mockResolvedValue(value);
144
- const result = await api.getStakes("address");
145
- expect(mockGetStakes).toHaveBeenCalledWith("address");
146
- expect(result).toEqual(value);
147
- });
148
- it("should call getRewards from logic", async () => {
149
- const value = {
150
- items: [
151
- {
152
- stake: "stake-uid",
153
- asset: { type: "native" },
154
- amount: 3n,
155
- receivedAt: new Date(1337),
156
- },
157
- ],
158
- };
159
- const mockGetRewards = jest.spyOn(logic, "getRewards").mockResolvedValue(value);
160
- const result = await api.getRewards("address");
161
- expect(mockGetRewards).toHaveBeenCalledWith("address");
162
- expect(result).toEqual(value);
163
- });
164
- it("should throw if craftTransaction throws", async () => {
165
- jest.spyOn(logic, "craftTransaction").mockRejectedValue(new Error("fail"));
166
- await expect(api.craftTransaction({})).rejects.toThrow("fail");
167
- });
168
- it("should throw if estimateFees throws", async () => {
169
- jest.spyOn(logic, "estimateFees").mockRejectedValue(new Error("fail"));
170
- await expect(api.estimateFees({})).rejects.toThrow("fail");
171
- });
172
- });
173
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":"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"}