@kasufinance/kasu-sdk 1.0.4 → 2.2.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/CLAUDE.md +410 -0
- package/README.md +179 -12
- package/dist/bundle.cjs.js +658 -90
- package/dist/bundle.esm.js +654 -92
- package/dist/facade/chain-configs.d.ts +11 -0
- package/dist/facade/chain-configs.js +84 -0
- package/dist/facade/chain-configs.js.map +1 -0
- package/dist/facade/deposits.d.ts +56 -0
- package/dist/facade/deposits.js +87 -0
- package/dist/facade/deposits.js.map +1 -0
- package/dist/facade/index.d.ts +6 -0
- package/dist/facade/index.js +9 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/kasu.d.ts +71 -0
- package/dist/facade/kasu.js +101 -0
- package/dist/facade/kasu.js.map +1 -0
- package/dist/facade/strategies.d.ts +37 -0
- package/dist/facade/strategies.js +112 -0
- package/dist/facade/strategies.js.map +1 -0
- package/dist/facade/types.d.ts +127 -0
- package/dist/facade/types.js +2 -0
- package/dist/facade/types.js.map +1 -0
- package/dist/facade/user-portfolio.d.ts +35 -0
- package/dist/facade/user-portfolio.js +53 -0
- package/dist/facade/user-portfolio.js.map +1 -0
- package/dist/index.d.ts +9 -17
- package/dist/index.js +9 -16
- package/dist/index.js.map +1 -1
- package/dist/kasu-sdk.d.ts +17 -0
- package/dist/kasu-sdk.js +17 -0
- package/dist/kasu-sdk.js.map +1 -0
- package/dist/sdk-config.d.ts +34 -4
- package/dist/sdk-config.js +9 -6
- package/dist/sdk-config.js.map +1 -1
- package/dist/services/DataService/data-service.d.ts +9 -2
- package/dist/services/DataService/data-service.js +91 -53
- package/dist/services/DataService/data-service.js.map +1 -1
- package/dist/services/DataService/queries.d.ts +0 -1
- package/dist/services/DataService/queries.js +0 -8
- package/dist/services/DataService/queries.js.map +1 -1
- package/dist/services/DataService/subgraph-types.d.ts +0 -6
- package/dist/services/DataService/types.d.ts +0 -1
- package/dist/services/Locking/locking.d.ts +9 -3
- package/dist/services/Locking/locking.js +114 -20
- package/dist/services/Locking/locking.js.map +1 -1
- package/dist/services/Locking/types.d.ts +1 -1
- package/dist/services/Portfolio/portfolio.d.ts +3 -2
- package/dist/services/Portfolio/portfolio.js +15 -7
- package/dist/services/Portfolio/portfolio.js.map +1 -1
- package/dist/services/Portfolio/types.d.ts +2 -2
- package/dist/services/UserLending/user-lending.d.ts +3 -1
- package/dist/services/UserLending/user-lending.js +9 -3
- package/dist/services/UserLending/user-lending.js.map +1 -1
- package/dist/tests/facade.test.d.ts +1 -0
- package/dist/tests/facade.test.js +196 -0
- package/dist/tests/facade.test.js.map +1 -0
- package/dist/tests/sample.test.js +19 -14
- package/dist/tests/sample.test.js.map +1 -1
- package/dist/utils/deployment-mode.d.ts +6 -0
- package/dist/utils/deployment-mode.js +8 -0
- package/dist/utils/deployment-mode.js.map +1 -0
- package/package.json +2 -2
- package/src/facade/chain-configs.ts +93 -0
- package/src/facade/deposits.ts +102 -0
- package/src/facade/index.ts +26 -0
- package/src/facade/kasu.ts +144 -0
- package/src/facade/strategies.ts +119 -0
- package/src/facade/types.ts +168 -0
- package/src/facade/user-portfolio.ts +73 -0
- package/src/index.ts +59 -25
- package/src/kasu-sdk.ts +27 -0
- package/src/sdk-config.ts +43 -15
- package/src/services/DataService/data-service.ts +106 -66
- package/src/services/DataService/queries.ts +0 -9
- package/src/services/DataService/subgraph-types.ts +0 -7
- package/src/services/DataService/types.ts +0 -1
- package/src/services/Locking/locking.ts +141 -25
- package/src/services/Locking/types.ts +1 -1
- package/src/services/Portfolio/portfolio.ts +21 -11
- package/src/services/Portfolio/types.ts +2 -2
- package/src/services/UserLending/user-lending.ts +13 -4
- package/src/tests/facade.test.ts +245 -0
- package/src/tests/sample.test.ts +7 -9
- package/src/utils/deployment-mode.ts +9 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChainConfigEntry } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in chain configurations for Kasu-supported networks.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { CHAIN_CONFIGS } from '@kasufinance/kasu-sdk';
|
|
8
|
+
* const base = CHAIN_CONFIGS.base;
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare const CHAIN_CONFIGS: Record<'base' | 'xdc' | 'plume', ChainConfigEntry>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in chain configurations for Kasu-supported networks.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { CHAIN_CONFIGS } from '@kasufinance/kasu-sdk';
|
|
7
|
+
* const base = CHAIN_CONFIGS.base;
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export const CHAIN_CONFIGS = {
|
|
11
|
+
base: {
|
|
12
|
+
chainId: 8453,
|
|
13
|
+
name: 'Base Mainnet',
|
|
14
|
+
isLiteDeployment: false,
|
|
15
|
+
contracts: {
|
|
16
|
+
KSUToken: '0x5D9b878744dbe721a3f33A60a6b102E289CeADBA',
|
|
17
|
+
IKSULocking: '0xB145C061684C701c2C018A3f322aa14F5A553CE1',
|
|
18
|
+
IKSULockBonus: '0xEEDE30AcF16caFf49c1a48F75185C67Be2e20B40',
|
|
19
|
+
LendingPoolManager: '0xE1Be322323a412579b4A09fB08ff4bfcA12096B5',
|
|
20
|
+
UserManager: '0x5Dc8D315a80fd99AbEF0f327B9a52a3FBC3C93f3',
|
|
21
|
+
KasuAllowList: '0x807A7e119EBf0282420b5Ca0e0056c0525cBf8BB',
|
|
22
|
+
SystemVariables: '0x193Bb02A24F5562b58fEB86550e6f09Bb6c41f69',
|
|
23
|
+
KsuPrice: '0x221a54CbbD5f490Bd8e77CF36acBA4B1304E5c1b',
|
|
24
|
+
UserLoyaltyRewards: '0xB4784f69Bb1F1076F50907cB0a815908a719D635',
|
|
25
|
+
ClearingCoordinator: '0x2cF12A6d91fa4bEB5a4C17589a03e78F88f57DE2',
|
|
26
|
+
KasuNFTs: '0x4946fF5f1a6550524C425479022D50446AA2968E',
|
|
27
|
+
ExternalTVL: '0x662379FEBb3e4F91400B5f7d4f7F7ce4699F3c9F',
|
|
28
|
+
},
|
|
29
|
+
subgraphUrl: 'https://api.goldsky.com/api/public/project_cmgzlpxm300765np2a19421om/subgraphs/kasu-base/v1.0.13/gn',
|
|
30
|
+
directusUrl: 'https://kasu-finance.directus.app/',
|
|
31
|
+
unusedPoolIds: [],
|
|
32
|
+
poolMetadataMapping: undefined,
|
|
33
|
+
},
|
|
34
|
+
xdc: {
|
|
35
|
+
chainId: 50,
|
|
36
|
+
name: 'XDC Mainnet',
|
|
37
|
+
isLiteDeployment: true,
|
|
38
|
+
contracts: {
|
|
39
|
+
// No KSUToken on Lite deployments
|
|
40
|
+
IKSULocking: '0x7fF469f8c5fba92A9051B8D28794CBb891760e81',
|
|
41
|
+
IKSULockBonus: '0x7cc1434EfA50301Fdd56B7c5c6fF7e30Dc20C55c',
|
|
42
|
+
LendingPoolManager: '0xa46143db92aBe5bB1f61d13d8C1cCd50fc40Ca10',
|
|
43
|
+
UserManager: '0x9b57dF89e59235f0481A5Fae942302c8831e1B81',
|
|
44
|
+
KasuAllowList: '0x32c1Ff5FbBe6D28503ddc46E5001C0D13d6E9B2A',
|
|
45
|
+
SystemVariables: '0x34d17c9DD1f31Fb34757DE923EC083601d0eDFFe',
|
|
46
|
+
KsuPrice: '0x666b589933965bF8B378eD973f0404b6cae0eb52',
|
|
47
|
+
UserLoyaltyRewards: '0xb95834C5610A178be9065Dd1EF78258D29879CDb',
|
|
48
|
+
ClearingCoordinator: '0xAF0a66953Eba1c5353eB7425b398B213Bb2c6121',
|
|
49
|
+
// No KasuNFTs on Lite deployments
|
|
50
|
+
ExternalTVL: '0xCCB4156964377CF36441f3775A2A800dbeCB8094',
|
|
51
|
+
},
|
|
52
|
+
subgraphUrl: 'https://api.goldsky.com/api/public/project_cmgzlpxm300765np2a19421om/subgraphs/kasu-xdc/v1.0.0/gn',
|
|
53
|
+
directusUrl: 'https://kasu-finance.directus.app/',
|
|
54
|
+
unusedPoolIds: [],
|
|
55
|
+
poolMetadataMapping: {
|
|
56
|
+
'0x20f42fb45f91657acf9528b99a5a16d0229c7800': '0xc987350716fe4a7d674c3591c391d29eba26b8ce',
|
|
57
|
+
'0x3b7cb493aa22f731db2ab424d918e7375e00f6a9': '0x03f93c8caa9a82e000d35673ba34a4c0e6e117a2',
|
|
58
|
+
'0xeda50c91a8c4ca8a83652b8542c0b3bd00a71fad': '0xc347a9e4aec8c8d11a149d2907deb2bf23b81c6f',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
plume: {
|
|
62
|
+
chainId: 98866,
|
|
63
|
+
name: 'Plume Mainnet',
|
|
64
|
+
isLiteDeployment: true,
|
|
65
|
+
contracts: {
|
|
66
|
+
// Placeholder — update when Plume contracts are deployed
|
|
67
|
+
IKSULocking: '',
|
|
68
|
+
IKSULockBonus: '',
|
|
69
|
+
LendingPoolManager: '',
|
|
70
|
+
UserManager: '',
|
|
71
|
+
KasuAllowList: '',
|
|
72
|
+
SystemVariables: '',
|
|
73
|
+
KsuPrice: '',
|
|
74
|
+
UserLoyaltyRewards: '',
|
|
75
|
+
ClearingCoordinator: '',
|
|
76
|
+
ExternalTVL: '',
|
|
77
|
+
},
|
|
78
|
+
subgraphUrl: 'https://api.goldsky.com/api/public/project_cmgzlpxm300765np2a19421om/subgraphs/kasu-plume/prod',
|
|
79
|
+
directusUrl: 'https://kasu-finance.directus.app/',
|
|
80
|
+
unusedPoolIds: [],
|
|
81
|
+
poolMetadataMapping: undefined,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=chain-configs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-configs.js","sourceRoot":"","sources":["../../src/facade/chain-configs.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAuD;IAC7E,IAAI,EAAE;QACF,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,KAAK;QACvB,SAAS,EAAE;YACP,QAAQ,EAAE,4CAA4C;YACtD,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,4CAA4C;YAC3D,kBAAkB,EAAE,4CAA4C;YAChE,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,4CAA4C;YAC3D,eAAe,EAAE,4CAA4C;YAC7D,QAAQ,EAAE,4CAA4C;YACtD,kBAAkB,EAAE,4CAA4C;YAChE,mBAAmB,EAAE,4CAA4C;YACjE,QAAQ,EAAE,4CAA4C;YACtD,WAAW,EAAE,4CAA4C;SAC5D;QACD,WAAW,EACP,qGAAqG;QACzG,WAAW,EAAE,oCAAoC;QACjD,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,SAAS;KACjC;IAED,GAAG,EAAE;QACD,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE;YACP,kCAAkC;YAClC,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,4CAA4C;YAC3D,kBAAkB,EAAE,4CAA4C;YAChE,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,4CAA4C;YAC3D,eAAe,EAAE,4CAA4C;YAC7D,QAAQ,EAAE,4CAA4C;YACtD,kBAAkB,EAAE,4CAA4C;YAChE,mBAAmB,EAAE,4CAA4C;YACjE,kCAAkC;YAClC,WAAW,EAAE,4CAA4C;SAC5D;QACD,WAAW,EACP,mGAAmG;QACvG,WAAW,EAAE,oCAAoC;QACjD,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE;YACjB,4CAA4C,EACxC,4CAA4C;YAChD,4CAA4C,EACxC,4CAA4C;YAChD,4CAA4C,EACxC,4CAA4C;SACnD;KACJ;IAED,KAAK,EAAE;QACH,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,eAAe;QACrB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE;YACP,yDAAyD;YACzD,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,EAAE;YACjB,kBAAkB,EAAE,EAAE;YACtB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,EAAE;YACZ,kBAAkB,EAAE,EAAE;YACtB,mBAAmB,EAAE,EAAE;YACvB,WAAW,EAAE,EAAE;SAClB;QACD,WAAW,EACP,gGAAgG;QACpG,WAAW,EAAE,oCAAoC;QACjD,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,SAAS;KACjC;CACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ContractTransaction } from 'ethers';
|
|
2
|
+
import { UserLending } from '../services/UserLending/user-lending';
|
|
3
|
+
import { DepositParams, KycParams, WithdrawParams } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* High-level facade for deposit and withdrawal operations.
|
|
6
|
+
*
|
|
7
|
+
* Integrators use this to submit on-chain transactions without
|
|
8
|
+
* worrying about internal encoding details.
|
|
9
|
+
*/
|
|
10
|
+
export declare class DepositsFacade {
|
|
11
|
+
private _userLending;
|
|
12
|
+
private _chainId;
|
|
13
|
+
constructor(_userLending: UserLending, _chainId: string);
|
|
14
|
+
/**
|
|
15
|
+
* Submit a deposit request.
|
|
16
|
+
*
|
|
17
|
+
* The integrator must first obtain a KYC signature via the Nexera flow
|
|
18
|
+
* using the params from `buildKycParams()`.
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* const kycParams = kasu.deposits.buildKycParams('0xUser...');
|
|
22
|
+
* // ... obtain kycSignature from your backend via Nexera ...
|
|
23
|
+
* const tx = await kasu.deposits.deposit({
|
|
24
|
+
* poolId: '0x...',
|
|
25
|
+
* trancheId: '0x...',
|
|
26
|
+
* amount: parseUnits('1000', 6), // 6 decimals for USDC/AUDD; use token's actual decimals
|
|
27
|
+
* kycSignature: { blockExpiration, signature },
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
deposit(params: DepositParams): Promise<ContractTransaction>;
|
|
32
|
+
/**
|
|
33
|
+
* Submit a withdrawal request for a specific stable asset amount.
|
|
34
|
+
*/
|
|
35
|
+
withdraw(params: WithdrawParams): Promise<ContractTransaction>;
|
|
36
|
+
/**
|
|
37
|
+
* Withdraw the entire balance from a tranche.
|
|
38
|
+
*/
|
|
39
|
+
withdrawMax(poolId: string, trancheId: string, userAddress: string): Promise<ContractTransaction>;
|
|
40
|
+
/**
|
|
41
|
+
* Build KYC signature parameters for the Nexera verification flow.
|
|
42
|
+
*
|
|
43
|
+
* The integrator is responsible for sending these to their backend,
|
|
44
|
+
* which obtains the signature from Nexera's signing service.
|
|
45
|
+
*/
|
|
46
|
+
buildKycParams(userAddress: `0x${string}`): KycParams;
|
|
47
|
+
/**
|
|
48
|
+
* Check whether the pool is currently in a clearing period
|
|
49
|
+
* (deposits/withdrawals are temporarily paused).
|
|
50
|
+
*/
|
|
51
|
+
isClearingPending(poolId: string): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get the current epoch number.
|
|
54
|
+
*/
|
|
55
|
+
getCurrentEpoch(): Promise<string>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* High-level facade for deposit and withdrawal operations.
|
|
12
|
+
*
|
|
13
|
+
* Integrators use this to submit on-chain transactions without
|
|
14
|
+
* worrying about internal encoding details.
|
|
15
|
+
*/
|
|
16
|
+
export class DepositsFacade {
|
|
17
|
+
constructor(_userLending, _chainId) {
|
|
18
|
+
this._userLending = _userLending;
|
|
19
|
+
this._chainId = _chainId;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Submit a deposit request.
|
|
23
|
+
*
|
|
24
|
+
* The integrator must first obtain a KYC signature via the Nexera flow
|
|
25
|
+
* using the params from `buildKycParams()`.
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const kycParams = kasu.deposits.buildKycParams('0xUser...');
|
|
29
|
+
* // ... obtain kycSignature from your backend via Nexera ...
|
|
30
|
+
* const tx = await kasu.deposits.deposit({
|
|
31
|
+
* poolId: '0x...',
|
|
32
|
+
* trancheId: '0x...',
|
|
33
|
+
* amount: parseUnits('1000', 6), // 6 decimals for USDC/AUDD; use token's actual decimals
|
|
34
|
+
* kycSignature: { blockExpiration, signature },
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
deposit(params) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
var _a, _b, _c, _d;
|
|
41
|
+
return yield this._userLending.requestDepositWithKyc(params.poolId, params.trancheId, params.amount, (_a = params.swapData) !== null && _a !== void 0 ? _a : '0x', (_b = params.fixedTermConfigId) !== null && _b !== void 0 ? _b : 0, (_c = params.depositData) !== null && _c !== void 0 ? _c : '0x', params.kycSignature, (_d = params.ethValue) !== null && _d !== void 0 ? _d : '0');
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Submit a withdrawal request for a specific stable asset amount.
|
|
46
|
+
*/
|
|
47
|
+
withdraw(params) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
return yield this._userLending.requestWithdrawalInAsset(params.poolId, params.trancheId, params.amount);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Withdraw the entire balance from a tranche.
|
|
54
|
+
*/
|
|
55
|
+
withdrawMax(poolId, trancheId, userAddress) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
return yield this._userLending.requestWithdrawalMax(poolId, trancheId, userAddress);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build KYC signature parameters for the Nexera verification flow.
|
|
62
|
+
*
|
|
63
|
+
* The integrator is responsible for sending these to their backend,
|
|
64
|
+
* which obtains the signature from Nexera's signing service.
|
|
65
|
+
*/
|
|
66
|
+
buildKycParams(userAddress) {
|
|
67
|
+
return this._userLending.buildKycSignatureParams(userAddress, this._chainId);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check whether the pool is currently in a clearing period
|
|
71
|
+
* (deposits/withdrawals are temporarily paused).
|
|
72
|
+
*/
|
|
73
|
+
isClearingPending(poolId) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
return yield this._userLending.isClearingPending(poolId);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get the current epoch number.
|
|
80
|
+
*/
|
|
81
|
+
getCurrentEpoch() {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
return yield this._userLending.getCurrentEpoch();
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=deposits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deposits.js","sourceRoot":"","sources":["../../src/facade/deposits.ts"],"names":[],"mappings":";;;;;;;;;AAMA;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACvB,YACY,YAAyB,EACzB,QAAgB;QADhB,iBAAY,GAAZ,YAAY,CAAa;QACzB,aAAQ,GAAR,QAAQ,CAAQ;IACzB,CAAC;IAEJ;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CAAC,MAAqB;;;YAC/B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAChD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,EACb,MAAA,MAAM,CAAC,QAAQ,mCAAI,IAAI,EACvB,MAAA,MAAM,CAAC,iBAAiB,mCAAI,CAAC,EAC7B,MAAA,MAAM,CAAC,WAAW,mCAAI,IAAI,EAC1B,MAAM,CAAC,YAAY,EACnB,MAAA,MAAM,CAAC,QAAQ,mCAAI,GAAG,CACzB,CAAC;QACN,CAAC;KAAA;IAED;;OAEG;IACG,QAAQ,CAAC,MAAsB;;YACjC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,wBAAwB,CACnD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,MAAM,CAChB,CAAC;QACN,CAAC;KAAA;IAED;;OAEG;IACG,WAAW,CACb,MAAc,EACd,SAAiB,EACjB,WAAmB;;YAEnB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAC/C,MAAM,EACN,SAAS,EACT,WAAW,CACd,CAAC;QACN,CAAC;KAAA;IAED;;;;;OAKG;IACH,cAAc,CAAC,WAA0B;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAC5C,WAAW,EACX,IAAI,CAAC,QAAQ,CAChB,CAAC;IACN,CAAC;IAED;;;OAGG;IACG,iBAAiB,CAAC,MAAc;;YAClC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;KAAA;IAED;;OAEG;IACG,eAAe;;YACjB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACrD,CAAC;KAAA;CACJ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Kasu } from './kasu';
|
|
2
|
+
export { StrategiesFacade } from './strategies';
|
|
3
|
+
export { DepositsFacade } from './deposits';
|
|
4
|
+
export { PortfolioFacade } from './user-portfolio';
|
|
5
|
+
export { CHAIN_CONFIGS } from './chain-configs';
|
|
6
|
+
export type { SupportedChain, ChainConfigEntry, KasuOptions, Strategy, StrategyTranche, FixedTermOption, DepositParams, WithdrawParams, DepositLimits, KycParams, UserPositions, PlatformStats, } from './types';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Main entry point
|
|
2
|
+
export { Kasu } from './kasu';
|
|
3
|
+
// Individual facades (for advanced composition)
|
|
4
|
+
export { StrategiesFacade } from './strategies';
|
|
5
|
+
export { DepositsFacade } from './deposits';
|
|
6
|
+
export { PortfolioFacade } from './user-portfolio';
|
|
7
|
+
// Chain configurations
|
|
8
|
+
export { CHAIN_CONFIGS } from './chain-configs';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/facade/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,gDAAgD;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,uBAAuB;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { KasuSdk } from '../kasu-sdk';
|
|
2
|
+
import { DepositsFacade } from './deposits';
|
|
3
|
+
import { StrategiesFacade } from './strategies';
|
|
4
|
+
import { ChainConfigEntry, KasuOptions } from './types';
|
|
5
|
+
import { PortfolioFacade } from './user-portfolio';
|
|
6
|
+
/**
|
|
7
|
+
* High-level entry point for external integrators.
|
|
8
|
+
*
|
|
9
|
+
* Provides three domain facades — `strategies`, `deposits`, `portfolio` — and
|
|
10
|
+
* exposes the underlying `KasuSdk` services via `.services` for power-users.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { Kasu } from '@kasufinance/kasu-sdk';
|
|
14
|
+
*
|
|
15
|
+
* const kasu = Kasu.create({ chain: 'base', signerOrProvider: provider });
|
|
16
|
+
*
|
|
17
|
+
* // Browse strategies
|
|
18
|
+
* const strategies = await kasu.strategies.getAll();
|
|
19
|
+
*
|
|
20
|
+
* // Deposit
|
|
21
|
+
* const tx = await kasu.deposits.deposit({ poolId, trancheId, amount, kycSignature });
|
|
22
|
+
*
|
|
23
|
+
* // User positions
|
|
24
|
+
* const positions = await kasu.portfolio.getPositions(userAddress);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class Kasu {
|
|
28
|
+
/** Browse lending strategies, APY, capacity. */
|
|
29
|
+
readonly strategies: StrategiesFacade;
|
|
30
|
+
/** Deposit, withdraw, KYC helpers. */
|
|
31
|
+
readonly deposits: DepositsFacade;
|
|
32
|
+
/** User positions, yields, transaction history. */
|
|
33
|
+
readonly portfolio: PortfolioFacade;
|
|
34
|
+
private readonly _sdk;
|
|
35
|
+
private readonly _chainConfig;
|
|
36
|
+
private constructor();
|
|
37
|
+
/**
|
|
38
|
+
* Create a Kasu instance with built-in chain config.
|
|
39
|
+
*
|
|
40
|
+
* ```ts
|
|
41
|
+
* // Minimal setup — uses built-in Base mainnet config
|
|
42
|
+
* const kasu = Kasu.create({ chain: 'base', signerOrProvider: provider });
|
|
43
|
+
*
|
|
44
|
+
* // Custom config override
|
|
45
|
+
* const kasu = Kasu.create({
|
|
46
|
+
* chain: 'base',
|
|
47
|
+
* signerOrProvider: signer,
|
|
48
|
+
* configOverrides: { UNUSED_LENDING_POOL_IDS: ['0x...'] },
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Fully custom chain
|
|
52
|
+
* const kasu = Kasu.create({
|
|
53
|
+
* chain: { chainId: 123, name: 'MyChain', ... },
|
|
54
|
+
* signerOrProvider: provider,
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
static create(options: KasuOptions): Kasu;
|
|
59
|
+
/**
|
|
60
|
+
* Access the underlying `KasuSdk` services for advanced use cases.
|
|
61
|
+
*
|
|
62
|
+
* ```ts
|
|
63
|
+
* const locks = await kasu.services.Locking.getUserLocks(address);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
get services(): KasuSdk;
|
|
67
|
+
/** The resolved chain configuration. */
|
|
68
|
+
get chainConfig(): ChainConfigEntry;
|
|
69
|
+
/** Whether this deployment has KSU token / locking features. */
|
|
70
|
+
get isLiteDeployment(): boolean;
|
|
71
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { KasuSdk } from '../kasu-sdk';
|
|
2
|
+
import { SdkConfig } from '../sdk-config';
|
|
3
|
+
import { CHAIN_CONFIGS } from './chain-configs';
|
|
4
|
+
import { DepositsFacade } from './deposits';
|
|
5
|
+
import { StrategiesFacade } from './strategies';
|
|
6
|
+
import { PortfolioFacade } from './user-portfolio';
|
|
7
|
+
/**
|
|
8
|
+
* High-level entry point for external integrators.
|
|
9
|
+
*
|
|
10
|
+
* Provides three domain facades — `strategies`, `deposits`, `portfolio` — and
|
|
11
|
+
* exposes the underlying `KasuSdk` services via `.services` for power-users.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { Kasu } from '@kasufinance/kasu-sdk';
|
|
15
|
+
*
|
|
16
|
+
* const kasu = Kasu.create({ chain: 'base', signerOrProvider: provider });
|
|
17
|
+
*
|
|
18
|
+
* // Browse strategies
|
|
19
|
+
* const strategies = await kasu.strategies.getAll();
|
|
20
|
+
*
|
|
21
|
+
* // Deposit
|
|
22
|
+
* const tx = await kasu.deposits.deposit({ poolId, trancheId, amount, kycSignature });
|
|
23
|
+
*
|
|
24
|
+
* // User positions
|
|
25
|
+
* const positions = await kasu.portfolio.getPositions(userAddress);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class Kasu {
|
|
29
|
+
constructor(sdk, chainConfig) {
|
|
30
|
+
this._sdk = sdk;
|
|
31
|
+
this._chainConfig = chainConfig;
|
|
32
|
+
this.strategies = new StrategiesFacade(sdk.DataService, sdk.UserLending);
|
|
33
|
+
this.deposits = new DepositsFacade(sdk.UserLending, chainConfig.chainId.toString());
|
|
34
|
+
this.portfolio = new PortfolioFacade(sdk.DataService, sdk.UserLending, sdk.Portfolio);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a Kasu instance with built-in chain config.
|
|
38
|
+
*
|
|
39
|
+
* ```ts
|
|
40
|
+
* // Minimal setup — uses built-in Base mainnet config
|
|
41
|
+
* const kasu = Kasu.create({ chain: 'base', signerOrProvider: provider });
|
|
42
|
+
*
|
|
43
|
+
* // Custom config override
|
|
44
|
+
* const kasu = Kasu.create({
|
|
45
|
+
* chain: 'base',
|
|
46
|
+
* signerOrProvider: signer,
|
|
47
|
+
* configOverrides: { UNUSED_LENDING_POOL_IDS: ['0x...'] },
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* // Fully custom chain
|
|
51
|
+
* const kasu = Kasu.create({
|
|
52
|
+
* chain: { chainId: 123, name: 'MyChain', ... },
|
|
53
|
+
* signerOrProvider: provider,
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
static create(options) {
|
|
58
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
59
|
+
const chainConfig = resolveChainConfig(options.chain);
|
|
60
|
+
const overrides = (_a = options.configOverrides) !== null && _a !== void 0 ? _a : {};
|
|
61
|
+
const sdkConfig = new SdkConfig({
|
|
62
|
+
subgraphUrl: (_b = overrides.subgraphUrl) !== null && _b !== void 0 ? _b : chainConfig.subgraphUrl,
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
64
|
+
contracts: (_c = overrides.contracts) !== null && _c !== void 0 ? _c : chainConfig.contracts,
|
|
65
|
+
directusUrl: (_d = overrides.directusUrl) !== null && _d !== void 0 ? _d : chainConfig.directusUrl,
|
|
66
|
+
UNUSED_LENDING_POOL_IDS: (_e = overrides.UNUSED_LENDING_POOL_IDS) !== null && _e !== void 0 ? _e : chainConfig.unusedPoolIds,
|
|
67
|
+
isLiteDeployment: (_f = overrides.isLiteDeployment) !== null && _f !== void 0 ? _f : chainConfig.isLiteDeployment,
|
|
68
|
+
poolMetadataMapping: (_g = overrides.poolMetadataMapping) !== null && _g !== void 0 ? _g : chainConfig.poolMetadataMapping,
|
|
69
|
+
});
|
|
70
|
+
const sdk = new KasuSdk(sdkConfig, options.signerOrProvider);
|
|
71
|
+
return new Kasu(sdk, chainConfig);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Access the underlying `KasuSdk` services for advanced use cases.
|
|
75
|
+
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* const locks = await kasu.services.Locking.getUserLocks(address);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
get services() {
|
|
81
|
+
return this._sdk;
|
|
82
|
+
}
|
|
83
|
+
/** The resolved chain configuration. */
|
|
84
|
+
get chainConfig() {
|
|
85
|
+
return this._chainConfig;
|
|
86
|
+
}
|
|
87
|
+
/** Whether this deployment has KSU token / locking features. */
|
|
88
|
+
get isLiteDeployment() {
|
|
89
|
+
return this._chainConfig.isLiteDeployment;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Helpers
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
function resolveChainConfig(chain) {
|
|
96
|
+
if (typeof chain === 'string') {
|
|
97
|
+
return CHAIN_CONFIGS[chain];
|
|
98
|
+
}
|
|
99
|
+
return chain;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=kasu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kasu.js","sourceRoot":"","sources":["../../src/facade/kasu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,IAAI;IAWb,YACI,GAAY,EACZ,WAA6B;QAE7B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAClC,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,WAAW,CAClB,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAC9B,GAAG,CAAC,WAAW,EACf,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CACjC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAChC,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,CAChB,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,MAAM,CAAC,OAAoB;;QAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,eAAe,mCAAI,EAAE,CAAC;QAEhD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC5B,WAAW,EAAE,MAAA,SAAS,CAAC,WAAW,mCAAI,WAAW,CAAC,WAAW;YAC7D,mEAAmE;YACnE,SAAS,EAAE,MAAA,SAAS,CAAC,SAAS,mCAAI,WAAW,CAAC,SAAS;YACvD,WAAW,EACP,MAAA,SAAS,CAAC,WAAW,mCAAI,WAAW,CAAC,WAAW;YACpD,uBAAuB,EACnB,MAAA,SAAS,CAAC,uBAAuB,mCACjC,WAAW,CAAC,aAAa;YAC7B,gBAAgB,EACZ,MAAA,SAAS,CAAC,gBAAgB,mCAAI,WAAW,CAAC,gBAAgB;YAC9D,mBAAmB,EACf,MAAA,SAAS,CAAC,mBAAmB,mCAC7B,WAAW,CAAC,mBAAmB;SACtC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC7D,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,wCAAwC;IACxC,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,gEAAgE;IAChE,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;IAC9C,CAAC;CACJ;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,kBAAkB,CACvB,KAAwC;IAExC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DataService } from '../services/DataService/data-service';
|
|
2
|
+
import { UserLending } from '../services/UserLending/user-lending';
|
|
3
|
+
import { DepositLimits, PlatformStats, Strategy, StrategyTranche } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* High-level facade for browsing Kasu lending strategies (pools).
|
|
6
|
+
*
|
|
7
|
+
* Handles epoch fetching internally so callers never need to know about epochs.
|
|
8
|
+
*/
|
|
9
|
+
export declare class StrategiesFacade {
|
|
10
|
+
private _dataService;
|
|
11
|
+
private _userLending;
|
|
12
|
+
constructor(_dataService: DataService, _userLending: UserLending);
|
|
13
|
+
/**
|
|
14
|
+
* Fetch all active lending strategies.
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* const strategies = await kasu.strategies.getAll();
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
getAll(poolIds?: string[]): Promise<Strategy[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch a single strategy by pool ID. Returns `null` if not found.
|
|
23
|
+
*/
|
|
24
|
+
getById(poolId: string): Promise<Strategy | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Aggregate platform statistics (TVL, loans, yield, loss rate).
|
|
27
|
+
*/
|
|
28
|
+
getPlatformStats(): Promise<PlatformStats>;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate deposit limits for a specific tranche.
|
|
31
|
+
*
|
|
32
|
+
* @param tranche - A `StrategyTranche` from `getAll()` or `getById()`.
|
|
33
|
+
* @returns min/max/capacity in ether-formatted USDC strings.
|
|
34
|
+
*/
|
|
35
|
+
calculateDepositLimits(tranche: StrategyTranche): DepositLimits;
|
|
36
|
+
private mapPoolToStrategy;
|
|
37
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* High-level facade for browsing Kasu lending strategies (pools).
|
|
12
|
+
*
|
|
13
|
+
* Handles epoch fetching internally so callers never need to know about epochs.
|
|
14
|
+
*/
|
|
15
|
+
export class StrategiesFacade {
|
|
16
|
+
constructor(_dataService, _userLending) {
|
|
17
|
+
this._dataService = _dataService;
|
|
18
|
+
this._userLending = _userLending;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Fetch all active lending strategies.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const strategies = await kasu.strategies.getAll();
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
getAll(poolIds) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const epochId = yield this._userLending.getCurrentEpoch();
|
|
30
|
+
const pools = yield this._dataService.getPoolOverview(epochId, poolIds);
|
|
31
|
+
return pools.map((pool) => this.mapPoolToStrategy(pool));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Fetch a single strategy by pool ID. Returns `null` if not found.
|
|
36
|
+
*/
|
|
37
|
+
getById(poolId) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var _a;
|
|
40
|
+
const results = yield this.getAll([poolId]);
|
|
41
|
+
return (_a = results[0]) !== null && _a !== void 0 ? _a : null;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Aggregate platform statistics (TVL, loans, yield, loss rate).
|
|
46
|
+
*/
|
|
47
|
+
getPlatformStats() {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const epochId = yield this._userLending.getCurrentEpoch();
|
|
50
|
+
const pools = yield this._dataService.getPoolOverview(epochId);
|
|
51
|
+
return yield this._dataService.getLendingTotals(pools);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Calculate deposit limits for a specific tranche.
|
|
56
|
+
*
|
|
57
|
+
* @param tranche - A `StrategyTranche` from `getAll()` or `getById()`.
|
|
58
|
+
* @returns min/max/capacity in ether-formatted USDC strings.
|
|
59
|
+
*/
|
|
60
|
+
calculateDepositLimits(tranche) {
|
|
61
|
+
const raw = tranche._raw;
|
|
62
|
+
const min = parseFloat(raw.minimumDeposit) < 1
|
|
63
|
+
? '1'
|
|
64
|
+
: raw.minimumDeposit;
|
|
65
|
+
const max = parseFloat(raw.maximumDeposit) > parseFloat(raw.poolCapacity)
|
|
66
|
+
? raw.poolCapacity
|
|
67
|
+
: raw.maximumDeposit;
|
|
68
|
+
return {
|
|
69
|
+
min,
|
|
70
|
+
max,
|
|
71
|
+
availableCapacity: raw.poolCapacity,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// ------------------------------------------------------------------
|
|
75
|
+
// Private helpers
|
|
76
|
+
// ------------------------------------------------------------------
|
|
77
|
+
mapPoolToStrategy(pool) {
|
|
78
|
+
const tranches = pool.tranches.map((t) => ({
|
|
79
|
+
id: t.id,
|
|
80
|
+
name: t.name,
|
|
81
|
+
apy: parseFloat(t.apy),
|
|
82
|
+
minApy: parseFloat(t.minApy),
|
|
83
|
+
maxApy: parseFloat(t.maxApy),
|
|
84
|
+
minimumDeposit: t.minimumDeposit,
|
|
85
|
+
maximumDeposit: t.maximumDeposit,
|
|
86
|
+
availableCapacity: t.poolCapacity,
|
|
87
|
+
fixedTermOptions: t.fixedTermConfig.map((ftd) => ({
|
|
88
|
+
configId: ftd.configId,
|
|
89
|
+
apy: parseFloat(ftd.apy),
|
|
90
|
+
epochLockDuration: ftd.epochLockDuration,
|
|
91
|
+
})),
|
|
92
|
+
_raw: t,
|
|
93
|
+
}));
|
|
94
|
+
return {
|
|
95
|
+
id: pool.id,
|
|
96
|
+
name: pool.poolName,
|
|
97
|
+
description: pool.description,
|
|
98
|
+
isActive: pool.isActive,
|
|
99
|
+
apy: pool.apy,
|
|
100
|
+
tvl: pool.totalValueLocked,
|
|
101
|
+
availableCapacity: pool.poolCapacity,
|
|
102
|
+
capacityUtilisation: pool.poolCapacityPercentage,
|
|
103
|
+
tranches,
|
|
104
|
+
assetClass: pool.assetClass,
|
|
105
|
+
apyStructure: pool.poolApyStructure,
|
|
106
|
+
thumbnailUrl: pool.thumbnailImageUrl,
|
|
107
|
+
bannerUrl: pool.bannerImageUrl,
|
|
108
|
+
_raw: pool,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../src/facade/strategies.ts"],"names":[],"mappings":"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"}
|