@thecla/b2c-angular 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Store } from '@ngrx/store';
3
+ import { first, tap } from 'rxjs/operators';
4
+ import { signIn } from './actions/auth.actions';
5
+ import { isAuthenticated } from './store';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngrx/store";
8
+ class AuthGuard {
9
+ constructor(store) {
10
+ this.store = store;
11
+ this.authenticated$ = this.store.pipe(isAuthenticated);
12
+ }
13
+ canActivate(next, state) {
14
+ return this.authenticated$.pipe(tap(auth => {
15
+ if (!auth) {
16
+ this.store.dispatch(signIn({ returnUrl: state.url }));
17
+ }
18
+ }), first());
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, providedIn: 'root' }); }
22
+ }
23
+ export { AuthGuard };
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, decorators: [{
25
+ type: Injectable,
26
+ args: [{
27
+ providedIn: 'root',
28
+ }]
29
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2IyYy1hbmd1bGFyL3NyYy9saWIvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7O0FBRTFDLE1BR2EsU0FBUztJQUdwQixZQUFvQyxLQUFZO1FBQVosVUFBSyxHQUFMLEtBQUssQ0FBTztRQUYvQixtQkFBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWhCLENBQUM7SUFFN0MsV0FBVyxDQUFDLElBQTRCLEVBQUUsS0FBMEI7UUFDekUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNSLENBQUM7SUFDSixDQUFDOzhHQWRVLFNBQVM7a0hBQVQsU0FBUyxjQUZSLE1BQU07O1NBRVAsU0FBUzsyRkFBVCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBmaXJzdCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2lnbkluIH0gZnJvbSAnLi9hY3Rpb25zL2F1dGguYWN0aW9ucyc7XG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tICcuL3N0b3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aGVudGljYXRlZCQgPSB0aGlzLnN0b3JlLnBpcGUoaXNBdXRoZW50aWNhdGVkKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yZTogU3RvcmUpIHt9XG5cbiAgcHVibGljIGNhbkFjdGl2YXRlKG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIHRhcChhdXRoID0+IHtcbiAgICAgICAgaWYgKCFhdXRoKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzaWduSW4oeyByZXR1cm5Vcmw6IHN0YXRlLnVybCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,43 @@
1
+ import { HTTP_INTERCEPTORS } from '@angular/common/http';
2
+ import { NgModule } from '@angular/core';
3
+ import { EffectsModule } from '@ngrx/effects';
4
+ import { StoreModule } from '@ngrx/store';
5
+ import { AuthConfig } from './auth-config';
6
+ import { AuthEffects } from './effects/auth.effects';
7
+ import { JwtInterceptor } from './jwt.interceptor';
8
+ import { reducer } from './reducers/auth.reducer';
9
+ import { featureKey } from './store';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngrx/store";
12
+ import * as i2 from "@ngrx/effects";
13
+ class AuthModule {
14
+ static forRoot(config) {
15
+ return {
16
+ ngModule: AuthModule,
17
+ providers: [
18
+ {
19
+ provide: AuthConfig,
20
+ useValue: config,
21
+ },
22
+ {
23
+ provide: HTTP_INTERCEPTORS,
24
+ useClass: JwtInterceptor,
25
+ multi: true,
26
+ },
27
+ ],
28
+ };
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
31
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i2.EffectsFeatureModule] }); }
32
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] }); }
33
+ }
34
+ export { AuthModule };
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, decorators: [{
36
+ type: NgModule,
37
+ args: [{
38
+ declarations: [],
39
+ imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],
40
+ exports: [],
41
+ }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iMmMtYW5ndWxhci9zcmMvbGliL2F1dGgubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7QUFFckMsTUFLYSxVQUFVO0lBQ2QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFrQjtRQUN0QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFVBQVU7WUFDcEIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxVQUFVO29CQUNuQixRQUFRLEVBQUUsTUFBTTtpQkFDakI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FoQlUsVUFBVTsrR0FBVixVQUFVOytHQUFWLFVBQVUsWUFIWCxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7O1NBR25GLFVBQVU7MkZBQVYsVUFBVTtrQkFMdEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQy9GLE9BQU8sRUFBRSxFQUFFO2lCQUNaIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWZmZWN0c01vZHVsZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgU3RvcmVNb2R1bGUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLWNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoRWZmZWN0cyB9IGZyb20gJy4vZWZmZWN0cy9hdXRoLmVmZmVjdHMnO1xuaW1wb3J0IHsgSnd0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2p3dC5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyByZWR1Y2VyIH0gZnJvbSAnLi9yZWR1Y2Vycy9hdXRoLnJlZHVjZXInO1xuaW1wb3J0IHsgZmVhdHVyZUtleSB9IGZyb20gJy4vc3RvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbU3RvcmVNb2R1bGUuZm9yRmVhdHVyZShmZWF0dXJlS2V5LCByZWR1Y2VyKSwgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKFtBdXRoRWZmZWN0c10pXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBdXRoQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBdXRoTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBBdXRoQ29uZmlnLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgICB1c2VDbGFzczogSnd0SW50ZXJjZXB0b3IsXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { InteractionRequiredAuthError, PublicClientApplication, } from '@azure/msal-browser';
3
+ import { from, of, throwError } from 'rxjs';
4
+ import { catchError, filter, map } from 'rxjs/operators';
5
+ import { AuthConfig } from './auth-config';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./auth-config";
8
+ class AuthService {
9
+ constructor(config) {
10
+ this.config = config;
11
+ const msalConfig = {
12
+ auth: {
13
+ clientId: config.clientId,
14
+ authority: `${config.authority}/${config.signInPolicy}`,
15
+ knownAuthorities: config.knownAuthorities,
16
+ redirectUri: config.redirectUri ?? location.origin,
17
+ },
18
+ };
19
+ this.clientApplication = new PublicClientApplication(msalConfig);
20
+ }
21
+ loginWithRedirect(state) {
22
+ return from(this.clientApplication.loginRedirect({
23
+ scopes: this.config.scopes,
24
+ state: JSON.stringify({ ...state, passwordReset: false }),
25
+ }));
26
+ }
27
+ resetPasswordWithRedirect(state) {
28
+ return from(this.clientApplication.loginRedirect({
29
+ authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,
30
+ scopes: this.config.scopes,
31
+ state: JSON.stringify({ ...state, passwordReset: true }),
32
+ prompt: 'login',
33
+ }));
34
+ }
35
+ handleRedirectCallback() {
36
+ return from(this.clientApplication.handleRedirectPromise()).pipe(filter((result) => result !== null), map(result => ({
37
+ state: result.state ? JSON.parse(result.state) : undefined,
38
+ user: { sub: result.uniqueId, ...result.idTokenClaims },
39
+ })));
40
+ }
41
+ getAccessToken() {
42
+ const account = this.clientApplication.getAllAccounts()[0];
43
+ const scopes = this.config.scopes;
44
+ return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));
45
+ }
46
+ logout() {
47
+ return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));
48
+ }
49
+ checkSession() {
50
+ const accounts = this.clientApplication.getAllAccounts();
51
+ const scopes = this.config.scopes;
52
+ if (accounts.length === 1) {
53
+ return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })), catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error))));
54
+ }
55
+ else {
56
+ return of(undefined);
57
+ }
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, deps: [{ token: i1.AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
60
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, providedIn: 'root' }); }
61
+ }
62
+ export { AuthService };
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, decorators: [{
64
+ type: Injectable,
65
+ args: [{
66
+ providedIn: 'root',
67
+ }]
68
+ }], ctorParameters: function () { return [{ type: i1.AuthConfig }]; } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFFM0MsTUFHYSxXQUFXO0lBR3RCLFlBQW9DLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDcEQsTUFBTSxVQUFVLEdBQWtCO1lBQ2hDLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDdkQsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtnQkFDekMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLE1BQU07YUFDbkQ7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQXlCO1FBQ2hELE9BQU8sSUFBSSxDQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7WUFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMx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QyxDQUFDLENBQUMsQ0FDekcsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7OEdBckVVLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07O1NBRVAsV0FBVzsyRkFBWCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uUmVzdWx0LFxuICBDb25maWd1cmF0aW9uLFxuICBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLFxuICBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbixcbn0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBmcm9tLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50QXBwbGljYXRpb246IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQXV0aENvbmZpZykge1xuICAgIGNvbnN0IG1zYWxDb25maWc6IENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBhdXRoOiB7XG4gICAgICAgIGNsaWVudElkOiBjb25maWcuY2xpZW50SWQsXG4gICAgICAgIGF1dGhvcml0eTogYCR7Y29uZmlnLmF1dGhvcml0eX0vJHtjb25maWcuc2lnbkluUG9saWN5fWAsXG4gICAgICAgIGtub3duQXV0aG9yaXRpZXM6IGNvbmZpZy5rbm93bkF1dGhvcml0aWVzLFxuICAgICAgICByZWRpcmVjdFVyaTogY29uZmlnLnJlZGlyZWN0VXJpID8/IGxvY2F0aW9uLm9yaWdpbixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuY2xpZW50QXBwbGljYXRpb24gPSBuZXcgUHVibGljQ2xpZW50QXBwbGljYXRpb24obXNhbENvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgbG9naW5XaXRoUmVkaXJlY3Qoc3RhdGU6IHsgdGFyZ2V0OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy5jbGllbnRBcHBsaWNhdGlvbi5sb2dpblJlZGlyZWN0KHtcbiAgICAgICAgc2NvcGVzOiB0aGlzLmNvbmZpZy5zY29wZXMsXG4gICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeSh7IC4uLnN0YXRlLCBwYXNzd29yZFJlc2V0OiBmYWxzZSB9KSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFBhc3N3b3JkV2l0aFJlZGlyZWN0KHN0YXRlOiB7IHRhcmdldDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIHRoaXMuY2xpZW50QXBwbGljYXRpb24ubG9naW5SZWRpcmVjdCh7XG4gICAgICAgIGF1dGhvcml0eTogYCR7dGhpcy5jb25maWcuYXV0aG9yaXR5fS8ke3RoaXMuY29uZmlnLnJlc2V0UGFzc3dvcmRQb2xpY3l9YCxcbiAgICAgICAgc2NvcGVzOiB0aGlzLmNvbmZpZy5zY29wZXMsXG4gICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeSh7IC4uLnN0YXRlLCBwYXNzd29yZFJlc2V0OiB0cnVlIH0pLFxuICAgICAgICBwcm9tcHQ6ICdsb2dpbicsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlUmVkaXJlY3RDYWxsYmFjaygpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmhhbmRsZVJlZGlyZWN0UHJvbWlzZSgpKS5waXBlKFxuICAgICAgZmlsdGVyKChyZXN1bHQpOiByZXN1bHQgaXMgQXV0aGVudGljYXRpb25SZXN1bHQgPT4gcmVzdWx0ICE9PSBudWxsKSxcbiAgICAgIG1hcChyZXN1bHQgPT4gKHtcbiAgICAgICAgc3RhdGU6IHJlc3VsdC5zdGF0ZSA/IEpTT04ucGFyc2UocmVzdWx0LnN0YXRlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXNlcjogeyBzdWI6IHJlc3VsdC51bmlxdWVJZCwgLi4ucmVzdWx0LmlkVG9rZW5DbGFpbXMgfSxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgY29uc3QgYWNjb3VudCA9IHRoaXMuY2xpZW50QXBwbGljYXRpb24uZ2V0QWxsQWNjb3VudHMoKVswXTtcbiAgICBjb25zdCBzY29wZXMgPSB0aGlzLmNvbmZpZy5zY29wZXM7XG5cbiAgICByZXR1cm4gZnJvbSh0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmFjcXVpcmVUb2tlblNpbGVudCh7IGFjY291bnQsIHNjb3BlcyB9KSkucGlwZShtYXAocmVzdWx0ID0+IHJlc3VsdC5hY2Nlc3NUb2tlbikpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmxvZ291dFJlZGlyZWN0KHsgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBsb2NhdGlvbi5vcmlnaW4gfSkpO1xuICB9XG5cbiAgcHVibGljIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBjb25zdCBhY2NvdW50cyA9IHRoaXMuY2xpZW50QXBwbGljYXRpb24uZ2V0QWxsQWNjb3VudHMoKTtcbiAgICBjb25zdCBzY29wZXMgPSB0aGlzLmNvbmZpZy5zY29wZXM7XG5cbiAgICBpZiAoYWNjb3VudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gZnJvbSh0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmFjcXVpcmVUb2tlblNpbGVudCh7IGFjY291bnQ6IGFjY291bnRzWzBdLCBzY29wZXMgfSkpLnBpcGUoXG4gICAgICAgIG1hcChyZXN1bHQgPT4gKHsgc3ViOiByZXN1bHQudW5pcXVlSWQsIC4uLnJlc3VsdC5pZFRva2VuQ2xhaW1zIH0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiAoZXJyb3IgaW5zdGFuY2VvZiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yID8gb2YodW5kZWZpbmVkKSA6IHRocm93RXJyb3IoZXJyb3IpKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,63 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';
4
+ import { Actions, createEffect, ofType } from '@ngrx/effects';
5
+ import { of } from 'rxjs';
6
+ import { catchError, filter, map, switchMap } from 'rxjs/operators';
7
+ import { init, resetPassword, signedIn, signedOut, signIn, signInCompleted, signInFailed, signInRedirected, signOut, } from '../actions/auth.actions';
8
+ import { AuthService } from '../auth.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ngrx/effects";
11
+ import * as i2 from "../auth.service";
12
+ import * as i3 from "@angular/router";
13
+ class AuthEffects {
14
+ constructor(actions$, auth, router) {
15
+ this.actions$ = actions$;
16
+ this.auth = auth;
17
+ this.router = router;
18
+ this.signIn$ = createEffect(() => this.actions$.pipe(ofType(signIn), switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
19
+ this.passwordReset$ = createEffect(() => this.actions$.pipe(ofType(resetPassword), switchMap(action => this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
20
+ this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))));
21
+ this.redirect$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))), { dispatch: false });
22
+ this.signOut$ = createEffect(() => this.actions$.pipe(ofType(signOut), switchMap(_ => this.auth.logout().pipe(map(() => signedOut()), catchError(() => of(signedOut()))))));
23
+ this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
24
+ const params = window.location.hash;
25
+ if ((params.includes('code=') && params.includes('state=')) ||
26
+ (params.includes('error=') && params.includes('error_description='))) {
27
+ return this.completeSignIn();
28
+ }
29
+ else {
30
+ return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error }))));
31
+ }
32
+ })));
33
+ this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isForgotPasswordError), map(() => resetPassword({ returnUrl: '/' }))));
34
+ this.failed$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isInteractionInProgress), map(() => signOut())));
35
+ }
36
+ ngrxOnInitEffects() {
37
+ return init();
38
+ }
39
+ static isForgotPasswordError(error) {
40
+ return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;
41
+ }
42
+ static isInteractionInProgress(error) {
43
+ return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;
44
+ }
45
+ getAuthResult(user) {
46
+ if (user) {
47
+ return signedIn({ user });
48
+ }
49
+ else {
50
+ return signedOut();
51
+ }
52
+ }
53
+ completeSignIn() {
54
+ return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
55
+ }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects, deps: [{ token: i1.Actions }, { token: i2.AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects }); }
58
+ }
59
+ export { AuthEffects };
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects, decorators: [{
61
+ type: Injectable
62
+ }], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.AuthService }, { type: i3.Router }]; } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9lZmZlY3RzL2F1dGguZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsSUFBSSxFQUNKLGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixlQUFlLEVBQ2YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEdBQ1IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRTlDLE1BQ2EsV0FBVztJQThGdEIsWUFDbUIsUUFBaUIsRUFDakIsSUFBaUIsRUFDakIsTUFBYztRQUZkLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEdqQixZQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNkLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUNGLENBQ0YsQ0FDRixDQUFDO1FBRWMsbUJBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsYUFBYSxDQUFDLEVBQ3JCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDcEUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUNGLENBQ0YsQ0FDRixDQUFDO1FBRWMscUJBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUN2QixHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2pGLENBQ0YsQ0FBQztRQUVjLGNBQVMsR0FBRyxZQUFZLENBQ3RDLEdBQUcsRUFBRSxDQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQ3ZCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDMUYsRUFDSCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztRQUVjLGFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQ3JCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FDbEMsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQUVjLFVBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQ1osU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBRXBDLElBQ0UsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFDcEU7Z0JBQ0EsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbEMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNyQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztRQUVjLG1CQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLFNBQVMsQ0FBQyxFQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBa0IsQ0FBQyxFQUN4QyxNQUFNLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEVBQ3pDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUM3QyxDQUNGLENBQUM7UUFFYyxZQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLFNBQVMsQ0FBQyxFQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBa0IsQ0FBQyxFQUN4QyxNQUFNLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQzNDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUNyQixDQUNGLENBQUM7SUFNQyxDQUFDO0lBRUcsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFnQjtRQUNuRCxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssZUFBZSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBZ0I7UUFDckQsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztJQUNoRixDQUFDO0lBRU8sYUFBYSxDQUFDLElBQWlDO1FBQ3JELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUM1QyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDMUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQzs4R0E3SFUsV0FBVztrSEFBWCxXQUFXOztTQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBdXRoRXJyb3IsIEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSwgT25Jbml0RWZmZWN0cyB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBpbml0LFxuICByZXNldFBhc3N3b3JkLFxuICBzaWduZWRJbixcbiAgc2lnbmVkT3V0LFxuICBzaWduSW4sXG4gIHNpZ25JbkNvbXBsZXRlZCxcbiAgc2lnbkluRmFpbGVkLFxuICBzaWduSW5SZWRpcmVjdGVkLFxuICBzaWduT3V0LFxufSBmcm9tICcuLi9hY3Rpb25zL2F1dGguYWN0aW9ucyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoRWZmZWN0cyBpbXBsZW1lbnRzIE9uSW5pdEVmZmVjdHMge1xuICBwdWJsaWMgcmVhZG9ubHkgc2lnbkluJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShzaWduSW4pLFxuICAgICAgc3dpdGNoTWFwKGFjdGlvbiA9PlxuICAgICAgICB0aGlzLmF1dGgubG9naW5XaXRoUmVkaXJlY3QoeyB0YXJnZXQ6IGFjdGlvbi5yZXR1cm5VcmwgfSkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gc2lnbkluUmVkaXJlY3RlZCgpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IG9mKHNpZ25JbkZhaWxlZCh7IGVycm9yIH0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFzc3dvcmRSZXNldCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUocmVzZXRQYXNzd29yZCksXG4gICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+XG4gICAgICAgIHRoaXMuYXV0aC5yZXNldFBhc3N3b3JkV2l0aFJlZGlyZWN0KHsgdGFyZ2V0OiBhY3Rpb24ucmV0dXJuVXJsIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHNpZ25JblJlZGlyZWN0ZWQoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpZ25JbkNvbXBsZXRlZCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbkluQ29tcGxldGVkKSxcbiAgICAgIG1hcCgoeyBzdGF0ZSwgdXNlciB9KSA9PiAoc3RhdGUucGFzc3dvcmRSZXNldCA/IHNpZ25PdXQoKSA6IHNpZ25lZEluKHsgdXNlciB9KSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSByZWRpcmVjdCQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKHNpZ25JbkNvbXBsZXRlZCksXG4gICAgICAgIHN3aXRjaE1hcChhY3Rpb24gPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhY3Rpb24uc3RhdGUudGFyZ2V0LCB7IHJlcGxhY2VVcmw6IHRydWUgfSkpXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2lnbk91dCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbk91dCksXG4gICAgICBzd2l0Y2hNYXAoXyA9PlxuICAgICAgICB0aGlzLmF1dGgubG9nb3V0KCkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gc2lnbmVkT3V0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2Yoc2lnbmVkT3V0KCkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbml0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShpbml0KSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFyYW1zLmluY2x1ZGVzKCdjb2RlPScpICYmIHBhcmFtcy5pbmNsdWRlcygnc3RhdGU9JykpIHx8XG4gICAgICAgICAgKHBhcmFtcy5pbmNsdWRlcygnZXJyb3I9JykgJiYgcGFyYW1zLmluY2x1ZGVzKCdlcnJvcl9kZXNjcmlwdGlvbj0nKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGVTaWduSW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoLmNoZWNrU2Vzc2lvbigpLnBpcGUoXG4gICAgICAgICAgICBtYXAodXNlciA9PiB0aGlzLmdldEF1dGhSZXN1bHQodXNlcikpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc2V0UGFzc3dvcmQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25JbkZhaWxlZCksXG4gICAgICBmaWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5lcnJvciBpbnN0YW5jZW9mIEF1dGhFcnJvciksXG4gICAgICBtYXAoYWN0aW9uID0+IGFjdGlvbi5lcnJvciBhcyBBdXRoRXJyb3IpLFxuICAgICAgZmlsdGVyKEF1dGhFZmZlY3RzLmlzRm9yZ290UGFzc3dvcmRFcnJvciksXG4gICAgICBtYXAoKCkgPT4gcmVzZXRQYXNzd29yZCh7IHJldHVyblVybDogJy8nIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmFpbGVkJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShzaWduSW5GYWlsZWQpLFxuICAgICAgZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgaW5zdGFuY2VvZiBBdXRoRXJyb3IpLFxuICAgICAgbWFwKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgYXMgQXV0aEVycm9yKSxcbiAgICAgIGZpbHRlcihBdXRoRWZmZWN0cy5pc0ludGVyYWN0aW9uSW5Qcm9ncmVzcyksXG4gICAgICBtYXAoKCkgPT4gc2lnbk91dCgpKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ3J4T25Jbml0RWZmZWN0cygpIHtcbiAgICByZXR1cm4gaW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNGb3Jnb3RQYXNzd29yZEVycm9yKGVycm9yOiBBdXRoRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IuZXJyb3JDb2RlID09PSAnYWNjZXNzX2RlbmllZCcgJiYgZXJyb3IuZXJyb3JNZXNzYWdlLmluZGV4T2YoJ0FBREIyQzkwMTE4JykgIT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZXJyb3I6IEF1dGhFcnJvcikge1xuICAgIHJldHVybiBlcnJvci5lcnJvckNvZGUgPT09IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlLmludGVyYWN0aW9uSW5Qcm9ncmVzcy5jb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRoUmVzdWx0KHVzZXI6IHsgc3ViOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh1c2VyKSB7XG4gICAgICByZXR1cm4gc2lnbmVkSW4oeyB1c2VyIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2lnbmVkT3V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wbGV0ZVNpZ25JbigpIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmhhbmRsZVJlZGlyZWN0Q2FsbGJhY2soKS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiBzaWduSW5Db21wbGV0ZWQoeyBzdGF0ZTogcmVzdWx0LnN0YXRlLCB1c2VyOiByZXN1bHQudXNlciB9KSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IG9mKHNpZ25JbkZhaWxlZCh7IGVycm9yIH0pKSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { map, mergeMap } from 'rxjs/operators';
3
+ import { AuthService } from './auth.service';
4
+ import * as i0 from "@angular/core";
5
+ class JwtInterceptor {
6
+ intercept(request, next) {
7
+ return jwtInterceptor(request, next.handle);
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor }); }
11
+ }
12
+ export { JwtInterceptor };
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor, decorators: [{
14
+ type: Injectable
15
+ }] });
16
+ export const jwtInterceptor = (request, next) => {
17
+ if (isSameDomain(request)) {
18
+ return inject(AuthService)
19
+ .getAccessToken()
20
+ .pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })), mergeMap(authorizedRequest => next(authorizedRequest)));
21
+ }
22
+ else {
23
+ return next(request);
24
+ }
25
+ };
26
+ function isSameDomain(request) {
27
+ const isAbsolute = /^https?:\/\//i.test(request.url);
28
+ return !isAbsolute;
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9qd3QuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTdDLE1BQ2EsY0FBYztJQUNsQixTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUMzRCxPQUFPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBSFUsY0FBYztrSEFBZCxjQUFjOztTQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7QUFPWCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXNCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2pFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUN2QixjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNqRixRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQ3ZELENBQUM7S0FDTDtTQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdEI7QUFDSCxDQUFDLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxPQUF5QjtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJldHVybiBqd3RJbnRlcmNlcHRvcihyZXF1ZXN0LCBuZXh0LmhhbmRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGp3dEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXF1ZXN0LCBuZXh0KSA9PiB7XG4gIGlmIChpc1NhbWVEb21haW4ocmVxdWVzdCkpIHtcbiAgICByZXR1cm4gaW5qZWN0KEF1dGhTZXJ2aWNlKVxuICAgICAgLmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodG9rZW4gPT4gcmVxdWVzdC5jbG9uZSh7IHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSB9KSksXG4gICAgICAgIG1lcmdlTWFwKGF1dGhvcml6ZWRSZXF1ZXN0ID0+IG5leHQoYXV0aG9yaXplZFJlcXVlc3QpKVxuICAgICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gaXNTYW1lRG9tYWluKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocmVxdWVzdC51cmwpO1xuXG4gIHJldHVybiAhaXNBYnNvbHV0ZTtcbn1cbiJdfQ==
@@ -37,10 +37,10 @@ class AuthGuard {
37
37
  }
38
38
  }), first());
