import type { GenericMessage } from '../types/message-types.js';
import type { PermissionGrant } from '../protocols/permission-grant.js';
import type { ProtocolDefinition } from '../types/protocols-types.js';
import type { RecordsWrite } from '../interfaces/records-write.js';
import type { RecordsWriteMessage } from '../types/records-types.js';
import type { ValidationStateReader } from '../types/validation-state-reader.js';
/**
 * One recorded validation-time state read: the reader method invoked.
 */
export type RecordedValidationRead = {
    method: keyof ValidationStateReader;
};
/**
 * A `ValidationStateReader` decorator that records every read before delegating to the wrapped
 * reader. Used by the replay-basis closure tests (and harnesses) to assert that admission
 * performs no validation read outside the reader surface, and to keep recorded read-traces as a
 * regression artifact when validation reads change.
 *
 * Inject via `DwnConfig.instrumentValidationStateReader`.
 */
export declare class RecordingValidationStateReader implements ValidationStateReader {
    private readonly inner;
    private readonly recordedReads;
    constructor(inner: ValidationStateReader);
    /** All reads recorded since construction or the last `clearRecordedReads()`. */
    get reads(): RecordedValidationRead[];
    /** Clears the recorded reads, e.g. between closure-test scenarios. */
    clearRecordedReads(): void;
    /** @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>;
}
//# sourceMappingURL=recording-validation-state-reader.d.ts.map