@t2000/sdk 0.17.21 → 0.17.23
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/README.md +1 -1
- package/dist/adapters/cetus.d.ts +29 -0
- package/dist/adapters/cetus.d.ts.map +1 -0
- package/dist/adapters/cetus.js +74 -0
- package/dist/adapters/cetus.js.map +1 -0
- package/dist/adapters/cetus.test.d.ts +2 -0
- package/dist/adapters/cetus.test.d.ts.map +1 -0
- package/dist/adapters/cetus.test.js +57 -0
- package/dist/adapters/cetus.test.js.map +1 -0
- package/dist/adapters/compliance.test.d.ts +8 -0
- package/dist/adapters/compliance.test.d.ts.map +1 -0
- package/dist/adapters/compliance.test.js +202 -0
- package/dist/adapters/compliance.test.js.map +1 -0
- package/dist/adapters/index.d.ts +10 -4
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +15 -2107
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/navi.d.ts +41 -0
- package/dist/adapters/navi.d.ts.map +1 -0
- package/dist/adapters/navi.js +102 -0
- package/dist/adapters/navi.js.map +1 -0
- package/dist/adapters/navi.test.d.ts +2 -0
- package/dist/adapters/navi.test.d.ts.map +1 -0
- package/dist/adapters/navi.test.js +164 -0
- package/dist/adapters/navi.test.js.map +1 -0
- package/dist/adapters/registry.d.ts +47 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +162 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/registry.test.d.ts +2 -0
- package/dist/adapters/registry.test.d.ts.map +1 -0
- package/dist/adapters/registry.test.js +197 -0
- package/dist/adapters/registry.test.js.map +1 -0
- package/dist/adapters/suilend.d.ts +71 -0
- package/dist/adapters/suilend.d.ts.map +1 -0
- package/dist/adapters/suilend.js +826 -0
- package/dist/adapters/suilend.js.map +1 -0
- package/dist/adapters/suilend.test.d.ts +2 -0
- package/dist/adapters/suilend.test.d.ts.map +1 -0
- package/dist/adapters/suilend.test.js +294 -0
- package/dist/adapters/suilend.test.js.map +1 -0
- package/dist/adapters/types.d.ts +160 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/auto-invest.d.ts +23 -0
- package/dist/auto-invest.d.ts.map +1 -0
- package/dist/auto-invest.js +131 -0
- package/dist/auto-invest.js.map +1 -0
- package/dist/auto-invest.test.d.ts +2 -0
- package/dist/auto-invest.test.d.ts.map +1 -0
- package/dist/auto-invest.test.js +220 -0
- package/dist/auto-invest.test.js.map +1 -0
- package/dist/constants.d.ts +177 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +135 -0
- package/dist/constants.js.map +1 -0
- package/dist/contacts.d.ts +25 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +83 -0
- package/dist/contacts.js.map +1 -0
- package/dist/contacts.test.d.ts +2 -0
- package/dist/contacts.test.d.ts.map +1 -0
- package/dist/contacts.test.js +164 -0
- package/dist/contacts.test.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +81 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.test.d.ts +2 -0
- package/dist/errors.test.d.ts.map +1 -0
- package/dist/errors.test.js +48 -0
- package/dist/errors.test.js.map +1 -0
- package/dist/gas/autoTopUp.d.ts +18 -0
- package/dist/gas/autoTopUp.d.ts.map +1 -0
- package/dist/gas/autoTopUp.js +55 -0
- package/dist/gas/autoTopUp.js.map +1 -0
- package/dist/gas/autoTopUp.test.d.ts +2 -0
- package/dist/gas/autoTopUp.test.d.ts.map +1 -0
- package/dist/gas/autoTopUp.test.js +59 -0
- package/dist/gas/autoTopUp.test.js.map +1 -0
- package/dist/gas/gasStation.d.ts +23 -0
- package/dist/gas/gasStation.d.ts.map +1 -0
- package/dist/gas/gasStation.js +58 -0
- package/dist/gas/gasStation.js.map +1 -0
- package/dist/gas/index.d.ts +4 -0
- package/dist/gas/index.d.ts.map +1 -0
- package/dist/gas/index.js +4 -0
- package/dist/gas/index.js.map +1 -0
- package/dist/gas/manager.d.ts +24 -0
- package/dist/gas/manager.d.ts.map +1 -0
- package/dist/gas/manager.js +142 -0
- package/dist/gas/manager.js.map +1 -0
- package/dist/gas/manager.test.d.ts +2 -0
- package/dist/gas/manager.test.d.ts.map +1 -0
- package/dist/gas/manager.test.js +220 -0
- package/dist/gas/manager.test.js.map +1 -0
- package/dist/gas/serialization.test.d.ts +2 -0
- package/dist/gas/serialization.test.d.ts.map +1 -0
- package/dist/gas/serialization.test.js +47 -0
- package/dist/gas/serialization.test.js.map +1 -0
- package/dist/index.d.ts +30 -649
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -6053
- package/dist/index.js.map +1 -1
- package/dist/invest.test.d.ts +2 -0
- package/dist/invest.test.d.ts.map +1 -0
- package/dist/invest.test.js +256 -0
- package/dist/invest.test.js.map +1 -0
- package/dist/portfolio.d.ts +39 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +201 -0
- package/dist/portfolio.js.map +1 -0
- package/dist/portfolio.test.d.ts +2 -0
- package/dist/portfolio.test.d.ts.map +1 -0
- package/dist/portfolio.test.js +301 -0
- package/dist/portfolio.test.js.map +1 -0
- package/dist/protocols/cetus.d.ts +73 -0
- package/dist/protocols/cetus.d.ts.map +1 -0
- package/dist/protocols/cetus.js +267 -0
- package/dist/protocols/cetus.js.map +1 -0
- package/dist/protocols/cetus.test.d.ts +2 -0
- package/dist/protocols/cetus.test.d.ts.map +1 -0
- package/dist/protocols/cetus.test.js +325 -0
- package/dist/protocols/cetus.test.js.map +1 -0
- package/dist/protocols/navi.d.ts +59 -0
- package/dist/protocols/navi.d.ts.map +1 -0
- package/dist/protocols/navi.js +945 -0
- package/dist/protocols/navi.js.map +1 -0
- package/dist/protocols/navi.test.d.ts +2 -0
- package/dist/protocols/navi.test.d.ts.map +1 -0
- package/dist/protocols/navi.test.js +339 -0
- package/dist/protocols/navi.test.js.map +1 -0
- package/dist/protocols/protocolFee.d.ts +17 -0
- package/dist/protocols/protocolFee.d.ts.map +1 -0
- package/dist/protocols/protocolFee.js +62 -0
- package/dist/protocols/protocolFee.js.map +1 -0
- package/dist/protocols/protocolFee.test.d.ts +2 -0
- package/dist/protocols/protocolFee.test.d.ts.map +1 -0
- package/dist/protocols/protocolFee.test.js +137 -0
- package/dist/protocols/protocolFee.test.js.map +1 -0
- package/dist/protocols/sentinel.d.ts +18 -0
- package/dist/protocols/sentinel.d.ts.map +1 -0
- package/dist/protocols/sentinel.js +188 -0
- package/dist/protocols/sentinel.js.map +1 -0
- package/dist/protocols/sentinel.test.d.ts +2 -0
- package/dist/protocols/sentinel.test.d.ts.map +1 -0
- package/dist/protocols/sentinel.test.js +199 -0
- package/dist/protocols/sentinel.test.js.map +1 -0
- package/dist/protocols/yieldTracker.d.ts +6 -0
- package/dist/protocols/yieldTracker.d.ts.map +1 -0
- package/dist/protocols/yieldTracker.js +29 -0
- package/dist/protocols/yieldTracker.js.map +1 -0
- package/dist/safeguards/enforcer.d.ts +18 -0
- package/dist/safeguards/enforcer.d.ts.map +1 -0
- package/dist/safeguards/enforcer.js +130 -0
- package/dist/safeguards/enforcer.js.map +1 -0
- package/dist/safeguards/enforcer.test.d.ts +2 -0
- package/dist/safeguards/enforcer.test.d.ts.map +1 -0
- package/dist/safeguards/enforcer.test.js +212 -0
- package/dist/safeguards/enforcer.test.js.map +1 -0
- package/dist/safeguards/errors.d.ts +24 -0
- package/dist/safeguards/errors.d.ts.map +1 -0
- package/dist/safeguards/errors.js +31 -0
- package/dist/safeguards/errors.js.map +1 -0
- package/dist/safeguards/index.d.ts +6 -0
- package/dist/safeguards/index.d.ts.map +1 -0
- package/dist/safeguards/index.js +4 -0
- package/dist/safeguards/index.js.map +1 -0
- package/dist/safeguards/types.d.ts +16 -0
- package/dist/safeguards/types.d.ts.map +1 -0
- package/dist/safeguards/types.js +13 -0
- package/dist/safeguards/types.js.map +1 -0
- package/dist/strategy.d.ts +22 -0
- package/dist/strategy.d.ts.map +1 -0
- package/dist/strategy.js +113 -0
- package/dist/strategy.js.map +1 -0
- package/dist/strategy.test.d.ts +2 -0
- package/dist/strategy.test.d.ts.map +1 -0
- package/dist/strategy.test.js +212 -0
- package/dist/strategy.test.js.map +1 -0
- package/dist/t2000.d.ts +218 -0
- package/dist/t2000.d.ts.map +1 -0
- package/dist/t2000.integration.test.d.ts +2 -0
- package/dist/t2000.integration.test.d.ts.map +1 -0
- package/dist/t2000.integration.test.js +954 -0
- package/dist/t2000.integration.test.js.map +1 -0
- package/dist/t2000.js +2395 -0
- package/dist/t2000.js.map +1 -0
- package/dist/types.d.ts +419 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/format.d.ts +22 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +71 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/format.test.d.ts +2 -0
- package/dist/utils/format.test.d.ts.map +1 -0
- package/dist/utils/format.test.js +187 -0
- package/dist/utils/format.test.js.map +1 -0
- package/dist/utils/hashcash.d.ts +2 -0
- package/dist/utils/hashcash.d.ts.map +1 -0
- package/dist/utils/hashcash.js +27 -0
- package/dist/utils/hashcash.js.map +1 -0
- package/dist/utils/hashcash.test.d.ts +2 -0
- package/dist/utils/hashcash.test.d.ts.map +1 -0
- package/dist/utils/hashcash.test.js +40 -0
- package/dist/utils/hashcash.test.js.map +1 -0
- package/dist/utils/retry.d.ts +9 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +47 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/simulate.d.ts +15 -0
- package/dist/utils/simulate.d.ts.map +1 -0
- package/dist/utils/simulate.js +75 -0
- package/dist/utils/simulate.js.map +1 -0
- package/dist/utils/simulate.test.d.ts +2 -0
- package/dist/utils/simulate.test.d.ts.map +1 -0
- package/dist/utils/simulate.test.js +80 -0
- package/dist/utils/simulate.test.js.map +1 -0
- package/dist/utils/sui.d.ts +6 -0
- package/dist/utils/sui.d.ts.map +1 -0
- package/dist/utils/sui.js +28 -0
- package/dist/utils/sui.js.map +1 -0
- package/dist/utils/sui.test.d.ts +2 -0
- package/dist/utils/sui.test.d.ts.map +1 -0
- package/dist/utils/sui.test.js +58 -0
- package/dist/utils/sui.test.js.map +1 -0
- package/dist/wallet/balance.d.ts +4 -0
- package/dist/wallet/balance.d.ts.map +1 -0
- package/dist/wallet/balance.js +98 -0
- package/dist/wallet/balance.js.map +1 -0
- package/dist/wallet/history.d.ts +4 -0
- package/dist/wallet/history.d.ts.map +1 -0
- package/dist/wallet/history.js +38 -0
- package/dist/wallet/history.js.map +1 -0
- package/dist/wallet/keyManager.d.ts +9 -0
- package/dist/wallet/keyManager.d.ts.map +1 -0
- package/dist/wallet/keyManager.js +113 -0
- package/dist/wallet/keyManager.js.map +1 -0
- package/dist/wallet/keyManager.test.d.ts +2 -0
- package/dist/wallet/keyManager.test.d.ts.map +1 -0
- package/dist/wallet/keyManager.test.js +55 -0
- package/dist/wallet/keyManager.test.js.map +1 -0
- package/dist/wallet/send.d.ts +24 -0
- package/dist/wallet/send.d.ts.map +1 -0
- package/dist/wallet/send.js +95 -0
- package/dist/wallet/send.js.map +1 -0
- package/dist/wallet/send.test.d.ts +2 -0
- package/dist/wallet/send.test.d.ts.map +1 -0
- package/dist/wallet/send.test.js +69 -0
- package/dist/wallet/send.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { STABLE_ASSETS } from '../constants.js';
|
|
2
|
+
import { T2000Error } from '../errors.js';
|
|
3
|
+
import { normalizeAsset } from '../utils/format.js';
|
|
4
|
+
import * as naviProtocol from '../protocols/navi.js';
|
|
5
|
+
export const descriptor = {
|
|
6
|
+
id: 'navi',
|
|
7
|
+
name: 'NAVI Protocol',
|
|
8
|
+
packages: [],
|
|
9
|
+
dynamicPackageId: true,
|
|
10
|
+
actionMap: {
|
|
11
|
+
'incentive_v3::entry_deposit': 'save',
|
|
12
|
+
'incentive_v3::deposit': 'save',
|
|
13
|
+
'incentive_v3::withdraw_v2': 'withdraw',
|
|
14
|
+
'incentive_v3::entry_withdraw': 'withdraw',
|
|
15
|
+
'incentive_v3::borrow_v2': 'borrow',
|
|
16
|
+
'incentive_v3::entry_borrow': 'borrow',
|
|
17
|
+
'incentive_v3::entry_repay': 'repay',
|
|
18
|
+
'incentive_v3::repay': 'repay',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export class NaviAdapter {
|
|
22
|
+
id = 'navi';
|
|
23
|
+
name = 'NAVI Protocol';
|
|
24
|
+
version = '1.0.0';
|
|
25
|
+
capabilities = ['save', 'withdraw', 'borrow', 'repay'];
|
|
26
|
+
supportedAssets = [...STABLE_ASSETS, 'SUI', 'ETH', 'GOLD'];
|
|
27
|
+
supportsSameAssetBorrow = true;
|
|
28
|
+
client;
|
|
29
|
+
async init(client) {
|
|
30
|
+
this.client = client;
|
|
31
|
+
}
|
|
32
|
+
initSync(client) {
|
|
33
|
+
this.client = client;
|
|
34
|
+
}
|
|
35
|
+
async getRates(asset) {
|
|
36
|
+
const rates = await naviProtocol.getRates(this.client);
|
|
37
|
+
const normalized = normalizeAsset(asset);
|
|
38
|
+
const r = rates[normalized];
|
|
39
|
+
if (!r)
|
|
40
|
+
throw new T2000Error('ASSET_NOT_SUPPORTED', `NAVI does not support ${asset}`);
|
|
41
|
+
return { asset: normalized, saveApy: r.saveApy, borrowApy: r.borrowApy };
|
|
42
|
+
}
|
|
43
|
+
async getPositions(address) {
|
|
44
|
+
const result = await naviProtocol.getPositions(this.client, address);
|
|
45
|
+
return {
|
|
46
|
+
supplies: result.positions
|
|
47
|
+
.filter(p => p.type === 'save')
|
|
48
|
+
.map(p => ({ asset: p.asset, amount: p.amount, apy: p.apy })),
|
|
49
|
+
borrows: result.positions
|
|
50
|
+
.filter(p => p.type === 'borrow')
|
|
51
|
+
.map(p => ({ asset: p.asset, amount: p.amount, apy: p.apy })),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async getHealth(address) {
|
|
55
|
+
return naviProtocol.getHealthFactor(this.client, address);
|
|
56
|
+
}
|
|
57
|
+
async buildSaveTx(address, amount, asset, options) {
|
|
58
|
+
const normalized = normalizeAsset(asset);
|
|
59
|
+
const tx = await naviProtocol.buildSaveTx(this.client, address, amount, { ...options, asset: normalized });
|
|
60
|
+
return { tx };
|
|
61
|
+
}
|
|
62
|
+
async buildWithdrawTx(address, amount, asset) {
|
|
63
|
+
const normalized = normalizeAsset(asset);
|
|
64
|
+
const result = await naviProtocol.buildWithdrawTx(this.client, address, amount, { asset: normalized });
|
|
65
|
+
return { tx: result.tx, effectiveAmount: result.effectiveAmount };
|
|
66
|
+
}
|
|
67
|
+
async buildBorrowTx(address, amount, asset, options) {
|
|
68
|
+
const normalized = normalizeAsset(asset);
|
|
69
|
+
const tx = await naviProtocol.buildBorrowTx(this.client, address, amount, { ...options, asset: normalized });
|
|
70
|
+
return { tx };
|
|
71
|
+
}
|
|
72
|
+
async buildRepayTx(address, amount, asset) {
|
|
73
|
+
const normalized = normalizeAsset(asset);
|
|
74
|
+
const tx = await naviProtocol.buildRepayTx(this.client, address, amount, { asset: normalized });
|
|
75
|
+
return { tx };
|
|
76
|
+
}
|
|
77
|
+
async maxWithdraw(address, _asset) {
|
|
78
|
+
return naviProtocol.maxWithdrawAmount(this.client, address);
|
|
79
|
+
}
|
|
80
|
+
async maxBorrow(address, _asset) {
|
|
81
|
+
return naviProtocol.maxBorrowAmount(this.client, address);
|
|
82
|
+
}
|
|
83
|
+
async addWithdrawToTx(tx, address, amount, asset) {
|
|
84
|
+
const normalized = normalizeAsset(asset);
|
|
85
|
+
return naviProtocol.addWithdrawToTx(tx, this.client, address, amount, { asset: normalized });
|
|
86
|
+
}
|
|
87
|
+
async addSaveToTx(tx, address, coin, asset, options) {
|
|
88
|
+
const normalized = normalizeAsset(asset);
|
|
89
|
+
return naviProtocol.addSaveToTx(tx, this.client, address, coin, { ...options, asset: normalized });
|
|
90
|
+
}
|
|
91
|
+
async addRepayToTx(tx, address, coin, asset) {
|
|
92
|
+
const normalized = normalizeAsset(asset);
|
|
93
|
+
return naviProtocol.addRepayToTx(tx, this.client, address, coin, { asset: normalized });
|
|
94
|
+
}
|
|
95
|
+
async getPendingRewards(address) {
|
|
96
|
+
return naviProtocol.getPendingRewards(this.client, address);
|
|
97
|
+
}
|
|
98
|
+
async addClaimRewardsToTx(tx, address) {
|
|
99
|
+
return naviProtocol.addClaimRewardsToTx(tx, this.client, address);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=navi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navi.js","sourceRoot":"","sources":["../../src/adapters/navi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navi.test.d.ts","sourceRoot":"","sources":["../../src/adapters/navi.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,164 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navi.test.js","sourceRoot":"","sources":["../../src/adapters/navi.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.test.ts"],"names":[],"mappings":""}
|