jconsumer-shared 0.0.2 → 1.0.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/esm2022/lib/account-service.mjs +170 -0
- package/esm2022/lib/auth-service.mjs +163 -0
- package/esm2022/lib/booking-service.mjs +480 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
- package/esm2022/lib/common.service.mjs +188 -0
- package/esm2022/lib/confirm/confirm-box.component.mjs +159 -0
- package/esm2022/lib/confirm/confirm-box.module.mjs +62 -0
- package/esm2022/lib/consumer-service.mjs +780 -0
- package/esm2022/lib/currency-service.mjs +12 -0
- package/esm2022/lib/environment.service.mjs +23 -0
- package/esm2022/lib/error-message.module.mjs +23 -0
- package/esm2022/lib/error-message.service.mjs +22 -0
- package/esm2022/lib/file-service.mjs +235 -0
- package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +21 -0
- package/esm2022/lib/form-message/form-message-display.module.mjs +35 -0
- package/esm2022/lib/form-message/form-message-display.service.mjs +44 -0
- package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +18 -0
- package/esm2022/lib/group-storage.service.mjs +66 -0
- package/esm2022/lib/i8n.module.mjs +43 -0
- package/esm2022/lib/injector-resolver.mjs +28 -0
- package/esm2022/lib/local-storage.service.mjs +77 -0
- package/esm2022/lib/media-service.mjs +49 -0
- package/esm2022/lib/order.service.mjs +16 -1
- package/esm2022/lib/payment/modes/payment-modes.component.mjs +35 -0
- package/esm2022/lib/payment/modes/payment-modes.module.mjs +24 -0
- package/esm2022/lib/payment/payment.module.mjs +26 -0
- package/esm2022/lib/paytm.service.mjs +131 -0
- package/esm2022/lib/phone-input/phone-input.component.mjs +131 -0
- package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
- package/esm2022/lib/pipes/autolink/autolink.module.mjs +20 -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/date-format/date-format.module.mjs +19 -0
- package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +42 -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-constants.mjs +310 -0
- package/esm2022/lib/project-messages.mjs +146 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1427 -0
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +78 -0
- package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
- package/esm2022/lib/razorpay.service.mjs +157 -0
- package/esm2022/lib/request-dialog/request-dialog.component.mjs +29 -0
- package/esm2022/lib/request-dialog/request-dialog.module.mjs +24 -0
- package/esm2022/lib/session-storage.service.mjs +57 -0
- package/esm2022/lib/shared-account.guard.mjs +41 -0
- package/esm2022/lib/shared-account.resolver.mjs +22 -0
- package/esm2022/lib/shared.service.mjs +107 -10
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
- 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/theme.service.mjs +30 -0
- package/esm2022/lib/timezone-converter.mjs +49 -0
- package/esm2022/lib/toast.service.mjs +2 -2
- package/esm2022/lib/twilio-service.mjs +466 -0
- package/esm2022/lib/word-processor.service.mjs +181 -0
- package/esm2022/public-api.mjs +58 -1
- package/fesm2022/jconsumer-shared.mjs +6989 -39
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-1.0.0.tgz +0 -0
- package/lib/account-service.d.ts +48 -0
- package/lib/auth-service.d.ts +44 -0
- package/lib/booking-service.d.ts +101 -0
- package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
- package/lib/common.service.d.ts +20 -0
- package/lib/confirm/confirm-box.component.d.ts +43 -0
- package/lib/confirm/confirm-box.module.d.ts +16 -0
- package/lib/consumer-service.d.ts +178 -0
- package/lib/currency-service.d.ts +4 -0
- package/lib/environment.service.d.ts +9 -0
- package/lib/error-message.module.d.ts +7 -0
- package/lib/error-message.service.d.ts +5 -0
- package/lib/file-service.d.ts +29 -0
- package/lib/form-message/field-error-display/field-error-display.component.d.ts +8 -0
- package/lib/form-message/form-message-display.module.d.ts +10 -0
- package/lib/form-message/form-message-display.service.d.ts +13 -0
- package/lib/form-message/form-success-display/form-success-display.component.d.ts +7 -0
- package/lib/group-storage.service.d.ts +14 -0
- package/lib/i8n.module.d.ts +12 -0
- package/lib/injector-resolver.d.ts +2 -0
- package/lib/local-storage.service.d.ts +34 -0
- package/lib/media-service.d.ts +9 -0
- package/lib/order.service.d.ts +4 -0
- package/lib/payment/modes/payment-modes.component.d.ts +15 -0
- package/lib/payment/modes/payment-modes.module.d.ts +9 -0
- package/lib/payment/payment.module.d.ts +7 -0
- package/lib/paytm.service.d.ts +13 -0
- package/lib/phone-input/phone-input.component.d.ts +27 -0
- package/lib/phone-input/phone-input.module.d.ts +9 -0
- package/lib/pipes/autolink/autolink.module.d.ts +8 -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/date-format/date-format.module.d.ts +8 -0
- package/lib/pipes/date-format/date-format.pipe.d.ts +12 -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-constants.d.ts +227 -0
- package/lib/project-messages.d.ts +1 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +154 -0
- package/lib/questionaire/edit/questionnaire.module.d.ts +20 -0
- package/lib/questionaire/questionaire-service.d.ts +28 -0
- package/lib/razorpay.service.d.ts +26 -0
- package/lib/request-dialog/request-dialog.component.d.ts +11 -0
- package/lib/request-dialog/request-dialog.module.d.ts +9 -0
- package/lib/session-storage.service.d.ts +26 -0
- package/lib/shared-account.guard.d.ts +11 -0
- package/lib/shared-account.resolver.d.ts +10 -0
- package/lib/shared.service.d.ts +43 -7
- 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/theme.service.d.ts +10 -0
- package/lib/timezone-converter.d.ts +8 -0
- package/lib/twilio-service.d.ts +60 -0
- package/lib/word-processor.service.d.ts +80 -0
- package/package.json +1 -1
- package/public-api.d.ts +57 -0
- package/jconsumer-shared-0.0.2.tgz +0 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/platform-browser";
|
|
4
|
+
import * as i2 from "./service-meta";
|
|
5
|
+
import * as i3 from "./shared.service";
|
|
6
|
+
export class AccountService {
|
|
7
|
+
titleService;
|
|
8
|
+
metaService;
|
|
9
|
+
serviceMeta;
|
|
10
|
+
sharedService;
|
|
11
|
+
accountConfig;
|
|
12
|
+
activeLocation;
|
|
13
|
+
accountLocations;
|
|
14
|
+
activeStore;
|
|
15
|
+
stores = [];
|
|
16
|
+
constructor(titleService, metaService, serviceMeta, sharedService) {
|
|
17
|
+
this.titleService = titleService;
|
|
18
|
+
this.metaService = metaService;
|
|
19
|
+
this.serviceMeta = serviceMeta;
|
|
20
|
+
this.sharedService = sharedService;
|
|
21
|
+
}
|
|
22
|
+
setActiveStore(store) {
|
|
23
|
+
this.activeStore = store;
|
|
24
|
+
}
|
|
25
|
+
getActiveStore() {
|
|
26
|
+
return this.activeStore;
|
|
27
|
+
}
|
|
28
|
+
getAccountConfig() {
|
|
29
|
+
return this.accountConfig;
|
|
30
|
+
}
|
|
31
|
+
setStores(stores) {
|
|
32
|
+
this.stores = stores;
|
|
33
|
+
}
|
|
34
|
+
getStores() {
|
|
35
|
+
return this.stores;
|
|
36
|
+
}
|
|
37
|
+
setActiveLocation(location) {
|
|
38
|
+
this.activeLocation = location;
|
|
39
|
+
}
|
|
40
|
+
getActiveLocation() {
|
|
41
|
+
return this.activeLocation;
|
|
42
|
+
}
|
|
43
|
+
setAccountLocations(locations) {
|
|
44
|
+
this.accountLocations = locations;
|
|
45
|
+
}
|
|
46
|
+
getAccountLocations() {
|
|
47
|
+
return this.accountLocations;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Method which returns the Jsons
|
|
51
|
+
* @param accountUniqueId The Unique Id which represents S3 Bucket for a particular Account
|
|
52
|
+
* @param listOfUrlTypes Type of the Url eg. services, businessProfile etc.
|
|
53
|
+
* @returns { "services": 'services.json', "businessProfile": businessprofile.json}
|
|
54
|
+
*/
|
|
55
|
+
getJsonsbyTypes(accountUniqueId, userId, listOfUrlTypes) {
|
|
56
|
+
let path = 'provider/account/settings/config/' + accountUniqueId;
|
|
57
|
+
if (userId) {
|
|
58
|
+
path = path + '/' + userId;
|
|
59
|
+
}
|
|
60
|
+
path = path + '/' + listOfUrlTypes;
|
|
61
|
+
return this.serviceMeta.httpGet(path);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* @param jsonStr_Obj
|
|
66
|
+
*/
|
|
67
|
+
getJson(jsonStr_Obj) {
|
|
68
|
+
if (jsonStr_Obj) {
|
|
69
|
+
if (typeof jsonStr_Obj === 'object') {
|
|
70
|
+
return jsonStr_Obj;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return JSON.parse(jsonStr_Obj);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
setIcon(url) {
|
|
79
|
+
let link = document.createElement('link'), oldLink = document.getElementById('dynamic-favicon');
|
|
80
|
+
link.id = 'dynamic-favicon';
|
|
81
|
+
link.rel = 'shortcut icon';
|
|
82
|
+
link.href = url;
|
|
83
|
+
if (oldLink) {
|
|
84
|
+
document.head.removeChild(oldLink);
|
|
85
|
+
}
|
|
86
|
+
document.head.appendChild(link);
|
|
87
|
+
}
|
|
88
|
+
getAccountInfoById() {
|
|
89
|
+
const _this = this;
|
|
90
|
+
return new Promise(function (resolve, reject) {
|
|
91
|
+
if (_this.sharedService.getAccountInfo()) {
|
|
92
|
+
resolve(_this.sharedService.getAccountInfo());
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
_this.getAccountInfoPromise().then((account) => {
|
|
96
|
+
_this.getAccountConfiguration().then((config) => {
|
|
97
|
+
_this.sharedService.setAccountConfig(config);
|
|
98
|
+
});
|
|
99
|
+
_this.sharedService.setAccountInfo(account);
|
|
100
|
+
const accountProfile = _this.getJson(account['businessProfile']);
|
|
101
|
+
_this.titleService.setTitle(accountProfile.businessName);
|
|
102
|
+
if (accountProfile.logo && accountProfile.logo.url) {
|
|
103
|
+
_this.setIcon(accountProfile.logo.url);
|
|
104
|
+
}
|
|
105
|
+
_this.metaService.addTags([
|
|
106
|
+
{ name: 'description', content: accountProfile.businessDesc },
|
|
107
|
+
{ name: 'og:title', content: accountProfile.businessName },
|
|
108
|
+
{ name: 'og:site_name', content: accountProfile.businessName },
|
|
109
|
+
{ name: 'og:description', content: accountProfile.businessDesc },
|
|
110
|
+
{ name: 'og:image', content: (accountProfile.logo && accountProfile.logo.url) ? accountProfile.logo.url : '' }
|
|
111
|
+
// <meta property="og:url" content="https://yourwebsite.com/page-url">
|
|
112
|
+
// <meta property="og:image" content="https://yourwebsite.com/image.jpg">
|
|
113
|
+
// {name: 'keywords', content: 'Angular, Universal, Example'},
|
|
114
|
+
// {name: 'robots', content: 'index, follow'}
|
|
115
|
+
]);
|
|
116
|
+
resolve(_this.sharedService.getAccountInfo());
|
|
117
|
+
}).catch((error) => {
|
|
118
|
+
console.log(error);
|
|
119
|
+
resolve(_this.sharedService.getAccountInfo());
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
getAccountInfoPromise() {
|
|
125
|
+
const _this = this;
|
|
126
|
+
return new Promise(function (resolve, reject) {
|
|
127
|
+
let accountS3List = 'settings,coupon,providerCoupon,appointmentsettings,terminologies,location,businessProfile,virtualFields,services,apptServices,donationServices,departmentProviders,gallery';
|
|
128
|
+
_this.getJsonsbyTypes(_this.sharedService.getUniqueID(), null, accountS3List).subscribe((account) => {
|
|
129
|
+
resolve(account);
|
|
130
|
+
}, (error) => {
|
|
131
|
+
reject(error);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
getAccountConfiguration() {
|
|
136
|
+
const _this = this;
|
|
137
|
+
return new Promise(function (resolve) {
|
|
138
|
+
_this.getUIAccountConfig().subscribe((config) => {
|
|
139
|
+
resolve(config);
|
|
140
|
+
}, () => {
|
|
141
|
+
resolve(null);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
*
|
|
147
|
+
*/
|
|
148
|
+
getUIAccountConfig() {
|
|
149
|
+
const path = this.sharedService.getConfigPath() + this.sharedService.getUniqueID() + '/account_config.json?t=' + new Date();
|
|
150
|
+
return this.serviceMeta.httpGet(path);
|
|
151
|
+
}
|
|
152
|
+
getUserInformation(uniqueId, userId) {
|
|
153
|
+
const _this = this;
|
|
154
|
+
let listOfTypes = 'providerBusinessProfile,providerVirtualFields';
|
|
155
|
+
return new Promise(function (resolve) {
|
|
156
|
+
_this.getJsonsbyTypes(uniqueId, userId, listOfTypes).subscribe((userAccount) => {
|
|
157
|
+
resolve(userAccount);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, deps: [{ token: i1.Title }, { token: i1.Meta }, { token: i2.ServiceMeta }, { token: i3.SharedService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
162
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, providedIn: 'root' });
|
|
163
|
+
}
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AccountService, decorators: [{
|
|
165
|
+
type: Injectable,
|
|
166
|
+
args: [{
|
|
167
|
+
providedIn: 'root'
|
|
168
|
+
}]
|
|
169
|
+
}], ctorParameters: () => [{ type: i1.Title }, { type: i1.Meta }, { type: i2.ServiceMeta }, { type: i3.SharedService }] });
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2FjY291bnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVEzQyxNQUFNLE9BQU8sY0FBYztJQVNmO0lBQ0E7SUFDQTtJQUNBO0lBVlYsYUFBYSxDQUFNO0lBQ25CLGNBQWMsQ0FBTTtJQUNwQixnQkFBZ0IsQ0FBTTtJQUN0QixXQUFXLENBQU07SUFDakIsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUVqQixZQUNVLFlBQW1CLEVBQ25CLFdBQWlCLEVBQ2pCLFdBQXdCLEVBQ3hCLGFBQTRCO1FBSDVCLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFNO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQUksQ0FBQztJQUUzQyxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxTQUFTLENBQUMsTUFBTTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFRO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFj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QUFDLFVBQVUsT0FBTztZQUNsQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUM1RCxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FDRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO3VHQS9KVSxjQUFjOzJHQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4vc2hhcmVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTWV0YSB9IGZyb20gJy4vc2VydmljZS1tZXRhJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXJ2aWNlIHtcclxuXHJcbiAgYWNjb3VudENvbmZpZzogYW55O1xyXG4gIGFjdGl2ZUxvY2F0aW9uOiBhbnk7XHJcbiAgYWNjb3VudExvY2F0aW9uczogYW55O1xyXG4gIGFjdGl2ZVN0b3JlOiBhbnk7XHJcbiAgc3RvcmVzOiBhbnkgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRpdGxlU2VydmljZTogVGl0bGUsXHJcbiAgICBwcml2YXRlIG1ldGFTZXJ2aWNlOiBNZXRhLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlTWV0YTogU2VydmljZU1ldGEsXHJcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UpIHsgfVxyXG5cclxuICBzZXRBY3RpdmVTdG9yZShzdG9yZTogYW55KSB7XHJcbiAgICB0aGlzLmFjdGl2ZVN0b3JlID0gc3RvcmU7XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN0b3JlO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWNjb3VudENvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY291bnRDb25maWc7XHJcbiAgfVxyXG4gIHNldFN0b3JlcyhzdG9yZXMpIHtcclxuICAgIHRoaXMuc3RvcmVzID0gc3RvcmVzO1xyXG4gIH1cclxuICBnZXRTdG9yZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZXM7XHJcbiAgfVxyXG4gIHNldEFjdGl2ZUxvY2F0aW9uKGxvY2F0aW9uKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgfVxyXG4gIGdldEFjdGl2ZUxvY2F0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlTG9jYXRpb247XHJcbiAgfVxyXG4gIHNldEFjY291bnRMb2NhdGlvbnMobG9jYXRpb25zKSB7XHJcbiAgICB0aGlzLmFjY291bnRMb2NhdGlvbnMgPSBsb2NhdGlvbnM7XHJcbiAgfVxyXG4gIGdldEFjY291bnRMb2NhdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TG9jYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIE1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBKc29uc1xyXG4gICAgKiBAcGFyYW0gYWNjb3VudFVuaXF1ZUlkIFRoZSBVbmlxdWUgSWQgd2hpY2ggcmVwcmVzZW50cyBTMyBCdWNrZXQgZm9yIGEgcGFydGljdWxhciBBY2NvdW50XHJcbiAgICAqIEBwYXJhbSBsaXN0T2ZVcmxUeXBlcyBUeXBlIG9mIHRoZSBVcmwgZWcuIHNlcnZpY2VzLCBidXNpbmVzc1Byb2ZpbGUgZXRjLlxyXG4gICAgKiBAcmV0dXJucyB7IFwic2VydmljZXNcIjogJ3NlcnZpY2VzLmpzb24nLCBcImJ1c2luZXNzUHJvZmlsZVwiOiBidXNpbmVzc3Byb2ZpbGUuanNvbn1cclxuICAqL1xyXG4gIGdldEpzb25zYnlUeXBlcyhhY2NvdW50VW5pcXVlSWQ6IGFueSwgdXNlcklkOiBhbnksIGxpc3RPZlVybFR5cGVzOiBhbnkpIHtcclxuICAgIGxldCBwYXRoID0gJ3Byb3ZpZGVyL2FjY291bnQvc2V0dGluZ3MvY29uZmlnLycgKyBhY2NvdW50VW5pcXVlSWQ7XHJcbiAgICBpZiAodXNlcklkKSB7XHJcbiAgICAgIHBhdGggPSBwYXRoICsgJy8nICsgdXNlcklkO1xyXG4gICAgfVxyXG4gICAgcGF0aCA9IHBhdGggKyAnLycgKyBsaXN0T2ZVcmxUeXBlcztcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBHZXQocGF0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICogXHJcbiAgKiBAcGFyYW0ganNvblN0cl9PYmogXHJcbiAgKi9cclxuICBnZXRKc29uKGpzb25TdHJfT2JqOiBhbnkpIHtcclxuICAgIGlmIChqc29uU3RyX09iaikge1xyXG4gICAgICBpZiAodHlwZW9mIGpzb25TdHJfT2JqID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBqc29uU3RyX09iajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyX09iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBzZXRJY29uKHVybCkge1xyXG4gICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyksXHJcbiAgICAgIG9sZExpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHluYW1pYy1mYXZpY29uJyk7XHJcbiAgICBsaW5rLmlkID0gJ2R5bmFtaWMtZmF2aWNvbic7XHJcbiAgICBsaW5rLnJlbCA9ICdzaG9ydGN1dCBpY29uJztcclxuICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgIGlmIChvbGRMaW5rKSB7XHJcbiAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQob2xkTGluayk7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xyXG4gIH1cclxuICBnZXRBY2NvdW50SW5mb0J5SWQoKSB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBpZiAoX3RoaXMuc2hhcmVkU2VydmljZS5nZXRBY2NvdW50SW5mbygpKSB7XHJcbiAgICAgICAgcmVzb2x2ZShfdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFjY291bnRJbmZvKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIF90aGlzLmdldEFjY291bnRJbmZvUHJvbWlzZSgpLnRoZW4oKGFjY291bnQpID0+IHtcclxuICAgICAgICAgIF90aGlzLmdldEFjY291bnRDb25maWd1cmF0aW9uKCkudGhlbigoY29uZmlnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMuc2hhcmVkU2VydmljZS5zZXRBY2NvdW50Q29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgX3RoaXMuc2hhcmVkU2VydmljZS5zZXRBY2NvdW50SW5mbyhhY2NvdW50KTtcclxuICAgICAgICAgIGNvbnN0IGFjY291bnRQcm9maWxlID0gX3RoaXMuZ2V0SnNvbihhY2NvdW50WydidXNpbmVzc1Byb2ZpbGUnXSk7XHJcbiAgICAgICAgICBfdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUoYWNjb3VudFByb2ZpbGUuYnVzaW5lc3NOYW1lKTtcclxuICAgICAgICAgIGlmIChhY2NvdW50UHJvZmlsZS5sb2dvICYmIGFjY291bnRQcm9maWxlLmxvZ28udXJsKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnNldEljb24oYWNjb3VudFByb2ZpbGUubG9nby51cmwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgX3RoaXMubWV0YVNlcnZpY2UuYWRkVGFncyhbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgY29udGVudDogYWNjb3VudFByb2ZpbGUuYnVzaW5lc3NEZXNjIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29nOnRpdGxlJywgY29udGVudDogYWNjb3VudFByb2ZpbGUuYnVzaW5lc3NOYW1lIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29nOnNpdGVfbmFtZScsIGNvbnRlbnQ6IGFjY291bnRQcm9maWxlLmJ1c2luZXNzTmFtZSB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGFjY291bnRQcm9maWxlLmJ1c2luZXNzRGVzYyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvZzppbWFnZScsIGNvbnRlbnQ6IChhY2NvdW50UHJvZmlsZS5sb2dvICYmIGFjY291bnRQcm9maWxlLmxvZ28udXJsKSA/IGFjY291bnRQcm9maWxlLmxvZ28udXJsIDogJycgfVxyXG4gICAgICAgICAgICAvLyA8bWV0YSBwcm9wZXJ0eT1cIm9nOnVybFwiIGNvbnRlbnQ9XCJodHRwczovL3lvdXJ3ZWJzaXRlLmNvbS9wYWdlLXVybFwiPlxyXG4gICAgICAgICAgICAvLyA8bWV0YSBwcm9wZXJ0eT1cIm9nOmltYWdlXCIgY29udGVudD1cImh0dHBzOi8veW91cndlYnNpdGUuY29tL2ltYWdlLmpwZ1wiPlxyXG4gICAgICAgICAgICAvLyB7bmFtZTogJ2tleXdvcmRzJywgY29udGVudDogJ0FuZ3VsYXIsIFVuaXZlcnNhbCwgRXhhbXBsZSd9LFxyXG4gICAgICAgICAgICAvLyB7bmFtZTogJ3JvYm90cycsIGNvbnRlbnQ6ICdpbmRleCwgZm9sbG93J31cclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgcmVzb2x2ZShfdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFjY291bnRJbmZvKCkpO1xyXG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgcmVzb2x2ZShfdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFjY291bnRJbmZvKCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRBY2NvdW50SW5mb1Byb21pc2UoKSB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBsZXQgYWNjb3VudFMzTGlzdCA9ICdzZXR0aW5ncyxjb3Vwb24scHJvdmlkZXJDb3Vwb24sYXBwb2ludG1lbnRzZXR0aW5ncyx0ZXJtaW5vbG9naWVzLGxvY2F0aW9uLGJ1c2luZXNzUHJvZmlsZSx2aXJ0dWFsRmllbGRzLHNlcnZpY2VzLGFwcHRTZXJ2aWNlcyxkb25hdGlvblNlcnZpY2VzLGRlcGFydG1lbnRQcm92aWRlcnMsZ2FsbGVyeSc7XHJcbiAgICAgIF90aGlzLmdldEpzb25zYnlUeXBlcyhfdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFVuaXF1ZUlEKCksIG51bGwsIGFjY291bnRTM0xpc3QpLnN1YnNjcmliZShcclxuICAgICAgICAoYWNjb3VudDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKGFjY291bnQpXHJcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0QWNjb3VudENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgX3RoaXMuZ2V0VUlBY2NvdW50Q29uZmlnKCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChjb25maWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShjb25maWcpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICBnZXRVSUFjY291bnRDb25maWcoKSB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENvbmZpZ1BhdGgoKSArIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVbmlxdWVJRCgpICsgJy9hY2NvdW50X2NvbmZpZy5qc29uP3Q9JyArIG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwR2V0KHBhdGgpO1xyXG4gIH1cclxuICBcclxuICBnZXRVc2VySW5mb3JtYXRpb24odW5pcXVlSWQsIHVzZXJJZCkge1xyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgbGV0IGxpc3RPZlR5cGVzID0gJ3Byb3ZpZGVyQnVzaW5lc3NQcm9maWxlLHByb3ZpZGVyVmlydHVhbEZpZWxkcyc7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgX3RoaXMuZ2V0SnNvbnNieVR5cGVzKHVuaXF1ZUlkLCB1c2VySWQsIGxpc3RPZlR5cGVzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHVzZXJBY2NvdW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUodXNlckFjY291bnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
isLoggedIn() {
|
|
147
|
+
if (this.lStorageService.getitemfromLocalStorage('ynw-credentials')) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
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 });
|
|
155
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
156
|
+
}
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AuthService, decorators: [{
|
|
158
|
+
type: Injectable,
|
|
159
|
+
args: [{
|
|
160
|
+
providedIn: 'root'
|
|
161
|
+
}]
|
|
162
|
+
}], ctorParameters: () => [{ type: i1.ServiceMeta }, { type: i2.LocalStorageService }, { type: i3.SessionStorageService }, { type: i4.GroupStorageService }] });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2F1dGgtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVMzQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQWFSO0lBQ0E7SUFDQTtJQUNBO0lBZEosT0FBTyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFFckMsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQ1ksV0FBd0IsRUFDeEIsZUFBb0MsRUFDcEMscUJBQTRDLEVBQzVDLFlBQWlDO1FBSGpDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFxQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUN6QyxDQUFDO0lBRUwsS0FBSyxDQUFDLFNBQWM7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sT0FBTyxH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QUN0QyxNQUFNLEdBQUcsR0FBRyxpQ0FBaUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO3VHQW5KUSxXQUFXOzJHQUFYLFdBQVcsY0FOUixNQUFNOzsyRkFNVCxXQUFXO2tCQVB2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgU2VydmljZU1ldGEgfSBmcm9tIFwiLi9zZXJ2aWNlLW1ldGFcIjtcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHcm91cFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vZ3JvdXAtc3RvcmFnZS5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuLyoqXHJcbiAqIFxyXG4gKiBTZXJ2aWNlIGhhbmRsZXMgYXV0aGVudGljYXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAgIGdldE1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2U6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZU1ldGE6IFNlcnZpY2VNZXRhLFxyXG4gICAgICAgIHByaXZhdGUgbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU3RvcmFnZVNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgbG9naW4ocG9zdF9kYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdsb2dpbicsIHRydWUpO1xyXG4gICAgICAgIHBvc3RfZGF0YS5tVW5pcXVlSWQgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgnbVVuaXF1ZUlkJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocG9zdF9kYXRhKTtcclxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5sb2dpbkNvbnN1bWVyKHBvc3RfZGF0YSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2UucmVtb3ZlaXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ2xvZ2luJyk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRMb2dpbkRhdGEoZGF0YSwgcG9zdF9kYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyB0dHlwZTogJ3JlZnJlc2gnLCBhY3Rpb246IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxICYmIGVycm9yLmVycm9yID09PSAnU2Vzc2lvbiBBbHJlYWR5IEV4aXN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdjX2F1dGhvcml6YXRpb25Ub2tlbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmRvTG9nb3V0KCkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdjX2F1dGhvcml6YXRpb25Ub2tlbicsIGF1dGhUb2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dpbihwb3N0X2RhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldCBDcmVkZW50aWFscyBhbmQgVXNlciBUeXBlIChwcm92aWRlci9jb25zdW1lcikgaW4gTG9jYWwgU3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKiBAcGFyYW0gcG9zdF9kYXRhIFxyXG4gICAgICogQHBhcmFtIG1vZCBcclxuICAgICAqL1xyXG4gICAgc2V0TG9naW5EYXRhKGRhdGE6IGFueSwgcG9zdF9kYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlNldCBMb2dpbiBEYXRhOlwiLCBkYXRhKTtcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5zZXRpdGVtVG9Hcm91cFN0b3JhZ2UoJ3ludy11c2VyJywgZGF0YSk7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpc0J1c2luZXNzT3duZXInLCAnZmFsc2UnKTtcclxuICAgICAgICBpZiAocG9zdF9kYXRhWydwYXNzd29yZCddKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBwb3N0X2RhdGFbJ3Bhc3N3b3JkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgneW53LWNyZWRlbnRpYWxzJywgSlNPTi5zdHJpbmdpZnkocG9zdF9kYXRhKSk7XHJcbiAgICB9XHJcbiAgICBzaWduVXAocG9zdF9kYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNpZ25VcENvbnN1bWVyKHBvc3RfZGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9XHJcbiAgICBkb0xvZ291dCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRvIExvZ291dFwiKVxyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2xvZ291dCcsIHRydWUpO1xyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZWl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdhdXRob3JpemF0aW9uJyk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgX3RoaXMuY29uc3VtZXJMb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubFN0b3JhZ2VTZXJ2aWNlLmNsZWFyTG9jYWxzdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSh7IHR0eXBlOiAncmVmcmVzaCcsIGFjdGlvbjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25VcENvbnN1bWVyKGJvZHk6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQb3N0KCdjb25zdW1lcicsIGJvZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luQ29uc3VtZXIoYm9keTogYW55KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2dpbkNvbnN1bWVyXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQb3N0KCdjb25zdW1lci9sb2dpbicsIGJvZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN1bWVyTG9nb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBEZWxldGUoJ2NvbnN1bWVyL2xvZ2luJyk7XHJcbiAgICB9XHJcbiAgICBzZW5kQ29uc3VtZXJPVFAoYm9keTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gJ2NvbnN1bWVyL29hdXRoL2lkZW50aWZ5JztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUG9zdCh1cmwsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgdmVyaWZ5Q29uc3VtZXJPVFAob3RwOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSAnY29uc3VtZXIvb2F1dGgvb3RwLycgKyBvdHAgKyAnL3ZlcmlmeSc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZU1ldGEuaHR0cFBvc3QodXJsKTtcclxuICAgIH1cclxuICAgIHZlcmlmeU5ld1Bob25lT1RQKG90cDogc3RyaW5nLCBib2R5OiBhbnksIG9yaWdpbj86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBvcmlnaW4gKyAnL2xvZ2luLycgKyBvdHAgKyAnL3ZlcmlmeUxvZ2luJztcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTWV0YS5odHRwUHV0KHBhdGgsIGJvZHkpO1xyXG4gICAgfVxyXG4gICAgdmVyaWZ5TmV3UGhvbmUocGhvbmVudW1iZXI6IHN0cmluZywgb3JpZ2luPzogc3RyaW5nLCBjb3VudHJ5Q29kZT86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBvcmlnaW4gKyAnL2xvZ2luL3ZlcmlmeUxvZ2luLycgKyBwaG9uZW51bWJlciArICc/Y291bnRyeUNvZGU9JyArIGNvdW50cnlDb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQb3N0KHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3ZpZGVyQ29uc3VtZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZU1ldGEuaHR0cEdldCgnc3Bjb25zdW1lcicpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUbyBjaGVjayB3aGV0aGVyIHVzZXIgbG9nZ2VkIGluIG9yIG5vdFxyXG4gICAgICogQHJldHVybnMgdHJ1ZS9mYWxzZVxyXG4gICAgICovXHJcbiAgICBnb1Rocm91Z2hMb2dpbigpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3ludy1jcmVkZW50aWFscycpKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgc2hhcmVPVFBmb3JGb3JtKHV1aWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9jb25zZW50Zm9ybS9zZW5kT3RwLycgKyB1dWlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VNZXRhLmh0dHBQdXQodXJsKTtcclxuICAgIH1cclxuICAgIHZlcmlmeU9UUGZvckZvcm0ob3RwOiBzdHJpbmcsIHV1aWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9ICdjb25zdW1lci9jb25zZW50Zm9ybS92ZXJpZnlPdHAvJyArIG90cCArICcvJyArIHV1aWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZU1ldGEuaHR0cFBhdGNoKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2dnZWRJbigpIHtcclxuICAgICAgICBpZiAodGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3ludy1jcmVkZW50aWFscycpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|