import { AngularFireAuth } from 'angularfire2/auth';
import { Router, NavigationExtras } from '@angular/router';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import * as firebase from 'firebase';
import { EzfaOptions } from './ezfa-options.class';
import { EzfaOauthMethod } from './ezfa-oauth-method.enum';
import { EzfaProviderLabels } from './ezfa-provider-labels.class';
import { EzfaSignedInEvent } from './ezfa-signed-in-event.class';
import { EzfaSignedOutEvent } from './ezfa-signed-out-event.class';
import { EzfaEmailChangedEvent } from './ezfa-email-changed-event.class';
import { EzfaProviderLinkedEvent } from './ezfa-provider-linked-event.class';
import { EzfaProviderUnlinkedEvent } from './ezfa-provider-unlinked-event.class';
export declare class EzfaService {
    protected router: Router;
    protected afAuth: AngularFireAuth;
    protected options: EzfaOptions;
    static STORAGE_KEY_PERSISTENCE: string;
    static ENABLED_PROVIDERS: string[];
    static ENABLED_OAUTH_PROVIDERS: string[];
    static OUT_OF_BAND_MODES: {
        resetPassword: string;
        verifyEmail: string;
        recoverEmail: string;
    };
    protected oauthMethod$: BehaviorSubject<EzfaOauthMethod>;
    protected localPersistenceEnabled$: BehaviorSubject<boolean>;
    protected routeChanges$: Subject<string>;
    protected signedInEvents$: Subject<EzfaSignedInEvent>;
    protected signedOutEvents$: Subject<EzfaSignedOutEvent>;
    protected providerLinkedEvents$: Subject<EzfaProviderLinkedEvent>;
    protected providerUnlinkedEvents$: Subject<EzfaProviderUnlinkedEvent>;
    protected emailChangedEvents$: Subject<EzfaEmailChangedEvent>;
    protected savedPopupPromise_: Promise<firebase.auth.UserCredential> | null;
    constructor(router: Router, afAuth: AngularFireAuth, options: EzfaOptions);
    readonly auth: firebase.auth.Auth;
    readonly authState: Observable<firebase.User>;
    readonly applicationLabel: string;
    readonly rootSlug: string;
    providerIds: string[];
    readonly oauthProviderIds: string[];
    readonly passwordProviderEnabled: boolean;
    readonly providerLabels: EzfaProviderLabels;
    requireDisplayName: boolean;
    requireTos: boolean;
    sendEmailVerificationLink: boolean;
    oauthMethod: EzfaOauthMethod;
    getProviderById(id: string): Promise<firebase.auth.AuthProvider>;
    routerLink(slug?: string | null): string[];
    navigate(slug?: string | null, extras?: NavigationExtras): Promise<boolean>;
    readonly localPersistenceEnabled: Observable<boolean>;
    setPersistenceLocal(b: boolean): Promise<void>;
    readonly routeChanges: Observable<string>;
    onRouteChange(route: string): void;
    readonly signedInEvents: Observable<EzfaSignedInEvent>;
    onSignedIn(event: EzfaSignedInEvent): void;
    readonly signedOutEvents: Observable<EzfaSignedOutEvent>;
    onSignedOut(event: EzfaSignedOutEvent): void;
    readonly emailChangedEvents: Observable<EzfaEmailChangedEvent>;
    onEmailChanged(event: EzfaEmailChangedEvent): void;
    readonly providerLinkedEvents: Observable<EzfaProviderLinkedEvent>;
    onProviderLinked(event: EzfaProviderLinkedEvent): void;
    readonly providerUnlinkedEvents: Observable<EzfaProviderUnlinkedEvent>;
    onProviderUnlinked(event: EzfaProviderUnlinkedEvent): void;
    savedPopupPromise: Promise<firebase.auth.UserCredential> | null;
}
