import { type Ref, EntitySchema } from '@mikro-orm/core';
import { type IUser, type UserCtor } from './User';
export declare class Session<CustomUser extends IUser<any, any, any>> {
    id: number;
    createdAt: Date;
    updatedAt: Date;
    user: Ref<CustomUser>;
    token: string;
    valid: boolean;
    userAgent?: string;
    ip?: string;
    extra?: object;
    constructor({ user, token, valid, userAgent, ip, extra }: SessionCtorArgs<CustomUser>);
}
export type SessionCtorArgs<CustomUser extends IUser<any, any, any>> = {
    user: CustomUser;
    token: string;
    valid: boolean;
    userAgent?: string | null;
    ip?: string | null;
    extra?: object;
};
export type SessionCtor<CustomUser extends IUser<any, any, any>, CustomSessionCtorArgs extends SessionCtorArgs<CustomUser> = SessionCtorArgs<CustomUser>> = new (args: CustomSessionCtorArgs) => Session<CustomUser>;
export declare const getSessionCtor: <CustomUser extends IUser<any, any, any>, CustomSessionCtorArgs extends SessionCtorArgs<CustomUser> = SessionCtorArgs<CustomUser>>({ abstract, }?: {
    abstract?: boolean | undefined;
}) => SessionCtor<CustomUser, CustomSessionCtorArgs>;
export declare const getSessionSchema: ({ UserEntity, abstract, }?: {
    UserEntity?: UserCtor<any, any, any, any> | undefined;
    abstract?: boolean | undefined;
}) => EntitySchema<Session<any>, never>;
