UNPKG

@angular/fire

Version:

The official library for Firebase and Angular

166 lines 13.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Inject, Injectable, NgZone, Optional } from '@angular/core'; import { Router } from '@angular/router'; import { Observable, of, pipe } from 'rxjs'; import { map, observeOn, shareReplay, switchMap, take } from 'rxjs/operators'; import { ɵAngularFireSchedulers, FIREBASE_OPTIONS, FIREBASE_APP_NAME, ɵfirebaseAppFactory, ɵkeepUnstableUntilFirstFactory } from '@angular/fire'; import * as i0 from "@angular/core"; import * as i1 from "@angular/fire"; import * as i2 from "@angular/router"; const ɵ0 = /** * @param {?} user * @return {?} */ user => !!user; /** @type {?} */ export const loggedIn = map((ɵ0)); export 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 = i0.ɵɵdefineInjectable({ factory: function AngularFireAuthGuard_Factory() { return new AngularFireAuthGuard(i0.ɵɵinject(i1.FIREBASE_OPTIONS), i0.ɵɵinject(i1.FIREBASE_APP_NAME, 8), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i2.Router)); }, token: AngularFireAuthGuard, providedIn: "any" }); if (false) { /** @type {?} */ AngularFireAuthGuard.prototype.authState; /** @type {?} */ AngularFireAuthGuard.prototype.canActivate; /** * @type {?} * @private */ AngularFireAuthGuard.prototype.router; } /** @type {?} */ export const canActivate = (/** * @param {?} pipe * @return {?} */ (pipe) => ({ canActivate: [AngularFireAuthGuard], data: { authGuardPipe: pipe } })); const ɵ1 = /** * @param {?} user * @return {?} */ user => !!user && !user.isAnonymous; /** @type {?} */ export const isNotAnonymous = map((ɵ1)); const ɵ2 = /** * @param {?} user * @return {?} */ (user) => user ? user.getIdTokenResult() : of(null); /** @type {?} */ export const idTokenResult = switchMap((ɵ2)); const ɵ3 = /** * @param {?} user * @return {?} */ user => !!user && user.emailVerified; /** @type {?} */ export const emailVerified = map((ɵ3)); const ɵ4 = /** * @param {?} idTokenResult * @return {?} */ idTokenResult => idTokenResult ? idTokenResult.claims : []; /** @type {?} */ export const customClaims = pipe(idTokenResult, map((ɵ4))); /** @type {?} */ export const hasCustomClaim = (/** * @param {?} claim * @return {?} */ (claim) => pipe(customClaims, map((/** * @param {?} claims * @return {?} */ claims => claims.hasOwnProperty(claim))))); /** @type {?} */ export const redirectUnauthorizedTo = (/** * @param {?} redirect * @return {?} */ (redirect) => pipe(loggedIn, map((/** * @param {?} loggedIn * @return {?} */ loggedIn => loggedIn || redirect)))); /** @type {?} */ export const redirectLoggedInTo = (/** * @param {?} redirect * @return {?} */ (redirect) => pipe(loggedIn, map((/** * @param {?} loggedIn * @return {?} */ loggedIn => loggedIn && redirect || true)))); export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoLWd1YXJkL2F1dGgtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUF1QyxNQUFNLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFpQixNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFDTCxzQkFBc0IsRUFHdEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsOEJBQThCLEVBQy9CLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQUtlLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7O0FBQXBELE1BQU0sT0FBTyxRQUFRLEdBQWEsR0FBRyxNQUFnQjtBQUtyRCxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7O0lBSS9CLFlBQzRCLE9BQXdCLEVBQ1gsWUFBcUQsRUFDNUYsSUFBWSxFQUNKLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBb0J4QixnQkFBVzs7Ozs7UUFBRyxDQUFDLElBQTRCLEVBQUUsS0FBMEIsRUFBRSxFQUFFOztrQkFDbkUsZUFBZSxHQUFHLG1CQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFxQixJQUFJOzs7WUFBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUM7WUFDeEYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLGVBQWUsQ0FB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QyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRzs7OztBQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUE7O0FBQzdFLE1BQU0sT0FBTyxzQkFBc0I7Ozs7QUFDakMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRzs7OztBQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBQyxDQUFDLENBQUE7O0FBQ3JFLE1BQU0sT0FBTyxrQkFBa0I7Ozs7QUFDN0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRzs7OztBQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBwaXBlLCBVbmFyeUZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG9ic2VydmVPbiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdmaXJlYmFzZS9hcHAnO1xuaW1wb3J0IHtcbiAgybVBbmd1bGFyRmlyZVNjaGVkdWxlcnMsXG4gIEZpcmViYXNlT3B0aW9ucyxcbiAgRmlyZWJhc2VBcHBDb25maWcsXG4gIEZJUkVCQVNFX09QVElPTlMsXG4gIEZJUkVCQVNFX0FQUF9OQU1FLFxuICDJtWZpcmViYXNlQXBwRmFjdG9yeSxcbiAgybVrZWVwVW5zdGFibGVVbnRpbEZpcnN0RmFjdG9yeVxufSBmcm9tICdAYW5ndWxhci9maXJlJztcblxuZXhwb3J0IHR5cGUgQXV0aFBpcGVHZW5lcmF0b3IgPSAobmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpID0+IEF1dGhQaXBlO1xuZXhwb3J0IHR5cGUgQXV0aFBpcGUgPSBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8VXNlcnxudWxsPiwgT2JzZXJ2YWJsZTxib29sZWFufGFueVtdPj47XG5cbmV4cG9ydCBjb25zdCBsb2dnZWRJbjogQXV0aFBpcGUgPSBtYXAodXNlciA9PiAhIXVzZXIpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdhbnknXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGaXJlQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuXG4gIGF1dGhTdGF0ZTogT2JzZXJ2YWJsZTxVc2VyfG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRklSRUJBU0VfT1BUSU9OUykgb3B0aW9uczogRmlyZWJhc2VPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRklSRUJBU0VfQVBQX05BTUUpIG5hbWVPckNvbmZpZzogc3RyaW5nfEZpcmViYXNlQXBwQ29uZmlnfG51bGx8dW5kZWZpbmVkLFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge1xuXG4gICAgY29uc3Qgc2NoZWR1bGVycyA9IG5ldyDJtUFuZ3VsYXJGaXJlU2NoZWR1bGVycyh6b25lKTtcbiAgICBjb25zdCBrZWVwVW5zdGFibGVVbnRpbEZpcnN0ID0gybVrZWVwVW5zdGFibGVVbnRpbEZpcnN0RmFjdG9yeShzY2hlZHVsZXJzKTtcblxuICAgIGNvbnN0IGF1dGggPSBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBvYnNlcnZlT24obmV3IMm1QW5ndWxhckZpcmVTY2hlZHVsZXJzKHpvbmUpLm91dHNpZGVBbmd1bGFyKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGltcG9ydCgnZmlyZWJhc2UvYXV0aCcpKSksXG4gICAgICBtYXAoKCkgPT4gybVmaXJlYmFzZUFwcEZhY3Rvcnkob3B0aW9ucywgem9uZSwgbmFtZU9yQ29uZmlnKSksXG4gICAgICBtYXAoYXBwID0+IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gYXBwLmF1dGgoKSkpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYXV0aFN0YXRlID0gYXV0aC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGF1dGggPT4gbmV3IE9ic2VydmFibGU8VXNlcnxudWxsPihhdXRoLm9uQXV0aFN0YXRlQ2hhbmdlZC5iaW5kKGF1dGgpKSksXG4gICAgICBrZWVwVW5zdGFibGVVbnRpbEZpcnN0XG4gICAgKTtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlID0gKG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSA9PiB7XG4gICAgY29uc3QgYXV0aFBpcGVGYWN0b3J5ID0gbmV4dC5kYXRhLmF1dGhHdWFyZFBpcGUgYXMgQXV0aFBpcGVHZW5lcmF0b3IgfHwgKCgpID0+IGxvZ2dlZEluKTtcbiAgICByZXR1cm4gdGhpcy5hdXRoU3RhdGUucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBhdXRoUGlwZUZhY3RvcnkobmV4dCwgc3RhdGUpLFxuICAgICAgbWFwKGNhbiA9PiB0eXBlb2YgY2FuID09PSAnYm9vbGVhbicgPyBjYW4gOiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKGNhbiBhcyBhbnlbXSkpXG4gICAgKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBjb25zdCBjYW5BY3RpdmF0ZSA9IChwaXBlOiBBdXRoUGlwZUdlbmVyYXRvcikgPT4gKHtcbiAgICBjYW5BY3RpdmF0ZTogWyBBbmd1bGFyRmlyZUF1dGhHdWFyZCBdLCBkYXRhOiB7IGF1dGhHdWFyZFBpcGU6IHBpcGUgfVxufSk7XG5cblxuZXhwb3J0IGNvbnN0IGlzTm90QW5vbnltb3VzOiBBdXRoUGlwZSA9IG1hcCh1c2VyID0+ICEhdXNlciAmJiAhdXNlci5pc0Fub255bW91cyk7XG5leHBvcnQgY29uc3QgaWRUb2tlblJlc3VsdCA9IHN3aXRjaE1hcCgodXNlcjogVXNlcnxudWxsKSA9PiB1c2VyID8gdXNlci5nZXRJZFRva2VuUmVzdWx0KCkgOiBvZihudWxsKSk7XG5leHBvcnQgY29uc3QgZW1haWxWZXJpZmllZDogQXV0aFBpcGUgPSBtYXAodXNlciA9PiAhIXVzZXIgJiYgdXNlci5lbWFpbFZlcmlmaWVkKTtcbmV4cG9ydCBjb25zdCBjdXN0b21DbGFpbXMgPSBwaXBlKGlkVG9rZW5SZXN1bHQsIG1hcChpZFRva2VuUmVzdWx0ID0+IGlkVG9rZW5SZXN1bHQgPyBpZFRva2VuUmVzdWx0LmNsYWltcyA6IFtdKSk7XG5leHBvcnQgY29uc3QgaGFzQ3VzdG9tQ2xhaW06IChjbGFpbTogc3RyaW5nKSA9PiBBdXRoUGlwZSA9XG4gIChjbGFpbSkgPT4gcGlwZShjdXN0b21DbGFpbXMsIG1hcChjbGFpbXMgPT4gIGNsYWltcy5oYXNPd25Qcm9wZXJ0eShjbGFpbSkpKTtcbmV4cG9ydCBjb25zdCByZWRpcmVjdFVuYXV0aG9yaXplZFRvOiAocmVkaXJlY3Q6IGFueVtdKSA9PiBBdXRoUGlwZSA9XG4gIChyZWRpcmVjdCkgPT4gcGlwZShsb2dnZWRJbiwgbWFwKGxvZ2dlZEluID0+IGxvZ2dlZEluIHx8IHJlZGlyZWN0KSk7XG5leHBvcnQgY29uc3QgcmVkaXJlY3RMb2dnZWRJblRvOiAocmVkaXJlY3Q6IGFueVtdKSA9PiBBdXRoUGlwZSA9XG4gIChyZWRpcmVjdCkgPT4gcGlwZShsb2dnZWRJbiwgbWFwKGxvZ2dlZEluID0+IGxvZ2dlZEluICYmIHJlZGlyZWN0IHx8IHRydWUpKTtcbiJdfQ==