import { Observable } from "rxjs";
import { FirebaseApp, FirebaseUser, FirebaseDevice } from "./firebase";
import { UserWithMetadata } from "./firebase";
import { Timesync } from "../timesync";
import { SubscriptionManager } from "../subscriptions/SubscriptionManager";
import { Client } from "../types/client";
import { Action, Actions } from "../types/actions";
import { Metrics } from "../types/metrics";
import { SDKOptions } from "../types/options";
import { SkillsClient } from "../types/skill";
import { Credentials, CustomToken } from "../types/credentials";
import { EmailAndPassword } from "../types/credentials";
import { ChangeSettings } from "../types/settings";
import { DeviceStatus } from "../types/status";
import { DeviceInfo, DeviceSelector, OSVersion } from "../types/deviceInfo";
import { UserClaims } from "../types/user";
import { OAuthRemoveResponse } from "../types/oauth";
import { Experiment } from "../types/experiment";
import { TransferDeviceOptions } from "../utils/transferDevice";
export { credentialWithLink, createUser, SERVER_TIMESTAMP, __firebase } from "./firebase";
/**
 * @hidden
 */
export declare class CloudClient implements Client {
    user: any;
    userClaims: any;
    protected options: SDKOptions;
    protected firebaseApp: FirebaseApp;
    protected firebaseUser: FirebaseUser;
    protected firebaseDevice: FirebaseDevice;
    protected timesync: Timesync;
    protected subscriptionManager: SubscriptionManager;
    protected status$: Observable<DeviceStatus>;
    protected osVersion$: Observable<OSVersion>;
    constructor(options: SDKOptions);
    onDeviceChange(): Observable<DeviceInfo>;
    osVersion(): Observable<OSVersion>;
    private setAutoSelectedDevice;
    get actions(): Actions;
    dispatchAction(action: Action): Promise<any>;
    disconnect(): Promise<any>;
    getInfo(): Promise<any>;
    login(credentials: Credentials): Promise<any>;
    logout(): Promise<any>;
    onAuthStateChanged(): Observable<UserWithMetadata>;
    getDevices(): Promise<DeviceInfo[]>;
    addDevice(deviceId: string): Promise<void>;
    removeDevice(deviceId: string): Promise<void>;
    transferDevice(options: TransferDeviceOptions): Promise<void>;
    onUserDevicesChange(): Observable<DeviceInfo[]>;
    onUserClaimsChange(): Observable<UserClaims>;
    didSelectDevice(): Promise<boolean>;
    selectDevice(deviceSelector: DeviceSelector): Promise<DeviceInfo>;
    getSelectedDevice(): Promise<DeviceInfo | null>;
    status(): Observable<DeviceStatus>;
    observeNamespace(namespace: string): Observable<any>;
    onceNamespace(namespace: string): Promise<any>;
    get metrics(): Metrics;
    createAccount(credentials: EmailAndPassword): Promise<any>;
    deleteAccount(): Promise<void>;
    createBluetoothToken(): Promise<string>;
    createCustomToken(): Promise<CustomToken>;
    removeOAuthAccess(): Promise<OAuthRemoveResponse>;
    onUserExperiments(): Observable<Experiment[]>;
    deleteUserExperiment(experimentId: string): Promise<void>;
    get skills(): SkillsClient;
    get timestamp(): number;
    getTimesyncOffset(): number;
    changeSettings(settings: ChangeSettings): Promise<void>;
    goOffline(): void;
    goOnline(): void;
}
