import { EventTemplate, NostrEvent, UnsignedEvent } from "nostr-tools";
import { CommentBlueprint } from "./blueprints/comment.js";
import { DeleteBlueprint } from "./blueprints/delete.js";
import { NoteBlueprint } from "./blueprints/note.js";
import { ReactionBlueprint } from "./blueprints/reaction.js";
import { NoteReplyBlueprint } from "./blueprints/reply.js";
import { ShareBlueprint } from "./blueprints/share.js";
import { ModifyTagsOptions } from "./operations/index.js";
import { EventBlueprint, EventFactoryContext, EventOperation } from "./types.js";
export type EventFactoryTemplate = {
    kind: number;
    content?: string;
    tags?: string[][];
    created_at?: number;
};
/** Creates an event using a template, context, and a set of operations */
export declare function build(template: EventFactoryTemplate, context: EventFactoryContext, ...operations: (EventOperation | undefined)[]): Promise<EventTemplate>;
/** Creates a blueprint function with operations */
export declare function blueprint(kind: number, ...operations: (EventOperation | undefined)[]): EventBlueprint;
/** Creates an event from a context and a blueprint */
export declare function create<Args extends Array<any>, T extends EventTemplate | UnsignedEvent | NostrEvent>(context: EventFactoryContext, blueprintConstructor: (...args: Args) => EventBlueprint<T>, ...args: Args): Promise<T>;
/** Modifies an event using a context and a set of operations */
export declare function modify(event: EventTemplate | UnsignedEvent | NostrEvent, context: EventFactoryContext, ...operations: (EventOperation | undefined)[]): Promise<EventTemplate>;
export declare class EventFactory {
    context: EventFactoryContext;
    constructor(context?: EventFactoryContext);
    /** Build an event template with operations */
    build(template: EventFactoryTemplate, ...operations: (EventOperation | undefined)[]): Promise<EventTemplate>;
    /** Create an event from a blueprint */
    create<Args extends Array<any>, T extends EventTemplate | UnsignedEvent | NostrEvent>(blueprintConstructor: (...args: Args) => EventBlueprint<T>, ...args: Args): Promise<T>;
    /** Modify an existing event with operations and updated the created_at */
    modify(draft: EventTemplate | UnsignedEvent | NostrEvent, ...operations: (EventOperation | undefined)[]): Promise<EventTemplate>;
    /** Modify a lists public and hidden tags and updated the created_at */
    modifyTags(event: EventTemplate | UnsignedEvent | NostrEvent, tagOperations?: ModifyTagsOptions, eventOperations?: EventOperation | (EventOperation | undefined)[]): Promise<EventTemplate>;
    /** Attaches the signers pubkey to an event template */
    stamp(draft: EventTemplate | UnsignedEvent): Promise<UnsignedEvent>;
    /** Signs a event template with the signer */
    sign(draft: EventTemplate | UnsignedEvent): Promise<NostrEvent>;
    /** Creates a short text note */
    note(...args: Parameters<typeof NoteBlueprint>): Promise<EventTemplate>;
    /** Create a NIP-22 comment */
    comment(...args: Parameters<typeof CommentBlueprint>): Promise<EventTemplate>;
    /** Creates a short text note reply */
    noteReply(...args: Parameters<typeof NoteReplyBlueprint>): Promise<EventTemplate>;
    /** Creates a reaction event */
    reaction(...args: Parameters<typeof ReactionBlueprint>): Promise<EventTemplate>;
    /** Creates a delete event */
    delete(...args: Parameters<typeof DeleteBlueprint>): Promise<EventTemplate>;
    /** Creates a share event */
    share(...args: Parameters<typeof ShareBlueprint>): Promise<EventTemplate>;
}
