import { EventEmitter } from './emitter.js';
import { EscrowSigner } from './signer.js';
import { NostrStore } from './store.js';
import { StoreConfig } from '../types.js';
import { EscrowContract } from './contract.js';
import { EscrowClient } from './client.js';
import { NostrSocket } from './socket.js';
import { DraftData, MemberData, ProgramQuery, ProposalData, RolePolicy } from '../../types/index.js';
export declare class DraftSession extends EventEmitter<{
    'endorse': string;
    'error': Error;
    'join': DraftSession;
    'leave': DraftSession;
    'members': MemberData[];
    'proposal': ProposalData;
    'ready': DraftSession;
    'roles': RolePolicy[];
    'signatures': string[];
    'update': DraftSession;
    'publish': string;
}> {
    readonly _signer: EscrowSigner;
    readonly _socket: NostrSocket;
    readonly _store: NostrStore<DraftData>;
    constructor(signer: EscrowSigner, config?: Partial<StoreConfig<DraftData>>);
    get data(): DraftData;
    get members(): MemberData[];
    get proposal(): ProposalData;
    get prop_id(): string;
    get pubkey(): string;
    get is_endorsed(): boolean;
    get is_full(): boolean;
    get is_member(): boolean;
    get is_moderated(): boolean;
    get is_moderator(): boolean;
    get is_ready(): boolean;
    get is_valid(): boolean;
    get roles(): RolePolicy[];
    get signatures(): string[];
    get signer(): EscrowSigner;
    endorse: {
        exists: () => boolean;
        sign: () => Promise<NostrStore<DraftData>>;
        verify: () => boolean;
    };
    membership: {
        claim: () => import("../types.js").Membership;
        create: (policy: RolePolicy, index?: number | undefined) => Promise<NostrStore<DraftData>>;
        exists: () => boolean;
        join: (policy: RolePolicy, index?: number | undefined) => Promise<NostrStore<DraftData>>;
        leave: () => Promise<NostrStore<DraftData>> | undefined;
    };
    moderator: {
        member: {
            has: (pubkey: string) => boolean;
            get: (pubkey: string) => MemberData;
            add: (mship: MemberData) => Promise<NostrStore<DraftData>> | undefined;
            rem: (pubkey: string) => Promise<NostrStore<DraftData>>;
        };
        policy: {
            has: (pol_id: string) => boolean;
            get: (pol_id: string) => RolePolicy;
            add: (policy: RolePolicy) => Promise<NostrStore<DraftData>> | undefined;
            rem: (pol_id: string) => Promise<NostrStore<DraftData>>;
            list_open: () => RolePolicy[];
            list_full: () => RolePolicy[];
        };
    };
    commit(session: Partial<DraftData>): Promise<NostrStore<DraftData>>;
    connect(address: string, secret: string): Promise<this>;
    find_program(query: ProgramQuery): import("../../types/index.js").ProgramData | undefined;
    init(address: string, secret: string, store: DraftData): Promise<NostrStore<DraftData>>;
    publish(client: EscrowClient): Promise<EscrowContract>;
    reset(draft: DraftData): Promise<NostrStore<DraftData>>;
    toJSON(): DraftData;
    toString(): string;
    verify(): void;
}
