jconsumer-shared 0.0.1 → 0.0.3
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/esm2022/lib/account-service.mjs +21 -0
- package/esm2022/lib/auth-service.mjs +155 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
- package/esm2022/lib/common.service.mjs +38 -0
- package/esm2022/lib/error-message.service.mjs +22 -0
- package/esm2022/lib/file-service.mjs +229 -0
- package/esm2022/lib/group-storage.service.mjs +66 -0
- package/esm2022/lib/i8n.module.mjs +43 -0
- package/esm2022/lib/local-storage.service.mjs +77 -0
- package/esm2022/lib/order.service.mjs +3 -3
- package/esm2022/lib/phone-input/phone-input.component.mjs +127 -0
- package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
- package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
- package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
- package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
- package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
- package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
- package/esm2022/lib/project-messages.mjs +146 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1422 -0
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +77 -0
- package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
- package/esm2022/lib/service-meta.mjs +3 -3
- package/esm2022/lib/session-storage.service.mjs +57 -0
- package/esm2022/lib/shared.service.mjs +27 -4
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
- package/esm2022/lib/skeleton/skeleton-loading.component.mjs +3 -3
- package/esm2022/lib/skeleton/skeleton-loading.module.mjs +4 -4
- package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
- package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
- package/esm2022/lib/storage.service.mjs +75 -0
- package/esm2022/lib/subscription.service.mjs +3 -3
- package/esm2022/lib/toast.service.mjs +3 -3
- package/esm2022/lib/word-processor.service.mjs +181 -0
- package/esm2022/public-api.mjs +27 -2
- package/fesm2022/jconsumer-shared.mjs +3511 -38
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-0.0.3.tgz +0 -0
- package/lib/account-service.d.ts +9 -0
- package/lib/auth-service.d.ts +43 -0
- package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
- package/lib/common.service.d.ts +9 -0
- package/lib/error-message.service.d.ts +5 -0
- package/lib/file-service.d.ts +26 -0
- package/lib/group-storage.service.d.ts +14 -0
- package/lib/i8n.module.d.ts +12 -0
- package/lib/local-storage.service.d.ts +34 -0
- package/lib/phone-input/phone-input.component.d.ts +25 -0
- package/lib/phone-input/phone-input.module.d.ts +9 -0
- package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
- package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
- package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
- package/lib/pipes/filter/filter.pipe.d.ts +7 -0
- package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
- package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
- package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
- package/lib/project-messages.d.ts +1 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +151 -0
- package/lib/questionaire/edit/questionnaire.module.d.ts +19 -0
- package/lib/questionaire/questionaire-service.d.ts +28 -0
- package/lib/session-storage.service.d.ts +26 -0
- package/lib/shared.service.d.ts +12 -3
- package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
- package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
- package/lib/spinner/loading-spinner.component.d.ts +11 -0
- package/lib/spinner/loading-spinner.module.d.ts +9 -0
- package/lib/storage.service.d.ts +16 -0
- package/lib/word-processor.service.d.ts +80 -0
- package/package.json +1 -1
- package/public-api.d.ts +26 -1
- package/esm2022/lib/shared.module.mjs +0 -30
- package/lib/shared.module.d.ts +0 -7
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AccountService {
|
|
4
|
+
store;
|
|
5
|
+
constructor() { }
|
|
6
|
+
setActiveStore(store) {
|
|
7
|
+
this.store = store;
|
|
8
|
+
}
|
|
9
|
+
getActiveStore() {
|
|
10
|
+
return this.store;
|
|
11
|
+
}
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, providedIn: 'root' });
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, decorators: [{
|
|
16
|
+
type: Injectable,
|
|
17
|
+
args: [{
|
|
18
|
+
providedIn: 'root'
|
|
19
|
+
}]
|
|
20
|
+
}], ctorParameters: () => [] });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2FjY291bnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sY0FBYztJQUV6QixLQUFLLENBQU07SUFFWCxnQkFBZ0IsQ0FBQztJQUVqQixjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO3VHQVpVLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2Uge1xyXG4gIFxyXG4gIHN0b3JlOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIHNldEFjdGl2ZVN0b3JlKHN0b3JlOiBhbnkpIHtcclxuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcclxuICB9ICBcclxuXHJcbiAgZ2V0QWN0aXZlU3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { Subject } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./service-meta";
|
|
5
|
+
import * as i2 from "./local-storage.service";
|
|
6
|
+
import * as i3 from "./session-storage.service";
|
|
7
|
+
import * as i4 from "./group-storage.service";
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* Service handles authentication
|
|
11
|
+
*/
|
|
12
|
+
export class AuthService {
|
|
13
|
+
serviceMeta;
|
|
14
|
+
lStorageService;
|
|
15
|
+
sessionStorageService;
|
|
16
|
+
groupService;
|
|
17
|
+
subject = new Subject();
|
|
18
|
+
getMessage() {
|
|
19
|
+
return this.subject.asObservable();
|
|
20
|
+
}
|
|
21
|
+
sendMessage(message) {
|
|
22
|
+
this.subject.next(message);
|
|
23
|
+
}
|
|
24
|
+
constructor(serviceMeta, lStorageService, sessionStorageService, groupService) {
|
|
25
|
+
this.serviceMeta = serviceMeta;
|
|
26
|
+
this.lStorageService = lStorageService;
|
|
27
|
+
this.sessionStorageService = sessionStorageService;
|
|
28
|
+
this.groupService = groupService;
|
|
29
|
+
}
|
|
30
|
+
login(post_data) {
|
|
31
|
+
const _this = this;
|
|
32
|
+
this.lStorageService.setitemonLocalStorage('login', true);
|
|
33
|
+
post_data.mUniqueId = this.lStorageService.getitemfromLocalStorage('mUniqueId');
|
|
34
|
+
console.log(post_data);
|
|
35
|
+
const promise = new Promise((resolve, reject) => {
|
|
36
|
+
_this.loginConsumer(post_data).subscribe(data => {
|
|
37
|
+
this.lStorageService.removeitemfromLocalStorage('login');
|
|
38
|
+
_this.setLoginData(data, post_data);
|
|
39
|
+
this.sendMessage({ ttype: 'refresh', action: false });
|
|
40
|
+
resolve(data);
|
|
41
|
+
}, error => {
|
|
42
|
+
if (error.status === 401 && error.error === 'Session Already Exist') {
|
|
43
|
+
const authToken = this.lStorageService.getitemfromLocalStorage('c_authorizationToken');
|
|
44
|
+
_this.doLogout().then(() => {
|
|
45
|
+
this.lStorageService.setitemonLocalStorage('c_authorizationToken', authToken);
|
|
46
|
+
_this.login(post_data);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
reject(error);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
return promise;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Set Credentials and User Type (provider/consumer) in Local Storage
|
|
56
|
+
* @param data
|
|
57
|
+
* @param post_data
|
|
58
|
+
* @param mod
|
|
59
|
+
*/
|
|
60
|
+
setLoginData(data, post_data) {
|
|
61
|
+
console.log("Set Login Data:", data);
|
|
62
|
+
this.groupService.setitemToGroupStorage('ynw-user', data);
|
|
63
|
+
this.lStorageService.setitemonLocalStorage('isBusinessOwner', 'false');
|
|
64
|
+
if (post_data['password']) {
|
|
65
|
+
delete post_data['password'];
|
|
66
|
+
}
|
|
67
|
+
this.lStorageService.setitemonLocalStorage('ynw-credentials', JSON.stringify(post_data));
|
|
68
|
+
}
|
|
69
|
+
signUp(post_data) {
|
|
70
|
+
const promise = new Promise((resolve, reject) => {
|
|
71
|
+
this.signUpConsumer(post_data).subscribe(data => {
|
|
72
|
+
resolve(data);
|
|
73
|
+
}, error => {
|
|
74
|
+
reject(error);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
return promise;
|
|
78
|
+
}
|
|
79
|
+
doLogout() {
|
|
80
|
+
console.log("Do Logout");
|
|
81
|
+
const _this = this;
|
|
82
|
+
this.lStorageService.setitemonLocalStorage('logout', true);
|
|
83
|
+
this.lStorageService.removeitemfromLocalStorage('authorization');
|
|
84
|
+
const promise = new Promise((resolve, reject) => {
|
|
85
|
+
_this.consumerLogout().subscribe(() => {
|
|
86
|
+
_this.lStorageService.clearLocalstorage();
|
|
87
|
+
_this.sessionStorageService.clearSessionStorage();
|
|
88
|
+
this.sendMessage({ ttype: 'refresh', action: false });
|
|
89
|
+
resolve();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return promise;
|
|
93
|
+
}
|
|
94
|
+
signUpConsumer(body) {
|
|
95
|
+
return this.serviceMeta.httpPost('consumer', body);
|
|
96
|
+
}
|
|
97
|
+
loginConsumer(body) {
|
|
98
|
+
console.log("LoginConsumer", body);
|
|
99
|
+
return this.serviceMeta.httpPost('consumer/login', body);
|
|
100
|
+
}
|
|
101
|
+
consumerLogout() {
|
|
102
|
+
return this.serviceMeta.httpDelete('consumer/login');
|
|
103
|
+
}
|
|
104
|
+
sendConsumerOTP(body) {
|
|
105
|
+
const url = 'consumer/oauth/identify';
|
|
106
|
+
return this.serviceMeta.httpPost(url, body);
|
|
107
|
+
}
|
|
108
|
+
verifyConsumerOTP(otp) {
|
|
109
|
+
const url = 'consumer/oauth/otp/' + otp + '/verify';
|
|
110
|
+
return this.serviceMeta.httpPost(url);
|
|
111
|
+
}
|
|
112
|
+
verifyNewPhoneOTP(otp, body, origin) {
|
|
113
|
+
const path = origin + '/login/' + otp + '/verifyLogin';
|
|
114
|
+
return this.serviceMeta.httpPut(path, body);
|
|
115
|
+
}
|
|
116
|
+
verifyNewPhone(phonenumber, origin, countryCode) {
|
|
117
|
+
const path = origin + '/login/verifyLogin/' + phonenumber + '?countryCode=' + countryCode;
|
|
118
|
+
return this.serviceMeta.httpPost(path);
|
|
119
|
+
}
|
|
120
|
+
getProviderConsumer() {
|
|
121
|
+
return this.serviceMeta.httpGet('spconsumer');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* To check whether user logged in or not
|
|
125
|
+
* @returns true/false
|
|
126
|
+
*/
|
|
127
|
+
goThroughLogin() {
|
|
128
|
+
const _this = this;
|
|
129
|
+
return new Promise(function (resolve) {
|
|
130
|
+
if (_this.lStorageService.getitemfromLocalStorage('ynw-credentials')) {
|
|
131
|
+
resolve(true);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
resolve(false);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
shareOTPforForm(uuid) {
|
|
139
|
+
const url = 'consumer/consentform/sendOtp/' + uuid;
|
|
140
|
+
return this.serviceMeta.httpPut(url);
|
|
141
|
+
}
|
|
142
|
+
verifyOTPforForm(otp, uuid) {
|
|
143
|
+
const url = 'consumer/consentform/verifyOtp/' + otp + '/' + uuid;
|
|
144
|
+
return this.serviceMeta.httpPatch(url);
|
|
145
|
+
}
|
|
146
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AuthService, deps: [{ token: i1.ServiceMeta }, { token: i2.LocalStorageService }, { token: i3.SessionStorageService }, { token: i4.GroupStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
147
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
148
|
+
}
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AuthService, decorators: [{
|
|
150
|
+
type: Injectable,
|
|
151
|
+
args: [{
|
|
152
|
+
providedIn: 'root'
|
|
153
|
+
}]
|
|
154
|
+
}], ctorParameters: () => [{ type: i1.ServiceMeta }, { type: i2.LocalStorageService }, { type: i3.SessionStorageService }, { type: i4.GroupStorageService }] });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2F1dGgtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVMzQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQWFSO0lBQ0E7SUFDQTtJQUNBO0lBZEosT0FBTyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFFckMsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQ1ksV0FBd0IsRUFDeEIsZUFBb0MsRUFDcEMscUJBQTRDLEVBQzVDLFlBQWlDO1FBSGpDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFxQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUMxQyxDQUFDO0lBRUosS0FBSyxDQUFDLFNBQWM7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sT0FBTyxH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QUN0QyxNQUFNLEdBQUcsR0FBRyxpQ0FBaUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7dUdBM0lRLFdBQVc7MkdBQVgsV0FBVyxjQU5SLE1BQU07OzJGQU1ULFdBQVc7a0JBUHZCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTWV0YSB9IGZyb20gXCIuL3NlcnZpY2UtbWV0YVwiO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gXCIuL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdyb3VwU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9ncm91cC1zdG9yYWdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKipcclxuICogXHJcbiAqIFNlcnZpY2UgaGFuZGxlcyBhdXRoZW50aWNhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gICAgZ2V0TWVzc2FnZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZE1lc3NhZ2UobWVzc2FnZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zdWJqZWN0Lm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlTWV0YTogU2VydmljZU1ldGEsXHJcbiAgICAgICAgcHJpdmF0ZSBsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGdyb3VwU2VydmljZTogR3JvdXBTdG9yYWdlU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIGxvZ2luKHBvc3RfZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnbG9naW4nLCB0cnVlKTtcclxuICAgICAgICBwb3N0X2RhdGEubVVuaXF1ZUlkID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ21VbmlxdWVJZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHBvc3RfZGF0YSk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMubG9naW5Db25zdW1lcihwb3N0X2RhdGEpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZWl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdsb2dpbicpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0TG9naW5EYXRhKGRhdGEsIHBvc3RfZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKHsgdHR5cGU6ICdyZWZyZXNoJywgYWN0aW9uOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSAmJiBlcnJvci5lcnJvciA9PT0gJ1Nlc3Npb24gQWxyZWFkeSBFeGlzdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRoVG9rZW4gPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgnY19hdXRob3JpemF0aW9uVG9rZW4nKTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5kb0xvZ291dCgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnY19hdXRob3JpemF0aW9uVG9rZW4nLCBhdXRoVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubG9naW4ocG9zdF9kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgQ3JlZGVudGlhbHMgYW5kIFVzZXIgVHlwZSAocHJvdmlkZXIvY29uc3VtZXIpIGluIExvY2FsIFN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICogQHBhcmFtIHBvc3RfZGF0YSBcclxuICAgICAqIEBwYXJhbSBtb2QgXHJcbiAgICAgKi9cclxuICAgIHNldExvZ2luRGF0YShkYXRhOiBhbnksIHBvc3RfZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTZXQgTG9naW4gRGF0YTpcIiwgZGF0YSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2Uuc2V0aXRlbVRvR3JvdXBTdG9yYWdlKCd5bnctdXNlcicsIGRhdGEpO1xyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXNCdXNpbmVzc093bmVyJywgJ2ZhbHNlJyk7XHJcbiAgICAgICAgaWYgKHBvc3RfZGF0YVsncGFzc3dvcmQnXSkge1xyXG4gICAgICAgICAgICBkZWxldGUgcG9zdF9kYXRhWydwYXNzd29yZCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3ludy1jcmVkZW50aWFscycsIEpTT04uc3RyaW5naWZ5KHBvc3RfZGF0YSkpO1xyXG4gICAgfVxyXG4gICAgc2lnblVwKHBvc3RfZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaWduVXBDb25zdW1lcihwb3N0X2RhdGEpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG4gICAgZG9Mb2dvdXQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEbyBMb2dvdXRcIilcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdsb2dvdXQnLCB0cnVlKTtcclxuICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5yZW1vdmVpdGVtZnJvbUxvY2FsU3RvcmFnZSgnYXV0aG9yaXphdGlvbicpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmNvbnN1bWVyTG9nb3V0KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmxTdG9yYWdlU2VydmljZS5jbGVhckxvY2Fsc3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmNsZWFyU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyB0dHlwZTogJ3JlZnJlc2gnLCBhY3Rpb246IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduVXBDb25zdW1lcihib2R5OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUG9zdCgnY29uc3VtZXInLCBib2R5KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbkNvbnN1bWVyKGJvZHk6IGFueSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9naW5Db25zdW1lclwiLCBib2R5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUG9zdCgnY29uc3VtZXIvbG9naW4nLCBib2R5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdW1lckxvZ291dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwRGVsZXRlKCdjb25zdW1lci9sb2dpbicpO1xyXG4gICAgfVxyXG4gICAgc2VuZENvbnN1bWVyT1RQKGJvZHk6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9vYXV0aC9pZGVudGlmeSc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZU1ldGEuaHR0cFBvc3QodXJsLCBib2R5KTtcclxuICAgIH1cclxuICAgIHZlcmlmeUNvbnN1bWVyT1RQKG90cDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29hdXRoL290cC8nICsgb3RwICsgJy92ZXJpZnknO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQb3N0KHVybCk7XHJcbiAgICB9XHJcbiAgICB2ZXJpZnlOZXdQaG9uZU9UUChvdHA6IHN0cmluZywgYm9keTogYW55LCBvcmlnaW4/OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gb3JpZ2luICsgJy9sb2dpbi8nICsgb3RwICsgJy92ZXJpZnlMb2dpbic7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZU1ldGEuaHR0cFB1dChwYXRoLCBib2R5KTtcclxuICAgIH1cclxuICAgIHZlcmlmeU5ld1Bob25lKHBob25lbnVtYmVyOiBzdHJpbmcsIG9yaWdpbj86IHN0cmluZywgY291bnRyeUNvZGU/OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gb3JpZ2luICsgJy9sb2dpbi92ZXJpZnlMb2dpbi8nICsgcGhvbmVudW1iZXIgKyAnP2NvdW50cnlDb2RlPScgKyBjb3VudHJ5Q29kZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUG9zdChwYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm92aWRlckNvbnN1bWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBHZXQoJ3NwY29uc3VtZXInKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVG8gY2hlY2sgd2hldGhlciB1c2VyIGxvZ2dlZCBpbiBvciBub3RcclxuICAgICAqIEByZXR1cm5zIHRydWUvZmFsc2VcclxuICAgICAqL1xyXG4gICAgZ29UaHJvdWdoTG9naW4oKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCd5bnctY3JlZGVudGlhbHMnKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHNoYXJlT1RQZm9yRm9ybSh1dWlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvY29uc2VudGZvcm0vc2VuZE90cC8nICsgdXVpZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUHV0KHVybCk7XHJcbiAgICB9XHJcbiAgICB2ZXJpZnlPVFBmb3JGb3JtKG90cDogc3RyaW5nLCB1dWlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvY29uc2VudGZvcm0vdmVyaWZ5T3RwLycgKyBvdHAgKyAnLycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQYXRjaCh1cmwpO1xyXG4gICAgfVxyXG59Il19
|