import { Message } from '@node-ts/bus-messages';
import { ClassConstructor } from '@node-ts/bus-core';
import { WorkflowData } from '../workflow-data';
import { Workflow, WorkflowConstructor } from '../workflow';
import { WorkflowWithHandler } from './handler-workflow';
export declare const WORKFLOW_STARTED_BY_METADATA_KEY: unique symbol;
export declare class WorkflowStartedByMetadata {
    propertyKey: string;
    messageConstructor: ClassConstructor<Message>;
    static addStep(metadata: WorkflowStartedByMetadata, target: Workflow<WorkflowData>): void;
    static getSteps(target: WorkflowConstructor<WorkflowData>): WorkflowStartedByMetadata[];
}
/**
 * A handler that starts a new workflow whenever a message of the handled type is received. A workflow can be started
 * by one or more message types.
 * @param messageConstructor The type of message that starts a new workflow
 */
export declare function StartedBy<TMessage extends Message, TWorkflowData extends WorkflowData, TPropertyKey extends string, TTarget extends WorkflowWithHandler<TMessage, TWorkflowData, TPropertyKey> = WorkflowWithHandler<TMessage, TWorkflowData, TPropertyKey>>(messageConstructor: ClassConstructor<TMessage>): (target: TTarget, propertyKey: TPropertyKey) => void;
