import { NextFunction, Request, Response } from "express";
export type UriSet = Set<string>;
export type MethodMap = Map<string, UriSet>;
export interface TripwireConfigFileEntry {
    name: string;
    uris: string[];
}
export interface TripwireConfigFile {
    prefixes: string[];
    strings: string[];
    methods: TripwireConfigFileEntry[];
}
export interface TripwireConfig {
    prefixes: string[];
    strings: string[];
    methods: MethodMap;
}
export declare enum TripwireIncidentType {
    MALFORMED_REQUEST = "malformed-request",
    PREFIX_MATCH = "uri-prefix-match",
    SUBSTRING_MATCH = "uri-substring-match",
    PROHIBITED_METHOD = "prohibited-method"
}
export interface ITripwireIncident {
    type: TripwireIncidentType;
    matching?: string;
}
declare class TripwireService {
    cacheDirectory: string;
    configuration?: TripwireConfig;
    updateTimerId?: NodeJS.Timeout;
    start(): Promise<void>;
    stop(): Promise<void>;
    middleware(): (req: Request, _res: Response, next: NextFunction) => Promise<void>;
    processError(error: Error, req: Request, res: Response): Promise<void>;
    loadConfiguration(): Promise<void>;
    fetchConfiguration(): Promise<TripwireConfigFile | undefined>;
    loadConfigurationFile(): Promise<TripwireConfigFile | undefined>;
    prepareCacheDirectory(): Promise<void>;
    requestReview(error: Error, req: Request, res: Response): Promise<void>;
    reportIncident(req: Request, incident: ITripwireIncident): Promise<void>;
}
declare const _default: TripwireService;
export default _default;
