@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.
Files changed (84) hide show
  1. package/CLAUDE.md +410 -0
  2. package/README.md +179 -12
  3. package/dist/bundle.cjs.js +658 -90
  4. package/dist/bundle.esm.js +654 -92
  5. package/dist/facade/chain-configs.d.ts +11 -0
  6. package/dist/facade/chain-configs.js +84 -0
  7. package/dist/facade/chain-configs.js.map +1 -0
  8. package/dist/facade/deposits.d.ts +56 -0
  9. package/dist/facade/deposits.js +87 -0
  10. package/dist/facade/deposits.js.map +1 -0
  11. package/dist/facade/index.d.ts +6 -0
  12. package/dist/facade/index.js +9 -0
  13. package/dist/facade/index.js.map +1 -0
  14. package/dist/facade/kasu.d.ts +71 -0
  15. package/dist/facade/kasu.js +101 -0
  16. package/dist/facade/kasu.js.map +1 -0
  17. package/dist/facade/strategies.d.ts +37 -0
  18. package/dist/facade/strategies.js +112 -0
  19. package/dist/facade/strategies.js.map +1 -0
  20. package/dist/facade/types.d.ts +127 -0
  21. package/dist/facade/types.js +2 -0
  22. package/dist/facade/types.js.map +1 -0
  23. package/dist/facade/user-portfolio.d.ts +35 -0
  24. package/dist/facade/user-portfolio.js +53 -0
  25. package/dist/facade/user-portfolio.js.map +1 -0
  26. package/dist/index.d.ts +9 -17
  27. package/dist/index.js +9 -16
  28. package/dist/index.js.map +1 -1
  29. package/dist/kasu-sdk.d.ts +17 -0
  30. package/dist/kasu-sdk.js +17 -0
  31. package/dist/kasu-sdk.js.map +1 -0
  32. package/dist/sdk-config.d.ts +34 -4
  33. package/dist/sdk-config.js +9 -6
  34. package/dist/sdk-config.js.map +1 -1
  35. package/dist/services/DataService/data-service.d.ts +9 -2
  36. package/dist/services/DataService/data-service.js +91 -53
  37. package/dist/services/DataService/data-service.js.map +1 -1
  38. package/dist/services/DataService/queries.d.ts +0 -1
  39. package/dist/services/DataService/queries.js +0 -8
  40. package/dist/services/DataService/queries.js.map +1 -1
  41. package/dist/services/DataService/subgraph-types.d.ts +0 -6
  42. package/dist/services/DataService/types.d.ts +0 -1
  43. package/dist/services/Locking/locking.d.ts +9 -3
  44. package/dist/services/Locking/locking.js +114 -20
  45. package/dist/services/Locking/locking.js.map +1 -1
  46. package/dist/services/Locking/types.d.ts +1 -1
  47. package/dist/services/Portfolio/portfolio.d.ts +3 -2
  48. package/dist/services/Portfolio/portfolio.js +15 -7
  49. package/dist/services/Portfolio/portfolio.js.map +1 -1
  50. package/dist/services/Portfolio/types.d.ts +2 -2
  51. package/dist/services/UserLending/user-lending.d.ts +3 -1
  52. package/dist/services/UserLending/user-lending.js +9 -3
  53. package/dist/services/UserLending/user-lending.js.map +1 -1
  54. package/dist/tests/facade.test.d.ts +1 -0
  55. package/dist/tests/facade.test.js +196 -0
  56. package/dist/tests/facade.test.js.map +1 -0
  57. package/dist/tests/sample.test.js +19 -14
  58. package/dist/tests/sample.test.js.map +1 -1
  59. package/dist/utils/deployment-mode.d.ts +6 -0
  60. package/dist/utils/deployment-mode.js +8 -0
  61. package/dist/utils/deployment-mode.js.map +1 -0
  62. package/package.json +2 -2
  63. package/src/facade/chain-configs.ts +93 -0
  64. package/src/facade/deposits.ts +102 -0
  65. package/src/facade/index.ts +26 -0
  66. package/src/facade/kasu.ts +144 -0
  67. package/src/facade/strategies.ts +119 -0
  68. package/src/facade/types.ts +168 -0
  69. package/src/facade/user-portfolio.ts +73 -0
  70. package/src/index.ts +59 -25
  71. package/src/kasu-sdk.ts +27 -0
  72. package/src/sdk-config.ts +43 -15
  73. package/src/services/DataService/data-service.ts +106 -66
  74. package/src/services/DataService/queries.ts +0 -9
  75. package/src/services/DataService/subgraph-types.ts +0 -7
  76. package/src/services/DataService/types.ts +0 -1
  77. package/src/services/Locking/locking.ts +141 -25
  78. package/src/services/Locking/types.ts +1 -1
  79. package/src/services/Portfolio/portfolio.ts +21 -11
  80. package/src/services/Portfolio/types.ts +2 -2
  81. package/src/services/UserLending/user-lending.ts +13 -4
  82. package/src/tests/facade.test.ts +245 -0
  83. package/src/tests/sample.test.ts +7 -9
  84. 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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"}