import { CID } from 'multiformats/cid';
import AtpAgent from '@iameli/api';
import { Main as Facet } from '@iameli/api/src/client/types/app/bsky/richtext/facet';
import { InputSchema as TakeActionInput } from '@iameli/api/src/client/types/com/atproto/admin/emitModerationEvent';
import { InputSchema as CreateReportInput } from '@iameli/api/src/client/types/com/atproto/moderation/createReport';
import { Record as PostRecord } from '@iameli/api/src/client/types/app/bsky/feed/post';
import { Record as LikeRecord } from '@iameli/api/src/client/types/app/bsky/feed/like';
import { Record as FollowRecord } from '@iameli/api/src/client/types/app/bsky/graph/follow';
import { AtUri } from '@iameli/syntax';
import { BlobRef } from '@iameli/lexicon';
import { TestNetworkNoAppView } from '../network-no-appview';
export type ImageRef = {
    image: BlobRef;
    alt: string;
};
export declare class RecordRef {
    uri: AtUri;
    cid: CID;
    constructor(uri: AtUri | string, cid: CID | string);
    get raw(): {
        uri: string;
        cid: string;
    };
    get uriStr(): string;
    get cidStr(): string;
}
export declare class SeedClient {
    network: TestNetworkNoAppView;
    agent: AtpAgent;
    accounts: Record<string, {
        did: string;
        accessJwt: string;
        refreshJwt: string;
        handle: string;
        email: string;
        password: string;
    }>;
    profiles: Record<string, {
        displayName: string;
        description: string;
        avatar: {
            cid: string;
            mimeType: string;
        };
        ref: RecordRef;
    }>;
    follows: Record<string, Record<string, RecordRef>>;
    blocks: Record<string, Record<string, RecordRef>>;
    posts: Record<string, {
        text: string;
        ref: RecordRef;
        images: ImageRef[];
        quote?: RecordRef;
    }[]>;
    likes: Record<string, Record<string, AtUri>>;
    replies: Record<string, {
        text: string;
        ref: RecordRef;
    }[]>;
    reposts: Record<string, RecordRef[]>;
    lists: Record<string, Record<string, {
        ref: RecordRef;
        items: Record<string, RecordRef>;
    }>>;
    dids: Record<string, string>;
    constructor(network: TestNetworkNoAppView, agent: AtpAgent);
    createAccount(shortName: string, params: {
        handle: string;
        email: string;
        password: string;
        inviteCode?: string;
    }): Promise<{
        did: string;
        accessJwt: string;
        refreshJwt: string;
        handle: string;
        email: string;
        password: string;
    }>;
    updateHandle(by: string, handle: string): Promise<void>;
    createProfile(by: string, displayName: string, description: string, selfLabels?: string[]): Promise<{
        displayName: string;
        description: string;
        avatar: {
            cid: string;
            mimeType: string;
        };
        ref: RecordRef;
    }>;
    updateProfile(by: string, record: Record<string, unknown>): Promise<{
        displayName: string;
        description: string;
        avatar: {
            cid: string;
            mimeType: string;
        };
        ref: RecordRef;
    }>;
    follow(from: string, to: string, overrides?: Partial<FollowRecord>): Promise<RecordRef>;
    unfollow(from: string, to: string): Promise<void>;
    block(from: string, to: string, overrides?: Partial<FollowRecord>): Promise<RecordRef>;
    unblock(from: string, to: string): Promise<void>;
    post(by: string, text: string, facets?: Facet[], images?: ImageRef[], quote?: RecordRef, overrides?: Partial<PostRecord>): Promise<{
        text: string;
        ref: RecordRef;
        images: ImageRef[];
        quote: RecordRef | undefined;
    }>;
    deletePost(by: string, uri: AtUri): Promise<void>;
    uploadFile(by: string, filePath: string, encoding: string): Promise<ImageRef>;
    like(by: string, subject: RecordRef, overrides?: Partial<LikeRecord>): Promise<AtUri>;
    reply(by: string, root: RecordRef, parent: RecordRef, text: string, facets?: Facet[], images?: ImageRef[]): Promise<{
        text: string;
        ref: RecordRef;
    }>;
    repost(by: string, subject: RecordRef): Promise<RecordRef>;
    createList(by: string, name: string, purpose: 'mod' | 'curate'): Promise<RecordRef>;
    addToList(by: string, subject: string, list: RecordRef): Promise<RecordRef>;
    rmFromList(by: string, subject: string, list: RecordRef): Promise<void>;
    emitModerationEvent(opts: {
        event: TakeActionInput['event'];
        subject: TakeActionInput['subject'];
        reason?: string;
        createdBy?: string;
        meta?: TakeActionInput['meta'];
    }): Promise<import("@iameli/api/src/client/types/com/atproto/admin/defs").ModEventView>;
    reverseModerationAction(opts: {
        id: number;
        subject: TakeActionInput['subject'];
        reason?: string;
        createdBy?: string;
    }): Promise<import("@iameli/api/src/client/types/com/atproto/admin/defs").ModEventView>;
    createReport(opts: {
        reasonType: CreateReportInput['reasonType'];
        subject: CreateReportInput['subject'];
        reason?: string;
        reportedBy: string;
    }): Promise<import("@iameli/api/src/client/types/com/atproto/moderation/createReport").OutputSchema>;
    adminAuthHeaders(): {
        authorization: string;
    };
    getHeaders(did: string): {
        authorization: string;
    };
    static getHeaders(jwt: string): {
        authorization: string;
    };
}
