import { Observable } from 'rxjs';
import { PersistentWorkflowBuilder } from './persistent-workflow-builder';
import { PersistentWorkflowLog } from './persistent-workflow-context';
import { PersistentWorkflowStore } from './persistent-workflow-store';
/**
 * The result data structure of start() and stateFromStore().
 */
export interface PersistentWorkflowResult<TResult> {
    /**
     * The instance ID.
     */
    instanceId: number;
    /**
     * The result object which is the last transitData defined at finalize() function.
     */
    result: TResult;
    /**
     * The record of logs.
     */
    logs: PersistentWorkflowLog[];
    /**
     * The error object produced from any of calls.
     */
    error?: any;
    /**
     * Clear the snapshot of the context.
     * Must call this function to stop tracking the workflow.
     */
    clear(): Observable<void>;
}
/**
 * The runner of workflow.
 */
export declare class PersistentWorkflowRunner {
    private persistentStore;
    private builder;
    /**
     * Workflow always starts from startingId which is "1".
     */
    static readonly startingId = 1;
    /**
     * The collection of workflows. It allows multiple instances of workflows to track.
     */
    private workflowCollection;
    /**
     * Initializes a new instance of the PersistentWorkflowRunner class.
     *
     * @param persistentStore The persistent store instance.
     * @param builder The builder of the workflow.
     */
    constructor(persistentStore: PersistentWorkflowStore, builder: PersistentWorkflowBuilder);
    /**
     * Start a new single workflow.
     *
     * @param transitData the transit data for initialization for the first workflow.
     */
    start<TResult>(transitData: any): Observable<PersistentWorkflowResult<TResult>>;
    /**
     * Start workflows from existing snapshots data from the store.
     */
    startFromStore<TResult>(): Observable<PersistentWorkflowResult<TResult>>;
    private process;
    private processResult;
    private processNext;
    private processStep;
    private checkpoint;
    private save;
}
