/// <reference types="node" />
import { UnifiAuth } from './UnifiAuth';
import { AxiosInstance, AxiosRequestConfig, RawAxiosRequestConfig } from 'axios';
import { IController } from './IController';
import { ObjectWithPrivateValues } from './commons/ObjectWithPrivateValues';
import { UnifiWebsockets } from './WebSockets';
import { EventEmitter } from 'events';
import { Site, Sites } from './Sites';
import { IUser } from './User';
import { IBuildUrlParams } from './interfaces';
import { DeviceFingerPrints } from './Clients';
import { IControllerProps } from './IControllerProps';
export declare class Controller extends ObjectWithPrivateValues implements IController {
    /**
     * store array to close them all if needed, or loop on registered sockets
     * only available on unifiOS
     */
    UnifiWebSockets: Array<UnifiWebsockets>;
    /**
     * global event emitter, to listen on all events
     */
    globalWS: EventEmitter;
    /**
     * listen on super site
     */
    superWS: UnifiWebsockets;
    strictSSL: boolean;
    get sites(): Sites;
    readonly controllerInstance: AxiosInstance;
    auth: UnifiAuth;
    private readonly _sites;
    unifiOs: boolean;
    version?: string;
    private _logged;
    get logged(): boolean;
    private set logged(value);
    createInstance(siteName: string, config?: RawAxiosRequestConfig): AxiosInstance;
    private _createInstance;
    protected get props(): IControllerProps;
    protected set props(value: IControllerProps);
    get ws(): UnifiWebsockets;
    set ws(value: UnifiWebsockets);
    constructor(props: IControllerProps);
    private needLoggedIn;
    getSites(): Promise<Array<Site>>;
    /**
     *
     * @param token2FA - 2FA token, will disable re-login
     */
    login(token2FA?: string): Promise<IUser>;
    logout(): Promise<void>;
    private addAxiosDebugInterceptors;
    buildUrl(pConfig: IBuildUrlParams, websockets?: boolean): AxiosRequestConfig;
    private addAxiosProxyInterceptors;
    private addAxiosPlugins;
    getInstance(): AxiosInstance;
    on(eventName: string, cb: (...args: Array<unknown>) => unknown): this;
    private _initWebSockets;
    initWebSockets(): Promise<void>;
    /**
     *
     * @param folder - not sure about it, but some number can return different results
     * seems to return https://static.ubnt.com/fingerprint/:folder/devicelist.json
     * tested with 0 1 2
     */
    getDevicesFingerPrints(folder?: 0 | 1 | 2 | number): Promise<DeviceFingerPrints>;
    reboot(): Promise<void>;
}
