@bitte-ai/agent-sdk
Version:
Agent SDK for Bitte Protocol
53 lines (52 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadSymbolMap = loadSymbolMap;
exports.loadTokenMap = loadTokenMap;
exports.getTokenDetails = getTokenDetails;
const viem_1 = require("viem");
const erc20_1 = require("./erc20");
const TOKEN_MAP_BASE_URL = "https://raw.githubusercontent.com/BitteProtocol/core/main/public";
async function loadSymbolMap(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to load tokens at: ${response.statusText}`);
}
const loadedSymbolMap = await response.json();
return loadedSymbolMap;
}
catch (error) {
console.error("Error loading symbolMap:", error);
throw error;
}
}
const defaultChainList = [1, 10, 56, 100, 137, 1868, 8453, 4261, 43114];
function tokenMapUrl(chainId, baseUrl = TOKEN_MAP_BASE_URL) {
return `${baseUrl}/tokens_${chainId}.json`;
}
async function loadTokenMap(chainIds = defaultChainList) {
const mapping = {};
await Promise.all(chainIds.map(async (chainId) => {
try {
mapping[chainId] = await loadSymbolMap(tokenMapUrl(chainId));
}
catch (error) {
console.error(`Error loading token map for chain ${chainId}:`, error);
mapping[chainId] = {};
}
}));
return mapping;
}
async function getTokenDetails(chainId, symbolOrAddress, tokenMap,
// Optionally Provide your own RPC.
client) {
if ((0, viem_1.isAddress)(symbolOrAddress, { strict: false })) {
return (0, erc20_1.getTokenInfo)(chainId, symbolOrAddress, client);
}
if (!tokenMap) {
const symbolMap = await loadSymbolMap(tokenMapUrl(chainId));
return symbolMap[symbolOrAddress.toLowerCase()];
}
// TokenMap has lower cased (sanitized) symbols
return tokenMap[chainId][symbolOrAddress.toLowerCase()];
}