@renegade-fi/core
Version:
VanillaJS library for Renegade
39 lines (33 loc) • 1.28 kB
text/typescript
import axios from "axios";
import type { Config } from "../createConfig.js";
import type { OldTask as Task } from "../types/wallet.js";
import { getTaskStatus } from "./getTaskStatus.js";
export type WaitForTaskCompletionParameters = { id: string; timeout?: number };
export type WaitForTaskCompletionReturnType = Promise<undefined>;
export async function waitForTaskCompletion(
config: Config,
parameters: WaitForTaskCompletionParameters,
onStateChange?: (task: Task) => void,
): WaitForTaskCompletionReturnType {
const { pollingInterval } = config;
let lastState = "";
while (true) {
try {
const response = await getTaskStatus(config, { id: parameters.id });
const taskState = response.state;
onStateChange?.(response);
if (taskState !== lastState) {
lastState = taskState;
}
} catch (error) {
if (axios.isAxiosError(error)) {
if (error.response?.status === 404) {
// Assume a 404 means the task is completed
break;
}
}
}
// Sleep for a bit before polling again
await new Promise((resolve) => setTimeout(resolve, pollingInterval));
}
}