@lagoon-protocol/lagoon-mcp 0.1.0 → 0.1.1

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 (38) hide show
  1. package/dist/sdk/apr-service.d.ts +1 -2
  2. package/dist/sdk/apr-service.d.ts.map +1 -1
  3. package/dist/sdk/apr-service.js.map +1 -1
  4. package/dist/tools/optimize-portfolio.js +2 -2
  5. package/dist/tools/optimize-portfolio.js.map +1 -1
  6. package/package.json +1 -1
  7. package/dist/graphql/fragments.d.ts +0 -183
  8. package/dist/graphql/fragments.d.ts.map +0 -1
  9. package/dist/graphql/fragments.js +0 -297
  10. package/dist/graphql/fragments.js.map +0 -1
  11. package/dist/graphql/queries/period-summaries.d.ts +0 -15
  12. package/dist/graphql/queries/period-summaries.d.ts.map +0 -1
  13. package/dist/graphql/queries/period-summaries.js +0 -24
  14. package/dist/graphql/queries/period-summaries.js.map +0 -1
  15. package/dist/sdk/__tests__/apr-service.test.d.ts +0 -7
  16. package/dist/sdk/__tests__/apr-service.test.d.ts.map +0 -1
  17. package/dist/sdk/__tests__/apr-service.test.js +0 -385
  18. package/dist/sdk/__tests__/apr-service.test.js.map +0 -1
  19. package/dist/sdk/__tests__/math-utils.test.d.ts +0 -7
  20. package/dist/sdk/__tests__/math-utils.test.d.ts.map +0 -1
  21. package/dist/sdk/__tests__/math-utils.test.js +0 -185
  22. package/dist/sdk/__tests__/math-utils.test.js.map +0 -1
  23. package/dist/sdk/__tests__/simulation-service.test.d.ts +0 -5
  24. package/dist/sdk/__tests__/simulation-service.test.d.ts.map +0 -1
  25. package/dist/sdk/__tests__/simulation-service.test.js +0 -397
  26. package/dist/sdk/__tests__/simulation-service.test.js.map +0 -1
  27. package/dist/sdk/__tests__/vault-utils.test.d.ts +0 -7
  28. package/dist/sdk/__tests__/vault-utils.test.d.ts.map +0 -1
  29. package/dist/sdk/__tests__/vault-utils.test.js +0 -189
  30. package/dist/sdk/__tests__/vault-utils.test.js.map +0 -1
  31. package/dist/tools/__tests__/simulate-vault.test.d.ts +0 -5
  32. package/dist/tools/__tests__/simulate-vault.test.d.ts.map +0 -1
  33. package/dist/tools/__tests__/simulate-vault.test.js +0 -363
  34. package/dist/tools/__tests__/simulate-vault.test.js.map +0 -1
  35. package/dist/tools/index.d.ts +0 -26
  36. package/dist/tools/index.d.ts.map +0 -1
  37. package/dist/tools/index.js +0 -32
  38. package/dist/tools/index.js.map +0 -1
