/**
 * Metadata structure for communication between middleware components
 * This information is carried along with requests and responses to coordinate actions
 */
interface MiddlewareMetadata {
    /**
     * Rate limit information
     */
    rateLimit?: {
        /**
         * Whether the request has been queued by rate limit middleware
         */
        wasQueued?: boolean;
        /**
         * Remaining requests in the current window
         */
        remaining?: number;
        /**
         * When the rate limit window will reset (epoch ms)
         */
        resetAt?: number;
        /**
         * Maximum requests allowed per window
         */
        limit?: number;
    };
    /**
     * Retry information
     */
    retry?: {
        /**
         * Whether this is a retry attempt
         */
        isRetry?: boolean;
        /**
         * Current attempt number (1-based)
         */
        attemptNumber?: number;
        /**
         * Maximum number of attempts (including the initial attempt)
         */
        maxAttempts?: number;
        /**
         * Whether the rate limit middleware should be skipped for this retry
         * Used to avoid double-queueing when retrying rate-limited requests
         */
        skipRateLimit?: boolean;
    };
    /**
     * Authentication information
     */
    auth?: {
        /**
         * Whether the token was refreshed for this request
         */
        tokenRefreshed?: boolean;
    };
    /**
     * Custom metadata for extension middleware
     */
    [key: string]: any;
}
/**
 * Gets middleware metadata from a Request or Response
 * Creates an empty object if no metadata exists yet
 */
export declare function getMetadata(obj: Request | Response): MiddlewareMetadata;
/**
 * Creates a new Request with the metadata from the original
 * Useful when you need to clone a request but maintain its metadata
 */
export declare function cloneRequestWithMetadata(req: Request): Request;
export {};
