import { AnsiLogger } from 'matterbridge/logger';
import { Config, ConfigLocalAccount, ConfigRemoteAccount, DeviceConfigLocalMqtt, DysonAccount, DysonAccountLogin } from './config-types.js';
import { DysonIoTCredentialsResponse } from './dyson-cloud-types.js';
import NodePersist from 'node-persist';
import { DysonCloudAPI } from './dyson-cloud-api.js';
import { DeviceConfigRemoteMqtt } from './dyson-mqtt-client.js';
interface PersistTokenData {
    token: string;
    created: number;
}
interface PersistChallengeData {
    challengeId: string;
    created: number;
}
interface PersistData {
    token: PersistTokenData;
    challenge: PersistChallengeData;
}
type PersistKey = keyof PersistData;
interface IoTCredentialsData {
    credentials: DysonIoTCredentialsResponse;
    created: number;
}
export declare class DysonCloud<T extends Config = Config> {
    readonly log: AnsiLogger;
    readonly config: T;
    readonly persist: NodePersist.LocalStorage;
    readonly account?: DysonAccount | undefined;
    readonly api: Promise<DysonCloudAPI>;
    constructor(log: AnsiLogger, config: T, persist: NodePersist.LocalStorage, account?: DysonAccount | undefined);
    createApi(): Promise<DysonCloudAPI>;
    getIoT(_serialNumber: string): Promise<DysonIoTCredentialsResponse>;
    getPersistentStorageKey(account: DysonAccountLogin, type: PersistKey): string;
    getPersistent<K extends PersistKey>(account: DysonAccountLogin, type: K): Promise<PersistData[K] | undefined>;
    setPersistent<K extends PersistKey>(account: DysonAccountLogin, type: K, value: PersistData[K]): Promise<void>;
}
export declare class DysonCloudAuth extends DysonCloud {
    readonly account: DysonAccountLogin;
    constructor(log: AnsiLogger, config: Config, persist: NodePersist.LocalStorage, account: DysonAccountLogin);
    startAuth(): Promise<boolean>;
    finishAuth(otpCode: string): Promise<void>;
}
export declare class DysonCloudRemote extends DysonCloud<ConfigRemoteAccount> {
    readonly cache: Map<string, IoTCredentialsData>;
    constructor(log: AnsiLogger, config: ConfigRemoteAccount, persist: NodePersist.LocalStorage);
    getDevices(): Promise<DeviceConfigRemoteMqtt[]>;
    getIoT(serialNumber: string): Promise<DysonIoTCredentialsResponse>;
}
export declare class DysonCloudLocal extends DysonCloud<ConfigLocalAccount> {
    constructor(log: AnsiLogger, config: ConfigLocalAccount, persist: NodePersist.LocalStorage);
    getDevices(): Promise<DeviceConfigLocalMqtt[]>;
}
export {};
//# sourceMappingURL=dyson-cloud.d.ts.map