ngx-oauth 2.1.1 → 2.2.2
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/README.md +48 -15
- package/esm2020/lib/components/login/oauth-login.component.mjs +9 -6
- package/esm2020/lib/models/index.mjs +1 -1
- package/esm2020/lib/oauth.module.mjs +4 -4
- package/esm2020/lib/services/oauth.interceptor.mjs +7 -8
- package/esm2020/lib/services/oauth.service.mjs +16 -9
- package/fesm2015/ngx-oauth.mjs +33 -24
- package/fesm2015/ngx-oauth.mjs.map +1 -1
- package/fesm2020/ngx-oauth.mjs +33 -23
- package/fesm2020/ngx-oauth.mjs.map +1 -1
- package/lib/components/login/oauth-login.component.d.ts +2 -1
- package/lib/models/index.d.ts +4 -0
- package/lib/services/oauth.service.d.ts +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,8 +22,8 @@ const oauthConfig = {
|
|
|
22
22
|
config: {
|
|
23
23
|
tokenPath: '/authorizationserver/oauth/token',
|
|
24
24
|
revokePath: '/authorizationserver/oauth/revoke', // optional
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
clientId: '<your_client_id>',
|
|
26
|
+
clientSecret: '<your_client_secret>'
|
|
27
27
|
},
|
|
28
28
|
storage: localStorage, // Optional, default value is localStorage
|
|
29
29
|
storageKey: 'token' // Optional, default value is 'token'
|
|
@@ -48,8 +48,8 @@ For public oauth clients `clientSecret` can be removed since is not used
|
|
|
48
48
|
const oauthConfig = {
|
|
49
49
|
type: OAuthType.AUTHORIZATION_CODE,
|
|
50
50
|
config: {
|
|
51
|
-
clientId: '
|
|
52
|
-
clientSecret: '
|
|
51
|
+
clientId: '<your_client_id>',
|
|
52
|
+
clientSecret: '<your_client_secret>',
|
|
53
53
|
authorizePath: '/o/authorize/',
|
|
54
54
|
tokenPath: '/o/token/',
|
|
55
55
|
revokePath: '/o/revoke/',
|
|
@@ -66,7 +66,7 @@ const keycloakOpenIDConfig = {
|
|
|
66
66
|
type: OAuthType.IMPLICIT,
|
|
67
67
|
config: {
|
|
68
68
|
issuerPath: 'http://localhost:8080/auth/realms/commerce',
|
|
69
|
-
clientId: '
|
|
69
|
+
clientId: '<your_client_id>',
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
72
|
```
|
|
@@ -78,14 +78,42 @@ const keycloakOpenIDConfig = {
|
|
|
78
78
|
type: OAuthType.AUTHORIZATION_CODE,
|
|
79
79
|
config: {
|
|
80
80
|
issuerPath: 'http://localhost:8080/auth/realms/commerce',
|
|
81
|
-
clientId: '
|
|
81
|
+
clientId: '<your_client_id>',
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
+
***Azure*** example
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const azureOpenIDConfig = {
|
|
90
|
+
type: OAuthType.AUTHORIZATION_CODE,
|
|
91
|
+
config: {
|
|
92
|
+
issuerPath: 'https://login.microsoftonline.com/common/v2.0', // for common make sure you app has "signInAudience": "AzureADandPersonalMicrosoftAccount",
|
|
93
|
+
clientId: '<your_client_id>',
|
|
94
|
+
scope: 'openid profile email offline_access',
|
|
95
|
+
pkce: true // manually since is required but code_challenge_methods_supported is not in openid configuration
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
***Google*** example
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
const googleOpenIDConfig = {
|
|
104
|
+
type: OAuthType.AUTHORIZATION_CODE,
|
|
105
|
+
config: {
|
|
106
|
+
issuerPath: 'https://accounts.google.com',
|
|
107
|
+
clientId: '<your_client_id>',
|
|
108
|
+
clientSecret: '<your_client_secret>',
|
|
109
|
+
scope: 'openid profile email'
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
86
114
|
You can use the `oauth-login` component
|
|
87
115
|
|
|
88
|
-
```
|
|
116
|
+
```html
|
|
89
117
|
|
|
90
118
|
<div class="login-component">
|
|
91
119
|
<oauth-login></oauth-login>
|
|
@@ -100,6 +128,7 @@ or with params
|
|
|
100
128
|
template: `
|
|
101
129
|
<oauth-login [i18n]="i18n"
|
|
102
130
|
[profileName$]="profileName$"
|
|
131
|
+
[useLogoutUrl]="useLogoutUrl"
|
|
103
132
|
[(state)]="state"></oauth-login>
|
|
104
133
|
`
|
|
105
134
|
})
|
|
@@ -109,27 +138,31 @@ export class LoginComponent {
|
|
|
109
138
|
};
|
|
110
139
|
state = 'some_salt_hash_or_whatever';
|
|
111
140
|
status$: Observable<OAuthStatus>;
|
|
141
|
+
// not only revoke tokens but also access the logout page if defined.
|
|
142
|
+
// logoutPath needs to be defined. logoutRedirectUri is optional. Current url will be used if undefined
|
|
143
|
+
useLogoutUrl = true;
|
|
112
144
|
|
|
113
145
|
constructor(private oauthService: OAuthService) {
|
|
114
146
|
this.status$ = this.oauthService.status$;
|
|
115
147
|
}
|
|
116
148
|
|
|
117
149
|
get profileName$(): Observable<string> {
|
|
118
|
-
// ex: get profile name form oidc
|
|
119
|
-
return this.
|
|
120
|
-
|
|
121
|
-
map(() => this.oauthService.token.id_token),
|
|
122
|
-
filter(t => !!t),
|
|
123
|
-
map(t => JSON.parse(atob(t.split('.')[1]))),
|
|
124
|
-
map(t => t.name || t.username || t.email || t.sub)
|
|
150
|
+
// ex: get profile name form oidc user_info endpoint or get it from some user service
|
|
151
|
+
return this.oauthService.userInfo$.pipe(
|
|
152
|
+
map(v => `${v.name} ${this.getPicture(v.picture)}`)
|
|
125
153
|
);
|
|
126
154
|
}
|
|
155
|
+
|
|
156
|
+
// show profile picture if user info provides thumbnail url
|
|
157
|
+
getPicture(picture?: string) {
|
|
158
|
+
return picture && `<img class="rounded-circle img-thumbnail" src="${picture}">` || ''
|
|
159
|
+
}
|
|
127
160
|
}
|
|
128
161
|
```
|
|
129
162
|
|
|
130
163
|
or create your custom login template using OAuthService
|
|
131
164
|
|
|
132
|
-
```
|
|
165
|
+
```html
|
|
133
166
|
|
|
134
167
|
<div class="login-component">
|
|
135
168
|
<oauth-login>
|
|
@@ -20,6 +20,7 @@ export class OAuthLoginComponent {
|
|
|
20
20
|
authorized: 'Welcome',
|
|
21
21
|
denied: 'Access Denied. Try again!'
|
|
22
22
|
};
|
|
23
|
+
this.useLogoutUrl = false;
|
|
23
24
|
this.state = '';
|
|
24
25
|
this.stateChange = new EventEmitter();
|
|
25
26
|
this.username = '';
|
|
@@ -63,7 +64,7 @@ export class OAuthLoginComponent {
|
|
|
63
64
|
this.subscription.unsubscribe();
|
|
64
65
|
}
|
|
65
66
|
logout() {
|
|
66
|
-
this.oauthService.logout();
|
|
67
|
+
this.oauthService.logout(this.useLogoutUrl);
|
|
67
68
|
}
|
|
68
69
|
async login(parameters) {
|
|
69
70
|
await this.oauthService.login(parameters);
|
|
@@ -76,11 +77,11 @@ export class OAuthLoginComponent {
|
|
|
76
77
|
this.collapse = false;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
|
-
OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
80
|
-
OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
80
|
+
OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthLoginComponent, deps: [{ token: i1.OAuthService }, { token: i2.Location }, { token: LOCATION }], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
+
OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: OAuthLoginComponent, selector: "oauth-login", inputs: { i18n: "i18n", redirectUri: "redirectUri", useLogoutUrl: "useLogoutUrl", state: "state", profileName$: "profileName$" }, outputs: { stateChange: "stateChange" }, host: { listeners: { "window:keydown.escape": "keyboardEvent()" } }, queries: [{ propertyName: "loginTemplate", first: true, predicate: ["login"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"state$ | async\"></ng-container>\r\n<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end p-3 {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\" #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\" class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\" class=\"not-authorized\">{{i18n.notAuthorized}}</span>\r\n <span *ngIf=\"status === OAuthStatus.AUTHORIZED\" class=\"authorized\">\r\n <span class=\"welcome\">{{i18n.authorized}} </span>\r\n <strong class=\"profile-name\" [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span *ngIf=\"status === OAuthStatus.DENIED\" class=\"denied\">{{i18n.denied}}</span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i2.AsyncPipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthLoginComponent, decorators: [{
|
|
82
83
|
type: Component,
|
|
83
|
-
args: [{ selector: 'oauth-login', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"state$ | async\"></ng-container>\r\n<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end p-3 {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\" #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\" class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\">{{i18n.notAuthorized}}</span>\r\n <span *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n {{i18n.authorized}}<strong
|
|
84
|
+
args: [{ selector: 'oauth-login', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"state$ | async\"></ng-container>\r\n<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end p-3 {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\" #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\" class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\" class=\"not-authorized\">{{i18n.notAuthorized}}</span>\r\n <span *ngIf=\"status === OAuthStatus.AUTHORIZED\" class=\"authorized\">\r\n <span class=\"welcome\">{{i18n.authorized}} </span>\r\n <strong class=\"profile-name\" [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span *ngIf=\"status === OAuthStatus.DENIED\" class=\"denied\">{{i18n.denied}}</span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"] }]
|
|
84
85
|
}], ctorParameters: function () { return [{ type: i1.OAuthService }, { type: i2.Location }, { type: Location, decorators: [{
|
|
85
86
|
type: Inject,
|
|
86
87
|
args: [LOCATION]
|
|
@@ -88,6 +89,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
88
89
|
type: Input
|
|
89
90
|
}], redirectUri: [{
|
|
90
91
|
type: Input
|
|
92
|
+
}], useLogoutUrl: [{
|
|
93
|
+
type: Input
|
|
91
94
|
}], state: [{
|
|
92
95
|
type: Input
|
|
93
96
|
}], stateChange: [{
|
|
@@ -101,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
101
104
|
type: HostListener,
|
|
102
105
|
args: ['window:keydown.escape']
|
|
103
106
|
}] } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtbG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL29hdXRoLWxvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQW1CbkMsTUFBTSxPQUFPLG1CQUFtQjtJQW9FOUIsWUFBb0IsWUFBMEIsRUFDMUIsZUFBMEIsRUFDUixRQUFrQjtRQUZwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBVztRQUNSLGFBQVEsR0FBUixRQUFRLENBQVU7UUFuRWhELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxVQUFLLEdBQW1CO1lBQzlCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLE1BQU0sRUFBRSwyQkFBMkI7U0FDcEMsQ0FBQztRQTBCRixVQUFL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QUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7Z0hBN0ZVLG1CQUFtQixzRUFzRVYsUUFBUTtvR0F0RWpCLG1CQUFtQix5V0NqQ2hDLDR1RkE0REE7MkZEM0JhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUk7NEdBd0VXLFFBQVE7MEJBQTNDLE1BQU07MkJBQUMsUUFBUTs0Q0FwRHhCLElBQUk7c0JBRFAsS0FBSztnQkFTRixXQUFXO3NCQURkLEtBQUs7Z0JBWU4sS0FBSztzQkFESixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTTtnQkFHUCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBaUR0QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRha2V9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xPQ0FUSU9OLCBPQXV0aFBhcmFtZXRlcnMsIE9BdXRoU3RhdHVzLCBPQXV0aFR5cGV9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T0F1dGhTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2NhdGlvbiBhcyBMb2NhdGlvbjJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoTG9naW5JMThuIHtcclxuICB1c2VybmFtZT86IHN0cmluZztcclxuICBwYXNzd29yZD86IHN0cmluZztcclxuICBzdWJtaXQ/OiBzdHJpbmc7XHJcbiAgbm90QXV0aG9yaXplZD86IHN0cmluZztcclxuICBhdXRob3JpemVkPzogc3RyaW5nO1xyXG4gIGRlbmllZD86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdvYXV0aC1sb2dpbicsXHJcbiAgdGVtcGxhdGVVcmw6ICdvYXV0aC1sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ29hdXRoLWxvZ2luLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9BdXRoTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIF9yZWRpcmVjdFVyaTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByaXZhdGUgX2kxOG46IE9BdXRoTG9naW5JMThuID0ge1xyXG4gICAgdXNlcm5hbWU6ICdVc2VybmFtZScsXHJcbiAgICBwYXNzd29yZDogJ1Bhc3N3b3JkJyxcclxuICAgIHN1Ym1pdDogJ1NpZ24gaW4nLFxyXG4gICAgbm90QXV0aG9yaXplZDogJ1NpZ24gaW4nLFxyXG4gICAgYXV0aG9yaXplZDogJ1dlbGNvbWUnLFxyXG4gICAgZGVuaWVkOiAnQWNjZXNzIERlbmllZC4gVHJ5IGFnYWluISdcclxuICB9O1xyXG5cclxuICBnZXQgaTE4bigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pMThuO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaTE4bihpMThuKSB7XHJcbiAgICB0aGlzLl9pMThuID0ge1xyXG4gICAgICAuLi50aGlzLl9pMThuLFxyXG4gICAgICAuLi5pMThuXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcmVkaXJlY3RVcmkocmVkaXJlY3RVcmk6IHN0cmluZykge1xyXG4gICAgaWYgKHJlZGlyZWN0VXJpKSB7XHJcbiAgICAgIHRoaXMuX3JlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcmVkaXJlY3RVcmkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RVcmkgfHwgYCR7dGhpcy5sb2NhdGlvbi5vcmlnaW59JHt0aGlzLmxvY2F0aW9uU2VydmljZS5wYXRoKHRydWUpIHx8ICcvJ31gO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzdGF0ZSA9ICcnO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKVxyXG4gIHByb2ZpbGVOYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xyXG4gIEBDb250ZW50Q2hpbGQoJ2xvZ2luJywge3N0YXRpYzogZmFsc2V9KVxyXG4gIGxvZ2luVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgdXNlcm5hbWUgPSAnJztcclxuICBwYXNzd29yZCA9ICcnO1xyXG4gIHByb2ZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgT0F1dGhTdGF0dXMgPSBPQXV0aFN0YXR1cztcclxuICBPQXV0aFR5cGUgPSBPQXV0aFR5cGU7XHJcbiAgY29sbGFwc2UgPSBmYWxzZTtcclxuICB0eXBlID0gdGhpcy5vYXV0aFNlcnZpY2UudHlwZTtcclxuICBzdGF0ZSQgPSB0aGlzLm9hdXRoU2VydmljZS5zdGF0ZSQucGlwZShcclxuICAgIHRhcChzID0+IHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChzKSlcclxuICApO1xyXG4gIHN0YXR1cyQgPSB0aGlzLm9hdXRoU2VydmljZS5zdGF0dXMkLnBpcGUoXHJcbiAgICB0YXAocyA9PiB7XHJcbiAgICAgIGlmIChzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEICYmIHRoaXMucHJvZmlsZU5hbWUkKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMucHJvZmlsZU5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKG4gPT4gdGhpcy5wcm9maWxlTmFtZSA9IG4pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7dG9rZW59ID0gdGhpcy5vYXV0aFNlcnZpY2U7XHJcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0b2tlbiAmJiB0b2tlbi5pZF90b2tlbiAmJiBKU09OLnBhcnNlKGF0b2IodG9rZW4uaWRfdG9rZW4uc3BsaXQoJy4nKVsxXSkpIHx8IHt9O1xyXG4gICAgICAgIHRoaXMucHJvZmlsZU5hbWUgPSB1c2VySW5mby5uYW1lIHx8IHVzZXJJbmZvLnVzZXJuYW1lIHx8IHVzZXJJbmZvLmVtYWlsIHx8IHVzZXJJbmZvLnN1YiB8fCAnJztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG4gIGxvZ2luRnVuY3Rpb24gPSAocDogT0F1dGhQYXJhbWV0ZXJzKSA9PiB0aGlzLmxvZ2luKHApO1xyXG4gIGxvZ291dEZ1bmN0aW9uID0gKCkgPT4gdGhpcy5sb2dvdXQoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGxvY2F0aW9uU2VydmljZTogTG9jYXRpb24yLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoTE9DQVRJT04pIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5sb2dvdXQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvZ2luKHBhcmFtZXRlcnM6IE9BdXRoUGFyYW1ldGVycykge1xyXG4gICAgYXdhaXQgdGhpcy5vYXV0aFNlcnZpY2UubG9naW4ocGFyYW1ldGVycyk7XHJcbiAgICB0aGlzLmNvbGxhcHNlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb2xsYXBzZSgpIHtcclxuICAgIHRoaXMuY29sbGFwc2UgPSAhdGhpcy5jb2xsYXBzZTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duLmVzY2FwZScpXHJcbiAga2V5Ym9hcmRFdmVudCgpIHtcclxuICAgIHRoaXMuY29sbGFwc2UgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jXCI+PC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dpblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRMb2dpblwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9naW5UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntsb2dpbjogbG9naW5GdW5jdGlvbiwgbG9nb3V0OiBsb2dvdXRGdW5jdGlvbiwgc3RhdHVzOiBzdGF0dXMkIHwgYXN5bmN9XCI+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2dpbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdHVzJCB8IGFzeW5jIGFzIHN0YXR1c1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09IE9BdXRoVHlwZS5SRVNPVVJDRTsgZWxzZSBub1Jlc291cmNlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvYXV0aCBkcm9wZG93biB0ZXh0LWVuZCBwLTMge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiB0b2dnbGVDb2xsYXBzZSgpXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1yLTMge3tjb2xsYXBzZSA/ICdzaG93JzogJyd9fVwiPlxyXG4gICAgICAgICAgPGZvcm0gY2xhc3M9XCJwLTNcIiAjZm9ybT1cIm5nRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuTk9UX0FVVEhPUklaRUQgfHwgc3RhdHVzID09PSBPQXV0aFN0YXR1cy5ERU5JRURcIlxyXG4gICAgICAgICAgICAgICAgKHN1Ym1pdCk9XCJsb2dpbih7dXNlcm5hbWU6IHVzZXJuYW1lLCBwYXNzd29yZDogcGFzc3dvcmR9KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpMThuLnVzZXJuYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi5wYXNzd29yZFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj57e2kxOG4uc3VibWl0fX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNub1Jlc291cmNlPlxyXG4gICAgICA8YSByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJvYXV0aFwiXHJcbiAgICAgICAgIChjbGljayk9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQgPyBsb2dvdXQoKSA6IGxvZ2luKHtyZWRpcmVjdFVyaTogcmVkaXJlY3RVcmksIHN0YXRlOnN0YXRlfSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbWVzc2FnZT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLk5PVF9BVVRIT1JJWkVEXCI+e3tpMThuLm5vdEF1dGhvcml6ZWR9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLkFVVEhPUklaRURcIj5cclxuICAgICAgICB7e2kxOG4uYXV0aG9yaXplZH19PHN0cm9uZz4mbmJzcDt7e3Byb2ZpbGVOYW1lfX08L3N0cm9uZz5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCI+e3tpMThuLmRlbmllZH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtbG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9vYXV0aC1sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL29hdXRoLWxvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQW1CbkMsTUFBTSxPQUFPLG1CQUFtQjtJQXNFOUIsWUFBb0IsWUFBMEIsRUFDMUIsZUFBMEIsRUFDUixRQUFrQjtRQUZwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBVztRQUNSLGFBQVEsR0FBUixRQUFRLENBQVU7UUFyRWhELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxVQUFLLEdBQW1CO1lBQzlCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLE1BQU0sRUFBRSwyQkFBMkI7U0FDcEMsQ0FBQztRQTBCRixpQkFB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QUssQ0FBQyxVQUEyQjtRQUNyQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUdELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDOztnSEEvRlUsbUJBQW1CLHNFQXdFVixRQUFRO29HQXhFakIsbUJBQW1CLHVZQ2pDaEMsMDNGQTZEQTsyRkQ1QmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSTs0R0EwRVcsUUFBUTswQkFBM0MsTUFBTTsyQkFBQyxRQUFROzRDQXREeEIsSUFBSTtzQkFEUCxLQUFLO2dCQVNGLFdBQVc7c0JBRGQsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTTtnQkFHUCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBaUR0QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRha2V9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xPQ0FUSU9OLCBPQXV0aFBhcmFtZXRlcnMsIE9BdXRoU3RhdHVzLCBPQXV0aFR5cGV9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T0F1dGhTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2NhdGlvbiBhcyBMb2NhdGlvbjJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoTG9naW5JMThuIHtcclxuICB1c2VybmFtZT86IHN0cmluZztcclxuICBwYXNzd29yZD86IHN0cmluZztcclxuICBzdWJtaXQ/OiBzdHJpbmc7XHJcbiAgbm90QXV0aG9yaXplZD86IHN0cmluZztcclxuICBhdXRob3JpemVkPzogc3RyaW5nO1xyXG4gIGRlbmllZD86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdvYXV0aC1sb2dpbicsXHJcbiAgdGVtcGxhdGVVcmw6ICdvYXV0aC1sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ29hdXRoLWxvZ2luLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9BdXRoTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIF9yZWRpcmVjdFVyaTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByaXZhdGUgX2kxOG46IE9BdXRoTG9naW5JMThuID0ge1xyXG4gICAgdXNlcm5hbWU6ICdVc2VybmFtZScsXHJcbiAgICBwYXNzd29yZDogJ1Bhc3N3b3JkJyxcclxuICAgIHN1Ym1pdDogJ1NpZ24gaW4nLFxyXG4gICAgbm90QXV0aG9yaXplZDogJ1NpZ24gaW4nLFxyXG4gICAgYXV0aG9yaXplZDogJ1dlbGNvbWUnLFxyXG4gICAgZGVuaWVkOiAnQWNjZXNzIERlbmllZC4gVHJ5IGFnYWluISdcclxuICB9O1xyXG5cclxuICBnZXQgaTE4bigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pMThuO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaTE4bihpMThuKSB7XHJcbiAgICB0aGlzLl9pMThuID0ge1xyXG4gICAgICAuLi50aGlzLl9pMThuLFxyXG4gICAgICAuLi5pMThuXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcmVkaXJlY3RVcmkocmVkaXJlY3RVcmk6IHN0cmluZykge1xyXG4gICAgaWYgKHJlZGlyZWN0VXJpKSB7XHJcbiAgICAgIHRoaXMuX3JlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcmVkaXJlY3RVcmkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RVcmkgfHwgYCR7dGhpcy5sb2NhdGlvbi5vcmlnaW59JHt0aGlzLmxvY2F0aW9uU2VydmljZS5wYXRoKHRydWUpIHx8ICcvJ31gO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICB1c2VMb2dvdXRVcmwgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHN0YXRlID0gJyc7XHJcbiAgQE91dHB1dCgpXHJcbiAgc3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvZmlsZU5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XHJcbiAgQENvbnRlbnRDaGlsZCgnbG9naW4nLCB7c3RhdGljOiBmYWxzZX0pXHJcbiAgbG9naW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuICB1c2VybmFtZSA9ICcnO1xyXG4gIHBhc3N3b3JkID0gJyc7XHJcbiAgcHJvZmlsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBPQXV0aFN0YXR1cyA9IE9BdXRoU3RhdHVzO1xyXG4gIE9BdXRoVHlwZSA9IE9BdXRoVHlwZTtcclxuICBjb2xsYXBzZSA9IGZhbHNlO1xyXG4gIHR5cGUgPSB0aGlzLm9hdXRoU2VydmljZS50eXBlO1xyXG4gIHN0YXRlJCA9IHRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlJC5waXBlKFxyXG4gICAgdGFwKHMgPT4gdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHMpKVxyXG4gICk7XHJcbiAgc3RhdHVzJCA9IHRoaXMub2F1dGhTZXJ2aWNlLnN0YXR1cyQucGlwZShcclxuICAgIHRhcChzID0+IHtcclxuICAgICAgaWYgKHMgPT09IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQgJiYgdGhpcy5wcm9maWxlTmFtZSQpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5wcm9maWxlTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUobiA9PiB0aGlzLnByb2ZpbGVOYW1lID0gbikpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHt0b2tlbn0gPSB0aGlzLm9hdXRoU2VydmljZTtcclxuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRva2VuICYmIHRva2VuLmlkX3Rva2VuICYmIEpTT04ucGFyc2UoYXRvYih0b2tlbi5pZF90b2tlbi5zcGxpdCgnLicpWzFdKSkgfHwge307XHJcbiAgICAgICAgdGhpcy5wcm9maWxlTmFtZSA9IHVzZXJJbmZvLm5hbWUgfHwgdXNlckluZm8udXNlcm5hbWUgfHwgdXNlckluZm8uZW1haWwgfHwgdXNlckluZm8uc3ViIHx8ICcnO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICk7XHJcbiAgbG9naW5GdW5jdGlvbiA9IChwOiBPQXV0aFBhcmFtZXRlcnMpID0+IHRoaXMubG9naW4ocCk7XHJcbiAgbG9nb3V0RnVuY3Rpb24gPSAoKSA9PiB0aGlzLmxvZ291dCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvbjIsXHJcbiAgICAgICAgICAgICAgQEluamVjdChMT0NBVElPTikgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24pIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ291dCh0aGlzLnVzZUxvZ291dFVybCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2dpbihwYXJhbWV0ZXJzOiBPQXV0aFBhcmFtZXRlcnMpIHtcclxuICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLmxvZ2luKHBhcmFtZXRlcnMpO1xyXG4gICAgdGhpcy5jb2xsYXBzZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ29sbGFwc2UoKSB7XHJcbiAgICB0aGlzLmNvbGxhcHNlID0gIXRoaXMuY29sbGFwc2U7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIGtleWJvYXJkRXZlbnQoKSB7XHJcbiAgICB0aGlzLmNvbGxhcHNlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luY1wiPjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibG9naW5UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TG9naW5cIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvZ2luVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bG9naW46IGxvZ2luRnVuY3Rpb24sIGxvZ291dDogbG9nb3V0RnVuY3Rpb24sIHN0YXR1czogc3RhdHVzJCB8IGFzeW5jfVwiPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9naW4+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1cyQgfCBhc3luYyBhcyBzdGF0dXNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSBPQXV0aFR5cGUuUkVTT1VSQ0U7IGVsc2Ugbm9SZXNvdXJjZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib2F1dGggZHJvcGRvd24gdGV4dC1lbmQgcC0zIHt7Y29sbGFwc2UgPyAnc2hvdyc6ICcnfX1cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMCBkcm9wZG93bi10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRCA/IGxvZ291dCgpIDogdG9nZ2xlQ29sbGFwc2UoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBtci0zIHt7Y29sbGFwc2UgPyAnc2hvdyc6ICcnfX1cIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwicC0zXCIgI2Zvcm09XCJuZ0Zvcm1cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgPT09IE9BdXRoU3RhdHVzLk5PVF9BVVRIT1JJWkVEIHx8IHN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCJcclxuICAgICAgICAgICAgICAgIChzdWJtaXQpPVwibG9naW4oe3VzZXJuYW1lOiB1c2VybmFtZSwgcGFzc3dvcmQ6IHBhc3N3b3JkfSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi51c2VybmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4ucGFzc3dvcmRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+e3tpMThuLnN1Ym1pdH19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9SZXNvdXJjZT5cclxuICAgICAgPGEgcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwib2F1dGhcIlxyXG4gICAgICAgICAoY2xpY2spPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEID8gbG9nb3V0KCkgOiBsb2dpbih7cmVkaXJlY3RVcmk6IHJlZGlyZWN0VXJpLCBzdGF0ZTpzdGF0ZX0pXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI21lc3NhZ2U+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic3RhdHVzID09PSBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRFwiIGNsYXNzPVwibm90LWF1dGhvcml6ZWRcIj57e2kxOG4ubm90QXV0aG9yaXplZH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRFwiIGNsYXNzPVwiYXV0aG9yaXplZFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2VsY29tZVwiPnt7aTE4bi5hdXRob3JpemVkfX0mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInByb2ZpbGUtbmFtZVwiIFtpbm5lckhUTUxdPVwicHJvZmlsZU5hbWVcIj48L3N0cm9uZz5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInN0YXR1cyA9PT0gT0F1dGhTdGF0dXMuREVOSUVEXCIgY2xhc3M9XCJkZW5pZWRcIj57e2kxOG4uZGVuaWVkfX08L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
|
|
@@ -18,4 +18,4 @@ export var OAuthStatus;
|
|
|
18
18
|
OAuthStatus["AUTHORIZED"] = "AUTHORIZED";
|
|
19
19
|
OAuthStatus["DENIED"] = "DENIED";
|
|
20
20
|
})(OAuthStatus || (OAuthStatus = {}));
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVMsYUFBYSxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFTLGFBQWEsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBVyxVQUFVLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQVUsU0FBUyxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFjLGFBQWEsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBYSxZQUFZLENBQUMsQ0FBQztBQUV4RSxNQUFNLENBQU4sSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLGtDQUFxQixDQUFBO0lBQ3JCLHdDQUEyQixDQUFBO0lBQzNCLCtCQUFrQixDQUFBO0lBQ2xCLHFEQUF3QyxDQUFBO0FBQzFDLENBQUMsRUFMVyxTQUFTLEtBQVQsU0FBUyxRQUtwQjtBQW1GRCxNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLGdEQUFpQyxDQUFBO0lBQ2pDLHdDQUF5QixDQUFBO0lBQ3pCLGdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX0hPU1QgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignU0VSVkVSX0hPU1QnKTtcbmV4cG9ydCBjb25zdCBTRVJWRVJfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdTRVJWRVJfUEFUSCcpO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OID0gbmV3IEluamVjdGlvblRva2VuPExvY2F0aW9uPignTG9jYXRpb24nKTtcbmV4cG9ydCBjb25zdCBTVE9SQUdFID0gbmV3IEluamVjdGlvblRva2VuPFN0b3JhZ2U+KCdTdG9yYWdlJyk7XG5leHBvcnQgY29uc3QgT0FVVEhfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE9BdXRoQ29uZmlnPignT0F1dGhDb25maWcnKTtcbmV4cG9ydCBjb25zdCBPQVVUSF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPQXV0aFRva2VuPignT0F1dGhUb2tlbicpO1xuXG5leHBvcnQgZW51bSBPQXV0aFR5cGUge1xuICBSRVNPVVJDRSA9ICdwYXNzd29yZCcsXG4gIEFVVEhPUklaQVRJT05fQ09ERSA9ICdjb2RlJyxcbiAgSU1QTElDSVQgPSAndG9rZW4nLFxuICBDTElFTlRfQ1JFREVOVElBTCA9ICdjbGllbnRfY3JlZGVudGlhbHMnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhDb25maWcge1xuICB0eXBlOiBPQXV0aFR5cGU7XG4gIGNvbmZpZzogT0F1dGhUeXBlQ29uZmlnO1xuICBzdG9yYWdlS2V5Pzogc3RyaW5nO1xuICBzdG9yYWdlPzogU3RvcmFnZTtcbiAgaWdub3JlUGF0aHM/OiBSZWdFeHBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRDcmVkZW50aWFsQ29uZmlnIHtcbiAgdG9rZW5QYXRoOiBzdHJpbmc7XG4gIHJldm9rZVBhdGg/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDb25maWcgZXh0ZW5kcyBDbGllbnRDcmVkZW50aWFsQ29uZmlnIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbXBsaWNpdENvbmZpZyB7XG4gIGF1dGhvcml6ZVBhdGg6IHN0cmluZztcbiAgcmV2b2tlUGF0aD86IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIGxvZ291dFBhdGg/OiBzdHJpbmc7XG4gIGxvZ291dFJlZGlyZWN0VXJpPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db2RlQ29uZmlnIGV4dGVuZHMgUmVzb3VyY2VDb25maWcge1xuICBhdXRob3JpemVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvbkNvZGVQS0NFQ29uZmlnIGV4dGVuZHMgQXV0aG9yaXphdGlvbkNvZGVDb25maWcge1xuICBwa2NlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZyB7XG4gIGlzc3VlclBhdGg6IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBhcmFtZXRlcnMge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltcGxpY2l0UGFyYW1ldGVycyB7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycyBleHRlbmRzIEltcGxpY2l0UGFyYW1ldGVycyB7XG59XG5cbmV4cG9ydCB0eXBlIE9BdXRoUGFyYW1ldGVycyA9IFJlc291cmNlUGFyYW1ldGVycyB8IEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycyB8IEltcGxpY2l0UGFyYW1ldGVycztcbmV4cG9ydCB0eXBlIE9BdXRoVHlwZUNvbmZpZyA9IE9wZW5JZENvbmZpZ1xuICB8IEF1dGhvcml6YXRpb25Db2RlUEtDRUNvbmZpZ1xuICB8IEF1dGhvcml6YXRpb25Db2RlQ29uZmlnXG4gIHwgSW1wbGljaXRDb25maWdcbiAgfCBSZXNvdXJjZUNvbmZpZ1xuICB8IENsaWVudENyZWRlbnRpYWxDb25maWc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhUb2tlbiB7XG4gIGlkX3Rva2VuPzogc3RyaW5nO1xuICBhY2Nlc3NfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuX3R5cGU/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJlZnJlc2hfZXhwaXJlc19pbj86IG51bWJlcjtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIGNvZGVWZXJpZmllcj86IHN0cmluZztcbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoU3RhdHVzIHtcbiAgTk9UX0FVVEhPUklaRUQgPSAnTk9UX0FVVEhPUklaRUQnLFxuICBBVVRIT1JJWkVEID0gJ0FVVEhPUklaRUQnLFxuICBERU5JRUQgPSAnREVOSUVEJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGludHJvc3BlY3Rpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgZW5kX3Nlc3Npb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJldm9jYXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHNjb3Blc19zdXBwb3J0ZWQ/OiBzdHJpbmdbXTtcbiAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kc19zdXBwb3J0ZWQ/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VySW5mbyB7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW47XG4gIGZhbWlseV9uYW1lPzogc3RyaW5nO1xuICBnaXZlbl9uYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcmVmZXJyZWRfdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHN1Yj86IHN0cmluZztcbiAgYWRkcmVzcz86IG9iamVjdDtcbiAgcGljdHVyZT86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludHJvc3BlY3RJbmZvIGV4dGVuZHMgVXNlckluZm8ge1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgZXhwOiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -92,12 +92,12 @@ export class OAuthModule {
|
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
96
|
-
OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.
|
|
95
|
+
OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
96
|
+
OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthModule, declarations: [OAuthLoginComponent], imports: [CommonModule,
|
|
97
97
|
FormsModule,
|
|
98
98
|
HttpClientModule,
|
|
99
99
|
RouterModule], exports: [OAuthLoginComponent] });
|
|
100
|
-
OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.
|
|
100
|
+
OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthModule, providers: [
|
|
101
101
|
LocationService,
|
|
102
102
|
StorageService,
|
|
103
103
|
OAuthService,
|
|
@@ -108,7 +108,7 @@ OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
108
108
|
HttpClientModule,
|
|
109
109
|
RouterModule,
|
|
110
110
|
]] });
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthModule, decorators: [{
|
|
112
112
|
type: NgModule,
|
|
113
113
|
args: [{
|
|
114
114
|
imports: [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { throwError } from 'rxjs';
|
|
3
3
|
import { catchError } from 'rxjs/operators';
|
|
4
4
|
import { OAuthStatus } from '../models';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -21,12 +21,11 @@ export class OAuthInterceptor {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
return next.handle(req).pipe(catchError((err) => {
|
|
24
|
-
if (err.status === 401) {
|
|
24
|
+
if (err.status === 401 && !this.isPathExcepted(req)) {
|
|
25
25
|
this.oauthService.token = null;
|
|
26
26
|
this.oauthService.status = OAuthStatus.DENIED;
|
|
27
|
-
return EMPTY;
|
|
28
27
|
}
|
|
29
|
-
return throwError(
|
|
28
|
+
return throwError(err);
|
|
30
29
|
}));
|
|
31
30
|
}
|
|
32
31
|
else {
|
|
@@ -49,9 +48,9 @@ export class OAuthInterceptor {
|
|
|
49
48
|
return false;
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
|
-
OAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
|
53
|
-
OAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
|
51
|
+
OAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthInterceptor, deps: [{ token: i1.OAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
52
|
+
OAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthInterceptor });
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: OAuthInterceptor, decorators: [{
|
|
55
54
|
type: Injectable
|
|
56
55
|
}], ctorParameters: function () { return [{ type: i1.OAuthService }]; } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9zZXJ2aWNlcy9vYXV0aC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBb0IsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7QUFHdEMsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtvQkFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7d0JBQ2QsVUFBVSxFQUFFOzRCQUNWLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTt5QkFDM0Q7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUMxQixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDL0M7Z0JBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQXFCO1FBQzFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3hDLElBQUksV0FBVyxFQUFFO1lBQ2YsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsSUFBSTtvQkFDRixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUM3QixPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFDRjtnQkFBQyxPQUFPLEdBQUcsRUFBRTtpQkFDYjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzZHQTVDVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFTVBUWSwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T0F1dGhTZXJ2aWNlfSBmcm9tICcuL29hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHtPQXV0aFN0YXR1c30gZnJvbSAnLi4vbW9kZWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9BdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UpIHtcbiAgfVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIGlmICh0aGlzLm9hdXRoU2VydmljZSkge1xuICAgICAgaWYgKCF0aGlzLmlzUGF0aEV4Y2VwdGVkKHJlcSkpIHtcbiAgICAgICAgY29uc3Qge3Rva2VufSA9IHRoaXMub2F1dGhTZXJ2aWNlO1xuICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4uYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYCR7dG9rZW4udG9rZW5fdHlwZX0gJHt0b2tlbi5hY2Nlc3NfdG9rZW59YFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAxICYmICF0aGlzLmlzUGF0aEV4Y2VwdGVkKHJlcSkpIHtcbiAgICAgICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnRva2VuID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNQYXRoRXhjZXB0ZWQocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3Qge2lnbm9yZVBhdGhzfSA9IHRoaXMub2F1dGhTZXJ2aWNlO1xuICAgIGlmIChpZ25vcmVQYXRocykge1xuICAgICAgZm9yIChjb25zdCBpZ25vcmVQYXRoIG9mIHRoaXMub2F1dGhTZXJ2aWNlLmlnbm9yZVBhdGhzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHJlcS51cmwubWF0Y2goaWdub3JlUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|