import { AuthConfig } from './../config';
import { HttpClient } from 'aurelia-fetch-client';
import { Aurelia } from "aurelia-framework";
import { Router } from "aurelia-router";
import { Datacontext } from '../data/data-context';
import { Config } from '../config';
import { AuthService } from './auth-service';
export declare abstract class OAuthClientWrapper {
    protected config: AuthConfig;
    abstract accessToken(): Promise<string>;
    abstract handleSignInRedirect(): Promise<void>;
    abstract isAuthenticated(): Promise<boolean>;
    abstract logout(): Promise<void>;
    abstract getUserProfile(): Promise<any>;
    constructor(config: AuthConfig);
    login(): void;
    protected abstract loginWithRedirect(): Promise<void>;
}
export declare abstract class BaseOAuthService<T extends OAuthClientWrapper> extends AuthService {
    protected router: Router;
    protected app: Aurelia;
    protected dataContext: Datacontext;
    protected httpClient: HttpClient;
    protected client: T;
    constructor(router: Router, app: Aurelia, dataContext: Datacontext, config: Config, httpClient: HttpClient);
    addBearerTokenToHttpClient(): void;
    accessToken(): Promise<string>;
    protected getClient(): Promise<T>;
    protected abstract makeClient(): Promise<T>;
    login(navInstruction: string): Promise<void>;
    navigateToSavedInstruction(): void;
    handleAuthentication(): Promise<void>;
    isAuthenticated(): Promise<boolean>;
    logout(): Promise<void>;
    getProfile(): Promise<void>;
    checkAccess(resource: string, action: string): boolean;
}
