import { ServiceType } from './generaltypes';
/**
 * Represents the status of an an endpoint in a diagnostics report.
 *
 * @category Diagnostics
 */
export declare enum EndpointState {
    /**
     * Indicates the endpoint is disconnected.
     */
    Disconnected = 0,
    /**
     * Indicates the endpoint is still connecting.
     */
    Connecting = 1,
    /**
     * Indicates the endpoint is connected.
     */
    Connected = 2,
    /**
     * Indicates the endpoint is disconnecting.
     */
    Disconnecting = 3
}
/**
 * Represents the status of an an endpoint in a ping report.
 */
export declare enum PingState {
    /**
     * Indicates the endpoint was pinged successfully.
     */
    Ok = 0,
    /**
     * Indicates the endpoint timed out during the ping.
     */
    Timeout = 1,
    /**
     * Indicates an error occured trying to ping the endpoint.
     */
    Error = 2
}
/**
 * The JSON-formated output report from a ping operation.
 *
 * @see {PingResult}
 * @category Diagnostics
 */
export interface JsonPingReport {
    version: number;
    id: string;
    sdk: string;
    services: {
        [serviceType: string]: {
            latency_us: number;
            remote: string;
            local: string;
            id: string;
            state: string;
            namespace?: string;
            error?: string;
        }[];
    };
}
/**
 * The JSON-formated output report from a diagnostics operation.
 *
 * @see {DiagnosticsResult}
 * @category Diagnostics
 */
export interface JsonDiagnosticsReport {
    version: number;
    id: string;
    sdk: string;
    services: {
        [serviceType: string]: {
            last_activity_us?: number;
            remote: string;
            local: string;
            id: string;
            state: string;
            namespace?: string;
            details?: string;
        }[];
    };
}
/**
 * PingEndpoint represents a single endpoint in a ping result.
 *
 * @category Diagnostics
 */
export declare class PingEndpoint {
    /**
     * @internal
     */
    constructor(data: PingEndpoint);
    /**
     * The type of service this endpoint refers to.
     */
    type: ServiceType;
    /**
     * The unique identifier for this endpoint.
     */
    id: string;
    /**
     * The remote address of this endpoint.
     */
    remote: string;
    /**
     * The local address of this endpoint.
     */
    local: string;
    /**
     * The latency of the ping to the endpoint.
     */
    latency: number;
    /**
     * The current state of this endpoint.
     */
    state: PingState;
    /**
     * The bucket this endpoint is connected to.
     */
    bucket?: string;
    /**
     * Information about errors that occured during pinging.
     */
    error?: any;
}
/**
 * PingResult represents the output of a ping operation.
 *
 * @category Diagnostics
 */
export declare class PingResult {
    /**
     * @internal
     */
    constructor(data: {
        version: number;
        id: string;
        sdk: string;
        services: {
            [serviceType: string]: PingEndpoint[];
        };
    });
    /**
     * The version number of this report.
     */
    version: number;
    /**
     * The unique identifier for this report.
     */
    id: string;
    /**
     * The name of the SDK which generated this report.
     */
    sdk: string;
    /**
     * A list of service endpoints and their ping results.
     */
    services: {
        [serviceType: string]: PingEndpoint[];
    };
    /**
     * Returns a JSON formatted ping report.
     */
    toJSON(): JsonPingReport;
}
/**
 * @category Diagnostics
 */
export interface PingOptions {
    /**
     * A unique identifier for the report generated by this operation.
     */
    reportId?: string;
    /**
     * The services which should be pinged.
     */
    serviceTypes?: ServiceType[];
    /**
     * The name of the bucket to ping.
     */
    bucket?: string;
    /**
     * The timeout for this operation, represented in milliseconds.
     */
    timeout?: number;
}
/**
 * DiagnosticsEndpoint represents a single endpoint in a diagnostics
 * result.
 *
 * @category Diagnostics
 */
export declare class DiagnosticsEndpoint {
    /**
     * @internal
     */
    constructor(data: DiagnosticsEndpoint);
    /**
     * The type of service this entry represents.
     */
    type: ServiceType;
    /**
     * The unique identifier for this endpoint.
     */
    id: string;
    /**
     * The local address of this endpoint.
     */
    local: string;
    /**
     * The remote address of this endpoint.
     */
    remote: string;
    /**
     * The time in milliseconds since the last activity.
     */
    lastActivity: number;
    /**
     * The current state of this endpoint.
     */
    state: EndpointState;
    /**
     * The name of the bucket this endpoint is connected to.
     */
    bucket?: string;
    /**
     * Various additional details about the endpoint.
     */
    details?: any;
}
/**
 * DiagnosticsResult represents the output of a operation result.
 *
 * @category Diagnostics
 */
export declare class DiagnosticsResult {
    /**
     * @internal
     */
    constructor(data: {
        version: number;
        id: string;
        sdk: string;
        services: {
            [serviceType: string]: DiagnosticsEndpoint[];
        };
    });
    /**
     * The version number of this report.
     */
    version: number;
    /**
     * The unique identifier for this report.
     */
    id: string;
    /**
     * The name of the SDK which generated this report.
     */
    sdk: string;
    /**
     * A list of service endpoints and their diagnostic status.
     */
    services: {
        [serviceType: string]: DiagnosticsEndpoint[];
    };
    /**
     * Returns a JSON formatted diagnostics report.
     */
    toJSON(): JsonDiagnosticsReport;
}
/**
 * @category Diagnostics
 */
export interface DiagnosticsOptions {
    /**
     * A unique identifier for the report generated by this operation.
     */
    reportId?: string;
}
