import { Feature } from './flat-geobuf/feature.js';
import type { HeaderMeta } from './header-meta.js';
import { type Rect } from './packedrtree.js';
interface FeatureWithId {
    id: number;
    feature: Feature;
}
export declare class HttpReader {
    private headerClient;
    header: HeaderMeta;
    private headerLength;
    private indexLength;
    private nocache;
    private headers;
    constructor(headerClient: BufferedHttpRangeClient, header: HeaderMeta, headerLength: number, indexLength: number, nocache: boolean, headers?: HeadersInit);
    static open(url: string, nocache: boolean, headers?: HeadersInit): Promise<HttpReader>;
    selectBbox(rect: Rect): AsyncGenerator<FeatureWithId, void, unknown>;
    lengthBeforeTree(): number;
    lengthBeforeFeatures(): number;
    buildFeatureClient(nocache: boolean): BufferedHttpRangeClient;
    readFeatureBatch(batch: [number, number, number][], nocache: boolean): AsyncGenerator<FeatureWithId, void, unknown>;
    readFeature(featureClient: BufferedHttpRangeClient, featureOffset: number, minFeatureReqLength: number): Promise<Feature>;
}
declare class BufferedHttpRangeClient {
    httpClient: HttpRangeClient;
    bytesEverUsed: number;
    bytesEverFetched: number;
    private buffer;
    private head;
    constructor(source: string | HttpRangeClient, nocache: boolean, headers?: HeadersInit);
    getRange(start: number, length: number, minReqLength: number, purpose: string): Promise<ArrayBuffer>;
    logUsage(purpose: string): void;
}
declare class HttpRangeClient {
    url: string;
    nocache: boolean;
    headers: HeadersInit;
    requestsEverMade: number;
    bytesEverRequested: number;
    constructor(url: string, nocache: boolean, headers?: HeadersInit);
    getRange(begin: number, length: number, purpose: string): Promise<ArrayBuffer>;
}
export {};
