import type { AppiumLogger } from '@appium/types';
import type { RemoteXPCFacade } from './remote-xpc';
/**
 * Options accepted by {@link ZipConduitClient.install}
 */
export interface ZipConduitInstallOptions {
    /** Maximum number of milliseconds to wait for the streamed installation to finish */
    timeoutMs?: number;
}
/**
 * Thin wrapper around the RemoteXPC streaming `zip_conduit` service.
 *
 * `zip_conduit` streams an `.ipa` straight into the on-device installer, avoiding the separate AFC upload +
 * `installation_proxy` round trip. It is RemoteXPC-only (iOS/tvOS 18+ with an
 * active tunnel) and only accepts `.ipa` archives, so callers must keep a
 * fallback for unpacked `.app` bundles and older devices.
 */
export declare class ZipConduitClient {
    private readonly service;
    private readonly _log;
    private _lastLoggedProgress?;
    private constructor();
    /**
     * Create a zip_conduit client for the device
     *
     * @param udid - Device UDID
     * @param logger - Optional logger
     * @returns A connected client, or `null` when zip_conduit is unavailable
     */
    static create(udid: string, logger: AppiumLogger | undefined, facade: RemoteXPCFacade | null): Promise<ZipConduitClient | null>;
    /**
     * Stream-install an `.ipa`. Handles both fresh installs and upgrades; the
     * device resolves the target by bundle id from the archive contents, so no
     * separate upgrade call is needed.
     *
     * @param ipaPath - Absolute path to the local `.ipa`
     * @param opts - Install options
     */
    install(ipaPath: string, opts?: ZipConduitInstallOptions): Promise<void>;
    /**
     * Close the underlying socket.
     */
    close(): Promise<void>;
    private logInstallProgress;
}
//# sourceMappingURL=zip-conduit-client.d.ts.map