import { CoreModel } from "../models/coremodel.js";
import CryptoService, { JWTOptions } from "../services/cryptoservice.js";
import { DeepPartial, Service, ServiceParameters } from "../services/service.js";
import { Store } from "../stores/store.js";
import { OperationContext } from "./context.js";
import { CookieOptions } from "./cookie.js";
/**
 * Manage load and save of sessions
 */
export declare abstract class SessionManager<T extends ServiceParameters = ServiceParameters> extends Service<T> {
    /**
     * Load a session based on context
     * @param context
     */
    abstract load(context: OperationContext): Promise<Session>;
    /**
     * Save the session within the context
     * @param context
     * @param session
     */
    abstract save(context: OperationContext, session: Session): Promise<void>;
    /**
     * Create a new session
     */
    abstract newSession(context: OperationContext): Promise<Session>;
}
export declare class CookieSessionParameters extends ServiceParameters {
    /**
     * Options for issue JWT token
     */
    jwt?: JWTOptions;
    /**
     * Cookie configuration for session
     */
    cookie?: CookieOptions;
    constructor(params: any);
}
/**
 * SessionManager that store info in a cookie
 *
 * If SessionStore service exists, only uuid is in the cookie
 * the rest of data is stored within the session store
 *
 * @WebdaModda
 */
export declare class CookieSessionManager<T extends CookieSessionParameters = CookieSessionParameters> extends SessionManager<T> {
    cryptoService: CryptoService;
    sessionStore: Store<CoreModel & {
        session: any;
    }>;
    /**
     * @override
     */
    loadParameters(params: DeepPartial<T>): ServiceParameters;
    /**
     * @override
     */
    resolve(): this;
    /**
     * @override
     */
    load(context: OperationContext): Promise<Session>;
    /**
     * @override
     */
    newSession(context: OperationContext<any, any>): Promise<Session>;
    /**
     * @override
     */
    save(context: OperationContext, session: Session): Promise<void>;
}
/**
 * Session
 */
export declare class Session {
    protected changed: boolean;
    /**
     * Session uuid
     */
    uuid: string;
    /**
     * User id
     */
    userId: string;
    /**
     * Ident used
     */
    identUsed: string;
    /**
     * User current roles
     */
    roles: string[];
    /**
     * Login
     * @param userId
     * @param identUsed
     */
    login(userId: string, identUsed: string): void;
    /**
     * Logout
     */
    logout(): void;
    /**
     * If session is authenticated
     */
    isLogged(): boolean;
    /**
     * Session is dirty and requires save
     * @returns
     */
    isDirty(): boolean;
    /**
     * Get the proxy to be able to track modification
     * @returns
     */
    getProxy(): this;
}
/**
 * Unknown session that allows all keys
 */
export declare class UnknownSession extends Session {
    /**
     * Allow any type of fields
     */
    [key: string]: any;
}
