@kasufinance/kasu-sdk 2.4.2 → 2.6.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/LICENSE +21 -0
- package/README.md +201 -253
- package/dist/bundle.cjs.js +5472 -1710
- package/dist/bundle.esm.js +5415 -1713
- package/dist/domain/au-minimum.d.ts +135 -0
- package/dist/domain/au-minimum.js +154 -0
- package/dist/domain/au-minimum.js.map +1 -0
- package/dist/domain/au-minimum.test.js +202 -0
- package/dist/domain/au-minimum.test.js.map +1 -0
- package/dist/domain/deposit-bounds.d.ts +62 -0
- package/dist/domain/deposit-bounds.js +84 -0
- package/dist/domain/deposit-bounds.js.map +1 -0
- package/dist/domain/deposit-bounds.test.d.ts +1 -0
- package/dist/domain/deposit-bounds.test.js +135 -0
- package/dist/domain/deposit-bounds.test.js.map +1 -0
- package/dist/domain/index.d.ts +40 -0
- package/dist/domain/index.js +33 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/loan-contract.d.ts +174 -0
- package/dist/domain/loan-contract.js +160 -0
- package/dist/domain/loan-contract.js.map +1 -0
- package/dist/domain/loan-contract.test.d.ts +1 -0
- package/dist/domain/loan-contract.test.js +255 -0
- package/dist/domain/loan-contract.test.js.map +1 -0
- package/dist/domain/partners.d.ts +34 -0
- package/dist/domain/partners.js +43 -0
- package/dist/domain/partners.js.map +1 -0
- package/dist/domain/partners.test.d.ts +1 -0
- package/dist/domain/partners.test.js +53 -0
- package/dist/domain/partners.test.js.map +1 -0
- package/dist/domain/pools.d.ts +70 -0
- package/dist/domain/pools.js +134 -0
- package/dist/domain/pools.js.map +1 -0
- package/dist/domain/pools.test.d.ts +1 -0
- package/dist/domain/pools.test.js +184 -0
- package/dist/domain/pools.test.js.map +1 -0
- package/dist/domain/rates.d.ts +83 -0
- package/dist/domain/rates.js +120 -0
- package/dist/domain/rates.js.map +1 -0
- package/dist/domain/rates.test.d.ts +1 -0
- package/dist/domain/rates.test.js +181 -0
- package/dist/domain/rates.test.js.map +1 -0
- package/dist/domain/requests.d.ts +181 -0
- package/dist/domain/requests.js +202 -0
- package/dist/domain/requests.js.map +1 -0
- package/dist/domain/requests.test.d.ts +1 -0
- package/dist/domain/requests.test.js +470 -0
- package/dist/domain/requests.test.js.map +1 -0
- package/dist/domain/settlement.d.ts +97 -0
- package/dist/domain/settlement.js +117 -0
- package/dist/domain/settlement.js.map +1 -0
- package/dist/domain/settlement.test.d.ts +1 -0
- package/dist/domain/settlement.test.js +152 -0
- package/dist/domain/settlement.test.js.map +1 -0
- package/dist/domain/tranche-display-name.d.ts +17 -0
- package/dist/domain/tranche-display-name.js +30 -0
- package/dist/domain/tranche-display-name.js.map +1 -0
- package/dist/domain/tranche-display-name.test.d.ts +1 -0
- package/dist/domain/tranche-display-name.test.js +58 -0
- package/dist/domain/tranche-display-name.test.js.map +1 -0
- package/dist/domain/tranches.d.ts +89 -0
- package/dist/domain/tranches.js +150 -0
- package/dist/domain/tranches.js.map +1 -0
- package/dist/domain/tranches.test.d.ts +1 -0
- package/dist/domain/tranches.test.js +206 -0
- package/dist/domain/tranches.test.js.map +1 -0
- package/dist/domain/wallet-errors.d.ts +37 -0
- package/dist/domain/wallet-errors.js +56 -0
- package/dist/domain/wallet-errors.js.map +1 -0
- package/dist/domain/wallet-errors.test.d.ts +1 -0
- package/dist/domain/wallet-errors.test.js +71 -0
- package/dist/domain/wallet-errors.test.js.map +1 -0
- package/dist/facade/chain-configs.js +61 -1
- package/dist/facade/chain-configs.js.map +1 -1
- package/dist/facade/config.test.d.ts +1 -0
- package/dist/facade/config.test.js +216 -0
- package/dist/facade/config.test.js.map +1 -0
- package/dist/facade/deposits.d.ts +22 -1
- package/dist/facade/deposits.js +24 -1
- package/dist/facade/deposits.js.map +1 -1
- package/dist/facade/facade.test.d.ts +1 -0
- package/dist/{tests → facade}/facade.test.js +87 -5
- package/dist/facade/facade.test.js.map +1 -0
- package/dist/facade/index.d.ts +2 -1
- package/dist/facade/index.js +2 -0
- package/dist/facade/index.js.map +1 -1
- package/dist/facade/kasu.d.ts +49 -8
- package/dist/facade/kasu.js +117 -13
- package/dist/facade/kasu.js.map +1 -1
- package/dist/facade/strategies.d.ts +25 -0
- package/dist/facade/strategies.js +36 -0
- package/dist/facade/strategies.js.map +1 -1
- package/dist/facade/types.d.ts +57 -2
- package/dist/facade/unused-pool-ids.d.ts +31 -0
- package/dist/facade/unused-pool-ids.js +57 -0
- package/dist/facade/unused-pool-ids.js.map +1 -0
- package/dist/facade/user-portfolio.d.ts +18 -0
- package/dist/facade/user-portfolio.js +23 -0
- package/dist/facade/user-portfolio.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/sdk-config.d.ts +11 -0
- package/dist/sdk-config.js +8 -1
- package/dist/sdk-config.js.map +1 -1
- package/dist/services/DataService/data-service.d.ts +5 -0
- package/dist/services/DataService/data-service.js +10 -12
- package/dist/services/DataService/data-service.js.map +1 -1
- package/dist/services/DataService/directus-client.d.ts +26 -0
- package/dist/services/DataService/directus-client.js +38 -0
- package/dist/services/DataService/directus-client.js.map +1 -0
- package/dist/services/Locking/calculate-apy.test.d.ts +1 -0
- package/dist/services/Locking/calculate-apy.test.js +41 -0
- package/dist/services/Locking/calculate-apy.test.js.map +1 -0
- package/dist/services/Locking/locking.d.ts +14 -0
- package/dist/services/Locking/locking.js +16 -2
- package/dist/services/Locking/locking.js.map +1 -1
- package/dist/services/UserLending/user-lending.js +11 -7
- package/dist/services/UserLending/user-lending.js.map +1 -1
- package/dist/tests/sample.test.js +46 -25
- package/dist/tests/sample.test.js.map +1 -1
- package/package.json +43 -12
- package/src/domain/au-minimum.test.ts +371 -0
- package/src/domain/au-minimum.ts +192 -0
- package/src/domain/deposit-bounds.test.ts +200 -0
- package/src/domain/deposit-bounds.ts +118 -0
- package/src/domain/index.ts +134 -0
- package/src/domain/loan-contract.test.ts +343 -0
- package/src/domain/loan-contract.ts +275 -0
- package/src/domain/partners.test.ts +83 -0
- package/src/domain/partners.ts +66 -0
- package/src/domain/pools.test.ts +260 -0
- package/src/domain/pools.ts +150 -0
- package/src/domain/rates.test.ts +254 -0
- package/src/domain/rates.ts +120 -0
- package/src/domain/requests.test.ts +653 -0
- package/src/domain/requests.ts +414 -0
- package/src/domain/settlement.test.ts +198 -0
- package/src/domain/settlement.ts +161 -0
- package/src/domain/tranche-display-name.test.ts +96 -0
- package/src/domain/tranche-display-name.ts +34 -0
- package/src/domain/tranches.test.ts +300 -0
- package/src/domain/tranches.ts +177 -0
- package/src/domain/wallet-errors.test.ts +100 -0
- package/src/domain/wallet-errors.ts +56 -0
- package/src/facade/chain-configs.ts +62 -1
- package/src/facade/config.test.ts +265 -0
- package/src/facade/deposits.ts +25 -0
- package/src/{tests → facade}/facade.test.ts +134 -5
- package/src/facade/index.ts +4 -0
- package/src/facade/kasu.ts +155 -12
- package/src/facade/strategies.ts +36 -0
- package/src/facade/types.ts +60 -2
- package/src/facade/unused-pool-ids.ts +59 -0
- package/src/facade/user-portfolio.ts +24 -0
- package/src/index.ts +8 -0
- package/src/sdk-config.ts +19 -1
- package/src/services/DataService/data-service.ts +14 -26
- package/src/services/DataService/directus-client.ts +54 -0
- package/src/services/Locking/calculate-apy.test.ts +52 -0
- package/src/services/Locking/locking.ts +16 -2
- package/src/services/UserLending/user-lending.ts +17 -21
- package/src/tests/sample.test.ts +54 -33
- package/.eslintignore +0 -3
- package/.eslintrc.json +0 -90
- package/.github/workflows/ci.yml +0 -39
- package/.github/workflows/gitleaks.yml +0 -22
- package/.github/workflows/main.yml +0 -41
- package/.gitleaksignore +0 -19
- package/.prettierignore +0 -3
- package/.prettierrc +0 -28
- package/CLAUDE.md +0 -410
- package/copy-abi.ps1 +0 -15
- package/dist/tests/facade.test.js.map +0 -1
- package/index.ts +0 -2
- package/jest-config.ts +0 -9
- package/jest.config.js +0 -8
- package/rollup.config.js +0 -45
- package/tsconfig.json +0 -27
- /package/dist/{tests/facade.test.d.ts → domain/au-minimum.test.d.ts} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
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
|
+
import { providers, Wallet } from 'ethers';
|
|
11
|
+
import { SdkConfig } from '../sdk-config';
|
|
12
|
+
import { CHAIN_CONFIGS } from './chain-configs';
|
|
13
|
+
import { Kasu } from './kasu';
|
|
14
|
+
// Pure config assertions — no network, unlike `facade.test.ts`.
|
|
15
|
+
const BASE_CONTRACTS = CHAIN_CONFIGS.base.contracts;
|
|
16
|
+
/** A signer with a provider attached, offline — nothing here sends anything. */
|
|
17
|
+
function signer() {
|
|
18
|
+
return Wallet.createRandom().connect(new providers.StaticJsonRpcProvider(CHAIN_CONFIGS.base.rpcUrls[0], CHAIN_CONFIGS.base.chainId));
|
|
19
|
+
}
|
|
20
|
+
describe('SdkConfig — UNUSED_LENDING_POOL_IDS normalisation', () => {
|
|
21
|
+
it("turns an empty exclusion list into the [''] sentinel", () => {
|
|
22
|
+
// `id_not_in: []` matches NOTHING in the subgraph: on Base it returns
|
|
23
|
+
// 0 pools where `['']` returns all 9 (verified live 2026-09-04).
|
|
24
|
+
const config = new SdkConfig({
|
|
25
|
+
subgraphUrl: 'https://example.invalid/subgraph',
|
|
26
|
+
contracts: BASE_CONTRACTS,
|
|
27
|
+
UNUSED_LENDING_POOL_IDS: [],
|
|
28
|
+
});
|
|
29
|
+
expect(config.UNUSED_LENDING_POOL_IDS).toEqual(['']);
|
|
30
|
+
});
|
|
31
|
+
it('leaves a caller-supplied exclusion list untouched', () => {
|
|
32
|
+
const config = new SdkConfig({
|
|
33
|
+
subgraphUrl: 'https://example.invalid/subgraph',
|
|
34
|
+
contracts: BASE_CONTRACTS,
|
|
35
|
+
UNUSED_LENDING_POOL_IDS: ['0xdead'],
|
|
36
|
+
});
|
|
37
|
+
expect(config.UNUSED_LENDING_POOL_IDS).toEqual(['0xdead']);
|
|
38
|
+
});
|
|
39
|
+
it('leaves a sentinel a consumer already passes untouched', () => {
|
|
40
|
+
// kasu-ui passes [''], kasu-mobile passes the zero address.
|
|
41
|
+
const zeroAddress = '0x0000000000000000000000000000000000000000';
|
|
42
|
+
for (const sentinel of [[''], [zeroAddress]]) {
|
|
43
|
+
const config = new SdkConfig({
|
|
44
|
+
subgraphUrl: 'https://example.invalid/subgraph',
|
|
45
|
+
contracts: BASE_CONTRACTS,
|
|
46
|
+
UNUSED_LENDING_POOL_IDS: sentinel,
|
|
47
|
+
});
|
|
48
|
+
expect(config.UNUSED_LENDING_POOL_IDS).toEqual(sentinel);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('CHAIN_CONFIGS — stable asset', () => {
|
|
53
|
+
it('gives every chain exactly one stable asset', () => {
|
|
54
|
+
for (const [chain, config] of Object.entries(CHAIN_CONFIGS)) {
|
|
55
|
+
expect(config.stableAsset.address).toMatch(/^0x[0-9a-fA-F]{40}$/);
|
|
56
|
+
expect(config.stableAsset.symbol.length).toBeGreaterThan(0);
|
|
57
|
+
expect(config.stableAsset.decimals).toBeGreaterThan(0);
|
|
58
|
+
expect(config.stableAsset.currencyCode).toMatch(/^[A-Z]{3}$/);
|
|
59
|
+
expect(chain).toBeTruthy();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it('carries the live token per deployment', () => {
|
|
63
|
+
expect(CHAIN_CONFIGS.base.stableAsset).toEqual({
|
|
64
|
+
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
65
|
+
symbol: 'USDC',
|
|
66
|
+
name: 'USD Coin',
|
|
67
|
+
decimals: 6,
|
|
68
|
+
currencyCode: 'USD',
|
|
69
|
+
});
|
|
70
|
+
expect(CHAIN_CONFIGS.xdc.stableAsset.symbol).toBe('AUDD');
|
|
71
|
+
expect(CHAIN_CONFIGS.xdc.stableAsset.currencyCode).toBe('AUD');
|
|
72
|
+
expect(CHAIN_CONFIGS['xdc-usdc'].stableAsset.symbol).toBe('USDC');
|
|
73
|
+
expect(CHAIN_CONFIGS.plume.stableAsset.symbol).toBe('pUSD');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('CHAIN_CONFIGS — rpcUrls', () => {
|
|
77
|
+
it('gives every live deployment at least one default endpoint', () => {
|
|
78
|
+
for (const chain of ['base', 'xdc', 'xdc-usdc']) {
|
|
79
|
+
expect(CHAIN_CONFIGS[chain].rpcUrls.length).toBeGreaterThan(0);
|
|
80
|
+
expect(CHAIN_CONFIGS[chain].retired).toBeUndefined();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
it('never lists an XDC endpoint that fails CORS preflight', () => {
|
|
84
|
+
// `rpc.xdc.org` / `erpc.xdc.org` answer OPTIONS without
|
|
85
|
+
// `access-control-allow-origin`, so a browser call hangs. House rule.
|
|
86
|
+
for (const config of Object.values(CHAIN_CONFIGS)) {
|
|
87
|
+
for (const url of config.rpcUrls) {
|
|
88
|
+
expect(url).not.toContain('rpc.xdc.org');
|
|
89
|
+
expect(url).not.toContain('erpc.xdc.org');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
it('marks the retired deployment and leaves it without a default RPC', () => {
|
|
94
|
+
expect(CHAIN_CONFIGS.plume.retired).toBe(true);
|
|
95
|
+
expect(CHAIN_CONFIGS.plume.rpcUrls).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('Kasu — read-only create and connect', () => {
|
|
99
|
+
it('creates a read-only instance with no signerOrProvider', () => {
|
|
100
|
+
const kasu = Kasu.create({ chain: 'base' });
|
|
101
|
+
expect(kasu.isReadOnly).toBe(true);
|
|
102
|
+
expect(kasu.provider).toBeInstanceOf(providers.StaticJsonRpcProvider);
|
|
103
|
+
});
|
|
104
|
+
it('uses rpcUrls[0] and the config chain id, with no network detection', () => {
|
|
105
|
+
const kasu = Kasu.create({ chain: 'base' });
|
|
106
|
+
const provider = kasu.provider;
|
|
107
|
+
expect(provider.connection.url).toBe(CHAIN_CONFIGS.base.rpcUrls[0]);
|
|
108
|
+
expect(provider.network.chainId).toBe(CHAIN_CONFIGS.base.chainId);
|
|
109
|
+
});
|
|
110
|
+
it('refuses a read-only create on a retired chain with no default RPC', () => {
|
|
111
|
+
expect(() => Kasu.create({ chain: 'plume' })).toThrow('Kasu.create: chain "plume" has no default RPC (retired); pass signerOrProvider');
|
|
112
|
+
});
|
|
113
|
+
it('still accepts an explicit provider for the retired chain', () => {
|
|
114
|
+
const provider = new providers.StaticJsonRpcProvider('https://example.invalid/plume', CHAIN_CONFIGS.plume.chainId);
|
|
115
|
+
const kasu = Kasu.create({ chain: 'plume', signerOrProvider: provider });
|
|
116
|
+
expect(kasu.isReadOnly).toBe(true);
|
|
117
|
+
expect(kasu.provider).toBe(provider);
|
|
118
|
+
});
|
|
119
|
+
it('is writable when created from a signer', () => {
|
|
120
|
+
const kasu = Kasu.create({ chain: 'base', signerOrProvider: signer() });
|
|
121
|
+
expect(kasu.isReadOnly).toBe(false);
|
|
122
|
+
});
|
|
123
|
+
it('connect returns a NEW writable instance, leaving the original read-only', () => {
|
|
124
|
+
const readOnly = Kasu.create({ chain: 'base' });
|
|
125
|
+
const connected = readOnly.connect(signer());
|
|
126
|
+
expect(connected).not.toBe(readOnly);
|
|
127
|
+
expect(connected.isReadOnly).toBe(false);
|
|
128
|
+
expect(readOnly.isReadOnly).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
it('connect keeps the chain config and the configOverrides', () => {
|
|
131
|
+
const readOnly = Kasu.create({
|
|
132
|
+
chain: 'base',
|
|
133
|
+
configOverrides: { UNUSED_LENDING_POOL_IDS: ['0xhidden'] },
|
|
134
|
+
});
|
|
135
|
+
const connected = readOnly.connect(signer());
|
|
136
|
+
expect(connected.chainConfig).toBe(readOnly.chainConfig);
|
|
137
|
+
const configOf = (kasu) => kasu.services.DataService
|
|
138
|
+
._kasuConfig;
|
|
139
|
+
expect(configOf(connected).UNUSED_LENDING_POOL_IDS).toEqual([
|
|
140
|
+
'0xhidden',
|
|
141
|
+
]);
|
|
142
|
+
});
|
|
143
|
+
it('exposes the signer’s own provider on a connected instance', () => {
|
|
144
|
+
const wallet = signer();
|
|
145
|
+
const kasu = Kasu.create({ chain: 'base', signerOrProvider: wallet });
|
|
146
|
+
expect(kasu.provider).toBe(wallet.provider);
|
|
147
|
+
});
|
|
148
|
+
it('throws rather than returning undefined for a provider-less signer', () => {
|
|
149
|
+
const kasu = Kasu.create({
|
|
150
|
+
chain: 'base',
|
|
151
|
+
signerOrProvider: Wallet.createRandom(),
|
|
152
|
+
});
|
|
153
|
+
expect(() => kasu.provider).toThrow('has no provider attached');
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe('DepositsFacade — read-only writes', () => {
|
|
157
|
+
const readOnly = () => Kasu.create({ chain: 'base' });
|
|
158
|
+
const READ_ONLY_MESSAGE = 'Kasu: this instance is read-only; call kasu.connect(signer) first';
|
|
159
|
+
it('refuses deposit before touching the contract', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
|
+
yield expect(readOnly().deposits.deposit({
|
|
161
|
+
poolId: '0xpool',
|
|
162
|
+
trancheId: '0xtranche',
|
|
163
|
+
amount: 1,
|
|
164
|
+
kycSignature: { blockExpiration: 0, signature: '0x' },
|
|
165
|
+
})).rejects.toThrow(READ_ONLY_MESSAGE);
|
|
166
|
+
}));
|
|
167
|
+
it('refuses withdraw', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
168
|
+
yield expect(readOnly().deposits.withdraw({
|
|
169
|
+
poolId: '0xpool',
|
|
170
|
+
trancheId: '0xtranche',
|
|
171
|
+
amount: 1,
|
|
172
|
+
})).rejects.toThrow(READ_ONLY_MESSAGE);
|
|
173
|
+
}));
|
|
174
|
+
it('refuses withdrawMax', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
+
yield expect(readOnly().deposits.withdrawMax('0xpool', '0xtranche', '0xuser')).rejects.toThrow(READ_ONLY_MESSAGE);
|
|
176
|
+
}));
|
|
177
|
+
it('lets a connected instance past the guard', () => {
|
|
178
|
+
const connected = readOnly().connect(signer());
|
|
179
|
+
// Reaches the contract call (and fails there on a fake address) rather
|
|
180
|
+
// than being refused up front. Probing the guard directly keeps the
|
|
181
|
+
// assertion off the network.
|
|
182
|
+
const guard = connected.deposits;
|
|
183
|
+
expect(() => {
|
|
184
|
+
guard.assertWritable();
|
|
185
|
+
}).not.toThrow();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('Kasu.create — a ChainConfigEntry written before 2.5.0', () => {
|
|
189
|
+
// kasu-app-admin hand-builds one of these for base-sepolia. TypeScript will
|
|
190
|
+
// ask it for `stableAsset` and `rpcUrls` on bump; the runtime must not
|
|
191
|
+
// crash first.
|
|
192
|
+
const legacy = () => ({
|
|
193
|
+
chainId: 84532,
|
|
194
|
+
name: 'base-sepolia',
|
|
195
|
+
isLiteDeployment: false,
|
|
196
|
+
contracts: BASE_CONTRACTS,
|
|
197
|
+
subgraphUrl: 'https://example.invalid/subgraph',
|
|
198
|
+
// Non-empty: `SdkConfig` documents `directusUrl` as optional, but
|
|
199
|
+
// `createDirectus('')` throws `TypeError: Invalid URL`. Pre-existing,
|
|
200
|
+
// and unrelated to what this test covers.
|
|
201
|
+
directusUrl: 'https://example.invalid/directus/',
|
|
202
|
+
unusedPoolIds: [''],
|
|
203
|
+
});
|
|
204
|
+
it('constructs with an explicit provider and falls back to 6 decimals', () => {
|
|
205
|
+
const kasu = Kasu.create({
|
|
206
|
+
chain: legacy(),
|
|
207
|
+
signerOrProvider: new providers.StaticJsonRpcProvider('https://example.invalid/rpc', 84532),
|
|
208
|
+
});
|
|
209
|
+
const config = kasu.services.DataService._kasuConfig;
|
|
210
|
+
expect(config.stableAssetDecimals).toBe(6);
|
|
211
|
+
});
|
|
212
|
+
it('refuses a read-only create with the same message a retired chain gives', () => {
|
|
213
|
+
expect(() => Kasu.create({ chain: legacy() })).toThrow('Kasu.create: chain "base-sepolia" has no default RPC (retired); pass signerOrProvider');
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/facade/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,28 @@ import { DepositParams, KycParams, WithdrawParams } from './types';
|
|
|
10
10
|
export declare class DepositsFacade {
|
|
11
11
|
private _userLending;
|
|
12
12
|
private _chainId;
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* True when the SDK holds a Provider rather than a Signer. Optional and
|
|
15
|
+
* defaulting to false so constructing this facade directly keeps
|
|
16
|
+
* working; `Kasu` always passes it.
|
|
17
|
+
*/
|
|
18
|
+
private _isReadOnly;
|
|
19
|
+
constructor(_userLending: UserLending, _chainId: string,
|
|
20
|
+
/**
|
|
21
|
+
* True when the SDK holds a Provider rather than a Signer. Optional and
|
|
22
|
+
* defaulting to false so constructing this facade directly keeps
|
|
23
|
+
* working; `Kasu` always passes it.
|
|
24
|
+
*/
|
|
25
|
+
_isReadOnly?: boolean);
|
|
26
|
+
/**
|
|
27
|
+
* Refuse a write BEFORE touching the contract.
|
|
28
|
+
*
|
|
29
|
+
* ethers would throw its own "sending a transaction requires a signer" a
|
|
30
|
+
* few frames deeper, after the params have been encoded — a message that
|
|
31
|
+
* says nothing about how to get a signer onto THIS object. Failing here
|
|
32
|
+
* names the fix.
|
|
33
|
+
*/
|
|
34
|
+
private assertWritable;
|
|
14
35
|
/**
|
|
15
36
|
* Submit a deposit request.
|
|
16
37
|
*
|
package/dist/facade/deposits.js
CHANGED
|
@@ -14,9 +14,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
14
14
|
* worrying about internal encoding details.
|
|
15
15
|
*/
|
|
16
16
|
export class DepositsFacade {
|
|
17
|
-
constructor(_userLending, _chainId
|
|
17
|
+
constructor(_userLending, _chainId,
|
|
18
|
+
/**
|
|
19
|
+
* True when the SDK holds a Provider rather than a Signer. Optional and
|
|
20
|
+
* defaulting to false so constructing this facade directly keeps
|
|
21
|
+
* working; `Kasu` always passes it.
|
|
22
|
+
*/
|
|
23
|
+
_isReadOnly = false) {
|
|
18
24
|
this._userLending = _userLending;
|
|
19
25
|
this._chainId = _chainId;
|
|
26
|
+
this._isReadOnly = _isReadOnly;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Refuse a write BEFORE touching the contract.
|
|
30
|
+
*
|
|
31
|
+
* ethers would throw its own "sending a transaction requires a signer" a
|
|
32
|
+
* few frames deeper, after the params have been encoded — a message that
|
|
33
|
+
* says nothing about how to get a signer onto THIS object. Failing here
|
|
34
|
+
* names the fix.
|
|
35
|
+
*/
|
|
36
|
+
assertWritable() {
|
|
37
|
+
if (this._isReadOnly) {
|
|
38
|
+
throw new Error('Kasu: this instance is read-only; call kasu.connect(signer) first');
|
|
39
|
+
}
|
|
20
40
|
}
|
|
21
41
|
/**
|
|
22
42
|
* Submit a deposit request.
|
|
@@ -38,6 +58,7 @@ export class DepositsFacade {
|
|
|
38
58
|
deposit(params) {
|
|
39
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
60
|
var _a, _b, _c, _d;
|
|
61
|
+
this.assertWritable();
|
|
41
62
|
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
63
|
});
|
|
43
64
|
}
|
|
@@ -46,6 +67,7 @@ export class DepositsFacade {
|
|
|
46
67
|
*/
|
|
47
68
|
withdraw(params) {
|
|
48
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
this.assertWritable();
|
|
49
71
|
return yield this._userLending.requestWithdrawalInAsset(params.poolId, params.trancheId, params.amount);
|
|
50
72
|
});
|
|
51
73
|
}
|
|
@@ -54,6 +76,7 @@ export class DepositsFacade {
|
|
|
54
76
|
*/
|
|
55
77
|
withdrawMax(poolId, trancheId, userAddress) {
|
|
56
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
this.assertWritable();
|
|
57
80
|
return yield this._userLending.requestWithdrawalMax(poolId, trancheId, userAddress);
|
|
58
81
|
});
|
|
59
82
|
}
|
|
@@ -1 +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;
|
|
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;IACxB;;;;OAIG;IACK,cAAc,KAAK;QAPnB,iBAAY,GAAZ,YAAY,CAAa;QACzB,aAAQ,GAAR,QAAQ,CAAQ;QAMhB,gBAAW,GAAX,WAAW,CAAQ;IAC5B,CAAC;IAEJ;;;;;;;OAOG;IACK,cAAc;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACX,mEAAmE,CACtE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CAAC,MAAqB;;;YAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,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,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,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,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,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 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
+
import { NO_DIRECTUS_URL_MESSAGE } from '../services/DataService/directus-client';
|
|
11
|
+
import { UserRequestStatus } from '../services/UserLending/subgraph-types';
|
|
12
|
+
import { CHAIN_CONFIGS } from './chain-configs';
|
|
13
|
+
import { DepositsFacade } from './deposits';
|
|
14
|
+
import { Kasu } from './kasu';
|
|
15
|
+
import { StrategiesFacade } from './strategies';
|
|
16
|
+
import { PortfolioFacade } from './user-portfolio';
|
|
6
17
|
// ---------------------------------------------------------------------------
|
|
7
18
|
// Chain configs
|
|
8
19
|
// ---------------------------------------------------------------------------
|
|
@@ -40,6 +51,15 @@ describe('CHAIN_CONFIGS', () => {
|
|
|
40
51
|
expect(config.subgraphUrl).toContain('goldsky.com');
|
|
41
52
|
}
|
|
42
53
|
});
|
|
54
|
+
it('plume points at the LEGACY goldsky project its frozen history is on', () => {
|
|
55
|
+
// Plume was indexed before the live chains moved to the current
|
|
56
|
+
// project; the same path under that project returns HTTP 404, so the
|
|
57
|
+
// retired deployment's history is only readable at this spelling —
|
|
58
|
+
// note the `/gn` suffix the current project's URLs do not carry.
|
|
59
|
+
const projectOf = (url) => { var _a; return (_a = url.split('/')[5]) !== null && _a !== void 0 ? _a : ''; };
|
|
60
|
+
expect(projectOf(CHAIN_CONFIGS.plume.subgraphUrl)).not.toBe(projectOf(CHAIN_CONFIGS.base.subgraphUrl));
|
|
61
|
+
expect(CHAIN_CONFIGS.plume.subgraphUrl.endsWith('/gn')).toBe(true);
|
|
62
|
+
});
|
|
43
63
|
it('xdc should have poolMetadataMapping', () => {
|
|
44
64
|
const mapping = CHAIN_CONFIGS.xdc.poolMetadataMapping;
|
|
45
65
|
expect(mapping).toBeDefined();
|
|
@@ -103,6 +123,29 @@ describe('Kasu.create()', () => {
|
|
|
103
123
|
});
|
|
104
124
|
expect(kasu).toBeInstanceOf(Kasu);
|
|
105
125
|
});
|
|
126
|
+
it('constructs without a directusUrl — on-chain data does not need one', () => {
|
|
127
|
+
// `createDirectus('')` throws `Invalid URL`, so an SDK configured
|
|
128
|
+
// without the (documented-optional) CMS URL used to be
|
|
129
|
+
// unconstructable rather than merely CMS-less.
|
|
130
|
+
const kasu = Kasu.create({
|
|
131
|
+
chain: 'base',
|
|
132
|
+
signerOrProvider: mockProvider,
|
|
133
|
+
configOverrides: { directusUrl: '' },
|
|
134
|
+
});
|
|
135
|
+
expect(kasu).toBeInstanceOf(Kasu);
|
|
136
|
+
expect(kasu.services.DataService).toBeDefined();
|
|
137
|
+
expect(kasu.services.UserLending).toBeDefined();
|
|
138
|
+
});
|
|
139
|
+
it('refuses a CMS-only call clearly when no directusUrl is configured', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
140
|
+
const kasu = Kasu.create({
|
|
141
|
+
chain: 'base',
|
|
142
|
+
signerOrProvider: mockProvider,
|
|
143
|
+
configOverrides: { directusUrl: '' },
|
|
144
|
+
});
|
|
145
|
+
// A sentence naming what to configure, not a null dereference thrown
|
|
146
|
+
// from inside the vendor SDK.
|
|
147
|
+
yield expect(kasu.services.DataService.getPlatformOverview()).rejects.toThrow(NO_DIRECTUS_URL_MESSAGE);
|
|
148
|
+
}));
|
|
106
149
|
it('should expose the underlying KasuSdk via .services', () => {
|
|
107
150
|
const kasu = Kasu.create({
|
|
108
151
|
chain: 'base',
|
|
@@ -162,6 +205,42 @@ describe('StrategiesFacade.calculateDepositLimits()', () => {
|
|
|
162
205
|
});
|
|
163
206
|
});
|
|
164
207
|
// ---------------------------------------------------------------------------
|
|
208
|
+
// PortfolioFacade.getRequestStates()
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
describe('PortfolioFacade.getRequestStates()', () => {
|
|
211
|
+
it('maps the transaction history through deriveRequestState', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
212
|
+
const requests = [
|
|
213
|
+
makeUserRequest({ id: 'req-1' }),
|
|
214
|
+
makeUserRequest({
|
|
215
|
+
id: 'req-2',
|
|
216
|
+
requestType: 'Withdrawal',
|
|
217
|
+
status: UserRequestStatus.PROCESSED,
|
|
218
|
+
canCancel: false,
|
|
219
|
+
acceptedAmount: '100',
|
|
220
|
+
}),
|
|
221
|
+
];
|
|
222
|
+
const userLending = {
|
|
223
|
+
getCurrentEpoch: () => Promise.resolve('42'),
|
|
224
|
+
getUserRequests: () => Promise.resolve(requests),
|
|
225
|
+
};
|
|
226
|
+
const facade = new PortfolioFacade({}, userLending, {});
|
|
227
|
+
const states = yield facade.getRequestStates('0xuser');
|
|
228
|
+
expect(states.map((s) => s.id)).toEqual(['req-1', 'req-2']);
|
|
229
|
+
expect(states[0].statusCode).toBe('pending');
|
|
230
|
+
expect(states[0].amount).toBe(100);
|
|
231
|
+
expect(states[1].statusCode).toBe('complete');
|
|
232
|
+
expect(states[1].amount).toBe(-100);
|
|
233
|
+
}));
|
|
234
|
+
it('returns an empty list for a wallet with no history', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
235
|
+
const userLending = {
|
|
236
|
+
getCurrentEpoch: () => Promise.resolve('42'),
|
|
237
|
+
getUserRequests: () => Promise.resolve([]),
|
|
238
|
+
};
|
|
239
|
+
const facade = new PortfolioFacade({}, userLending, {});
|
|
240
|
+
yield expect(facade.getRequestStates('0xuser')).resolves.toEqual([]);
|
|
241
|
+
}));
|
|
242
|
+
});
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
165
244
|
// Type exports — verify key facade types are importable
|
|
166
245
|
// ---------------------------------------------------------------------------
|
|
167
246
|
describe('Type re-exports', () => {
|
|
@@ -193,4 +272,7 @@ function makeTranche(raw) {
|
|
|
193
272
|
_raw: Object.assign(Object.assign({}, raw), { id: '0xtest', name: 'Test Tranche', apy: '0.08', minApy: '0.06', maxApy: '0.10', fixedTermConfig: [] }),
|
|
194
273
|
};
|
|
195
274
|
}
|
|
275
|
+
function makeUserRequest(overrides = {}) {
|
|
276
|
+
return Object.assign({ id: 'req-1', userId: '0xuser', lendingPool: { id: '0xpool', name: 'Pool', tranches: [{ orderId: '0' }] }, requestType: 'Deposit', trancheId: '0xtranche', trancheName: 'Senior', requestedAmount: '100', acceptedAmount: '0', rejectedAmount: '0', timestamp: 1700000000, status: UserRequestStatus.REQUESTED, canCancel: true, events: [], nftId: '', apy: '0', fixedTermConfig: undefined }, overrides);
|
|
277
|
+
}
|
|
196
278
|
//# sourceMappingURL=facade.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.test.js","sourceRoot":"","sources":["../../src/facade/facade.test.ts"],"names":[],"mappings":"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"}
|
package/dist/facade/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { StrategiesFacade } from './strategies';
|
|
|
3
3
|
export { DepositsFacade } from './deposits';
|
|
4
4
|
export { PortfolioFacade } from './user-portfolio';
|
|
5
5
|
export { CHAIN_CONFIGS } from './chain-configs';
|
|
6
|
-
export
|
|
6
|
+
export { fetchUnusedPoolIds } from './unused-pool-ids';
|
|
7
|
+
export type { SupportedChain, ChainConfigEntry, StableAsset, KasuOptions, Strategy, StrategyTranche, FixedTermOption, DepositParams, WithdrawParams, DepositLimits, KycParams, UserPositions, PlatformStats, } from './types';
|
package/dist/facade/index.js
CHANGED
|
@@ -6,4 +6,6 @@ export { DepositsFacade } from './deposits';
|
|
|
6
6
|
export { PortfolioFacade } from './user-portfolio';
|
|
7
7
|
// Chain configurations
|
|
8
8
|
export { CHAIN_CONFIGS } from './chain-configs';
|
|
9
|
+
// Directus-backed helpers (I/O — not part of `domain/`)
|
|
10
|
+
export { fetchUnusedPoolIds } from './unused-pool-ids';
|
|
9
11
|
//# sourceMappingURL=index.js.map
|
package/dist/facade/index.js.map
CHANGED
|
@@ -1 +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"}
|
|
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;AAEhD,wDAAwD;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/facade/kasu.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
2
|
+
import { Signer } from 'ethers';
|
|
1
3
|
import { KasuSdk } from '../kasu-sdk';
|
|
2
4
|
import { DepositsFacade } from './deposits';
|
|
3
5
|
import { StrategiesFacade } from './strategies';
|
|
@@ -12,15 +14,15 @@ import { PortfolioFacade } from './user-portfolio';
|
|
|
12
14
|
* ```ts
|
|
13
15
|
* import { Kasu } from '@kasufinance/kasu-sdk';
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* // Browse strategies
|
|
17
|
+
* // Read-only — no wallet needed, uses the chain's default RPC
|
|
18
|
+
* const kasu = Kasu.create({ chain: 'base' });
|
|
18
19
|
* const strategies = await kasu.strategies.getAll();
|
|
19
20
|
*
|
|
20
|
-
* //
|
|
21
|
-
* const
|
|
21
|
+
* // Writable — same config, bound to a signer
|
|
22
|
+
* const signed = kasu.connect(signer);
|
|
23
|
+
* const tx = await signed.deposits.deposit({ poolId, trancheId, amount, kycSignature });
|
|
22
24
|
*
|
|
23
|
-
* // User positions
|
|
25
|
+
* // User positions (read-only is enough)
|
|
24
26
|
* const positions = await kasu.portfolio.getPositions(userAddress);
|
|
25
27
|
* ```
|
|
26
28
|
*/
|
|
@@ -33,13 +35,23 @@ export declare class Kasu {
|
|
|
33
35
|
readonly portfolio: PortfolioFacade;
|
|
34
36
|
private readonly _sdk;
|
|
35
37
|
private readonly _chainConfig;
|
|
38
|
+
private readonly _signerOrProvider;
|
|
39
|
+
/**
|
|
40
|
+
* Kept so `connect(signer)` can rebuild an identical instance. A connected
|
|
41
|
+
* instance that silently dropped the overrides would query a different set
|
|
42
|
+
* of pools than the read-only one it came from.
|
|
43
|
+
*/
|
|
44
|
+
private readonly _configOverrides;
|
|
36
45
|
private constructor();
|
|
37
46
|
/**
|
|
38
47
|
* Create a Kasu instance with built-in chain config.
|
|
39
48
|
*
|
|
49
|
+
* `signerOrProvider` is optional: without one the instance is READ-ONLY on
|
|
50
|
+
* `chainConfig.rpcUrls[0]`. Use `connect(signer)` when a wallet arrives.
|
|
51
|
+
*
|
|
40
52
|
* ```ts
|
|
41
|
-
* // Minimal setup —
|
|
42
|
-
* const kasu = Kasu.create({ chain: 'base'
|
|
53
|
+
* // Minimal setup — read-only, built-in Base mainnet config
|
|
54
|
+
* const kasu = Kasu.create({ chain: 'base' });
|
|
43
55
|
*
|
|
44
56
|
* // Custom config override
|
|
45
57
|
* const kasu = Kasu.create({
|
|
@@ -56,6 +68,20 @@ export declare class Kasu {
|
|
|
56
68
|
* ```
|
|
57
69
|
*/
|
|
58
70
|
static create(options: KasuOptions): Kasu;
|
|
71
|
+
/**
|
|
72
|
+
* A NEW instance bound to `signer`, with the same chain config and the same
|
|
73
|
+
* `configOverrides` — the writable counterpart of a read-only instance.
|
|
74
|
+
*
|
|
75
|
+
* Named after `contract.connect(signer)` in ethers, and behaves the same
|
|
76
|
+
* way: the receiver is not mutated, so a read-only `Kasu` stays read-only
|
|
77
|
+
* and can keep serving public data after a wallet connects.
|
|
78
|
+
*
|
|
79
|
+
* ```ts
|
|
80
|
+
* const kasu = Kasu.create({ chain: 'base' }); // read-only
|
|
81
|
+
* const signed = kasu.connect(await getSigner()); // writable
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
connect(signer: Signer): Kasu;
|
|
59
85
|
/**
|
|
60
86
|
* Access the underlying `KasuSdk` services for advanced use cases.
|
|
61
87
|
*
|
|
@@ -68,4 +94,19 @@ export declare class Kasu {
|
|
|
68
94
|
get chainConfig(): ChainConfigEntry;
|
|
69
95
|
/** Whether this deployment has KSU token / locking features. */
|
|
70
96
|
get isLiteDeployment(): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* True when this instance was built from a Provider rather than a Signer,
|
|
99
|
+
* so every read works and every write is refused. Call `connect(signer)`
|
|
100
|
+
* for a writable instance.
|
|
101
|
+
*/
|
|
102
|
+
get isReadOnly(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* The provider this instance reads through — the signer's own provider when
|
|
105
|
+
* it was created from a signer.
|
|
106
|
+
*
|
|
107
|
+
* Throws for a signer with no provider attached (an offline signer can sign
|
|
108
|
+
* but cannot read), because there is no provider to hand back and returning
|
|
109
|
+
* `undefined` would only move the failure somewhere less obvious.
|
|
110
|
+
*/
|
|
111
|
+
get provider(): Provider;
|
|
71
112
|
}
|