import { RetryStrategy } from './retry/retry-strategy';
import { Middleware } from './middleware/middleware';
import { MomentoLoggerFactory, TransportStrategy } from '../';
import { ReadConcern } from '@gomomento/sdk-core';
import { CompressionStrategy } from './compression/compression';
export interface ConfigurationProps {
    /**
     * Configures logging verbosity and format
     */
    loggerFactory: MomentoLoggerFactory;
    /**
     * Configures how and when failed requests will be retried
     */
    retryStrategy: RetryStrategy;
    /**
     * Configures low-level options for network interactions with the Momento service
     */
    transportStrategy: TransportStrategy;
    /**
     * Configures middleware functions that will wrap each request
     */
    middlewares: Middleware[];
    /**
     * Configures whether the client should return a Momento Error object or throw an exception when an error occurs.
     */
    throwOnErrors: boolean;
    /**
     * Configures the read concern for the client.
     */
    readConcern: ReadConcern;
    /**
     * Configures compression capabilities for the client.
     */
    compression: CompressionStrategy | undefined;
}
/**
 * Configuration options for Momento CacheClient.
 *
 * @export
 * @interface Configuration
 */
export interface Configuration {
    /**
     * @returns {MomentoLoggerFactory} the current configuration options for logging verbosity and format
     */
    getLoggerFactory(): MomentoLoggerFactory;
    /**
     * @returns {RetryStrategy} the current configuration options for how and when failed requests will be retried
     */
    getRetryStrategy(): RetryStrategy;
    /**
     * Copy constructor for overriding RetryStrategy
     * @param {RetryStrategy} retryStrategy
     * @returns {Configuration} a new Configuration object with the specified RetryStrategy
     */
    withRetryStrategy(retryStrategy: RetryStrategy): Configuration;
    /**
     * @returns {TransportStrategy} the current configuration options for wire interactions with the Momento service
     */
    getTransportStrategy(): TransportStrategy;
    /**
     * Copy constructor for overriding TransportStrategy
     * @param {TransportStrategy} transportStrategy
     * @returns {Configuration} a new Configuration object with the specified TransportStrategy
     */
    withTransportStrategy(transportStrategy: TransportStrategy): Configuration;
    /**
     * Shorthand copy constructor for overriding TransportStrategy.GrpcStrategy.NumClients. This will
     * allow you to control the number of TCP connections that the client will open to the server. Usually
     * you should stick with the default value from your pre-built configuration, but it can be valuable
     * to increase this value in order to ensure more evenly distributed load on Momento servers.
     *
     * @param {number} numConnections
     * @returns {Configuration} a new Configuration object with the updated TransportStrategy
     */
    withNumConnections(numConnections: number): Configuration;
    /**
     * Shorthand copy constructor for overriding TransportStrategy.GrpcConfig message lengths. This will
     * allow you to adjust the maximum message length the client can send and receive from the server.
     *
     * This is only relevant if you have requested a service limit increase beyond the default value.
     * @param {number} maxMessageLength - the max message length (in bytes) the client can send and receive
     * @returns {Configuration} a new Configuration object with the updated TransportStrategy
     */
    withMaxMessageLength(maxMessageLength: number): Configuration;
    /**
     * @returns {Middleware[]} the middleware functions that will wrap each request
     */
    getMiddlewares(): Middleware[];
    /**
     * Copy constructor for overriding Middlewares
     * @param {Middleware[]} middlewares
     * @returns {Configuration} a new Configuration object with the specified Middlewares
     */
    withMiddlewares(middlewares: Middleware[]): Configuration;
    /**
     * Copy constructor that adds a single middleware to the existing middlewares
     * @param {Middleware} middleware
     * @returns {Configuration} a new Configuration object with the specified Middleware appended to the list of existing Middlewares
     */
    addMiddleware(middleware: Middleware): Configuration;
    /**
     * Convenience copy constructor that updates the client-side timeout setting in the TransportStrategy
     * @param {number} clientTimeoutMillis
     * @returns {Configuration} a new Configuration object with its TransportStrategy updated to use the specified client timeout
     */
    withClientTimeoutMillis(clientTimeoutMillis: number): Configuration;
    /**
     * @returns {boolean} Configures whether the client should return a Momento Error object or throw an exception when an
     * error occurs. By default, this is set to false, and the client will return a Momento Error object on errors. Set it
     * to true if you prefer for exceptions to be thrown.
     */
    getThrowOnErrors(): boolean;
    /**
     * Copy constructor for configuring whether the client should return a Momento Error object or throw an exception when an
     * error occurs. By default, this is set to false, and the client will return a Momento Error object on errors. Set it
     * to true if you prefer for exceptions to be thrown.
     * @param {boolean} throwOnErrors
     * @returns {Configuration} a new Configuration object with the specified throwOnErrors setting
     */
    withThrowOnErrors(throwOnErrors: boolean): Configuration;
    /**
     * @returns {ReadConcern} the current configuration option for read consistency
     */
    getReadConcern(): ReadConcern;
    /**
     * Copy constructor for overriding ReadConcern
     * @param {ReadConcern} readConcern
     * @returns {Configuration} a new Configuration object with the specified ReadConcern
     */
    withReadConcern(readConcern: ReadConcern): Configuration;
    /**
     * @returns {ICompression} the current configuration settings for compression
     */
    getCompressionStrategy(): CompressionStrategy | undefined;
    /**
     * Copy constructor for overriding compression settings
     * @param {ICompression} compression
     * @returns {Configuration} a new Configuration object with the specified compression settings
     */
    withCompressionStrategy(compression: CompressionStrategy): Configuration;
    /**
     * @returns {boolean} whether the client has a compression strategy configured.
     */
    hasCompressionStrategy(): boolean;
}
export declare class CacheConfiguration implements Configuration {
    private readonly loggerFactory;
    private readonly retryStrategy;
    private readonly transportStrategy;
    private readonly middlewares;
    private readonly throwOnErrors;
    private readonly readConcern;
    private readonly compression;
    constructor(props: ConfigurationProps);
    getLoggerFactory(): MomentoLoggerFactory;
    getRetryStrategy(): RetryStrategy;
    withRetryStrategy(retryStrategy: RetryStrategy): Configuration;
    getTransportStrategy(): TransportStrategy;
    withTransportStrategy(transportStrategy: TransportStrategy): Configuration;
    withNumConnections(numConnections: number): Configuration;
    withMaxMessageLength(maxMessageLength: number): Configuration;
    getMiddlewares(): Middleware[];
    withMiddlewares(middlewares: Middleware[]): Configuration;
    addMiddleware(middleware: Middleware): Configuration;
    withClientTimeoutMillis(clientTimeout: number): Configuration;
    getThrowOnErrors(): boolean;
    withThrowOnErrors(throwOnErrors: boolean): Configuration;
    getReadConcern(): ReadConcern;
    withReadConcern(readConcern: ReadConcern): Configuration;
    getCompressionStrategy(): CompressionStrategy | undefined;
    withCompressionStrategy(compressionStrategy: CompressionStrategy): Configuration;
    hasCompressionStrategy(): boolean;
}