39
39
  }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, providedIn: 'root' }); }
40
42
  }
41
- AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
42
- AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, providedIn: 'root' });
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthGuard, decorators: [{
44
44
  type: Injectable,
45
45
  args: [{
46
46
  providedIn: 'root',
@@ -101,10 +101,10 @@ class AuthService {
101
101
  return of(undefined);
102
102
  }
103
103
  }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, providedIn: 'root' }); }
104
106
  }
105
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
106
- AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthService, decorators: [{
108
108
  type: Injectable,
109
109
  args: [{
110
110
  providedIn: 'root',
@@ -154,10 +154,10 @@ class AuthEffects {
154
154
  completeSignIn() {
155
155
  return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
156
156
  }
157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects, deps: [{ token: i1$1.Actions }, { token: AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
158
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects }); }
157
159
  }
158
- AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, deps: [{ token: i1$1.Actions }, { token: AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
159
- AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthEffects, decorators: [{
161
161
  type: Injectable
162
162
  }], ctorParameters: function () { return [{ type: i1$1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
163
163
 
@@ -165,10 +165,10 @@ class JwtInterceptor {
165
165
  intercept(request, next) {
166
166
  return jwtInterceptor(request, next.handle);
167
167
  }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
169
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor }); }
168
170
  }
169
- JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
170
- JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor });
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, decorators: [{
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: JwtInterceptor, decorators: [{
172
172
  type: Injectable
173
173
  }] });
174
174
  const jwtInterceptor = (request, next) => {
@@ -221,11 +221,11 @@ class AuthModule {
221
221
  ],
222
222
  };
223
223
  }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
225
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i1$1.EffectsFeatureModule] }); }
226
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] }); }
224
227
  }
