import { GenerateApiKey, ExpiresIn, RefreshApiKey, GenerateDisposableToken, DisposableTokenScope } from '../../../index';
import { IAuthClient } from '../../../clients/IAuthClient';
import { PermissionScope } from '../../../auth/tokens/permission-scope';
import { DisposableTokenProps } from '../../../auth/tokens/disposable-token-scope';
export interface BaseAuthClientProps {
    createAuthClient: () => IAuthClient;
}
export declare abstract class AbstractAuthClient implements IAuthClient {
    protected readonly authClient: IAuthClient;
    protected constructor(props: BaseAuthClientProps);
    /**
     * Generates a new API key, along with a refresh token to refresh the API key before expiry.
     *
     * @param {PermissionScope} scope - controls the permissions that the new key will have
     * @param {string} expiresIn - How long the API key should be valid for in epoch timestamp.
     * @returns {Promise<GenerateApiKey.Response>} -
     * {@link GenerateApiKey.Success} containing the API key, refresh token, origin and epoch timestamp when token expires.
     * If the API key never expires, then no refresh token will be returned and expires at timestamp will be infinite.
     * {@link GenerateApiKey.Error} on failure.
     */
    generateApiKey(scope: PermissionScope, expiresIn: ExpiresIn): Promise<GenerateApiKey.Response>;
    /**
     * @deprecated please use `generateApiKey` instead
     */
    generateAuthToken(scope: PermissionScope, expiresIn: ExpiresIn): Promise<GenerateApiKey.Response>;
    /**
     * Refreshes an API key.  Returns a new API key and refresh token, that will be able to be refreshed again in the future.
     * The new API key will be valid for the same length of time as the original key, starting from the time of refresh.
     * The original api key will still work until its expired.
     *
     * @param {string} refreshToken - Refresh token used to refresh the API key.
     * @returns {Promise<RefreshApiKey.Response>} -
     * {@link RefreshApiKey.Success} containing the new API key, refresh token, origin and epoch timestamp when the API key expires.
     * {@link RefreshApiKey.Error} on failure.
     */
    refreshApiKey(refreshToken: string): Promise<RefreshApiKey.Response>;
    /**
     * @deprecated please use `refreshApiKey` instead
     */
    refreshAuthToken(refreshToken: string): Promise<RefreshApiKey.Response>;
    /**
     * Generates a new disposable, fine-grained access token.
     *
     * @param {DisposableTokenScope} scope - controls the permissions that the new token will have
     * @param {string} expiresIn - How long the token is valid for in epoch timestamp.
     * @param {DisposableTokenProps} disposableTokenProps - Additional properties for the API
     * @returns {Promise<GenerateDisposableToken.Response>} -
     * {@link GenerateDisposableToken.Success} containing the api token, origin and epoch timestamp when token expires.
     * {@link GenerateDisposableToken.Error} on failure.
     */
    generateDisposableToken(scope: DisposableTokenScope, expiresIn: ExpiresIn, disposableTokenProps?: DisposableTokenProps): Promise<GenerateDisposableToken.Response>;
}
