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.
Files changed (74) hide show
  1. package/esm2022/lib/account-service.mjs +21 -0
  2. package/esm2022/lib/auth-service.mjs +155 -0
  3. package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
  4. package/esm2022/lib/common.service.mjs +38 -0
  5. package/esm2022/lib/error-message.service.mjs +22 -0
  6. package/esm2022/lib/file-service.mjs +229 -0
  7. package/esm2022/lib/group-storage.service.mjs +66 -0
  8. package/esm2022/lib/i8n.module.mjs +43 -0
  9. package/esm2022/lib/local-storage.service.mjs +77 -0
  10. package/esm2022/lib/order.service.mjs +3 -3
  11. package/esm2022/lib/phone-input/phone-input.component.mjs +127 -0
  12. package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
  13. package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
  14. package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
  15. package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
  16. package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
  17. package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
  18. package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
  19. package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
  20. package/esm2022/lib/project-messages.mjs +146 -0
  21. package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1422 -0
  22. package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +77 -0
  23. package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
  24. package/esm2022/lib/service-meta.mjs +3 -3
  25. package/esm2022/lib/session-storage.service.mjs +57 -0
  26. package/esm2022/lib/shared.service.mjs +27 -4
  27. package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
  28. package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
  29. package/esm2022/lib/skeleton/skeleton-loading.component.mjs +3 -3
  30. package/esm2022/lib/skeleton/skeleton-loading.module.mjs +4 -4
  31. package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
  32. package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
  33. package/esm2022/lib/storage.service.mjs +75 -0
  34. package/esm2022/lib/subscription.service.mjs +3 -3
  35. package/esm2022/lib/toast.service.mjs +3 -3
  36. package/esm2022/lib/word-processor.service.mjs +181 -0
  37. package/esm2022/public-api.mjs +27 -2
  38. package/fesm2022/jconsumer-shared.mjs +3511 -38
  39. package/fesm2022/jconsumer-shared.mjs.map +1 -1
  40. package/jconsumer-shared-0.0.3.tgz +0 -0
  41. package/lib/account-service.d.ts +9 -0
  42. package/lib/auth-service.d.ts +43 -0
  43. package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
  44. package/lib/common.service.d.ts +9 -0
  45. package/lib/error-message.service.d.ts +5 -0
  46. package/lib/file-service.d.ts +26 -0
  47. package/lib/group-storage.service.d.ts +14 -0
  48. package/lib/i8n.module.d.ts +12 -0
  49. package/lib/local-storage.service.d.ts +34 -0
  50. package/lib/phone-input/phone-input.component.d.ts +25 -0
  51. package/lib/phone-input/phone-input.module.d.ts +9 -0
  52. package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
  53. package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
  54. package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
  55. package/lib/pipes/filter/filter.pipe.d.ts +7 -0
  56. package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
  57. package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
  58. package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
  59. package/lib/project-messages.d.ts +1 -0
  60. package/lib/questionaire/edit/questionnaire.component.d.ts +151 -0
  61. package/lib/questionaire/edit/questionnaire.module.d.ts +19 -0
  62. package/lib/questionaire/questionaire-service.d.ts +28 -0
  63. package/lib/session-storage.service.d.ts +26 -0
  64. package/lib/shared.service.d.ts +12 -3
  65. package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
  66. package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
  67. package/lib/spinner/loading-spinner.component.d.ts +11 -0
  68. package/lib/spinner/loading-spinner.module.d.ts +9 -0
  69. package/lib/storage.service.d.ts +16 -0
  70. package/lib/word-processor.service.d.ts +80 -0
  71. package/package.json +1 -1
  72. package/public-api.d.ts +26 -1
  73. package/esm2022/lib/shared.module.mjs +0 -30
  74. 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