import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { MActor, MActorFollowActors, MActorFollowActorsDefault, MActorFollowActorsDefaultSubscription, MActorFollowFollowingHost, MActorFollowFormattable } from '../../types/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { FollowState } from '../../../shared/models/actors';
import { ActorFollow } from '../../../shared/models/actors/follow.model';
import { ActorModel } from './actor';
import { ListFollowersOptions } from './sql/instance-list-followers-query-builder';
import { ListFollowingOptions } from './sql/instance-list-following-query-builder';
export declare class ActorFollowModel extends Model<Partial<AttributesOnly<ActorFollowModel>>> {
    state: FollowState;
    score: number;
    url: string;
    createdAt: Date;
    updatedAt: Date;
    actorId: number;
    ActorFollower: ActorModel;
    targetActorId: number;
    ActorFollowing: ActorModel;
    static incrementFollowerAndFollowingCount(instance: ActorFollowModel, options: any): any;
    static decrementFollowerAndFollowingCount(instance: ActorFollowModel, options: any): any;
    static findOrCreate(): any;
    static findOrCreateCustom(options: {
        byActor: MActor;
        targetActor: MActor;
        activityId: string;
        state: FollowState;
        transaction: Transaction;
    }): Promise<[MActorFollowActors, boolean]>;
    static removeFollowsOf(actorId: number, t?: Transaction): Promise<number>;
    static removeBadActorFollows(): Promise<void>;
    static isFollowedBy(actorId: number, followerActorId: number): Promise<boolean>;
    static loadByActorAndTarget(actorId: number, targetActorId: number, t?: Transaction): Promise<MActorFollowActorsDefault>;
    static loadByActorAndTargetNameAndHostForAPI(options: {
        actorId: number;
        targetName: string;
        targetHost: string;
        state?: FollowState;
        transaction?: Transaction;
    }): Promise<MActorFollowActorsDefaultSubscription>;
    static listSubscriptionsOf(actorId: number, targets: {
        name: string;
        host?: string;
    }[]): Promise<MActorFollowFollowingHost[]>;
    static listInstanceFollowingForApi(options: ListFollowingOptions): Promise<{
        total: any;
        data: MActorFollowActorsDefault[];
    }>;
    static listFollowersForApi(options: ListFollowersOptions): Promise<{
        total: any;
        data: MActorFollowActorsDefault[];
    }>;
    static listSubscriptionsForApi(options: {
        actorId: number;
        start: number;
        count: number;
        sort: string;
        search?: string;
    }): Promise<{
        total: number;
        data: import("../../types/models").MChannelAccountActor[];
    }>;
    static keepUnfollowedInstance(hosts: string[]): Promise<string[]>;
    static listAcceptedFollowerUrlsForAP(actorIds: number[], t: Transaction, start?: number, count?: number): Promise<{
        data: string[];
        total: number;
    }>;
    static listAcceptedFollowerSharedInboxUrls(actorIds: number[], t: Transaction): Promise<{
        data: string[];
        total: number;
    }>;
    static listAcceptedFollowingUrlsForApi(actorIds: number[], t: Transaction, start?: number, count?: number): Promise<{
        data: string[];
        total: number;
    }>;
    static getStats(): Promise<{
        totalInstanceFollowing: number;
        totalInstanceFollowers: number;
    }>;
    static updateScore(inboxUrl: string, value: number, t?: Transaction): Promise<[unknown[], unknown]>;
    static updateScoreByFollowingServers(serverIds: number[], value: number, t?: Transaction): Promise<[unknown[], unknown]>;
    private static createListAcceptedFollowForApiQuery;
    private static listBadActorFollows;
    toFormattedJSON(this: MActorFollowFormattable): ActorFollow;
}
//# sourceMappingURL=actor-follow.d.ts.map