import { UserProvider } from "../../misc/custom-types";
import { Authentication, PasswordEncoder } from "./authentication";
import { PathInfo } from "../../routes/abstracts";
import { UserDetails } from "../user-details";
export declare class JWTAuthentication extends Authentication {
    private expiresIn;
    private secret;
    /**
     * @param expiresIn time in milliseconds or a string like '5h', '15m', etc. until the token expires
     */
    constructor(expiresIn: number | string, userProvider: UserProvider, passwordEncoder: PasswordEncoder, secret: string);
    createAccessToken(info: PathInfo): Promise<ExplicitJwtToken<UserDetails>>;
    generateToken<T extends UserDetails>(user: T): ExplicitJwtToken<T>;
    authenticate(info: PathInfo): Promise<UserDetails>;
}
export interface JwtToken<T extends UserDetails> {
    iat: number;
    exp: number;
    user: T;
}
export interface ExplicitJwtToken<T extends UserDetails> {
    token: string;
    user: T;
}
