import { Observable } from 'rxjs';
import type { IDisposable, ILogger, LastOfTuple, RawMessage, RawPortOutputCommandMessage } from '../../types';
import { OutboundMessageTypes } from '../../constants';
import { IOutboundMessenger, PortCommandExecutionStatus, WithResponseSequenceItem } from '../../hub';
import { IQueueTask, TaskQueue, TaskQueueFactory } from './queue';
export declare class OutboundMessenger implements IOutboundMessenger, IDisposable {
    private readonly taskQueueFactory;
    private readonly logger;
    private isDisposed;
    private readonly genericTaskQueue;
    private portOutputCommandTaskQueues;
    constructor(taskQueueFactory: TaskQueueFactory, logger: ILogger);
    sendWithoutResponse(message: RawMessage<OutboundMessageTypes>): Observable<void>;
    sendWithResponse<TSequenceItems extends [...Array<WithResponseSequenceItem<unknown>>, WithResponseSequenceItem<unknown>], TResult extends LastOfTuple<TSequenceItems> extends WithResponseSequenceItem<infer R> ? R : never>(...sequenceItems: TSequenceItems): Observable<TResult>;
    sendPortOutputCommand(message: RawPortOutputCommandMessage): Observable<PortCommandExecutionStatus>;
    createExecutionStreamForTask<TTaskResult>(task: IQueueTask<TTaskResult>, queue: TaskQueue): Observable<TTaskResult>;
    dispose(): void;
    private getQueueForPort;
}
