@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,194 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpParams } from '@angular/common/http';
3
+ import { of } from 'rxjs';
4
+ import { map, catchError } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ import * as i2 from "../others/config-service";
8
+ // Status code mapping for API responses
9
+ const STATUS_CODE_MAP = {
10
+ 0: 'received',
11
+ 1: 'valid',
12
+ 2: 'rejected',
13
+ 3: 'expired',
14
+ 4: 'terminated',
15
+ 5: 'revokedByPsu'
16
+ };
17
+ // Bank-specific transaction period limits (in days)
18
+ const BANK_TRANSACTION_LIMITS = {
19
+ 'BCR': 90,
20
+ 'BTRL': 120, // BT - Banca Transilvania
21
+ 'BT': 90,
22
+ 'BRD': 730, // 2 years
23
+ 'RZBA': -1, // RZB - unlimited
24
+ 'PRVA': 180, // Patria Bank
25
+ 'CEC': 180,
26
+ 'INGB': 90,
27
+ 'ING': 90
28
+ };
29
+ export class OpenBankingService {
30
+ constructor(http, configService) {
31
+ this.http = http;
32
+ this.configService = configService;
33
+ this.apiUrl = '';
34
+ // Get API URL from app config
35
+ const config = this.configService.readConfig();
36
+ this.apiUrl = config.baseUrlSmartAccounts;
37
+ }
38
+ /**
39
+ * Fix data URL format for logos
40
+ * Converts "data:image/svg;base64," to "data:image/svg+xml;base64,"
41
+ */
42
+ fixDataUrlFormat(logoUrl) {
43
+ if (!logoUrl)
44
+ return undefined;
45
+ // If it's already a proper data URL, return as is
46
+ if (logoUrl.startsWith('data:image/')) {
47
+ // Fix common format issues
48
+ return logoUrl
49
+ .replace('data:image/svg;base64,', 'data:image/svg+xml;base64,')
50
+ .replace('data:image/png;base64,', 'data:image/png;base64,')
51
+ .replace('data:image/jpeg;base64,', 'data:image/jpeg;base64,')
52
+ .replace('data:image/jpg;base64,', 'data:image/jpeg;base64,');
53
+ }
54
+ return logoUrl;
55
+ }
56
+ /**
57
+ * Get list of supported banks
58
+ * @param countryCode Optional country code filter
59
+ */
60
+ getBanks(countryCode) {
61
+ let params = new HttpParams();
62
+ if (countryCode) {
63
+ params = params.set('countryCode', countryCode);
64
+ }
65
+ return this.http.get(`${this.apiUrl}/banks`, { params }).pipe(map(banks => {
66
+ return banks.map(bank => ({
67
+ ...bank,
68
+ // Fix data URL format if needed
69
+ logoUrl: this.fixDataUrlFormat(bank.logoUrl)
70
+ }));
71
+ }), catchError((error) => {
72
+ console.error('Error fetching banks:', error);
73
+ return of([]);
74
+ }));
75
+ }
76
+ /**
77
+ * Initialize consent flow
78
+ */
79
+ initializeConsent(request) {
80
+ return this.http.post(`${this.apiUrl}/consents/initialize`, request).pipe(catchError((error) => {
81
+ console.error('Error initializing consent:', error);
82
+ return of();
83
+ }));
84
+ }
85
+ /**
86
+ * Get consent status
87
+ */
88
+ getConsentStatus(bankCode, consentId) {
89
+ return this.http.get(`${this.apiUrl}/consents/${bankCode}/${consentId}`).pipe(map(response => {
90
+ // Map numeric status to string if needed
91
+ if (typeof response.status === 'number') {
92
+ return {
93
+ ...response,
94
+ status: STATUS_CODE_MAP[response.status] || 'received'
95
+ };
96
+ }
97
+ return response;
98
+ }), catchError((error) => {
99
+ console.error('Error checking consent status:', error);
100
+ return of();
101
+ }));
102
+ }
103
+ /**
104
+ * Process consent callback
105
+ */
106
+ processConsentCallback(params) {
107
+ const queryParams = new HttpParams()
108
+ .set('message', params.message)
109
+ .set('type', params.type)
110
+ .set('internalConsentId', params.internalConsentId)
111
+ .set('code', params.code || '')
112
+ .set('state', params.state || '');
113
+ return this.http.get(`${this.apiUrl}/consents/callback`, { params: queryParams }).pipe(catchError((error) => {
114
+ console.error('Error processing consent callback:', error);
115
+ return of({
116
+ message: 'Consent processed (mock)',
117
+ internalConsentId: params.internalConsentId,
118
+ status: 'approved'
119
+ });
120
+ }));
121
+ }
122
+ /**
123
+ * Get accounts for a consent
124
+ */
125
+ getAccounts(consentId, bankCode) {
126
+ const params = new HttpParams()
127
+ .set('consentId', consentId)
128
+ .set('bankCode', bankCode);
129
+ return this.http.get(`${this.apiUrl}/accounts`, { params }).pipe(map(accounts => {
130
+ return accounts.map(account => ({
131
+ ...account,
132
+ }));
133
+ }), catchError((error) => {
134
+ console.error('Error fetching accounts:', error);
135
+ return of();
136
+ }));
137
+ }
138
+ /**
139
+ * Get maximum transaction period for a bank
140
+ * @param bankCode The bank code
141
+ * @returns Maximum number of days or -1 for unlimited
142
+ */
143
+ getMaxTransactionPeriod(bankCode) {
144
+ const upperBankCode = bankCode.toUpperCase();
145
+ // Check if we have a specific limit for this bank
146
+ if (BANK_TRANSACTION_LIMITS.hasOwnProperty(upperBankCode)) {
147
+ return BANK_TRANSACTION_LIMITS[upperBankCode];
148
+ }
149
+ // Default to 90 days if bank not specified
150
+ return 90;
151
+ }
152
+ /**
153
+ * Get transactions for an account
154
+ */
155
+ getTransactions(request) {
156
+ let params = new HttpParams()
157
+ .set('consentId', request.consentId)
158
+ .set('bankCode', request.bankCode)
159
+ .set('accountId', request.accountId);
160
+ if (request.fromDate) {
161
+ params = params.set('fromDate', request.fromDate);
162
+ }
163
+ if (request.toDate) {
164
+ params = params.set('toDate', request.toDate);
165
+ }
166
+ if (request.page) {
167
+ params = params.set('page', request.page.toString());
168
+ }
169
+ if (request.pageSize) {
170
+ params = params.set('pageSize', request.pageSize.toString());
171
+ }
172
+ return this.http.get(`${this.apiUrl}/transactions`, { params }).pipe(map(page => {
173
+ return {
174
+ ...page,
175
+ pageNumber: page.page,
176
+ items: page.items.map(txn => ({
177
+ ...txn
178
+ }))
179
+ };
180
+ }), catchError((error) => {
181
+ console.error('Error fetching transactions:', error);
182
+ return of();
183
+ }));
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpenBankingService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
186
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpenBankingService, providedIn: 'root' }); }
187
+ }
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpenBankingService, decorators: [{
189
+ type: Injectable,
190
+ args: [{
191
+ providedIn: 'root',
192
+ }]
193
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1iYW5raW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NlcnZpY2VzL29wZW4tYmFua2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQW1DakQsd0NBQXdDO0FBQ3hDLE1BQU0sZUFBZSxHQUErQztJQUNsRSxDQUFDLEVBQUUsVUFBVTtJQUNiLENBQUMsRUFBRSxPQUFPO0lBQ1YsQ0FBQyxFQUFFLFVBQVU7SUFDYixDQUFDLEVBQUUsU0FBUztJQUNaLENBQUMsRUFBRSxZQUFZO0lBQ2YsQ0FBQyxFQUFFLGNBQWM7Q0FDbEIsQ0FBQztBQUVGLG9EQUFvRDtBQUNwRCxNQUFNLHVCQUF1QixHQUE4QjtJQUN6RCxLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxHQUFHLEVBQUcsMEJBQTBCO0lBQ3hDLElBQUksRUFBRSxFQUFFO0lBQ1IsS0FBSyxFQUFFLEdBQUcsRUFBRyxVQUFVO0lBQ3ZCLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRyxrQkFBa0I7SUFDL0IsTUFBTSxFQUFFLEdBQUcsRUFBRyxjQUFjO0lBQzVCLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEVBQUU7SUFDVixLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUM7QUE2RUYsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUNVLElBQWdCLEVBQ2hCLGFBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixh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QVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTNMVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vb3RoZXJzL2NvbmZpZy1zZXJ2aWNlJztcblxuLy8gQmFuayBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIEJhbmsge1xuICBpZDogc3RyaW5nO1xuICBiYW5rQ29kZTogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBsb2dvVXJsPzogc3RyaW5nO1xuICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICByZXF1aXJlc1JlZGlyZWN0OiBib29sZWFuO1xuICBzdXBwb3J0ZWRGZWF0dXJlczogc3RyaW5nO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbn1cblxuLy8gQ29uc2VudCBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRJbml0UmVxdWVzdCB7XG4gIGJhbmtDb2RlOiBzdHJpbmc7XG4gIHBzdUVtYWlsOiBzdHJpbmc7XG4gIHBzdUludGVybWVkaWFyeUlkOiBzdHJpbmc7XG4gIHBlcmlvZE9mVmFsaWRpdHk/OiBudW1iZXI7IC8vIERheXMsIGRlZmF1bHQgOTBcbiAgdGNBY2NlcHRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zZW50SW5pdFJlc3BvbnNlIHtcbiAgYXV0aG9yaXphdGlvblVybDogc3RyaW5nO1xuICBjb25zZW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U3RhdHVzIHtcbiAgY29uc2VudElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ3JlY2VpdmVkJyB8ICd2YWxpZCcgfCAncmVqZWN0ZWQnIHwgJ2V4cGlyZWQnIHwgJ3Rlcm1pbmF0ZWQnIHwgJ3Jldm9rZWRCeVBzdSc7XG4gIGV4cGlyZXNBdD86IHN0cmluZztcbn1cblxuLy8gU3RhdHVzIGNvZGUgbWFwcGluZyBmb3IgQVBJIHJlc3BvbnNlc1xuY29uc3QgU1RBVFVTX0NPREVfTUFQOiB7IFtrZXk6IG51bWJlcl06IENvbnNlbnRTdGF0dXNbJ3N0YXR1cyddIH0gPSB7XG4gIDA6ICdyZWNlaXZlZCcsXG4gIDE6ICd2YWxpZCcsXG4gIDI6ICdyZWplY3RlZCcsXG4gIDM6ICdleHBpcmVkJyxcbiAgNDogJ3Rlcm1pbmF0ZWQnLFxuICA1OiAncmV2b2tlZEJ5UHN1J1xufTtcblxuLy8gQmFuay1zcGVjaWZpYyB0cmFuc2FjdGlvbiBwZXJpb2QgbGltaXRzIChpbiBkYXlzKVxuY29uc3QgQkFOS19UUkFOU0FDVElPTl9MSU1JVFM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gICdCQ1InOiA5MCxcbiAgJ0JUUkwnOiAxMjAsICAvLyBCVCAtIEJhbmNhIFRyYW5zaWx2YW5pYVxuICAnQlQnOiA5MCxcbiAgJ0JSRCc6IDczMCwgIC8vIDIgeWVhcnNcbiAgJ1JaQkEnOiAtMSwgIC8vIFJaQiAtIHVubGltaXRlZFxuICAnUFJWQSc6IDE4MCwgIC8vIFBhdHJpYSBCYW5rXG4gICdDRUMnOiAxODAsXG4gICdJTkdCJzogOTAsXG4gICdJTkcnOiA5MFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDb25zZW50Q2FsbGJhY2tQYXJhbXMge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgaW50ZXJuYWxDb25zZW50SWQ6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudENhbGxiYWNrUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGludGVybmFsQ29uc2VudElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCc7XG59XG5cbi8vIEFjY291bnQgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50IHtcbiAgaWQ6IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGliYW46IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhY2NvdW50SG9sZGVyTmFtZTogc3RyaW5nO1xuICBhY2NvdW50SG9sZGVyQ29uZmlkZW5jZTogc3RyaW5nO1xuICBiYWxhbmNlOiBudW1iZXI7XG4gIGxhc3RTeW5jZWRBdDogc3RyaW5nO1xufVxuXG4vLyBUcmFuc2FjdGlvbiBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uIHtcbiAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgYW1vdW50OiBudW1iZXI7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGJvb2tpbmdEYXRlOiBzdHJpbmc7XG4gIHZhbHVlRGF0ZT86IHN0cmluZztcbiAgY3JlZGl0b3JOYW1lPzogc3RyaW5nO1xuICBjcmVkaXRvcklCQU4/OiBzdHJpbmc7XG4gIGRlYnRvck5hbWU/OiBzdHJpbmc7XG4gIGRlYnRvcklCQU4/OiBzdHJpbmc7XG4gIHJlbWl0dGFuY2VJbmZvcm1hdGlvbj86IHN0cmluZztcbiAgc3RhdHVzOiAnQm9va2VkJyB8ICdQZW5kaW5nJztcbiAgdHlwZTogJ0RlYml0JyB8ICdDcmVkaXQnO1xuICAvLyBBZGRpdGlvbmFsIGZpZWxkcyBmb3IgY29tcGF0aWJpbGl0eVxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdHJhbnNhY3Rpb25EYXRlPzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgbWVyY2hhbnROYW1lPzogc3RyaW5nO1xuICByZWZlcmVuY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYWdlIHtcbiAgaXRlbXM6IFRyYW5zYWN0aW9uW107XG4gIHBhZ2U6IG51bWJlcjtcbiAgcGFnZU51bWJlcj86IG51bWJlcjsgLy8gQWxpYXMgZm9yIHBhZ2VcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBoYXNQcmV2aW91c1BhZ2U6IGJvb2xlYW47XG4gIG5leHRQYWdlTGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblJlcXVlc3Qge1xuICBjb25zZW50SWQ6IHN0cmluZztcbiAgYmFua0NvZGU6IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGZyb21EYXRlPzogc3RyaW5nO1xuICB0b0RhdGU/OiBzdHJpbmc7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgT3BlbkJhbmtpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhcGlVcmw6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgLy8gR2V0IEFQSSBVUkwgZnJvbSBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKTtcbiAgICB0aGlzLmFwaVVybCA9IGNvbmZpZy5iYXNlVXJsU21hcnRBY2NvdW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXggZGF0YSBVUkwgZm9ybWF0IGZvciBsb2dvc1xuICAgKiBDb252ZXJ0cyBcImRhdGE6aW1hZ2Uvc3ZnO2Jhc2U2NCxcIiB0byBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsXCJcbiAgICovXG4gIHByaXZhdGUgZml4RGF0YVVybEZvcm1hdChsb2dvVXJsPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWxvZ29VcmwpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBwcm9wZXIgZGF0YSBVUkwsIHJldHVybiBhcyBpc1xuICAgIGlmIChsb2dvVXJsLnN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2UvJykpIHtcbiAgICAgIC8vIEZpeCBjb21tb24gZm9ybWF0IGlzc3Vlc1xuICAgICAgcmV0dXJuIGxvZ29VcmxcbiAgICAgICAgLnJlcGxhY2UoJ2RhdGE6aW1hZ2Uvc3ZnO2Jhc2U2NCwnLCAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnKVxuICAgICAgICAucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJylcbiAgICAgICAgLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJylcbiAgICAgICAgLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBnO2Jhc2U2NCwnLCAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9nb1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzdCBvZiBzdXBwb3J0ZWQgYmFua3NcbiAgICogQHBhcmFtIGNvdW50cnlDb2RlIE9wdGlvbmFsIGNvdW50cnkgY29kZSBmaWx0ZXJcbiAgICovXG4gIGdldEJhbmtzKGNvdW50cnlDb2RlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYW5rW10+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvdW50cnlDb2RlJywgY291bnRyeUNvZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEJhbmtbXT4oYCR7dGhpcy5hcGlVcmx9L2JhbmtzYCwgeyBwYXJhbXMgfSkucGlwZShcbiAgICAgIG1hcChiYW5rcyA9PiB7XG4gICAgICAgIHJldHVybiBiYW5rcy5tYXAoYmFuayA9PiAoe1xuICAgICAgICAgIC4uLmJhbmssXG4gICAgICAgICAgLy8gRml4IGRhdGEgVVJMIGZvcm1hdCBpZiBuZWVkZWRcbiAgICAgICAgICBsb2dvVXJsOiB0aGlzLmZpeERhdGFVcmxGb3JtYXQoYmFuay5sb2dvVXJsKVxuICAgICAgICB9KSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGJhbmtzOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbnNlbnQgZmxvd1xuICAgKi9cbiAgaW5pdGlhbGl6ZUNvbnNlbnQocmVxdWVzdDogQ29uc2VudEluaXRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxDb25zZW50SW5pdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENvbnNlbnRJbml0UmVzcG9uc2U+KGAke3RoaXMuYXBpVXJsfS9jb25zZW50cy9pbml0aWFsaXplYCwgcmVxdWVzdCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBjb25zZW50OicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbnNlbnQgc3RhdHVzXG4gICAqL1xuICBnZXRDb25zZW50U3RhdHVzKGJhbmtDb2RlOiBzdHJpbmcsIGNvbnNlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDb25zZW50U3RhdHVzPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmFwaVVybH0vY29uc2VudHMvJHtiYW5rQ29kZX0vJHtjb25zZW50SWR9YCkucGlwZShcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgIC8vIE1hcCBudW1lcmljIHN0YXR1cyB0byBzdHJpbmcgaWYgbmVlZGVkXG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2Uuc3RhdHVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXR1czogU1RBVFVTX0NPREVfTUFQW3Jlc3BvbnNlLnN0YXR1c10gfHwgJ3JlY2VpdmVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjaGVja2luZyBjb25zZW50IHN0YXR1czonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBvZigpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgY29uc2VudCBjYWxsYmFja1xuICAgKi9cbiAgcHJvY2Vzc0NvbnNlbnRDYWxsYmFjayhwYXJhbXM6IENvbnNlbnRDYWxsYmFja1BhcmFtcyk6IE9ic2VydmFibGU8Q29uc2VudENhbGxiYWNrUmVzcG9uc2U+IHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ21lc3NhZ2UnLCBwYXJhbXMubWVzc2FnZSlcbiAgICAgIC5zZXQoJ3R5cGUnLCBwYXJhbXMudHlwZSlcbiAgICAgIC5zZXQoJ2ludGVybmFsQ29uc2VudElkJywgcGFyYW1zLmludGVybmFsQ29uc2VudElkKVxuICAgICAgLnNldCgnY29kZScsIHBhcmFtcy5jb2RlIHx8ICcnKVxuICAgICAgLnNldCgnc3RhdGUnLCBwYXJhbXMuc3RhdGUgfHwgJycpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q29uc2VudENhbGxiYWNrUmVzcG9uc2U+KGAke3RoaXMuYXBpVXJsfS9jb25zZW50cy9jYWxsYmFja2AsIHsgcGFyYW1zOiBxdWVyeVBhcmFtcyB9KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBjb25zZW50IGNhbGxiYWNrOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICBtZXNzYWdlOiAnQ29uc2VudCBwcm9jZXNzZWQgKG1vY2spJyxcbiAgICAgICAgICBpbnRlcm5hbENvbnNlbnRJZDogcGFyYW1zLmludGVybmFsQ29uc2VudElkLFxuICAgICAgICAgIHN0YXR1czogJ2FwcHJvdmVkJyBhcyBjb25zdFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWNjb3VudHMgZm9yIGEgY29uc2VudFxuICAgKi9cbiAgZ2V0QWNjb3VudHMoY29uc2VudElkOiBzdHJpbmcsIGJhbmtDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFjY291bnRbXT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ2NvbnNlbnRJZCcsIGNvbnNlbnRJZClcbiAgICAgIC5zZXQoJ2JhbmtDb2RlJywgYmFua0NvZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWNjb3VudFtdPihgJHt0aGlzLmFwaVVybH0vYWNjb3VudHNgLCB7IHBhcmFtcyB9KS5waXBlKFxuICAgICAgbWFwKGFjY291bnRzID0+IHtcbiAgICAgICAgcmV0dXJuIGFjY291bnRzLm1hcChhY2NvdW50ID0+ICh7XG4gICAgICAgICAgLi4uYWNjb3VudCxcbiAgICAgICAgfSkpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhY2NvdW50czonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBvZigpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtYXhpbXVtIHRyYW5zYWN0aW9uIHBlcmlvZCBmb3IgYSBiYW5rXG4gICAqIEBwYXJhbSBiYW5rQ29kZSBUaGUgYmFuayBjb2RlXG4gICAqIEByZXR1cm5zIE1heGltdW0gbnVtYmVyIG9mIGRheXMgb3IgLTEgZm9yIHVubGltaXRlZFxuICAgKi9cbiAgZ2V0TWF4VHJhbnNhY3Rpb25QZXJpb2QoYmFua0NvZGU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdXBwZXJCYW5rQ29kZSA9IGJhbmtDb2RlLnRvVXBwZXJDYXNlKCk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIGxpbWl0IGZvciB0aGlzIGJhbmtcbiAgICBpZiAoQkFOS19UUkFOU0FDVElPTl9MSU1JVFMuaGFzT3duUHJvcGVydHkodXBwZXJCYW5rQ29kZSkpIHtcbiAgICAgIHJldHVybiBCQU5LX1RSQU5TQUNUSU9OX0xJTUlUU1t1cHBlckJhbmtDb2RlXTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdCB0byA5MCBkYXlzIGlmIGJhbmsgbm90IHNwZWNpZmllZFxuICAgIHJldHVybiA5MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb25zIGZvciBhbiBhY2NvdW50XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25SZXF1ZXN0KTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvblBhZ2U+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgnY29uc2VudElkJywgcmVxdWVzdC5jb25zZW50SWQpXG4gICAgICAuc2V0KCdiYW5rQ29kZScsIHJlcXVlc3QuYmFua0NvZGUpXG4gICAgICAuc2V0KCdhY2NvdW50SWQnLCByZXF1ZXN0LmFjY291bnRJZCk7XG5cbiAgICBpZiAocmVxdWVzdC5mcm9tRGF0ZSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZnJvbURhdGUnLCByZXF1ZXN0LmZyb21EYXRlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudG9EYXRlKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b0RhdGUnLCByZXF1ZXN0LnRvRGF0ZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnBhZ2UpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3BhZ2UnLCByZXF1ZXN0LnBhZ2UudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnBhZ2VTaXplKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlU2l6ZScsIHJlcXVlc3QucGFnZVNpemUudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VHJhbnNhY3Rpb25QYWdlPihgJHt0aGlzLmFwaVVybH0vdHJhbnNhY3Rpb25zYCwgeyBwYXJhbXMgfSkucGlwZShcbiAgICAgIG1hcChwYWdlID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wYWdlLFxuICAgICAgICAgIHBhZ2VOdW1iZXI6IHBhZ2UucGFnZSxcbiAgICAgICAgICBpdGVtczogcGFnZS5pdGVtcy5tYXAodHhuID0+ICh7XG4gICAgICAgICAgICAuLi50eG5cbiAgICAgICAgICB9KSlcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdHJhbnNhY3Rpb25zOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,107 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { Subject, Subscription, BehaviorSubject, firstValueFrom, interval, } from 'rxjs';
3
+ import { ApplicationDataService } from './applicationData.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./origin-form-signalr.service";
6
+ export class OriginFormSignalrHandlerService {
7
+ constructor(originFormSignalrService) {
8
+ this.originFormSignalrService = originFormSignalrService;
9
+ this.subscriptions = new Subscription();
10
+ this.applicationDataService = inject(ApplicationDataService);
11
+ this.currentAppDataUuid = null;
12
+ this._isLoading = new BehaviorSubject(false);
13
+ this.isLoading$ = this._isLoading.asObservable();
14
+ this._operationCompleted = new Subject();
15
+ this.operationCompleted$ = this._operationCompleted.asObservable();
16
+ this.originFormSignalrService
17
+ .initiateSignalrConnection()
18
+ .then(() => this.subscribeToCoreEvents())
19
+ .catch((error) => console.error('CollectorFormSignalrHandlerService: Error initiating base SignalR connection', error));
20
+ }
21
+ subscribeToCoreEvents() {
22
+ const kycSub = this.originFormSignalrService.kycProcessingComplete.subscribe((appDataId) => {
23
+ if (appDataId === this.currentAppDataUuid) {
24
+ this.setKycOperationCompleted();
25
+ }
26
+ else {
27
+ console.warn(`Received KycProcessingComplete event for unexpected appDataId: ${appDataId}. Expected: ${this.currentAppDataUuid}`);
28
+ }
29
+ });
30
+ this.subscriptions.add(kycSub);
31
+ }
32
+ async setKycOperationCompleted() {
33
+ if (this.currentAppDataUuid) {
34
+ let appData = null;
35
+ try {
36
+ appData = await this.applicationDataService.getSteps(this.currentAppDataUuid);
37
+ }
38
+ catch (error) {
39
+ console.error('Error fetching steps after KYC completion:', error);
40
+ }
41
+ this._isLoading.next(false);
42
+ this._operationCompleted.next({
43
+ operationIdentifier: 'KYC_PROCESSING',
44
+ success: true,
45
+ data: appData,
46
+ });
47
+ this.currentAppDataUuid = null;
48
+ }
49
+ if (this.poolingInterval) {
50
+ this.poolingInterval.unsubscribe();
51
+ }
52
+ }
53
+ async startBackupPooling() {
54
+ let isBusy = false;
55
+ this.poolingInterval = interval(5000)
56
+ .subscribe(() => {
57
+ if (this.currentAppDataUuid && !isBusy) {
58
+ isBusy = true;
59
+ this.applicationDataService.getProcessStatus(this.currentAppDataUuid).subscribe(status => {
60
+ isBusy = false;
61
+ if (status === 2) {
62
+ this.setKycOperationCompleted();
63
+ }
64
+ });
65
+ }
66
+ });
67
+ }
68
+ async initiateKycProcessing(appDataUuid) {
69
+ if (this._isLoading.value) {
70
+ console.warn('Another operation is already in progress.');
71
+ return;
72
+ }
73
+ this._isLoading.next(true);
74
+ this.currentAppDataUuid = appDataUuid;
75
+ try {
76
+ await firstValueFrom(this.applicationDataService.makeProcessApiCall(appDataUuid));
77
+ this.startBackupPooling(); //fire and forget
78
+ }
79
+ catch (error) {
80
+ console.error('Error initiating KYC processing (API call failed):', error);
81
+ this._isLoading.next(false);
82
+ this._operationCompleted.next({
83
+ operationIdentifier: 'KYC_PROCESSING',
84
+ success: false,
85
+ error,
86
+ });
87
+ this.currentAppDataUuid = null;
88
+ }
89
+ }
90
+ ngOnDestroy() {
91
+ if (this.subscriptions) {
92
+ this.subscriptions.unsubscribe();
93
+ }
94
+ if (this.poolingInterval) {
95
+ this.poolingInterval.unsubscribe();
96
+ }
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrHandlerService, deps: [{ token: i1.OriginFormSignalrService }], target: i0.ɵɵFactoryTarget.Injectable }); }
99
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrHandlerService, providedIn: 'root' }); }
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrHandlerService, decorators: [{
102
+ type: Injectable,
103
+ args: [{
104
+ providedIn: 'root',
105
+ }]
106
+ }], ctorParameters: () => [{ type: i1.OriginFormSignalrService }] });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0tc2lnbmFsci1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NlcnZpY2VzL29yaWdpbi1mb3JtLXNpZ25hbHItaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFFTCxPQUFPLEVBQ1AsWUFBWSxFQUNaLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxHQUdULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQVluRSxNQUFNLE9BQU8sK0JBQStCO0lBWTFDLFlBQW9CLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBWDlELGtCQUFhLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEQsdUJBQWtCLEdBQWtCLElBQUksQ0FBQztRQUV6QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDekMsZUFBVSxHQUF3QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpFLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQzdDLHdCQUFtQixHQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHeEMsSUFBSSxDQUFDLHdCQUF3QjthQUMxQix5QkFBeUIsRUFBRTthQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDeEMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FD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QixDQUFDLFdBQVcsQ0FBQyxDQUM1RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQSxpQkFBaUI7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUNYLG9EQUFvRCxFQUNwRCxLQUFLLENBQ04sQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLG1CQUFtQixFQUFFLGdCQUFnQjtnQkFDckMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQzsrR0FwSFUsK0JBQStCO21IQUEvQiwrQkFBK0IsY0FGOUIsTUFBTTs7NEZBRVAsK0JBQStCO2tCQUgzQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIGludGVydmFsLFxuICBzdGFydFdpdGgsXG4gIHRha2VXaGlsZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmlnaW5Gb3JtU2lnbmFsclNlcnZpY2UgfSBmcm9tICcuL29yaWdpbi1mb3JtLXNpZ25hbHIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9hcHBsaWNhdGlvbkRhdGEuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uUmVzdWx0IHtcbiAgb3BlcmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogYW55O1xuICBlcnJvcj86IGFueTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBhcHBsaWNhdGlvbkRhdGFTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UpO1xuICBwcml2YXRlIGN1cnJlbnRBcHBEYXRhVXVpZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5faXNMb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgX29wZXJhdGlvbkNvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PE9wZXJhdGlvblJlc3VsdD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbkNvbXBsZXRlZCQ6IE9ic2VydmFibGU8T3BlcmF0aW9uUmVzdWx0PiA9XG4gICAgdGhpcy5fb3BlcmF0aW9uQ29tcGxldGVkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3JpZ2luRm9ybVNpZ25hbHJTZXJ2aWNlOiBPcmlnaW5Gb3JtU2lnbmFsclNlcnZpY2UpIHtcbiAgICB0aGlzLm9yaWdpbkZvcm1TaWduYWxyU2VydmljZVxuICAgICAgLmluaXRpYXRlU2lnbmFsckNvbm5lY3Rpb24oKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zdWJzY3JpYmVUb0NvcmVFdmVudHMoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0NvbGxlY3RvckZvcm1TaWduYWxySGFuZGxlclNlcnZpY2U6IEVycm9yIGluaXRpYXRpbmcgYmFzZSBTaWduYWxSIGNvbm5lY3Rpb24nLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvQ29yZUV2ZW50cygpOiB2b2lkIHtcbiAgICBjb25zdCBreWNTdWIgPVxuICAgICAgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsclNlcnZpY2Uua3ljUHJvY2Vzc2luZ0NvbXBsZXRlLnN1YnNjcmliZShcbiAgICAgICAgKGFwcERhdGFJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGFwcERhdGFJZCA9PT0gdGhpcy5jdXJyZW50QXBwRGF0YVV1aWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0S3ljT3BlcmF0aW9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgYFJlY2VpdmVkIEt5Y1Byb2Nlc3NpbmdDb21wbGV0ZSBldmVudCBmb3IgdW5leHBlY3RlZCBhcHBEYXRhSWQ6ICR7YXBwRGF0YUlkfS4gRXhwZWN0ZWQ6ICR7dGhpcy5jdXJyZW50QXBwRGF0YVV1aWR9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChreWNTdWIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRLeWNPcGVyYXRpb25Db21wbGV0ZWQoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEFwcERhdGFVdWlkKSB7XG4gICAgICBsZXQgYXBwRGF0YSA9IG51bGw7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcERhdGEgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UuZ2V0U3RlcHModGhpcy5jdXJyZW50QXBwRGF0YVV1aWQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RlcHMgYWZ0ZXIgS1lDIGNvbXBsZXRpb246JywgZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc0xvYWRpbmcubmV4dChmYWxzZSk7XG5cbiAgICAgIHRoaXMuX29wZXJhdGlvbkNvbXBsZXRlZC5uZXh0KHtcbiAgICAgICAgb3BlcmF0aW9uSWRlbnRpZmllcjogJ0tZQ19QUk9DRVNTSU5HJyxcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZGF0YTogYXBwRGF0YSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jdXJyZW50QXBwRGF0YVV1aWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb29saW5nSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucG9vbGluZ0ludGVydmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwb29saW5nSW50ZXJ2YWw6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0QmFja3VwUG9vbGluZygpIHtcbiAgICBsZXQgaXNCdXN5ID0gZmFsc2U7XG4gICAgdGhpcy5wb29saW5nSW50ZXJ2YWwgPSBpbnRlcnZhbCg1MDAwKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBcHBEYXRhVXVpZCAmJiAhaXNCdXN5KSB7XG4gICAgICAgICAgaXNCdXN5ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UuZ2V0UHJvY2Vzc1N0YXR1cyh0aGlzLmN1cnJlbnRBcHBEYXRhVXVpZCkuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IDIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRLeWNPcGVyYXRpb25Db21wbGV0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdGlhdGVLeWNQcm9jZXNzaW5nKGFwcERhdGFVdWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5faXNMb2FkaW5nLnZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Fub3RoZXIgb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzTG9hZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMuY3VycmVudEFwcERhdGFVdWlkID0gYXBwRGF0YVV1aWQ7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UubWFrZVByb2Nlc3NBcGlDYWxsKGFwcERhdGFVdWlkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc3RhcnRCYWNrdXBQb29saW5nKCk7Ly9maXJlIGFuZCBmb3JnZXRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0Vycm9yIGluaXRpYXRpbmcgS1lDIHByb2Nlc3NpbmcgKEFQSSBjYWxsIGZhaWxlZCk6JyxcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgICB0aGlzLl9pc0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLl9vcGVyYXRpb25Db21wbGV0ZWQubmV4dCh7XG4gICAgICAgIG9wZXJhdGlvbklkZW50aWZpZXI6ICdLWUNfUFJPQ0VTU0lORycsXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jdXJyZW50QXBwRGF0YVV1aWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb29saW5nSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMucG9vbGluZ0ludGVydmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,105 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import * as signalR from '@microsoft/signalr';
3
+ import { Subject } from 'rxjs';
4
+ import { ConfigService } from '../others/config-service';
5
+ import * as i0 from "@angular/core";
6
+ export class OriginFormSignalrService {
7
+ constructor() {
8
+ this.connection = null;
9
+ this.connectionPromise = null;
10
+ // Generic subjects for different events
11
+ this.eventSubjects = new Map();
12
+ // Specific event for KYC completion as an example
13
+ this.kycProcessingComplete = new Subject();
14
+ this.configService = inject(ConfigService);
15
+ this.hubUrl =
16
+ this.configService.readConfig().baseUrlBusiness + '/collectorhub';
17
+ this.registerSpecificEvents();
18
+ }
19
+ registerSpecificEvents() {
20
+ this.eventSubjects.set('KycProcessingComplete', this.kycProcessingComplete);
21
+ }
22
+ async initiateSignalrConnection() {
23
+ if (this.connection &&
24
+ this.connection.state === signalR.HubConnectionState.Connected) {
25
+ console.log('SignalR connection already established.');
26
+ return Promise.resolve();
27
+ }
28
+ if (this.connectionPromise) {
29
+ return this.connectionPromise;
30
+ }
31
+ this.connection = new signalR.HubConnectionBuilder()
32
+ .withUrl(this.hubUrl, {
33
+ skipNegotiation: true,
34
+ transport: signalR.HttpTransportType.WebSockets,
35
+ })
36
+ .withAutomaticReconnect()
37
+ .withHubProtocol(new signalR.JsonHubProtocol())
38
+ .build();
39
+ this.setSignalrClientMethods();
40
+ this.connectionPromise = this.connection
41
+ .start()
42
+ .then(() => {
43
+ if (this.connection) {
44
+ console.log(`Collector SignalR connection success! connectionId: ${this.connection.connectionId}`);
45
+ }
46
+ this.connectionPromise = null;
47
+ })
48
+ .catch((error) => {
49
+ console.error(`Collector SignalR connection error: ${error}`);
50
+ this.connectionPromise = null;
51
+ throw error;
52
+ });
53
+ return this.connectionPromise;
54
+ }
55
+ setSignalrClientMethods() {
56
+ if (!this.connection)
57
+ return;
58
+ // Generic handler: Iterate over pre-registered event subjects
59
+ this.eventSubjects.forEach((subject, eventName) => {
60
+ this.connection?.on(eventName, (data) => {
61
+ subject.next(data);
62
+ });
63
+ });
64
+ // Example for a specific event if not using the generic map for some reason
65
+ // this.connection.on('KycProcessingComplete', (data: any) => {
66
+ // this.kycProcessingComplete.next(data);
67
+ // });
68
+ }
69
+ /**
70
+ * Allows dynamic registration of an event listener if the event name isn't known at design time
71
+ * or if a component wants to manage its own subject.
72
+ * @param eventName The name of the event from the server.
73
+ * @returns An RxJS Subject that will emit data when the event is received.
74
+ */
75
+ listenForEvent(eventName) {
76
+ if (!this.eventSubjects.has(eventName)) {
77
+ const newSubject = new Subject();
78
+ this.eventSubjects.set(eventName, newSubject);
79
+ // If connection is already live, register the handler immediately
80
+ if (this.connection &&
81
+ this.connection.state === signalR.HubConnectionState.Connected) {
82
+ this.connection.on(eventName, (data) => {
83
+ newSubject.next(data);
84
+ });
85
+ }
86
+ }
87
+ return this.eventSubjects.get(eventName);
88
+ }
89
+ async stopConnection() {
90
+ if (this.connection &&
91
+ this.connection.state === signalR.HubConnectionState.Connected) {
92
+ await this.connection.stop();
93
+ console.log('Collector SignalR connection stopped.');
94
+ }
95
+ }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
97
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrService, providedIn: 'root' }); }
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormSignalrService, decorators: [{
100
+ type: Injectable,
101
+ args: [{
102
+ providedIn: 'root',
103
+ }]
104
+ }], ctorParameters: () => [] });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0tc2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9zZXJ2aWNlcy9vcmlnaW4tZm9ybS1zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHdCQUF3QjtJQWFuQztRQVpRLGVBQVUsR0FBaUMsSUFBSSxDQUFDO1FBQ2hELHNCQUFpQixHQUF5QixJQUFJLENBQUM7UUFHdkQsd0NBQXdDO1FBQ2hDLGtCQUFhLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFN0Qsa0RBQWtEO1FBQzNDLDBCQUFxQixHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBRXhELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRzVDLElBQUksQ0FBQyxNQUFNO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUI7UUFDcEMsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLE9B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QVMsQ0FBZSxDQUFDO0lBQ3pELENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYztRQUN6QixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFDOUQsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7K0dBakhVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIHNpZ25hbFIgZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgT3JpZ2luRm9ybVNpZ25hbHJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBzaWduYWxSLkh1YkNvbm5lY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGh1YlVybDogc3RyaW5nO1xuXG4gIC8vIEdlbmVyaWMgc3ViamVjdHMgZm9yIGRpZmZlcmVudCBldmVudHNcbiAgcHJpdmF0ZSBldmVudFN1YmplY3RzOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGFueT4+ID0gbmV3IE1hcCgpO1xuXG4gIC8vIFNwZWNpZmljIGV2ZW50IGZvciBLWUMgY29tcGxldGlvbiBhcyBhbiBleGFtcGxlXG4gIHB1YmxpYyBreWNQcm9jZXNzaW5nQ29tcGxldGU6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBwcml2YXRlIGNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlnU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5odWJVcmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsQnVzaW5lc3MgKyAnL2NvbGxlY3Rvcmh1Yic7XG4gICAgdGhpcy5yZWdpc3RlclNwZWNpZmljRXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyU3BlY2lmaWNFdmVudHMoKSB7XG4gICAgdGhpcy5ldmVudFN1YmplY3RzLnNldCgnS3ljUHJvY2Vzc2luZ0NvbXBsZXRlJywgdGhpcy5reWNQcm9jZXNzaW5nQ29tcGxldGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYXRlU2lnbmFsckNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25uZWN0aW9uICYmXG4gICAgICB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT09IHNpZ25hbFIuSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ1NpZ25hbFIgY29ubmVjdGlvbiBhbHJlYWR5IGVzdGFibGlzaGVkLicpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Qcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgc2lnbmFsUi5IdWJDb25uZWN0aW9uQnVpbGRlcigpXG4gICAgICAud2l0aFVybCh0aGlzLmh1YlVybCwge1xuICAgICAgICBza2lwTmVnb3RpYXRpb246IHRydWUsXG4gICAgICAgIHRyYW5zcG9ydDogc2lnbmFsUi5IdHRwVHJhbnNwb3J0VHlwZS5XZWJTb2NrZXRzLFxuICAgICAgfSlcbiAgICAgIC53aXRoQXV0b21hdGljUmVjb25uZWN0KClcbiAgICAgIC53aXRoSHViUHJvdG9jb2wobmV3IHNpZ25hbFIuSnNvbkh1YlByb3RvY29sKCkpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHRoaXMuc2V0U2lnbmFsckNsaWVudE1ldGhvZHMoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvblByb21pc2UgPSB0aGlzLmNvbm5lY3Rpb25cbiAgICAgIC5zdGFydCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDb2xsZWN0b3IgU2lnbmFsUiBjb25uZWN0aW9uIHN1Y2Nlc3MhIGNvbm5lY3Rpb25JZDogJHt0aGlzLmNvbm5lY3Rpb24uY29ubmVjdGlvbklkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblByb21pc2UgPSBudWxsO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDb2xsZWN0b3IgU2lnbmFsUiBjb25uZWN0aW9uIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTaWduYWxyQ2xpZW50TWV0aG9kcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29ubmVjdGlvbikgcmV0dXJuO1xuXG4gICAgLy8gR2VuZXJpYyBoYW5kbGVyOiBJdGVyYXRlIG92ZXIgcHJlLXJlZ2lzdGVyZWQgZXZlbnQgc3ViamVjdHNcbiAgICB0aGlzLmV2ZW50U3ViamVjdHMuZm9yRWFjaCgoc3ViamVjdCwgZXZlbnROYW1lKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24/Lm9uKGV2ZW50TmFtZSwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEV4YW1wbGUgZm9yIGEgc3BlY2lmaWMgZXZlbnQgaWYgbm90IHVzaW5nIHRoZSBnZW5lcmljIG1hcCBmb3Igc29tZSByZWFzb25cbiAgICAvLyB0aGlzLmNvbm5lY3Rpb24ub24oJ0t5Y1Byb2Nlc3NpbmdDb21wbGV0ZScsIChkYXRhOiBhbnkpID0+IHtcbiAgICAvLyAgIHRoaXMua3ljUHJvY2Vzc2luZ0NvbXBsZXRlLm5leHQoZGF0YSk7XG4gICAgLy8gfSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGR5bmFtaWMgcmVnaXN0cmF0aW9uIG9mIGFuIGV2ZW50IGxpc3RlbmVyIGlmIHRoZSBldmVudCBuYW1lIGlzbid0IGtub3duIGF0IGRlc2lnbiB0aW1lXG4gICAqIG9yIGlmIGEgY29tcG9uZW50IHdhbnRzIHRvIG1hbmFnZSBpdHMgb3duIHN1YmplY3QuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IGZyb20gdGhlIHNlcnZlci5cbiAgICogQHJldHVybnMgQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBlbWl0IGRhdGEgd2hlbiB0aGUgZXZlbnQgaXMgcmVjZWl2ZWQuXG4gICAqL1xuICBwdWJsaWMgbGlzdGVuRm9yRXZlbnQ8VD4oZXZlbnROYW1lOiBzdHJpbmcpOiBTdWJqZWN0PFQ+IHtcbiAgICBpZiAoIXRoaXMuZXZlbnRTdWJqZWN0cy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgY29uc3QgbmV3U3ViamVjdCA9IG5ldyBTdWJqZWN0PFQ+KCk7XG4gICAgICB0aGlzLmV2ZW50U3ViamVjdHMuc2V0KGV2ZW50TmFtZSwgbmV3U3ViamVjdCk7XG4gICAgICAvLyBJZiBjb25uZWN0aW9uIGlzIGFscmVhZHkgbGl2ZSwgcmVnaXN0ZXIgdGhlIGhhbmRsZXIgaW1tZWRpYXRlbHlcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uICYmXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PT0gc2lnbmFsUi5IdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKGV2ZW50TmFtZSwgKGRhdGE6IFQpID0+IHtcbiAgICAgICAgICBuZXdTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ldmVudFN1YmplY3RzLmdldChldmVudE5hbWUpIGFzIFN1YmplY3Q8VD47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcENvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25uZWN0aW9uICYmXG4gICAgICB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT09IHNpZ25hbFIuSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZFxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLnN0b3AoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdDb2xsZWN0b3IgU2lnbmFsUiBjb25uZWN0aW9uIHN0b3BwZWQuJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { catchError, 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 OtpService {
7
+ constructor(http) {
8
+ this.http = http;
9
+ this.configService = inject(ConfigService);
10
+ }
11
+ generate(params) {
12
+ const url = this.configService.readConfig().baseUrlInfrastructure +
13
+ `/otp/generate-app-otp`;
14
+ const data = { ...params, templateName: 'otpCode' };
15
+ return this.http.postExtended(url, data, { observe: 'response' }).pipe(map((response) => response), catchError((error) => of({ ...error, body: false })));
16
+ }
17
+ validate(data) {
18
+ const url = this.configService.readConfig().baseUrlInfrastructure +
19
+ `/otp/validate-app-otp`;
20
+ return this.http.postExtended(url, data, { observe: 'response' }).pipe(map((response) => response), catchError((error) => of({ ...error, body: false })));
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpService, deps: [{ token: i1.AuthHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
23
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpService }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpService, decorators: [{
26
+ type: Injectable
27
+ }], ctorParameters: () => [{ type: i1.AuthHttpService }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NlcnZpY2VzL290cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUl6RCxNQUFNLE9BQU8sVUFBVTtJQUNyQixZQUFvQixJQUFxQjtRQUFyQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUV6QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUZNLENBQUM7SUFJN0MsUUFBUSxDQUFDLE1BS1I7UUFDQyxNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLHFCQUFxQjtZQUNyRCx1QkFBdUIsQ0FBQztRQUMxQixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3BFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQzNCLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsSUFJUjtRQUNDLE1BQU0sR0FBRyxHQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMscUJBQXFCO1lBQ3JELHVCQUF1QixDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDcEUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDM0IsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUNyRCxDQUFDO0lBQ0osQ0FBQzsrR0FqQ1UsVUFBVTttSEFBVixVQUFVOzs0RkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vb3RoZXJzL2NvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhIdHRwU2VydmljZSB9IGZyb20gJy4vYXV0aC1odHRwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3RwU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogQXV0aEh0dHBTZXJ2aWNlKSB7fVxuXG4gIGNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlnU2VydmljZSk7XG5cbiAgZ2VuZXJhdGUocGFyYW1zOiB7XG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZyB8IG51bGw7XG4gICAgZW1haWxBZGRyZXNzOiBzdHJpbmcgfCBudWxsO1xuICAgIGFwcERhdGFJZDogc3RyaW5nO1xuICAgIHN0ZXBJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlYWRDb25maWcoKS5iYXNlVXJsSW5mcmFzdHJ1Y3R1cmUgK1xuICAgICAgYC9vdHAvZ2VuZXJhdGUtYXBwLW90cGA7XG4gICAgY29uc3QgZGF0YSA9IHsgLi4ucGFyYW1zLCB0ZW1wbGF0ZU5hbWU6ICdvdHBDb2RlJyB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdEV4dGVuZGVkKHVybCwgZGF0YSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4gb2YoeyAuLi5lcnJvciwgYm9keTogZmFsc2UgfSkpXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGE6IHtcbiAgICBvdHBDb2RlOiBzdHJpbmc7XG4gICAgYXBwRGF0YUlkOiBzdHJpbmc7XG4gICAgc3RlcElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZENvbmZpZygpLmJhc2VVcmxJbmZyYXN0cnVjdHVyZSArXG4gICAgICBgL290cC92YWxpZGF0ZS1hcHAtb3RwYDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3RFeHRlbmRlZCh1cmwsIGRhdGEsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IG9mKHsgLi4uZXJyb3IsIGJvZHk6IGZhbHNlIH0pKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,79 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./auth-http.service";
4
+ import * as i2 from "@angular/router";
5
+ export class ProxyService {
6
+ constructor(http, route) {
7
+ this.http = http;
8
+ this.route = route;
9
+ this.apiURL = 'https://apiro.id-kyc.com';
10
+ this.env = '';
11
+ this.tokenUrl = '';
12
+ this.debug = false;
13
+ this.langIso = '';
14
+ this.token = '';
15
+ this.debug = this.env == 'QA' || this.env == 'DEMO';
16
+ this.tokenUrl =
17
+ this.apiURL +
18
+ (this.env == 'PROD'
19
+ ? '/public/authorization/token'
20
+ : '/dev_public/authorization/token');
21
+ }
22
+ getValuesForLog() {
23
+ return {
24
+ apiURL: this.apiURL,
25
+ orderID: this.orderID,
26
+ env: this.env,
27
+ tokenUrl: this.tokenUrl,
28
+ token: this.token,
29
+ };
30
+ }
31
+ getToken() {
32
+ return new Promise((resolve, reject) => {
33
+ var tokenUrlFull = this.tokenUrl + 'new?flow=origin';
34
+ if (this.debug)
35
+ console.log('GetToken called at' + tokenUrlFull);
36
+ this.http.get(tokenUrlFull).subscribe({
37
+ next: (resp) => {
38
+ this.token = resp.token;
39
+ sessionStorage.setItem('token-kyc', this.token);
40
+ if (this.debug)
41
+ console.log('GetToken responded: ' + JSON.stringify(this.getValuesForLog()));
42
+ resolve({ success: true, error: '' });
43
+ },
44
+ error: (error) => {
45
+ console.log('GetToken responded: ' + JSON.stringify(error));
46
+ resolve({ success: false, error: error });
47
+ },
48
+ complete: () => {
49
+ console.log('GetToken complete');
50
+ resolve({ success: true, error: '' });
51
+ },
52
+ });
53
+ });
54
+ }
55
+ async getTokenAndSave() {
56
+ try {
57
+ const tokenResp = (await this.getToken());
58
+ if (tokenResp.success) {
59
+ return this.token;
60
+ }
61
+ else {
62
+ throw new Error('Token retrieval failed');
63
+ }
64
+ }
65
+ catch (error) {
66
+ console.error('Error retrieving token:', error);
67
+ throw error;
68
+ }
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, deps: [{ token: i1.AuthHttpService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
71
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, providedIn: 'root' }); }
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, decorators: [{
74
+ type: Injectable,
75
+ args: [{
76
+ providedIn: 'root',
77
+ }]
78
+ }], ctorParameters: () => [{ type: i1.AuthHttpService }, { type: i2.ActivatedRoute }] });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvc2VydmljZXMvcHJveHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBVzNDLE1BQU0sT0FBTyxZQUFZO0lBU3ZCLFlBQW9CLElBQXFCLEVBQVUsS0FBcUI7UUFBcEQsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQVBqRSxXQUFNLEdBQVcsMEJBQTBCLENBQUM7UUFFNUMsUUFBRyxHQUFXLEVBQUUsQ0FBQztRQUNoQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDdkIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUcxQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRO1lBQ1gsSUFBSSxDQUFDLE1BQU07Z0JBQ1gsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU07b0JBQ2pCLENBQUMsQ0FBQyw2QkFBNkI7b0JBQy9CLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFDckQsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFnQixZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ25ELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLElBQUksQ0FBQyxLQUFLO3dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FDaEUsQ0FBQztvQkFDSixPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUNqQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLGVBQWU7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBUSxDQUFDO1lBQ2pELElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBbEVVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWh0dHAuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXNwb25zZSB7XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm94eVNlcnZpY2Uge1xuICBwdWJsaWMgb3JkZXJJRDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgYXBpVVJMOiBzdHJpbmcgPSAnaHR0cHM6Ly9hcGlyby5pZC1reWMuY29tJztcbiAgcHVibGljIHRva2VuITogc3RyaW5nO1xuICBwdWJsaWMgZW52OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSB0b2tlblVybDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBkZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGFuZ0lzbzogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBBdXRoSHR0cFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgdGhpcy50b2tlbiA9ICcnO1xuICAgIHRoaXMuZGVidWcgPSB0aGlzLmVudiA9PSAnUUEnIHx8IHRoaXMuZW52ID09ICdERU1PJztcbiAgICB0aGlzLnRva2VuVXJsID1cbiAgICAgIHRoaXMuYXBpVVJMICtcbiAgICAgICh0aGlzLmVudiA9PSAnUFJPRCdcbiAgICAgICAgPyAnL3B1YmxpYy9hdXRob3JpemF0aW9uL3Rva2VuJ1xuICAgICAgICA6ICcvZGV2X3B1YmxpYy9hdXRob3JpemF0aW9uL3Rva2VuJyk7XG4gIH1cblxuICBnZXRWYWx1ZXNGb3JMb2coKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVVSTDogdGhpcy5hcGlVUkwsXG4gICAgICBvcmRlcklEOiB0aGlzLm9yZGVySUQsXG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgdG9rZW5Vcmw6IHRoaXMudG9rZW5VcmwsXG4gICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICB9O1xuICB9XG5cbiAgZ2V0VG9rZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHZhciB0b2tlblVybEZ1bGwgPSB0aGlzLnRva2VuVXJsICsgJ25ldz9mbG93PW9yaWdpbic7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5sb2coJ0dldFRva2VuIGNhbGxlZCBhdCcgKyB0b2tlblVybEZ1bGwpO1xuICAgICAgdGhpcy5odHRwLmdldDxUb2tlblJlc3BvbnNlPih0b2tlblVybEZ1bGwpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3AudG9rZW47XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4ta3ljJywgdGhpcy50b2tlbik7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ0dldFRva2VuIHJlc3BvbmRlZDogJyArIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0VmFsdWVzRm9yTG9nKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlLCBlcnJvcjogJycgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2V0VG9rZW4gcmVzcG9uZGVkOiAnICsgSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2V0VG9rZW4gY29tcGxldGUnKTtcbiAgICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSwgZXJyb3I6ICcnIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgZ2V0VG9rZW5BbmRTYXZlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuUmVzcCA9IChhd2FpdCB0aGlzLmdldFRva2VuKCkpIGFzIGFueTtcbiAgICAgIGlmICh0b2tlblJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gcmV0cmlldmFsIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXRyaWV2aW5nIHRva2VuOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIl19