@ieeesa-npm/tenants 0.4.2 → 0.4.4

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 (138) hide show
  1. package/.eslintrc.json +31 -0
  2. package/ng-package.json +8 -0
  3. package/package.json +12 -25
  4. package/src/lib/assets/constants.json +454 -0
  5. package/src/lib/assets/tenant-validations.ts +18 -0
  6. package/src/lib/assets/tenants-mock.ts +1240 -0
  7. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.html +15 -0
  8. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.scss +44 -0
  9. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.spec.ts +574 -0
  10. package/src/lib/components/create-modify-group-type/create-modify-group-type.component.ts +602 -0
  11. package/src/lib/components/create-modify-role/create-modify-role.component.html +15 -0
  12. package/src/lib/components/create-modify-role/create-modify-role.component.scss +83 -0
  13. package/src/lib/components/create-modify-role/create-modify-role.component.spec.ts +346 -0
  14. package/src/lib/components/create-modify-role/create-modify-role.component.ts +321 -0
  15. package/src/lib/components/create-tenant-application/create-tenant-application.component.html +18 -0
  16. package/src/lib/components/create-tenant-application/create-tenant-application.component.scss +73 -0
  17. package/src/lib/components/create-tenant-application/create-tenant-application.component.spec.ts +775 -0
  18. package/src/lib/components/create-tenant-application/create-tenant-application.component.ts +638 -0
  19. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.html +22 -0
  20. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.scss +79 -0
  21. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.spec.ts +716 -0
  22. package/src/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.ts +504 -0
  23. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.html +44 -0
  24. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.scss +16 -0
  25. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.spec.ts +115 -0
  26. package/src/lib/components/tenant-basic-details/tenant-basic-details.component.ts +109 -0
  27. package/src/lib/components/view-tenant-details/view-tenant-details.component.html +195 -0
  28. package/src/lib/components/view-tenant-details/view-tenant-details.component.scss +163 -0
  29. package/src/lib/components/view-tenant-details/view-tenant-details.component.spec.ts +1221 -0
  30. package/src/lib/components/view-tenant-details/view-tenant-details.component.ts +876 -0
  31. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.html +10 -0
  32. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.scss +44 -0
  33. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.spec.ts +410 -0
  34. package/src/lib/components/view-tenant-group-types/view-tenant-group-types.component.ts +219 -0
  35. package/src/lib/components/view-tenants-list/view-tenants-list.component.html +32 -0
  36. package/src/lib/components/view-tenants-list/view-tenants-list.component.scss +35 -0
  37. package/src/lib/components/view-tenants-list/view-tenants-list.component.spec.ts +464 -0
  38. package/src/lib/components/view-tenants-list/view-tenants-list.component.ts +388 -0
  39. package/src/lib/models/app-type-config.model.ts +14 -0
  40. package/src/lib/models/app-type.model.ts +5 -0
  41. package/src/lib/models/create-group-type-config.model.ts +18 -0
  42. package/src/lib/models/create-group-type.model.ts +46 -0
  43. package/src/lib/models/feature-permission-id.model.ts +6 -0
  44. package/src/lib/models/features.model.ts +15 -0
  45. package/src/lib/models/form-status.model.ts +5 -0
  46. package/src/lib/models/permission-type.model.ts +9 -0
  47. package/src/lib/models/role-menu-action.model.ts +5 -0
  48. package/src/lib/models/role-type.model.ts +34 -0
  49. package/src/lib/models/roles-and-permissions-table-type.model.ts +5 -0
  50. package/src/lib/models/roles-and-permissions.model.ts +113 -0
  51. package/src/lib/models/route-config.model.ts +4 -0
  52. package/src/lib/models/table-column-schema-view-tenant-list.model.ts +21 -0
  53. package/src/lib/models/tenant-function-type.model.ts +10 -0
  54. package/src/lib/models/tenant.model.ts +47 -0
  55. package/src/lib/models/tenants-permission.model.ts +9 -0
  56. package/src/lib/models/update-tenant-status.model.ts +12 -0
  57. package/src/lib/models/view-tenant-group-types.model.ts +34 -0
  58. package/src/lib/services/tenant-applications.service.spec.ts +1245 -0
  59. package/src/lib/services/tenant-applications.service.ts +798 -0
  60. package/src/lib/services/tenant-permissions-map.service.spec.ts +25 -0
  61. package/src/lib/services/tenant-permissions-map.service.ts +28 -0
  62. package/src/lib/services/tenant-permissions.service.spec.ts +62 -0
  63. package/src/lib/services/tenant-permissions.service.ts +49 -0
  64. package/src/lib/tenant-applications.component.html +0 -0
  65. package/src/lib/tenant-applications.component.scss +0 -0
  66. package/src/lib/tenant-applications.component.spec.ts +28 -0
  67. package/src/lib/tenant-applications.component.ts +12 -0
  68. package/src/lib/tenant-applications.module.ts +8 -0
  69. package/{public-api.d.ts → src/public-api.ts} +40 -30
  70. package/tsconfig.lib.json +14 -0
  71. package/tsconfig.lib.prod.json +10 -0
  72. package/tsconfig.spec.json +14 -0
  73. package/esm2022/ieeesa-npm-tenants.mjs +0 -5
  74. package/esm2022/lib/assets/constants.json +0 -390
  75. package/esm2022/lib/assets/tenant-validations.mjs +0 -13
  76. package/esm2022/lib/components/create-modify-role/create-modify-role.component.mjs +0 -280
  77. package/esm2022/lib/components/create-tenant-application/create-tenant-application.component.mjs +0 -512
  78. package/esm2022/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.mjs +0 -391
  79. package/esm2022/lib/components/tenant-basic-details/tenant-basic-details.component.mjs +0 -95
  80. package/esm2022/lib/components/view-tenant-details/view-tenant-details.component.mjs +0 -708
  81. package/esm2022/lib/components/view-tenant-group-types/view-tenant-group-types.component.mjs +0 -174
  82. package/esm2022/lib/components/view-tenants-list/view-tenants-list.component.mjs +0 -334
  83. package/esm2022/lib/models/app-type-config.model.mjs +0 -2
  84. package/esm2022/lib/models/app-type.model.mjs +0 -7
  85. package/esm2022/lib/models/feature-permission-id.model.mjs +0 -8
  86. package/esm2022/lib/models/features.model.mjs +0 -2
  87. package/esm2022/lib/models/form-status.model.mjs +0 -7
  88. package/esm2022/lib/models/permission-type.model.mjs +0 -12
  89. package/esm2022/lib/models/role-menu-action.model.mjs +0 -7
  90. package/esm2022/lib/models/role-type.model.mjs +0 -2
  91. package/esm2022/lib/models/roles-and-permissions-table-type.model.mjs +0 -7
  92. package/esm2022/lib/models/roles-and-permissions.model.mjs +0 -2
  93. package/esm2022/lib/models/route-config.model.mjs +0 -2
  94. package/esm2022/lib/models/table-column-schema-view-tenant-list.model.mjs +0 -16
  95. package/esm2022/lib/models/tenant-function-type.model.mjs +0 -10
  96. package/esm2022/lib/models/tenant.model.mjs +0 -2
  97. package/esm2022/lib/models/tenants-permission.model.mjs +0 -2
  98. package/esm2022/lib/models/update-tenant-status.model.mjs +0 -2
  99. package/esm2022/lib/models/view-tenant-group-types.model.mjs +0 -9
  100. package/esm2022/lib/services/tenant-applications.service.mjs +0 -542
  101. package/esm2022/lib/services/tenant-permissions-map.service.mjs +0 -36
  102. package/esm2022/lib/services/tenant-permissions.service.mjs +0 -38
  103. package/esm2022/lib/tenant-applications.component.mjs +0 -14
  104. package/esm2022/lib/tenant-applications.module.mjs +0 -16
  105. package/esm2022/public-api.mjs +0 -34
  106. package/fesm2022/ieeesa-npm-tenants.mjs +0 -3565
  107. package/fesm2022/ieeesa-npm-tenants.mjs.map +0 -1
  108. package/index.d.ts +0 -5
  109. package/lib/assets/tenant-validations.d.ts +0 -11
  110. package/lib/components/create-modify-role/create-modify-role.component.d.ts +0 -103
  111. package/lib/components/create-tenant-application/create-tenant-application.component.d.ts +0 -128
  112. package/lib/components/roles-and-permissions-mapping/roles-and-permissions-mapping.component.d.ts +0 -106
  113. package/lib/components/tenant-basic-details/tenant-basic-details.component.d.ts +0 -408
  114. package/lib/components/view-tenant-details/view-tenant-details.component.d.ts +0 -216
  115. package/lib/components/view-tenant-group-types/view-tenant-group-types.component.d.ts +0 -58
  116. package/lib/components/view-tenants-list/view-tenants-list.component.d.ts +0 -134
  117. package/lib/models/app-type-config.model.d.ts +0 -14
  118. package/lib/models/app-type.model.d.ts +0 -4
  119. package/lib/models/feature-permission-id.model.d.ts +0 -4
  120. package/lib/models/features.model.d.ts +0 -15
  121. package/lib/models/form-status.model.d.ts +0 -4
  122. package/lib/models/permission-type.model.d.ts +0 -8
  123. package/lib/models/role-menu-action.model.d.ts +0 -4
  124. package/lib/models/role-type.model.d.ts +0 -27
  125. package/lib/models/roles-and-permissions-table-type.model.d.ts +0 -4
  126. package/lib/models/roles-and-permissions.model.d.ts +0 -119
  127. package/lib/models/route-config.model.d.ts +0 -4
  128. package/lib/models/table-column-schema-view-tenant-list.model.d.ts +0 -20
  129. package/lib/models/tenant-function-type.model.d.ts +0 -7
  130. package/lib/models/tenant.model.d.ts +0 -51
  131. package/lib/models/tenants-permission.model.d.ts +0 -9
  132. package/lib/models/update-tenant-status.model.d.ts +0 -14
  133. package/lib/models/view-tenant-group-types.model.d.ts +0 -27
  134. package/lib/services/tenant-applications.service.d.ts +0 -357
  135. package/lib/services/tenant-permissions-map.service.d.ts +0 -13
  136. package/lib/services/tenant-permissions.service.d.ts +0 -22
  137. package/lib/tenant-applications.component.d.ts +0 -5
  138. package/lib/tenant-applications.module.d.ts +0 -6
