import { ComProtocol, ConnectionStateChangeEvent } from "../../protocol/api";
import { Observable } from 'rxjs';
import { Command } from "../../client/api/request";
import { Response } from "../../client/api/response";
import { BodyDecoder } from "./converter";
import { EncryptionAlgo } from "./encryption-algo.interface";
export interface IoTizeClient {
    getCurrentProtocol(): ComProtocol;
    addComProtocol(newProtocol: ComProtocol, id: string): this;
    switchProtocol(type: string): this;
    connect(): Observable<any>;
    disconnect(): Observable<any>;
    command<T>(request: Command, bodyDecoder?: BodyDecoder<T>): Observable<Response<T>>;
    setEncryptionAlgo(algo: EncryptionAlgo): void;
    getEncryptionAlgo(): EncryptionAlgo | undefined;
    enableEncryption(value: boolean, algo?: EncryptionAlgo): Promise<any>;
    onConnectionStateChange(): Observable<ConnectionStateChangeEvent>;
    isConnected(): boolean;
}
