import { AppBskyActorDefs, AtpAgent, ComAtprotoRepoGetRecord } from '@atproto/api';
import { Keypair } from '@atproto/crypto';
import { IdResolver } from '@atproto/identity';
import { BlobRef } from '@atproto/lexicon';
import { Database } from '../db';
import { LabelRow } from '../db/schema/label';
import { FeedViewPost } from '../lexicon/types/app/bsky/feed/defs';
import { AccountView } from '../lexicon/types/com/atproto/admin/defs';
import { Label } from '../lexicon/types/com/atproto/label/defs';
import { OutputSchema as ReportOutput } from '../lexicon/types/com/atproto/moderation/createReport';
import { BlobView, ModEventView, ModEventViewDetail, RecordView, RecordViewDetail, RepoView, SubjectStatusView } from '../lexicon/types/tools/ozone/moderation/defs';
import { Un$Typed } from '../lexicon/util';
import { ParsedLabelers } from '../util';
import { ModerationEventRowWithHandle, ModerationSubjectStatusRowWithHandle } from './types';
export type AuthHeaders = {
    headers: {
        authorization: string;
        'atproto-accept-labelers'?: string;
    };
};
export declare class ModerationViews {
    private db;
    private signingKey;
    private signingKeyId;
    private appviewAgent;
    private appviewAuth;
    idResolver: IdResolver;
    devMode?: boolean | undefined;
    constructor(db: Database, signingKey: Keypair, signingKeyId: number, appviewAgent: AtpAgent, appviewAuth: (method: string) => Promise<AuthHeaders>, idResolver: IdResolver, devMode?: boolean | undefined);
    getAccoutInfosByDid(dids: string[]): Promise<Map<string, AccountView>>;
    repos(dids: string[]): Promise<Map<string, RepoView>>;
    formatEvent(row: ModerationEventRowWithHandle): Un$Typed<ModEventView>;
    eventDetail(result: ModerationEventRowWithHandle): Promise<ModEventViewDetail>;
    repoDetails(dids: string[], labelers?: ParsedLabelers): Promise<Map<string, RepoView>>;
    fetchRecord(params: ComAtprotoRepoGetRecord.QueryParams, appviewAuth: AuthHeaders): Promise<ComAtprotoRepoGetRecord.Response | null>;
    fetchRecords(subjects: RecordSubject[]): Promise<Map<string, RecordInfo>>;
    records(subjects: RecordSubject[]): Promise<Map<string, RecordView & {
        $type?: undefined;
        moderation: {
            $type?: undefined;
            subjectStatus?: SubjectStatusView;
        };
    }>>;
    recordDetails(subjects: RecordSubject[], labelers?: ParsedLabelers): Promise<Map<string, RecordViewDetail>>;
    getExternalLabels(subjects: string[], labelers?: ParsedLabelers): Promise<Map<string, Label[]>>;
    formatReport(report: ModerationEventRowWithHandle): ReportOutput;
    subject(subject: string): Promise<SubjectView>;
    blob(blobs: BlobRef[]): Promise<BlobView[]>;
    labels(subjects: string[], includeNeg?: boolean): Promise<Map<string, Label[]>>;
    formatLabelAndEnsureSig(row: LabelRow): Promise<Label>;
    getSubjectStatus(subjects: string[]): Promise<Map<string, ModerationSubjectStatusRowWithHandle>>;
    formatSubjectStatus(status: ModerationSubjectStatusRowWithHandle): SubjectStatusView;
    fetchAuthorFeed(actor: string): Promise<FeedViewPost[]>;
    getProfiles(dids: string[]): Promise<Map<string, AppBskyActorDefs.ProfileViewDetailed>>;
}
type RecordSubject = {
    uri: string;
    cid?: string;
};
type SubjectView = ModEventViewDetail['subject'];
type RecordInfo = {
    uri: string;
    cid: string;
    value: Record<string, unknown>;
    indexedAt: string;
};
export declare function getSelfLabels(details: {
    uri: string | null;
    cid: string | null;
    record: Record<string, unknown> | null;
}): Label[];
export {};
//# sourceMappingURL=views.d.ts.map