kwikid-forms 0.6.35 → 0.6.36
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/bundles/kwikid-forms.umd.js +10 -23
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/renderer/config-converter/config-converter.helper.js +11 -7
- package/esm2015/lib/renderer/form-view/form-view.api.service.js +1 -19
- package/fesm2015/kwikid-forms.js +10 -23
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { TuiDay } from "@taiga-ui/cdk";
|
|
2
1
|
import { checkObjectKeyExists, isObject } from "kwikid-toolkit";
|
|
3
2
|
import { convertFormFieldTypeDateToKwikUIFormat } from "../form-view/helpers/form-view.fields.helper";
|
|
4
3
|
export const getFormFields = (formConfig) => {
|
|
@@ -29,21 +28,26 @@ export const setFieldAsFormElement = (field, value) => {
|
|
|
29
28
|
};
|
|
30
29
|
export const getMinDate = (field) => {
|
|
31
30
|
if (checkObjectKeyExists(field, "min")) {
|
|
31
|
+
/**
|
|
32
|
+
* This is to handler old version of config.
|
|
33
|
+
* Please don't add "min" at field level, add it insider field.properties only.
|
|
34
|
+
*/
|
|
32
35
|
return convertFormFieldTypeDateToKwikUIFormat(field["min"]);
|
|
33
36
|
}
|
|
34
37
|
else {
|
|
35
|
-
return
|
|
38
|
+
return {};
|
|
36
39
|
}
|
|
37
40
|
};
|
|
38
41
|
export const getMaxDate = (field) => {
|
|
39
42
|
if (checkObjectKeyExists(field, "max")) {
|
|
43
|
+
/**
|
|
44
|
+
* This is to handler old version of config.
|
|
45
|
+
* Please don't add "max" at field level, add it insider field.properties only.
|
|
46
|
+
*/
|
|
40
47
|
return convertFormFieldTypeDateToKwikUIFormat(field["max"]);
|
|
41
48
|
}
|
|
42
49
|
else {
|
|
43
|
-
return
|
|
44
|
-
new Date().getMonth(), // Month - 11 (0 Indexing)
|
|
45
|
-
new Date().getDate() // Day - 31
|
|
46
|
-
);
|
|
50
|
+
return {};
|
|
47
51
|
}
|
|
48
52
|
};
|
|
49
53
|
export const updateLanguage = (object, language) => {
|
|
@@ -61,4 +65,4 @@ export const getLanguage = () => {
|
|
|
61
65
|
var _a, _b, _c, _d, _e, _f;
|
|
62
66
|
return ((_f = (_e = (_d = (_c = (_b = (_a = localStorage.getItem("lng")) !== null && _a !== void 0 ? _a : localStorage.getItem("lang")) !== null && _b !== void 0 ? _b : localStorage.getItem("Lang")) !== null && _c !== void 0 ? _c : localStorage.getItem("language")) !== null && _d !== void 0 ? _d : localStorage.getItem("currentLang")) !== null && _e !== void 0 ? _e : localStorage.getItem("selectedLang")) !== null && _f !== void 0 ? _f : "en");
|
|
63
67
|
};
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWNvbnZlcnRlci5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9yZW5kZXJlci9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFlLEVBQVMsRUFBRTtJQUN0RCxJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7SUFFdkIsSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDakQsTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ3RDO1NBQU0sSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDckQsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUNyQyxLQUFVLEVBQ1YsR0FBVyxFQUNYLEtBQVUsRUFDTCxFQUFFO0lBQ1AsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNyQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQVUsRUFBRSxHQUFXLEVBQUUsS0FBVSxFQUFPLEVBQUU7SUFDM0UsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUVuQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBVSxFQUFPLEVBQUU7SUFDbkQsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBVSxFQUFFLEtBQWMsRUFBTyxFQUFFO0lBQ3ZFLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFVLEVBQU8sRUFBRTtJQUM1QyxJQUFJLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN0Qzs7O1dBR0c7UUFFSCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzdEO1NBQU07UUFDTCxPQUFPLEVBQUUsQ0FBQztLQUNYO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBVSxFQUFPLEVBQUU7SUFDNUMsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDdEM7OztXQUdHO1FBRUgsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM3RDtTQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQVcsRUFBRSxRQUFnQixFQUFFLEVBQUU7SUFDOUQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDcEIsSUFBSSxRQUFRLElBQUksb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3RELE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7O0lBQzlCLE9BQU8sQ0FDTCxNQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsTUFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsbUNBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG1DQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQ0FDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsbUNBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLG1DQUNwQyxJQUFJLENBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNoZWNrT2JqZWN0S2V5RXhpc3RzLCBpc09iamVjdCB9IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydEZvcm1GaWVsZFR5cGVEYXRlVG9Ld2lrVUlGb3JtYXQgfSBmcm9tIFwiLi4vZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmZpZWxkcy5oZWxwZXJcIjtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1GaWVsZHMgPSAoZm9ybUNvbmZpZzogYW55KTogYW55W10gPT4ge1xuICBsZXQgZmllbGRzOiBhbnlbXSA9IFtdO1xuXG4gIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcIm11bHRpRm9ybVwiKSkge1xuICAgIGZpZWxkcyA9IGZvcm1Db25maWcubXVsdGlGb3JtLmZpZWxkcztcbiAgfSBlbHNlIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgIGZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xuICB9XG5cbiAgcmV0dXJuIGZpZWxkcztcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRNaXNzaW5nRmllbGRLZXlWYWx1ZSA9IChcbiAgZmllbGQ6IGFueSxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IGFueSA9PiB7XG4gIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIGtleSkpIHtcbiAgICBmaWVsZFtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEZpZWxkS2V5VmFsdWUgPSAoZmllbGQ6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xuICBmaWVsZFtrZXldID0gdmFsdWU7XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEZpZWxkS2V5SGlkZGVuID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICByZXR1cm4gc2V0TWlzc2luZ0ZpZWxkS2V5VmFsdWUoZmllbGQsIFwiaGlkZGVuXCIsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRGaWVsZEFzRm9ybUVsZW1lbnQgPSAoZmllbGQ6IGFueSwgdmFsdWU6IGJvb2xlYW4pOiBhbnkgPT4ge1xuICByZXR1cm4gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJpc0Zvcm1FbGVtZW50XCIsIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNaW5EYXRlID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibWluXCIpKSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0byBoYW5kbGVyIG9sZCB2ZXJzaW9uIG9mIGNvbmZpZy5cbiAgICAgKiAgUGxlYXNlIGRvbid0IGFkZCBcIm1pblwiIGF0IGZpZWxkIGxldmVsLCBhZGQgaXQgaW5zaWRlciBmaWVsZC5wcm9wZXJ0aWVzIG9ubHkuXG4gICAgICovXG5cbiAgICByZXR1cm4gY29udmVydEZvcm1GaWVsZFR5cGVEYXRlVG9Ld2lrVUlGb3JtYXQoZmllbGRbXCJtaW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heERhdGUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJtYXhcIikpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRvIGhhbmRsZXIgb2xkIHZlcnNpb24gb2YgY29uZmlnLlxuICAgICAqICBQbGVhc2UgZG9uJ3QgYWRkIFwibWF4XCIgYXQgZmllbGQgbGV2ZWwsIGFkZCBpdCBpbnNpZGVyIGZpZWxkLnByb3BlcnRpZXMgb25seS5cbiAgICAgKi9cblxuICAgIHJldHVybiBjb252ZXJ0Rm9ybUZpZWxkVHlwZURhdGVUb0t3aWtVSUZvcm1hdChmaWVsZFtcIm1heFwiXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlTGFuZ3VhZ2UgPSAob2JqZWN0OiBhbnksIGxhbmd1YWdlOiBzdHJpbmcpID0+IHtcbiAgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAobGFuZ3VhZ2UgJiYgY2hlY2tPYmplY3RLZXlFeGlzdHMob2JqZWN0LCBsYW5ndWFnZSkpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtsYW5ndWFnZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtcImVuXCJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGFuZ3VhZ2UgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsbmdcIikgPz9cbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmdcIikgPz9cbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkxhbmdcIikgPz9cbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID8/XG4gICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjdXJyZW50TGFuZ1wiKSA/P1xuICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2VsZWN0ZWRMYW5nXCIpID8/XG4gICAgXCJlblwiXG4gICk7XG59O1xuIl19
|
|
@@ -48,26 +48,20 @@ export class KwikIDFormViewApiService {
|
|
|
48
48
|
// Function to verify the signature
|
|
49
49
|
verifySignature(data, header, url, isVerifySignature) {
|
|
50
50
|
return new Promise((resolve, reject) => {
|
|
51
|
-
// Log the function call for verification
|
|
52
|
-
console.log("Verify Signature: Function Called For", url, header);
|
|
53
51
|
// Check if the signature is disabled
|
|
54
52
|
if (!isVerifySignature) {
|
|
55
|
-
console.log("Verify Signature: Authentication Disabled");
|
|
56
53
|
resolve(true);
|
|
57
54
|
}
|
|
58
55
|
// Check if data is invalid
|
|
59
56
|
else if (!data) {
|
|
60
|
-
console.log("Verify Signature: Data Not Available");
|
|
61
57
|
resolve(true);
|
|
62
58
|
}
|
|
63
59
|
// Check if the signature is missing in headers when authentication is not skipped
|
|
64
60
|
else if (isVerifySignature && header && !(header === null || header === void 0 ? void 0 : header.sig)) {
|
|
65
|
-
console.log("Verify Signature Failure: Signature Not Present in Headers");
|
|
66
61
|
reject(false);
|
|
67
62
|
}
|
|
68
63
|
// Verify the signature when public key and header with signature are present and authentication is not skipped
|
|
69
64
|
else if (isVerifySignature && header && (header === null || header === void 0 ? void 0 : header.sig)) {
|
|
70
|
-
console.log("Verify Signature: Signature Present in Headers");
|
|
71
65
|
// Extract the signature and decode it
|
|
72
66
|
let signature = header.sig.split(".")[0];
|
|
73
67
|
let rawSignature = atob(signature);
|
|
@@ -82,30 +76,22 @@ export class KwikIDFormViewApiService {
|
|
|
82
76
|
let dateCheck = dateValue < parseInt(exp);
|
|
83
77
|
// Check if the signature matches the data
|
|
84
78
|
let res = signature === data;
|
|
85
|
-
console.log("Verify Signature: Matching", signature, data);
|
|
86
|
-
console.log("Verify Signature: Time", dateValue, parseInt(exp), parseInt(exp) - dateValue);
|
|
87
|
-
console.log("Verify Signature: Date", new Date(dateValue), new Date(parseInt(exp)));
|
|
88
|
-
console.log("Verify Signature: Signature Converted to Required Format");
|
|
89
79
|
// Resolve the promise if the signature is valid and the date check passes
|
|
90
80
|
if (res && dateCheck) {
|
|
91
|
-
console.log("Verify Signature Success");
|
|
92
81
|
resolve(res);
|
|
93
82
|
}
|
|
94
83
|
else {
|
|
95
84
|
// Reject the promise if the signature is invalid or the date check fails
|
|
96
|
-
console.log("Verify Signature Failure: Signature did not match");
|
|
97
85
|
reject(res);
|
|
98
86
|
}
|
|
99
87
|
}
|
|
100
88
|
else {
|
|
101
89
|
// Reject the promise if the signature is not in the required format
|
|
102
|
-
console.log("Verify Signature Failure: Signature Not Converted to Required Format");
|
|
103
90
|
reject(false);
|
|
104
91
|
}
|
|
105
92
|
}
|
|
106
93
|
else {
|
|
107
94
|
// Resolve the promise if the signature is missing in headers
|
|
108
|
-
console.log("Verify Signature Failure: Signature Not Present in Headers");
|
|
109
95
|
resolve(true);
|
|
110
96
|
}
|
|
111
97
|
});
|
|
@@ -132,7 +118,6 @@ export class KwikIDFormViewApiService {
|
|
|
132
118
|
const encryptedResponse = data;
|
|
133
119
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
134
120
|
data = JSON.parse(decryptedResponse);
|
|
135
|
-
console.log("Decrypted Response", data);
|
|
136
121
|
res.data = data;
|
|
137
122
|
}
|
|
138
123
|
// Verify signature and handle response
|
|
@@ -152,7 +137,6 @@ export class KwikIDFormViewApiService {
|
|
|
152
137
|
const encryptedResponse = data;
|
|
153
138
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
154
139
|
data = JSON.parse(decryptedResponse);
|
|
155
|
-
console.log("Decrypted Response", data);
|
|
156
140
|
err.response.data = data;
|
|
157
141
|
}
|
|
158
142
|
// Verify signature and handle response
|
|
@@ -184,7 +168,6 @@ export class KwikIDFormViewApiService {
|
|
|
184
168
|
const encryptedResponse = data;
|
|
185
169
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
186
170
|
data = JSON.parse(decryptedResponse);
|
|
187
|
-
console.log("Decrypted Response", data);
|
|
188
171
|
res.data = data;
|
|
189
172
|
}
|
|
190
173
|
// Verify signature and handle response
|
|
@@ -204,7 +187,6 @@ export class KwikIDFormViewApiService {
|
|
|
204
187
|
const encryptedResponse = data;
|
|
205
188
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
206
189
|
data = JSON.parse(decryptedResponse);
|
|
207
|
-
console.log("Decrypted Response", data);
|
|
208
190
|
err.response.data = data;
|
|
209
191
|
}
|
|
210
192
|
// Verify signature and handle response
|
|
@@ -253,4 +235,4 @@ __decorate([
|
|
|
253
235
|
__decorate([
|
|
254
236
|
logMethod
|
|
255
237
|
], KwikIDFormViewApiService.prototype, "get", null);
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxFQUNkLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkM7UUFGUSxhQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFckQsQ0FBQztJQUVoQixxQ0FBcUM7SUFFckMsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFOUMsNERBQTREO1lBQzVELEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO2dCQUM3QixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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dCB7XG4gIGRlY3J5cHRXaXRoQUVTLFxuICBlbmNyeXB0V2l0aEFFUyxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBsb2dNZXRob2Rcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5cbmV4cG9ydCBjbGFzcyBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2Uge1xuICBwcml2YXRlIGJ5dGVjb2RlID0gWzB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzhdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvLyBGdW5jdGlvbiB0byBkZXJpdmUgbG9naWMgZnJvbSBkYXRhXG4gIEBsb2dNZXRob2RcbiAgZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSB7XG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgY29uc3QgY2hhckNvdW50cyA9IHt9O1xuICAgICAgY29uc3QgdGFyZ2V0Q2hhcmFjdGVycyA9IFtcImFcIiwgXCJpXCIsIFwicFwiLCBcInRcIl07XG5cbiAgICAgIC8vIENvdW50IG9jY3VycmVuY2VzIG9mIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZSBkYXRhIHN0cmluZ1xuICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGRhdGFTdHJpbmcpIHtcbiAgICAgICAgaWYgKHRhcmdldENoYXJhY3RlcnMuaW5jbHVkZXMoY2hhcikpIHtcbiAgICAgICAgICBjaGFyQ291bnRzW2NoYXJdID0gKGNoYXJDb3VudHNbY2hhcl0gfHwgMCkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnN0cnVjdCB0aGUgb3V0cHV0IHN0cmluZyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyIGNvdW50c1xuICAgICAgY29uc3Qgb3V0cHV0U3RyaW5nID0gdGFyZ2V0Q2hhcmFjdGVyc1xuICAgICAgICAubWFwKChjaGFyKSA9PiBjaGFyICsgKGNoYXJDb3VudHNbY2hhcl0gfHwgMCkpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgcmV0dXJuIG91dHB1dFN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBwcmVwcm9jZXNzIGhlYWRlciBkYXRhXG4gIEBsb2dNZXRob2RcbiAgcHJlUHJvY2Vzc0hlYWRlcihoZWFkZXJEYXRhOiBhbnksIGlzVmVyaWZ5U2lnbmF0dXJlOiBib29sZWFuKTogYW55IHtcbiAgICBpZiAoIWhlYWRlckRhdGEpIGhlYWRlckRhdGEgPSB7fTtcbiAgICBpZiAoIWhlYWRlckRhdGEuaGVhZGVycykgaGVhZGVyRGF0YVtcImhlYWRlcnNcIl0gPSB7fTtcblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIgaWYgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZFxuICAgIGlmIChpc1ZlcmlmeVNpZ25hdHVyZSkge1xuICAgICAgaGVhZGVyRGF0YVtcImhlYWRlcnNcIl1bXCJ4cmlkXCJdID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gUmV0cmlldmUgc2Vzc2lvbiBJRCBmcm9tIGxvY2FsIHN0b3JhZ2UgYW5kIGFkZCBpdCB0byBoZWFkZXJzXG4gICAgbGV0IHNlc3Npb25faWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNlc3Npb25faWRcIik7XG4gICAgaWYgKHNlc3Npb25faWQpIGhlYWRlckRhdGFbXCJoZWFkZXJzXCJdW1wic2VzXCJdID0gc2Vzc2lvbl9pZDtcblxuICAgIHJldHVybiBoZWFkZXJEYXRhO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAgQGxvZ01ldGhvZFxuICB2ZXJpZnlTaWduYXR1cmUoZGF0YSwgaGVhZGVyLCB1cmwsIGlzVmVyaWZ5U2lnbmF0dXJlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIExvZyB0aGUgZnVuY3Rpb24gY2FsbCBmb3IgdmVyaWZpY2F0aW9uXG4gICAgICBjb25zb2xlLmxvZyhcIlZlcmlmeSBTaWduYXR1cmU6IEZ1bmN0aW9uIENhbGxlZCBGb3JcIiwgdXJsLCBoZWFkZXIpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIGlzIGRpc2FibGVkXG4gICAgICBpZiAoIWlzVmVyaWZ5U2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiVmVyaWZ5IFNpZ25hdHVyZTogQXV0aGVudGljYXRpb24gRGlzYWJsZWRcIik7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgaW52YWxpZFxuICAgICAgZWxzZSBpZiAoIWRhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlOiBEYXRhIE5vdCBBdmFpbGFibGVcIik7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgaXMgbWlzc2luZyBpbiBoZWFkZXJzIHdoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IHNraXBwZWRcbiAgICAgIGVsc2UgaWYgKGlzVmVyaWZ5U2lnbmF0dXJlICYmIGhlYWRlciAmJiAhaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBOb3QgUHJlc2VudCBpbiBIZWFkZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoZSBzaWduYXR1cmUgd2hlbiBwdWJsaWMga2V5IGFuZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYXJlIHByZXNlbnQgYW5kIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBza2lwcGVkXG4gICAgICBlbHNlIGlmIChpc1ZlcmlmeVNpZ25hdHVyZSAmJiBoZWFkZXIgJiYgaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlOiBTaWduYXR1cmUgUHJlc2VudCBpbiBIZWFkZXJzXCIpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNpZ25hdHVyZSBhbmQgZGVjb2RlIGl0XG4gICAgICAgIGxldCBzaWduYXR1cmUgPSBoZWFkZXIuc2lnLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgbGV0IHJhd1NpZ25hdHVyZSA9IGF0b2Ioc2lnbmF0dXJlKTtcblxuICAgICAgICAvLyBTcGxpdCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgdG8gZ2V0IHRoZSBwYXJ0c1xuICAgICAgICBzaWduYXR1cmUgPSByYXdTaWduYXR1cmUuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICBsZXQgZXhwID0gcmF3U2lnbmF0dXJlLnNwbGl0KFwiLlwiKVsxXSArIFwiMDAwXCI7IC8vIEV4cGlyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICAgICAgbGV0IGlhdCA9IHJhd1NpZ25hdHVyZS5zcGxpdChcIi5cIilbMl0gKyBcIjAwMFwiOyAvLyBJc3N1ZWQgYXQgdGltZSBpbiBtaWxsaXNlY29uZHNcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkXG4gICAgICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB0aW1lIGlzIGJlZm9yZSB0aGUgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgICAgICAgbGV0IGRhdGVDaGVjayA9IGRhdGVWYWx1ZSA8IHBhcnNlSW50KGV4cCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIGRhdGFcbiAgICAgICAgICBsZXQgcmVzID0gc2lnbmF0dXJlID09PSBkYXRhO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVmVyaWZ5IFNpZ25hdHVyZTogTWF0Y2hpbmdcIiwgc2lnbmF0dXJlLCBkYXRhKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiVmVyaWZ5IFNpZ25hdHVyZTogVGltZVwiLFxuICAgICAgICAgICAgZGF0ZVZhbHVlLFxuICAgICAgICAgICAgcGFyc2VJbnQoZXhwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGV4cCkgLSBkYXRlVmFsdWVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcIlZlcmlmeSBTaWduYXR1cmU6IERhdGVcIixcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVWYWx1ZSksXG4gICAgICAgICAgICBuZXcgRGF0ZShwYXJzZUludChleHApKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiVmVyaWZ5IFNpZ25hdHVyZTogU2lnbmF0dXJlIENvbnZlcnRlZCB0byBSZXF1aXJlZCBGb3JtYXRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgYW5kIHRoZSBkYXRlIGNoZWNrIHBhc3Nlc1xuICAgICAgICAgIGlmIChyZXMgJiYgZGF0ZUNoZWNrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZlcmlmeSBTaWduYXR1cmUgU3VjY2Vzc1wiKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZCBvciB0aGUgZGF0ZSBjaGVjayBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBkaWQgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgcmVqZWN0KHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGUgc2lnbmF0dXJlIGlzIG5vdCBpbiB0aGUgcmVxdWlyZWQgZm9ybWF0XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcIlZlcmlmeSBTaWduYXR1cmUgRmFpbHVyZTogU2lnbmF0dXJlIE5vdCBDb252ZXJ0ZWQgdG8gUmVxdWlyZWQgRm9ybWF0XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgaWYgdGhlIHNpZ25hdHVyZSBpcyBtaXNzaW5nIGluIGhlYWRlcnNcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBOb3QgUHJlc2VudCBpbiBIZWFkZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gUE9TVCByZXF1ZXN0XG4gIEBsb2dNZXRob2RcbiAgcG9zdChcbiAgICB1cmwsXG4gICAgYm9keSxcbiAgICBoZWFkZXJEYXRhLFxuICAgIGlzRW5jcnlwdCA9IGZhbHNlLFxuICAgIGlzRGVjcnlwdCA9IGZhbHNlLFxuICAgIGlzVmVyaWZ5U2lnbmF0dXJlID0gZmFsc2UsXG4gICAgaXNTa2lwSGVhZGVyQWx0ZXJhdGlvbiA9IGZhbHNlXG4gICkge1xuICAgIGxldCBwcmVQcm9jZXNzZWRIZWFkZXIgPSBoZWFkZXJEYXRhO1xuXG4gICAgLy8gUHJlcHJvY2VzcyBoZWFkZXIgZGF0YSB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBza2lwXG4gICAgaWYgKCFpc1NraXBIZWFkZXJBbHRlcmF0aW9uKSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXIgPSB0aGlzLnByZVByb2Nlc3NIZWFkZXIoaGVhZGVyRGF0YSwgaXNWZXJpZnlTaWduYXR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXJbXCJvYnNlcnZlXCJdID0gXCJyZXNwb25zZVwiO1xuICAgIH1cblxuICAgIC8vIEVuY3J5cHQgYm9keSBpZiByZXF1aXJlZFxuICAgIGlmIChpc0VuY3J5cHQpIHtcbiAgICAgIGJvZHkgPSBlbmNyeXB0V2l0aEFFUyhKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBheGlvcy5wb3N0KHVybCwgYm9keSwgaGVhZGVyRGF0YSkudGhlbihcbiAgICAgICAgYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gcmVzW1wiZGF0YVwiXTtcblxuICAgICAgICAgIC8vIERlY3J5cHQgcmVzcG9uc2UgaWYgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc0RlY3J5cHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZFJlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZFJlc3BvbnNlID0gYXdhaXQgZGVjcnlwdFdpdGhBRVMoZW5jcnlwdGVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGVjcnlwdGVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEZWNyeXB0ZWQgUmVzcG9uc2VcIiwgZGF0YSk7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBhbmQgaGFuZGxlIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgICAgICB0aGlzLmRhdGFEZXJpdmF0aXZlTG9naWMoZGF0YSksXG4gICAgICAgICAgICByZXM/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IGVycj8ucmVzcG9uc2U/LmRhdGE7XG5cbiAgICAgICAgICAvLyBEZWNyeXB0IGVycm9yIHJlc3BvbnNlIGlmIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGVjcnlwdGVkIFJlc3BvbnNlXCIsIGRhdGEpO1xuICAgICAgICAgICAgZXJyLnJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZlcmlmeSBzaWduYXR1cmUgYW5kIGhhbmRsZSByZXNwb25zZVxuICAgICAgICAgIHRoaXMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgICAgdGhpcy5kYXRhRGVyaXZhdGl2ZUxvZ2ljKGRhdGEpLFxuICAgICAgICAgICAgZXJyPy5yZXNwb25zZT8uaGVhZGVycyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGlzVmVyaWZ5U2lnbmF0dXJlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKHZlcmlmaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyPy5yZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gR0VUIHJlcXVlc3RcbiAgQGxvZ01ldGhvZFxuICBnZXQoXG4gICAgdXJsLFxuICAgIGhlYWRlckRhdGEgPSB1bmRlZmluZWQsXG4gICAgaXNEZWNyeXB0ID0gZmFsc2UsXG4gICAgaXNWZXJpZnlTaWduYXR1cmUgPSBmYWxzZSxcbiAgICBpc1NraXBIZWFkZXJBbHRlcmF0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IHByZVByb2Nlc3NlZEhlYWRlciA9IGhlYWRlckRhdGE7XG5cbiAgICAvLyBQcmVwcm9jZXNzIGhlYWRlciBkYXRhIHVubGVzcyBpbnN0cnVjdGVkIHRvIHNraXBcbiAgICBpZiAoIWlzU2tpcEhlYWRlckFsdGVyYXRpb24pIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlciA9IHRoaXMucHJlUHJvY2Vzc0hlYWRlcihoZWFkZXJEYXRhLCBpc1ZlcmlmeVNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlcltcIm9ic2VydmVcIl0gPSBcInJlc3BvbnNlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBheGlvcy5nZXQodXJsLCBwcmVQcm9jZXNzZWRIZWFkZXIpLnRoZW4oXG4gICAgICAgIGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gcmVzW1wiZGF0YVwiXTtcblxuICAgICAgICAgIC8vIERlY3J5cHQgcmVzcG9uc2UgaWYgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGVjcnlwdGVkIFJlc3BvbnNlXCIsIGRhdGEpO1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZlcmlmeSBzaWduYXR1cmUgYW5kIGhhbmRsZSByZXNwb25zZVxuICAgICAgICAgIHRoaXMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgICAgdGhpcy5kYXRhRGVyaXZhdGl2ZUxvZ2ljKGRhdGEpLFxuICAgICAgICAgICAgcmVzPy5oZWFkZXJzLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigodmVyaWZpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSBlcnI/LnJlc3BvbnNlPy5kYXRhO1xuXG4gICAgICAgICAgLy8gRGVjcnlwdCBlcnJvciByZXNwb25zZSBpZiByZXF1aXJlZFxuICAgICAgICAgIGlmIChkYXRhICYmIGlzRGVjcnlwdCkge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkUmVzcG9uc2UgPSBhd2FpdCBkZWNyeXB0V2l0aEFFUyhlbmNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkZWNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRlY3J5cHRlZCBSZXNwb25zZVwiLCBkYXRhKTtcbiAgICAgICAgICAgIGVyci5yZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2lnbmF0dXJlIGFuZCBoYW5kbGUgcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICAgIHRoaXMuZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSxcbiAgICAgICAgICAgIGVycj8ucmVzcG9uc2U/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBleGVjdXRlIEFQSSBjYWxsIGJhc2VkIG9uIG1ldGhvZCB0eXBlXG4gIGV4ZWN1dGVBcGlDYWxsKFxuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIGlzRW5jcnlwdCxcbiAgICBpc0RlY3J5cHQsXG4gICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09IFwiR0VUXCIpIHtcbiAgICAgICAgdGhpcy5nZXQoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc3QoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH0sXG4gICAgICAgICAgaXNFbmNyeXB0LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxFQUNkLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkM7UUFGUSxhQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFckQsQ0FBQztJQUVoQixxQ0FBcUM7SUFFckMsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFOUMsNERBQTREO1lBQzVELEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO2dCQUM3QixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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Q1QsaUJBQWlCO1FBRWpCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQ04sR0FBRyxFQUNILEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLENBQ2xCLENBQUMsU0FBUyxDQUNULENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixDQUFDLENBQ0YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQ1AsR0FBRyxFQUNILElBQUksRUFDSixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFDcEIsU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsQ0FDbEIsQ0FBQyxTQUFTLENBQ1QsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FDRixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVTQztJQURDLFNBQVM7bUVBc0JUO0FBSUQ7SUFEQyxTQUFTO2dFQWVUO0FBSUQ7SUFEQyxTQUFTOytEQXVEVDtBQUlEO0lBREMsU0FBUztvREErRVQ7QUFJRDtJQURDLFNBQVM7bURBd0VUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgZGVjcnlwdFdpdGhBRVMsXG4gIGVuY3J5cHRXaXRoQUVTLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGxvZ01ldGhvZFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcblxuZXhwb3J0IGNsYXNzIEt3aWtJREZvcm1WaWV3QXBpU2VydmljZSB7XG4gIHByaXZhdGUgYnl0ZWNvZGUgPSBbMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOF07XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8vIEZ1bmN0aW9uIHRvIGRlcml2ZSBsb2dpYyBmcm9tIGRhdGFcbiAgQGxvZ01ldGhvZFxuICBkYXRhRGVyaXZhdGl2ZUxvZ2ljKGRhdGEpIHtcbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGRhdGEpKSB7XG4gICAgICBjb25zdCBkYXRhU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICBjb25zdCBjaGFyQ291bnRzID0ge307XG4gICAgICBjb25zdCB0YXJnZXRDaGFyYWN0ZXJzID0gW1wiYVwiLCBcImlcIiwgXCJwXCIsIFwidFwiXTtcblxuICAgICAgLy8gQ291bnQgb2NjdXJyZW5jZXMgb2YgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhlIGRhdGEgc3RyaW5nXG4gICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgZGF0YVN0cmluZykge1xuICAgICAgICBpZiAodGFyZ2V0Q2hhcmFjdGVycy5pbmNsdWRlcyhjaGFyKSkge1xuICAgICAgICAgIGNoYXJDb3VudHNbY2hhcl0gPSAoY2hhckNvdW50c1tjaGFyXSB8fCAwKSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29uc3RydWN0IHRoZSBvdXRwdXQgc3RyaW5nIGJhc2VkIG9uIHRoZSBjaGFyYWN0ZXIgY291bnRzXG4gICAgICBjb25zdCBvdXRwdXRTdHJpbmcgPSB0YXJnZXRDaGFyYWN0ZXJzXG4gICAgICAgIC5tYXAoKGNoYXIpID0+IGNoYXIgKyAoY2hhckNvdW50c1tjaGFyXSB8fCAwKSlcbiAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICByZXR1cm4gb3V0cHV0U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHByZXByb2Nlc3MgaGVhZGVyIGRhdGFcbiAgQGxvZ01ldGhvZFxuICBwcmVQcm9jZXNzSGVhZGVyKGhlYWRlckRhdGE6IGFueSwgaXNWZXJpZnlTaWduYXR1cmU6IGJvb2xlYW4pOiBhbnkge1xuICAgIGlmICghaGVhZGVyRGF0YSkgaGVhZGVyRGF0YSA9IHt9O1xuICAgIGlmICghaGVhZGVyRGF0YS5oZWFkZXJzKSBoZWFkZXJEYXRhW1wiaGVhZGVyc1wiXSA9IHt9O1xuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBpZiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4gICAgaWYgKGlzVmVyaWZ5U2lnbmF0dXJlKSB7XG4gICAgICBoZWFkZXJEYXRhW1wiaGVhZGVyc1wiXVtcInhyaWRcIl0gPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICAvLyBSZXRyaWV2ZSBzZXNzaW9uIElEIGZyb20gbG9jYWwgc3RvcmFnZSBhbmQgYWRkIGl0IHRvIGhlYWRlcnNcbiAgICBsZXQgc2Vzc2lvbl9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2Vzc2lvbl9pZFwiKTtcbiAgICBpZiAoc2Vzc2lvbl9pZCkgaGVhZGVyRGF0YVtcImhlYWRlcnNcIl1bXCJzZXNcIl0gPSBzZXNzaW9uX2lkO1xuXG4gICAgcmV0dXJuIGhlYWRlckRhdGE7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZVxuICBAbG9nTWV0aG9kXG4gIHZlcmlmeVNpZ25hdHVyZShkYXRhLCBoZWFkZXIsIHVybCwgaXNWZXJpZnlTaWduYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNpZ25hdHVyZSBpcyBkaXNhYmxlZFxuICAgICAgaWYgKCFpc1ZlcmlmeVNpZ25hdHVyZSkge1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXRhIGlzIGludmFsaWRcbiAgICAgIGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgaXMgbWlzc2luZyBpbiBoZWFkZXJzIHdoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IHNraXBwZWRcbiAgICAgIGVsc2UgaWYgKGlzVmVyaWZ5U2lnbmF0dXJlICYmIGhlYWRlciAmJiAhaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoZSBzaWduYXR1cmUgd2hlbiBwdWJsaWMga2V5IGFuZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYXJlIHByZXNlbnQgYW5kIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBza2lwcGVkXG4gICAgICBlbHNlIGlmIChpc1ZlcmlmeVNpZ25hdHVyZSAmJiBoZWFkZXIgJiYgaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgc2lnbmF0dXJlIGFuZCBkZWNvZGUgaXRcbiAgICAgICAgbGV0IHNpZ25hdHVyZSA9IGhlYWRlci5zaWcuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICBsZXQgcmF3U2lnbmF0dXJlID0gYXRvYihzaWduYXR1cmUpO1xuXG4gICAgICAgIC8vIFNwbGl0IHRoZSBkZWNvZGVkIHNpZ25hdHVyZSB0byBnZXQgdGhlIHBhcnRzXG4gICAgICAgIHNpZ25hdHVyZSA9IHJhd1NpZ25hdHVyZS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIGxldCBleHAgPSByYXdTaWduYXR1cmUuc3BsaXQoXCIuXCIpWzFdICsgXCIwMDBcIjsgLy8gRXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICBsZXQgaWF0ID0gcmF3U2lnbmF0dXJlLnNwbGl0KFwiLlwiKVsyXSArIFwiMDAwXCI7IC8vIElzc3VlZCBhdCB0aW1lIGluIG1pbGxpc2Vjb25kc1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWRcbiAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHRpbWUgaXMgYmVmb3JlIHRoZSBleHBpcmF0aW9uIHRpbWVcbiAgICAgICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICAgICAgICBsZXQgZGF0ZUNoZWNrID0gZGF0ZVZhbHVlIDwgcGFyc2VJbnQoZXhwKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgZGF0YVxuICAgICAgICAgIGxldCByZXMgPSBzaWduYXR1cmUgPT09IGRhdGE7XG5cbiAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgYW5kIHRoZSBkYXRlIGNoZWNrIHBhc3Nlc1xuICAgICAgICAgIGlmIChyZXMgJiYgZGF0ZUNoZWNrKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQgb3IgdGhlIGRhdGUgY2hlY2sgZmFpbHNcbiAgICAgICAgICAgIHJlamVjdChyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2UgaWYgdGhlIHNpZ25hdHVyZSBpcyBub3QgaW4gdGhlIHJlcXVpcmVkIGZvcm1hdFxuXG4gICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSBpZiB0aGUgc2lnbmF0dXJlIGlzIG1pc3NpbmcgaW4gaGVhZGVyc1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gcGVyZm9ybSBQT1NUIHJlcXVlc3RcbiAgQGxvZ01ldGhvZFxuICBwb3N0KFxuICAgIHVybCxcbiAgICBib2R5LFxuICAgIGhlYWRlckRhdGEsXG4gICAgaXNFbmNyeXB0ID0gZmFsc2UsXG4gICAgaXNEZWNyeXB0ID0gZmFsc2UsXG4gICAgaXNWZXJpZnlTaWduYXR1cmUgPSBmYWxzZSxcbiAgICBpc1NraXBIZWFkZXJBbHRlcmF0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IHByZVByb2Nlc3NlZEhlYWRlciA9IGhlYWRlckRhdGE7XG5cbiAgICAvLyBQcmVwcm9jZXNzIGhlYWRlciBkYXRhIHVubGVzcyBpbnN0cnVjdGVkIHRvIHNraXBcbiAgICBpZiAoIWlzU2tpcEhlYWRlckFsdGVyYXRpb24pIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlciA9IHRoaXMucHJlUHJvY2Vzc0hlYWRlcihoZWFkZXJEYXRhLCBpc1ZlcmlmeVNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlcltcIm9ic2VydmVcIl0gPSBcInJlc3BvbnNlXCI7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdCBib2R5IGlmIHJlcXVpcmVkXG4gICAgaWYgKGlzRW5jcnlwdCkge1xuICAgICAgYm9keSA9IGVuY3J5cHRXaXRoQUVTKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGF4aW9zLnBvc3QodXJsLCBib2R5LCBoZWFkZXJEYXRhKS50aGVuKFxuICAgICAgICBhc3luYyAocmVzKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSByZXNbXCJkYXRhXCJdO1xuXG4gICAgICAgICAgLy8gRGVjcnlwdCByZXNwb25zZSBpZiByZXF1aXJlZFxuICAgICAgICAgIGlmIChkYXRhICYmIGlzRGVjcnlwdCkge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkUmVzcG9uc2UgPSBhd2FpdCBkZWNyeXB0V2l0aEFFUyhlbmNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkZWNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBhbmQgaGFuZGxlIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgICAgICB0aGlzLmRhdGFEZXJpdmF0aXZlTG9naWMoZGF0YSksXG4gICAgICAgICAgICByZXM/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IGVycj8ucmVzcG9uc2U/LmRhdGE7XG5cbiAgICAgICAgICAvLyBEZWNyeXB0IGVycm9yIHJlc3BvbnNlIGlmIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGVyci5yZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2lnbmF0dXJlIGFuZCBoYW5kbGUgcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICAgIHRoaXMuZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSxcbiAgICAgICAgICAgIGVycj8ucmVzcG9uc2U/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBwZXJmb3JtIEdFVCByZXF1ZXN0XG4gIEBsb2dNZXRob2RcbiAgZ2V0KFxuICAgIHVybCxcbiAgICBoZWFkZXJEYXRhID0gdW5kZWZpbmVkLFxuICAgIGlzRGVjcnlwdCA9IGZhbHNlLFxuICAgIGlzVmVyaWZ5U2lnbmF0dXJlID0gZmFsc2UsXG4gICAgaXNTa2lwSGVhZGVyQWx0ZXJhdGlvbiA9IGZhbHNlXG4gICkge1xuICAgIGxldCBwcmVQcm9jZXNzZWRIZWFkZXIgPSBoZWFkZXJEYXRhO1xuXG4gICAgLy8gUHJlcHJvY2VzcyBoZWFkZXIgZGF0YSB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBza2lwXG4gICAgaWYgKCFpc1NraXBIZWFkZXJBbHRlcmF0aW9uKSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXIgPSB0aGlzLnByZVByb2Nlc3NIZWFkZXIoaGVhZGVyRGF0YSwgaXNWZXJpZnlTaWduYXR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXJbXCJvYnNlcnZlXCJdID0gXCJyZXNwb25zZVwiO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgYXhpb3MuZ2V0KHVybCwgcHJlUHJvY2Vzc2VkSGVhZGVyKS50aGVuKFxuICAgICAgICBhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IHJlc1tcImRhdGFcIl07XG5cbiAgICAgICAgICAvLyBEZWNyeXB0IHJlc3BvbnNlIGlmIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGlzRGVjcnlwdCkge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkUmVzcG9uc2UgPSBhd2FpdCBkZWNyeXB0V2l0aEFFUyhlbmNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkZWNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBhbmQgaGFuZGxlIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgICAgICB0aGlzLmRhdGFEZXJpdmF0aXZlTG9naWMoZGF0YSksXG4gICAgICAgICAgICByZXM/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IGVycj8ucmVzcG9uc2U/LmRhdGE7XG5cbiAgICAgICAgICAvLyBEZWNyeXB0IGVycm9yIHJlc3BvbnNlIGlmIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGVyci5yZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2lnbmF0dXJlIGFuZCBoYW5kbGUgcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICAgIHRoaXMuZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSxcbiAgICAgICAgICAgIGVycj8ucmVzcG9uc2U/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBleGVjdXRlIEFQSSBjYWxsIGJhc2VkIG9uIG1ldGhvZCB0eXBlXG4gIGV4ZWN1dGVBcGlDYWxsKFxuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIGlzRW5jcnlwdCxcbiAgICBpc0RlY3J5cHQsXG4gICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09IFwiR0VUXCIpIHtcbiAgICAgICAgdGhpcy5nZXQoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc3QoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH0sXG4gICAgICAgICAgaXNFbmNyeXB0LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/fesm2015/kwikid-forms.js
CHANGED
|
@@ -843,21 +843,26 @@ const setFieldAsFormElement = (field, value) => {
|
|
|
843
843
|
};
|
|
844
844
|
const getMinDate = (field) => {
|
|
845
845
|
if (checkObjectKeyExists(field, "min")) {
|
|
846
|
+
/**
|
|
847
|
+
* This is to handler old version of config.
|
|
848
|
+
* Please don't add "min" at field level, add it insider field.properties only.
|
|
849
|
+
*/
|
|
846
850
|
return convertFormFieldTypeDateToKwikUIFormat(field["min"]);
|
|
847
851
|
}
|
|
848
852
|
else {
|
|
849
|
-
return
|
|
853
|
+
return {};
|
|
850
854
|
}
|
|
851
855
|
};
|
|
852
856
|
const getMaxDate = (field) => {
|
|
853
857
|
if (checkObjectKeyExists(field, "max")) {
|
|
858
|
+
/**
|
|
859
|
+
* This is to handler old version of config.
|
|
860
|
+
* Please don't add "max" at field level, add it insider field.properties only.
|
|
861
|
+
*/
|
|
854
862
|
return convertFormFieldTypeDateToKwikUIFormat(field["max"]);
|
|
855
863
|
}
|
|
856
864
|
else {
|
|
857
|
-
return
|
|
858
|
-
new Date().getMonth(), // Month - 11 (0 Indexing)
|
|
859
|
-
new Date().getDate() // Day - 31
|
|
860
|
-
);
|
|
865
|
+
return {};
|
|
861
866
|
}
|
|
862
867
|
};
|
|
863
868
|
const updateLanguage = (object, language) => {
|
|
@@ -2743,26 +2748,20 @@ class KwikIDFormViewApiService {
|
|
|
2743
2748
|
// Function to verify the signature
|
|
2744
2749
|
verifySignature(data, header, url, isVerifySignature) {
|
|
2745
2750
|
return new Promise((resolve, reject) => {
|
|
2746
|
-
// Log the function call for verification
|
|
2747
|
-
console.log("Verify Signature: Function Called For", url, header);
|
|
2748
2751
|
// Check if the signature is disabled
|
|
2749
2752
|
if (!isVerifySignature) {
|
|
2750
|
-
console.log("Verify Signature: Authentication Disabled");
|
|
2751
2753
|
resolve(true);
|
|
2752
2754
|
}
|
|
2753
2755
|
// Check if data is invalid
|
|
2754
2756
|
else if (!data) {
|
|
2755
|
-
console.log("Verify Signature: Data Not Available");
|
|
2756
2757
|
resolve(true);
|
|
2757
2758
|
}
|
|
2758
2759
|
// Check if the signature is missing in headers when authentication is not skipped
|
|
2759
2760
|
else if (isVerifySignature && header && !(header === null || header === void 0 ? void 0 : header.sig)) {
|
|
2760
|
-
console.log("Verify Signature Failure: Signature Not Present in Headers");
|
|
2761
2761
|
reject(false);
|
|
2762
2762
|
}
|
|
2763
2763
|
// Verify the signature when public key and header with signature are present and authentication is not skipped
|
|
2764
2764
|
else if (isVerifySignature && header && (header === null || header === void 0 ? void 0 : header.sig)) {
|
|
2765
|
-
console.log("Verify Signature: Signature Present in Headers");
|
|
2766
2765
|
// Extract the signature and decode it
|
|
2767
2766
|
let signature = header.sig.split(".")[0];
|
|
2768
2767
|
let rawSignature = atob(signature);
|
|
@@ -2777,30 +2776,22 @@ class KwikIDFormViewApiService {
|
|
|
2777
2776
|
let dateCheck = dateValue < parseInt(exp);
|
|
2778
2777
|
// Check if the signature matches the data
|
|
2779
2778
|
let res = signature === data;
|
|
2780
|
-
console.log("Verify Signature: Matching", signature, data);
|
|
2781
|
-
console.log("Verify Signature: Time", dateValue, parseInt(exp), parseInt(exp) - dateValue);
|
|
2782
|
-
console.log("Verify Signature: Date", new Date(dateValue), new Date(parseInt(exp)));
|
|
2783
|
-
console.log("Verify Signature: Signature Converted to Required Format");
|
|
2784
2779
|
// Resolve the promise if the signature is valid and the date check passes
|
|
2785
2780
|
if (res && dateCheck) {
|
|
2786
|
-
console.log("Verify Signature Success");
|
|
2787
2781
|
resolve(res);
|
|
2788
2782
|
}
|
|
2789
2783
|
else {
|
|
2790
2784
|
// Reject the promise if the signature is invalid or the date check fails
|
|
2791
|
-
console.log("Verify Signature Failure: Signature did not match");
|
|
2792
2785
|
reject(res);
|
|
2793
2786
|
}
|
|
2794
2787
|
}
|
|
2795
2788
|
else {
|
|
2796
2789
|
// Reject the promise if the signature is not in the required format
|
|
2797
|
-
console.log("Verify Signature Failure: Signature Not Converted to Required Format");
|
|
2798
2790
|
reject(false);
|
|
2799
2791
|
}
|
|
2800
2792
|
}
|
|
2801
2793
|
else {
|
|
2802
2794
|
// Resolve the promise if the signature is missing in headers
|
|
2803
|
-
console.log("Verify Signature Failure: Signature Not Present in Headers");
|
|
2804
2795
|
resolve(true);
|
|
2805
2796
|
}
|
|
2806
2797
|
});
|
|
@@ -2827,7 +2818,6 @@ class KwikIDFormViewApiService {
|
|
|
2827
2818
|
const encryptedResponse = data;
|
|
2828
2819
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
2829
2820
|
data = JSON.parse(decryptedResponse);
|
|
2830
|
-
console.log("Decrypted Response", data);
|
|
2831
2821
|
res.data = data;
|
|
2832
2822
|
}
|
|
2833
2823
|
// Verify signature and handle response
|
|
@@ -2847,7 +2837,6 @@ class KwikIDFormViewApiService {
|
|
|
2847
2837
|
const encryptedResponse = data;
|
|
2848
2838
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
2849
2839
|
data = JSON.parse(decryptedResponse);
|
|
2850
|
-
console.log("Decrypted Response", data);
|
|
2851
2840
|
err.response.data = data;
|
|
2852
2841
|
}
|
|
2853
2842
|
// Verify signature and handle response
|
|
@@ -2879,7 +2868,6 @@ class KwikIDFormViewApiService {
|
|
|
2879
2868
|
const encryptedResponse = data;
|
|
2880
2869
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
2881
2870
|
data = JSON.parse(decryptedResponse);
|
|
2882
|
-
console.log("Decrypted Response", data);
|
|
2883
2871
|
res.data = data;
|
|
2884
2872
|
}
|
|
2885
2873
|
// Verify signature and handle response
|
|
@@ -2899,7 +2887,6 @@ class KwikIDFormViewApiService {
|
|
|
2899
2887
|
const encryptedResponse = data;
|
|
2900
2888
|
const decryptedResponse = yield decryptWithAES(encryptedResponse);
|
|
2901
2889
|
data = JSON.parse(decryptedResponse);
|
|
2902
|
-
console.log("Decrypted Response", data);
|
|
2903
2890
|
err.response.data = data;
|
|
2904
2891
|
}
|
|
2905
2892
|
// Verify signature and handle response
|