import type { CoreProtocolRegistry } from './core-protocol.js';
import type { DataStore } from '../types/data-store.js';
import type { GenericMessage } from '../types/message-types.js';
import type { MessageStore } from '../types/message-store.js';
import type { ValidationStateReader } from '../types/validation-state-reader.js';
import type { RecordsWriteMessage } from '../types/records-types.js';
import type { ProtocolDefinition } from '../types/protocols-types.js';
import { PermissionGrant } from '../protocols/permission-grant.js';
import { RecordsWrite } from '../interfaces/records-write.js';
/**
 * The store-backed `ValidationStateReader` — the single place where validation-time state reads
 * touch the `MessageStore`/`DataStore`.
 */
export declare class StoreValidationStateReader implements ValidationStateReader {
    private readonly messageStore;
    private readonly dataStore;
    private readonly coreProtocols?;
    constructor(input: {
        messageStore: MessageStore;
        dataStore: DataStore;
        coreProtocols?: CoreProtocolRegistry;
    });
    /** @inheritdoc */
    fetchInitialRecordsWrite(tenant: string, recordId: string): Promise<RecordsWrite | undefined>;
    /** @inheritdoc */
    fetchInitialWrite(tenant: string, recordId: string): Promise<RecordsWriteMessage | undefined>;
    /** @inheritdoc */
    constructRecordChain(tenant: string, descendantRecordId: string | undefined): Promise<RecordsWriteMessage[]>;
    /** @inheritdoc */
    fetchParentRecord(input: {
        tenant: string;
        parentProtocolUri: string;
        parentId: string;
    }): Promise<RecordsWriteMessage | undefined>;
    /** @inheritdoc */
    hasMatchingRoleRecord(input: {
        tenant: string;
        protocol: string;
        protocolPath: string;
        recipient: string;
        contextIdPrefix?: string;
    }): Promise<boolean>;
    /** @inheritdoc */
    queryLatestRoleRecords(input: {
        tenant: string;
        protocol: string;
        protocolPath: string;
        recipient: string;
        contextIdPrefix?: string;
    }): Promise<RecordsWriteMessage[]>;
    /** @inheritdoc */
    queryAudienceEpochs(input: {
        tenant: string;
        protocol: string;
        contextId: string;
        role: string;
        epoch: number;
        keyId?: string;
    }): Promise<RecordsWriteMessage[]>;
    /** @inheritdoc */
    fetchGrant(tenant: string, permissionGrantId: string): Promise<PermissionGrant>;
    /** @inheritdoc */
    fetchOldestGrantRevocation(tenant: string, permissionGrantId: string): Promise<GenericMessage | undefined>;
    /** @inheritdoc */
    fetchNewestRecordsWrite(tenant: string, recordId: string): Promise<RecordsWriteMessage>;
    /** @inheritdoc */
    fetchProtocolDefinition(tenant: string, protocolUri: string, messageTimestamp?: string): Promise<ProtocolDefinition>;
    /** @inheritdoc */
    fetchLatestSquashRecordAtScope(input: {
        tenant: string;
        protocol: string;
        protocolPath: string;
        contextIdPrefix?: string;
    }): Promise<RecordsWriteMessage | undefined>;
    /** @inheritdoc */
    hasStoredData(tenant: string, recordId: string, dataCid: string): Promise<boolean>;
    /**
     * Checks whether a `RecordsDelete` tombstone for the given record is locally present.
     * Retained initial writes can prove immutable parent/role facts, but a tombstone still wins.
     */
    private recordHasLocalTombstone;
    /**
     * Constructs the role-record selector filter shared by the invoked-role lookup and the
     * duplicate-role-recipient uniqueness check.
     */
    private static constructRoleRecordFilter;
}
//# sourceMappingURL=validation-state-reader.d.ts.map