ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
168 lines • 25.8 kB
JavaScript
import { HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { share } from 'rxjs/operators';
import { Util } from '../../util/util';
import { OntimizeBaseService } from './ontimize-base-service.class';
import * as i0 from "@angular/core";
export class OntimizeEEService extends OntimizeBaseService {
configureService(config) {
super.configureService(config);
this._startSessionPath = this._appConfig.startSessionPath ? this._appConfig.startSessionPath : '/users/login';
this.path = config.path;
}
startsession(user, password) {
const url = this.urlBase + this._startSessionPath;
const options = {
headers: new HttpHeaders({
Authorization: 'Basic ' + btoa(user + ':' + password)
}),
observe: 'response'
};
const dataObservable = new Observable(observer => {
this.httpClient.post(url, null, options).subscribe({
next: (resp) => {
if (Util.isDefined(resp) && Util.isDefined(resp.headers) && Util.isDefined(resp.headers.get('X-Auth-Token'))) {
observer.next(resp.headers.get('X-Auth-Token'));
}
else {
observer.error('Invalid user or password');
}
}, error: (error) => observer.error(error)
});
});
return dataObservable.pipe(share());
}
endsession(user, sessionId) {
const dataObservable = new Observable(observer => {
setTimeout(() => {
observer.next(0);
}, 0);
});
return dataObservable.pipe(share());
}
hassession(user, sessionId) {
const dataObservable = new Observable(observer => {
observer.next(true);
});
return dataObservable.pipe(share());
}
query(kv, av, entity, sqltypes) {
kv = (Util.isDefined(kv)) ? kv : this.kv;
av = (Util.isDefined(av)) ? av : this.av;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
kv = this.nameConvention.parseFilterToNameConvention(kv);
av = this.nameConvention.parseColumnsToNameConventionForOntimize(av);
sqltypes = this.nameConvention.parseDataToNameConvention(sqltypes);
const url = `${this.urlBase}${this.path}/${entity}/search`;
const body = JSON.stringify({
filter: kv,
columns: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulQueryResponse,
errorCallBack: this.parseUnsuccessfulQueryResponse
});
}
queryById(kv, av, entity, sqltypes) {
return this.query(kv, av, entity, sqltypes);
}
advancedQuery(kv, av, entity, sqltypes, offset, pagesize, orderby) {
kv = (Util.isDefined(kv)) ? kv : this.kv;
av = (Util.isDefined(av)) ? av : this.av;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
orderby = (Util.isDefined(orderby)) ? orderby : this.orderby;
offset = (Util.isDefined(offset)) ? offset : this.offset;
pagesize = (Util.isDefined(pagesize)) ? pagesize : this.pagesize;
if (Util.isDefined(kv) && !Util.isObjectEmpty(kv)) {
kv = this.nameConvention.parseFilterToNameConvention(kv);
}
av = this.nameConvention.parseColumnsToNameConventionForOntimize(av);
sqltypes = this.nameConvention.parseDataToNameConvention(sqltypes);
orderby = orderby.map(orderByItem => this.nameConvention.parseValuesDataToNameConvention(orderByItem));
const url = `${this.urlBase}${this.path}/${entity}/advancedsearch`;
const body = JSON.stringify({
filter: kv,
columns: av,
sqltypes: sqltypes,
offset: offset,
pageSize: pagesize,
orderBy: orderby
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulAdvancedQueryResponse,
errorCallBack: this.parseUnsuccessfulAdvancedQueryResponse
});
}
insert(av = {}, entity, sqltypes) {
const url = `${this.urlBase}${this.path}/${entity}`;
av = this.nameConvention.parseDataToNameConvention(av);
sqltypes = this.nameConvention.parseDataToNameConvention(sqltypes);
const body = JSON.stringify({
data: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulInsertResponse,
errorCallBack: this.parseUnsuccessfulInsertResponse
});
}
update(kv = {}, av = {}, entity, sqltypes) {
const url = `${this.urlBase}${this.path}/${entity}`;
kv = this.nameConvention.parseDataToNameConvention(kv);
av = this.nameConvention.parseDataToNameConvention(av);
sqltypes = this.nameConvention.parseDataToNameConvention(sqltypes);
const body = JSON.stringify({
filter: kv,
data: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'PUT',
url: url,
body: body,
successCallback: this.parseSuccessfulUpdateResponse,
errorCallBack: this.parseUnsuccessfulUpdateResponse
});
}
delete(kv = {}, entity, sqltypes) {
const url = `${this.urlBase}${this.path}/${entity}`;
kv = this.nameConvention.parseDataToNameConvention(kv);
sqltypes = this.nameConvention.parseDataToNameConvention(sqltypes);
const body = JSON.stringify({
filter: kv,
sqltypes: sqltypes
});
return this.doRequest({
method: 'DELETE',
url: url,
body: body,
successCallback: this.parseSuccessfulDeleteResponse,
errorCallBack: this.parseUnsuccessfulDeleteResponse
});
}
buildHeaders() {
let headers = super.buildHeaders();
const sessionId = this.authService.getSessionInfo().id;
if (Util.isDefined(sessionId)) {
headers = headers.append('Authorization', 'Bearer ' + sessionId);
}
return headers;
}
}
OntimizeEEService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeEEService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
OntimizeEEService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeEEService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeEEService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib250aW1pemUtZWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS1lZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFHcEUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG1CQUFtQjtJQUVqRCxnQkFBZ0IsQ0FBQyxNQUFXO1FBQ2pDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzlHLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUUxQixDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVksRUFBRSxRQUFnQjtRQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBUTtZQUNuQixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQ3ZCLGFBQWEsRUFBRSxRQUFRLEdBQUcsSUFB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LENBQUMsU0FBUyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUk7WUFDVixlQUFlLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzsrR0FoTVUsaUJBQWlCO21IQUFqQixpQkFBaUI7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT250aW1pemVCYXNlU2VydmljZSB9IGZyb20gJy4vb250aW1pemUtYmFzZS1zZXJ2aWNlLmNsYXNzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9udGltaXplRUVTZXJ2aWNlIGV4dGVuZHMgT250aW1pemVCYXNlU2VydmljZSBpbXBsZW1lbnRzIElEYXRhU2VydmljZSB7XG5cbiAgcHVibGljIGNvbmZpZ3VyZVNlcnZpY2UoY29uZmlnOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZyk7XG4gICAgdGhpcy5fc3RhcnRTZXNzaW9uUGF0aCA9IHRoaXMuX2FwcENvbmZpZy5zdGFydFNlc3Npb25QYXRoID8gdGhpcy5fYXBwQ29uZmlnLnN0YXJ0U2Vzc2lvblBhdGggOiAnL3VzZXJzL2xvZ2luJztcbiAgICB0aGlzLnBhdGggPSBjb25maWcucGF0aDtcbiAgICAvLyBUT0RPIGluaXQgb3RoZXIgcGFyYW1zXG4gIH1cblxuICBwdWJsaWMgc3RhcnRzZXNzaW9uKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmxCYXNlICsgdGhpcy5fc3RhcnRTZXNzaW9uUGF0aDtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICBBdXRob3JpemF0aW9uOiAnQmFzaWMgJyArIGJ0b2EodXNlciArICc6JyArIHBhc3N3b3JkKVxuICAgICAgfSksXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXG4gICAgfTtcbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudW1iZXI+ID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBudWxsLCBvcHRpb25zKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlc3ApICYmIFV0aWwuaXNEZWZpbmVkKHJlc3AuaGVhZGVycykgJiYgVXRpbC5pc0RlZmluZWQocmVzcC5oZWFkZXJzLmdldCgnWC1BdXRoLVRva2VuJykpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3AuaGVhZGVycy5nZXQoJ1gtQXV0aC1Ub2tlbicpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBzZXNzaW9uSWQgLi4uXG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcignSW52YWxpZCB1c2VyIG9yIHBhc3N3b3JkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvcjogKGVycm9yKSA9PiBvYnNlcnZlci5lcnJvcihlcnJvcilcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhT2JzZXJ2YWJsZS5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgcHVibGljIGVuZHNlc3Npb24odXNlcjogc3RyaW5nLCBzZXNzaW9uSWQ6IGFueSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3QgZGF0YU9ic2VydmFibGU6IE9ic2VydmFibGU8YW55PiA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KDApO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFzc2Vzc2lvbih1c2VyOiBzdHJpbmcsIHNlc3Npb25JZDogYW55KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGF0YU9ic2VydmFibGU6IE9ic2VydmFibGU8YW55PiA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnkoa3Y/OiBvYmplY3QsIGF2PzogQXJyYXk8c3RyaW5nPiwgZW50aXR5Pzogc3RyaW5nLCBzcWx0eXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB7XG4gICAgLy8gVE9ETyBpbXByb3ZlIHRoaXMgLT4gbWVyZ2UgYmV0d2VlbiBnbG9iYWwgY29uZiBhbmQgc3BlY2lmaWMgcGFyYW1zIG9mIG1ldGhvZCBjYWxsaW5nXG4gICAga3YgPSAoVXRpbC5pc0RlZmluZWQoa3YpKSA/IGt2IDogdGhpcy5rdjtcbiAgICBhdiA9IChVdGlsLmlzRGVmaW5lZChhdikpID8gYXYgOiB0aGlzLmF2O1xuICAgIHNxbHR5cGVzID0gKFV0aWwuaXNEZWZpbmVkKHNxbHR5cGVzKSkgPyBzcWx0eXBlcyA6IHRoaXMuc3FsdHlwZXM7XG5cbiAgICBrdiA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VGaWx0ZXJUb05hbWVDb252ZW50aW9uKGt2KTtcbiAgICBhdiA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VDb2x1bW5zVG9OYW1lQ29udmVudGlvbkZvck9udGltaXplKGF2KTtcbiAgICBzcWx0eXBlcyA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VEYXRhVG9OYW1lQ29udmVudGlvbihzcWx0eXBlcyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9JHt0aGlzLnBhdGh9LyR7ZW50aXR5fS9zZWFyY2hgO1xuXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGZpbHRlcjoga3YsXG4gICAgICBjb2x1bW5zOiBhdixcbiAgICAgIHNxbHR5cGVzOiBzcWx0eXBlc1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZG9SZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiB0aGlzLnBhcnNlU3VjY2Vzc2Z1bFF1ZXJ5UmVzcG9uc2UsXG4gICAgICBlcnJvckNhbGxCYWNrOiB0aGlzLnBhcnNlVW5zdWNjZXNzZnVsUXVlcnlSZXNwb25zZVxuICAgIH0pO1xuICB9XG5cbiAgcXVlcnlCeUlkKGt2Pzogb2JqZWN0LCBhdj86IHN0cmluZ1tdLCBlbnRpdHk/OiBzdHJpbmcsIHNxbHR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShrdiwgYXYsIGVudGl0eSwgc3FsdHlwZXMpO1xuICB9XG5cblxuICBwdWJsaWMgYWR2YW5jZWRRdWVyeShrdj86IG9iamVjdCwgYXY/OiBBcnJheTxzdHJpbmc+LCBlbnRpdHk/OiBzdHJpbmcsIHNxbHR5cGVzPzogb2JqZWN0LFxuICAgIG9mZnNldD86IG51bWJlciwgcGFnZXNpemU/OiBudW1iZXIsIG9yZGVyYnk/OiBBcnJheTxvYmplY3Q+KTogT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+IHtcblxuICAgIC8vIFRPRE8gaW1wcm92ZSB0aGlzIC0+IG1lcmdlIGJldHdlZW4gZ2xvYmFsIGNvbmYgYW5kIHNwZWNpZmljIHBhcmFtcyBvZiBtZXRob2QgY2FsbGluZ1xuICAgIGt2ID0gKFV0aWwuaXNEZWZpbmVkKGt2KSkgPyBrdiA6IHRoaXMua3Y7XG4gICAgYXYgPSAoVXRpbC5pc0RlZmluZWQoYXYpKSA/IGF2IDogdGhpcy5hdjtcbiAgICBzcWx0eXBlcyA9IChVdGlsLmlzRGVmaW5lZChzcWx0eXBlcykpID8gc3FsdHlwZXMgOiB0aGlzLnNxbHR5cGVzO1xuICAgIG9yZGVyYnkgPSAoVXRpbC5pc0RlZmluZWQob3JkZXJieSkpID8gb3JkZXJieSA6IHRoaXMub3JkZXJieTtcbiAgICBvZmZzZXQgPSAoVXRpbC5pc0RlZmluZWQob2Zmc2V0KSkgPyBvZmZzZXQgOiB0aGlzLm9mZnNldDtcbiAgICBwYWdlc2l6ZSA9IChVdGlsLmlzRGVmaW5lZChwYWdlc2l6ZSkpID8gcGFnZXNpemUgOiB0aGlzLnBhZ2VzaXplO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGt2KSAmJiAhVXRpbC5pc09iamVjdEVtcHR5KGt2KSkge1xuICAgICAga3Y9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VGaWx0ZXJUb05hbWVDb252ZW50aW9uKGt2KTtcbiAgICB9XG5cbiAgICBhdiA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VDb2x1bW5zVG9OYW1lQ29udmVudGlvbkZvck9udGltaXplKGF2KTtcbiAgICBzcWx0eXBlcyA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VEYXRhVG9OYW1lQ29udmVudGlvbihzcWx0eXBlcyk7XG5cbiAgICBvcmRlcmJ5ID0gb3JkZXJieS5tYXAob3JkZXJCeUl0ZW0gPT4gdGhpcy5uYW1lQ29udmVudGlvbi5wYXJzZVZhbHVlc0RhdGFUb05hbWVDb252ZW50aW9uKG9yZGVyQnlJdGVtKSk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9JHt0aGlzLnBhdGh9LyR7ZW50aXR5fS9hZHZhbmNlZHNlYXJjaGA7XG5cbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZmlsdGVyOiBrdixcbiAgICAgIGNvbHVtbnM6IGF2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBwYWdlU2l6ZTogcGFnZXNpemUsXG4gICAgICBvcmRlckJ5OiBvcmRlcmJ5XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IHRoaXMucGFyc2VTdWNjZXNzZnVsQWR2YW5jZWRRdWVyeVJlc3BvbnNlLFxuICAgICAgZXJyb3JDYWxsQmFjazogdGhpcy5wYXJzZVVuc3VjY2Vzc2Z1bEFkdmFuY2VkUXVlcnlSZXNwb25zZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluc2VydChhdjogb2JqZWN0ID0ge30sIGVudGl0eTogc3RyaW5nLCBzcWx0eXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9JHt0aGlzLnBhdGh9LyR7ZW50aXR5fWA7XG5cbiAgICBhdiA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VEYXRhVG9OYW1lQ29udmVudGlvbihhdik7XG4gICAgc3FsdHlwZXMgPSB0aGlzLm5hbWVDb252ZW50aW9uLnBhcnNlRGF0YVRvTmFtZUNvbnZlbnRpb24oc3FsdHlwZXMpO1xuXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGRhdGE6IGF2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IHRoaXMucGFyc2VTdWNjZXNzZnVsSW5zZXJ0UmVzcG9uc2UsXG4gICAgICBlcnJvckNhbGxCYWNrOiB0aGlzLnBhcnNlVW5zdWNjZXNzZnVsSW5zZXJ0UmVzcG9uc2VcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoa3Y6IG9iamVjdCA9IHt9LCBhdjogb2JqZWN0ID0ge30sIGVudGl0eT86IHN0cmluZywgc3FsdHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT4ge1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfSR7dGhpcy5wYXRofS8ke2VudGl0eX1gO1xuXG4gICAga3YgPSB0aGlzLm5hbWVDb252ZW50aW9uLnBhcnNlRGF0YVRvTmFtZUNvbnZlbnRpb24oa3YpO1xuICAgIGF2ID0gdGhpcy5uYW1lQ29udmVudGlvbi5wYXJzZURhdGFUb05hbWVDb252ZW50aW9uKGF2KTtcbiAgICBzcWx0eXBlcyA9IHRoaXMubmFtZUNvbnZlbnRpb24ucGFyc2VEYXRhVG9OYW1lQ29udmVudGlvbihzcWx0eXBlcyk7XG5cbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZmlsdGVyOiBrdixcbiAgICAgIGRhdGE6IGF2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIHVybDogdXJsLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy5wYXJzZVN1Y2Nlc3NmdWxVcGRhdGVSZXNwb25zZSxcbiAgICAgIGVycm9yQ2FsbEJhY2s6IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxVcGRhdGVSZXNwb25zZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShrdjogb2JqZWN0ID0ge30sIGVudGl0eT86IHN0cmluZywgc3FsdHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT4ge1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfSR7dGhpcy5wYXRofS8ke2VudGl0eX1gO1xuXG4gICAga3YgPSB0aGlzLm5hbWVDb252ZW50aW9uLnBhcnNlRGF0YVRvTmFtZUNvbnZlbnRpb24oa3YpO1xuICAgIHNxbHR5cGVzID0gdGhpcy5uYW1lQ29udmVudGlvbi5wYXJzZURhdGFUb05hbWVDb252ZW50aW9uKHNxbHR5cGVzKTtcblxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBmaWx0ZXI6IGt2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHVybDogdXJsLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy5wYXJzZVN1Y2Nlc3NmdWxEZWxldGVSZXNwb25zZSxcbiAgICAgIGVycm9yQ2FsbEJhY2s6IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxEZWxldGVSZXNwb25zZVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkSGVhZGVycygpOiBIdHRwSGVhZGVycyB7XG4gICAgbGV0IGhlYWRlcnMgPSBzdXBlci5idWlsZEhlYWRlcnMoKTtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCkuaWQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNlc3Npb25JZCkpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmFwcGVuZCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIHNlc3Npb25JZCk7XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbn1cbiJdfQ==