// import { useSWR } from "sswr"; import { derived, type Readable } from 'svelte/store'; import { UpListing, UpObject } from '@upnd/upend'; import type { EntityInfo, EntityListing, ListingResult } from '@upnd/upend/types'; import { useSWR } from '$lib/util/fetch'; import api from './api'; import debug from 'debug'; import type { ApiFetchOptions } from '@upnd/upend/api'; const dbg = debug('kestrel:lib'); export function useEntity(address: string) { const { data, error, revalidate } = useSWR( `${api.apiUrl}/obj/${address}` ); const entity: Readable = derived(data, ($listing) => { if ($listing) { const listing = new UpListing($listing.entries); return listing.getObject(address); } }); const entityInfo: Readable = derived(data, ($listing) => { if ($listing) { return $listing.entity; } }); return { entity, entityInfo, error, revalidate }; } export function query(query: string, options?: ApiFetchOptions) { dbg(`Querying: ${query}`); const controller = options?.abortController || new AbortController(); const timeout = options?.timeout || api.timeout; if (timeout > 0) { setTimeout(() => controller.abort(), timeout); } const signal = controller.signal; const { data, error, revalidate } = useSWR(`${api.apiUrl}/query`, { method: 'POST', body: query, signal }); const result = derived(data, ($values) => { return $values ? new UpListing($values) : undefined; }); return { result, error, revalidate }; }