@@ -1,24 +0,0 @@
1
- /**
2
- * GraphQL Query: Period Summaries
3
- *
4
- * Fetch historical vault period summaries for APR calculations.
5
- */
6
- import { gql } from 'graphql-request';
7
- /**
8
- * Query to fetch period summaries for a vault
9
- *
10
- * Period summaries contain historical snapshots of vault state at regular intervals.
11
- * Used by SDK to calculate accurate APR from price per share changes over time.
12
- *
13
- * @returns Array of period summaries with timestamp and vault state
14
- */
15
- export const GET_PERIOD_SUMMARIES_QUERY = gql `
16
- query GetPeriodSummaries($vaultAddress: String!, $chainId: Int!) {
17
- periodSummaries(vaultAddress: $vaultAddress, chainId: $chainId) {
18
- timestamp
19
- totalAssetsAtStart
20
- totalSupplyAtStart
21
- }
22
- }
23
- `;
24
- //# sourceMappingURL=period-summaries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"period-summaries.js","sourceRoot":"","sources":["../../../src/graphql/queries/period-summaries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA;;;;;;;;CAQ5C,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * APR Service Test Suite
3
- *
4
- * Comprehensive tests for SDK APR calculations and period summary transformations.
5
- */
6
- export {};
7
- //# sourceMappingURL=apr-service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apr-service.test.d.ts","sourceRoot":"","sources":["../../../src/sdk/__tests__/apr-service.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,385 +0,0 @@
1
- /**
2
- * APR Service Test Suite
3
- *
4
- * Comprehensive tests for SDK APR calculations and period summary transformations.
5
- */
6
- import { describe, it, expect } from 'vitest';
7
- import { transformPeriodSummariesToAPRData, calculateAPRFromPriceChange, calculateCurrentAPR, } from '../apr-service.js';
8
- // Mock vault data for testing
9
- const mockVault = {
10
- address: '0x1234567890123456789012345678901234567890',
11
- symbol: 'LTEST',
12
- name: 'Test Vault',
13
- description: null,
14
- shortDescription: null,
15
- decimals: 18,
16
- logoUrl: null,
17
- maxCapacity: null,
18
- averageSettlement: null,
19
- isVisible: true,
20
- chain: {
21
- id: 1,
22
- name: 'Ethereum',
23
- nativeToken: 'ETH',
24
- factory: '0x0000000000000000000000000000000000000000',
25
- logoUrl: '',
26
- wrappedNativeToken: {
27
- address: '0x0000000000000000000000000000000000000000',
28
- symbol: 'WETH',
29
- name: 'Wrapped Ether',
30
- decimals: 18,
31
- },
32
- },
33
- asset: {
34
- id: 'usdc-eth',
35
- address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
36
- symbol: 'USDC',
37
- name: 'USD Coin',
38
- decimals: 6,
39
- description: null,
40
- logoUrl: null,
41
- isVisible: true,
42
- priceUsd: 1.0,
43
- chain: {
44
- id: '1',
45
- name: 'Ethereum',
46
- nativeToken: 'ETH',
47
- logoUrl: '',
48
- },
49
- priceSources: {
50
- chainlinkPriceFeed: null,
51
- },
52
- },
53
- state: {
54
- state: 'ACTIVE',
55
- totalAssets: '1000000000',
56
- totalAssetsUsd: 1000,
57
- totalSupply: '950000000000000000000',
58
- newTotalAssets: '1000000000',
59
- pricePerShare: '1052631',
60
- pricePerShareUsd: 1.052631,
61
- safeAssetBalance: '100000000',
62
- safeAssetBalanceUsd: 100,
63
- pendingSettlement: {
64
- assets: '0',
65
- assetsUsd: 0,
66
- },
67
- pendingSiloBalances: {
68
- assets: '0',
69
- shares: '0',
70
- },
71
- liveAPR: null,
72
- inceptionApr: {
73
- linearNetApr: 0,
74
- linearNetAprWithoutExtraYields: 0,
75
- airdrops: [],
76
- incentives: [],
77
- nativeYields: [],
78
- },
79
- weeklyApr: {
80
- linearNetApr: 0,
81
- linearNetAprWithoutExtraYields: 0,
82
- airdrops: [],
83
- incentives: [],
84
- nativeYields: [],
85
- },
86
- monthlyApr: {
87
- linearNetApr: 0,
88
- linearNetAprWithoutExtraYields: 0,
89
- airdrops: [],
90
- incentives: [],
91
- nativeYields: [],
92
- },
93
- yearlyApr: {
94
- linearNetApr: 0,
95
- linearNetAprWithoutExtraYields: 0,
96
- airdrops: [],
97
- incentives: [],
98
- nativeYields: [],
99
- },
100
- roles: {
101
- owner: '0x0000000000000000000000000000000000000000',
102
- valuationManager: '0x0000000000000000000000000000000000000000',
103
- whitelistManager: '0x0000000000000000000000000000000000000000',
104
- safe: '0x0000000000000000000000000000000000000000',
105
- feeReceiver: '0x0000000000000000000000000000000000000000',
106
- },
107
- managementFee: 200,
108
- performanceFee: 2000,
109
- highWaterMark: '1000000',
110
- lastFeeTime: '1704067200',
111
- },
112
- curators: null,
113
- integrator: null,
114
- defiIntegrations: null,
115
- };
116
- describe('transformPeriodSummariesToAPRData', () => {
117
- it('should transform period summaries to APR data', () => {
118
- const now = Math.floor(Date.now() / 1000);
119
- const thirtyDaysAgo = now - 30 * 24 * 60 * 60;
120
- const sixtyDaysAgo = now - 60 * 24 * 60 * 60;
121
- const periodSummaries = [
122
- {
123
- timestamp: sixtyDaysAgo.toString(),
124
- totalAssetsAtStart: '1000000000', // 1000 USDC
125
- totalSupplyAtStart: '1000000000000000000000', // 1000 shares (1:1)
126
- },
127
- {
128
- timestamp: thirtyDaysAgo.toString(),
129
- totalAssetsAtStart: '1025000000', // 1025 USDC
130
- totalSupplyAtStart: '1000000000000000000000', // 1000 shares
131
- },
132
- ];
133
- const result = transformPeriodSummariesToAPRData(periodSummaries, mockVault);
134
- // Should have both 30-day and inception data
135
- expect(result.thirtyDay).toBeDefined();
136
- expect(result.inception).toBeDefined();
137
- // Verify we got valid data (SDK may select different periods based on 30-day threshold)
138
- // Just verify inception is the oldest
139
- expect(result.inception?.timestamp).toBe(sixtyDaysAgo);
140
- // If we have 30-day data, it should be valid
141
- if (result.thirtyDay) {
142
- expect(result.thirtyDay.timestamp).toBeGreaterThan(0);
143
- expect(result.thirtyDay.pricePerShare).toBeGreaterThan(0n);
144
- }
145
- // Price per share should be valid (SDK may return inception as 30-day if recent)
146
- // Just verify we get valid price data
147
- expect(result.inception?.pricePerShare).toBe(1000000n); // 1:1 ratio for inception
148
- });
149
- it('should handle empty period summaries gracefully', () => {
150
- const result = transformPeriodSummariesToAPRData([], mockVault);
151
- expect(result).toEqual({});
152
- expect(result.thirtyDay).toBeUndefined();
153
- expect(result.inception).toBeUndefined();
154
- });
155
- it('should handle new vaults with only one period', () => {
156
- const now = Math.floor(Date.now() / 1000);
157
- const periodSummaries = [
158
- {
159
- timestamp: now.toString(),
160
- totalAssetsAtStart: '1000000000',
161
- totalSupplyAtStart: '1000000000000000000000',
162
- },
163
- ];
164
- const result = transformPeriodSummariesToAPRData(periodSummaries, mockVault);
165
- // Should have inception but not 30-day (too recent)
166
- expect(result.inception).toBeDefined();
167
- // 30-day may or may not be defined depending on exact timing
168
- });
169
- it('should handle different vault decimals', () => {
170
- const ethVault = {
171
- ...mockVault,
172
- decimals: 18,
173
- asset: {
174
- ...mockVault.asset,
175
- decimals: 18,
176
- },
177
- };
178
- const periodSummaries = [
179
- {
180
- timestamp: '1704067200',
181
- totalAssetsAtStart: '1000000000000000000000', // 1000 ETH (18 decimals)
182
- totalSupplyAtStart: '950000000000000000000', // 950 shares
183
- },
184
- ];
185
- const result = transformPeriodSummariesToAPRData(periodSummaries, ethVault);
186
- expect(result.inception).toBeDefined();
187
- // Price should be ~1.052631 ETH per share (in 18 decimals)
188
- expect(result.inception?.pricePerShare).toBeGreaterThan(1050000000000000000n);
189
- expect(result.inception?.pricePerShare).toBeLessThan(1060000000000000000n);
190
- });
191
- it('should sort periods to find oldest inception', () => {
192
- const periodSummaries = [
193
- {
194
- timestamp: '1704153600', // Newer
195
- totalAssetsAtStart: '1050000000',
196
- totalSupplyAtStart: '1000000000000000000000',
197
- },
198
- {
199
- timestamp: '1704067200', // Older - should be inception
200
- totalAssetsAtStart: '1000000000',
201
- totalSupplyAtStart: '1000000000000000000000',
202
- },
203
- {
204
- timestamp: '1704240000', // Newest
205
- totalAssetsAtStart: '1075000000',
206
- totalSupplyAtStart: '1000000000000000000000',
207
- },
208
- ];
209
- const result = transformPeriodSummariesToAPRData(periodSummaries, mockVault);
210
- // Inception should be the oldest timestamp
211
- expect(result.inception?.timestamp).toBe(1704067200);
212
- });
213
- });
214
- describe('calculateAPRFromPriceChange', () => {
215
- it('should calculate APR for 30-day period', () => {
216
- const oldPrice = 1000000n; // 1.0 USDC
217
- const newPrice = 1025000n; // 1.025 USDC (2.5% gain)
218
- const days = 30;
219
- const apr = calculateAPRFromPriceChange(oldPrice, newPrice, days);
220
- // 2.5% in 30 days = ~30.42% APR
221
- expect(apr).toBeGreaterThan(30);
222
- expect(apr).toBeLessThan(31);
223
- });
224
- it('should calculate APR for 90-day period', () => {
225
- const oldPrice = 1000000n;
226
- const newPrice = 1075000n; // 7.5% gain
227
- const days = 90;
228
- const apr = calculateAPRFromPriceChange(oldPrice, newPrice, days);
229
- // 7.5% in 90 days = ~30.42% APR
230
- expect(apr).toBeGreaterThan(30);
231
- expect(apr).toBeLessThan(31);
232
- });
233
- it('should calculate APR for 365-day period', () => {
234
- const oldPrice = 1000000n;
235
- const newPrice = 1300000n; // 30% gain
236
- const days = 365;
237
- const apr = calculateAPRFromPriceChange(oldPrice, newPrice, days);
238
- // 30% in 365 days = 30% APR
239
- expect(apr).toBeCloseTo(30, 0);
240
- });
241
- it('should handle negative returns', () => {
242
- const oldPrice = 1000000n;
243
- const newPrice = 950000n; // -5% loss
244
- const days = 30;
245
- const apr = calculateAPRFromPriceChange(oldPrice, newPrice, days);
246
- // -5% in 30 days = ~-60.83% APR
247
- expect(apr).toBeLessThan(0);
248
- expect(apr).toBeGreaterThan(-61);
249
- expect(apr).toBeLessThan(-60);
250
- });
251
- it('should handle zero price change', () => {
252
- const price = 1000000n;
253
- const apr = calculateAPRFromPriceChange(price, price, 30);
254
- expect(apr).toBe(0);
255
- });
256
- it('should handle zero old price gracefully', () => {
257
- const apr = calculateAPRFromPriceChange(0n, 1000000n, 30);
258
- expect(apr).toBe(0); // Returns 0 instead of throwing
259
- });
260
- it('should handle zero or negative days gracefully', () => {
261
- expect(calculateAPRFromPriceChange(1000000n, 1025000n, 0)).toBe(0);
262
- expect(calculateAPRFromPriceChange(1000000n, 1025000n, -1)).toBe(0);
263
- });
264
- it('should maintain precision with large values', () => {
265
- const oldPrice = 1000000000000000000n; // 1 ETH in wei
266
- const newPrice = 1025000000000000000n; // 1.025 ETH
267
- const days = 30;
268
- const apr = calculateAPRFromPriceChange(oldPrice, newPrice, days);
269
- // Should get same result as smaller values
270
- expect(apr).toBeGreaterThan(30);
271
- expect(apr).toBeLessThan(31);
272
- });
273
- });
274
- describe('calculateCurrentAPR', () => {
275
- it('should calculate current APR from historical data', () => {
276
- const now = Date.now() / 1000;
277
- const thirtyDaysAgo = now - 30 * 24 * 60 * 60;
278
- const aprData = {
279
- thirtyDay: {
280
- timestamp: thirtyDaysAgo,
281
- pricePerShare: 1000000n, // 1.0 USDC
282
- },
283
- };
284
- const currentPrice = 1025000n; // 1.025 USDC
285
- const result = calculateCurrentAPR(aprData, currentPrice);
286
- expect(result.thirtyDay).toBeDefined();
287
- expect(result.thirtyDay).toBeGreaterThan(30);
288
- expect(result.thirtyDay).toBeLessThan(31);
289
- });
290
- it('should calculate both 30-day and inception APR', () => {
291
- const now = Date.now() / 1000;
292
- const thirtyDaysAgo = now - 30 * 24 * 60 * 60;
293
- const ninetyDaysAgo = now - 90 * 24 * 60 * 60;
294
- const aprData = {
295
- thirtyDay: {
296
- timestamp: thirtyDaysAgo,
297
- pricePerShare: 1025000n,
298
- },
299
- inception: {
300
- timestamp: ninetyDaysAgo,
301
- pricePerShare: 1000000n,
302
- },
303
- };
304
- const currentPrice = 1075000n;
305
- const result = calculateCurrentAPR(aprData, currentPrice);
306
- expect(result.thirtyDay).toBeDefined();
307
- expect(result.inception).toBeDefined();
308
- // 30-day: 1.025 → 1.075 (4.88% in 30 days)
309
- expect(result.thirtyDay).toBeGreaterThan(59);
310
- expect(result.thirtyDay).toBeLessThan(61);
311
- // Inception: 1.0 → 1.075 (7.5% in 90 days)
312
- expect(result.inception).toBeGreaterThan(30);
313
- expect(result.inception).toBeLessThan(31);
314
- });
315
- it('should handle empty APR data', () => {
316
- const aprData = {};
317
- const currentPrice = 1025000n;
318
- const result = calculateCurrentAPR(aprData, currentPrice);
319
- expect(result.thirtyDay).toBeUndefined();
320
- expect(result.inception).toBeUndefined();
321
- });
322
- it('should handle only 30-day data', () => {
323
- const now = Date.now() / 1000;
324
- const thirtyDaysAgo = now - 30 * 24 * 60 * 60;
325
- const aprData = {
326
- thirtyDay: {
327
- timestamp: thirtyDaysAgo,
328
- pricePerShare: 1000000n,
329
- },
330
- };
331
- const currentPrice = 1025000n;
332
- const result = calculateCurrentAPR(aprData, currentPrice);
333
- expect(result.thirtyDay).toBeDefined();
334
- expect(result.inception).toBeUndefined();
335
- });
336
- it('should handle only inception data', () => {
337
- const now = Date.now() / 1000;
338
- const ninetyDaysAgo = now - 90 * 24 * 60 * 60;
339
- const aprData = {
340
- inception: {
341
- timestamp: ninetyDaysAgo,
342
- pricePerShare: 1000000n,
343
- },
344
- };
345
- const currentPrice = 1075000n;
346
- const result = calculateCurrentAPR(aprData, currentPrice);
347
- expect(result.thirtyDay).toBeUndefined();
348
- expect(result.inception).toBeDefined();
349
- });
350
- });
351
- describe('Integration: Full APR workflow', () => {
352
- it('should calculate APR from period summaries to current APR', () => {
353
- const now = Math.floor(Date.now() / 1000);
354
- const thirtyDaysAgo = now - 30 * 24 * 60 * 60;
355
- const ninetyDaysAgo = now - 90 * 24 * 60 * 60;
356
- // Step 1: Period summaries from GraphQL
357
- const periodSummaries = [
358
- {
359
- timestamp: ninetyDaysAgo.toString(),
360
- totalAssetsAtStart: '1000000000', // 1000 USDC
361
- totalSupplyAtStart: '1000000000000000000000', // 1000 shares
362
- },
363
- {
364
- timestamp: thirtyDaysAgo.toString(),
365
- totalAssetsAtStart: '1025000000', // 1025 USDC
366
- totalSupplyAtStart: '1000000000000000000000', // 1000 shares
367
- },
368
- ];
369
- // Step 2: Transform to APR data
370
- const aprData = transformPeriodSummariesToAPRData(periodSummaries, mockVault);
371
- expect(aprData.thirtyDay).toBeDefined();
372
- expect(aprData.inception).toBeDefined();
373
- // Step 3: Calculate current APR
374
- const currentPrice = 1075000n; // 1.075 USDC
375
- const currentAPR = calculateCurrentAPR(aprData, currentPrice);
376
- expect(currentAPR.thirtyDay).toBeDefined();
377
- expect(currentAPR.inception).toBeDefined();
378
- // Verify APR calculations are reasonable
379
- expect(currentAPR.thirtyDay).toBeGreaterThan(0);
380
- expect(currentAPR.inception).toBeGreaterThan(0);
381
- // 30-day should show higher APR (shorter period, same endpoint)
382
- expect(currentAPR.thirtyDay).toBeGreaterThan(currentAPR.inception);
383
- });
384
- });
385
- //# sourceMappingURL=apr-service.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apr-service.test.js","sourceRoot":"","sources":["../../../src/sdk/__tests__/apr-service.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Math Utilities Test Suite
3
- *
4
- * Comprehensive tests for BigInt mathematical operations and serialization.
5
- */
6
- export {};
7
- //# sourceMappingURL=math-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math-utils.test.d.ts","sourceRoot":"","sources":["../../../src/sdk/__tests__/math-utils.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,185 +0,0 @@
1
- /**
2
- * Math Utilities Test Suite
3
- *
4
- * Comprehensive tests for BigInt mathematical operations and serialization.
5
- */
6
- import { describe, it, expect } from 'vitest';
7
- import { bigIntReplacer, safeBigIntStringify, formatBigInt, parseBigInt, isValidBigIntString, percentageChange, formatPercentageChange, } from '../math-utils.js';
8
- describe('bigIntReplacer', () => {
9
- it('should convert BigInt to string', () => {
10
- const result = bigIntReplacer('amount', 1000000000000000000n);
11
- expect(result).toBe('1000000000000000000');
12
- });
13
- it('should leave non-BigInt values unchanged', () => {
14
- expect(bigIntReplacer('str', 'hello')).toBe('hello');
15
- expect(bigIntReplacer('num', 42)).toBe(42);
16
- expect(bigIntReplacer('bool', true)).toBe(true);
17
- expect(bigIntReplacer('null', null)).toBe(null);
18
- expect(bigIntReplacer('undef', undefined)).toBe(undefined);
19
- });
20
- it('should handle objects with mixed types', () => {
21
- const obj = {
22
- bigint: 1000n,
23
- number: 42,
24
- string: 'test',
25
- };
26
- const result = JSON.parse(JSON.stringify(obj, bigIntReplacer));
27
- expect(result.bigint).toBe('1000');
28
- expect(result.number).toBe(42);
29
- expect(result.string).toBe('test');
30
- });
31
- });
32
- describe('safeBigIntStringify', () => {
33
- it('should stringify object with BigInt values', () => {
34
- const obj = { amount: 1000000000000000000n };
35
- const result = safeBigIntStringify(obj);
36
- expect(result).toContain('"amount"');
37
- expect(result).toContain('"1000000000000000000"');
38
- expect(() => {
39
- JSON.parse(result);
40
- }).not.toThrow();
41
- });
42
- it('should handle nested objects with BigInt', () => {
43
- const obj = {
44
- vault: {
45
- balance: 5000000n,
46
- shares: 4500000n,
47
- },
48
- };
49
- const result = safeBigIntStringify(obj);
50
- const parsed = JSON.parse(result);
51
- expect(parsed.vault.balance).toBe('5000000');
52
- expect(parsed.vault.shares).toBe('4500000');
53
- });
54
- it('should handle arrays with BigInt', () => {
55
- const obj = { amounts: [1000n, 2000n, 3000n] };
56
- const result = safeBigIntStringify(obj);
57
- const parsed = JSON.parse(result);
58
- expect(parsed.amounts).toEqual(['1000', '2000', '3000']);
59
- });
60
- });
61
- describe('formatBigInt', () => {
62
- it('should format 18-decimal values (ether)', () => {
63
- expect(formatBigInt(1500000000000000000n, 18)).toBe('1.500000000000000000');
64
- expect(formatBigInt(1000000000000000000n, 18)).toBe('1.000000000000000000');
65
- expect(formatBigInt(123456789012345678n, 18)).toBe('0.123456789012345678');
66
- });
67
- it('should format 6-decimal values (USDC)', () => {
68
- expect(formatBigInt(1500000n, 6)).toBe('1.500000');
69
- expect(formatBigInt(1000000n, 6)).toBe('1.000000');
70
- expect(formatBigInt(123456n, 6)).toBe('0.123456');
71
- });
72
- it('should handle zero decimals', () => {
73
- expect(formatBigInt(1500n, 0)).toBe('1500');
74
- expect(formatBigInt(0n, 0)).toBe('0');
75
- });
76
- it('should handle zero values', () => {
77
- expect(formatBigInt(0n, 18)).toBe('0.000000000000000000');
78
- expect(formatBigInt(0n, 6)).toBe('0.000000');
79
- });
80
- it('should pad fractional part with leading zeros', () => {
81
- expect(formatBigInt(1n, 18)).toBe('0.000000000000000001');
82
- expect(formatBigInt(100n, 18)).toBe('0.000000000000000100');
83
- });
84
- it('should throw on negative decimals', () => {
85
- expect(() => formatBigInt(1000n, -1)).toThrow('Decimals must be non-negative');
86
- });
87
- });
88
- describe('parseBigInt', () => {
89
- it('should parse decimal strings to BigInt', () => {
90
- expect(parseBigInt('1.5', 18)).toBe(1500000000000000000n);
91
- expect(parseBigInt('1.5', 6)).toBe(1500000n);
92
- expect(parseBigInt('0.123456', 6)).toBe(123456n);
93
- });
94
- it('should parse integer strings', () => {
95
- expect(parseBigInt('1000', 6)).toBe(1000000000n);
96
- expect(parseBigInt('1', 18)).toBe(1000000000000000000n);
97
- });
98
- it('should handle zero values', () => {
99
- expect(parseBigInt('0', 18)).toBe(0n);
100
- expect(parseBigInt('0.0', 18)).toBe(0n);
101
- });
102
- it('should pad short fractional parts', () => {
103
- expect(parseBigInt('1.5', 18)).toBe(1500000000000000000n);
104
- expect(parseBigInt('1.5', 6)).toBe(1500000n);
105
- });
106
- it('should throw on empty or invalid input', () => {
107
- expect(() => parseBigInt('', 18)).toThrow('Value cannot be empty');
108
- expect(() => parseBigInt(' ', 18)).toThrow('Value cannot be empty');
109
- expect(() => parseBigInt('abc', 18)).toThrow('Invalid integer format');
110
- expect(() => parseBigInt('1.2.3', 18)).toThrow('Invalid decimal format');
111
- });
112
- it('should throw on negative decimals', () => {
113
- expect(() => parseBigInt('1.5', -1)).toThrow('Decimals must be non-negative');
114
- });
115
- it('should throw on too many decimal places', () => {
116
- expect(() => parseBigInt('1.1234567', 6)).toThrow('Too many decimal places');
117
- });
118
- });
119
- describe('isValidBigIntString', () => {
120
- it('should validate correct BigInt strings', () => {
121
- expect(isValidBigIntString('1000000000000000000')).toBe(true);
122
- expect(isValidBigIntString('0')).toBe(true);
123
- expect(isValidBigIntString('123')).toBe(true);
124
- });
125
- it('should reject invalid formats', () => {
126
- expect(isValidBigIntString('')).toBe(false);
127
- expect(isValidBigIntString(' ')).toBe(false);
128
- expect(isValidBigIntString('abc')).toBe(false);
129
- expect(isValidBigIntString('1.5')).toBe(false);
130
- expect(isValidBigIntString('-100')).toBe(false);
131
- expect(isValidBigIntString('1e18')).toBe(false);
132
- });
133
- it('should handle whitespace', () => {
134
- expect(isValidBigIntString(' 1000 ')).toBe(true);
135
- expect(isValidBigIntString(' ')).toBe(false);
136
- });
137
- });
138
- describe('percentageChange', () => {
139
- it('should calculate positive percentage changes', () => {
140
- expect(percentageChange(1000000n, 1025000n)).toBe(250); // 2.50%
141
- expect(percentageChange(1000000n, 1100000n)).toBe(1000); // 10.00%
142
- expect(percentageChange(1000000n, 2000000n)).toBe(10000); // 100.00%
143
- });
144
- it('should calculate negative percentage changes', () => {
145
- expect(percentageChange(1000000n, 975000n)).toBe(-250); // -2.50%
146
- expect(percentageChange(1000000n, 900000n)).toBe(-1000); // -10.00%
147
- expect(percentageChange(1000000n, 500000n)).toBe(-5000); // -50.00%
148
- });
149
- it('should handle zero change', () => {
150
- expect(percentageChange(1000000n, 1000000n)).toBe(0);
151
- });
152
- it('should handle zero old value', () => {
153
- expect(percentageChange(0n, 1000000n)).toBe(Infinity);
154
- expect(percentageChange(0n, 0n)).toBe(0);
155
- });
156
- it('should handle large values with precision', () => {
157
- const old = 1000000000000000000n; // 1e18
158
- const newVal = 1050000000000000000n; // 1.05e18
159
- expect(percentageChange(old, newVal)).toBe(500); // 5.00%
160
- });
161
- });
162
- describe('formatPercentageChange', () => {
163
- it('should format positive changes', () => {
164
- expect(formatPercentageChange(250)).toBe('+2.50%');
165
- expect(formatPercentageChange(1000)).toBe('+10.00%');
166
- expect(formatPercentageChange(10000)).toBe('+100.00%');
167
- });
168
- it('should format negative changes', () => {
169
- expect(formatPercentageChange(-250)).toBe('-2.50%');
170
- expect(formatPercentageChange(-1000)).toBe('-10.00%');
171
- expect(formatPercentageChange(-5000)).toBe('-50.00%');
172
- });
173
- it('should format zero change', () => {
174
- expect(formatPercentageChange(0)).toBe('0.00%');
175
- });
176
- it('should handle infinity', () => {
177
- expect(formatPercentageChange(Infinity)).toBe('+∞%');
178
- expect(formatPercentageChange(-Infinity)).toBe('-∞%');
179
- });
180
- it('should format small changes with precision', () => {
181
- expect(formatPercentageChange(1)).toBe('+0.01%');
182
- expect(formatPercentageChange(-1)).toBe('-0.01%');
183
- });
184
- });
185
- //# sourceMappingURL=math-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math-utils.test.js","sourceRoot":"","sources":["../../../src/sdk/__tests__/math-utils.test.ts"],"names":[],"mappings":"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"}