@thecla/auth0-angular 5.0.1 → 7.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.
- package/esm2020/lib/actions/auth.actions.mjs +2 -1
- package/esm2020/lib/auth.guard.mjs +3 -3
- package/esm2020/lib/auth.module.mjs +5 -5
- package/esm2020/lib/auth.service.mjs +13 -9
- package/esm2020/lib/effects/auth.effects.mjs +16 -13
- package/esm2020/lib/jwt.interceptor.mjs +20 -23
- package/esm2020/lib/provide-auth.mjs +20 -0
- package/esm2020/public-api.mjs +6 -4
- package/fesm2015/thecla-auth0-angular.mjs +98 -79
- package/fesm2015/thecla-auth0-angular.mjs.map +1 -1
- package/fesm2020/thecla-auth0-angular.mjs +98 -79
- package/fesm2020/thecla-auth0-angular.mjs.map +1 -1
- package/{thecla-auth0-angular.d.ts → index.d.ts} +0 -0
- package/lib/actions/auth.actions.d.ts +1 -0
- package/lib/effects/auth.effects.d.ts +5 -6
- package/lib/jwt.interceptor.d.ts +3 -7
- package/lib/provide-auth.d.ts +2 -0
- package/package.json +9 -9
- package/public-api.d.ts +5 -3
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createAction, props } from '@ngrx/store';
|
|
2
|
+
export const init = createAction('[@thecla/auth0-angular] init');
|
|
2
3
|
export const signIn = createAction('[@thecla/auth0-angular] sign in', props());
|
|
3
4
|
export const signInCompleted = createAction('[@thecla/auth0-angular] sign in completed', props());
|
|
4
5
|
export const signedIn = createAction('[@thecla/auth0-angular] signed in', props());
|
|
5
6
|
export const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', props());
|
|
6
7
|
export const signOut = createAction('[@thecla/auth0-angular] sign out');
|
|
7
8
|
export const signedOut = createAction('[@thecla/auth0-angular] signed out');
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL2FjdGlvbnMvYXV0aC5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR2xELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFBeUIsQ0FBQyxDQUFDO0FBRXRHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQ3pDLDJDQUEyQyxFQUMzQyxLQUFLLEVBQWlDLENBQ3ZDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLG1DQUFtQyxFQUFFLEtBQUssRUFBcUIsQ0FBQyxDQUFDO0FBRXRHLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxFQUFvQixDQUFDLENBQUM7QUFFOUcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsb0NBQW9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgcHJvcHMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBQcm9maWxlIH0gZnJvbSAnLi4vc3RhdGUvYXV0aC5zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9hdXRoMC1hbmd1bGFyXSBpbml0Jyk7XG5cbmV4cG9ydCBjb25zdCBzaWduSW4gPSBjcmVhdGVBY3Rpb24oJ1tAdGhlY2xhL2F1dGgwLWFuZ3VsYXJdIHNpZ24gaW4nLCBwcm9wczx7IHJldHVyblVybDogc3RyaW5nIH0+KCkpO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluQ29tcGxldGVkID0gY3JlYXRlQWN0aW9uKFxuICAnW0B0aGVjbGEvYXV0aDAtYW5ndWxhcl0gc2lnbiBpbiBjb21wbGV0ZWQnLFxuICBwcm9wczx7IHN0YXRlOiB7IHRhcmdldDogc3RyaW5nIH0gfT4oKVxuKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25lZEluID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9hdXRoMC1hbmd1bGFyXSBzaWduZWQgaW4nLCBwcm9wczx7IHVzZXI6IFByb2ZpbGUgfT4oKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduSW5GYWlsZWQgPSBjcmVhdGVBY3Rpb24oJ1tAdGhlY2xhL2F1dGgwLWFuZ3VsYXJdIHNpZ24gaW4gZmFpbGVkJywgcHJvcHM8eyBlcnJvcjogRXJyb3IgfT4oKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduT3V0ID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9hdXRoMC1hbmd1bGFyXSBzaWduIG91dCcpO1xuXG5leHBvcnQgY29uc3Qgc2lnbmVkT3V0ID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9hdXRoMC1hbmd1bGFyXSBzaWduZWQgb3V0Jyk7XG4iXX0=
|
|
@@ -18,9 +18,9 @@ export class AuthGuard {
|
|
|
18
18
|
}), first());
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
22
|
-
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
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
24
|
type: Injectable,
|
|
25
25
|
args: [{
|
|
26
26
|
providedIn: 'root',
|
|
@@ -28,10 +28,10 @@ export class AuthModule {
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
32
|
-
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
33
|
-
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
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
35
|
type: NgModule,
|
|
36
36
|
args: [{
|
|
37
37
|
declarations: [],
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
|
|
|
39
39
|
exports: [],
|
|
40
40
|
}]
|
|
41
41
|
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hdXRoMC1hbmd1bGFyL3NyYy9saWIvYXV0aC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQU9yQyxNQUFNLE9BQU8sVUFBVTtJQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBa0I7UUFDdEMsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsVUFBVTtvQkFDbkIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O3VHQWhCVSxVQUFVO3dHQUFWLFVBQVU7d0dBQVYsVUFBVSxZQUhYLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzsyRkFHbkYsVUFBVTtrQkFMdEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQy9GLE9BQU8sRUFBRSxFQUFFO2lCQUNaIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWZmZWN0c01vZHVsZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgU3RvcmVNb2R1bGUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLWNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoRWZmZWN0cyB9IGZyb20gJy4vZWZmZWN0cy9hdXRoLmVmZmVjdHMnO1xuaW1wb3J0IHsgSnd0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2p3dC5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyByZWR1Y2VyIH0gZnJvbSAnLi9yZWR1Y2Vycy9hdXRoLnJlZHVjZXInO1xuaW1wb3J0IHsgZmVhdHVyZUtleSB9IGZyb20gJy4vc3RvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbU3RvcmVNb2R1bGUuZm9yRmVhdHVyZShmZWF0dXJlS2V5LCByZWR1Y2VyKSwgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKFtBdXRoRWZmZWN0c10pXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBdXRoQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBdXRoTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBBdXRoQ29uZmlnLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgICB1c2VDbGFzczogSnd0SW50ZXJjZXB0b3IsXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -9,11 +9,13 @@ export class AuthService {
|
|
|
9
9
|
constructor(config) {
|
|
10
10
|
this.config = config;
|
|
11
11
|
this.auth0 = new Auth0Client({
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
clientId: config.clientId,
|
|
13
|
+
authorizationParams: {
|
|
14
|
+
audience: config.audience,
|
|
15
|
+
redirect_uri: config.redirectUri ?? location.origin,
|
|
16
|
+
scope: config.scope,
|
|
17
|
+
},
|
|
14
18
|
domain: config.domain,
|
|
15
|
-
redirect_uri: config.redirectUri ?? location.origin,
|
|
16
|
-
scope: config.scope,
|
|
17
19
|
useRefreshTokens: config.useRefreshTokens,
|
|
18
20
|
sessionCheckExpiryDays: config.sessionCheckExpiryDays,
|
|
19
21
|
});
|
|
@@ -34,19 +36,21 @@ export class AuthService {
|
|
|
34
36
|
return from(this.auth0.getTokenSilently());
|
|
35
37
|
}
|
|
36
38
|
logout() {
|
|
37
|
-
this.auth0.logout({
|
|
39
|
+
this.auth0.logout({
|
|
40
|
+
logoutParams: { returnTo: this.config.logoutUri ?? location.origin },
|
|
41
|
+
});
|
|
38
42
|
}
|
|
39
43
|
async checkSession() {
|
|
40
44
|
await this.auth0.checkSession();
|
|
41
45
|
return await this.auth0.isAuthenticated();
|
|
42
46
|
}
|
|
43
47
|
}
|
|
44
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
45
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
48
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: i1.AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
49
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
|
|
47
51
|
type: Injectable,
|
|
48
52
|
args: [{
|
|
49
53
|
providedIn: 'root',
|
|
50
54
|
}]
|
|
51
55
|
}], ctorParameters: function () { return [{ type: i1.AuthConfig }]; } });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFBb0MsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixtQkFBbUIsRUFBRTtnQkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN6QixZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTTtnQkFDbkQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2FBQ3BCO1lBQ0QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtTQUN0RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsUUFBNEI7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWEsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDaEIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7U0FDckUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoQyxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QyxDQUFDOzt3R0EvQ1UsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGgwQ2xpZW50LCBVc2VyIH0gZnJvbSAnQGF1dGgwL2F1dGgwLXNwYS1qcyc7XG5pbXBvcnQgeyBFTVBUWSwgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1dGhDb25maWcgfSBmcm9tICcuL2F1dGgtY29uZmlnJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoMDogQXV0aDBDbGllbnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBBdXRoQ29uZmlnKSB7XG4gICAgdGhpcy5hdXRoMCA9IG5ldyBBdXRoMENsaWVudCh7XG4gICAgICBjbGllbnRJZDogY29uZmlnLmNsaWVudElkLFxuICAgICAgYXV0aG9yaXphdGlvblBhcmFtczoge1xuICAgICAgICBhdWRpZW5jZTogY29uZmlnLmF1ZGllbmNlLFxuICAgICAgICByZWRpcmVjdF91cmk6IGNvbmZpZy5yZWRpcmVjdFVyaSA/PyBsb2NhdGlvbi5vcmlnaW4sXG4gICAgICAgIHNjb3BlOiBjb25maWcuc2NvcGUsXG4gICAgICB9LFxuICAgICAgZG9tYWluOiBjb25maWcuZG9tYWluLFxuICAgICAgdXNlUmVmcmVzaFRva2VuczogY29uZmlnLnVzZVJlZnJlc2hUb2tlbnMsXG4gICAgICBzZXNzaW9uQ2hlY2tFeHBpcnlEYXlzOiBjb25maWcuc2Vzc2lvbkNoZWNrRXhwaXJ5RGF5cyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jaGVja1Nlc3Npb24oKSk7XG4gIH1cblxuICBwdWJsaWMgbG9naW5XaXRoUmVkaXJlY3QoYXBwU3RhdGU6IHsgdGFyZ2V0OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYXV0aDAubG9naW5XaXRoUmVkaXJlY3QoeyBhcHBTdGF0ZSB9KSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gRU1QVFkpKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZWRpcmVjdENhbGxiYWNrKCkge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYXV0aDAuaGFuZGxlUmVkaXJlY3RDYWxsYmFjaygpKS5waXBlKG1hcChyZXN1bHQgPT4gcmVzdWx0LmFwcFN0YXRlIGFzIHsgdGFyZ2V0OiBzdHJpbmcgfSkpO1xuICB9XG5cbiAgcHVibGljIGdldFVzZXIoKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5hdXRoMC5nZXRVc2VyKCkpLnBpcGUoZmlsdGVyKCh1KTogdSBpcyBVc2VyID0+IHUgIT09IHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgcHVibGljIGdldEFjY2Vzc1Rva2VuKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYXV0aDAuZ2V0VG9rZW5TaWxlbnRseSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dvdXQoKSB7XG4gICAgdGhpcy5hdXRoMC5sb2dvdXQoe1xuICAgICAgbG9nb3V0UGFyYW1zOiB7IHJldHVyblRvOiB0aGlzLmNvbmZpZy5sb2dvdXRVcmkgPz8gbG9jYXRpb24ub3JpZ2luIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBhd2FpdCB0aGlzLmF1dGgwLmNoZWNrU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0aDAuaXNBdXRoZW50aWNhdGVkKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { Router } from '@angular/router';
|
|
3
3
|
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
|
4
|
-
import {
|
|
5
|
-
import { catchError, map,
|
|
6
|
-
import { signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';
|
|
4
|
+
import { of } from 'rxjs';
|
|
5
|
+
import { catchError, map, switchMap, tap } from 'rxjs/operators';
|
|
6
|
+
import { init, signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';
|
|
7
7
|
import { AuthService } from '../auth.service';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "@ngrx/effects";
|
|
@@ -23,15 +23,18 @@ export class AuthEffects {
|
|
|
23
23
|
}
|
|
24
24
|
catch { }
|
|
25
25
|
}), map(() => signedOut())));
|
|
26
|
-
this.init$ = createEffect(() => (
|
|
26
|
+
this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
|
|
27
27
|
const params = window.location.search;
|
|
28
28
|
if (params.includes('code=') && params.includes('state=')) {
|
|
29
|
-
return this.completeSignIn(
|
|
29
|
+
return this.completeSignIn();
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error })))
|
|
32
|
+
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error }))));
|
|
33
33
|
}
|
|
34
|
-
});
|
|
34
|
+
})));
|
|
35
|
+
}
|
|
36
|
+
ngrxOnInitEffects() {
|
|
37
|
+
return init();
|
|
35
38
|
}
|
|
36
39
|
getAuthResult(auth) {
|
|
37
40
|
if (auth) {
|
|
@@ -41,13 +44,13 @@ export class AuthEffects {
|
|
|
41
44
|
return of(signedOut());
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
|
-
completeSignIn(
|
|
45
|
-
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error })))
|
|
47
|
+
completeSignIn() {
|
|
48
|
+
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error }))));
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
49
|
-
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
51
|
+
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 });
|
|
52
|
+
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
|
|
51
54
|
type: Injectable
|
|
52
55
|
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.AuthService }, { type: i3.Router }]; } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL2VmZmVjdHMvYXV0aC5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFHOUMsTUFBTSxPQUFPLFdBQVc7SUE2RHRCLFlBQ21CLFFBQWlCLEVBQ2pCLElBQWlCLEVBQ2pCLE1BQWM7UUFGZCxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQS9EakIsWUFBTyxHQUFHLFlBQVksQ0FDcEMsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDZCxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQy9FLEVBQ0gsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3BCLENBQUM7UUFFYyxxQkFBZ0IsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQ3ZCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQ0YsQ0FDRixDQUNGLENBQUM7UUFFYyxjQUFTLEdBQUcsWUFBWSxDQUN0QyxHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUN2QixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzFGLEVBQ0gsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3BCLENBQUM7UUFFYyxhQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUNmLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDcEI7WUFBQyxNQUFNLEdBQUU7UUFDWixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FDdkIsQ0FDRixDQUFDO1FBRWMsVUFBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFDWixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFFdEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7SUFNQyxDQUFDO0lBRUcsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFhO1FBQ2pDLElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDNUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUN4QyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDOzt3R0FwRlUsV0FBVzs0R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUsIE9uSW5pdEVmZmVjdHMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5pdCwgc2lnbmVkSW4sIHNpZ25lZE91dCwgc2lnbkluLCBzaWduSW5Db21wbGV0ZWQsIHNpZ25JbkZhaWxlZCwgc2lnbk91dCB9IGZyb20gJy4uL2FjdGlvbnMvYXV0aC5hY3Rpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhFZmZlY3RzIGltcGxlbWVudHMgT25Jbml0RWZmZWN0cyB7XG4gIHB1YmxpYyByZWFkb25seSBzaWduSW4kID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShzaWduSW4pLFxuICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IHRoaXMuYXV0aC5sb2dpbldpdGhSZWRpcmVjdCh7IHRhcmdldDogYWN0aW9uLnJldHVyblVybCB9KSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaWduSW5Db21wbGV0ZWQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25JbkNvbXBsZXRlZCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5hdXRoLmdldFVzZXIoKS5waXBlKFxuICAgICAgICAgIG1hcCh1c2VyID0+IHNpZ25lZEluKHsgdXNlciB9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlZGlyZWN0JCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoc2lnbkluQ29tcGxldGVkKSxcbiAgICAgICAgc3dpdGNoTWFwKGFjdGlvbiA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGFjdGlvbi5zdGF0ZS50YXJnZXQsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShzaWduT3V0KSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hdXRoLmxvZ291dCgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiBzaWduZWRPdXQoKSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGluaXQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKGluaXQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcblxuICAgICAgICBpZiAocGFyYW1zLmluY2x1ZGVzKCdjb2RlPScpICYmIHBhcmFtcy5pbmNsdWRlcygnc3RhdGU9JykpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZVNpZ25JbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmF1dGguaXNBdXRoZW50aWNhdGVkKCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChhdXRoID0+IHRoaXMuZ2V0QXV0aFJlc3VsdChhdXRoKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IG9mKHNpZ25JbkZhaWxlZCh7IGVycm9yIH0pKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ3J4T25Jbml0RWZmZWN0cygpIHtcbiAgICByZXR1cm4gaW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRoUmVzdWx0KGF1dGg6IGJvb2xlYW4pIHtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXV0aC5nZXRVc2VyKCkucGlwZShtYXAodXNlciA9PiBzaWduZWRJbih7IHVzZXIgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHNpZ25lZE91dCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXBsZXRlU2lnbkluKCkge1xuICAgIHJldHVybiB0aGlzLmF1dGguaGFuZGxlUmVkaXJlY3RDYWxsYmFjaygpLnBpcGUoXG4gICAgICBtYXAoc3RhdGUgPT4gc2lnbkluQ29tcGxldGVkKHsgc3RhdGUgfSkpLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,32 +1,29 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
2
|
import { map, mergeMap } from 'rxjs/operators';
|
|
3
3
|
import { AuthService } from './auth.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./auth.service";
|
|
6
5
|
export class JwtInterceptor {
|
|
7
|
-
constructor(auth) {
|
|
8
|
-
this.auth = auth;
|
|
9
|
-
}
|
|
10
6
|
intercept(request, next) {
|
|
11
|
-
|
|
12
|
-
return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
return next.handle(request);
|
|
16
|
-
}
|
|
7
|
+
return jwtInterceptor(request, next.handle);
|
|
17
8
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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)));
|
|
21
20
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));
|
|
21
|
+
else {
|
|
22
|
+
return next(request);
|
|
25
23
|
}
|
|
24
|
+
};
|
|
25
|
+
function isSameDomain(request) {
|
|
26
|
+
const isAbsolute = /^https?:\/\//i.test(request.url);
|
|
27
|
+
return !isAbsolute;
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor });
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
30
|
-
type: Injectable
|
|
31
|
-
}], ctorParameters: function () { return [{ type: i1.AuthService }]; } });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL2p3dC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHN0MsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBb0MsSUFBaUI7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFbEQsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDM0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BHO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQXlCO1FBQzVDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJELE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDckIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUF5QjtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7OzJHQXJCVSxjQUFjOytHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSnd0SW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhdXRoOiBBdXRoU2VydmljZSkge31cblxuICBwdWJsaWMgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgaWYgKHRoaXMuaXNTYW1lRG9tYWluKHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXRob3JpemUocmVxdWVzdCkucGlwZShtZXJnZU1hcChhdXRob3JpemVkUmVxdWVzdCA9PiBuZXh0LmhhbmRsZShhdXRob3JpemVkUmVxdWVzdCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNTYW1lRG9tYWluKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCBpc0Fic29sdXRlID0gL15odHRwcz86XFwvXFwvL2kudGVzdChyZXF1ZXN0LnVybCk7XG5cbiAgICByZXR1cm4gIWlzQWJzb2x1dGU7XG4gIH1cblxuICBwcml2YXRlIGF1dGhvcml6ZShyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgdG9rZW4kID0gdGhpcy5hdXRoLmdldEFjY2Vzc1Rva2VuKCk7XG5cbiAgICByZXR1cm4gdG9rZW4kLnBpcGUobWFwKHRva2VuID0+IHJlcXVlc3QuY2xvbmUoeyBzZXRIZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSkpKTtcbiAgfVxufVxuIl19
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL2p3dC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHN0MsTUFBTSxPQUFPLGNBQWM7SUFDbEIsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDM0QsT0FBTyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDOzsyR0FIVSxjQUFjOytHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7QUFPWCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXNCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2pFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUN2QixjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNqRixRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQ3ZELENBQUM7S0FDTDtTQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdEI7QUFDSCxDQUFDLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxPQUF5QjtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJldHVybiBqd3RJbnRlcmNlcHRvcihyZXF1ZXN0LCBuZXh0LmhhbmRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGp3dEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXF1ZXN0LCBuZXh0KSA9PiB7XG4gIGlmIChpc1NhbWVEb21haW4ocmVxdWVzdCkpIHtcbiAgICByZXR1cm4gaW5qZWN0KEF1dGhTZXJ2aWNlKVxuICAgICAgLmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodG9rZW4gPT4gcmVxdWVzdC5jbG9uZSh7IHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSB9KSksXG4gICAgICAgIG1lcmdlTWFwKGF1dGhvcml6ZWRSZXF1ZXN0ID0+IG5leHQoYXV0aG9yaXplZFJlcXVlc3QpKVxuICAgICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gaXNTYW1lRG9tYWluKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocmVxdWVzdC51cmwpO1xuXG4gIHJldHVybiAhaXNBYnNvbHV0ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { provideEffects } from '@ngrx/effects';
|
|
3
|
+
import { provideState } from '@ngrx/store';
|
|
4
|
+
import { AuthConfig } from './auth-config';
|
|
5
|
+
import { AuthEffects } from './effects/auth.effects';
|
|
6
|
+
import { reducer } from './reducers/auth.reducer';
|
|
7
|
+
import { featureKey } from './store';
|
|
8
|
+
export function provideAuth(config) {
|
|
9
|
+
const effects = provideEffects(AuthEffects);
|
|
10
|
+
const state = provideState(featureKey, reducer);
|
|
11
|
+
return makeEnvironmentProviders([
|
|
12
|
+
effects,
|
|
13
|
+
state,
|
|
14
|
+
{
|
|
15
|
+
provide: AuthConfig,
|
|
16
|
+
useValue: config,
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXV0aDAtYW5ndWxhci9zcmMvbGliL3Byb3ZpZGUtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBa0I7SUFDNUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFaEQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QixPQUFPO1FBQ1AsS0FBSztRQUNMO1lBQ0UsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwcm92aWRlRWZmZWN0cyB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgcHJvdmlkZVN0YXRlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC1jb25maWcnO1xuaW1wb3J0IHsgQXV0aEVmZmVjdHMgfSBmcm9tICcuL2VmZmVjdHMvYXV0aC5lZmZlY3RzJztcbmltcG9ydCB7IHJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL2F1dGgucmVkdWNlcic7XG5pbXBvcnQgeyBmZWF0dXJlS2V5IH0gZnJvbSAnLi9zdG9yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXV0aChjb25maWc6IEF1dGhDb25maWcpIHtcbiAgY29uc3QgZWZmZWN0cyA9IHByb3ZpZGVFZmZlY3RzKEF1dGhFZmZlY3RzKTtcbiAgY29uc3Qgc3RhdGUgPSBwcm92aWRlU3RhdGUoZmVhdHVyZUtleSwgcmVkdWNlcik7XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgZWZmZWN0cyxcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBdXRoQ29uZmlnLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { signedIn, signedOut, signIn, signOut } from './lib/actions/auth.actions';
|
|
2
2
|
export { AuthGuard } from './lib/auth.guard';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
|
|
3
|
+
export { AuthModule } from './lib/auth.module';
|
|
4
|
+
export { jwtInterceptor } from './lib/jwt.interceptor';
|
|
5
|
+
export { provideAuth } from './lib/provide-auth';
|
|
6
|
+
export { getUser, isAuthenticated } from './lib/store';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGgwLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHNpZ25lZEluLCBzaWduZWRPdXQsIHNpZ25Jbiwgc2lnbk91dCB9IGZyb20gJy4vbGliL2FjdGlvbnMvYXV0aC5hY3Rpb25zJztcbmV4cG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4vbGliL2F1dGguZ3VhcmQnO1xuZXhwb3J0IHsgQXV0aE1vZHVsZSB9IGZyb20gJy4vbGliL2F1dGgubW9kdWxlJztcbmV4cG9ydCB7IGp3dEludGVyY2VwdG9yIH0gZnJvbSAnLi9saWIvand0LmludGVyY2VwdG9yJztcbmV4cG9ydCB7IHByb3ZpZGVBdXRoIH0gZnJvbSAnLi9saWIvcHJvdmlkZS1hdXRoJztcbmV4cG9ydCB7IFByb2ZpbGUgfSBmcm9tICcuL2xpYi9zdGF0ZS9hdXRoLnN0YXRlJztcbmV4cG9ydCB7IGdldFVzZXIsIGlzQXV0aGVudGljYXRlZCB9IGZyb20gJy4vbGliL3N0b3JlJztcbiJdfQ==
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i1 from '@ngrx/store';
|
|
2
|
+
import { createAction, props, createFeatureSelector, select, createReducer, on, StoreModule, provideState } from '@ngrx/store';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import { switchMap, map, filter, catchError, tap, observeOn, mergeMap, first } from 'rxjs/operators';
|
|
4
|
+
import { Injectable, inject, NgModule, makeEnvironmentProviders } from '@angular/core';
|
|
5
|
+
import { filter, map, tap, first, switchMap, catchError, mergeMap } from 'rxjs/operators';
|
|
6
|
+
import { pipe, from, EMPTY, of } 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
10
|
import { __awaiter } from 'tslib';
|
|
11
11
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
12
12
|
import * as i3 from '@angular/router';
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
14
|
+
const init = createAction('[@thecla/auth0-angular] init');
|
|
17
15
|
const signIn = createAction('[@thecla/auth0-angular] sign in', props());
|
|
18
16
|
const signInCompleted = createAction('[@thecla/auth0-angular] sign in completed', props());
|
|
19
17
|
const signedIn = createAction('[@thecla/auth0-angular] signed in', props());
|
|
@@ -21,16 +19,48 @@ const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', prop
|
|
|
21
19
|
const signOut = createAction('[@thecla/auth0-angular] sign out');
|
|
22
20
|
const signedOut = createAction('[@thecla/auth0-angular] signed out');
|
|
23
21
|
|
|
22
|
+
const featureKey = 'auth';
|
|
23
|
+
const selectState = createFeatureSelector(featureKey);
|
|
24
|
+
const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
25
|
+
const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
26
|
+
|
|
27
|
+
class AuthGuard {
|
|
28
|
+
constructor(store) {
|
|
29
|
+
this.store = store;
|
|
30
|
+
this.authenticated$ = this.store.pipe(isAuthenticated);
|
|
31
|
+
}
|
|
32
|
+
canActivate(next, state) {
|
|
33
|
+
return this.authenticated$.pipe(tap(auth => {
|
|
34
|
+
if (!auth) {
|
|
35
|
+
this.store.dispatch(signIn({ returnUrl: state.url }));
|
|
36
|
+
}
|
|
37
|
+
}), first());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root',
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i1.Store }]; } });
|
|
48
|
+
|
|
49
|
+
class AuthConfig {
|
|
50
|
+
}
|
|
51
|
+
|
|
24
52
|
class AuthService {
|
|
25
53
|
constructor(config) {
|
|
26
54
|
var _a;
|
|
27
55
|
this.config = config;
|
|
28
56
|
this.auth0 = new Auth0Client({
|
|
29
|
-
|
|
30
|
-
|
|
57
|
+
clientId: config.clientId,
|
|
58
|
+
authorizationParams: {
|
|
59
|
+
audience: config.audience,
|
|
60
|
+
redirect_uri: (_a = config.redirectUri) !== null && _a !== void 0 ? _a : location.origin,
|
|
61
|
+
scope: config.scope,
|
|
62
|
+
},
|
|
31
63
|
domain: config.domain,
|
|
32
|
-
redirect_uri: (_a = config.redirectUri) !== null && _a !== void 0 ? _a : location.origin,
|
|
33
|
-
scope: config.scope,
|
|
34
64
|
useRefreshTokens: config.useRefreshTokens,
|
|
35
65
|
sessionCheckExpiryDays: config.sessionCheckExpiryDays,
|
|
36
66
|
});
|
|
@@ -52,7 +82,9 @@ class AuthService {
|
|
|
52
82
|
}
|
|
53
83
|
logout() {
|
|
54
84
|
var _a;
|
|
55
|
-
this.auth0.logout({
|
|
85
|
+
this.auth0.logout({
|
|
86
|
+
logoutParams: { returnTo: (_a = this.config.logoutUri) !== null && _a !== void 0 ? _a : location.origin },
|
|
87
|
+
});
|
|
56
88
|
}
|
|
57
89
|
checkSession() {
|
|
58
90
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -61,9 +93,9 @@ class AuthService {
|
|
|
61
93
|
});
|
|
62
94
|
}
|
|
63
95
|
}
|
|
64
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
65
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
96
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
97
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
|
|
67
99
|
type: Injectable,
|
|
68
100
|
args: [{
|
|
69
101
|
providedIn: 'root',
|
|
@@ -84,15 +116,18 @@ class AuthEffects {
|
|
|
84
116
|
}
|
|
85
117
|
catch (_a) { }
|
|
86
118
|
}), map(() => signedOut())));
|
|
87
|
-
this.init$ = createEffect(() => (
|
|
119
|
+
this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
|
|
88
120
|
const params = window.location.search;
|
|
89
121
|
if (params.includes('code=') && params.includes('state=')) {
|
|
90
|
-
return this.completeSignIn(
|
|
122
|
+
return this.completeSignIn();
|
|
91
123
|
}
|
|
92
124
|
else {
|
|
93
|
-
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error })))
|
|
125
|
+
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error }))));
|
|
94
126
|
}
|
|
95
|
-
});
|
|
127
|
+
})));
|
|
128
|
+
}
|
|
129
|
+
ngrxOnInitEffects() {
|
|
130
|
+
return init();
|
|
96
131
|
}
|
|
97
132
|
getAuthResult(auth) {
|
|
98
133
|
if (auth) {
|
|
@@ -102,42 +137,40 @@ class AuthEffects {
|
|
|
102
137
|
return of(signedOut());
|
|
103
138
|
}
|
|
104
139
|
}
|
|
105
|
-
completeSignIn(
|
|
106
|
-
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error })))
|
|
140
|
+
completeSignIn() {
|
|
141
|
+
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error }))));
|
|
107
142
|
}
|
|
108
143
|
}
|
|
109
|
-
AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
110
|
-
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
144
|
+
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 });
|
|
145
|
+
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
|
|
112
147
|
type: Injectable
|
|
113
|
-
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
|
|
148
|
+
}], ctorParameters: function () { return [{ type: i1$1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
|
|
114
149
|
|
|
115
150
|
class JwtInterceptor {
|
|
116
|
-
constructor(auth) {
|
|
117
|
-
this.auth = auth;
|
|
118
|
-
}
|
|
119
151
|
intercept(request, next) {
|
|
120
|
-
|
|
121
|
-
return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
return next.handle(request);
|
|
125
|
-
}
|
|
152
|
+
return jwtInterceptor(request, next.handle);
|
|
126
153
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
154
|
+
}
|
|
155
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
156
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor });
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
158
|
+
type: Injectable
|
|
159
|
+
}] });
|
|
160
|
+
const jwtInterceptor = (request, next) => {
|
|
161
|
+
if (isSameDomain(request)) {
|
|
162
|
+
return inject(AuthService)
|
|
163
|
+
.getAccessToken()
|
|
164
|
+
.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })), mergeMap(authorizedRequest => next(authorizedRequest)));
|
|
130
165
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));
|
|
166
|
+
else {
|
|
167
|
+
return next(request);
|
|
134
168
|
}
|
|
169
|
+
};
|
|
170
|
+
function isSameDomain(request) {
|
|
171
|
+
const isAbsolute = /^https?:\/\//i.test(request.url);
|
|
172
|
+
return !isAbsolute;
|
|
135
173
|
}
|
|
136
|
-
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
137
|
-
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor });
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
139
|
-
type: Injectable
|
|
140
|
-
}], ctorParameters: function () { return [{ type: AuthService }]; } });
|
|
141
174
|
|
|
142
175
|
const noAuthentication = {
|
|
143
176
|
authenticating: false,
|
|
@@ -152,11 +185,6 @@ function reducer(state, action) {
|
|
|
152
185
|
return authReducer(state, action);
|
|
153
186
|
}
|
|
154
187
|
|
|
155
|
-
const featureKey = 'auth';
|
|
156
|
-
const selectState = createFeatureSelector(featureKey);
|
|
157
|
-
const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
158
|
-
const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
159
|
-
|
|
160
188
|
class AuthModule {
|
|
161
189
|
static forRoot(config) {
|
|
162
190
|
return {
|
|
@@ -175,10 +203,10 @@ class AuthModule {
|
|
|
175
203
|
};
|
|
176
204
|
}
|
|
177
205
|
}
|
|
178
|
-
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
179
|
-
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
180
|
-
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
206
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
207
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i1$1.EffectsFeatureModule] });
|
|
208
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, decorators: [{
|
|
182
210
|
type: NgModule,
|
|
183
211
|
args: [{
|
|
184
212
|
declarations: [],
|
|
@@ -187,31 +215,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
|
|
|
187
215
|
}]
|
|
188
216
|
}] });
|
|
189
217
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
218
|
+
function provideAuth(config) {
|
|
219
|
+
const effects = provideEffects(AuthEffects);
|
|
220
|
+
const state = provideState(featureKey, reducer);
|
|
221
|
+
return makeEnvironmentProviders([
|
|
222
|
+
effects,
|
|
223
|
+
state,
|
|
224
|
+
{
|
|
225
|
+
provide: AuthConfig,
|
|
226
|
+
useValue: config,
|
|
227
|
+
},
|
|
228
|
+
]);
|
|
202
229
|
}
|
|
203
|
-
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
-
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
205
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, decorators: [{
|
|
206
|
-
type: Injectable,
|
|
207
|
-
args: [{
|
|
208
|
-
providedIn: 'root',
|
|
209
|
-
}]
|
|
210
|
-
}], ctorParameters: function () { return [{ type: i1$1.Store }]; } });
|
|
211
230
|
|
|
212
231
|
/**
|
|
213
232
|
* Generated bundle index. Do not edit.
|
|
214
233
|
*/
|
|
215
234
|
|
|
216
|
-
export { AuthGuard, AuthModule, getUser, isAuthenticated, signIn, signOut, signedIn, signedOut };
|
|
235
|
+
export { AuthGuard, AuthModule, getUser, isAuthenticated, jwtInterceptor, provideAuth, signIn, signOut, signedIn, signedOut };
|
|
217
236
|
//# sourceMappingURL=thecla-auth0-angular.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thecla-auth0-angular.mjs","sources":["../../../projects/auth0-angular/src/lib/auth-config.ts","../../../projects/auth0-angular/src/lib/actions/auth.actions.ts","../../../projects/auth0-angular/src/lib/auth.service.ts","../../../projects/auth0-angular/src/lib/effects/auth.effects.ts","../../../projects/auth0-angular/src/lib/jwt.interceptor.ts","../../../projects/auth0-angular/src/lib/reducers/auth.reducer.ts","../../../projects/auth0-angular/src/lib/store/index.ts","../../../projects/auth0-angular/src/lib/auth.module.ts","../../../projects/auth0-angular/src/lib/auth.guard.ts","../../../projects/auth0-angular/src/thecla-auth0-angular.ts"],"sourcesContent":["export abstract class AuthConfig {\n public abstract audience: string;\n public abstract clientId: string;\n public abstract domain: string;\n public abstract scope: string;\n public abstract redirectUri?: string;\n public abstract logoutUri?: string;\n public abstract useRefreshTokens?: boolean;\n public abstract sessionCheckExpiryDays?: number;\n}\n","import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const signIn = createAction('[@thecla/auth0-angular] sign in', props<{ returnUrl: string }>());\n\nexport const signInCompleted = createAction(\n '[@thecla/auth0-angular] sign in completed',\n props<{ state: { target: string } }>()\n);\n\nexport const signedIn = createAction('[@thecla/auth0-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/auth0-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/auth0-angular] signed out');\n","import { Injectable } from '@angular/core';\nimport { Auth0Client, User } from '@auth0/auth0-spa-js';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly auth0: Auth0Client;\n\n public constructor(private readonly config: AuthConfig) {\n this.auth0 = new Auth0Client({\n audience: config.audience,\n client_id: config.clientId,\n domain: config.domain,\n redirect_uri: config.redirectUri ?? location.origin,\n scope: config.scope,\n useRefreshTokens: config.useRefreshTokens,\n sessionCheckExpiryDays: config.sessionCheckExpiryDays,\n });\n }\n\n public isAuthenticated() {\n return from(this.checkSession());\n }\n\n public loginWithRedirect(appState: { target: string }) {\n return from(this.auth0.loginWithRedirect({ appState })).pipe(switchMap(() => EMPTY));\n }\n\n public handleRedirectCallback() {\n return from(this.auth0.handleRedirectCallback()).pipe(map(result => result.appState as { target: string }));\n }\n\n public getUser() {\n return from(this.auth0.getUser()).pipe(filter((u): u is User => u !== undefined));\n }\n\n public getAccessToken(): Observable<unknown> {\n return from(this.auth0.getTokenSilently());\n }\n\n public logout() {\n this.auth0.logout({ returnTo: this.config.logoutUri ?? location.origin });\n }\n\n private async checkSession() {\n await this.auth0.checkSession();\n\n return await this.auth0.isAuthenticated();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { asyncScheduler, of, SchedulerLike } from 'rxjs';\nimport { catchError, map, observeOn, switchMap, tap } from 'rxjs/operators';\nimport { signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects {\n public readonly signIn$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }))\n ),\n { dispatch: false }\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(() =>\n this.auth.getUser().pipe(\n map(user => signedIn({ user })),\n catchError(error => of(signInFailed({ error })))\n )\n )\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 tap(() => {\n try {\n this.auth.logout();\n } catch {}\n }),\n map(() => signedOut())\n )\n );\n\n public readonly init$ = createEffect(() => ({ scheduler = asyncScheduler } = {}) => {\n const params = window.location.search;\n\n if (params.includes('code=') && params.includes('state=')) {\n return this.completeSignIn(scheduler);\n } else {\n return this.auth.isAuthenticated().pipe(\n switchMap(auth => this.getAuthResult(auth)),\n catchError(error => of(signInFailed({ error }))),\n observeOn(scheduler)\n );\n }\n });\n\n public constructor(\n private readonly actions$: Actions,\n private readonly auth: AuthService,\n private readonly router: Router\n ) {}\n\n private getAuthResult(auth: boolean) {\n if (auth) {\n return this.auth.getUser().pipe(map(user => signedIn({ user })));\n } else {\n return of(signedOut());\n }\n }\n\n private completeSignIn(scheduler: SchedulerLike) {\n return this.auth.handleRedirectCallback().pipe(\n map(state => signInCompleted({ state })),\n catchError(error => of(signInFailed({ error }))),\n observeOn(scheduler)\n );\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { 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 constructor(private readonly auth: AuthService) {}\n\n public intercept(request: HttpRequest<any>, next: HttpHandler) {\n if (this.isSameDomain(request)) {\n return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));\n } else {\n return next.handle(request);\n }\n }\n\n private isSameDomain(request: HttpRequest<any>) {\n const isAbsolute = /^https?:\\/\\//i.test(request.url);\n\n return !isAbsolute;\n }\n\n private authorize(request: HttpRequest<any>) {\n const token$ = this.auth.getAccessToken();\n\n return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));\n }\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 { 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 { 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 { 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thecla-auth0-angular.mjs","sources":["../../../projects/auth0-angular/src/lib/actions/auth.actions.ts","../../../projects/auth0-angular/src/lib/store/index.ts","../../../projects/auth0-angular/src/lib/auth.guard.ts","../../../projects/auth0-angular/src/lib/auth-config.ts","../../../projects/auth0-angular/src/lib/auth.service.ts","../../../projects/auth0-angular/src/lib/effects/auth.effects.ts","../../../projects/auth0-angular/src/lib/jwt.interceptor.ts","../../../projects/auth0-angular/src/lib/reducers/auth.reducer.ts","../../../projects/auth0-angular/src/lib/auth.module.ts","../../../projects/auth0-angular/src/lib/provide-auth.ts","../../../projects/auth0-angular/src/thecla-auth0-angular.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const init = createAction('[@thecla/auth0-angular] init');\n\nexport const signIn = createAction('[@thecla/auth0-angular] sign in', props<{ returnUrl: string }>());\n\nexport const signInCompleted = createAction(\n '[@thecla/auth0-angular] sign in completed',\n props<{ state: { target: string } }>()\n);\n\nexport const signedIn = createAction('[@thecla/auth0-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/auth0-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/auth0-angular] signed out');\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 audience: string;\n public abstract clientId: string;\n public abstract domain: string;\n public abstract scope: string;\n public abstract redirectUri?: string;\n public abstract logoutUri?: string;\n public abstract useRefreshTokens?: boolean;\n public abstract sessionCheckExpiryDays?: number;\n}\n","import { Injectable } from '@angular/core';\nimport { Auth0Client, User } from '@auth0/auth0-spa-js';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly auth0: Auth0Client;\n\n public constructor(private readonly config: AuthConfig) {\n this.auth0 = new Auth0Client({\n clientId: config.clientId,\n authorizationParams: {\n audience: config.audience,\n redirect_uri: config.redirectUri ?? location.origin,\n scope: config.scope,\n },\n domain: config.domain,\n useRefreshTokens: config.useRefreshTokens,\n sessionCheckExpiryDays: config.sessionCheckExpiryDays,\n });\n }\n\n public isAuthenticated() {\n return from(this.checkSession());\n }\n\n public loginWithRedirect(appState: { target: string }) {\n return from(this.auth0.loginWithRedirect({ appState })).pipe(switchMap(() => EMPTY));\n }\n\n public handleRedirectCallback() {\n return from(this.auth0.handleRedirectCallback()).pipe(map(result => result.appState as { target: string }));\n }\n\n public getUser() {\n return from(this.auth0.getUser()).pipe(filter((u): u is User => u !== undefined));\n }\n\n public getAccessToken(): Observable<unknown> {\n return from(this.auth0.getTokenSilently());\n }\n\n public logout() {\n this.auth0.logout({\n logoutParams: { returnTo: this.config.logoutUri ?? location.origin },\n });\n }\n\n private async checkSession() {\n await this.auth0.checkSession();\n\n return await this.auth0.isAuthenticated();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType, OnInitEffects } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { init, signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects implements OnInitEffects {\n public readonly signIn$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }))\n ),\n { dispatch: false }\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(() =>\n this.auth.getUser().pipe(\n map(user => signedIn({ user })),\n catchError(error => of(signInFailed({ error })))\n )\n )\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 tap(() => {\n try {\n this.auth.logout();\n } catch {}\n }),\n map(() => signedOut())\n )\n );\n\n public readonly init$ = createEffect(() =>\n this.actions$.pipe(\n ofType(init),\n switchMap(() => {\n const params = window.location.search;\n\n if (params.includes('code=') && params.includes('state=')) {\n return this.completeSignIn();\n } else {\n return this.auth.isAuthenticated().pipe(\n switchMap(auth => this.getAuthResult(auth)),\n catchError(error => of(signInFailed({ error })))\n );\n }\n })\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 getAuthResult(auth: boolean) {\n if (auth) {\n return this.auth.getUser().pipe(map(user => signedIn({ user })));\n } else {\n return of(signedOut());\n }\n }\n\n private completeSignIn() {\n return this.auth.handleRedirectCallback().pipe(\n map(state => signInCompleted({ state })),\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,18 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i1 from '@ngrx/store';
|
|
2
|
+
import { createAction, props, createFeatureSelector, select, createReducer, on, StoreModule, provideState } from '@ngrx/store';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import { Injectable, inject, NgModule, makeEnvironmentProviders } from '@angular/core';
|
|
5
|
+
import { filter, map, tap, first, switchMap, catchError, mergeMap } from 'rxjs/operators';
|
|
6
|
+
import { pipe, from, EMPTY, of } 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';
|
|
8
10
|
import * as i3 from '@angular/router';
|
|
9
|
-
import { from, EMPTY, of, asyncScheduler, pipe } from 'rxjs';
|
|
10
|
-
import { switchMap, map, filter, catchError, tap, observeOn, mergeMap, first } from 'rxjs/operators';
|
|
11
11
|
import { Auth0Client } from '@auth0/auth0-spa-js';
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
13
|
+
const init = createAction('[@thecla/auth0-angular] init');
|
|
16
14
|
const signIn = createAction('[@thecla/auth0-angular] sign in', props());
|
|
17
15
|
const signInCompleted = createAction('[@thecla/auth0-angular] sign in completed', props());
|
|
18
16
|
const signedIn = createAction('[@thecla/auth0-angular] signed in', props());
|
|
@@ -20,15 +18,47 @@ const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', prop
|
|
|
20
18
|
const signOut = createAction('[@thecla/auth0-angular] sign out');
|
|
21
19
|
const signedOut = createAction('[@thecla/auth0-angular] signed out');
|
|
22
20
|
|
|
21
|
+
const featureKey = 'auth';
|
|
22
|
+
const selectState = createFeatureSelector(featureKey);
|
|
23
|
+
const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
24
|
+
const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
25
|
+
|
|
26
|
+
class AuthGuard {
|
|
27
|
+
constructor(store) {
|
|
28
|
+
this.store = store;
|
|
29
|
+
this.authenticated$ = this.store.pipe(isAuthenticated);
|
|
30
|
+
}
|
|
31
|
+
canActivate(next, state) {
|
|
32
|
+
return this.authenticated$.pipe(tap(auth => {
|
|
33
|
+
if (!auth) {
|
|
34
|
+
this.store.dispatch(signIn({ returnUrl: state.url }));
|
|
35
|
+
}
|
|
36
|
+
}), first());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthGuard, decorators: [{
|
|
42
|
+
type: Injectable,
|
|
43
|
+
args: [{
|
|
44
|
+
providedIn: 'root',
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i1.Store }]; } });
|
|
47
|
+
|
|
48
|
+
class AuthConfig {
|
|
49
|
+
}
|
|
50
|
+
|
|
23
51
|
class AuthService {
|
|
24
52
|
constructor(config) {
|
|
25
53
|
this.config = config;
|
|
26
54
|
this.auth0 = new Auth0Client({
|
|
27
|
-
|
|
28
|
-
|
|
55
|
+
clientId: config.clientId,
|
|
56
|
+
authorizationParams: {
|
|
57
|
+
audience: config.audience,
|
|
58
|
+
redirect_uri: config.redirectUri ?? location.origin,
|
|
59
|
+
scope: config.scope,
|
|
60
|
+
},
|
|
29
61
|
domain: config.domain,
|
|
30
|
-
redirect_uri: config.redirectUri ?? location.origin,
|
|
31
|
-
scope: config.scope,
|
|
32
62
|
useRefreshTokens: config.useRefreshTokens,
|
|
33
63
|
sessionCheckExpiryDays: config.sessionCheckExpiryDays,
|
|
34
64
|
});
|
|
@@ -49,16 +79,18 @@ class AuthService {
|
|
|
49
79
|
return from(this.auth0.getTokenSilently());
|
|
50
80
|
}
|
|
51
81
|
logout() {
|
|
52
|
-
this.auth0.logout({
|
|
82
|
+
this.auth0.logout({
|
|
83
|
+
logoutParams: { returnTo: this.config.logoutUri ?? location.origin },
|
|
84
|
+
});
|
|
53
85
|
}
|
|
54
86
|
async checkSession() {
|
|
55
87
|
await this.auth0.checkSession();
|
|
56
88
|
return await this.auth0.isAuthenticated();
|
|
57
89
|
}
|
|
58
90
|
}
|
|
59
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
60
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
91
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
92
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthService, decorators: [{
|
|
62
94
|
type: Injectable,
|
|
63
95
|
args: [{
|
|
64
96
|
providedIn: 'root',
|
|
@@ -79,15 +111,18 @@ class AuthEffects {
|
|
|
79
111
|
}
|
|
80
112
|
catch { }
|
|
81
113
|
}), map(() => signedOut())));
|
|
82
|
-
this.init$ = createEffect(() => (
|
|
114
|
+
this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
|
|
83
115
|
const params = window.location.search;
|
|
84
116
|
if (params.includes('code=') && params.includes('state=')) {
|
|
85
|
-
return this.completeSignIn(
|
|
117
|
+
return this.completeSignIn();
|
|
86
118
|
}
|
|
87
119
|
else {
|
|
88
|
-
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error })))
|
|
120
|
+
return this.auth.isAuthenticated().pipe(switchMap(auth => this.getAuthResult(auth)), catchError(error => of(signInFailed({ error }))));
|
|
89
121
|
}
|
|
90
|
-
});
|
|
122
|
+
})));
|
|
123
|
+
}
|
|
124
|
+
ngrxOnInitEffects() {
|
|
125
|
+
return init();
|
|
91
126
|
}
|
|
92
127
|
getAuthResult(auth) {
|
|
93
128
|
if (auth) {
|
|
@@ -97,42 +132,40 @@ class AuthEffects {
|
|
|
97
132
|
return of(signedOut());
|
|
98
133
|
}
|
|
99
134
|
}
|
|
100
|
-
completeSignIn(
|
|
101
|
-
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error })))
|
|
135
|
+
completeSignIn() {
|
|
136
|
+
return this.auth.handleRedirectCallback().pipe(map(state => signInCompleted({ state })), catchError(error => of(signInFailed({ error }))));
|
|
102
137
|
}
|
|
103
138
|
}
|
|
104
|
-
AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
105
|
-
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
139
|
+
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 });
|
|
140
|
+
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects });
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthEffects, decorators: [{
|
|
107
142
|
type: Injectable
|
|
108
|
-
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
|
|
143
|
+
}], ctorParameters: function () { return [{ type: i1$1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
|
|
109
144
|
|
|
110
145
|
class JwtInterceptor {
|
|
111
|
-
constructor(auth) {
|
|
112
|
-
this.auth = auth;
|
|
113
|
-
}
|
|
114
146
|
intercept(request, next) {
|
|
115
|
-
|
|
116
|
-
return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
return next.handle(request);
|
|
120
|
-
}
|
|
147
|
+
return jwtInterceptor(request, next.handle);
|
|
121
148
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
149
|
+
}
|
|
150
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
151
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor });
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
153
|
+
type: Injectable
|
|
154
|
+
}] });
|
|
155
|
+
const jwtInterceptor = (request, next) => {
|
|
156
|
+
if (isSameDomain(request)) {
|
|
157
|
+
return inject(AuthService)
|
|
158
|
+
.getAccessToken()
|
|
159
|
+
.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })), mergeMap(authorizedRequest => next(authorizedRequest)));
|
|
125
160
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));
|
|
161
|
+
else {
|
|
162
|
+
return next(request);
|
|
129
163
|
}
|
|
164
|
+
};
|
|
165
|
+
function isSameDomain(request) {
|
|
166
|
+
const isAbsolute = /^https?:\/\//i.test(request.url);
|
|
167
|
+
return !isAbsolute;
|
|
130
168
|
}
|
|
131
|
-
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
132
|
-
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor });
|
|
133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
134
|
-
type: Injectable
|
|
135
|
-
}], ctorParameters: function () { return [{ type: AuthService }]; } });
|
|
136
169
|
|
|
137
170
|
const noAuthentication = {
|
|
138
171
|
authenticating: false,
|
|
@@ -152,11 +185,6 @@ function reducer(state, action) {
|
|
|
152
185
|
return authReducer(state, action);
|
|
153
186
|
}
|
|
154
187
|
|
|
155
|
-
const featureKey = 'auth';
|
|
156
|
-
const selectState = createFeatureSelector(featureKey);
|
|
157
|
-
const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
158
|
-
const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
159
|
-
|
|
160
188
|
class AuthModule {
|
|
161
189
|
static forRoot(config) {
|
|
162
190
|
return {
|
|
@@ -175,10 +203,10 @@ class AuthModule {
|
|
|
175
203
|
};
|
|
176
204
|
}
|
|
177
205
|
}
|
|
178
|
-
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
179
|
-
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
180
|
-
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
206
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
207
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i1$1.EffectsFeatureModule] });
|
|
208
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: AuthModule, decorators: [{
|
|
182
210
|
type: NgModule,
|
|
183
211
|
args: [{
|
|
184
212
|
declarations: [],
|
|
@@ -187,31 +215,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
|
|
|
187
215
|
}]
|
|
188
216
|
}] });
|
|
189
217
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
218
|
+
function provideAuth(config) {
|
|
219
|
+
const effects = provideEffects(AuthEffects);
|
|
220
|
+
const state = provideState(featureKey, reducer);
|
|
221
|
+
return makeEnvironmentProviders([
|
|
222
|
+
effects,
|
|
223
|
+
state,
|
|
224
|
+
{
|
|
225
|
+
provide: AuthConfig,
|
|
226
|
+
useValue: config,
|
|
227
|
+
},
|
|
228
|
+
]);
|
|
202
229
|
}
|
|
203
|
-
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
-
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
205
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AuthGuard, decorators: [{
|
|
206
|
-
type: Injectable,
|
|
207
|
-
args: [{
|
|
208
|
-
providedIn: 'root',
|
|
209
|
-
}]
|
|
210
|
-
}], ctorParameters: function () { return [{ type: i1$1.Store }]; } });
|
|
211
230
|
|
|
212
231
|
/**
|
|
213
232
|
* Generated bundle index. Do not edit.
|
|
214
233
|
*/
|
|
215
234
|
|
|
216
|
-
export { AuthGuard, AuthModule, getUser, isAuthenticated, signIn, signOut, signedIn, signedOut };
|
|
235
|
+
export { AuthGuard, AuthModule, getUser, isAuthenticated, jwtInterceptor, provideAuth, signIn, signOut, signedIn, signedOut };
|
|
217
236
|
//# sourceMappingURL=thecla-auth0-angular.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thecla-auth0-angular.mjs","sources":["../../../projects/auth0-angular/src/lib/auth-config.ts","../../../projects/auth0-angular/src/lib/actions/auth.actions.ts","../../../projects/auth0-angular/src/lib/auth.service.ts","../../../projects/auth0-angular/src/lib/effects/auth.effects.ts","../../../projects/auth0-angular/src/lib/jwt.interceptor.ts","../../../projects/auth0-angular/src/lib/reducers/auth.reducer.ts","../../../projects/auth0-angular/src/lib/store/index.ts","../../../projects/auth0-angular/src/lib/auth.module.ts","../../../projects/auth0-angular/src/lib/auth.guard.ts","../../../projects/auth0-angular/src/thecla-auth0-angular.ts"],"sourcesContent":["export abstract class AuthConfig {\n public abstract audience: string;\n public abstract clientId: string;\n public abstract domain: string;\n public abstract scope: string;\n public abstract redirectUri?: string;\n public abstract logoutUri?: string;\n public abstract useRefreshTokens?: boolean;\n public abstract sessionCheckExpiryDays?: number;\n}\n","import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const signIn = createAction('[@thecla/auth0-angular] sign in', props<{ returnUrl: string }>());\n\nexport const signInCompleted = createAction(\n '[@thecla/auth0-angular] sign in completed',\n props<{ state: { target: string } }>()\n);\n\nexport const signedIn = createAction('[@thecla/auth0-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/auth0-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/auth0-angular] signed out');\n","import { Injectable } from '@angular/core';\nimport { Auth0Client, User } from '@auth0/auth0-spa-js';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly auth0: Auth0Client;\n\n public constructor(private readonly config: AuthConfig) {\n this.auth0 = new Auth0Client({\n audience: config.audience,\n client_id: config.clientId,\n domain: config.domain,\n redirect_uri: config.redirectUri ?? location.origin,\n scope: config.scope,\n useRefreshTokens: config.useRefreshTokens,\n sessionCheckExpiryDays: config.sessionCheckExpiryDays,\n });\n }\n\n public isAuthenticated() {\n return from(this.checkSession());\n }\n\n public loginWithRedirect(appState: { target: string }) {\n return from(this.auth0.loginWithRedirect({ appState })).pipe(switchMap(() => EMPTY));\n }\n\n public handleRedirectCallback() {\n return from(this.auth0.handleRedirectCallback()).pipe(map(result => result.appState as { target: string }));\n }\n\n public getUser() {\n return from(this.auth0.getUser()).pipe(filter((u): u is User => u !== undefined));\n }\n\n public getAccessToken(): Observable<unknown> {\n return from(this.auth0.getTokenSilently());\n }\n\n public logout() {\n this.auth0.logout({ returnTo: this.config.logoutUri ?? location.origin });\n }\n\n private async checkSession() {\n await this.auth0.checkSession();\n\n return await this.auth0.isAuthenticated();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { asyncScheduler, of, SchedulerLike } from 'rxjs';\nimport { catchError, map, observeOn, switchMap, tap } from 'rxjs/operators';\nimport { signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects {\n public readonly signIn$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }))\n ),\n { dispatch: false }\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(() =>\n this.auth.getUser().pipe(\n map(user => signedIn({ user })),\n catchError(error => of(signInFailed({ error })))\n )\n )\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 tap(() => {\n try {\n this.auth.logout();\n } catch {}\n }),\n map(() => signedOut())\n )\n );\n\n public readonly init$ = createEffect(() => ({ scheduler = asyncScheduler } = {}) => {\n const params = window.location.search;\n\n if (params.includes('code=') && params.includes('state=')) {\n return this.completeSignIn(scheduler);\n } else {\n return this.auth.isAuthenticated().pipe(\n switchMap(auth => this.getAuthResult(auth)),\n catchError(error => of(signInFailed({ error }))),\n observeOn(scheduler)\n );\n }\n });\n\n public constructor(\n private readonly actions$: Actions,\n private readonly auth: AuthService,\n private readonly router: Router\n ) {}\n\n private getAuthResult(auth: boolean) {\n if (auth) {\n return this.auth.getUser().pipe(map(user => signedIn({ user })));\n } else {\n return of(signedOut());\n }\n }\n\n private completeSignIn(scheduler: SchedulerLike) {\n return this.auth.handleRedirectCallback().pipe(\n map(state => signInCompleted({ state })),\n catchError(error => of(signInFailed({ error }))),\n observeOn(scheduler)\n );\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { 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 constructor(private readonly auth: AuthService) {}\n\n public intercept(request: HttpRequest<any>, next: HttpHandler) {\n if (this.isSameDomain(request)) {\n return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));\n } else {\n return next.handle(request);\n }\n }\n\n private isSameDomain(request: HttpRequest<any>) {\n const isAbsolute = /^https?:\\/\\//i.test(request.url);\n\n return !isAbsolute;\n }\n\n private authorize(request: HttpRequest<any>) {\n const token$ = this.auth.getAccessToken();\n\n return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));\n }\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 { 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 { 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 { 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAAsB,UAAU;;;MCGnB,MAAM,GAAG,YAAY,CAAC,iCAAiC,EAAE,KAAK,EAAyB,EAAE;AAE/F,MAAM,eAAe,GAAG,YAAY,CACzC,2CAA2C,EAC3C,KAAK,EAAiC,CACvC,CAAC;MAEW,QAAQ,GAAG,YAAY,CAAC,mCAAmC,EAAE,KAAK,EAAqB,EAAE;AAE/F,MAAM,YAAY,GAAG,YAAY,CAAC,wCAAwC,EAAE,KAAK,EAAoB,CAAC,CAAC;MAEjG,OAAO,GAAG,YAAY,CAAC,kCAAkC,EAAE;MAE3D,SAAS,GAAG,YAAY,CAAC,oCAAoC;;MCP7D,WAAW;IAGtB,YAAoC,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM;YACnD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;SACtD,CAAC,CAAC;KACJ;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KAClC;IAEM,iBAAiB,CAAC,QAA4B;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;KACtF;IAEM,sBAAsB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAA8B,CAAC,CAAC,CAAC;KAC7G;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAgB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;KACnF;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;KAC5C;IAEM,MAAM;QACX,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3E;IAEO,MAAM,YAAY;QACxB,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAEhC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;KAC3C;;wGA3CU,WAAW;4GAAX,WAAW,cAFV,MAAM;2FAEP,WAAW;kBAHvB,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCCY,WAAW;IAyDtB,YACmB,QAAiB,EACjB,IAAiB,EACjB,MAAc;QAFd,aAAQ,GAAR,QAAQ,CAAS;QACjB,SAAI,GAAJ,IAAI,CAAa;QACjB,WAAM,GAAN,MAAM,CAAQ;QA3DjB,YAAO,GAAG,YAAY,CACpC,MACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,MAAM,CAAC,EACd,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAC/E,EACH,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB,CAAC;QAEc,qBAAgB,GAAG,YAAY,CAAC,MAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,eAAe,CAAC,EACvB,SAAS,CAAC,MACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACtB,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/B,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CACjD,CACF,CACF,CACF,CAAC;QAEc,cAAS,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,aAAQ,GAAG,YAAY,CAAC,MACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC;YACF,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACpB;YAAC,MAAM,GAAE;SACX,CAAC,EACF,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CACvB,CACF,CAAC;QAEc,UAAK,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,cAAc,EAAE,GAAG,EAAE;YAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEtC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACzD,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;aACvC;iBAAM;gBACL,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CACrC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAC3C,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAChD,SAAS,CAAC,SAAS,CAAC,CACrB,CAAC;aACH;SACF,CAAC,CAAC;KAMC;IAEI,aAAa,CAAC,IAAa;QACjC,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SAClE;aAAM;YACL,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;SACxB;KACF;IAEO,cAAc,CAAC,SAAwB;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAC5C,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EACxC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAChD,SAAS,CAAC,SAAS,CAAC,CACrB,CAAC;KACH;;wGA7EU,WAAW;4GAAX,WAAW;2FAAX,WAAW;kBADvB,UAAU;;;MCFE,cAAc;IACzB,YAAoC,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;KAAI;IAElD,SAAS,CAAC,OAAyB,EAAE,IAAiB;QAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACpG;aAAM;YACL,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC7B;KACF;IAEO,YAAY,CAAC,OAAyB;QAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAErD,OAAO,CAAC,UAAU,CAAC;KACpB;IAEO,SAAS,CAAC,OAAyB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACvG;;2GArBU,cAAc;+GAAd,cAAc;2FAAd,cAAc;kBAD1B,UAAU;;;ACDJ,MAAM,gBAAgB,GAAU;IACrC,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEK,MAAM,mBAAmB,GAAU;IACxC,cAAc,EAAE,IAAI;IACpB,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;IACjC,GAAG,KAAK;IACR,cAAc,EAAE,KAAK;IACrB,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;SAEc,OAAO,CAAC,KAAwB,EAAE,MAAc;IAC9D,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpC;;ACvBO,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,WAAW,GAAG,qBAAqB,CAAQ,UAAU,CAAC,CAAC;MAEvD,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;MAEW,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;;MCHb,UAAU;IACd,OAAO,OAAO,CAAC,MAAkB;QACtC,OAAO;YACL,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,cAAc;oBACxB,KAAK,EAAE,IAAI;iBACZ;aACF;SACF,CAAC;KACH;;uGAhBU,UAAU;wGAAV,UAAU;wGAAV,UAAU,YAHZ,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;2FAGpF,UAAU;kBALtB,QAAQ;mBAAC;oBACR,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC/F,OAAO,EAAE,EAAE;iBACZ;;;MCJY,SAAS;IAGpB,YAAoC,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAF/B,mBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KAEf;IAE7C,WAAW,CAAC,IAA4B,EAAE,KAA0B;QACzE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAC7B,GAAG,CAAC,IAAI;YACN,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACvD;SACF,CAAC,EACF,KAAK,EAAE,CACR,CAAC;KACH;;sGAdU,SAAS;0GAAT,SAAS,cAFR,MAAM;2FAEP,SAAS;kBAHrB,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;ACTD;;;;;;"}
|
|
1
|
+
{"version":3,"file":"thecla-auth0-angular.mjs","sources":["../../../projects/auth0-angular/src/lib/actions/auth.actions.ts","../../../projects/auth0-angular/src/lib/store/index.ts","../../../projects/auth0-angular/src/lib/auth.guard.ts","../../../projects/auth0-angular/src/lib/auth-config.ts","../../../projects/auth0-angular/src/lib/auth.service.ts","../../../projects/auth0-angular/src/lib/effects/auth.effects.ts","../../../projects/auth0-angular/src/lib/jwt.interceptor.ts","../../../projects/auth0-angular/src/lib/reducers/auth.reducer.ts","../../../projects/auth0-angular/src/lib/auth.module.ts","../../../projects/auth0-angular/src/lib/provide-auth.ts","../../../projects/auth0-angular/src/thecla-auth0-angular.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Profile } from '../state/auth.state';\n\nexport const init = createAction('[@thecla/auth0-angular] init');\n\nexport const signIn = createAction('[@thecla/auth0-angular] sign in', props<{ returnUrl: string }>());\n\nexport const signInCompleted = createAction(\n '[@thecla/auth0-angular] sign in completed',\n props<{ state: { target: string } }>()\n);\n\nexport const signedIn = createAction('[@thecla/auth0-angular] signed in', props<{ user: Profile }>());\n\nexport const signInFailed = createAction('[@thecla/auth0-angular] sign in failed', props<{ error: Error }>());\n\nexport const signOut = createAction('[@thecla/auth0-angular] sign out');\n\nexport const signedOut = createAction('[@thecla/auth0-angular] signed out');\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 audience: string;\n public abstract clientId: string;\n public abstract domain: string;\n public abstract scope: string;\n public abstract redirectUri?: string;\n public abstract logoutUri?: string;\n public abstract useRefreshTokens?: boolean;\n public abstract sessionCheckExpiryDays?: number;\n}\n","import { Injectable } from '@angular/core';\nimport { Auth0Client, User } from '@auth0/auth0-spa-js';\nimport { EMPTY, from, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { AuthConfig } from './auth-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly auth0: Auth0Client;\n\n public constructor(private readonly config: AuthConfig) {\n this.auth0 = new Auth0Client({\n clientId: config.clientId,\n authorizationParams: {\n audience: config.audience,\n redirect_uri: config.redirectUri ?? location.origin,\n scope: config.scope,\n },\n domain: config.domain,\n useRefreshTokens: config.useRefreshTokens,\n sessionCheckExpiryDays: config.sessionCheckExpiryDays,\n });\n }\n\n public isAuthenticated() {\n return from(this.checkSession());\n }\n\n public loginWithRedirect(appState: { target: string }) {\n return from(this.auth0.loginWithRedirect({ appState })).pipe(switchMap(() => EMPTY));\n }\n\n public handleRedirectCallback() {\n return from(this.auth0.handleRedirectCallback()).pipe(map(result => result.appState as { target: string }));\n }\n\n public getUser() {\n return from(this.auth0.getUser()).pipe(filter((u): u is User => u !== undefined));\n }\n\n public getAccessToken(): Observable<unknown> {\n return from(this.auth0.getTokenSilently());\n }\n\n public logout() {\n this.auth0.logout({\n logoutParams: { returnTo: this.config.logoutUri ?? location.origin },\n });\n }\n\n private async checkSession() {\n await this.auth0.checkSession();\n\n return await this.auth0.isAuthenticated();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType, OnInitEffects } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { init, signedIn, signedOut, signIn, signInCompleted, signInFailed, signOut } from '../actions/auth.actions';\nimport { AuthService } from '../auth.service';\n\n@Injectable()\nexport class AuthEffects implements OnInitEffects {\n public readonly signIn$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(signIn),\n switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }))\n ),\n { dispatch: false }\n );\n\n public readonly signInCompleted$ = createEffect(() =>\n this.actions$.pipe(\n ofType(signInCompleted),\n switchMap(() =>\n this.auth.getUser().pipe(\n map(user => signedIn({ user })),\n catchError(error => of(signInFailed({ error })))\n )\n )\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 tap(() => {\n try {\n this.auth.logout();\n } catch {}\n }),\n map(() => signedOut())\n )\n );\n\n public readonly init$ = createEffect(() =>\n this.actions$.pipe(\n ofType(init),\n switchMap(() => {\n const params = window.location.search;\n\n if (params.includes('code=') && params.includes('state=')) {\n return this.completeSignIn();\n } else {\n return this.auth.isAuthenticated().pipe(\n switchMap(auth => this.getAuthResult(auth)),\n catchError(error => of(signInFailed({ error })))\n );\n }\n })\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 getAuthResult(auth: boolean) {\n if (auth) {\n return this.auth.getUser().pipe(map(user => signedIn({ user })));\n } else {\n return of(signedOut());\n }\n }\n\n private completeSignIn() {\n return this.auth.handleRedirectCallback().pipe(\n map(state => signInCompleted({ state })),\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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"}
|
|
File without changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Profile } from '../state/auth.state';
|
|
2
|
+
export declare const init: import("@ngrx/store").ActionCreator<"[@thecla/auth0-angular] init", () => import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] init">>;
|
|
2
3
|
export declare const signIn: import("@ngrx/store").ActionCreator<"[@thecla/auth0-angular] sign in", (props: {
|
|
3
4
|
returnUrl: string;
|
|
4
5
|
}) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Router } from '@angular/router';
|
|
2
|
-
import { Actions } from '@ngrx/effects';
|
|
2
|
+
import { Actions, OnInitEffects } from '@ngrx/effects';
|
|
3
3
|
import { AuthService } from '../auth.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class AuthEffects {
|
|
5
|
+
export declare class AuthEffects implements OnInitEffects {
|
|
6
6
|
private readonly actions$;
|
|
7
7
|
private readonly auth;
|
|
8
8
|
private readonly router;
|
|
@@ -14,18 +14,17 @@ export declare class AuthEffects {
|
|
|
14
14
|
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] sign in failed">)> & import("@ngrx/effects").CreateEffectMetadata;
|
|
15
15
|
readonly redirect$: import("rxjs").Observable<boolean> & import("@ngrx/effects").CreateEffectMetadata;
|
|
16
16
|
readonly signOut$: import("rxjs").Observable<import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] signed out">> & import("@ngrx/effects").CreateEffectMetadata;
|
|
17
|
-
readonly init$:
|
|
17
|
+
readonly init$: import("rxjs").Observable<import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] signed out"> | ({
|
|
18
18
|
state: {
|
|
19
19
|
target: string;
|
|
20
20
|
};
|
|
21
21
|
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] sign in completed">) | ({
|
|
22
|
-
error: Error;
|
|
23
|
-
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] sign in failed">)> | import("rxjs").Observable<import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] signed out"> | ({
|
|
24
22
|
user: import("@thecla/auth0-angular").Profile;
|
|
25
23
|
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] signed in">) | ({
|
|
26
24
|
error: Error;
|
|
27
|
-
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] sign in failed">)>
|
|
25
|
+
} & import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] sign in failed">)> & import("@ngrx/effects").CreateEffectMetadata;
|
|
28
26
|
constructor(actions$: Actions, auth: AuthService, router: Router);
|
|
27
|
+
ngrxOnInitEffects(): import("@ngrx/store/src/models").TypedAction<"[@thecla/auth0-angular] init">;
|
|
29
28
|
private getAuthResult;
|
|
30
29
|
private completeSignIn;
|
|
31
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthEffects, never>;
|
package/lib/jwt.interceptor.d.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
|
|
2
|
-
import { AuthService } from './auth.service';
|
|
1
|
+
import { HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
export declare class JwtInterceptor implements HttpInterceptor {
|
|
5
|
-
|
|
6
|
-
constructor(auth: AuthService);
|
|
7
|
-
intercept(request: HttpRequest<any>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
|
|
8
|
-
private isSameDomain;
|
|
9
|
-
private authorize;
|
|
4
|
+
intercept(request: HttpRequest<any>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<unknown>>;
|
|
10
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<JwtInterceptor, never>;
|
|
11
6
|
static ɵprov: i0.ɵɵInjectableDeclaration<JwtInterceptor>;
|
|
12
7
|
}
|
|
8
|
+
export declare const jwtInterceptor: HttpInterceptorFn;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thecla/auth0-angular",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"author": "Hendrik Wouters",
|
|
5
5
|
"description": "Angular module using NGRX to authenticate with Auth0",
|
|
6
6
|
"repository": {
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
},
|
|
19
19
|
"homepage": "https://github.com/hwouters/auth0-angular#readme",
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@angular/common": "^
|
|
22
|
-
"@angular/core": "^
|
|
23
|
-
"@angular/router": "^
|
|
24
|
-
"@ngrx/effects": "^
|
|
25
|
-
"@ngrx/store": "^
|
|
26
|
-
"@auth0/auth0-spa-js": "^
|
|
21
|
+
"@angular/common": "^15.0.0",
|
|
22
|
+
"@angular/core": "^15.1.1",
|
|
23
|
+
"@angular/router": "^15.0.0",
|
|
24
|
+
"@ngrx/effects": "^15.0.0",
|
|
25
|
+
"@ngrx/store": "^15.0.0",
|
|
26
|
+
"@auth0/auth0-spa-js": "^2.0.0"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"tslib": "^2.0.0"
|
|
@@ -33,13 +33,13 @@
|
|
|
33
33
|
"esm2020": "esm2020/thecla-auth0-angular.mjs",
|
|
34
34
|
"fesm2020": "fesm2020/thecla-auth0-angular.mjs",
|
|
35
35
|
"fesm2015": "fesm2015/thecla-auth0-angular.mjs",
|
|
36
|
-
"typings": "
|
|
36
|
+
"typings": "index.d.ts",
|
|
37
37
|
"exports": {
|
|
38
38
|
"./package.json": {
|
|
39
39
|
"default": "./package.json"
|
|
40
40
|
},
|
|
41
41
|
".": {
|
|
42
|
-
"types": "./
|
|
42
|
+
"types": "./index.d.ts",
|
|
43
43
|
"esm2020": "./esm2020/thecla-auth0-angular.mjs",
|
|
44
44
|
"es2020": "./fesm2020/thecla-auth0-angular.mjs",
|
|
45
45
|
"es2015": "./fesm2015/thecla-auth0-angular.mjs",
|
package/public-api.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { signedIn, signedOut, signIn, signOut } from './lib/actions/auth.actions';
|
|
2
2
|
export { AuthGuard } from './lib/auth.guard';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { AuthModule } from './lib/auth.module';
|
|
4
|
+
export { jwtInterceptor } from './lib/jwt.interceptor';
|
|
5
|
+
export { provideAuth } from './lib/provide-auth';
|
|
5
6
|
export { Profile } from './lib/state/auth.state';
|
|
7
|
+
export { getUser, isAuthenticated } from './lib/store';
|