import type { RepresentationMetadata } from '../http/representation/RepresentationMetadata';
/**
 * The conditions of an HTTP conditional request.
 */
export interface Conditions {
    /**
     * Valid if matching any of the given ETags.
     */
    matchesETag?: string[];
    /**
     * Valid if not matching any of the given ETags.
     */
    notMatchesETag?: string[];
    /**
     * Valid if modified since the given date.
     */
    modifiedSince?: Date;
    /**
     * Valid if not modified since the given date.
     */
    unmodifiedSince?: Date;
    /**
     * Checks validity based on the given metadata.
     * @param metadata - Metadata of the representation. Undefined if the resource does not exist.
     * @param strict - How to compare the ETag related headers.
     *                 If true, exact string matching will be used to compare with the ETag for the given metadata.
     *                 If false, it will take into account that content negotiation might still happen
     *                 which can change the ETag.
     */
    matchesMetadata: (metadata?: RepresentationMetadata, strict?: boolean) => boolean;
}
/**
 * Generates an ETag based on the last modified date of a resource.
 * @param metadata - Metadata of the resource.
 *
 * @returns the generated ETag. Undefined if no last modified date was found.
 */
export declare function getETag(metadata: RepresentationMetadata): string | undefined;
/**
 * Validates whether 2 ETags correspond to the same state of a resource,
 * independent of the representation the ETags correspond to.
 * Assumes ETags are made with the {@link getETag} function.
 */
export declare function sameResourceState(eTag1: string, eTag2: string): boolean;
