const getBasePath = () => { return document.location.origin + document.location.pathname; }; const generateDetails = async () => { const details = await fetch(`${getBasePath()}/details`); return await details.json(); }; const createTask = async (prompt) => { const taskResponse = await fetch(`${getBasePath()}task/create?prompt=${prompt}`); const task = await taskResponse.json(); return task; }; const queueTask = async (task_id) => { const queueResponse = await fetch(`${getBasePath()}task/queue?task_id=${task_id}`); return queueResponse.json(); }; const pollTask = async (task) => { const taskResponse = await fetch(`${getBasePath()}task/poll?task_id=${task.task_id}`); return await taskResponse.json(); }; const longPollTask = async (task, interval = 10_000, max) => { const etaDisplay = document.querySelector('.eta'); task = await pollTask(task); if (task.status === 'completed' || (max && task.poll_count > max)) { return task; } if (task.status === 'failed') { return task; } etaDisplay.textContent = Math.round(task.eta); await new Promise((resolve) => setTimeout(resolve, interval)); return await longPollTask(task, interval, max); }; export { generateDetails, createTask, queueTask, longPollTask };