@iexec/dataprotector
Version:
This product enables users to confidentially store data–such as mail address, documents, personal information ...
54 lines • 2.06 kB
JavaScript
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