import { Transaction, WhereOptions } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { Account, AccountSummary } from '../../../shared/models/actors';
import { MAccount, MAccountActor, MAccountAP, MAccountDefault, MAccountFormattable, MAccountSummaryFormattable, MChannelActor } from '../../types/models';
import { ActorModel } from '../actor/actor';
import { ApplicationModel } from '../application/application';
import { UserModel } from '../user/user';
import { VideoChannelModel } from '../video/video-channel';
import { VideoCommentModel } from '../video/video-comment';
import { VideoPlaylistModel } from '../video/video-playlist';
import { AccountBlocklistModel } from './account-blocklist';
export declare enum ScopeNames {
    SUMMARY = "SUMMARY"
}
export declare type SummaryOptions = {
    actorRequired?: boolean;
    whereActor?: WhereOptions;
    whereServer?: WhereOptions;
    withAccountBlockerIds?: number[];
};
export declare class AccountModel extends Model<Partial<AttributesOnly<AccountModel>>> {
    name: string;
    description: string;
    createdAt: Date;
    updatedAt: Date;
    actorId: number;
    Actor: ActorModel;
    userId: number;
    User: UserModel;
    applicationId: number;
    Application: ApplicationModel;
    VideoChannels: VideoChannelModel[];
    VideoPlaylists: VideoPlaylistModel[];
    VideoComments: VideoCommentModel[];
    BlockedBy: AccountBlocklistModel[];
    static sendDeleteIfOwned(instance: AccountModel, options: any): Promise<any>;
    static load(id: number, transaction?: Transaction): Promise<MAccountDefault>;
    static loadByNameWithHost(nameWithHost: string): Promise<MAccountDefault>;
    static loadLocalByName(name: string): Promise<MAccountDefault>;
    static loadByNameAndHost(name: string, host: string): Promise<MAccountDefault>;
    static loadByUrl(url: string, transaction?: Transaction): Promise<MAccountDefault>;
    static listForApi(start: number, count: number, sort: string): Promise<{
        data: AccountModel[];
        total: number;
    }>;
    static loadAccountIdFromVideo(videoId: number): Promise<MAccount>;
    static listLocalsForSitemap(sort: string): Promise<MAccountActor[]>;
    getClientUrl(): string;
    toFormattedJSON(this: MAccountFormattable): Account;
    toFormattedSummaryJSON(this: MAccountSummaryFormattable): AccountSummary;
    toActivityPubObject(this: MAccountAP): {
        type: import("../../../shared/models").ActivityPubActorType;
        id: string;
        following: string;
        followers: string;
        playlists: string;
        inbox: string;
        outbox: string;
        preferredUsername: string;
        url: string;
        name: string;
        endpoints: {
            sharedInbox: string;
        };
        publicKey: {
            id: string;
            owner: string;
            publicKeyPem: string;
        };
        published: string;
        icon: import("../../../shared/models").ActivityIconObject;
        image: import("../../../shared/models").ActivityIconObject;
    } & {
        '@context': any[];
    } & {
        summary: string;
    };
    isOwned(): boolean;
    isOutdated(): boolean;
    getDisplayName(): string;
    getLocalUrl(this: MAccountActor | MChannelActor): string;
    isBlocked(): boolean;
}
//# sourceMappingURL=account.d.ts.map