import { type CustomAuthConfig } from '../types';
interface CookieOptions {
    expires?: number;
    path?: string;
    secure?: boolean;
    sameSite?: 'strict' | 'lax' | 'none';
    domain?: string;
}
interface TokenManagerConfig {
    baseUrl: string;
    refreshEndpoint: string;
    cookieOptions?: Partial<CookieOptions>;
}
export declare class TokenManager<T extends CustomAuthConfig> {
    private readonly cookieOptions;
    private readonly baseUrl;
    private readonly refreshEndpoint;
    constructor(config: TokenManagerConfig);
    setAccessToken(tokenInfo: T['TokenInfo']): void;
    getAccessToken(): {
        token: string | undefined;
        expiresAt: number | null;
    };
    setRefreshToken(tokenInfo: T['TokenInfo']): void;
    getRefreshToken(): string | undefined;
    refreshTokens(): Promise<boolean>;
    /**
     * Handles setting both access and refresh tokens with proper expiry
     */
    handleSetAccessAndRefreshTokens(accessToken: string, refreshToken: string | undefined, accessTokenExpiresIn: number, refreshTokenExpiresIn?: number): void;
    clearAllTokens(): void;
    isAccessTokenExpired(): boolean;
    handleAuthTokens(authResponse: {
        accessToken: T['TokenInfo'];
        refreshToken?: T['TokenInfo'];
    }): void;
    private setCookie;
    private getCookie;
    private removeCookie;
}
export declare const createTokenManager: <T extends CustomAuthConfig>(config: TokenManagerConfig) => TokenManager<T>;
export declare const useTokenManager: <T extends CustomAuthConfig>(config: TokenManagerConfig) => TokenManager<T>;
export {};
