import { BaseError, FlowNodeInstance, Model } from '@5minds/processcube_engine_sdk';
import { FlowNodeInstanceTypeSpecificData } from '../../../Contracts';
import { FlowNodeInstanceDatabaseAdapter } from '../../../Tools/DatabaseAdaptersSequelize/index';
import { EventMiddlewareHandler } from '../../../Tools/EventMiddlewareHandler';
import { ProcessInstance } from '../../ProcessInstance';
import { FlowNodeHandlerFactory } from '../FlowNodeHandlerFactory';
import { GatewayHandler } from './GatewayHandler';
export declare class EventBasedGatewayHandler extends GatewayHandler<Model.Gateways.EventBasedGateway> {
    private triggered;
    private connectedCatchEvents;
    constructor(eventMiddlewareHandler: EventMiddlewareHandler, flowNodeHandlerFactory: FlowNodeHandlerFactory, flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, eventBasedGatewayModel: Model.Gateways.EventBasedGateway, processInstance: ProcessInstance);
    get hasBeenTriggered(): boolean;
    private get eventBasedGateway();
    private get iocKey();
    /**
     * Takes a Catch Event Handler Instance ID and cancels all OTHER connected catch event instances,
     * if the given Flow Node Instance ID is elligble for triggering the gateway.
     *
     * @param flowNodeInstanceId The Instance ID of the triggering Catch Event.
     * @returns True, if the gateway was triggered.
     */
    evaluateAndTriggerCatchEvent(flowNodeInstanceId: string): Promise<boolean>;
    protected beforeExecute(resolveFunction?: Function, rejectFunction?: Function, resumedFlowNodeInstances?: FlowNodeInstance[]): Promise<void>;
    protected afterExecute(): Promise<void>;
    protected persistOnExit(): Promise<void>;
    protected persistOnError<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(error: BaseError, typeData?: TFlowNodeData): Promise<void>;
    protected persistOnTerminate<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(typeData?: TFlowNodeData): Promise<void>;
    protected startExecution(): Promise<Array<Model.Base.FlowNode>>;
    protected executeHandler(): Promise<Array<Model.Base.FlowNode>>;
    protected resumeAfterExit(allFlowNodeInstances: Array<FlowNodeInstance>): Promise<Array<Model.Base.FlowNode>>;
    protected handleNextFlowNode(nextFlowNode: Model.Base.FlowNode, allFlowNodeInstancesToResume?: Array<FlowNodeInstance>): Promise<void>;
    private cleanup;
}
