systemquery/src/static/js/SystemQueryClient.mjs

47 lines
994 B
JavaScript

"use strict";
import { once } from './misc/events.mjs';
class SystemQueryClient {
constructor() {
}
async status() {
return this.fetch_json(`/api/status`);
}
async *table(table_name) {
const abort = new AbortController();
const source = new EventSource(`/api/table/${table_name}`);
source.addEventListener(`end`, () => {
source.close();
abort.abort();
}, { once: true });
let count = 0;
while(source.readyState !== EventSource.CLOSED) {
let item = await once(source, "table", abort.signal);
if(item.type === "abort") break;
yield JSON.parse(item.data);
count++;
}
console.log(`FETCH TABLE ${table_name}: ${count} items returned`);
}
async fetch_json(path) {
let response = await fetch(path, {
headers: {
"accept": "application/json"
},
credentials: "same-origin"
});
console.log(`FETCH ${path} ${response.status} ${response.statusText}`);
return await response.json();
}
}
export default SystemQueryClient;