@posiwise/common-services 0.1.79 → 0.1.81
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/index.mjs +2 -1
- package/esm2022/lib/permission.service.mjs +9 -9
- package/esm2022/lib/seo.service.mjs +43 -0
- package/fesm2022/posiwise-common-services.mjs +49 -9
- package/fesm2022/posiwise-common-services.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/seo.service.d.ts +16 -0
- package/package.json +1 -1
package/esm2022/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ export * from './lib/google-analytics.service';
|
|
|
5
5
|
export * from './lib/script-loader.service';
|
|
6
6
|
export * from './lib/base-http.service';
|
|
7
7
|
export * from './lib/common-services.module';
|
|
8
|
+
export * from './lib/seo.service';
|
|
8
9
|
export * from './lib/main-api-http.service';
|
|
9
10
|
export * from './lib/permission.service';
|
|
10
11
|
export * from './lib/toast.service';
|
|
@@ -43,4 +44,4 @@ export * from './lib/logo-caching.service';
|
|
|
43
44
|
export * from './lib/hopscotch.service';
|
|
44
45
|
export * from './lib/brain.service';
|
|
45
46
|
export * from './lib/brain-api-http.service';
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBwdy1zZXJ2aWNlc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9nb29nbGUtYW5hbHl0aWNzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2NyaXB0LWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jhc2UtaHR0cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbW1vbi1zZXJ2aWNlcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Blcm1pc3Npb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjdXJlLXRva2VuLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlZ3JhdGlvbnMtYXBpLWh0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saW5rLWxvYWRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdXN0b20tcHJlbG9hZGluZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FiLXRlc3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nZW8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9maWxlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvZHVjdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3JtLWhlbHBlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Fob3kuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21tb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLWZvcm1hdHRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaW1lTmdIZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFnLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGlwcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpbmRvdy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dyb3VwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcXVhbGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rhc2hib2FyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21haWxib3guc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zb2NrZXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZmZlY3RzL3VzZXIuZWZmZWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbnVtYmVyLXBpY2tlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbnRyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvZ28tY2FjaGluZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvcHNjb3RjaC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyYWluLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJhaW4tYXBpLWh0dHAuc2VydmljZSc7XG4iXX0=
|
|
@@ -194,7 +194,7 @@ export class PermissionService {
|
|
|
194
194
|
isUserSubscriptionOwner(product) {
|
|
195
195
|
product ??= this.getCurrentProduct();
|
|
196
196
|
const subscriptionSlug = product?.subscription_slug;
|
|
197
|
-
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
197
|
+
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`];
|
|
198
198
|
}
|
|
199
199
|
/**
|
|
200
200
|
* Any Product Admin regardless of the product being master product or not.
|
|
@@ -204,8 +204,8 @@ export class PermissionService {
|
|
|
204
204
|
isUserSubscriptionAdmin(product) {
|
|
205
205
|
product ??= this.getCurrentProduct();
|
|
206
206
|
const subscriptionSlug = product?.subscription_slug;
|
|
207
|
-
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
208
|
-
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
207
|
+
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionAdmin`] ||
|
|
208
|
+
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`]);
|
|
209
209
|
}
|
|
210
210
|
/**
|
|
211
211
|
* Any Product Admin of the product being the master product
|
|
@@ -213,12 +213,12 @@ export class PermissionService {
|
|
|
213
213
|
isUserSubscriptionSuperAdmin(product) {
|
|
214
214
|
product ??= this.getCurrentProduct();
|
|
215
215
|
const subscriptionSlug = product?.subscription_slug;
|
|
216
|
-
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
217
|
-
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
216
|
+
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`] ||
|
|
217
|
+
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`]);
|
|
218
218
|
}
|
|
219
219
|
isUserMasterSubscriptionSuperAdmin(product) {
|
|
220
220
|
product ??= this.getCurrentProduct();
|
|
221
|
-
return !!this.user.auth.granted[`Pages.Product.${product?.permission_key}.${product
|
|
221
|
+
return !!this.user.auth.granted[`Pages.Product.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`];
|
|
222
222
|
}
|
|
223
223
|
/**
|
|
224
224
|
* Any Product Admin of the product being the master product
|
|
@@ -226,13 +226,13 @@ export class PermissionService {
|
|
|
226
226
|
isUserSubscriptionSuperOwner(product) {
|
|
227
227
|
product ??= this.getCurrentProduct();
|
|
228
228
|
const subscriptionSlug = product?.subscription_slug;
|
|
229
|
-
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
229
|
+
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`];
|
|
230
230
|
}
|
|
231
231
|
setCurrentProduct(product) {
|
|
232
232
|
localStorage.setItem('product', JSON.stringify({
|
|
233
233
|
id: product.id,
|
|
234
234
|
permission_key: product?.permission_key,
|
|
235
|
-
feature_key: product
|
|
235
|
+
feature_key: product?.feature_key,
|
|
236
236
|
subscriptionId: product.subscriptionId,
|
|
237
237
|
subscription_slug: product.subscription_slug
|
|
238
238
|
}));
|
|
@@ -249,4 +249,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
249
249
|
providedIn: 'root'
|
|
250
250
|
}]
|
|
251
251
|
}], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wZXJtaXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RixPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUs3RCxNQUFNLE9BQU8saUJBQWlCO0lBUzFCLFlBQTZCLEdBQXVCO1FBQXZCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBRnBELFNBQUksR0FBUyxJQUFJLENBQUM7SUFFcUMsQ0FBQztJQUV4RCxzQkFBc0IsQ0FBQyxZQUFZO1FBQy9CLGlCQUFpQixDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUNMLGNBQXNCLEVBQ3RCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFdBQVcsR0FBRyxJQUFJO1FBRWxCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUV0QixzQ0FBc0M7WUFDdEMseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZ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QUFXO1lBQ2hDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1NBQy9DLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBM1RRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7NEZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQURNSU5fU1VCX01FTlVfV0hJVEVMSVNULCBQRVJNSVNTSU9OX05BTUVTLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IHBpY2tCeSBmcm9tICdsb2Rhc2gvcGlja0J5JztcblxuaW1wb3J0IHsgTWFpbkFwaUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9tYWluLWFwaS1odHRwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0YXRpYyBzZWxlY3RlZFByb2R1Y3Q6IGFueTsgLy8gTk9TT05BUlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgc2VsZWN0ZWRTdWJzY3JpcHRpb246IGFueTsgLy8gTk9TT05BUlxuXG4gICAgdXNlcjogVXNlciA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgc2V0Q3VycmVudFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaXNHcmFudGVkKFxuICAgICAgICBwZXJtaXNzaW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBwcm9kdWN0S2V5ID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXkgPSBudWxsLFxuICAgICAgICBwcm9kdWN0U2x1ZyA9IG51bGxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBZG1pbiBoYXZlIGFjY2VzcyB0byBhbGwgdGhlIG1lbnVzLlxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuU3VwZXJBZG1pblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSB0aGlzLmdldEZvcm1hdHRlZFBlcm1pc3Npb25OYW1lKHBlcm1pc3Npb25OYW1lLCBwcm9kdWN0U2x1Zyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybmluZyB0cnVlIGlmIHVzZXIgaGFzIGEgZ2l2ZW4gcGVybWlzc2lvblxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuUm9sZS5DbG91ZE9saXZlLlNhbGVzTWFuYWdlclxuICAgICAgICAgICAgLy8gb3IgUGFnZXMuQmV0YSBvciBQYWdlcy5BbHBoYVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWU/LmluY2x1ZGVzKCd8fCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwZXJtaXNzaW9uTmFtZS5zcGxpdCgnfHwnKS5tYXAocCA9PiBwLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHMsIHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwZXJtaXNzaW9uTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHRoaXMuaGFuZGxlUHJvZHVjdEtleShcbiAgICAgICAgICAgICAgICBwcm9kdWN0S2V5LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbl9rZXksXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZFBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGVybWlzc2lvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vIHZhbGlkIHBlcm1pc3Npb24gd2FzIGRldGVjdGVkIGZvciB0aGlzIHVzZXJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1c2VyIG5vdCBsb2dnZWQtaW5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHM6IHN0cmluZ1tdLCB1c2VyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwYXJ0cy5zb21lKHBhcnQgPT4gdXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwYXJ0XSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUHJvZHVjdEtleShwcm9kdWN0S2V5LCB1c2VyLCBwZXJtaXNzaW9uX2tleSwgcGVybWlzc2lvbk5hbWUpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RLZXkpIHtcbiAgICAgICAgICAgIC8vIGZpbHRlcnMgdGhlIHBlcm1pc3Npb24gb25seSBmb3IgdGhlIHNlbGVjdGVkIHByb2R1Y3QuXG4gICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHBpY2tCeShjbG9uZURlZXAodXNlclsnYXV0aCddWydncmFudGVkJ10pLCAoX3ZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmluY2x1ZGVzKHByb2R1Y3RLZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBhZGQgUGFnZXMuUHJvZHVjdC57cGVybWlzc2lvbl9rZXl9XG4gICAgICAgICAgICBmaWx0ZXJlZFBlcm1pc3Npb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnsgW2BQYWdlcy5Qcm9kdWN0LiR7cGVybWlzc2lvbl9rZXl9YF06IHRydWUgfSxcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJlZFBlcm1pc3Npb25zXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBFLmcuLCBQYWdlcy5Qcm9kdWN0LkNsb3VkT2xpdmUuQ2xvdWRPbGl2ZV9Nc3BLZXlcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFBlcm1pc3Npb25zW3Blcm1pc3Npb25OYW1lXSA/PyBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUGVybWlzc2lvbk5hbWUocGVybWlzc2lvbk5hbWU6IHN0cmluZywgcHJvZHVjdFNsdWc6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3QgPSBQZXJtaXNzaW9uU2VydmljZT8uc2VsZWN0ZWRQcm9kdWN0ID8/IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHNlbGVjdGVkUHJvZHVjdD8uc3Vic2NyaXB0aW9uX3NsdWc7XG5cbiAgICAgICAgbGV0IHNsdWdUb0NoZWNrOiBzdHJpbmc7XG4gICAgICAgIGlmICghcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoJ1BhZ2VzLlJvbGUuJykpIHtcbiAgICAgICAgICAgICAgICBzbHVnVG9DaGVjayA9IGBQYWdlcy5Sb2xlLiR7c3Vic2NyaXB0aW9uU2x1Z30uYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gcHJvZHVjdFNsdWc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBlcm1pc3Npb25OYW1lLmluY2x1ZGVzKHNsdWdUb0NoZWNrKSAmJiBwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSBwZXJtaXNzaW9uTmFtZS5yZXBsYWNlKCdQYWdlcy5Qcm9kdWN0LicsIHNsdWdUb0NoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUm9sZS4nKSAmJiAhcGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoc2x1Z1RvQ2hlY2spKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9uTmFtZSA9IHBlcm1pc3Npb25OYW1lLnJlcGxhY2UoJ1BhZ2VzLlJvbGUuJywgc2x1Z1RvQ2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25OYW1lO1xuICAgIH1cblxuICAgIGdldFBlcm1pc3Npb25UcmVlRGF0YUJ5Um9sZShkYXRhKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGRhdGEuYWxsLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5pZCwgLy8gcGVybWlzc2lvbklkOiBVc2VkIHRvIHVwZGF0ZSB0aGUgcGVybWlzc2lvbnMgb24gY2hhbmdlXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZWxlbWVudC5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZ3JhbnRlZFBlcm1pc3Npb25OYW1lczogT2JqZWN0LmtleXMoZGF0YS5ncmFudGVkKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGV2YWx1YXRlUGVybWlzc2lvbnMoXG4gICAgICAgIHBlcm1pc3Npb246IHN0cmluZyxcbiAgICAgICAgcHJvZHVjdEtleTogc3RyaW5nID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXk6IHN0cmluZyA9IG51bGwsXG4gICAgICAgIHByb2R1Y3RTbHVnOiBzdHJpbmcgPSBudWxsXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4cHIgPSAnJztcblxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdXBlckFkbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25BZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uT3duZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1cGVyQWRtaW4oKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25TdXBlck93bmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKCkgfHwgdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIEFETUlOX1NVQl9NRU5VX1dISVRFTElTVC5zb21lKHYgPT4gcGVybWlzc2lvbi5pbmNsdWRlcyh2KSkgJiZcbiAgICAgICAgICAgICh0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSB0aGlzLmhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhcbiAgICAgICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgcHJvZHVjdEtleSxcbiAgICAgICAgICAgIHBlcm1pc3Npb25fa2V5LFxuICAgICAgICAgICAgcHJvZHVjdFNsdWdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBOb3cgZXhwciBpcyBtYWRlIG9mIHRydWUvZmFsc2UgdmFsdWVzIHdpdGggJiYsIHx8LCAoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICAgICAgICByZXR1cm4gZXZhbChleHByKTsgLy8gTk9TT05BUlxuICAgIH1cblxuICAgIGhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhwZXJtaXNzaW9uLCBleHByLCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwZXJtaXNzaW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb24uc3BsaXQoJyAnKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IHgudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFsnfHwnLCAnJiYnLCAnKCcsICcpJ10uaW5jbHVkZXMocmF3KSkge1xuICAgICAgICAgICAgICAgICAgICBleHByICs9IGAgJHtyYXd9IGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV2YWx1YXRlZDogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbkFkbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbk93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPSB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyT3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZHVjdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIGl0J3MgUGFnZXMuUHJvZHVjdCBvciBQYWdlcy5Sb2xlIHdpdGggcHJvZHVjdEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3LCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHIgKz0gYCAke2V2YWx1YXRlZH0gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBnZXRQZXJtaXNzaW9uQnlSb2xlKHJvbGVJZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC9hZG1pbi9yb2xlX3Blcm1pc3Npb25zLyR7cm9sZUlkfWApO1xuICAgIH1cblxuICAgIHNhdmVVc2VyUGVybWlzc2lvbihwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvYWRtaW4vcm9sZV9wZXJtaXNzaW9uc2AsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRldGVybWluZSB1c2VyIGlzIHN1cGVyX2FkbWluIHVzaW5nIHVzZXIuYXV0aC5ncmFudGVkWydQYWdlcy5TdXBlckFkbWluJ11cbiAgICAgKi9cbiAgICBpc1N1cGVyQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbJ1BhZ2VzLlN1cGVyQWRtaW4nXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW55IFByb2R1Y3QgQWRtaW4gcmVnYXJkbGVzcyBvZiB0aGUgcHJvZHVjdCBiZWluZyBtYXN0ZXIgcHJvZHVjdCBvciBub3QuXG4gICAgICovXG4gICAgcHVibGljIGlzVXNlclN1YnNjcmlwdGlvbk93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3QuZmVhdHVyZV9rZXl9LlN1YnNjcmlwdGlvbk93bmVyYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFueSBQcm9kdWN0IEFkbWluIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb2R1Y3QgYmVpbmcgbWFzdGVyIHByb2R1Y3Qgb3Igbm90LlxuICAgICAqICpyYmFjQWxsb3c9XCJTdWJzY3JpcHRpb25BZG1pblwiXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4ocHJvZHVjdD8pOiBib29sZWFuIHtcbiAgICAgICAgcHJvZHVjdCA/Pz0gdGhpcy5nZXRDdXJyZW50UHJvZHVjdCgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25TbHVnID0gcHJvZHVjdD8uc3Vic2NyaXB0aW9uX3NsdWc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbXG4gICAgICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3QuZmVhdHVyZV9rZXl9LlN1YnNjcmlwdGlvbkFkbWluYFxuICAgICAgICAgICAgXSB8fFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25Pd25lcmBcbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnkgUHJvZHVjdCBBZG1pbiBvZiB0aGUgcHJvZHVjdCBiZWluZyB0aGUgbWFzdGVyIHByb2R1Y3RcbiAgICAgKi9cbiAgICBpc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlckFkbWluYFxuICAgICAgICAgICAgXSB8fFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlck93bmVyYFxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzVXNlck1hc3RlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4ocHJvZHVjdD8pOiBib29sZWFuIHtcbiAgICAgICAgcHJvZHVjdCA/Pz0gdGhpcy5nZXRDdXJyZW50UHJvZHVjdCgpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlckFkbWluYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFueSBQcm9kdWN0IEFkbWluIG9mIHRoZSBwcm9kdWN0IGJlaW5nIHRoZSBtYXN0ZXIgcHJvZHVjdFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3QuZmVhdHVyZV9rZXl9LlN1YnNjcmlwdGlvblN1cGVyT3duZXJgXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFByb2R1Y3QocHJvZHVjdCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICdwcm9kdWN0JyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBpZDogcHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uX2tleTogcHJvZHVjdD8ucGVybWlzc2lvbl9rZXksXG4gICAgICAgICAgICAgICAgZmVhdHVyZV9rZXk6IHByb2R1Y3QuZmVhdHVyZV9rZXksXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHByb2R1Y3Quc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX3NsdWc6IHByb2R1Y3Quc3Vic2NyaXB0aW9uX3NsdWdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRQcm9kdWN0KCkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJvZHVjdCcpKTtcbiAgICB9XG59XG4iXX0=
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wZXJtaXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RixPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUs3RCxNQUFNLE9BQU8saUJBQWlCO0lBUzFCLFlBQTZCLEdBQXVCO1FBQXZCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBRnBELFNBQUksR0FBUyxJQUFJLENBQUM7SUFFcUMsQ0FBQztJQUV4RCxzQkFBc0IsQ0FBQyxZQUFZO1FBQy9CLGlCQUFpQixDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUNMLGNBQXNCLEVBQ3RCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFdBQVcsR0FBRyxJQUFJO1FBRWxCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUV0QixzQ0FBc0M7WUFDdEMseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZ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QUFXO1lBQ2pDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1NBQy9DLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBM1RRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7NEZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQURNSU5fU1VCX01FTlVfV0hJVEVMSVNULCBQRVJNSVNTSU9OX05BTUVTLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IHBpY2tCeSBmcm9tICdsb2Rhc2gvcGlja0J5JztcblxuaW1wb3J0IHsgTWFpbkFwaUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9tYWluLWFwaS1odHRwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0YXRpYyBzZWxlY3RlZFByb2R1Y3Q6IGFueTsgLy8gTk9TT05BUlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgc2VsZWN0ZWRTdWJzY3JpcHRpb246IGFueTsgLy8gTk9TT05BUlxuXG4gICAgdXNlcjogVXNlciA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgc2V0Q3VycmVudFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaXNHcmFudGVkKFxuICAgICAgICBwZXJtaXNzaW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBwcm9kdWN0S2V5ID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXkgPSBudWxsLFxuICAgICAgICBwcm9kdWN0U2x1ZyA9IG51bGxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBZG1pbiBoYXZlIGFjY2VzcyB0byBhbGwgdGhlIG1lbnVzLlxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuU3VwZXJBZG1pblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSB0aGlzLmdldEZvcm1hdHRlZFBlcm1pc3Npb25OYW1lKHBlcm1pc3Npb25OYW1lLCBwcm9kdWN0U2x1Zyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybmluZyB0cnVlIGlmIHVzZXIgaGFzIGEgZ2l2ZW4gcGVybWlzc2lvblxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuUm9sZS5DbG91ZE9saXZlLlNhbGVzTWFuYWdlclxuICAgICAgICAgICAgLy8gb3IgUGFnZXMuQmV0YSBvciBQYWdlcy5BbHBoYVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWU/LmluY2x1ZGVzKCd8fCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwZXJtaXNzaW9uTmFtZS5zcGxpdCgnfHwnKS5tYXAocCA9PiBwLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHMsIHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwZXJtaXNzaW9uTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHRoaXMuaGFuZGxlUHJvZHVjdEtleShcbiAgICAgICAgICAgICAgICBwcm9kdWN0S2V5LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbl9rZXksXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZFBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGVybWlzc2lvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vIHZhbGlkIHBlcm1pc3Npb24gd2FzIGRldGVjdGVkIGZvciB0aGlzIHVzZXJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1c2VyIG5vdCBsb2dnZWQtaW5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHM6IHN0cmluZ1tdLCB1c2VyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwYXJ0cy5zb21lKHBhcnQgPT4gdXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwYXJ0XSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUHJvZHVjdEtleShwcm9kdWN0S2V5LCB1c2VyLCBwZXJtaXNzaW9uX2tleSwgcGVybWlzc2lvbk5hbWUpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RLZXkpIHtcbiAgICAgICAgICAgIC8vIGZpbHRlcnMgdGhlIHBlcm1pc3Npb24gb25seSBmb3IgdGhlIHNlbGVjdGVkIHByb2R1Y3QuXG4gICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHBpY2tCeShjbG9uZURlZXAodXNlclsnYXV0aCddWydncmFudGVkJ10pLCAoX3ZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmluY2x1ZGVzKHByb2R1Y3RLZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBhZGQgUGFnZXMuUHJvZHVjdC57cGVybWlzc2lvbl9rZXl9XG4gICAgICAgICAgICBmaWx0ZXJlZFBlcm1pc3Npb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnsgW2BQYWdlcy5Qcm9kdWN0LiR7cGVybWlzc2lvbl9rZXl9YF06IHRydWUgfSxcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJlZFBlcm1pc3Npb25zXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBFLmcuLCBQYWdlcy5Qcm9kdWN0LkNsb3VkT2xpdmUuQ2xvdWRPbGl2ZV9Nc3BLZXlcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFBlcm1pc3Npb25zW3Blcm1pc3Npb25OYW1lXSA/PyBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUGVybWlzc2lvbk5hbWUocGVybWlzc2lvbk5hbWU6IHN0cmluZywgcHJvZHVjdFNsdWc6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3QgPSBQZXJtaXNzaW9uU2VydmljZT8uc2VsZWN0ZWRQcm9kdWN0ID8/IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHNlbGVjdGVkUHJvZHVjdD8uc3Vic2NyaXB0aW9uX3NsdWc7XG5cbiAgICAgICAgbGV0IHNsdWdUb0NoZWNrOiBzdHJpbmc7XG4gICAgICAgIGlmICghcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoJ1BhZ2VzLlJvbGUuJykpIHtcbiAgICAgICAgICAgICAgICBzbHVnVG9DaGVjayA9IGBQYWdlcy5Sb2xlLiR7c3Vic2NyaXB0aW9uU2x1Z30uYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gcHJvZHVjdFNsdWc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBlcm1pc3Npb25OYW1lLmluY2x1ZGVzKHNsdWdUb0NoZWNrKSAmJiBwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSBwZXJtaXNzaW9uTmFtZS5yZXBsYWNlKCdQYWdlcy5Qcm9kdWN0LicsIHNsdWdUb0NoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUm9sZS4nKSAmJiAhcGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoc2x1Z1RvQ2hlY2spKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9uTmFtZSA9IHBlcm1pc3Npb25OYW1lLnJlcGxhY2UoJ1BhZ2VzLlJvbGUuJywgc2x1Z1RvQ2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25OYW1lO1xuICAgIH1cblxuICAgIGdldFBlcm1pc3Npb25UcmVlRGF0YUJ5Um9sZShkYXRhKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGRhdGEuYWxsLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5pZCwgLy8gcGVybWlzc2lvbklkOiBVc2VkIHRvIHVwZGF0ZSB0aGUgcGVybWlzc2lvbnMgb24gY2hhbmdlXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZWxlbWVudC5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZ3JhbnRlZFBlcm1pc3Npb25OYW1lczogT2JqZWN0LmtleXMoZGF0YS5ncmFudGVkKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGV2YWx1YXRlUGVybWlzc2lvbnMoXG4gICAgICAgIHBlcm1pc3Npb246IHN0cmluZyxcbiAgICAgICAgcHJvZHVjdEtleTogc3RyaW5nID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXk6IHN0cmluZyA9IG51bGwsXG4gICAgICAgIHByb2R1Y3RTbHVnOiBzdHJpbmcgPSBudWxsXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4cHIgPSAnJztcblxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdXBlckFkbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25BZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uT3duZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1cGVyQWRtaW4oKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25TdXBlck93bmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKCkgfHwgdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIEFETUlOX1NVQl9NRU5VX1dISVRFTElTVC5zb21lKHYgPT4gcGVybWlzc2lvbi5pbmNsdWRlcyh2KSkgJiZcbiAgICAgICAgICAgICh0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSB0aGlzLmhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhcbiAgICAgICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgcHJvZHVjdEtleSxcbiAgICAgICAgICAgIHBlcm1pc3Npb25fa2V5LFxuICAgICAgICAgICAgcHJvZHVjdFNsdWdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBOb3cgZXhwciBpcyBtYWRlIG9mIHRydWUvZmFsc2UgdmFsdWVzIHdpdGggJiYsIHx8LCAoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICAgICAgICByZXR1cm4gZXZhbChleHByKTsgLy8gTk9TT05BUlxuICAgIH1cblxuICAgIGhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhwZXJtaXNzaW9uLCBleHByLCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwZXJtaXNzaW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb24uc3BsaXQoJyAnKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IHgudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFsnfHwnLCAnJiYnLCAnKCcsICcpJ10uaW5jbHVkZXMocmF3KSkge1xuICAgICAgICAgICAgICAgICAgICBleHByICs9IGAgJHtyYXd9IGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV2YWx1YXRlZDogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbkFkbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbk93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPSB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyT3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZHVjdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIGl0J3MgUGFnZXMuUHJvZHVjdCBvciBQYWdlcy5Sb2xlIHdpdGggcHJvZHVjdEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3LCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHIgKz0gYCAke2V2YWx1YXRlZH0gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBnZXRQZXJtaXNzaW9uQnlSb2xlKHJvbGVJZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC9hZG1pbi9yb2xlX3Blcm1pc3Npb25zLyR7cm9sZUlkfWApO1xuICAgIH1cblxuICAgIHNhdmVVc2VyUGVybWlzc2lvbihwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvYWRtaW4vcm9sZV9wZXJtaXNzaW9uc2AsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRldGVybWluZSB1c2VyIGlzIHN1cGVyX2FkbWluIHVzaW5nIHVzZXIuYXV0aC5ncmFudGVkWydQYWdlcy5TdXBlckFkbWluJ11cbiAgICAgKi9cbiAgICBpc1N1cGVyQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbJ1BhZ2VzLlN1cGVyQWRtaW4nXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW55IFByb2R1Y3QgQWRtaW4gcmVnYXJkbGVzcyBvZiB0aGUgcHJvZHVjdCBiZWluZyBtYXN0ZXIgcHJvZHVjdCBvciBub3QuXG4gICAgICovXG4gICAgcHVibGljIGlzVXNlclN1YnNjcmlwdGlvbk93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25Pd25lcmBcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnkgUHJvZHVjdCBBZG1pbiByZWdhcmRsZXNzIG9mIHRoZSBwcm9kdWN0IGJlaW5nIG1hc3RlciBwcm9kdWN0IG9yIG5vdC5cbiAgICAgKiAqcmJhY0FsbG93PVwiU3Vic2NyaXB0aW9uQWRtaW5cIlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIGlzVXNlclN1YnNjcmlwdGlvbkFkbWluKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0Py5mZWF0dXJlX2tleX0uU3Vic2NyaXB0aW9uQWRtaW5gXG4gICAgICAgICAgICBdIHx8XG4gICAgICAgICAgICAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbXG4gICAgICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25Pd25lcmBcbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnkgUHJvZHVjdCBBZG1pbiBvZiB0aGUgcHJvZHVjdCBiZWluZyB0aGUgbWFzdGVyIHByb2R1Y3RcbiAgICAgKi9cbiAgICBpc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0Py5mZWF0dXJlX2tleX0uU3Vic2NyaXB0aW9uU3VwZXJBZG1pbmBcbiAgICAgICAgICAgIF0gfHxcbiAgICAgICAgICAgICEhdGhpcy51c2VyLmF1dGguZ3JhbnRlZFtcbiAgICAgICAgICAgICAgICBgUGFnZXMuUHJvZHVjdC4ke3N1YnNjcmlwdGlvblNsdWd9LiR7cHJvZHVjdD8ucGVybWlzc2lvbl9rZXl9LiR7cHJvZHVjdD8uZmVhdHVyZV9rZXl9LlN1YnNjcmlwdGlvblN1cGVyT3duZXJgXG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNVc2VyTWFzdGVyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbihwcm9kdWN0Pyk6IGJvb2xlYW4ge1xuICAgICAgICBwcm9kdWN0ID8/PSB0aGlzLmdldEN1cnJlbnRQcm9kdWN0KCk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbXG4gICAgICAgICAgICBgUGFnZXMuUHJvZHVjdC4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlckFkbWluYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFueSBQcm9kdWN0IEFkbWluIG9mIHRoZSBwcm9kdWN0IGJlaW5nIHRoZSBtYXN0ZXIgcHJvZHVjdFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlck93bmVyYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRQcm9kdWN0KHByb2R1Y3QpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAncHJvZHVjdCcsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgaWQ6IHByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbl9rZXk6IHByb2R1Y3Q/LnBlcm1pc3Npb25fa2V5LFxuICAgICAgICAgICAgICAgIGZlYXR1cmVfa2V5OiBwcm9kdWN0Py5mZWF0dXJlX2tleSxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogcHJvZHVjdC5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25fc2x1ZzogcHJvZHVjdC5zdWJzY3JpcHRpb25fc2x1Z1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFByb2R1Y3QoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9kdWN0JykpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Meta, Title } from '@angular/platform-browser';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/platform-browser";
|
|
5
|
+
export class SeoService {
|
|
6
|
+
constructor(meta, titleService) {
|
|
7
|
+
this.meta = meta;
|
|
8
|
+
this.titleService = titleService;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Set SEO metadata for a page
|
|
12
|
+
* @param title - Page title
|
|
13
|
+
* @param description - Meta description
|
|
14
|
+
* @param keywords - Meta keywords (optional)
|
|
15
|
+
*/
|
|
16
|
+
setSEO(title, description, keywords) {
|
|
17
|
+
// Set page title
|
|
18
|
+
this.titleService.setTitle(title);
|
|
19
|
+
// Set meta description
|
|
20
|
+
this.meta.updateTag({ name: 'description', content: description });
|
|
21
|
+
// Set keywords if provided
|
|
22
|
+
if (keywords) {
|
|
23
|
+
this.meta.updateTag({ name: 'keywords', content: keywords });
|
|
24
|
+
}
|
|
25
|
+
// Set Open Graph tags
|
|
26
|
+
this.meta.updateTag({ property: 'og:title', content: title });
|
|
27
|
+
this.meta.updateTag({ property: 'og:description', content: description });
|
|
28
|
+
this.meta.updateTag({ property: 'og:type', content: 'website' });
|
|
29
|
+
// Set Twitter Card tags
|
|
30
|
+
this.meta.updateTag({ name: 'twitter:title', content: title });
|
|
31
|
+
this.meta.updateTag({ name: 'twitter:description', content: description });
|
|
32
|
+
this.meta.updateTag({ name: 'twitter:card', content: 'summary' });
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, deps: [{ token: i1.Meta }, { token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
35
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, providedIn: 'root' }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, decorators: [{
|
|
38
|
+
type: Injectable,
|
|
39
|
+
args: [{
|
|
40
|
+
providedIn: 'root'
|
|
41
|
+
}]
|
|
42
|
+
}], ctorParameters: () => [{ type: i1.Meta }, { type: i1.Title }] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3Nlby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBS3hELE1BQU0sT0FBTyxVQUFVO0lBQ25CLFlBQ3FCLElBQVUsRUFDVixZQUFtQjtRQURuQixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1YsaUJBQVksR0FBWixZQUFZLENBQU87SUFDckMsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQWEsRUFBRSxXQUFtQixFQUFFLFFBQWlCO1FBQ3hELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLDJCQUEyQjtRQUMzQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVqRSx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDOytHQWpDUSxVQUFVO21IQUFWLFVBQVUsY0FGUCxNQUFNOzs0RkFFVCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VvU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWV0YTogTWV0YSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVNlcnZpY2U6IFRpdGxlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogU2V0IFNFTyBtZXRhZGF0YSBmb3IgYSBwYWdlXG4gICAgICogQHBhcmFtIHRpdGxlIC0gUGFnZSB0aXRsZVxuICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIE1ldGEgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0ga2V5d29yZHMgLSBNZXRhIGtleXdvcmRzIChvcHRpb25hbClcbiAgICAgKi9cbiAgICBzZXRTRU8odGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywga2V5d29yZHM/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IHBhZ2UgdGl0bGVcbiAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuXG4gICAgICAgIC8vIFNldCBtZXRhIGRlc2NyaXB0aW9uXG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lOiAnZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjcmlwdGlvbiB9KTtcblxuICAgICAgICAvLyBTZXQga2V5d29yZHMgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKGtleXdvcmRzKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgbmFtZTogJ2tleXdvcmRzJywgY29udGVudDoga2V5d29yZHMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgT3BlbiBHcmFwaCB0YWdzXG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogdGl0bGUgfSk7XG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnR5cGUnLCBjb250ZW50OiAnd2Vic2l0ZScgfSk7XG5cbiAgICAgICAgLy8gU2V0IFR3aXR0ZXIgQ2FyZCB0YWdzXG4gICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lOiAndHdpdHRlcjp0aXRsZScsIGNvbnRlbnQ6IHRpdGxlIH0pO1xuICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgbmFtZTogJ3R3aXR0ZXI6ZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgdGhpcy5tZXRhLnVwZGF0ZVRhZyh7IG5hbWU6ICd0d2l0dGVyOmNhcmQnLCBjb250ZW50OiAnc3VtbWFyeScgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -18,6 +18,7 @@ import * as i2 from '@ngrx/store';
|
|
|
18
18
|
import { StoreModule } from '@ngrx/store';
|
|
19
19
|
import { INTEGRATIONS_API_PREFIX, MAIN_API_PREFIX, USER_PATH, TOKEN_HEADER_KEY, NEWSLETTER_CONFIRMATION_PATH, NEWSLETTER_UNSUBSCRIBE_PATH, CAPTCHA_VALIDATION_PATH, SOCIAL_LOGIN_PATH, TOKEN_KEY, PERMISSION_NAMES, ADMIN_SUB_MENU_WHITELIST, AB_TEST_ACTIONS, GEO_PATH, PROJECT_PATH, PRODUCT_PATH, CONTACT_US_PATH, INCIDENTS_PATH, INCIDENTS_PATH_ADMIN, NEWSLETTERS_PATH, NEWSLETTER_SUBSCRIPTION_PATH, ADMIN_FAQS_PATH, FAQS_PATH, ORGANIZATIONS_PATH, GLOBAL_SUBSCRIPTION_CONFIGS_PATH, GLOBAL_CONFIGS_PATH, USER_LOGIN_NOTIFICATION, FEEDBACK_QUESTIONS_PATH, USER_FEEDBACKS_PATH, CUSTOMER_SUPPORT_PATH, ADMIN_TAG_PATH, ADMIN_TAG_CATEGORIES_PATH, ADMIN_PATH, QUALIFICATIONS_PATH, SOCKET_TYPE, BRAIN_API_PREFIX } from '@posiwise/common-utilities';
|
|
20
20
|
import swal from 'sweetalert2';
|
|
21
|
+
import * as i1$4 from '@angular/platform-browser';
|
|
21
22
|
import cloneDeep from 'lodash/cloneDeep';
|
|
22
23
|
import pickBy from 'lodash/pickBy';
|
|
23
24
|
import * as i2$1 from 'ngx-cookie';
|
|
@@ -1150,6 +1151,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
1150
1151
|
}]
|
|
1151
1152
|
}] });
|
|
1152
1153
|
|
|
1154
|
+
class SeoService {
|
|
1155
|
+
constructor(meta, titleService) {
|
|
1156
|
+
this.meta = meta;
|
|
1157
|
+
this.titleService = titleService;
|
|
1158
|
+
}
|
|
1159
|
+
/**
|
|
1160
|
+
* Set SEO metadata for a page
|
|
1161
|
+
* @param title - Page title
|
|
1162
|
+
* @param description - Meta description
|
|
1163
|
+
* @param keywords - Meta keywords (optional)
|
|
1164
|
+
*/
|
|
1165
|
+
setSEO(title, description, keywords) {
|
|
1166
|
+
// Set page title
|
|
1167
|
+
this.titleService.setTitle(title);
|
|
1168
|
+
// Set meta description
|
|
1169
|
+
this.meta.updateTag({ name: 'description', content: description });
|
|
1170
|
+
// Set keywords if provided
|
|
1171
|
+
if (keywords) {
|
|
1172
|
+
this.meta.updateTag({ name: 'keywords', content: keywords });
|
|
1173
|
+
}
|
|
1174
|
+
// Set Open Graph tags
|
|
1175
|
+
this.meta.updateTag({ property: 'og:title', content: title });
|
|
1176
|
+
this.meta.updateTag({ property: 'og:description', content: description });
|
|
1177
|
+
this.meta.updateTag({ property: 'og:type', content: 'website' });
|
|
1178
|
+
// Set Twitter Card tags
|
|
1179
|
+
this.meta.updateTag({ name: 'twitter:title', content: title });
|
|
1180
|
+
this.meta.updateTag({ name: 'twitter:description', content: description });
|
|
1181
|
+
this.meta.updateTag({ name: 'twitter:card', content: 'summary' });
|
|
1182
|
+
}
|
|
1183
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, deps: [{ token: i1$4.Meta }, { token: i1$4.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1184
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, providedIn: 'root' }); }
|
|
1185
|
+
}
|
|
1186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SeoService, decorators: [{
|
|
1187
|
+
type: Injectable,
|
|
1188
|
+
args: [{
|
|
1189
|
+
providedIn: 'root'
|
|
1190
|
+
}]
|
|
1191
|
+
}], ctorParameters: () => [{ type: i1$4.Meta }, { type: i1$4.Title }] });
|
|
1192
|
+
|
|
1153
1193
|
class PermissionService {
|
|
1154
1194
|
constructor(api) {
|
|
1155
1195
|
this.api = api;
|
|
@@ -1339,7 +1379,7 @@ class PermissionService {
|
|
|
1339
1379
|
isUserSubscriptionOwner(product) {
|
|
1340
1380
|
product ??= this.getCurrentProduct();
|
|
1341
1381
|
const subscriptionSlug = product?.subscription_slug;
|
|
1342
|
-
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1382
|
+
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`];
|
|
1343
1383
|
}
|
|
1344
1384
|
/**
|
|
1345
1385
|
* Any Product Admin regardless of the product being master product or not.
|
|
@@ -1349,8 +1389,8 @@ class PermissionService {
|
|
|
1349
1389
|
isUserSubscriptionAdmin(product) {
|
|
1350
1390
|
product ??= this.getCurrentProduct();
|
|
1351
1391
|
const subscriptionSlug = product?.subscription_slug;
|
|
1352
|
-
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1353
|
-
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1392
|
+
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionAdmin`] ||
|
|
1393
|
+
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`]);
|
|
1354
1394
|
}
|
|
1355
1395
|
/**
|
|
1356
1396
|
* Any Product Admin of the product being the master product
|
|
@@ -1358,12 +1398,12 @@ class PermissionService {
|
|
|
1358
1398
|
isUserSubscriptionSuperAdmin(product) {
|
|
1359
1399
|
product ??= this.getCurrentProduct();
|
|
1360
1400
|
const subscriptionSlug = product?.subscription_slug;
|
|
1361
|
-
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1362
|
-
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1401
|
+
return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`] ||
|
|
1402
|
+
!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`]);
|
|
1363
1403
|
}
|
|
1364
1404
|
isUserMasterSubscriptionSuperAdmin(product) {
|
|
1365
1405
|
product ??= this.getCurrentProduct();
|
|
1366
|
-
return !!this.user.auth.granted[`Pages.Product.${product?.permission_key}.${product
|
|
1406
|
+
return !!this.user.auth.granted[`Pages.Product.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`];
|
|
1367
1407
|
}
|
|
1368
1408
|
/**
|
|
1369
1409
|
* Any Product Admin of the product being the master product
|
|
@@ -1371,13 +1411,13 @@ class PermissionService {
|
|
|
1371
1411
|
isUserSubscriptionSuperOwner(product) {
|
|
1372
1412
|
product ??= this.getCurrentProduct();
|
|
1373
1413
|
const subscriptionSlug = product?.subscription_slug;
|
|
1374
|
-
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product
|
|
1414
|
+
return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`];
|
|
1375
1415
|
}
|
|
1376
1416
|
setCurrentProduct(product) {
|
|
1377
1417
|
localStorage.setItem('product', JSON.stringify({
|
|
1378
1418
|
id: product.id,
|
|
1379
1419
|
permission_key: product?.permission_key,
|
|
1380
|
-
feature_key: product
|
|
1420
|
+
feature_key: product?.feature_key,
|
|
1381
1421
|
subscriptionId: product.subscriptionId,
|
|
1382
1422
|
subscription_slug: product.subscription_slug
|
|
1383
1423
|
}));
|
|
@@ -3186,5 +3226,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
3186
3226
|
* Generated bundle index. Do not edit.
|
|
3187
3227
|
*/
|
|
3188
3228
|
|
|
3189
|
-
export { AbTestService, AhoyService, AuthService, BaseHttpService, BrainApiHttpService, BrainApiService, CommonService, CommonServicesModule, CustomPreloadingStrategy, CustomToastService, DashboardService, DataService, FormHelperService, GeoService, GoogleAnalyticsService, GroupService, HopscotchService, IntegrationsApiHttpService, LinkService, LocalStorage, LogoCacheService, MailBoxService, MainApiHttpService, NgbDateCustomParserFormatter, NotificationService, NumberPickerService, PermissionService, PrimeNgHelper, ProductService, ProfileService, QualificationService, ScriptLoaderService, SecureTokenStorageService, SentryErrorHandler, SubscriptionService, TagService, TipsService, UserEffects, UserService, ValidationService, WebsocketService, WindowService };
|
|
3229
|
+
export { AbTestService, AhoyService, AuthService, BaseHttpService, BrainApiHttpService, BrainApiService, CommonService, CommonServicesModule, CustomPreloadingStrategy, CustomToastService, DashboardService, DataService, FormHelperService, GeoService, GoogleAnalyticsService, GroupService, HopscotchService, IntegrationsApiHttpService, LinkService, LocalStorage, LogoCacheService, MailBoxService, MainApiHttpService, NgbDateCustomParserFormatter, NotificationService, NumberPickerService, PermissionService, PrimeNgHelper, ProductService, ProfileService, QualificationService, ScriptLoaderService, SecureTokenStorageService, SentryErrorHandler, SeoService, SubscriptionService, TagService, TipsService, UserEffects, UserService, ValidationService, WebsocketService, WindowService };
|
|
3190
3230
|
//# sourceMappingURL=posiwise-common-services.mjs.map
|