export interface GrpcConfigurationProps {
    /**
     * number of milliseconds the client is willing to wait for an RPC to complete before it is terminated
     * with a DeadlineExceeded error.
     */
    deadlineMillis: number;
    /**
     * the maximum amount of memory, in megabytes, that a session is allowed to consume.  Sessions that consume
     * more than this amount will return a ResourceExhausted error.
     */
    maxSessionMemoryMb: number;
    /**
     * The number of internal clients a cache client will create to communicate with Momento. More of them allows
     * more concurrent requests, at the cost of more open connections and the latency of setting up each client.
     */
    numClients?: number;
    /**
     * The maximum number of concurrent requests that can be made to the server.
     * This limit is independent of the number of internal clients, meaning this limit is the maximum
     * number of requests that will be made concurrently across all of the internal clients.
     * If this is not set, it will default to the defaultRequestConcurrencyLimit.
     */
    maxConcurrentRequests?: number;
    /**
     * Indicates if it permissible to send keepalive pings from the client without any outstanding streams.
     *
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     */
    keepAlivePermitWithoutCalls?: number;
    /**
     * After waiting for a duration of this time, if the keepalive ping sender does not receive the ping ack,
     * it will close the transport.
     *
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     */
    keepAliveTimeoutMs?: number;
    /**
     * After a duration of this time the client/server pings its peer to see if the transport is still alive.
     *
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     */
    keepAliveTimeMs?: number;
    /**
     * The maximum message length the client can send to the server.  If the client attempts to send a message larger than
     * this size, it will result in a RESOURCE_EXHAUSTED error.
     */
    maxSendMessageLength?: number;
    /**
     * The maximum message length the client can receive from the server.  If the server attempts to send a message larger than
     * this size, it will result in a RESOURCE_EXHAUSTED error.
     */
    maxReceiveMessageLength?: number;
}
/**
 * Encapsulates gRPC configuration tunables.
 * @export
 * @interface GrpcConfiguration
 */
export interface GrpcConfiguration {
    /**
     * @returns {number} number of milliseconds the client is willing to wait for an RPC to complete before it is terminated
     *    with a DeadlineExceeded error.
     */
    getDeadlineMillis(): number;
    /**
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     *
     * @returns {number} 0 or 1, if it is permissible to send a keepalive/ping without any outstanding calls.
     */
    getKeepAlivePermitWithoutCalls(): number | undefined;
    /**
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     *
     * @returns {number} the time to wait for a response from a keepalive or ping.
     */
    getKeepAliveTimeoutMS(): number | undefined;
    /**
     * NOTE: keep-alives are very important for long-lived server environments where there may be periods of time
     * when the connection is idle. However, they are very problematic for lambda environments where the lambda
     * runtime is continuously frozen and unfrozen, because the lambda may be frozen before the "ACK" is received
     * from the server. This can cause the keep-alive to timeout even though the connection is completely healthy.
     * Therefore, keep-alives should be disabled in lambda and similar environments.
     *
     * @returns {number} the interval at which to send the keepalive or ping.
     */
    getKeepAliveTimeMS(): number | undefined;
    /**
     * Copy constructor for overriding the client-side deadline
     * @param {number} deadlineMillis
     * @returns {GrpcConfiguration} a new GrpcConfiguration with the specified client-side deadline
     */
    withDeadlineMillis(deadlineMillis: number): GrpcConfiguration;
    /**
     * @returns {number} the maximum amount of memory, in megabytes, that a session is allowed to consume.  Sessions that consume
     *    more than this amount will return a ResourceExhausted error.
     */
    getMaxSessionMemoryMb(): number;
    /**
     * Copy constructor for overriding the max session memory
     * @param {number} maxSessionMemoryMb the desired maximum amount of memory, in megabytes, to allow a client session to consume
     * @returns {GrpcConfiguration} a new GrpcConfiguration with the specified maximum memory
     */
    withMaxSessionMemoryMb(maxSessionMemoryMb: number): GrpcConfiguration;
    /**
     * The maximum message length the client can send to the server.  If the client attempts to send a message larger than
     * this size, it will result in a RESOURCE_EXHAUSTED error.
     */
    getMaxSendMessageLength(): number | undefined;
    /**
     * Copy constructor for overriding the max send message length.
     * @param maxSendMessageLength the desired maximum message length (in bytes) the client can send to the server.
     */
    withMaxSendMessageLength(maxSendMessageLength: number): GrpcConfiguration;
    /**
     * The maximum message length the client can receive from the server.  If the server attempts to send a message larger than
     * this size, it will result in a RESOURCE_EXHAUSTED error.
     */
    getMaxReceiveMessageLength(): number | undefined;
    /**
     * Copy constructor for overriding the max receive message length.
     * @param maxReceiveMessageLength the desired maximum message length (in bytes) the client can receive from the server.
     */
    withMaxReceiveMessageLength(maxReceiveMessageLength: number): GrpcConfiguration;
    /**
     * @returns {number} the number of internal clients a cache client will create to communicate with Momento. More of
     * them will allow for more concurrent requests.
     */
    getNumClients(): number;
    /**
     * Copy constructor for overriding the number of clients to create
     * @param {number} numClients the number of internal clients to create
     * @returns {GrpcConfiguration} a new GrpcConfiguration with the specified number of clients
     */
    withNumClients(numClients: number): GrpcConfiguration;
    /**
     * returns the maximum number of concurrent requests that can be made to the server.
     */
    getMaxConcurrentRequests(): number | undefined;
    /**
     * Copy constructor for overriding the maximum number of concurrent requests
     * @param {number} maxConcurrentRequests the maximum number of concurrent requests that can be made to the server
     * @returns {GrpcConfiguration} a new GrpcConfiguration with the specified maximum number of concurrent requests
     */
    withMaxConcurrentRequests(maxConcurrentRequests: number): GrpcConfiguration;
}
