/// <reference types="node" />
/// <reference types="node" />
import { EventEmitter } from 'events';
import { AxiosInstance } from "axios";
import { Dict, LogLevel } from "../types";
import { Sex, Status } from "../core/constanst";
import { Contact } from "../entries/contact";
export declare class BaseClient extends EventEmitter {
    config: BaseClient.Config;
    uin: number;
    info: BaseClient.Info;
    avatar: string;
    status: Status;
    data_dir: string;
    private lastSyncTime;
    private syncPollingId;
    private syncErrorCount;
    private checkPollingId;
    private retryPollingId;
    cookie: Dict<string>;
    session: BaseClient.Session;
    request: AxiosInstance;
    get token(): BaseClient.Token;
    set token(token: BaseClient.Token);
    constructor(config: BaseClient.Config);
    private initRequest;
    private genQrcode;
    private getUUID;
    queryQrcodeStatus(): any;
    qrcodeLogin(): Promise<string>;
    /** 首次登录 */
    login(): Promise<string | void>;
    logout(): Promise<string>;
    addFriend(user_id: string, message?: string): Promise<void>;
    getBaseRequest(): {
        Uin: number;
        Sid: string;
        Skey: string;
        DeviceID: string;
    };
    init(): Promise<void>;
    uploadMedia(file: string | Buffer, filename: string, user_id: string): Promise<{
        name: string;
        size: number;
        ext: string;
        mediatype: string;
        mediaId: any;
    }>;
    private chunkMediaForms;
    getAvatar(avatar: string): Promise<{
        data: any;
        type: any;
    }>;
    batchGetContact(contactIds: string[]): Promise<void>;
    em(event: string, payload: Dict): void;
    getContact(): Promise<Contact.OriginalInfo[]>;
    private syncCheck;
    private sync;
    private updateSyncKey;
    notifyMobile(to?: string): Promise<void>;
    private syncPolling;
    private checkPolling;
}
export declare namespace BaseClient {
    interface Config {
        base_url?: string;
        timeout?: number;
        data_dir?: string;
        log_level?: LogLevel;
    }
    interface Token {
        session: Session;
        cookie: Dict<string>;
        base_url: string;
        info: Info;
    }
    interface Info {
        uin: number;
        username: string;
        nickname: string;
        avatar: string;
        remark: string;
        sex: Sex;
    }
    interface OriginalInfo {
        Uin: number;
        UserName: string;
        NickName: string;
        HeadImgUrl: string;
        RemarkName: string;
        Sex: number;
    }
    interface Session {
        uuid?: string;
        skey?: string;
        sid?: string;
        syncKey?: string;
        passTicket?: string;
        formatedSyncKey?: string;
        webwxDataTicket?: string;
    }
}
