import { Transaction } from 'sequelize';
import { EventInstance, FlowNodeInstance, FlowNodeInstanceList, FlowNodeInstanceSortSettings, Model } from '@5minds/processcube_engine_sdk';
import { CreateFlowNodeInstanceRequest, InternalFlowNodeInstanceQuery, PersistDataObjectData, PersistOnStateChangeAdditionalData } from '../../Contracts/InternalDataModels/index';
import { DatabaseAdapter } from './BaseDatabaseAdapter';
type FlowNodeWithLane = Model.Base.FlowNode & {
    lane: string | null;
};
export declare class FlowNodeInstanceDatabaseAdapter extends DatabaseAdapter {
    initialize(): Promise<void>;
    findByInstanceId(flowNodeInstanceId: string): Promise<FlowNodeInstance | undefined>;
    query(query: InternalFlowNodeInstanceQuery, offset?: number, limit?: number, sort?: FlowNodeInstanceSortSettings, includeDeleted?: boolean, includeCount?: boolean): Promise<FlowNodeInstanceList>;
    getFlowNodeExecutionCount(flowNodeId: string, processInstanceId: string): Promise<number>;
    getFlowNodeInstancesForProcessInstanceIds(processInstanceId: Array<string>): Promise<Array<{
        flowNodeId: string;
        flowNodeName: string;
        flowNodeLane: string | null;
    }>>;
    getActiveMessageCatchEventsInProcessModel(processModelId: string, messageName: string): Promise<Array<EventInstance>>;
    cleanupOrphanedFlowNodeInstances(): Promise<void>;
    persistOnEnter<TTokenPayload>(payload: CreateFlowNodeInstanceRequest<TTokenPayload>): Promise<void>;
    batchPersistOnEnter<TTokenPayload>(payloads: Array<CreateFlowNodeInstanceRequest<TTokenPayload>>): Promise<void>;
    persistOnSuspend(flowNodeInstanceId: string, data: PersistOnStateChangeAdditionalData): Promise<void>;
    persistOnExit(flowNodeInstanceId: string, data: PersistOnStateChangeAdditionalData): Promise<void>;
    persistOnCancel(flowNodeInstanceId: string, data: PersistOnStateChangeAdditionalData): Promise<void>;
    persistOnError(flowNodeInstanceId: string, data: PersistOnStateChangeAdditionalData): Promise<void>;
    persistOnTerminate(flowNodeInstanceId: string, data: PersistOnStateChangeAdditionalData): Promise<void>;
    updateStartToken(flowNodeInstanceIds: Array<string>, tokenPayload: any): Promise<void>;
    deleteByProcessDefinitionId(processDefinitionId: string): Promise<void>;
    /**
     * This is dangerous, because it can potentially break a process instance.
     * Deletion should usually be done in the context of deleting or resetting a Process Instance, or when undeploying a diagram.
     * Use for tests or cleanup procedures only.
     */
    UNSAFE_deleteById(flowNodeInstanceId: string): Promise<void>;
    saveMultiInstanceMetadata(multiInstanceMetadataId: string, startToken?: any, endToken?: any): Promise<void>;
    loadFlowNodeInstancesForMultiInstance(multiInstanceMetadataId: string): Promise<Array<FlowNodeInstance>>;
    updateFlowNodesInProcessInstance(processInstanceIds: Array<string>, flowNodes: Array<FlowNodeWithLane>): Promise<void>;
    static reset(flowNodeInstanceId: string, transaction: Transaction, isUnstartedSubProcess?: boolean): Promise<void>;
    private static execReset;
    static deleteByProcessDefinitionId(processDefinitionId: string, deleteTransaction: Transaction): Promise<void>;
    static deleteByProcessInstanceIds(processInstanceIds: Array<string>, deleteTransaction: Transaction): Promise<void>;
    static deleteByIds(flowNodeInstanceIds: Array<string>, deleteTransaction: Transaction): Promise<void>;
    changeProcessTokenPayload(flowNodeInstanceId: string, processTokenType: 'startToken' | 'endToken', payload: any): Promise<void>;
    private determineRequiredJoinsOnMetadataTables;
    private getFlowNodeTypesRequiringMetadata;
    private execPersistOnEnter;
    private execBatchPersistOnEnter;
    private persistOnStateChange;
    saveDataObjectInstances(data: PersistDataObjectData): Promise<void>;
    private ensureStateTransitionIsValid;
    private saveFlowNodeInstanceTypeSpecificData;
    private saveBatchFlowNodeInstanceTypeSpecificData;
    private saveCallActivityData;
    private saveBatchCallActivityData;
    private saveSubprocessData;
    private saveBatchSubprocessData;
    private saveCatchEventData;
    private saveBatchCatchEventData;
    private saveThrowEventData;
    private saveBatchThrowEventData;
    private saveManualTaskData;
    private saveBatchManualTaskData;
    private saveExternalServiceTaskData;
    private saveBatchExternalServiceTaskData;
    private saveHttpServiceTaskData;
    private saveBatchHttpServiceTaskData;
    private saveUserTaskData;
    private saveBatchUserTaskData;
    private static deleteFlowNodeInstancesInBatches;
}
export {};
