import type { APIResponse, CheckResponse, CustomCheckFlag, CustomCheckResponse, GetConfigResponse, GetUserModerationReportOptions, GetUserModerationReportResponse, ModerationConfig, ModerationFlagOptions, ModerationMuteOptions, ModerationRule, ModerationRuleRequest, Pager, QueryConfigsResponse, QueryModerationConfigsFilters, QueryModerationConfigsSort, QueryModerationRulesFilters, QueryModerationRulesResponse, QueryModerationRulesSort, RequireAtLeastOne, ReviewQueueFilters, ReviewQueuePaginationOptions, ReviewQueueResponse, ReviewQueueSort, SubmitActionOptions, SubmitActionResponse, UnmuteUserResponse, UpsertConfigResponse, UpsertModerationRuleResponse } from './types';
import type { StreamChat } from './client';
export declare const MODERATION_ENTITY_TYPES: {
    user: string;
    message: string;
    userprofile: string;
};
export declare class Moderation {
    client: StreamChat;
    constructor(client: StreamChat);
    /**
     * Flag a user
     *
     * @param {string} flaggedUserID User ID to be flagged
     * @param {string} reason Reason for flagging the user
     * @param {Object} options Additional options for flagging the user
     * @param {string} options.user_id (For server side usage) User ID of the user who is flagging the target user
     * @param {Object} options.custom Additional data to be stored with the flag
     * @returns
     */
    flagUser(flaggedUserID: string, reason: string, options?: ModerationFlagOptions): Promise<{
        item_id: string;
    } & APIResponse>;
    /**
     * Flag a message
     *
     * @param {string} messageID Message ID to be flagged
     * @param {string} reason Reason for flagging the message
     * @param {Object} options Additional options for flagging the message
     * @param {string} options.user_id (For server side usage) User ID of the user who is flagging the target message
     * @param {Object} options.custom Additional data to be stored with the flag
     * @returns
     */
    flagMessage(messageID: string, reason: string, options?: ModerationFlagOptions): Promise<{
        item_id: string;
    } & APIResponse>;
    /**
     * Flag a user
     *
     * @param {string} entityType Entity type to be flagged
     * @param {string} entityId Entity ID to be flagged
     * @param {string} entityCreatorID User ID of the entity creator
     * @param {string} reason Reason for flagging the entity
     * @param {Object} options Additional options for flagging the entity
     * @param {string} options.user_id (For server side usage) User ID of the user who is flagging the target entity
     * @param {Object} options.moderation_payload Content to be flagged e.g., { texts: ['text1', 'text2'], images: ['image1', 'image2']}
     * @param {Object} options.custom Additional data to be stored with the flag
     * @returns
     */
    flag(entityType: string, entityId: string, entityCreatorID: string, reason: string, options?: ModerationFlagOptions): Promise<{
        item_id: string;
    } & APIResponse>;
    /**
     * Mute a user
     * @param {string} targetID  User ID to be muted
     * @param {Object} options Additional options for muting the user
     * @param {string} options.user_id (For server side usage) User ID of the user who is muting the target user
     * @param {number} options.timeout Timeout for the mute in minutes
     * @returns
     */
    muteUser(targetID: string, options?: ModerationMuteOptions): Promise<APIResponse & {
        mute?: import("./types").MuteResponse;
        mutes?: Array<import("./types").Mute>;
        own_user?: import("./types").OwnUserResponse;
        non_existing_users?: string[];
    }>;
    /**
     * Unmute a user
     * @param {string} targetID  User ID to be unmuted
     * @param {Object} options Additional options for unmuting the user
     * @param {string} options.user_id (For server side usage) User ID of the user who is unmuting the target user
     * @returns
     */
    unmuteUser(targetID: string, options: {
        user_id?: string;
    }): Promise<UnmuteUserResponse>;
    /**
     * Get moderation report for a user
     * @param {string} userID User ID for which moderation report is to be fetched
     * @param {Object} options Additional options for fetching the moderation report
     * @param {boolean} options.create_user_if_not_exists Create user if not exists
     * @param {boolean} options.include_user_blocks Include user blocks
     * @param {boolean} options.include_user_mutes Include user mutes
     */
    getUserModerationReport(userID: string, options?: GetUserModerationReportOptions): Promise<GetUserModerationReportResponse>;
    /**
     * Query review queue
     * @param {Object} filterConditions Filter conditions for querying review queue
     * @param {Object} sort Sort conditions for querying review queue
     * @param {Object} options Pagination options for querying review queue
     */
    queryReviewQueue(filterConditions?: ReviewQueueFilters, sort?: ReviewQueueSort, options?: ReviewQueuePaginationOptions): Promise<ReviewQueueResponse>;
    /**
     * Upsert moderation config
     * @param {Object} config Moderation config to be upserted
     */
    upsertConfig(config: ModerationConfig): Promise<UpsertConfigResponse>;
    /**
     * Get moderation config
     * @param {string} key Key for which moderation config is to be fetched
     */
    getConfig(key: string, data?: {
        team?: string;
    }): Promise<GetConfigResponse>;
    deleteConfig(key: string, data?: {
        team?: string;
    }): Promise<APIResponse>;
    /**
     * Query moderation configs
     * @param {Object} filterConditions Filter conditions for querying moderation configs
     * @param {Object} sort Sort conditions for querying moderation configs
     * @param {Object} options Additional options for querying moderation configs
     */
    queryConfigs(filterConditions: QueryModerationConfigsFilters, sort: QueryModerationConfigsSort, options?: Pager): Promise<QueryConfigsResponse>;
    submitAction(actionType: string, itemID: string, options?: SubmitActionOptions): Promise<SubmitActionResponse>;
    /**
     *
     * @param {string} entityType string Type of entity to be checked E.g., stream:user, stream:chat:v1:message, or any custom string
     * @param {string} entityID string ID of the entity to be checked. This is mainly for tracking purposes
     * @param {string} entityCreatorID string ID of the entity creator
     * @param {object} moderationPayload object Content to be checked for moderation. E.g., { texts: ['text1', 'text2'], images: ['image1', 'image2']}
     * @param {Array} moderationPayload.texts array Array of texts to be checked for moderation
     * @param {Array} moderationPayload.images array Array of images to be checked for moderation
     * @param {Array} moderationPayload.videos array Array of videos to be checked for moderation
     * @param configKey
     * @param options
     * @returns
     */
    check(entityType: string, entityID: string, entityCreatorID: string, moderationPayload: {
        custom?: Record<string, any>;
        images?: string[];
        texts?: string[];
        videos?: string[];
    }, configKey: string, options?: {
        force_sync?: boolean;
        test_mode?: boolean;
    }): Promise<CheckResponse>;
    /**
     * Experimental: Check user profile
     *
     * Warning: This is an experimental feature and the API is subject to change.
     *
     * This function is used to check a user profile for moderation.
     * This will not create any review queue items for the user profile.
     * You can just use this to check whether to allow a certain user profile to be created or not.
     *
     * Example:
     *
     * ```ts
     * const res = await client.moderation.checkUserProfile(userId, { username: "fuck_boy_001", image: "https://example.com/profile.jpg" });
     * if (res.recommended_action === "remove") {
     *   // Block the user profile from being created
     * } else {
     *   // Allow the user profile to be created
     * }
     * ```
     *
     * @param userId
     * @param profile.username
     * @param profile.image
     * @returns
     */
    checkUserProfile(userId: string, profile: RequireAtLeastOne<{
        image?: string;
        username?: string;
    }>): Promise<CheckResponse>;
    /**
     *
     * @param {string} entityType string Type of entity to be checked E.g., stream:user, stream:chat:v1:message, or any custom string
     * @param {string} entityID string ID of the entity to be checked. This is mainly for tracking purposes
     * @param {string} entityCreatorID string ID of the entity creator
     * @param {object} moderationPayload object Content to be checked for moderation. E.g., { texts: ['text1', 'text2'], images: ['image1', 'image2']}
     * @param {Array} moderationPayload.texts array Array of texts to be checked for moderation
     * @param {Array} moderationPayload.images array Array of images to be checked for moderation
     * @param {Array} moderationPayload.videos array Array of videos to be checked for moderation
     * @param {Array<CustomCheckFlag>} flags Array of CustomCheckFlag to be passed to flag the entity
     * @returns
     */
    addCustomFlags(entityType: string, entityID: string, entityCreatorID: string, moderationPayload: {
        images?: string[];
        texts?: string[];
        videos?: string[];
    }, flags: CustomCheckFlag[]): Promise<CustomCheckResponse>;
    /**
     * Add custom flags to a message
     * @param {string} messageID Message ID to be flagged
     * @param {Array<CustomCheckFlag>} flags Array of CustomCheckFlag to be passed to flag the message
     * @returns
     */
    addCustomMessageFlags(messageID: string, flags: CustomCheckFlag[]): Promise<CustomCheckResponse>;
    /**
     * Create or update a moderation rule
     * @param {ModerationRuleRequest} rule Rule configuration to be upserted
     * @returns
     */
    upsertModerationRule(rule: ModerationRuleRequest): Promise<UpsertModerationRuleResponse>;
    /**
     * Query moderation rules
     * @param {QueryModerationRulesFilters} filterConditions Filter conditions for querying moderation rules
     * @param {QueryModerationRulesSort} sort Sort conditions for querying moderation rules
     * @param {Pager} options Pagination options for querying moderation rules
     * @returns
     */
    queryModerationRules(filterConditions?: QueryModerationRulesFilters, sort?: QueryModerationRulesSort, options?: Pager): Promise<QueryModerationRulesResponse>;
    /**
     * Get a specific moderation rule by ID
     * @param {string} id ID of the moderation rule to fetch
     * @returns
     */
    getModerationRule(id: string): Promise<{
        rule: ModerationRule;
    }>;
    /**
     * Delete a moderation rule by ID
     * @param {string} id ID of the moderation rule to delete
     * @returns
     */
    deleteModerationRule(id: string): Promise<APIResponse>;
}
