vc-create-dashboard 3.0.83 → 3.0.85

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 (178) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/configurations.mjs +7 -7
  3. package/esm2022/lib/create-dashboard-container/categories/categories-config.mjs +2 -2
  4. package/esm2022/lib/create-dashboard-container/categories/categories.component.mjs +212 -212
  5. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +350 -350
  6. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +2 -2
  7. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +47 -47
  8. package/esm2022/lib/create-dashboard-container/constants/assets.constant.mjs +37 -37
  9. package/esm2022/lib/create-dashboard-container/create-dashboard-config.mjs +2 -2
  10. package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +1601 -1520
  11. package/esm2022/lib/create-dashboard-container/create-dashboard.module.mjs +127 -127
  12. package/esm2022/lib/create-dashboard-container/directives/directives.module.mjs +24 -24
  13. package/esm2022/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +36 -36
  14. package/esm2022/lib/create-dashboard-container/form-group/form-group.component.mjs +153 -153
  15. package/esm2022/lib/create-dashboard-container/frequency/frequency.component.mjs +309 -309
  16. package/esm2022/lib/create-dashboard-container/interfaces/widget-data-model.mjs +2 -2
  17. package/esm2022/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -30
  18. package/esm2022/lib/create-dashboard-container/pipes/search-program.pipe.mjs +37 -37
  19. package/esm2022/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -25
  20. package/esm2022/lib/create-dashboard-container/pipes/text-count.pipe.mjs +18 -19
  21. package/esm2022/lib/create-dashboard-container/program-list/constant.mjs +31 -31
  22. package/esm2022/lib/create-dashboard-container/program-list/information-block/information-block.component.mjs +13 -13
  23. package/esm2022/lib/create-dashboard-container/program-list/interfaces/list-item.interface.mjs +2 -2
  24. package/esm2022/lib/create-dashboard-container/program-list/list-container/list-container.component.mjs +50 -50
  25. package/esm2022/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.mjs +23 -23
  26. package/esm2022/lib/create-dashboard-container/program-list/program-list/program-list.component.mjs +294 -294
  27. package/esm2022/lib/create-dashboard-container/program-list/program-list.module.mjs +60 -60
  28. package/esm2022/lib/create-dashboard-container/program-list/services/list-utils.service.mjs +27 -27
  29. package/esm2022/lib/create-dashboard-container/program-list/services/program-list-api.service.mjs +28 -35
  30. package/esm2022/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +224 -149
  31. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs +2 -2
  32. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +206 -206
  33. package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +233 -238
  34. package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +227 -243
  35. package/esm2022/lib/create-dashboard-container/services/pagination.service.mjs +28 -28
  36. package/esm2022/lib/create-dashboard-container/user-list/user-list.component.mjs +440 -440
  37. package/esm2022/lib/create-dashboard-container/user-list/user-list.config.mjs +2 -2
  38. package/esm2022/lib/create-dashboard-container/utils/dashboard-edit.utils.mjs +181 -181
  39. package/esm2022/lib/create-dashboard.service.mjs +14 -14
  40. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +52 -52
  41. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs +2 -2
  42. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +32 -32
  43. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +7 -7
  44. package/esm2022/lib/ui-kit/dialog/dialog-injector.mjs +17 -17
  45. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -11
  46. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +96 -96
  47. package/esm2022/lib/ui-kit/dialog/dialog.module.mjs +20 -20
  48. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +56 -56
  49. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +17 -17
  50. package/esm2022/lib/ui-kit/floating-bar/floating-bar.component.mjs +57 -57
  51. package/esm2022/lib/ui-kit/floating-bar/floating-bar.module.mjs +32 -32
  52. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +30 -30
  53. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +29 -29
  54. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +34 -34
  55. package/esm2022/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -14
  56. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +119 -119
  57. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +39 -39
  58. package/esm2022/lib/ui-kit/formgroup/formgroup.module.mjs +55 -55
  59. package/esm2022/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -19
  60. package/esm2022/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -24
  61. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +24 -24
  62. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +18 -18
  63. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +47 -47
  64. package/esm2022/lib/ui-kit/no-data/no-data.module.mjs +18 -18
  65. package/esm2022/lib/ui-kit/pagination/pagination.component.mjs +130 -130
  66. package/esm2022/lib/ui-kit/pagination/pagination.module.mjs +18 -18
  67. package/esm2022/lib/ui-kit/popover/popover.component.mjs +129 -129
  68. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +93 -93
  69. package/esm2022/lib/ui-kit/popover/popover.module.mjs +21 -21
  70. package/esm2022/lib/ui-kit/popover/popover.service.mjs +23 -23
  71. package/esm2022/lib/ui-kit/select/cs-option/cs-option.component.mjs +41 -41
  72. package/esm2022/lib/ui-kit/select/cs-select/cs-select.component.mjs +107 -107
  73. package/esm2022/lib/ui-kit/select/safe-html.pipe.mjs +21 -21
  74. package/esm2022/lib/ui-kit/select/select.module.mjs +21 -21
  75. package/esm2022/lib/ui-kit/services/cs-select.service.mjs +16 -16
  76. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +52 -52
  77. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -18
  78. package/esm2022/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +46 -46
  79. package/esm2022/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -18
  80. package/esm2022/lib/ui-kit/snack-bar/snack-bar.service.mjs +23 -23
  81. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +168 -168
  82. package/esm2022/lib/ui-kit/tooltip/tooltip.module.mjs +18 -18
  83. package/esm2022/lib/ui-kit/v-loader/loader/loader.component.mjs +24 -24
  84. package/esm2022/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +24 -24
  85. package/esm2022/lib/ui-kit/v-loader/v-loader.module.mjs +19 -19
  86. package/esm2022/public-api.mjs +10 -10
  87. package/esm2022/vc-create-dashboard.mjs +4 -4
  88. package/fesm2022/vc-create-dashboard.mjs +6438 -6333
  89. package/fesm2022/vc-create-dashboard.mjs.map +1 -1
  90. package/index.d.ts +5 -5
  91. package/lib/configurations.d.ts +4 -4
  92. package/lib/create-dashboard-container/categories/categories-config.d.ts +18 -18
  93. package/lib/create-dashboard-container/categories/categories.component.d.ts +66 -66
  94. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +113 -113
  95. package/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.d.ts +9 -9
  96. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +14 -14
  97. package/lib/create-dashboard-container/constants/assets.constant.d.ts +35 -35
  98. package/lib/create-dashboard-container/create-dashboard-config.d.ts +18 -18
  99. package/lib/create-dashboard-container/create-dashboard.component.d.ts +219 -216
  100. package/lib/create-dashboard-container/create-dashboard.module.d.ts +37 -37
  101. package/lib/create-dashboard-container/directives/directives.module.d.ts +8 -8
  102. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +12 -12
  103. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +48 -48
  104. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +39 -39
  105. package/lib/create-dashboard-container/interfaces/widget-data-model.d.ts +8 -8
  106. package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +7 -7
  107. package/lib/create-dashboard-container/pipes/search-program.pipe.d.ts +7 -7
  108. package/lib/create-dashboard-container/pipes/search.pipe.d.ts +7 -7
  109. package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +7 -7
  110. package/lib/create-dashboard-container/program-list/constant.d.ts +24 -24
  111. package/lib/create-dashboard-container/program-list/information-block/information-block.component.d.ts +6 -6
  112. package/lib/create-dashboard-container/program-list/interfaces/list-item.interface.d.ts +5 -5
  113. package/lib/create-dashboard-container/program-list/list-container/list-container.component.d.ts +9 -9
  114. package/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.d.ts +7 -7
  115. package/lib/create-dashboard-container/program-list/program-list/program-list.component.d.ts +119 -119
  116. package/lib/create-dashboard-container/program-list/program-list.module.d.ts +17 -17
  117. package/lib/create-dashboard-container/program-list/services/list-utils.service.d.ts +7 -7
  118. package/lib/create-dashboard-container/program-list/services/program-list-api.service.d.ts +12 -14
  119. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +70 -62
  120. package/lib/create-dashboard-container/risk-categories/risk-categories-config.d.ts +18 -18
  121. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +66 -66
  122. package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +21 -23
  123. package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +80 -82
  124. package/lib/create-dashboard-container/services/pagination.service.d.ts +12 -12
  125. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +123 -123
  126. package/lib/create-dashboard-container/user-list/user-list.config.d.ts +13 -13
  127. package/lib/create-dashboard-container/utils/dashboard-edit.utils.d.ts +16 -16
  128. package/lib/create-dashboard.service.d.ts +6 -6
  129. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +17 -17
  130. package/lib/ui-kit/dashboard-footer/dashboard-footer-config.d.ts +11 -11
  131. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +10 -10
  132. package/lib/ui-kit/dialog/dialog-config.d.ts +6 -6
  133. package/lib/ui-kit/dialog/dialog-injector.d.ts +7 -7
  134. package/lib/ui-kit/dialog/dialog-ref.d.ts +7 -7
  135. package/lib/ui-kit/dialog/dialog.component.d.ts +33 -33
  136. package/lib/ui-kit/dialog/dialog.module.d.ts +9 -9
  137. package/lib/ui-kit/dialog/dialog.service.d.ts +17 -17
  138. package/lib/ui-kit/dialog/insertion.directive.d.ts +8 -8
  139. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +20 -20
  140. package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +10 -10
  141. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +10 -10
  142. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +13 -13
  143. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +15 -15
  144. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +8 -8
  145. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +36 -36
  146. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +15 -15
  147. package/lib/ui-kit/formgroup/formgroup.module.d.ts +17 -17
  148. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +7 -7
  149. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +7 -7
  150. package/lib/ui-kit/loaders/loaders.module.d.ts +8 -8
  151. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +9 -9
  152. package/lib/ui-kit/no-data/no-data.component.d.ts +19 -19
  153. package/lib/ui-kit/no-data/no-data.module.d.ts +8 -8
  154. package/lib/ui-kit/pagination/pagination.component.d.ts +21 -21
  155. package/lib/ui-kit/pagination/pagination.module.d.ts +8 -8
  156. package/lib/ui-kit/popover/popover.component.d.ts +28 -28
  157. package/lib/ui-kit/popover/popover.directive.d.ts +17 -17
  158. package/lib/ui-kit/popover/popover.module.d.ts +9 -9
  159. package/lib/ui-kit/popover/popover.service.d.ts +13 -13
  160. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +16 -16
  161. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +32 -32
  162. package/lib/ui-kit/select/safe-html.pipe.d.ts +10 -10
  163. package/lib/ui-kit/select/select.module.d.ts +11 -11
  164. package/lib/ui-kit/services/cs-select.service.d.ts +7 -7
  165. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +17 -17
  166. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +8 -8
  167. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +17 -17
  168. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +8 -8
  169. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +9 -9
  170. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +28 -28
  171. package/lib/ui-kit/tooltip/tooltip.module.d.ts +8 -8
  172. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +11 -11
  173. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +11 -11
  174. package/lib/ui-kit/v-loader/v-loader.module.d.ts +9 -9
  175. package/package.json +1 -1
  176. package/public-api.d.ts +3 -3
  177. package/esm2022/lib/create-dashboard-container/services/auth.service.mjs +0 -31
  178. package/lib/create-dashboard-container/services/auth.service.d.ts +0 -11
