@dontdrinkandroot/ngx-extensions 0.2.0 → 0.2.1
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/public-api.mjs +4 -1
- package/esm2020/src/cookie/cookie.service.mjs +3 -3
- package/esm2020/src/ddr-extensions.module.mjs +4 -4
- package/esm2020/src/http/redirect-to-login-interceptor.service.mjs +3 -3
- package/esm2020/src/http/with-credentials-interceptor.service.mjs +3 -3
- package/esm2020/src/image/lazy-image.directive.mjs +3 -3
- package/esm2020/src/jwt/jwt-interceptor.service.mjs +3 -3
- package/esm2020/src/jwt/jwt-refresh-token-interceptor.service.mjs +3 -3
- package/esm2020/src/jwt/jwt.service.mjs +3 -3
- package/esm2020/src/oauth/json-web-token.mjs +2 -0
- package/esm2020/src/oauth/oauth2-access-token-interceptor.service.mjs +26 -0
- package/esm2020/src/oauth/oauth2-config.mjs +11 -0
- package/esm2020/src/oauth/oauth2-error.mjs +8 -0
- package/esm2020/src/oauth/oauth2-refresh-token-interceptor.service.mjs +24 -0
- package/esm2020/src/oauth/oauth2.module.mjs +44 -0
- package/esm2020/src/oauth/oauth2.service.mjs +119 -0
- package/esm2020/src/oauth/redirect-to-oauth2-login-interceptor.service.mjs +41 -0
- package/esm2020/src/oauth/token-response.mjs +2 -0
- package/esm2020/src/scroll/bottom-hit.directive.mjs +3 -3
- package/esm2020/src/scroll/scroll.service.mjs +3 -3
- package/esm2020/src/visibility/visibility.service.mjs +3 -3
- package/fesm2015/dontdrinkandroot-ngx-extensions.mjs +276 -36
- package/fesm2015/dontdrinkandroot-ngx-extensions.mjs.map +1 -1
- package/fesm2020/dontdrinkandroot-ngx-extensions.mjs +272 -36
- package/fesm2020/dontdrinkandroot-ngx-extensions.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/src/oauth/json-web-token.d.ts +30 -0
- package/src/oauth/oauth2-access-token-interceptor.service.d.ts +14 -0
- package/src/oauth/oauth2-config.d.ts +9 -0
- package/src/oauth/oauth2-error.d.ts +5 -0
- package/src/oauth/oauth2-refresh-token-interceptor.service.d.ts +14 -0
- package/src/oauth/oauth2.module.d.ts +9 -0
- package/src/oauth/oauth2.service.d.ts +33 -0
- package/src/oauth/redirect-to-oauth2-login-interceptor.service.d.ts +18 -0
- package/src/oauth/token-response.d.ts +6 -0
package/esm2020/public-api.mjs
CHANGED
|
@@ -17,8 +17,11 @@ export * from './src/visibility/visibility.service';
|
|
|
17
17
|
export * from './src/http/with-credentials-interceptor.service';
|
|
18
18
|
export * from './src/http/url-info';
|
|
19
19
|
export * from './src/http/redirect-to-login-interceptor.service';
|
|
20
|
+
export * from './src/oauth/oauth2.module';
|
|
21
|
+
export * from './src/oauth/oauth2.service';
|
|
22
|
+
export * from './src/oauth/oauth2-error';
|
|
20
23
|
export * from './src/jwt/jwt-interceptor.service';
|
|
21
24
|
export * from './src/jwt/jwt.service';
|
|
22
25
|
export * from './src/jwt/jwt-refresh-token-interceptor.service';
|
|
23
26
|
export * from './src/jwt/jwt-token-response';
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtEQUFrRCxDQUFDO0FBRWpFLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBRXpDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1leHRlbnNpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvZGRyLWV4dGVuc2lvbnMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2Nvb2tpZS9jb29raWUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy91dGlsL2NvbGxlY3Rpb24tdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvdXRpbC9zdHJpbmctdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvdXRpbC9vYmplY3QtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvdXRpbC9udW1iZXItdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvdXRpbC90eXBlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3Njcm9sbC9zY3JvbGwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9tZXRob2RkZWNvcmF0b3IvZGVib3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvbWV0aG9kZGVjb3JhdG9yL2xpbWl0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2ltYWdlL2xhenktaW1hZ2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3Njcm9sbC9ib3R0b20taGl0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy92aXNpYmlsaXR5L3Zpc2liaWxpdHkuc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL2h0dHAvd2l0aC1jcmVkZW50aWFscy1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2h0dHAvdXJsLWluZm8nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvaHR0cC9yZWRpcmVjdC10by1sb2dpbi1pbnRlcmNlcHRvci5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvb2F1dGgvb2F1dGgyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9vYXV0aC9vYXV0aDIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9vYXV0aC9vYXV0aDItZXJyb3InO1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9qd3Qvand0LWludGVyY2VwdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvand0L2p3dC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2p3dC9qd3QtcmVmcmVzaC10b2tlbi1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2p3dC9qd3QtdG9rZW4tcmVzcG9uc2UnO1xuIl19
|
|
@@ -121,9 +121,9 @@ export class CookieService {
|
|
|
121
121
|
return new RegExp('(?:^' + escapedName + '|;\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
-
CookieService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
125
|
-
CookieService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
124
|
+
CookieService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CookieService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
125
|
+
CookieService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CookieService, providedIn: 'root' });
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CookieService, decorators: [{
|
|
127
127
|
type: Injectable,
|
|
128
128
|
args: [{
|
|
129
129
|
providedIn: 'root'
|
|
@@ -7,17 +7,17 @@ export const DDR_JWT_REFRESH_TOKEN_URL = new InjectionToken('DDR_JWT_REFRESH_TOK
|
|
|
7
7
|
export const DDR_LOGIN_PATH = new InjectionToken('DDR_LOGIN_PATH');
|
|
8
8
|
export class DdrExtensionsModule {
|
|
9
9
|
}
|
|
10
|
-
DdrExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
11
|
-
DdrExtensionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.
|
|
10
|
+
DdrExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: DdrExtensionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
DdrExtensionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: DdrExtensionsModule, declarations: [LazyImageDirective,
|
|
12
12
|
BottomHitDirective], exports: [LazyImageDirective,
|
|
13
13
|
BottomHitDirective] });
|
|
14
|
-
DdrExtensionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.
|
|
14
|
+
DdrExtensionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: DdrExtensionsModule, providers: [
|
|
15
15
|
{
|
|
16
16
|
provide: DDR_LOGIN_PATH,
|
|
17
17
|
useValue: '/login'
|
|
18
18
|
}
|
|
19
19
|
] });
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: DdrExtensionsModule, decorators: [{
|
|
21
21
|
type: NgModule,
|
|
22
22
|
args: [{
|
|
23
23
|
declarations: [
|
|
@@ -24,9 +24,9 @@ export class RedirectToLoginInterceptor {
|
|
|
24
24
|
}));
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
RedirectToLoginInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
28
|
-
RedirectToLoginInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
27
|
+
RedirectToLoginInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToLoginInterceptor, deps: [{ token: i1.Router }, { token: DDR_LOGIN_PATH }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
RedirectToLoginInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToLoginInterceptor });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToLoginInterceptor, decorators: [{
|
|
30
30
|
type: Injectable
|
|
31
31
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: undefined, decorators: [{
|
|
32
32
|
type: Inject,
|
|
@@ -11,9 +11,9 @@ export class WithCredentialsInterceptor {
|
|
|
11
11
|
return next.handle(cloned);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
WithCredentialsInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
15
|
-
WithCredentialsInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
14
|
+
WithCredentialsInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: WithCredentialsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15
|
+
WithCredentialsInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: WithCredentialsInterceptor });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: WithCredentialsInterceptor, decorators: [{
|
|
17
17
|
type: Injectable
|
|
18
18
|
}] });
|
|
19
19
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jcmVkZW50aWFscy1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvd2l0aC1jcmVkZW50aWFscy1pbnRlcmNlcHRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBS3pDLE1BQU0sT0FBTywwQkFBMEI7SUFFbkM7O09BRUc7SUFDSSxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUVyRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLGVBQWUsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDOzt1SEFaUSwwQkFBMEI7MkhBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdpdGhDcmVkZW50aWFsc0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yXG57XG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgcHVibGljIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj5cbiAgICB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGNsb25lZCk7XG4gICAgfVxufVxuIl19
|
|
@@ -92,15 +92,15 @@ export class LazyImageDirective {
|
|
|
92
92
|
return window.getComputedStyle(element).display === 'none';
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
LazyImageDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
96
|
-
LazyImageDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
95
|
+
LazyImageDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: LazyImageDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
96
|
+
LazyImageDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.3", type: LazyImageDirective, selector: "[ddrLazyImage]", inputs: { src: ["ddrLazyImage", "src"], objectFit: "objectFit", offset: "offset" }, host: { listeners: { "window:resize": "windowResized($event)", "window:scroll": "windowScroll($event)" }, properties: { "src": "this.hostSrc", "style.width.px": "this.hostStyleWidthPx", "style.height.px": "this.hostStyleHeightPx", "style.object-fit": "this.hostStyleObjectFit" } }, usesOnChanges: true, ngImport: i0 });
|
|
97
97
|
__decorate([
|
|
98
98
|
Debounce()
|
|
99
99
|
], LazyImageDirective.prototype, "windowResized", null);
|
|
100
100
|
__decorate([
|
|
101
101
|
Limit()
|
|
102
102
|
], LazyImageDirective.prototype, "windowScroll", null);
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: LazyImageDirective, decorators: [{
|
|
104
104
|
type: Directive,
|
|
105
105
|
args: [{ selector: '[ddrLazyImage]' }]
|
|
106
106
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { src: [{
|
|
@@ -18,9 +18,9 @@ export class JwtInterceptor {
|
|
|
18
18
|
return next.handle(req);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
22
|
-
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
21
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtInterceptor, deps: [{ token: i1.JwtService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
22
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtInterceptor });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
24
24
|
type: Injectable
|
|
25
25
|
}], ctorParameters: function () { return [{ type: i1.JwtService }]; } });
|
|
26
26
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWludGVyY2VwdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvand0L2p3dC1pbnRlcmNlcHRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7OztBQUt6QyxNQUFNLE9BQU8sY0FBYztJQUV2QixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRTFDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRXJELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFekMsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDL0QsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7MkdBcEJRLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Snd0U2VydmljZX0gZnJvbSAnLi9qd3Quc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKd3RJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvclxue1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgand0U2VydmljZTogSnd0U2VydmljZSlcbiAgICB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgcHVibGljIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj5cbiAgICB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5qd3RTZXJ2aWNlLmdldFRva2VuKCk7XG5cbiAgICAgICAgaWYgKG51bGwgIT09IHRva2VuICYmICF0aGlzLmp3dFNlcnZpY2UuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgdG9rZW4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -39,9 +39,9 @@ export class JwtRefreshTokenInterceptor {
|
|
|
39
39
|
return this.refreshTokenRequest$;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
JwtRefreshTokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
43
|
-
JwtRefreshTokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
42
|
+
JwtRefreshTokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtRefreshTokenInterceptor, deps: [{ token: i1.JwtService }, { token: i2.HttpClient }, { token: DDR_JWT_REFRESH_TOKEN_URL }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
43
|
+
JwtRefreshTokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtRefreshTokenInterceptor });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtRefreshTokenInterceptor, decorators: [{
|
|
45
45
|
type: Injectable
|
|
46
46
|
}], ctorParameters: function () { return [{ type: i1.JwtService }, { type: i2.HttpClient }, { type: undefined, decorators: [{
|
|
47
47
|
type: Inject,
|
|
@@ -68,9 +68,9 @@ export class JwtService {
|
|
|
68
68
|
return this.storagePrefix + '.jwt.refresh_token';
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
72
|
-
JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
71
|
+
JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtService, deps: [{ token: DDR_STORAGE_PREFIX }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
72
|
+
JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtService, providedIn: 'root' });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: JwtService, decorators: [{
|
|
74
74
|
type: Injectable,
|
|
75
75
|
args: [{
|
|
76
76
|
providedIn: 'root'
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi13ZWItdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2F1dGgvanNvbi13ZWItdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSnNvbldlYlRva2VuXG57XG4gICAgLyoqXG4gICAgICogQXVkaWVuY2VcbiAgICAgKi9cbiAgICBhdWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEV4cGlyYXRpb24gVGltZVxuICAgICAqL1xuICAgIGV4cDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSXNzdWVkIEF0XG4gICAgICovXG4gICAgaWF0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBKV1QgSURcbiAgICAgKi9cbiAgICBqdGk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE5vdCBCZWZvcmVcbiAgICAgKi9cbiAgICBuYmY6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNjb3Blc1xuICAgICAqL1xuICAgIHNjb3Blczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBTdWJqZWN0XG4gICAgICovXG4gICAgc3ViOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./oauth2.service";
|
|
4
|
+
export class OAuth2AccessTokenInterceptor {
|
|
5
|
+
constructor(oAuth2Service) {
|
|
6
|
+
this.oAuth2Service = oAuth2Service;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @override
|
|
10
|
+
*/
|
|
11
|
+
intercept(req, next) {
|
|
12
|
+
const accessTokenString = this.oAuth2Service.getAccessTokenString();
|
|
13
|
+
if (null !== accessTokenString && !this.oAuth2Service.isAccessTokenExpired()) {
|
|
14
|
+
req = req.clone({
|
|
15
|
+
headers: req.headers.set('Authorization', 'Bearer ' + accessTokenString)
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return next.handle(req);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
OAuth2AccessTokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2AccessTokenInterceptor, deps: [{ token: i1.OAuth2Service }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
22
|
+
OAuth2AccessTokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2AccessTokenInterceptor });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2AccessTokenInterceptor, decorators: [{
|
|
24
|
+
type: Injectable
|
|
25
|
+
}], ctorParameters: function () { return [{ type: i1.OAuth2Service }]; } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWFjY2Vzcy10b2tlbi1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL29hdXRoL29hdXRoMi1hY2Nlc3MtdG9rZW4taW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFLekMsTUFBTSxPQUFPLDRCQUE0QjtJQUVyQyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUVoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUVyRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVwRSxJQUFJLElBQUksS0FBSyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUMxRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQzthQUMzRSxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDOzt5SEFwQlEsNEJBQTRCOzZIQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge09BdXRoMlNlcnZpY2V9IGZyb20gJy4vb2F1dGgyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT0F1dGgyQWNjZXNzVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvclxue1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb0F1dGgyU2VydmljZTogT0F1dGgyU2VydmljZSlcbiAgICB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgcHVibGljIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj5cbiAgICB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuU3RyaW5nID0gdGhpcy5vQXV0aDJTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKG51bGwgIT09IGFjY2Vzc1Rva2VuU3RyaW5nICYmICF0aGlzLm9BdXRoMlNlcnZpY2UuaXNBY2Nlc3NUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlblN0cmluZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const DDR_OAUTH2_CONFIG = new InjectionToken('DDR_OAUTH2_CONFIG');
|
|
3
|
+
export class OAuth2Config {
|
|
4
|
+
constructor(clientId, redirectUri, authorizeUri, tokenUri) {
|
|
5
|
+
this.clientId = clientId;
|
|
6
|
+
this.redirectUri = redirectUri;
|
|
7
|
+
this.authorizeUri = authorizeUri;
|
|
8
|
+
this.tokenUri = tokenUri;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9vYXV0aC9vYXV0aDItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWUsbUJBQW1CLENBQUMsQ0FBQztBQUV2RixNQUFNLE9BQU8sWUFBWTtJQUVyQixZQUNvQixRQUFnQixFQUNoQixXQUFtQixFQUNuQixZQUFvQixFQUNwQixRQUFnQjtRQUhoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVE7SUFHcEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBERFJfT0FVVEgyX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPQXV0aDJDb25maWc+KCdERFJfT0FVVEgyX0NPTkZJRycpO1xuXG5leHBvcnQgY2xhc3MgT0F1dGgyQ29uZmlnXG57XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBjbGllbnRJZDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcmVkaXJlY3RVcmk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGF1dGhvcml6ZVVyaTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5Vcmk6IHN0cmluZ1xuICAgIClcbiAgICB7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class OAuth2Error extends Error {
|
|
2
|
+
constructor(error) {
|
|
3
|
+
super(error);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
OAuth2Error.CODE_NOT_FOUND = 'code_not_found';
|
|
7
|
+
OAuth2Error.ACCESS_DENIED = 'access_denied';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL29hdXRoL29hdXRoMi1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sV0FBWSxTQUFRLEtBQUs7SUFNbEMsWUFBWSxLQUFhO1FBRXJCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDOztBQVBzQiwwQkFBYyxHQUFHLGdCQUFnQixDQUFDO0FBRWxDLHlCQUFhLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIE9BdXRoMkVycm9yIGV4dGVuZHMgRXJyb3JcbntcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVfTk9UX0ZPVU5EID0gJ2NvZGVfbm90X2ZvdW5kJztcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0RFTklFRCA9ICdhY2Nlc3NfZGVuaWVkJztcblxuICAgIGNvbnN0cnVjdG9yKGVycm9yOiBzdHJpbmcpXG4gICAge1xuICAgICAgICBzdXBlcihlcnJvcik7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { switchMap } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./oauth2.service";
|
|
5
|
+
export class OAuth2RefreshTokenInterceptor {
|
|
6
|
+
constructor(oAuth2Service) {
|
|
7
|
+
this.oAuth2Service = oAuth2Service;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @override
|
|
11
|
+
*/
|
|
12
|
+
intercept(req, next) {
|
|
13
|
+
if (this.oAuth2Service.isRefreshPossibleAndRequired(req)) {
|
|
14
|
+
return this.oAuth2Service.performRefresh().pipe(switchMap(() => next.handle(req)));
|
|
15
|
+
}
|
|
16
|
+
return next.handle(req);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
OAuth2RefreshTokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2RefreshTokenInterceptor, deps: [{ token: i1.OAuth2Service }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
20
|
+
OAuth2RefreshTokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2RefreshTokenInterceptor });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2RefreshTokenInterceptor, decorators: [{
|
|
22
|
+
type: Injectable
|
|
23
|
+
}], ctorParameters: function () { return [{ type: i1.OAuth2Service }]; } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLXJlZnJlc2gtdG9rZW4taW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9vYXV0aC9vYXV0aDItcmVmcmVzaC10b2tlbi1pbnRlcmNlcHRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFJekMsTUFBTSxPQUFPLDZCQUE2QjtJQUV0QyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUVoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUVyRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FDM0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztTQUNMO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7OzBIQWxCUSw2QkFBNkI7OEhBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge09BdXRoMlNlcnZpY2V9IGZyb20gJy4vb2F1dGgyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT0F1dGgyUmVmcmVzaFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3JcbntcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9BdXRoMlNlcnZpY2U6IE9BdXRoMlNlcnZpY2UpXG4gICAge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBvdmVycmlkZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+XG4gICAge1xuICAgICAgICBpZiAodGhpcy5vQXV0aDJTZXJ2aWNlLmlzUmVmcmVzaFBvc3NpYmxlQW5kUmVxdWlyZWQocmVxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub0F1dGgyU2VydmljZS5wZXJmb3JtUmVmcmVzaCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IG5leHQuaGFuZGxlKHJlcSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { DDR_OAUTH2_CONFIG } from './oauth2-config';
|
|
3
|
+
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
4
|
+
import { OAuth2RefreshTokenInterceptor } from './oauth2-refresh-token-interceptor.service';
|
|
5
|
+
import { RedirectToOAuth2LoginInterceptor } from './redirect-to-oauth2-login-interceptor.service';
|
|
6
|
+
import { OAuth2AccessTokenInterceptor } from './oauth2-access-token-interceptor.service';
|
|
7
|
+
import { OAuth2Service } from './oauth2.service';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class OAuth2Module {
|
|
10
|
+
static forRoot(config) {
|
|
11
|
+
return {
|
|
12
|
+
ngModule: OAuth2Module,
|
|
13
|
+
providers: [
|
|
14
|
+
OAuth2Service,
|
|
15
|
+
{
|
|
16
|
+
provide: DDR_OAUTH2_CONFIG,
|
|
17
|
+
useValue: config
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
provide: HTTP_INTERCEPTORS,
|
|
21
|
+
useClass: OAuth2RefreshTokenInterceptor,
|
|
22
|
+
multi: true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
provide: HTTP_INTERCEPTORS,
|
|
26
|
+
useClass: RedirectToOAuth2LoginInterceptor,
|
|
27
|
+
multi: true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
provide: HTTP_INTERCEPTORS,
|
|
31
|
+
useClass: OAuth2AccessTokenInterceptor,
|
|
32
|
+
multi: true
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
OAuth2Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
39
|
+
OAuth2Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Module });
|
|
40
|
+
OAuth2Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Module });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Module, decorators: [{
|
|
42
|
+
type: NgModule
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9vYXV0aC9vYXV0aDIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBQyxpQkFBaUIsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHL0MsTUFBTSxPQUFPLFlBQVk7SUFFckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFvQjtRQUUvQixPQUFPO1lBQ0gsUUFBUSxFQUFFLFlBQVk7WUFDdEIsU0FBUyxFQUFFO2dCQUNQLGFBQWE7Z0JBQ2I7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsUUFBUSxFQUFFLE1BQU07aUJBQ25CO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLEtBQUssRUFBRSxJQUFJO2lCQUNkO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLEtBQUssRUFBRSxJQUFJO2lCQUNkO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLEtBQUssRUFBRSxJQUFJO2lCQUNkO2FBQ0o7U0FDSixDQUFDO0lBQ04sQ0FBQzs7eUdBN0JRLFlBQVk7MEdBQVosWUFBWTswR0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RERSX09BVVRIMl9DT05GSUcsIE9BdXRoMkNvbmZpZ30gZnJvbSAnLi9vYXV0aDItY29uZmlnJztcbmltcG9ydCB7SFRUUF9JTlRFUkNFUFRPUlN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T0F1dGgyUmVmcmVzaFRva2VuSW50ZXJjZXB0b3J9IGZyb20gJy4vb2F1dGgyLXJlZnJlc2gtdG9rZW4taW50ZXJjZXB0b3Iuc2VydmljZSc7XG5pbXBvcnQge1JlZGlyZWN0VG9PQXV0aDJMb2dpbkludGVyY2VwdG9yfSBmcm9tICcuL3JlZGlyZWN0LXRvLW9hdXRoMi1sb2dpbi1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmltcG9ydCB7T0F1dGgyQWNjZXNzVG9rZW5JbnRlcmNlcHRvcn0gZnJvbSAnLi9vYXV0aDItYWNjZXNzLXRva2VuLWludGVyY2VwdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtPQXV0aDJTZXJ2aWNlfSBmcm9tICcuL29hdXRoMi5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBPQXV0aDJNb2R1bGVcbntcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE9BdXRoMkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8T0F1dGgyTW9kdWxlPlxuICAgIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBPQXV0aDJNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICBPQXV0aDJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRERSX09BVVRIMl9DT05GSUcsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBPQXV0aDJSZWZyZXNoVG9rZW5JbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBSZWRpcmVjdFRvT0F1dGgyTG9naW5JbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBPQXV0aDJBY2Nlc3NUb2tlbkludGVyY2VwdG9yLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { throwError } from 'rxjs';
|
|
3
|
+
import { HttpParams } from '@angular/common/http';
|
|
4
|
+
import { catchError, map, shareReplay } from 'rxjs/operators';
|
|
5
|
+
import { DDR_OAUTH2_CONFIG } from './oauth2-config';
|
|
6
|
+
import { OAuth2Error } from './oauth2-error';
|
|
7
|
+
import { TypeUtils } from '../util/type-utils';
|
|
8
|
+
import { StringUtils } from '../util/string-utils';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/router";
|
|
11
|
+
import * as i2 from "@angular/common/http";
|
|
12
|
+
import * as i3 from "./oauth2-config";
|
|
13
|
+
export class OAuth2Service {
|
|
14
|
+
constructor(route, httpClient, config) {
|
|
15
|
+
this.route = route;
|
|
16
|
+
this.httpClient = httpClient;
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.accessTokenString = null;
|
|
19
|
+
this.accessToken = null;
|
|
20
|
+
this.REFRESH_MARGIN_SECONDS = 60 * 10;
|
|
21
|
+
this.refreshTokenRequest$ = null;
|
|
22
|
+
}
|
|
23
|
+
redirectToLogin() {
|
|
24
|
+
const challenge = this.createChallenge();
|
|
25
|
+
localStorage.setItem(OAuth2Service.STORAGE_KEY_CHALLENGE, challenge);
|
|
26
|
+
const params = new HttpParams()
|
|
27
|
+
.set('client_id', this.config.clientId)
|
|
28
|
+
.set('response_type', 'code')
|
|
29
|
+
.set('redirect_uri', this.config.redirectUri)
|
|
30
|
+
.set('code_challenge', challenge)
|
|
31
|
+
.set('code_challenge_method', 'plain');
|
|
32
|
+
window.location.href = this.config.authorizeUri + '?' + params.toString();
|
|
33
|
+
}
|
|
34
|
+
handleCode() {
|
|
35
|
+
if (this.route.snapshot.queryParamMap.has('error')) {
|
|
36
|
+
const error = this.route.snapshot.queryParamMap.get('error');
|
|
37
|
+
return throwError(() => new OAuth2Error(error ?? 'Unknown error'));
|
|
38
|
+
}
|
|
39
|
+
if (!this.route.snapshot.queryParamMap.has('code')) {
|
|
40
|
+
return throwError(() => new OAuth2Error(OAuth2Error.CODE_NOT_FOUND));
|
|
41
|
+
}
|
|
42
|
+
const code = TypeUtils.notNull(this.route.snapshot.queryParamMap.get('code'));
|
|
43
|
+
const params = new HttpParams()
|
|
44
|
+
.set('grant_type', 'authorization_code')
|
|
45
|
+
.set('code', code)
|
|
46
|
+
.set('redirect_uri', this.config.redirectUri)
|
|
47
|
+
.set('code_verifier', TypeUtils.notNull(localStorage.getItem(OAuth2Service.STORAGE_KEY_CHALLENGE)))
|
|
48
|
+
.set('client_id', this.config.clientId);
|
|
49
|
+
return this.httpClient.post(this.config.tokenUri, params).pipe(map(tokenResponse => this.processTokenResponse(tokenResponse)));
|
|
50
|
+
}
|
|
51
|
+
createChallenge() {
|
|
52
|
+
return StringUtils.createRandomString(64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-._~');
|
|
53
|
+
}
|
|
54
|
+
getRefreshToken() {
|
|
55
|
+
return localStorage.getItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
|
|
56
|
+
}
|
|
57
|
+
getAccessTokenString() {
|
|
58
|
+
return this.accessTokenString;
|
|
59
|
+
}
|
|
60
|
+
isAccessTokenExpired() {
|
|
61
|
+
return (null == this.accessToken
|
|
62
|
+
|| this.accessToken.exp * 1000 < Date.now());
|
|
63
|
+
}
|
|
64
|
+
isRefreshPossibleAndRequired(req = null) {
|
|
65
|
+
return ((null == req || !req.url.endsWith(this.config.tokenUri))
|
|
66
|
+
&& null != this.getRefreshToken()
|
|
67
|
+
&& (null == this.accessToken
|
|
68
|
+
|| (this.accessToken.exp - this.REFRESH_MARGIN_SECONDS) * 1000 < Date.now()));
|
|
69
|
+
}
|
|
70
|
+
performRefresh() {
|
|
71
|
+
if (null == this.refreshTokenRequest$) {
|
|
72
|
+
console.log('Performing token refesh');
|
|
73
|
+
const params = new HttpParams()
|
|
74
|
+
.set('grant_type', 'refresh_token')
|
|
75
|
+
.set('refresh_token', TypeUtils.notNull(this.getRefreshToken()))
|
|
76
|
+
.set('client_id', this.config.clientId);
|
|
77
|
+
this.refreshTokenRequest$ = this.httpClient.post(this.config.tokenUri, params).pipe(map(tokenResponse => this.processTokenResponse(tokenResponse)), catchError(error => {
|
|
78
|
+
this.accessTokenString = null;
|
|
79
|
+
this.accessToken = null;
|
|
80
|
+
localStorage.removeItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
|
|
81
|
+
this.refreshTokenRequest$ = null;
|
|
82
|
+
return throwError(error);
|
|
83
|
+
}), shareReplay(1));
|
|
84
|
+
}
|
|
85
|
+
return this.refreshTokenRequest$;
|
|
86
|
+
}
|
|
87
|
+
processTokenResponse(tokenResponse) {
|
|
88
|
+
localStorage.removeItem(OAuth2Service.STORAGE_KEY_CHALLENGE);
|
|
89
|
+
this.accessTokenString = tokenResponse.access_token;
|
|
90
|
+
this.accessToken = JSON.parse(atob(tokenResponse.access_token.split('.')[1]));
|
|
91
|
+
console.log('Access Token Expiry', new Date(this.accessToken.exp * 1000));
|
|
92
|
+
localStorage.setItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN, tokenResponse.refresh_token);
|
|
93
|
+
return this.accessToken;
|
|
94
|
+
}
|
|
95
|
+
clear() {
|
|
96
|
+
this.accessToken = null;
|
|
97
|
+
this.accessTokenString = null;
|
|
98
|
+
localStorage.removeItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
|
|
99
|
+
localStorage.removeItem(OAuth2Service.STORAGE_KEY_RETURN_URL);
|
|
100
|
+
}
|
|
101
|
+
setReturnUrl(url) {
|
|
102
|
+
localStorage.setItem(OAuth2Service.STORAGE_KEY_RETURN_URL, url);
|
|
103
|
+
}
|
|
104
|
+
getReturnUrl() {
|
|
105
|
+
return localStorage.getItem(OAuth2Service.STORAGE_KEY_RETURN_URL);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
OAuth2Service.STORAGE_KEY_CHALLENGE = 'ddr_oauth2_challenge';
|
|
109
|
+
OAuth2Service.STORAGE_KEY_REFRESH_TOKEN = 'ddr_oauth2_refresh_token';
|
|
110
|
+
OAuth2Service.STORAGE_KEY_RETURN_URL = 'ddr_oauth2_return_url';
|
|
111
|
+
OAuth2Service.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Service, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpClient }, { token: DDR_OAUTH2_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
|
+
OAuth2Service.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Service });
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OAuth2Service, decorators: [{
|
|
114
|
+
type: Injectable
|
|
115
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.OAuth2Config, decorators: [{
|
|
116
|
+
type: Inject,
|
|
117
|
+
args: [DDR_OAUTH2_CONFIG]
|
|
118
|
+
}] }]; } });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2F1dGgvb2F1dGgyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQWEsVUFBVSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUQsT0FBTyxFQUFDLGlCQUFpQixFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBR2pELE1BQU0sT0FBTyxhQUFhO0lBZ0J0QixZQUNZLEtBQXFCLEVBQ3JCLFVBQXNCLEVBQ0ssTUFBb0I7UUFGL0MsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNLLFdBQU0sR0FBTixNQUFNLENBQWM7UUFYbkQsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUV4QyxnQkFBVyxHQUF3QixJQUFJLENBQUM7UUFFL0IsMkJBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUxQyx5QkFBb0IsR0FBb0MsSUFBSSxDQUFDO0lBUXJFLENBQUM7SUFFTSxlQUFlO1FBRWxCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FB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SUFDbEUsQ0FBQztJQUVNLFlBQVksQ0FBQyxHQUFXO1FBRTNCLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxZQUFZO1FBRWYsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7O0FBckpjLG1DQUFxQixHQUFHLHNCQUF1QixDQUFBO0FBRS9DLHVDQUF5QixHQUFHLDBCQUEyQixDQUFBO0FBRXhELG9DQUFzQixHQUFHLHVCQUF3QixDQUFBOzBHQU50RCxhQUFhLDBFQW1CVixpQkFBaUI7OEdBbkJwQixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQW9CRixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge09ic2VydmFibGUsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUGFyYW1zLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1Rva2VuUmVzcG9uc2V9IGZyb20gJy4vdG9rZW4tcmVzcG9uc2UnO1xuaW1wb3J0IHtKc29uV2ViVG9rZW59IGZyb20gJy4vanNvbi13ZWItdG9rZW4nO1xuaW1wb3J0IHtERFJfT0FVVEgyX0NPTkZJRywgT0F1dGgyQ29uZmlnfSBmcm9tICcuL29hdXRoMi1jb25maWcnO1xuaW1wb3J0IHtPQXV0aDJFcnJvcn0gZnJvbSAnLi9vYXV0aDItZXJyb3InO1xuaW1wb3J0IHtUeXBlVXRpbHN9IGZyb20gJy4uL3V0aWwvdHlwZS11dGlscyc7XG5pbXBvcnQge1N0cmluZ1V0aWxzfSBmcm9tICcuLi91dGlsL3N0cmluZy11dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPQXV0aDJTZXJ2aWNlXG57XG4gICAgcHJpdmF0ZSBzdGF0aWMgU1RPUkFHRV9LRVlfQ0hBTExFTkdFID0gJ2Rkcl9vYXV0aDJfY2hhbGxlbmdlJztcblxuICAgIHByaXZhdGUgc3RhdGljIFNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4gPSAnZGRyX29hdXRoMl9yZWZyZXNoX3Rva2VuJztcblxuICAgIHB1YmxpYyBzdGF0aWMgU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCA9ICdkZHJfb2F1dGgyX3JldHVybl91cmwnO1xuXG4gICAgcHJpdmF0ZSBhY2Nlc3NUb2tlblN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGFjY2Vzc1Rva2VuOiBKc29uV2ViVG9rZW4gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9NQVJHSU5fU0VDT05EUyA9IDYwICogMTA7XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlblJlcXVlc3QkOiBPYnNlcnZhYmxlPEpzb25XZWJUb2tlbj4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KEREUl9PQVVUSDJfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogT0F1dGgyQ29uZmlnXG4gICAgKVxuICAgIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVkaXJlY3RUb0xvZ2luKClcbiAgICB7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZSA9IHRoaXMuY3JlYXRlQ2hhbGxlbmdlKCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfQ0hBTExFTkdFLCBjaGFsbGVuZ2UpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgICAgICAgIC5zZXQoJ2NsaWVudF9pZCcsIHRoaXMuY29uZmlnLmNsaWVudElkKVxuICAgICAgICAgICAgLnNldCgncmVzcG9uc2VfdHlwZScsICdjb2RlJylcbiAgICAgICAgICAgIC5zZXQoJ3JlZGlyZWN0X3VyaScsIHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKVxuICAgICAgICAgICAgLnNldCgnY29kZV9jaGFsbGVuZ2UnLCBjaGFsbGVuZ2UpXG4gICAgICAgICAgICAuc2V0KCdjb2RlX2NoYWxsZW5nZV9tZXRob2QnLCAncGxhaW4nKTtcblxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuY29uZmlnLmF1dGhvcml6ZVVyaSArICc/JyArIHBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDb2RlKCk6IE9ic2VydmFibGU8SnNvbldlYlRva2VuPlxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5oYXMoJ2Vycm9yJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBPQXV0aDJFcnJvcihlcnJvciA/PyAnVW5rbm93biBlcnJvcicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmhhcygnY29kZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgT0F1dGgyRXJyb3IoT0F1dGgyRXJyb3IuQ09ERV9OT1RfRk9VTkQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBUeXBlVXRpbHMubm90TnVsbCh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdjb2RlJykpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpXG4gICAgICAgICAgICAuc2V0KCdjb2RlJywgY29kZSlcbiAgICAgICAgICAgIC5zZXQoJ3JlZGlyZWN0X3VyaScsIHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKVxuICAgICAgICAgICAgLnNldCgnY29kZV92ZXJpZmllcicsIFR5cGVVdGlscy5ub3ROdWxsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfQ0hBTExFTkdFKSkpXG4gICAgICAgICAgICAuc2V0KCdjbGllbnRfaWQnLCB0aGlzLmNvbmZpZy5jbGllbnRJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxUb2tlblJlc3BvbnNlPih0aGlzLmNvbmZpZy50b2tlblVyaSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgbWFwKHRva2VuUmVzcG9uc2UgPT4gdGhpcy5wcm9jZXNzVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoYWxsZW5nZSgpXG4gICAge1xuICAgICAgICByZXR1cm4gU3RyaW5nVXRpbHMuY3JlYXRlUmFuZG9tU3RyaW5nKDY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3ODkwLS5fficpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IG51bGxcbiAgICB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY2Nlc3NUb2tlblN0cmluZygpOiBzdHJpbmcgfCBudWxsXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NUb2tlblN0cmluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY2Nlc3NUb2tlbkV4cGlyZWQoKTogYm9vbGVhblxuICAgIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT0gdGhpcy5hY2Nlc3NUb2tlblxuICAgICAgICAgICAgfHwgdGhpcy5hY2Nlc3NUb2tlbi5leHAgKiAxMDAwIDwgRGF0ZS5ub3coKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1JlZnJlc2hQb3NzaWJsZUFuZFJlcXVpcmVkKHJlcTogSHR0cFJlcXVlc3Q8YW55PiB8IG51bGwgPSBudWxsKTogYm9vbGVhblxuICAgIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChudWxsID09IHJlcSB8fCAhcmVxLnVybC5lbmRzV2l0aCh0aGlzLmNvbmZpZy50b2tlblVyaSkpXG4gICAgICAgICAgICAmJiBudWxsICE9IHRoaXMuZ2V0UmVmcmVzaFRva2VuKClcbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgICBudWxsID09IHRoaXMuYWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICB8fCAodGhpcy5hY2Nlc3NUb2tlbi5leHAgLSB0aGlzLlJFRlJFU0hfTUFSR0lOX1NFQ09ORFMpICogMTAwMCA8IERhdGUubm93KClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybVJlZnJlc2goKTogT2JzZXJ2YWJsZTxKc29uV2ViVG9rZW4+XG4gICAge1xuICAgICAgICBpZiAobnVsbCA9PSB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkKSB7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQZXJmb3JtaW5nIHRva2VuIHJlZmVzaCcpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAgICAgLnNldCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJylcbiAgICAgICAgICAgICAgICAuc2V0KCdyZWZyZXNoX3Rva2VuJywgVHlwZVV0aWxzLm5vdE51bGwodGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkpXG4gICAgICAgICAgICAgICAgLnNldCgnY2xpZW50X2lkJywgdGhpcy5jb25maWcuY2xpZW50SWQpO1xuXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkID0gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VG9rZW5SZXNwb25zZT4odGhpcy5jb25maWcudG9rZW5VcmksIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodG9rZW5SZXNwb25zZSA9PiB0aGlzLnByb2Nlc3NUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlblN0cmluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuUmVxdWVzdCQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlKTogSnNvbldlYlRva2VuXG4gICAge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX0NIQUxMRU5HRSk7XG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW5TdHJpbmcgPSB0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbjtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IEpTT04ucGFyc2UoYXRvYih0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbi5zcGxpdCgnLicpWzFdKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBY2Nlc3MgVG9rZW4gRXhwaXJ5JywgbmV3IERhdGUodGhpcy5hY2Nlc3NUb2tlbiEuZXhwICogMTAwMCkpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4sIHRva2VuUmVzcG9uc2UucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW4hO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcigpXG4gICAge1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlblN0cmluZyA9IG51bGw7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVGUkVTSF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJldHVyblVybCh1cmw6IHN0cmluZylcbiAgICB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCwgdXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmV0dXJuVXJsKCk6IHN0cmluZyB8IG51bGxcbiAgICB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFVFVSTl9VUkwpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
+
import { throwError } from 'rxjs';
|
|
3
|
+
import { Inject, Injectable } from '@angular/core';
|
|
4
|
+
import { catchError } from 'rxjs/operators';
|
|
5
|
+
import { DDR_OAUTH2_CONFIG } from './oauth2-config';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./oauth2.service";
|
|
8
|
+
import * as i2 from "@angular/router";
|
|
9
|
+
import * as i3 from "./oauth2-config";
|
|
10
|
+
export class RedirectToOAuth2LoginInterceptor {
|
|
11
|
+
constructor(oAuth2Service, router, oAuth2Config) {
|
|
12
|
+
this.oAuth2Service = oAuth2Service;
|
|
13
|
+
this.router = router;
|
|
14
|
+
this.oAuth2Config = oAuth2Config;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @override
|
|
18
|
+
*/
|
|
19
|
+
intercept(req, next) {
|
|
20
|
+
return next.handle(req).pipe(catchError((err) => {
|
|
21
|
+
if (err instanceof HttpErrorResponse) {
|
|
22
|
+
if (err.status === 401) {
|
|
23
|
+
if (!window.location.href.startsWith(this.oAuth2Config.redirectUri)) {
|
|
24
|
+
this.oAuth2Service.setReturnUrl(this.router.routerState.snapshot.url);
|
|
25
|
+
this.oAuth2Service.redirectToLogin();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return throwError(err);
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
RedirectToOAuth2LoginInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToOAuth2LoginInterceptor, deps: [{ token: i1.OAuth2Service }, { token: i2.Router }, { token: DDR_OAUTH2_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
+
RedirectToOAuth2LoginInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToOAuth2LoginInterceptor });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RedirectToOAuth2LoginInterceptor, decorators: [{
|
|
36
|
+
type: Injectable
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.OAuth2Service }, { type: i2.Router }, { type: i3.OAuth2Config, decorators: [{
|
|
38
|
+
type: Inject,
|
|
39
|
+
args: [DDR_OAUTH2_CONFIG]
|
|
40
|
+
}] }]; } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtdG8tb2F1dGgyLWxvZ2luLWludGVyY2VwdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2F1dGgvcmVkaXJlY3QtdG8tb2F1dGgyLWxvZ2luLWludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUF1RCxNQUFNLHNCQUFzQixDQUFDO0FBQzdHLE9BQU8sRUFBYSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBQyxpQkFBaUIsRUFBZSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUdoRSxNQUFNLE9BQU8sZ0NBQWdDO0lBRXpDLFlBQ1ksYUFBNEIsRUFDNUIsTUFBYyxFQUNhLFlBQTBCO1FBRnJELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDYSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUdqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUVyRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBRTVDLElBQUksR0FBRyxZQUFZLGlCQUFpQixFQUFFO2dCQUNsQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO29CQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ2pFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztxQkFDeEM7aUJBQ0o7YUFDSjtZQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs2SEE1QlEsZ0NBQWdDLHFFQUs3QixpQkFBaUI7aUlBTHBCLGdDQUFnQzsyRkFBaEMsZ0NBQWdDO2tCQUQ1QyxVQUFVOzswQkFNRixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPQXV0aDJTZXJ2aWNlfSBmcm9tICcuL29hdXRoMi5zZXJ2aWNlJztcbmltcG9ydCB7RERSX09BVVRIMl9DT05GSUcsIE9BdXRoMkNvbmZpZ30gZnJvbSAnLi9vYXV0aDItY29uZmlnJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0VG9PQXV0aDJMb2dpbkludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yXG57XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgb0F1dGgyU2VydmljZTogT0F1dGgyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgQEluamVjdChERFJfT0FVVEgyX0NPTkZJRykgcHJpdmF0ZSBvQXV0aDJDb25maWc6IE9BdXRoMkNvbmZpZ1xuICAgIClcbiAgICB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgcHVibGljIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj5cbiAgICB7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUoY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cubG9jYXRpb24uaHJlZi5zdGFydHNXaXRoKHRoaXMub0F1dGgyQ29uZmlnLnJlZGlyZWN0VXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vQXV0aDJTZXJ2aWNlLnNldFJldHVyblVybCh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vQXV0aDJTZXJ2aWNlLnJlZGlyZWN0VG9Mb2dpbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2F1dGgvdG9rZW4tcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXNwb25zZVxue1xuICAgIHRva2VuX3R5cGU6IHN0cmluZztcbiAgICBleHBpcmVzX2luOiBudW1iZXI7XG4gICAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xufVxuIl19
|
|
@@ -33,15 +33,15 @@ export class BottomHitDirective {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
BottomHitDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
37
|
-
BottomHitDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
36
|
+
BottomHitDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: BottomHitDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
37
|
+
BottomHitDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.3", type: BottomHitDirective, selector: "[ddrBottomHit]", outputs: { onWindowBottomHit: "onWindowBottomHit", onElementBottomHit: "onElementBottomHit" }, host: { listeners: { "scroll": "scrolled($event)", "window:scroll": "windowScrolled($event)" } }, ngImport: i0 });
|
|
38
38
|
__decorate([
|
|
39
39
|
Limit()
|
|
40
40
|
], BottomHitDirective.prototype, "scrolled", null);
|
|
41
41
|
__decorate([
|
|
42
42
|
Limit()
|
|
43
43
|
], BottomHitDirective.prototype, "windowScrolled", null);
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: BottomHitDirective, decorators: [{
|
|
45
45
|
type: Directive,
|
|
46
46
|
args: [{
|
|
47
47
|
selector: '[ddrBottomHit]'
|
|
@@ -27,9 +27,9 @@ export class ScrollService {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
31
|
-
ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
30
|
+
ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ScrollService, deps: [{ token: i1.Router }, { token: i2.ViewportScroller }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
31
|
+
ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ScrollService, providedIn: 'root' });
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ScrollService, decorators: [{
|
|
33
33
|
type: Injectable,
|
|
34
34
|
args: [{
|
|
35
35
|
providedIn: 'root'
|
|
@@ -10,9 +10,9 @@ export class VisibilityService {
|
|
|
10
10
|
return this.visibility$;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
VisibilityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
14
|
-
VisibilityService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
13
|
+
VisibilityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: VisibilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
14
|
+
VisibilityService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: VisibilityService, providedIn: 'root' });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: VisibilityService, decorators: [{
|
|
16
16
|
type: Injectable,
|
|
17
17
|
args: [{ providedIn: 'root' }]
|
|
18
18
|
}], ctorParameters: function () { return []; } });
|