ng-easycommerce-v18 0.3.21-beta.3 → 0.3.22-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/README.md +7 -7
  2. package/esm2022/lib/classes/filters/filter.mjs +27 -2
  3. package/esm2022/lib/constants/api.constants.service.mjs +7 -1
  4. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +5 -3
  5. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +1 -5
  6. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +44 -53
  7. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +32 -23
  8. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +6 -4
  9. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +4 -2
  10. package/esm2022/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.mjs +7 -17
  11. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +4 -2
  12. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +4 -2
  13. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +90 -30
  14. package/esm2022/lib/ec-services/options.service.mjs +27 -3
  15. package/esm2022/lib/ec-services/parameters.service.mjs +41 -1
  16. package/fesm2022/ng-easycommerce-v18.mjs +445 -296
  17. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  18. package/lib/constants/api.constants.service.d.ts +4 -0
  19. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +0 -1
  20. package/lib/ec-services/analytics/gtm.service.d.ts +5 -0
  21. package/lib/ec-services/options.service.d.ts +4 -0
  22. package/lib/ec-services/parameters.service.d.ts +6 -0
  23. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { inject, Injectable } from '@angular/core';
2
2
  import { ApiConstantsService } from '../constants';
3
3
  import { ConnectionService } from '../api';
4
4
  import { BehaviorSubject, catchError, map, of, shareReplay } from 'rxjs';
5
+ import { AnalyticsService } from './analytics';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * Servicio que maneja los parametros de la aplicación.
@@ -15,6 +16,10 @@ export class ParametersService {
15
16
  * Maneja las peticiones a la API
16
17
  */
17
18
  connection = inject(ConnectionService);
19
+ /**
20
+ * Servicio de Analytics
21
+ */
22
+ analyticsService = inject(AnalyticsService);
18
23
  //API URLS
19
24
  /**
20
25
  * Devuelve la URL para obtener todos los parametros.
@@ -36,6 +41,7 @@ export class ParametersService {
36
41
  if (this.parametersSubject.getValue() === null) {
37
42
  this.connection.get(this.getAllParametersAPI()).pipe(shareReplay(1), map((response) => {
38
43
  this.parametersSubject.next(response);
44
+ this.initAnalyticsFromParams(response);
39
45
  return response;
40
46
  }), catchError((error) => {
41
47
  console.log(`Error: ${error}`);
@@ -52,6 +58,40 @@ export class ParametersService {
52
58
  * @returns El objeto con los datos del parámetro encontrado, sino retorna `null`
53
59
  */
54
60
  hasParams(params, code) { return params && params.find((param) => param.code?.toLowerCase().includes(code.toLowerCase())); }
61
+ findAnalyticsParam(params, service) {
62
+ const channel = this.apiConstants.CHANNEL?.toLowerCase() ?? '';
63
+ // Código específico por canal: facebook_nombrecanal_id
64
+ const codeChannel = `${service}_${channel}_id`;
65
+ // Código genérico: facebook_id
66
+ const codeGeneric = `${service}_id`;
67
+ const normalize = (code) => (code || '').toLowerCase();
68
+ let param = params.find(p => normalize(p.code) === codeChannel);
69
+ if (!param) {
70
+ param = params.find(p => normalize(p.code) === codeGeneric);
71
+ }
72
+ return param;
73
+ }
74
+ initAnalyticsFromParams(params) {
75
+ if (!params || !params.length)
76
+ return;
77
+ if (!this.apiConstants.IS_PRODUCTION)
78
+ return;
79
+ const facebook = this.findAnalyticsParam(params, 'facebook');
80
+ const google = this.findAnalyticsParam(params, 'google');
81
+ const gtm = this.findAnalyticsParam(params, 'gtm');
82
+ const metricool = this.findAnalyticsParam(params, 'metricool');
83
+ const doppler = this.findAnalyticsParam(params, 'doppler');
84
+ if (facebook)
85
+ this.analyticsService.initializeFacebook(facebook.value);
86
+ if (google)
87
+ this.analyticsService.initializeGoogle(google.value);
88
+ if (gtm)
89
+ this.analyticsService.initializeGTM(gtm.value);
90
+ if (metricool)
91
+ this.analyticsService.initializeMetricool(metricool.value);
92
+ if (doppler)
93
+ this.analyticsService.initializeDoppler(doppler.value);
94
+ }
55
95
  constructor() { }
56
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ParametersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
57
97
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ParametersService, providedIn: 'root' });
@@ -62,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
62
102
  providedIn: 'root'
63
103
  }]
