import mongoose from "mongoose";
import User, { IUser, Platform } from "./models/User";
import { MongoError } from "mongodb";
import FriendRequest, { IFriendRequest } from "./models/FriendRequest";
import { verifyToken } from "./auth";
import { hooks } from "./hooks";
export declare type ObjectId = string | mongoose.Schema.Types.ObjectId;
export declare type AuthProvider = 'email' | 'facebook' | 'anonymous';
export declare function connectDatabase(cb?: (err: MongoError) => void): Promise<void>;
export declare function pingUser(userId: ObjectId): Promise<boolean>;
export declare function authenticate({ accessToken, deviceId, platform, email, password, token }: {
    accessToken?: string;
    deviceId?: string;
    platform?: string;
    email?: string;
    password?: string;
    token?: string;
}): Promise<any>;
export declare function updateUser(_id: ObjectId, fields: Partial<IUser>): Promise<boolean>;
export declare function assignDeviceToUser(user: IUser, deviceId: string, platform: Platform): Promise<void>;
/**
 * Use to addXp in user account and increase Level
 * @param _id
 * @param xp
 * @param levels //should be a array of json in which each item contains format {xp:3000}
 */
export declare function addXp(_id: ObjectId, xp: number, levels: any[]): Promise<false | any[]>;
export declare function getOnlineUserCount(): Promise<number>;
export declare function sendFriendRequest(senderId: ObjectId, receiverId: ObjectId): Promise<false | void>;
export declare function consumeFriendRequest(receiverId: ObjectId, senderId: ObjectId, accept?: boolean): Promise<void>;
export declare function blockUser(userId: ObjectId, blockedUserId: ObjectId): Promise<void>;
export declare function unblockUser(userId: ObjectId, blockedUserId: ObjectId): Promise<void>;
export declare function getFriendRequests(userId: ObjectId): Promise<IFriendRequest[]>;
export declare function getSentFriendRequests(userId: ObjectId): Promise<IFriendRequest[]>;
export declare function getFriendRequestsProfile(friendRequests: IFriendRequest[], fields?: Array<keyof IUser>): Promise<IUser<any>[]>;
export declare function getSentFriendRequestsProfile(friendRequests: IFriendRequest[], fields?: Array<keyof IUser>): Promise<IUser<any>[]>;
export declare function getFriends(user: IUser, fields?: Array<keyof IUser>): Promise<IUser<any>[]>;
export declare function getOnlineFriends(user: IUser, fields?: Array<keyof IUser>): Promise<IUser<any>[]>;
export declare function getFriendChat(userId: ObjectId, friendId: ObjectId): Promise<false | {
    inbox: import("./models/FriendChat").Message[];
    sent: import("./models/FriendChat").Message[];
}>;
export declare function deleteChatMessage(userId: ObjectId, friendId: ObjectId, messageDetails: any): Promise<any>;
export declare function sendMessageToFriend(userId: ObjectId, friendId: ObjectId, message: string): Promise<void>;
export { verifyToken, FriendRequest, IFriendRequest, User, IUser, mongoose, hooks };
