import { AxiosRequestConfig } from "axios";
/** Representa um par de tokens */
export interface Token {
    accessToken: string;
    refreshToken: string;
}
/** Configurações do cliente */
export interface OAuthClientOptions {
    tokenUrl: string;
    clientId: string;
    clientSecret: string;
    storage?: OAuthStorage;
}
/** Interface para estratégia de armazenamento de tokens */
export interface OAuthStorage {
    get(): Token;
    save(token: Token): Token;
}
/** Interface de função para requisição de grantTypes customizados */
export declare type OAuthGrant = (request: AxiosRequestConfig, options?: OAuthClientOptions) => AxiosRequestConfig;
export declare function ClientCredentialsGrant(scopes?: string[]): OAuthGrant;
/**
 * Obtém um novo token de acesso utilizando um token de atualização
 * @param refreshToken token de atualização
 */
export declare function RefreshTokenGrant(refreshToken: string): OAuthGrant;
/**
 * Obtém um novo ticket para conexão com o Socket.io
 * @param accessToken token de acesso
 */
export declare function TicketGrant(accessToken: string): OAuthGrant;
interface TokenPayload {
    sub: string;
    exp: number;
}
/**
 * Cria um cliente OAuth para gerenciar tokens
 */
export declare class OAuthClient {
    readonly options: Required<OAuthClientOptions>;
    constructor(options: OAuthClientOptions);
    get accessToken(): string;
    get refreshToken(): string;
    get tokenPayload(): TokenPayload;
    get isTokenExpired(): boolean;
    /**
     * Obtém um novo token de acesso utilizando uma granType customizado
     * @param grantType Função de grantType
     */
    requestToken(grantType: OAuthGrant): Promise<Token>;
    /**
     * Faz login e salva os tokens
     * @param scopes Escopos do token
     */
    login(scopes: string[]): Promise<Token>;
    /**
     * Atualiza os tokens e salva
     */
    refreshAccessToken(): Promise<Token>;
    /** Obtém o token de acesso e atualiza caso precise */
    getToken(): string | Promise<any>;
}
export {};
