io.parrots
Version:
Parrots.io App
299 lines (298 loc) • 34.2 kB
JavaScript
/**
* @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';
export class JobScheduler {
/**
* @param {?} instanceConnectionManager
*/
constructor(instanceConnectionManager) {
this.instanceConnectionManager = instanceConnectionManager;
}
/**
* @param {?} sessionId
* @return {?}
*/
setInstanceSessionId(sessionId) {
sessionStorage.setItem(JobScheduler.SESSION_ID_KEY, sessionId);
}
/**
* @return {?}
*/
getInstanceSessionId() {
return sessionStorage.getItem(JobScheduler.SESSION_ID_KEY);
}
/**
* @param {?} options
* @param {?} headerData
* @param {?=} xmlType
* @return {?}
*/
addingHeaderRequestOptionsArgs(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 (let /** @type {?} */ key in headerData) {
options.headers.set(key, headerData[key]);
}
}
else {
options.headers = new Headers(headerData);
}
}
let /** @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 {?}
*/
getListJob() {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/query";
let /** @type {?} */ body = {
"filter": ""
};
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} uuid
* @return {?}
*/
interruptJob(uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/" + uuid + "/interrupt";
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
let /** @type {?} */ body = {};
return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} body
* @return {?}
*/
createJob(body) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job";
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @return {?}
*/
getListSchedule() {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/query";
let /** @type {?} */ body = {
"filter": ""
};
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} body
* @return {?}
*/
createSchedule(body) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule";
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
return this.instanceConnectionManager.postWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} body
* @return {?}
*/
editSchedule(body) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + body.uuid;
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} uuid
* @return {?}
*/
enableSchedule(uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + uuid + "/enable";
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
let /** @type {?} */ body = {};
return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} uuid
* @return {?}
*/
disableSchedule(uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + uuid + "/disable";
//! for testing
let /** @type {?} */ requestOptionsArgs = this.addingHeaderRequestOptionsArgs(new RequestOptions(), {
"Increment-Version": "false",
});
let /** @type {?} */ body = {};
return this.instanceConnectionManager.putWithHttpInfo(url, body, requestOptionsArgs);
}
else {
return Promise.reject(null);
}
}
/**
* @param {?} uuid
* @return {?}
*/
getTrigger(uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger";
//! for testing
let /** @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 {?}
*/
addTrigger(body, uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger";
//! for testing
let /** @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 {?}
*/
removeTrigger(_uuid, uuidTrigger) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + _uuid + "/trigger/" + uuidTrigger;
//! for testing
let /** @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 {?}
*/
createCron(body, uuid) {
if (this.instanceConnectionManager !== null && typeof this.instanceConnectionManager !== 'undefined') {
let /** @type {?} */ url = "admin/job/schedule/" + uuid + "/trigger/cron";
//! for testing
let /** @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 = () => [
{ type: InstanceConnectionManager, },
];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSm9iU2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pby5wYXJyb3RzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvSm9iU2NoZWR1bGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBR2hGLE1BQU07Ozs7SUFNRixZQUFZLHlCQUFvRDtRQUM1RCxJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7S0FDOUQ7Ozs7O0lBRU0sb0JBQW9CLENBQUMsU0FBaUI7UUFDekMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7OztJQUc1RCxvQkFBb0I7UUFDdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzs7Ozs7OztJQUd2RCw4QkFBOEIsQ0FBQyxPQUEyQixFQUFFLFVBQXNDLEVBQUUsT0FBaUI7UUFDekgsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxHQUFHLENBQUMsQ0FBQyxx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QkFBcUI7O1lBSHhFLFVBQVU7Ozs7WUFGRix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIZWFkZXJzLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdE9wdGlvbnNBcmdzIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBJbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9JbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSm9iU2NoZWR1bGVyIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VTU0lPTl9JRF9LRVk6IHN0cmluZyA9ICdJbnN0YW5jZS1TZXNzaW9uLUlkJztcblxuICAgIHByaXZhdGUgaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlcjogSW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlcjtcblxuICAgIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXI6IEluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyID0gaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SW5zdGFuY2VTZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShKb2JTY2hlZHVsZXIuU0VTU0lPTl9JRF9LRVksIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluc3RhbmNlU2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEpvYlNjaGVkdWxlci5TRVNTSU9OX0lEX0tFWSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3Mob3B0aW9uczogUmVxdWVzdE9wdGlvbnNBcmdzLCBoZWFkZXJEYXRhOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSwgeG1sVHlwZT86IGJvb2xlYW4pOiBSZXF1ZXN0T3B0aW9uc0FyZ3Mge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWFkZXJEYXRhICE9PSBudWxsICYmIHR5cGVvZiBoZWFkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBoZWFkZXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoa2V5LCBoZWFkZXJEYXRhW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaGVhZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2Vzc2lvbklkID0gdGhpcy5nZXRJbnN0YW5jZVNlc3Npb25JZCgpO1xuXG4gICAgICAgIGlmIChzZXNzaW9uSWQgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5kZWxldGUoJ1Nlc3Npb24tSWQnKTtcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoJ1Nlc3Npb24tSWQnLCBzZXNzaW9uSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHhtbFR5cGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoXCJBY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi94bWxcIik7XG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veG1sXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMaXN0Sm9iKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3F1ZXJ5XCI7XG4gICAgICAgICAgICBsZXQgYm9keTogYW55ID0ge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGludGVycnVwdEpvYih1dWlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9cIit1dWlkK1wiL2ludGVycnVwdFwiO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVKb2IoYm9keTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2JcIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldExpc3RTY2hlZHVsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZS9xdWVyeVwiO1xuICAgICAgICAgICAgbGV0IGJvZHk6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBcImZpbHRlclwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVTY2hlZHVsZShib2R5OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZVwiO1xuXG4gICAgICAgICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSB0aGlzLmFkZGluZ0hlYWRlclJlcXVlc3RPcHRpb25zQXJncyhuZXcgUmVxdWVzdE9wdGlvbnMoKSwge1xuICAgICAgICAgICAgICAgIFwiSW5jcmVtZW50LVZlcnNpb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIC8vIFwiQ2xpZW50LU5hbWVcIjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucG9zdFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdFNjaGVkdWxlKGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlL1wiK2JvZHkudXVpZDtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnB1dFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlU2NoZWR1bGUodXVpZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrdXVpZCtcIi9lbmFibGVcIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIkNsaWVudC1OYW1lXCI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgYm9keTogYW55ID0ge307XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIucHV0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlU2NoZWR1bGUodXVpZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrdXVpZCtcIi9kaXNhYmxlXCI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLnB1dFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHJpZ2dlcih1dWlkOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdXJsOiBhbnkgPSBcImFkbWluL2pvYi9zY2hlZHVsZS9cIit1dWlkK1wiL3RyaWdnZXJcIjtcblxuICAgICAgICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gdGhpcy5hZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3MobmV3IFJlcXVlc3RPcHRpb25zKCksIHtcbiAgICAgICAgICAgICAgICBcIkluY3JlbWVudC1WZXJzaW9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAvLyBcIlJldHVybi1UeXBlXCI6IFwiZHRvXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyLmdldFdpdGhIdHRwSW5mbyh1cmwsIHJlcXVlc3RPcHRpb25zQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVHJpZ2dlcihib2R5OiBhbnksdXVpZDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHVybDogYW55ID0gXCJhZG1pbi9qb2Ivc2NoZWR1bGUvXCIrdXVpZCtcIi90cmlnZ2VyXCI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJSZXR1cm4tVHlwZVwiOiBcImR0b1wiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVUcmlnZ2VyKF91dWlkOiBzdHJpbmcsdXVpZFRyaWdnZXI6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlL1wiK191dWlkK1wiL3RyaWdnZXIvXCIrdXVpZFRyaWdnZXI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5kZWxldGVXaXRoSHR0cEluZm8odXJsLCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNyb24oYm9keTogYW55LHV1aWQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB1cmw6IGFueSA9IFwiYWRtaW4vam9iL3NjaGVkdWxlL1wiK3V1aWQrXCIvdHJpZ2dlci9jcm9uXCI7XG5cbiAgICAgICAgICAgIC8vISBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IHRoaXMuYWRkaW5nSGVhZGVyUmVxdWVzdE9wdGlvbnNBcmdzKG5ldyBSZXF1ZXN0T3B0aW9ucygpLCB7XG4gICAgICAgICAgICAgICAgXCJJbmNyZW1lbnQtVmVyc2lvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgLy8gXCJDbGllbnQtTmFtZVwiOiBcIlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VDb25uZWN0aW9uTWFuYWdlci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19