UNPKG

@renegade-fi/core

Version:
40 lines (33 loc) 1.15 kB
import axios from 'axios' import { getTaskStatus } from './getTaskStatus.js' import type { Config } from '../createConfig.js' import type { OldTask as Task } from '../types/wallet.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)) } }