import type { OwnerShipMeta } from './ownership';
import type { ContractSpecType } from './types';
export interface AnySpecContract {
    meta: OwnerShipMeta;
}
export declare const keyOfSpecContract: (spec: AnySpecContract) => string;
/** In-memory registry for PresentationSpec. */
export declare abstract class SpecContractRegistry<ContractType extends ContractSpecType, SpecContract extends AnySpecContract> {
    protected readonly contractType: ContractType;
    protected items: Map<string, SpecContract>;
    protected constructor(contractType: ContractType, items?: SpecContract[]);
    register(p: SpecContract): this;
    count(): number;
    list(): SpecContract[];
    get(key: string, version?: string): SpecContract | undefined;
    has(key: string, version?: string): boolean;
    /** Filter presentations by criteria. */
    filter(criteria: import('./registry-utils').RegistryFilter): SpecContract[];
    /** List presentations with specific tag. */
    listByTag(tag: string): SpecContract[];
    /** List presentations by owner. */
    listByOwner(owner: string): SpecContract[];
    /** Group presentations by key function. */
    groupBy(keyFn: import('./registry-utils').GroupKeyFn<SpecContract>): Map<string, SpecContract[]>;
    /** Get unique tags from all presentations. */
    getUniqueTags(): string[];
}
