@ledgerhq/coin-sui 0.16.0-nightly.8 → 0.16.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 (276) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +32 -69
  3. package/lib/api/index.integration.test.d.ts +2 -0
  4. package/lib/api/index.integration.test.d.ts.map +1 -0
  5. package/lib/api/index.integration.test.js +173 -0
  6. package/lib/api/index.integration.test.js.map +1 -0
  7. package/lib/api/index.test.d.ts +2 -0
  8. package/lib/api/index.test.d.ts.map +1 -0
  9. package/lib/api/index.test.js +173 -0
  10. package/lib/api/index.test.js.map +1 -0
  11. package/lib/bridge/bridge.integration.test.d.ts +4 -0
  12. package/lib/bridge/bridge.integration.test.d.ts.map +1 -0
  13. package/lib/bridge/bridge.integration.test.js +145 -0
  14. package/lib/bridge/bridge.integration.test.js.map +1 -0
  15. package/lib/bridge/broadcast.test.d.ts +2 -0
  16. package/lib/bridge/broadcast.test.d.ts.map +1 -0
  17. package/lib/bridge/broadcast.test.js +48 -0
  18. package/lib/bridge/broadcast.test.js.map +1 -0
  19. package/lib/bridge/buildOptimisticOperation.test.d.ts +2 -0
  20. package/lib/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  21. package/lib/bridge/buildOptimisticOperation.test.js +52 -0
  22. package/lib/bridge/buildOptimisticOperation.test.js.map +1 -0
  23. package/lib/bridge/buildTransaction.integration.test.d.ts +2 -0
  24. package/lib/bridge/buildTransaction.integration.test.d.ts.map +1 -0
  25. package/lib/bridge/buildTransaction.integration.test.js +72 -0
  26. package/lib/bridge/buildTransaction.integration.test.js.map +1 -0
  27. package/lib/bridge/buildTransaction.test.d.ts +2 -0
  28. package/lib/bridge/buildTransaction.test.d.ts.map +1 -0
  29. package/lib/bridge/buildTransaction.test.js +231 -0
  30. package/lib/bridge/buildTransaction.test.js.map +1 -0
  31. package/lib/bridge/estimateMaxSpendable.test.d.ts +2 -0
  32. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  33. package/lib/bridge/estimateMaxSpendable.test.js +52 -0
  34. package/lib/bridge/estimateMaxSpendable.test.js.map +1 -0
  35. package/lib/bridge/formatters.test.d.ts +2 -0
  36. package/lib/bridge/formatters.test.d.ts.map +1 -0
  37. package/lib/bridge/formatters.test.js +18 -0
  38. package/lib/bridge/formatters.test.js.map +1 -0
  39. package/lib/bridge/getFeesForTransaction.test.d.ts +2 -0
  40. package/lib/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  41. package/lib/bridge/getFeesForTransaction.test.js +35 -0
  42. package/lib/bridge/getFeesForTransaction.test.js.map +1 -0
  43. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  44. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  45. package/lib/bridge/getTransactionStatus.test.js +69 -0
  46. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  47. package/lib/bridge/index.test.d.ts +2 -0
  48. package/lib/bridge/index.test.d.ts.map +1 -0
  49. package/lib/bridge/index.test.js +265 -0
  50. package/lib/bridge/index.test.js.map +1 -0
  51. package/lib/bridge/preload.test.d.ts +2 -0
  52. package/lib/bridge/preload.test.d.ts.map +1 -0
  53. package/lib/bridge/preload.test.js +52 -0
  54. package/lib/bridge/preload.test.js.map +1 -0
  55. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  56. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  57. package/lib/bridge/prepareTransaction.test.js +97 -0
  58. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  59. package/lib/bridge/serialization.test.d.ts +2 -0
  60. package/lib/bridge/serialization.test.d.ts.map +1 -0
  61. package/lib/bridge/serialization.test.js +131 -0
  62. package/lib/bridge/serialization.test.js.map +1 -0
  63. package/lib/bridge/signOperation.integration.test.d.ts +2 -0
  64. package/lib/bridge/signOperation.integration.test.d.ts.map +1 -0
  65. package/lib/bridge/signOperation.integration.test.js +80 -0
  66. package/lib/bridge/signOperation.integration.test.js.map +1 -0
  67. package/lib/bridge/signOperation.test.d.ts +2 -0
  68. package/lib/bridge/signOperation.test.d.ts.map +1 -0
  69. package/lib/bridge/signOperation.test.js +445 -0
  70. package/lib/bridge/signOperation.test.js.map +1 -0
  71. package/lib/bridge/synchronisation.test.d.ts +2 -0
  72. package/lib/bridge/synchronisation.test.d.ts.map +1 -0
  73. package/lib/bridge/synchronisation.test.js +505 -0
  74. package/lib/bridge/synchronisation.test.js.map +1 -0
  75. package/lib/bridge/transaction.test.d.ts +2 -0
  76. package/lib/bridge/transaction.test.d.ts.map +1 -0
  77. package/lib/bridge/transaction.test.js +68 -0
  78. package/lib/bridge/transaction.test.js.map +1 -0
  79. package/lib/logic/broadcast.test.d.ts +2 -0
  80. package/lib/logic/broadcast.test.d.ts.map +1 -0
  81. package/lib/logic/broadcast.test.js +62 -0
  82. package/lib/logic/broadcast.test.js.map +1 -0
  83. package/lib/logic/combine.test.d.ts +2 -0
  84. package/lib/logic/combine.test.d.ts.map +1 -0
  85. package/lib/logic/combine.test.js +37 -0
  86. package/lib/logic/combine.test.js.map +1 -0
  87. package/lib/logic/craftTransaction.integration.test.d.ts +2 -0
  88. package/lib/logic/craftTransaction.integration.test.d.ts.map +1 -0
  89. package/lib/logic/craftTransaction.integration.test.js +98 -0
  90. package/lib/logic/craftTransaction.integration.test.js.map +1 -0
  91. package/lib/logic/craftTransaction.test.d.ts +2 -0
  92. package/lib/logic/craftTransaction.test.d.ts.map +1 -0
  93. package/lib/logic/craftTransaction.test.js +127 -0
  94. package/lib/logic/craftTransaction.test.js.map +1 -0
  95. package/lib/logic/estimateFees.integration.test.d.ts +2 -0
  96. package/lib/logic/estimateFees.integration.test.d.ts.map +1 -0
  97. package/lib/logic/estimateFees.integration.test.js +82 -0
  98. package/lib/logic/estimateFees.integration.test.js.map +1 -0
  99. package/lib/logic/estimateFees.test.d.ts +2 -0
  100. package/lib/logic/estimateFees.test.d.ts.map +1 -0
  101. package/lib/logic/estimateFees.test.js +70 -0
  102. package/lib/logic/estimateFees.test.js.map +1 -0
  103. package/lib/logic/getBalance.integration.test.d.ts +2 -0
  104. package/lib/logic/getBalance.integration.test.d.ts.map +1 -0
  105. package/lib/logic/getBalance.integration.test.js +56 -0
  106. package/lib/logic/getBalance.integration.test.js.map +1 -0
  107. package/lib/logic/getBalance.test.d.ts +2 -0
  108. package/lib/logic/getBalance.test.d.ts.map +1 -0
  109. package/lib/logic/getBalance.test.js +64 -0
  110. package/lib/logic/getBalance.test.js.map +1 -0
  111. package/lib/logic/lastBlock.test.d.ts +2 -0
  112. package/lib/logic/lastBlock.test.d.ts.map +1 -0
  113. package/lib/logic/lastBlock.test.js +27 -0
  114. package/lib/logic/lastBlock.test.js.map +1 -0
  115. package/lib/logic/listOperations.test.d.ts +2 -0
  116. package/lib/logic/listOperations.test.d.ts.map +1 -0
  117. package/lib/logic/listOperations.test.js +79 -0
  118. package/lib/logic/listOperations.test.js.map +1 -0
  119. package/lib/network/sdk.d.ts.map +1 -1
  120. package/lib/network/sdk.integration.test.d.ts +2 -0
  121. package/lib/network/sdk.integration.test.d.ts.map +1 -0
  122. package/lib/network/sdk.integration.test.js +215 -0
  123. package/lib/network/sdk.integration.test.js.map +1 -0
  124. package/lib/network/sdk.js +5 -5
  125. package/lib/network/sdk.js.map +1 -1
  126. package/lib/network/sdk.test.d.ts +2 -0
  127. package/lib/network/sdk.test.d.ts.map +1 -0
  128. package/lib/network/sdk.test.js +1784 -0
  129. package/lib/network/sdk.test.js.map +1 -0
  130. package/lib/signer/getAddress.test.d.ts +2 -0
  131. package/lib/signer/getAddress.test.d.ts.map +1 -0
  132. package/lib/signer/getAddress.test.js +106 -0
  133. package/lib/signer/getAddress.test.js.map +1 -0
  134. package/lib/test/config.test.d.ts +2 -0
  135. package/lib/test/config.test.d.ts.map +1 -0
  136. package/lib/test/config.test.js +44 -0
  137. package/lib/test/config.test.js.map +1 -0
  138. package/lib-es/api/index.integration.test.d.ts +2 -0
  139. package/lib-es/api/index.integration.test.d.ts.map +1 -0
  140. package/lib-es/api/index.integration.test.js +171 -0
  141. package/lib-es/api/index.integration.test.js.map +1 -0
  142. package/lib-es/api/index.test.d.ts +2 -0
  143. package/lib-es/api/index.test.d.ts.map +1 -0
  144. package/lib-es/api/index.test.js +148 -0
  145. package/lib-es/api/index.test.js.map +1 -0
  146. package/lib-es/bridge/bridge.integration.test.d.ts +4 -0
  147. package/lib-es/bridge/bridge.integration.test.d.ts.map +1 -0
  148. package/lib-es/bridge/bridge.integration.test.js +139 -0
  149. package/lib-es/bridge/bridge.integration.test.js.map +1 -0
  150. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  151. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  152. package/lib-es/bridge/broadcast.test.js +46 -0
  153. package/lib-es/bridge/broadcast.test.js.map +1 -0
  154. package/lib-es/bridge/buildOptimisticOperation.test.d.ts +2 -0
  155. package/lib-es/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  156. package/lib-es/bridge/buildOptimisticOperation.test.js +47 -0
  157. package/lib-es/bridge/buildOptimisticOperation.test.js.map +1 -0
  158. package/lib-es/bridge/buildTransaction.integration.test.d.ts +2 -0
  159. package/lib-es/bridge/buildTransaction.integration.test.d.ts.map +1 -0
  160. package/lib-es/bridge/buildTransaction.integration.test.js +67 -0
  161. package/lib-es/bridge/buildTransaction.integration.test.js.map +1 -0
  162. package/lib-es/bridge/buildTransaction.test.d.ts +2 -0
  163. package/lib-es/bridge/buildTransaction.test.d.ts.map +1 -0
  164. package/lib-es/bridge/buildTransaction.test.js +229 -0
  165. package/lib-es/bridge/buildTransaction.test.js.map +1 -0
  166. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +2 -0
  167. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  168. package/lib-es/bridge/estimateMaxSpendable.test.js +50 -0
  169. package/lib-es/bridge/estimateMaxSpendable.test.js.map +1 -0
  170. package/lib-es/bridge/formatters.test.d.ts +2 -0
  171. package/lib-es/bridge/formatters.test.d.ts.map +1 -0
  172. package/lib-es/bridge/formatters.test.js +16 -0
  173. package/lib-es/bridge/formatters.test.js.map +1 -0
  174. package/lib-es/bridge/getFeesForTransaction.test.d.ts +2 -0
  175. package/lib-es/bridge/getFeesForTransaction.test.d.ts.map +1 -0
  176. package/lib-es/bridge/getFeesForTransaction.test.js +30 -0
  177. package/lib-es/bridge/getFeesForTransaction.test.js.map +1 -0
  178. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  179. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  180. package/lib-es/bridge/getTransactionStatus.test.js +64 -0
  181. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  182. package/lib-es/bridge/index.test.d.ts +2 -0
  183. package/lib-es/bridge/index.test.d.ts.map +1 -0
  184. package/lib-es/bridge/index.test.js +260 -0
  185. package/lib-es/bridge/index.test.js.map +1 -0
  186. package/lib-es/bridge/preload.test.d.ts +2 -0
  187. package/lib-es/bridge/preload.test.d.ts.map +1 -0
  188. package/lib-es/bridge/preload.test.js +50 -0
  189. package/lib-es/bridge/preload.test.js.map +1 -0
  190. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  191. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  192. package/lib-es/bridge/prepareTransaction.test.js +92 -0
  193. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  194. package/lib-es/bridge/serialization.test.d.ts +2 -0
  195. package/lib-es/bridge/serialization.test.d.ts.map +1 -0
  196. package/lib-es/bridge/serialization.test.js +126 -0
  197. package/lib-es/bridge/serialization.test.js.map +1 -0
  198. package/lib-es/bridge/signOperation.integration.test.d.ts +2 -0
  199. package/lib-es/bridge/signOperation.integration.test.d.ts.map +1 -0
  200. package/lib-es/bridge/signOperation.integration.test.js +75 -0
  201. package/lib-es/bridge/signOperation.integration.test.js.map +1 -0
  202. package/lib-es/bridge/signOperation.test.d.ts +2 -0
  203. package/lib-es/bridge/signOperation.test.d.ts.map +1 -0
  204. package/lib-es/bridge/signOperation.test.js +440 -0
  205. package/lib-es/bridge/signOperation.test.js.map +1 -0
  206. package/lib-es/bridge/synchronisation.test.d.ts +2 -0
  207. package/lib-es/bridge/synchronisation.test.d.ts.map +1 -0
  208. package/lib-es/bridge/synchronisation.test.js +477 -0
  209. package/lib-es/bridge/synchronisation.test.js.map +1 -0
  210. package/lib-es/bridge/transaction.test.d.ts +2 -0
  211. package/lib-es/bridge/transaction.test.d.ts.map +1 -0
  212. package/lib-es/bridge/transaction.test.js +66 -0
  213. package/lib-es/bridge/transaction.test.js.map +1 -0
  214. package/lib-es/logic/broadcast.test.d.ts +2 -0
  215. package/lib-es/logic/broadcast.test.d.ts.map +1 -0
  216. package/lib-es/logic/broadcast.test.js +57 -0
  217. package/lib-es/logic/broadcast.test.js.map +1 -0
  218. package/lib-es/logic/combine.test.d.ts +2 -0
  219. package/lib-es/logic/combine.test.d.ts.map +1 -0
  220. package/lib-es/logic/combine.test.js +35 -0
  221. package/lib-es/logic/combine.test.js.map +1 -0
  222. package/lib-es/logic/craftTransaction.integration.test.d.ts +2 -0
  223. package/lib-es/logic/craftTransaction.integration.test.d.ts.map +1 -0
  224. package/lib-es/logic/craftTransaction.integration.test.js +93 -0
  225. package/lib-es/logic/craftTransaction.integration.test.js.map +1 -0
  226. package/lib-es/logic/craftTransaction.test.d.ts +2 -0
  227. package/lib-es/logic/craftTransaction.test.d.ts.map +1 -0
  228. package/lib-es/logic/craftTransaction.test.js +122 -0
  229. package/lib-es/logic/craftTransaction.test.js.map +1 -0
  230. package/lib-es/logic/estimateFees.integration.test.d.ts +2 -0
  231. package/lib-es/logic/estimateFees.integration.test.d.ts.map +1 -0
  232. package/lib-es/logic/estimateFees.integration.test.js +77 -0
  233. package/lib-es/logic/estimateFees.integration.test.js.map +1 -0
  234. package/lib-es/logic/estimateFees.test.d.ts +2 -0
  235. package/lib-es/logic/estimateFees.test.d.ts.map +1 -0
  236. package/lib-es/logic/estimateFees.test.js +65 -0
  237. package/lib-es/logic/estimateFees.test.js.map +1 -0
  238. package/lib-es/logic/getBalance.integration.test.d.ts +2 -0
  239. package/lib-es/logic/getBalance.integration.test.d.ts.map +1 -0
  240. package/lib-es/logic/getBalance.integration.test.js +51 -0
  241. package/lib-es/logic/getBalance.integration.test.js.map +1 -0
  242. package/lib-es/logic/getBalance.test.d.ts +2 -0
  243. package/lib-es/logic/getBalance.test.d.ts.map +1 -0
  244. package/lib-es/logic/getBalance.test.js +62 -0
  245. package/lib-es/logic/getBalance.test.js.map +1 -0
  246. package/lib-es/logic/lastBlock.test.d.ts +2 -0
  247. package/lib-es/logic/lastBlock.test.d.ts.map +1 -0
  248. package/lib-es/logic/lastBlock.test.js +25 -0
  249. package/lib-es/logic/lastBlock.test.js.map +1 -0
  250. package/lib-es/logic/listOperations.test.d.ts +2 -0
  251. package/lib-es/logic/listOperations.test.d.ts.map +1 -0
  252. package/lib-es/logic/listOperations.test.js +77 -0
  253. package/lib-es/logic/listOperations.test.js.map +1 -0
  254. package/lib-es/network/sdk.d.ts.map +1 -1
  255. package/lib-es/network/sdk.integration.test.d.ts +2 -0
  256. package/lib-es/network/sdk.integration.test.d.ts.map +1 -0
  257. package/lib-es/network/sdk.integration.test.js +210 -0
  258. package/lib-es/network/sdk.integration.test.js.map +1 -0
  259. package/lib-es/network/sdk.js +5 -5
  260. package/lib-es/network/sdk.js.map +1 -1
  261. package/lib-es/network/sdk.test.d.ts +2 -0
  262. package/lib-es/network/sdk.test.d.ts.map +1 -0
  263. package/lib-es/network/sdk.test.js +1756 -0
  264. package/lib-es/network/sdk.test.js.map +1 -0
  265. package/lib-es/signer/getAddress.test.d.ts +2 -0
  266. package/lib-es/signer/getAddress.test.d.ts.map +1 -0
  267. package/lib-es/signer/getAddress.test.js +101 -0
  268. package/lib-es/signer/getAddress.test.js.map +1 -0
  269. package/lib-es/test/config.test.d.ts +2 -0
  270. package/lib-es/test/config.test.d.ts.map +1 -0
  271. package/lib-es/test/config.test.js +39 -0
  272. package/lib-es/test/config.test.js.map +1 -0
  273. package/package.json +8 -8
  274. package/src/api/index.integration.test.ts +0 -18
  275. package/src/network/sdk.test.ts +4 -39
  276. package/src/network/sdk.ts +5 -7
