import { type ConnectionInformations, type CreateUser, type DatabaseInterface } from '@accounts/types';
import { type IUser } from './entity/User';
import { Email } from './entity/Email';
import { Service } from './entity/Service';
import { Session } from './entity/Session';
import { type Constructor } from '@mikro-orm/core';
import { type User as AccountsUser } from '@accounts/types/lib/types/user';
import { type Session as ISession } from '@accounts/types/lib/types/session/session';
export declare class AccountsMikroOrm<CustomUser extends IUser<any, any, any>, CustomEmail extends Email<any>, CustomSession extends Session<any>, CustomService extends Service<any>> implements DatabaseInterface {
    private context?;
    private get em();
    private UserEntity;
    private EmailEntity;
    private ServiceEntity;
    private SessionEntity;
    private get userRepository();
    private get emailRepository();
    private get serviceRepository();
    private get sessionRepository();
    constructor(EmailEntity?: Constructor<CustomEmail | Email<any>>, ServiceEntity?: Constructor<CustomService | Service<any>>, SessionEntity?: Constructor<CustomSession | Session<any>>, UserEntity?: Constructor<CustomUser | IUser<any, any, any>>);
    findUserByEmail(email: string): Promise<AccountsUser | null>;
    findUserByUsername(username: string): Promise<AccountsUser | null>;
    findUserById(userId: string): Promise<AccountsUser | null>;
    findUserByResetPasswordToken(token: string): Promise<AccountsUser | null>;
    findUserByEmailVerificationToken(token: string): Promise<AccountsUser | null>;
    createUser({ username, email, password, ...otherFields }: CreateUser): Promise<string>;
    setUsername(userId: string, newUsername: string): Promise<void>;
    findUserByServiceId(serviceName: string, serviceId: string): Promise<AccountsUser | null>;
    setService(userId: string, serviceName: string, data: object, token?: string, flush?: boolean): Promise<void>;
    unsetService(userId: string, serviceName: string): Promise<void>;
    findPasswordHash(userId: string): Promise<string | null>;
    setPassword(userId: string, newPassword: string, flush?: boolean): Promise<void>;
    addResetPasswordToken(userId: string, email: string, token: string, reason: string): Promise<void>;
    setResetPassword(userId: string, email: string, newPassword: string): Promise<void>;
    addEmail(userId: string, newEmail: string, verified: boolean): Promise<void>;
    removeEmail(userId: string, email: string): Promise<void>;
    verifyEmail(userId: string, email: string): Promise<void>;
    addEmailVerificationToken(userId: string, email: string, token: string): Promise<void>;
    removeAllResetPasswordTokens(userId: string): Promise<void>;
    setUserDeactivated(userId: string, deactivated: boolean): Promise<void>;
    findSessionById(sessionId: string): Promise<ISession | null>;
    findSessionByToken(token: string): Promise<ISession | null>;
    findUserByLoginToken(token: string): Promise<AccountsUser | null>;
    addLoginToken(userId: string, email: string, token: string): Promise<void>;
    removeAllLoginTokens(userId: string): Promise<void>;
    createSession(userId: string, token: string, connection?: ConnectionInformations, extra?: object): Promise<string>;
    updateSession(sessionId: string, connection: ConnectionInformations): Promise<void>;
    invalidateSession(sessionId: string): Promise<void>;
    invalidateAllSessions(userId: string, excludedSessionIds?: string[]): Promise<void>;
}
