const BASE = "https://rpc.ralphstudio.xyz/{slug}/indexer";
const API_KEY = "API_KEY";
async function getPortfolio(address) {
// Step 1: get all token balances for the address
const holdingsRes = await fetch(`${BASE}/addresses/${address}/tokens`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const holdings = await holdingsRes.json();
// Step 2: fetch metadata for each token in parallel
const withMeta = await Promise.all(
holdings.map(async (holding) => {
const metaRes = await fetch(`${BASE}/tokens/${holding.tokenId}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const meta = await metaRes.json();
return {
...holding,
symbol: meta.symbol ?? holding.tokenId.slice(0, 8),
name: meta.name ?? "Unknown Token",
decimals: meta.decimals ?? 0,
formattedBalance: meta.decimals
? Number(holding.balance) / Math.pow(10, meta.decimals)
: holding.balance,
};
}),
);
return withMeta;
}