/**
 * Request headers
 */
export interface RequestHeaders {
    [header: string]: string | string[] | undefined;
    'accept-encoding'?: string | undefined;
    'if-match'?: string | undefined;
    'if-none-match'?: string | undefined;
    'if-modified-since'?: string | undefined;
    'if-unmodified-since'?: string | undefined;
    'range'?: string | undefined;
    'if-range'?: string | undefined;
}
/**
 * Response headers
 */
export interface ResponseHeaders {
    [header: string]: string | string[] | undefined;
    'Content-Encoding'?: string | undefined;
    'Last-Modified'?: string | undefined;
    'Cache-Control'?: string | undefined;
    'Content-Type'?: string | undefined;
    'ETag'?: string | undefined;
    'Accept-Ranges'?: string | undefined;
    'Content-Range'?: string | undefined;
    'Content-Length'?: string | undefined;
    'Vary'?: string | undefined;
    'Content-Disposition'?: string | undefined;
    'Allow'?: string | undefined;
}
/**
 * Range
 */
export declare class StreamRange {
    readonly start: number;
    readonly end: number;
    /**
     * StreamRange constructor
     * @param start - start index
     * @param end - end index
     */
    constructor(start: number, end: number);
}
/**
 * Uint8Array or StreamRange
 */
export type Uint8ArrayOrStreamRange = StreamRange | Uint8Array;
/**
 * Random bytes function returing promise
 */
export declare const randomBytes: (size: number) => Promise<Buffer>;
/**
 * Transform stats to etag
 * @param size - file size
 * @param mtimeMs - modification time in milliseconds
 * @param contentEncoding - content encoding
 * @param weak - generate weak etag
 * @returns etag
 */
export declare function statsToEtag(size: number, mtimeMs: number, contentEncoding?: string, weak?: boolean): string;
/**
 * Convert milliseconds to utc string
 * @param timeMs - time in milliseconds
 * @returns utc string
 */
export declare function millisecondsToUTCString(timeMs: number): string;
/**
 * Check if range is fresh
 * @param requestHeaders - request headers
 * @param etag - etag response header
 * @param lastModified - last modified response header
 * @returns true if range fresh
 */
export declare function isRangeFresh(requestHeaders: RequestHeaders, etag: string | false, lastModified: string | false): boolean;
/**
 * Format content-range header
 * @param rangeType - type of range
 * @param size - total size
 * @param range - range to use (empty = *)
 * @returns content-range header
 */
export declare function contentRange(rangeType: string, size: number, range?: StreamRange): string;
/**
 * Get accepted content encodings
 * @template T - encoding object type
 * @param acceptEncoding - Accept-Encoding header value
 * @param encodingPreferences - order of preference
 * @param identityEncodingPreference - identity encoding preference
 * @returns accepted content encodings
 */
export declare function acceptEncodings<T extends {
    order: number;
}>(acceptEncoding: string | undefined, encodingPreferences: ReadonlyMap<string, T>, identityEncodingPreference: T): readonly (readonly [string, T])[];
/**
 * Get fresh status (ETag, Last-Modified handling)
 * @param isGetOrHead - http method is GET or HEAD
 * @param requestHeaders - request headers
 * @param etag - etag response header
 * @param lastModified - last modified response header
 * @returns status code
 */
export declare function getFreshStatus(isGetOrHead: boolean, requestHeaders: RequestHeaders, etag: string | false, lastModified: string | false): 412 | 304 | 200;
