import { ActionDefinition, Automata, StateDefinition, TransitionMethod } from "../core";
import { Task, TaskComplete, TaskState } from "./common";
export declare class TaskAutomata<TResult, TInput = void, TError extends Error = Error, TState extends TaskState<TResult, TError> = TaskState<TResult, TError>> extends Automata<TState> {
    readonly Name: string;
    private Process;
    private OnSuccess?;
    private OnFailure?;
    Idle: StateDefinition<TState>;
    Processing: StateDefinition<TState, TInput>;
    Completed: StateDefinition<TState, TResult>;
    Failure: StateDefinition<TState, TError>;
    Start: ActionDefinition<TInput>;
    Restart: ActionDefinition<TInput>;
    Cancel: ActionDefinition;
    End: ActionDefinition<TResult>;
    Fail: ActionDefinition<TError>;
    BeginProcessing: TransitionMethod<TState, TInput>;
    constructor(Name: string, Process: Task<TResult, TInput>, OnSuccess?: TaskComplete<TResult, TInput> | undefined, OnFailure?: TaskComplete<TError, TInput> | undefined);
    setupProcessIn(state: StateDefinition<TState>): void;
    protected getDefaultState(): TState;
}
