@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
61 lines (60 loc) • 1.95 kB
JavaScript
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,
};
});
}
;