@glideco/price-feed
v0.1.0
Published
Server-authoritative USD price feed. Stablecoin shortcut + Coingecko-cached spot for ~12 high-cap assets. Bigint-safe raw→USD-cents conversion.
Downloads
120
Maintainers
Readme
@glideco/price-feed
Server-authoritative USD price feed for Glide.
Stablecoin shortcut list (USDC, USDT, USDP, DAI, PYUSD, FDUSD, USDe, GHO, TUSD) returns 1:1 with no HTTP. Non-stable assets (ETH, SOL, MATIC, WBTC, LINK, AAVE, UNI, ARB, OP, AVAX, BNB, BTC) hit Coingecko's free tier with a 60s in-memory cache.
import { lookupUsdCents } from '@glideco/price-feed';
const result = await lookupUsdCents({
asset: 'ETH',
amountRaw: 1_000_000_000_000_000_000n, // 1 ETH in wei
decimals: 18,
});
if (result.ok) {
console.log(`USD cents: ${result.usdCents}`);
} else {
// 'unsupported' | 'feed_unavailable'
console.warn('Pending USD valuation', result.reason);
}Bigint-safe conversion
Raw → USD-cents conversion uses BigInt arithmetic to avoid IEEE-754 precision loss above 2^53 (1 ETH = 1e18 wei sits exactly on the safe boundary). The conversion is:
cents = round(amountRaw * usdPerToken * 100 / 10^decimals)with usdPerToken scaled to 6-decimal integer precision before the BigInt math.
Vercel cold-start caveat
The cache is process-local. On Vercel serverless, every invocation may land on a cold function instance with an empty cache. Steady-state warm containers get reasonable hits; burst load right after a cold start hammers Coingecko. Mitigation: stablecoins (the dominant send asset) shortcut the fetch entirely, so the worst-case behavior on Coingecko 429 is correct-but-pending audit rows, not silent $0.00.
For high-traffic deployments, swap the in-memory Map for an Upstash Redis-backed
cache (planned: cacheGetSet).
License
MIT
