import { EncryptionMethod } from "./encrypted-content.js";
import { HiddenContentSigner, UnlockedHiddenContent } from "./hidden-content.js";
/** Symbol for caching hidden tags. */
export declare const HiddenTagsSymbol: unique symbol;
/** Type for events with unlocked hidden tags */
export type UnlockedHiddenTags = UnlockedHiddenContent & {
    [HiddenTagsSymbol]: string[][];
};
/** Various event kinds that can have hidden tags */
export declare const HiddenTagsKinds: Set<number>;
/** Checks if an event can have hidden tags */
export declare function canHaveHiddenTags(kind: number): boolean;
/** Sets the type of encryption to use for hidden tags on a kind */
export declare function setHiddenTagsEncryptionMethod(kind: number, method: EncryptionMethod): number;
/** Checks if an event has hidden tags */
export declare function hasHiddenTags<T extends {
    kind: number;
    content: string;
}>(event: T): boolean;
/** Returns either nip04 or nip44 encryption method depending on list kind */
export declare function getHiddenTagsEncryptionMethods(kind: number, signer: HiddenContentSigner): import("./encrypted-content.js").EncryptionMethods;
/** Checks if the hidden tags are locked and casts it to the {@link UnlockedHiddenTags} type */
export declare function isHiddenTagsUnlocked<T extends {
    kind: number;
}>(event: T): event is T & UnlockedHiddenTags;
/** Returns the hidden tags for an event if they are unlocked */
export declare function getHiddenTags<T extends {
    kind: number;
} & UnlockedHiddenTags>(event: T): string[][];
export declare function getHiddenTags<T extends {
    kind: number;
}>(event: T): string[][] | undefined;
/**
 * Decrypts the private list
 * @param event The list event to decrypt
 * @param signer A signer to use to decrypt the tags
 * @param override The encryption method to use instead of the default
 * @throws
 */
export declare function unlockHiddenTags<T extends {
    kind: number;
    pubkey: string;
    content: string;
}>(event: T, signer: HiddenContentSigner, override?: EncryptionMethod): Promise<string[][]>;
/**
 * Sets the hidden tags on an event and updates it if its part of an event store
 * @throws If the event kind does not support hidden tags
 */
export declare function setHiddenTagsCache<T extends {
    kind: number;
}>(event: T, tags: string[][]): void;
/** Clears the cached hidden tags on an event */
export declare function lockHiddenTags<T extends object>(event: T): void;
