import type { LoadBalancingPolicy } from './types.js';
export interface LoadBalancingOptions {
    routeName: string;
    candidates: string[];
    stickyKey?: string;
    weights?: Record<string, number>;
    availabilityCheck: (providerKey: string) => boolean;
}
export interface GroupedLoadBalancingOptions {
    routeName: string;
    groups: Map<string, string[]>;
    stickyKey?: string;
    weights?: Record<string, number>;
    availabilityCheck: (providerKey: string) => boolean;
}
export declare class RouteLoadBalancer {
    private policy;
    private readonly states;
    constructor(policy?: LoadBalancingPolicy);
    updatePolicy(policy?: LoadBalancingPolicy): void;
    getPolicy(): LoadBalancingPolicy;
    select(options: LoadBalancingOptions, strategyOverride?: LoadBalancingPolicy['strategy']): string | null;
    selectGrouped(options: GroupedLoadBalancingOptions, strategyOverride?: LoadBalancingPolicy['strategy']): string | null;
    private selectRoundRobin;
    private selectWeighted;
    private selectSticky;
    private getState;
}