@@ -0,0 +1,477 @@
1
+ import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
2
+ import BigNumber from "bignumber.js";
3
+ import { faker } from "@faker-js/faker";
4
+ import { createFixtureAccount, createFixtureOperation } from "../types/bridge.fixture";
5
+ import { DEFAULT_COIN_TYPE } from "../network/sdk";
6
+ import { getAccountShape } from "./synchronisation";
7
+ import coinConfig from "../config";
8
+ import { getFullnodeUrl } from "@mysten/sui/client";
9
+ import * as networkModule from "../network";
10
+ // Mock getTokenById and listTokensForCryptoCurrency
11
+ jest.mock("@ledgerhq/cryptoassets/tokens", () => ({
12
+ getTokenById: (coinType) => ({
13
+ id: coinType,
14
+ ticker: "TEST",
15
+ name: "Test Token",
16
+ countervalueTicker: "TEST",
17
+ standard: "SUI-20",
18
+ tokenType: "sui",
19
+ parentCurrency: { id: "sui" },
20
+ contract: "0x123",
21
+ }),
22
+ listTokensForCryptoCurrency: () => [{ id: "0x123::sui::TEST" }],
23
+ }));
24
+ jest.mock("../network", () => {
25
+ const mockGetAccountBalances = jest.fn();
26
+ const mockGetOperations = jest.fn();
27
+ const mockGetStakesRaw = jest.fn();
28
+ return {
29
+ getAccountBalances: mockGetAccountBalances,
30
+ getOperations: mockGetOperations,
31
+ getStakesRaw: mockGetStakesRaw,
32
+ createTransaction: jest.fn(),
33
+ };
34
+ });
35
+ describe("getAccountShape", () => {
36
+ const mockGetAccountBalances = networkModule.getAccountBalances;
37
+ const mockGetOperations = networkModule.getOperations;
38
+ const mockGetStakesRaw = networkModule.getStakesRaw;
39
+ beforeEach(() => {
40
+ mockGetAccountBalances.mockClear();
41
+ mockGetOperations.mockClear();
42
+ mockGetStakesRaw.mockClear();
43
+ });
44
+ beforeAll(() => {
45
+ coinConfig.setCoinConfig(() => ({
46
+ status: { type: "active" },
47
+ node: { url: getFullnodeUrl("mainnet") },
48
+ }));
49
+ });
50
+ it("calls getAccountBalances and getOperations", async () => {
51
+ // GIVEN
52
+ const initialAccount = undefined;
53
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
54
+ mockGetOperations.mockResolvedValue([]);
55
+ mockGetStakesRaw.mockResolvedValue([]);
56
+ // WHEN
57
+ await getAccountShape({
58
+ index: 0,
59
+ derivationPath: "44'/784'/0'/0'/0'",
60
+ currency: getCryptoCurrencyById("sui"),
61
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
62
+ initialAccount,
63
+ derivationMode: "sui",
64
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
65
+ // THEN
66
+ expect(mockGetAccountBalances).toHaveBeenCalledTimes(1);
67
+ expect(mockGetOperations).toHaveBeenCalledTimes(1);
68
+ });
69
+ it("returns an AccountShapeInfo based on getAccountBalances API", async () => {
70
+ // GIVEN
71
+ const initialAccount = undefined;
72
+ const accountBalance = createAccountBalance();
73
+ mockGetAccountBalances.mockResolvedValue([accountBalance]);
74
+ mockGetOperations.mockResolvedValue([]);
75
+ mockGetStakesRaw.mockResolvedValue([]);
76
+ // WHEN
77
+ const shape = await getAccountShape({
78
+ index: 0,
79
+ derivationPath: "44'/784'/0'/0'/0'",
80
+ currency: getCryptoCurrencyById("sui"),
81
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
82
+ initialAccount,
83
+ derivationMode: "sui",
84
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
85
+ // THEN
86
+ expect(shape).toEqual({
87
+ id: "js:2:sui:0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0:sui",
88
+ balance: accountBalance.balance,
89
+ spendableBalance: accountBalance.balance,
90
+ blockHeight: 5,
91
+ operations: [],
92
+ operationsCount: 0,
93
+ suiResources: {
94
+ stakes: [],
95
+ },
96
+ subAccounts: [],
97
+ syncHash: undefined,
98
+ });
99
+ });
100
+ it("returns an AccountShapeInfo with operations from initialAccount", async () => {
101
+ // GIVEN
102
+ const extra = { coinType: DEFAULT_COIN_TYPE };
103
+ const initialOperations = [createFixtureOperation({ id: faker.string.uuid(), extra })];
104
+ const initialAccount = createFixtureAccount({ operations: initialOperations });
105
+ const accountBalance = createAccountBalance();
106
+ mockGetAccountBalances.mockResolvedValue([accountBalance]);
107
+ mockGetOperations.mockResolvedValue([]);
108
+ mockGetStakesRaw.mockResolvedValue([]);
109
+ // WHEN
110
+ const shape = await getAccountShape({
111
+ index: 0,
112
+ derivationPath: "44'/784'/0'/0'/0'",
113
+ currency: getCryptoCurrencyById("sui"),
114
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
115
+ initialAccount,
116
+ derivationMode: "sui",
117
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
118
+ // THEN
119
+ expect(shape.operationsCount).toEqual(1);
120
+ expect(shape.operations).toEqual(expect.arrayContaining(initialOperations));
121
+ });
122
+ it("returns an AccountShapeInfo with operations from getOperations API", async () => {
123
+ // GIVEN
124
+ const initialAccount = createFixtureAccount();
125
+ const accountBalance = createAccountBalance();
126
+ mockGetAccountBalances.mockResolvedValue([accountBalance]);
127
+ const extra = { coinType: DEFAULT_COIN_TYPE };
128
+ const apiOperations = [
129
+ createFixtureOperation({ id: faker.string.uuid(), extra }),
130
+ createFixtureOperation({ id: faker.string.uuid(), extra }),
131
+ ];
132
+ mockGetOperations.mockResolvedValue(apiOperations);
133
+ mockGetStakesRaw.mockResolvedValue([]);
134
+ // WHEN
135
+ const shape = await getAccountShape({
136
+ index: 0,
137
+ derivationPath: "44'/784'/0'/0'/0'",
138
+ currency: getCryptoCurrencyById("sui"),
139
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
140
+ initialAccount,
141
+ derivationMode: "sui",
142
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
143
+ // THEN
144
+ expect(shape.operationsCount).toEqual(initialAccount.operations.length + apiOperations.length);
145
+ expect(shape.operations).toEqual(expect.arrayContaining(apiOperations));
146
+ });
147
+ it("handles multiple token balances and creates subAccounts", async () => {
148
+ // GIVEN
149
+ const initialAccount = createFixtureAccount();
150
+ const mainBalance = createAccountBalance({ coinType: DEFAULT_COIN_TYPE });
151
+ const tokenBalance = createAccountBalance({ coinType: "0x123::sui::TEST" });
152
+ mockGetAccountBalances.mockResolvedValue([mainBalance, tokenBalance]);
153
+ mockGetOperations.mockResolvedValue([]);
154
+ mockGetStakesRaw.mockResolvedValue([]);
155
+ // WHEN
156
+ const shape = await getAccountShape({
157
+ index: 0,
158
+ derivationPath: "44'/784'/0'/0'/0'",
159
+ currency: getCryptoCurrencyById("sui"),
160
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
161
+ initialAccount,
162
+ derivationMode: "sui",
163
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
164
+ // THEN
165
+ expect(shape.balance).toEqual(mainBalance.balance);
166
+ expect(shape.subAccounts).toBeDefined();
167
+ expect(Array.isArray(shape.subAccounts)).toBe(true);
168
+ });
169
+ describe("stakes functionality", () => {
170
+ it("calls getStakesRaw with the correct address", async () => {
171
+ // GIVEN
172
+ const address = "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0";
173
+ const initialAccount = undefined;
174
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
175
+ mockGetOperations.mockResolvedValue([]);
176
+ mockGetStakesRaw.mockResolvedValue([]);
177
+ // WHEN
178
+ await getAccountShape({
179
+ index: 0,
180
+ derivationPath: "44'/784'/0'/0'/0'",
181
+ currency: getCryptoCurrencyById("sui"),
182
+ address,
183
+ initialAccount,
184
+ derivationMode: "sui",
185
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
186
+ // THEN
187
+ expect(mockGetStakesRaw).toHaveBeenCalledTimes(1);
188
+ expect(mockGetStakesRaw).toHaveBeenCalledWith(address);
189
+ });
190
+ it("includes empty stakes in suiResources when no stakes are returned", async () => {
191
+ // GIVEN
192
+ const initialAccount = undefined;
193
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
194
+ mockGetOperations.mockResolvedValue([]);
195
+ mockGetStakesRaw.mockResolvedValue([]);
196
+ // WHEN
197
+ const shape = await getAccountShape({
198
+ index: 0,
199
+ derivationPath: "44'/784'/0'/0'/0'",
200
+ currency: getCryptoCurrencyById("sui"),
201
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
202
+ initialAccount,
203
+ derivationMode: "sui",
204
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
205
+ // THEN
206
+ expect(shape.suiResources).toBeDefined();
207
+ expect(shape.suiResources?.stakes).toEqual([]);
208
+ });
209
+ it("includes stakes in suiResources when stakes are returned", async () => {
210
+ // GIVEN
211
+ const initialAccount = undefined;
212
+ const mockStakes = [
213
+ {
214
+ validatorAddress: "0xvalidator1",
215
+ stakes: [
216
+ {
217
+ stakedSuiId: "0xstake1",
218
+ status: "Active",
219
+ principal: "1000000000",
220
+ stakeActiveEpoch: "100",
221
+ stakeRequestEpoch: "95",
222
+ },
223
+ ],
224
+ },
225
+ {
226
+ validatorAddress: "0xvalidator2",
227
+ stakes: [
228
+ {
229
+ stakedSuiId: "0xstake2",
230
+ status: "Pending",
231
+ principal: "2000000000",
232
+ stakeActiveEpoch: "0",
233
+ stakeRequestEpoch: "100",
234
+ },
235
+ ],
236
+ },
237
+ ];
238
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
239
+ mockGetOperations.mockResolvedValue([]);
240
+ mockGetStakesRaw.mockResolvedValue(mockStakes);
241
+ // WHEN
242
+ const shape = await getAccountShape({
243
+ index: 0,
244
+ derivationPath: "44'/784'/0'/0'/0'",
245
+ currency: getCryptoCurrencyById("sui"),
246
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
247
+ initialAccount,
248
+ derivationMode: "sui",
249
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
250
+ // THEN
251
+ expect(shape.suiResources).toBeDefined();
252
+ expect(shape.suiResources?.stakes).toEqual(mockStakes);
253
+ });
254
+ it("handles multiple stakes per validator", async () => {
255
+ // GIVEN
256
+ const initialAccount = undefined;
257
+ const mockStakes = [
258
+ {
259
+ validatorAddress: "0xvalidator1",
260
+ stakes: [
261
+ {
262
+ stakedSuiId: "0xstake1",
263
+ status: "Active",
264
+ principal: "1000000000",
265
+ stakeActiveEpoch: "100",
266
+ stakeRequestEpoch: "95",
267
+ },
268
+ {
269
+ stakedSuiId: "0xstake2",
270
+ status: "Active",
271
+ principal: "1500000000",
272
+ stakeActiveEpoch: "100",
273
+ stakeRequestEpoch: "95",
274
+ },
275
+ ],
276
+ },
277
+ ];
278
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
279
+ mockGetOperations.mockResolvedValue([]);
280
+ mockGetStakesRaw.mockResolvedValue(mockStakes);
281
+ // WHEN
282
+ const shape = await getAccountShape({
283
+ index: 0,
284
+ derivationPath: "44'/784'/0'/0'/0'",
285
+ currency: getCryptoCurrencyById("sui"),
286
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
287
+ initialAccount,
288
+ derivationMode: "sui",
289
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
290
+ // THEN
291
+ expect(shape.suiResources?.stakes).toEqual(mockStakes);
292
+ expect(shape.suiResources?.stakes?.[0].stakes).toHaveLength(2);
293
+ });
294
+ it("handles different stake statuses correctly", async () => {
295
+ // GIVEN
296
+ const initialAccount = undefined;
297
+ const mockStakes = [
298
+ {
299
+ validatorAddress: "0xvalidator1",
300
+ stakes: [
301
+ {
302
+ stakedSuiId: "0xactive",
303
+ status: "Active",
304
+ principal: "1000000000",
305
+ stakeActiveEpoch: "100",
306
+ stakeRequestEpoch: "95",
307
+ },
308
+ {
309
+ stakedSuiId: "0xpending",
310
+ status: "Pending",
311
+ principal: "2000000000",
312
+ stakeActiveEpoch: "0",
313
+ stakeRequestEpoch: "100",
314
+ },
315
+ {
316
+ stakedSuiId: "0xunstaked",
317
+ status: "Unstaked",
318
+ principal: "3000000000",
319
+ stakeActiveEpoch: "0",
320
+ stakeRequestEpoch: "0",
321
+ },
322
+ ],
323
+ },
324
+ ];
325
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
326
+ mockGetOperations.mockResolvedValue([]);
327
+ mockGetStakesRaw.mockResolvedValue(mockStakes);
328
+ // WHEN
329
+ const shape = await getAccountShape({
330
+ index: 0,
331
+ derivationPath: "44'/784'/0'/0'/0'",
332
+ currency: getCryptoCurrencyById("sui"),
333
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
334
+ initialAccount,
335
+ derivationMode: "sui",
336
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
337
+ // THEN
338
+ expect(shape.suiResources?.stakes).toEqual(mockStakes);
339
+ const stakes = shape.suiResources?.stakes?.[0].stakes || [];
340
+ expect(stakes).toHaveLength(3);
341
+ expect(stakes.find(s => s.stakedSuiId === "0xactive")?.status).toBe("Active");
342
+ expect(stakes.find(s => s.stakedSuiId === "0xpending")?.status).toBe("Pending");
343
+ expect(stakes.find(s => s.stakedSuiId === "0xunstaked")?.status).toBe("Unstaked");
344
+ });
345
+ it("handles getStakesRaw throwing an error gracefully", async () => {
346
+ // GIVEN
347
+ const initialAccount = undefined;
348
+ const error = new Error("Network error");
349
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
350
+ mockGetOperations.mockResolvedValue([]);
351
+ mockGetStakesRaw.mockRejectedValue(error);
352
+ // WHEN & THEN
353
+ await expect(getAccountShape({
354
+ index: 0,
355
+ derivationPath: "44'/784'/0'/0'/0'",
356
+ currency: getCryptoCurrencyById("sui"),
357
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
358
+ initialAccount,
359
+ derivationMode: "sui",
360
+ }, { blacklistedTokenIds: [], paginationConfig: {} })).rejects.toThrow("Network error");
361
+ });
362
+ it("preserves existing suiResources when initialAccount has stakes", async () => {
363
+ // GIVEN
364
+ const existingStakes = [
365
+ {
366
+ validatorAddress: "0xexistingValidator",
367
+ stakes: [
368
+ {
369
+ stakedSuiId: "0xexistingStake",
370
+ status: "Active",
371
+ principal: "500000000",
372
+ stakeActiveEpoch: "90",
373
+ stakeRequestEpoch: "85",
374
+ },
375
+ ],
376
+ },
377
+ ];
378
+ const initialAccount = createFixtureAccount({
379
+ suiResources: { stakes: existingStakes },
380
+ });
381
+ const newStakes = [
382
+ {
383
+ validatorAddress: "0xnewValidator",
384
+ stakes: [
385
+ {
386
+ stakedSuiId: "0xnewStake",
387
+ status: "Active",
388
+ principal: "1000000000",
389
+ stakeActiveEpoch: "100",
390
+ stakeRequestEpoch: "95",
391
+ },
392
+ ],
393
+ },
394
+ ];
395
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
396
+ mockGetOperations.mockResolvedValue([]);
397
+ mockGetStakesRaw.mockResolvedValue(newStakes);
398
+ // WHEN
399
+ const shape = await getAccountShape({
400
+ index: 0,
401
+ derivationPath: "44'/784'/0'/0'/0'",
402
+ currency: getCryptoCurrencyById("sui"),
403
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
404
+ initialAccount,
405
+ derivationMode: "sui",
406
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
407
+ // THEN
408
+ expect(shape.suiResources?.stakes).toEqual(newStakes);
409
+ // The new stakes should replace the old ones, not merge
410
+ expect(shape.suiResources?.stakes).not.toEqual(existingStakes);
411
+ });
412
+ it("handles large stake amounts correctly", async () => {
413
+ // GIVEN
414
+ const initialAccount = undefined;
415
+ const mockStakes = [
416
+ {
417
+ validatorAddress: "0xvalidator1",
418
+ stakes: [
419
+ {
420
+ stakedSuiId: "0xlargeStake",
421
+ status: "Active",
422
+ principal: "999999999999999999999999999999",
423
+ stakeActiveEpoch: "1000",
424
+ stakeRequestEpoch: "995",
425
+ },
426
+ ],
427
+ },
428
+ ];
429
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
430
+ mockGetOperations.mockResolvedValue([]);
431
+ mockGetStakesRaw.mockResolvedValue(mockStakes);
432
+ // WHEN
433
+ const shape = await getAccountShape({
434
+ index: 0,
435
+ derivationPath: "44'/784'/0'/0'/0'",
436
+ currency: getCryptoCurrencyById("sui"),
437
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
438
+ initialAccount,
439
+ derivationMode: "sui",
440
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
441
+ // THEN
442
+ expect(shape.suiResources?.stakes).toEqual(mockStakes);
443
+ const stake = shape.suiResources?.stakes?.[0].stakes?.[0];
444
+ expect(stake?.principal).toBe("999999999999999999999999999999");
445
+ expect(stake?.stakeActiveEpoch).toBe("1000");
446
+ expect(stake?.stakeRequestEpoch).toBe("995");
447
+ });
448
+ it("handles getStakesRaw returning null or undefined", async () => {
449
+ // GIVEN
450
+ const initialAccount = undefined;
451
+ mockGetAccountBalances.mockResolvedValue([createAccountBalance()]);
452
+ mockGetOperations.mockResolvedValue([]);
453
+ mockGetStakesRaw.mockResolvedValue(null);
454
+ // WHEN
455
+ const shape = await getAccountShape({
456
+ index: 0,
457
+ derivationPath: "44'/784'/0'/0'/0'",
458
+ currency: getCryptoCurrencyById("sui"),
459
+ address: "0x6e143fe0a8ca010a86580dafac44298e5b1b7d73efc345356a59a15f0d7824f0",
460
+ initialAccount,
461
+ derivationMode: "sui",
462
+ }, { blacklistedTokenIds: [], paginationConfig: {} });
463
+ // THEN
464
+ expect(shape.suiResources).toBeDefined();
465
+ expect(shape.suiResources?.stakes).toBeNull();
466
+ });
467
+ });
468
+ });
469
+ function createAccountBalance(overrides = {}) {
470
+ return {
471
+ coinType: DEFAULT_COIN_TYPE,
472
+ blockHeight: 10,
473
+ balance: new BigNumber(faker.string.numeric()),
474
+ ...overrides,
475
+ };
476
+ }
477
+ //# sourceMappingURL=synchronisation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synchronisation.test.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.test.d.ts","sourceRoot":"","sources":["../../src/bridge/transaction.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { createFixtureAccount, createFixtureTransaction } from "../types/bridge.fixture";
3
+ import { formatTransaction, fromTransactionRaw, toTransactionRaw } from "./transaction";
4
+ describe("transaction", () => {
5
+ const account = createFixtureAccount();
6
+ describe("formatTransaction", () => {
7
+ it("should format a basic transaction", () => {
8
+ const transaction = createFixtureTransaction({
9
+ amount: new BigNumber(500000000),
10
+ recipient: "0x456",
11
+ });
12
+ const formatted = formatTransaction(transaction, account);
13
+ expect(formatted).toBe("\nSEND 0.5 SUI\nTO 0x456");
14
+ });
15
+ it("should format a transaction with useAllAmount", () => {
16
+ const transaction = createFixtureTransaction({ useAllAmount: true, recipient: "0x456" });
17
+ const formatted = formatTransaction(transaction, account);
18
+ expect(formatted).toBe("\nSEND MAX\nTO 0x456");
19
+ });
20
+ });
21
+ describe("fromTransactionRaw", () => {
22
+ it("should convert from raw transaction", () => {
23
+ const rawTransaction = {
24
+ family: "sui",
25
+ mode: "send",
26
+ coinType: "0x2::sui::SUI",
27
+ amount: "500000000",
28
+ recipient: "0x456",
29
+ useAllAmount: false,
30
+ fees: "1000000",
31
+ };
32
+ const transaction = fromTransactionRaw(rawTransaction);
33
+ expect(transaction).toEqual({
34
+ family: "sui",
35
+ mode: "send",
36
+ coinType: "0x2::sui::SUI",
37
+ amount: new BigNumber("500000000"),
38
+ recipient: "0x456",
39
+ useAllAmount: false,
40
+ fees: new BigNumber("1000000"),
41
+ errors: {},
42
+ });
43
+ });
44
+ });
45
+ describe("toTransactionRaw", () => {
46
+ it("should convert to raw transaction", () => {
47
+ const transaction = createFixtureTransaction();
48
+ const rawTransaction = toTransactionRaw(transaction);
49
+ expect(rawTransaction).toEqual({
50
+ family: "sui",
51
+ mode: "send",
52
+ coinType: "0x2::sui::SUI",
53
+ amount: "3000000000",
54
+ recipient: "0x65449f57946938c84c512732f1d69405d1fce417d9c9894696ddf4522f479e24",
55
+ useAllAmount: false,
56
+ fees: "3976000",
57
+ });
58
+ });
59
+ it("should handle null fees", () => {
60
+ const transaction = createFixtureTransaction({ fees: null });
61
+ const rawTransaction = toTransactionRaw(transaction);
62
+ expect(rawTransaction.fees).toBe("");
63
+ });
64
+ });
65
+ });
66
+ //# sourceMappingURL=transaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["../../src/bridge/transaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=broadcast.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.test.d.ts","sourceRoot":"","sources":["../../src/logic/broadcast.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { broadcast } from "./broadcast";
2
+ import suiAPI from "../network";
3
+ // Mock the suiAPI
4
+ jest.mock("../network", () => ({
5
+ __esModule: true,
6
+ default: {
7
+ executeTransactionBlock: jest.fn().mockResolvedValue({ digest: "test-digest" }),
8
+ },
9
+ }));
10
+ describe("broadcast", () => {
11
+ beforeEach(() => {
12
+ jest.clearAllMocks();
13
+ });
14
+ describe("with string input", () => {
15
+ it("should correctly extract transaction and signature and broadcast", async () => {
16
+ // Mock transaction string with 4-byte length prefix
17
+ // Example: "0010" (length 16 in hex) + "1234567890" (raw tx) + "abcdef" (signature)
18
+ const mockTransaction = "000a1234567890abcdef";
19
+ const result = await broadcast(mockTransaction);
20
+ expect(result).toBe("test-digest");
21
+ expect(suiAPI.executeTransactionBlock).toHaveBeenCalledWith({
22
+ transactionBlock: "1234567890",
23
+ signature: "abcdef",
24
+ options: {
25
+ showEffects: true,
26
+ },
27
+ });
28
+ });
29
+ it("should not call executeTransactionBlock if format is not hex", async () => {
30
+ const mockTransaction = "000g1234567890abcdef";
31
+ const result = await broadcast(mockTransaction);
32
+ expect(result).toBe("");
33
+ expect(suiAPI.executeTransactionBlock).toHaveBeenCalledTimes(0);
34
+ });
35
+ it("should not call executeTransactionBlock if format is incorrect", async () => {
36
+ const mockTransaction = "000a1";
37
+ const result = await broadcast(mockTransaction);
38
+ expect(result).toBe("");
39
+ expect(suiAPI.executeTransactionBlock).toHaveBeenCalledTimes(0);
40
+ });
41
+ });
42
+ describe("with ExecuteTransactionBlockParams input", () => {
43
+ it("should directly use provided params", async () => {
44
+ const mockParams = {
45
+ transactionBlock: "test-block",
46
+ signature: "test-signature",
47
+ options: {
48
+ showEffects: true,
49
+ },
50
+ };
51
+ const result = await broadcast(mockParams);
52
+ expect(result).toBe("test-digest");
53
+ expect(suiAPI.executeTransactionBlock).toHaveBeenCalledWith(mockParams);
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=broadcast.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.test.js","sourceRoot":"","sources":["../../src/logic/broadcast.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,MAAM,MAAM,YAAY,CAAC;AAEhC,kBAAkB;AAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE;QACP,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;KAChF;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,oDAAoD;YACpD,oFAAoF;YACpF,MAAM,eAAe,GAAG,sBAAsB,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC;gBAC1D,gBAAgB,EAAE,YAAY;gBAC9B,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI;iBAClB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,eAAe,GAAG,sBAAsB,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,eAAe,GAAG,OAAO,CAAC;YAEhC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,UAAU,GAAG;gBACjB,gBAAgB,EAAE,YAAY;gBAC9B,SAAS,EAAE,gBAAgB;gBAC3B,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI;iBAClB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}