import { WorkflowData, WorkflowDataConstructor } from '../workflow-data';
import { WorkflowConstructor } from '../workflow';
import { WorkflowHandlerFn } from './workflow-handler-fn';
import { Message } from '@node-ts/bus-messages';
import { HandlerRegistry, ClassConstructor } from '@node-ts/bus-core';
import { MessageWorkflowMapping } from '../message-workflow-mapping';
import { Persistence } from '../persistence';
import { StartedByProxy } from './started-by-proxy';
import { HandlesProxy } from './handles-proxy';
import { Logger } from '@node-ts/logger-core';
/**
 * The central workflow registry that holds all workflows managed by the application. This includes
 *   - the list of workflows
 *   - what messages start the workflow
 *   - what messages are handled by each workflow
 */
export declare class WorkflowRegistry {
    private readonly handlerRegistry;
    private readonly persistence;
    private readonly startedByFactory;
    private readonly handlesFactory;
    private readonly logger;
    private workflowRegistry;
    private isInitialized;
    private isInitializing;
    constructor(handlerRegistry: HandlerRegistry, persistence: Persistence, startedByFactory: (workflowDataConstructor: WorkflowDataConstructor<WorkflowData>, handler: WorkflowHandlerFn<Message, WorkflowData>) => StartedByProxy<Message, WorkflowData>, handlesFactory: (handler: WorkflowHandlerFn<Message, WorkflowData>, workflowDataConstructor: WorkflowDataConstructor<WorkflowData>, messageMapping: MessageWorkflowMapping<Message, WorkflowData>) => HandlesProxy<Message, WorkflowData>, logger: Logger);
    register<TWorkflowData extends WorkflowData>(workflowConstructor: WorkflowConstructor<TWorkflowData>, workflowDataConstructor: ClassConstructor<TWorkflowData>): void;
    /**
     * Initialize all services that are used to support workflows. This registers all messages subscribed to
     * in workflows as handlers with the bus, as well as initializing the persistence service so that workflow
     * states can be stored.
     *
     * This should be called once as the application is starting.
     */
    initializeWorkflows(): Promise<void>;
    dispose(): Promise<void>;
    private registerStartedBy;
    private registerHandles;
}
