bx-rest 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/consts/part-name-metods.d.ts +11 -0
  2. package/esm2020/consts/part-name-metods.mjs +12 -0
  3. package/esm2020/functions/serializeJavascript.mjs +200 -0
  4. package/esm2020/public-api.mjs +3 -3
  5. package/esm2020/{rest → request}/bx-rest.module.mjs +1 -1
  6. package/esm2020/request/user/user.mjs +263 -0
  7. package/esm2020/services/base.mjs +3 -3
  8. package/esm2020/services/http/HttpBX.mjs +128 -0
  9. package/esm2020/services/http/HttpData.mjs +124 -0
  10. package/esm2020/services/http/base/base.mjs +29 -0
  11. package/esm2020/services/http/base/http.mjs +28 -0
  12. package/esm2020/services/http/http.mjs +135 -0
  13. package/esm2020/services/http/sessionKey.mjs +180 -0
  14. package/esm2020/services/map/base.mjs +14 -0
  15. package/esm2020/services/map/rest/user.mjs +89 -0
  16. package/esm2020/services/snack-bar/snack-bar.service.mjs +42 -0
  17. package/esm2020/services/snack-bar/toast-message/toast-message.component.mjs +31 -0
  18. package/esm2020/services/vanilla/JSON.mjs +20 -0
  19. package/esm2020/services/vanilla/localStorage.mjs +35 -0
  20. package/esm2020/services/vanilla//321/201ookies.mjs +44 -0
  21. package/esm2020/store/auth.mjs +26 -0
  22. package/esm2020/store/users.mjs +67 -0
  23. package/esm2020/typification/auth/save.mjs +2 -0
  24. package/esm2020/typification/rest/api-lib.mjs +21 -0
  25. package/esm2020/typification/rest/base/YesNo.mjs +2 -0
  26. package/esm2020/typification/rest/base/httpAnswerBX.mjs +2 -0
  27. package/esm2020/typification/rest/batch/batchRequestParam.mjs +2 -0
  28. package/esm2020/typification/rest/lib.mjs +2 -0
  29. package/esm2020/typification/rest/settings.mjs +2 -0
  30. package/esm2020/typification/rest/support/param.mjs +2 -0
  31. package/esm2020/typification/rest/user/CustomUserFieldInfo.mjs +2 -0
  32. package/esm2020/typification/rest/user/UserFilterSearch.mjs +2 -0
  33. package/esm2020/typification/rest/user/get.mjs +2 -0
  34. package/esm2020/typification/rest/user/user.mjs +2 -0
  35. package/esm2020/typification/rest/user/userFilter.mjs +2 -0
  36. package/fesm2015/bx-rest.mjs +344 -15
  37. package/fesm2015/bx-rest.mjs.map +1 -1
  38. package/fesm2020/bx-rest.mjs +344 -15
  39. package/fesm2020/bx-rest.mjs.map +1 -1
  40. package/functions/serializeJavascript.d.ts +2 -0
  41. package/package.json +1 -1
  42. package/public-api.d.ts +2 -2
  43. package/request/user/user.d.ts +60 -0
  44. package/services/http/HttpBX.d.ts +26 -0
  45. package/services/http/HttpData.d.ts +13 -0
  46. package/services/http/base/base.d.ts +16 -0
  47. package/services/http/base/http.d.ts +7 -0
  48. package/services/http/http.d.ts +31 -0
  49. package/services/http/sessionKey.d.ts +34 -0
  50. package/services/map/base.d.ts +6 -0
  51. package/services/map/rest/user.d.ts +12 -0
  52. package/services/snack-bar/snack-bar.service.d.ts +12 -0
  53. package/services/snack-bar/toast-message/toast-message.component.d.ts +16 -0
  54. package/services/vanilla/JSON.d.ts +7 -0
  55. package/services/vanilla/localStorage.d.ts +10 -0
  56. package/services/vanilla//321/201ookies.d.ts +9 -0
  57. package/store/auth.d.ts +20 -0
  58. package/store/users.d.ts +34 -0
  59. package/typification/auth/save.d.ts +14 -0
  60. package/typification/rest/api-lib.d.ts +9 -0
  61. package/typification/rest/base/YesNo.d.ts +1 -0
  62. package/typification/rest/base/httpAnswerBX.d.ts +15 -0
  63. package/typification/rest/batch/batchRequestParam.d.ts +16 -0
  64. package/typification/rest/lib.d.ts +18 -0
  65. package/typification/rest/settings.d.ts +6 -0
  66. package/typification/rest/support/param.d.ts +5 -0
  67. package/typification/rest/user/CustomUserFieldInfo.d.ts +56 -0
  68. package/typification/rest/user/UserFilterSearch.d.ts +43 -0
  69. package/typification/rest/user/get.d.ts +13 -0
  70. package/typification/rest/user/user.d.ts +62 -0
  71. package/typification/rest/user/userFilter.d.ts +13 -0
  72. package/bx-rest.service.d.ts +0 -6
  73. package/esm2020/bx-rest.service.mjs +0 -14
  74. /package/{rest → request}/bx-rest.module.d.ts +0 -0
