import { AxiosInstance } from 'axios'; import { AuthStorage } from '../types'; export declare type LoginCredentials = { email: string; password: string; otp?: string; }; export declare type AuthOptions = { mode: 'cookie' | 'json'; autoRefresh: boolean; storage: AuthStorage; }; export declare type AuthResponse = { access_token: string; expires: number; refresh_token?: string; }; export declare class AuthHandler { private axios; private storage; private mode; private autoRefresh; private autoRefreshTimeout; private expiresAt?; /** * Used for tracking if accessToken is restored from store to config. * Axios uses this number for interceptor. If it's number it means it's inited. */ private accessTokenInitId; constructor(axios: AxiosInstance, options: AuthOptions); get token(): string | null; set token(val: string | null); login(credentials: LoginCredentials): Promise<{ data: AuthResponse; }>; /** * Refresh access token 10 seconds before expiration */ refresh(isInitialInvoke: Boolean): Promise<{ data: AuthResponse; } | undefined>; logout(): Promise; password: { request: (email: string) => Promise; reset: (token: string, password: string) => Promise; }; /** * There is no prettier way to do this. We need to set access token before first request. * This way we intercept axios request and only first time request token from store, * and allows us to do new Directus(url).items(col).read() without having to handle * access_token restoration in methods */ private initializeAccessToken; private removeTimeout; }