@openziti/ziti-console-lib 0.4.10 → 0.5.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 (110) hide show
  1. package/assets/styles/global.scss +156 -1
  2. package/assets/styles/ziti.css +7 -0
  3. package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +5 -2
  4. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +11 -3
  5. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
  6. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +13 -3
  7. package/esm2022/lib/features/data-table/data-table.component.mjs +18 -9
  8. package/esm2022/lib/features/data-table/data-table.service.mjs +5 -5
  9. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +11 -5
  10. package/esm2022/lib/features/preview-list/preview-list.component.mjs +20 -4
  11. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +12 -9
  12. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -3
  13. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +13 -11
  14. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
  15. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +8 -9
  16. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +8 -1
  17. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +83 -23
  18. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +137 -31
  19. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +9 -2
  20. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +13 -11
  21. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +14 -12
  22. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +248 -0
  23. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +131 -0
  24. package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +4 -1
  25. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +5 -4
  26. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +3 -3
  27. package/esm2022/lib/models/config.mjs +2 -1
  28. package/esm2022/lib/models/edge-router-policy.mjs +2 -1
  29. package/esm2022/lib/models/service-edge-router-policy.mjs +2 -1
  30. package/esm2022/lib/models/service-policy.mjs +2 -1
  31. package/esm2022/lib/models/terminator.mjs +14 -0
  32. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +1 -1
  33. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +1 -1
  34. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +1 -1
  35. package/esm2022/lib/pages/identities/identities-page.component.mjs +1 -1
  36. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +1 -1
  37. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +1 -1
  38. package/esm2022/lib/pages/services/services-page.component.mjs +1 -1
  39. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +96 -0
  40. package/esm2022/lib/pages/terminators/terminators-page.service.mjs +185 -0
  41. package/esm2022/lib/services/settings-service.class.mjs +2 -2
  42. package/esm2022/lib/services/ziti-controller-data.service.mjs +7 -3
  43. package/esm2022/lib/services/ziti-data.service.mjs +1 -1
  44. package/esm2022/lib/shared/list-page-component.class.mjs +2 -2
  45. package/esm2022/lib/version.mjs +2 -2
  46. package/esm2022/lib/ziti-console-lib.module.mjs +20 -8
  47. package/esm2022/public-api.mjs +6 -1
  48. package/fesm2022/openziti-ziti-console-lib.mjs +4236 -3371
  49. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  50. package/lib/features/custom-tags/custom-tags.component.d.ts +3 -2
  51. package/lib/features/custom-tags/custom-tags.component.d.ts.map +1 -1
  52. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +1 -0
  53. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +1 -1
  54. package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
  55. package/lib/features/data-table/data-table.component.d.ts +4 -1
  56. package/lib/features/data-table/data-table.component.d.ts.map +1 -1
  57. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +3 -1
  58. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
  59. package/lib/features/preview-list/preview-list.component.d.ts +2 -1
  60. package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
  61. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
  62. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  63. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -1
  64. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  65. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -1
  66. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  67. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -1
  68. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  69. package/lib/features/projectable-forms/projectable-form.class.d.ts +7 -0
  70. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  71. package/lib/features/projectable-forms/service/service-form.component.d.ts +4 -2
  72. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  73. package/lib/features/projectable-forms/service/service-form.service.d.ts +21 -3
  74. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  75. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  76. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -1
  77. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  78. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -1
  79. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  80. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +59 -0
  81. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -0
  82. package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +33 -0
  83. package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +1 -0
  84. package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +1 -1
  85. package/lib/features/wrappers/zac-wrapper.component.d.ts.map +1 -1
  86. package/lib/features/wrappers/zac-wrapper.service.d.ts +1 -0
  87. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
  88. package/lib/models/config.d.ts +1 -0
  89. package/lib/models/config.d.ts.map +1 -1
  90. package/lib/models/edge-router-policy.d.ts +1 -0
  91. package/lib/models/edge-router-policy.d.ts.map +1 -1
  92. package/lib/models/service-edge-router-policy.d.ts +1 -0
  93. package/lib/models/service-edge-router-policy.d.ts.map +1 -1
  94. package/lib/models/service-policy.d.ts +1 -0
  95. package/lib/models/service-policy.d.ts.map +1 -1
  96. package/lib/models/terminator.d.ts +11 -0
  97. package/lib/models/terminator.d.ts.map +1 -0
  98. package/lib/pages/terminators/terminators-page.component.d.ts +29 -0
  99. package/lib/pages/terminators/terminators-page.component.d.ts.map +1 -0
  100. package/lib/pages/terminators/terminators-page.service.d.ts +31 -0
  101. package/lib/pages/terminators/terminators-page.service.d.ts.map +1 -0
  102. package/lib/services/ziti-controller-data.service.d.ts +1 -1
  103. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  104. package/lib/services/ziti-data.service.d.ts +1 -1
  105. package/lib/services/ziti-data.service.d.ts.map +1 -1
  106. package/lib/ziti-console-lib.module.d.ts +20 -18
  107. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  108. package/package.json +3 -3
  109. package/public-api.d.ts +5 -0
  110. package/public-api.d.ts.map +1 -1
@@ -116,7 +116,7 @@ class ServiceEdgeRouterPoliciesPageComponent extends ListPageComponent {
116
116
  this.svc.serviceType = event;
117
117
  }
