import { ENV } from '../constants';
import { GroupAccess, GroupDTO, IFeeds, MessageWithCID, SignerType, Message, ProgressHookType, IUser, IMessageIPFS, GroupInfoDTO, ChatMemberProfile, GroupParticipantCounts } from '../types';
import { GroupUpdateOptions, ChatListType, GroupCreationOptions, ManageGroupOptions, RemoveFromGroupOptions, GetGroupParticipantsOptions, ParticipantStatus } from './pushAPITypes';
import { ChatInfoResponse } from '../chat';
export declare class Chat {
    private account;
    private env;
    private alpha;
    private decryptedPgpPvtKey?;
    private signer?;
    private progressHook?;
    private userInstance;
    private scalabilityV2Feature;
    constructor(account: string, env: ENV, alpha: {
        feature: string[];
    }, decryptedPgpPvtKey?: string | undefined, signer?: SignerType | undefined, progressHook?: ((progress: ProgressHookType) => void) | undefined);
    list(type: `${ChatListType}`, options?: {
        /**
         * @default 1
         */
        page?: number;
        limit?: number;
        overrideAccount?: string;
    }): Promise<IFeeds[]>;
    latest(target: string): Promise<{}>;
    history(target: string, options?: {
        reference?: string | null;
        limit?: number;
    }): Promise<any[]>;
    send(recipient: string, options: Message): Promise<MessageWithCID>;
    decrypt(messagePayloads: IMessageIPFS[]): Promise<IMessageIPFS[]>;
    accept(target: string): Promise<string>;
    reject(target: string): Promise<void>;
    block(users: Array<string>): Promise<IUser>;
    unblock(users: Array<string>): Promise<IUser>;
    info(recipient: string, options?: {
        overrideAccount?: string;
    }): Promise<ChatInfoResponse>;
    group: {
        create: (name: string, options?: GroupCreationOptions) => Promise<GroupInfoDTO | GroupDTO>;
        participants: {
            list: (chatId: string, options?: GetGroupParticipantsOptions) => Promise<{
                members: ChatMemberProfile[];
            }>;
            count: (chatId: string) => Promise<GroupParticipantCounts>;
            status: (chatId: string, options?: {
                overrideAccount?: string;
            }) => Promise<ParticipantStatus>;
        };
        permissions: (chatId: string) => Promise<GroupAccess>;
        info: (chatId: string) => Promise<GroupDTO | GroupInfoDTO>;
        update: (chatId: string, options: GroupUpdateOptions) => Promise<GroupInfoDTO | GroupDTO>;
        add: (chatId: string, options: ManageGroupOptions) => Promise<GroupInfoDTO | GroupDTO>;
        remove: (chatId: string, options: RemoveFromGroupOptions) => Promise<GroupInfoDTO | GroupDTO>;
        modify: (chatId: string, options: ManageGroupOptions) => Promise<GroupInfoDTO>;
        join: (target: string) => Promise<GroupInfoDTO | GroupDTO>;
        leave: (target: string) => Promise<GroupInfoDTO | GroupDTO>;
        reject: (target: string) => Promise<void>;
    };
}