@@ -1,243 +1,227 @@
1
- import { HttpHeaders } from '@angular/common/http';
2
- import { Injectable, Optional } from '@angular/core';
3
- import { JwtHelperService } from '@auth0/angular-jwt';
4
- import { of } from 'rxjs';
5
- import { catchError, map, retry } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- import * as i2 from "./auth.service";
9
- import * as i3 from "../../configurations";
10
- export class CreateDashboardService {
11
- http;
12
- authService;
13
- env;
14
- httpOptions;
15
- constructor(http, authService, config) {
16
- this.http = http;
17
- this.authService = authService;
18
- if (config) {
19
- this.env = config.envConfig;
20
- }
21
- this.httpOptions = {
22
- headers: new HttpHeaders({
23
- 'Content-Type': 'application/json',
24
- token: this.authService.getAuthorizationToken(),
25
- }),
26
- };
27
- }
28
- /*
29
- * Fetches the Organization Users List by making an API call
30
- */
31
- getOrganizationUsers(url) {
32
- return this.http
33
- .get(this.env?.organizationGet +
34
- 'organisationUsersList&paginationType=small' +
35
- (url.p ? '&p=' + url.p : '') +
36
- (url.type ? '&type=' + url.type : '') +
37
- (url.q ? '&q=' + url.q : ''), this.httpOptions)
38
- .pipe(map((res) => {
39
- return res;
40
- }), retry(2), catchError((err) => of(err)));
41
- }
42
- /**
43
- * Fetches the OrganizationUsers details of users List to set pagination details including number of
44
- * pages and records limit per page,
45
- * @param url contains info about type & search query
46
- */
47
- getOrganizationUsersCount(url) {
48
- return this.http
49
- .get(this.env?.organizationGet +
50
- 'organisationUsersCount&paginationType=small' +
51
- (url.type ? '&type=' + url.type : '') +
52
- (url.q ? '&q=' + url.q : ''), this.httpOptions)
53
- .pipe(map((res) => {
54
- return res;
55
- }), catchError((err) => of(err)));
56
- }
57
- getCategoryList() {
58
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
59
- return this.http
60
- .get(this.env?.riskGet + 'category/list', { headers })
61
- .pipe(retry(2));
62
- }
63
- /**
64
- * Fetches all users by making an API call
65
- */
66
- getAllUsers() {
67
- return this.http
68
- .get(this.env?.organizationGet + 'selectAllUsers&type=all', this.httpOptions)
69
- .pipe(retry(2));
70
- }
71
- /**
72
- * Fetches all groups by making an API call
73
- * */
74
- getAllGroups(params) {
75
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
76
- return this.http
77
- .get(this.env?.organizationGet +
78
- 'groupsList&permType=dashboard&memberExists=1', { params, headers })
79
- .pipe(retry(2));
80
- }
81
- /**
82
- * Fetches responsibilityCentersList by making an API call
83
- */
84
- getResponsibilityCenterList() {
85
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
86
- return this.http
87
- .get(this.env?.organizationGet + 'responsibilityCenterTree', {
88
- headers,
89
- })
90
- .pipe(retry(2));
91
- }
92
- getComplianceCategoriesList() {
93
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
94
- return this.http
95
- .get(this.env.complianceGet + 'complianceCategory/CategoryListTree', {
96
- headers,
97
- })
98
- .pipe(retry(2));
99
- }
100
- getComplianceCategoriesListFromGlobal() {
101
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
102
- return this.http
103
- .get(this.env?.complianceGet +
104
- 'complianceCategory/CategoryListTree&program=1&isDashboard=true', {
105
- headers,
106
- })
107
- .pipe(retry(2));
108
- }
109
- submitDashboard(payload) {
110
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
111
- return this.http
112
- .post(this.env.dashboard + 'CreateDashboard', payload, { headers })
113
- .pipe(retry(2));
114
- }
115
- /**
116
- * Fetches the Dashboard details for data population to Edit the dashboard
117
- * @param id
118
- */
119
- /** @deprecated Legacy Global-Dashboard edit fetch; custom dashboards use fetchCustomDashboardById + getWidgets. */
120
- fetchDashboard(id) {
121
- return this.http
122
- .get(this.env.dashboard + id + '?mode=edit', this.httpOptions)
123
- .pipe(retry(2));
124
- }
125
- /**
126
- * Edit mode only — GET Global-Dashboard/getWidgets?dashboardId={cdid}
127
- * @param cdid Custom dashboard id (e.g. 438F8KSK22), not numeric record id
128
- */
129
- fetchCustomDashboardWidgetDetails(cdid) {
130
- return this.http
131
- .get(`${this.env.dashboard}getWidgets?dashboardId=${encodeURIComponent(cdid)}`, this.httpOptions)
132
- .pipe(map((res) => this.normalizeWidgetDetailsResponse(res)), retry(2));
133
- }
134
- normalizeWidgetDetailsResponse(res) {
135
- const payload = res?.data ?? res;
136
- const widgetArr = payload?.widgetArr ?? res?.widgetArr;
137
- const allWidgetsArray = payload?.allWidgetsArray ?? res?.allWidgetsArray ?? widgetArr;
138
- if (widgetArr || allWidgetsArray) {
139
- const normalizedWidgetArr = Array.isArray(widgetArr) ? widgetArr : [];
140
- const normalizedAll = Array.isArray(allWidgetsArray)
141
- ? allWidgetsArray
142
- : normalizedWidgetArr;
143
- return {
144
- widgetArr: normalizedWidgetArr,
145
- allWidgetsArray: normalizedAll,
146
- activeWidgetArr: payload?.activeWidgetArr ??
147
- res?.activeWidgetArr ??
148
- normalizedWidgetArr,
149
- };
150
- }
151
- if (Array.isArray(res)) {
152
- return { widgetArr: res, allWidgetsArray: res, activeWidgetArr: res };
153
- }
154
- if (Array.isArray(res?.data)) {
155
- return {
156
- widgetArr: res.data,
157
- allWidgetsArray: res.data,
158
- activeWidgetArr: res.data,
159
- };
160
- }
161
- const legacyWidgets = res?.widget_details ?? res?.widgets ?? [];
162
- const legacyAll = res?.all_widgets ?? legacyWidgets;
163
- return {
164
- widgetArr: legacyWidgets,
165
- allWidgetsArray: legacyAll,
166
- activeWidgetArr: res?.activeWidgetArr ?? legacyWidgets,
167
- };
168
- }
169
- getSailsProgramList() {
170
- return this.http
171
- .get(this.env.complianceGet + 'sailsProgramList', this.httpOptions)
172
- .pipe(retry(2));
173
- }
174
- getProgramCategories(programId) {
175
- return this.http
176
- .get(`${this.env.complianceGet}sailsProgramCategories&id=${programId}`, this.httpOptions)
177
- .pipe(retry(2));
178
- }
179
- /** Full custom dashboard payload (includes responsibilityCenterId, programId, etc.). */
180
- fetchCustomDashboardById(id) {
181
- return this.http
182
- .get(`${this.env.dashboard}customDashboard/${id}`, this.httpOptions)
183
- .pipe(retry(2));
184
- }
185
- getUserInformation() {
186
- return this.http
187
- .get(this.env?.organizationGet + 'users&id=' + this?._ID(), this.httpOptions)
188
- .pipe(retry(2));
189
- }
190
- _ID() {
191
- const helper = new JwtHelperService();
192
- const myRawToken = localStorage.getItem('currentUser') || '{}';
193
- const isExpired = helper?.isTokenExpired(myRawToken);
194
- if (isExpired === false) {
195
- const tokenInfo = helper?.decodeToken(myRawToken);
196
- return tokenInfo._id;
197
- }
198
- return '';
199
- }
200
- checkDuplicateDashboardName(payload) {
201
- return this.http
202
- .post(this.env.dashboard + 'DuplicateDashboard', payload, this.httpOptions)
203
- .pipe(retry(2));
204
- }
205
- createDashboard(payload) {
206
- return this.http.post(this.env.dashboard + 'customDashboard', payload, this.httpOptions);
207
- }
208
- updateDashboard(payload, id) {
209
- return this.http.put(this.env.dashboard + 'customDashboard/' + id, payload, this.httpOptions);
210
- }
211
- saveWidgetDetails(payload) {
212
- return this.http.post(this.env.dashboard + 'createWidgets/creator', payload, this.httpOptions);
213
- }
214
- buildPayload(payload) {
215
- return {
216
- dashboard: {
217
- name: payload.dashboard_name,
218
- description: payload.description[0].content,
219
- viewer: {
220
- userId: payload.visible_to_users,
221
- userGroupId: payload.visible_to_groups,
222
- },
223
- responsibilityCenterId: payload.responsibility_center,
224
- programId: payload.program.all_programs.map((program) => program.id),
225
- timeframe: {
226
- from: payload.timeframe.start_date,
227
- to: payload.timeframe.end_date,
228
- }
229
- }
230
- };
231
- }
232
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
233
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, providedIn: 'root' });
234
- }
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, decorators: [{
236
- type: Injectable,
237
- args: [{
238
- providedIn: 'root',
239
- }]
240
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Configurations, decorators: [{
241
- type: Optional
242
- }] }]; } });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlYXRlLWRhc2hib2FyZC9zcmMvbGliL2NyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyL3NlcnZpY2VzL2NyZWF0ZS1kYXNoYm9hcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPeEQsTUFBTSxPQUFPLHNCQUFzQjtJQUt2QjtJQUNBO0lBTEgsR0FBRyxDQUFPO0lBRWpCLFdBQVcsQ0FBTTtJQUNqQixZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3BCLE1BQXVCO1FBRjNCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFHaEMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztnQkFDdkIsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUU7YUFDaEQsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxHQUFTO1FBQzVCLE9BQU8s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SSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2hHLENBQUM7SUFDQyxZQUFZLENBQUMsT0FBWTtRQUN2QixPQUFPO1lBQ0wsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxPQUFPLENBQUMsY0FBYztnQkFDNUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztnQkFDM0MsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCO29CQUNoQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtpQkFDdkM7Z0JBQ0Qsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtnQkFDckQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsU0FBUyxFQUFFO29CQUNULElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVU7b0JBQ2xDLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVE7aUJBQy9CO2FBQ0Y7U0FDRixDQUFBO0lBQ0gsQ0FBQzt3R0FyVFUsc0JBQXNCOzRHQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlRGFzaGJvYXJkU2VydmljZSB7XG4gIHB1YmxpYyBlbnYhOiBhbnk7XG5cbiAgaHR0cE9wdGlvbnM6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zXG4gICkge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcbiAgICB9XG5cbiAgICB0aGlzLmh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgdG9rZW46IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogRmV0Y2hlcyB0aGUgT3JnYW5pemF0aW9uIFVzZXJzIExpc3QgYnkgbWFraW5nIGFuIEFQSSBjYWxsXG4gICAqL1xuICBnZXRPcmdhbml6YXRpb25Vc2Vycyh1cmw/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICtcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uVXNlcnNMaXN0JnBhZ2luYXRpb25UeXBlPXNtYWxsJyArXG4gICAgICAgICAgKHVybC5wID8gJyZwPScgKyB1cmwucCA6ICcnKSArXG4gICAgICAgICAgKHVybC50eXBlID8gJyZ0eXBlPScgKyB1cmwudHlwZSA6ICcnKSArXG4gICAgICAgICAgKHVybC5xID8gJyZxPScgKyB1cmwucSA6ICcnKSxcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KSxcbiAgICAgICAgcmV0cnkoMiksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gb2YoZXJyKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgT3JnYW5pemF0aW9uVXNlcnMgZGV0YWlscyBvZiB1c2VycyBMaXN0IHRvIHNldCBwYWdpbmF0aW9uIGRldGFpbHMgaW5jbHVkaW5nIG51bWJlciBvZlxuICAgKiBwYWdlcyBhbmQgcmVjb3JkcyBsaW1pdCBwZXIgcGFnZSxcbiAgICogQHBhcmFtIHVybCAgY29udGFpbnMgaW5mbyBhYm91dCB0eXBlICYgc2VhcmNoIHF1ZXJ5XG4gICAqL1xuICBnZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KHVybD86IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgK1xuICAgICAgICAgICdvcmdhbmlzYXRpb25Vc2Vyc0NvdW50JnBhZ2luYXRpb25UeXBlPXNtYWxsJyArXG4gICAgICAgICAgKHVybC50eXBlID8gJyZ0eXBlPScgKyB1cmwudHlwZSA6ICcnKSArXG4gICAgICAgICAgKHVybC5xID8gJyZxPScgKyB1cmwucSA6ICcnKSxcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gb2YoZXJyKSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudj8ucmlza0dldCArICdjYXRlZ29yeS9saXN0JywgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbGwgdXNlcnMgYnkgbWFraW5nIGFuIEFQSSBjYWxsXG4gICAqL1xuICBnZXRBbGxVc2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICsgJ3NlbGVjdEFsbFVzZXJzJnR5cGU9YWxsJyxcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgLyoqXG4gICAqICBGZXRjaGVzIGFsbCBncm91cHMgYnkgbWFraW5nIGFuIEFQSSBjYWxsXG4gICAqICovXG4gIGdldEFsbEdyb3VwcyhwYXJhbXM/OiBIdHRwUGFyYW1zKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICtcbiAgICAgICAgICAnZ3JvdXBzTGlzdCZwZXJtVHlwZT1kYXNoYm9hcmQmbWVtYmVyRXhpc3RzPTEnLFxuICAgICAgICB7IHBhcmFtcywgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0IGJ5IG1ha2luZyBhbiBBUEkgY2FsbFxuICAgKi9cbiAgZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnY/Lm9yZ2FuaXphdGlvbkdldCArICdyZXNwb25zaWJpbGl0eUNlbnRlclRyZWUnLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0KCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5TGlzdFRyZWUnLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0RnJvbUdsb2JhbCgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudj8uY29tcGxpYW5jZUdldCArXG4gICAgICAgICAgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJnByb2dyYW09MSZpc0Rhc2hib2FyZD10cnVlJyxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIHN1Ym1pdERhc2hib2FyZChwYXlsb2FkOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHRoaXMuZW52LmRhc2hib2FyZCArICdDcmVhdGVEYXNoYm9hcmQnLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBEYXNoYm9hcmQgZGV0YWlscyBmb3IgZGF0YSBwb3B1bGF0aW9uIHRvIEVkaXQgdGhlIGRhc2hib2FyZFxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIC8qKiBAZGVwcmVjYXRlZCBMZWdhY3kgR2xvYmFsLURhc2hib2FyZCBlZGl0IGZldGNoOyBjdXN0b20gZGFzaGJvYXJkcyB1c2UgZmV0Y2hDdXN0b21EYXNoYm9hcmRCeUlkICsgZ2V0V2lkZ2V0cy4gKi9cbiAgZmV0Y2hEYXNoYm9hcmQoaWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodGhpcy5lbnYuZGFzaGJvYXJkICsgaWQgKyAnP21vZGU9ZWRpdCcsIHRoaXMuaHR0cE9wdGlvbnMpXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBtb2RlIG9ubHkg4oCUIEdFVCBHbG9iYWwtRGFzaGJvYXJkL2dldFdpZGdldHM/ZGFzaGJvYXJkSWQ9e2NkaWR9XG4gICAqIEBwYXJhbSBjZGlkIEN1c3RvbSBkYXNoYm9hcmQgaWQgKGUuZy4gNDM4RjhLU0syMiksIG5vdCBudW1lcmljIHJlY29yZCBpZFxuICAgKi9cbiAgZmV0Y2hDdXN0b21EYXNoYm9hcmRXaWRnZXREZXRhaWxzKGNkaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIGAke3RoaXMuZW52LmRhc2hib2FyZH1nZXRXaWRnZXRzP2Rhc2hib2FyZElkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNkaWQpfWAsXG4gICAgICAgIHRoaXMuaHR0cE9wdGlvbnNcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB0aGlzLm5vcm1hbGl6ZVdpZGdldERldGFpbHNSZXNwb25zZShyZXMpKSxcbiAgICAgICAgcmV0cnkoMilcbiAgICAgICk7XG4gIH1cblxuICBub3JtYWxpemVXaWRnZXREZXRhaWxzUmVzcG9uc2UocmVzOiBhbnkpOiB7XG4gICAgd2lkZ2V0QXJyOiBhbnlbXTtcbiAgICBhbGxXaWRnZXRzQXJyYXk6IGFueVtdO1xuICAgIGFjdGl2ZVdpZGdldEFycjogYW55W107XG4gIH0ge1xuICAgIGNvbnN0IHBheWxvYWQgPSByZXM/LmRhdGEgPz8gcmVzO1xuICAgIGNvbnN0IHdpZGdldEFyciA9IHBheWxvYWQ/LndpZGdldEFyciA/PyByZXM/LndpZGdldEFycjtcbiAgICBjb25zdCBhbGxXaWRnZXRzQXJyYXkgPVxuICAgICAgcGF5bG9hZD8uYWxsV2lkZ2V0c0FycmF5ID8/IHJlcz8uYWxsV2lkZ2V0c0FycmF5ID8/IHdpZGdldEFycjtcbiAgICBpZiAod2lkZ2V0QXJyIHx8IGFsbFdpZGdldHNBcnJheSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFdpZGdldEFyciA9IEFycmF5LmlzQXJyYXkod2lkZ2V0QXJyKSA/IHdpZGdldEFyciA6IFtdO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEFsbCA9IEFycmF5LmlzQXJyYXkoYWxsV2lkZ2V0c0FycmF5KVxuICAgICAgICA/IGFsbFdpZGdldHNBcnJheVxuICAgICAgICA6IG5vcm1hbGl6ZWRXaWRnZXRBcnI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWRnZXRBcnI6IG5vcm1hbGl6ZWRXaWRnZXRBcnIsXG4gICAgICAgIGFsbFdpZGdldHNBcnJheTogbm9ybWFsaXplZEFsbCxcbiAgICAgICAgYWN0aXZlV2lkZ2V0QXJyOlxuICAgICAgICAgIHBheWxvYWQ/LmFjdGl2ZVdpZGdldEFyciA/P1xuICAgICAgICAgIHJlcz8uYWN0aXZlV2lkZ2V0QXJyID8/XG4gICAgICAgICAgbm9ybWFsaXplZFdpZGdldEFycixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHJldHVybiB7IHdpZGdldEFycjogcmVzLCBhbGxXaWRnZXRzQXJyYXk6IHJlcywgYWN0aXZlV2lkZ2V0QXJyOiByZXMgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkZ2V0QXJyOiByZXMuZGF0YSxcbiAgICAgICAgYWxsV2lkZ2V0c0FycmF5OiByZXMuZGF0YSxcbiAgICAgICAgYWN0aXZlV2lkZ2V0QXJyOiByZXMuZGF0YSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGxlZ2FjeVdpZGdldHMgPSByZXM/LndpZGdldF9kZXRhaWxzID8/IHJlcz8ud2lkZ2V0cyA/PyBbXTtcbiAgICBjb25zdCBsZWdhY3lBbGwgPSByZXM/LmFsbF93aWRnZXRzID8/IGxlZ2FjeVdpZGdldHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZGdldEFycjogbGVnYWN5V2lkZ2V0cyxcbiAgICAgIGFsbFdpZGdldHNBcnJheTogbGVnYWN5QWxsLFxuICAgICAgYWN0aXZlV2lkZ2V0QXJyOiByZXM/LmFjdGl2ZVdpZGdldEFyciA/PyBsZWdhY3lXaWRnZXRzLFxuICAgIH07XG4gIH1cblxuICBnZXRTYWlsc1Byb2dyYW1MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdzYWlsc1Byb2dyYW1MaXN0JywgdGhpcy5odHRwT3B0aW9ucylcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldFByb2dyYW1DYXRlZ29yaWVzKHByb2dyYW1JZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgYCR7dGhpcy5lbnYuY29tcGxpYW5jZUdldH1zYWlsc1Byb2dyYW1DYXRlZ29yaWVzJmlkPSR7cHJvZ3JhbUlkfWAsXG4gICAgICAgIHRoaXMuaHR0cE9wdGlvbnNcbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIC8qKiBGdWxsIGN1c3RvbSBkYXNoYm9hcmQgcGF5bG9hZCAoaW5jbHVkZXMgcmVzcG9uc2liaWxpdHlDZW50ZXJJZCwgcHJvZ3JhbUlkLCBldGMuKS4gKi9cbiAgZmV0Y2hDdXN0b21EYXNoYm9hcmRCeUlkKGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGAke3RoaXMuZW52LmRhc2hib2FyZH1jdXN0b21EYXNoYm9hcmQvJHtpZH1gLCB0aGlzLmh0dHBPcHRpb25zKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cblxuXG4gIGdldFVzZXJJbmZvcm1hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICsgJ3VzZXJzJmlkPScgKyB0aGlzPy5fSUQoKSxcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG4gIF9JRCgpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpO1xuICAgIGNvbnN0IG15UmF3VG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFVzZXInKSB8fCAne30nO1xuICAgIGNvbnN0IGlzRXhwaXJlZCA9IGhlbHBlcj8uaXNUb2tlbkV4cGlyZWQobXlSYXdUb2tlbik7XG4gICAgaWYgKGlzRXhwaXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHRva2VuSW5mbyA9IGhlbHBlcj8uZGVjb2RlVG9rZW4obXlSYXdUb2tlbik7XG4gICAgICByZXR1cm4gdG9rZW5JbmZvLl9pZDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLmVudi5kYXNoYm9hcmQgKyAnRHVwbGljYXRlRGFzaGJvYXJkJyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5jcmVhdGVEYXNoYm9hcmQocGF5bG9hZDogYW55KSB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5kYXNoYm9hcmQgKyAnY3VzdG9tRGFzaGJvYXJkJywgcGF5bG9hZCwgdGhpcy5odHRwT3B0aW9ucylcbn1cblxudXBkYXRlRGFzaGJvYXJkKHBheWxvYWQ6IGFueSwgaWQ6IGFueSkge1xuICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLmVudi5kYXNoYm9hcmQgKyAnY3VzdG9tRGFzaGJvYXJkLycgKyBpZCwgcGF5bG9hZCwgdGhpcy5odHRwT3B0aW9ucylcbn1cblxuc2F2ZVdpZGdldERldGFpbHMocGF5bG9hZDogYW55KSB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5kYXNoYm9hcmQgKyAnY3JlYXRlV2lkZ2V0cy9jcmVhdG9yJywgcGF5bG9hZCwgdGhpcy5odHRwT3B0aW9ucylcbn1cbiAgYnVpbGRQYXlsb2FkKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXNoYm9hcmQ6IHtcbiAgICAgICAgbmFtZTogcGF5bG9hZC5kYXNoYm9hcmRfbmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHBheWxvYWQuZGVzY3JpcHRpb25bMF0uY29udGVudCxcbiAgICAgICAgdmlld2VyOiB7XG4gICAgICAgICAgdXNlcklkOiBwYXlsb2FkLnZpc2libGVfdG9fdXNlcnMsXG4gICAgICAgICAgdXNlckdyb3VwSWQ6IHBheWxvYWQudmlzaWJsZV90b19ncm91cHMsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVySWQ6IHBheWxvYWQucmVzcG9uc2liaWxpdHlfY2VudGVyLFxuICAgICAgICBwcm9ncmFtSWQ6IHBheWxvYWQucHJvZ3JhbS5hbGxfcHJvZ3JhbXMubWFwKChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0uaWQpLFxuICAgICAgICB0aW1lZnJhbWU6IHtcbiAgICAgICAgICBmcm9tOiBwYXlsb2FkLnRpbWVmcmFtZS5zdGFydF9kYXRlLFxuICAgICAgICAgIHRvOiBwYXlsb2FkLnRpbWVmcmFtZS5lbmRfZGF0ZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
1
+ import { HttpHeaders } from '@angular/common/http';
2
+ import { Injectable, Optional } from '@angular/core';
3
+ import { JwtHelperService } from '@auth0/angular-jwt';
4
+ import { of } from 'rxjs';
5
+ import { catchError, map, retry } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../configurations";
9
+ export class CreateDashboardService {
10
+ http;
11
+ env;
12
+ httpOptions;
13
+ constructor(http, config) {
14
+ this.http = http;
15
+ if (config) {
16
+ this.env = config.envConfig;
17
+ }
18
+ this.httpOptions = {
19
+ headers: new HttpHeaders({
20
+ 'Content-Type': 'application/json',
21
+ }),
22
+ };
23
+ }
24
+ /*
25
+ * Fetches the Organization Users List by making an API call
26
+ */
27
+ getOrganizationUsers(url) {
28
+ return this.http
29
+ .get(this.env?.organizationGet +
30
+ 'organisationUsersList&paginationType=small' +
31
+ (url.p ? '&p=' + url.p : '') +
32
+ (url.type ? '&type=' + url.type : '') +
33
+ (url.q ? '&q=' + url.q : ''), this.httpOptions)
34
+ .pipe(map((res) => {
35
+ return res;
36
+ }), retry(2), catchError((err) => of(err)));
37
+ }
38
+ /**
39
+ * Fetches the OrganizationUsers details of users List to set pagination details including number of
40
+ * pages and records limit per page,
41
+ * @param url contains info about type & search query
42
+ */
43
+ getOrganizationUsersCount(url) {
44
+ return this.http
45
+ .get(this.env?.organizationGet +
46
+ 'organisationUsersCount&paginationType=small' +
47
+ (url.type ? '&type=' + url.type : '') +
48
+ (url.q ? '&q=' + url.q : ''), this.httpOptions)
49
+ .pipe(map((res) => {
50
+ return res;
51
+ }), catchError((err) => of(err)));
52
+ }
53
+ getCategoryList() {
54
+ return this.http
55
+ .get(this.env?.riskGet + 'category/list')
56
+ .pipe(retry(2));
57
+ }
58
+ /**
59
+ * Fetches all users by making an API call
60
+ */
61
+ getAllUsers() {
62
+ return this.http
63
+ .get(this.env?.organizationGet + 'selectAllUsers&type=all', this.httpOptions)
64
+ .pipe(retry(2));
65
+ }
66
+ /**
67
+ * Fetches all groups by making an API call
68
+ * */
69
+ getAllGroups(params) {
70
+ return this.http
71
+ .get(this.env?.organizationGet +
72
+ 'groupsList&permType=dashboard&memberExists=1', { params })
73
+ .pipe(retry(2));
74
+ }
75
+ /**
76
+ * Fetches responsibilityCentersList by making an API call
77
+ */
78
+ getResponsibilityCenterList() {
79
+ return this.http
80
+ .get(this.env?.organizationGet + 'responsibilityCenterTree')
81
+ .pipe(retry(2));
82
+ }
83
+ getComplianceCategoriesList() {
84
+ return this.http
85
+ .get(this.env.complianceGet + 'complianceCategory/CategoryListTree')
86
+ .pipe(retry(2));
87
+ }
88
+ getComplianceCategoriesListFromGlobal() {
89
+ return this.http
90
+ .get(this.env?.complianceGet +
91
+ 'complianceCategory/CategoryListTree&program=1&isDashboard=true')
92
+ .pipe(retry(2));
93
+ }
94
+ submitDashboard(payload) {
95
+ return this.http
96
+ .post(this.env.dashboard + 'CreateDashboard', payload)
97
+ .pipe(retry(2));
98
+ }
99
+ /**
100
+ * Fetches the Dashboard details for data population to Edit the dashboard
101
+ * @param id
102
+ */
103
+ /** @deprecated Legacy Global-Dashboard edit fetch; custom dashboards use fetchCustomDashboardById + getWidgets. */
104
+ fetchDashboard(id) {
105
+ return this.http
106
+ .get(this.env.dashboard + id + '?mode=edit', this.httpOptions)
107
+ .pipe(retry(2));
108
+ }
109
+ /**
110
+ * Edit mode only — GET Global-Dashboard/getWidgets?dashboardId={cdid}
111
+ * @param cdid Custom dashboard id (e.g. 438F8KSK22), not numeric record id
112
+ */
113
+ fetchCustomDashboardWidgetDetails(cdid) {
114
+ return this.http
115
+ .get(`${this.env.dashboard}getWidgets?dashboardId=${encodeURIComponent(cdid)}`, this.httpOptions)
116
+ .pipe(map((res) => this.normalizeWidgetDetailsResponse(res)), retry(2));
117
+ }
118
+ normalizeWidgetDetailsResponse(res) {
119
+ const payload = res?.data ?? res;
120
+ const widgetArr = payload?.widgetArr ?? res?.widgetArr;
121
+ const allWidgetsArray = payload?.allWidgetsArray ?? res?.allWidgetsArray ?? widgetArr;
122
+ if (widgetArr || allWidgetsArray) {
123
+ const normalizedWidgetArr = Array.isArray(widgetArr) ? widgetArr : [];
124
+ const normalizedAll = Array.isArray(allWidgetsArray)
125
+ ? allWidgetsArray
126
+ : normalizedWidgetArr;
127
+ return {
128
+ widgetArr: normalizedWidgetArr,
129
+ allWidgetsArray: normalizedAll,
130
+ activeWidgetArr: payload?.activeWidgetArr ??
131
+ res?.activeWidgetArr ??
132
+ normalizedWidgetArr,
133
+ };
134
+ }
135
+ if (Array.isArray(res)) {
136
+ return { widgetArr: res, allWidgetsArray: res, activeWidgetArr: res };
137
+ }
138
+ if (Array.isArray(res?.data)) {
139
+ return {
140
+ widgetArr: res.data,
141
+ allWidgetsArray: res.data,
142
+ activeWidgetArr: res.data,
143
+ };
144
+ }
145
+ const legacyWidgets = res?.widget_details ?? res?.widgets ?? [];
146
+ const legacyAll = res?.all_widgets ?? legacyWidgets;
147
+ return {
148
+ widgetArr: legacyWidgets,
149
+ allWidgetsArray: legacyAll,
150
+ activeWidgetArr: res?.activeWidgetArr ?? legacyWidgets,
151
+ };
152
+ }
153
+ getSailsProgramList() {
154
+ return this.http
155
+ .get(this.env.complianceGet + 'sailsProgramList', this.httpOptions)
156
+ .pipe(retry(2));
157
+ }
158
+ getProgramCategories(programId) {
159
+ return this.http
160
+ .get(`${this.env.complianceGet}sailsProgramCategories&id=${programId}`, this.httpOptions)
161
+ .pipe(retry(2));
162
+ }
163
+ /** Full custom dashboard payload (includes responsibilityCenterId, programId, etc.). */
164
+ fetchCustomDashboardById(id) {
165
+ return this.http
166
+ .get(`${this.env.dashboard}customDashboard/${id}`, this.httpOptions)
167
+ .pipe(retry(2));
168
+ }
169
+ getUserInformation() {
170
+ return this.http
171
+ .get(this.env?.organizationGet + 'users&id=' + this?._ID(), this.httpOptions)
172
+ .pipe(retry(2));
173
+ }
174
+ _ID() {
175
+ const helper = new JwtHelperService();
176
+ const myRawToken = localStorage.getItem('currentUser') || '{}';
177
+ const isExpired = helper?.isTokenExpired(myRawToken);
178
+ if (isExpired === false) {
179
+ const tokenInfo = helper?.decodeToken(myRawToken);
180
+ return tokenInfo._id;
181
+ }
182
+ return '';
183
+ }
184
+ checkDuplicateDashboardName(payload) {
185
+ return this.http
186
+ .post(this.env.dashboard + 'DuplicateDashboard', payload, this.httpOptions)
187
+ .pipe(retry(2));
188
+ }
189
+ createDashboard(payload) {
190
+ return this.http.post(this.env.dashboard + 'customDashboard', payload, this.httpOptions);
191
+ }
192
+ updateDashboard(payload, id) {
193
+ return this.http.put(this.env.dashboard + 'customDashboard/' + id, payload, this.httpOptions);
194
+ }
195
+ saveWidgetDetails(payload) {
196
+ return this.http.post(this.env.dashboard + 'createWidgets/creator', payload, this.httpOptions);
197
+ }
198
+ buildPayload(payload) {
199
+ return {
200
+ dashboard: {
201
+ name: payload.dashboard_name,
202
+ description: payload.description[0].content,
203
+ viewer: {
204
+ userId: payload.visible_to_users,
205
+ userGroupId: payload.visible_to_groups,
206
+ },
207
+ responsibilityCenterId: payload.responsibility_center,
208
+ programId: payload.program.all_programs.map((program) => program.id),
209
+ timeframe: payload.timeframe.start_date ? {
210
+ from: payload.timeframe.start_date,
211
+ to: payload.timeframe.end_date,
212
+ } : null
213
+ }
214
+ };
215
+ }
216
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, deps: [{ token: i1.HttpClient }, { token: i2.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
217
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, providedIn: 'root' });
218
+ }
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateDashboardService, decorators: [{
220
+ type: Injectable,
221
+ args: [{
222
+ providedIn: 'root',
223
+ }]
224
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.Configurations, decorators: [{
225
+ type: Optional
226
+ }] }]; } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlYXRlLWRhc2hib2FyZC9zcmMvbGliL2NyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyL3NlcnZpY2VzL2NyZWF0ZS1kYXNoYm9hcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU14RCxNQUFNLE9BQU8sc0JBQXNCO0lBS3ZCO0lBSkgsR0FBRyxDQUFPO0lBRWpCLFdBQVcsQ0FBTTtJQUNqQixZQUNVLElBQWdCLEVBQ1osTUFBdUI7UUFEM0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUd4QixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDO2dCQUN2QixjQUFjLEVBQUUsa0JBQWtCO2FBQ25DLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLENBQUMsR0FBUztRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUNGLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZTtZQUN2Qiw0Q0FBNEM7WUFDNUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoRyxDQUFDO0lBQ0MsWUFBWSxDQUFDLE9BQVk7UUFDdkIsT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWM7Z0JBQzVCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87Z0JBQzNDLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtvQkFDaEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7aUJBQ3ZDO2dCQUNELHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7Z0JBQ3JELFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVU7b0JBQ2xDLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVE7aUJBQy9CLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDVDtTQUNGLENBQUE7SUFDSCxDQUFDO3dHQW5SVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVEYXNoYm9hcmRTZXJ2aWNlIHtcclxuICBwdWJsaWMgZW52ITogYW55O1xyXG5cclxuICBodHRwT3B0aW9uczogYW55O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcclxuICApIHtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBGZXRjaGVzIHRoZSBPcmdhbml6YXRpb24gVXNlcnMgTGlzdCBieSBtYWtpbmcgYW4gQVBJIGNhbGxcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25Vc2Vycyh1cmw/OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChcclxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICtcclxuICAgICAgICAgICdvcmdhbmlzYXRpb25Vc2Vyc0xpc3QmcGFnaW5hdGlvblR5cGU9c21hbGwnICtcclxuICAgICAgICAgICh1cmwucCA/ICcmcD0nICsgdXJsLnAgOiAnJykgK1xyXG4gICAgICAgICAgKHVybC50eXBlID8gJyZ0eXBlPScgKyB1cmwudHlwZSA6ICcnKSArXHJcbiAgICAgICAgICAodXJsLnEgPyAnJnE9JyArIHVybC5xIDogJycpLFxyXG4gICAgICAgIHRoaXMuaHR0cE9wdGlvbnNcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gb2YoZXJyKSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIE9yZ2FuaXphdGlvblVzZXJzIGRldGFpbHMgb2YgdXNlcnMgTGlzdCB0byBzZXQgcGFnaW5hdGlvbiBkZXRhaWxzIGluY2x1ZGluZyBudW1iZXIgb2ZcclxuICAgKiBwYWdlcyBhbmQgcmVjb3JkcyBsaW1pdCBwZXIgcGFnZSxcclxuICAgKiBAcGFyYW0gdXJsICBjb250YWlucyBpbmZvIGFib3V0IHR5cGUgJiBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KHVybD86IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgK1xyXG4gICAgICAgICAgJ29yZ2FuaXNhdGlvblVzZXJzQ291bnQmcGFnaW5hdGlvblR5cGU9c21hbGwnICtcclxuICAgICAgICAgICh1cmwudHlwZSA/ICcmdHlwZT0nICsgdXJsLnR5cGUgOiAnJykgK1xyXG4gICAgICAgICAgKHVybC5xID8gJyZxPScgKyB1cmwucSA6ICcnKSxcclxuICAgICAgICB0aGlzLmh0dHBPcHRpb25zXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXMpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiBvZihlcnIpKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudj8ucmlza0dldCArICdjYXRlZ29yeS9saXN0JylcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhbGwgdXNlcnMgYnkgbWFraW5nIGFuIEFQSSBjYWxsXHJcbiAgICovXHJcbiAgZ2V0QWxsVXNlcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoXHJcbiAgICAgICAgdGhpcy5lbnY/Lm9yZ2FuaXphdGlvbkdldCArICdzZWxlY3RBbGxVc2VycyZ0eXBlPWFsbCcsXHJcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICBGZXRjaGVzIGFsbCBncm91cHMgYnkgbWFraW5nIGFuIEFQSSBjYWxsXHJcbiAgICogKi9cclxuICBnZXRBbGxHcm91cHMocGFyYW1zPzogSHR0cFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgK1xyXG4gICAgICAgICAgJ2dyb3Vwc0xpc3QmcGVybVR5cGU9ZGFzaGJvYXJkJm1lbWJlckV4aXN0cz0xJyxcclxuICAgICAgICB7IHBhcmFtcyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0IGJ5IG1ha2luZyBhbiBBUEkgY2FsbFxyXG4gICAqL1xyXG4gIGdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnY/Lm9yZ2FuaXphdGlvbkdldCArICdyZXNwb25zaWJpbGl0eUNlbnRlclRyZWUnKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5TGlzdFRyZWUnXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0RnJvbUdsb2JhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4oXHJcbiAgICAgICAgdGhpcy5lbnY/LmNvbXBsaWFuY2VHZXQgK1xyXG4gICAgICAgICAgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJnByb2dyYW09MSZpc0Rhc2hib2FyZD10cnVlJ1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdERhc2hib2FyZChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QodGhpcy5lbnYuZGFzaGJvYXJkICsgJ0NyZWF0ZURhc2hib2FyZCcsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIERhc2hib2FyZCBkZXRhaWxzIGZvciBkYXRhIHBvcHVsYXRpb24gdG8gRWRpdCB0aGUgZGFzaGJvYXJkXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgLyoqIEBkZXByZWNhdGVkIExlZ2FjeSBHbG9iYWwtRGFzaGJvYXJkIGVkaXQgZmV0Y2g7IGN1c3RvbSBkYXNoYm9hcmRzIHVzZSBmZXRjaEN1c3RvbURhc2hib2FyZEJ5SWQgKyBnZXRXaWRnZXRzLiAqL1xyXG4gIGZldGNoRGFzaGJvYXJkKGlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldCh0aGlzLmVudi5kYXNoYm9hcmQgKyBpZCArICc/bW9kZT1lZGl0JywgdGhpcy5odHRwT3B0aW9ucylcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRWRpdCBtb2RlIG9ubHkg4oCUIEdFVCBHbG9iYWwtRGFzaGJvYXJkL2dldFdpZGdldHM/ZGFzaGJvYXJkSWQ9e2NkaWR9XHJcbiAgICogQHBhcmFtIGNkaWQgQ3VzdG9tIGRhc2hib2FyZCBpZCAoZS5nLiA0MzhGOEtTSzIyKSwgbm90IG51bWVyaWMgcmVjb3JkIGlkXHJcbiAgICovXHJcbiAgZmV0Y2hDdXN0b21EYXNoYm9hcmRXaWRnZXREZXRhaWxzKGNkaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIGAke3RoaXMuZW52LmRhc2hib2FyZH1nZXRXaWRnZXRzP2Rhc2hib2FyZElkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNkaWQpfWAsXHJcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHRoaXMubm9ybWFsaXplV2lkZ2V0RGV0YWlsc1Jlc3BvbnNlKHJlcykpLFxyXG4gICAgICAgIHJldHJ5KDIpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpemVXaWRnZXREZXRhaWxzUmVzcG9uc2UocmVzOiBhbnkpOiB7XHJcbiAgICB3aWRnZXRBcnI6IGFueVtdO1xyXG4gICAgYWxsV2lkZ2V0c0FycmF5OiBhbnlbXTtcclxuICAgIGFjdGl2ZVdpZGdldEFycjogYW55W107XHJcbiAgfSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gcmVzPy5kYXRhID8/IHJlcztcclxuICAgIGNvbnN0IHdpZGdldEFyciA9IHBheWxvYWQ/LndpZGdldEFyciA/PyByZXM/LndpZGdldEFycjtcclxuICAgIGNvbnN0IGFsbFdpZGdldHNBcnJheSA9XHJcbiAgICAgIHBheWxvYWQ/LmFsbFdpZGdldHNBcnJheSA/PyByZXM/LmFsbFdpZGdldHNBcnJheSA/PyB3aWRnZXRBcnI7XHJcbiAgICBpZiAod2lkZ2V0QXJyIHx8IGFsbFdpZGdldHNBcnJheSkge1xyXG4gICAgICBjb25zdCBub3JtYWxpemVkV2lkZ2V0QXJyID0gQXJyYXkuaXNBcnJheSh3aWRnZXRBcnIpID8gd2lkZ2V0QXJyIDogW107XHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBbGwgPSBBcnJheS5pc0FycmF5KGFsbFdpZGdldHNBcnJheSlcclxuICAgICAgICA/IGFsbFdpZGdldHNBcnJheVxyXG4gICAgICAgIDogbm9ybWFsaXplZFdpZGdldEFycjtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3aWRnZXRBcnI6IG5vcm1hbGl6ZWRXaWRnZXRBcnIsXHJcbiAgICAgICAgYWxsV2lkZ2V0c0FycmF5OiBub3JtYWxpemVkQWxsLFxyXG4gICAgICAgIGFjdGl2ZVdpZGdldEFycjpcclxuICAgICAgICAgIHBheWxvYWQ/LmFjdGl2ZVdpZGdldEFyciA/P1xyXG4gICAgICAgICAgcmVzPy5hY3RpdmVXaWRnZXRBcnIgPz9cclxuICAgICAgICAgIG5vcm1hbGl6ZWRXaWRnZXRBcnIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XHJcbiAgICAgIHJldHVybiB7IHdpZGdldEFycjogcmVzLCBhbGxXaWRnZXRzQXJyYXk6IHJlcywgYWN0aXZlV2lkZ2V0QXJyOiByZXMgfTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcz8uZGF0YSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3aWRnZXRBcnI6IHJlcy5kYXRhLFxyXG4gICAgICAgIGFsbFdpZGdldHNBcnJheTogcmVzLmRhdGEsXHJcbiAgICAgICAgYWN0aXZlV2lkZ2V0QXJyOiByZXMuZGF0YSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlZ2FjeVdpZGdldHMgPSByZXM/LndpZGdldF9kZXRhaWxzID8/IHJlcz8ud2lkZ2V0cyA/PyBbXTtcclxuICAgIGNvbnN0IGxlZ2FjeUFsbCA9IHJlcz8uYWxsX3dpZGdldHMgPz8gbGVnYWN5V2lkZ2V0cztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZGdldEFycjogbGVnYWN5V2lkZ2V0cyxcclxuICAgICAgYWxsV2lkZ2V0c0FycmF5OiBsZWdhY3lBbGwsXHJcbiAgICAgIGFjdGl2ZVdpZGdldEFycjogcmVzPy5hY3RpdmVXaWRnZXRBcnIgPz8gbGVnYWN5V2lkZ2V0cyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRTYWlsc1Byb2dyYW1MaXN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnc2FpbHNQcm9ncmFtTGlzdCcsIHRoaXMuaHR0cE9wdGlvbnMpXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1DYXRlZ29yaWVzKHByb2dyYW1JZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoXHJcbiAgICAgICAgYCR7dGhpcy5lbnYuY29tcGxpYW5jZUdldH1zYWlsc1Byb2dyYW1DYXRlZ29yaWVzJmlkPSR7cHJvZ3JhbUlkfWAsXHJcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIC8qKiBGdWxsIGN1c3RvbSBkYXNoYm9hcmQgcGF5bG9hZCAoaW5jbHVkZXMgcmVzcG9uc2liaWxpdHlDZW50ZXJJZCwgcHJvZ3JhbUlkLCBldGMuKS4gKi9cclxuICBmZXRjaEN1c3RvbURhc2hib2FyZEJ5SWQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KGAke3RoaXMuZW52LmRhc2hib2FyZH1jdXN0b21EYXNoYm9hcmQvJHtpZH1gLCB0aGlzLmh0dHBPcHRpb25zKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldFVzZXJJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChcclxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICsgJ3VzZXJzJmlkPScgKyB0aGlzPy5fSUQoKSxcclxuICAgICAgICB0aGlzLmh0dHBPcHRpb25zXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBfSUQoKSB7XHJcbiAgICBjb25zdCBoZWxwZXIgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpO1xyXG4gICAgY29uc3QgbXlSYXdUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpIHx8ICd7fSc7XHJcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBoZWxwZXI/LmlzVG9rZW5FeHBpcmVkKG15UmF3VG9rZW4pO1xyXG4gICAgaWYgKGlzRXhwaXJlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgY29uc3QgdG9rZW5JbmZvID0gaGVscGVyPy5kZWNvZGVUb2tlbihteVJhd1Rva2VuKTtcclxuICAgICAgcmV0dXJuIHRva2VuSW5mby5faWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBjaGVja0R1cGxpY2F0ZURhc2hib2FyZE5hbWUocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KFxyXG4gICAgICAgIHRoaXMuZW52LmRhc2hib2FyZCArICdEdXBsaWNhdGVEYXNoYm9hcmQnLFxyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgdGhpcy5odHRwT3B0aW9uc1xyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcbmNyZWF0ZURhc2hib2FyZChwYXlsb2FkOiBhbnkpIHtcclxuICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbnYuZGFzaGJvYXJkICsgJ2N1c3RvbURhc2hib2FyZCcsIHBheWxvYWQsIHRoaXMuaHR0cE9wdGlvbnMpXHJcbn1cclxuXHJcbnVwZGF0ZURhc2hib2FyZChwYXlsb2FkOiBhbnksIGlkOiBhbnkpIHtcclxuICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLmVudi5kYXNoYm9hcmQgKyAnY3VzdG9tRGFzaGJvYXJkLycgKyBpZCwgcGF5bG9hZCwgdGhpcy5odHRwT3B0aW9ucylcclxufVxyXG5cclxuc2F2ZVdpZGdldERldGFpbHMocGF5bG9hZDogYW55KSB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmRhc2hib2FyZCArICdjcmVhdGVXaWRnZXRzL2NyZWF0b3InLCBwYXlsb2FkLCB0aGlzLmh0dHBPcHRpb25zKVxyXG59XHJcbiAgYnVpbGRQYXlsb2FkKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGFzaGJvYXJkOiB7XHJcbiAgICAgICAgbmFtZTogcGF5bG9hZC5kYXNoYm9hcmRfbmFtZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogcGF5bG9hZC5kZXNjcmlwdGlvblswXS5jb250ZW50LFxyXG4gICAgICAgIHZpZXdlcjoge1xyXG4gICAgICAgICAgdXNlcklkOiBwYXlsb2FkLnZpc2libGVfdG9fdXNlcnMsXHJcbiAgICAgICAgICB1c2VyR3JvdXBJZDogcGF5bG9hZC52aXNpYmxlX3RvX2dyb3VwcyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVySWQ6IHBheWxvYWQucmVzcG9uc2liaWxpdHlfY2VudGVyLFxyXG4gICAgICAgIHByb2dyYW1JZDogcGF5bG9hZC5wcm9ncmFtLmFsbF9wcm9ncmFtcy5tYXAoKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbS5pZCksXHJcbiAgICAgICAgdGltZWZyYW1lOiBwYXlsb2FkLnRpbWVmcmFtZS5zdGFydF9kYXRlID8ge1xyXG4gICAgICAgICAgZnJvbTogcGF5bG9hZC50aW1lZnJhbWUuc3RhcnRfZGF0ZSxcclxuICAgICAgICAgIHRvOiBwYXlsb2FkLnRpbWVmcmFtZS5lbmRfZGF0ZSxcclxuICAgICAgICB9IDogbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==