Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/lib/api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
export async function api<T>(path: string, init?: RequestInit) {
const res = await fetch(`/api${path}`, { ...init })
if (!res.ok) {
const text = await res.text().catch(() => '')
throw new Error(`API ${res.status}: ${text}`)
}
return (await res.json()) as T
}

export type MarketItem = {
id: string
symbol: string
name: string
image: string
current_price: number
market_cap: number
price_change_percentage_24h: number
price_change_percentage_7d_in_currency?: number
}

export function getMarkets(vs = 'usd', page = 1, perPage = 100) {
return api<MarketItem[]>(`/markets?vs=${vs}&page=${page}&per_page=${perPage}`)
}

export type Kline = [number, string, string, string, string, string, number, string, number, string, string, string]

export function getBinanceKlines(symbol = 'BTCUSDT', interval = '1m', limit = 500) {
const sp = new URLSearchParams({ symbol, interval, limit: String(limit) })
return api<Kline[]>(`/binance/klines?${sp.toString()}`)
}