@qbs-origin/origin-form 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/action-step-handler.mjs +163 -0
  3. package/esm2022/lib/auth-client.service.mjs +69 -0
  4. package/esm2022/lib/enums/label.keys.mjs +721 -0
  5. package/esm2022/lib/form-css.helper.mjs +367 -0
  6. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
  7. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
  8. package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
  9. package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
  10. package/esm2022/lib/formly/formly-action.mjs +56 -0
  11. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
  12. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
  13. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
  14. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
  15. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
  16. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
  17. package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
  18. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
  19. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
  20. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
  21. package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
  22. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
  23. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
  24. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
  25. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
  26. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
  27. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
  28. package/esm2022/lib/model-population.helper.mjs +265 -0
  29. package/esm2022/lib/models/application-type.model.mjs +12 -0
  30. package/esm2022/lib/models/application.model.mjs +30 -0
  31. package/esm2022/lib/models/auth/users.model.mjs +2 -0
  32. package/esm2022/lib/models/dictionary.model.mjs +20 -0
  33. package/esm2022/lib/models/flux.model.mjs +105 -0
  34. package/esm2022/lib/models/forms.model.mjs +572 -0
  35. package/esm2022/lib/models/label-info.model.mjs +2 -0
  36. package/esm2022/lib/models/label.model.mjs +2 -0
  37. package/esm2022/lib/models/language.model.mjs +3 -0
  38. package/esm2022/lib/models/list.model.mjs +2 -0
  39. package/esm2022/lib/models/partner.model.mjs +3 -0
  40. package/esm2022/lib/models/treeview.model.mjs +15 -0
  41. package/esm2022/lib/origin-form-auth.service.mjs +40 -0
  42. package/esm2022/lib/origin-form-config.model.mjs +2 -0
  43. package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
  44. package/esm2022/lib/origin-form.component.mjs +2391 -0
  45. package/esm2022/lib/origin-form.module.mjs +479 -0
  46. package/esm2022/lib/origin-form.service.mjs +14 -0
  47. package/esm2022/lib/others/check-list.database.mjs +55 -0
  48. package/esm2022/lib/others/config-service.mjs +42 -0
  49. package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
  50. package/esm2022/lib/others/environment-type.mjs +21 -0
  51. package/esm2022/lib/others/external-link.directive.mjs +49 -0
  52. package/esm2022/lib/others/flux-helper.mjs +1397 -0
  53. package/esm2022/lib/others/picker.component.mjs +119 -0
  54. package/esm2022/lib/others/translation.pipe.mjs +21 -0
  55. package/esm2022/lib/others/translations-helper.mjs +258 -0
  56. package/esm2022/lib/others/utils.mjs +272 -0
  57. package/esm2022/lib/services/applicationData.service.mjs +145 -0
  58. package/esm2022/lib/services/auth-http.service.mjs +80 -0
  59. package/esm2022/lib/services/dialog.service.mjs +56 -0
  60. package/esm2022/lib/services/dictionary.service.mjs +198 -0
  61. package/esm2022/lib/services/forms.service.mjs +47 -0
  62. package/esm2022/lib/services/labels.service.mjs +29 -0
  63. package/esm2022/lib/services/language.service.mjs +24 -0
  64. package/esm2022/lib/services/open-banking.service.mjs +194 -0
  65. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
  66. package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
  67. package/esm2022/lib/services/otp.service.mjs +28 -0
  68. package/esm2022/lib/services/proxy.service.mjs +79 -0
  69. package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
  70. package/esm2022/lib/services/translation.service.mjs +27 -0
  71. package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
  72. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
  73. package/esm2022/lib/shared-components/grid.component.mjs +241 -0
  74. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
  75. package/esm2022/lib/theme-css.mjs +2254 -0
  76. package/esm2022/lib/theme-injector.service.mjs +26 -0
  77. package/esm2022/public-api.mjs +4 -0
  78. package/esm2022/qbs-origin-origin-form.mjs +5 -0
  79. package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
  80. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/action-step-handler.d.ts +49 -0
  83. package/lib/auth-client.service.d.ts +17 -0
  84. package/lib/enums/label.keys.d.ts +720 -0
  85. package/lib/form-css.helper.d.ts +28 -0
  86. package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
  87. package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
  88. package/lib/formly/custom-section-separator.component.d.ts +6 -0
  89. package/lib/formly/form-section-separator.component.d.ts +10 -0
  90. package/lib/formly/formly-action.d.ts +13 -0
  91. package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
  92. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
  93. package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
  94. package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
  95. package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
  96. package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
  97. package/lib/formly/formly-identification.component.d.ts +19 -0
  98. package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
  99. package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
  100. package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
  101. package/lib/formly/formly-row-fille.d.ts +6 -0
  102. package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
  103. package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
  104. package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
  105. package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
  106. package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
  107. package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
  108. package/lib/model-population.helper.d.ts +8 -0
  109. package/lib/models/application-type.model.d.ts +27 -0
  110. package/lib/models/application.model.d.ts +107 -0
  111. package/lib/models/auth/users.model.d.ts +20 -0
  112. package/lib/models/dictionary.model.d.ts +77 -0
  113. package/lib/models/flux.model.d.ts +101 -0
  114. package/lib/models/forms.model.d.ts +504 -0
  115. package/lib/models/label-info.model.d.ts +10 -0
  116. package/lib/models/label.model.d.ts +4 -0
  117. package/lib/models/language.model.d.ts +5 -0
  118. package/lib/models/list.model.d.ts +8 -0
  119. package/lib/models/partner.model.d.ts +12 -0
  120. package/lib/models/treeview.model.d.ts +17 -0
  121. package/lib/origin-form-auth.service.d.ts +15 -0
  122. package/lib/origin-form-config.model.d.ts +12 -0
  123. package/lib/origin-form-token.interceptor.d.ts +12 -0
  124. package/lib/origin-form.component.d.ts +231 -0
  125. package/lib/origin-form.module.d.ts +84 -0
  126. package/lib/origin-form.service.d.ts +6 -0
  127. package/lib/others/check-list.database.d.ts +16 -0
  128. package/lib/others/config-service.d.ts +22 -0
  129. package/lib/others/dictionary-label-info.d.ts +6 -0
  130. package/lib/others/environment-type.d.ts +8 -0
  131. package/lib/others/external-link.directive.d.ts +12 -0
  132. package/lib/others/flux-helper.d.ts +115 -0
  133. package/lib/others/picker.component.d.ts +36 -0
  134. package/lib/others/translation.pipe.d.ts +10 -0
  135. package/lib/others/translations-helper.d.ts +31 -0
  136. package/lib/others/utils.d.ts +37 -0
  137. package/lib/services/applicationData.service.d.ts +35 -0
  138. package/lib/services/auth-http.service.d.ts +21 -0
  139. package/lib/services/dialog.service.d.ts +20 -0
  140. package/lib/services/dictionary.service.d.ts +89 -0
  141. package/lib/services/forms.service.d.ts +17 -0
  142. package/lib/services/labels.service.d.ts +13 -0
  143. package/lib/services/language.service.d.ts +14 -0
  144. package/lib/services/open-banking.service.d.ts +137 -0
  145. package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
  146. package/lib/services/origin-form-signalr.service.d.ts +24 -0
  147. package/lib/services/otp.service.d.ts +22 -0
  148. package/lib/services/proxy.service.d.ts +29 -0
  149. package/lib/services/scroll-to-error.service.d.ts +54 -0
  150. package/lib/services/translation.service.d.ts +10 -0
  151. package/lib/shared-components/confirmation.component.d.ts +77 -0
  152. package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
  153. package/lib/shared-components/grid.component.d.ts +138 -0
  154. package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
  155. package/lib/theme-css.d.ts +2 -0
  156. package/lib/theme-injector.service.d.ts +8 -0
  157. package/package.json +42 -0
  158. package/public-api.d.ts +3 -0
  159. package/schematics-compiled/collection.json +10 -0
  160. package/schematics-compiled/ng-add/index.d.ts +2 -0
  161. package/schematics-compiled/ng-add/index.js +67 -0
  162. package/schematics-compiled/ng-add/index.js.map +1 -0
  163. package/schematics-compiled/ng-add/schema.json +8 -0
  164. package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
  165. package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
  166. package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
  167. package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
  168. package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
  169. package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
  170. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
  171. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
  172. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
  173. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
  174. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
  175. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
  176. package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
  177. package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
  178. package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
  179. package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
  180. package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
  181. package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
  182. package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
