import * as DBus from "dbus-next";
import { Profile } from "./profile";
import { Agent } from "./agent";
import { Adapter } from "./adapter";
import { Device } from "./device";
import { OrgFreedesktopDBusObjectManager } from "./dbus/DBus-ObjectManager";
export interface BluezOptions {
    bus: DBus.MessageBus;
    userInterfacesPath: DBus.ObjectPath;
}
export declare class Bluez {
    private bus;
    private options;
    private objectManager;
    private agentManager;
    private profileManager;
    private bluezRootObject;
    private adapterCache;
    constructor(options?: Partial<BluezOptions>);
    init(): Promise<void>;
    getBus(): DBus.MessageBus;
    getObjectManager(): OrgFreedesktopDBusObjectManager;
    getAdapter(searchedName?: string): Promise<Adapter>;
    listAdapters(): Promise<Adapter[]>;
    /**
     * This registers a profile implementation.
     * If an application disconnects from the bus all
     * its registered profiles will be removed.
     * HFP HS UUID: 0000111e-0000-1000-8000-00805f9b34fb
     *     Default RFCOMM channel is 6. And this requires
     *     authentication.
     * Possible errors: org.bluez.Error.InvalidArguments
     *                  org.bluez.Error.AlreadyExists
     **/
    registerProfile(profile: Profile, path?: string): Promise<void>;
    unregisterProfile(path?: string): Promise<void>;
    /**
     * This registers an agent handler.
     * The object path defines the path of the agent
     * that will be called when user input is needed.
     * Every application can register its own agent and
     * for all actions triggered by that application its
     * agent is used.
     * It is not required by an application to register
     * an agent. If an application does chooses to not
     * register an agent, the default agent is used. This
     * is on most cases a good idea. Only application
     * like a pairing wizard should register their own
     * agent.
     * An application can only register one agent. Multiple
     * agents per application is not supported.
     * The capability parameter can have the values
     * "DisplayOnly", "DisplayYesNo", "KeyboardOnly",
     * "NoInputNoOutput" and "KeyboardDisplay" which
     * reflects the input and output capabilities of the
     * agent.
     * If an empty string is used it will fallback to
     * "KeyboardDisplay".
     * Possible errors: org.bluez.Error.InvalidArguments
     *                  org.bluez.Error.AlreadyExists
     **/
    registerAgent(agent: Agent, requestAsDefault?: boolean): Promise<void>;
    unregisterAgent(agent: Agent): Promise<void>;
    /**
     * Gat an Adapter from at that path.
     * For node > 14.6 Adapters are cached using WeakRefs
     * @param object
     */
    getAdapterFromObject(object: DBus.ObjectPath): Promise<Adapter>;
    /**
     * Get a Device Interface at the Object.
     * Shortcut for `Bluez.getDbusObjectInterface(Device, object)`
     * @param object
     */
    getDeviceFromObject(object: DBus.ObjectPath): Promise<Device>;
    /**
     * Get an low level dbus interface from the given object path
     * @param type Low level dbus interface from ./dbus/*
     * @param object dbus object path
     */
    getDbusObjectInterface<T>(type: {
        new (obj: DBus.ProxyObject, bluez: Bluez): T;
    }, object: DBus.ObjectPath): Promise<T>;
}
