@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
69 lines (68 loc) • 2.56 kB
JavaScript
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);
}
;