@t2000/sdk 0.17.29 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.d.cts +1 -1
- package/dist/adapters/index.d.ts +4 -10
- package/dist/adapters/index.js +2107 -15
- package/dist/adapters/index.js.map +1 -1
- package/dist/{index-DdtOBw42.d.ts → index-Co0lp99l.d.cts} +23 -1
- package/dist/{index-DdtOBw42.d.cts → index-Co0lp99l.d.ts} +23 -1
- package/dist/index.cjs +102 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -3
- package/dist/index.d.ts +654 -30
- package/dist/index.js +6154 -21
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/adapters/cetus.d.ts +0 -29
- package/dist/adapters/cetus.d.ts.map +0 -1
- package/dist/adapters/cetus.js +0 -74
- package/dist/adapters/cetus.js.map +0 -1
- package/dist/adapters/cetus.test.d.ts +0 -2
- package/dist/adapters/cetus.test.d.ts.map +0 -1
- package/dist/adapters/cetus.test.js +0 -57
- package/dist/adapters/cetus.test.js.map +0 -1
- package/dist/adapters/compliance.test.d.ts +0 -8
- package/dist/adapters/compliance.test.d.ts.map +0 -1
- package/dist/adapters/compliance.test.js +0 -202
- package/dist/adapters/compliance.test.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/navi.d.ts +0 -41
- package/dist/adapters/navi.d.ts.map +0 -1
- package/dist/adapters/navi.js +0 -102
- package/dist/adapters/navi.js.map +0 -1
- package/dist/adapters/navi.test.d.ts +0 -2
- package/dist/adapters/navi.test.d.ts.map +0 -1
- package/dist/adapters/navi.test.js +0 -164
- package/dist/adapters/navi.test.js.map +0 -1
- package/dist/adapters/registry.d.ts +0 -47
- package/dist/adapters/registry.d.ts.map +0 -1
- package/dist/adapters/registry.js +0 -162
- package/dist/adapters/registry.js.map +0 -1
- package/dist/adapters/registry.test.d.ts +0 -2
- package/dist/adapters/registry.test.d.ts.map +0 -1
- package/dist/adapters/registry.test.js +0 -197
- package/dist/adapters/registry.test.js.map +0 -1
- package/dist/adapters/suilend.d.ts +0 -71
- package/dist/adapters/suilend.d.ts.map +0 -1
- package/dist/adapters/suilend.js +0 -826
- package/dist/adapters/suilend.js.map +0 -1
- package/dist/adapters/suilend.test.d.ts +0 -2
- package/dist/adapters/suilend.test.d.ts.map +0 -1
- package/dist/adapters/suilend.test.js +0 -294
- package/dist/adapters/suilend.test.js.map +0 -1
- package/dist/adapters/types.d.ts +0 -160
- package/dist/adapters/types.d.ts.map +0 -1
- package/dist/adapters/types.js +0 -2
- package/dist/adapters/types.js.map +0 -1
- package/dist/auto-invest.d.ts +0 -23
- package/dist/auto-invest.d.ts.map +0 -1
- package/dist/auto-invest.js +0 -131
- package/dist/auto-invest.js.map +0 -1
- package/dist/auto-invest.test.d.ts +0 -2
- package/dist/auto-invest.test.d.ts.map +0 -1
- package/dist/auto-invest.test.js +0 -220
- package/dist/auto-invest.test.js.map +0 -1
- package/dist/constants.d.ts +0 -177
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -135
- package/dist/constants.js.map +0 -1
- package/dist/contacts.d.ts +0 -25
- package/dist/contacts.d.ts.map +0 -1
- package/dist/contacts.js +0 -83
- package/dist/contacts.js.map +0 -1
- package/dist/contacts.test.d.ts +0 -2
- package/dist/contacts.test.d.ts.map +0 -1
- package/dist/contacts.test.js +0 -164
- package/dist/contacts.test.js.map +0 -1
- package/dist/errors.d.ts +0 -26
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -81
- package/dist/errors.js.map +0 -1
- package/dist/errors.test.d.ts +0 -2
- package/dist/errors.test.d.ts.map +0 -1
- package/dist/errors.test.js +0 -48
- package/dist/errors.test.js.map +0 -1
- package/dist/gas/autoTopUp.d.ts +0 -18
- package/dist/gas/autoTopUp.d.ts.map +0 -1
- package/dist/gas/autoTopUp.js +0 -55
- package/dist/gas/autoTopUp.js.map +0 -1
- package/dist/gas/autoTopUp.test.d.ts +0 -2
- package/dist/gas/autoTopUp.test.d.ts.map +0 -1
- package/dist/gas/autoTopUp.test.js +0 -59
- package/dist/gas/autoTopUp.test.js.map +0 -1
- package/dist/gas/gasStation.d.ts +0 -23
- package/dist/gas/gasStation.d.ts.map +0 -1
- package/dist/gas/gasStation.js +0 -58
- package/dist/gas/gasStation.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -4
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/manager.d.ts +0 -24
- package/dist/gas/manager.d.ts.map +0 -1
- package/dist/gas/manager.js +0 -142
- package/dist/gas/manager.js.map +0 -1
- package/dist/gas/manager.test.d.ts +0 -2
- package/dist/gas/manager.test.d.ts.map +0 -1
- package/dist/gas/manager.test.js +0 -220
- package/dist/gas/manager.test.js.map +0 -1
- package/dist/gas/serialization.test.d.ts +0 -2
- package/dist/gas/serialization.test.d.ts.map +0 -1
- package/dist/gas/serialization.test.js +0 -47
- package/dist/gas/serialization.test.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/invest.test.d.ts +0 -2
- package/dist/invest.test.d.ts.map +0 -1
- package/dist/invest.test.js +0 -256
- package/dist/invest.test.js.map +0 -1
- package/dist/portfolio.d.ts +0 -39
- package/dist/portfolio.d.ts.map +0 -1
- package/dist/portfolio.js +0 -201
- package/dist/portfolio.js.map +0 -1
- package/dist/portfolio.test.d.ts +0 -2
- package/dist/portfolio.test.d.ts.map +0 -1
- package/dist/portfolio.test.js +0 -301
- package/dist/portfolio.test.js.map +0 -1
- package/dist/protocols/cetus.d.ts +0 -73
- package/dist/protocols/cetus.d.ts.map +0 -1
- package/dist/protocols/cetus.js +0 -267
- package/dist/protocols/cetus.js.map +0 -1
- package/dist/protocols/cetus.test.d.ts +0 -2
- package/dist/protocols/cetus.test.d.ts.map +0 -1
- package/dist/protocols/cetus.test.js +0 -325
- package/dist/protocols/cetus.test.js.map +0 -1
- package/dist/protocols/navi.d.ts +0 -59
- package/dist/protocols/navi.d.ts.map +0 -1
- package/dist/protocols/navi.js +0 -945
- package/dist/protocols/navi.js.map +0 -1
- package/dist/protocols/navi.test.d.ts +0 -2
- package/dist/protocols/navi.test.d.ts.map +0 -1
- package/dist/protocols/navi.test.js +0 -339
- package/dist/protocols/navi.test.js.map +0 -1
- package/dist/protocols/protocolFee.d.ts +0 -17
- package/dist/protocols/protocolFee.d.ts.map +0 -1
- package/dist/protocols/protocolFee.js +0 -62
- package/dist/protocols/protocolFee.js.map +0 -1
- package/dist/protocols/protocolFee.test.d.ts +0 -2
- package/dist/protocols/protocolFee.test.d.ts.map +0 -1
- package/dist/protocols/protocolFee.test.js +0 -137
- package/dist/protocols/protocolFee.test.js.map +0 -1
- package/dist/protocols/sentinel.d.ts +0 -18
- package/dist/protocols/sentinel.d.ts.map +0 -1
- package/dist/protocols/sentinel.js +0 -188
- package/dist/protocols/sentinel.js.map +0 -1
- package/dist/protocols/sentinel.test.d.ts +0 -2
- package/dist/protocols/sentinel.test.d.ts.map +0 -1
- package/dist/protocols/sentinel.test.js +0 -199
- package/dist/protocols/sentinel.test.js.map +0 -1
- package/dist/protocols/yieldTracker.d.ts +0 -6
- package/dist/protocols/yieldTracker.d.ts.map +0 -1
- package/dist/protocols/yieldTracker.js +0 -29
- package/dist/protocols/yieldTracker.js.map +0 -1
- package/dist/safeguards/enforcer.d.ts +0 -18
- package/dist/safeguards/enforcer.d.ts.map +0 -1
- package/dist/safeguards/enforcer.js +0 -130
- package/dist/safeguards/enforcer.js.map +0 -1
- package/dist/safeguards/enforcer.test.d.ts +0 -2
- package/dist/safeguards/enforcer.test.d.ts.map +0 -1
- package/dist/safeguards/enforcer.test.js +0 -212
- package/dist/safeguards/enforcer.test.js.map +0 -1
- package/dist/safeguards/errors.d.ts +0 -24
- package/dist/safeguards/errors.d.ts.map +0 -1
- package/dist/safeguards/errors.js +0 -31
- package/dist/safeguards/errors.js.map +0 -1
- package/dist/safeguards/index.d.ts +0 -6
- package/dist/safeguards/index.d.ts.map +0 -1
- package/dist/safeguards/index.js +0 -4
- package/dist/safeguards/index.js.map +0 -1
- package/dist/safeguards/types.d.ts +0 -16
- package/dist/safeguards/types.d.ts.map +0 -1
- package/dist/safeguards/types.js +0 -13
- package/dist/safeguards/types.js.map +0 -1
- package/dist/strategy.d.ts +0 -22
- package/dist/strategy.d.ts.map +0 -1
- package/dist/strategy.js +0 -113
- package/dist/strategy.js.map +0 -1
- package/dist/strategy.test.d.ts +0 -2
- package/dist/strategy.test.d.ts.map +0 -1
- package/dist/strategy.test.js +0 -212
- package/dist/strategy.test.js.map +0 -1
- package/dist/t2000.d.ts +0 -219
- package/dist/t2000.d.ts.map +0 -1
- package/dist/t2000.integration.test.d.ts +0 -2
- package/dist/t2000.integration.test.d.ts.map +0 -1
- package/dist/t2000.integration.test.js +0 -954
- package/dist/t2000.integration.test.js.map +0 -1
- package/dist/t2000.js +0 -2416
- package/dist/t2000.js.map +0 -1
- package/dist/types.d.ts +0 -419
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/format.d.ts +0 -22
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -71
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/format.test.d.ts +0 -2
- package/dist/utils/format.test.d.ts.map +0 -1
- package/dist/utils/format.test.js +0 -187
- package/dist/utils/format.test.js.map +0 -1
- package/dist/utils/hashcash.d.ts +0 -2
- package/dist/utils/hashcash.d.ts.map +0 -1
- package/dist/utils/hashcash.js +0 -27
- package/dist/utils/hashcash.js.map +0 -1
- package/dist/utils/hashcash.test.d.ts +0 -2
- package/dist/utils/hashcash.test.d.ts.map +0 -1
- package/dist/utils/hashcash.test.js +0 -40
- package/dist/utils/hashcash.test.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -9
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -47
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/simulate.d.ts +0 -15
- package/dist/utils/simulate.d.ts.map +0 -1
- package/dist/utils/simulate.js +0 -75
- package/dist/utils/simulate.js.map +0 -1
- package/dist/utils/simulate.test.d.ts +0 -2
- package/dist/utils/simulate.test.d.ts.map +0 -1
- package/dist/utils/simulate.test.js +0 -80
- package/dist/utils/simulate.test.js.map +0 -1
- package/dist/utils/sui.d.ts +0 -6
- package/dist/utils/sui.d.ts.map +0 -1
- package/dist/utils/sui.js +0 -28
- package/dist/utils/sui.js.map +0 -1
- package/dist/utils/sui.test.d.ts +0 -2
- package/dist/utils/sui.test.d.ts.map +0 -1
- package/dist/utils/sui.test.js +0 -58
- package/dist/utils/sui.test.js.map +0 -1
- package/dist/wallet/balance.d.ts +0 -4
- package/dist/wallet/balance.d.ts.map +0 -1
- package/dist/wallet/balance.js +0 -98
- package/dist/wallet/balance.js.map +0 -1
- package/dist/wallet/history.d.ts +0 -4
- package/dist/wallet/history.d.ts.map +0 -1
- package/dist/wallet/history.js +0 -38
- package/dist/wallet/history.js.map +0 -1
- package/dist/wallet/keyManager.d.ts +0 -9
- package/dist/wallet/keyManager.d.ts.map +0 -1
- package/dist/wallet/keyManager.js +0 -113
- package/dist/wallet/keyManager.js.map +0 -1
- package/dist/wallet/keyManager.test.d.ts +0 -2
- package/dist/wallet/keyManager.test.d.ts.map +0 -1
- package/dist/wallet/keyManager.test.js +0 -55
- package/dist/wallet/keyManager.test.js.map +0 -1
- package/dist/wallet/send.d.ts +0 -24
- package/dist/wallet/send.d.ts.map +0 -1
- package/dist/wallet/send.js +0 -95
- package/dist/wallet/send.js.map +0 -1
- package/dist/wallet/send.test.d.ts +0 -2
- package/dist/wallet/send.test.d.ts.map +0 -1
- package/dist/wallet/send.test.js +0 -69
- 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 +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":"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"}
|