@@ -1,542 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { catchError, map } from 'rxjs';
3
- import * as screenTexts from '../assets/constants.json';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ieeesa-npm/utility";
6
- import * as i2 from "./tenant-permissions.service";
7
- import * as i3 from "./tenant-permissions-map.service";
8
- export class TenantApplicationsService {
9
- constructor(
10
- // eslint-disable-next-line no-unused-vars
11
- httpService,
12
- // eslint-disable-next-line no-unused-vars
13
- tenantPermissionsService,
14
- // eslint-disable-next-line no-unused-vars
15
- tenantPermissionsMapService // eslint-disable-next-line no-empty-function
16
- ) {
17
- this.httpService = httpService;
18
- this.tenantPermissionsService = tenantPermissionsService;
19
- this.tenantPermissionsMapService = tenantPermissionsMapService;
20
- this.tenantsText = screenTexts?.viewTenants?.errors;
21
- this.createTenantsText = screenTexts?.createTenant?.errors;
22
- this.radioOptions = [];
23
- this.checkBoxOptions = [];
24
- this.appTypeInfo = [];
25
- this.featureList = [];
26
- this.roleTypeOptions = [];
27
- }
28
- setAppConfig(apiBaseUrl, userPermission) {
29
- this.apiBaseUrl = apiBaseUrl;
30
- this.userPermission = userPermission;
31
- }
32
- /**
33
- * Gets tenant details from server using HttpService
34
- * @param {string} appId
35
- * @return {Observable<TenantDetailsResponse>}
36
- * @memberof TenantApplicationsService
37
- */
38
- getTenantDetails(appId) {
39
- return this.httpService
40
- .getData(`${this.apiBaseUrl}/configurations/app/details/${appId}`)
41
- .pipe(map((response) => {
42
- return response;
43
- }), catchError((error) => {
44
- throw error;
45
- }));
46
- }
47
- /**
48
- * Sets the user tenants permissions
49
- * @param {TenantsPermissions[]} TenantsPermissions
50
- * @memberof TenantApplicationsService
51
- */
52
- setUserTenantsPermissions(userTenantsPermissions) {
53
- this.userTenantsPermissions = userTenantsPermissions;
54
- }
55
- /**
56
- * Returns the user tenants permissions
57
- * @return {TenantsPermissions[]}
58
- * @memberof TenantApplicationsService
59
- */
60
- getUserTenantsPermissions() {
61
- return this.userTenantsPermissions;
62
- }
63
- /**
64
- * Sets the user tenants information
65
- * @param {TenantBasicInfo} tenantInfo
66
- * @memberof TenantApplicationsService
67
- */
68
- setSelectedTenantInformation(tenantInfo) {
69
- this.selectedTenantInfo = tenantInfo;
70
- }
71
- /**
72
- * Returns the tenants information
73
- * @return {TenantBasicInfo}
74
- * @memberof TenantApplicationsService
75
- */
76
- getSelectedTenantInformation() {
77
- return this.selectedTenantInfo;
78
- }
79
- /**
80
- * Sets the roles informations
81
- * @param {Role} roles
82
- * @memberof TenantApplicationsService
83
- */
84
- setRolesInfo(roles) {
85
- this.roles = roles;
86
- }
87
- /**
88
- * Returns the roles information
89
- * @return {Role}
90
- * @memberof TenantApplicationsService
91
- */
92
- getRolesInfo() {
93
- return this.roles;
94
- }
95
- /**
96
- * Sets the selected role information.
97
- * @param {RoleDetails} roleInfo
98
- * @memberof TenantApplicationsService
99
- */
100
- setSelectedRoleInformation(roleInfo) {
101
- this.selectedRoleInfo = roleInfo;
102
- }
103
- /**
104
- * Returns the selected role information.
105
- * @return {RoleDetails}
106
- * @memberof TenantApplicationsService
107
- */
108
- getSelectedRoleInformation() {
109
- return this.selectedRoleInfo;
110
- }
111
- /**
112
- * Sets the tenant role type options.
113
- * @param {RoleTypeOption} roleTypeOptions
114
- * @memberof TenantApplicationsService
115
- */
116
- setRoleTypeOption(roleTypeOptions) {
117
- this.roleTypeOption = roleTypeOptions;
118
- }
119
- /**
120
- * Returns the tenant role type options.
121
- * @return {RoleTypeOption}
122
- * @memberof TenantApplicationsService
123
- */
124
- getRoleTypeOption() {
125
- return this.roleTypeOption;
126
- }
127
- /**
128
- * Sets the list of application type information
129
- * @param {RadioOption} appTypeInfo
130
- * @memberof TenantApplicationsService
131
- */
132
- setApplicationType(appTypeInfo) {
133
- this.appTypeInfo = appTypeInfo;
134
- }
135
- /**
136
- * Returns the list of application type information
137
- * @return {RadioOption}
138
- * @memberof TenantApplicationsService
139
- */
140
- getApplicationType() {
141
- return this.appTypeInfo;
142
- }
143
- /**
144
- * Filter permissions
145
- * @param usersPermissions
146
- * @returns @memberof TenantApplicationsService
147
- */
148
- filterPermission(usersPermissions) {
149
- return this.tenantPermissionsService?.filterTenantsPermissions(usersPermissions, this.tenantPermissionsMapService?.getGlobalTenantsPermissions());
150
- }
151
- /**
152
- * Validating access for tenants
153
- * @param permissionType Permission Type to validate permission
154
- * @param mappedUserPermissions Permission which are mapped with tenants
155
- * @returns true if permission is granted
156
- */
157
- validateAccess(permissionType, permissions) {
158
- return this.tenantPermissionsService.validateAccessPermission(permissionType, permissions);
159
- }
160
- /**
161
- * Gets the tenants.
162
- * @param {GetTenantsPayload} payload
163
- * @return {Observable<GetTenantsResponse>}
164
- * @memberof TenantApplicationsService
165
- */
166
- getTenantsList(payload) {
167
- return this.httpService
168
- .postData(`${this.apiBaseUrl}/configurations/app/config`, payload)
169
- .pipe(map((response) => {
170
- return response;
171
- }), catchError((error) => {
172
- throw error;
173
- }));
174
- }
175
- /**
176
- * Gets list of features from server using HttpService.
177
- * @return {Observable<GetFeaturesResponse>}
178
- * @memberof TenantApplicationsService
179
- */
180
- getFeatures() {
181
- return this.httpService
182
- .getData(`${this.apiBaseUrl}/configurations/app/features`)
183
- .pipe(map((response) => {
184
- return response;
185
- }), catchError((error) => {
186
- throw error;
187
- }));
188
- }
189
- /**
190
- * Gets list of roles from server using HttpService.
191
- * @param {string} appId
192
- * @return {*} {Observable<GetRolesResponse>}
193
- * @memberof TenantApplicationsService
194
- */
195
- getRoles(appId) {
196
- return this.httpService
197
- .getData(`${this.apiBaseUrl}/groups/role/${appId}`)
198
- .pipe(map((response) => {
199
- return response;
200
- }), catchError((error) => {
201
- throw error;
202
- }));
203
- }
204
- /**
205
- * Gets the list of permissions based on the appId and return the success or error response as Observable.
206
- * @param {string} appId
207
- * @return {Observable<GetPermissionsResponse>}
208
- * @memberof TenantApplicationsService
209
- */
210
- getPermissions(appId) {
211
- return this.httpService
212
- .getData(`${this.apiBaseUrl}/groups/permissions/${appId}`)
213
- .pipe(map((response) => {
214
- return response;
215
- }), catchError((error) => {
216
- throw error;
217
- }));
218
- }
219
- /**
220
- * Gets the list of roles or permissions based on the roleId or permissionId in the payload and return the success or error response as Observable.
221
- * @param {RolePermissionMappingRequestPayload} payload
222
- * @returns {Observable<RolePermissionMappingResponse>}
223
- * @memberof TenantApplicationsService
224
- */
225
- getRolePermissionMapping(payload) {
226
- return this.httpService
227
- .postData(`${this.apiBaseUrl}/groups/users/rolePermissionMapping`, payload)
228
- .pipe(map((response) => {
229
- return response;
230
- }), catchError((error) => {
231
- throw error;
232
- }));
233
- }
234
- /**
235
- * Submit the new mappings of roles to permissions to the server.
236
- * @param {RolesAndPermissionsRequestPayload} payload
237
- * @returns {Observable<RolesAndPermissionsResponse>}
238
- * @memberof TenantApplicationsService
239
- */
240
- saveRolePermissionMapping(payload) {
241
- return this.httpService
242
- .postData(`${this.apiBaseUrl}/groups/users/rolePermission`, payload)
243
- .pipe(map((response) => {
244
- return response;
245
- }), catchError((error) => {
246
- throw error;
247
- }));
248
- }
249
- /**
250
- * Gets list of roles and permissions mappings from server using HttpService.
251
- * @param {string} appId
252
- * @param {GetRolesAndPermissionsPayload} payload
253
- * @return {*} {Observable<GetRolesAndPermissionsResponse>}
254
- * @memberof TenantApplicationsService
255
- */
256
- getRolesAndPermissionsMappings(appId, payload) {
257
- return this.httpService
258
- .postData(`${this.apiBaseUrl}/groups/roleBasedPermissions/${appId}`, payload)
259
- .pipe(map((response) => {
260
- return response;
261
- }), catchError((error) => {
262
- throw error;
263
- }));
264
- }
265
- /**
266
- * Gets list of application types from server using HttpService.
267
- * @return {Observable<GetAppTypesResponse>}
268
- * @memberof TenantApplicationsService
269
- */
270
- getApplicationTypes() {
271
- return this.httpService
272
- .getData(`${this.apiBaseUrl}/configurations/config/app_type`)
273
- .pipe(map((response) => {
274
- return response;
275
- }), catchError((error) => {
276
- throw error;
277
- }));
278
- }
279
- /**
280
- * Posts create role form data to server using HttpService to create a new role.
281
- * @param {CreateModifyRoleRequestPayload} createModifyRolePayload
282
- * @return {Observable<CreateModifyRoleResponse>}
283
- * @memberof TenantApplicationsService
284
- */
285
- createRole(createModifyRolePayload) {
286
- return this.httpService
287
- .postData(`${this.apiBaseUrl}/groups/role`, createModifyRolePayload)
288
- .pipe(map((response) => {
289
- return response;
290
- }), catchError((error) => {
291
- throw error;
292
- }));
293
- }
294
- /**
295
- * Posts the edited role form data to server using HttpService for updating the role information.
296
- * @param {CreateModifyRoleRequestPayload} createModifyRolePayload
297
- * @return {Observable<CreateModifyRoleResponse>}
298
- * @memberof TenantApplicationsService
299
- */
300
- editRole(createModifyRolePayload) {
301
- return this.httpService
302
- .putData(`${this.apiBaseUrl}/groups/role`, createModifyRolePayload)
303
- .pipe(map((response) => {
304
- return response;
305
- }), catchError((error) => {
306
- throw error;
307
- }));
308
- }
309
- /**
310
- * Gets list of role types from server using HttpService.
311
- * @param {GetRoleTypesPayload} payload
312
- * @return {Observable<RoleTypeResponse>}
313
- * @memberof TenantApplicationsService
314
- */
315
- getRoleTypes(payload) {
316
- return this.httpService
317
- .postData(`${this.apiBaseUrl}/configurations/config/configField`, payload)
318
- .pipe(map((response) => {
319
- return response;
320
- }), catchError((error) => {
321
- throw error;
322
- }));
323
- }
324
- /**
325
- * Constructs the select/dropdown options from the role types received from server.
326
- * @param {RoleTypeConfiguration[]} roleTypeResponse
327
- * @return {RoleTypeOption[]}
328
- * @memberof TenantApplicationsService
329
- */
330
- getRoleTypeOptions(roleTypeResponse) {
331
- this.roleTypeOptions = [];
332
- roleTypeResponse.forEach((item) => {
333
- this.roleTypeOptions?.push({
334
- id: item?.configFieldId,
335
- name: item?.configFieldValue?.roleTypeName,
336
- order: item?.configFieldValue?.viewOrder,
337
- });
338
- });
339
- this.roleTypeOptions.sort((a, b) => a.order - b.order);
340
- return this.roleTypeOptions;
341
- }
342
- /**
343
- * Posts tenant application form data to server using HttpService for creating new tenant application.
344
- * @param {CreateTenantPayload} createTenantPayload
345
- * @return {Observable<CreateTenantResponse>}
346
- * @memberof TenantApplicationsService
347
- */
348
- createTenant(createTenantPayload) {
349
- return this.httpService
350
- .postData(`${this.apiBaseUrl}/configurations/app/createTenant`, createTenantPayload)
351
- .pipe(map((response) => {
352
- return response;
353
- }), catchError((error) => {
354
- throw error;
355
- }));
356
- }
357
- /**
358
- * Constructs the checkbox options from features list from server.
359
- * @param {FeaturesList[]} features
360
- * @returns {CheckboxOption[]}
361
- */
362
- getFeatureOptions(features) {
363
- this.checkBoxOptions = [];
364
- features?.forEach((feature) => {
365
- this.checkBoxOptions?.push({
366
- id: feature?.featureId,
367
- name: feature?.featureName,
368
- checked: feature?.isDefault,
369
- disabled: feature?.isDefault,
370
- });
371
- });
372
- return this.checkBoxOptions;
373
- }
374
- /**
375
- * Constructs the radio options from application types from server.
376
- * @param {AppTypeConfig[]} appTypeOptions
377
- * @returns {RadioOption[]}
378
- */
379
- getApplicationTypeOptions(appTypeOptions) {
380
- this.radioOptions = [];
381
- appTypeOptions?.forEach((appType) => {
382
- this.radioOptions?.push({
383
- id: appType?.configFieldId,
384
- label: appType?.configFieldValue?.type,
385
- });
386
- });
387
- return this.radioOptions;
388
- }
389
- /**
390
- * Constructs the selected features id's.
391
- * @param {CheckboxOption[]} featureOptions
392
- * @returns {FeatureId[]}
393
- */
394
- getFeatureIds(featureOptions) {
395
- const featureIds = [];
396
- featureOptions?.forEach((featureOption) => {
397
- if (featureOption?.checked) {
398
- featureIds.push({
399
- featureId: featureOption.id,
400
- });
401
- }
402
- });
403
- return featureIds;
404
- }
405
- /**
406
- * Sets the newly created tenant information.
407
- * @param {NewTenantInfo} newTenantInfo
408
- */
409
- setNewTenantInfo(newTenantInfo) {
410
- this.newTenantInfo = newTenantInfo;
411
- }
412
- /**
413
- * Returns the newly created tenant information.
414
- */
415
- get getNewTenantInfo() {
416
- return this.newTenantInfo;
417
- }
418
- /**
419
- * Sets tenant function type.
420
- * @param {TenantFunctionType} tenantFunctionType -tenant function type.
421
- */
422
- setTenantFunctionType(tenantFunctionType) {
423
- this.tenantFunctionType = tenantFunctionType;
424
- }
425
- /**
426
- * Returns tenant function type.
427
- * @return {TenantFunctionType} -tenant function type.
428
- */
429
- getTenantFunctionType() {
430
- return this.tenantFunctionType;
431
- }
432
- /**
433
- * Stores the newly created role information.
434
- * @param {RoleInfo} newlyCreatedRole -create role information.
435
- */
436
- setNewlyCreatedRoleInfo(newlyCreatedRole) {
437
- this.newlyCreatedRole = newlyCreatedRole;
438
- }
439
- /**
440
- * Returns the newly created role information.
441
- * @return {RoleInfo} -create role information.
442
- */
443
- getNewlyCreatedRoleInfo() {
444
- return this.newlyCreatedRole;
445
- }
446
- /**
447
- * Posts the edited tenant application form data to server using HttpService for updating the tenant information.
448
- * @param {CreateTenantPayload} editTenantPayload
449
- * @return {Observable<CreateTenantResponse>}
450
- * @memberof TenantApplicationsService
451
- */
452
- editTenant(editTenantPayload) {
453
- return this.httpService
454
- .putData(`${this.apiBaseUrl}/configurations/app/editTenant`, editTenantPayload)
455
- .pipe(map((response) => {
456
- return response;
457
- }), catchError((error) => {
458
- throw error;
459
- }));
460
- }
461
- /**
462
- * Sends update request to the server to update the tenant application status to active/inactive using HttpService and returns the success or failure response.
463
- * @param {UpdateTenantStatusRequestPayload} updateTenantStatusPayload
464
- * @return {Observable<UpdateTenantStatusResponse>}
465
- * @memberof TenantApplicationsService
466
- */
467
- updateTenantStatus(updateTenantStatusPayload) {
468
- return this.httpService
469
- .putData(`${this.apiBaseUrl}/configurations/app/updateStatus`, updateTenantStatusPayload)
470
- .pipe(map((response) => {
471
- return response;
472
- }), catchError((error) => {
473
- throw error;
474
- }));
475
- }
476
- /**
477
- * It generates Feature list from checkbox options generated in form array.
478
- * @param {CheckboxOption[]} features
479
- * @return {Features[]}
480
- * @memberof TenantApplicationsService
481
- */
482
- getFeaturesList(features) {
483
- this.featureList = [];
484
- features?.forEach((feature) => {
485
- if (feature.checked)
486
- this.featureList?.push({
487
- featureId: feature?.id,
488
- featureName: feature?.name,
489
- isDefault: feature?.checked,
490
- });
491
- });
492
- return this.featureList;
493
- }
494
- /**
495
- * Returns sorted role list data.
496
- * @param {Role[]} roleList
497
- * @return {Role[]}
498
- * @memberof TenantApplicationsService
499
- */
500
- sortRolesByRoleType(roleList) {
501
- return roleList.sort((a, b) => a?.viewOrder - b?.viewOrder);
502
- }
503
- /**
504
- * Posts the role details to server using HttpService for deleting the role.
505
- * @param {DeleteRoleRequestPayload} deleteRoleRequestPayload
506
- * @return {Observable<DeleteRoleResponse>}
507
- * @memberof TenantApplicationsService
508
- */
509
- deleteRole(deleteRolePayload) {
510
- return this.httpService
511
- .putData(`${this.apiBaseUrl}/groups/role/deleteRole`, deleteRolePayload)
512
- .pipe(map((response) => {
513
- return response;
514
- }), catchError((error) => {
515
- throw error;
516
- }));
517
- }
518
- /**
519
- * Gets group types from server using HttpService.
520
- * @param {string} appId
521
- * @return {Observable<ViewGroupTypeResponse>}
522
- * @memberof TenantApplicationsService
523
- */
524
- getGroupTypes(appId) {
525
- return this.httpService
526
- .getData(`${this.apiBaseUrl}/configurations/config/appGroupTypeDetails/${appId}`)
527
- .pipe(map((response) => {
528
- return response;
529
- }), catchError((error) => {
530
- throw error;
531
- }));
532
- }
533
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantApplicationsService, deps: [{ token: i1.HttpService }, { token: i2.TenantPermissionsService }, { token: i3.TenantPermissionsMapService }], target: i0.ɵɵFactoryTarget.Injectable }); }
534
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantApplicationsService, providedIn: 'root' }); }
535
- }
536
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantApplicationsService, decorators: [{
537
- type: Injectable,
538
- args: [{
539
- providedIn: 'root',
540
- }]
541
- }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.TenantPermissionsService }, { type: i3.TenantPermissionsMapService }]; } });
542
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWFwcGxpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1hcHBsaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sS0FBSyxXQUFXLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBMkR4RCxNQUFNLE9BQU8seUJBQXlCO0lBa0JwQztJQUNFLDBDQUEwQztJQUNsQyxXQUF3QjtJQUNoQywwQ0FBMEM7SUFDbEMsd0JBQWtEO0lBQzFELDBDQUEwQztJQUNsQywyQkFBd0QsQ0FBQyw2Q0FBNkM7O1FBSnRHLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXhCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFFbEQsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQXZCbEUsZ0JBQVcsR0FBRyxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUsvQyxzQkFBaUIsR0FBRyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUd0RCxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFDakMsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFlLEVBQUUsQ0FBQztRQUM3QixvQkFBZSxHQUFxQixFQUFFLENBQUM7SUFZcEMsQ0FBQztJQUNKLFlBQVksQ0FBQyxVQUFrQixFQUFFLGNBQWdDO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7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Q0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVc7YUFDcEIsT0FBTyxDQUNOLEdBQUcsSUFBSSxDQUFDLFVBQVUsOENBQThDLEtBQUssRUFBRSxDQUN4RTthQUNBLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7K0dBNW5CVSx5QkFBeUI7bUhBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzs0RkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJ0BpZWVlc2EtbnBtL3V0aWxpdHknO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR2V0VGVuYW50c1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uLXNjaGVtYS12aWV3LXRlbmFudC1saXN0Lm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBUZW5hbnRzUGVybWlzc2lvbnMsXHJcbiAgVXNlclBlcm1pc3Npb24sXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3RlbmFudHMtcGVybWlzc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRlbmFudFBlcm1pc3Npb25zTWFwU2VydmljZSB9IGZyb20gJy4vdGVuYW50LXBlcm1pc3Npb25zLW1hcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDcmVhdGVUZW5hbnRSZXF1ZXN0UGF5bG9hZCxcclxuICBDcmVhdGVUZW5hbnRSZXNwb25zZSxcclxuICBHZXRUZW5hbnRzUmVzcG9uc2UsXHJcbiAgTmV3VGVuYW50SW5mbyxcclxuICBUZW5hbnRCYXNpY0luZm8sXHJcbiAgVGVuYW50RGV0YWlsc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy90ZW5hbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiwgUmFkaW9PcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmVJZCxcclxuICBGZWF0dXJlcyxcclxuICBHZXRGZWF0dXJlc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9mZWF0dXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQXBwVHlwZUNvbmZpZyxcclxuICBHZXRBcHBUeXBlc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9hcHAtdHlwZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBUZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3RlbmFudC1wZXJtaXNzaW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGVuYW50RnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3RlbmFudC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZCxcclxuICBHZXRSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2UsXHJcbiAgR2V0Um9sZXNSZXNwb25zZSxcclxuICBSb2xlSW5mbyxcclxuICBEZWxldGVSb2xlUmVxdWVzdFBheWxvYWQsXHJcbiAgRGVsZXRlUm9sZVJlc3BvbnNlLFxyXG4gIFJvbGUsXHJcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcclxuICBSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXF1ZXN0UGF5bG9hZCxcclxuICBSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXNwb25zZSxcclxuICBSb2xlc0FuZFBlcm1pc3Npb25zUmVxdWVzdFBheWxvYWQsXHJcbiAgUm9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlLFxyXG4gIFJvbGVEZXRhaWxzLFxyXG4gIENyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZCxcclxuICBDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3JvbGVzLWFuZC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgVXBkYXRlVGVuYW50U3RhdHVzUmVxdWVzdFBheWxvYWQsXHJcbiAgVXBkYXRlVGVuYW50U3RhdHVzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VwZGF0ZS10ZW5hbnQtc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRSb2xlVHlwZXNQYXlsb2FkLFxyXG4gIFJvbGVUeXBlQ29uZmlndXJhdGlvbixcclxuICBSb2xlVHlwZU9wdGlvbixcclxuICBSb2xlVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9yb2xlLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBWaWV3R3JvdXBUeXBlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdmlldy10ZW5hbnQtZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVuYW50QXBwbGljYXRpb25zU2VydmljZSB7XHJcbiAgdGVuYW50c1RleHQgPSBzY3JlZW5UZXh0cz8udmlld1RlbmFudHM/LmVycm9ycztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIHVzZXJQZXJtaXNzaW9uITogVXNlclBlcm1pc3Npb25bXTtcclxuICBzZWxlY3RlZFRlbmFudEluZm8hOiBUZW5hbnRCYXNpY0luZm8gfCB1bmRlZmluZWQ7XHJcbiAgdXNlclRlbmFudHNQZXJtaXNzaW9ucyE6IFRlbmFudHNQZXJtaXNzaW9uc1tdO1xyXG4gIGNyZWF0ZVRlbmFudHNUZXh0ID0gc2NyZWVuVGV4dHM/LmNyZWF0ZVRlbmFudD8uZXJyb3JzO1xyXG4gIG5ld1RlbmFudEluZm8hOiBOZXdUZW5hbnRJbmZvO1xyXG4gIHRlbmFudEZ1bmN0aW9uVHlwZSE6IFRlbmFudEZ1bmN0aW9uVHlwZTtcclxuICByYWRpb09wdGlvbnM6IFJhZGlvT3B0aW9uW10gPSBbXTtcclxuICBjaGVja0JveE9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBhcHBUeXBlSW5mbzogUmFkaW9PcHRpb25bXSA9IFtdO1xyXG4gIGZlYXR1cmVMaXN0OiBGZWF0dXJlc1tdID0gW107XHJcbiAgcm9sZVR5cGVPcHRpb25zOiBSb2xlVHlwZU9wdGlvbltdID0gW107XHJcbiAgbmV3bHlDcmVhdGVkUm9sZSE6IFJvbGVJbmZvO1xyXG4gIHJvbGVUeXBlT3B0aW9uITogUm9sZVR5cGVPcHRpb25bXTtcclxuICBzZWxlY3RlZFJvbGVJbmZvITogUm9sZURldGFpbHM7XHJcbiAgcm9sZXMhOiBSb2xlW107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHRlbmFudFBlcm1pc3Npb25zU2VydmljZTogVGVuYW50UGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHRlbmFudFBlcm1pc3Npb25zTWFwU2VydmljZTogVGVuYW50UGVybWlzc2lvbnNNYXBTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICBzZXRBcHBDb25maWcoYXBpQmFzZVVybDogc3RyaW5nLCB1c2VyUGVybWlzc2lvbjogVXNlclBlcm1pc3Npb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hcGlCYXNlVXJsID0gYXBpQmFzZVVybDtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGVuYW50IGRldGFpbHMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2VcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRlbmFudERldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRUZW5hbnREZXRhaWxzKGFwcElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvZGV0YWlscy8ke2FwcElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXNlciB0ZW5hbnRzIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHtUZW5hbnRzUGVybWlzc2lvbnNbXX0gVGVuYW50c1Blcm1pc3Npb25zXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRVc2VyVGVuYW50c1Blcm1pc3Npb25zKHVzZXJUZW5hbnRzUGVybWlzc2lvbnM6IFRlbmFudHNQZXJtaXNzaW9uc1tdKSB7XHJcbiAgICB0aGlzLnVzZXJUZW5hbnRzUGVybWlzc2lvbnMgPSB1c2VyVGVuYW50c1Blcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB1c2VyIHRlbmFudHMgcGVybWlzc2lvbnNcclxuICAgKiBAcmV0dXJuIHtUZW5hbnRzUGVybWlzc2lvbnNbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJUZW5hbnRzUGVybWlzc2lvbnMoKTogVGVuYW50c1Blcm1pc3Npb25zW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclRlbmFudHNQZXJtaXNzaW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVzZXIgdGVuYW50cyBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7VGVuYW50QmFzaWNJbmZvfSB0ZW5hbnRJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFRlbmFudEluZm9ybWF0aW9uKHRlbmFudEluZm86IFRlbmFudEJhc2ljSW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRlbmFudEluZm8gPSB0ZW5hbnRJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnRzIGluZm9ybWF0aW9uXHJcbiAgICogQHJldHVybiB7VGVuYW50QmFzaWNJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRUZW5hbnRJbmZvcm1hdGlvbigpOiBUZW5hbnRCYXNpY0luZm8gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSByb2xlcyBpbmZvcm1hdGlvbnNcclxuICAgKiBAcGFyYW0ge1JvbGV9IHJvbGVzXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb2xlc0luZm8ocm9sZXM6IFJvbGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSByb2xlcyBpbmZvcm1hdGlvblxyXG4gICAqIEByZXR1cm4ge1JvbGV9XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlc0luZm8oKTogUm9sZVtdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnJvbGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Um9sZURldGFpbHN9IHJvbGVJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRTZWxlY3RlZFJvbGVJbmZvcm1hdGlvbihyb2xlSW5mbzogUm9sZURldGFpbHMpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb2xlSW5mbyA9IHJvbGVJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4ge1JvbGVEZXRhaWxzfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRSb2xlSW5mb3JtYXRpb24oKTogUm9sZURldGFpbHMgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb2xlSW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGVuYW50IHJvbGUgdHlwZSBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7Um9sZVR5cGVPcHRpb259IHJvbGVUeXBlT3B0aW9uc1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0Um9sZVR5cGVPcHRpb24ocm9sZVR5cGVPcHRpb25zOiBSb2xlVHlwZU9wdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvbGVUeXBlT3B0aW9uID0gcm9sZVR5cGVPcHRpb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQgcm9sZSB0eXBlIG9wdGlvbnMuXHJcbiAgICogQHJldHVybiB7Um9sZVR5cGVPcHRpb259XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlVHlwZU9wdGlvbigpOiBSb2xlVHlwZU9wdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnJvbGVUeXBlT3B0aW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIHR5cGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge1JhZGlvT3B0aW9ufSBhcHBUeXBlSW5mb1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0QXBwbGljYXRpb25UeXBlKGFwcFR5cGVJbmZvOiBSYWRpb09wdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcFR5cGVJbmZvID0gYXBwVHlwZUluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gdHlwZSBpbmZvcm1hdGlvblxyXG4gICAqIEByZXR1cm4ge1JhZGlvT3B0aW9ufVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0QXBwbGljYXRpb25UeXBlKCk6IFJhZGlvT3B0aW9uW10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBwVHlwZUluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEZpbHRlciBwZXJtaXNzaW9uc1xyXG4gICAqIEBwYXJhbSB1c2Vyc1Blcm1pc3Npb25zXHJcbiAgICogQHJldHVybnMgQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBmaWx0ZXJQZXJtaXNzaW9uKHVzZXJzUGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9uW10pOiBUZW5hbnRzUGVybWlzc2lvbnNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2U/LmZpbHRlclRlbmFudHNQZXJtaXNzaW9ucyhcclxuICAgICAgdXNlcnNQZXJtaXNzaW9ucyxcclxuICAgICAgdGhpcy50ZW5hbnRQZXJtaXNzaW9uc01hcFNlcnZpY2U/LmdldEdsb2JhbFRlbmFudHNQZXJtaXNzaW9ucygpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBWYWxpZGF0aW5nIGFjY2VzcyBmb3IgdGVuYW50c1xyXG4gICAqIEBwYXJhbSBwZXJtaXNzaW9uVHlwZSBQZXJtaXNzaW9uIFR5cGUgdG8gdmFsaWRhdGUgcGVybWlzc2lvblxyXG4gICAqIEBwYXJhbSBtYXBwZWRVc2VyUGVybWlzc2lvbnMgUGVybWlzc2lvbiB3aGljaCBhcmUgbWFwcGVkIHdpdGggdGVuYW50c1xyXG4gICAqIEByZXR1cm5zIHRydWUgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkXHJcbiAgICovXHJcbiAgdmFsaWRhdGVBY2Nlc3MoXHJcbiAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsXHJcbiAgICBwZXJtaXNzaW9uczogVGVuYW50c1Blcm1pc3Npb25zW11cclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbmFudFBlcm1pc3Npb25zU2VydmljZS52YWxpZGF0ZUFjY2Vzc1Blcm1pc3Npb24oXHJcbiAgICAgIHBlcm1pc3Npb25UeXBlLFxyXG4gICAgICBwZXJtaXNzaW9uc1xyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGVuYW50cy5cclxuICAgKiBAcGFyYW0ge0dldFRlbmFudHNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRUZW5hbnRzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VGVuYW50c0xpc3QocGF5bG9hZDogR2V0VGVuYW50c1BheWxvYWQpOiBPYnNlcnZhYmxlPEdldFRlbmFudHNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvYXBwL2NvbmZpZ2AsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBsaXN0IG9mIGZlYXR1cmVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0RmVhdHVyZXNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRGZWF0dXJlcygpOiBPYnNlcnZhYmxlPEdldEZlYXR1cmVzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvYXBwL2ZlYXR1cmVzYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGxpc3Qgb2Ygcm9sZXMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEdldFJvbGVzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZXMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0Um9sZXNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9sZS8ke2FwcElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyBiYXNlZCBvbiB0aGUgYXBwSWQgYW5kIHJldHVybiB0aGUgc3VjY2VzcyBvciBlcnJvciByZXNwb25zZSBhcyBPYnNlcnZhYmxlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0UGVybWlzc2lvbnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRQZXJtaXNzaW9ucyhhcHBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9wZXJtaXNzaW9ucy8ke2FwcElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGlzdCBvZiByb2xlcyBvciBwZXJtaXNzaW9ucyBiYXNlZCBvbiB0aGUgcm9sZUlkIG9yIHBlcm1pc3Npb25JZCBpbiB0aGUgcGF5bG9hZCBhbmQgcmV0dXJuIHRoZSBzdWNjZXNzIG9yIGVycm9yIHJlc3BvbnNlIGFzIE9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXF1ZXN0UGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFJvbGVQZXJtaXNzaW9uTWFwcGluZ1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVQZXJtaXNzaW9uTWFwcGluZyhcclxuICAgIHBheWxvYWQ6IFJvbGVQZXJtaXNzaW9uTWFwcGluZ1JlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3JvbGVQZXJtaXNzaW9uTWFwcGluZ2AsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3VibWl0IHRoZSBuZXcgbWFwcGluZ3Mgb2Ygcm9sZXMgdG8gcGVybWlzc2lvbnMgdG8gdGhlIHNlcnZlci5cclxuICAgKiBAcGFyYW0ge1JvbGVzQW5kUGVybWlzc2lvbnNSZXF1ZXN0UGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFJvbGVzQW5kUGVybWlzc2lvbnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzYXZlUm9sZVBlcm1pc3Npb25NYXBwaW5nKFxyXG4gICAgcGF5bG9hZDogUm9sZXNBbmRQZXJtaXNzaW9uc1JlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy91c2Vycy9yb2xlUGVybWlzc2lvbmAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBsaXN0IG9mIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyBtYXBwaW5ncyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwSWRcclxuICAgKiBAcGFyYW0ge0dldFJvbGVzQW5kUGVybWlzc2lvbnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEdldFJvbGVzQW5kUGVybWlzc2lvbnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlc0FuZFBlcm1pc3Npb25zTWFwcGluZ3MoXHJcbiAgICBhcHBJZDogc3RyaW5nLFxyXG4gICAgcGF5bG9hZDogR2V0Um9sZXNBbmRQZXJtaXNzaW9uc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldFJvbGVzQW5kUGVybWlzc2lvbnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3JvbGVCYXNlZFBlcm1pc3Npb25zLyR7YXBwSWR9YCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGxpc3Qgb2YgYXBwbGljYXRpb24gdHlwZXMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRBcHBUeXBlc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFwcGxpY2F0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxHZXRBcHBUeXBlc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9hcHBfdHlwZWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgY3JlYXRlIHJvbGUgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSB0byBjcmVhdGUgYSBuZXcgcm9sZS5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZH0gY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZU1vZGlmeVJvbGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBjcmVhdGVSb2xlKFxyXG4gICAgY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWQ6IENyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlTW9kaWZ5Um9sZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9sZWAsIGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIHRoZSBlZGl0ZWQgcm9sZSBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIGZvciB1cGRhdGluZyB0aGUgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZH0gY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZU1vZGlmeVJvbGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0Um9sZShcclxuICAgIGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkOiBDcmVhdGVNb2RpZnlSb2xlUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZU1vZGlmeVJvbGVSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9sZWAsIGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGxpc3Qgb2Ygcm9sZSB0eXBlcyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0ge0dldFJvbGVUeXBlc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFJvbGVUeXBlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZVR5cGVzKHBheWxvYWQ6IEdldFJvbGVUeXBlc1BheWxvYWQpOiBPYnNlcnZhYmxlPFJvbGVUeXBlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9jb25maWdGaWVsZGAsIHBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0L2Ryb3Bkb3duIG9wdGlvbnMgZnJvbSB0aGUgcm9sZSB0eXBlcyByZWNlaXZlZCBmcm9tIHNlcnZlci5cclxuICAgKiBAcGFyYW0ge1JvbGVUeXBlQ29uZmlndXJhdGlvbltdfSByb2xlVHlwZVJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7Um9sZVR5cGVPcHRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVUeXBlT3B0aW9ucyhcclxuICAgIHJvbGVUeXBlUmVzcG9uc2U6IFJvbGVUeXBlQ29uZmlndXJhdGlvbltdXHJcbiAgKTogUm9sZVR5cGVPcHRpb25bXSB7XHJcbiAgICB0aGlzLnJvbGVUeXBlT3B0aW9ucyA9IFtdO1xyXG4gICAgcm9sZVR5cGVSZXNwb25zZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIHRoaXMucm9sZVR5cGVPcHRpb25zPy5wdXNoKHtcclxuICAgICAgICBpZDogaXRlbT8uY29uZmlnRmllbGRJZCxcclxuICAgICAgICBuYW1lOiBpdGVtPy5jb25maWdGaWVsZFZhbHVlPy5yb2xlVHlwZU5hbWUsXHJcbiAgICAgICAgb3JkZXI6IGl0ZW0/LmNvbmZpZ0ZpZWxkVmFsdWU/LnZpZXdPcmRlcixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucm9sZVR5cGVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcclxuICAgIHJldHVybiB0aGlzLnJvbGVUeXBlT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIHRlbmFudCBhcHBsaWNhdGlvbiBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIGZvciBjcmVhdGluZyBuZXcgdGVuYW50IGFwcGxpY2F0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGVuYW50UGF5bG9hZH0gY3JlYXRlVGVuYW50UGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3JlYXRlVGVuYW50UmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgY3JlYXRlVGVuYW50KFxyXG4gICAgY3JlYXRlVGVuYW50UGF5bG9hZDogQ3JlYXRlVGVuYW50UmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvY3JlYXRlVGVuYW50YCxcclxuICAgICAgICBjcmVhdGVUZW5hbnRQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgY2hlY2tib3ggb3B0aW9ucyBmcm9tIGZlYXR1cmVzIGxpc3QgZnJvbSBzZXJ2ZXIuXHJcbiAgICogQHBhcmFtIHtGZWF0dXJlc0xpc3RbXX0gZmVhdHVyZXNcclxuICAgKiBAcmV0dXJucyB7Q2hlY2tib3hPcHRpb25bXX1cclxuICAgKi9cclxuICBnZXRGZWF0dXJlT3B0aW9ucyhmZWF0dXJlczogRmVhdHVyZXNbXSk6IENoZWNrYm94T3B0aW9uW10ge1xyXG4gICAgdGhpcy5jaGVja0JveE9wdGlvbnMgPSBbXTtcclxuICAgIGZlYXR1cmVzPy5mb3JFYWNoKChmZWF0dXJlOiBGZWF0dXJlcykgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrQm94T3B0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IGZlYXR1cmU/LmZlYXR1cmVJZCxcclxuICAgICAgICBuYW1lOiBmZWF0dXJlPy5mZWF0dXJlTmFtZSxcclxuICAgICAgICBjaGVja2VkOiBmZWF0dXJlPy5pc0RlZmF1bHQsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZlYXR1cmU/LmlzRGVmYXVsdCxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrQm94T3B0aW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgcmFkaW8gb3B0aW9ucyBmcm9tIGFwcGxpY2F0aW9uIHR5cGVzIGZyb20gc2VydmVyLlxyXG4gICAqIEBwYXJhbSB7QXBwVHlwZUNvbmZpZ1tdfSBhcHBUeXBlT3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIHtSYWRpb09wdGlvbltdfVxyXG4gICAqL1xyXG4gIGdldEFwcGxpY2F0aW9uVHlwZU9wdGlvbnMoYXBwVHlwZU9wdGlvbnM6IEFwcFR5cGVDb25maWdbXSk6IFJhZGlvT3B0aW9uW10ge1xyXG4gICAgdGhpcy5yYWRpb09wdGlvbnMgPSBbXTtcclxuICAgIGFwcFR5cGVPcHRpb25zPy5mb3JFYWNoKChhcHBUeXBlOiBBcHBUeXBlQ29uZmlnKSA9PiB7XHJcbiAgICAgIHRoaXMucmFkaW9PcHRpb25zPy5wdXNoKHtcclxuICAgICAgICBpZDogYXBwVHlwZT8uY29uZmlnRmllbGRJZCxcclxuICAgICAgICBsYWJlbDogYXBwVHlwZT8uY29uZmlnRmllbGRWYWx1ZT8udHlwZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLnJhZGlvT3B0aW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0ZWQgZmVhdHVyZXMgaWQncy5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IGZlYXR1cmVPcHRpb25zXHJcbiAgICogQHJldHVybnMge0ZlYXR1cmVJZFtdfVxyXG4gICAqL1xyXG4gIGdldEZlYXR1cmVJZHMoZmVhdHVyZU9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10pOiBGZWF0dXJlSWRbXSB7XHJcbiAgICBjb25zdCBmZWF0dXJlSWRzOiBGZWF0dXJlSWRbXSA9IFtdO1xyXG4gICAgZmVhdHVyZU9wdGlvbnM/LmZvckVhY2goKGZlYXR1cmVPcHRpb246IENoZWNrYm94T3B0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChmZWF0dXJlT3B0aW9uPy5jaGVja2VkKSB7XHJcbiAgICAgICAgZmVhdHVyZUlkcy5wdXNoKHtcclxuICAgICAgICAgIGZlYXR1cmVJZDogZmVhdHVyZU9wdGlvbi5pZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZlYXR1cmVJZHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG5ld2x5IGNyZWF0ZWQgdGVuYW50IGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7TmV3VGVuYW50SW5mb30gbmV3VGVuYW50SW5mb1xyXG4gICAqL1xyXG4gIHNldE5ld1RlbmFudEluZm8obmV3VGVuYW50SW5mbzogTmV3VGVuYW50SW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXdUZW5hbnRJbmZvID0gbmV3VGVuYW50SW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCB0ZW5hbnQgaW5mb3JtYXRpb24uXHJcbiAgICovXHJcbiAgZ2V0IGdldE5ld1RlbmFudEluZm8oKTogTmV3VGVuYW50SW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdUZW5hbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0ZW5hbnQgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge1RlbmFudEZ1bmN0aW9uVHlwZX0gdGVuYW50RnVuY3Rpb25UeXBlIC10ZW5hbnQgZnVuY3Rpb24gdHlwZS5cclxuICAgKi9cclxuICBzZXRUZW5hbnRGdW5jdGlvblR5cGUodGVuYW50RnVuY3Rpb25UeXBlOiBUZW5hbnRGdW5jdGlvblR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlID0gdGVuYW50RnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0ZW5hbnQgZnVuY3Rpb24gdHlwZS5cclxuICAgKiBAcmV0dXJuIHtUZW5hbnRGdW5jdGlvblR5cGV9IC10ZW5hbnQgZnVuY3Rpb24gdHlwZS5cclxuICAgKi9cclxuICBnZXRUZW5hbnRGdW5jdGlvblR5cGUoKTogVGVuYW50RnVuY3Rpb25UeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmVzIHRoZSBuZXdseSBjcmVhdGVkIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtSb2xlSW5mb30gbmV3bHlDcmVhdGVkUm9sZSAtY3JlYXRlIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICovXHJcbiAgc2V0TmV3bHlDcmVhdGVkUm9sZUluZm8obmV3bHlDcmVhdGVkUm9sZTogUm9sZUluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMubmV3bHlDcmVhdGVkUm9sZSA9IG5ld2x5Q3JlYXRlZFJvbGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHtSb2xlSW5mb30gLWNyZWF0ZSByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIGdldE5ld2x5Q3JlYXRlZFJvbGVJbmZvKCk6IFJvbGVJbmZvIHtcclxuICAgIHJldHVybiB0aGlzLm5ld2x5Q3JlYXRlZFJvbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgZWRpdGVkIHRlbmFudCBhcHBsaWNhdGlvbiBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIGZvciB1cGRhdGluZyB0aGUgdGVuYW50IGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGVuYW50UGF5bG9hZH0gZWRpdFRlbmFudFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRUZW5hbnQoXHJcbiAgICBlZGl0VGVuYW50UGF5bG9hZDogQ3JlYXRlVGVuYW50UmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9lZGl0VGVuYW50YCxcclxuICAgICAgICBlZGl0VGVuYW50UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VuZHMgdXBkYXRlIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB0byB1cGRhdGUgdGhlIHRlbmFudCBhcHBsaWNhdGlvbiBzdGF0dXMgdG8gYWN0aXZlL2luYWN0aXZlIHVzaW5nIEh0dHBTZXJ2aWNlIGFuZCByZXR1cm5zIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgcmVzcG9uc2UuXHJcbiAgICogQHBhcmFtIHtVcGRhdGVUZW5hbnRTdGF0dXNSZXF1ZXN0UGF5bG9hZH0gdXBkYXRlVGVuYW50U3RhdHVzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VXBkYXRlVGVuYW50U3RhdHVzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdXBkYXRlVGVuYW50U3RhdHVzKFxyXG4gICAgdXBkYXRlVGVuYW50U3RhdHVzUGF5bG9hZDogVXBkYXRlVGVuYW50U3RhdHVzUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPFVwZGF0ZVRlbmFudFN0YXR1c1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC91cGRhdGVTdGF0dXNgLFxyXG4gICAgICAgIHVwZGF0ZVRlbmFudFN0YXR1c1BheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEl0IGdlbmVyYXRlcyBGZWF0dXJlIGxpc3QgZnJvbSBjaGVja2JveCBvcHRpb25zIGdlbmVyYXRlZCBpbiBmb3JtIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb25bXX0gZmVhdHVyZXNcclxuICAgKiBAcmV0dXJuIHtGZWF0dXJlc1tdfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmVhdHVyZXNMaXN0KGZlYXR1cmVzOiBDaGVja2JveE9wdGlvbltdKTogRmVhdHVyZXNbXSB7XHJcbiAgICB0aGlzLmZlYXR1cmVMaXN0ID0gW107XHJcbiAgICBmZWF0dXJlcz8uZm9yRWFjaCgoZmVhdHVyZTogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgaWYgKGZlYXR1cmUuY2hlY2tlZClcclxuICAgICAgICB0aGlzLmZlYXR1cmVMaXN0Py5wdXNoKHtcclxuICAgICAgICAgIGZlYXR1cmVJZDogZmVhdHVyZT8uaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgZmVhdHVyZU5hbWU6IGZlYXR1cmU/Lm5hbWUgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgaXNEZWZhdWx0OiBmZWF0dXJlPy5jaGVja2VkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlTGlzdDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBzb3J0ZWQgcm9sZSBsaXN0IGRhdGEuXHJcbiAgICogQHBhcmFtIHtSb2xlW119IHJvbGVMaXN0XHJcbiAgICogQHJldHVybiB7Um9sZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc29ydFJvbGVzQnlSb2xlVHlwZShyb2xlTGlzdDogUm9sZVtdKTogUm9sZVtdIHtcclxuICAgIHJldHVybiByb2xlTGlzdC5zb3J0KChhLCBiKSA9PiBhPy52aWV3T3JkZXIgLSBiPy52aWV3T3JkZXIpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgcm9sZSBkZXRhaWxzIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgZGVsZXRpbmcgdGhlIHJvbGUuXHJcbiAgICogQHBhcmFtIHtEZWxldGVSb2xlUmVxdWVzdFBheWxvYWR9IGRlbGV0ZVJvbGVSZXF1ZXN0UGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RGVsZXRlUm9sZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVJvbGUoXHJcbiAgICBkZWxldGVSb2xlUGF5bG9hZDogRGVsZXRlUm9sZVJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxEZWxldGVSb2xlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3JvbGUvZGVsZXRlUm9sZWAsIGRlbGV0ZVJvbGVQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgZ3JvdXAgdHlwZXMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxWaWV3R3JvdXBUeXBlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlcyhhcHBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxWaWV3R3JvdXBUeXBlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvY29uZmlnL2FwcEdyb3VwVHlwZURldGFpbHMvJHthcHBJZH1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,36 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { PermissionType } from '../models/permission-type.model';
3
- import * as i0 from "@angular/core";
4
- export class TenantPermissionsMapService {
5
- constructor() {
6
- this.globalTenantsPermissions = [
7
- {
8
- permissionType: PermissionType.VIEW_TENANTS,
9
- permissionId: 'PERM_1a2dbbb5-5fe1-4261-85b1-a5373f41075a',
10
- permissionName: 'View Tenant Applications',
11
- },
12
- {
13
- permissionType: PermissionType.MANAGE_TENANT,
14
- permissionId: 'PERM_315c49ec-f79a-4dcd-9795-6f97838c8c83',
15
- permissionName: 'Manage (Create, Edit, Disable) Tenant Application',
16
- },
17
- ];
18
- }
19
- /**
20
- * Returns global permissions mapping for tenants.
21
- * @return {TenantsPermissions[]}
22
- * @memberof TenantsPermissionsMapService
23
- */
24
- getGlobalTenantsPermissions() {
25
- return this.globalTenantsPermissions;
26
- }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantPermissionsMapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
28
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantPermissionsMapService, providedIn: 'root' }); }
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TenantPermissionsMapService, decorators: [{
31
- type: Injectable,
32
- args: [{
33
- providedIn: 'root',
34
- }]
35
- }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LXBlcm1pc3Npb25zLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1wZXJtaXNzaW9ucy1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLDJCQUEyQjtJQUh4QztRQUlFLDZCQUF3QixHQUF5QjtZQUMvQztnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFlBQVk7Z0JBQzNDLFlBQVksRUFBRSwyQ0FBMkM7Z0JBQ3pELGNBQWMsRUFBRSwwQkFBMEI7YUFDM0M7WUFDRDtnQkFDRSxjQUFjLEVBQUUsY0FBYyxDQUFDLGFBQWE7Z0JBQzVDLFlBQVksRUFBRSwyQ0FBMkM7Z0JBQ3pELGNBQWMsRUFBRSxtREFBbUQ7YUFDcEU7U0FDRixDQUFDO0tBU0g7SUFSQzs7OztPQUlHO0lBQ0gsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7K0dBcEJVLDJCQUEyQjttSEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRlbmFudHNQZXJtaXNzaW9ucyB9IGZyb20gJy4uL21vZGVscy90ZW5hbnRzLXBlcm1pc3Npb24ubW9kZWwnO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVuYW50UGVybWlzc2lvbnNNYXBTZXJ2aWNlIHtcclxuICBnbG9iYWxUZW5hbnRzUGVybWlzc2lvbnM6IFRlbmFudHNQZXJtaXNzaW9uc1tdID0gW1xyXG4gICAge1xyXG4gICAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUuVklFV19URU5BTlRTLFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzFhMmRiYmI1LTVmZTEtNDI2MS04NWIxLWE1MzczZjQxMDc1YScsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnVmlldyBUZW5hbnQgQXBwbGljYXRpb25zJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZS5NQU5BR0VfVEVOQU5ULFxyXG4gICAgICBwZXJtaXNzaW9uSWQ6ICdQRVJNXzMxNWM0OWVjLWY3OWEtNGRjZC05Nzk1LTZmOTc4MzhjOGM4MycsXHJcbiAgICAgIHBlcm1pc3Npb25OYW1lOiAnTWFuYWdlIChDcmVhdGUsIEVkaXQsIERpc2FibGUpIFRlbmFudCBBcHBsaWNhdGlvbicsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBnbG9iYWwgcGVybWlzc2lvbnMgbWFwcGluZyBmb3IgdGVuYW50cy5cclxuICAgKiBAcmV0dXJuIHtUZW5hbnRzUGVybWlzc2lvbnNbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50c1Blcm1pc3Npb25zTWFwU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdsb2JhbFRlbmFudHNQZXJtaXNzaW9ucygpOiBUZW5hbnRzUGVybWlzc2lvbnNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nbG9iYWxUZW5hbnRzUGVybWlzc2lvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==