import * as plugins from './smartsocket.plugins.js';
import * as interfaces from './interfaces/index.js';
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
import { SocketFunction } from './smartsocket.classes.socketfunction.js';
import { SocketRequest } from './smartsocket.classes.socketrequest.js';
/**
 * interface for class SmartsocketClient
 */
export interface ISmartsocketClientOptions {
    port: number;
    url: string;
    alias: string;
    autoReconnect?: boolean;
    maxRetries?: number;
    initialBackoffDelay?: number;
    maxBackoffDelay?: number;
}
export declare class SmartsocketClient {
    shortId: string;
    remoteShortId: string | null;
    alias: string;
    socketConnection?: SocketConnection;
    serverUrl: string;
    serverPort: number;
    autoReconnect: boolean;
    maxRetries: number;
    initialBackoffDelay: number;
    maxBackoffDelay: number;
    currentRetryCount: number;
    currentBackoffDelay: number;
    eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
    eventStatus: interfaces.TConnectionStatus;
    socketFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
    socketRequests: plugins.lik.ObjectMap<SocketRequest<any>>;
    private tagStore;
    private tagStoreSubscription?;
    /**
     * adds a tag to a connection
     */
    addTag(tagArg: interfaces.ITag): Promise<void>;
    /**
     * gets a tag by id
     * @param tagIdArg
     */
    getTagById(tagIdArg: interfaces.ITag['id']): Promise<interfaces.ITag<any>>;
    /**
     * removes a tag from a connection
     */
    removeTagById(tagIdArg: interfaces.ITag['id']): Promise<void>;
    constructor(optionsArg: ISmartsocketClientOptions);
    addSocketFunction(socketFunction: SocketFunction<any>): void;
    private isReconnecting;
    private isConnecting;
    /**
     * connect the client to the server
     */
    connect(): Promise<unknown>;
    private disconnectRunning;
    private currentSocket;
    private connectionAttemptId;
    /**
     * disconnect from the server
     */
    disconnect(useAutoReconnectSetting?: boolean): Promise<void>;
    /**
     * stops the client completely
     */
    stop(): Promise<void>;
    /**
     * dispatches a server call
     * @param functionNameArg
     * @param dataArg
     */
    serverCall<T extends plugins.typedrequestInterfaces.ITypedRequest>(functionNameArg: T['method'], dataArg: T['request']): Promise<T['response']>;
    private updateStatus;
    /**
     * Resets the reconnection state
     */
    resetReconnectionState(): void;
}
