import { Buffer } from 'buffer';
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';
import TempGzipFile from './tempGzipFile.cjs';

type Request = {
    timestamp: number;
    method: string;
    path?: string;
    url: string;
    headers: [string, string][];
    size?: number;
    consumer?: string;
    body?: Buffer;
};
type Response = {
    statusCode: number;
    responseTime: number;
    headers: [string, string][];
    size?: number;
    body?: Buffer;
};
type RequestLoggingConfig = {
    enabled: boolean;
    logQueryParams: boolean;
    logRequestHeaders: boolean;
    logRequestBody: boolean;
    logResponseHeaders: boolean;
    logResponseBody: boolean;
    logException: boolean;
    maskQueryParams: RegExp[];
    maskHeaders: RegExp[];
    maskRequestBodyCallback?: (request: Request) => Buffer | null | undefined;
    maskResponseBodyCallback?: (request: Request, response: Response) => Buffer | null | undefined;
    excludePaths: RegExp[];
    excludeCallback?: (request: Request, response: Response) => boolean;
};
declare class RequestLogger {
    config: RequestLoggingConfig;
    enabled: boolean;
    suspendUntil: number | null;
    private pendingWrites;
    private currentFile;
    private files;
    private maintainIntervalId?;
    private lock;
    constructor(config?: Partial<RequestLoggingConfig>);
    private shouldExcludePath;
    private shouldExcludeUserAgent;
    private shouldMaskQueryParam;
    private shouldMaskHeader;
    private hasSupportedContentType;
    isSupportedContentType(contentType?: string | null): boolean;
    private maskQueryParams;
    private maskHeaders;
    logRequest(request: Request, response: Response, error?: Error): void;
    writeToFile(): Promise<void>;
    getFile(): TempGzipFile | undefined;
    retryFileLater(file: TempGzipFile): void;
    rotateFile(): Promise<void>;
    maintain(): Promise<void>;
    clear(): Promise<void>;
    close(): Promise<void>;
}
declare function convertHeaders(headers: Headers | IncomingHttpHeaders | OutgoingHttpHeaders | Record<string, string | string[] | number | undefined>): [string, string][];
declare function convertBody(body: any, contentType?: string | null): Buffer<any> | undefined;

export { type Request, type RequestLoggingConfig, type Response, convertBody, convertHeaders, RequestLogger as default };
