import { TypedEmitter } from "tiny-typed-emitter";
import { XmlRpcCallbacks, XmlRpcCallbacksCall, XmlRpcMethods, XmlRpcMethodsCall, XmlRpcMethodsResponse, XmlRpcScriptCallbacks, XmlRpcScriptCallbacksCall, XmlRpcScriptMethodResponseCallbackCall, xmlRpcScriptMethodsResponseCallback, XmlRpcScriptResponseCallbacks } from "./types.js";
type GbxRemoteEvents = {
    [callback: `callback:${string}`]: (callback: {
        [Callback in XmlRpcScriptResponseCallbacks]: XmlRpcScriptCallbacksCall[Callback][1];
    }[XmlRpcScriptResponseCallbacks]) => unknown;
    [responseId: `response:${number}`]: (response: string) => unknown;
    connect: (success: boolean) => unknown;
    disconnect: (reason: null | string) => unknown;
    ready: () => unknown;
} & {
    [Callback in XmlRpcCallbacks]: (...arguments_: XmlRpcCallbacksCall[Callback]) => unknown;
} & {
    [Callback in XmlRpcScriptCallbacks]: (...arguments_: XmlRpcScriptCallbacksCall[Callback][1]) => unknown;
};
declare class GbxRemote extends TypedEmitter<GbxRemoteEvents> {
    private static API_VERSION;
    private static DEFAULT_HANDLER;
    private static MAGIC_HEADER;
    private static MAX_HANDLER;
    private connection;
    private data;
    private handler;
    private handlersWaitingResponse;
    private host;
    private isConnected;
    private password;
    private port;
    private user;
    constructor(host: string, port: number, user: string, password: string);
    callMethod<Method extends "TriggerModeScriptEventArray", ScriptMethod extends keyof typeof xmlRpcScriptMethodsResponseCallback>(method: Method, scriptMethod: ScriptMethod, args: XmlRpcMethodsCall[Method][1]): Promise<[
        ...XmlRpcMethodsResponse[Method],
        Promise<XmlRpcScriptMethodResponseCallbackCall<ScriptMethod>>
    ]>;
    callMethod<Method extends XmlRpcMethods>(method: Method, ...args: XmlRpcMethodsCall[Method]): Promise<XmlRpcMethodsResponse[Method]>;
    connect(): Promise<boolean>;
    disconnect(reason?: string): void;
    private handle;
    private handleCallback;
    private setupConnection;
}
export default GbxRemote;
