import { ProcessModel, ProcessModelList, ProcessStartRequest, ProcessStartResponse } from '@5minds/processcube_engine_sdk';
import { InternalIdentity as Identity } from '../../Contracts/index';
import { CoreAccessService, ExecuteProcessService } from '../../Core/index';
import { ProxyConfiguration } from '../../Setups/EngineRouter';
import { ProcessInstanceDatabaseAdapter } from '../../Tools/DatabaseAdaptersSequelize/index';
import { IamService, IdentityService } from '../../Tools/Iam/index';
import { ProcessDefinitionMediator } from '../../Tools/ProcessDefinitionMediator';
import { NotificationService } from './NotificationService';
export declare class ProcessModelApiService {
    private readonly coreAccess;
    private readonly executeProcessService;
    private readonly iamService;
    private readonly logger;
    private readonly notificationService;
    private readonly processDefinitionMediator;
    private readonly processInstanceDatabaseAdapter;
    private readonly identityService;
    private internalIdentity;
    private readonly config;
    constructor(coreAccess: CoreAccessService, executeProcessService: ExecuteProcessService, iamService: IamService, notificationService: NotificationService, processDefinitionMediator: ProcessDefinitionMediator, processInstanceDatabaseAdapter: ProcessInstanceDatabaseAdapter, identityService: IdentityService);
    initialize(): void;
    getAll(identity: Identity, includeCount?: boolean, offset?: number, limit?: number): Promise<ProcessModelList>;
    getById(identity: Identity, processModelId: string): Promise<ProcessModel>;
    start<TPayload extends object>(identity: Identity, request: ProcessStartRequest<TPayload>): Promise<ProcessStartResponse>;
    setIsExecutableFlagForProcessModel(identity: Identity, processModelId: string, isExecutable: boolean): Promise<void>;
    deleteDefinitionByProcessModelId(identity: Identity, processModelId: string, deleteAllRelatedData: boolean, force: boolean): Promise<void>;
    private stopRunningProcessInstancesForProcessDefinition;
    private validateProcessStartRequest;
    private startProcessInstance;
    private startProcessInstanceAndAwaitEndEvent;
    private ensureProcessDefinitionIsNotInUse;
    private terminateProcessInstance;
    private ensureHasClaim;
}
export interface ProcessModelApiServiceProxy {
    getAll(identity: Identity, includeCount?: boolean, offset?: number, limit?: number): Promise<ProcessModelList>;
    getById(identity: Identity, processModelId: string): Promise<ProcessModel>;
    start<TPayload extends object>(identity: Identity, request: ProcessStartRequest<TPayload>): Promise<ProcessStartResponse>;
    setIsExecutableFlagForProcessModel(identity: Identity, processModelId: string, isExecutable: boolean): Promise<void>;
    deleteDefinitionByProcessModelId(identity: Identity, processModelId: string, deleteAllRelatedData: boolean, force: boolean): Promise<void>;
}
export declare const ProcessModelApiServiceProxyConfiguration: ProxyConfiguration;