@@ -0,0 +1,11 @@
1
+ export declare const $get = "get";
2
+ export declare const $add = "add";
3
+ export declare const $set = "set";
4
+ export declare const $event = "event";
5
+ export declare const $update = "update";
6
+ export declare const $user = "user";
7
+ export declare const $task = "task";
8
+ export declare const $calendar = "calendar";
9
+ export declare const $meeting = "meeting";
10
+ export declare const $list = "list";
11
+ export declare const $search = "search";
@@ -0,0 +1,12 @@
1
+ export const $get = 'get';
2
+ export const $add = 'add';
3
+ export const $set = 'set';
4
+ export const $event = 'event';
5
+ export const $update = 'update';
6
+ export const $user = 'user';
7
+ export const $task = 'task';
8
+ export const $calendar = 'calendar';
9
+ export const $meeting = 'meeting';
10
+ export const $list = 'list';
11
+ export const $search = 'search';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydC1uYW1lLW1ldG9kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL2NvbnN0cy9wYXJ0LW5hbWUtbWV0b2RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUE7QUFDekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQTtBQUN6QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFBO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUE7QUFDN0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQTtBQUMvQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFBO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUE7QUFDM0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQTtBQUNuQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFBO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUE7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCAkZ2V0ID0gJ2dldCdcclxuZXhwb3J0IGNvbnN0ICRhZGQgPSAnYWRkJ1xyXG5leHBvcnQgY29uc3QgJHNldCA9ICdzZXQnXHJcbmV4cG9ydCBjb25zdCAkZXZlbnQgPSAnZXZlbnQnXHJcbmV4cG9ydCBjb25zdCAkdXBkYXRlID0gJ3VwZGF0ZSdcclxuZXhwb3J0IGNvbnN0ICR1c2VyID0gJ3VzZXInXHJcbmV4cG9ydCBjb25zdCAkdGFzayA9ICd0YXNrJ1xyXG5leHBvcnQgY29uc3QgJGNhbGVuZGFyID0gJ2NhbGVuZGFyJ1xyXG5leHBvcnQgY29uc3QgJG1lZXRpbmcgPSAnbWVldGluZydcclxuZXhwb3J0IGNvbnN0ICRsaXN0ID0gJ2xpc3QnXHJcbmV4cG9ydCBjb25zdCAkc2VhcmNoID0gJ3NlYXJjaCdcclxuIl19
@@ -0,0 +1,200 @@
1
+ // Generate an internal UID to make the regexp pattern harder to guess.
2
+ const UID_LENGTH = 16;
3
+ const UID = generateUID();
4
+ const PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"', 'g');
5
+ const IS_NATIVE_CODE_REGEXP = /\{\s*\[native code]\s*}/g;
6
+ const IS_PURE_FUNCTION = /function.*?\(/;
7
+ const IS_ARROW_FUNCTION = /.*?=>.*?/;
8
+ const UNSAFE_CHARS_REGEXP = /[<>\/\u2028\u2029]/g;
9
+ const RESERVED_SYMBOLS = ['*', 'async'];
10
+ // Mapping of unsafe HTML and invalid JavaScript line terminator chars to their
11
+ // Unicode char counterparts which are safe to use in JavaScript strings.
12
+ const ESCAPED_CHARS = {
13
+ '<': '\\u003C',
14
+ '>': '\\u003E',
15
+ '/': '\\u002F',
16
+ '\u2028': '\\u2028',
17
+ '\u2029': '\\u2029'
18
+ };
19
+ function escapeUnsafeChars(unsafeChar) {
20
+ return (ESCAPED_CHARS.hasOwnProperty(unsafeChar)) ? ESCAPED_CHARS[unsafeChar] : '';
21
+ }
22
+ function generateUID() {
23
+ let bytes = window.crypto.getRandomValues(new Uint32Array(UID_LENGTH));
24
+ let result = '';
25
+ for (let i = 0; i < UID_LENGTH; ++i) {
26
+ result += bytes[i].toString(16);
27
+ }
28
+ return result;
29
+ }
30
+ function deleteFunctions(obj) {
31
+ let functionKeys = [];
32
+ for (let key in obj) {
33
+ if (typeof obj[key] === "function") {
34
+ functionKeys.push(key);
35
+ }
36
+ }
37
+ for (let i = 0; i < functionKeys.length; i++) {
38
+ delete obj[functionKeys[i]];
39
+ }
40
+ }
41
+ function serialize(obj, options = {}) {
42
+ // Backwards-compatibility for `space` as the second argument.
43
+ if (typeof options === 'number' || typeof options === 'string') {
44
+ options = { space: options };
45
+ }
46
+ let functions = [];
47
+ let regexps = [];
48
+ let dates = [];
49
+ let maps = [];
50
+ let sets = [];
51
+ let arrays = [];
52
+ let undefs = [];
53
+ let infinities = [];
54
+ let bigInts = [];
55
+ let urls = [];
56
+ // Returns placeholders for functions and regexps (identified by index)
57
+ // which are later replaced by their string representation.
58
+ function replacer(key, value) {
59
+ // For nested function
60
+ if (options.ignoreFunction) {
61
+ deleteFunctions(value);
62
+ }
63
+ if (!value && value !== undefined) {
64
+ return value;
65
+ }
66
+ // let origValue: any = this[key];
67
+ let origValue = value;
68
+ let type = typeof origValue;
69
+ switch (type) {
70
+ case 'object':
71
+ if (origValue instanceof RegExp) {
72
+ return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';
73
+ }
74
+ else if (origValue instanceof Date) {
75
+ return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';
76
+ }
77
+ else if (origValue instanceof Map) {
78
+ return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';
79
+ }
80
+ else if (origValue instanceof Set) {
81
+ return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';
82
+ }
83
+ if (origValue instanceof Array) {
84
+ let isSparse = origValue.filter(function () {
85
+ return true;
86
+ }).length !== origValue.length;
87
+ if (isSparse) {
88
+ return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';
89
+ }
90
+ }
91
+ if (origValue instanceof URL) {
92
+ return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';
93
+ }
94
+ break;
95
+ case 'function':
96
+ return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';
97
+ case 'undefined':
98
+ return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';
99
+ case 'number':
100
+ return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';
101
+ case 'bigint':
102
+ return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';
103
+ }
104
+ return value;
105
+ }
106
+ function serializeFunc(fn) {
107
+ let serializedFn = fn.toString();
108
+ if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {
109
+ throw new TypeError('Serializing native function: ' + fn.name);
110
+ }
111
+ // pure functions, example: {key: function() {}}
112
+ if (IS_PURE_FUNCTION.test(serializedFn)) {
113
+ return serializedFn;
114
+ }
115
+ // arrow functions, example: arg1 => arg1+5
116
+ if (IS_ARROW_FUNCTION.test(serializedFn)) {
117
+ return serializedFn;
118
+ }
119
+ let argsStartsAt = serializedFn.indexOf('(');
120
+ let def = serializedFn.slice(0, argsStartsAt)
121
+ .trim()
122
+ .split(' ')
123
+ .filter(function (val) {
124
+ return val.length > 0;
125
+ });
126
+ let nonReservedSymbols = def.filter(function (val) {
127
+ return RESERVED_SYMBOLS.indexOf(val) === -1;
128
+ });
129
+ // enhanced literal objects, example: {key() {}}
130
+ if (nonReservedSymbols.length > 0) {
131
+ return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'
132
+ + (def.join('').indexOf('*') > -1 ? '*' : '')
133
+ + serializedFn.slice(argsStartsAt);
134
+ }
135
+ // arrow functions
136
+ return serializedFn;
137
+ }
138
+ // Check if the parameter is function
139
+ if (options.ignoreFunction && typeof obj === "function") {
140
+ obj = undefined;
141
+ }
142
+ // Protects against `JSON.stringify()` returning `undefined`, by serializing
143
+ // to the literal string: "undefined".
144
+ if (obj === undefined) {
145
+ return String(obj);
146
+ }
147
+ let str = '';
148
+ // Creates a JSON string representation of the value.
149
+ // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.
150
+ if (options.isJSON && !options.space) {
151
+ str = JSON.stringify(obj);
152
+ }
153
+ else {
154
+ str = JSON.stringify(obj, options.isJSON ? undefined : replacer, options.space);
155
+ }
156
+ // Replace unsafe HTML and invalid JavaScript line terminator chars with
157
+ // their safe Unicode char counterpart. This _must_ happen before the
158
+ // regexps and functions are serialized and added back to the string.
159
+ if (options.unsafe !== true) {
160
+ str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);
161
+ }
162
+ if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {
163
+ return str;
164
+ }
165
+ // Replaces all occurrences of function, regexp, date, map and set placeholders in the
166
+ // JSON string with their string representations. If the original value can
167
+ // not be found, then `undefined` is used.
168
+ return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {
169
+ // The placeholder may not be preceded by a backslash. This is to prevent
170
+ // replacing things like `"a\"@__R-<UID>-0__@"` and thus outputting
171
+ // invalid JS.
172
+ if (backSlash) {
173
+ return match;
174
+ }
175
+ switch (type) {
176
+ case 'D':
177
+ return "new Date(\"" + dates[valueIndex].toISOString() + "\")";
178
+ case 'R':
179
+ return "new RegExp(" + serialize(regexps[valueIndex].source) + ", \"" + regexps[valueIndex].flags + "\")";
180
+ case 'M':
181
+ return "new Map(" + serialize(Array.from(maps[valueIndex].entries()), options) + ")";
182
+ case 'S':
183
+ return "new Set(" + serialize(Array.from(sets[valueIndex].values()), options) + ")";
184
+ case 'A':
185
+ return "Array.prototype.slice.call(" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + ")";
186
+ case 'U':
187
+ return 'undefined';
188
+ case 'I':
189
+ return infinities[valueIndex];
190
+ case 'B':
191
+ return "BigInt(\"" + bigInts[valueIndex] + "\")";
192
+ case 'L':
193
+ return "new URL(\"" + urls[valueIndex].toString() + "\")";
194
+ }
195
+ let fn = functions[valueIndex];
196
+ return serializeFunc(fn);
197
+ });
198
+ }
199
+ export default serialize;
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplSmF2YXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL2Z1bmN0aW9ucy9zZXJpYWxpemVKYXZhc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXZHLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFDekMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXhDLCtFQUErRTtBQUMvRSx5RUFBeUU7QUFDekUsTUFBTSxhQUFhLEdBQTZCO0lBQzlDLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsU0FBUztJQUNkLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFFRixTQUFTLGlCQUFpQixDQUFDLFVBQWtCO0lBQzNDLE9BQU8sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLFdBQVc7SUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxX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QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZUFBZSxTQUFTLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZSBhbiBpbnRlcm5hbCBVSUQgdG8gbWFrZSB0aGUgcmVnZXhwIHBhdHRlcm4gaGFyZGVyIHRvIGd1ZXNzLlxuY29uc3QgVUlEX0xFTkdUSCA9IDE2O1xuY29uc3QgVUlEID0gZ2VuZXJhdGVVSUQoKTtcbmNvbnN0IFBMQUNFX0hPTERFUl9SRUdFWFAgPSBuZXcgUmVnRXhwKCcoXFxcXFxcXFwpP1wiQF9fKEZ8UnxEfE18U3xBfFV8SXxCfEwpLScgKyBVSUQgKyAnLShcXFxcZCspX19AXCInLCAnZycpO1xuXG5jb25zdCBJU19OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXVxccyp9L2c7XG5jb25zdCBJU19QVVJFX0ZVTkNUSU9OID0gL2Z1bmN0aW9uLio/XFwoLztcbmNvbnN0IElTX0FSUk9XX0ZVTkNUSU9OID0gLy4qPz0+Lio/LztcbmNvbnN0IFVOU0FGRV9DSEFSU19SRUdFWFAgPSAvWzw+XFwvXFx1MjAyOFxcdTIwMjldL2c7XG5cbmNvbnN0IFJFU0VSVkVEX1NZTUJPTFMgPSBbJyonLCAnYXN5bmMnXTtcblxuLy8gTWFwcGluZyBvZiB1bnNhZmUgSFRNTCBhbmQgaW52YWxpZCBKYXZhU2NyaXB0IGxpbmUgdGVybWluYXRvciBjaGFycyB0byB0aGVpclxuLy8gVW5pY29kZSBjaGFyIGNvdW50ZXJwYXJ0cyB3aGljaCBhcmUgc2FmZSB0byB1c2UgaW4gSmF2YVNjcmlwdCBzdHJpbmdzLlxuY29uc3QgRVNDQVBFRF9DSEFSUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gID0ge1xuICAnPCc6ICdcXFxcdTAwM0MnLFxuICAnPic6ICdcXFxcdTAwM0UnLFxuICAnLyc6ICdcXFxcdTAwMkYnLFxuICAnXFx1MjAyOCc6ICdcXFxcdTIwMjgnLFxuICAnXFx1MjAyOSc6ICdcXFxcdTIwMjknXG59O1xuXG5mdW5jdGlvbiBlc2NhcGVVbnNhZmVDaGFycyh1bnNhZmVDaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKEVTQ0FQRURfQ0hBUlMuaGFzT3duUHJvcGVydHkodW5zYWZlQ2hhcikpID8gRVNDQVBFRF9DSEFSU1t1bnNhZmVDaGFyXSA6ICcnO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVJRCgpIHtcbiAgbGV0IGJ5dGVzID0gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFVJRF9MRU5HVEgpKVxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgVUlEX0xFTkdUSDsgKytpKSB7XG4gICAgcmVzdWx0ICs9IGJ5dGVzW2ldLnRvU3RyaW5nKDE2KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBkZWxldGVGdW5jdGlvbnMob2JqOiBhbnkpIHtcbiAgbGV0IGZ1bmN0aW9uS2V5cyA9IFtdO1xuICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBmdW5jdGlvbktleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmN0aW9uS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlbGV0ZSBvYmpbZnVuY3Rpb25LZXlzW2ldXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqOiBhbnksIG9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgLy8gQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIGBzcGFjZWAgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge3NwYWNlOiBvcHRpb25zfTtcbiAgfVxuXG4gIGxldCBmdW5jdGlvbnM6IEZ1bmN0aW9uW10gPSBbXTtcbiAgbGV0IHJlZ2V4cHM6IGFueVtdID0gW107XG4gIGxldCBkYXRlczogYW55W10gPSBbXTtcbiAgbGV0IG1hcHM6IGFueVtdID0gW107XG4gIGxldCBzZXRzOiBhbnlbXSA9IFtdO1xuICBsZXQgYXJyYXlzOiBhbnlbXSA9IFtdO1xuICBsZXQgdW5kZWZzOiBhbnlbXSA9IFtdO1xuICBsZXQgaW5maW5pdGllczogYW55W10gPSBbXTtcbiAgbGV0IGJpZ0ludHM6IGFueVtdID0gW107XG4gIGxldCB1cmxzOiBhbnlbXSA9IFtdO1xuXG4gIC8vIFJldHVybnMgcGxhY2Vob2xkZXJzIGZvciBmdW5jdGlvbnMgYW5kIHJlZ2V4cHMgKGlkZW50aWZpZWQgYnkgaW5kZXgpXG4gIC8vIHdoaWNoIGFyZSBsYXRlciByZXBsYWNlZCBieSB0aGVpciBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gIGZ1bmN0aW9uIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cbiAgICAvLyBGb3IgbmVzdGVkIGZ1bmN0aW9uXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRnVuY3Rpb24pIHtcbiAgICAgIGRlbGV0ZUZ1bmN0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbGV0IG9yaWdWYWx1ZTogYW55ID0gdGhpc1trZXldO1xuICAgIGxldCBvcmlnVmFsdWU6IGFueSA9IHZhbHVlO1xuICAgIGxldCB0eXBlID0gdHlwZW9mIG9yaWdWYWx1ZTtcblxuICAgIHN3aXRjaCAodHlwZSl7XG4gICAgICBjYXNlICdvYmplY3QnOlxuXG4gICAgICAgIGlmIChvcmlnVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICByZXR1cm4gJ0BfX1ItJyArIFVJRCArICctJyArIChyZWdleHBzLnB1c2gob3JpZ1ZhbHVlKSAtIDEpICsgJ19fQCc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIHJldHVybiAnQF9fRC0nICsgVUlEICsgJy0nICsgKGRhdGVzLnB1c2gob3JpZ1ZhbHVlKSAtIDEpICsgJ19fQCc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgcmV0dXJuICdAX19NLScgKyBVSUQgKyAnLScgKyAobWFwcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdWYWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgIHJldHVybiAnQF9fUy0nICsgVUlEICsgJy0nICsgKHNldHMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcmlnVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIGxldCBpc1NwYXJzZSA9IG9yaWdWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9KS5sZW5ndGggIT09IG9yaWdWYWx1ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGlzU3BhcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0BfX0EtJyArIFVJRCArICctJyArIChhcnJheXMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgcmV0dXJuICdAX19MLScgKyBVSUQgKyAnLScgKyAodXJscy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gJ0BfX0YtJyArIFVJRCArICctJyArIChmdW5jdGlvbnMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiAnQF9fVS0nICsgVUlEICsgJy0nICsgKHVuZGVmcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdAX19JLScgKyBVSUQgKyAnLScgKyAoaW5maW5pdGllcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgcmV0dXJuICdAX19CLScgKyBVSUQgKyAnLScgKyAoYmlnSW50cy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZUZ1bmMoZm46IEZ1bmN0aW9uKSB7XG4gICAgbGV0IHNlcmlhbGl6ZWRGbiA9IGZuLnRvU3RyaW5nKCk7XG4gICAgaWYgKElTX05BVElWRV9DT0RFX1JFR0VYUC50ZXN0KHNlcmlhbGl6ZWRGbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlcmlhbGl6aW5nIG5hdGl2ZSBmdW5jdGlvbjogJyArIGZuLm5hbWUpO1xuICAgIH1cblxuICAgIC8vIHB1cmUgZnVuY3Rpb25zLCBleGFtcGxlOiB7a2V5OiBmdW5jdGlvbigpIHt9fVxuICAgIGlmIChJU19QVVJFX0ZVTkNUSU9OLnRlc3Qoc2VyaWFsaXplZEZuKSkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgICB9XG5cbiAgICAvLyBhcnJvdyBmdW5jdGlvbnMsIGV4YW1wbGU6IGFyZzEgPT4gYXJnMSs1XG4gICAgaWYgKElTX0FSUk9XX0ZVTkNUSU9OLnRlc3Qoc2VyaWFsaXplZEZuKSkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgICB9XG5cbiAgICBsZXQgYXJnc1N0YXJ0c0F0ID0gc2VyaWFsaXplZEZuLmluZGV4T2YoJygnKTtcbiAgICBsZXQgZGVmID0gc2VyaWFsaXplZEZuLnNsaWNlKDAsIGFyZ3NTdGFydHNBdClcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcgJylcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwubGVuZ3RoID4gMFxuICAgIH0pO1xuXG4gICAgbGV0IG5vblJlc2VydmVkU3ltYm9scyA9IGRlZi5maWx0ZXIoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIFJFU0VSVkVEX1NZTUJPTFMuaW5kZXhPZih2YWwpID09PSAtMVxuICAgIH0pO1xuXG4gICAgLy8gZW5oYW5jZWQgbGl0ZXJhbCBvYmplY3RzLCBleGFtcGxlOiB7a2V5KCkge319XG4gICAgaWYgKG5vblJlc2VydmVkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gKGRlZi5pbmRleE9mKCdhc3luYycpID4gLTEgPyAnYXN5bmMgJyA6ICcnKSArICdmdW5jdGlvbidcbiAgICAgICAgKyAoZGVmLmpvaW4oJycpLmluZGV4T2YoJyonKSA+IC0xID8gJyonIDogJycpXG4gICAgICAgICsgc2VyaWFsaXplZEZuLnNsaWNlKGFyZ3NTdGFydHNBdCk7XG4gICAgfVxuXG4gICAgLy8gYXJyb3cgZnVuY3Rpb25zXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwYXJhbWV0ZXIgaXMgZnVuY3Rpb25cbiAgaWYgKG9wdGlvbnMuaWdub3JlRnVuY3Rpb24gJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFByb3RlY3RzIGFnYWluc3QgYEpTT04uc3RyaW5naWZ5KClgIHJldHVybmluZyBgdW5kZWZpbmVkYCwgYnkgc2VyaWFsaXppbmdcbiAgLy8gdG8gdGhlIGxpdGVyYWwgc3RyaW5nOiBcInVuZGVmaW5lZFwiLlxuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gIH1cblxuICBsZXQgc3RyOiBzdHJpbmcgPSAnJztcblxuICAvLyBDcmVhdGVzIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAvLyBOT1RFOiBOb2RlIDAuMTIgZ29lcyBpbnRvIHNsb3cgbW9kZSB3aXRoIGV4dHJhIEpTT04uc3RyaW5naWZ5KCkgYXJncy5cbiAgaWYgKG9wdGlvbnMuaXNKU09OICYmICFvcHRpb25zLnNwYWNlKSB7XG4gICAgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIG9wdGlvbnMuaXNKU09OID8gdW5kZWZpbmVkIDogcmVwbGFjZXIsIG9wdGlvbnMuc3BhY2UpO1xuICB9XG5cbiAgLy8gUmVwbGFjZSB1bnNhZmUgSFRNTCBhbmQgaW52YWxpZCBKYXZhU2NyaXB0IGxpbmUgdGVybWluYXRvciBjaGFycyB3aXRoXG4gIC8vIHRoZWlyIHNhZmUgVW5pY29kZSBjaGFyIGNvdW50ZXJwYXJ0LiBUaGlzIF9tdXN0XyBoYXBwZW4gYmVmb3JlIHRoZVxuICAvLyByZWdleHBzIGFuZCBmdW5jdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYW5kIGFkZGVkIGJhY2sgdG8gdGhlIHN0cmluZy5cbiAgaWYgKG9wdGlvbnMudW5zYWZlICE9PSB0cnVlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoVU5TQUZFX0NIQVJTX1JFR0VYUCwgZXNjYXBlVW5zYWZlQ2hhcnMpO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDAgJiYgcmVnZXhwcy5sZW5ndGggPT09IDAgJiYgZGF0ZXMubGVuZ3RoID09PSAwICYmIG1hcHMubGVuZ3RoID09PSAwICYmIHNldHMubGVuZ3RoID09PSAwICYmIGFycmF5cy5sZW5ndGggPT09IDAgJiYgdW5kZWZzLmxlbmd0aCA9PT0gMCAmJiBpbmZpbml0aWVzLmxlbmd0aCA9PT0gMCAmJiBiaWdJbnRzLmxlbmd0aCA9PT0gMCAmJiB1cmxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvLyBSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgZnVuY3Rpb24sIHJlZ2V4cCwgZGF0ZSwgbWFwIGFuZCBzZXQgcGxhY2Vob2xkZXJzIGluIHRoZVxuICAvLyBKU09OIHN0cmluZyB3aXRoIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuIElmIHRoZSBvcmlnaW5hbCB2YWx1ZSBjYW5cbiAgLy8gbm90IGJlIGZvdW5kLCB0aGVuIGB1bmRlZmluZWRgIGlzIHVzZWQuXG4gIHJldHVybiBzdHIucmVwbGFjZShQTEFDRV9IT0xERVJfUkVHRVhQLCBmdW5jdGlvbiAobWF0Y2gsIGJhY2tTbGFzaCwgdHlwZSwgdmFsdWVJbmRleCkge1xuICAgIC8vIFRoZSBwbGFjZWhvbGRlciBtYXkgbm90IGJlIHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAvLyByZXBsYWNpbmcgdGhpbmdzIGxpa2UgYFwiYVxcXCJAX19SLTxVSUQ+LTBfX0BcImAgYW5kIHRodXMgb3V0cHV0dGluZ1xuICAgIC8vIGludmFsaWQgSlMuXG4gICAgaWYgKGJhY2tTbGFzaCkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSl7XG4gICAgICBjYXNlICdEJzpcbiAgICAgICAgcmV0dXJuIFwibmV3IERhdGUoXFxcIlwiICsgZGF0ZXNbdmFsdWVJbmRleF0udG9JU09TdHJpbmcoKSArIFwiXFxcIilcIlxuICAgICAgY2FzZSAnUic6XG4gICAgICAgIHJldHVybiBcIm5ldyBSZWdFeHAoXCIgKyBzZXJpYWxpemUocmVnZXhwc1t2YWx1ZUluZGV4XS5zb3VyY2UpICsgXCIsIFxcXCJcIiArIHJlZ2V4cHNbdmFsdWVJbmRleF0uZmxhZ3MgKyBcIlxcXCIpXCJcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgICByZXR1cm4gXCJuZXcgTWFwKFwiICsgc2VyaWFsaXplKEFycmF5LmZyb20obWFwc1t2YWx1ZUluZGV4XS5lbnRyaWVzKCkpLCBvcHRpb25zKSArIFwiKVwiXG4gICAgICBjYXNlICdTJzpcbiAgICAgICAgcmV0dXJuIFwibmV3IFNldChcIiArIHNlcmlhbGl6ZShBcnJheS5mcm9tKHNldHNbdmFsdWVJbmRleF0udmFsdWVzKCkpLCBvcHRpb25zKSArIFwiKVwiXG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgcmV0dXJuIFwiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXCIgKyBzZXJpYWxpemUoT2JqZWN0LmFzc2lnbih7bGVuZ3RoOiBhcnJheXNbdmFsdWVJbmRleF0ubGVuZ3RofSwgYXJyYXlzW3ZhbHVlSW5kZXhdKSwgb3B0aW9ucykgKyBcIilcIlxuICAgICAgY2FzZSAnVSc6XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICAgICAgY2FzZSAnSSc6XG4gICAgICAgIHJldHVybiBpbmZpbml0aWVzW3ZhbHVlSW5kZXhdXG4gICAgICBjYXNlICdCJzpcbiAgICAgICAgcmV0dXJuIFwiQmlnSW50KFxcXCJcIiArIGJpZ0ludHNbdmFsdWVJbmRleF0gKyBcIlxcXCIpXCJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gXCJuZXcgVVJMKFxcXCJcIiArIHVybHNbdmFsdWVJbmRleF0udG9TdHJpbmcoKSArIFwiXFxcIilcIlxuICAgIH1cblxuICAgIGxldCBmbiA9IGZ1bmN0aW9uc1t2YWx1ZUluZGV4XTtcblxuICAgIHJldHVybiBzZXJpYWxpemVGdW5jKGZuKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNlcmlhbGl6ZVxuIl19
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Public API Surface of bx-rest
3
3
  */
