import type { AppiumLogger } from '@appium/types';
import type { RemoteXPCFacade } from './remote-xpc';
/** Options for {@link DeviceConnectionsFactory.requestConnection}. */
interface RequestConnectionOptions {
    usePortForwarding?: boolean;
    devicePort?: number | null;
    remoteXPCFacade?: RemoteXPCFacade | null;
}
/**
 * Manages cached local device connections and optional TCP port forwarding to real iOS devices.
 *
 * Forwarding may use `appium-ios-remotexpc` on iOS 18+ (usbmux or tunnel) with fallback to
 * `appium-ios-device` {@linkcode utilities.connectPort}
 */
export declare class DeviceConnectionsFactory {
    private readonly log;
    /** Shared across factory instances so parallel sessions coordinate the same local ports. */
    private static _connectionsMapping;
    /**
     * @param log - Logger for this factory
     */
    constructor(log: AppiumLogger);
    /**
     * Lists cache keys (`udid:localPort`) matching the given filters.
     *
     * @param udid - If set, only keys whose UDID prefix matches
     * @param port - If set, only keys whose local port suffix matches
     * @param strict - If true and both `udid` and `port` are set, only the exact `udid:port` key;
     *   otherwise keys matching either filter are included
     * @returns Matching connection keys (empty if both `udid` and `port` are omitted)
     */
    listConnections(udid?: string | null, port?: number | null, strict?: boolean): string[];
    /**
     * Registers a connection for the device, optionally starting local TCP forwarding to `devicePort`.
     *
     * When `usePortForwarding` is true, ensures the local port is free (may release stale forwarders)
     * then starts forwarding. When false, only records an empty cache entry for the key.
     *
     * @param udid - Device UDID
     * @param port - Local port on the host
     * @param options - Forwarding options; `devicePort` is used when `usePortForwarding` is true
     *   (eligible RemoteXPC sessions may use tunnel/usbmux forwarding; otherwise legacy applies)
     * @throws If `usePortForwarding` is true but `devicePort` is not an integer
     * @throws If the local port is still in use after attempting cleanup
     */
    requestConnection(udid?: string | null, port?: number | null, options?: RequestConnectionOptions): Promise<void>;
    /**
     * Removes matching entries from the cache and stops any associated port forwarders.
     *
     * @param udid - If set, only connections for this device; use with `port` for a single exact key
     * @param port - If set, only connections on this local port
     */
    releaseConnection(udid?: string | null, port?: number | null): Promise<void>;
    private _warnMissingRequestConnectionParams;
    private _ensureForwardingPortIsFree;
    private _startAndRegisterPortForwarder;
    private _udidAsToken;
    private _portAsToken;
    private _toKey;
    /**
     * Stops forwarders for the given keys. Snapshots `portForwarder` references before any `await`
     * so `releaseConnection` can delete mapping entries only after stops complete (no stale reads).
     */
    private _releaseProxiedConnections;
    private _createPortForwarder;
}
export {};
//# sourceMappingURL=device-connections-factory.d.ts.map