UNPKG

@angular/fire

Version:

The official library for Firebase and Angular

188 lines (182 loc) 5.96 kB
import { Injectable, Inject, Optional, NgZone, ɵɵdefineInjectable, ɵɵinject, NgModule } from '@angular/core'; import { Router } from '@angular/router'; import { of, Observable, pipe } from 'rxjs'; import { map, take, observeOn, switchMap, shareReplay } from 'rxjs/operators'; import { ɵAngularFireSchedulers, ɵkeepUnstableUntilFirstFactory, ɵfirebaseAppFactory, FIREBASE_OPTIONS, FIREBASE_APP_NAME } from '@angular/fire'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ const ɵ0 = /** * @param {?} user * @return {?} */ user => !!user; /** @type {?} */ const loggedIn = map((ɵ0)); class AngularFireAuthGuard { /** * @param {?} options * @param {?} nameOrConfig * @param {?} zone * @param {?} router */ constructor(options, nameOrConfig, zone, router) { this.router = router; this.canActivate = (/** * @param {?} next * @param {?} state * @return {?} */ (next, state) => { /** @type {?} */ const authPipeFactory = (/** @type {?} */ (next.data.authGuardPipe)) || ((/** * @return {?} */ () => loggedIn)); return this.authState.pipe(take(1), authPipeFactory(next, state), map((/** * @param {?} can * @return {?} */ can => typeof can === 'boolean' ? can : this.router.createUrlTree((/** @type {?} */ (can)))))); }); /** @type {?} */ const schedulers = new ɵAngularFireSchedulers(zone); /** @type {?} */ const keepUnstableUntilFirst = ɵkeepUnstableUntilFirstFactory(schedulers); /** @type {?} */ const auth = of(undefined).pipe(observeOn(new ɵAngularFireSchedulers(zone).outsideAngular), switchMap((/** * @return {?} */ () => zone.runOutsideAngular((/** * @return {?} */ () => import('firebase/auth'))))), map((/** * @return {?} */ () => ɵfirebaseAppFactory(options, zone, nameOrConfig))), map((/** * @param {?} app * @return {?} */ app => zone.runOutsideAngular((/** * @return {?} */ () => app.auth())))), shareReplay({ bufferSize: 1, refCount: false })); this.authState = auth.pipe(switchMap((/** * @param {?} auth * @return {?} */ auth => new Observable(auth.onAuthStateChanged.bind(auth)))), keepUnstableUntilFirst); } } AngularFireAuthGuard.decorators = [ { type: Injectable, args: [{ providedIn: 'any' },] } ]; /** @nocollapse */ AngularFireAuthGuard.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [FIREBASE_OPTIONS,] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FIREBASE_APP_NAME,] }] }, { type: NgZone }, { type: Router } ]; /** @nocollapse */ AngularFireAuthGuard.ɵprov = ɵɵdefineInjectable({ factory: function AngularFireAuthGuard_Factory() { return new AngularFireAuthGuard(ɵɵinject(FIREBASE_OPTIONS), ɵɵinject(FIREBASE_APP_NAME, 8), ɵɵinject(NgZone), ɵɵinject(Router)); }, token: AngularFireAuthGuard, providedIn: "any" }); if (false) { /** @type {?} */ AngularFireAuthGuard.prototype.authState; /** @type {?} */ AngularFireAuthGuard.prototype.canActivate; /** * @type {?} * @private */ AngularFireAuthGuard.prototype.router; } /** @type {?} */ const canActivate = (/** * @param {?} pipe * @return {?} */ (pipe) => ({ canActivate: [AngularFireAuthGuard], data: { authGuardPipe: pipe } })); const ɵ1 = /** * @param {?} user * @return {?} */ user => !!user && !user.isAnonymous; /** @type {?} */ const isNotAnonymous = map((ɵ1)); const ɵ2 = /** * @param {?} user * @return {?} */ (user) => user ? user.getIdTokenResult() : of(null); /** @type {?} */ const idTokenResult = switchMap((ɵ2)); const ɵ3 = /** * @param {?} user * @return {?} */ user => !!user && user.emailVerified; /** @type {?} */ const emailVerified = map((ɵ3)); const ɵ4 = /** * @param {?} idTokenResult * @return {?} */ idTokenResult => idTokenResult ? idTokenResult.claims : []; /** @type {?} */ const customClaims = pipe(idTokenResult, map((ɵ4))); /** @type {?} */ const hasCustomClaim = (/** * @param {?} claim * @return {?} */ (claim) => pipe(customClaims, map((/** * @param {?} claims * @return {?} */ claims => claims.hasOwnProperty(claim))))); /** @type {?} */ const redirectUnauthorizedTo = (/** * @param {?} redirect * @return {?} */ (redirect) => pipe(loggedIn, map((/** * @param {?} loggedIn * @return {?} */ loggedIn => loggedIn || redirect)))); /** @type {?} */ const redirectLoggedInTo = (/** * @param {?} redirect * @return {?} */ (redirect) => pipe(loggedIn, map((/** * @param {?} loggedIn * @return {?} */ loggedIn => loggedIn && redirect || true)))); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class AngularFireAuthGuardModule { } AngularFireAuthGuardModule.decorators = [ { type: NgModule, args: [{ providers: [AngularFireAuthGuard] },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { AngularFireAuthGuard, AngularFireAuthGuardModule, canActivate, customClaims, emailVerified, hasCustomClaim, idTokenResult, isNotAnonymous, loggedIn, redirectLoggedInTo, redirectUnauthorizedTo }; //# sourceMappingURL=angular-fire-auth-guard.js.map