import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './common';
import { Volume } from './volumes';
import { NodeBalancer } from './nodebalancers';
export interface LinodeInstance {
    id: number;
    label: string;
    region: string;
    type: string;
    status: string;
    ipv4: string[];
    ipv6: string;
    created: string;
    updated: string;
    hypervisor: string;
    specs: {
        disk: number;
        memory: number;
        vcpus: number;
        transfer: number;
    };
    alerts: {
        cpu: number;
        io: number;
        network_in: number;
        network_out: number;
        transfer_quota: number;
    };
    backups: {
        enabled: boolean;
        schedule: {
            day: string;
            window: string;
        };
        last_successful: string | null;
    };
    image: string | null;
    group: string;
    tags: string[];
    host_uuid: string;
    watchdog_enabled: boolean;
}
export interface LinodeType {
    id: string;
    label: string;
    class: string;
    disk: number;
    memory: number;
    vcpus: number;
    network_out: number;
    transfer: number;
    gpus: number;
    price: {
        hourly: number;
        monthly: number;
    };
    addons: {
        backups: {
            price: {
                hourly: number;
                monthly: number;
            };
        };
    };
    successor: string | null;
}
export interface Backup {
    id: number;
    label: string;
    status: string;
    type: 'auto' | 'snapshot';
    region: string;
    created: string;
    updated: string;
    finished: string;
    configs: string[];
    disks: Record<string, any>;
    available: boolean;
}
export interface NetworkTransfer {
    used: number;
    quota: number;
    billable: number;
}
export interface MonthlyTransfer {
    used: number;
    quota: number;
    billable: number;
}
export interface CreateLinodeRequest {
    region: string;
    type: string;
    label?: string;
    group?: string;
    root_pass?: string;
    image?: string;
    authorized_keys?: string[];
    authorized_users?: string[];
    backups_enabled?: boolean;
    booted?: boolean;
    private_ip?: boolean;
    tags?: string[];
    firewall_id?: number;
}
export interface UpdateLinodeRequest {
    label?: string;
    group?: string;
    tags?: string[];
    watchdog_enabled?: boolean;
    alerts?: {
        cpu?: number;
        io?: number;
        network_in?: number;
        network_out?: number;
        transfer_quota?: number;
    };
}
export interface ResizeLinodeRequest {
    type: string;
    allow_auto_disk_resize?: boolean;
}
export interface CloneLinodeRequest {
    region?: string;
    type?: string;
    label?: string;
    group?: string;
    backups_enabled?: boolean;
    private_ip?: boolean;
    tags?: string[];
}
export interface RebuildLinodeRequest {
    image: string;
    root_pass: string;
    authorized_keys?: string[];
    authorized_users?: string[];
    stackscript_id?: number;
    stackscript_data?: Record<string, any>;
    booted?: boolean;
}
export interface ConfigInterface {
    id: number;
    label: string;
    purpose: 'public' | 'vlan' | 'vpc';
    ipam_address: string | null;
    primary?: boolean;
    active?: boolean;
    subnet_id?: number;
    vpc_id?: number;
    ipv4?: {
        vpc?: string;
        nat_1_1?: string;
    };
}
export interface CreateConfigInterfaceRequest {
    purpose: 'public' | 'vlan' | 'vpc';
    label?: string;
    ipam_address?: string;
    primary?: boolean;
    subnet_id?: number;
    vpc_id?: number;
    ipv4?: {
        vpc?: string;
        nat_1_1?: string;
    };
}
export interface UpdateConfigInterfaceRequest {
    label?: string;
    ipam_address?: string;
    primary?: boolean;
    ipv4?: {
        vpc?: string;
        nat_1_1?: string;
    };
}
export interface ConfigInterfaceOrderRequest {
    ids: number[];
}
export interface LinodeConfig {
    id: number;
    label: string;
    comments: string;
    kernel: string;
    memory_limit: number;
    root_device: string;
    devices: Record<string, any>;
    initrd: string | null;
    created: string;
    updated: string;
    helpers: {
        updatedb_disabled: boolean;
        distro: boolean;
        network: boolean;
        modules_dep: boolean;
    };
    interfaces: ConfigInterface[];
}
export interface CreateLinodeConfigRequest {
    label: string;
    kernel?: string;
    comments?: string;
    memory_limit?: number;
    root_device?: string;
    devices?: Record<string, any>;
    initrd?: string | null;
    helpers?: {
        updatedb_disabled?: boolean;
        distro?: boolean;
        network?: boolean;
        modules_dep?: boolean;
    };
    interfaces?: any[];
}
export interface LinodeDisk {
    id: number;
    label: string;
    status: string;
    size: number;
    filesystem: string;
    created: string;
    updated: string;
}
export interface CreateLinodeDiskRequest {
    label: string;
    size: number;
    filesystem?: string;
    read_only?: boolean;
    image?: string;
    root_pass?: string;
    authorized_keys?: string[];
    authorized_users?: string[];
    stackscript_id?: number;
    stackscript_data?: Record<string, any>;
}
export interface CreateSnapshotRequest {
    label: string;
}
export interface RestoreBackupRequest {
    linode_id?: number;
    overwrite?: boolean;
}
export interface LinodeIPAllocationRequest {
    type: 'ipv4' | 'ipv6';
    public: boolean;
}
export interface LinodeIPUpdateRequest {
    rdns: string | null;
}
export interface ResetRootPasswordRequest {
    root_pass: string;
}
export interface MigrateLinodeRequest {
    region?: string;
}
export interface CloneDiskRequest {
    label?: string;
}
export interface Kernel {
    id: string;
    label: string;
    version: string;
    kvm: boolean;
    architecture: string;
    pvops: boolean;
    deprecated: boolean;
    built: string;
}
export interface UpdateLinodeFirewallsRequest {
    ids: number[];
}
export interface LinodeInstancesClient {
    getLinodes: (params?: PaginationParams) => Promise<PaginatedResponse<LinodeInstance>>;
    getLinodeById: (id: number) => Promise<LinodeInstance>;
    createLinode: (data: CreateLinodeRequest) => Promise<LinodeInstance>;
    updateLinode: (id: number, data: UpdateLinodeRequest) => Promise<LinodeInstance>;
    deleteLinode: (id: number) => Promise<{}>;
    bootLinode: (id: number, configId?: number) => Promise<{}>;
    rebootLinode: (id: number, configId?: number) => Promise<{}>;
    shutdownLinode: (id: number) => Promise<{}>;
    resizeLinode: (id: number, data: ResizeLinodeRequest) => Promise<{}>;
    cloneLinode: (id: number, data: CloneLinodeRequest) => Promise<LinodeInstance>;
    rebuildLinode: (id: number, data: RebuildLinodeRequest) => Promise<LinodeInstance>;
    rescueLinode: (id: number, devices: Record<string, number>) => Promise<{}>;
    migrateLinode: (id: number, data?: MigrateLinodeRequest) => Promise<{}>;
    mutateLinode: (id: number) => Promise<{}>;
    resetRootPassword: (id: number, data: ResetRootPasswordRequest) => Promise<{}>;
    getLinodeConfigs: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<LinodeConfig>>;
    getLinodeConfig: (linodeId: number, configId: number) => Promise<LinodeConfig>;
    createLinodeConfig: (linodeId: number, data: CreateLinodeConfigRequest) => Promise<LinodeConfig>;
    updateLinodeConfig: (linodeId: number, configId: number, data: Partial<CreateLinodeConfigRequest>) => Promise<LinodeConfig>;
    deleteLinodeConfig: (linodeId: number, configId: number) => Promise<{}>;
    getConfigInterfaces: (linodeId: number, configId: number) => Promise<PaginatedResponse<ConfigInterface>>;
    getConfigInterface: (linodeId: number, configId: number, interfaceId: number) => Promise<ConfigInterface>;
    createConfigInterface: (linodeId: number, configId: number, data: CreateConfigInterfaceRequest) => Promise<ConfigInterface>;
    updateConfigInterface: (linodeId: number, configId: number, interfaceId: number, data: UpdateConfigInterfaceRequest) => Promise<ConfigInterface>;
    deleteConfigInterface: (linodeId: number, configId: number, interfaceId: number) => Promise<{}>;
    reorderConfigInterfaces: (linodeId: number, configId: number, data: ConfigInterfaceOrderRequest) => Promise<{}>;
    getLinodeDisks: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<LinodeDisk>>;
    getLinodeDisk: (linodeId: number, diskId: number) => Promise<LinodeDisk>;
    createLinodeDisk: (linodeId: number, data: CreateLinodeDiskRequest) => Promise<LinodeDisk>;
    updateLinodeDisk: (linodeId: number, diskId: number, data: Partial<CreateLinodeDiskRequest>) => Promise<LinodeDisk>;
    deleteLinodeDisk: (linodeId: number, diskId: number) => Promise<{}>;
    resizeLinodeDisk: (linodeId: number, diskId: number, size: number) => Promise<{}>;
    cloneDisk: (linodeId: number, diskId: number, data?: CloneDiskRequest) => Promise<LinodeDisk>;
    resetDiskPassword: (linodeId: number, diskId: number, password: string) => Promise<{}>;
    getBackups: (linodeId: number) => Promise<{
        automatic: Backup[];
        snapshot: {
            current: Backup | null;
            in_progress: Backup | null;
        };
    }>;
    getBackup: (linodeId: number, backupId: number) => Promise<Backup>;
    createSnapshot: (linodeId: number, data: CreateSnapshotRequest) => Promise<Backup>;
    cancelBackups: (linodeId: number) => Promise<{}>;
    enableBackups: (linodeId: number) => Promise<{}>;
    restoreBackup: (linodeId: number, backupId: number, data?: RestoreBackupRequest) => Promise<{}>;
    getLinodeIPs: (linodeId: number) => Promise<any>;
    allocateIP: (linodeId: number, data: LinodeIPAllocationRequest) => Promise<any>;
    getLinodeIP: (linodeId: number, address: string) => Promise<any>;
    updateLinodeIP: (linodeId: number, address: string, data: LinodeIPUpdateRequest) => Promise<any>;
    deleteLinodeIP: (linodeId: number, address: string) => Promise<{}>;
    getLinodeFirewalls: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<any>>;
    applyFirewalls: (linodeId: number) => Promise<{}>;
    updateLinodeFirewalls: (linodeId: number, data: UpdateLinodeFirewallsRequest) => Promise<{}>;
    getLinodeStats: (id: number) => Promise<any>;
    getLinodeStatsByDate: (id: number, year: string, month: string) => Promise<any>;
    getNetworkTransfer: (id: number) => Promise<NetworkTransfer>;
    getMonthlyTransfer: (id: number, year: string, month: string) => Promise<MonthlyTransfer>;
    getKernels: (params?: PaginationParams) => Promise<PaginatedResponse<Kernel>>;
    getKernelById: (id: string) => Promise<Kernel>;
    getTypes: (params?: PaginationParams) => Promise<PaginatedResponse<LinodeType>>;
    getType: (id: string) => Promise<LinodeType>;
    getLinodeNodeBalancers: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<NodeBalancer>>;
    getLinodeVolumes: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<Volume>>;
}
export declare function createInstancesClient(axios: AxiosInstance): LinodeInstancesClient;
