@indigo-labs/dexter
Version:
Customizable Typescript SDK for interacting with Cardano DEXs
49 lines (48 loc) • 2.33 kB
JavaScript
import { BaseApi } from './base-api';
import { Asset } from '../models/asset';
import { LiquidityPool } from '../models/liquidity-pool';
import axios from 'axios';
import { appendSlash } from '../../utils';
import { Splash } from '../splash';
const MAX_INT = 9223372036854775807n;
export class SplashApi extends BaseApi {
constructor(dex, requestConfig) {
super();
this.dex = dex;
this.api = axios.create({
timeout: requestConfig.timeout,
baseURL: `${appendSlash(requestConfig.proxyUrl)}https://api5.splash.trade/platform-api/v1/`,
withCredentials: false,
});
}
async liquidityPools(assetA, assetB) {
const assets = (await this.assets()).data['tokens'];
return this.api.get('/pools/overview?verified=false&duplicated=false').then((response) => {
return response.data.map((pool) => this.liquidityPoolFromResponse(pool, assets));
});
}
liquidityPoolFromResponse(poolData, assets) {
poolData = poolData.pool;
const tokenA = poolData.x.asset === '.'
? 'lovelace'
: new Asset(poolData.x.asset.split('.')[0], poolData.x.asset.split('.')[1]);
const tokenB = poolData.y.asset === '.'
? 'lovelace'
: new Asset(poolData.y.asset.split('.')[0], poolData.y.asset.split('.')[1]);
if (tokenA !== 'lovelace' && tokenA.identifier('.') in assets) {
tokenA.decimals = assets[tokenA.identifier('.')].decimals;
}
if (tokenB !== 'lovelace' && tokenB.identifier('.') in assets) {
tokenB.decimals = assets[tokenB.identifier('.')].decimals;
}
const liquidityPool = new LiquidityPool(Splash.identifier, tokenA, tokenB, BigInt(poolData['x']['amount']) - BigInt(poolData['treasuryX']), BigInt(poolData['y']['amount']) - BigInt(poolData['treasuryY']), '', '', '');
const [lpTokenPolicyId, lpTokenAssetName] = poolData['lq']['asset'].split('.');
liquidityPool.lpToken = new Asset(lpTokenPolicyId, lpTokenAssetName);
liquidityPool.totalLpTokens = MAX_INT - BigInt(poolData['lq']['amount']);
liquidityPool.identifier = poolData['id'];
return liquidityPool;
}
assets() {
return axios.get('https://spectrum.fi/cardano-token-list-v2.json');
}
}