import { TatumConnector } from '../../../connector';
import { JsonRpcCall, JsonRpcResponse } from '../../../dto';
import { GetI } from '../../../dto/GetI';
import { PostI } from '../../../dto/PostI';
import { AbstractRpcInterface } from '../../../dto/rpc/AbstractJsonRpcInterface';
import { RpcNodeType } from '../../tatum';
declare enum RequestType {
    RPC = "RPC",
    POST = "POST",
    GET = "GET",
    BATCH = "BATCH",
    PUT = "PUT",
    DELETE = "DELETE"
}
interface HandleFailedRpcCallParams {
    rpcCall: JsonRpcCall | JsonRpcCall[] | PostI | GetI;
    e: unknown;
    nodeType: RpcNodeType;
    requestType: RequestType;
    url: string;
}
export declare class LoadBalancer implements AbstractRpcInterface {
    private readonly id;
    protected readonly connector: TatumConnector;
    private readonly logger;
    private rpcUrls;
    private activeUrl;
    private interval;
    private network;
    private evictNodesOnFailure;
    private noActiveNode;
    constructor(id: string);
    init(): Promise<void>;
    destroy(): void;
    private initCustomNodes;
    private resetFailedStatuses;
    private checkStatuses;
    private checkIfNoActiveNodes;
    private checkStatus;
    private static getFastestServer;
    getActiveArchiveUrlWithFallback(): {
        url: string;
        type: RpcNodeType;
    };
    getActiveNormalUrlWithFallback(): {
        url: string;
        type: RpcNodeType;
    };
    getActiveUrl(nodeType: RpcNodeType): {
        url: string;
        type: RpcNodeType;
    };
    private getActiveIndex;
    private checkSSRF;
    private initRemoteHosts;
    private initRemoteHostsUrls;
    initRemoteHostsFromResponse(response: Response, nodeType: RpcNodeType): Promise<void>;
    handleFailedRpcCall({ rpcCall, e, nodeType, requestType, url }: HandleFailedRpcCallParams): Promise<void>;
    rawRpcCall(rpcCall: JsonRpcCall, archive?: boolean): Promise<JsonRpcResponse<any>>;
    rawBatchRpcCall(rpcCall: JsonRpcCall[]): Promise<JsonRpcResponse<any>[] | JsonRpcResponse<any>>;
    modifyNodeUrl(url: string): string;
    private getUrlForHttpMethod;
    post<T>({ path, body, prefix }: PostI): Promise<T>;
    put<T>({ path, body, prefix }: PostI): Promise<T>;
    delete<T>({ path, prefix }: GetI): Promise<T>;
    get<T>({ path, prefix }: GetI): Promise<T>;
    getRpcNodeUrl(): string;
}
export declare class TronLoadBalancer extends LoadBalancer {
    constructor(id: string);
    modifyNodeUrl(url: string): string;
}
export {};
