@t2000/sdk 0.17.29 → 0.18.3

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 (259) hide show
  1. package/dist/adapters/index.d.cts +1 -1
  2. package/dist/adapters/index.d.ts +4 -10
  3. package/dist/adapters/index.js +2107 -15
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/{index-DdtOBw42.d.ts → index-Co0lp99l.d.cts} +23 -1
  6. package/dist/{index-DdtOBw42.d.cts → index-Co0lp99l.d.ts} +23 -1
  7. package/dist/index.cjs +102 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +8 -3
  10. package/dist/index.d.ts +654 -30
  11. package/dist/index.js +6154 -21
  12. package/dist/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/adapters/cetus.d.ts +0 -29
  15. package/dist/adapters/cetus.d.ts.map +0 -1
  16. package/dist/adapters/cetus.js +0 -74
  17. package/dist/adapters/cetus.js.map +0 -1
  18. package/dist/adapters/cetus.test.d.ts +0 -2
  19. package/dist/adapters/cetus.test.d.ts.map +0 -1
  20. package/dist/adapters/cetus.test.js +0 -57
  21. package/dist/adapters/cetus.test.js.map +0 -1
  22. package/dist/adapters/compliance.test.d.ts +0 -8
  23. package/dist/adapters/compliance.test.d.ts.map +0 -1
  24. package/dist/adapters/compliance.test.js +0 -202
  25. package/dist/adapters/compliance.test.js.map +0 -1
  26. package/dist/adapters/index.d.ts.map +0 -1
  27. package/dist/adapters/navi.d.ts +0 -41
  28. package/dist/adapters/navi.d.ts.map +0 -1
  29. package/dist/adapters/navi.js +0 -102
  30. package/dist/adapters/navi.js.map +0 -1
  31. package/dist/adapters/navi.test.d.ts +0 -2
  32. package/dist/adapters/navi.test.d.ts.map +0 -1
  33. package/dist/adapters/navi.test.js +0 -164
  34. package/dist/adapters/navi.test.js.map +0 -1
  35. package/dist/adapters/registry.d.ts +0 -47
  36. package/dist/adapters/registry.d.ts.map +0 -1
  37. package/dist/adapters/registry.js +0 -162
  38. package/dist/adapters/registry.js.map +0 -1
  39. package/dist/adapters/registry.test.d.ts +0 -2
  40. package/dist/adapters/registry.test.d.ts.map +0 -1
  41. package/dist/adapters/registry.test.js +0 -197
  42. package/dist/adapters/registry.test.js.map +0 -1
  43. package/dist/adapters/suilend.d.ts +0 -71
  44. package/dist/adapters/suilend.d.ts.map +0 -1
  45. package/dist/adapters/suilend.js +0 -826
  46. package/dist/adapters/suilend.js.map +0 -1
  47. package/dist/adapters/suilend.test.d.ts +0 -2
  48. package/dist/adapters/suilend.test.d.ts.map +0 -1
  49. package/dist/adapters/suilend.test.js +0 -294
  50. package/dist/adapters/suilend.test.js.map +0 -1
  51. package/dist/adapters/types.d.ts +0 -160
  52. package/dist/adapters/types.d.ts.map +0 -1
  53. package/dist/adapters/types.js +0 -2
  54. package/dist/adapters/types.js.map +0 -1
  55. package/dist/auto-invest.d.ts +0 -23
  56. package/dist/auto-invest.d.ts.map +0 -1
  57. package/dist/auto-invest.js +0 -131
  58. package/dist/auto-invest.js.map +0 -1
  59. package/dist/auto-invest.test.d.ts +0 -2
  60. package/dist/auto-invest.test.d.ts.map +0 -1
  61. package/dist/auto-invest.test.js +0 -220
  62. package/dist/auto-invest.test.js.map +0 -1
  63. package/dist/constants.d.ts +0 -177
  64. package/dist/constants.d.ts.map +0 -1
  65. package/dist/constants.js +0 -135
  66. package/dist/constants.js.map +0 -1
  67. package/dist/contacts.d.ts +0 -25
  68. package/dist/contacts.d.ts.map +0 -1
  69. package/dist/contacts.js +0 -83
  70. package/dist/contacts.js.map +0 -1
  71. package/dist/contacts.test.d.ts +0 -2
  72. package/dist/contacts.test.d.ts.map +0 -1
  73. package/dist/contacts.test.js +0 -164
  74. package/dist/contacts.test.js.map +0 -1
  75. package/dist/errors.d.ts +0 -26
  76. package/dist/errors.d.ts.map +0 -1
  77. package/dist/errors.js +0 -81
  78. package/dist/errors.js.map +0 -1
  79. package/dist/errors.test.d.ts +0 -2
  80. package/dist/errors.test.d.ts.map +0 -1
  81. package/dist/errors.test.js +0 -48
  82. package/dist/errors.test.js.map +0 -1
  83. package/dist/gas/autoTopUp.d.ts +0 -18
  84. package/dist/gas/autoTopUp.d.ts.map +0 -1
  85. package/dist/gas/autoTopUp.js +0 -55
  86. package/dist/gas/autoTopUp.js.map +0 -1
  87. package/dist/gas/autoTopUp.test.d.ts +0 -2
  88. package/dist/gas/autoTopUp.test.d.ts.map +0 -1
  89. package/dist/gas/autoTopUp.test.js +0 -59
  90. package/dist/gas/autoTopUp.test.js.map +0 -1
  91. package/dist/gas/gasStation.d.ts +0 -23
  92. package/dist/gas/gasStation.d.ts.map +0 -1
  93. package/dist/gas/gasStation.js +0 -58
  94. package/dist/gas/gasStation.js.map +0 -1
  95. package/dist/gas/index.d.ts +0 -4
  96. package/dist/gas/index.d.ts.map +0 -1
  97. package/dist/gas/index.js +0 -4
  98. package/dist/gas/index.js.map +0 -1
  99. package/dist/gas/manager.d.ts +0 -24
  100. package/dist/gas/manager.d.ts.map +0 -1
  101. package/dist/gas/manager.js +0 -142
  102. package/dist/gas/manager.js.map +0 -1
  103. package/dist/gas/manager.test.d.ts +0 -2
  104. package/dist/gas/manager.test.d.ts.map +0 -1
  105. package/dist/gas/manager.test.js +0 -220
  106. package/dist/gas/manager.test.js.map +0 -1
  107. package/dist/gas/serialization.test.d.ts +0 -2
  108. package/dist/gas/serialization.test.d.ts.map +0 -1
  109. package/dist/gas/serialization.test.js +0 -47
  110. package/dist/gas/serialization.test.js.map +0 -1
  111. package/dist/index.d.ts.map +0 -1
  112. package/dist/invest.test.d.ts +0 -2
  113. package/dist/invest.test.d.ts.map +0 -1
  114. package/dist/invest.test.js +0 -256
  115. package/dist/invest.test.js.map +0 -1
  116. package/dist/portfolio.d.ts +0 -39
  117. package/dist/portfolio.d.ts.map +0 -1
  118. package/dist/portfolio.js +0 -201
  119. package/dist/portfolio.js.map +0 -1
  120. package/dist/portfolio.test.d.ts +0 -2
  121. package/dist/portfolio.test.d.ts.map +0 -1
  122. package/dist/portfolio.test.js +0 -301
  123. package/dist/portfolio.test.js.map +0 -1
  124. package/dist/protocols/cetus.d.ts +0 -73
  125. package/dist/protocols/cetus.d.ts.map +0 -1
  126. package/dist/protocols/cetus.js +0 -267
  127. package/dist/protocols/cetus.js.map +0 -1
  128. package/dist/protocols/cetus.test.d.ts +0 -2
  129. package/dist/protocols/cetus.test.d.ts.map +0 -1
  130. package/dist/protocols/cetus.test.js +0 -325
  131. package/dist/protocols/cetus.test.js.map +0 -1
  132. package/dist/protocols/navi.d.ts +0 -59
  133. package/dist/protocols/navi.d.ts.map +0 -1
  134. package/dist/protocols/navi.js +0 -945
  135. package/dist/protocols/navi.js.map +0 -1
  136. package/dist/protocols/navi.test.d.ts +0 -2
  137. package/dist/protocols/navi.test.d.ts.map +0 -1
  138. package/dist/protocols/navi.test.js +0 -339
  139. package/dist/protocols/navi.test.js.map +0 -1
  140. package/dist/protocols/protocolFee.d.ts +0 -17
  141. package/dist/protocols/protocolFee.d.ts.map +0 -1
  142. package/dist/protocols/protocolFee.js +0 -62
  143. package/dist/protocols/protocolFee.js.map +0 -1
  144. package/dist/protocols/protocolFee.test.d.ts +0 -2
  145. package/dist/protocols/protocolFee.test.d.ts.map +0 -1
  146. package/dist/protocols/protocolFee.test.js +0 -137
  147. package/dist/protocols/protocolFee.test.js.map +0 -1
  148. package/dist/protocols/sentinel.d.ts +0 -18
  149. package/dist/protocols/sentinel.d.ts.map +0 -1
  150. package/dist/protocols/sentinel.js +0 -188
  151. package/dist/protocols/sentinel.js.map +0 -1
  152. package/dist/protocols/sentinel.test.d.ts +0 -2
  153. package/dist/protocols/sentinel.test.d.ts.map +0 -1
  154. package/dist/protocols/sentinel.test.js +0 -199
  155. package/dist/protocols/sentinel.test.js.map +0 -1
  156. package/dist/protocols/yieldTracker.d.ts +0 -6
  157. package/dist/protocols/yieldTracker.d.ts.map +0 -1
  158. package/dist/protocols/yieldTracker.js +0 -29
  159. package/dist/protocols/yieldTracker.js.map +0 -1
  160. package/dist/safeguards/enforcer.d.ts +0 -18
  161. package/dist/safeguards/enforcer.d.ts.map +0 -1
  162. package/dist/safeguards/enforcer.js +0 -130
  163. package/dist/safeguards/enforcer.js.map +0 -1
  164. package/dist/safeguards/enforcer.test.d.ts +0 -2
  165. package/dist/safeguards/enforcer.test.d.ts.map +0 -1
  166. package/dist/safeguards/enforcer.test.js +0 -212
  167. package/dist/safeguards/enforcer.test.js.map +0 -1
  168. package/dist/safeguards/errors.d.ts +0 -24
  169. package/dist/safeguards/errors.d.ts.map +0 -1
  170. package/dist/safeguards/errors.js +0 -31
  171. package/dist/safeguards/errors.js.map +0 -1
  172. package/dist/safeguards/index.d.ts +0 -6
  173. package/dist/safeguards/index.d.ts.map +0 -1
  174. package/dist/safeguards/index.js +0 -4
  175. package/dist/safeguards/index.js.map +0 -1
  176. package/dist/safeguards/types.d.ts +0 -16
  177. package/dist/safeguards/types.d.ts.map +0 -1
  178. package/dist/safeguards/types.js +0 -13
  179. package/dist/safeguards/types.js.map +0 -1
  180. package/dist/strategy.d.ts +0 -22
  181. package/dist/strategy.d.ts.map +0 -1
  182. package/dist/strategy.js +0 -113
  183. package/dist/strategy.js.map +0 -1
  184. package/dist/strategy.test.d.ts +0 -2
  185. package/dist/strategy.test.d.ts.map +0 -1
  186. package/dist/strategy.test.js +0 -212
  187. package/dist/strategy.test.js.map +0 -1
  188. package/dist/t2000.d.ts +0 -219
  189. package/dist/t2000.d.ts.map +0 -1
  190. package/dist/t2000.integration.test.d.ts +0 -2
  191. package/dist/t2000.integration.test.d.ts.map +0 -1
  192. package/dist/t2000.integration.test.js +0 -954
  193. package/dist/t2000.integration.test.js.map +0 -1
  194. package/dist/t2000.js +0 -2416
  195. package/dist/t2000.js.map +0 -1
  196. package/dist/types.d.ts +0 -419
  197. package/dist/types.d.ts.map +0 -1
  198. package/dist/types.js +0 -2
  199. package/dist/types.js.map +0 -1
  200. package/dist/utils/format.d.ts +0 -22
  201. package/dist/utils/format.d.ts.map +0 -1
  202. package/dist/utils/format.js +0 -71
  203. package/dist/utils/format.js.map +0 -1
  204. package/dist/utils/format.test.d.ts +0 -2
  205. package/dist/utils/format.test.d.ts.map +0 -1
  206. package/dist/utils/format.test.js +0 -187
  207. package/dist/utils/format.test.js.map +0 -1
  208. package/dist/utils/hashcash.d.ts +0 -2
  209. package/dist/utils/hashcash.d.ts.map +0 -1
  210. package/dist/utils/hashcash.js +0 -27
  211. package/dist/utils/hashcash.js.map +0 -1
  212. package/dist/utils/hashcash.test.d.ts +0 -2
  213. package/dist/utils/hashcash.test.d.ts.map +0 -1
  214. package/dist/utils/hashcash.test.js +0 -40
  215. package/dist/utils/hashcash.test.js.map +0 -1
  216. package/dist/utils/retry.d.ts +0 -9
  217. package/dist/utils/retry.d.ts.map +0 -1
  218. package/dist/utils/retry.js +0 -47
  219. package/dist/utils/retry.js.map +0 -1
  220. package/dist/utils/simulate.d.ts +0 -15
  221. package/dist/utils/simulate.d.ts.map +0 -1
  222. package/dist/utils/simulate.js +0 -75
  223. package/dist/utils/simulate.js.map +0 -1
  224. package/dist/utils/simulate.test.d.ts +0 -2
  225. package/dist/utils/simulate.test.d.ts.map +0 -1
  226. package/dist/utils/simulate.test.js +0 -80
  227. package/dist/utils/simulate.test.js.map +0 -1
  228. package/dist/utils/sui.d.ts +0 -6
  229. package/dist/utils/sui.d.ts.map +0 -1
  230. package/dist/utils/sui.js +0 -28
  231. package/dist/utils/sui.js.map +0 -1
  232. package/dist/utils/sui.test.d.ts +0 -2
  233. package/dist/utils/sui.test.d.ts.map +0 -1
  234. package/dist/utils/sui.test.js +0 -58
  235. package/dist/utils/sui.test.js.map +0 -1
  236. package/dist/wallet/balance.d.ts +0 -4
  237. package/dist/wallet/balance.d.ts.map +0 -1
  238. package/dist/wallet/balance.js +0 -98
  239. package/dist/wallet/balance.js.map +0 -1
  240. package/dist/wallet/history.d.ts +0 -4
  241. package/dist/wallet/history.d.ts.map +0 -1
  242. package/dist/wallet/history.js +0 -38
  243. package/dist/wallet/history.js.map +0 -1
  244. package/dist/wallet/keyManager.d.ts +0 -9
  245. package/dist/wallet/keyManager.d.ts.map +0 -1
  246. package/dist/wallet/keyManager.js +0 -113
  247. package/dist/wallet/keyManager.js.map +0 -1
  248. package/dist/wallet/keyManager.test.d.ts +0 -2
  249. package/dist/wallet/keyManager.test.d.ts.map +0 -1
  250. package/dist/wallet/keyManager.test.js +0 -55
  251. package/dist/wallet/keyManager.test.js.map +0 -1
  252. package/dist/wallet/send.d.ts +0 -24
  253. package/dist/wallet/send.d.ts.map +0 -1
  254. package/dist/wallet/send.js +0 -95
  255. package/dist/wallet/send.js.map +0 -1
  256. package/dist/wallet/send.test.d.ts +0 -2
  257. package/dist/wallet/send.test.d.ts.map +0 -1
  258. package/dist/wallet/send.test.js +0 -69
  259. package/dist/wallet/send.test.js.map +0 -1
