UNPKG

@bluefin-exchange/bluefin7k-aggregator-sdk

Version:
61 lines (60 loc) 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.groupSwapRoutes = groupSwapRoutes; const token_1 = require("../utils/token"); function groupSwapRoutes(quoteResponse) { if (!quoteResponse.routes || !quoteResponse.swaps) { return []; } const poolDetails = mapPoolIdsToDetails(quoteResponse.routes); const items = getTxSorSwaps(quoteResponse.swaps, poolDetails); const groupedItems = []; let currentGroup = []; for (let i = 0; i < items.length; i++) { const item = items[i]; currentGroup.push(item); const nextItem = items[i + 1]; if (!nextItem || BigInt(nextItem.amount) > 0n) { groupedItems.push(currentGroup); currentGroup = []; } } if (currentGroup.length > 0) { groupedItems.push(currentGroup); } return groupedItems; } function mapPoolIdsToDetails(routes) { const poolTypes = {}; routes.forEach((route) => { route.hops.forEach((hop) => { poolTypes[hop.poolId] = hop.pool; }); }); return poolTypes; } function getTxSorSwaps(swaps, poolDetails) { return swaps.map((swap) => { const pool = poolDetails[swap.poolId]; const assetIn = (0, token_1.denormalizeTokenType)(swap.assetIn); const assetOut = (0, token_1.denormalizeTokenType)(swap.assetOut); const coinX = { type: (0, token_1.denormalizeTokenType)(pool?.allTokens?.[0]?.address), decimals: pool?.allTokens?.[0]?.decimal, }; const coinY = { type: (0, token_1.denormalizeTokenType)(pool?.allTokens?.[1]?.address), decimals: pool?.allTokens?.[0]?.decimal, }; const swapXtoY = assetIn === coinX.type; return { ...swap, pool, assetIn, assetOut, coinX, coinY, swapXtoY, }; }); }