/**
 * @fileoverview An in-memory storage provider implementation.
 * Ideal for development, testing, or scenarios where persistence is not required.
 * Supports TTL (Time-To-Live) for entries and a configurable maximum entry count
 * to prevent unbounded memory growth.
 * @module src/storage/providers/inMemory/inMemoryProvider
 */
import type { IStorageProvider, ListOptions, ListResult, StorageOptions } from '../../../storage/core/IStorageProvider.js';
import type { RequestContext } from '../../../utils/internal/requestContext.js';
/** Configuration options for the in-memory storage provider. */
export interface InMemoryProviderOptions {
    /**
     * Maximum number of entries across all tenants before the provider
     * rejects new writes. When capacity is reached, a TTL sweep runs first
     * to reclaim expired entries. If still at capacity after the sweep, `set()`
     * throws `McpError(InternalError)`.
     *
     * @default 10_000
     */
    maxEntries?: number;
}
export declare class InMemoryProvider implements IStorageProvider {
    private readonly store;
    private readonly maxEntries;
    private entryCount;
    constructor(options?: InMemoryProviderOptions);
    /** Returns the total number of entries across all tenants. */
    get size(): number;
    private getTenantStore;
    /** Sweeps all tenant stores and removes expired entries, returning the count reclaimed. */
    private sweepExpired;
    /**
     * Ensures capacity for a new entry. If at limit, runs a TTL sweep first.
     * If still at capacity after sweep, throws.
     */
    private ensureCapacity;
    get<T>(tenantId: string, key: string, context: RequestContext): Promise<T | null>;
    set(tenantId: string, key: string, value: unknown, context: RequestContext, options?: StorageOptions): Promise<void>;
    delete(tenantId: string, key: string, context: RequestContext): Promise<boolean>;
    list(tenantId: string, prefix: string, context: RequestContext, options?: ListOptions): Promise<ListResult>;
    getMany<T>(tenantId: string, keys: string[], context: RequestContext): Promise<Map<string, T>>;
    setMany(tenantId: string, entries: Map<string, unknown>, context: RequestContext, options?: StorageOptions): Promise<void>;
    deleteMany(tenantId: string, keys: string[], context: RequestContext): Promise<number>;
    clear(tenantId: string, context: RequestContext): Promise<number>;
}
//# sourceMappingURL=inMemoryProvider.d.ts.map