@@ -0,0 +1,272 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { FormModelExtenxions, } from '../models/forms.model';
3
+ import { Md5 } from 'ts-md5';
4
+ export class Utils {
5
+ static { this.bigInt = Number(BigInt('900719925')); }
6
+ static json2csv(items) {
7
+ const replacer = (_key, value) => (value === null ? '' : value);
8
+ let header = Object.keys(items[0]);
9
+ header = header.filter((h) => h !== 'locked' && h != 'active');
10
+ const csv = [
11
+ header.join(','),
12
+ ...items.map((row) => header
13
+ .map((fieldName) => JSON.stringify(row[fieldName], replacer))
14
+ .join(',')),
15
+ ].join('\r\n');
16
+ return csv;
17
+ }
18
+ static csv2json(csv) {
19
+ const lines = csv.split(/\r?\n/).filter((line) => line.trim() !== '');
20
+ if (lines.length === 0)
21
+ return [];
22
+ const headers = Utils.parseCsvLine(lines[0]);
23
+ const result = [];
24
+ for (let i = 1; i < lines.length; i++) {
25
+ const obj = {};
26
+ const currentline = Utils.parseCsvLine(lines[i]);
27
+ for (let j = 0; j < headers.length; j++) {
28
+ const lineText = currentline[j];
29
+ if (lineText !== undefined) {
30
+ obj[headers[j]] = Utils.trim(lineText, '"');
31
+ }
32
+ }
33
+ result.push(obj);
34
+ }
35
+ return result;
36
+ }
37
+ static parseCsvLine(line) {
38
+ const result = [];
39
+ let current = '';
40
+ let inQuotes = false;
41
+ for (let i = 0; i < line.length; i++) {
42
+ const char = line[i];
43
+ if (char === '"' && (i === 0 || line[i - 1] !== '\\')) {
44
+ inQuotes = !inQuotes;
45
+ continue;
46
+ }
47
+ if (char === ',' && !inQuotes) {
48
+ result.push(current);
49
+ current = '';
50
+ }
51
+ else {
52
+ current += char;
53
+ }
54
+ }
55
+ result.push(current);
56
+ return result;
57
+ }
58
+ static trim(str, ch) {
59
+ var start = 0, end = str.length;
60
+ while (start < end && str[start] === ch)
61
+ ++start;
62
+ while (end > start && str[end - 1] === ch)
63
+ --end;
64
+ return start > 0 || end < str.length ? str.substring(start, end) : str;
65
+ }
66
+ static download(blob, name) {
67
+ const anchor = document.createElement('a');
68
+ anchor.download = name;
69
+ anchor.href = (window.webkitURL || window.URL).createObjectURL(blob);
70
+ anchor.click();
71
+ }
72
+ static generateUUID() {
73
+ return uuidv4();
74
+ }
75
+ static copyProperties(sourceObj, destObj) {
76
+ Object.keys(sourceObj).forEach((key) => (destObj[key] = sourceObj[key]));
77
+ }
78
+ static correctDate(date) {
79
+ return new Date(date.getTime() - date.getTimezoneOffset() * 60000);
80
+ }
81
+ static formatString(str, val) {
82
+ for (let index = 0; index < val.length; index++) {
83
+ str = str.replace(`{${index}}`, val[index]);
84
+ }
85
+ return str;
86
+ }
87
+ static removeNewLinesAndSpaces(str) {
88
+ return str.replace(/(\r\n|\n|\r)/gm, '').replace(/\s/g, '');
89
+ }
90
+ static removeNewLines(str) {
91
+ return str.replace(/(\r\n|\n|\r)/gm, '');
92
+ }
93
+ static findTranslation(translations, langIso) {
94
+ if (translations) {
95
+ var tr = translations.find((t) => t.languageIso == langIso);
96
+ if (tr && tr.value) {
97
+ return tr.value;
98
+ }
99
+ }
100
+ return '';
101
+ }
102
+ static findTranslationInfo(translationName, translations, langIso) {
103
+ if (translations) {
104
+ var tr = translations.find((t) => t.name == translationName);
105
+ if (tr) {
106
+ return this.findTranslation(tr.values, langIso);
107
+ }
108
+ }
109
+ ;
110
+ return '';
111
+ }
112
+ static findLanguageIsoById(languages, languageId) {
113
+ const match = languages.find((a) => a.id == languageId);
114
+ if (match) {
115
+ return match.iso;
116
+ }
117
+ return null;
118
+ }
119
+ static findLanguageIdByIso(languages, iso) {
120
+ const match = languages.find((a) => a.iso == iso);
121
+ if (match) {
122
+ return match.id;
123
+ }
124
+ return 0;
125
+ }
126
+ static findValueTranslation(translations, languageId) {
127
+ if (translations) {
128
+ var tr = translations.find((t) => t.languageId == languageId);
129
+ if (tr) {
130
+ return tr.value;
131
+ }
132
+ }
133
+ return undefined;
134
+ }
135
+ static findErrorTranslationValueOrDefault(errorsTranslations, langIso, errorCode) {
136
+ if (errorsTranslations) {
137
+ const found = errorsTranslations.find((e) => e.code === errorCode);
138
+ if (found) {
139
+ return found.translations.find((t) => t.languageIso === langIso)?.value ?? 'N/A';
140
+ }
141
+ }
142
+ return 'N/A';
143
+ }
144
+ static findErrorTranslationLabel(errorsTranslations, langIso, errorCode) {
145
+ if (errorsTranslations) {
146
+ const found = errorsTranslations.find((e) => e.code === errorCode);
147
+ if (found) {
148
+ return found.translations.find((t) => t.languageIso === langIso);
149
+ }
150
+ }
151
+ return undefined;
152
+ }
153
+ static createErrorTranslationMssageWithParameters(errorsTranslations, langIso, errorCode, params) {
154
+ const translation = Utils.findErrorTranslationLabel(errorsTranslations, langIso, errorCode);
155
+ let errorMessage = 'An error has occured';
156
+ if (translation && translation.value) {
157
+ errorMessage = translation.value;
158
+ if (params) {
159
+ for (let i = 0; i < params.length; i++) {
160
+ errorMessage = errorMessage.replace('{' + i + '}', params[i]);
161
+ }
162
+ }
163
+ }
164
+ else
165
+ errorMessage = '';
166
+ return errorMessage;
167
+ }
168
+ static objectsAreEqual(obj1, obj2) {
169
+ if (obj1 && obj2) {
170
+ const string = JSON.stringify(this.removeUndefinedAndSortProperties(obj1));
171
+ const string2 = JSON.stringify(this.removeUndefinedAndSortProperties(obj2));
172
+ let hash = Md5.hashStr(string);
173
+ let hash2 = Md5.hashStr(string2);
174
+ return hash === hash2;
175
+ }
176
+ if (obj1 && !obj2) {
177
+ return false;
178
+ }
179
+ if (!obj1 && obj2) {
180
+ return false;
181
+ }
182
+ return true;
183
+ }
184
+ static removeUndefinedAndSortProperties(obj) {
185
+ if (typeof obj != 'object' || obj === null || obj === undefined) {
186
+ return obj;
187
+ }
188
+ if (obj instanceof Array) {
189
+ for (var i = 0; i < obj.length; i++) {
190
+ obj[i] = Utils.removeUndefinedAndSortProperties(obj[i]);
191
+ }
192
+ return obj;
193
+ }
194
+ var keys = Object.keys(obj);
195
+ keys.sort();
196
+ let newObject = {};
197
+ for (var i = 0; i < keys.length; i++) {
198
+ var val = obj[keys[i]];
199
+ if (val) {
200
+ newObject[keys[i]] = Utils.removeUndefinedAndSortProperties(val);
201
+ }
202
+ }
203
+ return newObject;
204
+ }
205
+ static getFileExtension(fileName) {
206
+ if (fileName) {
207
+ const splitted = fileName.split('.');
208
+ if (splitted.length > 1) {
209
+ return splitted.pop();
210
+ }
211
+ }
212
+ return undefined;
213
+ }
214
+ static getFieldsFromState(state, selectedMethodId, returnOwnFields) {
215
+ if (returnOwnFields) {
216
+ let apiMethod = [
217
+ ...(state.api?.getItems ?? []),
218
+ ...(state.api?.sendItems ?? []),
219
+ ].find((m) => m.id === selectedMethodId);
220
+ return apiMethod?.fields ?? [];
221
+ }
222
+ else {
223
+ if (!state) {
224
+ return [];
225
+ }
226
+ let ext = new FormModelExtenxions(state);
227
+ let fluxFields = ext.fluxItemsWithGetApiMethods(selectedMethodId);
228
+ return fluxFields;
229
+ }
230
+ }
231
+ static base64toBlob(b64Data, contentType = '', sliceSize = 512) {
232
+ const byteCharacters = atob(b64Data);
233
+ const byteArrays = [];
234
+ for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
235
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
236
+ const byteNumbers = new Array(slice.length);
237
+ for (let i = 0; i < slice.length; i++) {
238
+ byteNumbers[i] = slice.charCodeAt(i);
239
+ }
240
+ const byteArray = new Uint8Array(byteNumbers);
241
+ byteArrays.push(byteArray);
242
+ }
243
+ const blob = new Blob(byteArrays, { type: contentType });
244
+ return blob;
245
+ }
246
+ static copyToClipboard(text) {
247
+ if (navigator.clipboard && navigator.clipboard.writeText) {
248
+ return navigator.clipboard.writeText(text);
249
+ }
250
+ else {
251
+ // Fallback for unsupported browsers
252
+ return new Promise((resolve, reject) => {
253
+ const textarea = document.createElement('textarea');
254
+ textarea.value = text;
255
+ textarea.style.position = 'fixed';
256
+ document.body.appendChild(textarea);
257
+ textarea.focus();
258
+ textarea.select();
259
+ try {
260
+ document.execCommand('copy');
261
+ document.body.removeChild(textarea);
262
+ resolve();
263
+ }
264
+ catch (err) {
265
+ document.body.removeChild(textarea);
266
+ reject(err);
267
+ }
268
+ });
269
+ }
270
+ }
271
+ }
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL290aGVycy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQVc3QixNQUFNLE9BQU8sS0FBSzthQUNULFdBQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFcEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFZO1FBQzFCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBUyxFQUFFLEtBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sR0FBRyxHQUFHO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDaEIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBeUIsRUFBRSxFQUFFLENBQ3pDLE1BQU07aUJBQ0gsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFR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Q0FBQztZQUN6RCxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ04sb0NBQW9DO1lBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDO29CQUNILFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHtcbiAgRXJyb3JUcmFuc2xhdGlvbnMsXG4gIEZvcm1Nb2RlbCxcbiAgRm9ybU1vZGVsRXh0ZW54aW9ucyxcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IExhYmVsSW5mbywgVHJhbnNsYXRpb25JbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2xhYmVsLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgTWQ1IH0gZnJvbSAndHMtbWQ1JztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRHRvIH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xuaW1wb3J0IHsgTGFuZ3VhZ2UgfSBmcm9tICcuLi9tb2RlbHMvbGFuZ3VhZ2UubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBDc3NSdWxlcyA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xufTtcblxuXG5leHBvcnQgY2xhc3MgVXRpbHMge1xuICBzdGF0aWMgYmlnSW50OiBudW1iZXIgPSBOdW1iZXIoQmlnSW50KCc5MDA3MTk5MjUnKSk7XG5cbiAgc3RhdGljIGpzb24yY3N2KGl0ZW1zOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoX2tleTogYW55LCB2YWx1ZTogbnVsbCkgPT4gKHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZSk7XG4gICAgbGV0IGhlYWRlciA9IE9iamVjdC5rZXlzKGl0ZW1zWzBdKTtcbiAgICBoZWFkZXIgPSBoZWFkZXIuZmlsdGVyKChoKSA9PiBoICE9PSAnbG9ja2VkJyAmJiBoICE9ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjc3YgPSBbXG4gICAgICBoZWFkZXIuam9pbignLCcpLFxuICAgICAgLi4uaXRlbXMubWFwKChyb3c6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PlxuICAgICAgICBoZWFkZXJcbiAgICAgICAgICAubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpXG4gICAgICAgICAgLmpvaW4oJywnKVxuICAgICAgKSxcbiAgICBdLmpvaW4oJ1xcclxcbicpO1xuICAgIHJldHVybiBjc3Y7XG4gIH1cblxuICBzdGF0aWMgY3N2Mmpzb24oY3N2OiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5lcyA9IGNzdi5zcGxpdCgvXFxyP1xcbi8pLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkgIT09ICcnKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBoZWFkZXJzID0gVXRpbHMucGFyc2VDc3ZMaW5lKGxpbmVzWzBdKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgICBjb25zdCBjdXJyZW50bGluZSA9IFV0aWxzLnBhcnNlQ3N2TGluZShsaW5lc1tpXSk7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGhlYWRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgbGluZVRleHQgPSBjdXJyZW50bGluZVtqXTtcbiAgICAgICAgaWYgKGxpbmVUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpbaGVhZGVyc1tqXV0gPSBVdGlscy50cmltKGxpbmVUZXh0LCAnXCInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQ3N2TGluZShsaW5lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBjdXJyZW50ID0gJyc7XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBsaW5lW2ldO1xuICAgICAgaWYgKGNoYXIgPT09ICdcIicgJiYgKGkgPT09IDAgfHwgbGluZVtpIC0gMV0gIT09ICdcXFxcJykpIHtcbiAgICAgICAgaW5RdW90ZXMgPSAhaW5RdW90ZXM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXIgPT09ICcsJyAmJiAhaW5RdW90ZXMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICAgIGN1cnJlbnQgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2hhcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyB0cmltKHN0cjogc3RyaW5nLCBjaDogc3RyaW5nKSB7XG4gICAgdmFyIHN0YXJ0ID0gMCxcbiAgICAgIGVuZCA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmIHN0cltzdGFydF0gPT09IGNoKSArK3N0YXJ0O1xuICAgIHdoaWxlIChlbmQgPiBzdGFydCAmJiBzdHJbZW5kIC0gMV0gPT09IGNoKSAtLWVuZDtcbiAgICByZXR1cm4gc3RhcnQgPiAwIHx8IGVuZCA8IHN0ci5sZW5ndGggPyBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpIDogc3RyO1xuICB9XG5cbiAgc3RhdGljIGRvd25sb2FkKGJsb2I6IEJsb2IsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhbmNob3IuZG93bmxvYWQgPSBuYW1lO1xuICAgIGFuY2hvci5ocmVmID0gKHdpbmRvdy53ZWJraXRVUkwgfHwgd2luZG93LlVSTCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGFuY2hvci5jbGljaygpO1xuICB9XG5cbiAgc3RhdGljIGdlbmVyYXRlVVVJRCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dWlkdjQoKTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5UHJvcGVydGllcyhzb3VyY2VPYmo6IGFueSwgZGVzdE9iajogYW55KSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlT2JqKS5mb3JFYWNoKChrZXkpID0+IChkZXN0T2JqW2tleV0gPSBzb3VyY2VPYmpba2V5XSkpO1xuICB9XG5cbiAgc3RhdGljIGNvcnJlY3REYXRlKGRhdGU6IERhdGUpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCk7XG4gIH1cblxuICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cjogc3RyaW5nLCB2YWw6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKGB7JHtpbmRleH19YCwgdmFsW2luZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlTmV3TGluZXNBbmRTcGFjZXMoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhcXHJcXG58XFxufFxccikvZ20sICcnKS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZU5ld0xpbmVzKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLCAnJyk7XG4gIH1cblxuICBzdGF0aWMgZmluZFRyYW5zbGF0aW9uKFxuICAgIHRyYW5zbGF0aW9uczogTGFiZWxJbmZvW10sXG4gICAgbGFuZ0lzbzogc3RyaW5nXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRyYW5zbGF0aW9ucykge1xuICAgICAgdmFyIHRyID0gdHJhbnNsYXRpb25zLmZpbmQoKHQpID0+IHQubGFuZ3VhZ2VJc28gPT0gbGFuZ0lzbyk7XG4gICAgICBpZiAodHIgJiYgdHIudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzdGF0aWMgZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICB0cmFuc2xhdGlvbk5hbWU6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uSW5mb1tdLFxuICAgIGxhbmdJc286IHN0cmluZ1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgeyAgICBcbiAgICBpZiAodHJhbnNsYXRpb25zKSB7XG4gICAgICB2YXIgdHIgPSB0cmFuc2xhdGlvbnMuZmluZCgodCkgPT4gdC5uYW1lID09IHRyYW5zbGF0aW9uTmFtZSk7XG4gICAgICBpZiAodHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFRyYW5zbGF0aW9uKHRyLnZhbHVlcywgbGFuZ0lzbyk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzdGF0aWMgZmluZExhbmd1YWdlSXNvQnlJZChcbiAgICBsYW5ndWFnZXM6IExhbmd1YWdlW10sXG4gICAgbGFuZ3VhZ2VJZDogbnVtYmVyXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2ggPSBsYW5ndWFnZXMuZmluZCgoYSkgPT4gYS5pZCA9PSBsYW5ndWFnZUlkKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaC5pc287XG4gICAgfVxuICAgIHJldHVybiBudWxsIGFzIGFueTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kTGFuZ3VhZ2VJZEJ5SXNvKGxhbmd1YWdlczogTGFuZ3VhZ2VbXSwgaXNvOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG1hdGNoID0gbGFuZ3VhZ2VzLmZpbmQoKGEpID0+IGEuaXNvID09IGlzbyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2guaWQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3RhdGljIGZpbmRWYWx1ZVRyYW5zbGF0aW9uKFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25EdG9bXSxcbiAgICBsYW5ndWFnZUlkOiBudW1iZXJcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHJhbnNsYXRpb25zKSB7XG4gICAgICB2YXIgdHIgPSB0cmFuc2xhdGlvbnMuZmluZCgodCkgPT4gdC5sYW5ndWFnZUlkID09IGxhbmd1YWdlSWQpO1xuICAgICAgaWYgKHRyKSB7XG4gICAgICAgIHJldHVybiB0ci52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgIGVycm9yc1RyYW5zbGF0aW9uczogRXJyb3JUcmFuc2xhdGlvbnNbXSxcbiAgICBsYW5nSXNvOiBzdHJpbmcsXG4gICAgZXJyb3JDb2RlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3JzVHJhbnNsYXRpb25zKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGVycm9yc1RyYW5zbGF0aW9ucy5maW5kKChlKSA9PiBlLmNvZGUgPT09IGVycm9yQ29kZSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kLnRyYW5zbGF0aW9ucy5maW5kKCh0KSA9PiB0Lmxhbmd1YWdlSXNvID09PSBsYW5nSXNvKT8udmFsdWUgPz8gJ04vQSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnTi9BJztcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRXJyb3JUcmFuc2xhdGlvbkxhYmVsKFxuICAgIGVycm9yc1RyYW5zbGF0aW9uczogRXJyb3JUcmFuc2xhdGlvbnNbXSxcbiAgICBsYW5nSXNvOiBzdHJpbmcsXG4gICAgZXJyb3JDb2RlOiBzdHJpbmdcbiAgKTogTGFiZWxJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZXJyb3JzVHJhbnNsYXRpb25zKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGVycm9yc1RyYW5zbGF0aW9ucy5maW5kKChlKSA9PiBlLmNvZGUgPT09IGVycm9yQ29kZSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kLnRyYW5zbGF0aW9ucy5maW5kKCh0KSA9PiB0Lmxhbmd1YWdlSXNvID09PSBsYW5nSXNvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVFcnJvclRyYW5zbGF0aW9uTXNzYWdlV2l0aFBhcmFtZXRlcnMoXG4gICAgZXJyb3JzVHJhbnNsYXRpb25zOiBFcnJvclRyYW5zbGF0aW9uc1tdLFxuICAgIGxhbmdJc286IHN0cmluZyxcbiAgICBlcnJvckNvZGU6IHN0cmluZyxcbiAgICBwYXJhbXM6IHN0cmluZ1tdXG4gICkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25MYWJlbChcbiAgICAgIGVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgIGxhbmdJc28sXG4gICAgICBlcnJvckNvZGVcbiAgICApO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnQW4gZXJyb3IgaGFzIG9jY3VyZWQnO1xuICAgIGlmICh0cmFuc2xhdGlvbiAmJiB0cmFuc2xhdGlvbi52YWx1ZSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gdHJhbnNsYXRpb24udmFsdWU7XG4gICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoJ3snICsgaSArICd9JywgcGFyYW1zW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBlcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gIH1cblxuICBzdGF0aWMgb2JqZWN0c0FyZUVxdWFsKG9iajE6IGFueSwgb2JqMjogYW55KSB7XG4gICAgaWYgKG9iajEgJiYgb2JqMikge1xuICAgICAgY29uc3Qgc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMucmVtb3ZlVW5kZWZpbmVkQW5kU29ydFByb3BlcnRpZXMob2JqMSlcbiAgICAgICk7XG4gICAgICBjb25zdCBzdHJpbmcyID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMucmVtb3ZlVW5kZWZpbmVkQW5kU29ydFByb3BlcnRpZXMob2JqMilcbiAgICAgICk7XG4gICAgICBsZXQgaGFzaCA9IE1kNS5oYXNoU3RyKHN0cmluZyk7XG4gICAgICBsZXQgaGFzaDIgPSBNZDUuaGFzaFN0cihzdHJpbmcyKTtcbiAgICAgIHJldHVybiBoYXNoID09PSBoYXNoMjtcbiAgICB9XG4gICAgaWYgKG9iajEgJiYgIW9iajIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFvYmoxICYmIG9iajIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlVW5kZWZpbmVkQW5kU29ydFByb3BlcnRpZXMob2JqOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2JqW2ldID0gVXRpbHMucmVtb3ZlVW5kZWZpbmVkQW5kU29ydFByb3BlcnRpZXMob2JqW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGtleXMuc29ydCgpO1xuICAgIGxldCBuZXdPYmplY3Q6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IG9ialtrZXlzW2ldXTtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgbmV3T2JqZWN0W2tleXNbaV1dID0gVXRpbHMucmVtb3ZlVW5kZWZpbmVkQW5kU29ydFByb3BlcnRpZXModmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld09iamVjdDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWQgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xuICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHNwbGl0dGVkLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGdldEZpZWxkc0Zyb21TdGF0ZShcbiAgICBzdGF0ZTogRm9ybU1vZGVsLFxuICAgIHNlbGVjdGVkTWV0aG9kSWQ6IHN0cmluZyxcbiAgICByZXR1cm5Pd25GaWVsZHM/OiBib29sZWFuXG4gICkge1xuICAgIGlmIChyZXR1cm5Pd25GaWVsZHMpIHtcbiAgICAgIGxldCBhcGlNZXRob2QgPSBbXG4gICAgICAgIC4uLihzdGF0ZS5hcGk/LmdldEl0ZW1zID8/IFtdKSxcbiAgICAgICAgLi4uKHN0YXRlLmFwaT8uc2VuZEl0ZW1zID8/IFtdKSxcbiAgICAgIF0uZmluZCgobSkgPT4gbS5pZCA9PT0gc2VsZWN0ZWRNZXRob2RJZCk7XG4gICAgICByZXR1cm4gYXBpTWV0aG9kPy5maWVsZHMgPz8gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbGV0IGV4dCA9IG5ldyBGb3JtTW9kZWxFeHRlbnhpb25zKHN0YXRlKTtcbiAgICAgIGxldCBmbHV4RmllbGRzID0gZXh0LmZsdXhJdGVtc1dpdGhHZXRBcGlNZXRob2RzKHNlbGVjdGVkTWV0aG9kSWQpO1xuXG4gICAgICByZXR1cm4gZmx1eEZpZWxkcztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYmFzZTY0dG9CbG9iKGI2NERhdGE6IHN0cmluZywgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcblxuICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBzdGF0aWMgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSB7XG4gICAgICByZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIGZvciB1bnN1cHBvcnRlZCBicm93c2Vyc1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICB0ZXh0YXJlYS52YWx1ZSA9IHRleHQ7XG4gICAgICAgIHRleHRhcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRhcmVhKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,145 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { catchError, firstValueFrom, map, of } from 'rxjs';
3
+ import { ConfigService } from '../others/config-service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./auth-http.service";
6
+ export class ApplicationDataService {
7
+ constructor(http) {
8
+ this.http = http;
9
+ this.configService = inject(ConfigService);
10
+ }
11
+ uploadDocuments(uploadDocumentsDto) {
12
+ const createUrl = this.configService.readConfig().baseUrlBusiness +
13
+ '/appdata/uploadDocuments';
14
+ return this.http.post(createUrl, uploadDocumentsDto);
15
+ }
16
+ generateDocuments(generateDocumentsCommand) {
17
+ const url = this.configService.readConfig().baseUrlBusiness +
18
+ '/appdata/GenerateDocuments';
19
+ return this.http.post(url, generateDocumentsCommand);
20
+ }
21
+ getGenerateDocuments(getCommand) {
22
+ const url = this.configService.readConfig().baseUrlBusiness +
23
+ '/appdata/GetGeneratedDocuments';
24
+ return this.http.post(url, getCommand);
25
+ }
26
+ downloadFile(appDataId, docId, fileName) {
27
+ const url = this.configService.readConfig().baseUrlBusiness +
28
+ `/FileServer/download?appDataId=${appDataId}&docId=${docId}&fileName=${fileName}`;
29
+ return this.http.getExtended(url, { responseType: 'blob' });
30
+ }
31
+ scanId(scanIdCommand) {
32
+ const url = this.configService.readConfig().baseUrlBusiness + '/appdata/ScanId';
33
+ return this.http.post(url, scanIdCommand);
34
+ }
35
+ async getSteps(appDataId) {
36
+ const getUrl = this.configService.readConfig().baseUrlBusiness +
37
+ `/appdata/GetById/${appDataId}`;
38
+ var promise = this.http.get(getUrl).pipe(map((appData) => appData));
39
+ return await firstValueFrom(promise);
40
+ }
41
+ saveApp(appData) {
42
+ const saveUrl = this.configService.readConfig().baseUrlBusiness + '/appdata/SaveAppData';
43
+ const payload = {
44
+ ...appData,
45
+ fillData: appData.fillData ? JSON.stringify(appData.fillData) : undefined,
46
+ };
47
+ return this.http.post(saveUrl, payload);
48
+ }
49
+ saveStep(appDataId, currentStep, selectedOfferId = undefined) {
50
+ const saveUrl = this.configService.readConfig().baseUrlBusiness +
51
+ '/appdata/SaveAppDataStep';
52
+ const payload = {
53
+ appDataId: appDataId,
54
+ stepData: JSON.stringify(currentStep),
55
+ withNextStep: true,
56
+ selectedOfferId: selectedOfferId,
57
+ };
58
+ return this.http.post(saveUrl, payload);
59
+ }
60
+ getPreviousStep(appDataId) {
61
+ const getUrl = this.configService.readConfig().baseUrlBusiness +
62
+ '/appdata/setPreviousStep?appId=' +
63
+ appDataId;
64
+ return this.http.get(getUrl);
65
+ }
66
+ validateApi(apiValidateRequest) {
67
+ const url = this.configService.readConfig().baseUrlBusiness + '/ApiRequest/dorequest';
68
+ return this.http.post(url, apiValidateRequest);
69
+ }
70
+ doDocumentRequest(apiValidateRequest) {
71
+ const url = this.configService.readConfig().baseUrlBusiness +
72
+ '/ApiRequest/doDocumentRequest';
73
+ return this.http.post(url, apiValidateRequest);
74
+ }
75
+ convertDocumentToPdf(request) {
76
+ const url = this.configService.readConfig().baseUrlBusiness + '/appdata/convertToPdf';
77
+ return this.http.post(url, request);
78
+ }
79
+ makeActionApiCall(actionRequest) {
80
+ console.log('actionRequest from makeActionApiCall', actionRequest);
81
+ const url = this.configService.readConfig().baseUrlBusiness + '/MakeAction/doaction';
82
+ return this.http.post(url, actionRequest);
83
+ }
84
+ makeProcessApiCall(appDataID) {
85
+ const url = this.configService.readConfig().baseUrlInfrastructure + '/Process';
86
+ return this.http.post(url, { appId: appDataID }).pipe(map((response) => {
87
+ console.log('response from makeProcessApiCall', response), response;
88
+ }), catchError((error) => of({ ...error, body: false })));
89
+ }
90
+ getProcessStatus(appDataID) {
91
+ const url = this.configService.readConfig().baseUrlInfrastructure +
92
+ '/Process/get-status?appId=' +
93
+ appDataID;
94
+ return this.http.get(url);
95
+ }
96
+ getOffers(appDataId) {
97
+ const url = this.configService.readConfig().baseUrlBusiness +
98
+ `/appdata/getOffers/${appDataId}`;
99
+ return this.http.get(url);
100
+ }
101
+ makeStatusApiCall(appDataId, stepId, setNextStep = false) {
102
+ const url = this.configService.readConfig().baseUrlBusiness +
103
+ '/appdata/doStatusAction';
104
+ return this.http.post(url, {
105
+ appDataId: appDataId,
106
+ stepId: stepId,
107
+ setNextStep: setNextStep,
108
+ });
109
+ }
110
+ async setCurrentStep(appDataId, stepId) {
111
+ const url = this.configService.readConfig().baseUrlBusiness +
112
+ `/appdata/setCurrentStep?appId=${appDataId}&stepId=${stepId}`;
113
+ const response = await firstValueFrom(this.http.getExtended(url, { responseType: 'text' }));
114
+ return response;
115
+ }
116
+ enrolCard(enrolCardCommand) {
117
+ const url = this.configService.readConfig().baseUrlBusiness + '/appdata/EnrolCard';
118
+ return this.http.post(url, enrolCardCommand);
119
+ }
120
+ getEnrolmentStatus(dataUrlId) {
121
+ const url = this.configService.readConfig().baseUrlBusiness +
122
+ `/appdata/GetEnrolmentStatus/${dataUrlId}`;
123
+ return this.http.get(url);
124
+ }
125
+ getDataUrl(dataUrlId) {
126
+ const url = this.configService.readConfig().baseUrlBusiness +
127
+ `/DataURL/GetById/${dataUrlId}`;
128
+ return this.http.get(url);
129
+ }
130
+ changeLanguage(appDataUuid, languageISOCode) {
131
+ const url = this.configService.readConfig().baseUrlBusiness +
132
+ '/appdata/changeLanguage';
133
+ const payload = {
134
+ appDataId: appDataUuid,
135
+ languageIso: languageISOCode,
136
+ };
137
+ return this.http.post(url, payload);
138
+ }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationDataService, deps: [{ token: i1.AuthHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
140
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationDataService }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationDataService, decorators: [{
143
+ type: Injectable
144
+ }], ctorParameters: () => [{ type: i1.AuthHttpService }] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25EYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFrQnpELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFBb0IsSUFBcUI7UUFBckIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFFekMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFGTSxDQUFDO0lBSTdDLGVBQWUsQ0FDYixrQkFBaUQ7UUFFakQsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxlQUFlO1lBQy9DLDBCQUEwQixDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGlCQUFpQixDQUNmLHdCQUF5RDtRQUV6RCxNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLGVBQWU7WUFDL0MsNEJBQTRCLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLFVBQStDO1FBRS9DLE1BQU0sR0FBRyxHQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsVUFB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QVcsRUFBRSxlQUFlO1NBQzdCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDOytHQWpOVSxzQkFBc0I7bUhBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBBcGlEb2N1bWVudFJlcXVlc3QsXG4gIEFwaVZhbGlkYXRlUmVxdWVzdCxcbiAgQXBwbGljYXRpb25FbnJvbENhcmREdG8sXG4gIEFwcGxpY2F0aW9uR2VuZXJhdGVEb2N1bWVudHNEdG8sXG4gIEFwcGxpY2F0aW9uR2V0R2VuZXJhdGVkRG9jdW1lbnRzRHRvLFxuICBBcHBsaWNhdGlvblVwbG9hZERvY3VtZW50c0R0byxcbiAgQ29udmVydERvY3VtZW50VG9QZGZSZXF1ZXN0LFxuICBDb252ZXJ0RG9jdW1lbnRUb1BkZlJlc3BvbnNlLFxuICBHZW5lcmF0ZWREb2N1bWVudCxcbiAgTWFrZUFjdGlvblJlcXVlc3QsXG4gIFNjYW5JZER0byxcbn0gZnJvbSAnLi4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IEFwcERhdGEgfSBmcm9tICcuLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuaW1wb3J0IHsgQXV0aEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWh0dHAuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBBdXRoSHR0cFNlcnZpY2UpIHt9XG5cbiAgY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcblxuICB1cGxvYWREb2N1bWVudHMoXG4gICAgdXBsb2FkRG9jdW1lbnRzRHRvOiBBcHBsaWNhdGlvblVwbG9hZERvY3VtZW50c0R0b1xuICApOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgY3JlYXRlVXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICtcbiAgICAgICcvYXBwZGF0YS91cGxvYWREb2N1bWVudHMnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGNyZWF0ZVVybCwgdXBsb2FkRG9jdW1lbnRzRHRvKTtcbiAgfVxuXG4gIGdlbmVyYXRlRG9jdW1lbnRzKFxuICAgIGdlbmVyYXRlRG9jdW1lbnRzQ29tbWFuZDogQXBwbGljYXRpb25HZW5lcmF0ZURvY3VtZW50c0R0b1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArXG4gICAgICAnL2FwcGRhdGEvR2VuZXJhdGVEb2N1bWVudHMnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxzdHJpbmdbXT4odXJsLCBnZW5lcmF0ZURvY3VtZW50c0NvbW1hbmQpO1xuICB9XG5cbiAgZ2V0R2VuZXJhdGVEb2N1bWVudHMoXG4gICAgZ2V0Q29tbWFuZDogQXBwbGljYXRpb25HZXRHZW5lcmF0ZWREb2N1bWVudHNEdG9cbiAgKTogT2JzZXJ2YWJsZTxHZW5lcmF0ZWREb2N1bWVudFtdPiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICtcbiAgICAgICcvYXBwZGF0YS9HZXRHZW5lcmF0ZWREb2N1bWVudHMnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZW5lcmF0ZWREb2N1bWVudFtdPih1cmwsIGdldENvbW1hbmQpO1xuICB9XG5cbiAgZG93bmxvYWRGaWxlKFxuICAgIGFwcERhdGFJZDogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmcsXG4gICAgZmlsZU5hbWU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArXG4gICAgICBgL0ZpbGVTZXJ2ZXIvZG93bmxvYWQ/YXBwRGF0YUlkPSR7YXBwRGF0YUlkfSZkb2NJZD0ke2RvY0lkfSZmaWxlTmFtZT0ke2ZpbGVOYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXRFeHRlbmRlZCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSk7XG4gIH1cblxuICBzY2FuSWQoc2NhbklkQ29tbWFuZDogU2NhbklkRHRvKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgKyAnL2FwcGRhdGEvU2NhbklkJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVtYmVyPih1cmwsIHNjYW5JZENvbW1hbmQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RlcHMoYXBwRGF0YUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGdldFVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArXG4gICAgICBgL2FwcGRhdGEvR2V0QnlJZC8ke2FwcERhdGFJZH1gO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmh0dHAuZ2V0PGFueT4oZ2V0VXJsKS5waXBlKG1hcCgoYXBwRGF0YSkgPT4gYXBwRGF0YSkpO1xuICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShwcm9taXNlKTtcbiAgfVxuXG4gIHNhdmVBcHAoYXBwRGF0YTogQXBwRGF0YSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgc2F2ZVVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArICcvYXBwZGF0YS9TYXZlQXBwRGF0YSc7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgLi4uYXBwRGF0YSxcbiAgICAgIGZpbGxEYXRhOiBhcHBEYXRhLmZpbGxEYXRhID8gSlNPTi5zdHJpbmdpZnkoYXBwRGF0YS5maWxsRGF0YSkgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHNhdmVVcmwsIHBheWxvYWQpO1xuICB9XG5cbiAgc2F2ZVN0ZXAoXG4gICAgYXBwRGF0YUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFN0ZXA6IGFueSxcbiAgICBzZWxlY3RlZE9mZmVySWQ6IGFueSA9IHVuZGVmaW5lZFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHNhdmVVcmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgK1xuICAgICAgJy9hcHBkYXRhL1NhdmVBcHBEYXRhU3RlcCc7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYXBwRGF0YUlkOiBhcHBEYXRhSWQsXG4gICAgICBzdGVwRGF0YTogSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0ZXApLFxuICAgICAgd2l0aE5leHRTdGVwOiB0cnVlLFxuICAgICAgc2VsZWN0ZWRPZmZlcklkOiBzZWxlY3RlZE9mZmVySWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHNhdmVVcmwsIHBheWxvYWQpO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNTdGVwKGFwcERhdGFJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBnZXRVcmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgK1xuICAgICAgJy9hcHBkYXRhL3NldFByZXZpb3VzU3RlcD9hcHBJZD0nICtcbiAgICAgIGFwcERhdGFJZDtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oZ2V0VXJsKTtcbiAgfVxuXG4gIHZhbGlkYXRlQXBpKGFwaVZhbGlkYXRlUmVxdWVzdDogQXBpVmFsaWRhdGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgKyAnL0FwaVJlcXVlc3QvZG9yZXF1ZXN0JztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGFwaVZhbGlkYXRlUmVxdWVzdCk7XG4gIH1cblxuICBkb0RvY3VtZW50UmVxdWVzdChhcGlWYWxpZGF0ZVJlcXVlc3Q6IEFwaURvY3VtZW50UmVxdWVzdCk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgK1xuICAgICAgJy9BcGlSZXF1ZXN0L2RvRG9jdW1lbnRSZXF1ZXN0JztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGFwaVZhbGlkYXRlUmVxdWVzdCk7XG4gIH1cblxuICBjb252ZXJ0RG9jdW1lbnRUb1BkZihcbiAgICByZXF1ZXN0OiBDb252ZXJ0RG9jdW1lbnRUb1BkZlJlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTxDb252ZXJ0RG9jdW1lbnRUb1BkZlJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICsgJy9hcHBkYXRhL2NvbnZlcnRUb1BkZic7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENvbnZlcnREb2N1bWVudFRvUGRmUmVzcG9uc2U+KHVybCwgcmVxdWVzdCk7XG4gIH1cblxuICBtYWtlQWN0aW9uQXBpQ2FsbChhY3Rpb25SZXF1ZXN0OiBNYWtlQWN0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ2FjdGlvblJlcXVlc3QgZnJvbSBtYWtlQWN0aW9uQXBpQ2FsbCcsIGFjdGlvblJlcXVlc3QpO1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArICcvTWFrZUFjdGlvbi9kb2FjdGlvbic7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odXJsLCBhY3Rpb25SZXF1ZXN0KTtcbiAgfVxuXG4gIG1ha2VQcm9jZXNzQXBpQ2FsbChhcHBEYXRhSUQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEluZnJhc3RydWN0dXJlICsgJy9Qcm9jZXNzJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIHsgYXBwSWQ6IGFwcERhdGFJRCB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVzcG9uc2UgZnJvbSBtYWtlUHJvY2Vzc0FwaUNhbGwnLCByZXNwb25zZSksIHJlc3BvbnNlO1xuICAgICAgfSksXG5cbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiBvZih7IC4uLmVycm9yLCBib2R5OiBmYWxzZSB9KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvY2Vzc1N0YXR1cyhhcHBEYXRhSUQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEluZnJhc3RydWN0dXJlICtcbiAgICAgICcvUHJvY2Vzcy9nZXQtc3RhdHVzP2FwcElkPScgK1xuICAgICAgYXBwRGF0YUlEO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG51bWJlcj4odXJsKTtcbiAgfVxuXG4gIGdldE9mZmVycyhhcHBEYXRhSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICtcbiAgICAgIGAvYXBwZGF0YS9nZXRPZmZlcnMvJHthcHBEYXRhSWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCk7XG4gIH1cblxuICBtYWtlU3RhdHVzQXBpQ2FsbChcbiAgICBhcHBEYXRhSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBzZXROZXh0U3RlcDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArXG4gICAgICAnL2FwcGRhdGEvZG9TdGF0dXNBY3Rpb24nO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHVybCwge1xuICAgICAgYXBwRGF0YUlkOiBhcHBEYXRhSWQsXG4gICAgICBzdGVwSWQ6IHN0ZXBJZCxcbiAgICAgIHNldE5leHRTdGVwOiBzZXROZXh0U3RlcCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEN1cnJlbnRTdGVwKGFwcERhdGFJZDogc3RyaW5nLCBzdGVwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArXG4gICAgICBgL2FwcGRhdGEvc2V0Q3VycmVudFN0ZXA/YXBwSWQ9JHthcHBEYXRhSWR9JnN0ZXBJZD0ke3N0ZXBJZH1gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmh0dHAuZ2V0RXh0ZW5kZWQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBlbnJvbENhcmQoZW5yb2xDYXJkQ29tbWFuZDogQXBwbGljYXRpb25FbnJvbENhcmREdG8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxCdXNpbmVzcyArICcvYXBwZGF0YS9FbnJvbENhcmQnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxzdHJpbmdbXT4odXJsLCBlbnJvbENhcmRDb21tYW5kKTtcbiAgfVxuXG4gIGdldEVucm9sbWVudFN0YXR1cyhkYXRhVXJsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICtcbiAgICAgIGAvYXBwZGF0YS9HZXRFbnJvbG1lbnRTdGF0dXMvJHtkYXRhVXJsSWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCk7XG4gIH1cblxuICBnZXREYXRhVXJsKGRhdGFVcmxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgK1xuICAgICAgYC9EYXRhVVJML0dldEJ5SWQvJHtkYXRhVXJsSWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCk7XG4gIH1cblxuICAgIGNoYW5nZUxhbmd1YWdlKGFwcERhdGFVdWlkOiBzdHJpbmcsIGxhbmd1YWdlSVNPQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEJ1c2luZXNzICtcbiAgICAgICcvYXBwZGF0YS9jaGFuZ2VMYW5ndWFnZSc7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYXBwRGF0YUlkOiBhcHBEYXRhVXVpZCxcbiAgICAgIGxhbmd1YWdlSXNvOiBsYW5ndWFnZUlTT0NvZGUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHVybCwgcGF5bG9hZCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,80 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpHeaders, } from '@angular/common/http';
3
+ import { catchError, switchMap, throwError } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ import * as i2 from "../origin-form-auth.service";
7
+ export class AuthHttpService {
8
+ constructor(http, authService) {
9
+ this.http = http;
10
+ this.authService = authService;
11
+ this.isRefreshing = false;
12
+ }
13
+ getHeaders() {
14
+ const token = this.authService.getToken();
15
+ return new HttpHeaders({
16
+ Authorization: `Bearer ${token}`,
17
+ 'Content-Type': 'application/json',
18
+ });
19
+ }
20
+ get(url) {
21
+ return this.http
22
+ .get(url, { headers: this.getHeaders() })
23
+ .pipe(catchError((error) => this.handleError(error, () => this.get(url))));
24
+ }
25
+ getExtended(url, options = {}) {
26
+ return this.http
27
+ .get(url, { ...options, headers: this.getHeaders() })
28
+ .pipe(catchError((error) => this.handleError(error, () => this.getExtended(url, options))));
29
+ }
30
+ post(url, body) {
31
+ return this.http
32
+ .post(url, body, { headers: this.getHeaders() })
33
+ .pipe(catchError((error) => this.handleError(error, () => this.post(url, body))));
34
+ }
35
+ postExtended(url, body, options = null) {
36
+ return this.http
37
+ .post(url, body, { ...options, headers: this.getHeaders() })
38
+ .pipe(catchError((error) => this.handleError(error, () => this.postExtended(url, body, options))));
39
+ }
40
+ put(url, body) {
41
+ return this.http
42
+ .put(url, body, { headers: this.getHeaders() })
43
+ .pipe(catchError((error) => this.handleError(error, () => this.put(url, body))));
44
+ }
45
+ delete(url) {
46
+ return this.http
47
+ .delete(url, { headers: this.getHeaders() })
48
+ .pipe(catchError((error) => this.handleError(error, () => this.delete(url))));
49
+ }
50
+ handleError(error, retryRequest) {
51
+ if (error.status === 401) {
52
+ return this.handle401Error(retryRequest);
53
+ }
54
+ return throwError(() => error);
55
+ }
56
+ handle401Error(retryRequest) {
57
+ if (!this.isRefreshing) {
58
+ this.isRefreshing = true;
59
+ return this.authService.refreshToken().pipe(switchMap((newToken) => {
60
+ this.isRefreshing = false;
61
+ return retryRequest(); // Retry the failed request with the new token
62
+ }), catchError((err) => {
63
+ this.isRefreshing = false;
64
+ return throwError(() => err);
65
+ }));
66
+ }
67
+ else {
68
+ return retryRequest();
69
+ }
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthHttpService, deps: [{ token: i1.HttpClient }, { token: i2.OriginFormAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
72
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthHttpService, providedIn: 'root' }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthHttpService, decorators: [{
75
+ type: Injectable,
76
+ args: [{
77
+ providedIn: 'root', // Ensures it is available in the application using the library
78
+ }]
79
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.OriginFormAuthService }] });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NlcnZpY2VzL2F1dGgtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUlMLFdBQVcsR0FFWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU1yRSxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUNVLElBQWdCLEVBQ2hCLFdBQWtDO1FBRGxDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBSnBDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBSzFCLENBQUM7SUFFSSxVQUFVO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDaEMsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFJLEdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7YUFDM0MsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7SUFDTixD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LENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixPQUFPLFlBQVksRUFBRSxDQUFDLENBQUMsOENBQThDO1lBQ3ZFLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQzsrR0EzR1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTSxFQUFFLCtEQUErRDtpQkFDcEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEV2ZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yaWdpbkZvcm1BdXRoU2VydmljZSB9IGZyb20gJy4uL29yaWdpbi1mb3JtLWF1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLCAvLyBFbnN1cmVzIGl0IGlzIGF2YWlsYWJsZSBpbiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIGxpYnJhcnlcbn0pXG5leHBvcnQgY2xhc3MgQXV0aEh0dHBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogT3JpZ2luRm9ybUF1dGhTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGdldEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbigpO1xuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0PFQ+KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxUPih1cmwsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgKCkgPT4gdGhpcy5nZXQ8VD4odXJsKSkpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0RXh0ZW5kZWQ8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxUIHwgSHR0cEV2ZW50PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxUPih1cmwsIHsgLi4ub3B0aW9ucywgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCAoKSA9PiB0aGlzLmdldEV4dGVuZGVkPFQ+KHVybCwgb3B0aW9ucykpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwb3N0PFQ+KHVybDogc3RyaW5nLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxUPih1cmwsIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCAoKSA9PiB0aGlzLnBvc3Q8VD4odXJsLCBib2R5KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHBvc3RFeHRlbmRlZDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgb3B0aW9uczogYW55IHwgbnVsbCA9IG51bGxcbiAgKTogT2JzZXJ2YWJsZTxUIHwgSHR0cEV2ZW50PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8VD4odXJsLCBib2R5LCB7IC4uLm9wdGlvbnMsIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMucG9zdEV4dGVuZGVkPFQ+KHVybCwgYm9keSwgb3B0aW9ucylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwdXQ8VD4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQ8VD4odXJsLCBib2R5LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgKCkgPT4gdGhpcy5wdXQ8VD4odXJsLCBib2R5KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZTxUPih1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgKCkgPT4gdGhpcy5kZWxldGU8VD4odXJsKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3I8VD4oXG4gICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLFxuICAgIHJldHJ5UmVxdWVzdDogKCkgPT4gT2JzZXJ2YWJsZTxUPlxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZTQwMUVycm9yKHJldHJ5UmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlNDAxRXJyb3I8VD4ocmV0cnlSZXF1ZXN0OiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKCF0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5ld1Rva2VuKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gcmV0cnlSZXF1ZXN0KCk7IC8vIFJldHJ5IHRoZSBmYWlsZWQgcmVxdWVzdCB3aXRoIHRoZSBuZXcgdG9rZW5cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXRyeVJlcXVlc3QoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==