import { NextFunction, Request, Response } from "express";
/** Logger interface */
export interface ILogger {
    /** Logs out a message */
    log: (message: string) => void;
}
/** Configuration interface for the middleware */
export interface IConfig {
    /** interval in milliseconds in which to check if a dependency is ready, default is 2000 */
    retryIntervalInMilliseconds?: number;
    /** maximum time in milliseconds to wait for all dependencies to be ready.  default 30000 */
    maximumWaitTimeForServiceReadinessInMilliseconds?: number;
    /** paths to still route traffic to even if dependencies are not yet ready, default empty array */
    whitelistedPaths?: string[];
    /** indicates whether dependency information should be logged out if dependencies fail to become ready */
    logOutDependenciesDataOnFailure?: boolean;
}
/** Dependency interface */
export interface IDependency {
    /** the name of the dependency */
    name: string;
    /** informational data about the dependency */
    data: {
        [key: string]: string;
    };
    /** indicates whether the dependency is ready */
    isReady: () => Promise<boolean>;
    /** indicates whether the dependency is healthy */
    isHealthy?: () => Promise<boolean>;
    /** indicates whether the dependency is critical */
    critical: boolean;
    /** interval in milliseconds in which to check if a dependency is ready, default is 2000 */
    retryIntervalInMilliseconds?: number;
}
/** Dependencies Health interface */
export interface IDependenciesHealth {
    /** indicates whether all dependencies are healthy */
    allDependenciesHealthy: boolean;
    /** indicates whether all critical dependencies are healthy */
    allCriticalDependenciesHealthy: boolean;
    /** health information about all dependencies */
    dependencies: IDependencyHealth[];
}
/** Dependency health interface */
export interface IDependencyHealth {
    /** the name of the dependency */
    name: string;
    /** informational data about the dependency */
    data: {
        [key: string]: string;
    };
    /** indicates whether the dependency is healthy using 'isHealthy' if defined otherwise 'isReady' */
    healthy: boolean;
    /** indicates whether the dependency is critical */
    critical: boolean;
}
/** Readiness middleware */
export interface ReadinessMiddleware {
    /** middleware function */
    (req: Request, res: Response, next: NextFunction): void;
}
/**
 * Creates the service readiness middleware
 * @param dependencies - Array of {IDependency} objects
 * @param config - Optional configuration for the middleware.  If not defined the DefaultConfig will be used
 */
export declare const createReadinessMiddleware: (dependencies: IDependency[], config?: IConfig) => ReadinessMiddleware;
/**
 * Checks the health of all dependencies
 * @param dependencies - Array of {IDependency} objects
 */
export declare const checkDependenciesHealth: (dependencies: IDependency[]) => Promise<IDependenciesHealth>;
/**
 * Set a logger
 * @param logger - {ILogger}
 */
export declare const setLogger: (logger: ILogger) => void;
/**
 * Returns a boolean indicating whether all critical dependencies are ready
 */
export declare const criticalDependenciesReady: () => Boolean;
/**
 * Removes any NodeJS.Timeout instances created by the middleware
 */
export declare const stopCheckingReadiness: () => void;
