21 lines
1.2 KiB
TypeScript
21 lines
1.2 KiB
TypeScript
export const BASE = import.meta.env.DEV ? 'http://10.69.5.23' : ''
|
|
|
|
export type DataRow = Record<string, number | string | null>
|
|
|
|
const cache: any = {};
|
|
|
|
async function get<T>(path: string, params: Record<string, string> = {}): Promise<T> {
|
|
const url = new URL(`${BASE}${path}`, window.location.origin)
|
|
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v))
|
|
if(cache[url.toString()]) return cache[url.toString()];
|
|
cache[url.toString()] = await fetch(url.toString()).then(resp => resp.json()).finally(() => { delete cache[url.toString()]; });
|
|
return cache[url.toString()]
|
|
}
|
|
|
|
export const api = {
|
|
position: (fields?: string) => get<{latitude: number, longitude: number, altitude: number}>('/api/position', fields ? { fields } : {}),
|
|
current: (fields?: string) => get<DataRow>('/api/current', fields ? { fields } : {}),
|
|
hourly: (start?: string, end?: string, fields?: string) => get<DataRow[]>('/api/hourly', { ...(start ? { start } : {}), ...(end ? { end } : {}), ...(fields ? { fields } : {}) }),
|
|
daily: (start?: string, end?: string, fields?: string) => get<DataRow[]>('/api/daily', { ...(start ? { start } : {}), ...(end ? { end } : {}), ...(fields ? { fields } : {}) }),
|
|
}
|