import { BaseElementViewModel, FlowNodeInstance, Model } from '@5minds/processcube_engine_sdk';
import { CreateFlowNodeInstanceRequest, DataObjectValueCollection } from '../../../Contracts';
import { FlowNodeInstanceDatabaseAdapter } from '../../../Tools/DatabaseAdaptersSequelize/FlowNodeInstanceAdapter';
import { Subscription } from '../../../Tools/EventAggregator';
import { ProcessInstance } from '../../ProcessInstance';
import { FlowNodeHandlerFactory } from '../FlowNodeHandlerFactory';
/**
 * This is the base handler for all Activities and Tasks.
 */
export declare class ActivityHandler<TActivity extends Model.Activities.Activity> {
    private readonly flowNodeInstanceDatabaseAdapter;
    private readonly flowNodeHandlerFactory;
    private attachedBoundaryEventHandlers;
    private readonly processInstance;
    private readonly _flowNode;
    private _previousFlowNodeInstanceId;
    private _multiInstanceMetadataId;
    private startToken;
    private endToken;
    protected batchPersistOnEnterRequests: CreateFlowNodeInstanceRequest<Record<string, any>>[];
    protected batchPersistOnEnterResolves: Function[];
    private processEventSubscriptions;
    private allBoundaryEventExecutionPromises;
    private errorBoundaryEventExecutionPromises;
    private activityExecutionStrategy;
    private logger;
    private loggingMetaData;
    private loggerNamespace;
    private abortController;
    private waitForResumption;
    constructor(flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, flowNodeHandlerFactory: FlowNodeHandlerFactory, processInstance: ProcessInstance, flowNode: TActivity);
    get viewModel(): BaseElementViewModel;
    get flowNode(): TActivity;
    get multiInstanceMetadataId(): string;
    get previousFlowNodeInstanceId(): string;
    private get flowNodeInstanceId();
    get abortSignal(): AbortSignal;
    getInstanceId(): string;
    abort(): Promise<void>;
    cancel(): Promise<void>;
    execute(previousFlowNodeInstanceId?: string, previousResult?: any, executionCanceledCallback?: Function): Promise<void>;
    resume(flowNodeInstancesForHandler: FlowNodeInstance | Array<FlowNodeInstance>, allFlowNodeInstances: Array<FlowNodeInstance>, resumptionCanceledCallback?: Function): Promise<void>;
    isMultiInstanceType(): boolean;
    batchPersistOnEnterRequest(request: CreateFlowNodeInstanceRequest<Record<string, any>>, limit: number, resolve: Function): Promise<void>;
    runOutgoingDataObjectExpressions(token: Record<string, any> | Array<any>): Promise<DataObjectValueCollection>;
    private beforeExecution;
    private runExecution;
    private afterExecution;
    private beforeResuming;
    private loadMultiInstanceDataFromResumableFlowNodeInstances;
    private runResuming;
    private getNextFlowNode;
    private subscribeToProcessInstanceEvents;
    private subscribeToProcessKilledEvent;
    private subscribeToProcessError;
    protected subscribeToTerminateEndEventReached(): Subscription;
    private disposeEventSubscriptions;
    private handleSubsequentError;
    private handleBeforeExecutionError;
    private handleExecutionError;
    private handleAfterExecutionError;
    private runErrorBoundaryEventsForError;
    private isAbortedOrTerminatedError;
    private saveMultiInstanceData;
    private persistDataObjectValues;
    private handleNextFlowNode;
    private findNextFlowNodeInstance;
    private parseDataObjectExpression;
    private runPreScript;
    runPostScript(token: Record<string, any> | Array<Record<string, any>>): Promise<Record<string, any> | Array<Record<string, any>>>;
    private executeByStrategy;
    private attachBoundaryEvents;
    private createAndRunBoundaryEventHandler;
    /**
     * Used for interactive tasks, to prevent interrupting a task, which has already produced a result and is effectively finished.
     * ErrorBoundaryEvents must be kept alive, until "persistOnExit" has completed, so that errors in post scripts, or data associations can be handled.
     * All other Boundary Event Types must be canceled before that. See also https://github.com/atlas-engine/Engine/issues/1223
     */
    private detachNonErrorBoundaryEvents;
    private detachAllBoundaryEvents;
    private cancelExecution;
    private throwMultipleSubsequentFlowNodesError;
    private ensureIsNotMultiInstanceAtEventBasedGateway;
    private ensureMultiInstanceInputIsValid;
    private getActivityExecutionStrategy;
    private parseAdditionalActivityProperties;
    private parseTimeoutBetweenLoopIterations;
    private parseMaxLoopIterations;
    private parseNumberValueFromExpression;
}
