import { NativeEventEmitter } from 'react-native';
import { AccessoryBasicInfo, AccessoryCategory, AccessoryControlStatus, AccessoryDfuMode, AccessoryInfo, AccessoryListType, AccessoryPairingResponse, AccessoryProtocol, ConnectivityControllerEventDelegate, LocalDeviceVisibility, AccessoryConfigurationEntry } from './turbo-modules/AccClientTypes';
/**
 * @module AccClient
 *
 * @class ConnectivityController
 *
 * Instance of this class represents an ConnectivityController interface, providing a set of
 * APIs for accessory management (e.g discovering, pairing, connecting and disconnecting).
 *
 * The goal is to provide a set of APIs that can work with multiple protocols, in a protocol
 * agnostic way. However, it also allows the application to explictly express its intention to
 * specially work with specific protocol (e.g when performing accessory discovery and pairing).
 *
 * An application process can only have one instance of this class. When instatiating, please
 * provide an instance of an application implemented ConnectivityControllerEventDelegate class that
 * will be used to handle event callbacks. After that, application needs to call `initialize()`
 * which connects to the service component.
 */
export declare class ConnectivityController extends NativeEventEmitter {
    private clientCallbacks;
    private initialized;
    private checkInitiazationState;
    /**
     * @brief constructor for ConnectivityController
     *
     * @param[in] callbacks application provided event callbacks.
     */
    constructor(callbacks: ConnectivityControllerEventDelegate);
    /**
     * @brief Get major version number.
     * @return Major version number.
     */
    static getMajorVersion(): number;
    /**
     * @brief Get minor version number.
     * @return Minor version number.
     */
    static getMinorVersion(): number;
    /**
     * @brief Get patch version number.
     * @return Patch version number.
     */
    static getPatchVersion(): number;
    /**
     * @brief initialize as a client to ACC server.
     *
     * @privilege com.amazon.acc.privilege.access
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfMemoryError} Thrown when there is insufficient memory.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    initialize(): Promise<AccessoryControlStatus>;
    /**
     * @brief Deinitialize as a client to ACC server.
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    deinitialize(): Promise<AccessoryControlStatus>;
    /**
     * @brief Start accessory discovery
     *
     * @privilege com.amazon.acc.privilege.discover
     * @privilege com.amazon.location.privilege.access.fine
     *
     * @param[in] protocol Protocol bridge to start discovery
     * @param[in] category Accessory category to be discovered
     * @param[in] duration Accessory discovery duration in seconds, default to be 30 seconds
     * if not specified by the caller.
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NotSupportedError} Thrown when the operation is not supported.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    startAccessoryDiscovery(protocol: AccessoryProtocol, category: AccessoryCategory, duration?: number): Promise<AccessoryControlStatus>;
    /**
     * @brief Cancel accessory discovery
     *
     * @privilege com.amazon.acc.privilege.discover
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NotSupportedError} Thrown when the operation is not supported.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    cancelAccessoryDiscovery(protocol: AccessoryProtocol): Promise<AccessoryControlStatus>;
    /**
     * @brief Set local device visibility mode
     *
     * @privilege com.amazon.acc.privilege.discoverable
     *
     * @param[in] protocol Accessory protocol
     * @param[in] visibility Local device visibility mode
     * @param[in] duration Accessory discoverable duration in seconds when visibility
     * is set to LocalDeviceVisibility.CONNECTABLE_DISCOVERABLE, default to be 120
     * seconds if not specified by the caller.
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NotSupportedError} Thrown when the operation is not supported.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.InvalidArgumentError} Thrown when an invalid argument is provided.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    setLocalDeviceVisibility(protocol: AccessoryProtocol, visibility: LocalDeviceVisibility, duration?: number): Promise<AccessoryControlStatus>;
    /**
     * @brief Start accessory autopair.
     *
     * @privilege com.amazon.acc.privilege.pair
     *
     * @param[in] protocol Accessory protocol to start autopair
     * @param[in] category Accessory category
     * @param[in] duration Accessory autopair duration in seconds, default to be 120 seconds if not
     * specified by the caller.
     *
     * @remarks This is specially used to automatically discover and pair with Remote Controllers
     * in TV use cases, only AccessoryProtocol.BLUTOOTH & AccessoryCategory.REMOTE_CONTROLLER
     * is supported currently. It may be enhanced to support other use cases in future release.
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.InProgressError} Thrown when the operation is already in progress.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NotSupportedError} Thrown when the operation is not supported.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    startAccessoryAutopair(protocol: AccessoryProtocol, category: AccessoryCategory, duration?: number): Promise<AccessoryControlStatus>;
    /**
     * @brief Cancel accessory autopair
     *
     * @privilege com.amazon.acc.privilege.pair
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    cancelAccessoryAutopair(protocol: AccessoryProtocol): Promise<AccessoryControlStatus>;
    /**
     * @brief Pair accessory
     *
     * @privilege com.amazon.acc.privilege.pair
     *
     * @param[in] accessoryIdentity Accessory identity to pair
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    pairAccessory(accessoryIdentity: string): Promise<AccessoryControlStatus>;
    /**
     * @brief Unpair accessory
     *
     * @privilege com.amazon.acc.privilege.pair
     *
     * @param[in] accessoryIdentity Accessory identity to unpair
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    unpairAccessory(accessoryIdentity: string): Promise<AccessoryControlStatus>;
    /**
     * @brief Connect accessory
     *
     * @privilege com.amazon.acc.privilege.connect
     *
     * @param[in] accessoryIdentity Accessory identity to connect
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    connectAccessory(accessoryIdentity: string): Promise<AccessoryControlStatus>;
    /**
     * @brief Disconnect accessory
     *
     * @privilege com.amazon.acc.privilege.connect
     *
     * @param[in] accessoryIdentity Accessory identity to disconnect
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    disconnectAccessory(accessoryIdentity: string): Promise<AccessoryControlStatus>;
    /**
     * @brief start accessory DFU
     *
     * @privilege com.amazon.acc.privilege.control
     *
     * @param[in] accessoryIdentity Accessory identity to start DFU
     * @param[in] dfuMode Accessory DFU Type to be triggered
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotFoundError} Thrown when the requested accessory is not found.
     * @throws {AccClientErrors.NotSupportedError} Thrown when the operation is not supported.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    startAccessoryDfu(accessoryIdentity: string, dfuMode: AccessoryDfuMode): Promise<AccessoryControlStatus>;
    /**
     * @brief Send accessory pairing response
     *
     * @privilege com.amazon.acc.privilege.pair
     *
     * @param[in] accessoryIdentity Accessory identity to send pairing response
     * @param[in] pairingResponse App provided pairing response
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.InvalidArgumentError} Thrown when an invalid argument is provided.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    sendAccessoryPairingResponse(accessoryIdentity: string, pairingResponse: AccessoryPairingResponse): Promise<AccessoryControlStatus>;
    /**
     * @brief Get accessory list
     *
     * @privilege com.amazon.acc.privilege.access
     *
     * @param[in] accessoryList Accessory list type
     *
     * @returns {AccessoryListType} Accessory list
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    getAccessoryList(accessoryList: AccessoryListType): Promise<Array<AccessoryBasicInfo>>;
    /**
     * @brief Get accessory information
     *
     * @privilege com.amazon.acc.privilege.access
     *
     * @param[in] accessoryIdentity Accessory identity to get information
     * @param[in] needExtraInfo Boolean flag to get extra information, default as false.
     * @param[in] extraInfoKeys Array of extra information keys, valid when `needExtra` is true.
     *
     * @returns {AccessoryInfo} Accessory information
     *
     * @throws {AccClientErrors.TimeOutError} Thrown when the operation has timed out.
     * @throws {AccClientErrors.OutOfResourceError} Thrown when there are no available resources.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.NotConnectedError} Thrown when error occured in connection with server.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    getAccessoryInfo(accessoryIdentity: string, needExtraInfo?: boolean, extraInfoKeys?: Array<string>): Promise<AccessoryInfo>;
    /**
     * @brief Get accessory configuration
     *
     * @privilege com.amazon.acc.privilege.restricted
     *
     * @param[in] accessoryIdentity Accessory identity
     *
     * @returns {AccessoryConfigurationEntry} Accessory configuration
     *
     * @throws {AccClientErrors.NotSupportedError} Thrown when the configuration interface is not supported.
     * @throws {AccClientErrors.NotFoundError} Thrown when there are no available configuration.
     * @throws {AccClientErrors.TryAgainError} Thrown when the application need to try again.
     * @throws {AccClientErrors.NoPermissionError} Thrown when the user or application lacks the necessary permissions.
     * @throws {AccClientErrors.AccessoryError} Thrown for any other unspecified error.
     */
    getAccessoryConfiguration(accessoryIdentity: string): Promise<AccessoryConfigurationEntry>;
    private clientEventDispatcher;
}
