import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './common';
export interface NodeBalancer {
    id: number;
    label: string;
    hostname: string;
    client_conn_throttle: number;
    region: string;
    ipv4: string;
    ipv6: string | null;
    created: string;
    updated: string;
    transfer: {
        total: number;
        out: number;
        in: number;
    };
    tags: string[];
    type?: NodeBalancerType;
    configs?: NodeBalancerConfig[];
}
export interface NodeBalancerConfig {
    id: number;
    port: number;
    protocol: string;
    algorithm: string;
    stickiness: string;
    check: string;
    check_interval: number;
    check_timeout: number;
    check_attempts: number;
    check_path: string;
    check_body: string;
    check_passive: boolean;
    cipher_suite: string;
    ssl_cert: string | null;
    ssl_key: string | null;
    nodes_status: {
        up: number;
        down: number;
    };
    nodes?: NodeBalancerNode[];
}
export interface NodeBalancerNode {
    id: number;
    address: string;
    label: string;
    status: string;
    weight: number;
    mode: string;
    config_id: number;
    nodebalancer_id: number;
}
export interface NodeBalancerType {
    id: string;
    label: string;
    price: {
        hourly: number;
        monthly: number;
    };
    transfer: number;
    client_conn_throttle: number;
}
export interface CreateNodeBalancerRequest {
    region: string;
    label?: string;
    client_conn_throttle?: number;
    configs?: CreateNodeBalancerConfigRequest[];
    tags?: string[];
}
export interface UpdateNodeBalancerRequest {
    label?: string;
    client_conn_throttle?: number;
    tags?: string[];
}
export interface CreateNodeBalancerConfigRequest {
    port: number;
    protocol: string;
    algorithm?: string;
    stickiness?: string;
    check?: string;
    check_interval?: number;
    check_timeout?: number;
    check_attempts?: number;
    check_path?: string;
    check_body?: string;
    check_passive?: boolean;
    cipher_suite?: string;
    ssl_cert?: string;
    ssl_key?: string;
    nodes?: CreateNodeBalancerNodeRequest[];
}
export interface UpdateNodeBalancerConfigRequest {
    port?: number;
    protocol?: string;
    algorithm?: string;
    stickiness?: string;
    check?: string;
    check_interval?: number;
    check_timeout?: number;
    check_attempts?: number;
    check_path?: string;
    check_body?: string;
    check_passive?: boolean;
    cipher_suite?: string;
    ssl_cert?: string;
    ssl_key?: string;
}
export interface CreateNodeBalancerNodeRequest {
    address: string;
    label: string;
    weight?: number;
    mode?: string;
}
export interface UpdateNodeBalancerNodeRequest {
    address?: string;
    label?: string;
    weight?: number;
    mode?: string;
}
export interface UpdateNodeBalancerFirewallsRequest {
    ids: number[];
}
export interface LinodeNodeBalancersClient {
    getNodeBalancers: (params?: PaginationParams) => Promise<PaginatedResponse<NodeBalancer>>;
    getNodeBalancer: (id: number) => Promise<NodeBalancer>;
    createNodeBalancer: (data: CreateNodeBalancerRequest) => Promise<NodeBalancer>;
    updateNodeBalancer: (id: number, data: UpdateNodeBalancerRequest) => Promise<NodeBalancer>;
    deleteNodeBalancer: (id: number) => Promise<{}>;
    getNodeBalancerConfigs: (nodeBalancerId: number) => Promise<PaginatedResponse<NodeBalancerConfig>>;
    getNodeBalancerConfig: (nodeBalancerId: number, configId: number) => Promise<NodeBalancerConfig>;
    createNodeBalancerConfig: (nodeBalancerId: number, data: CreateNodeBalancerConfigRequest) => Promise<NodeBalancerConfig>;
    updateNodeBalancerConfig: (nodeBalancerId: number, configId: number, data: UpdateNodeBalancerConfigRequest) => Promise<NodeBalancerConfig>;
    deleteNodeBalancerConfig: (nodeBalancerId: number, configId: number) => Promise<{}>;
    rebuildNodeBalancerConfig: (nodeBalancerId: number, configId: number) => Promise<{}>;
    getNodeBalancerConfigNodes: (nodeBalancerId: number, configId: number) => Promise<PaginatedResponse<NodeBalancerNode>>;
    getNodeBalancerConfigNode: (nodeBalancerId: number, configId: number, nodeId: number) => Promise<NodeBalancerNode>;
    createNodeBalancerConfigNode: (nodeBalancerId: number, configId: number, data: CreateNodeBalancerNodeRequest) => Promise<NodeBalancerNode>;
    updateNodeBalancerConfigNode: (nodeBalancerId: number, configId: number, nodeId: number, data: UpdateNodeBalancerNodeRequest) => Promise<NodeBalancerNode>;
    deleteNodeBalancerConfigNode: (nodeBalancerId: number, configId: number, nodeId: number) => Promise<{}>;
    getNodeBalancerStats: (id: number) => Promise<any>;
    getNodeBalancerTypes: () => Promise<PaginatedResponse<NodeBalancerType>>;
    getNodeBalancerFirewalls: (nodeBalancerId: number, params?: PaginationParams) => Promise<PaginatedResponse<any>>;
    updateNodeBalancerFirewalls: (nodeBalancerId: number, data: UpdateNodeBalancerFirewallsRequest) => Promise<any>;
}
export declare function createNodeBalancersClient(axios: AxiosInstance): LinodeNodeBalancersClient;
