import { IUser } from "@esri/arcgis-rest-portal";
import { IWithFollowers } from "../core/traits/IWithFollowers";
import type { IArcGISContext } from "../types/IArcGISContext";
import { HubEntityType } from "../core/types/HubEntityType";
/**
 * Get the entity's followers group id
 * @param entityId entity id
 * @param entityType entity type
 * @param context context used to support fetchHubEntity so it has access
 * to different types of request options based on the entity type
 * @returns {string} entity's followers group id
 */
export declare function getEntityFollowersGroupId(entityId: string, entityType: HubEntityType, context: IArcGISContext): Promise<string>;
/**
 * Whether the user is currently following the entity
 * @param entityOrId hub entity or entity id, type is IWithFollowers
 * as we only want to accept hub entities backed by item entities which
 * extend IWithFollowers
 * @param user
 * @param entityType
 * @param context
 * @returns {boolean}
 */
export declare function isUserFollowing(entityOrId: IWithFollowers | string, user: IUser, entityType?: HubEntityType, context?: IArcGISContext): Promise<boolean>;
/**
 * Follow an entity
 * @param entityId entity id
 * @param user user who attempts to follow the entity
 * @param entityType optional if entityOrId is a string
 * @param context optional if entityOrId is a string
 * @returns promise that resolves { success: true, username: user.username }
 * or rejects with an error
 */
export declare function followEntity(entityId: string, user: IUser, entityType?: HubEntityType, context?: IArcGISContext): Promise<{
    success: boolean;
    username: string;
}>;
/**
 * Unfollow an entity
 * @param entityId entity id
 * @param user user who attempts to unfollow the entity
 * @param entityType optional if entityOrId is a string
 * @param context optional if entityOrId is a string
 * @returns promise that resolves { success: true, username: user.username } or
 * rejects with an error
 */
export declare function unfollowEntity(entityId: string, user: IUser, entityType?: HubEntityType, context?: IArcGISContext): Promise<{
    success: boolean;
    username: string;
}>;
