import { alamos } from "@synnaxlabs/alamos";
import { type framer, type channel } from "@synnaxlabs/client";
import { TimeSpan, type TimeRange } from "@synnaxlabs/x";
import { type Cache } from './cache/cache';
import { ReadResponse } from './types';
export type ReadRemoteFunc = (tr: TimeRange, keys: channel.Keys) => Promise<framer.Frame>;
interface ReaderProps {
    /**
     * Function used to read remote data from the server. Used instead of
     * passing in a Synnax client directly to make testing easier.
     */
    readRemote: ReadRemoteFunc;
    /** Will read from and populate the given cache with fetched data. */
    cache: Cache;
    /**
     * Used to batch read request to the server to minimize traffic. Larger
     * values mean slower response times but less traffic. Smaller values mean faster
     * response times but more traffic.
     * @default TimeSpan.milliseconds(50)
     */
    batchDebounce?: TimeSpan;
    /** Used for logging, tracing, etc. */
    instrumentation?: alamos.Instrumentation;
}
/**
 * Reader is used for reading telemetry data from the Synnax cluster. See the documentation
 * in the README for more.
 */
export declare class Reader {
    private readonly props;
    private readonly debouncedRead;
    private readonly guarded;
    constructor(props: ReaderProps);
    /** Implements ReadClient. */
    read(tr: TimeRange, channels: channel.Keys): Promise<Record<channel.Key, ReadResponse>>;
    private batchRead;
}
export {};
