@angular/fire
Version:
The official library for Firebase and Angular
166 lines • 13.7 kB
JavaScript
/**
* @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==