/// <reference types="node" />
import { EventEmitter } from 'events';
import Auth, { ThirdPlatformAuthType, WalletAuthOptions } from '@soundsright/auth';
import { BaseService } from '@soundsright/service';
export * from './types';
export declare const UserEvent: {
    TokenExpired: string;
    LoginSuccess: string;
    Logout: string;
    UserUpdate: string;
};
export default class User extends EventEmitter {
    private auth;
    private service;
    accessToken: string;
    refreshToken: string;
    private refreshing;
    constructor(auth: Auth, service: BaseService);
    private authLogin;
    /**
     * 通过第三方平台登录
     * @param type - 第三方登录类型：'Google' | 'Facebook' | 'Twitter'
     * @returns 用户信息
     */
    loginByThirdPlatform(type: ThirdPlatformAuthType): Promise<any>;
    /**
     * 通过钱包连接和签名登录
     * @param options - 钱包授权的选项
     * ```ts
     * {
     *   connectType?: ConnectType枚举或"MetaMask"|"WalletConnect",
     *   signMessage?: 签名消息
     * }
     * @returns 用户信息
     * ```
     */
    loginByWallet(options?: WalletAuthOptions): Promise<any>;
    /**
     * 通过cookie记录的token进行登录
     * @returns 用户信息
     */
    loginByCookie(): Promise<any>;
    private updateToken;
    private removeToken;
    /**
     * 设置是否记住用户登录状态
     * @param remember - 是否记住用户登录状态
     * @param days - 记住的天数，默认为7天
     */
    setRememberState(remember: boolean, days?: number): void;
    /**
     * 查询记住用户状态的天数
     * @returns number，返回记住的天数。如果为0，则仅在Session期有效。
     */
    getRememberDays(): number;
    /**
     * 查询是否记住用户的状态
     * @returns boolean
     */
    getRememberState(): boolean;
    private _refresh;
    /**
     * 刷新用户Token
     * @returns
     * ```ts
     * { accessToken: string, refreshToken: string }
     * ```
     */
    refresh(): Promise<any>;
    /**
     * 获取当前登录的用户基本信息
     * @returns 包括 { UserCode, NickName, Picture, Email, Phone, WalletAddr, NewUser }
     */
    getCurrentUser(): any;
    /**
     * 用户退出
     */
    logout(): Promise<void>;
    /**
     * 查询用户是否登录
     * @returns boolean
     */
    isLogin(): boolean;
    /**
     * 查询用户是否已经绑定钱包
     * @returns boolean
     */
    isWalletBound(): boolean;
    private authBind;
    /**
     * 绑定第三方平台账号
     * @param type - 第三方登录类型：'Google' | 'Facebook' | 'Twitter'
     * @returns 用户信息
     */
    bindThirdPlatform(type: ThirdPlatformAuthType): Promise<any>;
    /**
     * 通过钱包连接和签名绑定钱包
     * @param options - 钱包授权的选项
     * ```ts
     * {
     *   connectType?: ConnectType枚举或"MetaMask"|"WalletConnect",
     *   signMessage?: 签名消息
     * }
     * @returns 用户信息
     * ```
     */
    bindWallet(options?: WalletAuthOptions): Promise<any>;
    /**
     * 检查用户是否具备执行合约的条件。若不符合条件，则抛出相应的异常 - 该方法应作为执行合约的前置检测方法（模板方法）
     * Error类型有：
     * - UnauthorizedError，用户未登录，需要弹出登录窗口
     * - WalletNotBoundError，用户未绑定钱包，需要弹出绑定钱包
     * - WalletNotConnectedError，用户未连接钱包，需要弹出钱包连接
     * - WalletNotMatchError，用户已连接的钱包地址与绑定的钱包地址不匹配
     * 可以使用try catch 来处理相应的错误，可以通过error.name 来方便的判定类型。
     * 在项目中结合界面操作逻辑，对该方法做进一步封装
     * ```ts
     * try {
     *   sdk.user.checkUserWeb3Condition();
     * } catch (e) {
     *  if(e.name === 'UnauthorizedError') {
     *    // do something
     *  }
     *  ...
     * }
     * ```
     */
    checkUserWeb3Condition(): void;
}
