UNPKG

@iexec/dataprotector

Version:

This product enables users to confidentially store data–such as mail address, documents, personal information ...

54 lines 2.06 kB
import { WorkflowError } from '../../utils/errors.js'; import { taskIdSchema, throwIfMissing, validateOnStatusUpdateCallback, } from '../../utils/validators.js'; export const waitForTaskCompletion = async ({ iexec = throwIfMissing(), dealId, taskId, onStatusUpdate = () => { }, }) => { const vTaskId = taskIdSchema() .required() .label('taskId') .validateSync(taskId); const vDealId = taskIdSchema() .required() .label('dealId') .validateSync(dealId); const vOnStatusUpdate = validateOnStatusUpdateCallback(onStatusUpdate); try { const taskObservable = await iexec.task.obsTask(vTaskId, { dealid: vDealId, }); let status; let success; await new Promise((resolve, reject) => { taskObservable.subscribe({ next: (data) => { const isDone = data?.task?.statusName === 'COMPLETED' || data?.task?.statusName === 'FAILED' || data?.task?.statusName === 'TIMEOUT'; if (isDone) { status = data?.task?.statusName; success = data?.task?.statusName === 'COMPLETED'; } vOnStatusUpdate({ title: 'TASK_UPDATED', isDone, payload: { taskId: vTaskId, status: data?.task?.statusName, }, }); }, error: (e) => { reject(e); }, complete: () => resolve(undefined), }); }); return { status, success }; } catch (error) { console.error('Error in waitForTaskCompletion:', error); throw new WorkflowError({ message: 'Failed to wait for task completion', errorCause: error, }); } }; //# sourceMappingURL=waitForTaskCompletion.js.map