verben-authentication-ui 0.3.8 → 0.3.9
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/esm2022/lib/components/auth-callback/auth-callback.component.mjs +48 -0
- package/esm2022/lib/components/auth-callback/auth-callback.module.mjs +18 -0
- package/esm2022/lib/components/o-auth/o-auth.component.mjs +53 -81
- package/esm2022/lib/components/sign-in/sign-in.component.mjs +103 -35
- package/esm2022/lib/components/sign-up/sign-up.component.mjs +1 -1
- package/esm2022/lib/components/user-management/user-management.component.mjs +2 -2
- package/esm2022/lib/components/user-request/user-request.component.mjs +58 -61
- package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +2 -2
- package/esm2022/lib/models/UserRequest.mjs +1 -1
- package/esm2022/lib/models/log-in.mjs +1 -1
- package/esm2022/lib/models/oauth-response.mjs +2 -0
- package/esm2022/lib/services/http-web-request.service.mjs +1 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/verben-authentication-ui.mjs +271 -174
- package/fesm2022/verben-authentication-ui.mjs.map +1 -1
- package/lib/components/auth-callback/auth-callback.component.d.ts +17 -0
- package/lib/components/auth-callback/auth-callback.module.d.ts +8 -0
- package/lib/components/o-auth/o-auth.component.d.ts +10 -18
- package/lib/components/sign-in/sign-in.component.d.ts +17 -5
- package/lib/components/user-request/user-request.component.d.ts +6 -5
- package/lib/models/UserRequest.d.ts +2 -0
- package/lib/models/log-in.d.ts +1 -0
- package/lib/models/oauth-response.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/router";
|
|
4
|
+
export class AuthCallbackComponent {
|
|
5
|
+
router;
|
|
6
|
+
code = '';
|
|
7
|
+
previousUrl = '';
|
|
8
|
+
redirectText;
|
|
9
|
+
width = 40;
|
|
10
|
+
height = 40;
|
|
11
|
+
color = 'black';
|
|
12
|
+
constructor(router) {
|
|
13
|
+
this.router = router;
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
this.handleRedirect();
|
|
17
|
+
}
|
|
18
|
+
handleRedirect() {
|
|
19
|
+
const params = new URLSearchParams(window.location.search);
|
|
20
|
+
const code = params.get('code');
|
|
21
|
+
const stateParam = params.get('state');
|
|
22
|
+
if (code && stateParam) {
|
|
23
|
+
try {
|
|
24
|
+
const state = JSON.parse(decodeURIComponent(stateParam));
|
|
25
|
+
const returnTo = state.returnTo || '/';
|
|
26
|
+
this.router.navigate([returnTo], { queryParams: { code } });
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
const msg = e;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthCallbackComponent, selector: "verben-auth-callback", inputs: { redirectText: "redirectText", width: "width", height: "height", color: "color" }, ngImport: i0, template: "<section class=\"wrapper\"> \n <div class=\"flexWrapper\"> \n <p class=\"{{redirectText}}\">Redirecting ...</p>\n <div class=\"loader\"></div>\n </div>\n</section>", styles: [".wrapper{width:100%;min-height:100%;display:flex;align-items:center;justify-content:center}.flexWrapper{display:flex;align-items:center;justify-content:center}.loader{border:2px solid white;border-radius:50%;border-top:2px solid black;width:40px;height:40px;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] });
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'verben-auth-callback', template: "<section class=\"wrapper\"> \n <div class=\"flexWrapper\"> \n <p class=\"{{redirectText}}\">Redirecting ...</p>\n <div class=\"loader\"></div>\n </div>\n</section>", styles: [".wrapper{width:100%;min-height:100%;display:flex;align-items:center;justify-content:center}.flexWrapper{display:flex;align-items:center;justify-content:center}.loader{border:2px solid white;border-radius:50%;border-top:2px solid black;width:40px;height:40px;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
39
|
+
}], ctorParameters: () => [{ type: i1.Router }], propDecorators: { redirectText: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], width: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], height: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], color: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}] } });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jYWxsYmFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBUXpELE1BQU0sT0FBTyxxQkFBcUI7SUFTWjtJQVJwQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDaEIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssR0FBVSxFQUFFLENBQUM7SUFDbEIsTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQVUsT0FBTyxDQUFDO0lBR2hDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkMsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQTdCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQix3SkNSbEMseUxBS1U7OzRGREdHLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxzQkFBc0I7MkVBT3ZCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJiZW4tYXV0aC1jYWxsYmFjaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29kZTogc3RyaW5nID0gJyc7XG4gIHByZXZpb3VzVXJsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcmVkaXJlY3RUZXh0PzpzdHJpbmc7XG4gIEBJbnB1dCgpIHdpZHRoOm51bWJlciA9IDQwO1xuICBASW5wdXQoKSBoZWlnaHQ6bnVtYmVyID0gNDA7XG4gIEBJbnB1dCgpIGNvbG9yOnN0cmluZyA9ICdibGFjayc7XG4gIFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVSZWRpcmVjdCgpO1xuICB9XG5cbiAgaGFuZGxlUmVkaXJlY3QoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBjb25zdCBjb2RlID0gcGFyYW1zLmdldCgnY29kZScpO1xuICAgIGNvbnN0IHN0YXRlUGFyYW0gPSBwYXJhbXMuZ2V0KCdzdGF0ZScpO1xuXG4gICAgaWYgKGNvZGUgJiYgc3RhdGVQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChzdGF0ZVBhcmFtKSk7XG4gICAgICAgIGNvbnN0IHJldHVyblRvID0gc3RhdGUucmV0dXJuVG8gfHwgJy8nO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcmV0dXJuVG9dLCB7IHF1ZXJ5UGFyYW1zOiB7IGNvZGUgfSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICBjb25zdCBtc2cgPSBlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIndyYXBwZXJcIj4gXG4gICAgPGRpdiBjbGFzcz1cImZsZXhXcmFwcGVyXCI+IFxuICAgICAgICA8cCBjbGFzcz1cInt7cmVkaXJlY3RUZXh0fX1cIj5SZWRpcmVjdGluZyAuLi48L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { AuthCallbackComponent } from './auth-callback.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AuthCallbackModule {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, declarations: [AuthCallbackComponent], imports: [CommonModule], exports: [AuthCallbackComponent] });
|
|
8
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, imports: [CommonModule] });
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthCallbackModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
declarations: [AuthCallbackComponent],
|
|
14
|
+
imports: [CommonModule],
|
|
15
|
+
exports: [AuthCallbackComponent]
|
|
16
|
+
}]
|
|
17
|
+
}] });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jYWxsYmFjay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyxrQkFBa0I7d0dBQWxCLGtCQUFrQjt5R0FBbEIsa0JBQWtCLGlCQUpkLHFCQUFxQixhQUMxQixZQUFZLGFBQ1oscUJBQXFCO3lHQUVwQixrQkFBa0IsWUFIbkIsWUFBWTs7NEZBR1gsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0aENhbGxiYWNrQ29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dGhDYWxsYmFja0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQXV0aENhbGxiYWNrQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBBdXRoQ2FsbGJhY2tNb2R1bGUge30iXX0=
|
|
@@ -1,79 +1,41 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { MechanismType } from '../../models/auth-mechanism';
|
|
3
|
-
import { ErrorResponse } from '../../models/ErrorResponse';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
import * as i1 from "@angular/router";
|
|
6
5
|
import * as i2 from "../../services/http-web-request.service";
|
|
7
6
|
import * as i3 from "../../services/util.service";
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "verben-ng-ui";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "verben-ng-ui";
|
|
11
9
|
export class OAuthComponent {
|
|
12
10
|
route;
|
|
13
11
|
server;
|
|
14
12
|
utilService;
|
|
15
|
-
|
|
16
|
-
clientId = 'YOUR_CLIENT_ID_FROM_BACKEND';
|
|
13
|
+
router;
|
|
17
14
|
showGoogle = false;
|
|
18
15
|
showMicrosoft = false;
|
|
19
16
|
showApple = false;
|
|
20
17
|
authMechanisms = null;
|
|
21
|
-
redirectUri = 'http://localhost:4200/documentation/login';
|
|
22
|
-
apiKey;
|
|
23
18
|
microsoftClick = new EventEmitter();
|
|
24
|
-
onSubmitGoogleAuth = new EventEmitter();
|
|
25
19
|
googleClick = new EventEmitter();
|
|
26
20
|
appleClick = new EventEmitter();
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
constructor(route, server, utilService, envSvc) {
|
|
21
|
+
page = '';
|
|
22
|
+
constructor(route, server, utilService, router) {
|
|
30
23
|
this.route = route;
|
|
31
24
|
this.server = server;
|
|
32
25
|
this.utilService = utilService;
|
|
33
|
-
this.
|
|
26
|
+
this.router = router;
|
|
34
27
|
}
|
|
35
28
|
ngOnInit() {
|
|
29
|
+
this.loadPage();
|
|
36
30
|
this.loadGoogleScript();
|
|
37
|
-
this.route.queryParams.subscribe(params => {
|
|
38
|
-
this.code = params['code'];
|
|
39
|
-
});
|
|
40
|
-
if (this.code) {
|
|
41
|
-
console.log('Code from URL:', this.code);
|
|
42
|
-
this.verifyUserDetails();
|
|
43
|
-
}
|
|
44
31
|
if (this.authMechanisms !== null) {
|
|
45
|
-
this.
|
|
46
|
-
this.showGoogle = this.authMechanisms.some(item => item.AuthMechanism.includes(MechanismType.Google));
|
|
47
|
-
if (this.showGoogle) {
|
|
48
|
-
const data = this.authMechanisms.find(item => item.AuthMechanism.includes(MechanismType.Google));
|
|
49
|
-
this.clientId = data?.ClientId;
|
|
50
|
-
this.googleRedirectUrl = data?.RedirectUri;
|
|
51
|
-
}
|
|
52
|
-
this.showApple = this.authMechanisms.some(item => item.AuthMechanism.includes(MechanismType.Apple));
|
|
32
|
+
this.authMechanisms = this.authMechanisms.filter((item) => item.AuthMechanism !== MechanismType.InApp);
|
|
53
33
|
}
|
|
54
34
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const data = this.authMechanisms.find(item => item.AuthMechanism.includes(MechanismType.Google));
|
|
58
|
-
const payload = {
|
|
59
|
-
AuthCode: this.code,
|
|
60
|
-
APIKey: this.apiKey,
|
|
61
|
-
AuthMechanism: data.AuthMechanism
|
|
62
|
-
};
|
|
63
|
-
this.utilService.sendBI(true);
|
|
64
|
-
const res = await this.server.post(`Authentication/GetUserDetails`, payload);
|
|
65
|
-
this.utilService.sendBI(false);
|
|
66
|
-
if (res instanceof ErrorResponse) {
|
|
67
|
-
this.onSubmitGoogleAuth.emit(res);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
var result = res;
|
|
71
|
-
this.onSubmitGoogleAuth.emit(result);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
35
|
+
loadPage() {
|
|
36
|
+
this.page = this.router.url;
|
|
74
37
|
}
|
|
75
38
|
loadGoogleScript() {
|
|
76
|
-
console.log('checking here');
|
|
77
39
|
if (!document.getElementById('google-jssdk')) {
|
|
78
40
|
const script = document.createElement('script');
|
|
79
41
|
script.src = 'https://accounts.google.com/gsi/client';
|
|
@@ -85,53 +47,63 @@ export class OAuthComponent {
|
|
|
85
47
|
document.head.appendChild(script);
|
|
86
48
|
}
|
|
87
49
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
oAuthWithGoogle() {
|
|
92
|
-
const redirectUri = encodeURIComponent(this.redirectUri);
|
|
50
|
+
oAuthWithGoogle(data) {
|
|
51
|
+
const redirectUri = encodeURIComponent(data.RedirectUri);
|
|
93
52
|
const scope = encodeURIComponent('openid email profile');
|
|
94
53
|
const responseType = 'code';
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
exchangeCodeForToken(authCode) {
|
|
99
|
-
console.log('Exchanging code for token:', authCode);
|
|
100
|
-
// this.http.post('/api/auth/google/token', { code: authCode }).subscribe({
|
|
101
|
-
// next: (response) => {
|
|
102
|
-
// console.log('Token received:', response);
|
|
103
|
-
// // Handle successful login (store token, etc.)
|
|
104
|
-
// },
|
|
105
|
-
// error: (err) => {
|
|
106
|
-
// console.error('Error exchanging code for token:', err);
|
|
107
|
-
// }
|
|
108
|
-
// });
|
|
109
|
-
}
|
|
110
|
-
handleCredentialResponse(response) {
|
|
111
|
-
console.log('Encoded JWT ID token:', response.credential);
|
|
54
|
+
const state = encodeURIComponent(JSON.stringify({ returnTo: this.page }));
|
|
55
|
+
const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${data.ClientId}&redirect_uri=${redirectUri}&response_type=${responseType}&scope=${scope}&state=${state}`;
|
|
56
|
+
window.location.href = authUrl;
|
|
112
57
|
}
|
|
113
58
|
oAuthWithApple() {
|
|
114
59
|
this.appleClick.emit();
|
|
115
60
|
}
|
|
116
|
-
|
|
117
|
-
|
|
61
|
+
oAuthWithMicrosoft() {
|
|
62
|
+
this.microsoftClick.emit();
|
|
63
|
+
}
|
|
64
|
+
checkForValue(value) {
|
|
65
|
+
switch (value) {
|
|
66
|
+
case MechanismType.Google:
|
|
67
|
+
return 'google-logo';
|
|
68
|
+
break;
|
|
69
|
+
case MechanismType.Apple:
|
|
70
|
+
return 'apple-logo';
|
|
71
|
+
break;
|
|
72
|
+
case MechanismType.MicrosoftAD:
|
|
73
|
+
return 'microsoft-logo';
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
handleOauthClick(value) {
|
|
80
|
+
switch (value.AuthMechanism) {
|
|
81
|
+
case MechanismType.Google:
|
|
82
|
+
return this.oAuthWithGoogle(value);
|
|
83
|
+
break;
|
|
84
|
+
case MechanismType.Apple:
|
|
85
|
+
return this.oAuthWithApple();
|
|
86
|
+
break;
|
|
87
|
+
case MechanismType.MicrosoftAD:
|
|
88
|
+
return this.oAuthWithMicrosoft();
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpWebRequestService }, { token: i3.UtilService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OAuthComponent, selector: "verben-o-auth", inputs: { authMechanisms: "authMechanisms" }, outputs: { microsoftClick: "microsoftClick", googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <div class=\"btnWrapper\">\n <div *ngFor=\"let btn of authMechanisms, let i = index\"> \n <verbena-button\n [svg]=\"checkForValue(btn.AuthMechanism)\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n [text]=\"'Continue with ' + btn.AuthMechanism\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"handleOauthClick(btn)\"\n ></verbena-button>\n </div> \n </div> \n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.btnWrapper{display:flex;flex-direction:column;gap:10px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
|
|
118
96
|
}
|
|
119
97
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, decorators: [{
|
|
120
98
|
type: Component,
|
|
121
|
-
args: [{ selector: 'verben-o-auth', template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <
|
|
122
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.HttpWebRequestService }, { type: i3.UtilService }, { type:
|
|
123
|
-
type: Input
|
|
124
|
-
}], redirectUri: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], apiKey: [{
|
|
99
|
+
args: [{ selector: 'verben-o-auth', template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <div class=\"btnWrapper\">\n <div *ngFor=\"let btn of authMechanisms, let i = index\"> \n <verbena-button\n [svg]=\"checkForValue(btn.AuthMechanism)\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n [text]=\"'Continue with ' + btn.AuthMechanism\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"handleOauthClick(btn)\"\n ></verbena-button>\n </div> \n </div> \n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.btnWrapper{display:flex;flex-direction:column;gap:10px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"] }]
|
|
100
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.HttpWebRequestService }, { type: i3.UtilService }, { type: i1.Router }], propDecorators: { authMechanisms: [{
|
|
127
101
|
type: Input
|
|
128
102
|
}], microsoftClick: [{
|
|
129
103
|
type: Output
|
|
130
|
-
}], onSubmitGoogleAuth: [{
|
|
131
|
-
type: Output
|
|
132
104
|
}], googleClick: [{
|
|
133
105
|
type: Output
|
|
134
106
|
}], appleClick: [{
|
|
135
107
|
type: Output
|
|
136
108
|
}] } });
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvby1hdXRoL28tYXV0aC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL28tYXV0aC9vLWF1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFjM0QsTUFBTSxPQUFPLGNBQWM7SUFlZjtJQUNBO0lBQ0E7SUFDQTtJQWpCVixRQUFRLEdBQVcsNkJBQTZCLENBQUM7SUFDakQsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUMzQixhQUFhLEdBQVcsS0FBSyxDQUFDO0lBQzlCLFNBQVMsR0FBVyxLQUFLLENBQUM7SUFDakIsY0FBYyxHQUEwQixJQUFJLENBQUE7SUFDNUMsV0FBVyxHQUFVLDJDQUEyQyxDQUFBO0lBQ2hFLE1BQU0sQ0FBUTtJQUNiLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQzFDLGtCQUFrQixHQUFtRCxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hGLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3ZDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2hELElBQUksR0FBVSxFQUFFLENBQUM7SUFDakIsaUJBQWlCLEdBQVksRUFBRSxDQUFBO0lBQy9CLFlBQ1UsS0FBcUIsRUFDckIs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ekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBRTVCLE1BQU0sT0FBTyxHQUFHLDBEQUEwRCxJQUFJLENBQUMsUUFBUSxpQkFBaUIsV0FBVyxrQkFBa0IsWUFBWSxVQUFVLEtBQUssRUFBRSxDQUFDO1FBRW5LLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLCtCQUErQjtJQUNqRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBZ0I7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwRCwyRUFBMkU7UUFDM0UsNEJBQTRCO1FBQzVCLG9EQUFvRDtRQUNwRCx5REFBeUQ7UUFDekQsU0FBUztRQUNULHdCQUF3QjtRQUN4QixrRUFBa0U7UUFDbEUsUUFBUTtRQUNSLE1BQU07SUFDUixDQUFDO0lBR0Msd0JBQXdCLENBQUMsUUFBYTtRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0E5SFUsY0FBYzs0RkFBZCxjQUFjLGdTQ3BCM0IsMHVFQTZFQTs7NEZEekRhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsZUFBZTtrTEFTaEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoTWVjaGFuaXNtLCBNZWNoYW5pc21UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtbWVjaGFuaXNtJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtd2ViLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JSZXNwb25zZSc7XG5pbXBvcnQgeyBSZXNwb25zZUtleVZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Jlc3BvbnNlS2V5VmFsdWUnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgZ29vZ2xlOiBhbnk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLW8tYXV0aCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWF1dGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vby1hdXRoLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICdZT1VSX0NMSUVOVF9JRF9GUk9NX0JBQ0tFTkQnO1xuICBzaG93R29vZ2xlOmJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd01pY3Jvc29mdDpib29sZWFuID0gZmFsc2U7XG4gIHNob3dBcHBsZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dGhNZWNoYW5pc21zOkF1dGhNZWNoYW5pc21bXSB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHJlZGlyZWN0VXJpOnN0cmluZyA9ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvZG9jdW1lbnRhdGlvbi9sb2dpbidcbiAgQElucHV0KCkgYXBpS2V5PzpzdHJpbmdcbiAgQE91dHB1dCgpIG1pY3Jvc29mdENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25TdWJtaXRHb29nbGVBdXRoOiBFdmVudEVtaXR0ZXI8UmVzcG9uc2VLZXlWYWx1ZSB8IEVycm9yUmVzcG9uc2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ29vZ2xlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBhcHBsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBjb2RlOnN0cmluZyA9ICcnO1xuICBnb29nbGVSZWRpcmVjdFVybCA6IHN0cmluZyA9ICcnXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgKXsgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRHb29nbGVTY3JpcHQoKTsgXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMuY29kZSA9IHBhcmFtc1snY29kZSddO1xuICAgIH0pO1xuICAgICBpZih0aGlzLmNvZGUpeyBcbiAgICAgIGNvbnNvbGUubG9nKCdDb2RlIGZyb20gVVJMOicsIHRoaXMuY29kZSk7XG4gICAgICB0aGlzLnZlcmlmeVVzZXJEZXRhaWxzKClcbiAgICAgfVxuICAgICAgIGlmKHRoaXMuYXV0aE1lY2hhbmlzbXMgIT09IG51bGwgKXsgXG4gICAgICAgIHRoaXMuc2hvd01pY3Jvc29mdCA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuc29tZShpdGVtID0+XG4gICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEKVxuICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zaG93R29vZ2xlID0gdGhpcy5hdXRoTWVjaGFuaXNtcy5zb21lKGl0ZW0gPT5cbiAgICAgICAgICAgaXRlbS5BdXRoTWVjaGFuaXNtLmluY2x1ZGVzKE1lY2hhbmlzbVR5cGUuR29vZ2xlKVxuICAgICAgICAgKTtcbiAgICAgICAgIGlmKHRoaXMuc2hvd0dvb2dsZSl7IFxuICAgICAgICAgICAgY29uc3QgZGF0YTphbnkgPSB0aGlzLmF1dGhNZWNoYW5pc21zLmZpbmQoaXRlbSA9PlxuICAgICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkdvb2dsZSlcbiAgICAgICAgICAgKVxuICAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uQ2xpZW50SWQ7XG4gICAgICAgICAgIHRoaXMuZ29vZ2xlUmVkaXJlY3RVcmwgPSBkYXRhPy5SZWRpcmVjdFVyaVxuICAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dBcHBsZSA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuc29tZShpdGVtID0+XG4gICAgICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkFwcGxlKVxuICAgICAgICAgKTtcbiAgICAgfVxuICB9XG4gIFxuICBhc3luYyB2ZXJpZnlVc2VyRGV0YWlscygpeyBcbiAgICBpZih0aGlzLmF1dGhNZWNoYW5pc21zICE9PSBudWxsICYmIHRoaXMuYXBpS2V5KXsgXG4gICAgICBjb25zdCBkYXRhOmFueSA9IHRoaXMuYXV0aE1lY2hhbmlzbXMuZmluZChpdGVtID0+XG4gICAgICAgIGl0ZW0uQXV0aE1lY2hhbmlzbS5pbmNsdWRlcyhNZWNoYW5pc21UeXBlLkdvb2dsZSlcbiAgICAgIClcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IFxuICAgICAgICBBdXRoQ29kZTp0aGlzLmNvZGUsXG4gICAgICAgIEFQSUtleTp0aGlzLmFwaUtleSxcbiAgICAgICAgQXV0aE1lY2hhbmlzbTpkYXRhLkF1dGhNZWNoYW5pc21cbiAgICAgIH1cblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgQXV0aGVudGljYXRpb24vR2V0VXNlckRldGFpbHNgLHBheWxvYWRcbiAgICAgICk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLm9uU3VibWl0R29vZ2xlQXV0aC5lbWl0KHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFJlc3BvbnNlS2V5VmFsdWU7XG4gICAgICAgIHRoaXMub25TdWJtaXRHb29nbGVBdXRoLmVtaXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgIFxuICB9XG5cbiAgbG9hZEdvb2dsZVNjcmlwdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnY2hlY2tpbmcgaGVyZScpOyAgXG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29vZ2xlLWpzc2RrJykpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9ICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vZ3NpL2NsaWVudCc7XG4gICAgICBzY3JpcHQuaWQgPSAnZ29vZ2xlLWpzc2RrJztcbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IGNvbnNvbGUubG9nKCdHb29nbGUgU0RLIGxvYWRlZCcpO1xuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiBjb25zb2xlLmxvZygnRXJyb3IgbG9hZGluZyBHb29nbGUgU0RLJyk7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICB9XG5cbiAgb0F1dGhXaXRoTWljcm9zb2Z0KCl7XG4gICAgdGhpcy5taWNyb3NvZnRDbGljay5lbWl0KCk7IFxuICB9XG5cbm9BdXRoV2l0aEdvb2dsZSgpIHtcbiAgY29uc3QgcmVkaXJlY3RVcmkgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5yZWRpcmVjdFVyaSk7XG4gIGNvbnN0IHNjb3BlID0gZW5jb2RlVVJJQ29tcG9uZW50KCdvcGVuaWQgZW1haWwgcHJvZmlsZScpO1xuICBjb25zdCByZXNwb25zZVR5cGUgPSAnY29kZSc7XG5cbiAgY29uc3QgYXV0aFVybCA9IGBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdjIvYXV0aD9jbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdFVyaX0mcmVzcG9uc2VfdHlwZT0ke3Jlc3BvbnNlVHlwZX0mc2NvcGU9JHtzY29wZX1gO1xuXG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYXV0aFVybDsgLy8gUmVkaXJlY3RzIHRoZSBjdXJyZW50IHdpbmRvd1xufVxuXG5leGNoYW5nZUNvZGVGb3JUb2tlbihhdXRoQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCdFeGNoYW5naW5nIGNvZGUgZm9yIHRva2VuOicsIGF1dGhDb2RlKTtcblxuICAvLyB0aGlzLmh0dHAucG9zdCgnL2FwaS9hdXRoL2dvb2dsZS90b2tlbicsIHsgY29kZTogYXV0aENvZGUgfSkuc3Vic2NyaWJlKHtcbiAgLy8gICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiByZWNlaXZlZDonLCByZXNwb25zZSk7XG4gIC8vICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgbG9naW4gKHN0b3JlIHRva2VuLCBldGMuKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gIC8vICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZXhjaGFuZ2luZyBjb2RlIGZvciB0b2tlbjonLCBlcnIpO1xuICAvLyAgICAgfVxuICAvLyB9KTtcbn1cblxuXG4gIGhhbmRsZUNyZWRlbnRpYWxSZXNwb25zZShyZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0VuY29kZWQgSldUIElEIHRva2VuOicsIHJlc3BvbnNlLmNyZWRlbnRpYWwpXG4gIH1cbiAgb0F1dGhXaXRoQXBwbGUoKXtcbiAgICB0aGlzLmFwcGxlQ2xpY2suZW1pdCgpOyBcbiAgfVxuXG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIm9hdXRoV3JhcHBlclwiPiBcbiAgICA8ZGl2IGNsYXNzPVwiT3JGbGV4V3JhcHBlclwiPlxuICAgICAgICA8aHIvPlxuICAgICAgICA8c3Bhbj5PUjwvc3Bhbj5cbiAgICAgICAgPGhyLz5cbiAgICA8L2Rpdj5cbiAgICAgPHNwYW4gKm5nSWY9XCJzaG93TWljcm9zb2Z0XCI+IFxuICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgIHN2Zz1cIm1pY3Jvc29mdC1sb2dvXCJcbiAgICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgICBbc3ZnV2lkdGhdPVwiMjRcIlxuICAgICAgIHRleHQ9XCJDb250aW51ZSB3aXRoIE1pY3Jvc29mdFwiXG4gICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICMzMzNcIlxuICAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgYnV0dG9uQ2xhc3M9XCJmb250LW5vcm1hbCB0ZXh0LVsyNHB4XSBsZWFkaW5nLVsyOS4wNXB4XSB0ZXh0LVsjMzMzXSBtdC0yXCJcbiAgICAgICAoY2xpY2spPVwib0F1dGhXaXRoTWljcm9zb2Z0KClcIlxuICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICA8L3NwYW4+IFxuXG4gICAgPHNwYW4gKm5nSWY9XCJzaG93R29vZ2xlXCI+IFxuICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICBzdmc9XCJnb29nbGUtbG9nb1wiXG4gICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgIFtzdmdXaWR0aF09XCIyNFwiXG4gICAgICB0ZXh0PVwiQ29udGludWUgd2l0aCBHb29nbGVcIlxuICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjMzMzXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgcGQ9XCIxMHB4IDIwcHhcIlxuICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICBidXR0b25DbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtWzI0cHhdIGxlYWRpbmctWzI5LjA1cHhdIHRleHQtWyMzMzNdIG10LTJcIlxuICAgICAgKGNsaWNrKT1cIm9BdXRoV2l0aEdvb2dsZSgpXCJcbiAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgICA8IS0tIDxkaXYgaWQ9XCJnX2lkX29ubG9hZFwiXG4gICAgIGRhdGEtY2xpZW50X2lkPVwiODM0OTk1ODY2MjgyLWw4Z2twMHIzdjNhMWJkdmZtYXVtdXJraTduZGFyM200LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tXCJcbiAgICAgZGF0YS1jb250ZXh0PVwic2lnbmluXCJcbiAgICAgZGF0YS11eF9tb2RlPVwicG9wdXBcIlxuICAgICBkYXRhLWxvZ2luX3VyaT1cImh0dHA6Ly9sb2NhbGhvc3Q6NTEyNC9BdXRoZW50aWNhdGlvbi9FeHRlcm5hbENhbGxiYWNrXCJcbiAgICAgZGF0YS1pdHBfc3VwcG9ydD1cInRydWVcIj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZ19pZF9zaWduaW5cIlxuICAgICBkYXRhLXR5cGU9XCJzdGFuZGFyZFwiXG4gICAgIGRhdGEtc2hhcGU9XCJyZWN0YW5ndWxhclwiXG4gICAgIGRhdGEtdGhlbWU9XCJvdXRsaW5lXCJcbiAgICAgZGF0YS10ZXh0PVwic2lnbmluX3dpdGhcIlxuICAgICBkYXRhLXNpemU9XCJsYXJnZVwiXG4gICAgIGRhdGEtbG9nb19hbGlnbm1lbnQ9XCJjZW50ZXJcIj5cbjwvZGl2PiAtLT5cbiAgICA8L3NwYW4+XG4gICBcbiAgICA8c3BhbiAqbmdJZj1cInNob3dBcHBsZVwiPiBcbiAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgc3ZnPVwiYXBwbGUtbG9nb1wiXG4gICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgIFtzdmdXaWR0aF09XCIyNFwiXG4gICAgICB0ZXh0PVwiQ29udGludWUgd2l0aCBBcHBsZVwiXG4gICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICMzMzNcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiNDBweFwiXG4gICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgc3ZnUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgIGJ1dHRvbkNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1bMjRweF0gbGVhZGluZy1bMjkuMDVweF0gdGV4dC1bIzMzM10gbXQtMlwiXG4gICAgICAoY2xpY2spPVwib0F1dGhXaXRoQXBwbGUoKVwiXG4gICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8L3NwYW4+XG48L3NlY3Rpb24+XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvby1hdXRoL28tYXV0aC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL28tYXV0aC9vLWF1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBZ0IzRSxNQUFNLE9BQU8sY0FBYztJQVdmO0lBQ0E7SUFDQTtJQUNBO0lBYlYsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDbEIsY0FBYyxHQUEyQixJQUFJLENBQUM7SUFDN0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDdkMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDaEQsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUVsQixZQUNVLEtBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLFdBQXdCLEVBQ3hCLE1BQWM7UUFIZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxD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QUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFdBQVc7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2pDLE1BQU07WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO3dHQTNGVSxjQUFjOzRGQUFkLGNBQWMsd01DakIzQix5ekJBMEJBOzs0RkRUYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLGVBQWU7c0tBUWhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoTWVjaGFuaXNtLCBNZWNoYW5pc21UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dGgtbWVjaGFuaXNtJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBnb29nbGU6IGFueTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZXJiZW4tby1hdXRoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tYXV0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9vLWF1dGguY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2hvd0dvb2dsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93TWljcm9zb2Z0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBcHBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRoTWVjaGFuaXNtczogQXV0aE1lY2hhbmlzbVtdIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBtaWNyb3NvZnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGdvb2dsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYXBwbGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcGFnZTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRQYWdlKCk7XG4gICAgdGhpcy5sb2FkR29vZ2xlU2NyaXB0KCk7XG4gICAgaWYgKHRoaXMuYXV0aE1lY2hhbmlzbXMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuYXV0aE1lY2hhbmlzbXMgPSB0aGlzLmF1dGhNZWNoYW5pc21zLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0uQXV0aE1lY2hhbmlzbSAhPT0gTWVjaGFuaXNtVHlwZS5JbkFwcFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsb2FkUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2UgPSB0aGlzLnJvdXRlci51cmw7XG4gIH1cblxuICBsb2FkR29vZ2xlU2NyaXB0KCk6IHZvaWQge1xuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvb2dsZS1qc3NkaycpKSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL2dzaS9jbGllbnQnO1xuICAgICAgc2NyaXB0LmlkID0gJ2dvb2dsZS1qc3Nkayc7XG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiBjb25zb2xlLmxvZygnR29vZ2xlIFNESyBsb2FkZWQnKTtcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gY29uc29sZS5sb2coJ0Vycm9yIGxvYWRpbmcgR29vZ2xlIFNESycpO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgfVxuXG4gIG9BdXRoV2l0aEdvb2dsZShkYXRhOiBBdXRoTWVjaGFuaXNtKSB7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5SZWRpcmVjdFVyaSk7XG4gICAgY29uc3Qgc2NvcGUgPSBlbmNvZGVVUklDb21wb25lbnQoJ29wZW5pZCBlbWFpbCBwcm9maWxlJyk7XG4gICAgY29uc3QgcmVzcG9uc2VUeXBlID0gJ2NvZGUnO1xuICAgIGNvbnN0IHN0YXRlID0gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHsgcmV0dXJuVG86IHRoaXMucGFnZSB9KSk7XG4gICAgY29uc3QgYXV0aFVybCA9IGBodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdjIvYXV0aD9jbGllbnRfaWQ9JHtkYXRhLkNsaWVudElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdFVyaX0mcmVzcG9uc2VfdHlwZT0ke3Jlc3BvbnNlVHlwZX0mc2NvcGU9JHtzY29wZX0mc3RhdGU9JHtzdGF0ZX1gO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYXV0aFVybDtcbiAgfVxuXG4gIG9BdXRoV2l0aEFwcGxlKCkge1xuICAgIHRoaXMuYXBwbGVDbGljay5lbWl0KCk7XG4gIH1cblxuICBvQXV0aFdpdGhNaWNyb3NvZnQoKSB7XG4gICAgdGhpcy5taWNyb3NvZnRDbGljay5lbWl0KCk7XG4gIH1cblxuICBjaGVja0ZvclZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuR29vZ2xlOlxuICAgICAgICByZXR1cm4gJ2dvb2dsZS1sb2dvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuQXBwbGU6XG4gICAgICAgIHJldHVybiAnYXBwbGUtbG9nbyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEOlxuICAgICAgICByZXR1cm4gJ21pY3Jvc29mdC1sb2dvJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT2F1dGhDbGljayh2YWx1ZTogQXV0aE1lY2hhbmlzbSkge1xuICAgIHN3aXRjaCAodmFsdWUuQXV0aE1lY2hhbmlzbSkge1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLkdvb2dsZTpcbiAgICAgICAgcmV0dXJuIHRoaXMub0F1dGhXaXRoR29vZ2xlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1lY2hhbmlzbVR5cGUuQXBwbGU6XG4gICAgICAgIHJldHVybiB0aGlzLm9BdXRoV2l0aEFwcGxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNZWNoYW5pc21UeXBlLk1pY3Jvc29mdEFEOlxuICAgICAgICByZXR1cm4gdGhpcy5vQXV0aFdpdGhNaWNyb3NvZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cIm9hdXRoV3JhcHBlclwiPiBcbiAgICA8ZGl2IGNsYXNzPVwiT3JGbGV4V3JhcHBlclwiPlxuICAgICAgICA8aHIvPlxuICAgICAgICA8c3Bhbj5PUjwvc3Bhbj5cbiAgICAgICAgPGhyLz5cbiAgICA8L2Rpdj5cbiAgICAgPGRpdiBjbGFzcz1cImJ0bldyYXBwZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBhdXRoTWVjaGFuaXNtcywgbGV0IGkgPSBpbmRleFwiPiBcbiAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtzdmddPVwiY2hlY2tGb3JWYWx1ZShidG4uQXV0aE1lY2hhbmlzbSlcIlxuICAgICAgICBbc3ZnSGVpZ2h0XT1cIjI0XCJcbiAgICAgICAgW3N2Z1dpZHRoXT1cIjI0XCJcbiAgICAgICAgW3RleHRdPVwiJ0NvbnRpbnVlIHdpdGggJyArIGJ0bi5BdXRoTWVjaGFuaXNtXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgIzMzM1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjQwcHhcIlxuICAgICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIHN2Z1Bvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIGJ1dHRvbkNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1bMjRweF0gbGVhZGluZy1bMjkuMDVweF0gdGV4dC1bIzMzM10gbXQtMlwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPYXV0aENsaWNrKGJ0bilcIlxuICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDwvZGl2PiBcbiAgICAgPC9kaXY+IFxuPC9zZWN0aW9uPlxuIl19
|