@liquidium/client 0.4.1 → 0.5.0-rc.1
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 +117 -86
- package/dist/index.cjs +3833 -3048
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +576 -518
- package/dist/index.d.ts +576 -518
- package/dist/index.js +3830 -3047
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
<h1 align="center">Liquidium SDK</h1>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
Use the Liquidium SDK from TypeScript apps. Start with accountless
|
|
11
|
+
Use the Liquidium SDK from TypeScript apps. Start with accountless Simple Loans.
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
15
|
<a href="https://liquidium-inc.github.io/liquidium-sdk/"><b>SDK Docs</b></a> ·
|
|
16
|
-
<a href="https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/
|
|
16
|
+
<a href="https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/simple-loans-flow"><b>Simple Loans Example</b></a> ·
|
|
17
17
|
<a href="https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/sdk-method-query"><b>SDK Method Query Example</b></a> ·
|
|
18
18
|
<a href="#core-api"><b>Core API</b></a>
|
|
19
19
|
</p>
|
|
@@ -24,9 +24,9 @@ Use the SDK docs for setup, guides, API reference, and examples.
|
|
|
24
24
|
|
|
25
25
|
[Open the Liquidium SDK docs](https://liquidium-inc.github.io/liquidium-sdk/)
|
|
26
26
|
|
|
27
|
-
## Why Start With
|
|
27
|
+
## Why Start With Simple Loans
|
|
28
28
|
|
|
29
|
-
- **Accountless loan creation**: create
|
|
29
|
+
- **Accountless loan creation**: create simple loans without requiring a Liquidium profile.
|
|
30
30
|
- **Generated transfer targets**: get collateral deposit and repayment targets from the SDK response.
|
|
31
31
|
- **Reference-based restore**: save `loan.ref` and reload loan state from any browser session or support link.
|
|
32
32
|
- **LTV checks**: use market pools and prices to validate collateral and borrow amounts before loan creation.
|
|
@@ -38,10 +38,10 @@ Liquidium supports two borrowing and lending integration paths:
|
|
|
38
38
|
|
|
39
39
|
| Path | Use when | Main SDK calls |
|
|
40
40
|
| --- | --- | --- |
|
|
41
|
-
| Recommended: accountless
|
|
41
|
+
| Recommended: accountless Simple Loans | You want a short checkout-style flow where users borrow against collateral without creating a Liquidium profile first | `client.simpleLoans.create(...)`, `client.simpleLoans.get(...)`, `client.simpleLoans.find(...)`, `client.activities.list(...)` |
|
|
42
42
|
| Account-based profile flows | You want users to keep a Liquidium profile, manage positions across sessions, supply funds, borrow, withdraw, or use ETH contract-interaction deposits | `client.accounts.createProfile(...)`, `client.lending.supply(...)`, `client.lending.borrow(...)`, `client.lending.withdraw(...)`, `client.positions.listPositions(...)` |
|
|
43
43
|
|
|
44
|
-
Use accountless
|
|
44
|
+
Use accountless Simple Loans for new borrow flows unless you need profile-level position management. Use account-based flows when your app owns the full lending dashboard experience.
|
|
45
45
|
|
|
46
46
|
## Quick Start
|
|
47
47
|
|
|
@@ -51,10 +51,16 @@ Install the client package:
|
|
|
51
51
|
npm install @liquidium/client
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
Create
|
|
54
|
+
Create a simple loan, display the deposit target, and restore the loan by reference:
|
|
55
55
|
|
|
56
56
|
```ts
|
|
57
|
-
import {
|
|
57
|
+
import {
|
|
58
|
+
Asset,
|
|
59
|
+
Chain,
|
|
60
|
+
LiquidiumClient,
|
|
61
|
+
type Pool,
|
|
62
|
+
type SupplyTarget,
|
|
63
|
+
} from "@liquidium/client";
|
|
58
64
|
|
|
59
65
|
const client = new LiquidiumClient();
|
|
60
66
|
|
|
@@ -63,8 +69,8 @@ const [pools, prices] = await Promise.all([
|
|
|
63
69
|
client.market.getAssetPrices(),
|
|
64
70
|
]);
|
|
65
71
|
|
|
66
|
-
const collateralPool = requirePool(pools,
|
|
67
|
-
const borrowPool = requirePool(pools,
|
|
72
|
+
const collateralPool = requirePool(pools, Asset.BTC, Chain.BTC);
|
|
73
|
+
const borrowPool = requirePool(pools, Asset.USDC, Chain.ETH);
|
|
68
74
|
|
|
69
75
|
const collateralAmount = 50_000n; // BTC sats
|
|
70
76
|
const borrowAmount = 9_000_000n; // USDC base units
|
|
@@ -84,127 +90,149 @@ if (ltv.validationErrors.length > 0) {
|
|
|
84
90
|
throw new Error(ltv.validationErrors.map((error) => error.message).join(" "));
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
const loan = await client.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
93
|
+
const loan = await client.simpleLoans.create({
|
|
94
|
+
collateral: {
|
|
95
|
+
poolId: collateralPool.id,
|
|
96
|
+
asset: Asset.BTC,
|
|
97
|
+
amount: collateralAmount,
|
|
98
|
+
},
|
|
99
|
+
borrow: {
|
|
100
|
+
poolId: borrowPool.id,
|
|
101
|
+
asset: Asset.USDC,
|
|
102
|
+
amount: borrowAmount,
|
|
103
|
+
chain: Chain.ETH,
|
|
104
|
+
destination: "0x2222222222222222222222222222222222222222",
|
|
99
105
|
},
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
refund: {
|
|
107
|
+
chain: Chain.BTC,
|
|
108
|
+
destination: "1BoatSLRHtKNngkdXEeobR76b53LETtpyT",
|
|
103
109
|
},
|
|
110
|
+
ltvMaxBps: ltv.maxAllowedLtvBps,
|
|
111
|
+
depositWindowSeconds: 3_600n,
|
|
104
112
|
});
|
|
105
113
|
|
|
114
|
+
const initialDeposit = loan.initialDeposit.targets[Chain.BTC];
|
|
115
|
+
if (!initialDeposit) {
|
|
116
|
+
throw new Error("Missing BTC initial-deposit target.");
|
|
117
|
+
}
|
|
118
|
+
|
|
106
119
|
console.log("Save this loan reference:", loan.ref);
|
|
107
|
-
console.log("Send initial deposit amount:",
|
|
108
|
-
console.log("Send collateral to:", formatSupplyTarget(
|
|
120
|
+
console.log("Send initial deposit amount:", initialDeposit.amount.toString());
|
|
121
|
+
console.log("Send collateral to:", formatSupplyTarget(initialDeposit.target));
|
|
109
122
|
|
|
110
|
-
const restoredLoan = await client.
|
|
123
|
+
const restoredLoan = await client.simpleLoans.get({ ref: loan.ref });
|
|
124
|
+
const repayment = restoredLoan.repayment.targets[Chain.ETH];
|
|
111
125
|
|
|
112
126
|
console.log("Loan status:", restoredLoan.status);
|
|
113
|
-
console.log("
|
|
114
|
-
console.log(
|
|
115
|
-
|
|
127
|
+
console.log("Repay amount:", repayment?.amount.toString() ?? "0");
|
|
128
|
+
console.log(
|
|
129
|
+
"Repay target:",
|
|
130
|
+
repayment ? formatSupplyTarget(repayment.target) : "No repayment due"
|
|
131
|
+
);
|
|
116
132
|
|
|
117
133
|
const activities = await client.activities.list({ shortRef: loan.ref });
|
|
118
134
|
|
|
119
135
|
console.log("Loan activities:", activities);
|
|
120
136
|
|
|
121
|
-
const foundLoans = await client.
|
|
137
|
+
const foundLoans = await client.simpleLoans.find(loan.ref);
|
|
122
138
|
|
|
123
139
|
console.log("Found loan reference:", foundLoans[0]?.ref);
|
|
124
140
|
console.log("Found loan collateral:", foundLoans[0]?.collateral.amount.toString());
|
|
125
141
|
|
|
126
|
-
function requirePool(
|
|
127
|
-
|
|
142
|
+
function requirePool(
|
|
143
|
+
pools: Pool[],
|
|
144
|
+
asset: Pool["asset"],
|
|
145
|
+
chain: Pool["chain"]
|
|
146
|
+
): Pool {
|
|
147
|
+
const pool = pools.find(
|
|
148
|
+
(candidate) => candidate.asset === asset && candidate.chain === chain
|
|
149
|
+
);
|
|
128
150
|
|
|
129
151
|
if (!pool) {
|
|
130
|
-
throw new Error(`Missing ${asset} pool.`);
|
|
152
|
+
throw new Error(`Missing ${chain}/${asset} pool.`);
|
|
131
153
|
}
|
|
132
154
|
|
|
133
155
|
if (pool.frozen) {
|
|
134
|
-
throw new Error(`${asset} pool is frozen.`);
|
|
156
|
+
throw new Error(`${chain}/${asset} pool is frozen.`);
|
|
135
157
|
}
|
|
136
158
|
|
|
137
159
|
return pool;
|
|
138
160
|
}
|
|
139
161
|
|
|
140
162
|
function formatSupplyTarget(target: SupplyTarget): string {
|
|
141
|
-
|
|
142
|
-
return target.address;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return target.account;
|
|
163
|
+
return target.address;
|
|
146
164
|
}
|
|
147
165
|
```
|
|
148
166
|
|
|
149
|
-
##
|
|
167
|
+
## Simple Loans Flow
|
|
150
168
|
|
|
151
|
-
|
|
169
|
+
Simple Loans integrations use this sequence:
|
|
152
170
|
|
|
153
171
|
| Step | SDK call | What your app does |
|
|
154
172
|
| --- | --- | --- |
|
|
155
173
|
| Load market data | `client.market.listPools()` and `client.market.getAssetPrices()` | Show supported collateral and borrow assets |
|
|
156
174
|
| Validate amounts | `client.quote.calculateLtv(...)` | Block too-small borrow amounts, invalid LTV, or frozen-pool input before creating a loan |
|
|
157
|
-
| Create loan | `client.
|
|
158
|
-
| Track loan | `client.
|
|
159
|
-
| Repay loan | Read `loan.repayment` | Ask the user to send
|
|
175
|
+
| Create loan | `client.simpleLoans.create(...)` | Store `loan.ref` and show the quote in `loan.initialDeposit.targets[chain]` |
|
|
176
|
+
| Track loan | `client.simpleLoans.get({ ref })`, `client.simpleLoans.find(...)`, and `client.activities.list({ shortRef: ref })` | Reload loan state, initial deposit quote, and repayment activity |
|
|
177
|
+
| Repay loan | Read `loan.repayment.targets[chain]` | Ask the user to send the quote amount to its target; no quote means no repayment is due on that chain |
|
|
178
|
+
|
|
179
|
+
`client.simpleLoans.create(...)` and `client.simpleLoans.get(...)` return the generated Liquidium profile, current position state, and transfer quotes keyed by the chain the user will send on. Users do not manage the generated profile.
|
|
160
180
|
|
|
161
|
-
`client.
|
|
181
|
+
`client.market.listPools()` returns only pools whose asset and chain variants are supported by this SDK version. BTC, USDC, USDT, and ICP lending pools are returned. Future unsupported variants such as `SOL` are omitted from the returned list.
|
|
162
182
|
|
|
163
|
-
`client.market.
|
|
183
|
+
`client.market.findPool({ chain, asset })` accepts the same Chain + Asset identifiers used by transfer flows. Chain-key identifiers resolve to their backing pool, so both `{ chain: "ETH", asset: "USDT" }` and `{ chain: "ICP", asset: "USDT" }` return the USDT pool.
|
|
164
184
|
|
|
165
185
|
## Core API
|
|
166
186
|
|
|
167
|
-
### `client.
|
|
187
|
+
### `client.simpleLoans.create(request)`
|
|
168
188
|
|
|
169
|
-
Creates an accountless
|
|
189
|
+
Creates an accountless simple loan and returns generated transfer targets.
|
|
170
190
|
|
|
171
191
|
| Field | Description |
|
|
172
192
|
| --- | --- |
|
|
173
|
-
| `
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `borrowAsset` | Borrow asset symbol, for example `"USDC"` |
|
|
177
|
-
| `collateralAmount` | Intended credited collateral amount in base units, before deposit/inflow fees |
|
|
178
|
-
| `borrowAmount` | Borrow amount in base units. The SDK rejects values below the asset minimum. |
|
|
193
|
+
| `collateral` | Collateral `poolId`, `asset`, and intended credited `amount` in base units |
|
|
194
|
+
| `borrow` | Borrow `poolId`, `asset`, `amount`, delivery `chain`, and `destination` |
|
|
195
|
+
| `refund` | Refund `chain` and `destination` for returned collateral |
|
|
179
196
|
| `ltvMaxBps` | Maximum LTV in basis points, where `6_000n` is 60% |
|
|
180
197
|
| `depositWindowSeconds` | How long the user has to send collateral |
|
|
181
|
-
| `borrowDestination` | External address that receives borrowed funds |
|
|
182
|
-
| `refundDestination` | External address that receives collateral refunds |
|
|
183
198
|
|
|
184
|
-
`
|
|
199
|
+
`borrow.destination` and `refund.destination` can be address strings or typed account objects such as `{ type: "ChainAddress", address: "bc1q..." }`, `{ type: "IcPrincipal", address: "aaaaa-aa" }`, or `{ type: "IcrcAccount", address: "aaaaa-aa" }`. Prefer typed objects when the destination family matters.
|
|
200
|
+
|
|
201
|
+
Destination validation is chain-specific and runs before loan creation:
|
|
202
|
+
|
|
203
|
+
| Asset path | Chain | Valid destination family |
|
|
204
|
+
| --- | --- | --- |
|
|
205
|
+
| BTC L1 | `"BTC"` | BTC mainnet chain address |
|
|
206
|
+
| ETH L1 USDC/USDT | `"ETH"` | EVM chain address |
|
|
207
|
+
| ICP native | `"ICP"` | IC principal, ICRC account, or ICP account identifier |
|
|
208
|
+
| ckBTC, ckUSDC, ckUSDT | `"ICP"` | IC principal |
|
|
185
209
|
|
|
186
|
-
|
|
210
|
+
The SDK rejects mismatched L1-vs-IC destination families, such as an ETH address for a ck-ledger delivery or a BTC/EVM address for an ICP destination.
|
|
211
|
+
|
|
212
|
+
If creation succeeds remotely but response hydration fails, the SDK throws `SimpleLoanCreatedError`. The error includes `loanId` and `ref`; recover with `simpleLoans.get(...)` and do not submit `create(...)` again.
|
|
213
|
+
|
|
214
|
+
### `client.simpleLoans.get({ ref })`
|
|
187
215
|
|
|
188
216
|
Loads loan state from a saved user-facing reference.
|
|
189
217
|
|
|
190
218
|
Use this for status pages, refreshes, and support links. The SDK combines canister state with the Liquidium SDK API lookup so the restored loan includes the original collateral deposit hint.
|
|
191
219
|
|
|
192
|
-
### `client.
|
|
220
|
+
### `client.simpleLoans.get({ loanId })`
|
|
193
221
|
|
|
194
222
|
Loads loan state by numeric canister loan id.
|
|
195
223
|
|
|
196
224
|
Use this when your backend stores the numeric id instead of the short reference.
|
|
197
225
|
|
|
198
|
-
### `client.
|
|
226
|
+
### `client.simpleLoans.find(query)`
|
|
199
227
|
|
|
200
|
-
Finds
|
|
228
|
+
Finds simple loans by short reference, numeric canister loan id string, generated deposit or repayment address, borrow or refund destination address, or indexed transaction id/hash through the SDK API search index.
|
|
201
229
|
|
|
202
|
-
Use this for recovery and manage pages where the user may paste any loan identifier. The method returns lightweight matches because address and transaction-id lookups can match many loans. Use `client.
|
|
230
|
+
Use this for recovery and manage pages where the user may paste any loan identifier. The method returns lightweight matches because address and transaction-id lookups can match many loans. Use `client.simpleLoans.get(...)` after the user selects a match.
|
|
203
231
|
|
|
204
232
|
```ts
|
|
205
|
-
const results = await client.
|
|
206
|
-
const byRef = await client.
|
|
207
|
-
const byLoanId = await client.
|
|
233
|
+
const results = await client.simpleLoans.find("bc1q...");
|
|
234
|
+
const byRef = await client.simpleLoans.find("ABC123");
|
|
235
|
+
const byLoanId = await client.simpleLoans.find("42");
|
|
208
236
|
|
|
209
237
|
for (const result of results) {
|
|
210
238
|
console.log(result.ref);
|
|
@@ -213,21 +241,21 @@ for (const result of results) {
|
|
|
213
241
|
console.log(result.collateral.amount);
|
|
214
242
|
}
|
|
215
243
|
|
|
216
|
-
const selectedLoan = await client.
|
|
244
|
+
const selectedLoan = await client.simpleLoans.get({ loanId: results[0].loanId });
|
|
217
245
|
```
|
|
218
246
|
|
|
219
247
|
Call `get(...)` when you already have an exact canister identifier and want direct canister lookup without an array:
|
|
220
248
|
|
|
221
249
|
```ts
|
|
222
|
-
const loanById = await client.
|
|
223
|
-
const loanByRef = await client.
|
|
250
|
+
const loanById = await client.simpleLoans.get({ loanId: 123n });
|
|
251
|
+
const loanByRef = await client.simpleLoans.get({ ref: "ABC123" });
|
|
224
252
|
```
|
|
225
253
|
|
|
226
254
|
### `client.quote.calculateLtv(request, pools, prices)`
|
|
227
255
|
|
|
228
256
|
Calculates implied LTV from selected pools, prices, borrow amount, and collateral amount.
|
|
229
257
|
|
|
230
|
-
Use this before `client.
|
|
258
|
+
Use this before `client.simpleLoans.create(...)` so your app can block invalid input and choose a safe `ltvMaxBps`.
|
|
231
259
|
|
|
232
260
|
### Borrow minimums
|
|
233
261
|
|
|
@@ -239,7 +267,11 @@ The SDK enforces product minimums before borrow creation:
|
|
|
239
267
|
| USDC | `1_000_000n` base units |
|
|
240
268
|
| USDT | `1_000_000n` base units |
|
|
241
269
|
|
|
242
|
-
Use `getMinimumBorrowAmount(asset)` to display the same minimum that `client.quote.calculateLtv(...)`, `client.quote.getQuote(...)`, `client.
|
|
270
|
+
Use `getMinimumBorrowAmount(asset)` to display the same minimum that `client.quote.calculateLtv(...)`, `client.quote.getQuote(...)`, `client.simpleLoans.create(...)`, and `client.lending.prepareBorrow(...)` enforce.
|
|
271
|
+
|
|
272
|
+
### Same-asset borrowing
|
|
273
|
+
|
|
274
|
+
Pools expose `sameAssetBorrowing` and `sameAssetBorrowingDustThreshold`. When the flag is disabled, same-asset collateral must be strictly below the base-unit dust threshold; equality is rejected. `client.quote.calculateLtv(...)`, `client.quote.getQuote(...)`, and `client.simpleLoans.create(...)` validate the requested collateral amount, while `client.lending.prepareBorrow(...)` validates the profile's current supplied balance before fetching a nonce or asking the wallet to sign.
|
|
243
275
|
|
|
244
276
|
### Withdraw minimums
|
|
245
277
|
|
|
@@ -259,22 +291,20 @@ For profile-based withdraw flows, call `client.positions.getFullWithdrawAmount(p
|
|
|
259
291
|
|
|
260
292
|
## Response Fields
|
|
261
293
|
|
|
262
|
-
Most
|
|
294
|
+
Most Simple Loans UIs show or store these fields:
|
|
263
295
|
|
|
264
296
|
| Field | Use |
|
|
265
297
|
| --- | --- |
|
|
266
298
|
| `loan.ref` | Save and show this reference so the loan can be restored later |
|
|
267
299
|
| `loan.status` | Shared lifecycle status: `{ operation, state, confirmations, requiredConfirmations }` |
|
|
268
|
-
| `loan.initialDeposit.amount` | Fee-inclusive collateral amount to send after creation or restore |
|
|
269
300
|
| `loan.initialDeposit.collateralAmount` | Intended credited collateral target used for LTV |
|
|
270
|
-
| `loan.initialDeposit.
|
|
301
|
+
| `loan.initialDeposit.targets[chain]` | Fee-inclusive amount, fee estimate, and destination for that transfer chain |
|
|
271
302
|
| `loan.initialDeposit.detectedTimestamp` | Unix timestamp in seconds when the collateral deposit was detected, or `null` before detection |
|
|
272
303
|
| `loan.initialDeposit.expiryTimestamp` | Unix timestamp in seconds when the collateral deposit window expires, or `null` before detection when unavailable |
|
|
273
|
-
| `loan.repayment.
|
|
274
|
-
| `loan.repayment.target` | Address or ICRC account where the user sends repayment |
|
|
304
|
+
| `loan.repayment.targets[chain]` | Full repayment quote and destination for that transfer chain |
|
|
275
305
|
| `loan.position` | Current collateral, debt, and interest state for the generated profile |
|
|
276
306
|
|
|
277
|
-
`client.
|
|
307
|
+
`client.simpleLoans.find(...)` returns lightweight search matches with `loanId`, `ref`, `createdAt`, `profileId`, `collateral`, and `borrow`. Use `client.simpleLoans.get(...)` to load full loan fields, and use `client.activities.list(...)` separately when you need deposit, borrow, repayment, or withdrawal activity.
|
|
278
308
|
|
|
279
309
|
## Amounts
|
|
280
310
|
|
|
@@ -283,13 +313,14 @@ The SDK returns amount fields as `bigint` values in the asset's smallest unit.
|
|
|
283
313
|
| Asset type | Example |
|
|
284
314
|
| --- | --- |
|
|
285
315
|
| BTC | Satoshis |
|
|
316
|
+
| ICP | e8s |
|
|
286
317
|
| USDC / USDT | Token base units using the pool decimals |
|
|
287
318
|
|
|
288
|
-
Use `Pool.decimals` from `client.market.listPools()` when converting user-entered decimals to base units. Hydrated
|
|
319
|
+
Use `Pool.decimals` from `client.market.listPools()` when converting user-entered decimals to base units. Hydrated simple loans also include `loan.collateral.decimals`, `loan.borrow.decimals`, and `loan.initialDeposit.decimals` for display.
|
|
289
320
|
|
|
290
321
|
## Status And Activity Tracking
|
|
291
322
|
|
|
292
|
-
Reload loans with `client.
|
|
323
|
+
Reload loans with `client.simpleLoans.get({ ref })` when you need current state, transfer targets, or the latest repayment quote.
|
|
293
324
|
|
|
294
325
|
Status-returning methods use the same `LiquidiumStatus` shape:
|
|
295
326
|
|
|
@@ -304,7 +335,7 @@ type LiquidiumStatus = {
|
|
|
304
335
|
|
|
305
336
|
`action_required` means the user or app must do something, such as sending funds. `confirming` means a tx is known but still needs confirmations. `processing` means confirmations are sufficient and Liquidium or the protocol is still processing. `active` means the loan is live and waiting for the next repayment action.
|
|
306
337
|
|
|
307
|
-
Use activities to track collateral deposits, borrow outflows, repayment deposits, confirmations, and fee top-ups. Activity confirmations are exposed on `activity.status`. Activity lists default to active items; pass `filter: "all"` when you need completed activity too. The activities module accepts the saved
|
|
338
|
+
Use activities to track collateral deposits, borrow outflows, repayment deposits, confirmations, and fee top-ups. Activity confirmations are exposed on `activity.status`. Activity lists default to active items; pass `filter: "all"` when you need completed activity too. The activities module accepts the saved simple loan reference and resolves the generated profile for you:
|
|
308
339
|
|
|
309
340
|
Activities expose chain transaction ids on `activity.txids` when ids are available.
|
|
310
341
|
|
|
@@ -330,16 +361,16 @@ Start browser integrations with the examples.
|
|
|
330
361
|
|
|
331
362
|
| Example | What it shows |
|
|
332
363
|
| --- | --- |
|
|
333
|
-
| [`examples/
|
|
334
|
-
| [`examples/sdk-method-query`](https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/sdk-method-query) | Developer tool for calling SDK methods, including
|
|
364
|
+
| [`examples/simple-loans-flow`](https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/simple-loans-flow) | Accountless Simple Loans UX with manual destination addresses, pool selection, LTV preview, loan creation, status reload, activity status, and loan recovery |
|
|
365
|
+
| [`examples/sdk-method-query`](https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/sdk-method-query) | Developer tool for calling SDK methods, including Simple Loans method templates |
|
|
335
366
|
|
|
336
|
-
Run the
|
|
367
|
+
Run the Simple Loans example:
|
|
337
368
|
|
|
338
369
|
```bash
|
|
339
370
|
git clone https://github.com/Liquidium-Inc/liquidium-sdk.git
|
|
340
371
|
cd liquidium-sdk
|
|
341
372
|
pnpm install
|
|
342
|
-
pnpm --filter @liquidium/example-
|
|
373
|
+
pnpm --filter @liquidium/example-simple-loans-flow dev
|
|
343
374
|
```
|
|
344
375
|
|
|
345
376
|
## Browser And Runtime Support
|
|
@@ -366,7 +397,7 @@ pnpm run test
|
|
|
366
397
|
|
|
367
398
|
## More API Details
|
|
368
399
|
|
|
369
|
-
This README covers `@liquidium/client`. Start new integrations with `client.
|
|
400
|
+
This README covers `@liquidium/client`. Start new integrations with `client.simpleLoans`; profile-based deposit-address flows and ETH contract-interaction flows are advanced paths.
|
|
370
401
|
|
|
371
402
|
## License
|
|
372
403
|
|