import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { ActivityIconObject, ActivityPubActorType } from '../../../shared/models/activitypub';
import { ActorImage } from '../../../shared/models/actors/actor-image.model';
import { MActor, MActorAccountChannelId, MActorAPAccount, MActorAPChannel, MActorFormattable, MActorFull, MActorHost, MActorServer, MActorSummaryFormattable, MActorUrl, MActorWithInboxes } from '../../types/models';
import { AccountModel } from '../account/account';
import { ServerModel } from '../server/server';
import { VideoChannelModel } from '../video/video-channel';
import { ActorFollowModel } from './actor-follow';
import { ActorImageModel } from './actor-image';
export declare const unusedActorAttributesForAPI: string[];
export declare class ActorModel extends Model<Partial<AttributesOnly<ActorModel>>> {
    type: ActivityPubActorType;
    preferredUsername: string;
    url: string;
    publicKey: string;
    privateKey: string;
    followersCount: number;
    followingCount: number;
    inboxUrl: string;
    outboxUrl: string;
    sharedInboxUrl: string;
    followersUrl: string;
    followingUrl: string;
    remoteCreatedAt: Date;
    createdAt: Date;
    updatedAt: Date;
    avatarId: number;
    bannerId: number;
    Avatar: ActorImageModel;
    Banner: ActorImageModel;
    ActorFollowing: ActorFollowModel[];
    ActorFollowers: ActorFollowModel[];
    serverId: number;
    Server: ServerModel;
    Account: AccountModel;
    VideoChannel: VideoChannelModel;
    static load(id: number): Promise<MActor>;
    static loadFull(id: number): Promise<MActorFull>;
    static loadFromAccountByVideoId(videoId: number, transaction: Transaction): Promise<MActor>;
    static isActorUrlExist(url: string): Promise<boolean>;
    static listByFollowersUrls(followersUrls: string[], transaction?: Transaction): Promise<MActorFull[]>;
    static loadLocalByName(preferredUsername: string, transaction?: Transaction): Promise<MActorFull>;
    static loadLocalUrlByName(preferredUsername: string, transaction?: Transaction): Promise<MActorUrl>;
    static loadByNameAndHost(preferredUsername: string, host: string): Promise<MActorFull>;
    static loadByUrl(url: string, transaction?: Transaction): Promise<MActorAccountChannelId>;
    static loadByUrlAndPopulateAccountAndChannel(url: string, transaction?: Transaction): Promise<MActorFull>;
    static rebuildFollowsCount(ofId: number, type: 'followers' | 'following', transaction?: Transaction): Promise<[number, ActorModel[]]>;
    static loadAccountActorByVideoId(videoId: number, transaction: Transaction): Promise<MActor>;
    getSharedInbox(this: MActorWithInboxes): string;
    toFormattedSummaryJSON(this: MActorSummaryFormattable): {
        url: string;
        name: string;
        host: string;
        avatar: ActorImage;
    };
    toFormattedJSON(this: MActorFormattable): {
        url: string;
        name: string;
        host: string;
        avatar: ActorImage;
    } & {
        id: any;
        hostRedundancyAllowed: boolean;
        followingCount: number;
        followersCount: number;
        banner: ActorImage;
        createdAt: Date;
    };
    toActivityPubObject(this: MActorAPChannel | MActorAPAccount, name: string): {
        type: 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: ActivityIconObject;
        image: ActivityIconObject;
    } & {
        '@context': any[];
    };
    getFollowerSharedInboxUrls(t: Transaction): Promise<string[]>;
    getFollowingUrl(): string;
    getFollowersUrl(): string;
    getPlaylistsUrl(): string;
    getPublicKeyUrl(): string;
    isOwned(): boolean;
    getWebfingerUrl(this: MActorServer): string;
    getIdentifier(): string;
    getHost(this: MActorHost): string;
    getRedundancyAllowed(): boolean;
    getAvatarUrl(): string;
    getBannerUrl(): string;
    isOutdated(): boolean;
    getCreatedAt(this: MActorAPChannel | MActorAPAccount | MActorFormattable): Date;
}
//# sourceMappingURL=actor.d.ts.map