import { Disposable } from "../utils/disposable";
import { IAgentClient } from "../AgentClient/agent-client-interface";
import { Tracer } from "@opentelemetry/api";
export type Port = {
    host: string;
    port: number;
};
export declare class Ports {
    private agentClient;
    private tracer?;
    private disposable;
    private onDidPortOpenEmitter;
    get onDidPortOpen(): import("../utils/event").Event<Port>;
    private onDidPortCloseEmitter;
    get onDidPortClose(): import("../utils/event").Event<number>;
    private lastOpenedPorts;
    constructor(sessionDisposable: Disposable, agentClient: IAgentClient, tracer?: Tracer | undefined);
    private withSpan;
    /**
     * Get a port by number.
     */
    get(port: number): Promise<Port | undefined>;
    /**
     * Get all ports.
     */
    getAll(): Promise<Port[]>;
    /**
     * Wait for a port to be opened.
     *
     * @param port - The port to wait for.
     * @param options - Additional options
     * @param options.timeoutMs - Optional timeout in milliseconds. If specified, the promise will reject after this time if the port hasn't opened.
     * @returns A promise that resolves when the port is opened.
     * @throws {Error} If the timeout is reached before the port opens
     */
    waitForPort(port: number, options?: {
        timeoutMs?: number;
    }): Promise<Port>;
}
