Market Data
import { KaleidoClient } from 'kaleido-sdk';
const client = KaleidoClient.create({
baseUrl: 'https://api.regtest.kaleidoswap.com',
});
const [assets, pairs] = await Promise.all([
client.maker.listAssets(),
client.maker.listPairs(),
]);
console.log(`Assets: ${assets.assets.length}`);
console.log(`Pairs: ${pairs.pairs.length}`);
for (const pair of pairs.pairs.slice(0, 5)) {
console.log(`${pair.base.ticker}/${pair.quote.ticker}`);
}
Request a Quote
import { KaleidoClient, Layer } from 'kaleido-sdk';
const client = KaleidoClient.create();
const quote = await client.maker.getQuote({
from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 100000 },
to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});
console.log(`RFQ ID: ${quote.rfq_id}`);
console.log(`Price: ${quote.price}`);
console.log(`From: ${quote.from_asset.amount} ${quote.from_asset.ticker}`);
console.log(`To: ${quote.to_asset.amount} ${quote.to_asset.ticker}`);
Create a Swap Order
This mirrors the order-based flow that is implemented in the SDK today: request a quote, create an order, then poll for status.import { KaleidoClient, Layer, ReceiverAddressFormat } from 'kaleido-sdk';
const client = KaleidoClient.create();
const quote = await client.maker.getQuote({
from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 100000 },
to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});
const order = await client.maker.createSwapOrder({
rfq_id: quote.rfq_id,
from_asset: quote.from_asset,
to_asset: quote.to_asset,
receiver_address: {
address: 'demo-receiver-address',
format: ReceiverAddressFormat.BOLT11,
},
});
const finalOrder = await client.maker.waitForSwapCompletion(order.id, {
accessToken: order.access_token,
timeout: 300000,
pollInterval: 2000,
onStatusUpdate: (status) => console.log(`Status: ${status}`),
});
console.log(finalOrder.status);
Atomic Swap Initialization
import { KaleidoClient, Layer } from 'kaleido-sdk';
const client = KaleidoClient.create({
baseUrl: 'https://api.signet.kaleidoswap.com',
});
const quote = await client.maker.getQuote({
from_asset: { asset_id: 'BTC', layer: Layer.BTC_LN, amount: 4100000 },
to_asset: { asset_id: 'USDT', layer: Layer.RGB_LN },
});
const swap = await client.maker.initSwap({
rfq_id: quote.rfq_id,
from_asset: quote.from_asset.asset_id,
from_amount: quote.from_asset.amount,
to_asset: quote.to_asset.asset_id,
to_amount: quote.to_asset.amount,
});
console.log(swap.payment_hash);
console.log(swap.swapstring);
WebSocket Streaming
import { KaleidoClient } from 'kaleido-sdk';
const client = KaleidoClient.create({
baseUrl: 'https://api.signet.kaleidoswap.com',
});
client.maker.enableWebSocket('wss://api.signet.kaleidoswap.com/ws/my-client-id');
const stop = await client.maker.streamQuotesByTicker(
'BTC',
'USDT',
100000,
(quote) => console.log(quote.price),
{ pollInterval: 2000 }
);
setTimeout(() => stop(), 10000);
RLN Operations
import { KaleidoClient } from 'kaleido-sdk';
const client = KaleidoClient.create({
nodeUrl: 'http://localhost:3001',
});
if (client.hasNode()) {
const nodeInfo = await client.rln.getNodeInfo();
const balance = await client.rln.getBtcBalance();
console.log(nodeInfo.pubkey);
console.log(balance);
}
Utilities
import { toSmallestUnits, toDisplayUnits, getSdkName, getVersion } from 'kaleido-sdk';
console.log(toSmallestUnits(0.001, 8)); // 100000
console.log(toDisplayUnits(100000, 8)); // 0.001
console.log(getSdkName()); // "kaleido-sdk"
console.log(getVersion()); // "0.1.2"