import { Observable } from 'rxjs';
import { Router } from '@angular/router';
import { BaseStore } from './_base.store';
import { StateStorage } from '@ngneat/elf-persist-state';
import { AppBaseStore } from './app-base.store';
import * as i0 from "@angular/core";
export interface AuthBaseStoreProps<USER> {
    token?: string;
    user?: USER;
}
export interface AuthBaseStoreLoginModel {
    username: string;
    password: string;
    rememberMe?: boolean;
}
export declare const AuthStorageEngine: StateStorage;
export declare class _AuthBaseStore<T extends AuthBaseStoreProps<any>, L extends AuthBaseStoreLoginModel> extends BaseStore<T> {
    opts: {
        loginApi: (model: L) => Observable<T>;
        meApi: () => Observable<T['user']>;
    };
    protected router: Router;
    protected app: AppBaseStore;
    private readonly snackbar;
    constructor(opts?: {
        loginApi: (model: L) => Observable<T>;
        meApi: () => Observable<T['user']>;
    });
    isAuthenticatedSignal: import("@angular/core").Signal<boolean>;
    isLoggedInSignal: import("@angular/core").Signal<boolean>;
    permissionKeysSignal: import("@angular/core").Signal<string[]>;
    isAuthenticated$: Observable<boolean>;
    isLoggedIn$: Observable<boolean>;
    permissionKeys$: Observable<string[]>;
    isAuthenticated(state?: T): boolean;
    isLoggedIn(state?: T): boolean;
    isSuper(): boolean;
    permissionKeys(state?: T): string[];
    login(model: L): Observable<T>;
    logout(optionalNavigate?: boolean): Promise<boolean>;
    /**
     *
     * @param intervalPeriod ms - if provided, it will call the refresh within that interval repeatedly
     */
    refresh(intervalPeriod?: number): Observable<boolean>;
    protected checkLoginValidity(result: T): Observable<T>;
    protected isForbiddenToEnter(state: T): boolean;
}
export declare class AuthBaseStore extends _AuthBaseStore<AuthBaseStoreProps<any>, AuthBaseStoreLoginModel> {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AuthBaseStore, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AuthBaseStore>;
}