64
104
  }], ctorParameters: () => [] });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL3BhcmFtZXRlcnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUVyRjs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFDN0I7O09BRUc7SUFDSyxZQUFZLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDbEQ7O09BRUc7SUFDSyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFFOUMsVUFBVTtJQUNWOzs7T0FHRztJQUNLLG1CQUFtQixLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sYUFBYSxDQUFBLENBQUMsQ0FBQztJQUVuSCxhQUFhO0lBQ2I7O09BRUc7SUFDSyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsSUFBSSxDQUFDLENBQUM7SUFDbEUsV0FBVyxHQUFtQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUYsU0FBUztJQUNUOzs7T0FHRztJQUNJLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDZCxHQUFHLENBQUMsQ0FBQyxRQUFxQixFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3JDLE9BQU8sUUFBUSxDQUFBO1lBQ2hCLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FDRixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUN4QixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsTUFBVyxFQUFFLElBQVksSUFBUyxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV6SixnQkFBZ0IsQ0FBQzt3R0FyREwsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FGakIsTUFBTTs7NEZBRU4saUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbi8qKlxuICogU2VydmljaW8gcXVlIG1hbmVqYSBsb3MgcGFyYW1ldHJvcyBkZSBsYSBhcGxpY2FjacOzbi5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyc1NlcnZpY2Uge1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpXG5cdC8qKlxuXHQgKiBNYW5lamEgbGFzIHBldGljaW9uZXMgYSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgY29ubmVjdGlvbiA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSlcblxuXHQvL0FQSSBVUkxTXG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSBVUkwgcGFyYSBvYnRlbmVyIHRvZG9zIGxvcyBwYXJhbWV0cm9zLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgZ2V0QWxsUGFyYW1ldGVyc0FQSSgpIHsgcmV0dXJuIGAke3RoaXMuYXBpQ29uc3RhbnRzLlNIT1BfQVBJX1VSTH0ke3RoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUx9L3BhcmFtZXRlcnNgIH1cblxuXHQvL09CU0VSVkFCTEVTXG5cdC8qKlxuXHQgKiBTdWJqZWN0IHBhcmEgbWFuZWphciBsb3MgY2FtYmlvcyBlbiBsb3MgZGF0b3MgZGUgbG9zIHBhcmFtZXRyb3Ncblx0ICovXG5cdHByaXZhdGUgcGFyYW1ldGVyc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtZXRlcltdIHwgbnVsbD4obnVsbCk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyQ6IE9ic2VydmFibGU8UGFyYW1ldGVyW10gfCBudWxsPiA9IHRoaXMucGFyYW1ldGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0Ly9NRVRIT0RTXG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxvcyBwYXLDoW1ldHJvcyBkZWwgYmFja2VuZC4gXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldFBhcmFtZXRlcnMoKTogT2JzZXJ2YWJsZTxQYXJhbWV0ZXJbXSB8IG51bGw+IHtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzU3ViamVjdC5nZXRWYWx1ZSgpID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0QWxsUGFyYW1ldGVyc0FQSSgpKS5waXBlKFxuXHRcdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdFx0bWFwKChyZXNwb25zZTogUGFyYW1ldGVyW10pID0+IHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnNTdWJqZWN0Lm5leHQocmVzcG9uc2UpXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlXG5cdFx0XHRcdH0pLCBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYEVycm9yOiAke2Vycm9yfWApXG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzU3ViamVjdC5uZXh0KFtdKVxuXHRcdFx0XHRcdHJldHVybiBvZihbXSlcblx0XHRcdFx0fSlcblx0XHRcdCkuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnMkXG5cdH1cblx0LyoqXG5cdCAqIENvbXBydWViYSBzaSBlbCBjw7NkaWdvIGRlIHVuIHBhcsOhbWV0cm8gZXhpc3RlIGVuIGxhIGxpc3RhIGRlIHBhcsOhbWV0cm9zLlxuXHQgKiBAcGFyYW0gcGFyYW1zIExpc3RhIGRlIHBhcsOhbWV0cm9zXG5cdCAqIEBwYXJhbSBjb2RlIEPDs2RpZ28gZGVsIHBhcsOhbWV0cm8gYSBidXNjYXJcblx0ICogQHJldHVybnMgRWwgb2JqZXRvIGNvbiBsb3MgZGF0b3MgZGVsIHBhcsOhbWV0cm8gZW5jb250cmFkbywgc2lubyByZXRvcm5hIGBudWxsYFxuXHQgKi9cblx0cHVibGljIGhhc1BhcmFtcyhwYXJhbXM6IGFueSwgY29kZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHBhcmFtcyAmJiBwYXJhbXMuZmluZCgocGFyYW06IGFueSkgPT4gcGFyYW0uY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjb2RlLnRvTG93ZXJDYXNlKCkpKSB9XG5cblx0Y29uc3RydWN0b3IoKSB7IH1cblxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL3BhcmFtZXRlcnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFDL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBQzdCOztPQUVHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ2xEOztPQUVHO0lBQ0ssVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBRTlDOztPQUVHO0lBQ0ssZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFcEQsVUFBVTtJQUNWOzs7T0FHRztJQUNLLG1CQUFtQixLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sYUFBYSxDQUFBLENBQUMsQ0FBQztJQUVuSCxhQUFhO0lBQ2I7O09BRUc7SUFDSyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsSUFBSSxDQUFDLENBQUM7SUFDbEUsV0FBVyxHQUFtQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUYsU0FB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LGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTNELElBQUksUUFBUTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLEdBQUc7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFFLElBQUksT0FBTztZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGdCQUFnQixDQUFDO3dHQXJHTCxpQkFBaUI7NEdBQWpCLGlCQUFpQixjQUZqQixNQUFNOzs0RkFFTixpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcbi8qKlxuICogU2VydmljaW8gcXVlIG1hbmVqYSBsb3MgcGFyYW1ldHJvcyBkZSBsYSBhcGxpY2FjacOzbi5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyc1NlcnZpY2Uge1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpXG5cdC8qKlxuXHQgKiBNYW5lamEgbGFzIHBldGljaW9uZXMgYSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgY29ubmVjdGlvbiA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSlcblxuXHQvKipcblx0ICogU2VydmljaW8gZGUgQW5hbHl0aWNzXG5cdCAqL1xuXHRwcml2YXRlIGFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG5cblx0Ly9BUEkgVVJMU1xuXHQvKipcblx0ICogRGV2dWVsdmUgbGEgVVJMIHBhcmEgb2J0ZW5lciB0b2RvcyBsb3MgcGFyYW1ldHJvcy5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGdldEFsbFBhcmFtZXRlcnNBUEkoKSB7IHJldHVybiBgJHt0aGlzLmFwaUNvbnN0YW50cy5TSE9QX0FQSV9VUkx9JHt0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMfS9wYXJhbWV0ZXJzYCB9XG5cblx0Ly9PQlNFUlZBQkxFU1xuXHQvKipcblx0ICogU3ViamVjdCBwYXJhIG1hbmVqYXIgbG9zIGNhbWJpb3MgZW4gbG9zIGRhdG9zIGRlIGxvcyBwYXJhbWV0cm9zXG5cdCAqL1xuXHRwcml2YXRlIHBhcmFtZXRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJhbWV0ZXJbXSB8IG51bGw+KG51bGwpO1xuXHRwcml2YXRlIHBhcmFtZXRlcnMkOiBPYnNlcnZhYmxlPFBhcmFtZXRlcltdIHwgbnVsbD4gPSB0aGlzLnBhcmFtZXRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8vTUVUSE9EU1xuXHQvKipcblx0ICogT2J0aWVuZSBsb3MgcGFyw6FtZXRyb3MgZGVsIGJhY2tlbmQuIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXJzKCk6IE9ic2VydmFibGU8UGFyYW1ldGVyW10gfCBudWxsPiB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVyc1N1YmplY3QuZ2V0VmFsdWUoKSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmdldEFsbFBhcmFtZXRlcnNBUEkoKSkucGlwZShcblx0XHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IFBhcmFtZXRlcltdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzU3ViamVjdC5uZXh0KHJlc3BvbnNlKVxuXHRcdFx0XHRcdHRoaXMuaW5pdEFuYWx5dGljc0Zyb21QYXJhbXMocmVzcG9uc2UpO1xuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZVxuXHRcdFx0XHR9KSwgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGBFcnJvcjogJHtlcnJvcn1gKVxuXHRcdFx0XHRcdHRoaXMucGFyYW1ldGVyc1N1YmplY3QubmV4dChbXSlcblx0XHRcdFx0XHRyZXR1cm4gb2YoW10pXG5cdFx0XHRcdH0pXG5cdFx0XHQpLnN1YnNjcmliZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJhbWV0ZXJzJFxuXHR9XG5cdC8qKlxuXHQgKiBDb21wcnVlYmEgc2kgZWwgY8OzZGlnbyBkZSB1biBwYXLDoW1ldHJvIGV4aXN0ZSBlbiBsYSBsaXN0YSBkZSBwYXLDoW1ldHJvcy5cblx0ICogQHBhcmFtIHBhcmFtcyBMaXN0YSBkZSBwYXLDoW1ldHJvc1xuXHQgKiBAcGFyYW0gY29kZSBDw7NkaWdvIGRlbCBwYXLDoW1ldHJvIGEgYnVzY2FyXG5cdCAqIEByZXR1cm5zIEVsIG9iamV0byBjb24gbG9zIGRhdG9zIGRlbCBwYXLDoW1ldHJvIGVuY29udHJhZG8sIHNpbm8gcmV0b3JuYSBgbnVsbGBcblx0ICovXG5cdHB1YmxpYyBoYXNQYXJhbXMocGFyYW1zOiBhbnksIGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiBwYXJhbXMgJiYgcGFyYW1zLmZpbmQoKHBhcmFtOiBhbnkpID0+IHBhcmFtLmNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29kZS50b0xvd2VyQ2FzZSgpKSkgfVxuXG5cdFxuXHRwcml2YXRlIGZpbmRBbmFseXRpY3NQYXJhbShcblx0XHRwYXJhbXM6IFBhcmFtZXRlcltdLFxuXHRcdHNlcnZpY2U6ICdmYWNlYm9vaycgfCAnZ29vZ2xlJyB8ICdndG0nIHwgJ21ldHJpY29vbCcgfCAnZG9wcGxlcidcblx0KTogUGFyYW1ldGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5hcGlDb25zdGFudHMuQ0hBTk5FTD8udG9Mb3dlckNhc2UoKSA/PyAnJztcblxuXHRcdC8vIEPDs2RpZ28gZXNwZWPDrWZpY28gcG9yIGNhbmFsOiBmYWNlYm9va19ub21icmVjYW5hbF9pZFxuXHRcdGNvbnN0IGNvZGVDaGFubmVsID0gYCR7c2VydmljZX1fJHtjaGFubmVsfV9pZGA7XG5cblx0XHQvLyBDw7NkaWdvIGdlbsOpcmljbzogZmFjZWJvb2tfaWRcblx0XHRjb25zdCBjb2RlR2VuZXJpYyA9IGAke3NlcnZpY2V9X2lkYDtcblxuXHRcdGNvbnN0IG5vcm1hbGl6ZSA9IChjb2RlPzogc3RyaW5nKSA9PiAoY29kZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuXHRcdGxldCBwYXJhbSA9IHBhcmFtcy5maW5kKHAgPT4gbm9ybWFsaXplKHAuY29kZSkgPT09IGNvZGVDaGFubmVsKTtcblxuXHRcdGlmICghcGFyYW0pIHtcblx0XHRcdHBhcmFtID0gcGFyYW1zLmZpbmQocCA9PiBub3JtYWxpemUocC5jb2RlKSA9PT0gY29kZUdlbmVyaWMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJhbTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdEFuYWx5dGljc0Zyb21QYXJhbXMocGFyYW1zOiBQYXJhbWV0ZXJbXSB8IG51bGwpIHtcblx0XHRpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLmxlbmd0aCkgcmV0dXJuO1xuXG5cdFx0aWYgKCF0aGlzLmFwaUNvbnN0YW50cy5JU19QUk9EVUNUSU9OKSByZXR1cm47XG5cblx0XHRjb25zdCBmYWNlYm9vayA9IHRoaXMuZmluZEFuYWx5dGljc1BhcmFtKHBhcmFtcywgJ2ZhY2Vib29rJyk7XG5cdFx0Y29uc3QgZ29vZ2xlID0gdGhpcy5maW5kQW5hbHl0aWNzUGFyYW0ocGFyYW1zLCAnZ29vZ2xlJyk7XG5cdFx0Y29uc3QgZ3RtID0gdGhpcy5maW5kQW5hbHl0aWNzUGFyYW0ocGFyYW1zLCAnZ3RtJyk7XG5cdFx0Y29uc3QgbWV0cmljb29sID0gdGhpcy5maW5kQW5hbHl0aWNzUGFyYW0ocGFyYW1zLCAnbWV0cmljb29sJyk7XG5cdFx0Y29uc3QgZG9wcGxlciA9IHRoaXMuZmluZEFuYWx5dGljc1BhcmFtKHBhcmFtcywgJ2RvcHBsZXInKTtcblxuXHRcdGlmIChmYWNlYm9vaykgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmluaXRpYWxpemVGYWNlYm9vayhmYWNlYm9vay52YWx1ZSk7XG5cdFx0aWYgKGdvb2dsZSkgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmluaXRpYWxpemVHb29nbGUoZ29vZ2xlLnZhbHVlKTtcblx0XHRpZiAoZ3RtKSB0aGlzLmFuYWx5dGljc1NlcnZpY2UuaW5pdGlhbGl6ZUdUTShndG0udmFsdWUpO1xuXHRcdGlmIChtZXRyaWNvb2wpIHRoaXMuYW5hbHl0aWNzU2VydmljZS5pbml0aWFsaXplTWV0cmljb29sKG1ldHJpY29vbC52YWx1ZSk7XG5cdFx0aWYgKGRvcHBsZXIpIHRoaXMuYW5hbHl0aWNzU2VydmljZS5pbml0aWFsaXplRG9wcGxlcihkb3BwbGVyLnZhbHVlKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkgeyB9XG5cbn1cbiJdfQ==