import { BpmnType, EventType, FlowNodeInstanceState, Identity } from '@5minds/processcube_engine_sdk';
import { MessageEventReachedMessageInternal } from '../Contracts/index';
import { FlowNodeInstanceDatabaseAdapter, IdentityService, ProcessDefinitionMediator, ProcessInstanceDatabaseAdapter } from '../Tools';
import { ExecuteProcessService } from './ExecuteProcessService';
import { ProcessTokenService } from './ProcessTokenService';
export type MessagePayload = {
    correlationId?: string;
    processDefinitionId?: string;
    processModelId?: string;
    embeddedProcessModelId?: string;
    processModelName?: string;
    processInstanceId?: string;
    parentProcessInstanceId?: string;
    flowNodeId?: string;
    flowNodeName?: string;
    flowNodeType?: BpmnType;
    flowNodeInstanceId?: string;
    previousFlowNodeInstanceId?: string;
    processInstanceOwner?: Identity;
    currentToken?: any;
    eventType?: EventType;
    eventName?: string;
    eventId?: string;
    identity?: Identity;
    triggerValue?: string;
    targetProcessInstanceId?: string;
    customCorrelationId?: string;
    flowNodeInstanceState?: FlowNodeInstanceState;
    messageReference: string;
    messageChannel?: string;
};
export type TriggerMessageArgs = {
    messageReference: string;
    identity: Identity;
    flowNodeInstanceId?: string;
    customCorrelationId?: string;
    sourceCorrelationId?: string;
    token?: any;
    triggerValue?: string;
    messageChannel?: string;
};
export declare class MessageEventService {
    private readonly executeProcessService;
    private readonly flowNodeInstanceAdapter;
    private readonly processDefinitionMediator;
    private readonly processInstanceAdapter;
    private readonly processTokenService;
    private readonly logger;
    private subscriptions;
    private internalSubscriptions;
    private deployedMessageCatchEvents;
    private internalIdentity;
    constructor(executeProcessService: ExecuteProcessService, processDefinitionMediator: ProcessDefinitionMediator, processTokenService: ProcessTokenService, identityService: IdentityService, flowNodeInstanceAdapter: FlowNodeInstanceDatabaseAdapter, processInstanceAdapter: ProcessInstanceDatabaseAdapter);
    init(): Promise<void>;
    dispose(): void;
    throwMessage(data: MessagePayload, awaitAcknowledgement?: boolean): Promise<void>;
    throwStartMessage(data: MessagePayload, awaitAcknowledgement?: boolean): Promise<void>;
    onMessage(messageReference: string, callback: (message: MessageEventReachedMessageInternal) => void | Promise<void>, subscribeOnce?: boolean, processInstanceId?: string, triggerValue?: string, messageChannel?: string): string;
    unsubscribe(subscriptionId: string): void;
    acknowledge(eventId: string): void;
    private startProcessesWithMessageStartEvent;
    private getEventsToStart;
    private filterProcessesWithWaitingCatchEvents;
    private filterAlreadyStartedProcessInstances;
    private parseEventPayloadTriggerValue;
    private refreshCatchEventDefinitions;
    private getMessageCatchEventDefinitions;
    private computeTriggerValuesForMessageReference;
    private parseTriggerValueExpressions;
    private getCachedEvents;
    private distinctTriggerValues;
}
