@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
86 lines • 3.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PoolFetcher = void 0;
// ============ Internal Imports ============
const ethers_1 = require("ethers");
const cross_fetch_1 = __importDefault(require("cross-fetch"));
// Define your most important base tokens
const BASE_TOKENS = [
{ symbol: 'MON', address: ethers_1.ZeroAddress },
{ symbol: 'WMON', address: '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701' },
{ symbol: 'USDC', address: '0xf817257fed379853cDe0fa4F97AB987181B1E5Ea' },
{ symbol: 'kuruUSDC', address: '0x6C15057930e0d8724886C09e940c5819fBE65465' },
];
class PoolFetcher {
constructor(baseUrl) {
this.baseUrl = baseUrl.replace(/\/$/, '');
}
static async create(baseUrl) {
return new PoolFetcher(baseUrl);
}
addDirectPairs(tokenIn, tokenOut) {
return [
{ baseToken: tokenIn, quoteToken: tokenOut },
{ baseToken: tokenOut, quoteToken: tokenIn },
];
}
addBaseTokenPairs(token, baseTokens) {
return baseTokens.flatMap((base) => [
{ baseToken: token, quoteToken: base.address },
{ baseToken: base.address, quoteToken: token },
]);
}
addBasePairCombinations(baseTokens) {
return baseTokens.flatMap((base1, index) => baseTokens.slice(index + 1).flatMap((base2) => [
{ baseToken: base1.address, quoteToken: base2.address },
{ baseToken: base2.address, quoteToken: base1.address },
]));
}
async fetchMarketData(pairs) {
try {
const response = await (0, cross_fetch_1.default)(`${this.baseUrl}/api/v1/markets/filtered`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ pairs }),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return (await response.json());
}
catch (error) {
throw new Error(`Failed to fetch market data: ${JSON.stringify(error)}`);
}
}
async getAllPools(tokenInAddress, tokenOutAddress, customBaseTokens) {
try {
let pairs = [];
const baseTokens = customBaseTokens || BASE_TOKENS;
if (tokenInAddress && tokenOutAddress) {
// Add direct pairs
pairs.push(...this.addDirectPairs(tokenInAddress, tokenOutAddress));
// Add pairs with base tokens
pairs.push(...this.addBaseTokenPairs(tokenInAddress, baseTokens), ...this.addBaseTokenPairs(tokenOutAddress, baseTokens));
}
// Add base token combinations
pairs.push(...this.addBasePairCombinations(baseTokens));
const data = await this.fetchMarketData(pairs);
return data.data.map((market) => ({
baseToken: market.baseasset,
quoteToken: market.quoteasset,
orderbook: market.market,
}));
}
catch (error) {
console.error('Error fetching pools:', error);
throw error;
}
}
}
exports.PoolFetcher = PoolFetcher;
//# sourceMappingURL=fetcher.js.map