225
- AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
226
- AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i1$1.EffectsFeatureModule] });
227
- AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, decorators: [{
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AuthModule, decorators: [{
229
229
  type: NgModule,
230
230
  args: [{
231
231
  declarations: [],
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thecla-b2c-angular.mjs","sources":["../../../projects/b2c-angular/src/lib/actions/auth.actions.ts","../../../projects/b2c-angular/src/lib/store/index.ts","../../../projects/b2c-angular/src/lib/auth.guard.ts","../../../projects/b2c-angular/src/lib/auth-config.ts","../../../projects/b2c-angular/src/lib/auth.service.ts","../../../projects/b2c-angular/src/lib/effects/auth.effects.ts","../../../projects/b2c-angular/src/lib/jwt.interceptor.ts","../../../projects/b2c-angular/src/lib/reducers/auth.reducer.ts","../../../projects/b2c-angular/src/lib/auth.module.ts","../../../projects/b2c-angular/src/lib/provide-auth.ts","../../../projects/b2c-angular/src/thecla-b2c-angular.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const init = createAction('[@thecla/b2c-angular] init');\n\nexport const signIn = createAction('[@thecla/b2c-angular] sign-in', props<{ returnUrl: string }>());\n\nexport const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');\n\nexport const signInCompleted = createAction(\n '[@thecla/b2c-angular] sign in completed',\n props<{ state: { target: string; passwordReset: boolean }; user: Profile }>()\n);\n\nexport const signedIn = createAction('[@thecla/b2c-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/b2c-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/b2c-angular] signed out');\n\nexport const resetPassword = createAction('[@thecla/b2c-angular] reset password', props<{ returnUrl: string }>());\n","import { createFeatureSelector, select } from '@ngrx/store';\nimport { pipe } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { State } from '../state/auth.state';\n\nexport const featureKey = 'auth';\n\nexport const selectState = createFeatureSelector<State>(featureKey);\n\nexport const isAuthenticated = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.authenticated)\n);\n\nexport const getUser = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.user)\n);\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { first, tap } from 'rxjs/operators';\nimport { signIn } from './actions/auth.actions';\nimport { isAuthenticated } from './store';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard {\n private readonly authenticated$ = this.store.pipe(isAuthenticated);\n\n public constructor(private readonly store: Store) {}\n\n public canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.authenticated$.pipe(\n tap(auth => {\n if (!auth) {\n this.store.dispatch(signIn({ returnUrl: state.url }));\n }\n }),\n first()\n );\n }\n}\n","export abstract class AuthConfig {\n public abstract clientId: string;\n public abstract authority: string;\n public abstract signInPolicy: string;\n public abstract resetPasswordPolicy: string;\n public abstract knownAuthorities: string[];\n public abstract scopes: string[];\n public abstract redirectUri?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {\n AuthenticationResult,\n Configuration,\n InteractionRequiredAuthError,\n PublicClientApplication,\n} from '@azure/msal-browser';\nimport { from, of, throwError } from 'rxjs';\nimport { catchError, filter, map } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly clientApplication: PublicClientApplication;\n\n public constructor(private readonly config: AuthConfig) {\n const msalConfig: Configuration = {\n auth: {\n clientId: config.clientId,\n authority: `${config.authority}/${config.signInPolicy}`,\n knownAuthorities: config.knownAuthorities,\n redirectUri: config.redirectUri ?? location.origin,\n },\n };\n\n this.clientApplication = new PublicClientApplication(msalConfig);\n }\n\n public loginWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: false }),\n })\n );\n }\n\n public resetPasswordWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: true }),\n prompt: 'login',\n })\n );\n }\n\n public handleRedirectCallback() {\n return from(this.clientApplication.handleRedirectPromise()).pipe(\n filter((result): result is AuthenticationResult => result !== null),\n map(result => ({\n state: result.state ? JSON.parse(result.state) : undefined,\n user: { sub: result.uniqueId, ...result.idTokenClaims },\n }))\n );\n }\n\n public getAccessToken() {\n const account = this.clientApplication.getAllAccounts()[0];\n const scopes = this.config.scopes;\n\n return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));\n }\n\n public logout() {\n return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));\n }\n\n public checkSession() {\n const accounts = this.clientApplication.getAllAccounts();\n const scopes = this.config.scopes;\n\n if (accounts.length === 1) {\n return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(\n map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })),\n catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error)))\n );\n } else {\n return of(undefined);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';\nimport { Actions, createEffect, ofType, OnInitEffects } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, filter, map, switchMap } from 'rxjs/operators';\nimport {\n init,\n resetPassword,\n signedIn,\n signedOut,\n signIn,\n signInCompleted,\n signInFailed,\n signInRedirected,\n signOut,\n} from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects implements OnInitEffects {\n public readonly signIn$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action =>\n this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly passwordReset$ = createEffect(() =>\n this.actions$.pipe(\n ofType(resetPassword),\n switchMap(action =>\n this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))\n )\n );\n\n public readonly redirect$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))\n ),\n { dispatch: false }\n );\n\n public readonly signOut$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signOut),\n switchMap(_ =>\n this.auth.logout().pipe(\n map(() => signedOut()),\n catchError(() => of(signedOut()))\n )\n )\n )\n );\n\n public readonly init$ = createEffect(() =>\n this.actions$.pipe(\n ofType(init),\n switchMap(() => {\n const params = window.location.hash;\n\n if (\n (params.includes('code=') && params.includes('state=')) ||\n (params.includes('error=') && params.includes('error_description='))\n ) {\n return this.completeSignIn();\n } else {\n return this.auth.checkSession().pipe(\n map(user => this.getAuthResult(user)),\n catchError(error => of(signInFailed({ error })))\n );\n }\n })\n )\n );\n\n public readonly resetPassword$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isForgotPasswordError),\n map(() => resetPassword({ returnUrl: '/' }))\n )\n );\n\n public readonly failed$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isInteractionInProgress),\n map(() => signOut())\n )\n );\n\n public constructor(\n private readonly actions$: Actions,\n private readonly auth: AuthService,\n private readonly router: Router\n ) {}\n\n public ngrxOnInitEffects() {\n return init();\n }\n\n private static isForgotPasswordError(error: AuthError) {\n return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;\n }\n\n private static isInteractionInProgress(error: AuthError) {\n return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;\n }\n\n private getAuthResult(user: { sub: string } | undefined) {\n if (user) {\n return signedIn({ user });\n } else {\n return signedOut();\n }\n }\n\n private completeSignIn() {\n return this.auth.handleRedirectCallback().pipe(\n map(result => signInCompleted({ state: result.state, user: result.user })),\n catchError(error => of(signInFailed({ error })))\n );\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { AuthService } from './auth.service';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n public intercept(request: HttpRequest<any>, next: HttpHandler) {\n return jwtInterceptor(request, next.handle);\n }\n}\n\nexport const jwtInterceptor: HttpInterceptorFn = (request, next) => {\n if (isSameDomain(request)) {\n return inject(AuthService)\n .getAccessToken()\n .pipe(\n map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })),\n mergeMap(authorizedRequest => next(authorizedRequest))\n );\n } else {\n return next(request);\n }\n};\n\nfunction isSameDomain(request: HttpRequest<any>) {\n const isAbsolute = /^https?:\\/\\//i.test(request.url);\n\n return !isAbsolute;\n}\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { signedIn, signedOut, signInFailed } from '../actions/auth.actions';\nimport { State } from '../state/auth.state';\n\nexport const noAuthentication: State = {\n authenticating: false,\n authenticated: false,\n};\n\nexport const startAuthentication: State = {\n authenticating: true,\n authenticated: false,\n};\n\nconst authReducer = createReducer(\n startAuthentication,\n on(signedIn, (state, { user }) => ({\n ...state,\n authenticating: false,\n authenticated: true,\n user,\n })),\n on(signedOut, _ => noAuthentication),\n on(signInFailed, _ => noAuthentication)\n);\n\nexport function reducer(state: State | undefined, action: Action) {\n return authReducer(state, action);\n}\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { JwtInterceptor } from './jwt.interceptor';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\n@NgModule({\n declarations: [],\n imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],\n exports: [],\n})\nexport class AuthModule {\n public static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n {\n provide: AuthConfig,\n useValue: config,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true,\n },\n ],\n };\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { provideEffects } from '@ngrx/effects';\nimport { provideState } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\nexport function provideAuth(config: AuthConfig) {\n const effects = provideEffects(AuthEffects);\n const state = provideState(featureKey, reducer);\n\n return makeEnvironmentProviders([\n effects,\n state,\n {\n provide: AuthConfig,\n useValue: config,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthConfig","i1","i2.AuthService","i2"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
1
+ import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
2
2
  import { Store } from '@ngrx/store';
3
3
  import * as i0 from "@angular/core";
4
- export declare class AuthGuard implements CanActivate {
4
+ export declare class AuthGuard {
5
5
  private readonly store;
6
6
  private readonly authenticated$;
7
7
  constructor(store: Store);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thecla/b2c-angular",
3
- "version": "7.0.0",
3
+ "version": "8.0.0",
4
4
  "author": "Hendrik Wouters",
5
5
  "description": "Angular module using NGRX to authenticate with Azure AD B2C",
6
6
  "repository": {
@@ -19,21 +19,17 @@
19
19
  },
20
20
  "homepage": "https://github.com/hwouters/auth0-angular#readme",
21
21
  "peerDependencies": {
22
- "@angular/common": "^15.0.0",
23
- "@angular/core": "^15.1.1",
24
- "@angular/router": "^15.0.0",
22
+ "@angular/common": "^16.0.0",
23
+ "@angular/core": "^16.0.0",
24
+ "@angular/router": "^16.0.0",
25
25
  "@azure/msal-browser": "^2.7.0",
26
- "@ngrx/effects": "^15.0.0",
27
- "@ngrx/store": "^15.0.0"
26
+ "@ngrx/effects": "^16.0.0",
27
+ "@ngrx/store": "^16.0.0"
28
28
  },
29
29
  "dependencies": {
30
30
  "tslib": "^2.0.0"
31
31
  },
32
- "module": "fesm2015/thecla-b2c-angular.mjs",
33
- "es2020": "fesm2020/thecla-b2c-angular.mjs",
34
- "esm2020": "esm2020/thecla-b2c-angular.mjs",
35
- "fesm2020": "fesm2020/thecla-b2c-angular.mjs",
36
- "fesm2015": "fesm2015/thecla-b2c-angular.mjs",
32
+ "module": "fesm2022/thecla-b2c-angular.mjs",
37
33
  "typings": "index.d.ts",
38
34
  "exports": {
39
35
  "./package.json": {
@@ -41,11 +37,9 @@
41
37
  },
42
38
  ".": {
43
39
  "types": "./index.d.ts",
44
- "esm2020": "./esm2020/thecla-b2c-angular.mjs",
45
- "es2020": "./fesm2020/thecla-b2c-angular.mjs",
46
- "es2015": "./fesm2015/thecla-b2c-angular.mjs",
47
- "node": "./fesm2015/thecla-b2c-angular.mjs",
48
- "default": "./fesm2020/thecla-b2c-angular.mjs"
40
+ "esm2022": "./esm2022/thecla-b2c-angular.mjs",
41
+ "esm": "./esm2022/thecla-b2c-angular.mjs",
42
+ "default": "./fesm2022/thecla-b2c-angular.mjs"
49
43
  }
50
44
  },
51
45
  "sideEffects": false
@@ -1,29 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Store } from '@ngrx/store';
3
- import { first, tap } from 'rxjs/operators';
4
- import { signIn } from './actions/auth.actions';
5
- import { isAuthenticated } from './store';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@ngrx/store";
8
- export class AuthGuard {
9
- constructor(store) {
10
- this.store = store;
11
- this.authenticated$ = this.store.pipe(isAuthenticated);
12
- }
13
- canActivate(next, state) {
14
- return this.authenticated$.pipe(tap(auth => {
15
- if (!auth) {
16
- this.store.dispatch(signIn({ returnUrl: state.url }));
17
- }
18
- }), first());
19
- }
20
- }
21
- AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
22
- AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, providedIn: 'root' });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, decorators: [{
24
- type: Injectable,
25
- args: [{
26
- providedIn: 'root',
27
- }]
28
- }], ctorParameters: function () { return [{ type: i1.Store }]; } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2IyYy1hbmd1bGFyL3NyYy9saWIvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7O0FBSzFDLE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQW9DLEtBQVk7UUFBWixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBRi9CLG1CQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFaEIsQ0FBQztJQUU3QyxXQUFXLENBQUMsSUFBNEIsRUFBRSxLQUEwQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztJQUNKLENBQUM7O3NHQWRVLFNBQVM7MEdBQVQsU0FBUyxjQUZSLE1BQU07MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpcnN0LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzaWduSW4gfSBmcm9tICcuL2FjdGlvbnMvYXV0aC5hY3Rpb25zJztcbmltcG9ydCB7IGlzQXV0aGVudGljYXRlZCB9IGZyb20gJy4vc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWQkID0gdGhpcy5zdG9yZS5waXBlKGlzQXV0aGVudGljYXRlZCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IFN0b3JlKSB7fVxuXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZShuZXh0OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0ZWQkLnBpcGUoXG4gICAgICB0YXAoYXV0aCA9PiB7XG4gICAgICAgIGlmICghYXV0aCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2lnbkluKHsgcmV0dXJuVXJsOiBzdGF0ZS51cmwgfSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,42 +0,0 @@
1
- import { HTTP_INTERCEPTORS } from '@angular/common/http';
2
- import { NgModule } from '@angular/core';
3
- import { EffectsModule } from '@ngrx/effects';
4
- import { StoreModule } from '@ngrx/store';
5
- import { AuthConfig } from './auth-config';
6
- import { AuthEffects } from './effects/auth.effects';
7
- import { JwtInterceptor } from './jwt.interceptor';
8
- import { reducer } from './reducers/auth.reducer';
9
- import { featureKey } from './store';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@ngrx/store";
12
- import * as i2 from "@ngrx/effects";
13
- export class AuthModule {
14
- static forRoot(config) {
15
- return {
16
- ngModule: AuthModule,
17
- providers: [
18
- {
19
- provide: AuthConfig,
20
- useValue: config,
21
- },
22
- {
23
- provide: HTTP_INTERCEPTORS,
24
- useClass: JwtInterceptor,
25
- multi: true,
26
- },
27
- ],
28
- };
29
- }
30
- }
31
- AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
- AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i2.EffectsFeatureModule] });
33
- AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, decorators: [{
35
- type: NgModule,
36
- args: [{
37
- declarations: [],
38
- imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],
39
- exports: [],
40
- }]
41
- }] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iMmMtYW5ndWxhci9zcmMvbGliL2F1dGgubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7QUFPckMsTUFBTSxPQUFPLFVBQVU7SUFDZCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtCO1FBQ3RDLE9BQU87WUFDTCxRQUFRLEVBQUUsVUFBVTtZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLFVBQVU7b0JBQ25CLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzt1R0FoQlUsVUFBVTt3R0FBVixVQUFVO3dHQUFWLFVBQVUsWUFIWCxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7MkZBR25GLFVBQVU7a0JBTHRCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUMvRixPQUFPLEVBQUUsRUFBRTtpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVmZmVjdHNNb2R1bGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC1jb25maWcnO1xuaW1wb3J0IHsgQXV0aEVmZmVjdHMgfSBmcm9tICcuL2VmZmVjdHMvYXV0aC5lZmZlY3RzJztcbmltcG9ydCB7IEp3dEludGVyY2VwdG9yIH0gZnJvbSAnLi9qd3QuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgcmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvYXV0aC5yZWR1Y2VyJztcbmltcG9ydCB7IGZlYXR1cmVLZXkgfSBmcm9tICcuL3N0b3JlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoZmVhdHVyZUtleSwgcmVkdWNlciksIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZShbQXV0aEVmZmVjdHNdKV0sXG4gIGV4cG9ydHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGNvbmZpZzogQXV0aENvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQXV0aENvbmZpZyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgdXNlQ2xhc3M6IEp3dEludGVyY2VwdG9yLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,68 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { InteractionRequiredAuthError, PublicClientApplication, } from '@azure/msal-browser';
3
- import { from, of, throwError } from 'rxjs';
4
- import { catchError, filter, map } from 'rxjs/operators';
5
- import { AuthConfig } from './auth-config';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./auth-config";
8
- export class AuthService {
9
- constructor(config) {
10
- this.config = config;
11
- const msalConfig = {
12
- auth: {
13
- clientId: config.clientId,
14
- authority: `${config.authority}/${config.signInPolicy}`,
15
- knownAuthorities: config.knownAuthorities,
16
- redirectUri: config.redirectUri ?? location.origin,
17
- },
18
- };
19
- this.clientApplication = new PublicClientApplication(msalConfig);
20
- }
21
- loginWithRedirect(state) {
22
- return from(this.clientApplication.loginRedirect({
23
- scopes: this.config.scopes,
24
- state: JSON.stringify({ ...state, passwordReset: false }),
25
- }));
26
- }
27
- resetPasswordWithRedirect(state) {
28
- return from(this.clientApplication.loginRedirect({
29
- authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,
30
- scopes: this.config.scopes,
31
- state: JSON.stringify({ ...state, passwordReset: true }),
32
- prompt: 'login',
33
- }));
34
- }
35
- handleRedirectCallback() {
36
- return from(this.clientApplication.handleRedirectPromise()).pipe(filter((result) => result !== null), map(result => ({
37
- state: result.state ? JSON.parse(result.state) : undefined,
38
- user: { sub: result.uniqueId, ...result.idTokenClaims },
39
- })));
40
- }
41
- getAccessToken() {
42
- const account = this.clientApplication.getAllAccounts()[0];
43
- const scopes = this.config.scopes;
44
- return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));
45
- }
46
- logout() {
47
- return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));
48
- }
49
- checkSession() {
50
- const accounts = this.clientApplication.getAllAccounts();
51
- const scopes = this.config.scopes;
52
- if (accounts.length === 1) {
53
- return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })), catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error))));
54
- }
55
- else {
56
- return of(undefined);
57
- }
58
- }
59
- }
60
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: i1.AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
61
- AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
63
- type: Injectable,
64
- args: [{
65
- providedIn: 'root',
66
- }]
67
- }], ctorParameters: function () { return [{ type: i1.AuthConfig }]; } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFBb0MsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNwRCxNQUFNLFVBQVUsR0FBa0I7WUFDaEMsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUN2RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTTthQUNuRDtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBeUI7UUFDaEQsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztZQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFN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SyxDQUFDLENBQUMsQ0FBQyxDQUN6RyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQzs7d0dBckVVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGlvblJlc3VsdCxcbiAgQ29uZmlndXJhdGlvbixcbiAgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcixcbiAgUHVibGljQ2xpZW50QXBwbGljYXRpb24sXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgZnJvbSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudEFwcGxpY2F0aW9uOiBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IEF1dGhDb25maWcpIHtcbiAgICBjb25zdCBtc2FsQ29uZmlnOiBDb25maWd1cmF0aW9uID0ge1xuICAgICAgYXV0aDoge1xuICAgICAgICBjbGllbnRJZDogY29uZmlnLmNsaWVudElkLFxuICAgICAgICBhdXRob3JpdHk6IGAke2NvbmZpZy5hdXRob3JpdHl9LyR7Y29uZmlnLnNpZ25JblBvbGljeX1gLFxuICAgICAgICBrbm93bkF1dGhvcml0aWVzOiBjb25maWcua25vd25BdXRob3JpdGllcyxcbiAgICAgICAgcmVkaXJlY3RVcmk6IGNvbmZpZy5yZWRpcmVjdFVyaSA/PyBsb2NhdGlvbi5vcmlnaW4sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmNsaWVudEFwcGxpY2F0aW9uID0gbmV3IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uKG1zYWxDb25maWcpO1xuICB9XG5cbiAgcHVibGljIGxvZ2luV2l0aFJlZGlyZWN0KHN0YXRlOiB7IHRhcmdldDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIHRoaXMuY2xpZW50QXBwbGljYXRpb24ubG9naW5SZWRpcmVjdCh7XG4gICAgICAgIHNjb3BlczogdGhpcy5jb25maWcuc2NvcGVzLFxuICAgICAgICBzdGF0ZTogSlNPTi5zdHJpbmdpZnkoeyAuLi5zdGF0ZSwgcGFzc3dvcmRSZXNldDogZmFsc2UgfSksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXNzd29yZFdpdGhSZWRpcmVjdChzdGF0ZTogeyB0YXJnZXQ6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmxvZ2luUmVkaXJlY3Qoe1xuICAgICAgICBhdXRob3JpdHk6IGAke3RoaXMuY29uZmlnLmF1dGhvcml0eX0vJHt0aGlzLmNvbmZpZy5yZXNldFBhc3N3b3JkUG9saWN5fWAsXG4gICAgICAgIHNjb3BlczogdGhpcy5jb25maWcuc2NvcGVzLFxuICAgICAgICBzdGF0ZTogSlNPTi5zdHJpbmdpZnkoeyAuLi5zdGF0ZSwgcGFzc3dvcmRSZXNldDogdHJ1ZSB9KSxcbiAgICAgICAgcHJvbXB0OiAnbG9naW4nLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVJlZGlyZWN0Q2FsbGJhY2soKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5oYW5kbGVSZWRpcmVjdFByb21pc2UoKSkucGlwZShcbiAgICAgIGZpbHRlcigocmVzdWx0KTogcmVzdWx0IGlzIEF1dGhlbnRpY2F0aW9uUmVzdWx0ID0+IHJlc3VsdCAhPT0gbnVsbCksXG4gICAgICBtYXAocmVzdWx0ID0+ICh7XG4gICAgICAgIHN0YXRlOiByZXN1bHQuc3RhdGUgPyBKU09OLnBhcnNlKHJlc3VsdC5zdGF0ZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXI6IHsgc3ViOiByZXN1bHQudW5pcXVlSWQsIC4uLnJlc3VsdC5pZFRva2VuQ2xhaW1zIH0sXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmdldEFsbEFjY291bnRzKClbMF07XG4gICAgY29uc3Qgc2NvcGVzID0gdGhpcy5jb25maWcuc2NvcGVzO1xuXG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5hY3F1aXJlVG9rZW5TaWxlbnQoeyBhY2NvdW50LCBzY29wZXMgfSkpLnBpcGUobWFwKHJlc3VsdCA9PiByZXN1bHQuYWNjZXNzVG9rZW4pKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dvdXQoKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5sb2dvdXRSZWRpcmVjdCh7IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogbG9jYXRpb24ub3JpZ2luIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Nlc3Npb24oKSB7XG4gICAgY29uc3QgYWNjb3VudHMgPSB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmdldEFsbEFjY291bnRzKCk7XG4gICAgY29uc3Qgc2NvcGVzID0gdGhpcy5jb25maWcuc2NvcGVzO1xuXG4gICAgaWYgKGFjY291bnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5hY3F1aXJlVG9rZW5TaWxlbnQoeyBhY2NvdW50OiBhY2NvdW50c1swXSwgc2NvcGVzIH0pKS5waXBlKFxuICAgICAgICBtYXAocmVzdWx0ID0+ICh7IHN1YjogcmVzdWx0LnVuaXF1ZUlkLCAuLi5yZXN1bHQuaWRUb2tlbkNsYWltcyB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gKGVycm9yIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciA/IG9mKHVuZGVmaW5lZCkgOiB0aHJvd0Vycm9yKGVycm9yKSkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,62 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';
4
- import { Actions, createEffect, ofType } from '@ngrx/effects';
5
- import { of } from 'rxjs';
6
- import { catchError, filter, map, switchMap } from 'rxjs/operators';
7
- import { init, resetPassword, signedIn, signedOut, signIn, signInCompleted, signInFailed, signInRedirected, signOut, } from '../actions/auth.actions';
8
- import { AuthService } from '../auth.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@ngrx/effects";
11
- import * as i2 from "../auth.service";
12
- import * as i3 from "@angular/router";
13
- export class AuthEffects {
14
- constructor(actions$, auth, router) {
15
- this.actions$ = actions$;
16
- this.auth = auth;
17
- this.router = router;
18
- this.signIn$ = createEffect(() => this.actions$.pipe(ofType(signIn), switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
19
- this.passwordReset$ = createEffect(() => this.actions$.pipe(ofType(resetPassword), switchMap(action => this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
20
- this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))));
21
- this.redirect$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))), { dispatch: false });
22
- this.signOut$ = createEffect(() => this.actions$.pipe(ofType(signOut), switchMap(_ => this.auth.logout().pipe(map(() => signedOut()), catchError(() => of(signedOut()))))));
23
- this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
24
- const params = window.location.hash;
25
- if ((params.includes('code=') && params.includes('state=')) ||
26
- (params.includes('error=') && params.includes('error_description='))) {
27
- return this.completeSignIn();
28
- }
29
- else {
30
- return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error }))));
31
- }
32
- })));
33
- this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isForgotPasswordError), map(() => resetPassword({ returnUrl: '/' }))));
34
- this.failed$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isInteractionInProgress), map(() => signOut())));
35
- }
36
- ngrxOnInitEffects() {
37
- return init();
38
- }
39
- static isForgotPasswordError(error) {
40
- return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;
41
- }
42
- static isInteractionInProgress(error) {
43
- return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;
44
- }
45
- getAuthResult(user) {
46
- if (user) {
47
- return signedIn({ user });
48
- }
49
- else {
50
- return signedOut();
51
- }
52
- }
53
- completeSignIn() {
54
- return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
55
- }
56
- }
57
- AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, deps: [{ token: i1.Actions }, { token: i2.AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
58
- AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
60
- type: Injectable
61
- }], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.AuthService }, { type: i3.Router }]; } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9lZmZlY3RzL2F1dGguZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsSUFBSSxFQUNKLGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixlQUFlLEVBQ2YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEdBQ1IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRzlDLE1BQU0sT0FBTyxXQUFXO0lBOEZ0QixZQUNtQixRQUFpQixFQUNqQixJQUFpQixFQUNqQixNQUFjO1FBRmQsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoR2pCLFlBQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2QsU0FBUyxDQUFDLE1BQU0s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Y3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aEVycm9yLCBCcm93c2VyQXV0aEVycm9yTWVzc2FnZSB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUsIE9uSW5pdEVmZmVjdHMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgaW5pdCxcbiAgcmVzZXRQYXNzd29yZCxcbiAgc2lnbmVkSW4sXG4gIHNpZ25lZE91dCxcbiAgc2lnbkluLFxuICBzaWduSW5Db21wbGV0ZWQsXG4gIHNpZ25JbkZhaWxlZCxcbiAgc2lnbkluUmVkaXJlY3RlZCxcbiAgc2lnbk91dCxcbn0gZnJvbSAnLi4vYWN0aW9ucy9hdXRoLmFjdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aEVmZmVjdHMgaW1wbGVtZW50cyBPbkluaXRFZmZlY3RzIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpZ25JbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbkluKSxcbiAgICAgIHN3aXRjaE1hcChhY3Rpb24gPT5cbiAgICAgICAgdGhpcy5hdXRoLmxvZ2luV2l0aFJlZGlyZWN0KHsgdGFyZ2V0OiBhY3Rpb24ucmV0dXJuVXJsIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHNpZ25JblJlZGlyZWN0ZWQoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBhc3N3b3JkUmVzZXQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHJlc2V0UGFzc3dvcmQpLFxuICAgICAgc3dpdGNoTWFwKGFjdGlvbiA9PlxuICAgICAgICB0aGlzLmF1dGgucmVzZXRQYXNzd29yZFdpdGhSZWRpcmVjdCh7IHRhcmdldDogYWN0aW9uLnJldHVyblVybCB9KS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBzaWduSW5SZWRpcmVjdGVkKCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2Yoc2lnbkluRmFpbGVkKHsgZXJyb3IgfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaWduSW5Db21wbGV0ZWQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25JbkNvbXBsZXRlZCksXG4gICAgICBtYXAoKHsgc3RhdGUsIHVzZXIgfSkgPT4gKHN0YXRlLnBhc3N3b3JkUmVzZXQgPyBzaWduT3V0KCkgOiBzaWduZWRJbih7IHVzZXIgfSkpKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVkaXJlY3QkID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShzaWduSW5Db21wbGV0ZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYWN0aW9uLnN0YXRlLnRhcmdldCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pKVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpZ25PdXQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25PdXQpLFxuICAgICAgc3dpdGNoTWFwKF8gPT5cbiAgICAgICAgdGhpcy5hdXRoLmxvZ291dCgpLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHNpZ25lZE91dCgpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHNpZ25lZE91dCgpKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoaW5pdCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcmFtcy5pbmNsdWRlcygnY29kZT0nKSAmJiBwYXJhbXMuaW5jbHVkZXMoJ3N0YXRlPScpKSB8fFxuICAgICAgICAgIChwYXJhbXMuaW5jbHVkZXMoJ2Vycm9yPScpICYmIHBhcmFtcy5pbmNsdWRlcygnZXJyb3JfZGVzY3JpcHRpb249JykpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlU2lnbkluKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aC5jaGVja1Nlc3Npb24oKS5waXBlKFxuICAgICAgICAgICAgbWFwKHVzZXIgPT4gdGhpcy5nZXRBdXRoUmVzdWx0KHVzZXIpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2Yoc2lnbkluRmFpbGVkKHsgZXJyb3IgfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNldFBhc3N3b3JkJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShzaWduSW5GYWlsZWQpLFxuICAgICAgZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgaW5zdGFuY2VvZiBBdXRoRXJyb3IpLFxuICAgICAgbWFwKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgYXMgQXV0aEVycm9yKSxcbiAgICAgIGZpbHRlcihBdXRoRWZmZWN0cy5pc0ZvcmdvdFBhc3N3b3JkRXJyb3IpLFxuICAgICAgbWFwKCgpID0+IHJlc2V0UGFzc3dvcmQoeyByZXR1cm5Vcmw6ICcvJyB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZhaWxlZCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbkluRmFpbGVkKSxcbiAgICAgIGZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLmVycm9yIGluc3RhbmNlb2YgQXV0aEVycm9yKSxcbiAgICAgIG1hcChhY3Rpb24gPT4gYWN0aW9uLmVycm9yIGFzIEF1dGhFcnJvciksXG4gICAgICBmaWx0ZXIoQXV0aEVmZmVjdHMuaXNJbnRlcmFjdGlvbkluUHJvZ3Jlc3MpLFxuICAgICAgbWFwKCgpID0+IHNpZ25PdXQoKSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBwdWJsaWMgbmdyeE9uSW5pdEVmZmVjdHMoKSB7XG4gICAgcmV0dXJuIGluaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzRm9yZ290UGFzc3dvcmRFcnJvcihlcnJvcjogQXV0aEVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLmVycm9yQ29kZSA9PT0gJ2FjY2Vzc19kZW5pZWQnICYmIGVycm9yLmVycm9yTWVzc2FnZS5pbmRleE9mKCdBQURCMkM5MDExOCcpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzSW50ZXJhY3Rpb25JblByb2dyZXNzKGVycm9yOiBBdXRoRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IuZXJyb3JDb2RlID09PSBCcm93c2VyQXV0aEVycm9yTWVzc2FnZS5pbnRlcmFjdGlvbkluUHJvZ3Jlc3MuY29kZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0aFJlc3VsdCh1c2VyOiB7IHN1Yjogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodXNlcikge1xuICAgICAgcmV0dXJuIHNpZ25lZEluKHsgdXNlciB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNpZ25lZE91dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGxldGVTaWduSW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5oYW5kbGVSZWRpcmVjdENhbGxiYWNrKCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gc2lnbkluQ29tcGxldGVkKHsgc3RhdGU6IHJlc3VsdC5zdGF0ZSwgdXNlcjogcmVzdWx0LnVzZXIgfSkpLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,29 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { map, mergeMap } from 'rxjs/operators';
3
- import { AuthService } from './auth.service';
4
- import * as i0 from "@angular/core";
5
- export class JwtInterceptor {
6
- intercept(request, next) {
7
- return jwtInterceptor(request, next.handle);
8
- }
9
- }
10
- JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11
- JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, decorators: [{
13
- type: Injectable
14
- }] });
15
- export const jwtInterceptor = (request, next) => {
16
- if (isSameDomain(request)) {
17
- return inject(AuthService)
18
- .getAccessToken()
19
- .pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })), mergeMap(authorizedRequest => next(authorizedRequest)));
20
- }
21
- else {
22
- return next(request);
23
- }
24
- };
25
- function isSameDomain(request) {
26
- const isAbsolute = /^https?:\/\//i.test(request.url);
27
- return !isAbsolute;
28
- }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9qd3QuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRzdDLE1BQU0sT0FBTyxjQUFjO0lBQ2xCLFNBQVMsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQzNELE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7MkdBSFUsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7O0FBT1gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNqRSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDdkIsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FDSCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDakYsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUN2RCxDQUFDO0tBQ0w7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsU0FBUyxZQUFZLENBQUMsT0FBeUI7SUFDN0MsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckQsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cEludGVyY2VwdG9yRm4sIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKd3RJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHB1YmxpYyBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICByZXR1cm4gand0SW50ZXJjZXB0b3IocmVxdWVzdCwgbmV4dC5oYW5kbGUpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBqd3RJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxdWVzdCwgbmV4dCkgPT4ge1xuICBpZiAoaXNTYW1lRG9tYWluKHJlcXVlc3QpKSB7XG4gICAgcmV0dXJuIGluamVjdChBdXRoU2VydmljZSlcbiAgICAgIC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHRva2VuID0+IHJlcXVlc3QuY2xvbmUoeyBzZXRIZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSkpLFxuICAgICAgICBtZXJnZU1hcChhdXRob3JpemVkUmVxdWVzdCA9PiBuZXh0KGF1dGhvcml6ZWRSZXF1ZXN0KSlcbiAgICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzU2FtZURvbWFpbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gIGNvbnN0IGlzQWJzb2x1dGUgPSAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHJlcXVlc3QudXJsKTtcblxuICByZXR1cm4gIWlzQWJzb2x1dGU7XG59XG4iXX0=
@@ -1,251 +0,0 @@
1
- import * as i1 from '@ngrx/store';
2
- import { createAction, props, createFeatureSelector, select, createReducer, on, StoreModule, provideState } from '@ngrx/store';
3
- import * as i0 from '@angular/core';
4
- import { Injectable, inject, NgModule, makeEnvironmentProviders } from '@angular/core';
5
- import { filter, map, tap, first, catchError, switchMap, mergeMap } from 'rxjs/operators';
6
- import { pipe, from, of, throwError } from 'rxjs';
7
- import { HTTP_INTERCEPTORS } from '@angular/common/http';
8
- import * as i1$1 from '@ngrx/effects';
9
- import { createEffect, ofType, EffectsModule, provideEffects } from '@ngrx/effects';
10
- import { PublicClientApplication, InteractionRequiredAuthError, AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';
11
- import * as i3 from '@angular/router';
12
-
13
- const init = createAction('[@thecla/b2c-angular] init');
14
- const signIn = createAction('[@thecla/b2c-angular] sign-in', props());
15
- const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');
16
- const signInCompleted = createAction('[@thecla/b2c-angular] sign in completed', props());
17
- const signedIn = createAction('[@thecla/b2c-angular] signed in', props());
18
- const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props());
19
- const signOut = createAction('[@thecla/b2c-angular] sign out');
20
- const signedOut = createAction('[@thecla/b2c-angular] signed out');
21
- const resetPassword = createAction('[@thecla/b2c-angular] reset password', props());
22
-
23
- const featureKey = 'auth';
24
- const selectState = createFeatureSelector(featureKey);
25
- const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
26
- const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
27
-
28
- class AuthGuard {
29
- constructor(store) {
30
- this.store = store;
31
- this.authenticated$ = this.store.pipe(isAuthenticated);
32
- }
33
- canActivate(next, state) {
34
- return this.authenticated$.pipe(tap(auth => {
35
- if (!auth) {
36
- this.store.dispatch(signIn({ returnUrl: state.url }));
37
- }
38
- }), first());
39
- }
40
- }
41
- AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
42
- AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, providedIn: 'root' });
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, decorators: [{
44
- type: Injectable,
45
- args: [{
46
- providedIn: 'root',
47
- }]
48
- }], ctorParameters: function () { return [{ type: i1.Store }]; } });
49
-
50
- class AuthConfig {
51
- }
52
-
53
- class AuthService {
54
- constructor(config) {
55
- var _a;
56
- this.config = config;
57
- const msalConfig = {
58
- auth: {
59
- clientId: config.clientId,
60
- authority: `${config.authority}/${config.signInPolicy}`,
61
- knownAuthorities: config.knownAuthorities,
62
- redirectUri: (_a = config.redirectUri) !== null && _a !== void 0 ? _a : location.origin,
63
- },
64
- };
65
- this.clientApplication = new PublicClientApplication(msalConfig);
66
- }
67
- loginWithRedirect(state) {
68
- return from(this.clientApplication.loginRedirect({
69
- scopes: this.config.scopes,
70
- state: JSON.stringify(Object.assign(Object.assign({}, state), { passwordReset: false })),
71
- }));
72
- }
73
- resetPasswordWithRedirect(state) {
74
- return from(this.clientApplication.loginRedirect({
75
- authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,
76
- scopes: this.config.scopes,
77
- state: JSON.stringify(Object.assign(Object.assign({}, state), { passwordReset: true })),
78
- prompt: 'login',
79
- }));
80
- }
81
- handleRedirectCallback() {
82
- return from(this.clientApplication.handleRedirectPromise()).pipe(filter((result) => result !== null), map(result => ({
83
- state: result.state ? JSON.parse(result.state) : undefined,
84
- user: Object.assign({ sub: result.uniqueId }, result.idTokenClaims),
85
- })));
86
- }
87
- getAccessToken() {
88
- const account = this.clientApplication.getAllAccounts()[0];
89
- const scopes = this.config.scopes;
90
- return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));
91
- }
92
- logout() {
93
- return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));
94
- }
95
- checkSession() {
96
- const accounts = this.clientApplication.getAllAccounts();
97
- const scopes = this.config.scopes;
98
- if (accounts.length === 1) {
99
- return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(map(result => (Object.assign({ sub: result.uniqueId }, result.idTokenClaims))), catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error))));
100
- }
101
- else {
102
- return of(undefined);
103
- }
104
- }
105
- }
106
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
107
- AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
109
- type: Injectable,
110
- args: [{
111
- providedIn: 'root',
112
- }]
113
- }], ctorParameters: function () { return [{ type: AuthConfig }]; } });
114
-
115
- class AuthEffects {
116
- constructor(actions$, auth, router) {
117
- this.actions$ = actions$;
118
- this.auth = auth;
119
- this.router = router;
120
- this.signIn$ = createEffect(() => this.actions$.pipe(ofType(signIn), switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
121
- this.passwordReset$ = createEffect(() => this.actions$.pipe(ofType(resetPassword), switchMap(action => this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
122
- this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))));
123
- this.redirect$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))), { dispatch: false });
124
- this.signOut$ = createEffect(() => this.actions$.pipe(ofType(signOut), switchMap(_ => this.auth.logout().pipe(map(() => signedOut()), catchError(() => of(signedOut()))))));
125
- this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
126
- const params = window.location.hash;
127
- if ((params.includes('code=') && params.includes('state=')) ||
128
- (params.includes('error=') && params.includes('error_description='))) {
129
- return this.completeSignIn();
130
- }
131
- else {
132
- return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error }))));
133
- }
134
- })));
135
- this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isForgotPasswordError), map(() => resetPassword({ returnUrl: '/' }))));
136
- this.failed$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isInteractionInProgress), map(() => signOut())));
137
- }
138
- ngrxOnInitEffects() {
139
- return init();
140
- }
141
- static isForgotPasswordError(error) {
142
- return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;
143
- }
144
- static isInteractionInProgress(error) {
145
- return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;
146
- }
147
- getAuthResult(user) {
148
- if (user) {
149
- return signedIn({ user });
150
- }
151
- else {
152
- return signedOut();
153
- }
154
- }
155
- completeSignIn() {
156
- return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
157
- }
158
- }
159
- AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, deps: [{ token: i1$1.Actions }, { token: AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
160
- AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
162
- type: Injectable
163
- }], ctorParameters: function () { return [{ type: i1$1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
164
-
165
- class JwtInterceptor {
166
- intercept(request, next) {
167
- return jwtInterceptor(request, next.handle);
168
- }
169
- }
170
- JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
171
- JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor });
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, decorators: [{
173
- type: Injectable
174
- }] });
175
- const jwtInterceptor = (request, next) => {
176
- if (isSameDomain(request)) {
177
- return inject(AuthService)
178
- .getAccessToken()
179
- .pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })), mergeMap(authorizedRequest => next(authorizedRequest)));
180
- }
181
- else {
182
- return next(request);
183
- }
184
- };
185
- function isSameDomain(request) {
186
- const isAbsolute = /^https?:\/\//i.test(request.url);
187
- return !isAbsolute;
188
- }
189
-
190
- const noAuthentication = {
191
- authenticating: false,
192
- authenticated: false,
193
- };
194
- const startAuthentication = {
195
- authenticating: true,
196
- authenticated: false,
197
- };
198
- const authReducer = createReducer(startAuthentication, on(signedIn, (state, { user }) => (Object.assign(Object.assign({}, state), { authenticating: false, authenticated: true, user }))), on(signedOut, _ => noAuthentication), on(signInFailed, _ => noAuthentication));
199
- function reducer(state, action) {
200
- return authReducer(state, action);
201
- }
202
-
203
- class AuthModule {
204
- static forRoot(config) {
205
- return {
206
- ngModule: AuthModule,
207
- providers: [
208
- {
209
- provide: AuthConfig,
210
- useValue: config,
211
- },
212
- {
213
- provide: HTTP_INTERCEPTORS,
214
- useClass: JwtInterceptor,
215
- multi: true,
216
- },
217
- ],
218
- };
219
- }
220
- }
221
- AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
222
- AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i1$1.EffectsFeatureModule] });
223
- AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, decorators: [{
225
- type: NgModule,
226
- args: [{
227
- declarations: [],
228
- imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],
229
- exports: [],
230
- }]
231
- }] });
232
-
233
- function provideAuth(config) {
234
- const effects = provideEffects(AuthEffects);
235
- const state = provideState(featureKey, reducer);
236
- return makeEnvironmentProviders([
237
- effects,
238
- state,
239
- {
240
- provide: AuthConfig,
241
- useValue: config,
242
- },
243
- ]);
244
- }
245
-
246
- /**
247
- * Generated bundle index. Do not edit.
248
- */
249
-
250
- export { AuthGuard, AuthModule, getUser, isAuthenticated, jwtInterceptor, provideAuth, signIn, signOut, signedIn, signedOut };
251
- //# sourceMappingURL=thecla-b2c-angular.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"thecla-b2c-angular.mjs","sources":["../../../projects/b2c-angular/src/lib/actions/auth.actions.ts","../../../projects/b2c-angular/src/lib/store/index.ts","../../../projects/b2c-angular/src/lib/auth.guard.ts","../../../projects/b2c-angular/src/lib/auth-config.ts","../../../projects/b2c-angular/src/lib/auth.service.ts","../../../projects/b2c-angular/src/lib/effects/auth.effects.ts","../../../projects/b2c-angular/src/lib/jwt.interceptor.ts","../../../projects/b2c-angular/src/lib/reducers/auth.reducer.ts","../../../projects/b2c-angular/src/lib/auth.module.ts","../../../projects/b2c-angular/src/lib/provide-auth.ts","../../../projects/b2c-angular/src/thecla-b2c-angular.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const init = createAction('[@thecla/b2c-angular] init');\n\nexport const signIn = createAction('[@thecla/b2c-angular] sign-in', props<{ returnUrl: string }>());\n\nexport const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');\n\nexport const signInCompleted = createAction(\n '[@thecla/b2c-angular] sign in completed',\n props<{ state: { target: string; passwordReset: boolean }; user: Profile }>()\n);\n\nexport const signedIn = createAction('[@thecla/b2c-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/b2c-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/b2c-angular] signed out');\n\nexport const resetPassword = createAction('[@thecla/b2c-angular] reset password', props<{ returnUrl: string }>());\n","import { createFeatureSelector, select } from '@ngrx/store';\nimport { pipe } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { State } from '../state/auth.state';\n\nexport const featureKey = 'auth';\n\nexport const selectState = createFeatureSelector<State>(featureKey);\n\nexport const isAuthenticated = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.authenticated)\n);\n\nexport const getUser = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.user)\n);\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { first, tap } from 'rxjs/operators';\nimport { signIn } from './actions/auth.actions';\nimport { isAuthenticated } from './store';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n private readonly authenticated$ = this.store.pipe(isAuthenticated);\n\n public constructor(private readonly store: Store) {}\n\n public canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.authenticated$.pipe(\n tap(auth => {\n if (!auth) {\n this.store.dispatch(signIn({ returnUrl: state.url }));\n }\n }),\n first()\n );\n }\n}\n","export abstract class AuthConfig {\n public abstract clientId: string;\n public abstract authority: string;\n public abstract signInPolicy: string;\n public abstract resetPasswordPolicy: string;\n public abstract knownAuthorities: string[];\n public abstract scopes: string[];\n public abstract redirectUri?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {\n AuthenticationResult,\n Configuration,\n InteractionRequiredAuthError,\n PublicClientApplication,\n} from '@azure/msal-browser';\nimport { from, of, throwError } from 'rxjs';\nimport { catchError, filter, map } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly clientApplication: PublicClientApplication;\n\n public constructor(private readonly config: AuthConfig) {\n const msalConfig: Configuration = {\n auth: {\n clientId: config.clientId,\n authority: `${config.authority}/${config.signInPolicy}`,\n knownAuthorities: config.knownAuthorities,\n redirectUri: config.redirectUri ?? location.origin,\n },\n };\n\n this.clientApplication = new PublicClientApplication(msalConfig);\n }\n\n public loginWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: false }),\n })\n );\n }\n\n public resetPasswordWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: true }),\n prompt: 'login',\n })\n );\n }\n\n public handleRedirectCallback() {\n return from(this.clientApplication.handleRedirectPromise()).pipe(\n filter((result): result is AuthenticationResult => result !== null),\n map(result => ({\n state: result.state ? JSON.parse(result.state) : undefined,\n user: { sub: result.uniqueId, ...result.idTokenClaims },\n }))\n );\n }\n\n public getAccessToken() {\n const account = this.clientApplication.getAllAccounts()[0];\n const scopes = this.config.scopes;\n\n return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));\n }\n\n public logout() {\n return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));\n }\n\n public checkSession() {\n const accounts = this.clientApplication.getAllAccounts();\n const scopes = this.config.scopes;\n\n if (accounts.length === 1) {\n return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(\n map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })),\n catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error)))\n );\n } else {\n return of(undefined);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';\nimport { Actions, createEffect, ofType, OnInitEffects } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, filter, map, switchMap } from 'rxjs/operators';\nimport {\n init,\n resetPassword,\n signedIn,\n signedOut,\n signIn,\n signInCompleted,\n signInFailed,\n signInRedirected,\n signOut,\n} from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects implements OnInitEffects {\n public readonly signIn$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action =>\n this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly passwordReset$ = createEffect(() =>\n this.actions$.pipe(\n ofType(resetPassword),\n switchMap(action =>\n this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))\n )\n );\n\n public readonly redirect$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))\n ),\n { dispatch: false }\n );\n\n public readonly signOut$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signOut),\n switchMap(_ =>\n this.auth.logout().pipe(\n map(() => signedOut()),\n catchError(() => of(signedOut()))\n )\n )\n )\n );\n\n public readonly init$ = createEffect(() =>\n this.actions$.pipe(\n ofType(init),\n switchMap(() => {\n const params = window.location.hash;\n\n if (\n (params.includes('code=') && params.includes('state=')) ||\n (params.includes('error=') && params.includes('error_description='))\n ) {\n return this.completeSignIn();\n } else {\n return this.auth.checkSession().pipe(\n map(user => this.getAuthResult(user)),\n catchError(error => of(signInFailed({ error })))\n );\n }\n })\n )\n );\n\n public readonly resetPassword$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isForgotPasswordError),\n map(() => resetPassword({ returnUrl: '/' }))\n )\n );\n\n public readonly failed$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isInteractionInProgress),\n map(() => signOut())\n )\n );\n\n public constructor(\n private readonly actions$: Actions,\n private readonly auth: AuthService,\n private readonly router: Router\n ) {}\n\n public ngrxOnInitEffects() {\n return init();\n }\n\n private static isForgotPasswordError(error: AuthError) {\n return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;\n }\n\n private static isInteractionInProgress(error: AuthError) {\n return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;\n }\n\n private getAuthResult(user: { sub: string } | undefined) {\n if (user) {\n return signedIn({ user });\n } else {\n return signedOut();\n }\n }\n\n private completeSignIn() {\n return this.auth.handleRedirectCallback().pipe(\n map(result => signInCompleted({ state: result.state, user: result.user })),\n catchError(error => of(signInFailed({ error })))\n );\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { AuthService } from './auth.service';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n public intercept(request: HttpRequest<any>, next: HttpHandler) {\n return jwtInterceptor(request, next.handle);\n }\n}\n\nexport const jwtInterceptor: HttpInterceptorFn = (request, next) => {\n if (isSameDomain(request)) {\n return inject(AuthService)\n .getAccessToken()\n .pipe(\n map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })),\n mergeMap(authorizedRequest => next(authorizedRequest))\n );\n } else {\n return next(request);\n }\n};\n\nfunction isSameDomain(request: HttpRequest<any>) {\n const isAbsolute = /^https?:\\/\\//i.test(request.url);\n\n return !isAbsolute;\n}\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { signedIn, signedOut, signInFailed } from '../actions/auth.actions';\nimport { State } from '../state/auth.state';\n\nexport const noAuthentication: State = {\n authenticating: false,\n authenticated: false,\n};\n\nexport const startAuthentication: State = {\n authenticating: true,\n authenticated: false,\n};\n\nconst authReducer = createReducer(\n startAuthentication,\n on(signedIn, (state, { user }) => ({\n ...state,\n authenticating: false,\n authenticated: true,\n user,\n })),\n on(signedOut, _ => noAuthentication),\n on(signInFailed, _ => noAuthentication)\n);\n\nexport function reducer(state: State | undefined, action: Action) {\n return authReducer(state, action);\n}\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { JwtInterceptor } from './jwt.interceptor';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\n@NgModule({\n declarations: [],\n imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],\n exports: [],\n})\nexport class AuthModule {\n public static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n {\n provide: AuthConfig,\n useValue: config,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true,\n },\n ],\n };\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { provideEffects } from '@ngrx/effects';\nimport { provideState } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\nexport function provideAuth(config: AuthConfig) {\n const effects = provideEffects(AuthEffects);\n const state = provideState(featureKey, reducer);\n\n return makeEnvironmentProviders([\n effects,\n state,\n {\n provide: AuthConfig,\n useValue: config,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthConfig","i1","i2.AuthService","i2"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"thecla-b2c-angular.mjs","sources":["../../../projects/b2c-angular/src/lib/actions/auth.actions.ts","../../../projects/b2c-angular/src/lib/store/index.ts","../../../projects/b2c-angular/src/lib/auth.guard.ts","../../../projects/b2c-angular/src/lib/auth-config.ts","../../../projects/b2c-angular/src/lib/auth.service.ts","../../../projects/b2c-angular/src/lib/effects/auth.effects.ts","../../../projects/b2c-angular/src/lib/jwt.interceptor.ts","../../../projects/b2c-angular/src/lib/reducers/auth.reducer.ts","../../../projects/b2c-angular/src/lib/auth.module.ts","../../../projects/b2c-angular/src/lib/provide-auth.ts","../../../projects/b2c-angular/src/thecla-b2c-angular.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const init = createAction('[@thecla/b2c-angular] init');\n\nexport const signIn = createAction('[@thecla/b2c-angular] sign-in', props<{ returnUrl: string }>());\n\nexport const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');\n\nexport const signInCompleted = createAction(\n '[@thecla/b2c-angular] sign in completed',\n props<{ state: { target: string; passwordReset: boolean }; user: Profile }>()\n);\n\nexport const signedIn = createAction('[@thecla/b2c-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/b2c-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/b2c-angular] signed out');\n\nexport const resetPassword = createAction('[@thecla/b2c-angular] reset password', props<{ returnUrl: string }>());\n","import { createFeatureSelector, select } from '@ngrx/store';\nimport { pipe } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { State } from '../state/auth.state';\n\nexport const featureKey = 'auth';\n\nexport const selectState = createFeatureSelector<State>(featureKey);\n\nexport const isAuthenticated = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.authenticated)\n);\n\nexport const getUser = pipe(\n select(selectState),\n filter(state => !state.authenticating),\n map(state => state.user)\n);\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { first, tap } from 'rxjs/operators';\nimport { signIn } from './actions/auth.actions';\nimport { isAuthenticated } from './store';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n private readonly authenticated$ = this.store.pipe(isAuthenticated);\n\n public constructor(private readonly store: Store) {}\n\n public canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.authenticated$.pipe(\n tap(auth => {\n if (!auth) {\n this.store.dispatch(signIn({ returnUrl: state.url }));\n }\n }),\n first()\n );\n }\n}\n","export abstract class AuthConfig {\n public abstract clientId: string;\n public abstract authority: string;\n public abstract signInPolicy: string;\n public abstract resetPasswordPolicy: string;\n public abstract knownAuthorities: string[];\n public abstract scopes: string[];\n public abstract redirectUri?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {\n AuthenticationResult,\n Configuration,\n InteractionRequiredAuthError,\n PublicClientApplication,\n} from '@azure/msal-browser';\nimport { from, of, throwError } from 'rxjs';\nimport { catchError, filter, map } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly clientApplication: PublicClientApplication;\n\n public constructor(private readonly config: AuthConfig) {\n const msalConfig: Configuration = {\n auth: {\n clientId: config.clientId,\n authority: `${config.authority}/${config.signInPolicy}`,\n knownAuthorities: config.knownAuthorities,\n redirectUri: config.redirectUri ?? location.origin,\n },\n };\n\n this.clientApplication = new PublicClientApplication(msalConfig);\n }\n\n public loginWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: false }),\n })\n );\n }\n\n public resetPasswordWithRedirect(state: { target: string }) {\n return from(\n this.clientApplication.loginRedirect({\n authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,\n scopes: this.config.scopes,\n state: JSON.stringify({ ...state, passwordReset: true }),\n prompt: 'login',\n })\n );\n }\n\n public handleRedirectCallback() {\n return from(this.clientApplication.handleRedirectPromise()).pipe(\n filter((result): result is AuthenticationResult => result !== null),\n map(result => ({\n state: result.state ? JSON.parse(result.state) : undefined,\n user: { sub: result.uniqueId, ...result.idTokenClaims },\n }))\n );\n }\n\n public getAccessToken() {\n const account = this.clientApplication.getAllAccounts()[0];\n const scopes = this.config.scopes;\n\n return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));\n }\n\n public logout() {\n return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));\n }\n\n public checkSession() {\n const accounts = this.clientApplication.getAllAccounts();\n const scopes = this.config.scopes;\n\n if (accounts.length === 1) {\n return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(\n map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })),\n catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error)))\n );\n } else {\n return of(undefined);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';\nimport { Actions, createEffect, ofType, OnInitEffects } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, filter, map, switchMap } from 'rxjs/operators';\nimport {\n init,\n resetPassword,\n signedIn,\n signedOut,\n signIn,\n signInCompleted,\n signInFailed,\n signInRedirected,\n signOut,\n} from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects implements OnInitEffects {\n public readonly signIn$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action =>\n this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly passwordReset$ = createEffect(() =>\n this.actions$.pipe(\n ofType(resetPassword),\n switchMap(action =>\n this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(\n map(() => signInRedirected()),\n catchError(error => of(signInFailed({ error })))\n )\n )\n )\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))\n )\n );\n\n public readonly redirect$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))\n ),\n { dispatch: false }\n );\n\n public readonly signOut$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signOut),\n switchMap(_ =>\n this.auth.logout().pipe(\n map(() => signedOut()),\n catchError(() => of(signedOut()))\n )\n )\n )\n );\n\n public readonly init$ = createEffect(() =>\n this.actions$.pipe(\n ofType(init),\n switchMap(() => {\n const params = window.location.hash;\n\n if (\n (params.includes('code=') && params.includes('state=')) ||\n (params.includes('error=') && params.includes('error_description='))\n ) {\n return this.completeSignIn();\n } else {\n return this.auth.checkSession().pipe(\n map(user => this.getAuthResult(user)),\n catchError(error => of(signInFailed({ error })))\n );\n }\n })\n )\n );\n\n public readonly resetPassword$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isForgotPasswordError),\n map(() => resetPassword({ returnUrl: '/' }))\n )\n );\n\n public readonly failed$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInFailed),\n filter(action => action.error instanceof AuthError),\n map(action => action.error as AuthError),\n filter(AuthEffects.isInteractionInProgress),\n map(() => signOut())\n )\n );\n\n public constructor(\n private readonly actions$: Actions,\n private readonly auth: AuthService,\n private readonly router: Router\n ) {}\n\n public ngrxOnInitEffects() {\n return init();\n }\n\n private static isForgotPasswordError(error: AuthError) {\n return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;\n }\n\n private static isInteractionInProgress(error: AuthError) {\n return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;\n }\n\n private getAuthResult(user: { sub: string } | undefined) {\n if (user) {\n return signedIn({ user });\n } else {\n return signedOut();\n }\n }\n\n private completeSignIn() {\n return this.auth.handleRedirectCallback().pipe(\n map(result => signInCompleted({ state: result.state, user: result.user })),\n catchError(error => of(signInFailed({ error })))\n );\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { AuthService } from './auth.service';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n public intercept(request: HttpRequest<any>, next: HttpHandler) {\n return jwtInterceptor(request, next.handle);\n }\n}\n\nexport const jwtInterceptor: HttpInterceptorFn = (request, next) => {\n if (isSameDomain(request)) {\n return inject(AuthService)\n .getAccessToken()\n .pipe(\n map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })),\n mergeMap(authorizedRequest => next(authorizedRequest))\n );\n } else {\n return next(request);\n }\n};\n\nfunction isSameDomain(request: HttpRequest<any>) {\n const isAbsolute = /^https?:\\/\\//i.test(request.url);\n\n return !isAbsolute;\n}\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { signedIn, signedOut, signInFailed } from '../actions/auth.actions';\nimport { State } from '../state/auth.state';\n\nexport const noAuthentication: State = {\n authenticating: false,\n authenticated: false,\n};\n\nexport const startAuthentication: State = {\n authenticating: true,\n authenticated: false,\n};\n\nconst authReducer = createReducer(\n startAuthentication,\n on(signedIn, (state, { user }) => ({\n ...state,\n authenticating: false,\n authenticated: true,\n user,\n })),\n on(signedOut, _ => noAuthentication),\n on(signInFailed, _ => noAuthentication)\n);\n\nexport function reducer(state: State | undefined, action: Action) {\n return authReducer(state, action);\n}\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { JwtInterceptor } from './jwt.interceptor';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\n@NgModule({\n declarations: [],\n imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],\n exports: [],\n})\nexport class AuthModule {\n public static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n {\n provide: AuthConfig,\n useValue: config,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true,\n },\n ],\n };\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { provideEffects } from '@ngrx/effects';\nimport { provideState } from '@ngrx/store';\nimport { AuthConfig } from './auth-config';\nimport { AuthEffects } from './effects/auth.effects';\nimport { reducer } from './reducers/auth.reducer';\nimport { featureKey } from './store';\n\nexport function provideAuth(config: AuthConfig) {\n const effects = provideEffects(AuthEffects);\n const state = provideState(featureKey, reducer);\n\n return makeEnvironmentProviders([\n effects,\n state,\n {\n provide: AuthConfig,\n useValue: config,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthConfig","i1","i2.AuthService","i2"],"mappings":";;;;;;;;;;;;AAGO,MAAM,IAAI,GAAG,YAAY,CAAC,4BAA4B,CAAC,CAAC;AAElD,MAAA,MAAM,GAAG,YAAY,CAAC,+BAA+B,EAAE,KAAK,EAAyB,EAAE;AAE7F,MAAM,gBAAgB,GAAG,YAAY,CAAC,0CAA0C,CAAC,CAAC;AAElF,MAAM,eAAe,GAAG,YAAY,CACzC,yCAAyC,EACzC,KAAK,EAAwE,CAC9E,CAAC;AAEW,MAAA,QAAQ,GAAG,YAAY,CAAC,iCAAiC,EAAE,KAAK,EAAqB,EAAE;AAE7F,MAAM,YAAY,GAAG,YAAY,CAAC,sCAAsC,EAAE,KAAK,EAAoB,CAAC,CAAC;MAE/F,OAAO,GAAG,YAAY,CAAC,gCAAgC,EAAE;MAEzD,SAAS,GAAG,YAAY,CAAC,kCAAkC,EAAE;AAEnE,MAAM,aAAa,GAAG,YAAY,CAAC,sCAAsC,EAAE,KAAK,EAAyB,CAAC;;ACjB1G,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,WAAW,GAAG,qBAAqB,CAAQ,UAAU,CAAC,CAAC;AAE7D,MAAM,eAAe,GAAG,IAAI,CACjC,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EACtC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,EACjC;AAEK,MAAM,OAAO,GAAG,IAAI,CACzB,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EACtC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;;MCRb,SAAS,CAAA;AAGpB,IAAA,WAAA,CAAoC,KAAY,EAAA;QAAZ,IAAK,CAAA,KAAA,GAAL,KAAK,CAAO;QAF/B,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KAEf;IAE7C,WAAW,CAAC,IAA4B,EAAE,KAA0B,EAAA;QACzE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAC7B,GAAG,CAAC,IAAI,IAAG;YACT,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvD,aAAA;AACH,SAAC,CAAC,EACF,KAAK,EAAE,CACR,CAAC;KACH;;sGAdU,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAT,SAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cAFR,MAAM,EAAA,CAAA,CAAA;2FAEP,SAAS,EAAA,UAAA,EAAA,CAAA;kBAHrB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCTqB,UAAU,CAAA;AAQ/B;;MCMY,WAAW,CAAA;AAGtB,IAAA,WAAA,CAAoC,MAAkB,EAAA;QAAlB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAY;AACpD,QAAA,MAAM,UAAU,GAAkB;AAChC,YAAA,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,CAAI,CAAA,EAAA,MAAM,CAAC,YAAY,CAAE,CAAA;gBACvD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,gBAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM;AACnD,aAAA;SACF,CAAC;QAEF,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;KAClE;AAEM,IAAA,iBAAiB,CAAC,KAAyB,EAAA;AAChD,QAAA,OAAO,IAAI,CACT,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1B,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1D,SAAA,CAAC,CACH,CAAC;KACH;AAEM,IAAA,yBAAyB,CAAC,KAAyB,EAAA;AACxD,QAAA,OAAO,IAAI,CACT,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACnC,YAAA,SAAS,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAE,CAAA;AACxE,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1B,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACxD,YAAA,MAAM,EAAE,OAAO;AAChB,SAAA,CAAC,CACH,CAAC;KACH;IAEM,sBAAsB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAC9D,MAAM,CAAC,CAAC,MAAM,KAAqC,MAAM,KAAK,IAAI,CAAC,EACnE,GAAG,CAAC,MAAM,KAAK;AACb,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS;AAC1D,YAAA,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE;SACxD,CAAC,CAAC,CACJ,CAAC;KACH;IAEM,cAAc,GAAA;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAElC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KACrH;IAEM,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,qBAAqB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAChG;IAEM,YAAY,GAAA;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;AACzD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAElC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAC3F,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,EAClE,UAAU,CAAC,KAAK,KAAK,KAAK,YAAY,4BAA4B,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CACzG,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACtB,SAAA;KACF;;wGArEU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCOY,WAAW,CAAA;AA8FtB,IAAA,WAAA,CACmB,QAAiB,EACjB,IAAiB,EACjB,MAAc,EAAA;QAFd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAS;QACjB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAhGjB,QAAA,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,MACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,MAAM,CAAC,EACd,SAAS,CAAC,MAAM,IACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAC7B,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CACjD,CACF,CACF,CACF,CAAC;AAEc,QAAA,IAAA,CAAA,cAAc,GAAG,YAAY,CAAC,MAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,aAAa,CAAC,EACrB,SAAS,CAAC,MAAM,IACd,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAC7B,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CACjD,CACF,CACF,CACF,CAAC;QAEc,IAAgB,CAAA,gBAAA,GAAG,YAAY,CAAC,MAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,eAAe,CAAC,EACvB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,aAAa,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CACjF,CACF,CAAC;QAEc,IAAS,CAAA,SAAA,GAAG,YAAY,CACtC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,eAAe,CAAC,EACvB,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAC1F,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB,CAAC;QAEc,IAAQ,CAAA,QAAA,GAAG,YAAY,CAAC,MACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,OAAO,CAAC,EACf,SAAS,CAAC,CAAC,IACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACrB,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,EACtB,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAClC,CACF,CACF,CACF,CAAC;QAEc,IAAK,CAAA,KAAA,GAAG,YAAY,CAAC,MACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,IAAI,CAAC,EACZ,SAAS,CAAC,MAAK;AACb,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEpC,YAAA,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtD,iBAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EACpE;AACA,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAClC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EACrC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;AACH,aAAA;SACF,CAAC,CACH,CACF,CAAC;AAEc,QAAA,IAAA,CAAA,cAAc,GAAG,YAAY,CAAC,MAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,YAAY,CAAC,EACpB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,YAAY,SAAS,CAAC,EACnD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAkB,CAAC,EACxC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,EACzC,GAAG,CAAC,MAAM,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAC7C,CACF,CAAC;QAEc,IAAO,CAAA,OAAA,GAAG,YAAY,CAAC,MACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,YAAY,CAAC,EACpB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,YAAY,SAAS,CAAC,EACnD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAkB,CAAC,EACxC,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAC3C,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CACrB,CACF,CAAC;KAME;IAEG,iBAAiB,GAAA;QACtB,OAAO,IAAI,EAAE,CAAC;KACf;IAEO,OAAO,qBAAqB,CAAC,KAAgB,EAAA;AACnD,QAAA,OAAO,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KAChG;IAEO,OAAO,uBAAuB,CAAC,KAAgB,EAAA;QACrD,OAAO,KAAK,CAAC,SAAS,KAAK,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC;KAC/E;AAEO,IAAA,aAAa,CAAC,IAAiC,EAAA;AACrD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;YACL,OAAO,SAAS,EAAE,CAAC;AACpB,SAAA;KACF;IAEO,cAAc,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAC5C,GAAG,CAAC,MAAM,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1E,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;KACH;;wGA7HU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,CAAA,CAAA;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;;MCbE,cAAc,CAAA;IAClB,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;QAC3D,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;;2GAHU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;MAOE,cAAc,GAAsB,CAAC,OAAO,EAAE,IAAI,KAAI;AACjE,IAAA,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;QACzB,OAAO,MAAM,CAAC,WAAW,CAAC;AACvB,aAAA,cAAc,EAAE;AAChB,aAAA,IAAI,CACH,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,EAAE,CAAC,CAAC,EACjF,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CACvD,CAAC;AACL,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,KAAA;AACH,EAAE;AAEF,SAAS,YAAY,CAAC,OAAyB,EAAA;IAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErD,OAAO,CAAC,UAAU,CAAC;AACrB;;ACzBO,MAAM,gBAAgB,GAAU;AACrC,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,aAAa,EAAE,KAAK;CACrB,CAAC;AAEK,MAAM,mBAAmB,GAAU;AACxC,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,MAAM,WAAW,GAAG,aAAa,CAC/B,mBAAmB,EACnB,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM;AACjC,IAAA,GAAG,KAAK;AACR,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,aAAa,EAAE,IAAI;IACnB,IAAI;CACL,CAAC,CAAC,EACH,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,gBAAgB,CAAC,EACpC,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,gBAAgB,CAAC,CACxC,CAAC;AAEc,SAAA,OAAO,CAAC,KAAwB,EAAE,MAAc,EAAA;AAC9D,IAAA,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpC;;MCba,UAAU,CAAA;IACd,OAAO,OAAO,CAAC,MAAkB,EAAA;QACtC,OAAO;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,UAAU;AACnB,oBAAA,QAAQ,EAAE,MAAM;AACjB,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACF,aAAA;SACF,CAAC;KACH;;uGAhBU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;wGAAV,UAAU,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,EAAAC,IAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAHX,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA,EAAA,CAAA,CAAA;2FAGnF,UAAU,EAAA,UAAA,EAAA,CAAA;kBALtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/F,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACNK,SAAU,WAAW,CAAC,MAAkB,EAAA;AAC5C,IAAA,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEhD,IAAA,OAAO,wBAAwB,CAAC;QAC9B,OAAO;QACP,KAAK;AACL,QAAA;AACE,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;AACF,KAAA,CAAC,CAAC;AACL;;ACpBA;;AAEG;;;;"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes