/// <reference types="node" />
import { AdminWebsocket, AppBundleSource, AppWebsocket, AttachAppInterfaceRequest, AppAuthenticationToken } from "@holochain/client";
import { URL } from "node:url";
import { AgentsAppsOptions, AppOptions, IConductor } from "../types.js";
/**
 * The network type the conductor should use to communicate with peers.
 *
 * @public
 */
export declare enum NetworkType {
    WebRtc = "webrtc",
    Mem = "mem"
}
/**
 * @public
 */
export interface ConductorOptions {
    /**
     * Start up conductor after creation.
     *
     * @defaultValue true
     */
    startup?: boolean;
    /**
     * The network type the conductor should use.
     *
     * @defaultValue quic
     */
    networkType?: NetworkType;
    /**
     * A bootstrap server URL for peers to discover each other.
     */
    bootstrapServerUrl?: URL;
    /**
     * Disable DPKI in the conductor instance.
     *
     * unstable
     */
    /**
     * Set a DPKI network seed in the conductor instance.
     *
     * Defaults to "deepkey-test".
     *
     * unstable
     */
    /**
     * Timeout for requests to Admin and App API.
     */
    timeout?: number;
}
/**
 * Options for using the conductor factory.
 *
 * @public
 */
export type CreateConductorOptions = Pick<ConductorOptions, "bootstrapServerUrl" | "networkType" | "timeout">;
/**
 * The function to create a conductor. It starts a sandbox conductor via the
 * Holochain CLI.
 *
 * @returns A conductor instance.
 *
 * @public
 */
export declare const createConductor: (signalingServerUrl: URL, options?: ConductorOptions) => Promise<Conductor>;
/**
 * A class to manage a conductor running on localhost.
 *
 * @public
 */
export declare class Conductor implements IConductor {
    private conductorProcess;
    private conductorDir;
    private adminApiUrl;
    private _adminWs;
    private _appWs;
    private readonly timeout;
    private constructor();
    /**
     * Factory to create a conductor.
     *
     * @returns A configured instance of a conductor, not yet running.
     */
    static create(signalingServerUrl: URL, options?: CreateConductorOptions): Promise<Conductor>;
    /**
     * Start the conductor and establish a web socket connection to the Admin
     * API.
     */
    startUp(): Promise<void>;
    /**
     * Close Admin and App API connections and kill the conductor process.
     */
    shutDown(): Promise<number | null>;
    private connectAdminWs;
    /**
     * Attach a web socket to the App API.
     *
     * @param request - Specify a port for the web socket (optional).
     * @returns The app interface port.
     */
    attachAppInterface(request?: AttachAppInterfaceRequest): Promise<number>;
    /**
     * Connect a web socket to the App API,
     *
     * @param token - A token to authenticate the connection.
     * @param port - The websocket port to connect to.
     * @returns An app websocket.
     */
    connectAppWs(token: AppAuthenticationToken, port: number): Promise<AppWebsocket>;
    /**
     * Get the path of the directory that contains all files and folders of the
     * conductor.
     *
     * @returns The conductor's temporary directory.
     */
    getTmpDirectory(): string;
    /**
     * Get all Admin API methods.
     *
     * @returns The Admin API web socket.
     */
    adminWs(): AdminWebsocket;
    /**
     * Install an application into the conductor.
     *
     * @param appBundleSource - The bundle or path to the bundle.
     * @param options - {@link AppOptions} for the hApp bundle (optional).
     * @returns An agent app with cells and conductor handle.
     */
    installApp(appBundleSource: AppBundleSource, options?: AppOptions): Promise<import("@holochain/client").AppInfo>;
    /**
     * Install an app for multiple agents into the conductor.
     */
    installAgentsApps(options: AgentsAppsOptions): Promise<import("@holochain/client").AppInfo[]>;
}
/**
 * Run the `hc` command to delete all conductor data.
 *
 * @returns A promise that resolves when the command is complete.
 *
 * @public
 */
export declare const cleanAllConductors: () => Promise<void>;
