UNPKG

@indigo-labs/dexter

Version:

Customizable Typescript SDK for interacting with Cardano DEXs

49 lines (48 loc) 2.33 kB
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'); } }