client-core-services 1.0.0
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.
- package/README.md +24 -0
- package/esm2020/client-core-services.mjs +5 -0
- package/esm2020/lib/my-lib.module.mjs +98 -0
- package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
- package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
- package/esm2020/lib/services/api/api.service.mjs +611 -0
- package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
- package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
- package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
- package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
- package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
- package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
- package/esm2020/lib/services/chart/chart.service.mjs +166 -0
- package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
- package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
- package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
- package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
- package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
- package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
- package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
- package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
- package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
- package/esm2020/lib/services/download/download.service.mjs +151 -0
- package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
- package/esm2020/lib/services/env/env.service.mjs +232 -0
- package/esm2020/lib/services/env/serverHostList.mjs +56 -0
- package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
- package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
- package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
- package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
- package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
- package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
- package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
- package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
- package/esm2020/lib/services/loader/loader.service.mjs +17 -0
- package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
- package/esm2020/lib/services/model/model.service.mjs +30 -0
- package/esm2020/lib/services/notify/notification.service.mjs +84 -0
- package/esm2020/lib/services/operator/operator.service.mjs +58 -0
- package/esm2020/lib/services/permission/permission.service.mjs +88 -0
- package/esm2020/lib/services/router/router.service.mjs +78 -0
- package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
- package/esm2020/lib/services/storage/storage.service.mjs +749 -0
- package/esm2020/lib/services/tree-component/interface.mjs +6 -0
- package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
- package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
- package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
- package/esm2020/lib/shared/configuration/config.mjs +76 -0
- package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
- package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
- package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
- package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
- package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
- package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
- package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
- package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
- package/esm2020/lib/shared/platform.mjs +2 -0
- package/esm2020/public-api.mjs +53 -0
- package/fesm2015/client-core-services.mjs +15487 -0
- package/fesm2015/client-core-services.mjs.map +1 -0
- package/fesm2020/client-core-services.mjs +15482 -0
- package/fesm2020/client-core-services.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/my-lib.module.d.ts +18 -0
- package/lib/services/api/api-call/api-call.service.d.ts +60 -0
- package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
- package/lib/services/api/api.service.d.ts +88 -0
- package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
- package/lib/services/api/auth/auth.service.d.ts +50 -0
- package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
- package/lib/services/api/common-api/common-api.service.d.ts +22 -0
- package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
- package/lib/services/api/public-api/public-api.service.d.ts +14 -0
- package/lib/services/chart/chart.service.d.ts +21 -0
- package/lib/services/check-if/check-if.service.d.ts +50 -0
- package/lib/services/common-utils/common-function.service.d.ts +84 -0
- package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
- package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
- package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
- package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
- package/lib/services/data-share/data-share.service.d.ts +174 -0
- package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
- package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
- package/lib/services/download/download.service.d.ts +35 -0
- package/lib/services/encryption/encryption.service.d.ts +8 -0
- package/lib/services/env/env.service.d.ts +44 -0
- package/lib/services/env/serverHostList.d.ts +9 -0
- package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
- package/lib/services/form/form-control/form-control.service.d.ts +44 -0
- package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
- package/lib/services/form/form-value/form-value.service.d.ts +32 -0
- package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
- package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
- package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
- package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
- package/lib/services/loader/loader.service.d.ts +8 -0
- package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
- package/lib/services/model/model.service.d.ts +11 -0
- package/lib/services/notify/notification.service.d.ts +22 -0
- package/lib/services/operator/operator.service.d.ts +27 -0
- package/lib/services/permission/permission.service.d.ts +18 -0
- package/lib/services/router/router.service.d.ts +14 -0
- package/lib/services/storage/cookies.service.d.ts +11 -0
- package/lib/services/storage/storage.service.d.ts +132 -0
- package/lib/services/tree-component/interface.d.ts +13 -0
- package/lib/services/tree-component/tree-component.service.d.ts +38 -0
- package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
- package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
- package/lib/shared/configuration/config.d.ts +144 -0
- package/lib/shared/configuration/editor-config.d.ts +72 -0
- package/lib/shared/enums/common.enum.d.ts +16 -0
- package/lib/shared/enums/config.enum.d.ts +54 -0
- package/lib/shared/enums/end-point.enum.d.ts +66 -0
- package/lib/shared/enums/flags.enum.d.ts +18 -0
- package/lib/shared/enums/keycodes.enum.d.ts +120 -0
- package/lib/shared/enums/operator_type.enum.d.ts +9 -0
- package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
- package/lib/shared/platform.d.ts +1 -0
- package/package.json +40 -0
- package/public-api.d.ts +49 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../env/env.service";
|
|
4
|
+
import * as i2 from "../../common-utils/core-function/core-function.service";
|
|
5
|
+
import * as i3 from "../../storage/storage.service";
|
|
6
|
+
export class ApiCallResponceService {
|
|
7
|
+
constructor(envService, coreFunctionService, storageService) {
|
|
8
|
+
this.envService = envService;
|
|
9
|
+
this.coreFunctionService = coreFunctionService;
|
|
10
|
+
this.storageService = storageService;
|
|
11
|
+
}
|
|
12
|
+
saveFormResponceHandling(saveFromDataRsponce, showNotify, updateMode, currentActionButton, nextIndex, dataListForUpload, saveResponceData, custmizedFormValue, modifyCustmizedFormValue, dataSaveInProgress, isStepper, complete_object_payload_mode, form) {
|
|
13
|
+
let result = {
|
|
14
|
+
message: {
|
|
15
|
+
msg: "",
|
|
16
|
+
class: ""
|
|
17
|
+
},
|
|
18
|
+
saveDuplicateData: false,
|
|
19
|
+
showNotify: showNotify,
|
|
20
|
+
updateMode: updateMode,
|
|
21
|
+
next: false,
|
|
22
|
+
resetForm: false,
|
|
23
|
+
resetResponce: false,
|
|
24
|
+
successAction: false,
|
|
25
|
+
dataListForUpload: dataListForUpload,
|
|
26
|
+
saveResponceData: saveResponceData,
|
|
27
|
+
custmizedFormValue: custmizedFormValue,
|
|
28
|
+
modifyCustmizedFormValue: modifyCustmizedFormValue,
|
|
29
|
+
dataSaveInProgress: dataSaveInProgress,
|
|
30
|
+
isStepper: isStepper,
|
|
31
|
+
complete_object_payload_mode: complete_object_payload_mode,
|
|
32
|
+
public: {
|
|
33
|
+
check: false,
|
|
34
|
+
getFormData: {},
|
|
35
|
+
url: ""
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
if (saveFromDataRsponce) {
|
|
39
|
+
if (saveFromDataRsponce.success && saveFromDataRsponce.success != '' && result.showNotify) {
|
|
40
|
+
if (saveFromDataRsponce.success == 'success') {
|
|
41
|
+
if (currentActionButton && currentActionButton.onclick && currentActionButton.onclick.success_msg && currentActionButton.onclick.success_msg != '') {
|
|
42
|
+
result.message.msg = currentActionButton.onclick.success_msg;
|
|
43
|
+
result.message.class = "bg-success";
|
|
44
|
+
}
|
|
45
|
+
else if (saveFromDataRsponce.success_msg && saveFromDataRsponce.success_msg != '') {
|
|
46
|
+
result.message.msg = saveFromDataRsponce.success_msg;
|
|
47
|
+
result.message.class = "bg-success";
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
if (result.updateMode) {
|
|
51
|
+
result.message.msg = " Form Data Update successfull !!!";
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
result.message.msg = " Form Data Save successfull !!!";
|
|
55
|
+
}
|
|
56
|
+
result.message.class = "bg-success";
|
|
57
|
+
}
|
|
58
|
+
if (result.updateMode) {
|
|
59
|
+
if (nextIndex) {
|
|
60
|
+
result.next = true;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
result.resetForm = true;
|
|
64
|
+
result.updateMode = false;
|
|
65
|
+
}
|
|
66
|
+
result.custmizedFormValue = {};
|
|
67
|
+
result.modifyCustmizedFormValue = {};
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
result.resetForm = true;
|
|
71
|
+
}
|
|
72
|
+
result.dataListForUpload = {};
|
|
73
|
+
result.saveResponceData = saveFromDataRsponce.data;
|
|
74
|
+
}
|
|
75
|
+
if (this.envService.getRequestType() == 'PUBLIC') {
|
|
76
|
+
result.complete_object_payload_mode = false;
|
|
77
|
+
result.public.check = true;
|
|
78
|
+
let _id = result.saveResponceData["_id"];
|
|
79
|
+
if (this.coreFunctionService.isNotBlank(form["details"]) && this.coreFunctionService.isNotBlank(form["details"]["on_success_url_key"] != "")) {
|
|
80
|
+
let public_key = form["details"]["on_success_url_key"];
|
|
81
|
+
const data = {
|
|
82
|
+
"obj": public_key,
|
|
83
|
+
"key": _id,
|
|
84
|
+
"key1": "key2",
|
|
85
|
+
"key2": "key3",
|
|
86
|
+
};
|
|
87
|
+
let payloaddata = {};
|
|
88
|
+
this.storageService.removeDataFormStorage();
|
|
89
|
+
const getFormData = {
|
|
90
|
+
data: payloaddata,
|
|
91
|
+
_id: _id
|
|
92
|
+
};
|
|
93
|
+
getFormData.data = data;
|
|
94
|
+
result.public.getFormData = getFormData;
|
|
95
|
+
//this.apiService.GetForm(getFormData);
|
|
96
|
+
let navigation_url = "pbl/" + public_key + "/" + _id + "/ie09/cnf00v";
|
|
97
|
+
result.public.url = navigation_url;
|
|
98
|
+
//this.router.navigate([navigation_url]);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
result.public.url = "home_page";
|
|
102
|
+
//this.router.navigate(["home_page"]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
result.showNotify = false;
|
|
106
|
+
result.dataSaveInProgress = true;
|
|
107
|
+
result.resetResponce = true;
|
|
108
|
+
result.successAction = true;
|
|
109
|
+
}
|
|
110
|
+
else if (saveFromDataRsponce.error && saveFromDataRsponce.error != '' && result.showNotify) {
|
|
111
|
+
result.message.msg = saveFromDataRsponce.error;
|
|
112
|
+
result.message.class = "bg-danger";
|
|
113
|
+
result.showNotify = false;
|
|
114
|
+
result.dataSaveInProgress = true;
|
|
115
|
+
result.resetResponce = true;
|
|
116
|
+
}
|
|
117
|
+
else if (saveFromDataRsponce.confirmationRequired && saveFromDataRsponce.confirmationRequired != '' && result.showNotify) {
|
|
118
|
+
result.message.msg = saveFromDataRsponce.confirmationRequired;
|
|
119
|
+
result.message.class = "bg-warning";
|
|
120
|
+
result.showNotify = false;
|
|
121
|
+
result.dataSaveInProgress = true;
|
|
122
|
+
result.resetResponce = true;
|
|
123
|
+
result.saveDuplicateData = true;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (result.showNotify) {
|
|
127
|
+
result.showNotify = false;
|
|
128
|
+
result.message.msg = "No data return";
|
|
129
|
+
result.message.class = "bg-danger";
|
|
130
|
+
result.dataSaveInProgress = true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
checkOnSuccessAction(currentActionButton, forms) {
|
|
137
|
+
let responce = {
|
|
138
|
+
actionValue: '',
|
|
139
|
+
index: -1
|
|
140
|
+
};
|
|
141
|
+
if (currentActionButton.onclick && currentActionButton.onclick != null && currentActionButton.onclick.action_name && currentActionButton.onclick.action_name != null) {
|
|
142
|
+
if (currentActionButton.onclick.action_name != '') {
|
|
143
|
+
responce.actionValue = currentActionButton.onclick.action_name;
|
|
144
|
+
if (responce.actionValue != '') {
|
|
145
|
+
Object.keys(forms).forEach((key, i) => {
|
|
146
|
+
if (key == responce.actionValue) {
|
|
147
|
+
responce.index = i;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return responce;
|
|
154
|
+
}
|
|
155
|
+
;
|
|
156
|
+
setGridFilterData(gridFilterData, tabFilterData) {
|
|
157
|
+
let result = {
|
|
158
|
+
tabFilterData: tabFilterData
|
|
159
|
+
};
|
|
160
|
+
if (gridFilterData) {
|
|
161
|
+
if (gridFilterData.data && gridFilterData.data.length > 0) {
|
|
162
|
+
result.tabFilterData = JSON.parse(JSON.stringify(gridFilterData.data));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
result.tabFilterData = [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return result.tabFilterData;
|
|
169
|
+
}
|
|
170
|
+
setTypeaheadData(data, typeAheadData) {
|
|
171
|
+
let result = {
|
|
172
|
+
typeAheadData: typeAheadData
|
|
173
|
+
};
|
|
174
|
+
if (data && data.length > 0) {
|
|
175
|
+
result.typeAheadData = data;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
result.typeAheadData = [];
|
|
179
|
+
}
|
|
180
|
+
return result.typeAheadData;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
ApiCallResponceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, deps: [{ token: i1.EnvService }, { token: i2.CoreFunctionService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
184
|
+
ApiCallResponceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, providedIn: 'root' });
|
|
185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiCallResponceService, decorators: [{
|
|
186
|
+
type: Injectable,
|
|
187
|
+
args: [{
|
|
188
|
+
providedIn: 'root'
|
|
189
|
+
}]
|
|
190
|
+
}], ctorParameters: function () { return [{ type: i1.EnvService }, { type: i2.CoreFunctionService }, { type: i3.StorageService }]; } });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNhbGwtcmVzcG9uY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1jb3JlL3NyYy9saWIvc2VydmljZXMvYXBpL2FwaS1jYWxsLXJlc3BvbmNlL2FwaS1jYWxsLXJlc3BvbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQyxZQUNVLFVBQXFCLEVBQ3JCLG1CQUF1QyxFQUN2QyxjQUE2QjtRQUY3QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsbUJBQWMsR0FBZCxjQUFjLENBQWU7SUFFbkMsQ0FBQztJQUVMLHdCQUF3QixDQUFDLG1CQUF1QixFQUFDLFVBQWtCLEVBQUMsVUFBa0IsRUFBQyxtQkFBdUIsRUFBQyxTQUFhLEVBQUMsaUJBQXFCLEVBQUMsZ0JBQW9CLEVBQUMsa0JBQXNCLEVBQUMsd0JBQTRCLEVBQUMsa0JBQXNCLEVBQUMsU0FBYSxFQUFDLDRCQUFnQyxFQUFDLElBQVE7UUFDeFMsSUFBSSxNQUFNLEdBQUU7WUFDVixPQUFPLEVBQUc7Z0JBQ1IsR0FBRyxFQUFHLEVBQUU7Z0JBQ1IsS0FBSyxFQUFHLEVBQUU7YUFDWDtZQUNELGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsVUFBVSxFQUFDLFVBQVU7WUFDckIsVUFBVSxFQUFDLFVBQVU7WUFDckIsSUFBSSxFQUFDLEtBQUs7WUFDVixTQUFTLEVBQUMsS0FBSztZQUNmLGFBQWEsRUFBQyxLQUFLO1lBQ25CLGFBQWEsRUFBQyxLQUFLO1lBQ25CLGlCQUFpQixFQUFDLGlCQUFpQjtZQUNuQyxnQkFBZ0IsRUFBQyxnQkFBZ0I7WUFDakMsa0JBQWtCLEVBQUMsa0JBQWtCO1lBQ3JDLHdCQUF3QixFQUFD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RUFBQyxhQUFpQjtRQUN6QyxJQUFJLE1BQU0sR0FBRztZQUNYLGFBQWEsRUFBQyxhQUFhO1NBQzVCLENBQUE7UUFDRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUM3QjthQUFNO1lBQ0wsTUFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDM0I7UUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQzs7b0hBMUtVLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRW52U2VydmljZSB9IGZyb20gJy4uLy4uL2Vudi9lbnYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24tdXRpbHMvY29yZS1mdW5jdGlvbi9jb3JlLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUNhbGxSZXNwb25jZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW52U2VydmljZTpFbnZTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRnVuY3Rpb25TZXJ2aWNlOkNvcmVGdW5jdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOlN0b3JhZ2VTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIHNhdmVGb3JtUmVzcG9uY2VIYW5kbGluZyhzYXZlRnJvbURhdGFSc3BvbmNlOmFueSxzaG93Tm90aWZ5OmJvb2xlYW4sdXBkYXRlTW9kZTpib29sZWFuLGN1cnJlbnRBY3Rpb25CdXR0b246YW55LG5leHRJbmRleDphbnksZGF0YUxpc3RGb3JVcGxvYWQ6YW55LHNhdmVSZXNwb25jZURhdGE6YW55LGN1c3RtaXplZEZvcm1WYWx1ZTphbnksbW9kaWZ5Q3VzdG1pemVkRm9ybVZhbHVlOmFueSxkYXRhU2F2ZUluUHJvZ3Jlc3M6YW55LGlzU3RlcHBlcjphbnksY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZTphbnksZm9ybTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9e1xyXG4gICAgICBtZXNzYWdlIDoge1xyXG4gICAgICAgIG1zZyA6IFwiXCIsXHJcbiAgICAgICAgY2xhc3MgOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHNhdmVEdXBsaWNhdGVEYXRhOiBmYWxzZSxcclxuICAgICAgc2hvd05vdGlmeTpzaG93Tm90aWZ5LFxyXG4gICAgICB1cGRhdGVNb2RlOnVwZGF0ZU1vZGUsXHJcbiAgICAgIG5leHQ6ZmFsc2UsXHJcbiAgICAgIHJlc2V0Rm9ybTpmYWxzZSxcclxuICAgICAgcmVzZXRSZXNwb25jZTpmYWxzZSxcclxuICAgICAgc3VjY2Vzc0FjdGlvbjpmYWxzZSxcclxuICAgICAgZGF0YUxpc3RGb3JVcGxvYWQ6ZGF0YUxpc3RGb3JVcGxvYWQsXHJcbiAgICAgIHNhdmVSZXNwb25jZURhdGE6c2F2ZVJlc3BvbmNlRGF0YSxcclxuICAgICAgY3VzdG1pemVkRm9ybVZhbHVlOmN1c3RtaXplZEZvcm1WYWx1ZSxcclxuICAgICAgbW9kaWZ5Q3VzdG1pemVkRm9ybVZhbHVlOm1vZGlmeUN1c3RtaXplZEZvcm1WYWx1ZSxcclxuICAgICAgZGF0YVNhdmVJblByb2dyZXNzOmRhdGFTYXZlSW5Qcm9ncmVzcyxcclxuICAgICAgaXNTdGVwcGVyOmlzU3RlcHBlcixcclxuICAgICAgY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZTpjb21wbGV0ZV9vYmplY3RfcGF5bG9hZF9tb2RlLFxyXG4gICAgICBwdWJsaWM6e1xyXG4gICAgICAgIGNoZWNrOmZhbHNlLFxyXG4gICAgICAgIGdldEZvcm1EYXRhOnt9LFxyXG4gICAgICAgIHVybDpcIlwiXHJcbiAgICAgIH1cclxuICAgIH0gIFxyXG4gICAgaWYgKHNhdmVGcm9tRGF0YVJzcG9uY2UpIHtcclxuICAgICAgaWYgKHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2VzcyAmJiBzYXZlRnJvbURhdGFSc3BvbmNlLnN1Y2Nlc3MgIT0gJycgJiYgcmVzdWx0LnNob3dOb3RpZnkpIHtcclxuICAgICAgICBpZiAoc2F2ZUZyb21EYXRhUnNwb25jZS5zdWNjZXNzID09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgaWYoY3VycmVudEFjdGlvbkJ1dHRvbiAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2sgJiYgY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLnN1Y2Nlc3NfbXNnICYmIGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljay5zdWNjZXNzX21zZyAhPSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljay5zdWNjZXNzX21zZztcclxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UuY2xhc3MgPSBcImJnLXN1Y2Nlc3NcIjtcclxuICAgICAgICAgIH1lbHNlIGlmKHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2Vzc19tc2cgJiYgc2F2ZUZyb21EYXRhUnNwb25jZS5zdWNjZXNzX21zZyAhPSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IHNhdmVGcm9tRGF0YVJzcG9uY2Uuc3VjY2Vzc19tc2c7XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYocmVzdWx0LnVwZGF0ZU1vZGUpe1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiIEZvcm0gRGF0YSBVcGRhdGUgc3VjY2Vzc2Z1bGwgISEhXCI7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiIEZvcm0gRGF0YSBTYXZlIHN1Y2Nlc3NmdWxsICEhIVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihyZXN1bHQudXBkYXRlTW9kZSl7XHJcbiAgICAgICAgICAgIGlmKG5leHRJbmRleCl7XHJcbiAgICAgICAgICAgICAgcmVzdWx0Lm5leHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICByZXN1bHQucmVzZXRGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXN1bHQudXBkYXRlTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5jdXN0bWl6ZWRGb3JtVmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0Lm1vZGlmeUN1c3RtaXplZEZvcm1WYWx1ZSA9IHt9O1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5yZXNldEZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmRhdGFMaXN0Rm9yVXBsb2FkID0ge31cclxuICAgICAgICAgIHJlc3VsdC5zYXZlUmVzcG9uY2VEYXRhID0gc2F2ZUZyb21EYXRhUnNwb25jZS5kYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmVudlNlcnZpY2UuZ2V0UmVxdWVzdFR5cGUoKSA9PSAnUFVCTElDJyl7XHJcbiAgICAgICAgICByZXN1bHQuY29tcGxldGVfb2JqZWN0X3BheWxvYWRfbW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmVzdWx0LnB1YmxpYy5jaGVjayA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgX2lkID0gcmVzdWx0LnNhdmVSZXNwb25jZURhdGFbXCJfaWRcIl07XHJcbiAgICAgICAgICBpZih0aGlzLmNvcmVGdW5jdGlvblNlcnZpY2UuaXNOb3RCbGFuayhmb3JtW1wiZGV0YWlsc1wiXSkgJiYgdGhpcy5jb3JlRnVuY3Rpb25TZXJ2aWNlLmlzTm90QmxhbmsoZm9ybVtcImRldGFpbHNcIl1bXCJvbl9zdWNjZXNzX3VybF9rZXlcIl0gIT0gXCJcIikpe1xyXG4gICAgICAgICAgICBsZXQgcHVibGljX2tleSA9IGZvcm1bXCJkZXRhaWxzXCJdW1wib25fc3VjY2Vzc191cmxfa2V5XCJdXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgXCJvYmpcIjpwdWJsaWNfa2V5LFxyXG4gICAgICAgICAgICAgIFwia2V5XCI6X2lkLFxyXG4gICAgICAgICAgICAgIFwia2V5MVwiOiBcImtleTJcIixcclxuICAgICAgICAgICAgICBcImtleTJcIiA6IFwia2V5M1wiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBwYXlsb2FkZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZURhdGFGb3JtU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkZGF0YSxcclxuICAgICAgICAgICAgICBfaWQ6X2lkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0Rm9ybURhdGEuZGF0YT1kYXRhO1xyXG4gICAgICAgICAgICByZXN1bHQucHVibGljLmdldEZvcm1EYXRhID0gZ2V0Rm9ybURhdGE7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hcGlTZXJ2aWNlLkdldEZvcm0oZ2V0Rm9ybURhdGEpO1xyXG4gICAgICAgICAgICBsZXQgbmF2aWdhdGlvbl91cmwgPSBcInBibC9cIitwdWJsaWNfa2V5K1wiL1wiK19pZCtcIi9pZTA5L2NuZjAwdlwiO1xyXG4gICAgICAgICAgICByZXN1bHQucHVibGljLnVybCA9IG5hdmlnYXRpb25fdXJsO1xyXG4gICAgICAgICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFtuYXZpZ2F0aW9uX3VybF0pO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdWJsaWMudXJsID0gXCJob21lX3BhZ2VcIjtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJob21lX3BhZ2VcIl0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnN1Y2Nlc3NBY3Rpb24gPSB0cnVlO1xyXG4gICAgICB9ZWxzZSBpZiAoc2F2ZUZyb21EYXRhUnNwb25jZS5lcnJvciAmJiBzYXZlRnJvbURhdGFSc3BvbmNlLmVycm9yICE9ICcnICYmIHJlc3VsdC5zaG93Tm90aWZ5KSB7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UubXNnID0gc2F2ZUZyb21EYXRhUnNwb25jZS5lcnJvcjtcclxuICAgICAgICByZXN1bHQubWVzc2FnZS5jbGFzcyA9IFwiYmctZGFuZ2VyXCI7XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgIH1lbHNlIGlmIChzYXZlRnJvbURhdGFSc3BvbmNlLmNvbmZpcm1hdGlvblJlcXVpcmVkICYmIHNhdmVGcm9tRGF0YVJzcG9uY2UuY29uZmlybWF0aW9uUmVxdWlyZWQgIT0gJycgJiYgcmVzdWx0LnNob3dOb3RpZnkpIHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZS5tc2cgPSBzYXZlRnJvbURhdGFSc3BvbmNlLmNvbmZpcm1hdGlvblJlcXVpcmVkO1xyXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy13YXJuaW5nXCI7XHJcbiAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICByZXN1bHQuZGF0YVNhdmVJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICByZXN1bHQucmVzZXRSZXNwb25jZSA9IHRydWU7XHJcbiAgICAgICAgcmVzdWx0LnNhdmVEdXBsaWNhdGVEYXRhPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgaWYocmVzdWx0LnNob3dOb3RpZnkpe1xyXG4gICAgICAgICAgcmVzdWx0LnNob3dOb3RpZnkgPSBmYWxzZTtcclxuICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLm1zZyA9IFwiTm8gZGF0YSByZXR1cm5cIjtcclxuICAgICAgICAgIHJlc3VsdC5tZXNzYWdlLmNsYXNzID0gXCJiZy1kYW5nZXJcIjtcclxuICAgICAgICAgIHJlc3VsdC5kYXRhU2F2ZUluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNoZWNrT25TdWNjZXNzQWN0aW9uKGN1cnJlbnRBY3Rpb25CdXR0b246YW55LGZvcm1zOmFueSl7XHJcbiAgICBsZXQgcmVzcG9uY2UgPXtcclxuICAgICAgYWN0aW9uVmFsdWUgOiAnJyxcclxuICAgICAgaW5kZXggOiAtMVxyXG4gICAgfVxyXG5cclxuICAgIGlmKGN1cnJlbnRBY3Rpb25CdXR0b24ub25jbGljayAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2sgIT0gbnVsbCAmJiBjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2suYWN0aW9uX25hbWUgJiYgY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLmFjdGlvbl9uYW1lICE9IG51bGwpe1xyXG4gICAgICBpZihjdXJyZW50QWN0aW9uQnV0dG9uLm9uY2xpY2suYWN0aW9uX25hbWUgIT0gJycpe1xyXG4gICAgICAgIHJlc3BvbmNlLmFjdGlvblZhbHVlID0gY3VycmVudEFjdGlvbkJ1dHRvbi5vbmNsaWNrLmFjdGlvbl9uYW1lO1xyXG4gICAgICAgIGlmKHJlc3BvbmNlLmFjdGlvblZhbHVlICE9ICcnKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKGZvcm1zKS5mb3JFYWNoKChrZXksaSkgPT4ge1xyXG4gICAgICAgICAgICBpZihrZXkgPT0gcmVzcG9uY2UuYWN0aW9uVmFsdWUpe1xyXG4gICAgICAgICAgICAgIHJlc3BvbmNlLmluZGV4ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uY2U7XHJcbiAgfTtcclxuICBzZXRHcmlkRmlsdGVyRGF0YShncmlkRmlsdGVyRGF0YTphbnksdGFiRmlsdGVyRGF0YTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgdGFiRmlsdGVyRGF0YTp0YWJGaWx0ZXJEYXRhXHJcbiAgICB9XHJcbiAgICBpZiAoZ3JpZEZpbHRlckRhdGEpIHtcclxuICAgICAgaWYgKGdyaWRGaWx0ZXJEYXRhLmRhdGEgJiYgZ3JpZEZpbHRlckRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzdWx0LnRhYkZpbHRlckRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyaWRGaWx0ZXJEYXRhLmRhdGEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQudGFiRmlsdGVyRGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRhYkZpbHRlckRhdGE7XHJcbiAgfVxyXG4gIHNldFR5cGVhaGVhZERhdGEoZGF0YTphbnksdHlwZUFoZWFkRGF0YTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgdHlwZUFoZWFkRGF0YTp0eXBlQWhlYWREYXRhXHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmVzdWx0LnR5cGVBaGVhZERhdGEgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0LnR5cGVBaGVhZERhdGEgPSBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHlwZUFoZWFkRGF0YTtcclxuICB9XHJcbn1cclxuIl19
|