UNPKG

@bluefin-exchange/bluefin7k-aggregator-sdk

Version:
69 lines (68 loc) 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTokenPrice = getTokenPrice; exports.getTokenPrices = getTokenPrices; exports.getSuiPrice = getSuiPrice; const fetchClient_1 = require("../../config/fetchClient"); const apiEndpoints_1 = require("../../constants/apiEndpoints"); const tokens_1 = require("../../constants/tokens"); const token_1 = require("../../utils/token"); async function getTokenPrice(id, vsCoin = tokens_1.NATIVE_USDC_TOKEN_TYPE) { try { const response = await (0, fetchClient_1.fetchClient)(`${apiEndpoints_1.API_ENDPOINTS.PRICES}/price?ids=${(0, token_1.normalizeTokenType)(id)}&vsCoin=${vsCoin}`); const pricesRes = (await response.json()); return Number(pricesRes?.[id]?.price || 0); } catch (_) { return 0; } } const chunkArray = (array, chunkSize) => { const chunks = []; for (let i = 0; i < array.length; i += chunkSize) { chunks.push(array.slice(i, i + chunkSize)); } return chunks; }; const MAX_TOTAL_IDS = 500; const MAX_IDS_PER_REQUEST = 100; async function getTokenPrices(ids, vsCoin = tokens_1.NATIVE_USDC_TOKEN_TYPE) { try { const limitedIds = ids.slice(0, MAX_TOTAL_IDS).map(token_1.normalizeTokenType); const idChunks = chunkArray(limitedIds, MAX_IDS_PER_REQUEST); const responses = await Promise.all(idChunks.map(async (chunk) => { const response = await (0, fetchClient_1.fetchClient)(`${apiEndpoints_1.API_ENDPOINTS.PRICES}/price`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ ids: chunk, vsCoin, }), }); const pricesRes = (await response.json()); return pricesRes; })); const combinedPrices = responses.reduce((acc, pricesRes) => { Object.keys(pricesRes).forEach((id) => { acc[id] = Number(pricesRes[id]?.price || 0); }); return acc; }, {}); const finalPrices = limitedIds.reduce((acc, id) => { acc[id] = combinedPrices[id] || 0; return acc; }, {}); return finalPrices; } catch (_) { return ids.slice(0, MAX_TOTAL_IDS).reduce((acc, id) => { acc[id] = 0; return acc; }, {}); } } async function getSuiPrice() { return await getTokenPrice(tokens_1.SUI_FULL_TYPE); }