@kasufinance/kasu-sdk 2.6.0 → 2.7.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/README.md +128 -3
- package/dist/bundle.cjs.js +1119 -254
- package/dist/bundle.esm.js +1109 -255
- package/dist/domain/index.d.ts +3 -2
- package/dist/domain/index.js +2 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/requests.d.ts +42 -4
- package/dist/domain/requests.js +20 -4
- package/dist/domain/requests.js.map +1 -1
- package/dist/domain/wallet-errors.d.ts +63 -8
- package/dist/domain/wallet-errors.js +115 -16
- package/dist/domain/wallet-errors.js.map +1 -1
- package/dist/facade/deposits.js +2 -1
- package/dist/facade/deposits.js.map +1 -1
- package/dist/facade/flows.d.ts +95 -0
- package/dist/facade/flows.js +116 -0
- package/dist/facade/flows.js.map +1 -0
- package/dist/facade/index.d.ts +3 -0
- package/dist/facade/index.js +3 -0
- package/dist/facade/index.js.map +1 -1
- package/dist/facade/kasu.d.ts +6 -2
- package/dist/facade/kasu.js +28 -3
- package/dist/facade/kasu.js.map +1 -1
- package/dist/facade/read-only.d.ts +12 -0
- package/dist/facade/read-only.js +13 -0
- package/dist/facade/read-only.js.map +1 -0
- package/dist/flows/deposit-flow.d.ts +301 -0
- package/dist/flows/deposit-flow.js +358 -0
- package/dist/flows/deposit-flow.js.map +1 -0
- package/dist/flows/flow.d.ts +72 -0
- package/dist/flows/flow.js +110 -0
- package/dist/flows/flow.js.map +1 -0
- package/dist/flows/index.d.ts +19 -0
- package/dist/flows/index.js +17 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/observable.d.ts +59 -0
- package/dist/flows/observable.js +81 -0
- package/dist/flows/observable.js.map +1 -0
- package/dist/flows/withdraw-flow.d.ts +99 -0
- package/dist/flows/withdraw-flow.js +83 -0
- package/dist/flows/withdraw-flow.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/services/DataService/data-service.js +0 -1
- package/dist/services/DataService/data-service.js.map +1 -1
- package/package.json +8 -2
- package/src/domain/index.ts +7 -1
- package/src/domain/requests.ts +57 -4
- package/src/domain/wallet-errors.ts +135 -18
- package/src/facade/deposits.ts +2 -3
- package/src/facade/flows.ts +172 -0
- package/src/facade/index.ts +8 -0
- package/src/facade/kasu.ts +43 -3
- package/src/facade/read-only.ts +13 -0
- package/src/flows/deposit-flow.ts +775 -0
- package/src/flows/flow.ts +108 -0
- package/src/flows/index.ts +45 -0
- package/src/flows/observable.ts +97 -0
- package/src/flows/withdraw-flow.ts +210 -0
- package/src/index.ts +7 -0
- package/src/services/DataService/data-service.ts +0 -1
- package/dist/domain/au-minimum.test.d.ts +0 -1
- package/dist/domain/au-minimum.test.js +0 -202
- package/dist/domain/au-minimum.test.js.map +0 -1
- package/dist/domain/deposit-bounds.test.d.ts +0 -1
- package/dist/domain/deposit-bounds.test.js +0 -135
- package/dist/domain/deposit-bounds.test.js.map +0 -1
- package/dist/domain/loan-contract.test.d.ts +0 -1
- package/dist/domain/loan-contract.test.js +0 -255
- package/dist/domain/loan-contract.test.js.map +0 -1
- package/dist/domain/partners.test.d.ts +0 -1
- package/dist/domain/partners.test.js +0 -53
- package/dist/domain/partners.test.js.map +0 -1
- package/dist/domain/pools.test.d.ts +0 -1
- package/dist/domain/pools.test.js +0 -184
- package/dist/domain/pools.test.js.map +0 -1
- package/dist/domain/rates.test.d.ts +0 -1
- package/dist/domain/rates.test.js +0 -181
- package/dist/domain/rates.test.js.map +0 -1
- package/dist/domain/requests.test.d.ts +0 -1
- package/dist/domain/requests.test.js +0 -470
- package/dist/domain/requests.test.js.map +0 -1
- package/dist/domain/settlement.test.d.ts +0 -1
- package/dist/domain/settlement.test.js +0 -152
- package/dist/domain/settlement.test.js.map +0 -1
- package/dist/domain/tranche-display-name.test.d.ts +0 -1
- package/dist/domain/tranche-display-name.test.js +0 -58
- package/dist/domain/tranche-display-name.test.js.map +0 -1
- package/dist/domain/tranches.test.d.ts +0 -1
- package/dist/domain/tranches.test.js +0 -206
- package/dist/domain/tranches.test.js.map +0 -1
- package/dist/domain/wallet-errors.test.d.ts +0 -1
- package/dist/domain/wallet-errors.test.js +0 -71
- package/dist/domain/wallet-errors.test.js.map +0 -1
- package/dist/facade/config.test.d.ts +0 -1
- package/dist/facade/config.test.js +0 -216
- package/dist/facade/config.test.js.map +0 -1
- package/dist/facade/facade.test.d.ts +0 -1
- package/dist/facade/facade.test.js +0 -278
- package/dist/facade/facade.test.js.map +0 -1
- package/dist/services/Locking/calculate-apy.test.d.ts +0 -1
- package/dist/services/Locking/calculate-apy.test.js +0 -41
- package/dist/services/Locking/calculate-apy.test.js.map +0 -1
- package/dist/tests/sample.test.d.ts +0 -1
- package/dist/tests/sample.test.js +0 -59
- package/dist/tests/sample.test.js.map +0 -1
- package/src/domain/au-minimum.test.ts +0 -371
- package/src/domain/deposit-bounds.test.ts +0 -200
- package/src/domain/loan-contract.test.ts +0 -343
- package/src/domain/partners.test.ts +0 -83
- package/src/domain/pools.test.ts +0 -260
- package/src/domain/rates.test.ts +0 -254
- package/src/domain/requests.test.ts +0 -653
- package/src/domain/settlement.test.ts +0 -198
- package/src/domain/tranche-display-name.test.ts +0 -96
- package/src/domain/tranches.test.ts +0 -300
- package/src/domain/wallet-errors.test.ts +0 -100
- package/src/facade/config.test.ts +0 -265
- package/src/facade/facade.test.ts +0 -374
- package/src/services/Locking/calculate-apy.test.ts +0 -52
- package/src/tests/sample.test.ts +0 -63
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settlement.test.js","sourceRoot":"","sources":["../../src/domain/settlement.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { getTrancheDisplayName, UPPER_MEZZANINE } from './tranche-display-name';
|
|
2
|
-
// Ported from kasu-ui `src/features/lending/lib/tranche-display-name.test.ts`.
|
|
3
|
-
describe('getTrancheDisplayName', () => {
|
|
4
|
-
it('renames Senior to Upper Mezzanine on Apxium pools', () => {
|
|
5
|
-
expect(getTrancheDisplayName('Senior', {
|
|
6
|
-
poolName: 'Taxation Funding (Tax Pay)',
|
|
7
|
-
})).toBe(UPPER_MEZZANINE);
|
|
8
|
-
expect(getTrancheDisplayName('Senior', {
|
|
9
|
-
poolName: 'Professional Fee Funding',
|
|
10
|
-
})).toBe(UPPER_MEZZANINE);
|
|
11
|
-
expect(getTrancheDisplayName('Senior', { poolName: 'Whole Ledger Funding' })).toBe(UPPER_MEZZANINE);
|
|
12
|
-
});
|
|
13
|
-
it('keeps Senior on non-Apxium (InvoiceMate) pools', () => {
|
|
14
|
-
expect(getTrancheDisplayName('Senior', {
|
|
15
|
-
poolName: 'Payment Finance (PayFi) - Clearing Houses',
|
|
16
|
-
})).toBe('Senior');
|
|
17
|
-
});
|
|
18
|
-
it('never touches other tranche names, on any pool', () => {
|
|
19
|
-
expect(getTrancheDisplayName('Mezzanine', { poolName: 'Taxation Funding' })).toBe('Mezzanine');
|
|
20
|
-
expect(getTrancheDisplayName('Junior', { poolName: 'Taxation Funding' })).toBe('Junior');
|
|
21
|
-
expect(getTrancheDisplayName('Mezzanine', {
|
|
22
|
-
poolName: 'Payment Finance (PayFi)',
|
|
23
|
-
})).toBe('Mezzanine');
|
|
24
|
-
});
|
|
25
|
-
it('matches the Senior name case-insensitively but preserves unknown names verbatim', () => {
|
|
26
|
-
expect(getTrancheDisplayName('SENIOR', { poolName: 'Taxation Funding' })).toBe(UPPER_MEZZANINE);
|
|
27
|
-
expect(getTrancheDisplayName('Senior Plus', { poolName: 'Taxation Funding' })).toBe('Senior Plus');
|
|
28
|
-
});
|
|
29
|
-
it('treats missing pool names as Apxium (matches getCreditOriginator default)', () => {
|
|
30
|
-
// getCreditOriginator defaults unknown pools to Apxium; the display
|
|
31
|
-
// name must follow the same rule or the two surfaces would disagree.
|
|
32
|
-
expect(getTrancheDisplayName('Senior', { poolName: '' })).toBe(UPPER_MEZZANINE);
|
|
33
|
-
expect(getTrancheDisplayName('Senior', {})).toBe(UPPER_MEZZANINE);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe('getTrancheDisplayName — the widened PoolNameSignal', () => {
|
|
37
|
-
it('accepts the facade Strategy shape (`name`)', () => {
|
|
38
|
-
expect(getTrancheDisplayName('Senior', { name: 'Taxation Funding' })).toBe(UPPER_MEZZANINE);
|
|
39
|
-
expect(getTrancheDisplayName('Senior', {
|
|
40
|
-
name: 'Payment Finance (PayFi)',
|
|
41
|
-
})).toBe('Senior');
|
|
42
|
-
});
|
|
43
|
-
it('accepts a bare pool name', () => {
|
|
44
|
-
expect(getTrancheDisplayName('Senior', 'Whole Ledger Funding')).toBe(UPPER_MEZZANINE);
|
|
45
|
-
expect(getTrancheDisplayName('Senior', 'Payment Finance (PayFi)')).toBe('Senior');
|
|
46
|
-
});
|
|
47
|
-
it('gives the same answer for the raw and facade shapes of one pool', () => {
|
|
48
|
-
for (const poolName of [
|
|
49
|
-
'Taxation Funding (Tax Pay)',
|
|
50
|
-
'Payment Finance (PayFi)',
|
|
51
|
-
'Whole Ledger Funding',
|
|
52
|
-
'',
|
|
53
|
-
]) {
|
|
54
|
-
expect(getTrancheDisplayName('Senior', { poolName })).toBe(getTrancheDisplayName('Senior', { name: poolName }));
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=tranche-display-name.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tranche-display-name.test.js","sourceRoot":"","sources":["../../src/domain/tranche-display-name.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import * as fc from 'fast-check';
|
|
2
|
-
import { netEffectiveApy } from './rates';
|
|
3
|
-
import { compareTrancheSeniority, derivePoolStatus, MIN_TRANCHE_CAPACITY, netTrancheApyBounds, pickDefaultTrancheId, poolAllTranchesFull, trancheApyBounds, trancheHasCapacity, trancheRiskRank, } from './tranches';
|
|
4
|
-
/**
|
|
5
|
-
* Ported from kasu-ui `pick-default-tranche.test.ts` and the NUMERIC half of
|
|
6
|
-
* `format-tranche-apy.range.test.ts`. The formatting cases — whole-percent
|
|
7
|
-
* rendering, the en-dash shape, the locale table and the "collapse when both
|
|
8
|
-
* bounds print the same" rule — stay in kasu-ui: they are decided on rendered
|
|
9
|
-
* digits, which this layer never produces.
|
|
10
|
-
*/
|
|
11
|
-
// `id === name` keeps assertions readable; `poolCapacity` drives
|
|
12
|
-
// `trancheHasCapacity` (≥ 1 stable unit → selectable).
|
|
13
|
-
function tranche(name, poolCapacity, apy = '0.12') {
|
|
14
|
-
return { id: name, name, apy, poolCapacity };
|
|
15
|
-
}
|
|
16
|
-
function pool(tranches, enabled = true) {
|
|
17
|
-
return { id: 'p', poolName: 'p', enabled, tranches };
|
|
18
|
-
}
|
|
19
|
-
function rated(minApy, maxApy) {
|
|
20
|
-
return { minApy, maxApy };
|
|
21
|
-
}
|
|
22
|
-
/** The live performance fee on all deployments (subgraph units: 10 = 10%). */
|
|
23
|
-
const FEE = 10;
|
|
24
|
-
describe('trancheHasCapacity', () => {
|
|
25
|
-
it('accepts a tranche with at least one whole stable unit left', () => {
|
|
26
|
-
expect(trancheHasCapacity({ poolCapacity: '5000' })).toBe(true);
|
|
27
|
-
expect(trancheHasCapacity({ poolCapacity: String(MIN_TRANCHE_CAPACITY) })).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
it('rejects sub-unit dust, zero and unparseable capacity', () => {
|
|
30
|
-
expect(trancheHasCapacity({ poolCapacity: '0.99' })).toBe(false);
|
|
31
|
-
expect(trancheHasCapacity({ poolCapacity: '0' })).toBe(false);
|
|
32
|
-
expect(trancheHasCapacity({ poolCapacity: '1.4551915228366852e-11' })).toBe(false);
|
|
33
|
-
expect(trancheHasCapacity({ poolCapacity: '' })).toBe(false);
|
|
34
|
-
expect(trancheHasCapacity({ poolCapacity: 'not-a-number' })).toBe(false);
|
|
35
|
-
});
|
|
36
|
-
it('reads the facade tranche shape (availableCapacity) identically', () => {
|
|
37
|
-
// `StrategyTranche` renames the same number; one gate, both shapes.
|
|
38
|
-
expect(trancheHasCapacity({ availableCapacity: '5000' })).toBe(true);
|
|
39
|
-
expect(trancheHasCapacity({ availableCapacity: '0' })).toBe(false);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe('trancheRiskRank / compareTrancheSeniority', () => {
|
|
43
|
-
it('ranks the waterfall safest-first by the RAW name', () => {
|
|
44
|
-
expect(trancheRiskRank(tranche('Senior', '1'))).toBe(0);
|
|
45
|
-
expect(trancheRiskRank(tranche('Mezzanine', '1'))).toBe(1);
|
|
46
|
-
expect(trancheRiskRank(tranche('Junior', '1'))).toBe(2);
|
|
47
|
-
});
|
|
48
|
-
it('is case- and whitespace-insensitive, and sorts unknown names last', () => {
|
|
49
|
-
expect(trancheRiskRank(tranche(' SENIOR ', '1'))).toBe(0);
|
|
50
|
-
expect(trancheRiskRank(tranche('Upper Mezzanine', '1'))).toBe(Number.POSITIVE_INFINITY);
|
|
51
|
-
});
|
|
52
|
-
it('sorts Senior → Mezzanine → Junior, keeping ties in input order', () => {
|
|
53
|
-
const tranches = [
|
|
54
|
-
tranche('Junior', '5000'),
|
|
55
|
-
tranche('Tranche B', '5000'),
|
|
56
|
-
tranche('Senior', '5000'),
|
|
57
|
-
tranche('Tranche A', '5000'),
|
|
58
|
-
tranche('Mezzanine', '5000'),
|
|
59
|
-
];
|
|
60
|
-
expect([...tranches].sort(compareTrancheSeniority).map((t) => t.name)).toEqual([
|
|
61
|
-
'Senior',
|
|
62
|
-
'Mezzanine',
|
|
63
|
-
'Junior',
|
|
64
|
-
'Tranche B',
|
|
65
|
-
'Tranche A',
|
|
66
|
-
]);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('pickDefaultTrancheId', () => {
|
|
70
|
-
it('defaults to the lowest-risk tranche (Senior) when all have capacity', () => {
|
|
71
|
-
// Subgraph order is Junior → Mezzanine → Senior; the default must NOT
|
|
72
|
-
// be the highest-risk Junior that sits first (audit 3.2).
|
|
73
|
-
const id = pickDefaultTrancheId(pool([
|
|
74
|
-
tranche('Junior', '5000'),
|
|
75
|
-
tranche('Mezzanine', '5000'),
|
|
76
|
-
tranche('Senior', '5000'),
|
|
77
|
-
]));
|
|
78
|
-
expect(id).toBe('Senior');
|
|
79
|
-
});
|
|
80
|
-
it('picks the lowest-risk tranche that is still AVAILABLE (skips a full Senior)', () => {
|
|
81
|
-
const id = pickDefaultTrancheId(pool([
|
|
82
|
-
tranche('Junior', '5000'),
|
|
83
|
-
tranche('Mezzanine', '5000'),
|
|
84
|
-
tranche('Senior', '0'),
|
|
85
|
-
]));
|
|
86
|
-
expect(id).toBe('Mezzanine');
|
|
87
|
-
});
|
|
88
|
-
it('does not rank by APY — a Senior priced above Mezzanine is still preferred', () => {
|
|
89
|
-
// Real pools can price Senior above Mezzanine; risk is ranked by name,
|
|
90
|
-
// not rate.
|
|
91
|
-
const id = pickDefaultTrancheId(pool([
|
|
92
|
-
tranche('Mezzanine', '5000', '0.15'),
|
|
93
|
-
tranche('Senior', '5000', '0.18'),
|
|
94
|
-
]));
|
|
95
|
-
expect(id).toBe('Senior');
|
|
96
|
-
});
|
|
97
|
-
it('falls back to the lowest-risk tranche when every tranche is full', () => {
|
|
98
|
-
const id = pickDefaultTrancheId(pool([tranche('Junior', '0'), tranche('Senior', '0')]));
|
|
99
|
-
expect(id).toBe('Senior');
|
|
100
|
-
});
|
|
101
|
-
it('falls back to the first available tranche when names are unrecognised', () => {
|
|
102
|
-
const id = pickDefaultTrancheId(pool([tranche('Tranche B', '5000'), tranche('Tranche A', '5000')]));
|
|
103
|
-
expect(id).toBe('Tranche B');
|
|
104
|
-
});
|
|
105
|
-
it('returns an empty string for a pool with no tranches', () => {
|
|
106
|
-
expect(pickDefaultTrancheId(pool([]))).toBe('');
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('poolAllTranchesFull', () => {
|
|
110
|
-
it('is true when every tranche lacks remaining capacity', () => {
|
|
111
|
-
expect(poolAllTranchesFull(pool([tranche('Junior', '0'), tranche('Senior', '0')]))).toBe(true);
|
|
112
|
-
});
|
|
113
|
-
it('is false when at least one tranche still has capacity', () => {
|
|
114
|
-
expect(poolAllTranchesFull(pool([tranche('Junior', '0'), tranche('Senior', '5000')]))).toBe(false);
|
|
115
|
-
});
|
|
116
|
-
it('is false for a pool with no tranches (nothing to be full)', () => {
|
|
117
|
-
expect(poolAllTranchesFull(pool([]))).toBe(false);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
describe('derivePoolStatus', () => {
|
|
121
|
-
it('is "Coming soon" for a pool that is not yet enabled, full or not', () => {
|
|
122
|
-
expect(derivePoolStatus(pool([tranche('Senior', '5000')], false))).toBe('Coming soon');
|
|
123
|
-
expect(derivePoolStatus(pool([tranche('Senior', '0')], false))).toBe('Coming soon');
|
|
124
|
-
});
|
|
125
|
-
it('is "Full" for an enabled pool with no capacity anywhere', () => {
|
|
126
|
-
expect(derivePoolStatus(pool([tranche('Senior', '0')]))).toBe('Full');
|
|
127
|
-
});
|
|
128
|
-
it('is "Live" for an enabled pool with capacity, or with no tranches yet', () => {
|
|
129
|
-
expect(derivePoolStatus(pool([tranche('Senior', '5000')]))).toBe('Live');
|
|
130
|
-
expect(derivePoolStatus(pool([]))).toBe('Live');
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
describe('trancheApyBounds', () => {
|
|
134
|
-
it('spans the lowest minApy and the highest maxApy across tranches', () => {
|
|
135
|
-
expect(trancheApyBounds([rated('0.12', '0.12'), rated('0.185', '0.185')])).toEqual({ min: 0.12, max: 0.185 });
|
|
136
|
-
});
|
|
137
|
-
it('carries a single-option strategy as an equal pair', () => {
|
|
138
|
-
expect(trancheApyBounds([rated('0.1', '0.1')])).toEqual({
|
|
139
|
-
min: 0.1,
|
|
140
|
-
max: 0.1,
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
it('skips zero and non-finite rates rather than dragging the range down', () => {
|
|
144
|
-
// A tranche with no fixed-term config must not turn a 10.5% range into
|
|
145
|
-
// 0–10.5%.
|
|
146
|
-
expect(trancheApyBounds([rated('0', '0'), rated('0.105', '0.105')])).toEqual({ min: 0.105, max: 0.105 });
|
|
147
|
-
expect(trancheApyBounds([rated('not-a-number', 'x'), rated('0.12', '0.14')])).toEqual({ min: 0.12, max: 0.14 });
|
|
148
|
-
});
|
|
149
|
-
it('is null when nothing usable remains', () => {
|
|
150
|
-
expect(trancheApyBounds([])).toBeNull();
|
|
151
|
-
expect(trancheApyBounds([rated('0', '0')])).toBeNull();
|
|
152
|
-
expect(trancheApyBounds([rated('-0.1', '-0.1')])).toBeNull();
|
|
153
|
-
});
|
|
154
|
-
it('is null when only ONE side is usable — never half a range', () => {
|
|
155
|
-
expect(trancheApyBounds([rated('0.12', '0')])).toBeNull();
|
|
156
|
-
expect(trancheApyBounds([rated('0', '0.12')])).toBeNull();
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
describe('netTrancheApyBounds', () => {
|
|
160
|
-
it('reproduces the spec §2.5 card range: 14–22% gross is 13–20% net', () => {
|
|
161
|
-
const bounds = netTrancheApyBounds([rated('0.14', '0.22')], FEE);
|
|
162
|
-
expect(bounds).not.toBeNull();
|
|
163
|
-
expect(bounds === null || bounds === void 0 ? void 0 : bounds.min).toBeCloseTo(0.1252, 4);
|
|
164
|
-
expect(bounds === null || bounds === void 0 ? void 0 : bounds.max).toBeCloseTo(0.196, 4);
|
|
165
|
-
});
|
|
166
|
-
it('puts each bound through netEffectiveApy and nothing else', () => {
|
|
167
|
-
const bounds = netTrancheApyBounds([rated('0.12', '0.185')], FEE);
|
|
168
|
-
expect(bounds).toEqual({
|
|
169
|
-
min: netEffectiveApy(0.12, FEE),
|
|
170
|
-
max: netEffectiveApy(0.185, FEE),
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
it('returns the gross bounds unchanged at a zero fee', () => {
|
|
174
|
-
expect(netTrancheApyBounds([rated('0.14', '0.22')], 0)).toEqual({
|
|
175
|
-
min: 0.14,
|
|
176
|
-
max: 0.22,
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
it('FAILS CLOSED on an out-of-domain fee — never the gross range', () => {
|
|
180
|
-
// The raw subgraph integer (1000 = 10%) and a negative fee both land
|
|
181
|
-
// here. A caller that does not KNOW the fee must not call at all;
|
|
182
|
-
// substituting 0 would overstate the rate with nothing saying so.
|
|
183
|
-
expect(netTrancheApyBounds([rated('0.14', '0.22')], 1000)).toBeNull();
|
|
184
|
-
expect(netTrancheApyBounds([rated('0.14', '0.22')], -1)).toBeNull();
|
|
185
|
-
expect(netTrancheApyBounds([rated('0.14', '0.22')], NaN)).toBeNull();
|
|
186
|
-
});
|
|
187
|
-
it('is null when a 100% fee leaves the lender nothing', () => {
|
|
188
|
-
expect(netTrancheApyBounds([rated('0.14', '0.22')], 100)).toBeNull();
|
|
189
|
-
});
|
|
190
|
-
it('is null whenever the gross range is', () => {
|
|
191
|
-
expect(netTrancheApyBounds([], FEE)).toBeNull();
|
|
192
|
-
expect(netTrancheApyBounds([rated('0', '0')], FEE)).toBeNull();
|
|
193
|
-
});
|
|
194
|
-
it('never inverts the range it was given', () => {
|
|
195
|
-
fc.assert(fc.property(fc.double({ min: 0.0001, max: 0.99, noNaN: true }), fc.double({ min: 0.0001, max: 0.99, noNaN: true }), fc.double({ min: 0, max: 99, noNaN: true }), (a, b, feePercent) => {
|
|
196
|
-
const bounds = netTrancheApyBounds([
|
|
197
|
-
rated(String(Math.min(a, b)), String(Math.max(a, b))),
|
|
198
|
-
], feePercent);
|
|
199
|
-
if (!bounds)
|
|
200
|
-
return;
|
|
201
|
-
expect(bounds.min).toBeLessThanOrEqual(bounds.max);
|
|
202
|
-
expect(bounds.min).toBeGreaterThan(0);
|
|
203
|
-
}), { numRuns: 2000 });
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
//# sourceMappingURL=tranches.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tranches.test.js","sourceRoot":"","sources":["../../src/domain/tranches.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { isUnpredictableGas, isUserRejected } from './wallet-errors';
|
|
2
|
-
/**
|
|
3
|
-
* `isUserRejected` cases ported from kasu-ui
|
|
4
|
-
* `src/lib/web3/is-user-rejected.test.ts`. `isUnpredictableGas` had no test in
|
|
5
|
-
* kasu-mobile; one is written here.
|
|
6
|
-
*/
|
|
7
|
-
describe('isUserRejected', () => {
|
|
8
|
-
it('detects EIP-1193 numeric code 4001', () => {
|
|
9
|
-
expect(isUserRejected({ code: 4001, message: 'whatever' })).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
it('detects ACTION_REJECTED string code (ethers v5)', () => {
|
|
12
|
-
expect(isUserRejected({ code: 'ACTION_REJECTED', message: 'rejected' })).toBe(true);
|
|
13
|
-
});
|
|
14
|
-
it('detects "User rejected" message string', () => {
|
|
15
|
-
expect(isUserRejected(new Error('User rejected the request'))).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
it('detects "User denied" message string', () => {
|
|
18
|
-
expect(isUserRejected(new Error('User denied transaction signature'))).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it('detects the ethers ACTION_REJECTED marker in a message', () => {
|
|
21
|
-
expect(isUserRejected(new Error('transaction failed: ACTION_REJECTED'))).toBe(true);
|
|
22
|
-
});
|
|
23
|
-
it('is case-insensitive', () => {
|
|
24
|
-
expect(isUserRejected(new Error('user REJECTED the request'))).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
it('returns false for unrelated errors', () => {
|
|
27
|
-
expect(isUserRejected(new Error('Network error'))).toBe(false);
|
|
28
|
-
expect(isUserRejected(new Error('Insufficient funds'))).toBe(false);
|
|
29
|
-
});
|
|
30
|
-
it('returns false for null / undefined', () => {
|
|
31
|
-
expect(isUserRejected(null)).toBe(false);
|
|
32
|
-
expect(isUserRejected(undefined)).toBe(false);
|
|
33
|
-
});
|
|
34
|
-
it('handles non-Error throwables', () => {
|
|
35
|
-
expect(isUserRejected('user rejected')).toBe(true);
|
|
36
|
-
expect(isUserRejected('something else')).toBe(false);
|
|
37
|
-
});
|
|
38
|
-
it('is not fooled by a numeric code that only looks like 4001', () => {
|
|
39
|
-
expect(isUserRejected({ code: '4001' })).toBe(false);
|
|
40
|
-
expect(isUserRejected({ code: 4002 })).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('isUnpredictableGas', () => {
|
|
44
|
-
it('detects the ethers v5 gas-estimation revert code', () => {
|
|
45
|
-
expect(isUnpredictableGas({ code: 'UNPREDICTABLE_GAS_LIMIT' })).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
it('does not fire on a user rejection', () => {
|
|
48
|
-
expect(isUnpredictableGas({ code: 'ACTION_REJECTED' })).toBe(false);
|
|
49
|
-
expect(isUnpredictableGas({ code: 4001 })).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
it('does not fire on the code appearing only in a message', () => {
|
|
52
|
-
// The code is the signal; a message mentioning it is not one, or a
|
|
53
|
-
// logged error string would be mistaken for a revert.
|
|
54
|
-
expect(isUnpredictableGas(new Error('UNPREDICTABLE_GAS_LIMIT'))).toBe(false);
|
|
55
|
-
expect(isUnpredictableGas('UNPREDICTABLE_GAS_LIMIT')).toBe(false);
|
|
56
|
-
});
|
|
57
|
-
it('returns false for null / undefined and for unrelated errors', () => {
|
|
58
|
-
expect(isUnpredictableGas(null)).toBe(false);
|
|
59
|
-
expect(isUnpredictableGas(undefined)).toBe(false);
|
|
60
|
-
expect(isUnpredictableGas(new Error('Network error'))).toBe(false);
|
|
61
|
-
});
|
|
62
|
-
it('reads the code off an ethers error object', () => {
|
|
63
|
-
const err = Object.assign(new Error('cannot estimate gas'), {
|
|
64
|
-
code: 'UNPREDICTABLE_GAS_LIMIT',
|
|
65
|
-
reason: 'execution reverted: ERC20: insufficient allowance',
|
|
66
|
-
});
|
|
67
|
-
expect(isUnpredictableGas(err)).toBe(true);
|
|
68
|
-
expect(isUserRejected(err)).toBe(false);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
//# sourceMappingURL=wallet-errors.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-errors.test.js","sourceRoot":"","sources":["../../src/domain/wallet-errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,216 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/facade/config.test.ts"],"names":[],"mappings":"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"}
|