4
- export * from './bx-rest.service';
5
- export * from './rest/bx-rest.module';
4
+ export * from './request/bx-rest.module';
6
5
  export * from './services/base';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYyxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYngtcmVzdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYngtcmVzdC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9yZXN0L2J4LXJlc3QubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9iYXNlJ1xuIl19
6
+ export * from './request/user/user';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYngtcmVzdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcmVxdWVzdC9ieC1yZXN0Lm1vZHVsZSdcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvYmFzZSdcbmV4cG9ydCAqIGZyb20gJy4vcmVxdWVzdC91c2VyL3VzZXInXG4iXX0=
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
25
25
  ]
26
26
  }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYngtcmVzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXN0L2J4LXJlc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFjMUQsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxZQVJyQixhQUFhO1FBQ2IsZUFBZSxhQUdmLGVBQWU7UUFDZixhQUFhOzBHQUdKLFlBQVksWUFSckIsYUFBYTtRQUNiLGVBQWUsRUFHZixlQUFlO1FBQ2YsYUFBYTsyRkFHSixZQUFZO2tCQVp4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbidcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCeFJlc3RNb2R1bGUgeyB9XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYngtcmVzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXF1ZXN0L2J4LXJlc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFjMUQsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxZQVJyQixhQUFhO1FBQ2IsZUFBZSxhQUdmLGVBQWU7UUFDZixhQUFhOzBHQUdKLFlBQVksWUFSckIsYUFBYTtRQUNiLGVBQWUsRUFHZixlQUFlO1FBQ2YsYUFBYTsyRkFHSixZQUFZO2tCQVp4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbidcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCeFJlc3RNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,263 @@