118
118
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPoliciesPageComponent, deps: [{ token: i1.ServiceEdgeRouterPoliciesPageService }, { token: i2.DataTableFilterService }, { token: i3.MatDialog }, { token: i4.TabNameService }, { token: i5.ConsoleEventsService }, { token: ZAC_WRAPPER_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServiceEdgeRouterPoliciesPageComponent, selector: "lib-service-edge-router-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container service-edge-router-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-edge-router-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Edge Router Policies defined, Click the plus to add a Service Edge Router Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServiceEdgeRouterPoliciesPageComponent, selector: "lib-service-edge-router-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container service-edge-router-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-edge-router-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Edge Router Policies defined, Click the plus to add a Service Edge Router Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
120
120
  }
121
121
  export { ServiceEdgeRouterPoliciesPageComponent };
122
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceEdgeRouterPoliciesPageComponent, decorators: [{
@@ -118,7 +118,7 @@ class ServicePoliciesPageComponent extends ListPageComponent {
118
118
  this.svc.serviceType = event;
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePoliciesPageComponent, deps: [{ token: i1.ServicePoliciesPageService }, { token: i2.DataTableFilterService }, { token: i3.MatDialog }, { token: i4.TabNameService }, { token: i5.ConsoleEventsService }, { token: ZAC_WRAPPER_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicePoliciesPageComponent, selector: "lib-service-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Policies defined, Click the plus to add a Service Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicePoliciesPageComponent, selector: "lib-service-policies-page", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-service-policies-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'service-policies'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Service Policies defined, Click the plus to add a Service Policy.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
122
122
  }
123
123
  export { ServicePoliciesPageComponent };
124
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePoliciesPageComponent, decorators: [{
@@ -122,7 +122,7 @@ class ServicesPageComponent extends ListPageComponent {
122
122
  this.svc.serviceType = event;
123
123
  }
124
124
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicesPageComponent, deps: [{ token: i1.ServicesPageService }, { token: i2.DataTableFilterService }, { token: i3.MatDialog }, { token: i4.TabNameService }, { token: i5.ConsoleEventsService }, { token: ZAC_WRAPPER_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
125
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicesPageComponent, selector: "lib-services", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-services-container\">\n <lib-list-page-header [title]=\"'Services'\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'services'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Services defined, Click the plus to add a service.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-services-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-services-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ServicesPageComponent, selector: "lib-services", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-services-container\">\n <lib-list-page-header [title]=\"'Services'\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'services'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"currentPage\"\n [emptyMsg]=\"'No Services defined, Click the plus to add a service.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n >\n </lib-data-table>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:60px;top:25px;right:25px;z-index:999}.ziti-services-container ::ng-deep .zac-wrapper-container{height:0px;left:-999999px;position:fixed}.ziti-services-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:10px;padding:0 0 0 20px;border-radius:7px;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:12px}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:75px;margin-left:10px}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:52px}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:10px;height:10px;border-radius:50%;background:transparent;border-top:2px solid var(--tableText);border-right:2px solid var(--tableText);border-bottom:2px solid transparent;border-left:2px solid transparent;animation:loading .5s infinite linear;margin-left:5px}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:7px;min-height:30px;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:14px}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:2px solid var(--background);border-radius:12px;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:25px!important;margin-left:10px;margin-top:5px;padding:2px 10px 2px 5px;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:2px solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:175px}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
126
126
  }
127
127
  export { ServicesPageComponent };
128
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicesPageComponent, decorators: [{
@@ -0,0 +1,96 @@
1
+ /*
2
+ Copyright NetFoundry Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+ import { Component } from '@angular/core';
17
+ import { ListPageComponent } from "../../shared/list-page-component.class";
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "./terminators-page.service";
20
+ import * as i2 from "../../features/data-table/data-table-filter.service";
21
+ import * as i3 from "../../services/tab-name.service";
22
+ import * as i4 from "../../services/console-events.service";
23
+ import * as i5 from "@angular/material/dialog";
24
+ import * as i6 from "../../features/list-page-features/list-page-header/list-page-header.component";
25
+ import * as i7 from "../../features/data-table/data-table.component";
26
+ class TerminatorsPageComponent extends ListPageComponent {
27
+ constructor(svc, filterService, tabNames, consoleEvents, dialogForm) {
28
+ super(filterService, svc, consoleEvents, dialogForm);
29
+ this.svc = svc;
30
+ this.tabNames = tabNames;
31
+ this.title = 'Terminator Management';
32
+ this.formDataChanged = false;
33
+ }
34
+ ngOnInit() {
35
+ this.tabs = this.tabNames.getTabs('terminators');
36
+ this.svc.refreshData = this.refreshData;
37
+ super.ngOnInit();
38
+ }
39
+ headerActionClicked(action) {
40
+ switch (action) {
41
+ case 'add':
42
+ this.svc.openEditForm();
43
+ break;
44
+ case 'edit':
45
+ this.svc.openEditForm();
46
+ break;
47
+ case 'delete':
48
+ const selectedItems = this.rowData.filter((row) => {
49
+ return row.selected;
50
+ });
51
+ const label = selectedItems.length > 1 ? 'terminators' : 'terminator';
52
+ this.openBulkDelete(selectedItems, label);
53
+ break;
54
+ default:
55
+ }
56
+ }
57
+ tableAction(event) {
58
+ switch (event?.action) {
59
+ case 'toggleAll':
60
+ case 'toggleItem':
61
+ this.itemToggled(event.item);
62
+ break;
63
+ case 'update':
64
+ this.svc.openEditForm(event.item?.id);
65
+ break;
66
+ case 'create':
67
+ this.svc.openEditForm();
68
+ break;
69
+ case 'delete':
70
+ this.deleteItem(event.item);
71
+ break;
72
+ default:
73
+ break;
74
+ }
75
+ }
76
+ deleteItem(item) {
77
+ this.openBulkDelete([item], 'terminator');
78
+ }
79
+ closeModal(event) {
80
+ this.svc.sideModalOpen = false;
81
+ if (event?.refresh) {
82
+ this.refreshData();
83
+ }
84
+ }
85
+ dataChanged(event) {
86
+ this.formDataChanged = event;
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorsPageComponent, deps: [{ token: i1.TerminatorsPageService }, { token: i2.DataTableFilterService }, { token: i3.TabNameService }, { token: i4.ConsoleEventsService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TerminatorsPageComponent, selector: "lib-configurations", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-terminators-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [hideAction]=\"true\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <lib-data-table [tableId]=\"'terminators'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No terminators defined, Click the plus to add a terminator.'\"\n [filterApplied]=\"filterApplied\"\n [filterName]=\"'Address'\"\n [filterColumn]=\"'address'\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n [options]=\"{noSelect: true, noMenu: true}\"\n >\n </lib-data-table>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i6.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i7.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }] }); }
90
+ }
91
+ export { TerminatorsPageComponent };
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorsPageComponent, decorators: [{
93
+ type: Component,
94
+ args: [{ selector: 'lib-configurations', template: "<div class=\"ziti-page-container ziti-terminators-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [hideAction]=\"true\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <lib-data-table [tableId]=\"'terminators'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No terminators defined, Click the plus to add a terminator.'\"\n [filterApplied]=\"filterApplied\"\n [filterName]=\"'Address'\"\n [filterColumn]=\"'address'\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n [options]=\"{noSelect: true, noMenu: true}\"\n >\n </lib-data-table>\n</div>\n" }]
95
+ }], ctorParameters: function () { return [{ type: i1.TerminatorsPageService }, { type: i2.DataTableFilterService }, { type: i3.TabNameService }, { type: i4.ConsoleEventsService }, { type: i5.MatDialog }]; } });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRvcnMtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvdGVybWluYXRvcnMvdGVybWluYXRvcnMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvdGVybWluYXRvcnMvdGVybWluYXRvcnMtcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFJaEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7OztBQUt6RSxNQUthLHdCQUF5QixTQUFRLGlCQUFpQjtJQU0zRCxZQUNhLEdBQTJCLEVBQ3BDLGFBQXFDLEVBQzdCLFFBQXdCLEVBQ2hDLGFBQW1DLEVBQ25DLFVBQXFCO1FBRXJCLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQU41QyxRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUU1QixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQVJwQyxVQUFLLEdBQUcsdUJBQXVCLENBQUE7UUFHL0Isb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFVeEIsQ0FBQztJQUVRLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFjO1FBQzlCLFFBQVEsTUFBTSxFQUFFO1lBQ1osS0FBSyxLQUFLO2dCQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssUUFBUTtnQkFDVCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUM5QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLE1BQU07WUFDVixRQUFRO1NBQ1g7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsUUFBTyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2xCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssWUFBWTtnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDNUIsTUFBTTtZQUNWLEtBQUssUUFBUTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO1lBQ1YsS0FBSyxRQUFRO2dCQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU07WUFDVixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzNCLE1BQU07WUFDVjtnQkFDSSxNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBRyxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQzsrR0ExRVEsd0JBQXdCO21HQUF4Qix3QkFBd0IsaUZDOUJyQyw2bENBc0JBOztTRFFhLHdCQUF3Qjs0RkFBeEIsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1Rlcm1pbmF0b3JzUGFnZVNlcnZpY2V9IGZyb20gXCIuL3Rlcm1pbmF0b3JzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtUYWJOYW1lU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RhYi1uYW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7TGlzdFBhZ2VDb21wb25lbnR9IGZyb20gXCIuLi8uLi9zaGFyZWQvbGlzdC1wYWdlLWNvbXBvbmVudC5jbGFzc1wiO1xuaW1wb3J0IHtDb25zb2xlRXZlbnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NvbnNvbGUtZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItY29uZmlndXJhdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZXJtaW5hdG9ycy1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90ZXJtaW5hdG9ycy1wYWdlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVybWluYXRvcnNQYWdlQ29tcG9uZW50IGV4dGVuZHMgTGlzdFBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHRpdGxlID0gJ1Rlcm1pbmF0b3IgTWFuYWdlbWVudCdcbiAgICB0YWJzOiB7IHVybDogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH1bXSA7XG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgIGZvcm1EYXRhQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG92ZXJyaWRlIHN2YzogVGVybWluYXRvcnNQYWdlU2VydmljZSxcbiAgICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0YWJOYW1lczogVGFiTmFtZVNlcnZpY2UsXG4gICAgICAgIGNvbnNvbGVFdmVudHM6IENvbnNvbGVFdmVudHNTZXJ2aWNlLFxuICAgICAgICBkaWFsb2dGb3JtOiBNYXREaWFsb2dcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSwgc3ZjLCBjb25zb2xlRXZlbnRzLCBkaWFsb2dGb3JtKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJOYW1lcy5nZXRUYWJzKCd0ZXJtaW5hdG9ycycpO1xuICAgICAgICB0aGlzLnN2Yy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGE7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgaGVhZGVyQWN0aW9uQ2xpY2tlZChhY3Rpb246IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5yb3dEYXRhLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEgPyAndGVybWluYXRvcnMnIDogJ3Rlcm1pbmF0b3InO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkJ1bGtEZWxldGUoc2VsZWN0ZWRJdGVtcywgbGFiZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRhYmxlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoKGV2ZW50Py5hY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZUFsbCc6XG4gICAgICAgICAgICBjYXNlICd0b2dnbGVJdGVtJzpcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVkKGV2ZW50Lml0ZW0pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cGRhdGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybShldmVudC5pdGVtPy5pZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXZlbnQuaXRlbSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGVJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICB0aGlzLm9wZW5CdWxrRGVsZXRlKFtpdGVtXSwgJ3Rlcm1pbmF0b3InKTtcbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5zdmMuc2lkZU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgICAgICBpZihldmVudD8ucmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGF0YUNoYW5nZWQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YUNoYW5nZWQgPSBldmVudDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwieml0aS1wYWdlLWNvbnRhaW5lciB6aXRpLXRlcm1pbmF0b3JzLWNvbnRhaW5lclwiPlxuICAgIDxsaWItbGlzdC1wYWdlLWhlYWRlciBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFic109XCJ0YWJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVBY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImhlYWRlckFjdGlvbkNsaWNrZWQoJGV2ZW50KVwiPjwvbGliLWxpc3QtcGFnZS1oZWFkZXI+XG4gICAgPGxpYi1kYXRhLXRhYmxlIFt0YWJsZUlkXT1cIid0ZXJtaW5hdG9ycydcIlxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZmluaXRpb25zXT1cImNvbHVtbkRlZnNcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cInRhYmxlQWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhcnRDb3VudF09XCJzdGFydENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2VuZENvdW50XT1cImVuZENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ291bnRdPVwidG90YWxDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIFtlbXB0eU1zZ109XCInTm8gdGVybWluYXRvcnMgZGVmaW5lZCwgQ2xpY2sgdGhlIHBsdXMgdG8gYWRkIGEgdGVybWluYXRvci4nXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckFwcGxpZWRdPVwiZmlsdGVyQXBwbGllZFwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJOYW1lXT1cIidBZGRyZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJDb2x1bW5dPVwiJ2FkZHJlc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgW21lbnVJdGVtc109XCJzdmMubWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJncmlkUmVhZHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIntub1NlbGVjdDogdHJ1ZSwgbm9NZW51OiB0cnVlfVwiXG4gICAgPlxuICAgIDwvbGliLWRhdGEtdGFibGU+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,185 @@
1
+ /*
2
+ Copyright NetFoundry Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+ import { Inject, Injectable } from '@angular/core';
17
+ import { isEmpty, unset } from "lodash";
18
+ import { ListPageServiceClass } from "../../shared/list-page-service.class";
19
+ import { TableColumnDefaultComponent } from "../../features/data-table/column-headers/table-column-default/table-column-default.component";
20
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
21
+ import { SHAREDZ_EXTENSION } from "../../features/extendable/extensions-noop.service";
22
+ import { Service } from "../../models/service";
23
+ import { TableCellNameComponent } from "../../features/data-table/cells/table-cell-name/table-cell-name.component";
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "../../services/schema.service";
26
+ import * as i2 from "../../features/data-table/data-table-filter.service";
27
+ import * as i3 from "../../services/csv-download.service";
28
+ import * as i4 from "@angular/router";
29
+ import * as i5 from "../../services/settings.service";
30
+ class TerminatorsPageService extends ListPageServiceClass {
31
+ constructor(schemaSvc, settings, filterService, csvDownloadService, extService, router) {
32
+ super(settings, filterService, csvDownloadService, extService, router);
33
+ this.schemaSvc = schemaSvc;
34
+ this.router = router;
35
+ this.paging = this.DEFAULT_PAGING;
36
+ this.resourceType = 'terminators';
37
+ this.selectedConfig = {};
38
+ this.modalType = '';
39
+ this.menuItems = [
40
+ { name: 'Edit', action: 'update' },
41
+ { name: 'Delete', action: 'delete' },
42
+ ];
43
+ this.validate = (formData) => {
44
+ return Promise.resolve({ passed: true });
45
+ };
46
+ }
47
+ initTableColumns() {
48
+ const typeRenderer = (row) => {
49
+ return row?.data?.configType?.name;
50
+ };
51
+ const createdAtHeaderComponentParams = {
52
+ filterType: 'DATETIME',
53
+ };
54
+ return [
55
+ {
56
+ colId: 'address',
57
+ field: 'address',
58
+ headerName: 'Address',
59
+ headerComponent: TableColumnDefaultComponent,
60
+ headerComponentParams: this.headerComponentParams,
61
+ cellRenderer: TableCellNameComponent,
62
+ cellRendererParams: { pathRoot: this.basePath },
63
+ onCellClicked: (data) => {
64
+ if (this.hasSelectedText()) {
65
+ return;
66
+ }
67
+ this.openEditForm(data?.data?.id);
68
+ },
69
+ resizable: true,
70
+ cellClass: 'nf-cell-vert-align tCol',
71
+ sortable: true,
72
+ filter: true,
73
+ sortColumn: this.sort.bind(this)
74
+ },
75
+ {
76
+ colId: 'router.name',
77
+ field: 'router.name',
78
+ headerName: 'Router',
79
+ headerComponent: TableColumnDefaultComponent,
80
+ headerComponentParams: this.headerComponentParams,
81
+ cellRenderer: TableCellNameComponent,
82
+ cellRendererParams: { pathRoot: this.basePath },
83
+ onCellClicked: (data) => {
84
+ if (this.hasSelectedText()) {
85
+ return;
86
+ }
87
+ this.openEditForm(data?.data?.id);
88
+ },
89
+ resizable: true,
90
+ cellClass: 'nf-cell-vert-align tCol',
91
+ sortable: true,
92
+ filter: true,
93
+ sortColumn: this.sort.bind(this)
94
+ },
95
+ {
96
+ colId: 'service.name',
97
+ field: 'service.name',
98
+ headerName: 'Service',
99
+ headerComponent: TableColumnDefaultComponent,
100
+ headerComponentParams: this.headerComponentParams,
101
+ cellRenderer: TableCellNameComponent,
102
+ cellRendererParams: { pathRoot: this.basePath },
103
+ onCellClicked: (data) => {
104
+ if (this.hasSelectedText()) {
105
+ return;
106
+ }
107
+ this.openEditForm(data?.data?.id);
108
+ },
109
+ resizable: true,
110
+ cellClass: 'nf-cell-vert-align tCol',
111
+ sortable: true,
112
+ filter: true,
113
+ sortColumn: this.sort.bind(this)
114
+ },
115
+ {
116
+ colId: 'createdAt',
117
+ field: 'createdAt',
118
+ headerName: 'Created At',
119
+ headerComponent: TableColumnDefaultComponent,
120
+ headerComponentParams: createdAtHeaderComponentParams,
121
+ valueFormatter: this.createdAtFormatter,
122
+ resizable: true,
123
+ sortable: true,
124
+ sortColumn: this.sort.bind(this),
125
+ cellClass: 'nf-cell-vert-align tCol',
126
+ onCellClicked: (data) => {
127
+ if (this.hasSelectedText()) {
128
+ return;
129
+ }
130
+ this.openEditForm(data.data.id);
131
+ },
132
+ hide: false
133
+ }
134
+ ];
135
+ }
136
+ getData(filters, sort) {
137
+ sort.sortBy = 'address';
138
+ // we can customize filters or sorting here before moving on...
139
+ return super.getTableData('terminators', this.paging, filters, sort)
140
+ .then((results) => {
141
+ return this.processData(results);
142
+ });
143
+ }
144
+ processData(results) {
145
+ if (!isEmpty(results?.data)) {
146
+ //pre-process data before rendering
147
+ results.data = this.addActionsPerRow(results);
148
+ }
149
+ return results;
150
+ }
151
+ addActionsPerRow(results) {
152
+ return results.data.map((row) => {
153
+ row.actionList = ['update', 'delete'];
154
+ return row;
155
+ });
156
+ }
157
+ openUpdate(item) {
158
+ this.modalType = 'terminators';
159
+ if (item) {
160
+ this.selectedConfig = item;
161
+ this.selectedConfig.badges = [];
162
+ unset(this.selectedConfig, '_links');
163
+ }
164
+ else {
165
+ this.selectedConfig = new Service();
166
+ }
167
+ this.sideModalOpen = true;
168
+ }
169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorsPageService, deps: [{ token: i1.SchemaService }, { token: SETTINGS_SERVICE }, { token: i2.DataTableFilterService }, { token: i3.CsvDownloadService }, { token: SHAREDZ_EXTENSION }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
170
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorsPageService, providedIn: 'root' }); }
171
+ }
172
+ export { TerminatorsPageService };
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorsPageService, decorators: [{
174
+ type: Injectable,
175
+ args: [{
176
+ providedIn: 'root'
177
+ }]
178
+ }], ctorParameters: function () { return [{ type: i1.SchemaService }, { type: i5.SettingsService, decorators: [{
179
+ type: Inject,
180
+ args: [SETTINGS_SERVICE]
181
+ }] }, { type: i2.DataTableFilterService }, { type: i3.CsvDownloadService }, { type: undefined, decorators: [{
182
+ type: Inject,
183
+ args: [SHAREDZ_EXTENSION]
184
+ }] }, { type: i4.Router }]; } });
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRvcnMtcGFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL3BhZ2VzL3Rlcm1pbmF0b3JzL3Rlcm1pbmF0b3JzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQVUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDSCwyQkFBMkIsRUFDOUIsTUFBTSw4RkFBOEYsQ0FBQztBQUd0RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFbEYsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQzs7Ozs7OztBQUdqSCxNQUdhLHNCQUF1QixTQUFRLG9CQUFvQjtJQWE1RCxZQUNZLFNBQXdCLEVBQ04sUUFBeUIsRUFDbkQsYUFBcUMsRUFDckMsa0JBQXNDLEVBQ1gsVUFBNEIsRUFDcEMsTUFBYztRQUVqQyxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFQL0QsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUtiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFqQjdCLFdBQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXJDLGlCQUFZLEdBQUcsYUFBYSxDQUFDO1FBQzdC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c0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFnQlEsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUd2QixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YVRhYmxlRmlsdGVyU2VydmljZSwgRmlsdGVyT2JqfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgXywge2lzRW1wdHksIHVuc2V0fSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7TGlzdFBhZ2VTZXJ2aWNlQ2xhc3N9IGZyb20gXCIuLi8uLi9zaGFyZWQvbGlzdC1wYWdlLXNlcnZpY2UuY2xhc3NcIjtcbmltcG9ydCB7XG4gICAgVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50XG59IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2NvbHVtbi1oZWFkZXJzL3RhYmxlLWNvbHVtbi1kZWZhdWx0L3RhYmxlLWNvbHVtbi1kZWZhdWx0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtDYWxsYmFja1Jlc3VsdHN9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9saXN0LXBhZ2UtZmVhdHVyZXMvbGlzdC1wYWdlLWZvcm0vbGlzdC1wYWdlLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQge1NjaGVtYVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zY2hlbWEuc2VydmljZVwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge0NzdkRvd25sb2FkU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2Nzdi1kb3dubG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2UsIFNIQVJFRFpfRVhURU5TSU9OfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VcIjtcbmltcG9ydCB7VGFibGVDZWxsTmFtZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY2VsbHMvdGFibGUtY2VsbC1uYW1lL3RhYmxlLWNlbGwtbmFtZS5jb21wb25lbnRcIjtcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGVybWluYXRvcnNQYWdlU2VydmljZSBleHRlbmRzIExpc3RQYWdlU2VydmljZUNsYXNzIHtcblxuICAgIHByaXZhdGUgcGFnaW5nID0gdGhpcy5ERUZBVUxUX1BBR0lORztcblxuICAgIHJlc291cmNlVHlwZSA9ICd0ZXJtaW5hdG9ycyc7XG4gICAgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgIG1vZGFsVHlwZSA9ICcnO1xuXG4gICAgb3ZlcnJpZGUgbWVudUl0ZW1zID0gW1xuICAgICAgICB7bmFtZTogJ0VkaXQnLCBhY3Rpb246ICd1cGRhdGUnfSxcbiAgICAgICAge25hbWU6ICdEZWxldGUnLCBhY3Rpb246ICdkZWxldGUnfSxcbiAgICBdXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFTdmM6IFNjaGVtYVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgICAgY3N2RG93bmxvYWRTZXJ2aWNlOiBDc3ZEb3dubG9hZFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0hBUkVEWl9FWFRFTlNJT04pIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICBzdXBlcihzZXR0aW5ncywgZmlsdGVyU2VydmljZSwgY3N2RG93bmxvYWRTZXJ2aWNlLCBleHRTZXJ2aWNlLCByb3V0ZXIpO1xuICAgIH1cblxuICAgIGluaXRUYWJsZUNvbHVtbnMoKTogYW55IHtcblxuICAgICAgICBjb25zdCB0eXBlUmVuZGVyZXIgPSAocm93KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcm93Py5kYXRhPy5jb25maWdUeXBlPy5uYW1lO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdEhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgIGZpbHRlclR5cGU6ICdEQVRFVElNRScsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXM6IHRoaXMuaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogVGFibGVDZWxsTmFtZUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgcGF0aFJvb3Q6IHRoaXMuYmFzZVBhdGggfSxcbiAgICAgICAgICAgICAgICBvbkNlbGxDbGlja2VkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZFRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRGb3JtKGRhdGE/LmRhdGE/LmlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuc29ydC5iaW5kKHRoaXMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAncm91dGVyLm5hbWUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncm91dGVyLm5hbWUnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdSb3V0ZXInLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczogdGhpcy5oZWFkZXJDb21wb25lbnRQYXJhbXMsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBUYWJsZUNlbGxOYW1lQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBwYXRoUm9vdDogdGhpcy5iYXNlUGF0aCB9LFxuICAgICAgICAgICAgICAgIG9uQ2VsbENsaWNrZWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEZvcm0oZGF0YT8uZGF0YT8uaWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5zb3J0LmJpbmQodGhpcylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdzZXJ2aWNlLm5hbWUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc2VydmljZS5uYW1lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnU2VydmljZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiB0aGlzLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IFRhYmxlQ2VsbE5hbWVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IHBhdGhSb290OiB0aGlzLmJhc2VQYXRoIH0sXG4gICAgICAgICAgICAgICAgb25DZWxsQ2xpY2tlZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0Rm9ybShkYXRhPy5kYXRhPy5pZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdDcmVhdGVkIEF0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXM6IGNyZWF0ZWRBdEhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jcmVhdGVkQXRGb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuc29ydC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgICAgICBvbkNlbGxDbGlja2VkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZFRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRGb3JtKGRhdGEuZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoaWRlOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldERhdGEoZmlsdGVycz86IEZpbHRlck9ialtdLCBzb3J0PzogYW55KSB7XG4gICAgICAgIHNvcnQuc29ydEJ5ID0gJ2FkZHJlc3MnO1xuICAgICAgICAvLyB3ZSBjYW4gY3VzdG9taXplIGZpbHRlcnMgb3Igc29ydGluZyBoZXJlIGJlZm9yZSBtb3Zpbmcgb24uLi5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRhYmxlRGF0YSgndGVybWluYXRvcnMnLCB0aGlzLnBhZ2luZywgZmlsdGVycywgc29ydClcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlID0gKGZvcm1EYXRhKTogUHJvbWlzZTxDYWxsYmFja1Jlc3VsdHM+ID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhc3NlZDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGEocmVzdWx0czogYW55KSB7XG4gICAgICAgIGlmICghaXNFbXB0eShyZXN1bHRzPy5kYXRhKSkge1xuICAgICAgICAgICAgLy9wcmUtcHJvY2VzcyBkYXRhIGJlZm9yZSByZW5kZXJpbmdcbiAgICAgICAgICAgIHJlc3VsdHMuZGF0YSA9IHRoaXMuYWRkQWN0aW9uc1BlclJvdyhyZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEFjdGlvbnNQZXJSb3cocmVzdWx0czogYW55KTogYW55W10ge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cuYWN0aW9uTGlzdCA9IFsndXBkYXRlJywgJ2RlbGV0ZSddO1xuICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5VcGRhdGUoaXRlbT86IGFueSkge1xuICAgICAgICB0aGlzLm1vZGFsVHlwZSA9ICd0ZXJtaW5hdG9ycyc7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcuYmFkZ2VzID0gW107XG4gICAgICAgICAgICB1bnNldCh0aGlzLnNlbGVjdGVkQ29uZmlnLCAnX2xpbmtzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNpZGVNb2RhbE9wZW4gPSB0cnVlO1xuICAgIH1cbn1cbiJdfQ==
@@ -60,7 +60,7 @@ class SettingsServiceClass {
60
60
  this.host = DEFAULTS.host;
61
61
  this.supportedFeatures = {
62
62
  organization: false,
63
- tags: false,
63
+ tags: true,
64
64
  customFields: false,
65
65
  mailer: false,
66
66
  recipes: false
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
128
128
  providedIn: 'root'
129
129
  }]
130
130
  }], ctorParameters: function () { return [{ type: i1.HttpBackend }, { type: i2.GrowlerService }]; } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Mtc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBMkIsTUFBTSxNQUFNLENBQUM7Ozs7QUFJL0QsYUFBYTtBQUNiLE1BQU0sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNELE1BQU0sUUFBUSxHQUFHO0lBQ2IsU0FBUyxFQUFFLEVBQUU7SUFDYixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLFNBQVM7SUFDckIsVUFBVSxFQUFFLE1BQU07SUFDbEIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLElBQUk7SUFDWixTQUFTLEVBQUUsSUFBSTtJQUNmLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsTUFBTSxFQUFFO1FBQ0osTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRTtRQUNWLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFO1lBQ0osTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtTQUNiO0tBQ0o7SUFDRCxNQUFNLEVBQUUsRUFBRTtJQUNWLElBQUksRUFBRSxFQUFFO0NBQ1gsQ0FBQTtBQUVELE1BR3NCLG9CQUFvQjtJQXNCdEMsWUFBc0IsV0FBd0IsRUFBWSxjQUE4QjtRQUFs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SSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUNwRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sY0FBYztRQUNqQixNQUFNLE9BQU8sR0FBUTtZQUNqQixPQUFPLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLEdBQUc7YUFDZDtZQUNELE1BQU0sRUFBRSxFQUFFO1lBQ1YsWUFBWSxFQUFFLE1BQWU7U0FDaEMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzsrR0FyRmlCLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRjFCLE1BQU07O1NBRUEsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNFbXB0eSwgZGVmZXJ9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7SHR0cEJhY2tlbmQsIEh0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIHRhcH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuXG4vLyBAdHMtaWdub3JlXG5jb25zdCB7c2VydmljZSwgZ3Jvd2xlciwgY29udGV4dCwgcGFnZSwgc2V0dGluZ3N9ID0gd2luZG93O1xuY29uc3QgREVGQVVMVFMgPSB7XG4gICAgXCJzZXNzaW9uXCI6IHt9LFxuICAgIFwiZWRnZUNvbnRyb2xsZXJzXCI6IFtdLFxuICAgIFwiZWRpdGFibGVcIjogdHJ1ZSxcbiAgICBcInVwZGF0ZVwiOiBmYWxzZSxcbiAgICBcImxvY2F0aW9uXCI6IFwiLi4veml0aVwiLFxuICAgIFwicHJvdG9jb2xcIjogXCJodHRwXCIsXG4gICAgXCJob3N0XCI6IFwibG9jYWxob3N0XCIsXG4gICAgXCJwb3J0XCI6IDE0MDgsXG4gICAgXCJwb3J0VExTXCI6IDg0NDMsXG4gICAgXCJyZWplY3RVbmF1dGhvcml6ZWRcIjogZmFsc2UsXG4gICAgXCJtYWlsXCI6IHtcbiAgICAgICAgXCJob3N0XCI6IFwiXCIsXG4gICAgICAgIFwicG9ydFwiOiAyNSxcbiAgICAgICAgXCJzZWN1cmVcIjogZmFsc2UsXG4gICAgICAgIFwiYXV0aFwiOiB7XG4gICAgICAgICAgICBcInVzZXJcIjogXCJcIixcbiAgICAgICAgICAgIFwicGFzc1wiOiBcIlwiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiZnJvbVwiOiBcIlwiLFxuICAgIFwidG9cIjogXCJcIixcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXR0aW5nc1NlcnZpY2VDbGFzcyB7XG5cbiAgICBuYW1lID0gXCJzZXR0aW5nc1wiO1xuICAgIHNldHRpbmdzOiBhbnkgPSB7fTtcbiAgICB2ZXJzaW9uRGF0YTogYW55ID0ge307XG4gICAgc2V0dGluZ3NDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pXG4gICAgcmVqZWN0VW5hdXRob3JpemVkID0gZmFsc2U7XG4gICAgcG9ydCA9IERFRkFVTFRTLnBvcnQ7XG4gICAgcG9ydFRMUyA9IERFRkFVTFRTLnBvcnRUTFM7XG4gICAgYXBpVmVyc2lvbnM6IGFueVtdID0gW107XG4gICAgcHJvdG9jb2wgPSBERUZBVUxUUy5wcm90b2NvbDtcbiAgICBob3N0ID0gREVGQVVMVFMuaG9zdDtcbiAgICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIHN1cHBvcnRlZEZlYXR1cmVzOiBhbnkgPSB7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogZmFsc2UsXG4gICAgICAgIHRhZ3M6IGZhbHNlLFxuICAgICAgICBjdXN0b21GaWVsZHM6IGZhbHNlLFxuICAgICAgICBtYWlsZXI6IGZhbHNlLFxuICAgICAgICByZWNpcGVzOiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQmFja2VuZDogSHR0cEJhY2tlbmQsIHByb3RlY3RlZCBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaHR0cEJhY2tlbmQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBpbml0KCk7XG4gICAgcHVibGljIGFic3RyYWN0IGNvbnRyb2xsZXJTYXZlKG5hbWU6IHN0cmluZywgdXJsOiBzdHJpbmcpO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBpbml0QXBpVmVyc2lvbnModXJsKTtcbiAgICBwdWJsaWMgYWJzdHJhY3QgbG9hZFNldHRpbmdzKCk7XG5cbiAgICBwdWJsaWMgZ2V0KCkge1xuICAgICAgICBjb25zdCB0bXAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgneml0aS5zZXR0aW5ncycpO1xuICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gSlNPTi5wYXJzZSh0bXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHsuLi5ERUZBVUxUU307XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgneml0aS5zZXR0aW5ncycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2V0dGluZ3MpKTtcbiAgICAgICAgfVxuICAgICAgICBzZXR0aW5ncy5kYXRhID0gdGhpcy5zZXR0aW5ncztcbiAgICAgICAgY29udGV4dC5zZXQodGhpcy5uYW1lLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0NoYW5nZS5uZXh0KHRoaXMuc2V0dGluZ3MpXG4gICAgfVxuXG4gICAgcHVibGljIHNldChkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IGRhdGE7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd6aXRpLnNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICBjb250ZXh0LnNldCh0aGlzLm5hbWUsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLnNldHRpbmdzQ2hhbmdlLm5leHQodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHZlcnNpb24oKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbkRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgneml0aS52ZXJzaW9uJyk7XG4gICAgICAgIGNvbnRleHQuc2V0KFwidmVyc2lvblwiLCB0aGlzLnZlcnNpb25EYXRhKTtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHsuLi50aGlzLnNldHRpbmdzLCB2ZXJzaW9uOiB0aGlzLnZlcnNpb25EYXRhfTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0NoYW5nZS5uZXh0KHRoaXMuc2V0dGluZ3MpXG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh1cmw6IHN0cmluZykge1xuICAgICAgICBzZXJ2aWNlLmNhbGwoXCJzZXJ2ZXJcIiwge3VybDogdXJsfSwgdGhpcy5kZWxldGVkLCBcIkRFTEVURVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlZChlOiBhbnkpIHtcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlLmRlbGV0aW5nICE9IG51bGwgJiYgcGFnZS5kZWxldGluZyA9PSB0aGlzLnZlcnNpb25EYXRhLmJhc2VVcmwpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvbG9naW5cIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIdHRwT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIGFjY2VwdDogJyonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtczoge30sXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyBhcyBjb25zdCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbnRvbGxlcihuYW1lOiBzdHJpbmcsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lLnRyaW0oKS5sZW5ndGggPT0gMCB8fCB1cmwudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBncm93bGVyLmVycm9yKFwiTmFtZSBhbmQgVVJMIHJlcXVpcmVkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyU2F2ZShuYW1lLCB1cmwpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Mtc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBMkIsTUFBTSxNQUFNLENBQUM7Ozs7QUFJL0QsYUFBYTtBQUNiLE1BQU0sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNELE1BQU0sUUFBUSxHQUFHO0lBQ2IsU0FBUyxFQUFFLEVBQUU7SUFDYixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLFNBQVM7SUFDckIsVUFBVSxFQUFFLE1BQU07SUFDbEIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLElBQUk7SUFDWixTQUFTLEVBQUUsSUFBSTtJQUNmLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsTUFBTSxFQUFFO1FBQ0osTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRTtRQUNWLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFO1lBQ0osTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtTQUNiO0tBQ0o7SUFDRCxNQUFNLEVBQUUsRUFBRTtJQUNWLElBQUksRUFBRSxFQUFFO0NBQ1gsQ0FBQTtBQUVELE1BR3NCLG9CQUFvQjtJQXNCdEMsWUFBc0IsV0FBd0IsRUFBWSxjQUE4QjtRQUFs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SSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUNwRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sY0FBYztRQUNqQixNQUFNLE9BQU8sR0FBUTtZQUNqQixPQUFPLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLEdBQUc7YUFDZDtZQUNELE1BQU0sRUFBRSxFQUFFO1lBQ1YsWUFBWSxFQUFFLE1BQWU7U0FDaEMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzsrR0FyRmlCLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRjFCLE1BQU07O1NBRUEsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNFbXB0eSwgZGVmZXJ9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7SHR0cEJhY2tlbmQsIEh0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIHRhcH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuXG4vLyBAdHMtaWdub3JlXG5jb25zdCB7c2VydmljZSwgZ3Jvd2xlciwgY29udGV4dCwgcGFnZSwgc2V0dGluZ3N9ID0gd2luZG93O1xuY29uc3QgREVGQVVMVFMgPSB7XG4gICAgXCJzZXNzaW9uXCI6IHt9LFxuICAgIFwiZWRnZUNvbnRyb2xsZXJzXCI6IFtdLFxuICAgIFwiZWRpdGFibGVcIjogdHJ1ZSxcbiAgICBcInVwZGF0ZVwiOiBmYWxzZSxcbiAgICBcImxvY2F0aW9uXCI6IFwiLi4veml0aVwiLFxuICAgIFwicHJvdG9jb2xcIjogXCJodHRwXCIsXG4gICAgXCJob3N0XCI6IFwibG9jYWxob3N0XCIsXG4gICAgXCJwb3J0XCI6IDE0MDgsXG4gICAgXCJwb3J0VExTXCI6IDg0NDMsXG4gICAgXCJyZWplY3RVbmF1dGhvcml6ZWRcIjogZmFsc2UsXG4gICAgXCJtYWlsXCI6IHtcbiAgICAgICAgXCJob3N0XCI6IFwiXCIsXG4gICAgICAgIFwicG9ydFwiOiAyNSxcbiAgICAgICAgXCJzZWN1cmVcIjogZmFsc2UsXG4gICAgICAgIFwiYXV0aFwiOiB7XG4gICAgICAgICAgICBcInVzZXJcIjogXCJcIixcbiAgICAgICAgICAgIFwicGFzc1wiOiBcIlwiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiZnJvbVwiOiBcIlwiLFxuICAgIFwidG9cIjogXCJcIixcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXR0aW5nc1NlcnZpY2VDbGFzcyB7XG5cbiAgICBuYW1lID0gXCJzZXR0aW5nc1wiO1xuICAgIHNldHRpbmdzOiBhbnkgPSB7fTtcbiAgICB2ZXJzaW9uRGF0YTogYW55ID0ge307XG4gICAgc2V0dGluZ3NDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pXG4gICAgcmVqZWN0VW5hdXRob3JpemVkID0gZmFsc2U7XG4gICAgcG9ydCA9IERFRkFVTFRTLnBvcnQ7XG4gICAgcG9ydFRMUyA9IERFRkFVTFRTLnBvcnRUTFM7XG4gICAgYXBpVmVyc2lvbnM6IGFueVtdID0gW107XG4gICAgcHJvdG9jb2wgPSBERUZBVUxUUy5wcm90b2NvbDtcbiAgICBob3N0ID0gREVGQVVMVFMuaG9zdDtcbiAgICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIHN1cHBvcnRlZEZlYXR1cmVzOiBhbnkgPSB7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogZmFsc2UsXG4gICAgICAgIHRhZ3M6IHRydWUsXG4gICAgICAgIGN1c3RvbUZpZWxkczogZmFsc2UsXG4gICAgICAgIG1haWxlcjogZmFsc2UsXG4gICAgICAgIHJlY2lwZXM6IGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZCwgcHJvdGVjdGVkIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChodHRwQmFja2VuZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGluaXQoKTtcbiAgICBwdWJsaWMgYWJzdHJhY3QgY29udHJvbGxlclNhdmUobmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZyk7XG4gICAgcHVibGljIGFic3RyYWN0IGluaXRBcGlWZXJzaW9ucyh1cmwpO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBsb2FkU2V0dGluZ3MoKTtcblxuICAgIHB1YmxpYyBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd6aXRpLnNldHRpbmdzJyk7XG4gICAgICAgIGlmICh0bXApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBKU09OLnBhcnNlKHRtcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gey4uLkRFRkFVTFRTfTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd6aXRpLnNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR0aW5ncykpO1xuICAgICAgICB9XG4gICAgICAgIHNldHRpbmdzLmRhdGEgPSB0aGlzLnNldHRpbmdzO1xuICAgICAgICBjb250ZXh0LnNldCh0aGlzLm5hbWUsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLnNldHRpbmdzQ2hhbmdlLm5leHQodGhpcy5zZXR0aW5ncylcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gZGF0YTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ppdGkuc2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIGNvbnRleHQuc2V0KHRoaXMubmFtZSwgdGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NDaGFuZ2UubmV4dCh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmVyc2lvbigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd6aXRpLnZlcnNpb24nKTtcbiAgICAgICAgY29udGV4dC5zZXQoXCJ2ZXJzaW9uXCIsIHRoaXMudmVyc2lvbkRhdGEpO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gey4uLnRoaXMuc2V0dGluZ3MsIHZlcnNpb246IHRoaXMudmVyc2lvbkRhdGF9O1xuICAgICAgICB0aGlzLnNldHRpbmdzQ2hhbmdlLm5leHQodGhpcy5zZXR0aW5ncylcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHNlcnZpY2UuY2FsbChcInNlcnZlclwiLCB7dXJsOiB1cmx9LCB0aGlzLmRlbGV0ZWQsIFwiREVMRVRFXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVkKGU6IGFueSkge1xuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UuZGVsZXRpbmcgIT0gbnVsbCAmJiBwYWdlLmRlbGV0aW5nID09IHRoaXMudmVyc2lvbkRhdGEuYmFzZVVybCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9sb2dpblwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEh0dHBPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgYWNjZXB0OiAnKicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnIGFzIGNvbnN0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29udG9sbGVyKG5hbWU6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUudHJpbSgpLmxlbmd0aCA9PSAwIHx8IHVybC50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGdyb3dsZXIuZXJyb3IoXCJOYW1lIGFuZCBVUkwgcmVxdWlyZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJTYXZlKG5hbWUsIHVybCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=