### Run the instant loan example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Instructions to clone the repository, install dependencies, set up environment variables, and run the instant loan example application. ```bash git clone https://github.com/Liquidium-Inc/liquidium-sdk.git cd liquidium-sdk pnpm install cp examples/instant-loans-flow/.env.example examples/instant-loans-flow/.env pnpm --filter @liquidium/example-instant-loans-flow dev ``` -------------------------------- ### Install Dependencies Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/examples/vite-react-dynamic/README.md Installs dependencies from the SDK root. ```bash pnpm install ``` -------------------------------- ### Run the Example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/examples/vite-react-dynamic/README.md Runs the Vite React dynamic example. ```bash pnpm --filter @liquidium/example-vite-react-dynamic dev ``` -------------------------------- ### Quick Start: Instant Loan Example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Create an instant loan, display the deposit target, and restore the loan by reference using the Liquidium SDK. ```typescript import { LiquidiumClient, type Pool, type SupplyTarget } from "@liquidium/client"; const client = new LiquidiumClient(); const [pools, prices] = await Promise.all([ client.market.listPools(), client.market.getAssetPrices(), ]); const collateralPool = requirePool(pools, "BTC"); const borrowPool = requirePool(pools, "USDC"); const collateralAmount = 50_000n; // BTC sats const borrowAmount = 9_000_000n; // USDC base units const ltv = client.quote.calculateLtv( { collateralPoolId: collateralPool.id, borrowPoolId: borrowPool.id, collateralAmount, borrowAmount, }, pools, prices ); if (ltv.validationErrors.length > 0) { throw new Error(ltv.validationErrors.map((error) => error.message).join(" ")); } const loan = await client.instantLoans.create({ collateralPoolId: collateralPool.id, borrowPoolId: borrowPool.id, collateralAsset: "BTC", borrowAsset: "USDC", collateralAmount, borrowAmount, ltvMaxBps: ltv.maxAllowedLtvBps, depositWindowSeconds: 3_600n, borrowDestination: { type: "External", address: "0x2222222222222222222222222222222222222222", }, refundDestination: { type: "External", address: "bc1qrefunddestination", }, }); console.log("Save this loan reference:", loan.ref); console.log("Send collateral to:", formatSupplyTarget(loan.depositTarget)); const restoredLoan = await client.instantLoans.get({ ref: loan.ref }); console.log("Loan status:", restoredLoan.status); console.log("Repay amount:", restoredLoan.repayment.amount.toString()); console.log("Repay target:", formatSupplyTarget(restoredLoan.repayment.target)); const activities = await client.activities.list({ shortRef: loan.ref }); console.log("Loan activities:", activities); function requirePool(pools: Pool[], asset: string): Pool { const pool = pools.find((candidatePool) => candidatePool.asset === asset); if (!pool) { throw new Error(`Missing ${asset} pool.`); } if (pool.frozen) { throw new Error(`${asset} pool is frozen.`); } return pool; } function formatSupplyTarget(target: SupplyTarget): string { if (target.type === "nativeAddress") { return target.address; } return target.account; } ``` -------------------------------- ### Install the client package Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Install the Liquidium client package using npm. ```bash npm install @liquidium/client ``` -------------------------------- ### Instant Loan Creation Example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of calculating LTV and creating an instant loan with specified parameters. ```typescript const ltv = client.quote.calculateLtv( { collateralPoolId: btcPool.id, borrowPoolId: usdtPool.id, collateralAmount: 10_000_000n, borrowAmount: 2_000_000n, }, pools, prices ); const loan = await client.instantLoans.create({ collateralPoolId: btcPool.id, borrowPoolId: usdtPool.id, collateralAsset: "BTC", borrowAsset: "USDT", collateralAmount: 10_000_000n, borrowAmount: 2_000_000n, ltvMaxBps: ltv.maxAllowedLtvBps, depositWindowSeconds: 3_600n, borrowDestination: { type: "External", address: "0x2222222222222222222222222222222222222222", }, refundDestination: { type: "External", address: "bc1qrefunddestination" }, }); const ref = loan.ref; const depositTarget = loan.depositTarget; const repayTarget = loan.repayTarget; ``` -------------------------------- ### Accounts API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for preparing and creating a profile, and for getting a profile ID or listing linked wallets. ```typescript client.accounts.prepareCreateProfile(...); // returns a signable action client.accounts.createProfile(...); // signs and submits through a wallet adapter client.accounts.getProfileId(walletAddress); client.accounts.listLinkedWallets(profileId); ``` -------------------------------- ### Activities API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for listing activities and getting their status, requiring an apiBaseUrl. ```typescript client.activities.list({ profileId, filter: "all" }); client.activities.getStatus({ profileId, id }); ``` -------------------------------- ### Market API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for discovering pools, finding specific pools, getting reserve data, asset prices, and pool rates. ```typescript client.market.listPools(); client.market.findPool({ asset, chain }); client.market.getReserveData({ asset, chain }); client.market.getAssetPrices(); client.market.getPoolRate(poolId); ``` -------------------------------- ### Vite Environment Variable Example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of how to configure the EVM RPC URL in a Vite app using environment variables, specifically for Infura. ```typescript const evmRpcUrl = import.meta.env.VITE_INFURA_API_KEY ? `https://mainnet.infura.io/v3/${import.meta.env.VITE_INFURA_API_KEY}` : import.meta.env.VITE_EVM_RPC_URL; ``` -------------------------------- ### Development commands Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Commands for cloning the repository, installing dependencies, building the project, type checking, and running tests. ```bash git clone https://github.com/Liquidium-Inc/liquidium-sdk.git cd liquidium-sdk pnpm install pnpm run build pnpm run typecheck pnpm run test ``` -------------------------------- ### Quote API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for getting a quote for borrowing operations and calculating LTV, including fetching market data first. ```typescript const pools = await client.market.listPools(); const prices = await client.market.getAssetPrices(); const quote = client.quote.getQuote(request, pools, prices); const ltv = client.quote.calculateLtv(ltvRequest, pools, prices); ``` -------------------------------- ### Wallet Adapter Implementation Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example implementation of a WalletAdapter for signing messages and sending ETH transactions. ```typescript import type { WalletAdapter } from "@liquidium/client"; const walletAdapter: WalletAdapter = { signMessage: async ({ message }) => wallet.signMessage(message), sendEthTransaction: async ({ transaction }) => wallet.sendTransaction(transaction), }; ``` -------------------------------- ### Tracking Loan Activities Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Example of how to list active activities associated with a loan reference. ```typescript const activities = await client.activities.list({ shortRef: loan.ref, filter: "active", }); ``` -------------------------------- ### Loan Discovery by Address Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of finding potential loan candidates by a refund address. ```typescript const candidates = await client.instantLoans.findByAddress( "bc1qrefunddestination" ); const loan = await client.instantLoans.get({ loanId: candidates[0].loanId, }); ``` -------------------------------- ### Loan Restoration by Reference Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of restoring a loan using its reference ID. ```typescript const loan = await client.instantLoans.get({ ref: "8Y9AQQ" }); const repayAmount = loan.repayment.amount; const repayAddress = loan.repayment.target.type === "nativeAddress" ? loan.repayment.target.address : loan.repayment.target.account; ``` -------------------------------- ### Instant Loans API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for creating, retrieving, and finding instant loans, including a helper for LTV calculation. ```typescript client.instantLoans.create(...); client.instantLoans.get({ ref }); client.instantLoans.get({ loanId }); client.instantLoans.findByAddress(address); client.quote.calculateLtv(...); // pure helper for current LTV previews ``` -------------------------------- ### Loading Activity Status Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Example of how to load the status of a specific activity or receipt. ```typescript const activityStatus = await client.activities.getStatus({ shortRef: loan.ref, id: "", }); ``` -------------------------------- ### ETH Stablecoin Deposit Addresses - contractInteraction mechanism example Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of overriding the default route with mechanism: 'contractInteraction' for supply operations. ```typescript const contractInteractionFlow = await client.lending.supply({ profileId, poolId, action: "deposit", mechanism: "contractInteraction", account: walletAddress, amount: 10_000_000n, walletAdapter: { sendEthTransaction: async ({ transaction }) => wallet.sendTransaction(transaction), }, }); ``` -------------------------------- ### Lending API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for advanced profile-based lending operations like borrowing, withdrawing, supplying, repaying, and tracking inflows. ```typescript client.lending.prepareBorrow(...); client.lending.prepareWithdraw(...); client.lending.borrow(...); client.lending.withdraw(...); client.lending.supply(...); client.lending.estimateInflowFee({ asset: "USDT", chain: "ETH" }); client.lending.submitInflow({ txid, chain: "BTC", type: "DEPOSIT" }); ``` -------------------------------- ### Deposit Address Extraction Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of extracting the deposit address based on the target type. ```typescript const depositAddress = depositTarget.type === "nativeAddress" ? depositTarget.address : depositTarget.account; ``` -------------------------------- ### Positions API Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Examples for retrieving existing profile state, including individual positions, aggregate summaries, health factors, and user reserves. ```typescript client.positions.getPosition(profileId, poolId); client.positions.listPositions(profileId); client.positions.getHealthFactor(profileId); client.positions.getUserStats(profileId); client.positions.getUserPositionSummary(profileId); // aggregate: collateral, debt, availableBorrows, netWorth, LTV, HF client.positions.getUserReserves(profileId); // per-reserve view joined with pool + price data client.positions.getMaxRepayAmount(profileId, poolId, bufferBps?); // full-repay amount with accrual buffer ``` -------------------------------- ### Read aggregate position summary and reserves Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Code snippet to get an aggregate position summary and per-reserve breakdown. ```typescript const summary = await client.positions.getUserPositionSummary(profileId); const reserves = await client.positions.getUserReserves(profileId); ``` -------------------------------- ### ETH Stablecoin Deposit Addresses - get_deposit_address call Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Example of how the SDK resolves the deposit address for ETH USDT/USDC using the get_deposit_address function when mechanism is 'transfer'. ```typescript get_deposit_address( { owner: Principal.fromText(poolId), subaccount: [ encodeInflowSubaccount({ action, principal: Principal.fromText(profileId), }), ], }, [tokenContractAddress] ); ``` -------------------------------- ### Minimal Client Configuration Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Demonstrates the most basic configuration for initializing the LiquidiumClient. ```typescript const client = new LiquidiumClient({}); ``` -------------------------------- ### Create a profile (convenience method) Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Convenience method for creating a profile when the app already has wallet signing wired. ```typescript const profileId = await client.accounts.createProfile({ account: walletAddress, chain: "ETH", walletAdapter: { signMessage: async ({ message }) => wallet.signMessage(message), }, }); ``` -------------------------------- ### Instant Loan Flow Steps Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/README.md Illustrates the sequence of SDK calls and corresponding app actions for an instant loan integration. ```typescript client.market.listPools() client.market.getAssetPrices() client.quote.calculateLtv(...) client.instantLoans.create(...) client.instantLoans.get({ ref }) client.activities.list({ shortRef: ref }) ``` -------------------------------- ### Create a profile (prepare flow) Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Prepare flow for creating a profile when explicit control over signing is desired. ```typescript const createAction = await client.accounts.prepareCreateProfile({ account: walletAddress, }); const signature = await wallet.signMessage(createAction.message); const profileId = await createAction.submit({ signature, chain: "ETH", account: walletAddress, }); ``` -------------------------------- ### Importing the Liquidium Client Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md This snippet shows how to import the LiquidiumClient from the @liquidium/client package and initialize it with default settings. ```typescript import { LiquidiumClient } from "@liquidium/client"; const client = new LiquidiumClient({}); ``` -------------------------------- ### History Methods Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Methods for retrieving user, liquidation, pool, pool configuration, and borrow rate history. ```typescript client.history.getUserTransactionHistory(profileId, filters?); client.history.getLiquidationHistory(profileId, filters?); client.history.getPoolHistory(poolId, window?); client.history.getPoolConfigHistory(poolId, cursor?); client.history.getBorrowRateHistory(poolId, window?); ``` -------------------------------- ### Richer Client Configuration Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Shows a more comprehensive configuration for the LiquidiumClient, including environment, API base URL, EVM RPC URL, and timeout. ```typescript const client = new LiquidiumClient({ environment: "mainnet", apiBaseUrl: "https://your-app.example.com/api/sdk", evmRpcUrl: "https://mainnet.infura.io/v3/", timeoutMs: 30_000, }); ``` -------------------------------- ### Profile-based quote-first borrow Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Advanced profile-based quote-first borrow execution for apps managing profiles. ```typescript const pools = await client.market.listPools(); const prices = await client.market.getAssetPrices(); const quote = client.quote.getQuote(request, pools, prices); const outflow = await client.lending.borrow({ profileId, poolId: quote.borrowPoolId, amount: quote.borrowAmount, receiverAddress, signerWalletAddress: walletAddress, signerChain: "ETH", signerWalletAdapter: { signMessage: async ({ message }) => wallet.signMessage(message), }, }); ``` -------------------------------- ### Advanced profile-based supply flow (deposit) Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Advanced profile-based supply flow for depositing assets. ```typescript const supplyFlow = await client.lending.supply({ profileId, poolId, action: "deposit", }); if ( supplyFlow.type === "transfer" && supplyFlow.target.type === "nativeAddress" ) { const depositAddress = supplyFlow.target.address; } await supplyFlow.submit({ txid: "" }); ``` -------------------------------- ### Read market data and positions Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Code snippet to read market data and positions using the Liquidium SDK. ```typescript const pools = await client.market.listPools(); const prices = await client.market.getAssetPrices(); const positions = await client.positions.listPositions(profileId); const healthFactor = await client.positions.getHealthFactor(profileId); ``` -------------------------------- ### Advanced profile-based supply flow (ETH stablecoin pools) Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Supply flow for ETH stablecoin pools using an ETH wallet adapter for direct deposit. ```typescript const supplyFlow = await client.lending.supply({ profileId, poolId, action: "deposit", account: walletAddress, amount: 10_000_000n, walletAdapter: { sendEthTransaction: async ({ transaction }) => wallet.sendTransaction(transaction), }, }); ``` -------------------------------- ### Advanced profile-based supply flow (auto-broadcast) Source: https://github.com/liquidium-inc/liquidium-sdk/blob/main/skills/liquidium-sdk-integration/SKILL.md Advanced profile-based supply flow with auto-broadcast for transfer-path transactions. ```typescript const autoBroadcastFlow = await client.lending.supply({ profileId, poolId, action: "deposit", amount: 100_000n, account: walletAddress, walletAdapter: { sendBtcTransaction: async ({ toAddress, amountSats }) => wallet.sendBtcTransaction({ toAddress, amountSats }), }, }); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.