import { BaseError, FlowNodeInstance, Model } from '@5minds/processcube_engine_sdk';
import { FlowNodeInstanceDatabaseAdapter } from '../../../../Tools/DatabaseAdaptersSequelize/FlowNodeInstanceAdapter';
import { ProcessInstance } from '../../../ProcessInstance';
import { ActivityHandler } from '../ActivityHandler';
import { ActivityInstanceHandler } from '../ActivityInstanceHandler';
export declare abstract class ActivityExecutionStrategy<TActivity extends Model.Activities.Activity> {
    protected readonly flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter;
    protected readonly activityHandler: ActivityHandler<TActivity>;
    protected readonly processInstance: ProcessInstance;
    protected readonly activityInstanceHandlers: Array<ActivityInstanceHandler<TActivity>>;
    protected _timeoutBetweenLoopIterations?: number;
    protected _maxLoopIterations?: number;
    constructor(flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, activityHander: ActivityHandler<TActivity>, processInstance: ProcessInstance);
    set timeoutBetweenLoopIterations(timeout: number);
    set maxLoopIterations(timeout: number);
    get flowNodeInstanceId(): string;
    private get activeFlowNodeInstances();
    abstract execute(startToken: Record<string, any> | Array<any>, executionCanceledCallback?: Function): Promise<Record<string, any> | Array<any>>;
    abstract resume(flowNodeInstancesToResume: Array<FlowNodeInstance>, startToken: Record<string, any> | Array<any>, resumptionCanceledCallback?: Function): Promise<Record<string, any> | Array<any>>;
    endWithTermination(): Promise<void>;
    endWithError(error: BaseError, force?: boolean): Promise<void>;
    endWithPreError(error: BaseError, force?: boolean): Promise<void>;
    endWithPostError(error: BaseError, force?: boolean): Promise<void>;
    terminate(): Promise<void>;
    cancel(): Promise<void>;
    protected createNewActivityInstanceHandler(previousFlowNodeInstanceId?: string, instanceContext?: {
        [key: string]: any;
    }): ActivityInstanceHandler<TActivity>;
    protected runOnAllFlowNodeInstances(executor: (fni: ActivityInstanceHandler<TActivity>) => Promise<void>): Promise<void>;
    protected runOnActiveFlowNodeInstances(executor: (fni: ActivityInstanceHandler<TActivity>) => Promise<void>): Promise<void>;
    protected runOnLastFlowNodeInstance(executor: (fni: ActivityInstanceHandler<TActivity>) => Promise<void>): Promise<void>;
}
