import { FlowNodeInstanceList, FlowNodeInstanceSortSettings, GenericFlowNodeInstanceQuery, UserTaskResult } from '@5minds/processcube_engine_sdk';
import { InternalIdentity as Identity } from '../../Contracts/InternalDataModels/index';
import { CoreAccessService } from '../../Core/index';
import { ProxyConfiguration } from '../../Setups/EngineRouter';
import { FlowNodeInstanceDatabaseAdapter, UserTaskInstanceDatabaseAdapter } from '../../Tools/DatabaseAdaptersSequelize/index';
import { IamService, IdentityService } from '../../Tools/Iam/index';
export declare class FlowNodeInstanceService {
    private readonly coreAccess;
    private readonly iamService;
    private readonly identityService;
    private readonly flowNodeInstanceAdapter;
    private readonly logger;
    private readonly userTaskAdapter;
    private readonly config;
    constructor(coreAccess: CoreAccessService, iamService: IamService, identityService: IdentityService, flowNodeInstanceAdapter: FlowNodeInstanceDatabaseAdapter, userTaskAdapter: UserTaskInstanceDatabaseAdapter);
    query(identity: Identity, query: GenericFlowNodeInstanceQuery, offset?: number, limit?: number, sortSettings?: FlowNodeInstanceSortSettings, includeCount?: boolean): Promise<FlowNodeInstanceList>;
    finishUntypedTask(identity: Identity, taskInstanceId: string): Promise<void>;
    finishManualTask(identity: Identity, manualTaskInstanceId: string): Promise<void>;
    finishUserTask(identity: Identity, userTaskInstanceId: string, userTaskResult?: UserTaskResult): Promise<void>;
    triggerMessageEvent(identity: Identity, messageName: string, options?: {
        customCorrelationId?: string;
        processInstanceId?: string;
        payload?: any;
        messageChannel?: string;
    }): Promise<void>;
    triggerSignalEvent(identity: Identity, signalName: string, options?: {
        customCorrelationId?: string;
        processInstanceId?: string;
        payload?: any;
        signalChannel?: string;
    }): Promise<void>;
    triggerTimerEvent(identity: Identity, flowNodeInstanceId: string): Promise<void>;
    reserveUserTaskInstance(identity: Identity, flowNodeInstanceId: string, actualOwnerId: string): Promise<void>;
    cancelUserTaskInstanceReservation(identity: Identity, flowNodeInstanceId: string): Promise<void>;
    private enhanceAndExecuteQuery;
    private loadSuspendedUserTaskInstance;
    private ensureUserCanAccessUserTask;
    private sendUserTaskReservedNotification;
    private sendUserTaskReservationCanceledNotification;
    private checkIfTaskIsAssignedToOtherUsers;
    private checkIfTaskIsReservedForAnotherUser;
    private ensureHasClaim;
    private validateUserTaskResults;
}
export interface FlowNodeInstanceServiceProxy {
    query(identity: Identity, query: GenericFlowNodeInstanceQuery, offset?: number, limit?: number, sortSettings?: FlowNodeInstanceSortSettings, includeCount?: boolean): Promise<FlowNodeInstanceList>;
    finishUntypedTask(identity: Identity, taskInstanceId: string): Promise<void>;
    finishManualTask(identity: Identity, manualTaskInstanceId: string): Promise<void>;
    finishUserTask(identity: Identity, userTaskInstanceId: string, userTaskResult?: UserTaskResult): Promise<void>;
    triggerMessageEvent(identity: Identity, messageName: string, options?: {
        customCorrelationId?: string;
        processInstanceId?: string;
        payload?: any;
        messageChannel?: string;
    }): Promise<void>;
    triggerSignalEvent(identity: Identity, signalName: string, options?: {
        customCorrelationId?: string;
        processInstanceId?: string;
        payload?: any;
        signalChannel?: string;
    }): Promise<void>;
    triggerTimerEvent(identity: Identity, flowNodeInstanceId: string): Promise<void>;
    reserveUserTaskInstance(identity: Identity, flowNodeInstanceId: string, actualOwnerId: string): Promise<void>;
    cancelUserTaskInstanceReservation(identity: Identity, flowNodeInstanceId: string): Promise<void>;
}
export declare const FlowNodeInstanceServiceProxyConfiguration: ProxyConfiguration;
