import type { MessageStore } from '../types/message-store.js';
import type { RecordsWriteMessage } from '../types/records-types.js';
import type { ValidationStateReader } from '../types/validation-state-reader.js';
import type { Filter, PaginationCursor } from '../types/query-types.js';
import type { MessageSort, Pagination } from '../types/message-types.js';
type RecordLimitOccupancyDependencies = {
    messageStore: MessageStore;
    validationStateReader: ValidationStateReader;
};
type RecordLimitOccupancyQueryInput = RecordLimitOccupancyDependencies & {
    tenant: string;
    filters: Filter[];
    messageTimestamp: string;
    messageSort?: MessageSort;
    pagination?: Pagination;
};
/**
 * Queries records with bounded `$recordLimit` occupancy projection when every limited filter targets one concrete scope.
 *
 * Broad filters keep the store's native query path. Projecting those without a store-level grouping primitive would require
 * scanning the full matching set, which is worse than leaving them unprojected until a bounded broad-query strategy exists.
 */
export declare function queryRecordsWithRecordLimitOccupancy(input: RecordLimitOccupancyQueryInput): Promise<{
    messages: RecordsWriteMessage[];
    cursor?: PaginationCursor;
}>;
/**
 * Counts records with bounded `$recordLimit` occupancy projection when every limited filter targets one concrete scope.
 */
export declare function countRecordsWithRecordLimitOccupancy(input: Omit<RecordLimitOccupancyQueryInput, 'pagination'>): Promise<number>;
/**
 * Returns true when the latest RecordsWrite is visible under the `$recordLimit` projection.
 */
export declare function isRecordLimitOccupant(input: RecordLimitOccupancyDependencies & {
    tenant: string;
    message: RecordsWriteMessage;
    messageTimestamp: string;
}): Promise<boolean>;
export {};
//# sourceMappingURL=record-limit-occupancy.d.ts.map