@odx/auth 7.0.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +16 -10
- package/esm2022/index.mjs +2 -1
- package/esm2022/lib/auth.config.mjs +6 -23
- package/esm2022/lib/auth.guard.mjs +10 -3
- package/esm2022/lib/auth.i18n.mjs +1 -1
- package/esm2022/lib/auth.interceptor.mjs +15 -0
- package/esm2022/lib/auth.logger.mjs +3 -0
- package/esm2022/lib/auth.providers.mjs +53 -36
- package/esm2022/lib/auth.service.mjs +27 -15
- package/esm2022/lib/auth.typings.mjs +1 -1
- package/esm2022/lib/components/auth-loading-screen/auth-loading-screen.component.mjs +6 -6
- package/esm2022/lib/helpers/create-auth-host-url.mjs +6 -0
- package/esm2022/lib/helpers/index.mjs +4 -1
- package/esm2022/lib/helpers/set-http-auth-header.mjs +13 -0
- package/esm2022/lib/helpers/user-language-loader.mjs +10 -0
- package/esm2022/lib/models/auth-environment.mjs +3 -2
- package/esm2022/lib/models/auth-http-cache.mjs +19 -23
- package/esm2022/lib/models/auth-plugin-manager.mjs +14 -9
- package/esm2022/lib/plugins/core-debug.plugin.mjs +20 -0
- package/esm2022/lib/plugins/index.mjs +2 -1
- package/esm2022/lib/plugins/user-profile-link.plugin.mjs +3 -3
- package/esm2022/lib/unauth.guard.mjs +10 -3
- package/esm2022/plugins/service-connect/index.mjs +2 -2
- package/esm2022/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.mjs +2 -0
- package/esm2022/plugins/service-connect/lib/dtos/index.mjs +2 -1
- package/esm2022/plugins/service-connect/lib/service-connect-rights.guard.mjs +3 -3
- package/esm2022/plugins/service-connect/lib/service-connect-rights.plugin.mjs +1 -2
- package/esm2022/plugins/service-connect/lib/service-connect-user-language.plugin.mjs +8 -0
- package/esm2022/plugins/service-connect/lib/service-connect.config.mjs +6 -4
- package/fesm2022/odx-auth-plugins-service-connect.mjs +15 -9
- package/fesm2022/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2022/odx-auth.mjs +308 -240
- package/fesm2022/odx-auth.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/auth.config.d.ts +11 -10
- package/lib/auth.guard.d.ts +1 -1
- package/lib/auth.i18n.d.ts +2 -2
- package/lib/auth.interceptor.d.ts +2 -0
- package/lib/auth.logger.d.ts +3 -0
- package/lib/auth.providers.d.ts +7 -4
- package/lib/auth.service.d.ts +6 -2
- package/lib/auth.typings.d.ts +1 -1
- package/lib/helpers/create-auth-host-url.d.ts +2 -0
- package/lib/helpers/index.d.ts +3 -0
- package/lib/helpers/set-http-auth-header.d.ts +2 -0
- package/lib/helpers/user-language-loader.d.ts +4 -0
- package/lib/models/auth-environment.d.ts +6 -1
- package/lib/models/auth-http-cache.d.ts +3 -1
- package/lib/models/auth-plugin-manager.d.ts +2 -0
- package/lib/plugins/core-debug.plugin.d.ts +2 -0
- package/lib/plugins/index.d.ts +1 -0
- package/lib/unauth.guard.d.ts +1 -1
- package/package.json +2 -2
- package/plugins/service-connect/index.d.ts +1 -1
- package/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.d.ts +3 -0
- package/plugins/service-connect/lib/dtos/index.d.ts +1 -0
- package/plugins/service-connect/lib/service-connect-rights.guard.d.ts +1 -1
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +8 -1
- package/plugins/service-connect/lib/service-connect-user-language.plugin.d.ts +1 -0
- package/plugins/service-connect/lib/service-connect.config.d.ts +1 -0
- package/esm2022/plugins/service-connect/lib/service-connect.typings.mjs +0 -2
- package/plugins/service-connect/lib/service-connect.typings.d.ts +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @odx/auth
|
|
2
2
|
|
|
3
|
+
## 8.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 106b206: Add ability for guards to redirect to external URL
|
|
8
|
+
|
|
9
|
+
Add `userLanguageLoader` to load the active language from identity claims
|
|
10
|
+
|
|
11
|
+
Add new config option to enable debug information
|
|
12
|
+
|
|
13
|
+
Add new config option to enforce sign in for requests made to a protected URL
|
|
14
|
+
|
|
15
|
+
Add new config option to configure a global auth plugin timeout
|
|
16
|
+
|
|
17
|
+
Add new config option to set the time the intercetpor waits for an access token in milliseconds
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- a553e2c: Replace the external library intercetor with own interceptor implementation to ensure a valid access token is send
|
|
22
|
+
- Updated dependencies [fe51ce2]
|
|
23
|
+
- Updated dependencies [3d72124]
|
|
24
|
+
- @odx/angular@5.0.0
|
|
25
|
+
|
|
3
26
|
## 7.0.0
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @odx/auth
|
|
2
2
|
|
|
3
|
-
[<img src="https://img.shields.io/npm/v/@odx/
|
|
3
|
+
[<img src="https://img.shields.io/npm/v/@odx/auth" />](https://npmjs.org/package/@odx/auth)
|
|
4
4
|
[<img src="https://img.shields.io/npm/dependency-version/@odx/auth/peer/@odx/angular" />](https://npmjs.org/package/@odx/angular)
|
|
5
5
|
|
|
6
6
|
### Install 🚀
|
|
@@ -41,24 +41,30 @@ The configuration object has the following interface:
|
|
|
41
41
|
interface AuthConfig {
|
|
42
42
|
environment: AuthEnvironment;
|
|
43
43
|
clientId: string;
|
|
44
|
-
issuer
|
|
44
|
+
issuer?: string;
|
|
45
45
|
redirectPath: string;
|
|
46
46
|
allowedUrls: Array<string | RegExp>;
|
|
47
47
|
timeoutFactor: number;
|
|
48
48
|
maxOfflineTime: number;
|
|
49
49
|
loadUserProfile: boolean;
|
|
50
|
-
postLogoutRedirectUrl
|
|
51
|
-
scopes
|
|
52
|
-
discoveryUrl
|
|
50
|
+
postLogoutRedirectUrl?: string;
|
|
51
|
+
scopes?: string[];
|
|
52
|
+
discoveryUrl?: string;
|
|
53
53
|
errorHandler: AuthErrorHandlerFn;
|
|
54
54
|
createInitials: CreateInitialsFn;
|
|
55
55
|
resolveEmail: ResolveEmailFn;
|
|
56
56
|
resolveUsername: ResolveUsernameFn;
|
|
57
|
-
storage
|
|
57
|
+
storage?: OAuthStorage;
|
|
58
58
|
plugins: AuthPluginFactory[];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
defaultAuthorizedHandler?: AuthorizedHandler | null;
|
|
60
|
+
enableLoadingScreen: boolean;
|
|
61
|
+
refreshTokenOnInit?: boolean;
|
|
62
|
+
loadingScreenMessage?: DynamicTextContent | null;
|
|
63
|
+
userProfileUrl?: string;
|
|
64
|
+
requireSignIn?: boolean;
|
|
65
|
+
requireSignInForRequests?: boolean;
|
|
66
|
+
waitForTokenInMs?: number;
|
|
67
|
+
showDebugInformation?: boolean;
|
|
62
68
|
}
|
|
63
69
|
```
|
|
64
70
|
|
|
@@ -72,4 +78,4 @@ In order to add the UI for signing in and out, add the `odx-auth` component to t
|
|
|
72
78
|
</odx-header>
|
|
73
79
|
```
|
|
74
80
|
|
|
75
|
-
> Use the `
|
|
81
|
+
> Use the `LocalizationService.setLanguage` method from **`@odx/angular/localization`** to change the language.
|
package/esm2022/index.mjs
CHANGED
|
@@ -2,6 +2,7 @@ export * from './lib/auth.component';
|
|
|
2
2
|
export * from './lib/auth.config';
|
|
3
3
|
export * from './lib/auth.directive';
|
|
4
4
|
export * from './lib/auth.guard';
|
|
5
|
+
export * from './lib/auth.interceptor';
|
|
5
6
|
export * from './lib/auth.module';
|
|
6
7
|
export * from './lib/auth.providers';
|
|
7
8
|
export * from './lib/auth.service';
|
|
@@ -12,4 +13,4 @@ export * from './lib/helpers';
|
|
|
12
13
|
export * from './lib/models';
|
|
13
14
|
export * from './lib/plugins';
|
|
14
15
|
export * from './lib/unauth.guard';
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgucHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnR5cGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BsdWdpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdW5hdXRoLmd1YXJkJztcbiJdfQ==
|
|
@@ -1,33 +1,17 @@
|
|
|
1
|
-
import { inject, InjectionToken } from '@angular/core';
|
|
2
1
|
import { createConfigTokens } from '@odx/angular/utils';
|
|
3
2
|
import { createInitials, resolveEmail, resolveUsername } from './helpers';
|
|
4
|
-
export const
|
|
5
|
-
export const
|
|
3
|
+
export const AUTH_HTTP_HEADER = 'Authorization';
|
|
4
|
+
export const ODX_AUTH_DEFAULT_SCOPES = ['openid', 'profile', 'email', 'offline_access'];
|
|
5
|
+
export const ODX_AUTH_HOSTS = {
|
|
6
6
|
dev: 'https://dev.login.draeger.com',
|
|
7
7
|
stage: 'https://test.login.draeger.com',
|
|
8
8
|
prod: 'https://login.draeger.com',
|
|
9
9
|
};
|
|
10
|
-
export const
|
|
10
|
+
export const ODX_AUTH_USER_PROFILE_HOSTS = {
|
|
11
11
|
dev: 'https://lemon-ocean-04a922703.3.azurestaticapps.net',
|
|
12
12
|
stage: 'https://purple-cliff-0e61c5703.3.azurestaticapps.net',
|
|
13
13
|
prod: 'https://id.draeger.com',
|
|
14
14
|
};
|
|
15
|
-
export const ODX_AUTH_CORE_PLUGINS = new InjectionToken('@odx/auth::CorePlugins', {
|
|
16
|
-
providedIn: 'root',
|
|
17
|
-
factory: () => [],
|
|
18
|
-
});
|
|
19
|
-
export const ODX_AUTH_ERROR_HANDLERS = new InjectionToken('@odx/auth::ErrorHandlers', {
|
|
20
|
-
providedIn: 'root',
|
|
21
|
-
factory: () => [],
|
|
22
|
-
});
|
|
23
|
-
export const ODX_AUTH_PLUGINS = new InjectionToken('@odx/auth::Plugins', {
|
|
24
|
-
providedIn: 'root',
|
|
25
|
-
factory: () => {
|
|
26
|
-
const { plugins } = injectAuthConfig();
|
|
27
|
-
const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);
|
|
28
|
-
return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
15
|
export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {
|
|
32
16
|
environment: 'prod',
|
|
33
17
|
redirectPath: 'login/callback',
|
|
@@ -45,7 +29,6 @@ export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfi
|
|
|
45
29
|
defaultAuthorizedHandler: null,
|
|
46
30
|
enableLoadingScreen: true,
|
|
47
31
|
loadingScreenMessage: null,
|
|
48
|
-
|
|
49
|
-
requireSignIn: false,
|
|
32
|
+
waitForTokenInMs: 1000,
|
|
50
33
|
});
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW9DO0lBQzdELEdBQUcsRUFBRSwrQkFBK0I7SUFDcEMsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxJQUFJLEVBQUUsMkJBQTJCO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBb0M7SUFDMUUsR0FBRyxFQUFFLHFEQUFxRDtJQUMxRCxLQUFLLEVBQUUsc0RBQXNEO0lBQzdELElBQUksRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQztBQXFDRixNQUFNLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7SUFDNUgsV0FBVyxFQUFFLE1BQU07SUFDbkIsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDNUIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsY0FBYztJQUNkLFlBQVk7SUFDWixlQUFlO0lBQ2YsT0FBTyxFQUFFLEVBQUU7SUFDWCx3QkFBd0IsRUFBRSxJQUFJO0lBQzlCLG1CQUFtQixFQUFFLElBQUk7SUFDekIsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixnQkFBZ0IsRUFBRSxJQUFJO0NBQ1QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHluYW1pY1RleHRDb250ZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9keW5hbWljLXZpZXcnO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCwgT0F1dGhTdG9yYWdlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBjcmVhdGVJbml0aWFscywgcmVzb2x2ZUVtYWlsLCByZXNvbHZlVXNlcm5hbWUgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBBdXRoRW52aXJvbm1lbnQsIEF1dGhvcml6ZWRIYW5kbGVyLCBBdXRoUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEFVVEhfSFRUUF9IRUFERVIgPSAnQXV0aG9yaXphdGlvbic7XG5leHBvcnQgY29uc3QgT0RYX0FVVEhfREVGQVVMVF9TQ09QRVMgPSBbJ29wZW5pZCcsICdwcm9maWxlJywgJ2VtYWlsJywgJ29mZmxpbmVfYWNjZXNzJ107XG5leHBvcnQgY29uc3QgT0RYX0FVVEhfSE9TVFM6IFJlY29yZDxBdXRoRW52aXJvbm1lbnQsIHN0cmluZz4gPSB7XG4gIGRldjogJ2h0dHBzOi8vZGV2LmxvZ2luLmRyYWVnZXIuY29tJyxcbiAgc3RhZ2U6ICdodHRwczovL3Rlc3QubG9naW4uZHJhZWdlci5jb20nLFxuICBwcm9kOiAnaHR0cHM6Ly9sb2dpbi5kcmFlZ2VyLmNvbScsXG59O1xuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX1VTRVJfUFJPRklMRV9IT1NUUzogUmVjb3JkPEF1dGhFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9sZW1vbi1vY2Vhbi0wNGE5MjI3MDMuMy5henVyZXN0YXRpY2FwcHMubmV0JyxcbiAgc3RhZ2U6ICdodHRwczovL3B1cnBsZS1jbGlmZi0wZTYxYzU3MDMuMy5henVyZXN0YXRpY2FwcHMubmV0JyxcbiAgcHJvZDogJ2h0dHBzOi8vaWQuZHJhZWdlci5jb20nLFxufTtcblxuZXhwb3J0IHR5cGUgQXV0aEVycm9ySGFuZGxlckZuID0gKGVycm9yOiBPQXV0aEVycm9yRXZlbnQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBSZXNvbHZlVXNlcm5hbWVGbiA9IChyYXdDbGFpbXM6IE9keEF1dGguUmF3SWRlbnRpdHlDbGFpbXMpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIFJlc29sdmVFbWFpbEZuID0gKHJhd0NsYWltczogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcykgPT4gc3RyaW5nO1xuZXhwb3J0IHR5cGUgQ3JlYXRlSW5pdGlhbHNGbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIGVudmlyb25tZW50OiBBdXRoRW52aXJvbm1lbnQ7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIHJlZGlyZWN0UGF0aDogc3RyaW5nO1xuICBhbGxvd2VkVXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgdGltZW91dEZhY3RvcjogbnVtYmVyO1xuICBtYXhPZmZsaW5lVGltZTogbnVtYmVyO1xuICBsb2FkVXNlclByb2ZpbGU6IGJvb2xlYW47XG4gIHBvc3RMb2dvdXRSZWRpcmVjdFVybD86IHN0cmluZztcbiAgc2NvcGVzPzogc3RyaW5nW107XG4gIGRpc2NvdmVyeVVybD86IHN0cmluZztcbiAgZXJyb3JIYW5kbGVyOiBBdXRoRXJyb3JIYW5kbGVyRm47XG4gIGNyZWF0ZUluaXRpYWxzOiBDcmVhdGVJbml0aWFsc0ZuO1xuICByZXNvbHZlRW1haWw6IFJlc29sdmVFbWFpbEZuO1xuICByZXNvbHZlVXNlcm5hbWU6IFJlc29sdmVVc2VybmFtZUZuO1xuICBzdG9yYWdlPzogT0F1dGhTdG9yYWdlO1xuICBwbHVnaW5zOiBBdXRoUGx1Z2luRmFjdG9yeVtdO1xuICBkZWZhdWx0QXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGw7XG4gIGVuYWJsZUxvYWRpbmdTY3JlZW46IGJvb2xlYW47XG4gIHJlZnJlc2hUb2tlbk9uSW5pdD86IGJvb2xlYW47XG4gIGxvYWRpbmdTY3JlZW5NZXNzYWdlPzogRHluYW1pY1RleHRDb250ZW50IHwgbnVsbDtcbiAgdXNlclByb2ZpbGVVcmw/OiBzdHJpbmc7XG4gIHJlcXVpcmVTaWduSW4/OiBib29sZWFuO1xuICByZXF1aXJlU2lnbkluRm9yUmVxdWVzdHM/OiBib29sZWFuO1xuICB3YWl0Rm9yVG9rZW5Jbk1zPzogbnVtYmVyO1xuICBzaG93RGVidWdJbmZvcm1hdGlvbj86IGJvb2xlYW47XG4gIHBsdWdpblRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCB7IEF1dGhEZWZhdWx0Q29uZmlnLCBBdXRoQ29uZmlnLCBpbmplY3RBdXRoQ29uZmlnLCBwcm92aWRlQXV0aENvbmZpZyB9ID0gY3JlYXRlQ29uZmlnVG9rZW5zKCdBdXRoJywgJ0BvZHgvYXV0aCcsIHtcbiAgZW52aXJvbm1lbnQ6ICdwcm9kJyxcbiAgcmVkaXJlY3RQYXRoOiAnbG9naW4vY2FsbGJhY2snLFxuICBhbGxvd2VkVXJsczogW10sXG4gIHRpbWVvdXRGYWN0b3I6IDAuNzUsXG4gIG1heE9mZmxpbmVUaW1lOiAyNCAqIDYwICogNjAsIC8vIDEgZGF5XG4gIGxvYWRVc2VyUHJvZmlsZTogZmFsc2UsXG4gIGVycm9ySGFuZGxlcjogKGVycm9yKSA9PiB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0sXG4gIGNyZWF0ZUluaXRpYWxzLFxuICByZXNvbHZlRW1haWwsXG4gIHJlc29sdmVVc2VybmFtZSxcbiAgcGx1Z2luczogW10sXG4gIGRlZmF1bHRBdXRob3JpemVkSGFuZGxlcjogbnVsbCxcbiAgZW5hYmxlTG9hZGluZ1NjcmVlbjogdHJ1ZSxcbiAgbG9hZGluZ1NjcmVlbk1lc3NhZ2U6IG51bGwsXG4gIHdhaXRGb3JUb2tlbkluTXM6IDEwMDAsXG59IGFzIEF1dGhDb25maWcpO1xuIl19
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { Router } from '@angular/router';
|
|
3
|
+
import { WindowRef } from '@odx/angular';
|
|
3
4
|
import { isString } from '@odx/angular/utils';
|
|
4
5
|
import { EMPTY, of, switchMap, take, tap } from 'rxjs';
|
|
5
6
|
import { AuthService } from './auth.service';
|
|
6
7
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
-
export function authGuard(authorizedHandler, redirectTo) {
|
|
8
|
+
export function authGuard(authorizedHandler, redirectTo, isExternal = false) {
|
|
8
9
|
return (_, state) => {
|
|
9
10
|
const authService = inject(AuthService);
|
|
11
|
+
const windowRef = inject(WindowRef);
|
|
10
12
|
const router = inject(Router, { optional: true });
|
|
11
13
|
return authService.isAuthenticated$.pipe(switchMap((isAuthenticated) => {
|
|
12
14
|
if (!isAuthenticated) {
|
|
@@ -18,7 +20,12 @@ export function authGuard(authorizedHandler, redirectTo) {
|
|
|
18
20
|
if (isAuthorized || !router)
|
|
19
21
|
return;
|
|
20
22
|
if (isString(redirectTo)) {
|
|
21
|
-
|
|
23
|
+
if (isExternal) {
|
|
24
|
+
windowRef.location.assign(redirectTo);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
router.navigateByUrl(redirectTo);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
else if (Array.isArray(redirectTo)) {
|
|
24
31
|
router.navigate(redirectTo);
|
|
@@ -26,4 +33,4 @@ export function authGuard(authorizedHandler, redirectTo) {
|
|
|
26
33
|
}), take(1));
|
|
27
34
|
};
|
|
28
35
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3Qyw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxpQkFBcUMsRUFBRSxVQUEyQixFQUFFLFVBQVUsR0FBRyxLQUFLO0lBQzlHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbEQsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ25CLElBQUksWUFBWSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLFVBQVUsRUFBRTtvQkFDZCxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRU1QVFksIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBhdXRoR3VhcmQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciwgcmVkaXJlY3RUbz86IGFueVtdIHwgc3RyaW5nLCBpc0V4dGVybmFsID0gZmFsc2UpOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuIChfLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaXNBdXRoZW50aWNhdGVkKSA9PiB7XG4gICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgYXV0aFNlcnZpY2Uuc2lnbkluKHN0YXRlLnVybCk7XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKGF1dGhTZXJ2aWNlLmlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcikpO1xuICAgICAgfSksXG4gICAgICB0YXAoKGlzQXV0aG9yaXplZCkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRob3JpemVkIHx8ICFyb3V0ZXIpIHJldHVybjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgaWYgKGlzRXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RUbyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJlZGlyZWN0VG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0VG8pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -10,4 +10,4 @@ export default {
|
|
|
10
10
|
signOutButtonText: 'Ausloggen',
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pMThuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7SUFDYixFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsWUFBWTtRQUM3QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLGlCQUFpQixFQUFFLFVBQVU7S0FDOUI7SUFDRCxFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsYUFBYTtRQUM5QixnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLGlCQUFpQixFQUFFLFdBQVc7S0FDL0I7Q0FDbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0aW9uT2JqZWN0IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW46IHtcbiAgICB1c2VyUHJvZmlsZUxpbms6ICdNeSBwcm9maWxlJyxcbiAgICBzaWduSW5CdXR0b25UZXh0OiAnU2lnbiBpbicsXG4gICAgc2lnbk91dEJ1dHRvblRleHQ6ICdTaWduIG91dCcsXG4gIH0sXG4gIGRlOiB7XG4gICAgdXNlclByb2ZpbGVMaW5rOiAnTWVpbiBQcm9maWwnLFxuICAgIHNpZ25JbkJ1dHRvblRleHQ6ICdFaW5sb2dnZW4nLFxuICAgIHNpZ25PdXRCdXR0b25UZXh0OiAnQXVzbG9nZ2VuJyxcbiAgfSxcbn0gYXMgVHJhbnNsYXRpb25PYmplY3Q7XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { matchUrl } from '@odx/angular/utils';
|
|
3
|
+
import { mergeMap } from 'rxjs';
|
|
4
|
+
import { injectAuthConfig } from './auth.config';
|
|
5
|
+
import { AuthService } from './auth.service';
|
|
6
|
+
export const authInterceptor = (req, next) => {
|
|
7
|
+
const { allowedUrls, requireSignInForRequests } = injectAuthConfig();
|
|
8
|
+
const isUrlAllowed = allowedUrls.some((allowedUrl) => matchUrl(req.url, allowedUrl));
|
|
9
|
+
if (!isUrlAllowed) {
|
|
10
|
+
return next(req);
|
|
11
|
+
}
|
|
12
|
+
const authService = inject(AuthService);
|
|
13
|
+
return authService.prepareAuthRequest$(req, requireSignInForRequests).pipe(mergeMap(next));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyRixJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWF0Y2hVcmwgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdEF1dGhDb25maWcgfSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcbiAgY29uc3QgeyBhbGxvd2VkVXJscywgcmVxdWlyZVNpZ25JbkZvclJlcXVlc3RzIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gIGNvbnN0IGlzVXJsQWxsb3dlZCA9IGFsbG93ZWRVcmxzLnNvbWUoKGFsbG93ZWRVcmwpID0+IG1hdGNoVXJsKHJlcS51cmwsIGFsbG93ZWRVcmwpKTtcbiAgaWYgKCFpc1VybEFsbG93ZWQpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblxuICByZXR1cm4gYXV0aFNlcnZpY2UucHJlcGFyZUF1dGhSZXF1ZXN0JChyZXEsIHJlcXVpcmVTaWduSW5Gb3JSZXF1ZXN0cykucGlwZShtZXJnZU1hcChuZXh0KSk7XG59O1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Logger } from '@odx/angular/internal';
|
|
2
|
+
export default new Logger('@odx/auth');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsZUFBZSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMb2dnZXIoJ0BvZHgvYXV0aCcpO1xuIl19
|
|
@@ -1,23 +1,54 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { provideHttpClient, withInterceptors } from '@angular/common/http';
|
|
2
|
+
import { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, InjectionToken, inject, makeEnvironmentProviders } from '@angular/core';
|
|
2
3
|
import { WindowRef } from '@odx/angular';
|
|
3
4
|
import { DynamicViewService } from '@odx/angular/cdk/dynamic-view';
|
|
4
|
-
import { buildUrl
|
|
5
|
-
import {
|
|
5
|
+
import { buildUrl } from '@odx/angular/utils';
|
|
6
|
+
import { OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';
|
|
6
7
|
import { tap } from 'rxjs';
|
|
7
|
-
import {
|
|
8
|
+
import { ODX_AUTH_DEFAULT_SCOPES, injectAuthConfig, provideAuthConfig } from './auth.config';
|
|
9
|
+
import { authInterceptor } from './auth.interceptor';
|
|
10
|
+
import logger from './auth.logger';
|
|
8
11
|
import { AuthService } from './auth.service';
|
|
9
12
|
import { AuthLoadingScreenComponent } from './components';
|
|
10
|
-
import { handleAuthError } from './helpers';
|
|
13
|
+
import { createAuthHostUrl, handleAuthError } from './helpers';
|
|
11
14
|
import { offlineAuthErrorHandler } from './models';
|
|
12
|
-
import { coreIdentityPlugin, userProfileUrlPlugin } from './plugins';
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
import { coreDebugPlugin, coreIdentityPlugin, userProfileUrlPlugin } from './plugins';
|
|
16
|
+
export const ODX_AUTH_ERROR_HANDLERS = new InjectionToken('@odx/auth::ErrorHandlers', {
|
|
17
|
+
providedIn: 'root',
|
|
18
|
+
factory: () => {
|
|
19
|
+
const { errorHandler } = injectAuthConfig();
|
|
20
|
+
return [offlineAuthErrorHandler, errorHandler];
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export const ODX_AUTH_CORE_PLUGINS = new InjectionToken('@odx/auth::CorePlugins', {
|
|
24
|
+
providedIn: 'root',
|
|
25
|
+
factory: () => {
|
|
26
|
+
const { showDebugInformation } = injectAuthConfig();
|
|
27
|
+
const plugins = [coreIdentityPlugin, userProfileUrlPlugin];
|
|
28
|
+
if (showDebugInformation) {
|
|
29
|
+
plugins.push(coreDebugPlugin);
|
|
30
|
+
}
|
|
31
|
+
return plugins;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
export const ODX_AUTH_PLUGINS = new InjectionToken('@odx/auth::Plugins', {
|
|
35
|
+
providedIn: 'root',
|
|
36
|
+
factory: () => {
|
|
37
|
+
const { plugins } = injectAuthConfig();
|
|
38
|
+
const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);
|
|
39
|
+
return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
export function provideAuthLogger() {
|
|
16
43
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
44
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
45
|
+
useFactory: () => {
|
|
46
|
+
const { showDebugInformation } = injectAuthConfig();
|
|
47
|
+
if (!showDebugInformation)
|
|
48
|
+
logger.disable();
|
|
49
|
+
return () => void 0;
|
|
20
50
|
},
|
|
51
|
+
multi: true,
|
|
21
52
|
};
|
|
22
53
|
}
|
|
23
54
|
export function initializeAuthErrorHandlers() {
|
|
@@ -28,41 +59,31 @@ export function initializeAuthErrorHandlers() {
|
|
|
28
59
|
export function initalizeAuthConfig() {
|
|
29
60
|
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl, enableLoadingScreen } = injectAuthConfig();
|
|
30
61
|
const authService = inject(AuthService);
|
|
31
|
-
const
|
|
32
|
-
const scope = Array.from(new Set(
|
|
62
|
+
const redirectUri = buildUrl(inject(WindowRef).getOrigin(), redirectPath);
|
|
63
|
+
const scope = Array.from(new Set(ODX_AUTH_DEFAULT_SCOPES.concat(scopes ?? []))).join(' ');
|
|
33
64
|
if (enableLoadingScreen) {
|
|
34
65
|
AuthLoadingScreenComponent.initialize(authService, inject(DynamicViewService));
|
|
35
66
|
}
|
|
36
67
|
return () => authService.initialize({
|
|
37
68
|
clientId,
|
|
38
|
-
issuer: issuer ??
|
|
69
|
+
issuer: issuer ?? createAuthHostUrl(environment, 'oauth2/default'),
|
|
39
70
|
scope,
|
|
40
|
-
redirectUri
|
|
71
|
+
redirectUri,
|
|
41
72
|
postLogoutRedirectUri: postLogoutRedirectUrl,
|
|
42
73
|
preserveRequestedRoute: true,
|
|
43
74
|
strictDiscoveryDocumentValidation: !discoveryUrl,
|
|
44
75
|
responseType: 'code',
|
|
45
|
-
showDebugInformation:
|
|
76
|
+
showDebugInformation: false,
|
|
46
77
|
timeoutFactor,
|
|
78
|
+
waitForTokenInMsec: 1000,
|
|
47
79
|
});
|
|
48
80
|
}
|
|
49
81
|
export function provideAuth(config) {
|
|
50
82
|
return makeEnvironmentProviders([
|
|
51
83
|
provideAuthConfig(config),
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
useFactory: configureInterceptor,
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
59
|
-
useValue: initializeAuthErrorHandlers,
|
|
60
|
-
multi: true,
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
provide: ODX_AUTH_ERROR_HANDLERS,
|
|
64
|
-
useFactory: () => [offlineAuthErrorHandler, injectAuthConfig().errorHandler],
|
|
65
|
-
},
|
|
84
|
+
provideAuthLogger(),
|
|
85
|
+
provideOAuthClient({ resourceServer: { sendAccessToken: false, allowedUrls: [] } }),
|
|
86
|
+
provideHttpClient(withInterceptors([authInterceptor])),
|
|
66
87
|
{
|
|
67
88
|
provide: APP_INITIALIZER,
|
|
68
89
|
useFactory: initalizeAuthConfig,
|
|
@@ -72,10 +93,6 @@ export function provideAuth(config) {
|
|
|
72
93
|
provide: OAuthStorage,
|
|
73
94
|
useFactory: () => injectAuthConfig().storage ?? inject(WindowRef).nativeWindow.localStorage,
|
|
74
95
|
},
|
|
75
|
-
{
|
|
76
|
-
provide: ODX_AUTH_CORE_PLUGINS,
|
|
77
|
-
useValue: [coreIdentityPlugin, userProfileUrlPlugin],
|
|
78
|
-
},
|
|
79
96
|
]);
|
|
80
97
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEVBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLFFBQVEsRUFBc0MsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekIsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRW5FLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsV0FBVyxD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VSxFQUFFLG1CQUFtQjtZQUMvQixLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZO1NBQzVGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLFFBQVEsRUFBRSxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDO1NBQ3JEO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQUF9JTklUSUFMSVpFUixcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBpbmplY3QsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V2luZG93UmVmfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHtEeW5hbWljVmlld1NlcnZpY2V9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7YnVpbGRVcmwsIENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGlzU3RyaW5nfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHtPQXV0aE1vZHVsZUNvbmZpZywgT0F1dGhTdG9yYWdlLCBwcm92aWRlT0F1dGhDbGllbnR9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXV0aENvbmZpZyxcbiAgREVGQVVMVF9BVVRIX1NDT1BFUyxcbiAgREVGQVVMVF9PS1RBX1VSTFMsXG4gIGluamVjdEF1dGhDb25maWcsXG4gIE9EWF9BVVRIX0NPUkVfUExVR0lOUyxcbiAgT0RYX0FVVEhfRVJST1JfSEFORExFUlMsXG4gIHByb3ZpZGVBdXRoQ29uZmlnLFxufSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aExvYWRpbmdTY3JlZW5Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQge2hhbmRsZUF1dGhFcnJvcn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7b2ZmbGluZUF1dGhFcnJvckhhbmRsZXJ9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7Y29yZUlkZW50aXR5UGx1Z2luLCB1c2VyUHJvZmlsZVVybFBsdWdpbn0gZnJvbSAnLi9wbHVnaW5zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUludGVyY2VwdG9yKCk6IE9BdXRoTW9kdWxlQ29uZmlnIHtcbiAgY29uc3Qge2FsbG93ZWRVcmxzfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgY29uc3QgdXJscyA9IGFsbG93ZWRVcmxzLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4ge1xuICAgIHJlc291cmNlU2VydmVyOiB7XG4gICAgICBjdXN0b21VcmxWYWxpZGF0aW9uOiAodXJsKSA9PiB1cmxzLnNvbWUoKGFsbG93ZWRVcmwpID0+IChpc1N0cmluZyhhbGxvd2VkVXJsKSA/IHVybC5zdGFydHNXaXRoKGFsbG93ZWRVcmwpIDogISF1cmwubWF0Y2goYWxsb3dlZFVybCkpKSxcbiAgICAgIHNlbmRBY2Nlc3NUb2tlbjogdHJ1ZSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUF1dGhFcnJvckhhbmRsZXJzKCk6IHZvaWQge1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVBdXRoRXJyb3IoaW5qZWN0KE9EWF9BVVRIX0VSUk9SX0hBTkRMRVJTKSk7XG5cbiAgYXV0aFNlcnZpY2UuZXJyb3JzJC5waXBlKHRhcCgoZXJyb3IpID0+IGhhbmRsZXIoZXJyb3IpKSkuc3Vic2NyaWJlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0YWxpemVBdXRoQ29uZmlnKCk6ICgpID0+IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgY2xpZW50SWQsXG4gICAgc2NvcGVzLFxuICAgIHJlZGlyZWN0UGF0aCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgaXNzdWVyLFxuICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgZGlzY292ZXJ5VXJsLFxuICAgIGVuYWJsZUxvYWRpbmdTY3JlZW5cbiAgfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCBvcmlnaW4gPSBpbmplY3QoV2luZG93UmVmKS5nZXRPcmlnaW4oKTtcbiAgY29uc3Qgc2NvcGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoREVGQVVMVF9BVVRIX1NDT1BFUy5jb25jYXQoc2NvcGVzID8/IFtdKSkpLmpvaW4oJyAnKTtcbiAgaWYgKGVuYWJsZUxvYWRpbmdTY3JlZW4pIHtcbiAgICBBdXRoTG9hZGluZ1NjcmVlbkNvbXBvbmVudC5pbml0aWFsaXplKGF1dGhTZXJ2aWNlLCBpbmplY3QoRHluYW1pY1ZpZXdTZXJ2aWNlKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+XG4gICAgYXV0aFNlcnZpY2UuaW5pdGlhbGl6ZSh7XG4gICAgICBjbGllbnRJZCxcbiAgICAgIGlzc3VlcjogaXNzdWVyID8/IGAke0RFRkFVTFRfT0tUQV9VUkxTW2Vudmlyb25tZW50XX0vb2F1dGgyL2RlZmF1bHRgLFxuICAgICAgc2NvcGUsXG4gICAgICByZWRpcmVjdFVyaTogYnVpbGRVcmwob3JpZ2luLCByZWRpcmVjdFBhdGgpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZW52aXJvbm1lbnQgPT09ICdkZXYnLFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoPEQgZXh0ZW5kcyBDb25maWdEZXBlbmRlbmNpZXM+KGNvbmZpZzogQ29uZmlnUHJvdmlkZXI8UGFydGlhbDxBdXRoQ29uZmlnPiwgRD4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHByb3ZpZGVBdXRoQ29uZmlnKGNvbmZpZyksXG4gICAgcHJvdmlkZU9BdXRoQ2xpZW50KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhNb2R1bGVDb25maWcsXG4gICAgICB1c2VGYWN0b3J5OiBjb25maWd1cmVJbnRlcmNlcHRvcixcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlVmFsdWU6IGluaXRpYWxpemVBdXRoRXJyb3JIYW5kbGVycyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0RYX0FVVEhfRVJST1JfSEFORExFUlMsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBbb2ZmbGluZUF1dGhFcnJvckhhbmRsZXIsIGluamVjdEF1dGhDb25maWcoKS5lcnJvckhhbmRsZXJdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogaW5pdGFsaXplQXV0aENvbmZpZyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhTdG9yYWdlLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gaW5qZWN0QXV0aENvbmZpZygpLnN0b3JhZ2UgPz8gaW5qZWN0KFdpbmRvd1JlZikubmF0aXZlV2luZG93LmxvY2FsU3RvcmFnZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9EWF9BVVRIX0NPUkVfUExVR0lOUyxcbiAgICAgIHVzZVZhbHVlOiBbY29yZUlkZW50aXR5UGx1Z2luLCB1c2VyUHJvZmlsZVVybFBsdWdpbl0sXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUF3QixjQUFjLEVBQVksTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFzQyxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQWtDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBaUMsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FB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QUFZO1NBQzVGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIEluamVjdGlvblRva2VuLCBQcm92aWRlciwgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBEeW5hbWljVmlld1NlcnZpY2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2R5bmFtaWMtdmlldyc7XG5pbXBvcnQgeyBDb25maWdEZXBlbmRlbmNpZXMsIENvbmZpZ1Byb3ZpZGVyLCBidWlsZFVybCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPQXV0aFN0b3JhZ2UsIHByb3ZpZGVPQXV0aENsaWVudCB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBBdXRoRXJyb3JIYW5kbGVyRm4sIE9EWF9BVVRIX0RFRkFVTFRfU0NPUEVTLCBpbmplY3RBdXRoQ29uZmlnLCBwcm92aWRlQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgYXV0aEludGVyY2VwdG9yIH0gZnJvbSAnLi9hdXRoLmludGVyY2VwdG9yJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9hdXRoLmxvZ2dlcic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhMb2FkaW5nU2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhIb3N0VXJsLCBoYW5kbGVBdXRoRXJyb3IgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQXV0aFBsdWdpbiwgQXV0aFBsdWdpbkZhY3RvcnksIG9mZmxpbmVBdXRoRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgY29yZURlYnVnUGx1Z2luLCBjb3JlSWRlbnRpdHlQbHVnaW4sIHVzZXJQcm9maWxlVXJsUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zJztcblxuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX0VSUk9SX0hBTkRMRVJTID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhFcnJvckhhbmRsZXJGbltdPignQG9keC9hdXRoOjpFcnJvckhhbmRsZXJzJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB7IGVycm9ySGFuZGxlciB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuXG4gICAgcmV0dXJuIFtvZmZsaW5lQXV0aEVycm9ySGFuZGxlciwgZXJyb3JIYW5kbGVyXTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgT0RYX0FVVEhfQ09SRV9QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhQbHVnaW5GYWN0b3J5W10+KCdAb2R4L2F1dGg6OkNvcmVQbHVnaW5zJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB7IHNob3dEZWJ1Z0luZm9ybWF0aW9uIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gICAgY29uc3QgcGx1Z2lucyA9IFtjb3JlSWRlbnRpdHlQbHVnaW4sIHVzZXJQcm9maWxlVXJsUGx1Z2luXTtcbiAgICBpZiAoc2hvd0RlYnVnSW5mb3JtYXRpb24pIHtcbiAgICAgIHBsdWdpbnMucHVzaChjb3JlRGVidWdQbHVnaW4pO1xuICAgIH1cblxuICAgIHJldHVybiBwbHVnaW5zO1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhQbHVnaW5bXT4oJ0BvZHgvYXV0aDo6UGx1Z2lucycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgY29uc3QgeyBwbHVnaW5zIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gICAgY29uc3QgY29yZVBsdWdpbnMgPSBpbmplY3QoT0RYX0FVVEhfQ09SRV9QTFVHSU5TKTtcblxuICAgIHJldHVybiBbLi4uY29yZVBsdWdpbnMsIC4uLnBsdWdpbnNdLm1hcCgocGx1Z2luRmFjdG9yeSkgPT4gcGx1Z2luRmFjdG9yeSgpKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dGhMb2dnZXIoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2hvd0RlYnVnSW5mb3JtYXRpb24gfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgICAgIGlmICghc2hvd0RlYnVnSW5mb3JtYXRpb24pIGxvZ2dlci5kaXNhYmxlKCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB2b2lkIDA7XG4gICAgfSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVBdXRoRXJyb3JIYW5kbGVycygpOiB2b2lkIHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCBoYW5kbGVyID0gaGFuZGxlQXV0aEVycm9yKGluamVjdChPRFhfQVVUSF9FUlJPUl9IQU5ETEVSUykpO1xuXG4gIGF1dGhTZXJ2aWNlLmVycm9ycyQucGlwZSh0YXAoKGVycm9yKSA9PiBoYW5kbGVyKGVycm9yKSkpLnN1YnNjcmliZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGFsaXplQXV0aENvbmZpZygpOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjbGllbnRJZCwgc2NvcGVzLCByZWRpcmVjdFBhdGgsIGVudmlyb25tZW50LCBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsIGlzc3VlciwgdGltZW91dEZhY3RvciwgZGlzY292ZXJ5VXJsLCBlbmFibGVMb2FkaW5nU2NyZWVuIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3QgcmVkaXJlY3RVcmkgPSBidWlsZFVybChpbmplY3QoV2luZG93UmVmKS5nZXRPcmlnaW4oKSwgcmVkaXJlY3RQYXRoKTtcbiAgY29uc3Qgc2NvcGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoT0RYX0FVVEhfREVGQVVMVF9TQ09QRVMuY29uY2F0KHNjb3BlcyA/PyBbXSkpKS5qb2luKCcgJyk7XG4gIGlmIChlbmFibGVMb2FkaW5nU2NyZWVuKSB7XG4gICAgQXV0aExvYWRpbmdTY3JlZW5Db21wb25lbnQuaW5pdGlhbGl6ZShhdXRoU2VydmljZSwgaW5qZWN0KER5bmFtaWNWaWV3U2VydmljZSkpO1xuICB9XG4gIHJldHVybiAoKSA9PlxuICAgIGF1dGhTZXJ2aWNlLmluaXRpYWxpemUoe1xuICAgICAgY2xpZW50SWQsXG4gICAgICBpc3N1ZXI6IGlzc3VlciA/PyBjcmVhdGVBdXRoSG9zdFVybChlbnZpcm9ubWVudCwgJ29hdXRoMi9kZWZhdWx0JyksXG4gICAgICBzY29wZSxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZmFsc2UsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgd2FpdEZvclRva2VuSW5Nc2VjOiAxMDAwLFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dGg8RCBleHRlbmRzIENvbmZpZ0RlcGVuZGVuY2llcz4oY29uZmlnOiBDb25maWdQcm92aWRlcjxQYXJ0aWFsPEF1dGhDb25maWc+LCBEPik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgcHJvdmlkZUF1dGhDb25maWcoY29uZmlnKSxcbiAgICBwcm92aWRlQXV0aExvZ2dlcigpLFxuICAgIHByb3ZpZGVPQXV0aENsaWVudCh7IHJlc291cmNlU2VydmVyOiB7IHNlbmRBY2Nlc3NUb2tlbjogZmFsc2UsIGFsbG93ZWRVcmxzOiBbXSB9IH0pLFxuICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2F1dGhJbnRlcmNlcHRvcl0pKSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiBpbml0YWxpemVBdXRoQ29uZmlnLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBPQXV0aFN0b3JhZ2UsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBpbmplY3RBdXRoQ29uZmlnKCkuc3RvcmFnZSA/PyBpbmplY3QoV2luZG93UmVmKS5uYXRpdmVXaW5kb3cubG9jYWxTdG9yYWdlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
-
import {
|
|
2
|
+
import { Injectable, inject } from '@angular/core';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
4
|
import { WindowRef } from '@odx/angular';
|
|
5
5
|
import { OAuthErrorEvent, OAuthService } from 'angular-oauth2-oidc';
|
|
6
6
|
import { deepmerge } from 'deepmerge-ts';
|
|
7
|
-
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap, tap, } from 'rxjs';
|
|
7
|
+
import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, of, share, shareReplay, startWith, switchMap, take, tap, timeout, } from 'rxjs';
|
|
8
8
|
import { injectAuthConfig } from './auth.config';
|
|
9
|
+
import { setHttpAuthHeader } from './helpers';
|
|
9
10
|
import { AuthPluginManager } from './models';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
export class AuthService {
|
|
@@ -23,10 +24,11 @@ export class AuthService {
|
|
|
23
24
|
this.isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());
|
|
24
25
|
this.isRedirecting$ = this.isRedirecting$$.pipe(distinctUntilChanged(), shareReplay({ refCount: true }));
|
|
25
26
|
this.isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());
|
|
26
|
-
this.isAuthenticated$ = this.isInitialized$.pipe(switchMap(() => this.authPluginManager.pluginsReady$), switchMap(() => this.onAuthStateChange$), map(() => this.isAuthenticated()), shareReplay({ refCount: true }));
|
|
27
|
+
this.isAuthenticated$ = this.isInitialized$.pipe(switchMap(() => this.authPluginManager.pluginsReady$), switchMap(() => this.onAuthStateChange$), map(() => this.isAuthenticated()), distinctUntilChanged(), shareReplay({ refCount: true }));
|
|
27
28
|
this.identityClaims$ = this.isAuthenticated$.pipe(map(() => this.getIdentityClaims()), shareReplay({ refCount: true }));
|
|
28
29
|
this.errors$ = this.oauthService.events.pipe(filter((event) => event instanceof OAuthErrorEvent), share());
|
|
29
|
-
this.
|
|
30
|
+
this.onTokenReceived$ = this.oauthService.events.pipe(filter((event) => event.type === 'token_received'), share());
|
|
31
|
+
this.runPlugins();
|
|
30
32
|
this.silentRefreshHandler$.subscribe();
|
|
31
33
|
}
|
|
32
34
|
async initialize(config) {
|
|
@@ -35,7 +37,9 @@ export class AuthService {
|
|
|
35
37
|
try {
|
|
36
38
|
await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);
|
|
37
39
|
await this.oauthService.tryLogin();
|
|
38
|
-
|
|
40
|
+
if (this.authConfig.refreshTokenOnInit) {
|
|
41
|
+
await this.tryRefreshToken();
|
|
42
|
+
}
|
|
39
43
|
}
|
|
40
44
|
catch (error) {
|
|
41
45
|
if (!(error instanceof HttpErrorResponse || error instanceof OAuthErrorEvent)) {
|
|
@@ -53,6 +57,9 @@ export class AuthService {
|
|
|
53
57
|
await this.tryLoadUserProfile();
|
|
54
58
|
await this.routeToRequestedUrl();
|
|
55
59
|
}
|
|
60
|
+
runPlugins() {
|
|
61
|
+
this.authPluginManager.runPlugins(this).subscribe();
|
|
62
|
+
}
|
|
56
63
|
getIssuer() {
|
|
57
64
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
58
65
|
return new URL(this.oauthService.issuer);
|
|
@@ -63,9 +70,6 @@ export class AuthService {
|
|
|
63
70
|
signOut(noRedirect) {
|
|
64
71
|
this.oauthService.logOut(noRedirect || !this.getAccessToken());
|
|
65
72
|
}
|
|
66
|
-
async loadUserProfile() {
|
|
67
|
-
await this.oauthService.loadUserProfile();
|
|
68
|
-
}
|
|
69
73
|
async refreshTokens() {
|
|
70
74
|
return this.oauthService.refreshToken();
|
|
71
75
|
}
|
|
@@ -101,6 +105,14 @@ export class AuthService {
|
|
|
101
105
|
isAuthorized$(authorizedHandler) {
|
|
102
106
|
return this.isAuthenticated$.pipe(map(() => this.isAuthorized(authorizedHandler)));
|
|
103
107
|
}
|
|
108
|
+
prepareAuthRequest$(req, requireSignIn = false) {
|
|
109
|
+
return this.waitForAccessToken$(requireSignIn).pipe(map((token) => setHttpAuthHeader(req, token)));
|
|
110
|
+
}
|
|
111
|
+
waitForAccessToken$(requireSignIn) {
|
|
112
|
+
const accessToken$ = of(this.getAccessToken()).pipe(filter((token) => !!token && this.isAuthenticated()));
|
|
113
|
+
const waitForAccessToken$ = this.onTokenReceived$.pipe(timeout(this.authConfig.waitForTokenInMs), catchError(async () => this.tryRefreshToken().catch(() => null)));
|
|
114
|
+
return this.isInitialized$.pipe(switchMap(() => merge(accessToken$, waitForAccessToken$)), take(1), map(() => this.getAccessToken()), tap((token) => !token && requireSignIn && this.signIn(this.windowRef.location.pathname)));
|
|
115
|
+
}
|
|
104
116
|
async routeToRequestedUrl() {
|
|
105
117
|
if (!this.oauthService.state || !this.oauthService.hasValidAccessToken())
|
|
106
118
|
return;
|
|
@@ -114,15 +126,15 @@ export class AuthService {
|
|
|
114
126
|
this.windowRef.location.assign(uri);
|
|
115
127
|
this.isRedirecting$$.next(true);
|
|
116
128
|
}
|
|
117
|
-
async
|
|
118
|
-
if (!this.authConfig.
|
|
129
|
+
async tryLoadUserProfile() {
|
|
130
|
+
if (!this.authConfig.loadUserProfile || !this.isAuthenticated())
|
|
119
131
|
return;
|
|
120
|
-
await this.oauthService.
|
|
132
|
+
await this.oauthService.loadUserProfile().catch(() => null);
|
|
121
133
|
}
|
|
122
|
-
async
|
|
123
|
-
if (!this.
|
|
134
|
+
async tryRefreshToken() {
|
|
135
|
+
if (!this.getRefreshToken())
|
|
124
136
|
return;
|
|
125
|
-
await this.
|
|
137
|
+
await this.oauthService.refreshToken();
|
|
126
138
|
}
|
|
127
139
|
assertAudience(clientId) {
|
|
128
140
|
const tokenClientId = this.getIdentityClaims()?.aud;
|
|
@@ -145,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
145
157
|
type: Injectable,
|
|
146
158
|
args: [{ providedIn: 'root' }]
|
|
147
159
|
}], ctorParameters: function () { return []; } });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2hFLE1BQU0sT0FBTyxXQUFXO0lBdUN0QjtRQXRDaUIsZUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDaEMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLG9CQUFlLEdB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QUVPLG1CQUFtQixDQUFDLE9BQWdCO1FBQzFDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ2pEO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDOytHQXRLVSxXQUFXO21IQUFYLFdBQVcsY0FERSxNQUFNOzs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aEVycm9yRXZlbnQsIE9BdXRoU2VydmljZSwgVG9rZW5SZXNwb25zZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnZGVlcG1lcmdlLXRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBzaGFyZSxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0QXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgQXV0aG9yaXplZEhhbmRsZXIsIEF1dGhQbHVnaW5NYW5hZ2VyIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ29uZmlnID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhQbHVnaW5NYW5hZ2VyID0gaW5qZWN0KEF1dGhQbHVnaW5NYW5hZ2VyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNlcnZpY2UgPSBpbmplY3QoT0F1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUmVkaXJlY3RpbmckJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQWNjZXNzVG9rZW5VcGRhdGUkID0gZnJvbUV2ZW50PFN0b3JhZ2VFdmVudD4odGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LCAnc3RvcmFnZScpLnBpcGUoXG4gICAgZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgPT09ICdhY2Nlc3NfdG9rZW4nIHx8IGtleSA9PT0gbnVsbCksXG4gICAgc3RhcnRXaXRoKG51bGwpLFxuICAgIHNoYXJlKCksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lsZW50UmVmcmVzaEhhbmRsZXIkID0gdGhpcy5pc0luaXRpYWxpemVkJCQucGlwZShcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMud2luZG93UmVmLmlzT25saW5lJCksXG4gICAgdGFwKChpc09ubGluZSkgPT4gdGhpcy51cGRhdGVTaWxlbnRSZWZyZXNoKGlzT25saW5lKSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25BdXRoU3RhdGVDaGFuZ2UkID0gY29tYmluZUxhdGVzdChbdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoc3RhcnRXaXRoKG51bGwpKSwgdGhpcy53aW5kb3dSZWYuaXNPbmxpbmUkLCB0aGlzLm9uQWNjZXNzVG9rZW5VcGRhdGUkXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSZWRpcmVjdGluZyQgPSB0aGlzLmlzUmVkaXJlY3RpbmckJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUgfSkpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nJCA9IG1lcmdlKHRoaXMuaXNSZWRpcmVjdGluZyQsIHRoaXMuYXV0aFBsdWdpbk1hbmFnZXIucGx1Z2luc0xvYWRpbmckKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5wbHVnaW5zUmVhZHkkKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vbkF1dGhTdGF0ZUNoYW5nZSQpLFxuICAgIG1hcCgoKSA9PiB0aGlzLmlzQXV0aGVudGljYXRlZCgpKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pLFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlDbGFpbXMkID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWQkLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9ycyQgPSB0aGlzLm9hdXRoU2VydmljZS5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgT0F1dGhFcnJvckV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSxcbiAgICBzaGFyZSgpLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYXV0aFBsdWdpbk1hbmFnZXIucnVuUGx1Z2lucyh0aGlzKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNpbGVudFJlZnJlc2hIYW5kbGVyJC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKGNvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0QXVkaWVuY2UoY29uZmlnLmNsaWVudElkKTtcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoeyAuLi5jb25maWcsIG9wZW5Vcmk6IHRoaXMucmVkaXJlY3RUb0xvZ2luLmJpbmQodGhpcykgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCh0aGlzLmF1dGhDb25maWcuZGlzY292ZXJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnRyeUxvZ2luKCk7XG4gICAgICBhd2FpdCB0aGlzLnRyeVJlZnJlc2hUb2tlbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlIHx8IGVycm9yIGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvci50eXBlID09PSAndG9rZW5fcmVmcmVzaF9lcnJvcicgfHwgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgKGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAwKSkpIHtcbiAgICAgICAgdGhpcy5zaWduT3V0KHRydWUpO1xuICAgICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQkLm5leHQodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0aENvbmZpZy5yZXF1aXJlU2lnbkluICYmICF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudHJ5TG9hZFVzZXJQcm9maWxlKCk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZVRvUmVxdWVzdGVkVXJsKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXNzdWVyKCk6IFVSTCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICByZXR1cm4gbmV3IFVSTCh0aGlzLm9hdXRoU2VydmljZS5pc3N1ZXIhKTtcbiAgfVxuXG4gIHB1YmxpYyBzaWduSW4odXJsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdyh1cmwpO1xuICB9XG5cbiAgcHVibGljIHNpZ25PdXQobm9SZWRpcmVjdD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoU2VydmljZS5sb2dPdXQobm9SZWRpcmVjdCB8fCAhdGhpcy5nZXRBY2Nlc3NUb2tlbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkVXNlclByb2ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aFNlcnZpY2UubG9hZFVzZXJQcm9maWxlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VucygpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5JZGVudGl5Q2xhaW1zIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmdldElkVG9rZW4oKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRlZXBtZXJnZSh0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpLCB0aGlzLmF1dGhQbHVnaW5NYW5hZ2VyLmdldFJlc3VsdCgpKSBhcyBPZHhBdXRoLklkZW50aXlDbGFpbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmF3SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcyB8IG51bGwge1xuICAgIGlmICghdGhpcy5nZXRJZFRva2VuKCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpO1xuICB9XG5cbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53aW5kb3dSZWYuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSAmJiB0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZElkVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsaWRPZmZsaW5lVG9rZW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dGhvcml6ZWQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGwpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYW5kbGVyID0gYXV0aG9yaXplZEhhbmRsZXIgPz8gdGhpcy5hdXRoQ29uZmlnLmRlZmF1bHRBdXRob3JpemVkSGFuZGxlcjtcblxuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIChoYW5kbGVyPy4odGhpcy5nZXRJZGVudGl0eUNsYWltcygpLCB0aGlzLCB0aGlzLnJvdXRlcikgPz8gdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgaXNBdXRob3JpemVkJChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyIHwgbnVsbCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCQucGlwZShtYXAoKCkgPT4gdGhpcy5pc0F1dGhvcml6ZWQoYXV0aG9yaXplZEhhbmRsZXIpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJvdXRlVG9SZXF1ZXN0ZWRVcmwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9hdXRoU2VydmljZS5zdGF0ZSB8fCAhdGhpcy5vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkZWNvZGVVUklDb21wb25lbnQodGhpcy5vYXV0aFNlcnZpY2Uuc3RhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzVmFsaWRPZmZsaW5lVG9rZW4oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNzdWVkQXQgPSB0aGlzLmdldElkZW50aXR5Q2xhaW1zKCk/LmlhdCA/PyAwO1xuXG4gICAgcmV0dXJuIERhdGUubm93KCkgLSBpc3N1ZWRBdCAqIDEwMDAgPD0gdGhpcy5hdXRoQ29uZmlnLm1heE9mZmxpbmVUaW1lICogMTAwMDtcbiAgfVxuXG4gIHByaXZhdGUgcmVkaXJlY3RUb0xvZ2luKHVyaTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dSZWYubG9jYXRpb24uYXNzaWduKHVyaSk7XG4gICAgdGhpcy5pc1JlZGlyZWN0aW5nJCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5UmVmcmVzaFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5hdXRoQ29uZmlnLnJlZnJlc2hUb2tlbk9uSW5pdCB8fCAhdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cnlMb2FkVXNlclByb2ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmF1dGhDb25maWcubG9hZFVzZXJQcm9maWxlIHx8ICF0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpLmNhdGNoKCgpID0+IG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRBdWRpZW5jZShjbGllbnRJZD86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkNsaWVudElkID0gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpPy5hdWQ7XG4gICAgaWYgKCFjbGllbnRJZCB8fCAhdG9rZW5DbGllbnRJZCB8fCBjbGllbnRJZCA9PT0gdG9rZW5DbGllbnRJZCkgcmV0dXJuO1xuICAgIHRoaXMuc2lnbk91dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2lsZW50UmVmcmVzaChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9hdXRoU2VydmljZS5zdG9wQXV0b21hdGljUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFFZixVQUFVLEVBQ1YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBQ0wsRUFBRSxFQUNGLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFxQixNQUFNLFVBQVUsQ0FBQzs7QUFHaEUsTUFBTSxPQUFPLFdBQVc7SUE0Q3RCO1FBM0NpQixlQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdB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T0FBTztRQUNwQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUF3QjtRQUM3QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsSUFBSSxRQUFRLEtBQUssYUFBYTtZQUFFLE9BQU87UUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBZ0I7UUFDMUMsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixFQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7K0dBaE1VLFdBQVc7bUhBQVgsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aEVycm9yRXZlbnQsIE9BdXRoU2VydmljZSwgVG9rZW5SZXNwb25zZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnZGVlcG1lcmdlLXRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBvZixcbiAgc2hhcmUsXG4gIHNoYXJlUmVwbGF5LFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxuICB0aW1lb3V0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdEF1dGhDb25maWcgfSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB7IHNldEh0dHBBdXRoSGVhZGVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IEF1dGhQbHVnaW5NYW5hZ2VyLCBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aENvbmZpZyA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoUGx1Z2luTWFuYWdlciA9IGluamVjdChBdXRoUGx1Z2luTWFuYWdlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2F1dGhTZXJ2aWNlID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2luZG93UmVmID0gaW5qZWN0KFdpbmRvd1JlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc0luaXRpYWxpemVkJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1JlZGlyZWN0aW5nJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkFjY2Vzc1Rva2VuVXBkYXRlJCA9IGZyb21FdmVudDxTdG9yYWdlRXZlbnQ+KHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdywgJ3N0b3JhZ2UnKS5waXBlKFxuICAgIGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ID09PSAnYWNjZXNzX3Rva2VuJyB8fCBrZXkgPT09IG51bGwpLFxuICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICBzaGFyZSgpLFxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IHNpbGVudFJlZnJlc2hIYW5kbGVyJCA9IHRoaXMuaXNJbml0aWFsaXplZCQkLnBpcGUoXG4gICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLndpbmRvd1JlZi5pc09ubGluZSQpLFxuICAgIHRhcCgoaXNPbmxpbmUpID0+IHRoaXMudXBkYXRlU2lsZW50UmVmcmVzaChpc09ubGluZSkpLFxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQXV0aFN0YXRlQ2hhbmdlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKHN0YXJ0V2l0aChudWxsKSksIHRoaXMud2luZG93UmVmLmlzT25saW5lJCwgdGhpcy5vbkFjY2Vzc1Rva2VuVXBkYXRlJF0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzUmVkaXJlY3RpbmckID0gdGhpcy5pc1JlZGlyZWN0aW5nJCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzTG9hZGluZyQgPSBtZXJnZSh0aGlzLmlzUmVkaXJlY3RpbmckLCB0aGlzLmF1dGhQbHVnaW5NYW5hZ2VyLnBsdWdpbnNMb2FkaW5nJCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLmlzSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYXV0aFBsdWdpbk1hbmFnZXIucGx1Z2luc1JlYWR5JCksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub25BdXRoU3RhdGVDaGFuZ2UkKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pLFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlDbGFpbXMkID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWQkLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9ycyQgPSB0aGlzLm9hdXRoU2VydmljZS5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgT0F1dGhFcnJvckV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSxcbiAgICBzaGFyZSgpLFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgb25Ub2tlblJlY2VpdmVkJCA9IHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpLFxuICAgIHNoYXJlKCksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ydW5QbHVnaW5zKCk7XG4gICAgdGhpcy5zaWxlbnRSZWZyZXNoSGFuZGxlciQuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZShjb25maWc6IEF1dGhDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydEF1ZGllbmNlKGNvbmZpZy5jbGllbnRJZCk7XG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuY29uZmlndXJlKHsgLi4uY29uZmlnLCBvcGVuVXJpOiB0aGlzLnJlZGlyZWN0VG9Mb2dpbi5iaW5kKHRoaXMpIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQodGhpcy5hdXRoQ29uZmlnLmRpc2NvdmVyeVVybCk7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS50cnlMb2dpbigpO1xuICAgICAgaWYgKHRoaXMuYXV0aENvbmZpZy5yZWZyZXNoVG9rZW5PbkluaXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cnlSZWZyZXNoVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSB8fCBlcnJvciBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ3Rva2VuX3JlZnJlc2hfZXJyb3InIHx8IChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIChlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkpKSB7XG4gICAgICAgIHRoaXMuc2lnbk91dCh0cnVlKTtcbiAgICAgICAgdGhpcy5zaWduSW4odGhpcy53aW5kb3dSZWYubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkJC5uZXh0KHRydWUpO1xuICAgIGlmICh0aGlzLmF1dGhDb25maWcucmVxdWlyZVNpZ25JbiAmJiAhdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgdGhpcy5zaWduSW4odGhpcy53aW5kb3dSZWYubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnRyeUxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIGF3YWl0IHRoaXMucm91dGVUb1JlcXVlc3RlZFVybCgpO1xuICB9XG5cbiAgcHVibGljIHJ1blBsdWdpbnMoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5ydW5QbHVnaW5zKHRoaXMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldElzc3VlcigpOiBVUkwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5vYXV0aFNlcnZpY2UuaXNzdWVyISk7XG4gIH1cblxuICBwdWJsaWMgc2lnbkluKHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3codXJsKTtcbiAgfVxuXG4gIHB1YmxpYyBzaWduT3V0KG5vUmVkaXJlY3Q/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9nT3V0KG5vUmVkaXJlY3QgfHwgIXRoaXMuZ2V0QWNjZXNzVG9rZW4oKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VucygpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5JZGVudGl5Q2xhaW1zIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmdldElkVG9rZW4oKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRlZXBtZXJnZSh0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpLCB0aGlzLmF1dGhQbHVnaW5NYW5hZ2VyLmdldFJlc3VsdCgpKSBhcyBPZHhBdXRoLklkZW50aXlDbGFpbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmF3SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcyB8IG51bGwge1xuICAgIGlmICghdGhpcy5nZXRJZFRva2VuKCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpO1xuICB9XG5cbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53aW5kb3dSZWYuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSAmJiB0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZElkVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsaWRPZmZsaW5lVG9rZW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dGhvcml6ZWQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGwpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYW5kbGVyID0gYXV0aG9yaXplZEhhbmRsZXIgPz8gdGhpcy5hdXRoQ29uZmlnLmRlZmF1bHRBdXRob3JpemVkSGFuZGxlcjtcblxuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIChoYW5kbGVyPy4odGhpcy5nZXRJZGVudGl0eUNsYWltcygpLCB0aGlzLCB0aGlzLnJvdXRlcikgPz8gdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgaXNBdXRob3JpemVkJChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyIHwgbnVsbCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCQucGlwZShtYXAoKCkgPT4gdGhpcy5pc0F1dGhvcml6ZWQoYXV0aG9yaXplZEhhbmRsZXIpKSk7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZUF1dGhSZXF1ZXN0JDxSIGV4dGVuZHMgSHR0cFJlcXVlc3Q8VD4gfCBSZXF1ZXN0LCBUPihyZXE6IFIsIHJlcXVpcmVTaWduSW4gPSBmYWxzZSk6IE9ic2VydmFibGU8Uj4ge1xuICAgIHJldHVybiB0aGlzLndhaXRGb3JBY2Nlc3NUb2tlbiQocmVxdWlyZVNpZ25JbikucGlwZShtYXAoKHRva2VuKSA9PiBzZXRIdHRwQXV0aEhlYWRlcihyZXEsIHRva2VuKSkpO1xuICB9XG5cbiAgcHVibGljIHdhaXRGb3JBY2Nlc3NUb2tlbiQocmVxdWlyZVNpZ25JbjogYm9vbGVhbik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuJCA9IG9mKHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSkucGlwZShmaWx0ZXIoKHRva2VuKSA9PiAhIXRva2VuICYmIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkpKTtcbiAgICBjb25zdCB3YWl0Rm9yQWNjZXNzVG9rZW4kID0gdGhpcy5vblRva2VuUmVjZWl2ZWQkLnBpcGUoXG4gICAgICB0aW1lb3V0KHRoaXMuYXV0aENvbmZpZy53YWl0Rm9yVG9rZW5Jbk1zISksXG4gICAgICBjYXRjaEVycm9yKGFzeW5jICgpID0+IHRoaXMudHJ5UmVmcmVzaFRva2VuKCkuY2F0Y2goKCkgPT4gbnVsbCkpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKGFjY2Vzc1Rva2VuJCwgd2FpdEZvckFjY2Vzc1Rva2VuJCkpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpLFxuICAgICAgdGFwKCh0b2tlbikgPT4gIXRva2VuICYmIHJlcXVpcmVTaWduSW4gJiYgdGhpcy5zaWduSW4odGhpcy53aW5kb3dSZWYubG9jYXRpb24ucGF0aG5hbWUpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByb3V0ZVRvUmVxdWVzdGVkVXJsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5vYXV0aFNlcnZpY2Uuc3RhdGUgfHwgIXRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhc1ZhbGlkT2ZmbGluZVRva2VuKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzc3VlZEF0ID0gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpPy5pYXQgPz8gMDtcblxuICAgIHJldHVybiBEYXRlLm5vdygpIC0gaXNzdWVkQXQgKiAxMDAwIDw9IHRoaXMuYXV0aENvbmZpZy5tYXhPZmZsaW5lVGltZSAqIDEwMDA7XG4gIH1cblxuICBwcml2YXRlIHJlZGlyZWN0VG9Mb2dpbih1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2luZG93UmVmLmxvY2F0aW9uLmFzc2lnbih1cmkpO1xuICAgIHRoaXMuaXNSZWRpcmVjdGluZyQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUxvYWRVc2VyUHJvZmlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYXV0aENvbmZpZy5sb2FkVXNlclByb2ZpbGUgfHwgIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5UmVmcmVzaFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRBdWRpZW5jZShjbGllbnRJZD86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkNsaWVudElkID0gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpPy5hdWQ7XG4gICAgaWYgKCFjbGllbnRJZCB8fCAhdG9rZW5DbGllbnRJZCB8fCBjbGllbnRJZCA9PT0gdG9rZW5DbGllbnRJZCkgcmV0dXJuO1xuICAgIHRoaXMuc2lnbk91dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2lsZW50UmVmcmVzaChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9hdXRoU2VydmljZS5zdG9wQXV0b21hdGljUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|