ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
147 lines • 24.3 kB
JavaScript
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
import { map, share } from 'rxjs/operators';
import { AppConfig } from '../config/app-config';
import { Util } from '../util/util';
import { Codes } from '../util/codes';
import { AuthService } from './auth.service';
import { LoginStorageService } from './login-storage.service';
import { OntimizeServiceResponseAdapter } from './ontimize/ontimize-service-response.adapter';
import { OntimizeServiceResponseParser } from './parser/o-service-response.parser';
import { PaginationContextService } from './pagination-context.service';
export class BaseService {
constructor(injector) {
this.injector = injector;
this.httpClient = this.injector.get(HttpClient);
this.router = this.injector.get(Router);
this._config = this.injector.get(AppConfig);
this._appConfig = this._config.getConfiguration();
this.responseParser = this.injector.get(OntimizeServiceResponseParser);
this.authService = this.injector.get(AuthService);
this.loginStorageService = this.injector.get(LoginStorageService);
this.paginationContextService = new PaginationContextService();
this.configureAdapter();
}
configureAdapter() {
this.adapter = this.injector.get(OntimizeServiceResponseAdapter);
}
configureService(config) {
this._urlBase = config.urlBase ? config.urlBase : this._appConfig.apiEndpoint;
}
getDefaultServiceConfiguration(serviceName) {
const configuration = this._config.getServiceConfiguration();
let servConfig = {};
if (serviceName && configuration.hasOwnProperty(serviceName)) {
servConfig = configuration[serviceName];
}
servConfig[Codes.SESSION_KEY] = this.authService.getSessionInfo();
return servConfig;
}
get urlBase() {
return this._urlBase;
}
set urlBase(value) {
this._urlBase = value;
}
doRequest(param) {
const dataObservable = new Observable((observer) => {
const options = param.options || {
headers: this.buildHeaders()
};
options.observe = 'response';
let requestObs;
switch (param.method) {
case 'GET':
requestObs = this.httpClient.get(param.url, options);
break;
case 'PUT':
requestObs = this.httpClient.put(param.url, param.body, options);
break;
case 'DELETE':
const deleteOptions = {
headers: options.headers,
body: param.body
};
deleteOptions.observe = 'response';
requestObs = this.httpClient.delete(param.url, deleteOptions);
break;
case 'POST':
default:
requestObs = this.httpClient.post(param.url, param.body, options);
break;
}
requestObs.pipe(map((data) => {
this.refreshAuthToken(data);
return this.adapter.adapt(data);
})).subscribe(resp => {
(param.successCallback || this.parseSuccessfulResponse).bind(this)(resp, observer);
}, error => {
(param.errorCallBack || this.parseUnsuccessfulResponse).bind(this)(error, observer);
}, () => observer.complete());
});
return dataObservable.pipe(share());
}
buildHeaders() {
return new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json;charset=UTF-8'
});
}
clientErrorFallback(errorCode) {
}
serverErrorFallback(errorCode) {
}
parseSuccessfulResponse(resp, observer) {
this.responseParser.parseSuccessfulResponse(resp, observer, this);
}
parseSuccessfulQueryResponse(resp, observer) {
this.parseSuccessfulResponse(resp, observer);
}
parseSuccessfulAdvancedQueryResponse(resp, observer) {
this.parseSuccessfulResponse(resp, observer);
}
parseSuccessfulInsertResponse(resp, observer) {
this.parseSuccessfulResponse(resp, observer);
}
parseSuccessfulUpdateResponse(resp, observer) {
this.parseSuccessfulResponse(resp, observer);
}
parseSuccessfulDeleteResponse(resp, observer) {
this.parseSuccessfulResponse(resp, observer);
}
parseUnsuccessfulResponse(error, observer) {
this.responseParser.parseUnsuccessfulResponse(error, observer, this);
}
parseUnsuccessfulQueryResponse(resp, observer) {
this.parseUnsuccessfulResponse(resp, observer);
}
parseUnsuccessfulAdvancedQueryResponse(resp, observer) {
this.parseUnsuccessfulResponse(resp, observer);
}
parseUnsuccessfulInsertResponse(resp, observer) {
this.parseUnsuccessfulResponse(resp, observer);
}
parseUnsuccessfulUpdateResponse(resp, observer) {
this.parseUnsuccessfulResponse(resp, observer);
}
parseUnsuccessfulDeleteResponse(resp, observer) {
this.parseUnsuccessfulResponse(resp, observer);
}
refreshAuthToken(res) {
const authToken = res.headers.get('X-Auth-Token');
if (Util.isDefined(authToken)) {
this.loginStorageService.updateSessionId(authToken);
}
}
setPaginationContext(context) {
this.paginationContextService.setContext({ ...this.getPaginationContext(), ...context });
}
getPaginationContext() {
return this.paginationContextService.getContext();
}
reinitializePaginationContext(pageSize) {
this.paginationContextService.reinitializeContext(pageSize);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZXJ2aWNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR25GLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE1BQU0sT0FBTyxXQUFXO0lBZXRCLFlBQXNCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBYSxVQUE4QixDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcs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Q0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2VBZGFwdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLWFkYXB0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlnLnR5cGUnO1xuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RQYXJhbSB9IGZyb20gJy4uL3R5cGVzL3NlcnZpY2UtcmVxdWVzdC1wYXJhbS50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4vYmFzZS1zZXJ2aWNlLXJlc3BvbnNlLmNsYXNzJztcbmltcG9ydCB7IExvZ2luU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2VSZXNwb25zZUFkYXB0ZXIgfSBmcm9tICcuL29udGltaXplL29udGltaXplLXNlcnZpY2UtcmVzcG9uc2UuYWRhcHRlcic7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2VSZXNwb25zZVBhcnNlciB9IGZyb20gJy4vcGFyc2VyL28tc2VydmljZS1yZXNwb25zZS5wYXJzZXInO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvaHR0cC1yZXF1ZXN0LW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGFnaW5hdGlvbi1jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3BhZ2luYXRpb24tY29udGV4dC5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcblxuICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudDtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuXG4gIHByb3RlY3RlZCBfdXJsQmFzZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2FwcENvbmZpZzogQ29uZmlnO1xuICBwcm90ZWN0ZWQgX2NvbmZpZzogQXBwQ29uZmlnO1xuICBwcm90ZWN0ZWQgcmVzcG9uc2VQYXJzZXI6IE9udGltaXplU2VydmljZVJlc3BvbnNlUGFyc2VyO1xuICBwcm90ZWN0ZWQgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYWRhcHRlcjogU2VydmljZVJlc3BvbnNlQWRhcHRlcjxCYXNlU2VydmljZVJlc3BvbnNlPjtcbiAgcHJvdGVjdGVkIGxvZ2luU3RvcmFnZVNlcnZpY2U6IExvZ2luU3RvcmFnZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBwYWdpbmF0aW9uQ29udGV4dFNlcnZpY2U6IFBhZ2luYXRpb25Db250ZXh0U2VydmljZTtcblxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmh0dHBDbGllbnQgPSB0aGlzLmluamVjdG9yLmdldDxIdHRwQ2xpZW50PihIdHRwQ2xpZW50IGFzIFR5cGU8SHR0cENsaWVudD4pO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQ8Um91dGVyPihSb3V0ZXIgYXMgVHlwZTxSb3V0ZXI+KTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmluamVjdG9yLmdldDxBcHBDb25maWc+KEFwcENvbmZpZyBhcyBUeXBlPEFwcENvbmZpZz4pO1xuICAgIHRoaXMuX2FwcENvbmZpZyA9IHRoaXMuX2NvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgdGhpcy5yZXNwb25zZVBhcnNlciA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9udGltaXplU2VydmljZVJlc3BvbnNlUGFyc2VyPihPbnRpbWl6ZVNlcnZpY2VSZXNwb25zZVBhcnNlciBhcyBUeXBlPE9udGltaXplU2VydmljZVJlc3BvbnNlUGFyc2VyPik7XG4gICAgdGhpcy5hdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PEF1dGhTZXJ2aWNlPihBdXRoU2VydmljZSBhcyBUeXBlPEF1dGhTZXJ2aWNlPik7XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8TG9naW5TdG9yYWdlU2VydmljZT4oTG9naW5TdG9yYWdlU2VydmljZSlcbiAgICB0aGlzLnBhZ2luYXRpb25Db250ZXh0U2VydmljZSA9IG5ldyBQYWdpbmF0aW9uQ29udGV4dFNlcnZpY2UoKTsgLy9cbiAgICB0aGlzLmNvbmZpZ3VyZUFkYXB0ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVBZGFwdGVyKCkge1xuICAgIHRoaXMuYWRhcHRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9udGltaXplU2VydmljZVJlc3BvbnNlQWRhcHRlcik7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlU2VydmljZShjb25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3VybEJhc2UgPSBjb25maWcudXJsQmFzZSA/IGNvbmZpZy51cmxCYXNlIDogdGhpcy5fYXBwQ29uZmlnLmFwaUVuZHBvaW50O1xuICB9XG5cbiAgcHVibGljIGdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbihzZXJ2aWNlTmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZy5nZXRTZXJ2aWNlQ29uZmlndXJhdGlvbigpO1xuICAgIGxldCBzZXJ2Q29uZmlnID0ge307XG4gICAgaWYgKHNlcnZpY2VOYW1lICYmIGNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoc2VydmljZU5hbWUpKSB7XG4gICAgICBzZXJ2Q29uZmlnID0gY29uZmlndXJhdGlvbltzZXJ2aWNlTmFtZV07XG4gICAgfVxuICAgIHNlcnZDb25maWdbQ29kZXMuU0VTU0lPTl9LRVldID0gdGhpcy5hdXRoU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIHJldHVybiBzZXJ2Q29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCB1cmxCYXNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybEJhc2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IHVybEJhc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3VybEJhc2UgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkb1JlcXVlc3QocGFyYW06IFNlcnZpY2VSZXF1ZXN0UGFyYW0pOiBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT4ge1xuXG4gICAgY29uc3QgZGF0YU9ic2VydmFibGU6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gcGFyYW0ub3B0aW9ucyB8fCB7XG4gICAgICAgIGhlYWRlcnM6IHRoaXMuYnVpbGRIZWFkZXJzKClcbiAgICAgIH07XG4gICAgICBvcHRpb25zLm9ic2VydmUgPSAncmVzcG9uc2UnO1xuICAgICAgbGV0IHJlcXVlc3RPYnM6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPjtcbiAgICAgIHN3aXRjaCAocGFyYW0ubWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ0dFVCc6XG4gICAgICAgICAgcmVxdWVzdE9icyA9IHRoaXMuaHR0cENsaWVudC5nZXQ8U2VydmljZVJlc3BvbnNlPihwYXJhbS51cmwsIG9wdGlvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQVVQnOlxuICAgICAgICAgIHJlcXVlc3RPYnMgPSB0aGlzLmh0dHBDbGllbnQucHV0PFNlcnZpY2VSZXNwb25zZT4ocGFyYW0udXJsLCBwYXJhbS5ib2R5LCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgICBjb25zdCBkZWxldGVPcHRpb25zOiBIdHRwUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICAgICBib2R5OiBwYXJhbS5ib2R5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBkZWxldGVPcHRpb25zLm9ic2VydmUgPSAncmVzcG9uc2UnO1xuICAgICAgICAgIHJlcXVlc3RPYnMgPSB0aGlzLmh0dHBDbGllbnQuZGVsZXRlPFNlcnZpY2VSZXNwb25zZT4ocGFyYW0udXJsLCBkZWxldGVPcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVxdWVzdE9icyA9IHRoaXMuaHR0cENsaWVudC5wb3N0PFNlcnZpY2VSZXNwb25zZT4ocGFyYW0udXJsLCBwYXJhbS5ib2R5LCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdE9icy5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaEF1dGhUb2tlbihkYXRhKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmFkYXB0KGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgIChwYXJhbS5zdWNjZXNzQ2FsbGJhY2sgfHwgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZSkuYmluZCh0aGlzKShyZXNwLCBvYnNlcnZlcik7XG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIChwYXJhbS5lcnJvckNhbGxCYWNrIHx8IHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxSZXNwb25zZSkuYmluZCh0aGlzKShlcnJvciwgb2JzZXJ2ZXIpO1xuICAgICAgfSwgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGllbnRFcnJvckZhbGxiYWNrKGVycm9yQ29kZTogbnVtYmVyKSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXJ2ZXJFcnJvckZhbGxiYWNrKGVycm9yQ29kZTogbnVtYmVyKSB7XG5cbiAgfVxuXG4gIC8qXG4gICAqIFN1Y2Nlc3NmdWwgcmVzcG9uc2UgcGFyc2VycywgdGhlcmUgaXMgb25lIHBhcnNlciBmb3IgZWFjaCBDUlVEIG1ldGhvZCB3aGljaCBjYWxscyB0byB0aGUgY29tbW9uIHBhcnNlci5cbiAgICogVXNlciBjYW4gb3ZlcndyaXRlIHRoZSBjaG9zZW4gbWV0aG9kcyBwYXJzZXJzIG9yIHRoZSBjb21tb24gcGFyc2VyXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsUmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5yZXNwb25zZVBhcnNlci5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlciwgdGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsUXVlcnlSZXNwb25zZShyZXNwOiBTZXJ2aWNlUmVzcG9uc2UsIG9ic2VydmVyOiBTdWJzY3JpYmVyPFNlcnZpY2VSZXNwb25zZT4pIHtcbiAgICB0aGlzLnBhcnNlU3VjY2Vzc2Z1bFJlc3BvbnNlKHJlc3AsIG9ic2VydmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVN1Y2Nlc3NmdWxBZHZhbmNlZFF1ZXJ5UmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsSW5zZXJ0UmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsVXBkYXRlUmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsRGVsZXRlUmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICAvKlxuICAgKiBVbnN1Y2Nlc3NmdWwgcmVzcG9uc2UgcGFyc2VycywgdGhlcmUgaXMgb25lIHBhcnNlciBmb3IgZWFjaCBDUlVEIG1ldGhvZCB3aGljaCBjYWxscyB0byB0aGUgY29tbW9uIHBhcnNlci5cbiAgICogVXNlciBjYW4gb3ZlcndyaXRlIHRoZSBjaG9zZW4gbWV0aG9kcyBwYXJzZXJzIG9yIHRoZSBjb21tb24gcGFyc2VyXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VVbnN1Y2Nlc3NmdWxSZXNwb25zZShlcnJvcjogYW55LCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5yZXNwb25zZVBhcnNlci5wYXJzZVVuc3VjY2Vzc2Z1bFJlc3BvbnNlKGVycm9yLCBvYnNlcnZlciwgdGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VVbnN1Y2Nlc3NmdWxRdWVyeVJlc3BvbnNlKHJlc3A6IFNlcnZpY2VSZXNwb25zZSwgb2JzZXJ2ZXI6IFN1YnNjcmliZXI8U2VydmljZVJlc3BvbnNlPikge1xuICAgIHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VVbnN1Y2Nlc3NmdWxBZHZhbmNlZFF1ZXJ5UmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVVuc3VjY2Vzc2Z1bFJlc3BvbnNlKHJlc3AsIG9ic2VydmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVVuc3VjY2Vzc2Z1bEluc2VydFJlc3BvbnNlKHJlc3A6IFNlcnZpY2VSZXNwb25zZSwgb2JzZXJ2ZXI6IFN1YnNjcmliZXI8U2VydmljZVJlc3BvbnNlPikge1xuICAgIHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxSZXNwb25zZShyZXNwLCBvYnNlcnZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VVbnN1Y2Nlc3NmdWxVcGRhdGVSZXNwb25zZShyZXNwOiBTZXJ2aWNlUmVzcG9uc2UsIG9ic2VydmVyOiBTdWJzY3JpYmVyPFNlcnZpY2VSZXNwb25zZT4pIHtcbiAgICB0aGlzLnBhcnNlVW5zdWNjZXNzZnVsUmVzcG9uc2UocmVzcCwgb2JzZXJ2ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVW5zdWNjZXNzZnVsRGVsZXRlUmVzcG9uc2UocmVzcDogU2VydmljZVJlc3BvbnNlLCBvYnNlcnZlcjogU3Vic2NyaWJlcjxTZXJ2aWNlUmVzcG9uc2U+KSB7XG4gICAgdGhpcy5wYXJzZVVuc3VjY2Vzc2Z1bFJlc3BvbnNlKHJlc3AsIG9ic2VydmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoQXV0aFRva2VuKHJlczogSHR0cFJlc3BvbnNlPGFueT4pIHtcbiAgICBjb25zdCBhdXRoVG9rZW4gPSByZXMuaGVhZGVycy5nZXQoJ1gtQXV0aC1Ub2tlbicpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChhdXRoVG9rZW4pKSB7XG4gICAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UudXBkYXRlU2Vzc2lvbklkKGF1dGhUb2tlbik7XG4gICAgfVxuICB9XG4gIHNldFBhZ2luYXRpb25Db250ZXh0KGNvbnRleHQ6IFBhZ2luYXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29udGV4dFNlcnZpY2Uuc2V0Q29udGV4dCh7IC4uLnRoaXMuZ2V0UGFnaW5hdGlvbkNvbnRleHQoKSwuLi5jb250ZXh0IH0pO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbkNvbnRleHQoKTogUGFnaW5hdGlvbkNvbnRleHQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uQ29udGV4dFNlcnZpY2UuZ2V0Q29udGV4dCgpO1xuICB9XG5cbiAgcmVpbml0aWFsaXplUGFnaW5hdGlvbkNvbnRleHQocGFnZVNpemU/Om51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbnRleHRTZXJ2aWNlLnJlaW5pdGlhbGl6ZUNvbnRleHQocGFnZVNpemUpO1xuICB9XG5cbn1cbiJdfQ==