@openziti/ziti-console-lib 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/assets/scripts/growler.js +4 -0
  2. package/assets/styles/forms.css +7 -7
  3. package/assets/styles/global.scss +273 -22
  4. package/assets/styles/header.css +1 -1
  5. package/assets/styles/ziti.css +40 -40
  6. package/esm2022/lib/features/card/card.component.mjs +2 -2
  7. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -2
  8. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +12 -3
  9. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
  10. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -2
  11. package/esm2022/lib/features/data-table/data-table.component.mjs +2 -2
  12. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
  13. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +2 -2
  14. package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
  15. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +22 -3
  16. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -2
  17. package/esm2022/lib/features/overrides/overrides.component.mjs +2 -2
  18. package/esm2022/lib/features/preview-list/preview-list.component.mjs +2 -2
  19. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +342 -0
  20. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +127 -0
  21. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -2
  22. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
  23. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
  24. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +2 -2
  25. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +338 -0
  26. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +92 -0
  27. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  28. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +14 -11
  29. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +2 -2
  30. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +2 -2
  31. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
  32. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +2 -2
  33. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +3 -3
  34. package/esm2022/lib/models/auth-policy.mjs +31 -0
  35. package/esm2022/lib/models/jwt-signer.mjs +19 -0
  36. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +115 -0
  37. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +207 -0
  38. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
  39. package/esm2022/lib/pages/identities/identities-page.component.mjs +2 -2
  40. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +96 -0
  41. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +177 -0
  42. package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
  43. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +2 -2
  44. package/esm2022/lib/services/login-service.class.mjs +1 -1
  45. package/esm2022/lib/services/node-data.service.mjs +23 -3
  46. package/esm2022/lib/services/noop-login.service.mjs +1 -4
  47. package/esm2022/lib/services/settings-service.class.mjs +1 -1
  48. package/esm2022/lib/services/settings.service.mjs +6 -1
  49. package/esm2022/lib/services/validation.service.mjs +23 -1
  50. package/esm2022/lib/services/ziti-controller-data.service.mjs +16 -1
  51. package/esm2022/lib/services/ziti-data.service.mjs +4 -4
  52. package/esm2022/lib/ziti-console-lib.module.mjs +29 -5
  53. package/esm2022/public-api.mjs +9 -1
  54. package/fesm2022/openziti-ziti-console-lib.mjs +1874 -356
  55. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  56. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +1 -1
  57. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +1 -0
  58. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +1 -1
  59. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +75 -0
  60. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -0
  61. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +38 -0
  62. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -0
  63. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +64 -0
  64. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -0
  65. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +21 -0
  66. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -0
  67. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  68. package/lib/models/auth-policy.d.ts +8 -0
  69. package/lib/models/auth-policy.d.ts.map +1 -0
  70. package/lib/models/jwt-signer.d.ts +16 -0
  71. package/lib/models/jwt-signer.d.ts.map +1 -0
  72. package/lib/pages/auth-policies/auth-policies-page.component.d.ts +29 -0
  73. package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +1 -0
  74. package/lib/pages/auth-policies/auth-policies-page.service.d.ts +34 -0
  75. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -0
  76. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +29 -0
  77. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +1 -0
  78. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +31 -0
  79. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +1 -0
  80. package/lib/services/login-service.class.d.ts +0 -1
  81. package/lib/services/login-service.class.d.ts.map +1 -1
  82. package/lib/services/node-data.service.d.ts +1 -0
  83. package/lib/services/node-data.service.d.ts.map +1 -1
  84. package/lib/services/noop-login.service.d.ts +0 -1
  85. package/lib/services/noop-login.service.d.ts.map +1 -1
  86. package/lib/services/settings-service.class.d.ts +1 -0
  87. package/lib/services/settings-service.class.d.ts.map +1 -1
  88. package/lib/services/settings.service.d.ts +1 -0
  89. package/lib/services/settings.service.d.ts.map +1 -1
  90. package/lib/services/validation.service.d.ts +2 -0
  91. package/lib/services/validation.service.d.ts.map +1 -1
  92. package/lib/services/ziti-controller-data.service.d.ts +1 -0
  93. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  94. package/lib/services/ziti-data.service.d.ts +4 -3
  95. package/lib/services/ziti-data.service.d.ts.map +1 -1
  96. package/lib/ziti-console-lib.module.d.ts +22 -17
  97. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  98. package/package.json +1 -1
  99. package/public-api.d.ts +8 -0
  100. package/public-api.d.ts.map +1 -1
