@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,220 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Transaction } from '@mysten/sui/transactions';
3
- import { T2000Error } from '../errors.js';
4
- // Mock all external dependencies before importing the module under test
5
- vi.mock('./autoTopUp.js', () => ({
6
- shouldAutoTopUp: vi.fn(),
7
- executeAutoTopUp: vi.fn(),
8
- }));
9
- vi.mock('./gasStation.js', () => ({
10
- requestGasSponsorship: vi.fn(),
11
- reportGasUsage: vi.fn(),
12
- }));
13
- // Import after mocks are set up
14
- import { executeWithGas } from './manager.js';
15
- import { shouldAutoTopUp, executeAutoTopUp } from './autoTopUp.js';
16
- import { requestGasSponsorship } from './gasStation.js';
17
- const MOCK_DIGEST = 'MockTxDigest123456789';
18
- const MOCK_EFFECTS = {
19
- gasUsed: {
20
- computationCost: '1000000',
21
- storageCost: '2000000',
22
- storageRebate: '500000',
23
- },
24
- };
25
- function mockClient(suiBalance) {
26
- return {
27
- getBalance: vi.fn().mockResolvedValue({ totalBalance: suiBalance.toString() }),
28
- signAndExecuteTransaction: vi.fn().mockResolvedValue({
29
- digest: MOCK_DIGEST,
30
- effects: MOCK_EFFECTS,
31
- }),
32
- executeTransactionBlock: vi.fn().mockResolvedValue({
33
- digest: MOCK_DIGEST,
34
- effects: MOCK_EFFECTS,
35
- }),
36
- waitForTransaction: vi.fn().mockResolvedValue({}),
37
- };
38
- }
39
- function mockKeypair() {
40
- return {
41
- getPublicKey: () => ({
42
- toSuiAddress: () => '0x' + 'a'.repeat(64),
43
- }),
44
- signTransaction: vi.fn().mockResolvedValue({ signature: 'mock-sig' }),
45
- };
46
- }
47
- function buildTx() {
48
- const tx = new Transaction();
49
- return tx;
50
- }
51
- describe('executeWithGas', () => {
52
- beforeEach(() => {
53
- vi.clearAllMocks();
54
- });
55
- describe('Step 1: Self-funded', () => {
56
- it('uses self-funded when SUI balance >= 0.05', async () => {
57
- const client = mockClient(100000000n); // 0.1 SUI
58
- const keypair = mockKeypair();
59
- const result = await executeWithGas(client, keypair, () => buildTx());
60
- expect(result.gasMethod).toBe('self-funded');
61
- expect(result.digest).toBe(MOCK_DIGEST);
62
- expect(result.gasCostSui).toBeGreaterThan(0);
63
- });
64
- it('skips self-funded when SUI balance < 0.05', async () => {
65
- const client = mockClient(1000000n); // 0.001 SUI — too low
66
- const keypair = mockKeypair();
67
- vi.mocked(shouldAutoTopUp).mockResolvedValue(true);
68
- vi.mocked(executeAutoTopUp).mockResolvedValue({
69
- success: true,
70
- tx: 'topup-digest',
71
- usdcSpent: 1,
72
- suiReceived: 0.3,
73
- });
74
- // After topup, balance check will still use the mock that returns low balance
75
- // but the second signAndExecuteTransaction call will succeed
76
- // We need the getBalance mock to return enough after topup
77
- const balanceMock = vi.fn()
78
- .mockResolvedValueOnce({ totalBalance: '1000000' }) // Step 1: too low
79
- .mockResolvedValueOnce({ totalBalance: '1000000' }) // shouldAutoTopUp check
80
- .mockResolvedValueOnce({ totalBalance: '1000000' }) // shouldAutoTopUp check (USDC)
81
- .mockResolvedValueOnce({ totalBalance: '100000000' }); // Step 2: after topup, enough
82
- client.getBalance = balanceMock;
83
- const result = await executeWithGas(client, keypair, () => buildTx());
84
- expect(result.gasMethod).toBe('auto-topup');
85
- });
86
- });
87
- describe('Step 2: Auto-topup', () => {
88
- it('swaps USDC→SUI then executes self-funded', async () => {
89
- const client = mockClient(1000000n); // low SUI
90
- const keypair = mockKeypair();
91
- vi.mocked(shouldAutoTopUp).mockResolvedValue(true);
92
- vi.mocked(executeAutoTopUp).mockResolvedValue({
93
- success: true,
94
- tx: 'topup-digest',
95
- usdcSpent: 1,
96
- suiReceived: 0.3,
97
- });
98
- const result = await executeWithGas(client, keypair, () => buildTx());
99
- expect(vi.mocked(executeAutoTopUp)).toHaveBeenCalledOnce();
100
- expect(result.gasMethod).toBe('auto-topup');
101
- expect(result.digest).toBe(MOCK_DIGEST);
102
- });
103
- it('falls through to sponsored when auto-topup fails', async () => {
104
- const client = mockClient(1000000n); // low SUI
105
- const keypair = mockKeypair();
106
- vi.mocked(shouldAutoTopUp).mockResolvedValue(true);
107
- vi.mocked(executeAutoTopUp).mockRejectedValue(new Error('auto-topup failed'));
108
- // Setup sponsored path
109
- vi.mocked(requestGasSponsorship).mockResolvedValue({
110
- txBytes: Buffer.from('mock-tx').toString('base64'),
111
- sponsorSignature: 'mock-sponsor-sig',
112
- type: 'fallback',
113
- });
114
- // buildTx for sponsored path calls tx.build() which needs client
115
- // We mock the sponsored path to succeed
116
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
117
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
118
- const result = await executeWithGas(client, keypair, () => buildTx());
119
- expect(result.gasMethod).toBe('sponsored');
120
- buildSpy.mockRestore();
121
- });
122
- it('skips auto-topup when shouldAutoTopUp returns false', async () => {
123
- const client = mockClient(1000000n); // low SUI
124
- const keypair = mockKeypair();
125
- vi.mocked(shouldAutoTopUp).mockResolvedValue(false);
126
- // Sponsored path
127
- vi.mocked(requestGasSponsorship).mockResolvedValue({
128
- txBytes: Buffer.from('mock-tx').toString('base64'),
129
- sponsorSignature: 'mock-sponsor-sig',
130
- type: 'fallback',
131
- });
132
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
133
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
134
- const result = await executeWithGas(client, keypair, () => buildTx());
135
- expect(vi.mocked(executeAutoTopUp)).not.toHaveBeenCalled();
136
- expect(result.gasMethod).toBe('sponsored');
137
- buildSpy.mockRestore();
138
- });
139
- });
140
- describe('Step 3: Sponsored', () => {
141
- it('uses gas station when self-funded and auto-topup both fail', async () => {
142
- const client = mockClient(1000000n); // low SUI
143
- const keypair = mockKeypair();
144
- vi.mocked(shouldAutoTopUp).mockResolvedValue(false);
145
- vi.mocked(requestGasSponsorship).mockResolvedValue({
146
- txBytes: Buffer.from('mock-tx').toString('base64'),
147
- sponsorSignature: 'mock-sponsor-sig',
148
- type: 'fallback',
149
- });
150
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
151
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
152
- const result = await executeWithGas(client, keypair, () => buildTx());
153
- expect(result.gasMethod).toBe('sponsored');
154
- expect(vi.mocked(requestGasSponsorship)).toHaveBeenCalledOnce();
155
- buildSpy.mockRestore();
156
- });
157
- });
158
- describe('Step 4: All methods exhausted', () => {
159
- it('throws INSUFFICIENT_GAS when all methods fail', async () => {
160
- const client = mockClient(1000000n); // low SUI
161
- const keypair = mockKeypair();
162
- vi.mocked(shouldAutoTopUp).mockResolvedValue(false);
163
- vi.mocked(requestGasSponsorship).mockRejectedValue(new Error('gas station down'));
164
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
165
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
166
- await expect(executeWithGas(client, keypair, () => buildTx())).rejects.toThrow('No SUI for gas');
167
- buildSpy.mockRestore();
168
- });
169
- it('error has correct code', async () => {
170
- const client = mockClient(1000000n);
171
- const keypair = mockKeypair();
172
- vi.mocked(shouldAutoTopUp).mockResolvedValue(false);
173
- vi.mocked(requestGasSponsorship).mockRejectedValue(new Error('down'));
174
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
175
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
176
- try {
177
- await executeWithGas(client, keypair, () => buildTx());
178
- expect.unreachable('should have thrown');
179
- }
180
- catch (err) {
181
- expect(err).toBeInstanceOf(T2000Error);
182
- expect(err.code).toBe('INSUFFICIENT_GAS');
183
- }
184
- buildSpy.mockRestore();
185
- });
186
- });
187
- describe('buildTx callback', () => {
188
- it('calls buildTx fresh for each gas strategy attempt', async () => {
189
- const client = mockClient(1000000n); // low SUI — skip step 1
190
- const keypair = mockKeypair();
191
- let buildCount = 0;
192
- vi.mocked(shouldAutoTopUp).mockResolvedValue(false);
193
- vi.mocked(requestGasSponsorship).mockResolvedValue({
194
- txBytes: Buffer.from('mock-tx').toString('base64'),
195
- sponsorSignature: 'mock-sponsor-sig',
196
- type: 'fallback',
197
- });
198
- const buildSpy = vi.spyOn(Transaction.prototype, 'build')
199
- .mockResolvedValue(new Uint8Array([1, 2, 3]));
200
- await executeWithGas(client, keypair, () => {
201
- buildCount++;
202
- return buildTx();
203
- });
204
- // Called once for step 1 (fails), once for step 2 (skipped via shouldAutoTopUp=false),
205
- // once for step 3 (sponsored succeeds)
206
- expect(buildCount).toBeGreaterThanOrEqual(2);
207
- buildSpy.mockRestore();
208
- });
209
- });
210
- describe('extractGasCost', () => {
211
- it('correctly calculates gas cost from effects', async () => {
212
- const client = mockClient(100000000n);
213
- const keypair = mockKeypair();
214
- const result = await executeWithGas(client, keypair, () => buildTx());
215
- // (1000000 + 2000000 - 500000) / 1e9 = 0.0025
216
- expect(result.gasCostSui).toBeCloseTo(0.0025, 6);
217
- });
218
- });
219
- });
220
- //# sourceMappingURL=manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../src/gas/manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=serialization.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialization.test.d.ts","sourceRoot":"","sources":["../../src/gas/serialization.test.ts"],"names":[],"mappings":""}
@@ -1,47 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { Transaction } from '@mysten/sui/transactions';
3
- describe('Transaction serialization roundtrip', () => {
4
- it('serialize() returns a JSON string (not bytes)', () => {
5
- const tx = new Transaction();
6
- tx.setSender('0x' + 'a'.repeat(64));
7
- const serialized = tx.serialize();
8
- expect(typeof serialized).toBe('string');
9
- expect(() => JSON.parse(serialized)).not.toThrow();
10
- });
11
- it('Transaction.from(jsonString) reconstructs from serialize()', () => {
12
- const tx = new Transaction();
13
- tx.setSender('0x' + 'a'.repeat(64));
14
- const serialized = tx.serialize();
15
- const restored = Transaction.from(serialized);
16
- expect(restored).toBeInstanceOf(Transaction);
17
- });
18
- it('roundtrip preserves sender', () => {
19
- const address = '0x' + 'b'.repeat(64);
20
- const tx = new Transaction();
21
- tx.setSender(address);
22
- const serialized = tx.serialize();
23
- const restored = Transaction.from(serialized);
24
- const reserialized = restored.serialize();
25
- expect(JSON.parse(reserialized).sender).toBe(address);
26
- });
27
- it('Transaction.from(Buffer) treats input as BCS (NOT JSON)', () => {
28
- const tx = new Transaction();
29
- tx.setSender('0x' + 'a'.repeat(64));
30
- const serialized = tx.serialize();
31
- // Passing a Buffer (Uint8Array) makes Transaction.from try BCS deserialization
32
- // which fails because JSON bytes aren't valid BCS — this is the bug we fixed
33
- const buf = Buffer.from(serialized);
34
- expect(() => Transaction.from(buf)).toThrow();
35
- });
36
- it('tx.serialize() is safe to embed in JSON request body', () => {
37
- const tx = new Transaction();
38
- tx.setSender('0x' + 'c'.repeat(64));
39
- const serialized = tx.serialize();
40
- const requestBody = JSON.stringify({ txJson: serialized, sender: '0x' + 'c'.repeat(64) });
41
- const parsed = JSON.parse(requestBody);
42
- expect(typeof parsed.txJson).toBe('string');
43
- const restored = Transaction.from(parsed.txJson);
44
- expect(restored).toBeInstanceOf(Transaction);
45
- });
46
- });
47
- //# sourceMappingURL=serialization.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialization.test.js","sourceRoot":"","sources":["../../src/gas/serialization.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=invest.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invest.test.d.ts","sourceRoot":"","sources":["../src/invest.test.ts"],"names":[],"mappings":""}
@@ -1,256 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { PortfolioManager } from './portfolio.js';
3
- import { INVESTMENT_ASSETS, GAS_RESERVE_MIN } from './constants.js';
4
- import * as os from 'os';
5
- import * as path from 'path';
6
- import * as fs from 'fs';
7
- function tmpDir() {
8
- const dir = path.join(os.tmpdir(), `invest-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
9
- fs.mkdirSync(dir, { recursive: true });
10
- return dir;
11
- }
12
- describe('investBuy validation', () => {
13
- it('rejects amount = 0', () => {
14
- expect(() => {
15
- if (0 <= 0 || !isFinite(0))
16
- throw new Error('INVALID_AMOUNT');
17
- }).toThrow('INVALID_AMOUNT');
18
- });
19
- it('rejects negative amount', () => {
20
- expect(() => {
21
- const amount = -50;
22
- if (amount <= 0 || !isFinite(amount))
23
- throw new Error('INVALID_AMOUNT');
24
- }).toThrow('INVALID_AMOUNT');
25
- });
26
- it('rejects NaN amount', () => {
27
- expect(() => {
28
- const amount = NaN;
29
- if (!amount || amount <= 0 || !isFinite(amount))
30
- throw new Error('INVALID_AMOUNT');
31
- }).toThrow('INVALID_AMOUNT');
32
- });
33
- it('rejects Infinity amount', () => {
34
- expect(() => {
35
- const amount = Infinity;
36
- if (!amount || amount <= 0 || !isFinite(amount))
37
- throw new Error('INVALID_AMOUNT');
38
- }).toThrow('INVALID_AMOUNT');
39
- });
40
- it('accepts valid positive amount', () => {
41
- const amount = 100;
42
- expect(amount > 0 && isFinite(amount)).toBe(true);
43
- });
44
- });
45
- describe('investSell validation', () => {
46
- it('rejects amount = 0 (non-all)', () => {
47
- expect(() => {
48
- const amount = 0;
49
- if (amount <= 0 || !isFinite(amount))
50
- throw new Error('INVALID_AMOUNT');
51
- }).toThrow('INVALID_AMOUNT');
52
- });
53
- it('allows "all" without numeric validation', () => {
54
- const usdAmount = 'all';
55
- expect(usdAmount).toBe('all');
56
- });
57
- it('caps sell to position amount', () => {
58
- const positionAmount = 50;
59
- const requestedSell = 200;
60
- const capped = Math.min(requestedSell, positionAmount);
61
- expect(capped).toBe(50);
62
- });
63
- });
64
- describe('swap-returns-zero guard', () => {
65
- it('detects toAmount = 0 (division by zero prevention)', () => {
66
- const toAmount = 0;
67
- expect(toAmount === 0).toBe(true);
68
- if (toAmount !== 0) {
69
- const price = 100 / toAmount;
70
- expect(price).toBe(Infinity);
71
- }
72
- });
73
- });
74
- describe('investment locking guard', () => {
75
- let pm;
76
- let dir;
77
- beforeEach(() => {
78
- dir = tmpDir();
79
- pm = new PortfolioManager(dir);
80
- });
81
- it('blocks sending invested SUI', () => {
82
- pm.recordBuy({
83
- id: 'buy1', type: 'buy', asset: 'SUI',
84
- amount: 100, price: 1.0, usdValue: 100,
85
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
86
- });
87
- const pos = pm.getPosition('SUI');
88
- const invested = pos?.totalAmount ?? 0;
89
- const walletSui = 105;
90
- const freeSui = Math.max(0, walletSui - invested - GAS_RESERVE_MIN);
91
- expect(freeSui).toBeCloseTo(4.95);
92
- expect(50 > freeSui).toBe(true);
93
- });
94
- it('allows sending free SUI when wallet has more than invested', () => {
95
- pm.recordBuy({
96
- id: 'buy1', type: 'buy', asset: 'SUI',
97
- amount: 50, price: 1.0, usdValue: 50,
98
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
99
- });
100
- const walletSui = 110;
101
- const invested = pm.getPosition('SUI')?.totalAmount ?? 0;
102
- const freeSui = Math.max(0, walletSui - invested - GAS_RESERVE_MIN);
103
- expect(freeSui).toBeCloseTo(59.95);
104
- expect(30 <= freeSui).toBe(true);
105
- });
106
- it('no guard needed for USDC (not investment asset)', () => {
107
- expect('USDC' in INVESTMENT_ASSETS).toBe(false);
108
- });
109
- it('guard applies to all investment assets', () => {
110
- expect('SUI' in INVESTMENT_ASSETS).toBe(true);
111
- expect('BTC' in INVESTMENT_ASSETS).toBe(true);
112
- expect('ETH' in INVESTMENT_ASSETS).toBe(true);
113
- expect('GOLD' in INVESTMENT_ASSETS).toBe(true);
114
- });
115
- it('blocks exchange of invested SUI', () => {
116
- pm.recordBuy({
117
- id: 'buy1', type: 'buy', asset: 'SUI',
118
- amount: 100, price: 1.0, usdValue: 100,
119
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
120
- });
121
- const walletSui = 100.05;
122
- const invested = pm.getPosition('SUI')?.totalAmount ?? 0;
123
- const freeSui = Math.max(0, walletSui - invested - GAS_RESERVE_MIN);
124
- expect(freeSui).toBe(0);
125
- expect(50 > freeSui).toBe(true);
126
- });
127
- it('allows exchange in buy direction (USDC→SUI)', () => {
128
- const fromAsset = 'USDC';
129
- expect(fromAsset in INVESTMENT_ASSETS).toBe(false);
130
- });
131
- });
132
- describe('portfolio wallet clamping', () => {
133
- let pm;
134
- let dir;
135
- beforeEach(() => {
136
- dir = tmpDir();
137
- pm = new PortfolioManager(dir);
138
- });
139
- it('clamps totalAmount when wallet has less than tracked', () => {
140
- pm.recordBuy({
141
- id: 'buy1', type: 'buy', asset: 'SUI',
142
- amount: 100, price: 1.0, usdValue: 100,
143
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
144
- });
145
- const pos = pm.getPosition('SUI');
146
- const walletSui = 80;
147
- const gasReserve = GAS_RESERVE_MIN;
148
- const actualHeld = Math.max(0, walletSui - gasReserve);
149
- const clampedAmount = Math.min(pos.totalAmount, actualHeld);
150
- expect(clampedAmount).toBeCloseTo(79.95);
151
- expect(clampedAmount).toBeLessThan(pos.totalAmount);
152
- });
153
- it('scales costBasis proportionally when clamped', () => {
154
- pm.recordBuy({
155
- id: 'buy1', type: 'buy', asset: 'SUI',
156
- amount: 100, price: 1.0, usdValue: 100,
157
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
158
- });
159
- const pos = pm.getPosition('SUI');
160
- const walletSui = 50;
161
- const actualHeld = Math.max(0, walletSui - GAS_RESERVE_MIN);
162
- const ratio = actualHeld / pos.totalAmount;
163
- const scaledCostBasis = pos.costBasis * ratio;
164
- expect(scaledCostBasis).toBeCloseTo(49.95);
165
- expect(scaledCostBasis).toBeLessThan(pos.costBasis);
166
- });
167
- it('no clamping when wallet has enough', () => {
168
- pm.recordBuy({
169
- id: 'buy1', type: 'buy', asset: 'SUI',
170
- amount: 50, price: 1.0, usdValue: 50,
171
- fee: 0, tx: '0x1', timestamp: new Date().toISOString(),
172
- });
173
- const pos = pm.getPosition('SUI');
174
- const walletSui = 100;
175
- const actualHeld = Math.max(0, walletSui - GAS_RESERVE_MIN);
176
- const clampedAmount = Math.min(pos.totalAmount, actualHeld);
177
- expect(clampedAmount).toBe(pos.totalAmount);
178
- });
179
- });
180
- describe('balance costBasis scaling', () => {
181
- it('scales costBasis when gas erodes investment SUI', () => {
182
- const posTotal = 100;
183
- const posCostBasis = 100;
184
- const gasReserveSui = 90;
185
- const actualHeld = Math.min(posTotal, gasReserveSui);
186
- let investmentCostBasis;
187
- if (actualHeld < posTotal && posTotal > 0) {
188
- investmentCostBasis = posCostBasis * (actualHeld / posTotal);
189
- }
190
- else {
191
- investmentCostBasis = posCostBasis;
192
- }
193
- expect(investmentCostBasis).toBe(90);
194
- });
195
- it('uses full costBasis when no gas erosion', () => {
196
- const posTotal = 100;
197
- const posCostBasis = 200;
198
- const gasReserveSui = 150;
199
- const actualHeld = Math.min(posTotal, gasReserveSui);
200
- let investmentCostBasis;
201
- if (actualHeld < posTotal && posTotal > 0) {
202
- investmentCostBasis = posCostBasis * (actualHeld / posTotal);
203
- }
204
- else {
205
- investmentCostBasis = posCostBasis;
206
- }
207
- expect(investmentCostBasis).toBe(200);
208
- });
209
- });
210
- describe('price unavailable handling', () => {
211
- it('returns 0 P&L when price is 0 (not -100%)', () => {
212
- const currentPrice = 0;
213
- const totalAmount = 100;
214
- const costBasis = 100;
215
- const currentValue = totalAmount * currentPrice;
216
- const unrealizedPnL = currentPrice > 0 ? currentValue - costBasis : 0;
217
- const unrealizedPnLPct = currentPrice > 0 && costBasis > 0 ? (unrealizedPnL / costBasis) * 100 : 0;
218
- expect(unrealizedPnL).toBe(0);
219
- expect(unrealizedPnLPct).toBe(0);
220
- expect(currentValue).toBe(0);
221
- });
222
- it('calculates normal P&L when price available', () => {
223
- const currentPrice = 1.1;
224
- const totalAmount = 100;
225
- const costBasis = 100;
226
- const currentValue = totalAmount * currentPrice;
227
- const unrealizedPnL = currentPrice > 0 ? currentValue - costBasis : 0;
228
- const unrealizedPnLPct = currentPrice > 0 && costBasis > 0 ? (unrealizedPnL / costBasis) * 100 : 0;
229
- expect(unrealizedPnL).toBeCloseTo(10);
230
- expect(unrealizedPnLPct).toBeCloseTo(10);
231
- });
232
- });
233
- describe('registry-driven assets', () => {
234
- it('INVESTMENT_ASSETS contains SUI, BTC, ETH, GOLD', () => {
235
- expect(Object.keys(INVESTMENT_ASSETS)).toContain('SUI');
236
- expect(Object.keys(INVESTMENT_ASSETS)).toContain('BTC');
237
- expect(Object.keys(INVESTMENT_ASSETS)).toContain('ETH');
238
- expect(Object.keys(INVESTMENT_ASSETS)).toContain('GOLD');
239
- });
240
- it('stablecoins are not investment assets', () => {
241
- expect('USDC' in INVESTMENT_ASSETS).toBe(false);
242
- expect('USDT' in INVESTMENT_ASSETS).toBe(false);
243
- });
244
- it('gas reserve only applies to SUI', () => {
245
- for (const asset of Object.keys(INVESTMENT_ASSETS)) {
246
- const gasReserve = asset === 'SUI' ? GAS_RESERVE_MIN : 0;
247
- if (asset === 'SUI') {
248
- expect(gasReserve).toBe(GAS_RESERVE_MIN);
249
- }
250
- else {
251
- expect(gasReserve).toBe(0);
252
- }
253
- }
254
- });
255
- });
256
- //# sourceMappingURL=invest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invest.test.js","sourceRoot":"","sources":["../src/invest.test.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import type { InvestmentTrade } from './types.js';
2
- interface StoredPosition {
3
- totalAmount: number;
4
- costBasis: number;
5
- avgPrice: number;
6
- trades: InvestmentTrade[];
7
- earning?: boolean;
8
- earningProtocol?: string;
9
- earningApy?: number;
10
- }
11
- export declare class PortfolioManager {
12
- private data;
13
- private readonly filePath;
14
- private readonly dir;
15
- constructor(configDir?: string);
16
- private load;
17
- private save;
18
- recordBuy(trade: InvestmentTrade): void;
19
- recordSell(trade: InvestmentTrade): number;
20
- getPosition(asset: string): StoredPosition | undefined;
21
- getPositions(): Array<{
22
- asset: string;
23
- } & StoredPosition>;
24
- recordEarn(asset: string, protocol: string, apy: number): void;
25
- recordUnearn(asset: string): void;
26
- closePosition(asset: string): void;
27
- isEarning(asset: string): boolean;
28
- getRealizedPnL(): number;
29
- recordStrategyBuy(strategyKey: string, trade: InvestmentTrade): void;
30
- recordStrategySell(strategyKey: string, trade: InvestmentTrade): number;
31
- getStrategyPositions(strategyKey: string): Array<{
32
- asset: string;
33
- } & StoredPosition>;
34
- getAllStrategyKeys(): string[];
35
- clearStrategy(strategyKey: string): void;
36
- hasStrategyPositions(strategyKey: string): boolean;
37
- }
38
- export {};
39
- //# sourceMappingURL=portfolio.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../src/portfolio.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,SAAS,CAAC,EAAE,MAAM;IAM9B,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAKZ,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAavC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;IA8B1C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKtD,YAAY,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC;IAOzD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAa9D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAajC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAelC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMjC,cAAc,IAAI,MAAM;IAOxB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAiBpE,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAyCvE,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC;IASpF,kBAAkB,IAAI,MAAM,EAAE;IAK9B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMxC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAMnD"}