import zod from "zod"; import type { GenericRecord } from "@webiny/api/types"; import type { ITask } from "../../../features/task/TaskService/index.js"; import { TaskController } from "../../../features/task/TaskController/index.js"; export type ITaskInput = GenericRecord; export interface IResponseError { message: string; code?: string | null; data?: GenericRecord | null; stack?: string; } export interface ITaskOutput { error?: IResponseError; [key: string]: any; } /** * Task run params - ONLY the input data * All runtime dependencies come from TaskController (injected separately) */ export interface ITaskRunParams { input: I; controller: TaskController.Interface; } /** * Data for creating a new task */ export interface ITaskCreateData { definitionId: string; name: string; input: I; parentId?: string; } /** * Parameters for onBeforeTrigger lifecycle hook */ export interface ITaskBeforeTriggerParams { data: ITaskCreateData; } /** * Task result status enum */ export declare enum TaskResultStatus { DONE = "done", CONTINUE = "continue", ERROR = "error", ABORTED = "aborted" } /** * Specific result types */ export interface ITaskResultDone { status: TaskResultStatus.DONE; message?: string; output?: O; } export interface ITaskResultContinue { status: TaskResultStatus.CONTINUE; input: I; wait?: number; } export interface ITaskResultError { status: TaskResultStatus.ERROR; error: IResponseError; } export interface ITaskResultAborted { status: TaskResultStatus.ABORTED; } export type ITaskResult = ITaskResultDone | ITaskResultContinue | ITaskResultError | ITaskResultAborted; export type ISelfCleanupEvent = "onSuccess" | "onError" | "onAbort"; export type ISelfCleanup = "always" | "never" | ISelfCleanupEvent | ISelfCleanupEvent[]; export type ITaskLifecycleHook = { task: ITask; }; /** * Core TaskDefinition - minimal interface */ export interface ITaskDefinition { id: string; title: string; description?: string; maxIterations?: number; databaseLogs?: boolean; isPrivate?: boolean; selfCleanup?: ISelfCleanup; /** * Core run method - receives ONLY input params * All runtime dependencies (logging, state management, etc.) come from TaskController */ run(params: ITaskRunParams): Promise>; /** * Optional lifecycle hooks - receive task data, no context. */ onBeforeTrigger?(params: ITaskBeforeTriggerParams): Promise; onDone?(params: ITaskLifecycleHook): Promise; onError?(params: ITaskLifecycleHook): Promise; onAbort?(params: ITaskLifecycleHook): Promise; onMaxIterations?(params: ITaskLifecycleHook): Promise; /** * Create a validation schema for the task input. * This will be used to validate the input before the task is triggered. */ createInputValidation?(params: ITaskCreateInputValidationParams): GenericRecord | zod.Schema; } export interface ITaskCreateInputValidationParams { validator: typeof zod; } /** Define a long-running background task with lifecycle hooks. */ export declare const TaskDefinition: import("@webiny/di").Abstraction>; /** * IRunnableTaskDefinition represents a TaskDefinition after decoration/processing. * All optional runtime properties are guaranteed to have values (with defaults applied). * Used internally by the task runner to ensure consistent behavior. */ export interface IRunnableTaskDefinition extends ITaskDefinition { isPrivate: boolean; databaseLogs: boolean; maxIterations: number; } export declare namespace TaskDefinition { type Interface = ITaskDefinition; type TaskInput = ITaskInput; type TaskOutput = ITaskOutput; type Runnable = IRunnableTaskDefinition; type RunParams = ITaskRunParams; type Result = ITaskResult; type Task = ITask; type ResultDone = ITaskResultDone; type ResultContinue = ITaskResultContinue; type ResultError = ITaskResultError; type ResultAborted = ITaskResultAborted; type CreateInputValidationParams = ITaskCreateInputValidationParams; type TaskCreateData = ITaskCreateData; type BeforeTriggerParams = ITaskBeforeTriggerParams; type LifecycleHookParams = ITaskLifecycleHook; type SelfCleanupEvent = ISelfCleanupEvent; type SelfCleanup = ISelfCleanup; }