UNPKG

@indigo-labs/dexter

Version:

Customizable Typescript SDK for interacting with Cardano DEXs

53 lines (52 loc) 3.28 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 { SundaeSwapV3 } from '../sundaeswap-v3'; export class SundaeSwapV3Api extends BaseApi { constructor(dex, requestConfig) { super(); this.dex = dex; this.api = axios.create({ timeout: requestConfig.timeout, baseURL: `${appendSlash(requestConfig.proxyUrl)}https://api.sundae.fi/graphql`, headers: { 'Content-Type': 'application/json', } }); } async liquidityPools(assetA, assetB) { const assetAId = (assetA === 'lovelace') ? 'ada.lovelace' : assetA.identifier('.'); const assetBId = (assetB && assetB !== 'lovelace') ? assetB.identifier('.') : 'ada.lovelace'; const assets = [assetAId, assetBId]; return await this.api.post('', { operationName: 'fetchPoolsByPair', query: `query fetchPoolsByPair($assetA: ID!, $assetB: ID!) {\n pools {\n byPair(assetA: $assetA, assetB: $assetB) {\n ...PoolBrambleFragment\n }\n }\n}\n\nfragment PoolBrambleFragment on Pool {\n id\n assetA {\n ...AssetBrambleFragment\n }\n assetB {\n ...AssetBrambleFragment\n }\n assetLP {\n ...AssetBrambleFragment\n }\n feesFinalized {\n slot\n }\n marketOpen {\n slot\n }\n askFee\n bidFee\n feeManagerId\n current {\n quantityA {\n quantity\n }\n quantityB {\n quantity\n }\n quantityLP {\n quantity\n }\n tvl {\n quantity\n }\n }\n version\n}\n\nfragment AssetBrambleFragment on Asset {\n id\n policyId\n description\n dateListed {\n format\n }\n decimals\n ticker\n name\n logo\n assetName\n metadata {\n ... on OnChainLabel20 {\n __typename\n }\n ... on OnChainLabel721 {\n __typename\n }\n ... on CardanoTokenRegistry {\n __typename\n }\n }\n}`, variables: { assetA: assets[0], assetB: assets[1], }, }).then((response) => { const pools = response.data.data.pools.byPair; return pools .filter((pool) => pool.version === 'V3') .map((pool) => { let liquidityPool = new LiquidityPool(SundaeSwapV3.identifier, pool.assetA.id === 'ada.lovelace' ? 'lovelace' : Asset.fromIdentifier(pool.assetA.id, pool.assetA.decimals), pool.assetB.id === 'ada.lovelace' ? 'lovelace' : Asset.fromIdentifier(pool.assetB.id, pool.assetB.decimals), BigInt(pool.current.quantityA.quantity), BigInt(pool.current.quantityB.quantity), this.dex.poolAddress, '', ''); liquidityPool.identifier = pool.id; liquidityPool.lpToken = Asset.fromIdentifier(pool.assetLP.id); liquidityPool.poolFeePercent = Number((pool.bidFee[0] / pool.bidFee[1]) * 100); liquidityPool.totalLpTokens = BigInt(pool.current.quantityLP.quantity); return liquidityPool; }); }); } }