UNPKG

@indigo-labs/dexter

Version:

Customizable Typescript SDK for interacting with Cardano DEXs

89 lines (88 loc) 3.74 kB
import { BaseApi } from './base-api'; import { Asset } from '../models/asset'; import { LiquidityPool } from '../models/liquidity-pool'; import axios from 'axios'; import { SundaeSwapV1 } from '../sundaeswap-v1'; import { appendSlash } from '../../utils'; export class SundaeSwapV1Api extends BaseApi { constructor(dex, requestConfig) { super(); this.dex = dex; this.api = axios.create({ timeout: requestConfig.timeout, baseURL: `${appendSlash(requestConfig.proxyUrl)}https://stats.sundaeswap.finance/graphql`, headers: { 'Content-Type': 'application/json', } }); } liquidityPools(assetA, assetB) { const maxPerPage = 100; const assetAId = (assetA === 'lovelace') ? '' : assetA.identifier('.'); let assetBId = (assetB && assetB !== 'lovelace') ? assetB.identifier('.') : ''; const getPaginatedResponse = (page) => { return this.api.post('', { operationName: 'getPoolsByAssetIds', query: ` query getPoolsByAssetIds($assetIds: [String!]!, $pageSize: Int, $page: Int) { pools(assetIds: $assetIds, pageSize: $pageSize, page: $page) { ...PoolFragment } } fragment PoolFragment on Pool { assetA { ...AssetFragment } assetB { ...AssetFragment } assetLP { ...AssetFragment } name fee quantityA quantityB quantityLP ident assetID } fragment AssetFragment on Asset { assetId decimals } `, variables: { page: page, pageSize: maxPerPage, assetIds: [assetBId !== '' ? assetBId : assetAId], }, }).then((response) => { const pools = response.data.data.pools; const liquidityPools = pools.map((pool) => { let liquidityPool = new LiquidityPool(SundaeSwapV1.identifier, pool.assetA.assetId ? Asset.fromIdentifier(pool.assetA.assetId, pool.assetA.decimals) : 'lovelace', pool.assetB.assetId ? Asset.fromIdentifier(pool.assetB.assetId, pool.assetB.decimals) : 'lovelace', BigInt(pool.quantityA), BigInt(pool.quantityB), this.dex.poolAddress, this.dex.orderAddress, this.dex.orderAddress); liquidityPool.identifier = pool.ident; liquidityPool.lpToken = Asset.fromIdentifier(pool.assetLP.assetId); liquidityPool.poolFeePercent = Number(pool.fee); liquidityPool.totalLpTokens = BigInt(pool.quantityLP); return liquidityPool; }); if (pools.length < maxPerPage) { return liquidityPools; } return getPaginatedResponse(page + 1).then((nextPagePools) => { return liquidityPools.concat(nextPagePools); }); }); }; return getPaginatedResponse(0); } }