ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
180 lines • 27 kB
JavaScript
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 OntimizeService extends OntimizeBaseService {
constructor() {
super(...arguments);
this.entity = '';
}
configureService(config) {
super.configureService(config);
this._startSessionPath = this._appConfig.startSessionPath ? this._appConfig.startSessionPath : '/startsession';
this.user = config.session ? config.session.user : '';
if (config.entity !== undefined) {
this.entity = config.entity;
}
}
startsession(user, password) {
const encodedPassword = encodeURIComponent(password);
const url = this.urlBase + this._startSessionPath + '?user=' + user + '&password=' + encodedPassword;
const dataObservable = new Observable(_startSessionObserver => {
this.httpClient.get(url).subscribe((resp) => {
if (resp >= 0) {
_startSessionObserver.next(resp);
}
else {
_startSessionObserver.error('Invalid user or password');
}
}, error => _startSessionObserver.error(error));
});
return dataObservable.pipe(share());
}
endsession(user, sessionId) {
const url = this.urlBase + '/endsession?user=' + user + '&sessionid=' + sessionId;
const dataObservable = new Observable(_closeSessionObserver => {
this.httpClient.get(url).subscribe(resp => {
_closeSessionObserver.next(resp);
}, error => {
if (error.status === 401 || error.status === 0 || !error.ok) {
_closeSessionObserver.next(0);
}
else {
_closeSessionObserver.error(error);
}
});
});
return dataObservable.pipe(share());
}
hassession(user, sessionId) {
const dataObservable = new Observable(observer => {
const url = this.urlBase + '/hassession?user=' + user + '&sessionid=' + sessionId;
this.httpClient.get(url).subscribe(resp => {
observer.next(resp);
}, error => observer.error(error));
});
return dataObservable.pipe(share());
}
query(kv, av, entity, sqltypes) {
entity = (Util.isDefined(entity)) ? entity : this.entity;
kv = (Util.isDefined(kv)) ? kv : this.kv;
av = (Util.isDefined(av)) ? av : this.av;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
const url = `${this.urlBase}/query`;
const body = JSON.stringify({
user: this.user,
sessionid: this.authService.getSessionInfo().id,
type: 1,
entity: entity,
kv: kv,
av: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulQueryResponse,
errorCallBack: this.parseUnsuccessfulQueryResponse
});
}
advancedQuery(kv, av, entity, sqltypes, offset, pagesize, orderby) {
entity = (Util.isDefined(entity)) ? entity : this.entity;
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;
const url = `${this.urlBase}/advancedquery`;
const body = JSON.stringify({
user: this.user,
sessionid: this.authService.getSessionInfo().id,
type: 1,
entity: entity,
kv: kv,
av: 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) {
entity = (Util.isDefined(entity)) ? entity : this.entity;
av = (Util.isDefined(av)) ? av : this.av;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
const url = `${this.urlBase}/insert`;
const body = JSON.stringify({
user: this.user,
sessionid: this.authService.getSessionInfo().id,
entity: entity,
av: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulInsertResponse,
errorCallBack: this.parseUnsuccessfulInsertResponse
});
}
update(kv = {}, av = {}, entity, sqltypes) {
entity = (Util.isDefined(entity)) ? entity : this.entity;
kv = (Util.isDefined(kv)) ? kv : this.kv;
av = (Util.isDefined(av)) ? av : this.av;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
const url = `${this.urlBase}/update`;
const body = JSON.stringify({
user: this.user,
sessionid: this.authService.getSessionInfo().id,
entity: entity,
kv: kv,
av: av,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulUpdateResponse,
errorCallBack: this.parseUnsuccessfulUpdateResponse
});
}
delete(kv = {}, entity, sqltypes) {
entity = (Util.isDefined(entity)) ? entity : this.entity;
kv = (Util.isDefined(kv)) ? kv : this.kv;
sqltypes = (Util.isDefined(sqltypes)) ? sqltypes : this.sqltypes;
const url = `${this.urlBase}/delete`;
const body = JSON.stringify({
user: this.user,
sessionid: this.authService.getSessionInfo().id,
entity: entity,
kv: kv,
sqltypes: sqltypes
});
return this.doRequest({
method: 'POST',
url: url,
body: body,
successCallback: this.parseSuccessfulDeleteResponse,
errorCallBack: this.parseUnsuccessfulDeleteResponse
});
}
}
OntimizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
OntimizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib250aW1pemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUdwRSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUFEeEQ7O1FBR1MsV0FBTSxHQUFXLEVBQUUsQ0FBQztLQW1NNUI7SUEvTFEsZ0JBQWdCLENBQUMsTUFBVztRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUMvRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDN0I7SUFFSCxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVksRUFBRSxRQUFnQjtRQUNo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QXVCO1FBRTNELE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXpELEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdELE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pELFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWpFLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUM7UUFFNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFLE1BQU07WUFDZCxFQUFFLEVBQUUsRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFO1lBQ04sUUFBUSxFQUFFLFFBQVE7WUFDbEIsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJO1lBQ1YsZUFBZSxFQUFFLElBQUksQ0FBQyxvQ0FBb0M7WUFDMUQsYUFBYSxFQUFFLElBQUksQ0FBQyxzQ0FBc0M7U0FDM0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFhLEVBQUUsRUFBRSxNQUFlLEVBQUUsUUFBaUI7UUFDL0QsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekQsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFakUsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLENBQUM7UUFFckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sRUFBRSxNQUFNO1lBQ2QsRUFBRSxFQUFFLEVBQUU7WUFDTixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJO1lBQ1YsZUFBZSxFQUFFLElBQUksQ0FBQyw2QkFBNkI7WUFDbkQsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdNLE1BQU0sQ0FBQyxLQUFhLEVBQUUsRUFBRSxLQUFhLEVBQUUsRUFBRSxNQUFlLEVBQUUsUUFBaUI7UUFDaEYsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekQsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFakUsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLENBQUM7UUFFckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sRUFBRSxNQUFNO1lBQ2QsRUFBRSxFQUFFLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRTtZQUNOLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNwQixNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUk7WUFDVixlQUFlLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWEsRUFBRSxFQUFFLE1BQWUsRUFBRSxRQUFpQjtRQUMvRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6RCxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUVqRSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsQ0FBQztRQUVyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7WUFDL0MsTUFBTSxFQUFFLE1BQU07WUFDZCxFQUFFLEVBQUUsRUFBRTtZQUNOLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNwQixNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUk7WUFDVixlQUFlLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDOzs2R0FuTVUsZUFBZTtpSEFBZixlQUFlOzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kYXRhLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT250aW1pemVCYXNlU2VydmljZSB9IGZyb20gJy4vb250aW1pemUtYmFzZS1zZXJ2aWNlLmNsYXNzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9udGltaXplU2VydmljZSBleHRlbmRzIE9udGltaXplQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBJRGF0YVNlcnZpY2Uge1xuXG4gIHB1YmxpYyBlbnRpdHk6IHN0cmluZyA9ICcnO1xuXG4gIHByb3RlY3RlZCB1c2VyOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbmZpZ3VyZVNlcnZpY2UoY29uZmlnOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZyk7XG4gICAgdGhpcy5fc3RhcnRTZXNzaW9uUGF0aCA9IHRoaXMuX2FwcENvbmZpZy5zdGFydFNlc3Npb25QYXRoID8gdGhpcy5fYXBwQ29uZmlnLnN0YXJ0U2Vzc2lvblBhdGggOiAnL3N0YXJ0c2Vzc2lvbic7XG4gICAgdGhpcy51c2VyID0gY29uZmlnLnNlc3Npb24gPyBjb25maWcuc2Vzc2lvbi51c2VyIDogJyc7XG4gICAgaWYgKGNvbmZpZy5lbnRpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbnRpdHkgPSBjb25maWcuZW50aXR5O1xuICAgIH1cbiAgICAvLyBUT0RPIGluaXQgb3RoZXIgcGFyYW1zIGxpa2UgJ2t2JywgJ2F2JywgZXRjLlxuICB9XG5cbiAgcHVibGljIHN0YXJ0c2Vzc2lvbih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bWJlcj4ge1xuICAgIGNvbnN0IGVuY29kZWRQYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmxCYXNlICsgdGhpcy5fc3RhcnRTZXNzaW9uUGF0aCArICc/dXNlcj0nICsgdXNlciArICcmcGFzc3dvcmQ9JyArIGVuY29kZWRQYXNzd29yZDtcbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudW1iZXI+ID0gbmV3IE9ic2VydmFibGUoX3N0YXJ0U2Vzc2lvbk9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQodXJsKS5zdWJzY3JpYmUoKHJlc3A6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAocmVzcCA+PSAwKSB7XG4gICAgICAgICAgX3N0YXJ0U2Vzc2lvbk9ic2VydmVyLm5leHQocmVzcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW52YWxpZCBzZXNzaW9uSWQuLi5cbiAgICAgICAgICBfc3RhcnRTZXNzaW9uT2JzZXJ2ZXIuZXJyb3IoJ0ludmFsaWQgdXNlciBvciBwYXNzd29yZCcpO1xuICAgICAgICB9XG4gICAgICB9LCBlcnJvciA9PiBfc3RhcnRTZXNzaW9uT2JzZXJ2ZXIuZXJyb3IoZXJyb3IpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YU9ic2VydmFibGUucGlwZShzaGFyZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmRzZXNzaW9uKHVzZXI6IHN0cmluZywgc2Vzc2lvbklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsQmFzZSArICcvZW5kc2Vzc2lvbj91c2VyPScgKyB1c2VyICsgJyZzZXNzaW9uaWQ9JyArIHNlc3Npb25JZDtcbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+ID0gbmV3IE9ic2VydmFibGUoX2Nsb3NlU2Vzc2lvbk9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQodXJsKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgIF9jbG9zZVNlc3Npb25PYnNlcnZlci5uZXh0KHJlc3ApO1xuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgfHwgZXJyb3Iuc3RhdHVzID09PSAwIHx8ICFlcnJvci5vaykge1xuICAgICAgICAgIF9jbG9zZVNlc3Npb25PYnNlcnZlci5uZXh0KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9jbG9zZVNlc3Npb25PYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhT2JzZXJ2YWJsZS5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgcHVibGljIGhhc3Nlc3Npb24odXNlcjogc3RyaW5nLCBzZXNzaW9uSWQ6IG51bWJlcik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnVybEJhc2UgKyAnL2hhc3Nlc3Npb24/dXNlcj0nICsgdXNlciArICcmc2Vzc2lvbmlkPScgKyBzZXNzaW9uSWQ7XG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3ApO1xuICAgICAgfSwgZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YU9ic2VydmFibGUucGlwZShzaGFyZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeShrdj86IG9iamVjdCwgYXY/OiBBcnJheTxzdHJpbmc+LCBlbnRpdHk/OiBzdHJpbmcsIHNxbHR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBlbnRpdHkgPSAoVXRpbC5pc0RlZmluZWQoZW50aXR5KSkgPyBlbnRpdHkgOiB0aGlzLmVudGl0eTtcbiAgICAvLyBUT0RPIGltcHJvdmUgdGhpcyAtPiBtZXJnZSBiZXR3ZWVuIGdsb2JhbCBjb25mIGFuZCBzcGVjaWZpYyBwYXJhbXMgb2YgbWV0aG9kIGNhbGxpbmdcbiAgICBrdiA9IChVdGlsLmlzRGVmaW5lZChrdikpID8ga3YgOiB0aGlzLmt2O1xuICAgIGF2ID0gKFV0aWwuaXNEZWZpbmVkKGF2KSkgPyBhdiA6IHRoaXMuYXY7XG4gICAgc3FsdHlwZXMgPSAoVXRpbC5pc0RlZmluZWQoc3FsdHlwZXMpKSA/IHNxbHR5cGVzIDogdGhpcy5zcWx0eXBlcztcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXJsQmFzZX0vcXVlcnlgO1xuXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHVzZXI6IHRoaXMudXNlcixcbiAgICAgIHNlc3Npb25pZDogdGhpcy5hdXRoU2VydmljZS5nZXRTZXNzaW9uSW5mbygpLmlkLFxuICAgICAgdHlwZTogMSxcbiAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAga3Y6IGt2LFxuICAgICAgYXY6IGF2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IHRoaXMucGFyc2VTdWNjZXNzZnVsUXVlcnlSZXNwb25zZSxcbiAgICAgIGVycm9yQ2FsbEJhY2s6IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxRdWVyeVJlc3BvbnNlXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRRdWVyeShrdj86IG9iamVjdCwgYXY/OiBBcnJheTxzdHJpbmc+LCBlbnRpdHk/OiBzdHJpbmcsIHNxbHR5cGVzPzogb2JqZWN0LFxuICAgIG9mZnNldD86IG51bWJlciwgcGFnZXNpemU/OiBudW1iZXIsIG9yZGVyYnk/OiBBcnJheTxvYmplY3Q+KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGVudGl0eSA9IChVdGlsLmlzRGVmaW5lZChlbnRpdHkpKSA/IGVudGl0eSA6IHRoaXMuZW50aXR5O1xuICAgIC8vIFRPRE8gaW1wcm92ZSB0aGlzIC0+IG1lcmdlIGJldHdlZW4gZ2xvYmFsIGNvbmYgYW5kIHNwZWNpZmljIHBhcmFtcyBvZiBtZXRob2QgY2FsbGluZ1xuICAgIGt2ID0gKFV0aWwuaXNEZWZpbmVkKGt2KSkgPyBrdiA6IHRoaXMua3Y7XG4gICAgYXYgPSAoVXRpbC5pc0RlZmluZWQoYXYpKSA/IGF2IDogdGhpcy5hdjtcbiAgICBzcWx0eXBlcyA9IChVdGlsLmlzRGVmaW5lZChzcWx0eXBlcykpID8gc3FsdHlwZXMgOiB0aGlzLnNxbHR5cGVzO1xuICAgIG9yZGVyYnkgPSAoVXRpbC5pc0RlZmluZWQob3JkZXJieSkpID8gb3JkZXJieSA6IHRoaXMub3JkZXJieTtcbiAgICBvZmZzZXQgPSAoVXRpbC5pc0RlZmluZWQob2Zmc2V0KSkgPyBvZmZzZXQgOiB0aGlzLm9mZnNldDtcbiAgICBwYWdlc2l6ZSA9IChVdGlsLmlzRGVmaW5lZChwYWdlc2l6ZSkpID8gcGFnZXNpemUgOiB0aGlzLnBhZ2VzaXplO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfS9hZHZhbmNlZHF1ZXJ5YDtcblxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB1c2VyOiB0aGlzLnVzZXIsXG4gICAgICBzZXNzaW9uaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0U2Vzc2lvbkluZm8oKS5pZCxcbiAgICAgIHR5cGU6IDEsXG4gICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgIGt2OiBrdixcbiAgICAgIGF2OiBhdixcbiAgICAgIHNxbHR5cGVzOiBzcWx0eXBlcyxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgcGFnZVNpemU6IHBhZ2VzaXplLFxuICAgICAgb3JkZXJCeTogb3JkZXJieVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZG9SZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiB0aGlzLnBhcnNlU3VjY2Vzc2Z1bEFkdmFuY2VkUXVlcnlSZXNwb25zZSxcbiAgICAgIGVycm9yQ2FsbEJhY2s6IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxBZHZhbmNlZFF1ZXJ5UmVzcG9uc2VcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnQoYXY6IG9iamVjdCA9IHt9LCBlbnRpdHk/OiBzdHJpbmcsIHNxbHR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBlbnRpdHkgPSAoVXRpbC5pc0RlZmluZWQoZW50aXR5KSkgPyBlbnRpdHkgOiB0aGlzLmVudGl0eTtcbiAgICBhdiA9IChVdGlsLmlzRGVmaW5lZChhdikpID8gYXYgOiB0aGlzLmF2O1xuICAgIHNxbHR5cGVzID0gKFV0aWwuaXNEZWZpbmVkKHNxbHR5cGVzKSkgPyBzcWx0eXBlcyA6IHRoaXMuc3FsdHlwZXM7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9L2luc2VydGA7XG5cbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdXNlcjogdGhpcy51c2VyLFxuICAgICAgc2Vzc2lvbmlkOiB0aGlzLmF1dGhTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCkuaWQsXG4gICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgIGF2OiBhdixcbiAgICAgIHNxbHR5cGVzOiBzcWx0eXBlc1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZG9SZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiB0aGlzLnBhcnNlU3VjY2Vzc2Z1bEluc2VydFJlc3BvbnNlLFxuICAgICAgZXJyb3JDYWxsQmFjazogdGhpcy5wYXJzZVVuc3VjY2Vzc2Z1bEluc2VydFJlc3BvbnNlXG4gICAgfSk7XG4gIH1cblxuXG4gIHB1YmxpYyB1cGRhdGUoa3Y6IG9iamVjdCA9IHt9LCBhdjogb2JqZWN0ID0ge30sIGVudGl0eT86IHN0cmluZywgc3FsdHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGVudGl0eSA9IChVdGlsLmlzRGVmaW5lZChlbnRpdHkpKSA/IGVudGl0eSA6IHRoaXMuZW50aXR5O1xuICAgIGt2ID0gKFV0aWwuaXNEZWZpbmVkKGt2KSkgPyBrdiA6IHRoaXMua3Y7XG4gICAgYXYgPSAoVXRpbC5pc0RlZmluZWQoYXYpKSA/IGF2IDogdGhpcy5hdjtcbiAgICBzcWx0eXBlcyA9IChVdGlsLmlzRGVmaW5lZChzcWx0eXBlcykpID8gc3FsdHlwZXMgOiB0aGlzLnNxbHR5cGVzO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfS91cGRhdGVgO1xuXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHVzZXI6IHRoaXMudXNlcixcbiAgICAgIHNlc3Npb25pZDogdGhpcy5hdXRoU2VydmljZS5nZXRTZXNzaW9uSW5mbygpLmlkLFxuICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgICBrdjoga3YsXG4gICAgICBhdjogYXYsXG4gICAgICBzcWx0eXBlczogc3FsdHlwZXNcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmRvUmVxdWVzdCh7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogdXJsLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy5wYXJzZVN1Y2Nlc3NmdWxVcGRhdGVSZXNwb25zZSxcbiAgICAgIGVycm9yQ2FsbEJhY2s6IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxVcGRhdGVSZXNwb25zZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShrdjogb2JqZWN0ID0ge30sIGVudGl0eT86IHN0cmluZywgc3FsdHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGVudGl0eSA9IChVdGlsLmlzRGVmaW5lZChlbnRpdHkpKSA/IGVudGl0eSA6IHRoaXMuZW50aXR5O1xuICAgIGt2ID0gKFV0aWwuaXNEZWZpbmVkKGt2KSkgPyBrdiA6IHRoaXMua3Y7XG4gICAgc3FsdHlwZXMgPSAoVXRpbC5pc0RlZmluZWQoc3FsdHlwZXMpKSA/IHNxbHR5cGVzIDogdGhpcy5zcWx0eXBlcztcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXJsQmFzZX0vZGVsZXRlYDtcblxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB1c2VyOiB0aGlzLnVzZXIsXG4gICAgICBzZXNzaW9uaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0U2Vzc2lvbkluZm8oKS5pZCxcbiAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAga3Y6IGt2LFxuICAgICAgc3FsdHlwZXM6IHNxbHR5cGVzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kb1JlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IHRoaXMucGFyc2VTdWNjZXNzZnVsRGVsZXRlUmVzcG9uc2UsXG4gICAgICBlcnJvckNhbGxCYWNrOiB0aGlzLnBhcnNlVW5zdWNjZXNzZnVsRGVsZXRlUmVzcG9uc2VcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=