@@ -1,164 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { NaviAdapter } from './navi.js';
3
- import * as naviProtocol from '../protocols/navi.js';
4
- import { Transaction } from '@mysten/sui/transactions';
5
- vi.mock('../protocols/navi.js', () => ({
6
- getRates: vi.fn(),
7
- getPositions: vi.fn(),
8
- getHealthFactor: vi.fn(),
9
- buildSaveTx: vi.fn(),
10
- buildWithdrawTx: vi.fn(),
11
- buildBorrowTx: vi.fn(),
12
- buildRepayTx: vi.fn(),
13
- maxWithdrawAmount: vi.fn(),
14
- maxBorrowAmount: vi.fn(),
15
- getPendingRewards: vi.fn(),
16
- addClaimRewardsToTx: vi.fn(),
17
- }));
18
- describe('NaviAdapter', () => {
19
- let adapter;
20
- const mockClient = {};
21
- beforeEach(async () => {
22
- vi.clearAllMocks();
23
- adapter = new NaviAdapter();
24
- await adapter.init(mockClient);
25
- });
26
- it('has correct metadata', () => {
27
- expect(adapter.id).toBe('navi');
28
- expect(adapter.name).toBe('NAVI Protocol');
29
- expect(adapter.capabilities).toContain('save');
30
- expect(adapter.capabilities).toContain('withdraw');
31
- expect(adapter.capabilities).toContain('borrow');
32
- expect(adapter.capabilities).toContain('repay');
33
- expect(adapter.supportsSameAssetBorrow).toBe(true);
34
- expect(adapter.supportedAssets).toContain('USDC');
35
- });
36
- it('getRates delegates to navi protocol', async () => {
37
- const mockRates = { USDC: { saveApy: 4.5, borrowApy: 6.2 } };
38
- vi.mocked(naviProtocol.getRates).mockResolvedValue(mockRates);
39
- const result = await adapter.getRates('USDC');
40
- expect(result).toEqual({ asset: 'USDC', saveApy: 4.5, borrowApy: 6.2 });
41
- expect(naviProtocol.getRates).toHaveBeenCalledWith(mockClient);
42
- });
43
- it('getRates normalizes case-sensitive asset keys (USDe, USDsui)', async () => {
44
- const mockRates = {
45
- USDC: { saveApy: 4.5, borrowApy: 6.2 },
46
- USDT: { saveApy: 5.5, borrowApy: 7.9 },
47
- USDe: { saveApy: 0.4, borrowApy: 3.3 },
48
- USDsui: { saveApy: 1.8, borrowApy: 6.0 },
49
- };
50
- vi.mocked(naviProtocol.getRates).mockResolvedValue(mockRates);
51
- const usde = await adapter.getRates('USDe');
52
- expect(usde).toEqual({ asset: 'USDe', saveApy: 0.4, borrowApy: 3.3 });
53
- const usdsui = await adapter.getRates('USDsui');
54
- expect(usdsui).toEqual({ asset: 'USDsui', saveApy: 1.8, borrowApy: 6.0 });
55
- const usdt = await adapter.getRates('usdt');
56
- expect(usdt.asset).toBe('USDT');
57
- });
58
- it('getRates throws for unsupported asset', async () => {
59
- const mockRates = { USDC: { saveApy: 4.5, borrowApy: 6.2 } };
60
- vi.mocked(naviProtocol.getRates).mockResolvedValue(mockRates);
61
- await expect(adapter.getRates('FAKE')).rejects.toThrow('NAVI does not support');
62
- });
63
- it('getPositions maps navi positions to adapter format', async () => {
64
- vi.mocked(naviProtocol.getPositions).mockResolvedValue({
65
- positions: [
66
- { asset: 'USDC', type: 'save', amount: 100, apy: 4.5 },
67
- { asset: 'USDC', type: 'borrow', amount: 20, apy: 6.2 },
68
- ],
69
- });
70
- const result = await adapter.getPositions('0xaddr');
71
- expect(result.supplies).toHaveLength(1);
72
- expect(result.supplies[0]).toEqual({ asset: 'USDC', amount: 100, apy: 4.5 });
73
- expect(result.borrows).toHaveLength(1);
74
- expect(result.borrows[0]).toEqual({ asset: 'USDC', amount: 20, apy: 6.2 });
75
- });
76
- it('getHealth delegates to navi', async () => {
77
- const mockHF = { healthFactor: 3.5, supplied: 100, borrowed: 20, maxBorrow: 50, liquidationThreshold: 0.8 };
78
- vi.mocked(naviProtocol.getHealthFactor).mockResolvedValue(mockHF);
79
- const result = await adapter.getHealth('0xaddr');
80
- expect(result.healthFactor).toBe(3.5);
81
- });
82
- it('buildSaveTx delegates with collectFee', async () => {
83
- const tx = new Transaction();
84
- vi.mocked(naviProtocol.buildSaveTx).mockResolvedValue(tx);
85
- const result = await adapter.buildSaveTx('0xaddr', 100, 'USDC', { collectFee: true });
86
- expect(result.tx).toBe(tx);
87
- expect(naviProtocol.buildSaveTx).toHaveBeenCalledWith(mockClient, '0xaddr', 100, { collectFee: true, asset: 'USDC' });
88
- });
89
- it('buildSaveTx normalizes "usdt" to "USDT"', async () => {
90
- const tx = new Transaction();
91
- vi.mocked(naviProtocol.buildSaveTx).mockResolvedValue(tx);
92
- await adapter.buildSaveTx('0xaddr', 100, 'usdt');
93
- expect(naviProtocol.buildSaveTx).toHaveBeenCalledWith(mockClient, '0xaddr', 100, expect.objectContaining({ asset: 'USDT' }));
94
- });
95
- it('buildWithdrawTx returns effectiveAmount', async () => {
96
- const tx = new Transaction();
97
- vi.mocked(naviProtocol.buildWithdrawTx).mockResolvedValue({ tx, effectiveAmount: 95 });
98
- const result = await adapter.buildWithdrawTx('0xaddr', 100, 'USDC');
99
- expect(result.tx).toBe(tx);
100
- expect(result.effectiveAmount).toBe(95);
101
- });
102
- it('buildWithdrawTx normalizes "usde" to "USDe"', async () => {
103
- const tx = new Transaction();
104
- vi.mocked(naviProtocol.buildWithdrawTx).mockResolvedValue({ tx, effectiveAmount: 50 });
105
- await adapter.buildWithdrawTx('0xaddr', 50, 'usde');
106
- expect(naviProtocol.buildWithdrawTx).toHaveBeenCalledWith(mockClient, '0xaddr', 50, { asset: 'USDe' });
107
- });
108
- it('buildBorrowTx delegates', async () => {
109
- const tx = new Transaction();
110
- vi.mocked(naviProtocol.buildBorrowTx).mockResolvedValue(tx);
111
- const result = await adapter.buildBorrowTx('0xaddr', 50, 'USDC', { collectFee: true });
112
- expect(result.tx).toBe(tx);
113
- });
114
- it('buildRepayTx delegates', async () => {
115
- const tx = new Transaction();
116
- vi.mocked(naviProtocol.buildRepayTx).mockResolvedValue(tx);
117
- const result = await adapter.buildRepayTx('0xaddr', 20, 'USDC');
118
- expect(result.tx).toBe(tx);
119
- });
120
- it('buildRepayTx normalizes "usdsui" to "USDsui"', async () => {
121
- const tx = new Transaction();
122
- vi.mocked(naviProtocol.buildRepayTx).mockResolvedValue(tx);
123
- await adapter.buildRepayTx('0xaddr', 20, 'usdsui');
124
- expect(naviProtocol.buildRepayTx).toHaveBeenCalledWith(mockClient, '0xaddr', 20, { asset: 'USDsui' });
125
- });
126
- it('maxWithdraw delegates', async () => {
127
- const mockMax = { maxAmount: 80, healthFactorAfter: 2.0, currentHF: 3.5 };
128
- vi.mocked(naviProtocol.maxWithdrawAmount).mockResolvedValue(mockMax);
129
- const result = await adapter.maxWithdraw('0xaddr', 'USDC');
130
- expect(result.maxAmount).toBe(80);
131
- });
132
- it('maxBorrow delegates', async () => {
133
- const mockMax = { maxAmount: 40, healthFactorAfter: 1.8, currentHF: 3.5 };
134
- vi.mocked(naviProtocol.maxBorrowAmount).mockResolvedValue(mockMax);
135
- const result = await adapter.maxBorrow('0xaddr', 'USDC');
136
- expect(result.maxAmount).toBe(40);
137
- });
138
- it('getPendingRewards delegates to navi protocol', async () => {
139
- const mockRewards = [
140
- { protocol: 'navi', asset: 'USDC', coinType: '0x549::cert::CERT', symbol: 'vSUI', amount: 0, estimatedValueUsd: 0 },
141
- ];
142
- vi.mocked(naviProtocol.getPendingRewards).mockResolvedValue(mockRewards);
143
- const result = await adapter.getPendingRewards('0xaddr');
144
- expect(result).toHaveLength(1);
145
- expect(result[0].protocol).toBe('navi');
146
- expect(result[0].asset).toBe('USDC');
147
- });
148
- it('getPendingRewards returns empty when no incentives', async () => {
149
- vi.mocked(naviProtocol.getPendingRewards).mockResolvedValue([]);
150
- const result = await adapter.getPendingRewards('0xaddr');
151
- expect(result).toHaveLength(0);
152
- });
153
- it('addClaimRewardsToTx delegates to navi protocol', async () => {
154
- const mockClaimed = [
155
- { protocol: 'navi', asset: 'USDC', coinType: '0x549::cert::CERT', symbol: 'vSUI', amount: 0, estimatedValueUsd: 0 },
156
- ];
157
- vi.mocked(naviProtocol.addClaimRewardsToTx).mockResolvedValue(mockClaimed);
158
- const tx = new Transaction();
159
- const result = await adapter.addClaimRewardsToTx(tx, '0xaddr');
160
- expect(result).toHaveLength(1);
161
- expect(result[0].symbol).toBe('vSUI');
162
- });
163
- });
164
- //# sourceMappingURL=navi.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navi.test.js","sourceRoot":"","sources":["../../src/adapters/navi.test.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import type { LendingAdapter, SwapAdapter, LendingRates, SwapQuote, AdapterPositions } from './types.js';
2
- export declare class ProtocolRegistry {
3
- private lending;
4
- private swap;
5
- registerLending(adapter: LendingAdapter): void;
6
- registerSwap(adapter: SwapAdapter): void;
7
- bestSaveRate(asset: string): Promise<{
8
- adapter: LendingAdapter;
9
- rate: LendingRates;
10
- }>;
11
- bestBorrowRate(asset: string, opts?: {
12
- requireSameAssetBorrow?: boolean;
13
- }): Promise<{
14
- adapter: LendingAdapter;
15
- rate: LendingRates;
16
- }>;
17
- bestSwapQuote(from: string, to: string, amount: number): Promise<{
18
- adapter: SwapAdapter;
19
- quote: SwapQuote;
20
- }>;
21
- bestSaveRateAcrossAssets(): Promise<{
22
- adapter: LendingAdapter;
23
- rate: LendingRates;
24
- asset: string;
25
- }>;
26
- allRatesAcrossAssets(): Promise<Array<{
27
- protocol: string;
28
- protocolId: string;
29
- asset: string;
30
- rates: LendingRates;
31
- }>>;
32
- allRates(asset: string): Promise<Array<{
33
- protocol: string;
34
- protocolId: string;
35
- rates: LendingRates;
36
- }>>;
37
- allPositions(address: string): Promise<Array<{
38
- protocol: string;
39
- protocolId: string;
40
- positions: AdapterPositions;
41
- }>>;
42
- getLending(id: string): LendingAdapter | undefined;
43
- getSwap(id: string): SwapAdapter | undefined;
44
- listLending(): LendingAdapter[];
45
- listSwap(): SwapAdapter[];
46
- }
47
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAIpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,IAAI,CAAuC;IAEnD,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI9C,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIlC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAsBrF,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAuBpI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IAsB5G,wBAAwB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAsBnG,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAoBpH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IActG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAe1H,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI5C,WAAW,IAAI,cAAc,EAAE;IAI/B,QAAQ,IAAI,WAAW,EAAE;CAI1B"}
@@ -1,162 +0,0 @@
1
- import { STABLE_ASSETS, INVESTMENT_ASSETS } from '../constants.js';
2
- import { T2000Error } from '../errors.js';
3
- export class ProtocolRegistry {
4
- lending = new Map();
5
- swap = new Map();
6
- registerLending(adapter) {
7
- this.lending.set(adapter.id, adapter);
8
- }
9
- registerSwap(adapter) {
10
- this.swap.set(adapter.id, adapter);
11
- }
12
- async bestSaveRate(asset) {
13
- const candidates = [];
14
- for (const adapter of this.lending.values()) {
15
- if (!adapter.supportedAssets.includes(asset))
16
- continue;
17
- if (!adapter.capabilities.includes('save'))
18
- continue;
19
- try {
20
- const rate = await adapter.getRates(asset);
21
- candidates.push({ adapter, rate });
22
- }
23
- catch {
24
- // skip adapters that fail to fetch rates
25
- }
26
- }
27
- if (candidates.length === 0) {
28
- throw new T2000Error('ASSET_NOT_SUPPORTED', `No lending adapter supports saving ${asset}`);
29
- }
30
- candidates.sort((a, b) => b.rate.saveApy - a.rate.saveApy);
31
- return candidates[0];
32
- }
33
- async bestBorrowRate(asset, opts) {
34
- const candidates = [];
35
- for (const adapter of this.lending.values()) {
36
- if (!adapter.supportedAssets.includes(asset))
37
- continue;
38
- if (!adapter.capabilities.includes('borrow'))
39
- continue;
40
- if (opts?.requireSameAssetBorrow && !adapter.supportsSameAssetBorrow)
41
- continue;
42
- try {
43
- const rate = await adapter.getRates(asset);
44
- candidates.push({ adapter, rate });
45
- }
46
- catch {
47
- // skip
48
- }
49
- }
50
- if (candidates.length === 0) {
51
- throw new T2000Error('ASSET_NOT_SUPPORTED', `No lending adapter supports borrowing ${asset}`);
52
- }
53
- candidates.sort((a, b) => a.rate.borrowApy - b.rate.borrowApy);
54
- return candidates[0];
55
- }
56
- async bestSwapQuote(from, to, amount) {
57
- const candidates = [];
58
- for (const adapter of this.swap.values()) {
59
- const pairs = adapter.getSupportedPairs();
60
- if (!pairs.some(p => p.from === from && p.to === to))
61
- continue;
62
- try {
63
- const quote = await adapter.getQuote(from, to, amount);
64
- candidates.push({ adapter, quote });
65
- }
66
- catch {
67
- // skip
68
- }
69
- }
70
- if (candidates.length === 0) {
71
- throw new T2000Error('ASSET_NOT_SUPPORTED', `No swap adapter supports ${from} → ${to}`);
72
- }
73
- candidates.sort((a, b) => b.quote.expectedOutput - a.quote.expectedOutput);
74
- return candidates[0];
75
- }
76
- async bestSaveRateAcrossAssets() {
77
- const candidates = [];
78
- for (const asset of STABLE_ASSETS) {
79
- for (const adapter of this.lending.values()) {
80
- if (!adapter.supportedAssets.includes(asset))
81
- continue;
82
- if (!adapter.capabilities.includes('save'))
83
- continue;
84
- try {
85
- const rate = await adapter.getRates(asset);
86
- candidates.push({ adapter, rate, asset });
87
- }
88
- catch { /* skip */ }
89
- }
90
- }
91
- if (candidates.length === 0) {
92
- throw new T2000Error('ASSET_NOT_SUPPORTED', 'No lending adapter found for any stablecoin');
93
- }
94
- candidates.sort((a, b) => b.rate.saveApy - a.rate.saveApy);
95
- return candidates[0];
96
- }
97
- async allRatesAcrossAssets() {
98
- const results = [];
99
- const allAssets = [...STABLE_ASSETS, ...Object.keys(INVESTMENT_ASSETS)];
100
- const seen = new Set();
101
- for (const asset of allAssets) {
102
- if (seen.has(asset))
103
- continue;
104
- seen.add(asset);
105
- for (const adapter of this.lending.values()) {
106
- if (!adapter.supportedAssets.includes(asset))
107
- continue;
108
- try {
109
- const rates = await adapter.getRates(asset);
110
- if (rates.saveApy > 0 || rates.borrowApy > 0) {
111
- results.push({ protocol: adapter.name, protocolId: adapter.id, asset, rates });
112
- }
113
- }
114
- catch { /* skip */ }
115
- }
116
- }
117
- return results;
118
- }
119
- async allRates(asset) {
120
- const results = [];
121
- for (const adapter of this.lending.values()) {
122
- if (!adapter.supportedAssets.includes(asset))
123
- continue;
124
- try {
125
- const rates = await adapter.getRates(asset);
126
- results.push({ protocol: adapter.name, protocolId: adapter.id, rates });
127
- }
128
- catch {
129
- // skip
130
- }
131
- }
132
- return results;
133
- }
134
- async allPositions(address) {
135
- const results = [];
136
- for (const adapter of this.lending.values()) {
137
- try {
138
- const positions = await adapter.getPositions(address);
139
- if (positions.supplies.length > 0 || positions.borrows.length > 0) {
140
- results.push({ protocol: adapter.name, protocolId: adapter.id, positions });
141
- }
142
- }
143
- catch {
144
- // skip
145
- }
146
- }
147
- return results;
148
- }
149
- getLending(id) {
150
- return this.lending.get(id);
151
- }
152
- getSwap(id) {
153
- return this.swap.get(id);
154
- }
155
- listLending() {
156
- return [...this.lending.values()];
157
- }
158
- listSwap() {
159
- return [...this.swap.values()];
160
- }
161
- }
162
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=registry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.test.ts"],"names":[],"mappings":""}
@@ -1,197 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { ProtocolRegistry } from './registry.js';
3
- function mockLending(overrides = {}) {
4
- return {
5
- id: 'mock-lending',
6
- name: 'Mock Lending',
7
- version: '1.0.0',
8
- capabilities: ['save', 'withdraw', 'borrow', 'repay'],
9
- supportedAssets: ['USDC'],
10
- supportsSameAssetBorrow: true,
11
- init: vi.fn(),
12
- getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 5.0, borrowApy: 3.0 }),
13
- getPositions: vi.fn().mockResolvedValue({ supplies: [], borrows: [] }),
14
- getHealth: vi.fn().mockResolvedValue({ healthFactor: 10, supplied: 100, borrowed: 0, maxBorrow: 50, liquidationThreshold: 0.8 }),
15
- buildSaveTx: vi.fn(),
16
- buildWithdrawTx: vi.fn(),
17
- buildBorrowTx: vi.fn(),
18
- buildRepayTx: vi.fn(),
19
- maxWithdraw: vi.fn(),
20
- maxBorrow: vi.fn(),
21
- ...overrides,
22
- };
23
- }
24
- function mockSwap(overrides = {}) {
25
- return {
26
- id: 'mock-swap',
27
- name: 'Mock Swap',
28
- version: '1.0.0',
29
- capabilities: ['swap'],
30
- init: vi.fn(),
31
- getQuote: vi.fn().mockResolvedValue({ expectedOutput: 100, priceImpact: 0.01, poolPrice: 3.5 }),
32
- buildSwapTx: vi.fn(),
33
- getSupportedPairs: vi.fn().mockReturnValue([{ from: 'USDC', to: 'SUI' }, { from: 'SUI', to: 'USDC' }]),
34
- getPoolPrice: vi.fn().mockResolvedValue(3.5),
35
- ...overrides,
36
- };
37
- }
38
- describe('ProtocolRegistry', () => {
39
- let registry;
40
- beforeEach(() => {
41
- registry = new ProtocolRegistry();
42
- });
43
- describe('registration', () => {
44
- it('registers and retrieves lending adapters', () => {
45
- const adapter = mockLending({ id: 'navi' });
46
- registry.registerLending(adapter);
47
- expect(registry.getLending('navi')).toBe(adapter);
48
- expect(registry.listLending()).toHaveLength(1);
49
- });
50
- it('registers and retrieves swap adapters', () => {
51
- const adapter = mockSwap({ id: 'cetus' });
52
- registry.registerSwap(adapter);
53
- expect(registry.getSwap('cetus')).toBe(adapter);
54
- expect(registry.listSwap()).toHaveLength(1);
55
- });
56
- it('returns undefined for unknown adapters', () => {
57
- expect(registry.getLending('unknown')).toBeUndefined();
58
- expect(registry.getSwap('unknown')).toBeUndefined();
59
- });
60
- });
61
- describe('bestSaveRate', () => {
62
- it('returns adapter with highest save APY', async () => {
63
- const low = mockLending({ id: 'low', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 3.0, borrowApy: 5.0 }) });
64
- const high = mockLending({ id: 'high', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 8.0, borrowApy: 4.0 }) });
65
- registry.registerLending(low);
66
- registry.registerLending(high);
67
- const result = await registry.bestSaveRate('USDC');
68
- expect(result.adapter.id).toBe('high');
69
- expect(result.rate.saveApy).toBe(8.0);
70
- });
71
- it('skips adapters that do not support the asset', async () => {
72
- const btcOnly = mockLending({ id: 'btc', supportedAssets: ['BTC'] });
73
- const usdc = mockLending({ id: 'usdc' });
74
- registry.registerLending(btcOnly);
75
- registry.registerLending(usdc);
76
- const result = await registry.bestSaveRate('USDC');
77
- expect(result.adapter.id).toBe('usdc');
78
- });
79
- it('throws when no adapter supports the asset', async () => {
80
- registry.registerLending(mockLending({ id: 'btc', supportedAssets: ['BTC'] }));
81
- await expect(registry.bestSaveRate('USDC')).rejects.toThrow('No lending adapter supports saving USDC');
82
- });
83
- it('skips adapters that throw on getRates', async () => {
84
- const broken = mockLending({ id: 'broken', getRates: vi.fn().mockRejectedValue(new Error('rpc fail')) });
85
- const good = mockLending({ id: 'good' });
86
- registry.registerLending(broken);
87
- registry.registerLending(good);
88
- const result = await registry.bestSaveRate('USDC');
89
- expect(result.adapter.id).toBe('good');
90
- });
91
- });
92
- describe('bestBorrowRate', () => {
93
- it('returns adapter with lowest borrow APY', async () => {
94
- const expensive = mockLending({ id: 'exp', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 3.0, borrowApy: 8.0 }) });
95
- const cheap = mockLending({ id: 'cheap', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 3.0, borrowApy: 2.0 }) });
96
- registry.registerLending(expensive);
97
- registry.registerLending(cheap);
98
- const result = await registry.bestBorrowRate('USDC');
99
- expect(result.adapter.id).toBe('cheap');
100
- expect(result.rate.borrowApy).toBe(2.0);
101
- });
102
- it('filters adapters requiring same-asset borrow', async () => {
103
- const noSame = mockLending({ id: 'suilend', supportsSameAssetBorrow: false });
104
- const yesSame = mockLending({ id: 'navi', supportsSameAssetBorrow: true });
105
- registry.registerLending(noSame);
106
- registry.registerLending(yesSame);
107
- const result = await registry.bestBorrowRate('USDC', { requireSameAssetBorrow: true });
108
- expect(result.adapter.id).toBe('navi');
109
- });
110
- });
111
- describe('bestSwapQuote', () => {
112
- it('returns adapter with best output', async () => {
113
- const worse = mockSwap({ id: 'worse', getQuote: vi.fn().mockResolvedValue({ expectedOutput: 90, priceImpact: 0.02, poolPrice: 3.5 }) });
114
- const better = mockSwap({ id: 'better', getQuote: vi.fn().mockResolvedValue({ expectedOutput: 100, priceImpact: 0.01, poolPrice: 3.5 }) });
115
- registry.registerSwap(worse);
116
- registry.registerSwap(better);
117
- const result = await registry.bestSwapQuote('USDC', 'SUI', 100);
118
- expect(result.adapter.id).toBe('better');
119
- expect(result.quote.expectedOutput).toBe(100);
120
- });
121
- it('throws when no adapter supports the pair', async () => {
122
- registry.registerSwap(mockSwap({ getSupportedPairs: vi.fn().mockReturnValue([{ from: 'USDC', to: 'SUI' }]) }));
123
- await expect(registry.bestSwapQuote('BTC', 'ETH', 1)).rejects.toThrow('No swap adapter supports BTC → ETH');
124
- });
125
- });
126
- describe('allRates', () => {
127
- it('returns rates from all supporting adapters', async () => {
128
- const a = mockLending({ id: 'a', name: 'Alpha', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 5, borrowApy: 3 }) });
129
- const b = mockLending({ id: 'b', name: 'Beta', getRates: vi.fn().mockResolvedValue({ asset: 'USDC', saveApy: 7, borrowApy: 4 }) });
130
- registry.registerLending(a);
131
- registry.registerLending(b);
132
- const rates = await registry.allRates('USDC');
133
- expect(rates).toHaveLength(2);
134
- expect(rates[0].protocolId).toBe('a');
135
- expect(rates[1].protocolId).toBe('b');
136
- });
137
- });
138
- describe('allPositions', () => {
139
- it('returns positions from adapters with active positions', async () => {
140
- const withPos = mockLending({
141
- id: 'has',
142
- name: 'Has Positions',
143
- getPositions: vi.fn().mockResolvedValue({
144
- supplies: [{ asset: 'USDC', amount: 100, apy: 5 }],
145
- borrows: [],
146
- }),
147
- });
148
- const empty = mockLending({
149
- id: 'empty',
150
- name: 'Empty',
151
- getPositions: vi.fn().mockResolvedValue({ supplies: [], borrows: [] }),
152
- });
153
- registry.registerLending(withPos);
154
- registry.registerLending(empty);
155
- const result = await registry.allPositions('0xabc');
156
- expect(result).toHaveLength(1);
157
- expect(result[0].protocolId).toBe('has');
158
- });
159
- });
160
- describe('bestSaveRateAcrossAssets', () => {
161
- it('finds best rate across all stablecoins', async () => {
162
- const navi = mockLending({
163
- id: 'navi',
164
- name: 'NAVI',
165
- supportedAssets: ['USDC', 'USDT', 'USDe', 'USDsui'],
166
- getRates: vi.fn().mockImplementation((asset) => {
167
- if (asset === 'USDT')
168
- return Promise.resolve({ asset, saveApy: 8.5, borrowApy: 5 });
169
- return Promise.resolve({ asset, saveApy: 4.0, borrowApy: 6 });
170
- }),
171
- });
172
- registry.registerLending(navi);
173
- const result = await registry.bestSaveRateAcrossAssets();
174
- expect(result.asset).toBe('USDT');
175
- expect(result.rate.saveApy).toBe(8.5);
176
- });
177
- it('throws when no adapters registered', async () => {
178
- await expect(registry.bestSaveRateAcrossAssets()).rejects.toThrow();
179
- });
180
- });
181
- describe('allRatesAcrossAssets', () => {
182
- it('returns rates for all supported assets', async () => {
183
- const adapter = mockLending({
184
- id: 'multi',
185
- name: 'Multi',
186
- supportedAssets: ['USDC', 'USDT'],
187
- getRates: vi.fn().mockImplementation((asset) => Promise.resolve({ asset, saveApy: asset === 'USDT' ? 7 : 4, borrowApy: 5 })),
188
- });
189
- registry.registerLending(adapter);
190
- const results = await registry.allRatesAcrossAssets();
191
- expect(results.length).toBeGreaterThanOrEqual(2);
192
- expect(results.some(r => r.asset === 'USDC')).toBe(true);
193
- expect(results.some(r => r.asset === 'USDT')).toBe(true);
194
- });
195
- });
196
- });
197
- //# sourceMappingURL=registry.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/adapters/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,SAAS,WAAW,CAAC,YAAqC,EAAE;IAC1D,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAiC;QACrF,eAAe,EAAE,CAAC,MAAM,CAAsB;QAC9C,uBAAuB,EAAE,IAAI;QAC7B,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QACpF,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACtE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAChI,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;QACxB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;QACtB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;QAClB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,YAAkC,EAAE;IACpD,OAAO;QACL,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,MAAM,CAAiC;QACtD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC/F,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtG,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAC5C,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,QAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1C,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YACvD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7H,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/H,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9B,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YACzG,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACjC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnI,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACjI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACpC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEhC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACjC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAElC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;YACvF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACxI,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3I,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/G,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpI,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnI,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5B,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE5B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,OAAO,GAAG,WAAW,CAAC;gBAC1B,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,eAAe;gBACrB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;oBACtC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBAClD,OAAO,EAAE,EAAE;iBACZ,CAAC;aACH,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,WAAW,CAAC;gBACxB,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;aACvE,CAAC,CAAC;YACH,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEhC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,IAAI,GAAG,WAAW,CAAC;gBACvB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,MAAM;gBACZ,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnD,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAa,EAAE,EAAE;oBACrD,IAAI,KAAK,KAAK,MAAM;wBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpF,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC,CAAC;aACH,CAAC,CAAC;YACH,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,OAAO,GAAG,WAAW,CAAC;gBAC1B,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,OAAO;gBACb,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAa,EAAE,EAAE,CACrD,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAC5E;aACF,CAAC,CAAC;YACH,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAElC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}