ngx-tag-commander-lib
Version:
This service lets you integrate Tag Commander in your AngularX (2+) applications easily. - [Official website](https://www.commandersact.com/fr/produits/tagcommander/)
284 lines • 25.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
//our root app component
import { CustomNGXLoggerService, NgxLoggerLevel } from 'ngx-logger';
import { Router, RoutesRecognized } from '@angular/router';
import { WindowRef } from './WindowRef';
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./WindowRef";
import * as i2 from "ngx-logger";
import * as i3 from "@angular/router";
export class TagCommanderService {
/**
* @param {?} winRef
* @param {?} customLogger
* @param {?} router
*/
constructor(winRef, customLogger, router) {
this.winRef = winRef;
this.customLogger = customLogger;
this.router = router;
this._tcContainers = [];
this._trackRoutes = false;
this.logger = customLogger.create({ level: NgxLoggerLevel.DEBUG });
this.router.events.subscribe(_data => {
if (_data instanceof RoutesRecognized && this._trackRoutes) {
if (_data.state.root.firstChild.data.tcInclude === undefined) {
/** @type {?} */
let data = _data.state.root.firstChild.data.tcInclude;
data.forEach(container => {
this.reloadContainer(container['ids'], container['idc'], container['options']);
});
}
}
});
}
// /**
// * the script URI correspond to the tag-commander script URL, it can either be a CDN URL or the path of your script
// * @param {string} id the id the script node will have
// * @param {string} uri the source of the script
// * @param {string} node the node on witch the script will be placed, it can either be head or body
// */
/**
* @param {?} id
* @param {?} uri
* @param {?} node
* @return {?}
*/
addContainer(id, uri, node) {
this._tcContainers.push({ 'id': id, 'uri': uri });
/** @type {?} */
let tagContainer = document.createElement('script');
tagContainer.setAttribute('type', 'text/javascript');
tagContainer.setAttribute('src', uri);
tagContainer.setAttribute('id', id);
if (typeof node !== 'string') {
this.logger.warn('you didn\'t specify where you wanted to place the script, it will be placed in the head by default');
document.querySelector('head').appendChild(tagContainer);
}
else if (node.toLowerCase() === 'head' || node.toLowerCase() === 'body') {
document.querySelector(node.toLowerCase()).appendChild(tagContainer);
}
else {
this.logger.warn('you didn\'t correctily specify where you wanted to place the script, it will be placed in the head by default');
document.querySelector('head').appendChild(tagContainer);
}
}
// /**
// * The script URI correspond to the tag-commander script URL, it can either be a CDN URL or the path of your script
// * @param {string} id
// */
/**
* @param {?} id
* @return {?}
*/
removeContainer(id) {
/** @type {?} */
let container = document.getElementById(id);
/** @type {?} */
let containers = this._tcContainers.slice(0);
document.querySelector('head').removeChild(container);
for (let i = 0; i < containers.length; i++) {
if (containers[i].id === id) {
this._tcContainers.splice(i, 1);
}
}
}
// /**
// * will display the debug messages if true
// * @param {boolean} debug if set to true it will activate the debug msg default is false
// */
/**
* @param {?} debug
* @return {?}
*/
setDebug(debug) {
this.debug = debug;
if (debug) {
this.logger.updateConfig({ level: NgxLoggerLevel.DEBUG });
}
else {
this.logger.updateConfig({ level: NgxLoggerLevel.OFF });
}
}
// /**
// * allows the router to be tracked
// * @param {boolean} b will read routes if set to true
// */
/**
* @param {?} b
* @return {?}
*/
trackRoutes(b) {
this._trackRoutes = !!b;
}
// /**
// * set or update the value of the var
// * @param {string} tcKey
// * @param {*} tcVar
// */
/**
* @param {?} tcKey
* @param {?} tcVar
* @return {?}
*/
setTcVar(tcKey, tcVar) {
if (typeof this.winRef.nativeWindow.tc_vars !== 'undefined') {
this.winRef.nativeWindow.tc_vars[tcKey] = tcVar;
}
}
// /**
// * set your varibles for the different providers, when called the first time it
// * instantiate the external varible
// * @param {object} vars
// */
/**
* @param {?} vars
* @return {?}
*/
setTcVars(vars) {
this.logger.debug('setTcVars', vars);
/** @type {?} */
let listOfVars = Object.keys(vars);
for (var i = 0; i < listOfVars.length; i++) {
this.setTcVar(listOfVars[i], vars[listOfVars[i]]);
}
}
;
// /**
// * get the value of the var
// * @param {string} tcKey
// */
/**
* @param {?} tcKey
* @return {?}
*/
getTcVar(tcKey) {
this.logger.debug('getTcVars', tcKey);
return this.winRef.nativeWindow.tc_vars[tcKey] === null ? this.winRef.nativeWindow.tc_vars[tcKey] : false;
}
;
// /**
// * removes the var by specifying the key
// * @param {string} varKey
// */
/**
* @param {?} varKey
* @return {?}
*/
removeTcVar(varKey) {
this.logger.debug('removeTcVars', varKey);
delete this.winRef.nativeWindow.tc_vars[varKey];
}
;
// /**
// * will reload all the containers
// * @param {object} options can contain some options in a form of an object
// */
/**
* @param {?} options
* @return {?}
*/
reloadAllContainers(options) {
this.logger.debug('reloadAllContainers', options);
options = options || {};
this.logger.debug('Reload all containers ', typeof options === 'object' ? 'with options ' + options : '');
this.winRef.nativeWindow.container.reload(options);
}
;
// /**
// * will reload a specifique container
// * @param {number} ids
// * @param {number} idc
// * @param {object} options can contain some options in a form of an object
// */
/**
* @param {?} ids
* @param {?} idc
* @param {?} options
* @return {?}
*/
reloadContainer(ids, idc, options) {
/** @type {?} */
var options = options || {};
this.logger.debug('Reload container ids: ' + ids + ' idc: ' + idc, typeof options === 'object' ? 'with options: ' + options : '');
this.winRef.nativeWindow['container_' + ids + '_' + idc].reload(options);
}
;
// /**
// * will set an TagCommander event
// * @param {string} eventLabel the name of your event
// * @param {HTMLElement} element the HTMLelement on witch the event is attached
// * @param {object} data the data you want to transmit
// */
/**
* @param {?} eventLabel
* @param {?} element
* @param {?} data
* @return {?}
*/
captureEvent(eventLabel, element, data) {
this.logger.debug('captureEvent', eventLabel, element, data);
if (typeof this.winRef.nativeWindow.tC !== 'undefined') {
if (eventLabel in Object.keys(this.winRef.nativeWindow.tC.event)) {
this.winRef.nativeWindow.tC.event[eventLabel](element, data);
}
else {
this.logger.error('the key ' + eventLabel + ' you specified in the catpure event does not existe');
}
}
}
;
}
TagCommanderService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
TagCommanderService.ctorParameters = () => [
{ type: WindowRef },
{ type: CustomNGXLoggerService },
{ type: Router }
];
/** @nocollapse */ TagCommanderService.ngInjectableDef = i0.defineInjectable({ factory: function TagCommanderService_Factory() { return new TagCommanderService(i0.inject(i1.WindowRef), i0.inject(i2.CustomNGXLoggerService), i0.inject(i3.Router)); }, token: TagCommanderService, providedIn: "root" });
if (false) {
/** @type {?} */
TagCommanderService.prototype._tcContainers;
/** @type {?} */
TagCommanderService.prototype.pageEvent;
/** @type {?} */
TagCommanderService.prototype.debug;
/** @type {?} */
TagCommanderService.prototype._trackRoutes;
/**
* @type {?}
* @private
*/
TagCommanderService.prototype.logger;
/**
* @type {?}
* @private
*/
TagCommanderService.prototype.winRef;
/**
* @type {?}
* @private
*/
TagCommanderService.prototype.customLogger;
/**
* @type {?}
* @private
*/
TagCommanderService.prototype.router;
/* Skipping unhandled member: ;*/
/* Skipping unhandled member: ;*/
/* Skipping unhandled member: ;*/
/* Skipping unhandled member: ;*/
/* Skipping unhandled member: ;*/
/* Skipping unhandled member: ;*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLWNvbW1hbmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRhZy1jb21tYW5kZXIvIiwic291cmNlcyI6WyJsaWIvdGFnLWNvbW1hbmRlci5zZXJ2aWNlL3RhZy1jb21tYW5kZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBYSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7O0lBTzlCLFlBQW9CLE1BQWlCLEVBQVUsWUFBb0MsRUFBVSxNQUFjO1FBQXZGLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTjNHLGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBRy9CLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBSTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7O3dCQUN4RCxJQUFJLEdBQWUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJ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QUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQ3RELElBQUksVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFHLHFEQUFxRCxDQUFDLENBQUM7YUFDcEc7U0FDRjtJQUNILENBQUM7SUFBQSxDQUFDOzs7WUF0S0gsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7O1lBTFEsU0FBUztZQUZFLHNCQUFzQjtZQUNqQyxNQUFNOzs7OztJQVFiLDRDQUErQjs7SUFDL0Isd0NBQWU7O0lBQ2Ysb0NBQVc7O0lBQ1gsMkNBQThCOzs7OztJQUM5QixxQ0FBMEI7Ozs7O0lBRWQscUNBQXlCOzs7OztJQUFFLDJDQUE0Qzs7Ozs7SUFBRSxxQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvL291ciByb290IGFwcCBjb21wb25lbnRcclxuaW1wb3J0IHsgTkdYTG9nZ2VyLCBDdXN0b21OR1hMb2dnZXJTZXJ2aWNlLCBOZ3hMb2dnZXJMZXZlbCB9IGZyb20gJ25neC1sb2dnZXInO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlc1JlY29nbml6ZWQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICcuL1dpbmRvd1JlZic7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhZ0NvbW1hbmRlclNlcnZpY2Uge1xyXG4gIF90Y0NvbnRhaW5lcnM6IEFycmF5PGFueT4gPSBbXTtcclxuICBwYWdlRXZlbnQ6IGFueTtcclxuICBkZWJ1ZzogYW55O1xyXG4gIF90cmFja1JvdXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2luUmVmOiBXaW5kb3dSZWYsIHByaXZhdGUgY3VzdG9tTG9nZ2VyOiBDdXN0b21OR1hMb2dnZXJTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcbiAgICB0aGlzLmxvZ2dlciA9IGN1c3RvbUxvZ2dlci5jcmVhdGUoe2xldmVsOiBOZ3hMb2dnZXJMZXZlbC5ERUJVR30pO1xyXG4gICAgXHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKF9kYXRhID0+IHtcclxuICAgICAgaWYgKF9kYXRhIGluc3RhbmNlb2YgUm91dGVzUmVjb2duaXplZCAmJiB0aGlzLl90cmFja1JvdXRlcykge1xyXG4gICAgICAgIGlmIChfZGF0YS5zdGF0ZS5yb290LmZpcnN0Q2hpbGQuZGF0YS50Y0luY2x1ZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbGV0IGRhdGE6IEFycmF5PGFueT4gPSBfZGF0YS5zdGF0ZS5yb290LmZpcnN0Q2hpbGQuZGF0YS50Y0luY2x1ZGU7XHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWxvYWRDb250YWluZXIoY29udGFpbmVyWydpZHMnXSwgY29udGFpbmVyWydpZGMnXSwgY29udGFpbmVyWydvcHRpb25zJ10pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIC8qKlxyXG4gIC8vICAqIHRoZSBzY3JpcHQgVVJJIGNvcnJlc3BvbmQgdG8gdGhlIHRhZy1jb21tYW5kZXIgc2NyaXB0IFVSTCwgaXQgY2FuIGVpdGhlciBiZSBhIENETiBVUkwgb3IgdGhlIHBhdGggb2YgeW91ciBzY3JpcHRcclxuICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gaWQgdGhlIGlkIHRoZSBzY3JpcHQgbm9kZSB3aWxsIGhhdmVcclxuICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gdXJpIHRoZSBzb3VyY2Ugb2YgdGhlIHNjcmlwdFxyXG4gIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBub2RlIHRoZSBub2RlIG9uIHdpdGNoIHRoZSBzY3JpcHQgd2lsbCBiZSBwbGFjZWQsIGl0IGNhbiBlaXRoZXIgYmUgaGVhZCBvciBib2R5XHJcbiAgLy8gKi9cclxuICBhZGRDb250YWluZXIoaWQ6c3RyaW5nLCB1cmk6c3RyaW5nLCBub2RlOnN0cmluZyk6dm9pZCB7XHJcbiAgICB0aGlzLl90Y0NvbnRhaW5lcnMucHVzaCh7ICdpZCc6IGlkLCAndXJpJzogdXJpIH0pO1xyXG4gICAgbGV0IHRhZ0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgdGFnQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcclxuICAgIHRhZ0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVyaSk7XHJcbiAgICB0YWdDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcclxuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5sb2dnZXIud2FybigneW91IGRpZG5cXCd0IHNwZWNpZnkgd2hlcmUgeW91IHdhbnRlZCB0byBwbGFjZSB0aGUgc2NyaXB0LCBpdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgaGVhZCBieSBkZWZhdWx0Jyk7XHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZCh0YWdDb250YWluZXIpO1xyXG4gICAgfSBlbHNlIGlmIChub2RlLnRvTG93ZXJDYXNlKCkgPT09ICdoZWFkJyB8fCBub2RlLnRvTG93ZXJDYXNlKCkgPT09ICdib2R5Jykge1xyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG5vZGUudG9Mb3dlckNhc2UoKSkuYXBwZW5kQ2hpbGQodGFnQ29udGFpbmVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ3lvdSBkaWRuXFwndCBjb3JyZWN0aWx5IHNwZWNpZnkgd2hlcmUgeW91IHdhbnRlZCB0byBwbGFjZSB0aGUgc2NyaXB0LCBpdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgaGVhZCBieSBkZWZhdWx0Jyk7XHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZCh0YWdDb250YWluZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogVGhlIHNjcmlwdCBVUkkgY29ycmVzcG9uZCB0byB0aGUgdGFnLWNvbW1hbmRlciBzY3JpcHQgVVJMLCBpdCBjYW4gZWl0aGVyIGJlIGEgQ0ROIFVSTCBvciB0aGUgcGF0aCBvZiB5b3VyIHNjcmlwdFxyXG4gIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBpZFxyXG4gIC8vICAqL1xyXG4gIHJlbW92ZUNvbnRhaW5lcihpZDpzdHJpbmcpOnZvaWQge1xyXG4gICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxldCBjb250YWluZXJzID0gdGhpcy5fdGNDb250YWluZXJzLnNsaWNlKDApO1xyXG5cclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGFpbmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY29udGFpbmVyc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICB0aGlzLl90Y0NvbnRhaW5lcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAvKipcclxuICAvLyAgKiB3aWxsIGRpc3BsYXkgdGhlIGRlYnVnIG1lc3NhZ2VzIGlmIHRydWVcclxuICAvLyAgKiBAcGFyYW0ge2Jvb2xlYW59IGRlYnVnIGlmIHNldCB0byB0cnVlIGl0IHdpbGwgYWN0aXZhdGUgdGhlIGRlYnVnIG1zZyBkZWZhdWx0IGlzIGZhbHNlXHJcbiAgLy8gICovXHJcbiAgc2V0RGVidWcoZGVidWc6Ym9vbGVhbik6dm9pZCB7XHJcbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XHJcbiAgICBpZiAoZGVidWcpIHtcclxuICAgICAgdGhpcy5sb2dnZXIudXBkYXRlQ29uZmlnKHtsZXZlbDogTmd4TG9nZ2VyTGV2ZWwuREVCVUd9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLnVwZGF0ZUNvbmZpZyh7bGV2ZWw6IE5neExvZ2dlckxldmVsLk9GRn0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogYWxsb3dzIHRoZSByb3V0ZXIgdG8gYmUgdHJhY2tlZFxyXG4gIC8vICAqIEBwYXJhbSB7Ym9vbGVhbn0gYiB3aWxsIHJlYWQgcm91dGVzIGlmIHNldCB0byB0cnVlXHJcbiAgLy8gICovXHJcbiAgdHJhY2tSb3V0ZXMoYjpib29sZWFuKTp2b2lkIHtcclxuICAgIHRoaXMuX3RyYWNrUm91dGVzID0gISFiO1xyXG4gIH1cclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogc2V0IG9yIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIHZhclxyXG4gIC8vICAqIEBwYXJhbSB7c3RyaW5nfSB0Y0tleVxyXG4gIC8vICAqIEBwYXJhbSB7Kn0gdGNWYXJcclxuICAvLyAgKi9cclxuICBzZXRUY1Zhcih0Y0tleTpzdHJpbmcsIHRjVmFyOmFueSk6IHZvaWQge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLndpblJlZi5uYXRpdmVXaW5kb3cudGNfdmFycyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgdGhpcy53aW5SZWYubmF0aXZlV2luZG93LnRjX3ZhcnNbdGNLZXldID0gdGNWYXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAvKipcclxuICAvLyAgKiBzZXQgeW91ciB2YXJpYmxlcyBmb3IgdGhlIGRpZmZlcmVudCBwcm92aWRlcnMsIHdoZW4gY2FsbGVkIHRoZSBmaXJzdCB0aW1lIGl0XHJcbiAgLy8gICogaW5zdGFudGlhdGUgdGhlIGV4dGVybmFsIHZhcmlibGVcclxuICAvLyAgKiBAcGFyYW0ge29iamVjdH0gdmFyc1xyXG4gIC8vICAqL1xyXG4gIHNldFRjVmFycyh2YXJzOm9iamVjdCk6dm9pZCB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VGNWYXJzJywgdmFycyk7XHJcbiAgICBsZXQgbGlzdE9mVmFycyA9IE9iamVjdC5rZXlzKHZhcnMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0T2ZWYXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2V0VGNWYXIobGlzdE9mVmFyc1tpXSwgdmFyc1tsaXN0T2ZWYXJzW2ldXSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgdmFyXHJcbiAgLy8gICogQHBhcmFtIHtzdHJpbmd9IHRjS2V5XHJcbiAgLy8gICovXHJcbiAgZ2V0VGNWYXIodGNLZXk6c3RyaW5nKTphbnkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2dldFRjVmFycycsIHRjS2V5KTtcclxuICAgIHJldHVybiB0aGlzLndpblJlZi5uYXRpdmVXaW5kb3cudGNfdmFyc1t0Y0tleV0gPT09IG51bGwgPyB0aGlzLndpblJlZi5uYXRpdmVXaW5kb3cudGNfdmFyc1t0Y0tleV0gOiBmYWxzZTtcclxuICB9O1xyXG5cclxuICAvLyAvKipcclxuICAvLyAgKiByZW1vdmVzIHRoZSB2YXIgYnkgc3BlY2lmeWluZyB0aGUga2V5XHJcbiAgLy8gICogQHBhcmFtIHtzdHJpbmd9IHZhcktleVxyXG4gIC8vICAqL1xyXG4gIHJlbW92ZVRjVmFyKHZhcktleTpzdHJpbmcpOnZvaWQge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ3JlbW92ZVRjVmFycycsIHZhcktleSk7XHJcbiAgICBkZWxldGUgdGhpcy53aW5SZWYubmF0aXZlV2luZG93LnRjX3ZhcnNbdmFyS2V5XTtcclxuICB9O1xyXG5cclxuICAvLyAvKipcclxuICAvLyAgKiB3aWxsIHJlbG9hZCBhbGwgdGhlIGNvbnRhaW5lcnNcclxuICAvLyAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBjYW4gY29udGFpbiBzb21lIG9wdGlvbnMgaW4gYSBmb3JtIG9mIGFuIG9iamVjdFxyXG4gIC8vICAqL1xyXG4gIHJlbG9hZEFsbENvbnRhaW5lcnMob3B0aW9uczpvYmplY3QpOnZvaWQge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ3JlbG9hZEFsbENvbnRhaW5lcnMnLCBvcHRpb25zKTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1JlbG9hZCBhbGwgY29udGFpbmVycyAnLCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgPyAnd2l0aCBvcHRpb25zICcgKyBvcHRpb25zIDogJycpO1xyXG4gICAgdGhpcy53aW5SZWYubmF0aXZlV2luZG93LmNvbnRhaW5lci5yZWxvYWQob3B0aW9ucyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gLyoqXHJcbiAgLy8gICogd2lsbCByZWxvYWQgYSBzcGVjaWZpcXVlIGNvbnRhaW5lclxyXG4gIC8vICAqIEBwYXJhbSB7bnVtYmVyfSBpZHNcclxuICAvLyAgKiBAcGFyYW0ge251bWJlcn0gaWRjXHJcbiAgLy8gICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgY2FuIGNvbnRhaW4gc29tZSBvcHRpb25zIGluIGEgZm9ybSBvZiBhbiBvYmplY3RcclxuICAvLyAgKi9cclxuICByZWxvYWRDb250YWluZXIoaWRzOnN0cmluZywgaWRjOnN0cmluZywgb3B0aW9uczpvYmplY3QpOnZvaWQge1xyXG4gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1JlbG9hZCBjb250YWluZXIgaWRzOiAnICsgaWRzICsgJyBpZGM6ICcgKyBpZGMsIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/ICd3aXRoIG9wdGlvbnM6ICcgKyBvcHRpb25zIDogJycpO1xyXG4gICAgdGhpcy53aW5SZWYubmF0aXZlV2luZG93Wydjb250YWluZXJfJyArIGlkcyArICdfJyArIGlkY10ucmVsb2FkKG9wdGlvbnMpO1xyXG4gIH07XHJcblxyXG4gIC8vIC8qKlxyXG4gIC8vICAqIHdpbGwgc2V0IGFuIFRhZ0NvbW1hbmRlciBldmVudFxyXG4gIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudExhYmVsIHRoZSBuYW1lIG9mIHlvdXIgZXZlbnRcclxuICAvLyAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IHRoZSBIVE1MZWxlbWVudCBvbiB3aXRjaCB0aGUgZXZlbnQgaXMgYXR0YWNoZWRcclxuICAvLyAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSB0aGUgZGF0YSB5b3Ugd2FudCB0byB0cmFuc21pdFxyXG4gIC8vICAqL1xyXG4gIGNhcHR1cmVFdmVudChldmVudExhYmVsOnN0cmluZywgZWxlbWVudDphbnksIGRhdGE6b2JqZWN0KTp2b2lkIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjYXB0dXJlRXZlbnQnLCBldmVudExhYmVsLCBlbGVtZW50LCBkYXRhKTtcclxuICAgIGlmICh0eXBlb2YgdGhpcy53aW5SZWYubmF0aXZlV2luZG93LnRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpZiAoZXZlbnRMYWJlbCBpbiBPYmplY3Qua2V5cyh0aGlzLndpblJlZi5uYXRpdmVXaW5kb3cudEMuZXZlbnQpKXtcclxuICAgICAgICB0aGlzLndpblJlZi5uYXRpdmVXaW5kb3cudEMuZXZlbnRbZXZlbnRMYWJlbF0oZWxlbWVudCwgZGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ3RoZSBrZXkgJyArIGV2ZW50TGFiZWwgKyAnIHlvdSBzcGVjaWZpZWQgaW4gdGhlIGNhdHB1cmUgZXZlbnQgZG9lcyBub3QgZXhpc3RlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59XHJcbiJdfQ==