1
+ import { of, take } from 'rxjs';
2
+ import { first, map, mergeMap, tap } from 'rxjs/operators';
3
+ import clone from 'just-clone';
4
+ import compare from 'just-compare';
5
+ import { loadAll, saveArr, saveIDLoadedDepartment, saveSelf } from '../../store/users';
6
+ import { $get, $list, $search, $update, $user } from '../../consts/part-name-metods';
7
+ export class BXRestUser {
8
+ constructor(http, snackBar,
9
+ // private img: ImgServices,
10
+ //private dateTrace: DateTrace,
11
+ store, userMap, datePipe) {
12
+ this.http = http;
13
+ this.snackBar = snackBar;
14
+ this.store = store;
15
+ this.userMap = userMap;
16
+ this.datePipe = datePipe;
17
+ this.url = {
18
+ admin: [$user, 'admin'],
19
+ get: [$user, $get],
20
+ self: [$user, 'current'],
21
+ update: [$user, $update],
22
+ search: [$user, $search],
23
+ access: [$user, 'access'],
24
+ // AU - все авторизованные пользователи
25
+ // D1 - подразделение с id=1
26
+ // G1 - группа с id=1
27
+ fields: [$user, 'fields'],
28
+ userfield: {
29
+ list: [$user, 'userfield', $list]
30
+ }
31
+ };
32
+ this.def = {
33
+ params: { ACTIVE: 1, start: 0 }
34
+ };
35
+ this.user$ = this.store.select('users');
36
+ }
37
+ get(params = {}) {
38
+ let copyParams = clone(params);
39
+ this.setDefParam(copyParams);
40
+ return this.http.post(this.url.get, copyParams, 'Не удалось получить пользователей')
41
+ .pipe(tap(v => {
42
+ if (v && v.result) {
43
+ this.saveArrUser(v.result);
44
+ }
45
+ }));
46
+ }
47
+ getOnePage(page = 1) {
48
+ return this.get({ start: (page - 1) * 50 }).pipe(map(v => {
49
+ let res = this.http.mapResult(v);
50
+ return (res) ? res.map(r => this.userMap.HttpToBX(r)) : undefined;
51
+ }));
52
+ }
53
+ getByID(id, reload = true) {
54
+ return this.getByIDs([id], reload).pipe(map(v => (v && v.length) ? v[0] : undefined));
55
+ }
56
+ getByIDs(ids, reload = true) {
57
+ ids = Array.from(new Set(ids));
58
+ return this.user$.pipe(take(1), mergeMap(v => {
59
+ if (!reload) {
60
+ let find = v.data.filter(i => ids.includes(i.ID));
61
+ if (find && find.length === ids.length) {
62
+ return of(find);
63
+ }
64
+ }
65
+ return this.getAll({ ID: ids, ACTIVE: 2 }).pipe(map(v => (v && v.length) ? v : undefined));
66
+ }));
67
+ }
68
+ getSelf(update = false) {
69
+ if (update) {
70
+ return this.getSelfHttp();
71
+ }
72
+ else {
73
+ return this.user$.pipe(mergeMap(v => {
74
+ if (v && v.self) {
75
+ return of(v.self);
76
+ }
77
+ else {
78
+ return this.getSelfHttp();
79
+ }
80
+ }), first());
81
+ }
82
+ }
83
+ getSelfHttp() {
84
+ return this.http.get(this.url.self, {}, 'Не удалось получить пользователя')
85
+ .pipe(map(v => {
86
+ if (v && v.result) {
87
+ return this.userMap.HttpToBX(v.result);
88
+ }
89
+ return undefined;
90
+ }), tap(v => {
91
+ if (v) {
92
+ this.store.dispatch(saveSelf({ self: v }));
93
+ }
94
+ }));
95
+ }
96
+ access(access, textError = 'Не удалось получить права') {
97
+ return this.http.get(this.url.access, { ACCESS: access }, textError).pipe(map(v => this.http.mapResult(v)));
98
+ }
99
+ getByDepartment(id) {
100
+ const ids = (typeof id === 'number') ? [id] : id;
101
+ return this.user$.pipe(first(), mergeMap(v => {
102
+ if (v.load.all) {
103
+ return of(clone(v.data.filter(i => ids.find(id => i.UF_DEPARTMENT.includes(id)))));
104
+ }
105
+ if (ids.every(i => v.load.department.includes(i))) {
106
+ return of(clone(v.data.filter(i => ids.find(id => i.UF_DEPARTMENT.includes(id)))));
107
+ }
108
+ return this.getAll({ UF_DEPARTMENT: ids }).pipe(tap(_ => {
109
+ this.store.dispatch(saveIDLoadedDepartment({ id: ids }));
110
+ }));
111
+ }));
112
+ }
113
+ getAll(params = {}) {
114
+ if (!Object.keys(params).length) {
115
+ params = clone(this.def.params);
116
+ }
117
+ const saveAllUser = compare(params, this.def.params);
118
+ return this.user$.pipe(take(1), mergeMap(v => {
119
+ if (v.load.all) {
120
+ if (compare(this.def.params, params)) {
121
+ return of(clone(v.data));
122
+ }
123
+ }
124
+ return this.getEndArray(params).pipe(take(1), map(v => {
125
+ if (v && v.result) {
126
+ let cl = clone(v.result);
127
+ return this.saveArrUser(cl);
128
+ }
129
+ return undefined;
130
+ }));
131
+ }), tap(v => {
132
+ if (v && v.length && saveAllUser) {
133
+ this.store.dispatch(loadAll({ load: true }));
134
+ }
135
+ params.start = this.def.params.start;
136
+ }));
137
+ }
138
+ getAllByPersonalBirthday(day = undefined, month = undefined, checkWeekend = false) {
139
+ return this.http.timeNowOnServer().pipe(mergeMap(date => {
140
+ if (date) {
141
+ let daySent = (day) ? day : date.getDate();
142
+ let start = date.getFullYear() + 1;
143
+ let monthSent = (month) ? month : date.getMonth() + 1;
144
+ let arr = Array.from(Array(200).keys()).map(_ => {
145
+ start--;
146
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent), 'YYYY-MM-dd');
147
+ return (res) ? res : '';
148
+ });
149
+ // TODO: Упростить
150
+ if (checkWeekend && date.getDay() === 1) {
151
+ start = date.getFullYear() + 1;
152
+ arr.push(...Array.from(Array(200).keys()).map(_ => {
153
+ start--;
154
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent - 1), 'YYYY-MM-dd');
155
+ return (res) ? res : '';
156
+ }));
157
+ start = date.getFullYear() + 1;
158
+ arr.push(...Array.from(Array(200).keys()).map(_ => {
159
+ start--;
160
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent - 2), 'YYYY-MM-dd');
161
+ return (res) ? res : '';
162
+ }));
163
+ }
164
+ return this.getAll({ PERSONAL_BIRTHDAY: arr });
165
+ }
166
+ this.snackBar.warning('Не удалось получить время сервера');
167
+ return of(undefined);
168
+ }));
169
+ }
170
+ saveArrUser(users) {
171
+ let result = [];
172
+ for (const user of users) {
173
+ result.push(this.userMap.HttpToBX(user));
174
+ }
175
+ this.store.dispatch(saveArr({ arr: result }));
176
+ return result;
177
+ }
178
+ search(params) {
179
+ if (typeof params === 'string') {
180
+ params = { FIND: params };
181
+ }
182
+ if (typeof params.ACTIVE !== 'boolean') {
183
+ params.ACTIVE = true;
184
+ }
185
+ return this.http.get(this.url.search, params, 'Сервер не отвечает на запрос поиска')
186
+ .pipe(map(v => {
187
+ if (v && v.result) {
188
+ const mapResult = this.http.mapResult(v);
189
+ if (mapResult) {
190
+ return this.saveArrUser(mapResult);
191
+ }
192
+ }
193
+ return undefined;
194
+ }));
195
+ }
196
+ fields() {
197
+ return this.http.get(this.url.fields).pipe(map(v => this.http.mapResult(v)));
198
+ }
199
+ update(user, fieldUpdate) {
200
+ if (fieldUpdate && fieldUpdate.length) {
201
+ let sendData = {
202
+ ID: user.ID,
203
+ };
204
+ const userBX = this.userMap.BXtoHttp(user);
205
+ for (const field of fieldUpdate) {
206
+ if (userBX[field]) {
207
+ sendData[field] = userBX[field];
208
+ }
209
+ else {
210
+ this.snackBar.error('Одно из указанных полей отправлено не верно');
211
+ }
212
+ }
213
+ return this.http.post(this.url.update, sendData, 'Не удалось обновить пользователя с ID' + user.ID);
214
+ }
215
+ else {
216
+ this.snackBar.error('Не указано ни одно поле для редактирования пользователя');
217
+ return of({});
218
+ }
219
+ }
220
+ getEndArray(params = {}) {
221
+ return this.get(params).pipe(mergeMap(items => {
222
+ if (items && items.result && typeof items.result === 'object') {
223
+ if (items.next) {
224
+ params.start = items.next;
225
+ return this.getEndArray(params).pipe(map(vEnd => {
226
+ if (vEnd && items.result && vEnd.result) {
227
+ return { result: [...items.result, ...vEnd.result] };
228
+ }
229
+ return (items) ? items : undefined;
230
+ }));
231
+ }
232
+ return of(items);
233
+ }
234
+ else {
235
+ return of(undefined);
236
+ }
237
+ }));
238
+ }
239
+ // getUrlCompressedImage(url: string, width: number, height: number) {
240
+ // return this.img.getUrlCompressed(url, width, height)
241
+ // }
242
+ setDefParam(params) {
243
+ if (!params.hasOwnProperty('ACTIVE')) {
244
+ params.ACTIVE = this.def.params.ACTIVE;
245
+ }
246
+ if (params.ACTIVE && params.ACTIVE === 2) {
247
+ delete params.ACTIVE;
248
+ }
249
+ if (!params.hasOwnProperty('start')) {
250
+ params.start = this.def.params.start;
251
+ }
252
+ if (params.UF_DEPARTMENT && !params.UF_DEPARTMENT.length) {
253
+ delete params.UF_DEPARTMENT;
254
+ }
255
+ }
256
+ getInfoAboutCustomFieldsBX() {
257
+ return this.http.get(this.url.userfield.list).pipe(map(v => this.http.mapResult(v)));
258
+ }
259
+ itIsAdmin() {
260
+ return this.http.get(this.url.admin).pipe(map(v => this.http.mapResult(v)));
261
+ }
262
+ }
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3JlcXVlc3QvdXNlci91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBTWxDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBYyxNQUFNLG1CQUFtQixDQUFBO0FBUWxHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFLcEYsTUFBTSxPQUFPLFVBQVU7SUF1Qm5CLFlBQ1ksSUFBb0IsRUFDcEIsUUFBeUI7SUFDbEMsNEJBQTRCO0lBQzNCLCtCQUErQjtJQUN2QixLQUFtQyxFQUNuQyxPQUFpQyxFQUNqQyxRQUFrQjtRQU5sQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUd6QixVQUFLLEdBQUwsS0FBSyxDQUE4QjtRQUNuQyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBN0I5QixRQUFHLEdBQUc7WUFDRixLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBQ3ZCLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7WUFDbEIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztZQUN4QixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUs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SSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtTQUN2QjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1NBQ3ZDO1FBRUQsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDdEQsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFBO1NBQzlCO0lBQ0wsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3JGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25DLENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuQyxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRha2UgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgY29tcGFyZSBmcm9tICdqdXN0LWNvbXBhcmUnXG5pbXBvcnQgeyBpQlhHZXRQYXJhbSB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvZ2V0J1xuaW1wb3J0IEh0dHBCWFNlcnZpY2VzIGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvSHR0cEJYJ1xuaW1wb3J0IFVzZXJGaWx0ZXJTZWFyY2ggZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlci9Vc2VyRmlsdGVyU2VhcmNoJ1xuLy8gaW1wb3J0IEltZ1NlcnZpY2VzIGZyb20gJ2J4LXJlc3Qvc2VydmljZXMvYXBpL2JpdHJpeC9jdXN0b20vaW1nJ1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSdcbmltcG9ydCB7IGxvYWRBbGwsIHNhdmVBcnIsIHNhdmVJRExvYWRlZERlcGFydG1lbnQsIHNhdmVTZWxmLCBzdG9yZVVzZXJzIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlcnMnXG5pbXBvcnQgeyBpQ3VzdG9tVXNlckZpZWxkSW5mbyB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvQ3VzdG9tVXNlckZpZWxkSW5mbydcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQml0cml4QXBpVXNlck1hcFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwL3Jlc3QvdXNlcidcbi8vIGltcG9ydCBEYXRlVHJhY2UgZnJvbSAnYngtcmVzdC9zZXJ2aWNlcy9hcGkvdHJhY2UvbWV0b2RzL2RhdGUnXG5pbXBvcnQgU25hY2tCYXJTZXJ2aWNlIGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSdcbmltcG9ydCBpSHR0cEFuc3dlckJYIGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvaHR0cEFuc3dlckJYJ1xuaW1wb3J0IHsgaUJYUmVzdFVzZXIsIGlCWFJlc3RVc2VySHR0cCwgaUJYUmVzdFVzZXJIdHRwRmllbGQgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC91c2VyL3VzZXInXG5pbXBvcnQgeyAkZ2V0LCAkbGlzdCwgJHNlYXJjaCwgJHVwZGF0ZSwgJHVzZXIgfSBmcm9tICcuLi8uLi9jb25zdHMvcGFydC1uYW1lLW1ldG9kcydcbmltcG9ydCB7IFVzZXJGaWx0ZXIgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC91c2VyL3VzZXJGaWx0ZXInXG5cblxuXG5leHBvcnQgY2xhc3MgQlhSZXN0VXNlciB7XG4gICAgdXJsID0ge1xuICAgICAgICBhZG1pbjogWyR1c2VyLCAnYWRtaW4nXSxcbiAgICAgICAgZ2V0OiBbJHVzZXIsICRnZXRdLFxuICAgICAgICBzZWxmOiBbJHVzZXIsICdjdXJyZW50J10sXG4gICAgICAgIHVwZGF0ZTogWyR1c2VyLCAkdXBkYXRlXSxcbiAgICAgICAgc2VhcmNoOiBbJHVzZXIsICRzZWFyY2hdLFxuICAgICAgICBhY2Nlc3M6IFskdXNlciwgJ2FjY2VzcyddLCAvLyBVMSAtINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDRgSBpZCA9MVxuICAgICAgICAvLyBBVSAtINCy0YHQtSDQsNCy0YLQvtGA0LjQt9C+0LLQsNC90L3Ri9C1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuFxuICAgICAgICAvLyBEMSAtINC/0L7QtNGA0LDQt9C00LXQu9C10L3QuNC1INGBIGlkPTFcbiAgICAgICAgLy8gRzEgLSDQs9GA0YPQv9C/0LAg0YEgaWQ9MVxuICAgICAgICBmaWVsZHM6IFskdXNlciwgJ2ZpZWxkcyddLFxuICAgICAgICB1c2VyZmllbGQ6IHtcbiAgICAgICAgICAgIGxpc3Q6IFskdXNlciwgJ3VzZXJmaWVsZCcsICRsaXN0XVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVmOiB7IHBhcmFtczogeyBBQ1RJVkU6IDEsIHN0YXJ0OiAwIH0gfSA9IHtcbiAgICAgICAgcGFyYW1zOiB7QUNUSVZFOiAxLCBzdGFydDogMH1cbiAgICB9XG5cbiAgICB1c2VyJDogT2JzZXJ2YWJsZTxzdG9yZVVzZXJzPlxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cEJYU2VydmljZXMsXG4gICAgICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAvLyBwcml2YXRlIGltZzogSW1nU2VydmljZXMsXG4gICAgICAgIC8vcHJpdmF0ZSBkYXRlVHJhY2U6IERhdGVUcmFjZSxcbiAgICAgICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8eyB1c2Vyczogc3RvcmVVc2VycyB9PixcbiAgICAgICAgcHJpdmF0ZSB1c2VyTWFwOiBCaXRyaXhBcGlVc2VyTWFwU2VydmljZXMsXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlciQgPSB0aGlzLnN0b3JlLnNlbGVjdCgndXNlcnMnKVxuICAgIH1cblxuICAgIGdldChwYXJhbXM6IGlCWEdldFBhcmFtID0ge30pOiBPYnNlcnZhYmxlPGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBjb3B5UGFyYW1zID0gY2xvbmUocGFyYW1zKVxuICAgICAgICB0aGlzLnNldERlZlBhcmFtKGNvcHlQYXJhbXMpXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD5cbiAgICAgICAgKHRoaXMudXJsLmdldCwgY29weVBhcmFtcywgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVBcnJVc2VyKHYucmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRPbmVQYWdlKHBhZ2U6IG51bWJlciA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHtzdGFydDogKHBhZ2UgLSAxKSAqIDUwfSkucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpcy5odHRwLm1hcFJlc3VsdCh2KVxuICAgICAgICAgICAgICAgIHJldHVybiAocmVzKSA/IHJlcy5tYXAociA9PiB0aGlzLnVzZXJNYXAuSHR0cFRvQlgocikpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0QnlJRChpZDogbnVtYmVyLCByZWxvYWQgPSB0cnVlKTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeUlEcyhbaWRdLCByZWxvYWQpLnBpcGUobWFwKHYgPT4gKHYgJiYgdi5sZW5ndGgpID8gdlswXSA6IHVuZGVmaW5lZCkpXG4gICAgfVxuXG4gICAgZ2V0QnlJRHMoaWRzOiBudW1iZXJbXSwgcmVsb2FkID0gdHJ1ZSk6IE9ic2VydmFibGU8aUJYUmVzdFVzZXJbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoaWRzKSlcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlciQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtZXJnZU1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmluZCA9IHYuZGF0YS5maWx0ZXIoaSA9PiBpZHMuaW5jbHVkZXMoaS5JRCkpXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kICYmIGZpbmQubGVuZ3RoID09PSBpZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmluZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGwoe0lEOiBpZHMsIEFDVElWRTogMn0pLnBpcGUobWFwKHYgPT4gKHYgJiYgdi5sZW5ndGgpID8gdiA6IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0U2VsZih1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxmSHR0cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAmJiB2LnNlbGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih2LnNlbGYpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxmSHR0cCgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZWxmSHR0cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHA+PlxuICAgICAgICAodGhpcy51cmwuc2VsZiwge30sICfQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNYXAuSHR0cFRvQlgodi5yZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRhcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2F2ZVNlbGYoe3NlbGY6IHZ9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGFjY2VzcyhhY2Nlc3M6IHN0cmluZ1tdLCB0ZXh0RXJyb3IgPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC/0YDQsNCy0LAnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8Ym9vbGVhbj4gfCB1bmRlZmluZWQ+KHRoaXMudXJsLmFjY2Vzcywge0FDQ0VTUzogYWNjZXNzfSwgdGV4dEVycm9yKS5waXBlKFxuICAgICAgICAgICAgbWFwKHYgPT4gdGhpcy5odHRwLm1hcFJlc3VsdCh2KSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGdldEJ5RGVwYXJ0bWVudChpZDogbnVtYmVyW10gfCBudW1iZXIpOiBPYnNlcnZhYmxlPGlCWFJlc3RVc2VyIFtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGlkczogbnVtYmVyW10gPSAodHlwZW9mIGlkID09PSAnbnVtYmVyJykgPyBbaWRdIDogaWRcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlciQucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBtZXJnZU1hcChcbiAgICAgICAgICAgICAgICB2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYubG9hZC5hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjbG9uZSh2LmRhdGEuZmlsdGVyKGkgPT4gaWRzLmZpbmQoaWQgPT4gaS5VRl9ERVBBUlRNRU5ULmluY2x1ZGVzKGlkKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRzLmV2ZXJ5KGkgPT4gdi5sb2FkLmRlcGFydG1lbnQuaW5jbHVkZXMoaSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY2xvbmUodi5kYXRhLmZpbHRlcihpID0+IGlkcy5maW5kKGlkID0+IGkuVUZfREVQQVJUTUVOVC5pbmNsdWRlcyhpZCkpKSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsKHtVRl9ERVBBUlRNRU5UOiBpZHN9KS5waXBlKHRhcChfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2F2ZUlETG9hZGVkRGVwYXJ0bWVudCh7aWQ6IGlkc30pKVxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0QWxsKHBhcmFtczogaUJYR2V0UGFyYW0gPSB7fSk6IE9ic2VydmFibGU8aUJYUmVzdFVzZXIgW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1zID0gY2xvbmUodGhpcy5kZWYucGFyYW1zKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2F2ZUFsbFVzZXIgPSBjb21wYXJlKHBhcmFtcywgdGhpcy5kZWYucGFyYW1zKVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2LmxvYWQuYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKHRoaXMuZGVmLnBhcmFtcywgcGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGNsb25lKHYuZGF0YSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbmRBcnJheShwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsID0gY2xvbmUodi5yZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFyclVzZXIoY2wpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ICYmIHYubGVuZ3RoICYmIHNhdmVBbGxVc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZEFsbCh7bG9hZDogdHJ1ZX0pKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnQgPSB0aGlzLmRlZi5wYXJhbXMuc3RhcnRcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRBbGxCeVBlcnNvbmFsQmlydGhkYXkoZGF5OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsIG1vbnRoOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsIGNoZWNrV2Vla2VuZCA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAudGltZU5vd09uU2VydmVyKCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKGRhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlTZW50ID0gKGRheSkgPyBkYXkgOiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgIGxldCBtb250aFNlbnQgPSAobW9udGgpID8gbW9udGggOiBkYXRlLmdldE1vbnRoKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnI6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShBcnJheSgyMDApLmtleXMoKSkubWFwKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtLVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHN0YXJ0LCBtb250aFNlbnQgLSAxLCBkYXlTZW50KSwgJ1lZWVktTU0tZGQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXMpID8gcmVzIDogJydcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzog0KPQv9GA0L7RgdGC0LjRgtGMXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dlZWtlbmQgJiYgZGF0ZS5nZXREYXkoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKEFycmF5KDIwMCkua2V5cygpKS5tYXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHN0YXJ0LCBtb250aFNlbnQgLSAxLCBkYXlTZW50IC0gMSksICdZWVlZLU1NLWRkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXMpID8gcmVzIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKEFycmF5KDIwMCkua2V5cygpKS5tYXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHN0YXJ0LCBtb250aFNlbnQgLSAxLCBkYXlTZW50IC0gMiksICdZWVlZLU1NLWRkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXMpID8gcmVzIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFsbCh7UEVSU09OQUxfQklSVEhEQVk6IGFycn0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIud2FybmluZygn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINCy0YDQtdC80Y8g0YHQtdGA0LLQtdGA0LAnKVxuICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgc2F2ZUFyclVzZXIodXNlcnM6IGlCWFJlc3RVc2VySHR0cFtdKSB7XG4gICAgICAgIGxldCByZXN1bHQ6IGlCWFJlc3RVc2VyIFtdID0gW11cbiAgICAgICAgZm9yIChjb25zdCB1c2VyIG9mIHVzZXJzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnVzZXJNYXAuSHR0cFRvQlgodXNlcikpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzYXZlQXJyKHthcnI6IHJlc3VsdH0pKVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBzZWFyY2gocGFyYW1zOiBzdHJpbmcgfCBVc2VyRmlsdGVyU2VhcmNoKTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlciBbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHtGSU5EOiBwYXJhbXN9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuQUNUSVZFICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHBhcmFtcy5BQ1RJVkUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHBbXT4+KHRoaXMudXJsLnNlYXJjaCwgcGFyYW1zLCAn0KHQtdGA0LLQtdGAINC90LUg0L7RgtCy0LXRh9Cw0LXRgiDQvdCwINC30LDQv9GA0L7RgSDQv9C+0LjRgdC60LAnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAmJiB2LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0ID0gdGhpcy5odHRwLm1hcFJlc3VsdCh2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVBcnJVc2VyKG1hcFJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICB9XG5cbiAgICBmaWVsZHMoKTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlckh0dHBGaWVsZCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cEZpZWxkPj4odGhpcy51cmwuZmllbGRzKS5waXBlKFxuICAgICAgICAgICAgbWFwKHYgPT4gdGhpcy5odHRwLm1hcFJlc3VsdCh2KSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHVwZGF0ZSh1c2VyOiBpQlhSZXN0VXNlciwgZmllbGRVcGRhdGU6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoZmllbGRVcGRhdGUgJiYgZmllbGRVcGRhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgc2VuZERhdGE6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBJRDogdXNlci5JRCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXJCWCA9IHRoaXMudXNlck1hcC5CWHRvSHR0cCh1c2VyKVxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyQlhbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbmREYXRhW2ZpZWxkXSA9IHVzZXJCWFtmaWVsZF1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLmVycm9yKCfQntC00L3QviDQuNC3INGD0LrQsNC30LDQvdC90YvRhSDQv9C+0LvQtdC5INC+0YLQv9GA0LDQstC70LXQvdC+INC90LUg0LLQtdGA0L3QvicpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMudXJsLnVwZGF0ZSwgc2VuZERhdGEsICfQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGBIElEJyArIHVzZXIuSUQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLmVycm9yKCfQndC1INGD0LrQsNC30LDQvdC+INC90Lgg0L7QtNC90L4g0L/QvtC70LUg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJylcbiAgICAgICAgICAgIHJldHVybiBvZih7fSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEVuZEFycmF5KHBhcmFtczogVXNlckZpbHRlciA9IHt9KTogT2JzZXJ2YWJsZTxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQocGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5yZXN1bHQgJiYgdHlwZW9mIGl0ZW1zLnJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydCA9IGl0ZW1zLm5leHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVuZEFycmF5KHBhcmFtcykucGlwZShtYXAodkVuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZFbmQgJiYgaXRlbXMucmVzdWx0ICYmIHZFbmQucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBbLi4uaXRlbXMucmVzdWx0LCAuLi52RW5kLnJlc3VsdF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaXRlbXMpID8gaXRlbXMgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihpdGVtcylcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLy8gZ2V0VXJsQ29tcHJlc3NlZEltYWdlKHVybDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5pbWcuZ2V0VXJsQ29tcHJlc3NlZCh1cmwsIHdpZHRoLCBoZWlnaHQpXG4gICAgLy8gfVxuXG4gICAgc2V0RGVmUGFyYW0ocGFyYW1zOiBpQlhHZXRQYXJhbSkge1xuICAgICAgICBpZiAoIXBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnQUNUSVZFJykpIHtcbiAgICAgICAgICAgIHBhcmFtcy5BQ1RJVkUgPSB0aGlzLmRlZi5wYXJhbXMuQUNUSVZFXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5BQ1RJVkUgJiYgcGFyYW1zLkFDVElWRSA9PT0gMikge1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5BQ1RJVkVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnc3RhcnQnKSkge1xuICAgICAgICAgICAgcGFyYW1zLnN0YXJ0ID0gdGhpcy5kZWYucGFyYW1zLnN0YXJ0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLlVGX0RFUEFSVE1FTlQgJiYgIXBhcmFtcy5VRl9ERVBBUlRNRU5ULmxlbmd0aCkge1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5VRl9ERVBBUlRNRU5UXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbmZvQWJvdXRDdXN0b21GaWVsZHNCWCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxpQ3VzdG9tVXNlckZpZWxkSW5mb1tdPj4odGhpcy51cmwudXNlcmZpZWxkLmxpc3QpLnBpcGUoXG4gICAgICAgICAgICBtYXAodiA9PiB0aGlzLmh0dHAubWFwUmVzdWx0KHYpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgaXRJc0FkbWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGJvb2xlYW4+Pih0aGlzLnVybC5hZG1pbikucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IHRoaXMuaHR0cC5tYXBSZXN1bHQodikpXG4gICAgICAgIClcbiAgICB9XG59XG4iXX0=