@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.
- package/README.md +24 -0
- package/esm2022/lib/action-step-handler.mjs +163 -0
- package/esm2022/lib/auth-client.service.mjs +69 -0
- package/esm2022/lib/enums/label.keys.mjs +721 -0
- package/esm2022/lib/form-css.helper.mjs +367 -0
- package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
- package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
- package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
- package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
- package/esm2022/lib/formly/formly-action.mjs +56 -0
- package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
- package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
- package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
- package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
- package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
- package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
- package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
- package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
- package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
- package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
- package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
- package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
- package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
- package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
- package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
- package/esm2022/lib/model-population.helper.mjs +265 -0
- package/esm2022/lib/models/application-type.model.mjs +12 -0
- package/esm2022/lib/models/application.model.mjs +30 -0
- package/esm2022/lib/models/auth/users.model.mjs +2 -0
- package/esm2022/lib/models/dictionary.model.mjs +20 -0
- package/esm2022/lib/models/flux.model.mjs +105 -0
- package/esm2022/lib/models/forms.model.mjs +572 -0
- package/esm2022/lib/models/label-info.model.mjs +2 -0
- package/esm2022/lib/models/label.model.mjs +2 -0
- package/esm2022/lib/models/language.model.mjs +3 -0
- package/esm2022/lib/models/list.model.mjs +2 -0
- package/esm2022/lib/models/partner.model.mjs +3 -0
- package/esm2022/lib/models/treeview.model.mjs +15 -0
- package/esm2022/lib/origin-form-auth.service.mjs +40 -0
- package/esm2022/lib/origin-form-config.model.mjs +2 -0
- package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
- package/esm2022/lib/origin-form.component.mjs +2391 -0
- package/esm2022/lib/origin-form.module.mjs +479 -0
- package/esm2022/lib/origin-form.service.mjs +14 -0
- package/esm2022/lib/others/check-list.database.mjs +55 -0
- package/esm2022/lib/others/config-service.mjs +42 -0
- package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
- package/esm2022/lib/others/environment-type.mjs +21 -0
- package/esm2022/lib/others/external-link.directive.mjs +49 -0
- package/esm2022/lib/others/flux-helper.mjs +1397 -0
- package/esm2022/lib/others/picker.component.mjs +119 -0
- package/esm2022/lib/others/translation.pipe.mjs +21 -0
- package/esm2022/lib/others/translations-helper.mjs +258 -0
- package/esm2022/lib/others/utils.mjs +272 -0
- package/esm2022/lib/services/applicationData.service.mjs +145 -0
- package/esm2022/lib/services/auth-http.service.mjs +80 -0
- package/esm2022/lib/services/dialog.service.mjs +56 -0
- package/esm2022/lib/services/dictionary.service.mjs +198 -0
- package/esm2022/lib/services/forms.service.mjs +47 -0
- package/esm2022/lib/services/labels.service.mjs +29 -0
- package/esm2022/lib/services/language.service.mjs +24 -0
- package/esm2022/lib/services/open-banking.service.mjs +194 -0
- package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
- package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
- package/esm2022/lib/services/otp.service.mjs +28 -0
- package/esm2022/lib/services/proxy.service.mjs +79 -0
- package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
- package/esm2022/lib/services/translation.service.mjs +27 -0
- package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
- package/esm2022/lib/shared-components/grid.component.mjs +241 -0
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
- package/esm2022/lib/theme-css.mjs +2254 -0
- package/esm2022/lib/theme-injector.service.mjs +26 -0
- package/esm2022/public-api.mjs +4 -0
- package/esm2022/qbs-origin-origin-form.mjs +5 -0
- package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/action-step-handler.d.ts +49 -0
- package/lib/auth-client.service.d.ts +17 -0
- package/lib/enums/label.keys.d.ts +720 -0
- package/lib/form-css.helper.d.ts +28 -0
- package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
- package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
- package/lib/formly/custom-section-separator.component.d.ts +6 -0
- package/lib/formly/form-section-separator.component.d.ts +10 -0
- package/lib/formly/formly-action.d.ts +13 -0
- package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
- package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
- package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
- package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
- package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
- package/lib/formly/formly-identification.component.d.ts +19 -0
- package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
- package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
- package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
- package/lib/formly/formly-row-fille.d.ts +6 -0
- package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
- package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
- package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
- package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
- package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
- package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
- package/lib/model-population.helper.d.ts +8 -0
- package/lib/models/application-type.model.d.ts +27 -0
- package/lib/models/application.model.d.ts +107 -0
- package/lib/models/auth/users.model.d.ts +20 -0
- package/lib/models/dictionary.model.d.ts +77 -0
- package/lib/models/flux.model.d.ts +101 -0
- package/lib/models/forms.model.d.ts +504 -0
- package/lib/models/label-info.model.d.ts +10 -0
- package/lib/models/label.model.d.ts +4 -0
- package/lib/models/language.model.d.ts +5 -0
- package/lib/models/list.model.d.ts +8 -0
- package/lib/models/partner.model.d.ts +12 -0
- package/lib/models/treeview.model.d.ts +17 -0
- package/lib/origin-form-auth.service.d.ts +15 -0
- package/lib/origin-form-config.model.d.ts +12 -0
- package/lib/origin-form-token.interceptor.d.ts +12 -0
- package/lib/origin-form.component.d.ts +231 -0
- package/lib/origin-form.module.d.ts +84 -0
- package/lib/origin-form.service.d.ts +6 -0
- package/lib/others/check-list.database.d.ts +16 -0
- package/lib/others/config-service.d.ts +22 -0
- package/lib/others/dictionary-label-info.d.ts +6 -0
- package/lib/others/environment-type.d.ts +8 -0
- package/lib/others/external-link.directive.d.ts +12 -0
- package/lib/others/flux-helper.d.ts +115 -0
- package/lib/others/picker.component.d.ts +36 -0
- package/lib/others/translation.pipe.d.ts +10 -0
- package/lib/others/translations-helper.d.ts +31 -0
- package/lib/others/utils.d.ts +37 -0
- package/lib/services/applicationData.service.d.ts +35 -0
- package/lib/services/auth-http.service.d.ts +21 -0
- package/lib/services/dialog.service.d.ts +20 -0
- package/lib/services/dictionary.service.d.ts +89 -0
- package/lib/services/forms.service.d.ts +17 -0
- package/lib/services/labels.service.d.ts +13 -0
- package/lib/services/language.service.d.ts +14 -0
- package/lib/services/open-banking.service.d.ts +137 -0
- package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
- package/lib/services/origin-form-signalr.service.d.ts +24 -0
- package/lib/services/otp.service.d.ts +22 -0
- package/lib/services/proxy.service.d.ts +29 -0
- package/lib/services/scroll-to-error.service.d.ts +54 -0
- package/lib/services/translation.service.d.ts +10 -0
- package/lib/shared-components/confirmation.component.d.ts +77 -0
- package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
- package/lib/shared-components/grid.component.d.ts +138 -0
- package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
- package/lib/theme-css.d.ts +2 -0
- package/lib/theme-injector.service.d.ts +8 -0
- package/package.json +42 -0
- package/public-api.d.ts +3 -0
- package/schematics-compiled/collection.json +10 -0
- package/schematics-compiled/ng-add/index.d.ts +2 -0
- package/schematics-compiled/ng-add/index.js +67 -0
- package/schematics-compiled/ng-add/index.js.map +1 -0
- package/schematics-compiled/ng-add/schema.json +8 -0
- package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
- package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
- package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
- package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
- package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
- package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0tc2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9zZXJ2aWNlcy9vcmlnaW4tZm9ybS1zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHdCQUF3QjtJQWFuQztRQVpRLGVBQVUsR0FBaUMsSUFBSSxDQUFDO1FBQ2hELHNCQUFpQixHQUF5QixJQUFJLENBQUM7UUFHdkQsd0NBQXdDO1FBQ2hDLGtCQUFhLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFN0Qsa0RBQWtEO1FBQzNDLDBCQUFxQixHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBRXhELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRzVDLElBQUksQ0FBQyxNQUFNO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUI7UUFDcEMsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQzlELENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLEVBQUU7YUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDcEIsZUFBZSxFQUFFLElBQUk7WUFDckIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO1NBQ2hELENBQUM7YUFDRCxzQkFBc0IsRUFBRTthQUN4QixlQUFlLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDOUMsS0FBSyxFQUFFLENBQUM7UUFFWCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDckMsS0FBSyxFQUFFO2FBQ1AsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixPQUFPLENBQUMsR0FBRyxDQUNULHVEQUF1RCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUN0RixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsOERBQThEO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsK0RBQStEO1FBQy9ELDJDQUEyQztRQUMzQyxNQUFNO0lBQ1IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFJLFNBQWlCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLGtFQUFrRTtZQUNsRSxJQUNFLElBQUksQ0FBQyxVQUFVO2dCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQzlELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBTyxFQUFFLEVBQUU7b0JBQ3hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBZSxDQUFDO0lBQ3pELENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYztRQUN6QixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFDOUQsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7K0dBakhVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIHNpZ25hbFIgZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgT3JpZ2luRm9ybVNpZ25hbHJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBzaWduYWxSLkh1YkNvbm5lY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGh1YlVybDogc3RyaW5nO1xuXG4gIC8vIEdlbmVyaWMgc3ViamVjdHMgZm9yIGRpZmZlcmVudCBldmVudHNcbiAgcHJpdmF0ZSBldmVudFN1YmplY3RzOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGFueT4+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
|