import AsyncStorageInterface from './AsyncStorageInterface';
import TokenGeneratorInterface from './TokenGenerator/TokenGeneratorInterface';
import { Token } from './TokenGenerator/types';
import type TokenStorageInterface from './TokenStorageInterface';
import type { HasExpiresAt } from './TokenStorageInterface';
import { Logger } from './utils/logging';
declare class TokenStorage<T extends Token> implements TokenStorageInterface<T> {
    #private;
    accessTokenKey: string;
    constructor(tokenGenerator: TokenGeneratorInterface<T>, asyncStorage: AsyncStorageInterface, accessTokenKey?: string, logger?: Logger);
    setAsyncStorage(asyncStorage: AsyncStorageInterface): void;
    hasAccessToken(): Promise<boolean>;
    getAccessToken(): Promise<null | string>;
    getAccessTokenObject(): Promise<null | (T & HasExpiresAt)>;
    logout(): Promise<void>;
    private _addExpiresAtToResponseData;
    generateToken(parameters: unknown): Promise<T & HasExpiresAt>;
    refreshToken(): Promise<T & HasExpiresAt>;
    private handleTokenResponse;
    /**
     * Return the number of second when the token will expire
     * return value can be negative if the token is already expired
     */
    getCurrentTokenExpiresIn(): Promise<number | null>;
    private _storeAccessToken;
}
export default TokenStorage;
