import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { ActivityIconObject, ActivityPubActorType, ActorImageType } from '../../../shared/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { MActor, MActorAccountChannelId, MActorAPAccount, MActorAPChannel, MActorFollowersUrl, MActorFormattable, MActorFull, MActorHost, MActorId, 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;
    Avatars: ActorImageModel[];
    Banners: 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 loadAccountActorFollowerUrlByVideoId(videoId: number, transaction: Transaction): Promise<MActorId & MActorFollowersUrl>;
    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<[affectedCount: number]>;
    static loadAccountActorByVideoId(videoId: number, transaction: Transaction): Promise<MActor>;
    getSharedInbox(this: MActorWithInboxes): string;
    toFormattedSummaryJSON(this: MActorSummaryFormattable): {
        url: string;
        name: string;
        host: string;
        avatars: import("../../../shared/models").ActorImage[];
        avatar: import("../../../shared/models").ActorImage;
    };
    toFormattedJSON(this: MActorFormattable): {
        id: any;
        hostRedundancyAllowed: boolean;
        followingCount: number;
        followersCount: number;
        createdAt: Date;
        banners: import("../../../shared/models").ActorImage[];
        banner: import("../../../shared/models").ActorImage;
        url: string;
        name: string;
        host: string;
        avatars: import("../../../shared/models").ActorImage[];
        avatar: import("../../../shared/models").ActorImage;
    };
    toActivityPubObject(this: MActorAPChannel | MActorAPAccount, name: string): {
        '@context': (string | {
            [id: string]: 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;
        icons: ActivityIconObject[];
        image: ActivityIconObject;
    };
    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;
    hasImage(type: ActorImageType): boolean;
    isOutdated(): boolean;
    getCreatedAt(this: MActorAPChannel | MActorAPAccount | MActorFormattable): Date;
}
//# sourceMappingURL=actor.d.ts.map