// retoor <retoor@molodetz.nl>
import { Http } from "./Http.js";
export class JobPoller {
static run(statusUrl, options = {}) {
const intervalMs = options.intervalMs || 1500;
const maxAttempts = options.maxAttempts || 200;
return new Promise((resolve) => {
let attempts = 0;
const timer = window.setInterval(async () => {
attempts += 1;
if (attempts > maxAttempts) {
window.clearInterval(timer);
if (options.onTimeout) options.onTimeout();
resolve(null);
return;
}
let status;
try {
status = await Http.getJson(statusUrl);
} catch (error) {
return;
}
if (status.status === "done") {
window.clearInterval(timer);
if (options.onDone) options.onDone(status);
resolve(status);
} else if (status.status === "failed") {
window.clearInterval(timer);
if (options.onFailed) options.onFailed(status);
resolve(status);
}
}, intervalMs);
});
}
}