UNPKG

ontimize-web-ngx

Version:
147 lines 24.3 kB
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==