import { type ArvoEvent } from 'arvo-core';
import type { ArvoEventHandlerOpenTelemetryOptions } from 'arvo-event-handler';
import type ArvoMachine from '../ArvoMachine';
import type { IMachineRegistry } from './interface';
/**
 * Registry for managing and resolving ArvoMachine instances.
 * Provides functionality to store multiple machine instances and resolve them based on events.
 *
 * @remarks
 * The registry must contain at least one machine upon initialization.
 * Each machine in the registry should have a unique combination of version and source.
 */
export declare class MachineRegistry implements IMachineRegistry {
    machines: ArvoMachine<any, any, any, any, any>[];
    /**
     * Creates a new MachineRegistry instance with the provided machines.
     *
     * @param args - Variable number of ArvoMachine instances to register
     * @throws {Error} When no machines are provided during initialization
     */
    constructor(...args: ArvoMachine<any, any, any, any, any>[]);
    /**
     * Resolves and returns a machine instance based on the provided event.
     * The resolution is performed using the orchestrator information in the event's subject.
     *
     * @param event - The event containing orchestration subject information
     * @param opentelemetry Telemetry configuration for tracing
     * @returns The matching ArvoMachine instance or null if not found
     *
     * @example
     * ```typescript
     * const machine = registry.resolve(incomingEvent);
     * // Use resolved machine for event processing
     * ```
     */
    resolve(event: ArvoEvent, opentelemetry?: ArvoEventHandlerOpenTelemetryOptions): ArvoMachine<any, any, any, any, any> | null;
}
