@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 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 instant loans.
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/instant-loans-flow"><b>Instant Loan Example</b></a> ·
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 Instant Loans
27
+ ## Why Start With Simple Loans
28
28
 
29
- - **Accountless loan creation**: create instant loans without requiring a Liquidium profile.
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 instant loans | You want a short checkout-style flow where users borrow against collateral without creating a Liquidium profile first | `client.instantLoans.create(...)`, `client.instantLoans.get(...)`, `client.instantLoans.find(...)`, `client.activities.list(...)` |
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 instant 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.
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 an instant loan, display the deposit target, and restore the loan by reference:
54
+ Create a simple loan, display the deposit target, and restore the loan by reference:
55
55
 
56
56
  ```ts
57
- import { LiquidiumClient, type Pool, type SupplyTarget } from "@liquidium/client";
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, "BTC");
67
- const borrowPool = requirePool(pools, "USDC");
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.instantLoans.create({
88
- collateralPoolId: collateralPool.id,
89
- borrowPoolId: borrowPool.id,
90
- collateralAsset: "BTC",
91
- borrowAsset: "USDC",
92
- collateralAmount,
93
- borrowAmount,
94
- ltvMaxBps: ltv.maxAllowedLtvBps,
95
- depositWindowSeconds: 3_600n,
96
- borrowDestination: {
97
- type: "External",
98
- address: "0x2222222222222222222222222222222222222222",
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
- refundDestination: {
101
- type: "External",
102
- address: "bc1qrefunddestination",
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:", loan.initialDeposit.amount.toString());
108
- console.log("Send collateral to:", formatSupplyTarget(loan.initialDeposit.target));
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.instantLoans.get({ ref: loan.ref });
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("Restored initial deposit amount:", restoredLoan.initialDeposit.amount.toString());
114
- console.log("Repay amount:", restoredLoan.repayment.amount.toString());
115
- console.log("Repay target:", formatSupplyTarget(restoredLoan.repayment.target));
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.instantLoans.find(loan.ref);
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(pools: Pool[], asset: string): Pool {
127
- const pool = pools.find((candidatePool) => candidatePool.asset === asset);
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
- if (target.type === "nativeAddress") {
142
- return target.address;
143
- }
144
-
145
- return target.account;
163
+ return target.address;
146
164
  }
147
165
  ```
148
166
 
149
- ## Instant Loan Flow
167
+ ## Simple Loans Flow
150
168
 
151
- Instant-loan integrations use this sequence:
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.instantLoans.create(...)` | Store `loan.ref` and show `loan.initialDeposit.amount` plus `loan.initialDeposit.target` |
158
- | Track loan | `client.instantLoans.get({ ref })`, `client.instantLoans.find(...)`, and `client.activities.list({ shortRef: ref })` | Reload loan state, initial deposit quote, and repayment activity |
159
- | Repay loan | Read `loan.repayment` | Ask the user to send `loan.repayment.amount` to `loan.repayment.target`; amount is `0n` when no repayment is due |
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.instantLoans.create(...)` and `client.instantLoans.get(...)` return the generated Liquidium profile, current position state, an initial deposit quote with its transfer target, and a repayment quote with its transfer target. Repayment amount fields are zero when the loan has no debt. Users do not manage the generated profile.
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.listPools()` returns only pools whose asset and chain variants are supported by this SDK version. Canister pools for unsupported variants such as `ICP` or `SOL` are omitted from the returned list.
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.instantLoans.create(request)`
187
+ ### `client.simpleLoans.create(request)`
168
188
 
169
- Creates an accountless instant loan and returns generated transfer targets.
189
+ Creates an accountless simple loan and returns generated transfer targets.
170
190
 
171
191
  | Field | Description |
172
192
  | --- | --- |
173
- | `collateralPoolId` | Pool that receives the collateral deposit |
174
- | `borrowPoolId` | Pool the loan borrows from |
175
- | `collateralAsset` | Collateral asset symbol, for example `"BTC"` |
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
- `borrowDestination` and `refundDestination` can be address strings or account objects such as `{ type: "External", address: "bc1q..." }`.
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
- ### `client.instantLoans.get({ ref })`
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.instantLoans.get({ loanId })`
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.instantLoans.find(query)`
226
+ ### `client.simpleLoans.find(query)`
199
227
 
200
- Finds instant 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.
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.instantLoans.get(...)` after the user selects a match.
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.instantLoans.find("bc1q...");
206
- const byRef = await client.instantLoans.find("ABC123");
207
- const byLoanId = await client.instantLoans.find("42");
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.instantLoans.get({ loanId: results[0].loanId });
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.instantLoans.get({ loanId: 123n });
223
- const loanByRef = await client.instantLoans.get({ ref: "ABC123" });
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.instantLoans.create(...)` so your app can block invalid input and choose a safe `ltvMaxBps`.
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.instantLoans.create(...)`, and `client.lending.prepareBorrow(...)` enforce.
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 instant-loan UIs show or store these fields:
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.target` | Address or ICRC account where the user sends collateral |
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.amount` | Full amount to repay, including fee and interest buffer. Zero when no repayment is due |
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.instantLoans.find(...)` returns lightweight search matches with `loanId`, `ref`, `createdAt`, `profileId`, `collateral`, and `borrow`. Use `client.instantLoans.get(...)` to load full loan fields, and use `client.activities.list(...)` separately when you need deposit, borrow, repayment, or withdrawal activity.
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 instant loans also include `loan.collateral.decimals`, `loan.borrow.decimals`, and `loan.initialDeposit.decimals` for display.
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.instantLoans.get({ ref })` when you need current state, transfer targets, or the latest repayment quote.
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 instant-loan reference and resolves the generated profile for you:
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/instant-loans-flow`](https://github.com/Liquidium-Inc/liquidium-sdk/tree/main/examples/instant-loans-flow) | Accountless instant loan UX with manual destination addresses, pool selection, LTV preview, loan creation, status reload, activity status, and loan recovery |
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 instant loan method templates |
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 instant loan example:
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-instant-loans-flow dev
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.instantLoans`; profile-based deposit-address flows and ETH contract-interaction flows are advanced paths.
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