2021-11-11 23:37:42 +01:00
|
|
|
// import { useSWR } from "sswr";
|
2024-01-22 13:12:21 +01:00
|
|
|
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';
|
2024-01-27 14:54:47 +01:00
|
|
|
import type { ApiFetchOptions } from '@upnd/upend/api';
|
2024-01-22 13:12:21 +01:00
|
|
|
|
|
|
|
const dbg = debug('kestrel:lib');
|
2021-11-11 23:37:42 +01:00
|
|
|
|
2021-12-19 13:54:16 +01:00
|
|
|
export function useEntity(address: string) {
|
2024-01-22 13:12:21 +01:00
|
|
|
const { data, error, revalidate } = useSWR<EntityListing, unknown>(
|
|
|
|
`${api.apiUrl}/obj/${address}`
|
|
|
|
);
|
|
|
|
|
|
|
|
const entity: Readable<UpObject | undefined> = derived(data, ($listing) => {
|
|
|
|
if ($listing) {
|
|
|
|
const listing = new UpListing($listing.entries);
|
|
|
|
return listing.getObject(address);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const entityInfo: Readable<EntityInfo | undefined> = derived(data, ($listing) => {
|
|
|
|
if ($listing) {
|
|
|
|
return $listing.entity;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
|
|
entity,
|
|
|
|
entityInfo,
|
|
|
|
error,
|
|
|
|
revalidate
|
|
|
|
};
|
2021-11-11 23:37:42 +01:00
|
|
|
}
|
|
|
|
|
2024-01-27 14:54:47 +01:00
|
|
|
export function query(query: string, options?: ApiFetchOptions) {
|
2024-01-22 13:12:21 +01:00
|
|
|
dbg(`Querying: ${query}`);
|
2024-01-27 14:54:47 +01:00
|
|
|
|
|
|
|
const controller = options?.abortController || new AbortController();
|
|
|
|
const timeout = options?.timeout || api.timeout;
|
|
|
|
if (timeout > 0) {
|
|
|
|
setTimeout(() => controller.abort(), timeout);
|
|
|
|
}
|
|
|
|
const signal = controller.signal;
|
|
|
|
|
2024-01-22 13:12:21 +01:00
|
|
|
const { data, error, revalidate } = useSWR<ListingResult, unknown>(`${api.apiUrl}/query`, {
|
|
|
|
method: 'POST',
|
2024-01-27 14:54:47 +01:00
|
|
|
body: query,
|
|
|
|
signal
|
2024-01-22 13:12:21 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
const result = derived(data, ($values) => {
|
|
|
|
return $values ? new UpListing($values) : undefined;
|
|
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
|
|
result,
|
|
|
|
error,
|
|
|
|
revalidate
|
|
|
|
};
|
2021-11-11 23:37:42 +01:00
|
|
|
}
|