UNPKG

io.parrots

Version:

Parrots.io App

360 lines (359 loc) 35.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { Headers, RequestOptions } from '@angular/http'; import { InstanceConnectionManager } from './InstanceConnectionManager.service'; var JobScheduler = /** @class */ (function () { function JobScheduler(instanceConnectionManager) { this.instanceConnectionManager = instanceConnectionManager; } /** * @param {?} sessionId * @return {?} */ JobScheduler.prototype.setInstanceSessionId = /** * @param {?} sessionId * @return {?} */ function (sessionId) { sessionStorage.setItem(JobScheduler.SESSION_ID_KEY, sessionId); }; /** * @return {?} */ JobScheduler.prototype.getInstanceSessionId = /** * @return {?} */ function () { return sessionStorage.getItem(JobScheduler.SESSION_ID_KEY); }; /** * @param {?} options * @param {?} headerData * @param {?=} xmlType * @return {?} */ JobScheduler.prototype.addingHeaderRequestOptionsArgs = /** * @param {?} options * @param {?} headerData * @param {?=} xmlType * @return {?} */ function (options, headerData, xmlType) { if (options === null || typeof options === 'undefined') { options = new RequestOptions(); } if (headerData !== null && typeof headerData !== 'undefined') { if (options.headers !== null && typeof options.headers !== 'undefined') { for (var /** @type {?} */ key in headerData) { options.headers.set(key, headerData[key]); } } else { options.headers = new Headers(headerData); } } var /** @type {?} */ sessionId = this.getInstanceSessionId(); if (sessionId !== undefined && sessionId !== null) { options.headers.delete('Session-Id'); options.headers.set('Session-Id', sessionId); } if (xmlType) { options.headers.set("Accept", "application/xml"); options.headers.set("Content-Type", "application/xml"); } else { options.headers.set("Content-Type", "application/json"); } return options; }; /** * @return {?} */ JobScheduler.prototype.getListJob = /** * @return {?} */ function () { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/query"; var /** @type {?} */ body = { "filter": "" }; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} uuid * @return {?} */ JobScheduler.prototype.interruptJob = /** * @param {?} uuid * @return {?} */ function (uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/" + uuid + "/interrupt"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); var /** @type {?} */ body = {}; return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} body * @return {?} */ JobScheduler.prototype.createJob = /** * @param {?} body * @return {?} */ function (body) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @return {?} */ JobScheduler.prototype.getListSchedule = /** * @return {?} */ function () { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/query"; var /** @type {?} */ body = { "filter": "" }; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} body * @return {?} */ JobScheduler.prototype.createSchedule = /** * @param {?} body * @return {?} */ function (body) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} body * @return {?} */ JobScheduler.prototype.editSchedule = /** * @param {?} body * @return {?} */ function (body) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + body.uuid; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} uuid * @return {?} */ JobScheduler.prototype.enableSchedule = /** * @param {?} uuid * @return {?} */ function (uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + uuid + "/enable"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); var /** @type {?} */ body = {}; return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} uuid * @return {?} */ JobScheduler.prototype.disableSchedule = /** * @param {?} uuid * @return {?} */ function (uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + uuid + "/disable"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); var /** @type {?} */ body = {}; return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} uuid * @return {?} */ JobScheduler.prototype.getTrigger = /** * @param {?} uuid * @return {?} */ function (uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.getWithHttpInfo(url, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} body * @param {?} uuid * @return {?} */ JobScheduler.prototype.addTrigger = /** * @param {?} body * @param {?} uuid * @return {?} */ function (body, uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} _uuid * @param {?} uuidTrigger * @return {?} */ JobScheduler.prototype.removeTrigger = /** * @param {?} _uuid * @param {?} uuidTrigger * @return {?} */ function (_uuid, uuidTrigger) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + _uuid + "/trigger/" + uuidTrigger; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.deleteWithHttpInfo(url, requestOptionsArgs); } else { return Promise.reject(null); } }; /** * @param {?} body * @param {?} uuid * @return {?} */ JobScheduler.prototype.createCron = /** * @param {?} body * @param {?} uuid * @return {?} */ function (body, uuid) { if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') { var /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger/cron"; //! for testing var /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), { "Increment-Version": "false", }); return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs); } else { return Promise.reject(null); } }; JobScheduler.SESSION_ID_KEY = 'Instance-Session-Id'; JobScheduler.decorators = [ { type: Injectable }, ]; /** @nocollapse */ JobScheduler.ctorParameters = function () { return [ { type: InstanceConnectionManager, }, ]; }; return JobScheduler; }()); export { JobScheduler }; function JobScheduler_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ JobScheduler.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ JobScheduler.ctorParameters; /** @type {?} */ JobScheduler.SESSION_ID_KEY; /** @type {?} */ JobScheduler.prototype.instanceConnectionManager; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSm9iU2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pby5wYXJyb3RzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvSm9iU2NoZWR1bGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztJQVM1RSxzQkFBWSx5QkFBb0Q7UUFDNUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0tBQzlEOzs7OztJQUVNLDJDQUFvQjs7OztjQUFDLFNBQWlCO1FBQ3pDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQzs7Ozs7SUFHNUQsMkNBQW9COzs7O1FBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzs7Ozs7Ozs7SUFHdkQscURBQThCOzs7Ozs7Y0FBQyxPQUEyQixFQUFFLFVBQXNDLEVBQUUsT0FBaUI7UUFDekgsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxHQUFHLENBQUMsQ0FBQyxx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QUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9COztrQ0ExUDJDLHFCQUFxQjs7Z0JBSHhFLFVBQVU7Ozs7Z0JBRkYseUJBQXlCOzt1QkFGbEM7O1NBS2EsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhlYWRlcnMsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9uc0FyZ3MgfSBmcm9tICdAYW5ndWxhci9odHRwJztcbmltcG9ydCB7IEluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgfSBmcm9tICcuL0luc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKb2JTY2hlZHVsZXIge1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVNTSU9OX0lEX0tFWTogc3RyaW5nID0gJ0luc3RhbmNlLVNlc3Npb24tSWQnO1xuXG4gICAgcHJpdmF0ZSBpbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyOiBJbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyO1xuXG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlcjogSW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlcikge1xuICAgICAgICB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgPSBpbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJbnN0YW5jZVNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKEpvYlNjaGVkdWxlci5TRVNTSU9OX0lEX0tFWSwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5zdGFuY2VTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oSm9iU2NoZWR1bGVyLlNFU1NJT05fSURfS0VZKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhvcHRpb25zOiBSZXF1ZXN0T3B0aW9uc0FyZ3MsIGhlYWRlckRhdGE6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LCB4bWxUeXBlPzogYm9vbGVhbik6IFJlcXVlc3RPcHRpb25zQXJncyB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhlYWRlckRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGhlYWRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGhlYWRlckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldChrZXksIGhlYWRlckRhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZXNzaW9uSWQgPSB0aGlzLmdldEluc3RhbmNlU2Vzc2lvbklkKCk7XG5cbiAgICAgICAgaWYgKHNlc3Npb25JZCAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25JZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLmRlbGV0ZSgnU2Vzc2lvbi1JZCcpO1xuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldCgnU2Vzc2lvbi1JZCcsIHNlc3Npb25JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeG1sVHlwZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldChcIkFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL3htbFwiKTtcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94bWxcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExpc3RKb2IoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2IvcXVlcnlcIjtcbiAgICAgICAgICAgIGxldCBib2R5OiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgXCJmaWx0ZXJcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucG9zdFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaW50ZXJydXB0Sm9iKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL1wiK3V1aWQrXCIvaW50ZXJydXB0XCI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUpvYihib2R5OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYlwiO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucG9zdFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGlzdFNjaGVkdWxlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlL3F1ZXJ5XCI7XG4gICAgICAgICAgICBsZXQgYm9keTogYW55ID0ge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVNjaGVkdWxlKGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlXCI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlZGl0U2NoZWR1bGUoYm9keTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrYm9keS51dWlkO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucHV0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVTY2hlZHVsZSh1dWlkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZS9cIit1dWlkK1wiL2VuYWJsZVwiO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wdXRXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVTY2hlZHVsZSh1dWlkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZS9cIit1dWlkK1wiL2Rpc2FibGVcIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgYm9keTogYW55ID0ge307XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucHV0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmlnZ2VyKHV1aWQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlL1wiK3V1aWQrXCIvdHJpZ2dlclwiO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiUmV0dXJuLVR5cGVcIjogXCJkdG9cIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIuZ2V0V2l0aEh0dHBJbmZvKHVybCwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUcmlnZ2VyKGJvZHk6IGFueSx1dWlkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZS9cIit1dWlkK1wiL3RyaWdnZXJcIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIlJldHVybi1UeXBlXCI6IFwiZHRvXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVRyaWdnZXIoX3V1aWQ6IHN0cmluZyx1dWlkVHJpZ2dlcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrX3V1aWQrXCIvdHJpZ2dlci9cIit1dWlkVHJpZ2dlcjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLmRlbGV0ZVdpdGhIdHRwSW5mbyh1cmwsIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ3Jvbihib2R5OiBhbnksdXVpZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrdXVpZCtcIi90cmlnZ2VyL2Nyb25cIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=