@@ -0,0 +1,92 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { ZITI_DATA_SERVICE } from "../../../services/ziti-data.service";
3
+ import { isEmpty, keys } from "lodash";
4
+ import { GrowlerModel } from "../../messaging/growler.model";
5
+ import { SHAREDZ_EXTENSION } from "../../extendable/extensions-noop.service";
6
+ import { JwtSigner } from "../../../models/jwt-signer";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../messaging/growler.service";
9
+ import * as i2 from "../../../services/validation.service";
10
+ import * as i3 from "../../../services/ziti-data.service";
11
+ class JwtSignerFormService {
12
+ constructor(dataService, extService, growlerService, validationService) {
13
+ this.dataService = dataService;
14
+ this.extService = extService;
15
+ this.growlerService = growlerService;
16
+ this.validationService = validationService;
17
+ this.items = [];
18
+ this.errors = [];
19
+ this.saveDisabled = false;
20
+ }
21
+ save(formData) {
22
+ const isUpdate = !isEmpty(formData.id);
23
+ const data = this.getJwtSignerDataModel(formData, isUpdate);
24
+ let prom;
25
+ if (isUpdate) {
26
+ prom = this.dataService.put('external-jwt-signers', data, formData.id, true);
27
+ }
28
+ else {
29
+ prom = this.dataService.post('external-jwt-signers', data, true);
30
+ }
31
+ return prom.then(async (result) => {
32
+ const id = isUpdate ? formData.id : (result?.data?.id || result?.id);
33
+ let config = await this.dataService.getSubdata('external-jwt-signers', id, '').then((svcData) => {
34
+ return svcData.data;
35
+ });
36
+ return this.extService.formDataSaved(config).then((formSavedResult) => {
37
+ if (!formSavedResult) {
38
+ return config;
39
+ }
40
+ const growlerData = new GrowlerModel('success', 'Success', `JWT Signer ${isUpdate ? 'Updated' : 'Created'}`, `Successfully ${isUpdate ? 'updated' : 'created'} JWT Signer: ${formData.name}`);
41
+ this.growlerService.show(growlerData);
42
+ return config;
43
+ }).catch((result) => {
44
+ return false;
45
+ });
46
+ }).catch((resp) => {
47
+ let errorMessage;
48
+ if (resp?.error?.error?.cause?.message) {
49
+ errorMessage = resp?.error?.error?.cause?.message;
50
+ }
51
+ else if (resp?.error?.error?.cause?.reason) {
52
+ errorMessage = resp?.error?.error?.cause?.reason;
53
+ }
54
+ else if (resp?.error?.message) {
55
+ errorMessage = resp?.error?.message;
56
+ }
57
+ else {
58
+ errorMessage = 'An unknown error occurred';
59
+ }
60
+ const growlerData = new GrowlerModel('error', 'Error', `Error Creating JWT Signer`, errorMessage);
61
+ this.growlerService.show(growlerData);
62
+ throw resp;
63
+ });
64
+ }
65
+ getJwtSignerDataModel(formData, isUpdate) {
66
+ const saveModel = new JwtSigner();
67
+ const modelProperties = keys(saveModel);
68
+ modelProperties.forEach((prop) => {
69
+ switch (prop) {
70
+ default:
71
+ saveModel[prop] = formData[prop];
72
+ }
73
+ });
74
+ return saveModel;
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JwtSignerFormService, deps: [{ token: ZITI_DATA_SERVICE }, { token: SHAREDZ_EXTENSION }, { token: i1.GrowlerService }, { token: i2.ValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
77
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JwtSignerFormService, providedIn: 'root' }); }
78
+ }
79
+ export { JwtSignerFormService };
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JwtSignerFormService, decorators: [{
81
+ type: Injectable,
82
+ args: [{
83
+ providedIn: 'root'
84
+ }]
85
+ }], ctorParameters: function () { return [{ type: i3.ZitiDataService, decorators: [{
86
+ type: Inject,
87
+ args: [ZITI_DATA_SERVICE]
88
+ }] }, { type: undefined, decorators: [{
89
+ type: Inject,
90
+ args: [SHAREDZ_EXTENSION]
91
+ }] }, { type: i1.GrowlerService }, { type: i2.ValidationService }]; } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXNpZ25lci1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvand0LXNpZ25lci9qd3Qtc2lnbmVyLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUEyQixPQUFPLEVBQVMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUVyRCxNQUdhLG9CQUFvQjtJQU03QixZQUN1QyxXQUE0QixFQUM3QixVQUE0QixFQUN0RCxjQUE4QixFQUM5QixpQkFBb0M7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDdEQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFSaEQsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBUXJCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUTtRQUNULE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxJQUFJLENBQUMscUJBQXFC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QUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUTtRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsUUFBTyxJQUFJLEVBQUU7Z0JBQ1Q7b0JBQ0ksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzsrR0E1RVEsb0JBQW9CLGtCQU9qQixpQkFBaUIsYUFDakIsaUJBQWlCO21IQVJwQixvQkFBb0IsY0FGakIsTUFBTTs7U0FFVCxvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQVFRLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtkZWZlciwgaW52ZXJ0LCBpc0Jvb2xlYW4sIGlzRW1wdHksIGlzTmlsLCBrZXlzfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7VmFsaWRhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7Snd0U2lnbmVyfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2p3dC1zaWduZXJcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBKd3RTaWduZXJGb3JtU2VydmljZSB7XG5cbiAgICBpdGVtczogYW55W10gPSBbXTtcbiAgICBlcnJvcnM6IGFueVtdID0gW107XG4gICAgc2F2ZURpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSBkYXRhU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgc2F2ZShmb3JtRGF0YSkge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRKd3RTaWduZXJEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKTtcbiAgICAgICAgbGV0IHByb207XG4gICAgICAgIGlmIChpc1VwZGF0ZSkge1xuICAgICAgICAgICAgcHJvbSA9IHRoaXMuZGF0YVNlcnZpY2UucHV0KCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGRhdGEsIGZvcm1EYXRhLmlkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLmRhdGFTZXJ2aWNlLnBvc3QoJ2V4dGVybmFsLWp3dC1zaWduZXJzJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbS50aGVuKGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpc1VwZGF0ZSA/IGZvcm1EYXRhLmlkIDogKHJlc3VsdD8uZGF0YT8uaWQgfHwgcmVzdWx0Py5pZCk7XG4gICAgICAgICAgICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5nZXRTdWJkYXRhKCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGlkLCAnJykudGhlbigoc3ZjRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmNEYXRhLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dFNlcnZpY2UuZm9ybURhdGFTYXZlZChjb25maWcpLnRoZW4oKGZvcm1TYXZlZFJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU2F2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYEpXVCBTaWduZXIgJHtpc1VwZGF0ZSA/ICdVcGRhdGVkJyA6ICdDcmVhdGVkJ31gLFxuICAgICAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IEpXVCBTaWduZXI6ICR7Zm9ybURhdGEubmFtZX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChyZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgfWVsc2UgaWYgKHJlc3A/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIEpXVCBTaWduZXJgLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhyb3cgcmVzcDtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRKd3RTaWduZXJEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBKd3RTaWduZXIoKTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0ga2V5cyhzYXZlTW9kZWwpO1xuICAgICAgICBtb2RlbFByb3BlcnRpZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoKHByb3ApIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYXZlTW9kZWw7XG4gICAgfVxuXG59XG4iXX0=