@csmart/ngc-smart-core 1.18.18 → 1.18.21
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.
|
@@ -228,55 +228,37 @@ export class SmartAuthService {
|
|
|
228
228
|
this.loginStaff = selData.loginStaff;
|
|
229
229
|
this.selectedOffender = selData.selectedOffender;
|
|
230
230
|
let routePath = '';
|
|
231
|
-
if (accessControlConfig.route.url &&
|
|
232
|
-
accessControlConfig.route.url.length > 0) {
|
|
231
|
+
if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {
|
|
233
232
|
routePath = accessControlConfig.route.url[0].path;
|
|
234
233
|
}
|
|
235
234
|
const permissions = this.loginStaff.permissions;
|
|
236
235
|
const resource = routePath;
|
|
237
|
-
const roleId = accessControlConfig.roleId
|
|
238
|
-
? accessControlConfig.roleId.toUpperCase()
|
|
239
|
-
: null;
|
|
236
|
+
const roleId = accessControlConfig.roleId?.toUpperCase() || null;
|
|
240
237
|
const accessType = accessControlConfig.accessType;
|
|
241
|
-
const assignmentStaffRelationId =
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
if (permission)
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
(accessType === 'close' && !permission.closeFlag) ||
|
|
266
|
-
(accessType === 'expunge' && !permission.expungeFlag) ||
|
|
267
|
-
(accessType === 'reopen' && !permission.reopenFlag)) {
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
return true;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
if (accessType === 'read') {
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
return false;
|
|
238
|
+
const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';
|
|
239
|
+
// Find matching permissions (prioritize specific role over aggregated)
|
|
240
|
+
const specificPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
|
|
241
|
+
p.resource.trim() === resource &&
|
|
242
|
+
p.roleId.trim().toUpperCase() === roleId &&
|
|
243
|
+
(p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
|
|
244
|
+
const aggregatedPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
|
|
245
|
+
p.resource.trim() === resource &&
|
|
246
|
+
p.roleId.trim() === '*' &&
|
|
247
|
+
(p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
|
|
248
|
+
const permission = specificPermission || aggregatedPermission;
|
|
249
|
+
if (!permission)
|
|
250
|
+
return false;
|
|
251
|
+
const flagMap = {
|
|
252
|
+
'read': permission.readFlag,
|
|
253
|
+
'create': permission.createFlag,
|
|
254
|
+
'update': permission.updateFlag,
|
|
255
|
+
'delete': permission.deleteFlag,
|
|
256
|
+
'assign': permission.assignFlag,
|
|
257
|
+
'close': permission.closeFlag,
|
|
258
|
+
'expunge': permission.expungeFlag,
|
|
259
|
+
'reopen': permission.reopenFlag
|
|
260
|
+
};
|
|
261
|
+
return !!flagMap[accessType];
|
|
280
262
|
}
|
|
281
263
|
canAppFeatureActivate(loginStaff, feature, appModuleId = null) {
|
|
282
264
|
// if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {
|
|
@@ -503,4 +485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
503
485
|
type: Inject,
|
|
504
486
|
args: [SMART_DOMAIN_FORMAT]
|
|
505
487
|
}] }] });
|
|
506
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtYXV0aC9zbWFydC1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2xELE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsSUFBZ0IsRUFDaEIsWUFBeUIsRUFDekIsVUFBc0IsRUFDVSxtQkFBbUIsRUFDdEIsb0JBQTRCO1FBSnpELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBQTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7SUFDaEUsQ0FBQztJQUVHLGFBQWE7UUFDbEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9D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QUVoQixNQUFNLFdBQVcsR0FBRzs7cUVBRTZDLFdBQVcsZUFBZSxRQUFROzs7O1lBSTNGLENBQUM7UUFFVCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUMzRCxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUNULGlEQUFpRCxFQUNqRCxNQUFNLENBQ1AsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDYix5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO2lJQTFrQlUsZ0JBQWdCLGlHQVFqQixzQkFBc0IsYUFDdEIsbUJBQW1CO3FJQVRsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCB0aHJvd0Vycm9yLCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlLCBjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBMb2dpblN0YWZmLFxyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgU01BUlRfREFUQV9TRVJWSUNFX1VSTCxcclxuICBTTUFSVF9ET01BSU5fRk9STUFULFxyXG4gIFJvbGUsXHJcbiAgUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZyB9IGZyb20gJy4vc21hcnQtYWNjZXNzLWNvbnRyb2wtY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEF1dGhTZXJ2aWNlIHtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgQEluamVjdChTTUFSVF9EQVRBX1NFUlZJQ0VfVVJMKSBwcml2YXRlIHNtYXJ0RGF0YVNlcnZpY2VVcmwsXHJcbiAgICBASW5qZWN0KFNNQVJUX0RPTUFJTl9GT1JNQVQpIHByaXZhdGUgc21hcnREb21haW5Gb3JtYXRVcmw6IHN0cmluZyxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRMb2dpblN0YWZmKCk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnU21hcnRBdXRoU2VydmljZSAtIGdldExvZ2luU3RhZmYoKScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Rldk1vZGUgJiYgdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgaW50ZXJuYWwgaW5zdGFuY2UgaW4gc2VydmljZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLmxvZ2luU3RhZmYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgdXNpbmcgcHJlc2V0IHVzZXIgbmFtZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoc3RvcmVkUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHN0b3JlZFJlc3VsdCAmJiBzdG9yZWRSZXN1bHQuc3RhZmZJZCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgZnJvbSBzZXNzaW9uLicsXHJcbiAgICAgICAgICAgICAgc3RvcmVkUmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gc3RvcmVkUmVzdWx0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHN0b3JlZFJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRSZXN1bHQgJiYgc3RvcmVkUmVzdWx0LnVzZXJOYW1lKSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBnZXRMb2dpblN0YWZmKCk6IGdldCB1c2luZyBwcmVzZXQgdXNlciBuYW1lJyxcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFmZihzdG9yZWRSZXN1bHQudXNlck5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB1c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XHJcbiAgICAgICAgICBjb25zdCBzdGFmZk5hbWUgPSB1c2VyTmFtZS5zdWJzdHJpbmcoMCwgdXNlck5hbWUuaW5kZXhPZignQCcpKTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGxvZ2luTG9naW5TdGFmZigpOiBnZXQgdXNpbmcgbG9naW4gc3RhZmYgbmFtZSAnLFxyXG4gICAgICAgICAgICAgIHN0YWZmTmFtZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHN0YWZmTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF07XHJcbiAgICAgIHJldHVybiBhY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVhbVVybChhcHA6IHN0cmluZywgYWZ0ZXJIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnREb21haW5Gb3JtYXRVcmwucmVwbGFjZSgnJHtBUFB9JywgYXBwKSArIGFmdGVySGFzaDtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1NhbWVIb3N0KHVybCwgYXBwKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydERvbWFpbkZvcm1hdFVybC5yZXBsYWNlKCcke0FQUH0nLCBhcHApID09PSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb1RlYW0obG9naW5TdGFmZjogTG9naW5TdGFmZikge1xyXG4gICAgaWYgKGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KChyb2xlKSA9PiByb2xlLnJvbGVJZCA9PT0gJ0VVVVNQQycpID4gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzU2FtZUhvc3Qod2luZG93LmxvY2F0aW9uLm9yaWdpbiwgJ2ludmVzdGlnYXRpb24nKSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRUZWFtVXJsKCdpbnZlc3RpZ2F0aW9uJywgJy9hc3NpZ25tZW50Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KFxyXG4gICAgICAgIChyb2xlKSA9PiByb2xlLnJvbGVJZC5zdWJzdHJpbmcoMCwgMykgPT09ICdSU0MnLFxyXG4gICAgICApID4gLTFcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNTYW1lSG9zdCh3aW5kb3cubG9jYXRpb24ub3JpZ2luLCAncnNjJykpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ2V0VGVhbVVybCgncnNjJywgJy9vZmZlbmRlci1saXN0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXIpIHtcclxuICAgIGlmICghdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXNlbGVjdGVkT2ZmZW5kZXIuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCkge1xyXG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCxcclxuICAgICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSByZWxhdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFBlcm1pc3Npb24oXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5TdGFmZikge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBhd2FpdCB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9XHJcbiAgICAgIHJvdXRlLnVybCAmJiByb3V0ZS51cmwubGVuZ3RoID4gMCA/IHJvdXRlLnVybFswXSEucGF0aCA6ICcnO1xyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE9mZmVuZGVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IGF3YWl0IHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gYXdhaXQgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gcmVsYXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcik7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQ7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePVwic2FjLVwiXScpO1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9ec2FjLShcXFMrKS0oXFxTKykkL2k7XHJcblxyXG4gICAgQXJyYXkuZnJvbShlbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgaGlkZTtcclxuICAgICAgbGV0IGRpc2FibGU7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5tYXRjaChwYXR0ZXJuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVJZCA9IHJlc3VsdHNbMV0gPyByZXN1bHRzWzFdLnRvVXBwZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSByZXN1bHRzWzJdO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0c1swXSk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzWzFdKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdHNbMl0pO1xyXG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAucmVzb3VyY2UgPT09IHJlc291cmNlICYmXHJcbiAgICAgICAgICAgICAgcC5yb2xlSWQgPT09IHJvbGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByZXNvdXJjZTogJywgcmVzb3VyY2UpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhcHBNb2R1bGVJZDogJywgYXBwTW9kdWxlSWQpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByb2xlSWQ6ICcsIHJvbGVJZCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhc3NpZ25tZW50IHJlbGF0aW9uOiAnLFxyXG4gICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgTWF0Y2hlZCBwZXJtaXNzaW9uOiAnLCBwZXJtaXNzaW9uKTtcclxuXHJcbiAgICAgICAgICBpZiAocGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAocmlnaHQgPT09ICdyZWFkJykge1xyXG4gICAgICAgICAgICAgIGlmICghcGVybWlzc2lvbi5yZWFkRmxhZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2NyZWF0ZScgJiYgIXBlcm1pc3Npb24uY3JlYXRlRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICd1cGRhdGUnICYmICFwZXJtaXNzaW9uLnVwZGF0ZUZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgKHJpZ2h0ID09PSAnZGVsZXRlJyAmJiAhcGVybWlzc2lvbi5kZWxldGVGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2Fzc2lnbicgJiYgIXBlcm1pc3Npb24uYXNzaWduRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICdjbG9zZScgJiYgIXBlcm1pc3Npb24uY2xvc2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2V4cHVuZ2UnICYmICFwZXJtaXNzaW9uLmV4cHVuZ2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ3Jlb3BlbicgJiYgIXBlcm1pc3Npb24ucmVvcGVuRmxhZylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgaGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcclxuICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIGRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ2hpZGU6ICcsIGhpZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZGlzYWJsZTogJywgZGlzYWJsZSk7XHJcbiAgICAgIGlmIChoaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlSHRtbEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24oYWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnKSB7XHJcbiAgICBjb25zdCBzZWxEYXRhID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS5kYXRhO1xyXG4gICAgdGhpcy5sb2dpblN0YWZmID0gc2VsRGF0YS5sb2dpblN0YWZmO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsRGF0YS5zZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgbGV0IHJvdXRlUGF0aCA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICBhY2Nlc3NDb250cm9sQ29uZmlnLnJvdXRlLnVybCAmJlxyXG4gICAgICBhY2Nlc3NDb250cm9sQ29uZmlnLnJvdXRlLnVybC5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcm91dGVQYXRoID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmxbMF0hLnBhdGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucztcclxuICAgIGNvbnN0IHJlc291cmNlID0gcm91dGVQYXRoO1xyXG4gICAgY29uc3Qgcm9sZUlkID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb2xlSWRcclxuICAgICAgPyBhY2Nlc3NDb250cm9sQ29uZmlnLnJvbGVJZC50b1VwcGVyQ2FzZSgpXHJcbiAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFjY2Vzc1R5cGUgPSBhY2Nlc3NDb250cm9sQ29uZmlnLmFjY2Vzc1R5cGU7XHJcbiAgICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gKCF0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgfHwgIXRoaXMuc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZClcclxuICAgICAgPyAnTi9BJ1xyXG4gICAgICA6IHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkO1xyXG5cclxuICAgIGNvbnN0IHBlcm1pc3Npb24gPSBwZXJtaXNzaW9ucy5maW5kKChwKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgcC5hcHBNb2R1bGVJZCA9PT0gYWNjZXNzQ29udHJvbENvbmZpZy5hcHBNb2R1bGVJZCAmJlxyXG4gICAgICAgIHAucmVzb3VyY2UudHJpbSgpID09PSByZXNvdXJjZSAmJlxyXG4gICAgICAgICghcm9sZUlkIHx8IHAucm9sZUlkLnRyaW0oKSA9PT0gJyonIHx8IHAucm9sZUlkLnRyaW0oKSA9PT0gcm9sZUlkKSAmJlxyXG4gICAgICAgIChwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09ICdOL0EnIHx8XHJcbiAgICAgICAgICBwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09IGFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVybWlzc2lvbikge1xyXG4gICAgICBpZiAoYWNjZXNzVHlwZSA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9uLnJlYWRGbGFnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ2NyZWF0ZScgJiYgIXBlcm1pc3Npb24uY3JlYXRlRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ3VwZGF0ZScgJiYgIXBlcm1pc3Npb24udXBkYXRlRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ2RlbGV0ZScgJiYgIXBlcm1pc3Npb24uZGVsZXRlRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ2Fzc2lnbicgJiYgIXBlcm1pc3Npb24uYXNzaWduRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ2Nsb3NlJyAmJiAhcGVybWlzc2lvbi5jbG9zZUZsYWcpIHx8XHJcbiAgICAgICAgKGFjY2Vzc1R5cGUgPT09ICdleHB1bmdlJyAmJiAhcGVybWlzc2lvbi5leHB1bmdlRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ3Jlb3BlbicgJiYgIXBlcm1pc3Npb24ucmVvcGVuRmxhZylcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoYWNjZXNzVHlwZSA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuQXBwRmVhdHVyZUFjdGl2YXRlKFxyXG4gICAgbG9naW5TdGFmZjogTG9naW5TdGFmZixcclxuICAgIGZlYXR1cmU6IHN0cmluZyxcclxuICAgIGFwcE1vZHVsZUlkID0gbnVsbCxcclxuICApIHtcclxuICAgIC8vIGlmICghdGhpcy5pc0F1dGhFbmFibGUobG9naW5TdGFmZi5yb2xlcywgYXBwTW9kdWxlSWQpKSB7XHJcbiAgICAvLyAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuaGFzQXBwRmVhdHVyZVBlcm1pc3Npb24oXHJcbiAgICAgIGxvZ2luU3RhZmYucGVybWlzc2lvbnMsXHJcbiAgICAgIGZlYXR1cmUsXHJcbiAgICAgIGFwcE1vZHVsZUlkLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBpc0F1dGhFbmFibGUocm9sZXM6IFJvbGVbXSwgYXBwTW9kdWxlSWQ6IHN0cmluZykge1xyXG4gIC8vICAgaWYgKHJvbGVzICYmIHJvbGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgcmV0dXJuIHJvbGVzLm1hcChyID0+IHIucm9sZUlkKS5maW5kSW5kZXgodGhpcy5pc0V4dGVybmFsUm9sZSkgPiAtMSB8fCBhcHBNb2R1bGVJZCA9PT0gJ1JSJztcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBoYXNJbnRha2VSb2xlKHJvbGVzOiBSb2xlW10pIHtcclxuICAgIGlmIChyb2xlcyAmJiByb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiByb2xlcy5maW5kSW5kZXgodGhpcy5pc0ludGFrZVJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0FwcEZlYXR1cmVQZXJtaXNzaW9uKFxyXG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXSxcclxuICAgIGZlYXR1cmU6IHN0cmluZyxcclxuICAgIGFwcE1vZHVsZUlkOiBzdHJpbmcsXHJcbiAgKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoYXBwTW9kdWxlSWQpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgcGVybWlzc2lvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAocCkgPT4gcC5yZXNvdXJjZSA9PT0gZmVhdHVyZSAmJiBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCxcclxuICAgICAgICAgICkgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25zLmZpbmRJbmRleCgocCkgPT4gcC5yZXNvdXJjZSA9PT0gZmVhdHVyZSkgPiAtMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFeHRlcm5hbFJvbGUocm9sZUlkKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGVJZCkge1xyXG4gICAgICBjYXNlICdFVURUTCc6XHJcbiAgICAgIGNhc2UgJ0VVRFVTTSc6XHJcbiAgICAgIGNhc2UgJ0VVSkRHJzpcclxuICAgICAgY2FzZSAnRVVNUEQnOlxyXG4gICAgICBjYXNlICdFVVNPVFYnOlxyXG4gICAgICBjYXNlICdFVVVTQTInOlxyXG4gICAgICBjYXNlICdFVVVTQU8nOlxyXG4gICAgICBjYXNlICdFVVVTUEMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbnRha2VSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnT1BBJzpcclxuICAgICAgY2FzZSAnT1BTJzpcclxuICAgICAgY2FzZSAnU09QUyc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNhYmxlSHRtbEVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xyXG4gICAgLy8gY29uc29sZS5sb2coZWxlbWVudCk7XHJcbiAgICBzd2l0Y2ggKGVsZW1lbnQubm9kZU5hbWUpIHtcclxuICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgICAnc3R5bGUnLFxyXG4gICAgICAgICAgJ3BvaW50ZXItZXZlbnRzOiBub25lO2N1cnNvcjogbm90LWFsbG93ZWQ7JyxcclxuICAgICAgICApO1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICctMScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoaWRlSHRtbEVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xyXG4gICAgLy8gZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICdoaWRkZW4nKTtcclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdGFmZih1c2VyTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2dpblN0YWZmPiB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IHRoaXMuZmluZFN0YWZmUXVlcnksXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICB3aGVyZToge1xyXG4gICAgICAgICAgICB1c2VyTmFtZTogdXNlck5hbWUsXHJcbiAgICAgICAgICAgIGFjdGl2ZUZsYWc6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgZ2V0U3RhZmYoKSBmcm9tIHNlcnZpY2UgJywgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXN1bHQuZmluZHZTdGFmZnMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuZmluZHZTdGFmZnMuZGF0YVswXTtcclxuICAgICAgICAgICAgdGhpcy54ZG1TZXJ2aWNlLnNldExvZ2luU3RhZmYoZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZiA9IGRhdGE7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgJyArIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcXVlcnk8VD4ob3B0aW9uczoge1xyXG4gICAgcXVlcnk6IHN0cmluZztcclxuICAgIHZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XHJcbiAgfSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDx7IGRhdGE6IFQgfT4oXHJcbiAgICAgICAgdGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxyXG4gICAgICAgICAgdmFyaWFibGVzOiBvcHRpb25zLnZhcmlhYmxlcyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICdOby1BdXRoJzogJ1RydWUnLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUobWFwKChkKSA9PiBkLmRhdGEpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGZpbmRTdGFmZlF1ZXJ5KCl7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgIHF1ZXJ5IGZpbmR2U3RhZmZzKCRpbnB1dDogdlN0YWZmTXVsdGlJbnB1dCkge1xyXG4gICAgICAgIGZpbmR2U3RhZmZzKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgICAgIHRvdGFsQ291bnRcclxuICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICAgIGRhdGEge1xyXG4gICAgICAgICAgICBzdGFmZklkXHJcbiAgICAgICAgICAgIHVzZXJOYW1lXHJcbiAgICAgICAgICAgIGxhc3ROYW1lXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZVxyXG4gICAgICAgICAgICBwaG9uZVxyXG4gICAgICAgICAgICBlbWFpbFxyXG4gICAgICAgICAgICByb2xlcyB7XHJcbiAgICAgICAgICAgICAgcm9sZUlkXHJcbiAgICAgICAgICAgICAgcm9sZVxyXG4gICAgICAgICAgICAgIG9yZ2FuaXphdGlvbklkXHJcbiAgICAgICAgICAgICAgb3JnYW5pemF0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGVybWlzc2lvbnMge1xyXG4gICAgICAgICAgICAgIHJvbGVJZFxyXG4gICAgICAgICAgICAgIGFwcE1vZHVsZUlkXHJcbiAgICAgICAgICAgICAgcmVzb3VyY2VcclxuICAgICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkXHJcbiAgICAgICAgICAgICAgcmVhZEZsYWdcclxuICAgICAgICAgICAgICBjcmVhdGVGbGFnXHJcbiAgICAgICAgICAgICAgdXBkYXRlRmxhZ1xyXG4gICAgICAgICAgICAgIGRlbGV0ZUZsYWdcclxuICAgICAgICAgICAgICBhc3NpZ25GbGFnXHJcbiAgICAgICAgICAgICAgcmVvcGVuRmxhZ1xyXG4gICAgICAgICAgICAgIGNsb3NlRmxhZ1xyXG4gICAgICAgICAgICAgIGV4cHVuZ2VGbGFnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3B0aW9ucyB7XHJcbiAgICAgICAgICAgICAgb2ZmZW5kZXJMaXN0T3B0aW9uSWRcclxuICAgICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgICAgICAgc2VydmljZUFwaUZpZWxkTmFtZVxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkRmxhZ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICBzdGFmZklkOiBudW1iZXIsXHJcbiAgICBvZmZlbmRlcklkOiBudW1iZXIsXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmluZHZTdGFmZk9mZmVuZGVyUmVsYXRpb25zKGlucHV0OiB7d2hlcmU6IHtzdGFmZklkOiAke3N0YWZmSWR9LCBvZmZlbmRlcklkOiAke29mZmVuZGVySWR9fX0pIHtcclxuICAgICAgICAgICAgICAgIGRhdGEge1xyXG4gICAgICAgICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9YDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBnZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oKSBmcm9tIHNlcnZpY2UgJyxcclxuICAgICAgICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmRhdGEuZmluZHZTdGFmZk9mZmVuZGVyUmVsYXRpb25zLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmRhdGEuZmluZHZTdGFmZk9mZmVuZGVyUmVsYXRpb25zLmRhdGFbMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRocm93RXJyb3IoJ05vIGFjY2VzcyByaWdodC4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yICcgKyBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um9sZVBlcm1pc3Npb25zKFxyXG4gICAgYXBwTW9kdWxlSWQ6IHN0cmluZyxcclxuICAgIHJlc291cmNlOiBzdHJpbmcsXHJcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuICAgICAgICAgICBxdWVyeSBmaW5kdlJvbGVQZXJtaXNzaW9uUGl2b3Rze1xyXG4gICAgICAgICAgICBmaW5kdlJvbGVQZXJtaXNzaW9uUGl2b3RzKGlucHV0OiB7d2hlcmU6IHthcHBNb2R1bGVJZDogJHthcHBNb2R1bGVJZH0sIHJlc291cmNlOiAke3Jlc291cmNlfX19KXtcclxuICAgICAgICAgICAgICB0b3RhbENvdW50XHJcbiAgICAgICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9YDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBmaW5kdlJvbGVQZXJtaXNzaW9uUGl2b3RzKCkgZnJvbSBzZXJ2aWNlICcsXHJcbiAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5kYXRhLmZpbmR2Um9sZVBlcm1pc3Npb25QaXZvdHMudG90YWxDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aHJvd0Vycm9yKCdObyBhY2Nlc3MgcmlnaHQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yICcgKyBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtYXV0aC9zbWFydC1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2xELE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsSUFBZ0IsRUFDaEIsWUFBeUIsRUFDekIsVUFBc0IsRUFDVSxtQkFBbUIsRUFDdEIsb0JBQTRCO1FBSnpELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBQTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7SUFDaEUsQ0FBQztJQUVHLGFBQWE7UUFDbEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9D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Q0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDYix5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO2lJQS9qQlUsZ0JBQWdCLGlHQVFqQixzQkFBc0IsYUFDdEIsbUJBQW1CO3FJQVRsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCB0aHJvd0Vycm9yLCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlLCBjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBMb2dpblN0YWZmLFxyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgU01BUlRfREFUQV9TRVJWSUNFX1VSTCxcclxuICBTTUFSVF9ET01BSU5fRk9STUFULFxyXG4gIFJvbGUsXHJcbiAgUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZyB9IGZyb20gJy4vc21hcnQtYWNjZXNzLWNvbnRyb2wtY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEF1dGhTZXJ2aWNlIHtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgQEluamVjdChTTUFSVF9EQVRBX1NFUlZJQ0VfVVJMKSBwcml2YXRlIHNtYXJ0RGF0YVNlcnZpY2VVcmwsXHJcbiAgICBASW5qZWN0KFNNQVJUX0RPTUFJTl9GT1JNQVQpIHByaXZhdGUgc21hcnREb21haW5Gb3JtYXRVcmw6IHN0cmluZyxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRMb2dpblN0YWZmKCk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnU21hcnRBdXRoU2VydmljZSAtIGdldExvZ2luU3RhZmYoKScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Rldk1vZGUgJiYgdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgaW50ZXJuYWwgaW5zdGFuY2UgaW4gc2VydmljZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLmxvZ2luU3RhZmYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgdXNpbmcgcHJlc2V0IHVzZXIgbmFtZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoc3RvcmVkUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHN0b3JlZFJlc3VsdCAmJiBzdG9yZWRSZXN1bHQuc3RhZmZJZCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgZnJvbSBzZXNzaW9uLicsXHJcbiAgICAgICAgICAgICAgc3RvcmVkUmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gc3RvcmVkUmVzdWx0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHN0b3JlZFJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRSZXN1bHQgJiYgc3RvcmVkUmVzdWx0LnVzZXJOYW1lKSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBnZXRMb2dpblN0YWZmKCk6IGdldCB1c2luZyBwcmVzZXQgdXNlciBuYW1lJyxcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFmZihzdG9yZWRSZXN1bHQudXNlck5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB1c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XHJcbiAgICAgICAgICBjb25zdCBzdGFmZk5hbWUgPSB1c2VyTmFtZS5zdWJzdHJpbmcoMCwgdXNlck5hbWUuaW5kZXhPZignQCcpKTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGxvZ2luTG9naW5TdGFmZigpOiBnZXQgdXNpbmcgbG9naW4gc3RhZmYgbmFtZSAnLFxyXG4gICAgICAgICAgICAgIHN0YWZmTmFtZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHN0YWZmTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF07XHJcbiAgICAgIHJldHVybiBhY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVhbVVybChhcHA6IHN0cmluZywgYWZ0ZXJIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnREb21haW5Gb3JtYXRVcmwucmVwbGFjZSgnJHtBUFB9JywgYXBwKSArIGFmdGVySGFzaDtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1NhbWVIb3N0KHVybCwgYXBwKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydERvbWFpbkZvcm1hdFVybC5yZXBsYWNlKCcke0FQUH0nLCBhcHApID09PSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb1RlYW0obG9naW5TdGFmZjogTG9naW5TdGFmZikge1xyXG4gICAgaWYgKGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KChyb2xlKSA9PiByb2xlLnJvbGVJZCA9PT0gJ0VVVVNQQycpID4gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzU2FtZUhvc3Qod2luZG93LmxvY2F0aW9uLm9yaWdpbiwgJ2ludmVzdGlnYXRpb24nKSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRUZWFtVXJsKCdpbnZlc3RpZ2F0aW9uJywgJy9hc3NpZ25tZW50Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KFxyXG4gICAgICAgIChyb2xlKSA9PiByb2xlLnJvbGVJZC5zdWJzdHJpbmcoMCwgMykgPT09ICdSU0MnLFxyXG4gICAgICApID4gLTFcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNTYW1lSG9zdCh3aW5kb3cubG9jYXRpb24ub3JpZ2luLCAncnNjJykpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ2V0VGVhbVVybCgncnNjJywgJy9vZmZlbmRlci1saXN0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXIpIHtcclxuICAgIGlmICghdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXNlbGVjdGVkT2ZmZW5kZXIuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCkge1xyXG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCxcclxuICAgICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSByZWxhdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFBlcm1pc3Npb24oXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5TdGFmZikge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBhd2FpdCB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9XHJcbiAgICAgIHJvdXRlLnVybCAmJiByb3V0ZS51cmwubGVuZ3RoID4gMCA/IHJvdXRlLnVybFswXSEucGF0aCA6ICcnO1xyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE9mZmVuZGVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IGF3YWl0IHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gYXdhaXQgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gcmVsYXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcik7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQ7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePVwic2FjLVwiXScpO1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9ec2FjLShcXFMrKS0oXFxTKykkL2k7XHJcblxyXG4gICAgQXJyYXkuZnJvbShlbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgaGlkZTtcclxuICAgICAgbGV0IGRpc2FibGU7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5tYXRjaChwYXR0ZXJuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVJZCA9IHJlc3VsdHNbMV0gPyByZXN1bHRzWzFdLnRvVXBwZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSByZXN1bHRzWzJdO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0c1swXSk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzWzFdKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdHNbMl0pO1xyXG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAucmVzb3VyY2UgPT09IHJlc291cmNlICYmXHJcbiAgICAgICAgICAgICAgcC5yb2xlSWQgPT09IHJvbGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByZXNvdXJjZTogJywgcmVzb3VyY2UpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhcHBNb2R1bGVJZDogJywgYXBwTW9kdWxlSWQpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByb2xlSWQ6ICcsIHJvbGVJZCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhc3NpZ25tZW50IHJlbGF0aW9uOiAnLFxyXG4gICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgTWF0Y2hlZCBwZXJtaXNzaW9uOiAnLCBwZXJtaXNzaW9uKTtcclxuXHJcbiAgICAgICAgICBpZiAocGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAocmlnaHQgPT09ICdyZWFkJykge1xyXG4gICAgICAgICAgICAgIGlmICghcGVybWlzc2lvbi5yZWFkRmxhZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2NyZWF0ZScgJiYgIXBlcm1pc3Npb24uY3JlYXRlRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICd1cGRhdGUnICYmICFwZXJtaXNzaW9uLnVwZGF0ZUZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgKHJpZ2h0ID09PSAnZGVsZXRlJyAmJiAhcGVybWlzc2lvbi5kZWxldGVGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2Fzc2lnbicgJiYgIXBlcm1pc3Npb24uYXNzaWduRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICdjbG9zZScgJiYgIXBlcm1pc3Npb24uY2xvc2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2V4cHVuZ2UnICYmICFwZXJtaXNzaW9uLmV4cHVuZ2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ3Jlb3BlbicgJiYgIXBlcm1pc3Npb24ucmVvcGVuRmxhZylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgaGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcclxuICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIGRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ2hpZGU6ICcsIGhpZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZGlzYWJsZTogJywgZGlzYWJsZSk7XHJcbiAgICAgIGlmIChoaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlSHRtbEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24oYWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnKSB7XHJcbiAgY29uc3Qgc2VsRGF0YSA9IGFjY2Vzc0NvbnRyb2xDb25maWcucm91dGUuZGF0YTtcclxuICB0aGlzLmxvZ2luU3RhZmYgPSBzZWxEYXRhLmxvZ2luU3RhZmY7XHJcbiAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsRGF0YS5zZWxlY3RlZE9mZmVuZGVyO1xyXG4gIFxyXG4gIGxldCByb3V0ZVBhdGggPSAnJztcclxuICBpZiAoYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmwgJiYgYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgcm91dGVQYXRoID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmxbMF0hLnBhdGg7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IHBlcm1pc3Npb25zID0gdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zO1xyXG4gIGNvbnN0IHJlc291cmNlID0gcm91dGVQYXRoO1xyXG4gIGNvbnN0IHJvbGVJZCA9IGFjY2Vzc0NvbnRyb2xDb25maWcucm9sZUlkPy50b1VwcGVyQ2FzZSgpIHx8IG51bGw7XHJcbiAgY29uc3QgYWNjZXNzVHlwZSA9IGFjY2Vzc0NvbnRyb2xDb25maWcuYWNjZXNzVHlwZTtcclxuICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gdGhpcy5zZWxlY3RlZE9mZmVuZGVyPy5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkIHx8ICdOL0EnO1xyXG4gIFxyXG4gIC8vIEZpbmQgbWF0Y2hpbmcgcGVybWlzc2lvbnMgKHByaW9yaXRpemUgc3BlY2lmaWMgcm9sZSBvdmVyIGFnZ3JlZ2F0ZWQpXHJcbiAgY29uc3Qgc3BlY2lmaWNQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwID0+IFxyXG4gICAgcC5hcHBNb2R1bGVJZCA9PT0gYWNjZXNzQ29udHJvbENvbmZpZy5hcHBNb2R1bGVJZCAmJlxyXG4gICAgcC5yZXNvdXJjZS50cmltKCkgPT09IHJlc291cmNlICYmXHJcbiAgICBwLnJvbGVJZC50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gcm9sZUlkICYmXHJcbiAgICAocC5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID09PSAnTi9BJyB8fCBwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09IGFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQpXHJcbiAgKTtcclxuICBcclxuICBjb25zdCBhZ2dyZWdhdGVkUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocCA9PiBcclxuICAgIHAuYXBwTW9kdWxlSWQgPT09IGFjY2Vzc0NvbnRyb2xDb25maWcuYXBwTW9kdWxlSWQgJiZcclxuICAgIHAucmVzb3VyY2UudHJpbSgpID09PSByZXNvdXJjZSAmJlxyXG4gICAgcC5yb2xlSWQudHJpbSgpID09PSAnKicgJiZcclxuICAgIChwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09ICdOL0EnIHx8IHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZClcclxuICApO1xyXG4gIFxyXG4gIGNvbnN0IHBlcm1pc3Npb24gPSBzcGVjaWZpY1Blcm1pc3Npb24gfHwgYWdncmVnYXRlZFBlcm1pc3Npb247XHJcbiAgXHJcbiAgaWYgKCFwZXJtaXNzaW9uKSByZXR1cm4gZmFsc2U7XHJcbiAgXHJcbiAgY29uc3QgZmxhZ01hcCA9IHtcclxuICAgICdyZWFkJzogcGVybWlzc2lvbi5yZWFkRmxhZyxcclxuICAgICdjcmVhdGUnOiBwZXJtaXNzaW9uLmNyZWF0ZUZsYWcsXHJcbiAgICAndXBkYXRlJzogcGVybWlzc2lvbi51cGRhdGVGbGFnLFxyXG4gICAgJ2RlbGV0ZSc6IHBlcm1pc3Npb24uZGVsZXRlRmxhZyxcclxuICAgICdhc3NpZ24nOiBwZXJtaXNzaW9uLmFzc2lnbkZsYWcsXHJcbiAgICAnY2xvc2UnOiBwZXJtaXNzaW9uLmNsb3NlRmxhZyxcclxuICAgICdleHB1bmdlJzogcGVybWlzc2lvbi5leHB1bmdlRmxhZyxcclxuICAgICdyZW9wZW4nOiBwZXJtaXNzaW9uLnJlb3BlbkZsYWdcclxuICB9O1xyXG4gIFxyXG4gIHJldHVybiAhIWZsYWdNYXBbYWNjZXNzVHlwZV07XHJcbn1cclxuXHJcbiAgcHVibGljIGNhbkFwcEZlYXR1cmVBY3RpdmF0ZShcclxuICAgIGxvZ2luU3RhZmY6IExvZ2luU3RhZmYsXHJcbiAgICBmZWF0dXJlOiBzdHJpbmcsXHJcbiAgICBhcHBNb2R1bGVJZCA9IG51bGwsXHJcbiAgKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMuaXNBdXRoRW5hYmxlKGxvZ2luU3RhZmYucm9sZXMsIGFwcE1vZHVsZUlkKSkge1xyXG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FwcEZlYXR1cmVQZXJtaXNzaW9uKFxyXG4gICAgICBsb2dpblN0YWZmLnBlcm1pc3Npb25zLFxyXG4gICAgICBmZWF0dXJlLFxyXG4gICAgICBhcHBNb2R1bGVJZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgaXNBdXRoRW5hYmxlKHJvbGVzOiBSb2xlW10sIGFwcE1vZHVsZUlkOiBzdHJpbmcpIHtcclxuICAvLyAgIGlmIChyb2xlcyAmJiByb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgIHJldHVybiByb2xlcy5tYXAociA9PiByLnJvbGVJZCkuZmluZEluZGV4KHRoaXMuaXNFeHRlcm5hbFJvbGUpID4gLTEgfHwgYXBwTW9kdWxlSWQgPT09ICdSUic7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gZmFsc2U7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgaGFzSW50YWtlUm9sZShyb2xlczogUm9sZVtdKSB7XHJcbiAgICBpZiAocm9sZXMgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gcm9sZXMuZmluZEluZGV4KHRoaXMuaXNJbnRha2VSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBcHBGZWF0dXJlUGVybWlzc2lvbihcclxuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW10sXHJcbiAgICBmZWF0dXJlOiBzdHJpbmcsXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICkge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGFwcE1vZHVsZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKHApID0+IHAucmVzb3VyY2UgPT09IGZlYXR1cmUgJiYgcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgICApID4gLTFcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5maW5kSW5kZXgoKHApID0+IHAucmVzb3VyY2UgPT09IGZlYXR1cmUpID4gLTE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGVJZCkge1xyXG4gICAgc3dpdGNoIChyb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW50YWtlUm9sZShyb2xlOiBSb2xlKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGUucm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ09QQSc6XHJcbiAgICAgIGNhc2UgJ09QUyc6XHJcbiAgICAgIGNhc2UgJ1NPUFMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xyXG4gICAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICAgICdwb2ludGVyLWV2ZW50czogbm9uZTtjdXJzb3I6IG5vdC1hbGxvd2VkOycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnaGlkZGVuJyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogbm9uZTsnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhZmYodXNlck5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiB0aGlzLmZpbmRTdGFmZlF1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgd2hlcmU6IHtcclxuICAgICAgICAgICAgdXNlck5hbWU6IHVzZXJOYW1lLFxyXG4gICAgICAgICAgICBhY3RpdmVGbGFnOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIGdldFN0YWZmKCkgZnJvbSBzZXJ2aWNlICcsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmZpbmR2U3RhZmZzLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmZpbmR2U3RhZmZzLmRhdGFbMF07XHJcbiAgICAgICAgICAgIHRoaXMueGRtU2VydmljZS5zZXRMb2dpblN0YWZmKGRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yICcgKyBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHF1ZXJ5PFQ+KG9wdGlvbnM6IHtcclxuICAgIHF1ZXJ5OiBzdHJpbmc7XHJcbiAgICB2YXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIH0pOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8eyBkYXRhOiBUIH0+KFxyXG4gICAgICAgIHRoaXMuc21hcnREYXRhU2VydmljZVVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcclxuICAgICAgICAgIHZhcmlhYmxlczogb3B0aW9ucy52YXJpYWJsZXMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAnTm8tQXV0aCc6ICdUcnVlJyxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKG1hcCgoZCkgPT4gZC5kYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBmaW5kU3RhZmZRdWVyeSgpe1xyXG4gICAgcmV0dXJuIGBcclxuICAgICBxdWVyeSBmaW5kdlN0YWZmcygkaW5wdXQ6IHZTdGFmZk11bHRpSW5wdXQpIHtcclxuICAgICAgICBmaW5kdlN0YWZmcyhpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgICAgICB0b3RhbENvdW50XHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgICBkYXRhIHtcclxuICAgICAgICAgICAgc3RhZmZJZFxyXG4gICAgICAgICAgICB1c2VyTmFtZVxyXG4gICAgICAgICAgICBsYXN0TmFtZVxyXG4gICAgICAgICAgICBmaXJzdE5hbWVcclxuICAgICAgICAgICAgcGhvbmVcclxuICAgICAgICAgICAgZW1haWxcclxuICAgICAgICAgICAgcm9sZXMge1xyXG4gICAgICAgICAgICAgIHJvbGVJZFxyXG4gICAgICAgICAgICAgIHJvbGVcclxuICAgICAgICAgICAgICBvcmdhbml6YXRpb25JZFxyXG4gICAgICAgICAgICAgIG9yZ2FuaXphdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgICAgICAgICByb2xlSWRcclxuICAgICAgICAgICAgICBhcHBNb2R1bGVJZFxyXG4gICAgICAgICAgICAgIHJlc291cmNlXHJcbiAgICAgICAgICAgICAgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICAgIHJlYWRGbGFnXHJcbiAgICAgICAgICAgICAgY3JlYXRlRmxhZ1xyXG4gICAgICAgICAgICAgIHVwZGF0ZUZsYWdcclxuICAgICAgICAgICAgICBkZWxldGVGbGFnXHJcbiAgICAgICAgICAgICAgYXNzaWduRmxhZ1xyXG4gICAgICAgICAgICAgIHJlb3BlbkZsYWdcclxuICAgICAgICAgICAgICBjbG9zZUZsYWdcclxuICAgICAgICAgICAgICBleHB1bmdlRmxhZ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wdGlvbnMge1xyXG4gICAgICAgICAgICAgIG9mZmVuZGVyTGlzdE9wdGlvbklkXHJcbiAgICAgICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgICAgIHNlcnZpY2VBcGlGaWVsZE5hbWVcclxuICAgICAgICAgICAgICBzZWxlY3RlZEZsYWdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhZmZPZmZlbmRlclJlbGF0aW9uKFxyXG4gICAgc3RhZmZJZDogbnVtYmVyLFxyXG4gICAgb2ZmZW5kZXJJZDogbnVtYmVyLFxyXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucyhpbnB1dDoge3doZXJlOiB7c3RhZmZJZDogJHtzdGFmZklkfSwgb2ZmZW5kZXJJZDogJHtvZmZlbmRlcklkfX19KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhIHtcclxuICAgICAgICAgICAgICAgICAgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwgeyBxdWVyeTogcXVlcnlTdHJpbmcgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0U3RhZmZPZmZlbmRlclJlbGF0aW9uKCkgZnJvbSBzZXJ2aWNlICcsXHJcbiAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5kYXRhLmZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucy5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhLmZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucy5kYXRhWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aHJvd0Vycm9yKCdObyBhY2Nlc3MgcmlnaHQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvbGVQZXJtaXNzaW9ucyhcclxuICAgIGFwcE1vZHVsZUlkOiBzdHJpbmcsXHJcbiAgICByZXNvdXJjZTogc3RyaW5nLFxyXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBgXHJcbiAgICAgICAgICAgcXVlcnkgZmluZHZSb2xlUGVybWlzc2lvblBpdm90c3tcclxuICAgICAgICAgICAgZmluZHZSb2xlUGVybWlzc2lvblBpdm90cyhpbnB1dDoge3doZXJlOiB7YXBwTW9kdWxlSWQ6ICR7YXBwTW9kdWxlSWR9LCByZXNvdXJjZTogJHtyZXNvdXJjZX19fSl7XHJcbiAgICAgICAgICAgICAgdG90YWxDb3VudFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwgeyBxdWVyeTogcXVlcnlTdHJpbmcgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZmluZHZSb2xlUGVybWlzc2lvblBpdm90cygpIGZyb20gc2VydmljZSAnLFxyXG4gICAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXN1bHQuZGF0YS5maW5kdlJvbGVQZXJtaXNzaW9uUGl2b3RzLnRvdGFsQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhyb3dFcnJvcignTm8gYWNjZXNzIHJpZ2h0LicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -66,7 +66,7 @@ export class SmartNavbarComponent {
|
|
|
66
66
|
}
|
|
67
67
|
getAppModuleUrl(config) {
|
|
68
68
|
return (config.appModuleId === 'PPMASRVW') ? config.url
|
|
69
|
-
: config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')
|
|
69
|
+
: config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU')
|
|
70
70
|
? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
|
|
71
71
|
: this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
|
|
72
72
|
: config.url;
|
|
@@ -154,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
154
154
|
type: ViewChild,
|
|
155
155
|
args: ['tabs']
|
|
156
156
|
}] } });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBZ0IxRCxNQUFNLE9BQU8sb0JBQW9CO0lBVy9CLFlBQ1UsbUJBQXVDLEVBQ3ZDLFVBQXNCLEVBQ3RCLFlBQXlCO1FBRnpCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQVoxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQU81Qix5QkFBb0IsR0FBeUMsRUFBRSxDQUFDO0lBTTdELENBQUM7SUFHSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdC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QUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgSW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc21hcnQtbmF2YmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1uYXZiYXIuY29tcG9uZW50LmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBuYXZiYXJDb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xyXG4gIHNlbGVjdGVkTmF2YmFyQ29uZmlnOiBTbWFydE5hdmJhckNvbmZpZyA9IDxTbWFydE5hdmJhckNvbmZpZz57fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdmJhckNvbmZpZ1NlcnZpY2U6IFNtYXJ0TmF2YmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgeGRtU2VydmljZTogWGRtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aG5TZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICApIHt9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCkudGhlbigoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPVxyXG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXHJcbiAgICAgICAgICA/IHNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgICAgIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkudGhlbigobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRTdGFmZlVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMubmF2YmFyQ29uZmlnU2VydmljZVxyXG4gICAgICAuZ2V0TmF2YmFyQ29uZmlncyh0aGlzLnNlcnZpY2VBcGlVcmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZ3MpID0+IHtcclxuICAgICAgICB0aGlzLm5hdmJhckNvbmZpZ3MgPSBjb25maWdzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmIChhLmRpc3BsYXlPcmRlciA8IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaXNwbGF5T3JkZXIgPiBiLmRpc3BsYXlPcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5hdmJhckNvbmZpZyA9IHRoaXMubmF2YmFyQ29uZmlncy5maW5kKFxyXG4gICAgICAgICAgICAoY29uZmlnKSA9PiBjb25maWcuYXBwTW9kdWxlSWQgPT09IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5jbGVhckFsbCgpO1xyXG4gICAgdGhpcy5hdXRoblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcHBNb2R1bGVVcmwoY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykge1xyXG4gICAgcmV0dXJuIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BU1JWVycpID8gY29uZmlnLnVybCBcclxuICAgICAgOiBjb25maWcgJiYgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BUycgfHwgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnU1RBVElDOTknKVxyXG4gICAgICA/IGAke2NvbmZpZy51cmx9Jk9mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXHJcbiAgICAgIDogdGhpcy5zZWxlY3RlZE9mZmVuZGVyID8gYCR7Y29uZmlnLnVybH0vP29mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXHJcbiAgICAgIDogY29uZmlnLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNBcHBNb2R1bGVQZXJtaXNzaW9uKGFwcE1vZHVsZUlkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAocCkgPT4gcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgKSA+IC0xXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93VGFiKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5oYXNFeHRlcm5hbFVzZXJSb2xlICYmIHRoaXMuaGFzQXBwTW9kdWxlUGVybWlzc2lvbihjb25maWcuYXBwTW9kdWxlSWQpKSB8fFxyXG4gICAgICAoIXRoaXMuaGFzRXh0ZXJuYWxVc2VyUm9sZSAmJiAoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIpKVxyXG4gICAgKSAmJiB0aGlzLmNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmIHRoaXMuaXNBdXRoZW50aWNhdGVkICYmICEhdGhpcy5sb2dpblN0YWZmXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRFZJUFJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ1ZJQ1RJTScpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiVklDVElNXCIgJiYgdGhpcy5oYXNWaWN0aW1Sb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1ZpY3RpbVJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzVmljdGltUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ0JDJyB8fCByb2xlLnJvbGVJZCA9PSAnVlNQJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIiwiXHJcbjxuYXYgbWF0LXRhYi1uYXYtYmFyIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxyXG4gIEBmb3IgKGNvbmZpZyBvZiBuYXZiYXJDb25maWdzOyB0cmFjayBjb25maWc7IGxldCBpbmRleCA9ICRpbmRleCl7XHJcbiAgICBAaWYgKHNob3dUYWIoY29uZmlnKSkge1xyXG4gICAgICA8YVxyXG4gICAgICAgIG1hdC10YWItbGlua1xyXG4gICAgICAgIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RlZE5hdmJhckNvbmZpZyA9IGNvbmZpZ1wiXHJcbiAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZE5hdmJhckNvbmZpZyAhPT0gbnVsbCAmJiBzZWxlY3RlZE5hdmJhckNvbmZpZz8uYXBwTW9kdWxlSWQgPT09IGNvbmZpZz8uYXBwTW9kdWxlSWRcIlxyXG4gICAgICAgIFtocmVmXT1cImdldEFwcE1vZHVsZVVybChjb25maWcpXCI+e3sgY29uZmlnLm5hbWUgfX08L2E+XHJcbiAgICB9XHJcbiAgfVxyXG48L25hdj5cclxuPG1hdC10YWItbmF2LXBhbmVsICN0YWJQYW5lbD48L21hdC10YWItbmF2LXBhbmVsPlxyXG5cclxuIl19
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBZ0IxRCxNQUFNLE9BQU8sb0JBQW9CO0lBVy9CLFlBQ1UsbUJBQXVDLEVBQ3ZDLFVBQXNCLEVBQ3RCLFlBQXlCO1FBRnpCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQVoxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQU81Qix5QkFBb0IsR0FBeUMsRUFBRSxDQUFDO0lBTTdELENBQUM7SUFHSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdC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Z0JBQ2EsUUFBUTtzQkFBMUIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgSW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc21hcnQtbmF2YmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1uYXZiYXIuY29tcG9uZW50LmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBuYXZiYXJDb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xyXG4gIHNlbGVjdGVkTmF2YmFyQ29uZmlnOiBTbWFydE5hdmJhckNvbmZpZyA9IDxTbWFydE5hdmJhckNvbmZpZz57fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdmJhckNvbmZpZ1NlcnZpY2U6IFNtYXJ0TmF2YmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgeGRtU2VydmljZTogWGRtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aG5TZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICApIHt9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCkudGhlbigoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPVxyXG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXHJcbiAgICAgICAgICA/IHNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgICAgIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkudGhlbigobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRTdGFmZlVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMubmF2YmFyQ29uZmlnU2VydmljZVxyXG4gICAgICAuZ2V0TmF2YmFyQ29uZmlncyh0aGlzLnNlcnZpY2VBcGlVcmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZ3MpID0+IHtcclxuICAgICAgICB0aGlzLm5hdmJhckNvbmZpZ3MgPSBjb25maWdzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmIChhLmRpc3BsYXlPcmRlciA8IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaXNwbGF5T3JkZXIgPiBiLmRpc3BsYXlPcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5hdmJhckNvbmZpZyA9IHRoaXMubmF2YmFyQ29uZmlncy5maW5kKFxyXG4gICAgICAgICAgICAoY29uZmlnKSA9PiBjb25maWcuYXBwTW9kdWxlSWQgPT09IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5jbGVhckFsbCgpO1xyXG4gICAgdGhpcy5hdXRoblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcHBNb2R1bGVVcmwoY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykge1xyXG4gICAgcmV0dXJuIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BU1JWVycpID8gY29uZmlnLnVybCBcclxuICAgICAgOiBjb25maWcgJiYgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BUycgfHwgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnU1RBVElDOTknIHx8IGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1RDVScpXHJcbiAgICAgID8gYCR7Y29uZmlnLnVybH0mT2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPyBgJHtjb25maWcudXJsfS8/b2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiBjb25maWcudXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oYXBwTW9kdWxlSWQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgIChwKSA9PiBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCxcclxuICAgICAgICApID4gLTFcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3dUYWIoY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLmhhc0V4dGVybmFsVXNlclJvbGUgJiYgdGhpcy5oYXNBcHBNb2R1bGVQZXJtaXNzaW9uKGNvbmZpZy5hcHBNb2R1bGVJZCkpIHx8XHJcbiAgICAgICghdGhpcy5oYXNFeHRlcm5hbFVzZXJSb2xlICYmIChjb25maWcub2ZmZW5kZXJTcGVjaWZpY0ZsYWcgPT09IGZhbHNlIHx8IHRoaXMuc2VsZWN0ZWRPZmZlbmRlcikpXHJcbiAgICApICYmIHRoaXMuY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZykgJiYgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgJiYgISF0aGlzLmxvZ2luU3RhZmZcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRXh0ZXJuYWxVc2VyUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNFeHRlcm5hbFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tEVklQUGVybWlzc2lvbihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKChjb25maWcuYXBwTW9kdWxlSWQgIT09ICdEVklQJykgfHwgKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gXCJEVklQXCIgJiYgdGhpcy5oYXNEVklQUm9sZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNEVklQUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNEVklQUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNEVklQUm9sZShyb2xlOiBSb2xlKXtcclxuICAgIGlmKHJvbGUucm9sZUlkID09ICdUU0QnIHx8IHJvbGUucm9sZUlkID09ICdUQUQnIHx8IHJvbGUucm9sZUlkID09ICdTVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnQkMnKXtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1ZpY3RpbVBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnVklDVElNJykgfHwgKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gXCJWSUNUSU1cIiAmJiB0aGlzLmhhc1ZpY3RpbVJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzVmljdGltUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNWaWN0aW1Sb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZpY3RpbVJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnQkMnIHx8IHJvbGUucm9sZUlkID09ICdWU1AnKXtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFeHRlcm5hbFJvbGUocm9sZTogUm9sZSkge1xyXG4gICAgc3dpdGNoIChyb2xlLnJvbGVJZCkge1xyXG4gICAgICBjYXNlICdFVURUTCc6XHJcbiAgICAgIGNhc2UgJ0VVRFVTTSc6XHJcbiAgICAgIGNhc2UgJ0VVSkRHJzpcclxuICAgICAgY2FzZSAnRVVNUEQnOlxyXG4gICAgICBjYXNlICdFVVNPVFYnOlxyXG4gICAgICBjYXNlICdFVVVTQTInOlxyXG4gICAgICBjYXNlICdFVVVTQU8nOlxyXG4gICAgICBjYXNlICdFVVVTUEMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4iLCJcclxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT1cInRhYlBhbmVsXCI+XHJcbiAgQGZvciAoY29uZmlnIG9mIG5hdmJhckNvbmZpZ3M7IHRyYWNrIGNvbmZpZzsgbGV0IGluZGV4ID0gJGluZGV4KXtcclxuICAgIEBpZiAoc2hvd1RhYihjb25maWcpKSB7XHJcbiAgICAgIDxhXHJcbiAgICAgICAgbWF0LXRhYi1saW5rXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkTmF2YmFyQ29uZmlnID0gY29uZmlnXCJcclxuICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkTmF2YmFyQ29uZmlnICE9PSBudWxsICYmIHNlbGVjdGVkTmF2YmFyQ29uZmlnPy5hcHBNb2R1bGVJZCA9PT0gY29uZmlnPy5hcHBNb2R1bGVJZFwiXHJcbiAgICAgICAgW2hyZWZdPVwiZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZylcIj57eyBjb25maWcubmFtZSB9fTwvYT5cclxuICAgIH1cclxuICB9XHJcbjwvbmF2PlxyXG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XHJcblxyXG4iXX0=
|
|
@@ -534,7 +534,7 @@ class SmartNavbarComponent {
|
|
|
534
534
|
}
|
|
535
535
|
getAppModuleUrl(config) {
|
|
536
536
|
return (config.appModuleId === 'PPMASRVW') ? config.url
|
|
537
|
-
: config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')
|
|
537
|
+
: config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU')
|
|
538
538
|
? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
|
|
539
539
|
: this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
|
|
540
540
|
: config.url;
|
|
@@ -1063,55 +1063,37 @@ class SmartAuthService {
|
|
|
1063
1063
|
this.loginStaff = selData.loginStaff;
|
|
1064
1064
|
this.selectedOffender = selData.selectedOffender;
|
|
1065
1065
|
let routePath = '';
|
|
1066
|
-
if (accessControlConfig.route.url &&
|
|
1067
|
-
accessControlConfig.route.url.length > 0) {
|
|
1066
|
+
if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {
|
|
1068
1067
|
routePath = accessControlConfig.route.url[0].path;
|
|
1069
1068
|
}
|
|
1070
1069
|
const permissions = this.loginStaff.permissions;
|
|
1071
1070
|
const resource = routePath;
|
|
1072
|
-
const roleId = accessControlConfig.roleId
|
|
1073
|
-
? accessControlConfig.roleId.toUpperCase()
|
|
1074
|
-
: null;
|
|
1071
|
+
const roleId = accessControlConfig.roleId?.toUpperCase() || null;
|
|
1075
1072
|
const accessType = accessControlConfig.accessType;
|
|
1076
|
-
const assignmentStaffRelationId =
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
if (permission)
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
(accessType === 'close' && !permission.closeFlag) ||
|
|
1101
|
-
(accessType === 'expunge' && !permission.expungeFlag) ||
|
|
1102
|
-
(accessType === 'reopen' && !permission.reopenFlag)) {
|
|
1103
|
-
return false;
|
|
1104
|
-
}
|
|
1105
|
-
else {
|
|
1106
|
-
return true;
|
|
1107
|
-
}
|
|
1108
|
-
}
|
|
1109
|
-
else {
|
|
1110
|
-
if (accessType === 'read') {
|
|
1111
|
-
return false;
|
|
1112
|
-
}
|
|
1113
|
-
}
|
|
1114
|
-
return false;
|
|
1073
|
+
const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';
|
|
1074
|
+
// Find matching permissions (prioritize specific role over aggregated)
|
|
1075
|
+
const specificPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
|
|
1076
|
+
p.resource.trim() === resource &&
|
|
1077
|
+
p.roleId.trim().toUpperCase() === roleId &&
|
|
1078
|
+
(p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
|
|
1079
|
+
const aggregatedPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
|
|
1080
|
+
p.resource.trim() === resource &&
|
|
1081
|
+
p.roleId.trim() === '*' &&
|
|
1082
|
+
(p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
|
|
1083
|
+
const permission = specificPermission || aggregatedPermission;
|
|
1084
|
+
if (!permission)
|
|
1085
|
+
return false;
|
|
1086
|
+
const flagMap = {
|
|
1087
|
+
'read': permission.readFlag,
|
|
1088
|
+
'create': permission.createFlag,
|
|
1089
|
+
'update': permission.updateFlag,
|
|
1090
|
+
'delete': permission.deleteFlag,
|
|
1091
|
+
'assign': permission.assignFlag,
|
|
1092
|
+
'close': permission.closeFlag,
|
|
1093
|
+
'expunge': permission.expungeFlag,
|
|
1094
|
+
'reopen': permission.reopenFlag
|
|
1095
|
+
};
|
|
1096
|
+
return !!flagMap[accessType];
|
|
1115
1097
|
}
|
|
1116
1098
|
canAppFeatureActivate(loginStaff, feature, appModuleId = null) {
|
|
1117
1099
|
// if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csmart-ngc-smart-core.mjs","sources":["../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/smart-storage-model.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/xdm.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-auth.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control.directive.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-authorization-guard.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-redirect.guard.ts","../../../../projects/csmart/ngc-smart-core/src/lib/ngc-smart-core.module.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-login-staff-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-selected-offender-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control-config.ts","../../../../projects/csmart/ngc-smart-core/src/lib/user-settings/user-settings.service.ts","../../../../projects/csmart/ngc-smart-core/src/public-api.ts","../../../../projects/csmart/ngc-smart-core/src/csmart-ngc-smart-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport class Permission {\r\n roleId: string;\r\n appModuleId: string;\r\n resource: string;\r\n assignmentStaffRelationId: string;\r\n readFlag: boolean;\r\n createFlag: boolean;\r\n updateFlag: boolean;\r\n deleteFlag: boolean;\r\n assignFlag: boolean;\r\n reopenFlag: boolean;\r\n closeFlag: boolean;\r\n expungeFlag: boolean;\r\n}\r\n\r\nexport class Role {\r\n roleId: string;\r\n role: string;\r\n organizationId: string;\r\n organization: string;\r\n}\r\n\r\nexport class Option {\r\n offenderOptionListId: string;\r\n name: string;\r\n serviceApiFieldName: string;\r\n selectedFlag: boolean;\r\n}\r\n\r\nexport class LoginStaff {\r\n staffId: number;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n phone: string;\r\n email: string;\r\n selectedRole: string = '*';\r\n roles?: Role[];\r\n permissions?: Permission[];\r\n options?: Option[];\r\n}\r\n\r\nexport class SelectedOffender {\r\n offenderId: number;\r\n name: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n assignmentStaffRelationId?: string;\r\n intakeFlag?: boolean = false;\r\n}\r\n\r\nexport class OffenderQuery {\r\n offenders: SelectedOffender[];\r\n}\r\n\r\nexport class StorageKey {\r\n static selectedOffender = 'smart-selected-offender';\r\n static loginStaff = 'smart-login-staff';\r\n static offenderQuery = 'smart-offender-query';\r\n}\r\n\r\nexport const SMART_WEB_STORAGE_LISTENER_URL = new InjectionToken<string>(\r\n 'SMART Web Storage Listener URL',\r\n);\r\nexport const SMART_WEB_PORTAL_URL = new InjectionToken<string>(\r\n 'SMART Web Portal URL',\r\n);\r\nexport const SMART_DATA_SERVICE_URL = new InjectionToken<string>(\r\n 'SMART Data Service URL',\r\n);\r\n\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable, of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n OffenderQuery,\r\n StorageKey,\r\n SMART_WEB_STORAGE_LISTENER_URL,\r\n SMART_DATA_SERVICE_URL,\r\n Option,\r\n} from './smart-storage-model';\r\n\r\n// import connectToChild from \"penpal/lib/connectToChild\";\r\nimport { connectToChild } from 'penpal';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class XdmService {\r\n private offenderSubject = new Subject<SelectedOffender | void>();\r\n private staffSubject = new Subject<LoginStaff | void>();\r\n private offenderQuerySubject = new Subject<OffenderQuery | void>();\r\n private connection: any;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: any,\r\n @Inject(SMART_WEB_STORAGE_LISTENER_URL)\r\n private smartStorageListenerUrl: string,\r\n private httpClient: HttpClient,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n ) {\r\n if (isDevMode) {\r\n console.log('SmartStorage XdmService (Client) - constructor()');\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n const frame = this.document.createElement('iframe');\r\n frame.src = this.smartStorageListenerUrl;\r\n frame.id = 'childframe';\r\n frame.name = Math.random().toString();\r\n frame.onload = null;\r\n //frame.style.visibility = 'hidden';\r\n frame.style.display = 'none';\r\n this.document.body.appendChild(frame);\r\n\r\n this.connection = connectToChild({\r\n iframe: frame,\r\n debug: false,\r\n });\r\n }\r\n\r\n private getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<Option>> {\r\n const queryString = `{findvStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n } }`;\r\n return this.httpClient\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n data.findvStaffOffenderListOptions.data['offenderOptionListId'] =\r\n data.findvStaffOffenderListOptions.data['offenderListOptionId'];\r\n return data.findvStaffOffenderListOptions.data;\r\n }),\r\n );\r\n /*return of([\r\n { offenderListOptionId: 'genderCode', name: '', selectedFlag: true }]);*/\r\n }\r\n\r\n public clearAll(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearAll();\r\n this.offenderSubject.next();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n /*************************************\r\n * Offender\r\n **************************************/\r\n public setSelectedOffender(selectedOffender: SelectedOffender): void {\r\n this.connection.promise.then((child) => {\r\n child.setSelectedOffender(selectedOffender);\r\n this.offenderSubject.next(selectedOffender);\r\n });\r\n\r\n this.getLoginStaff().then((loginStaff) => {\r\n let now = (new Date()).toISOString();\r\n const queryString = `mutation { createStaffOffenderAccess(input: {\r\n staffId: ${loginStaff.staffId},\r\n offenderId: ${selectedOffender.offenderId},\r\n accessDate: \"${now}\"\r\n }) {\r\n data {\r\n staffOffenderAccessId\r\n }\r\n }}`;\r\n this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).subscribe();\r\n });\r\n }\r\n\r\n public getSelectedOffender(): Promise<SelectedOffender> {\r\n return this.connection.promise.then((child) =>\r\n child.getSelectedOffender(StorageKey.selectedOffender),\r\n );\r\n }\r\n\r\n public clearSelectedOffender(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearSelectedOffender();\r\n this.offenderSubject.next();\r\n });\r\n }\r\n\r\n public getOffenderUpdate(): Observable<SelectedOffender> {\r\n return this.offenderSubject.asObservable() as Observable<SelectedOffender>;\r\n }\r\n\r\n /************************************************************************\r\n * Staff\r\n ************************************************************************/\r\n public setLoginStaff(loginStaff: LoginStaff) {\r\n this.connection.promise.then((child) => {\r\n child.setLoginStaff(loginStaff);\r\n this.staffSubject.next(loginStaff);\r\n });\r\n }\r\n\r\n public getLoginStaff(): Promise<LoginStaff> {\r\n return this.connection.promise.then((child) =>\r\n child.getLoginStaff(StorageKey.loginStaff),\r\n );\r\n }\r\n\r\n public clearLoginStaff(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearLoginStaff();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n public getStaffUpdate(): Observable<LoginStaff> {\r\n return this.staffSubject.asObservable() as Observable<LoginStaff>;\r\n }\r\n\r\n public refreshLoginStaffOptions() {\r\n this.getLoginStaff().then((oldLoginStaff) => {\r\n this.getStaffOffenderListOptions(oldLoginStaff.staffId).subscribe(\r\n (optionData) => {\r\n console.log(optionData);\r\n oldLoginStaff.options = optionData;\r\n this.setLoginStaff(oldLoginStaff);\r\n },\r\n );\r\n });\r\n }\r\n\r\n /************************************************************************\r\n * Offender Query\r\n ************************************************************************/\r\n public setOffenderQuery(offenderQuery: OffenderQuery) {\r\n this.connection.promise.then((child) => {\r\n child.setOffenderQuery(offenderQuery);\r\n this.offenderQuerySubject.next(offenderQuery);\r\n });\r\n }\r\n\r\n public getOffenderQuery(): Promise<OffenderQuery> {\r\n return this.connection.promise.then((child) =>\r\n child.getOffenderQuery(StorageKey.offenderQuery),\r\n );\r\n }\r\n\r\n public clearOffenderQuery(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearOffenderQuery();\r\n this.offenderQuerySubject.next();\r\n });\r\n }\r\n\r\n public getOffenderQueryUpdate(): Observable<OffenderQuery> {\r\n return this.offenderQuerySubject.asObservable() as Observable<OffenderQuery>;\r\n }\r\n\r\n public setSelectedOffenderFromRoute(offenderId: number, intakeFlag: boolean): Observable<SelectedOffender> {\r\n return from(this.getLoginStaff()).pipe(\r\n switchMap(loginStaff => {\r\n const queryString = `{\r\n getSelectedOffender(input: { \r\n offenderId: ${offenderId},\r\n staffId: ${loginStaff.staffId}\r\n }){\r\n data{\r\n offenderId\r\n name: offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }`;\r\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).pipe(\r\n map(({ data }) => data.getSelectedOffender.data),\r\n catchError(error => {\r\n console.error('HTTP request error:', error);\r\n return of(null); \r\n })\r\n );\r\n }),\r\n map(selectedOffender => {\r\n selectedOffender.intakeFlag = intakeFlag;\r\n this.setSelectedOffender(selectedOffender);\r\n this.setOffenderQuery({offenders: [selectedOffender]});\r\n return selectedOffender;\r\n }),\r\n catchError(error => {\r\n console.error('Error in processing offender data:', error);\r\n throw error; \r\n })\r\n );\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n\r\n@Injectable()\r\nexport class SmartOffenderHeaderService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n private http: HttpClient,\r\n ) {}\r\n\r\n getStaffOffenders(staffId: number): Observable<AssignedOffender[]> {\r\n const queryString = `\r\n query getStaffOffenderList{\r\n filterOffenderList(input: {staffId: ${staffId}}) {\r\n data {\r\n offenderId\r\n offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }\r\n `;\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.filterOffenderList.data;\r\n }),\r\n );\r\n }\r\n}\r\n\r\nexport interface AssignedOffender {\r\n offenderId: number;\r\n offenderName: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n}\r\n","import { Component, OnInit, OnDestroy, NgZone, Output, EventEmitter } from '@angular/core';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SelectedOffender, LoginStaff, Role, OffenderQuery } from '../smart-storage/smart-storage-model';\r\nimport { Subscription, Observable, from, of } from 'rxjs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { SmartOffenderHeaderService, AssignedOffender } from './smart-offender-header.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-smart-offender-header',\r\n templateUrl: './smart-offender-header.component.html',\r\n styleUrls: ['./smart-offender-header.component.css'],\r\n})\r\nexport class SmartOffenderHeaderComponent implements OnInit, OnDestroy {\r\n public selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n subscription: Subscription;\r\n selectedOffenderControl$ = new UntypedFormControl();\r\n // assignedOffenders: AssignedOffender[];\r\n offenderQueryList: SelectedOffender[];\r\n offenderQuerySubscription: Subscription;\r\n // public isAuthenticated: boolean;\r\n\r\n constructor(\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n private smartOffenderHeaderService: SmartOffenderHeaderService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n // this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.subscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n this.setSelectedOffenderControl();\r\n });\r\n\r\n this.xdmService.getOffenderQuery().then((offenderQuery: OffenderQuery) => {\r\n if (offenderQuery) {\r\n this.offenderQueryList = offenderQuery.offenders;\r\n this.setSelectedOffenderControl();\r\n }\r\n });\r\n\r\n this.offenderQuerySubscription = this.xdmService\r\n .getOffenderQueryUpdate()\r\n .subscribe((offenderList) => {\r\n if (offenderList && offenderList.offenders) {\r\n this.offenderQueryList = [...offenderList.offenders];\r\n }\r\n });\r\n\r\n this.selectedOffenderControl$.valueChanges.subscribe((o) =>\r\n this.onOffenderSelected(o),\r\n );\r\n\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => {\r\n return false;\r\n };\r\n }\r\n\r\n get isAuthenticated() : boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private onOffenderSelected(offender): void {\r\n if (offender) {\r\n // const o = offender.offenderName.split(',');\r\n // if (o.length === 2) {\r\n // const offenderName = `${o[1]} ${o[0]}`;\r\n // this.selectedOffender = {\r\n // offenderId: offender.offenderId,\r\n // name: offenderName,\r\n // pdId: offender.pdId,\r\n // birthDate: offender.birthDate,\r\n // gender: offender.genderCode,\r\n // assignmentStaffRelationId: '',\r\n // intakeFlag: this.loginStaff\r\n // ? this.hasIntakeRole(this.loginStaff.roles)\r\n // : false,\r\n // } as SelectedOffender;\r\n this.selectedOffender = offender;\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n this.reloadCurrentRoute();\r\n }\r\n }\r\n\r\n private setSelectedOffenderControl() {\r\n if (\r\n this.selectedOffender &&\r\n this.offenderQueryList &&\r\n this.offenderQueryList.length > 0\r\n ) {\r\n const o = this.offenderQueryList.find(\r\n (x) => x.offenderId === this.selectedOffender.offenderId,\r\n );\r\n if (o) {\r\n this.selectedOffenderControl$.setValue(o, { emitEvent: false });\r\n }\r\n\r\n if (!o && this.offenderQueryList.length > 0) {\r\n this.selectedOffenderControl$.setValue(this.offenderQueryList[0], {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n private reloadCurrentRoute() {\r\n try {\r\n const urlTree = this.router.parseUrl(this.router.url);\r\n if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.segments &&\r\n urlTree.root.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.children &&\r\n urlTree.root.children.primary &&\r\n urlTree.root.children.primary.segments &&\r\n urlTree.root.children.primary.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.children.primary.segments[0].path]);\r\n } else {\r\n this.router.navigate([this.router.url]);\r\n }\r\n } catch {\r\n this.router.navigateByUrl('/');\r\n }\r\n }\r\n\r\n private hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\n\r\n@Injectable()\r\nexport class SmartNavbarService {\r\n configs: SmartNavbarConfig[];\r\n constructor(private http: HttpClient) {}\r\n\r\n /*\r\n public getNavbarConfigs(): SmartNavbarConfig[] {\r\n this.configs = [\r\n {appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },\r\n {appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },\r\n {appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },\r\n ];\r\n\r\n return this.configs;\r\n }\r\n */\r\n /*\r\n public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {\r\n return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');\r\n }\r\n */\r\n\r\n public getNavbarConfigs(\r\n serviceApiUrl: string,\r\n ): Observable<SmartNavbarConfig[]> {\r\n const queryString = `\r\n {\r\n findAppModules {\r\n data {\r\n appModuleId\r\n name\r\n url\r\n offenderSpecificFlag\r\n displayOrder\r\n }\r\n }\r\n }`;\r\n\r\n /*\r\n const httpHeaders = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Cache-Control': 'no-cache'\r\n });\r\n const options = {\r\n headers: httpHeaders\r\n };\r\n */\r\n\r\n return this.http\r\n .post<any>(serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n if (isDevMode()) {\r\n console.log(data);\r\n }\r\n return data.findAppModules.data;\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewEncapsulation,\r\n Inject,\r\n} from '@angular/core';\r\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\nimport { SmartNavbarService } from './smart-navbar.service';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n Role,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-smart-navbar',\r\n templateUrl: './smart-navbar.component.html',\r\n styleUrls: ['./smart-navbar.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SmartNavbarComponent implements OnInit, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = null;\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n navbarConfigs: SmartNavbarConfig[];\r\n selectedNavbarConfig: SmartNavbarConfig = <SmartNavbarConfig>{};\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n\r\n ngOnInit() {\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n this.loginStaff = loginStaff;\r\n });\r\n this.navbarConfigService\r\n .getNavbarConfigs(this.serviceApiUrl)\r\n .subscribe((configs) => {\r\n this.navbarConfigs = configs.sort((a, b) => {\r\n if (a.displayOrder < b.displayOrder) {\r\n return -1;\r\n } else if (a.displayOrder > b.displayOrder) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n setTimeout(() => {\r\n this.selectedNavbarConfig = this.navbarConfigs.find(\r\n (config) => config.appModuleId === this.appModuleId,\r\n );\r\n }, 100);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\r\n }\r\n\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n public getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config.appModuleId === 'PPMASRVW') ? config.url \r\n : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')\r\n ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`\r\n : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`\r\n : config.url;\r\n }\r\n\r\n public hasAppModulePermission(appModuleId) {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.permissions &&\r\n this.loginStaff.permissions.length > 0\r\n ) {\r\n return (\r\n this.loginStaff.permissions.findIndex(\r\n (p) => p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n showTab(config: SmartNavbarConfig) : boolean {\r\n return (\r\n (this.hasExternalUserRole && this.hasAppModulePermission(config.appModuleId)) ||\r\n (!this.hasExternalUserRole && (config.offenderSpecificFlag === false || this.selectedOffender))\r\n ) && this.checkVictimPermission(config) && this.isAuthenticated && !!this.loginStaff\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n public checkDVIPPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'DVIP') || (config.appModuleId === \"DVIP\" && this.hasDVIPRole));\r\n }\r\n\r\n public get hasDVIPRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isDVIPRole(role: Role){\r\n if(role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n public checkVictimPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === \"VICTIM\" && this.hasVictimRole));\r\n }\r\n\r\n public get hasVictimRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isVictimRole(role: Role){\r\n if(role.roleId == 'BC' || role.roleId == 'VSP'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n private isExternalRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\n// import { SmartAuthService } from './smart-auth.service';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SMART_WEB_PORTAL_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Component({\r\n selector: 'app-smart-error',\r\n templateUrl: './smart-error.component.html',\r\n styleUrls: ['./smart-error.component.css'],\r\n})\r\nexport class SmartErrorComponent implements OnInit {\r\n type: string;\r\n message: string;\r\n\r\n constructor(\r\n private authnService: MsalService,\r\n private route: ActivatedRoute,\r\n @Inject(SMART_WEB_PORTAL_URL) private smartWebPortalUrl: string,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.type = this.route.snapshot.queryParamMap.get('type') || 'staff';\r\n this.message =\r\n this.route.snapshot.queryParamMap.get('message') || 'Error occured.';\r\n }\r\n\r\n logout() {\r\n this.authnService.logout();\r\n }\r\n\r\n portal() {\r\n window.location.href = this.smartWebPortalUrl;\r\n }\r\n}\r\n","<div>\r\n <h2>\r\n {{ message }}\r\n </h2>\r\n <p>\r\n Please contact help desk if needed.\r\n </p>\r\n <div>\r\n <button (click)=\"logout()\" *ngIf=\"type === 'staff'\">OK</button>\r\n <button (click)=\"portal()\" *ngIf=\"type === 'offender'\">OK</button>\r\n </div>\r\n</div>\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n private http: HttpClient,\r\n private matSnackBar: MatSnackBar,\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n ) {}\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach((obj) => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach((key) => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (\r\n typeof jsonObject[key] === 'string' &&\r\n jsonObject[key].trim() === ''\r\n ) {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(\r\n queryName: string,\r\n queryString: string,\r\n ): Observable<any> {\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }),\r\n );\r\n }\r\n\r\n getOffenderListOptions(): Observable<any> {\r\n const queryString = `{findOffenderListOptions(input:{\r\n where:{\r\n deactivatedDate: null\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n } }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data['findOffenderListOptions'];\r\n }),\r\n );\r\n }\r\n\r\n public getStaffOffenderListOptions(staffId: number): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) {\r\n //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(\r\n dataToSave,\r\n )}) {\r\n message\r\n }\r\n }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach((eObj) => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: UntypedFormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n // Sort by name property (case-insensitive)\r\n this.offenderListOptions.sort((a, b) => \r\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\r\n );\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new UntypedFormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new UntypedFormControl(false));\r\n });\r\n\r\n return new UntypedFormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n onClear(){\r\n this.frmGroup.reset();\r\n }\r\n\r\n\r\n\r\n}\r\n","<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n \r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of, from, throwError, lastValueFrom } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartAuthService {\r\n loginStaff: LoginStaff;\r\n selectedOffender: SelectedOffender;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private authnService: MsalService,\r\n private xdmService: XdmService,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.userName;\r\n const staffName = userName.substring(0, userName.indexOf('@'));\r\n if (isDevMode) {\r\n console.log(\r\n '##### loginLoginStaff(): get using login staff name ',\r\n staffName,\r\n );\r\n }\r\n return this.getStaff(staffName);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n get userName(): string {\r\n if (this.authnService.instance.getAllAccounts().length > 0) {\r\n const account = this.authnService.instance.getAllAccounts()[0];\r\n return account.username;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private getTeamUrl(app: string, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (!this.loginStaff) {\r\n return;\r\n }\r\n\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await lastValueFrom(\r\n this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ),\r\n );\r\n if (relation) {\r\n selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n // }\r\n }\r\n this.xdmService.setSelectedOffender(selectedOffender);\r\n this.selectedOffender = selectedOffender;\r\n }\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n public async setPermission(\r\n appModuleId: string,\r\n route: ActivatedRouteSnapshot,\r\n ) {\r\n if (!this.loginStaff) {\r\n this.loginStaff = await this.xdmService.getLoginStaff();\r\n }\r\n const permissions = this.loginStaff.permissions;\r\n const resource =\r\n route.url && route.url.length > 0 ? route.url[0]!.path : '';\r\n\r\n if (!this.selectedOffender) {\r\n this.selectedOffender = await this.xdmService.getSelectedOffender();\r\n }\r\n\r\n if (this.selectedOffender) {\r\n // if (!this.selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n this.selectedOffender.offenderId,\r\n ).toPromise();\r\n if (relation) {\r\n this.selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n this.selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n // }\r\n }\r\n\r\n const assignmentStaffRelationId =\r\n this.selectedOffender.assignmentStaffRelationId;\r\n\r\n const elements = document.querySelectorAll('[class^=\"sac-\"]');\r\n const pattern = /^sac-(\\S+)-(\\S+)$/i;\r\n\r\n Array.from(elements).forEach((element) => {\r\n let hide;\r\n let disable;\r\n element.classList.forEach((c) => {\r\n const results = c.match(pattern);\r\n // console.log(results);\r\n if (results && results.length > 2) {\r\n const roleId = results[1] ? results[1].toUpperCase() : null;\r\n const right = results[2];\r\n // console.log(results[0]);\r\n // console.log(results[1]);\r\n // console.log(results[2]);\r\n const permission = permissions.find(function (p) {\r\n return (\r\n p.appModuleId === appModuleId &&\r\n p.resource === resource &&\r\n p.roleId === roleId &&\r\n p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n /*\r\n console.log('##### setPermission() resource: ', resource);\r\n console.log('##### setPermission() appModuleId: ', appModuleId);\r\n console.log('##### setPermission() roleId: ', roleId);\r\n console.log(\r\n '##### setPermission() assignment relation: ',\r\n assignmentStaffRelationId,\r\n );\r\n */\r\n console.log('##### Matched permission: ', permission);\r\n\r\n if (permission) {\r\n if (right === 'read') {\r\n if (!permission.readFlag) {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n hide = false;\r\n }\r\n } else if (\r\n (right === 'create' && !permission.createFlag) ||\r\n (right === 'update' && !permission.updateFlag) ||\r\n (right === 'delete' && !permission.deleteFlag) ||\r\n (right === 'assign' && !permission.assignFlag) ||\r\n (right === 'close' && !permission.closeFlag) ||\r\n (right === 'expunge' && !permission.expungeFlag) ||\r\n (right === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n } else {\r\n if (element.nodeName === 'BUTTON') {\r\n hide = false;\r\n } else {\r\n disable = false;\r\n }\r\n }\r\n } else {\r\n if (right === 'read') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n }\r\n });\r\n console.log('hide: ', hide);\r\n console.log('disable: ', disable);\r\n if (hide === true) {\r\n this.hideHtmlElement(element);\r\n } else if (disable === true) {\r\n this.disableHtmlElement(element);\r\n }\r\n });\r\n }\r\n\r\n public checkPermission(accessControlConfig: SmartAccessControlConfig) {\r\n const selData = accessControlConfig.route.data;\r\n this.loginStaff = selData.loginStaff;\r\n this.selectedOffender = selData.selectedOffender;\r\n let routePath = '';\r\n if (\r\n accessControlConfig.route.url &&\r\n accessControlConfig.route.url.length > 0\r\n ) {\r\n routePath = accessControlConfig.route.url[0]!.path;\r\n }\r\n const permissions = this.loginStaff.permissions;\r\n const resource = routePath;\r\n const roleId = accessControlConfig.roleId\r\n ? accessControlConfig.roleId.toUpperCase()\r\n : null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = (!this.selectedOffender || !this.selectedOffender\r\n .assignmentStaffRelationId)\r\n ? 'N/A'\r\n : this.selectedOffender.assignmentStaffRelationId;\r\n\r\n const permission = permissions.find((p) => {\r\n return (\r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n (!roleId || p.roleId.trim() === '*' || p.roleId.trim() === roleId) &&\r\n (p.assignmentStaffRelationId === 'N/A' ||\r\n p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n });\r\n\r\n if (permission) {\r\n if (accessType === 'read') {\r\n if (!permission.readFlag) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else if (\r\n (accessType === 'create' && !permission.createFlag) ||\r\n (accessType === 'update' && !permission.updateFlag) ||\r\n (accessType === 'delete' && !permission.deleteFlag) ||\r\n (accessType === 'assign' && !permission.assignFlag) ||\r\n (accessType === 'close' && !permission.closeFlag) ||\r\n (accessType === 'expunge' && !permission.expungeFlag) ||\r\n (accessType === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (accessType === 'read') {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public canAppFeatureActivate(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n return this.query<any>({\r\n query: this.findStaffQuery,\r\n variables: {\r\n input: {\r\n where: {\r\n userName: userName,\r\n activeFlag: true,\r\n },\r\n }\r\n },\r\n }).pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log('##### getStaff() from service ', result);\r\n }\r\n if (result.findvStaffs.data.length > 0) {\r\n const data = result.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private query<T>(options: {\r\n query: string;\r\n variables?: { [key: string]: any };\r\n }): Observable<T> {\r\n return this.http\r\n .post<{ data: T }>(\r\n this.smartDataServiceUrl,\r\n {\r\n query: options.query,\r\n variables: options.variables,\r\n },\r\n {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'No-Auth': 'True',\r\n }),\r\n }\r\n )\r\n .pipe(map((d) => d.data));\r\n }\r\n\r\n private get findStaffQuery(){\r\n return `\r\n query findvStaffs($input: vStaffMultiInput) {\r\n findvStaffs(input: $input) {\r\n totalCount\r\n message\r\n data {\r\n staffId\r\n userName\r\n lastName\r\n firstName\r\n phone\r\n email\r\n roles {\r\n roleId\r\n role\r\n organizationId\r\n organization\r\n }\r\n permissions {\r\n roleId\r\n appModuleId\r\n resource\r\n assignmentStaffRelationId\r\n readFlag\r\n createFlag\r\n updateFlag\r\n deleteFlag\r\n assignFlag\r\n reopenFlag\r\n closeFlag\r\n expungeFlag\r\n }\r\n options {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n }\r\n }\r\n }\r\n `;\r\n }\r\n\r\n private getStaffOffenderRelation(\r\n staffId: number,\r\n offenderId: number,\r\n ): Observable<string> {\r\n const queryString = `\r\n {\r\n findvStaffOffenderRelations(input: {where: {staffId: ${staffId}, offenderId: ${offenderId}}}) {\r\n data {\r\n assignmentStaffRelationId\r\n }\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getStaffOffenderRelation() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvStaffOffenderRelations.data.length > 0) {\r\n const data = result.data.findvStaffOffenderRelations.data[0];\r\n return data.assignmentStaffRelationId;\r\n } else {\r\n return null;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return null;\r\n }),\r\n );\r\n }\r\n\r\n private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff\r\n ) {\r\n return;\r\n }\r\n\r\n // const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n // if (!this.auth.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Router } from '@angular/router';\r\nimport { take, mergeMap, catchError } from 'rxjs/operators';\r\nimport { of, Observable } from 'rxjs';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { SmartAuthService } from './smart-auth.service';\r\n\r\n@Injectable()\r\nexport class SmartAuthorizationGuard {\r\n loginStaff: LoginStaff;\r\n\r\n constructor(public authnService: SmartAuthService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot) {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (!loginStaff || !route || !route.routeConfig) {\r\n return of(false);\r\n }\r\n // if (!this.authnService.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SmartOffenderRedirectGuard {\r\n constructor(private router: Router) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n const targetRoute = route.data['routeTo'];\r\n const queryParams = route.parent?.queryParams;\r\n if (targetRoute) {\r\n this.router.navigate([targetRoute], { queryParams: queryParams });\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { SmartOffenderHeaderComponent } from './smart-offender-header/smart-offender-header.component';\r\nimport { SmartNavbarComponent } from './smart-navbar/smart-navbar.component';\r\nimport { SmartNavbarService } from './smart-navbar/smart-navbar.service';\r\nimport { SmartErrorComponent } from './smart-auth/smart-error.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { SmartOffenderHeaderService } from './smart-offender-header/smart-offender-header.service';\r\nimport { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\n// import { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\nimport { SmartStaffOffenderOptionsService } from './smart-staff-offender-options/smart-staff-offender-options.service';\r\nimport { SmartAccessControlDirective } from './smart-auth/smart-access-control.directive';\r\nimport { SmartAuthorizationGuard } from './smart-auth/smart-authorization-guard.service';\r\nimport { SmartOffenderRedirectGuard } from './smart-offender-header/smart-offender-redirect.guard';\r\n\r\n@NgModule({\r\n declarations: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n ReactiveFormsModule,\r\n ],\r\n exports: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n providers: [\r\n SmartNavbarService,\r\n SmartOffenderHeaderService,\r\n SmartStaffOffenderOptionsService,\r\n SmartAuthorizationGuard,\r\n MatSnackBar,\r\n SmartOffenderRedirectGuard\r\n ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, EMPTY, of, throwError } from 'rxjs';\r\nimport { mergeMap, catchError, take } from 'rxjs/operators';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginStaffResolverService {\r\n constructor(\r\n private authnService: SmartAuthService,\r\n // private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<LoginStaff> | Observable<never> {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (isDevMode) {\r\n console.log('LoginStaffResolverService: ', loginStaff);\r\n }\r\n if (loginStaff) {\r\n return of(loginStaff);\r\n } else {\r\n return throwError('Not authorized to access SMART.');\r\n // return EMPTY;\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'Not authorized to access SMART.'\r\n }\r\n });\r\n });\r\n return EMPTY;\r\n */\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('LoginStaffResolverService: ' + error);\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'SMART Authentication: ' + error,\r\n },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n take,\r\n retryWhen,\r\n delay,\r\n} from 'rxjs/operators';\r\nimport { SelectedOffender } from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SelectedOffenderResolverService\r\n {\r\n constructor(\r\n private service: XdmService,\r\n private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<SelectedOffender> | Observable<never> {\r\n let offenderId: number | null = null;\r\n let intakeFlag: boolean = false;\r\n if(route) {\r\n if(route.queryParams[\"offenderId\"])\r\n offenderId = parseInt(route.queryParams[\"offenderId\"]);\r\n if(route.queryParams[\"intakeFlag\"])\r\n intakeFlag = route.queryParams[\"intakeFlag\"] == \"true\";\r\n }\r\n return from(this.service.getSelectedOffender()).pipe(\r\n mergeMap((selectedOffender) => {\r\n if (isDevMode) {\r\n console.log(selectedOffender);\r\n }\r\n if(offenderId && offenderId > 0 && (!selectedOffender || (selectedOffender && selectedOffender.offenderId !== offenderId))) {\r\n return this.service.setSelectedOffenderFromRoute(offenderId, intakeFlag);\r\n }\r\n if(selectedOffender) {\r\n return of(selectedOffender);\r\n }\r\n return throwError(() => new Error('No offender selected.'));\r\n }),\r\n retryWhen((errors) =>\r\n errors.pipe(\r\n // tap(() => console.log('Retry getting selected offender.')),\r\n delay(1000),\r\n take(5),\r\n (o) =>\r\n concat(\r\n o,\r\n throwError(() => new Error('No offender selected (failed after retries).')),\r\n ),\r\n ),\r\n ),\r\n catchError((error) => {\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error }\r\n });\r\n });\r\n */\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\n\nexport interface StaffSetting {\n staffSettingId: string;\n settingKey: string;\n settingValue: string;\n modifiedBy: string;\n}\n\nexport interface DefaultSetting {\n defaultSettingId: string;\n settingValue: string;\n}\n\nexport interface CreateStaffSettingInput {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n}\n\nexport interface UpdateStaffSettingInput {\n where: {\n staffSettingId: number;\n };\n data: {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n };\n}\n\nexport interface StaffSettingResponse {\n data: {\n staffSettingId: number;\n staffId?: number;\n settingKey: string;\n settingValue: string;\n };\n message: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n constructor(\n private httpClient: HttpClient,\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl: string\n ) {}\n\n /**\n * Fetches staff settings for a given staff ID\n * @param staffId The ID of the staff member\n * @returns Observable of staff settings array\n */\n findStaffSettings(staffId: string): Observable<StaffSetting[]> {\n const query = `{\n findStaffSettings(input: { where: { staffId: ${staffId} } }) {\n data {\n staffSettingId\n settingKey\n settingValue\n modifiedBy\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findStaffSettings?.data || []),\n catchError(error => {\n console.error('Error fetching staff settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Fetches default settings\n * @returns Observable of default settings array\n */\n findDefaultSettings(): Observable<DefaultSetting[]> {\n const query = `{\n findDefaultSettings {\n data {\n defaultSettingId\n settingValue\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findDefaultSettings?.data || []),\n catchError(error => {\n console.error('Error fetching default settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Creates a new staff setting\n * @param input The staff setting data to create\n * @returns Observable with the created staff setting\n */\n createStaffSetting(input: CreateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation CreateStaffSetting($input: CreateStaffSettingInput!) {\n createStaffSetting(input: $input) {\n data {\n staffSettingId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.createStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error creating staff setting:', error);\n return of({ data: null, message: 'Failed to create staff setting' });\n })\n );\n }\n\n /**\n * Updates an existing staff setting\n * @param input The update data and conditions\n * @returns Observable with the updated staff setting\n */\n updateStaffSetting(input: UpdateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {\n updateStaffSetting(input: $input) {\n data {\n staffSettingId\n staffId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.updateStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error updating staff setting:', error);\n return of({ data: null, message: 'Failed to update staff setting' });\n })\n );\n }\n}\n","/*\r\n * Public API Surface of ngc-smart-core\r\n */\r\n\r\nexport * from './lib/ngc-smart-core.module';\r\nexport * from './lib/smart-auth/smart-auth.service';\r\nexport * from './lib/smart-auth/smart-login-staff-resolver.service';\r\nexport * from './lib/smart-auth/smart-selected-offender-resolver.service';\r\nexport * from './lib/smart-auth/smart-error.component';\r\nexport * from './lib/smart-navbar/smart-navbar.service';\r\nexport * from './lib/smart-navbar/smart-navbar-config';\r\nexport * from './lib/smart-storage/xdm.service';\r\nexport * from './lib/smart-storage/smart-storage-model';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options.component';\r\nexport * from './lib/smart-offender-header/smart-offender-header.component';\r\nexport * from './lib/smart-offender-header/smart-offender-redirect.guard';\r\nexport * from './lib/smart-auth/smart-access-control.directive';\r\nexport * from './lib/smart-navbar/smart-navbar.component';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service';\r\nexport * from './lib/smart-auth/smart-access-control-config';\r\nexport * from './lib/smart-auth/smart-authorization-guard.service';\r\nexport * from './lib/user-settings/user-settings.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.XdmService","i3.SmartOffenderHeaderService","i4","i9","i1.SmartNavbarService","i2.XdmService","i3","i1","i2.SmartStaffOffenderOptionsService","i3.XdmService","i5","i6","i7","i8","i1.SmartAuthService","i2","i1.SmartStaffOffenderOptionsService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csmart-ngc-smart-core.mjs","sources":["../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/smart-storage-model.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/xdm.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-auth.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control.directive.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-authorization-guard.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-redirect.guard.ts","../../../../projects/csmart/ngc-smart-core/src/lib/ngc-smart-core.module.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-login-staff-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-selected-offender-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control-config.ts","../../../../projects/csmart/ngc-smart-core/src/lib/user-settings/user-settings.service.ts","../../../../projects/csmart/ngc-smart-core/src/public-api.ts","../../../../projects/csmart/ngc-smart-core/src/csmart-ngc-smart-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport class Permission {\r\n roleId: string;\r\n appModuleId: string;\r\n resource: string;\r\n assignmentStaffRelationId: string;\r\n readFlag: boolean;\r\n createFlag: boolean;\r\n updateFlag: boolean;\r\n deleteFlag: boolean;\r\n assignFlag: boolean;\r\n reopenFlag: boolean;\r\n closeFlag: boolean;\r\n expungeFlag: boolean;\r\n}\r\n\r\nexport class Role {\r\n roleId: string;\r\n role: string;\r\n organizationId: string;\r\n organization: string;\r\n}\r\n\r\nexport class Option {\r\n offenderOptionListId: string;\r\n name: string;\r\n serviceApiFieldName: string;\r\n selectedFlag: boolean;\r\n}\r\n\r\nexport class LoginStaff {\r\n staffId: number;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n phone: string;\r\n email: string;\r\n selectedRole: string = '*';\r\n roles?: Role[];\r\n permissions?: Permission[];\r\n options?: Option[];\r\n}\r\n\r\nexport class SelectedOffender {\r\n offenderId: number;\r\n name: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n assignmentStaffRelationId?: string;\r\n intakeFlag?: boolean = false;\r\n}\r\n\r\nexport class OffenderQuery {\r\n offenders: SelectedOffender[];\r\n}\r\n\r\nexport class StorageKey {\r\n static selectedOffender = 'smart-selected-offender';\r\n static loginStaff = 'smart-login-staff';\r\n static offenderQuery = 'smart-offender-query';\r\n}\r\n\r\nexport const SMART_WEB_STORAGE_LISTENER_URL = new InjectionToken<string>(\r\n 'SMART Web Storage Listener URL',\r\n);\r\nexport const SMART_WEB_PORTAL_URL = new InjectionToken<string>(\r\n 'SMART Web Portal URL',\r\n);\r\nexport const SMART_DATA_SERVICE_URL = new InjectionToken<string>(\r\n 'SMART Data Service URL',\r\n);\r\n\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable, of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n OffenderQuery,\r\n StorageKey,\r\n SMART_WEB_STORAGE_LISTENER_URL,\r\n SMART_DATA_SERVICE_URL,\r\n Option,\r\n} from './smart-storage-model';\r\n\r\n// import connectToChild from \"penpal/lib/connectToChild\";\r\nimport { connectToChild } from 'penpal';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class XdmService {\r\n private offenderSubject = new Subject<SelectedOffender | void>();\r\n private staffSubject = new Subject<LoginStaff | void>();\r\n private offenderQuerySubject = new Subject<OffenderQuery | void>();\r\n private connection: any;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: any,\r\n @Inject(SMART_WEB_STORAGE_LISTENER_URL)\r\n private smartStorageListenerUrl: string,\r\n private httpClient: HttpClient,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n ) {\r\n if (isDevMode) {\r\n console.log('SmartStorage XdmService (Client) - constructor()');\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n const frame = this.document.createElement('iframe');\r\n frame.src = this.smartStorageListenerUrl;\r\n frame.id = 'childframe';\r\n frame.name = Math.random().toString();\r\n frame.onload = null;\r\n //frame.style.visibility = 'hidden';\r\n frame.style.display = 'none';\r\n this.document.body.appendChild(frame);\r\n\r\n this.connection = connectToChild({\r\n iframe: frame,\r\n debug: false,\r\n });\r\n }\r\n\r\n private getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<Option>> {\r\n const queryString = `{findvStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n } }`;\r\n return this.httpClient\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n data.findvStaffOffenderListOptions.data['offenderOptionListId'] =\r\n data.findvStaffOffenderListOptions.data['offenderListOptionId'];\r\n return data.findvStaffOffenderListOptions.data;\r\n }),\r\n );\r\n /*return of([\r\n { offenderListOptionId: 'genderCode', name: '', selectedFlag: true }]);*/\r\n }\r\n\r\n public clearAll(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearAll();\r\n this.offenderSubject.next();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n /*************************************\r\n * Offender\r\n **************************************/\r\n public setSelectedOffender(selectedOffender: SelectedOffender): void {\r\n this.connection.promise.then((child) => {\r\n child.setSelectedOffender(selectedOffender);\r\n this.offenderSubject.next(selectedOffender);\r\n });\r\n\r\n this.getLoginStaff().then((loginStaff) => {\r\n let now = (new Date()).toISOString();\r\n const queryString = `mutation { createStaffOffenderAccess(input: {\r\n staffId: ${loginStaff.staffId},\r\n offenderId: ${selectedOffender.offenderId},\r\n accessDate: \"${now}\"\r\n }) {\r\n data {\r\n staffOffenderAccessId\r\n }\r\n }}`;\r\n this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).subscribe();\r\n });\r\n }\r\n\r\n public getSelectedOffender(): Promise<SelectedOffender> {\r\n return this.connection.promise.then((child) =>\r\n child.getSelectedOffender(StorageKey.selectedOffender),\r\n );\r\n }\r\n\r\n public clearSelectedOffender(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearSelectedOffender();\r\n this.offenderSubject.next();\r\n });\r\n }\r\n\r\n public getOffenderUpdate(): Observable<SelectedOffender> {\r\n return this.offenderSubject.asObservable() as Observable<SelectedOffender>;\r\n }\r\n\r\n /************************************************************************\r\n * Staff\r\n ************************************************************************/\r\n public setLoginStaff(loginStaff: LoginStaff) {\r\n this.connection.promise.then((child) => {\r\n child.setLoginStaff(loginStaff);\r\n this.staffSubject.next(loginStaff);\r\n });\r\n }\r\n\r\n public getLoginStaff(): Promise<LoginStaff> {\r\n return this.connection.promise.then((child) =>\r\n child.getLoginStaff(StorageKey.loginStaff),\r\n );\r\n }\r\n\r\n public clearLoginStaff(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearLoginStaff();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n public getStaffUpdate(): Observable<LoginStaff> {\r\n return this.staffSubject.asObservable() as Observable<LoginStaff>;\r\n }\r\n\r\n public refreshLoginStaffOptions() {\r\n this.getLoginStaff().then((oldLoginStaff) => {\r\n this.getStaffOffenderListOptions(oldLoginStaff.staffId).subscribe(\r\n (optionData) => {\r\n console.log(optionData);\r\n oldLoginStaff.options = optionData;\r\n this.setLoginStaff(oldLoginStaff);\r\n },\r\n );\r\n });\r\n }\r\n\r\n /************************************************************************\r\n * Offender Query\r\n ************************************************************************/\r\n public setOffenderQuery(offenderQuery: OffenderQuery) {\r\n this.connection.promise.then((child) => {\r\n child.setOffenderQuery(offenderQuery);\r\n this.offenderQuerySubject.next(offenderQuery);\r\n });\r\n }\r\n\r\n public getOffenderQuery(): Promise<OffenderQuery> {\r\n return this.connection.promise.then((child) =>\r\n child.getOffenderQuery(StorageKey.offenderQuery),\r\n );\r\n }\r\n\r\n public clearOffenderQuery(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearOffenderQuery();\r\n this.offenderQuerySubject.next();\r\n });\r\n }\r\n\r\n public getOffenderQueryUpdate(): Observable<OffenderQuery> {\r\n return this.offenderQuerySubject.asObservable() as Observable<OffenderQuery>;\r\n }\r\n\r\n public setSelectedOffenderFromRoute(offenderId: number, intakeFlag: boolean): Observable<SelectedOffender> {\r\n return from(this.getLoginStaff()).pipe(\r\n switchMap(loginStaff => {\r\n const queryString = `{\r\n getSelectedOffender(input: { \r\n offenderId: ${offenderId},\r\n staffId: ${loginStaff.staffId}\r\n }){\r\n data{\r\n offenderId\r\n name: offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }`;\r\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).pipe(\r\n map(({ data }) => data.getSelectedOffender.data),\r\n catchError(error => {\r\n console.error('HTTP request error:', error);\r\n return of(null); \r\n })\r\n );\r\n }),\r\n map(selectedOffender => {\r\n selectedOffender.intakeFlag = intakeFlag;\r\n this.setSelectedOffender(selectedOffender);\r\n this.setOffenderQuery({offenders: [selectedOffender]});\r\n return selectedOffender;\r\n }),\r\n catchError(error => {\r\n console.error('Error in processing offender data:', error);\r\n throw error; \r\n })\r\n );\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n\r\n@Injectable()\r\nexport class SmartOffenderHeaderService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n private http: HttpClient,\r\n ) {}\r\n\r\n getStaffOffenders(staffId: number): Observable<AssignedOffender[]> {\r\n const queryString = `\r\n query getStaffOffenderList{\r\n filterOffenderList(input: {staffId: ${staffId}}) {\r\n data {\r\n offenderId\r\n offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }\r\n `;\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.filterOffenderList.data;\r\n }),\r\n );\r\n }\r\n}\r\n\r\nexport interface AssignedOffender {\r\n offenderId: number;\r\n offenderName: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n}\r\n","import { Component, OnInit, OnDestroy, NgZone, Output, EventEmitter } from '@angular/core';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SelectedOffender, LoginStaff, Role, OffenderQuery } from '../smart-storage/smart-storage-model';\r\nimport { Subscription, Observable, from, of } from 'rxjs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { SmartOffenderHeaderService, AssignedOffender } from './smart-offender-header.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-smart-offender-header',\r\n templateUrl: './smart-offender-header.component.html',\r\n styleUrls: ['./smart-offender-header.component.css'],\r\n})\r\nexport class SmartOffenderHeaderComponent implements OnInit, OnDestroy {\r\n public selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n subscription: Subscription;\r\n selectedOffenderControl$ = new UntypedFormControl();\r\n // assignedOffenders: AssignedOffender[];\r\n offenderQueryList: SelectedOffender[];\r\n offenderQuerySubscription: Subscription;\r\n // public isAuthenticated: boolean;\r\n\r\n constructor(\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n private smartOffenderHeaderService: SmartOffenderHeaderService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n // this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.subscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n this.setSelectedOffenderControl();\r\n });\r\n\r\n this.xdmService.getOffenderQuery().then((offenderQuery: OffenderQuery) => {\r\n if (offenderQuery) {\r\n this.offenderQueryList = offenderQuery.offenders;\r\n this.setSelectedOffenderControl();\r\n }\r\n });\r\n\r\n this.offenderQuerySubscription = this.xdmService\r\n .getOffenderQueryUpdate()\r\n .subscribe((offenderList) => {\r\n if (offenderList && offenderList.offenders) {\r\n this.offenderQueryList = [...offenderList.offenders];\r\n }\r\n });\r\n\r\n this.selectedOffenderControl$.valueChanges.subscribe((o) =>\r\n this.onOffenderSelected(o),\r\n );\r\n\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => {\r\n return false;\r\n };\r\n }\r\n\r\n get isAuthenticated() : boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private onOffenderSelected(offender): void {\r\n if (offender) {\r\n // const o = offender.offenderName.split(',');\r\n // if (o.length === 2) {\r\n // const offenderName = `${o[1]} ${o[0]}`;\r\n // this.selectedOffender = {\r\n // offenderId: offender.offenderId,\r\n // name: offenderName,\r\n // pdId: offender.pdId,\r\n // birthDate: offender.birthDate,\r\n // gender: offender.genderCode,\r\n // assignmentStaffRelationId: '',\r\n // intakeFlag: this.loginStaff\r\n // ? this.hasIntakeRole(this.loginStaff.roles)\r\n // : false,\r\n // } as SelectedOffender;\r\n this.selectedOffender = offender;\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n this.reloadCurrentRoute();\r\n }\r\n }\r\n\r\n private setSelectedOffenderControl() {\r\n if (\r\n this.selectedOffender &&\r\n this.offenderQueryList &&\r\n this.offenderQueryList.length > 0\r\n ) {\r\n const o = this.offenderQueryList.find(\r\n (x) => x.offenderId === this.selectedOffender.offenderId,\r\n );\r\n if (o) {\r\n this.selectedOffenderControl$.setValue(o, { emitEvent: false });\r\n }\r\n\r\n if (!o && this.offenderQueryList.length > 0) {\r\n this.selectedOffenderControl$.setValue(this.offenderQueryList[0], {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n private reloadCurrentRoute() {\r\n try {\r\n const urlTree = this.router.parseUrl(this.router.url);\r\n if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.segments &&\r\n urlTree.root.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.children &&\r\n urlTree.root.children.primary &&\r\n urlTree.root.children.primary.segments &&\r\n urlTree.root.children.primary.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.children.primary.segments[0].path]);\r\n } else {\r\n this.router.navigate([this.router.url]);\r\n }\r\n } catch {\r\n this.router.navigateByUrl('/');\r\n }\r\n }\r\n\r\n private hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\n\r\n@Injectable()\r\nexport class SmartNavbarService {\r\n configs: SmartNavbarConfig[];\r\n constructor(private http: HttpClient) {}\r\n\r\n /*\r\n public getNavbarConfigs(): SmartNavbarConfig[] {\r\n this.configs = [\r\n {appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },\r\n {appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },\r\n {appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },\r\n ];\r\n\r\n return this.configs;\r\n }\r\n */\r\n /*\r\n public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {\r\n return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');\r\n }\r\n */\r\n\r\n public getNavbarConfigs(\r\n serviceApiUrl: string,\r\n ): Observable<SmartNavbarConfig[]> {\r\n const queryString = `\r\n {\r\n findAppModules {\r\n data {\r\n appModuleId\r\n name\r\n url\r\n offenderSpecificFlag\r\n displayOrder\r\n }\r\n }\r\n }`;\r\n\r\n /*\r\n const httpHeaders = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Cache-Control': 'no-cache'\r\n });\r\n const options = {\r\n headers: httpHeaders\r\n };\r\n */\r\n\r\n return this.http\r\n .post<any>(serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n if (isDevMode()) {\r\n console.log(data);\r\n }\r\n return data.findAppModules.data;\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewEncapsulation,\r\n Inject,\r\n} from '@angular/core';\r\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\nimport { SmartNavbarService } from './smart-navbar.service';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n Role,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-smart-navbar',\r\n templateUrl: './smart-navbar.component.html',\r\n styleUrls: ['./smart-navbar.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SmartNavbarComponent implements OnInit, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = null;\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n navbarConfigs: SmartNavbarConfig[];\r\n selectedNavbarConfig: SmartNavbarConfig = <SmartNavbarConfig>{};\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n\r\n ngOnInit() {\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n this.loginStaff = loginStaff;\r\n });\r\n this.navbarConfigService\r\n .getNavbarConfigs(this.serviceApiUrl)\r\n .subscribe((configs) => {\r\n this.navbarConfigs = configs.sort((a, b) => {\r\n if (a.displayOrder < b.displayOrder) {\r\n return -1;\r\n } else if (a.displayOrder > b.displayOrder) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n setTimeout(() => {\r\n this.selectedNavbarConfig = this.navbarConfigs.find(\r\n (config) => config.appModuleId === this.appModuleId,\r\n );\r\n }, 100);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\r\n }\r\n\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n public getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config.appModuleId === 'PPMASRVW') ? config.url \r\n : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU')\r\n ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`\r\n : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`\r\n : config.url;\r\n }\r\n\r\n public hasAppModulePermission(appModuleId) {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.permissions &&\r\n this.loginStaff.permissions.length > 0\r\n ) {\r\n return (\r\n this.loginStaff.permissions.findIndex(\r\n (p) => p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n showTab(config: SmartNavbarConfig) : boolean {\r\n return (\r\n (this.hasExternalUserRole && this.hasAppModulePermission(config.appModuleId)) ||\r\n (!this.hasExternalUserRole && (config.offenderSpecificFlag === false || this.selectedOffender))\r\n ) && this.checkVictimPermission(config) && this.isAuthenticated && !!this.loginStaff\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n public checkDVIPPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'DVIP') || (config.appModuleId === \"DVIP\" && this.hasDVIPRole));\r\n }\r\n\r\n public get hasDVIPRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isDVIPRole(role: Role){\r\n if(role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n public checkVictimPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === \"VICTIM\" && this.hasVictimRole));\r\n }\r\n\r\n public get hasVictimRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isVictimRole(role: Role){\r\n if(role.roleId == 'BC' || role.roleId == 'VSP'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n private isExternalRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\n// import { SmartAuthService } from './smart-auth.service';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SMART_WEB_PORTAL_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Component({\r\n selector: 'app-smart-error',\r\n templateUrl: './smart-error.component.html',\r\n styleUrls: ['./smart-error.component.css'],\r\n})\r\nexport class SmartErrorComponent implements OnInit {\r\n type: string;\r\n message: string;\r\n\r\n constructor(\r\n private authnService: MsalService,\r\n private route: ActivatedRoute,\r\n @Inject(SMART_WEB_PORTAL_URL) private smartWebPortalUrl: string,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.type = this.route.snapshot.queryParamMap.get('type') || 'staff';\r\n this.message =\r\n this.route.snapshot.queryParamMap.get('message') || 'Error occured.';\r\n }\r\n\r\n logout() {\r\n this.authnService.logout();\r\n }\r\n\r\n portal() {\r\n window.location.href = this.smartWebPortalUrl;\r\n }\r\n}\r\n","<div>\r\n <h2>\r\n {{ message }}\r\n </h2>\r\n <p>\r\n Please contact help desk if needed.\r\n </p>\r\n <div>\r\n <button (click)=\"logout()\" *ngIf=\"type === 'staff'\">OK</button>\r\n <button (click)=\"portal()\" *ngIf=\"type === 'offender'\">OK</button>\r\n </div>\r\n</div>\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n private http: HttpClient,\r\n private matSnackBar: MatSnackBar,\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n ) {}\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach((obj) => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach((key) => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (\r\n typeof jsonObject[key] === 'string' &&\r\n jsonObject[key].trim() === ''\r\n ) {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(\r\n queryName: string,\r\n queryString: string,\r\n ): Observable<any> {\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }),\r\n );\r\n }\r\n\r\n getOffenderListOptions(): Observable<any> {\r\n const queryString = `{findOffenderListOptions(input:{\r\n where:{\r\n deactivatedDate: null\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n } }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data['findOffenderListOptions'];\r\n }),\r\n );\r\n }\r\n\r\n public getStaffOffenderListOptions(staffId: number): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) {\r\n //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(\r\n dataToSave,\r\n )}) {\r\n message\r\n }\r\n }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach((eObj) => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: UntypedFormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n // Sort by name property (case-insensitive)\r\n this.offenderListOptions.sort((a, b) => \r\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\r\n );\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new UntypedFormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new UntypedFormControl(false));\r\n });\r\n\r\n return new UntypedFormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n onClear(){\r\n this.frmGroup.reset();\r\n }\r\n\r\n\r\n\r\n}\r\n","<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n \r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of, from, throwError, lastValueFrom } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartAuthService {\r\n loginStaff: LoginStaff;\r\n selectedOffender: SelectedOffender;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private authnService: MsalService,\r\n private xdmService: XdmService,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.userName;\r\n const staffName = userName.substring(0, userName.indexOf('@'));\r\n if (isDevMode) {\r\n console.log(\r\n '##### loginLoginStaff(): get using login staff name ',\r\n staffName,\r\n );\r\n }\r\n return this.getStaff(staffName);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n get userName(): string {\r\n if (this.authnService.instance.getAllAccounts().length > 0) {\r\n const account = this.authnService.instance.getAllAccounts()[0];\r\n return account.username;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private getTeamUrl(app: string, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (!this.loginStaff) {\r\n return;\r\n }\r\n\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await lastValueFrom(\r\n this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ),\r\n );\r\n if (relation) {\r\n selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n // }\r\n }\r\n this.xdmService.setSelectedOffender(selectedOffender);\r\n this.selectedOffender = selectedOffender;\r\n }\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n public async setPermission(\r\n appModuleId: string,\r\n route: ActivatedRouteSnapshot,\r\n ) {\r\n if (!this.loginStaff) {\r\n this.loginStaff = await this.xdmService.getLoginStaff();\r\n }\r\n const permissions = this.loginStaff.permissions;\r\n const resource =\r\n route.url && route.url.length > 0 ? route.url[0]!.path : '';\r\n\r\n if (!this.selectedOffender) {\r\n this.selectedOffender = await this.xdmService.getSelectedOffender();\r\n }\r\n\r\n if (this.selectedOffender) {\r\n // if (!this.selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n this.selectedOffender.offenderId,\r\n ).toPromise();\r\n if (relation) {\r\n this.selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n this.selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n // }\r\n }\r\n\r\n const assignmentStaffRelationId =\r\n this.selectedOffender.assignmentStaffRelationId;\r\n\r\n const elements = document.querySelectorAll('[class^=\"sac-\"]');\r\n const pattern = /^sac-(\\S+)-(\\S+)$/i;\r\n\r\n Array.from(elements).forEach((element) => {\r\n let hide;\r\n let disable;\r\n element.classList.forEach((c) => {\r\n const results = c.match(pattern);\r\n // console.log(results);\r\n if (results && results.length > 2) {\r\n const roleId = results[1] ? results[1].toUpperCase() : null;\r\n const right = results[2];\r\n // console.log(results[0]);\r\n // console.log(results[1]);\r\n // console.log(results[2]);\r\n const permission = permissions.find(function (p) {\r\n return (\r\n p.appModuleId === appModuleId &&\r\n p.resource === resource &&\r\n p.roleId === roleId &&\r\n p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n /*\r\n console.log('##### setPermission() resource: ', resource);\r\n console.log('##### setPermission() appModuleId: ', appModuleId);\r\n console.log('##### setPermission() roleId: ', roleId);\r\n console.log(\r\n '##### setPermission() assignment relation: ',\r\n assignmentStaffRelationId,\r\n );\r\n */\r\n console.log('##### Matched permission: ', permission);\r\n\r\n if (permission) {\r\n if (right === 'read') {\r\n if (!permission.readFlag) {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n hide = false;\r\n }\r\n } else if (\r\n (right === 'create' && !permission.createFlag) ||\r\n (right === 'update' && !permission.updateFlag) ||\r\n (right === 'delete' && !permission.deleteFlag) ||\r\n (right === 'assign' && !permission.assignFlag) ||\r\n (right === 'close' && !permission.closeFlag) ||\r\n (right === 'expunge' && !permission.expungeFlag) ||\r\n (right === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n } else {\r\n if (element.nodeName === 'BUTTON') {\r\n hide = false;\r\n } else {\r\n disable = false;\r\n }\r\n }\r\n } else {\r\n if (right === 'read') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n }\r\n });\r\n console.log('hide: ', hide);\r\n console.log('disable: ', disable);\r\n if (hide === true) {\r\n this.hideHtmlElement(element);\r\n } else if (disable === true) {\r\n this.disableHtmlElement(element);\r\n }\r\n });\r\n }\r\n\r\n public checkPermission(accessControlConfig: SmartAccessControlConfig) {\r\n const selData = accessControlConfig.route.data;\r\n this.loginStaff = selData.loginStaff;\r\n this.selectedOffender = selData.selectedOffender;\r\n \r\n let routePath = '';\r\n if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {\r\n routePath = accessControlConfig.route.url[0]!.path;\r\n }\r\n \r\n const permissions = this.loginStaff.permissions;\r\n const resource = routePath;\r\n const roleId = accessControlConfig.roleId?.toUpperCase() || null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';\r\n \r\n // Find matching permissions (prioritize specific role over aggregated)\r\n const specificPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim().toUpperCase() === roleId &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const aggregatedPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim() === '*' &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const permission = specificPermission || aggregatedPermission;\r\n \r\n if (!permission) return false;\r\n \r\n const flagMap = {\r\n 'read': permission.readFlag,\r\n 'create': permission.createFlag,\r\n 'update': permission.updateFlag,\r\n 'delete': permission.deleteFlag,\r\n 'assign': permission.assignFlag,\r\n 'close': permission.closeFlag,\r\n 'expunge': permission.expungeFlag,\r\n 'reopen': permission.reopenFlag\r\n };\r\n \r\n return !!flagMap[accessType];\r\n}\r\n\r\n public canAppFeatureActivate(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n return this.query<any>({\r\n query: this.findStaffQuery,\r\n variables: {\r\n input: {\r\n where: {\r\n userName: userName,\r\n activeFlag: true,\r\n },\r\n }\r\n },\r\n }).pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log('##### getStaff() from service ', result);\r\n }\r\n if (result.findvStaffs.data.length > 0) {\r\n const data = result.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private query<T>(options: {\r\n query: string;\r\n variables?: { [key: string]: any };\r\n }): Observable<T> {\r\n return this.http\r\n .post<{ data: T }>(\r\n this.smartDataServiceUrl,\r\n {\r\n query: options.query,\r\n variables: options.variables,\r\n },\r\n {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'No-Auth': 'True',\r\n }),\r\n }\r\n )\r\n .pipe(map((d) => d.data));\r\n }\r\n\r\n private get findStaffQuery(){\r\n return `\r\n query findvStaffs($input: vStaffMultiInput) {\r\n findvStaffs(input: $input) {\r\n totalCount\r\n message\r\n data {\r\n staffId\r\n userName\r\n lastName\r\n firstName\r\n phone\r\n email\r\n roles {\r\n roleId\r\n role\r\n organizationId\r\n organization\r\n }\r\n permissions {\r\n roleId\r\n appModuleId\r\n resource\r\n assignmentStaffRelationId\r\n readFlag\r\n createFlag\r\n updateFlag\r\n deleteFlag\r\n assignFlag\r\n reopenFlag\r\n closeFlag\r\n expungeFlag\r\n }\r\n options {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n }\r\n }\r\n }\r\n `;\r\n }\r\n\r\n private getStaffOffenderRelation(\r\n staffId: number,\r\n offenderId: number,\r\n ): Observable<string> {\r\n const queryString = `\r\n {\r\n findvStaffOffenderRelations(input: {where: {staffId: ${staffId}, offenderId: ${offenderId}}}) {\r\n data {\r\n assignmentStaffRelationId\r\n }\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getStaffOffenderRelation() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvStaffOffenderRelations.data.length > 0) {\r\n const data = result.data.findvStaffOffenderRelations.data[0];\r\n return data.assignmentStaffRelationId;\r\n } else {\r\n return null;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return null;\r\n }),\r\n );\r\n }\r\n\r\n private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff\r\n ) {\r\n return;\r\n }\r\n\r\n // const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n // if (!this.auth.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Router } from '@angular/router';\r\nimport { take, mergeMap, catchError } from 'rxjs/operators';\r\nimport { of, Observable } from 'rxjs';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { SmartAuthService } from './smart-auth.service';\r\n\r\n@Injectable()\r\nexport class SmartAuthorizationGuard {\r\n loginStaff: LoginStaff;\r\n\r\n constructor(public authnService: SmartAuthService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot) {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (!loginStaff || !route || !route.routeConfig) {\r\n return of(false);\r\n }\r\n // if (!this.authnService.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SmartOffenderRedirectGuard {\r\n constructor(private router: Router) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n const targetRoute = route.data['routeTo'];\r\n const queryParams = route.parent?.queryParams;\r\n if (targetRoute) {\r\n this.router.navigate([targetRoute], { queryParams: queryParams });\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { SmartOffenderHeaderComponent } from './smart-offender-header/smart-offender-header.component';\r\nimport { SmartNavbarComponent } from './smart-navbar/smart-navbar.component';\r\nimport { SmartNavbarService } from './smart-navbar/smart-navbar.service';\r\nimport { SmartErrorComponent } from './smart-auth/smart-error.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { SmartOffenderHeaderService } from './smart-offender-header/smart-offender-header.service';\r\nimport { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\n// import { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\nimport { SmartStaffOffenderOptionsService } from './smart-staff-offender-options/smart-staff-offender-options.service';\r\nimport { SmartAccessControlDirective } from './smart-auth/smart-access-control.directive';\r\nimport { SmartAuthorizationGuard } from './smart-auth/smart-authorization-guard.service';\r\nimport { SmartOffenderRedirectGuard } from './smart-offender-header/smart-offender-redirect.guard';\r\n\r\n@NgModule({\r\n declarations: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n ReactiveFormsModule,\r\n ],\r\n exports: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n providers: [\r\n SmartNavbarService,\r\n SmartOffenderHeaderService,\r\n SmartStaffOffenderOptionsService,\r\n SmartAuthorizationGuard,\r\n MatSnackBar,\r\n SmartOffenderRedirectGuard\r\n ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, EMPTY, of, throwError } from 'rxjs';\r\nimport { mergeMap, catchError, take } from 'rxjs/operators';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginStaffResolverService {\r\n constructor(\r\n private authnService: SmartAuthService,\r\n // private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<LoginStaff> | Observable<never> {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (isDevMode) {\r\n console.log('LoginStaffResolverService: ', loginStaff);\r\n }\r\n if (loginStaff) {\r\n return of(loginStaff);\r\n } else {\r\n return throwError('Not authorized to access SMART.');\r\n // return EMPTY;\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'Not authorized to access SMART.'\r\n }\r\n });\r\n });\r\n return EMPTY;\r\n */\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('LoginStaffResolverService: ' + error);\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'SMART Authentication: ' + error,\r\n },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n take,\r\n retryWhen,\r\n delay,\r\n} from 'rxjs/operators';\r\nimport { SelectedOffender } from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SelectedOffenderResolverService\r\n {\r\n constructor(\r\n private service: XdmService,\r\n private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<SelectedOffender> | Observable<never> {\r\n let offenderId: number | null = null;\r\n let intakeFlag: boolean = false;\r\n if(route) {\r\n if(route.queryParams[\"offenderId\"])\r\n offenderId = parseInt(route.queryParams[\"offenderId\"]);\r\n if(route.queryParams[\"intakeFlag\"])\r\n intakeFlag = route.queryParams[\"intakeFlag\"] == \"true\";\r\n }\r\n return from(this.service.getSelectedOffender()).pipe(\r\n mergeMap((selectedOffender) => {\r\n if (isDevMode) {\r\n console.log(selectedOffender);\r\n }\r\n if(offenderId && offenderId > 0 && (!selectedOffender || (selectedOffender && selectedOffender.offenderId !== offenderId))) {\r\n return this.service.setSelectedOffenderFromRoute(offenderId, intakeFlag);\r\n }\r\n if(selectedOffender) {\r\n return of(selectedOffender);\r\n }\r\n return throwError(() => new Error('No offender selected.'));\r\n }),\r\n retryWhen((errors) =>\r\n errors.pipe(\r\n // tap(() => console.log('Retry getting selected offender.')),\r\n delay(1000),\r\n take(5),\r\n (o) =>\r\n concat(\r\n o,\r\n throwError(() => new Error('No offender selected (failed after retries).')),\r\n ),\r\n ),\r\n ),\r\n catchError((error) => {\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error }\r\n });\r\n });\r\n */\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\n\nexport interface StaffSetting {\n staffSettingId: string;\n settingKey: string;\n settingValue: string;\n modifiedBy: string;\n}\n\nexport interface DefaultSetting {\n defaultSettingId: string;\n settingValue: string;\n}\n\nexport interface CreateStaffSettingInput {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n}\n\nexport interface UpdateStaffSettingInput {\n where: {\n staffSettingId: number;\n };\n data: {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n };\n}\n\nexport interface StaffSettingResponse {\n data: {\n staffSettingId: number;\n staffId?: number;\n settingKey: string;\n settingValue: string;\n };\n message: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n constructor(\n private httpClient: HttpClient,\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl: string\n ) {}\n\n /**\n * Fetches staff settings for a given staff ID\n * @param staffId The ID of the staff member\n * @returns Observable of staff settings array\n */\n findStaffSettings(staffId: string): Observable<StaffSetting[]> {\n const query = `{\n findStaffSettings(input: { where: { staffId: ${staffId} } }) {\n data {\n staffSettingId\n settingKey\n settingValue\n modifiedBy\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findStaffSettings?.data || []),\n catchError(error => {\n console.error('Error fetching staff settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Fetches default settings\n * @returns Observable of default settings array\n */\n findDefaultSettings(): Observable<DefaultSetting[]> {\n const query = `{\n findDefaultSettings {\n data {\n defaultSettingId\n settingValue\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findDefaultSettings?.data || []),\n catchError(error => {\n console.error('Error fetching default settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Creates a new staff setting\n * @param input The staff setting data to create\n * @returns Observable with the created staff setting\n */\n createStaffSetting(input: CreateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation CreateStaffSetting($input: CreateStaffSettingInput!) {\n createStaffSetting(input: $input) {\n data {\n staffSettingId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.createStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error creating staff setting:', error);\n return of({ data: null, message: 'Failed to create staff setting' });\n })\n );\n }\n\n /**\n * Updates an existing staff setting\n * @param input The update data and conditions\n * @returns Observable with the updated staff setting\n */\n updateStaffSetting(input: UpdateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {\n updateStaffSetting(input: $input) {\n data {\n staffSettingId\n staffId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.updateStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error updating staff setting:', error);\n return of({ data: null, message: 'Failed to update staff setting' });\n })\n );\n }\n}\n","/*\r\n * Public API Surface of ngc-smart-core\r\n */\r\n\r\nexport * from './lib/ngc-smart-core.module';\r\nexport * from './lib/smart-auth/smart-auth.service';\r\nexport * from './lib/smart-auth/smart-login-staff-resolver.service';\r\nexport * from './lib/smart-auth/smart-selected-offender-resolver.service';\r\nexport * from './lib/smart-auth/smart-error.component';\r\nexport * from './lib/smart-navbar/smart-navbar.service';\r\nexport * from './lib/smart-navbar/smart-navbar-config';\r\nexport * from './lib/smart-storage/xdm.service';\r\nexport * from './lib/smart-storage/smart-storage-model';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options.component';\r\nexport * from './lib/smart-offender-header/smart-offender-header.component';\r\nexport * from './lib/smart-offender-header/smart-offender-redirect.guard';\r\nexport * from './lib/smart-auth/smart-access-control.directive';\r\nexport * from './lib/smart-navbar/smart-navbar.component';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service';\r\nexport * from './lib/smart-auth/smart-access-control-config';\r\nexport * from './lib/smart-auth/smart-authorization-guard.service';\r\nexport * from './lib/user-settings/user-settings.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.XdmService","i3.SmartOffenderHeaderService","i4","i9","i1.SmartNavbarService","i2.XdmService","i3","i1","i2.SmartStaffOffenderOptionsService","i3.XdmService","i5","i6","i7","i8","i1.SmartAuthService","i2","i1.SmartStaffOffenderOptionsService"],"mappings":"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"}
|