ntk-cms-api
Version:
Ntk Cms Api And Model For Typscript
196 lines • 25.3 kB
JavaScript
import { HttpClient } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core';
import { throwError } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
//import { NtkCmsApiStoreService } from '../../reducers/ntkCmsApiStore.service';
export class ApiServerBase {
constructor(http) {
this.http = http;
this.baseUrl = 'https://apicms.ir/api/v2/';
this.userToken = '';
this.deviceToken = '';
this.configApiRetry = 0;
this.keyUserToken = 'userToken';
this.keyDeviceToken = 'deviceToken';
this.keyBaseUrl = 'baseUrl';
this.accessLoad = false;
this.cachApiResult = [];
this.childConstructor();
this.headers = new Map();
}
setConfig(url, apiRetry = 1) {
this.baseUrl = url;
localStorage.setItem(this.keyBaseUrl, url);
this.configApiRetry = apiRetry;
}
cashApiIsValid(serviceNameKay, cashApiSeconds) {
if (cashApiSeconds > 0) {
if (!this.cachApiResult[serviceNameKay])
return false;
if (!this.cachApiResult[serviceNameKay].isSuccess)
return false;
if (this.cachApiResult[serviceNameKay].dateResult && (new Date().getTime() - this.cachApiResult[serviceNameKay].dateResult) < cashApiSeconds)
return true;
}
return false;
}
childConstructor() {
// test
}
getBaseUrl() {
const BaseUrl = localStorage.getItem(this.keyBaseUrl);
if (BaseUrl && BaseUrl.length > 0) {
return BaseUrl;
}
return this.baseUrl;
}
getModuleControllerUrl() {
return 'Empty';
}
setHeaders(key, value) {
this.headers.set(key, value);
}
setAccessLoad(status = true) {
this.accessLoad = status;
}
setAccessDataType(status) {
this.accessDataType = status;
}
getUserToken() {
if (this.userToken && this.userToken.length > 0) {
return this.userToken;
}
const token = localStorage.getItem(this.keyUserToken);
if (token && token.length > 0) {
return token;
}
const title = 'تایید توکن';
const message = 'لطفا مجددا وارد حساب کاربری خود شوید';
return '';
}
getDeviceToken() {
if (this.deviceToken && this.deviceToken.length > 0) {
return this.deviceToken;
}
const token = localStorage.getItem(this.keyDeviceToken);
if (token && token.length > 0) {
return token;
}
return '';
}
setToken(userToken, deviceToken, refreshToken) {
if ((!userToken || userToken.length === 0) && (!deviceToken || deviceToken.length === 0)) {
localStorage.removeItem(this.keyUserToken);
localStorage.removeItem(this.keyDeviceToken);
return;
}
localStorage.setItem(this.keyUserToken, userToken);
if (deviceToken && deviceToken.length > 0) {
localStorage.setItem(this.keyDeviceToken, deviceToken);
}
}
setDeviceToken(deviceToken) {
if (!deviceToken || deviceToken.length === 0) {
localStorage.removeItem(this.keyDeviceToken);
return;
}
localStorage.setItem(this.keyDeviceToken, deviceToken);
}
removeToken() {
localStorage.removeItem(this.keyUserToken);
localStorage.removeItem(this.keyDeviceToken);
}
getHeaders() {
let dateTime = new Date();
this.headers.set('Date-Time', dateTime.toJSON());
this.headers.set('Date-Time-Zone', (dateTime.getTimezoneOffset() * -1).toString());
/*Authorization*/
if (this.getUserToken() && this.getUserToken().length > 1) {
this.headers.set('Authorization', this.getUserToken());
}
else if (this.headers.has('Authorization')) {
this.headers.delete('Authorization');
}
/*DeviceToken*/
if (this.getDeviceToken() && this.getDeviceToken().length > 1) {
this.headers.set('DeviceToken', this.getDeviceToken());
}
else if (this.headers.has('DeviceToken')) {
this.headers.delete('DeviceToken');
}
/*AccessLoad*/
if (this.accessLoad) {
this.headers.set('AccessLoad', 'true');
}
else if (this.headers.has('AccessLoad')) {
this.headers.delete('AccessLoad');
}
/*AccessDataType*/
if (this.accessDataType) {
this.headers.set('AccessDataType', this.accessDataType.toString());
}
else if (this.headers.has('AccessDataType')) {
this.headers.delete('AccessDataType');
}
const retOut = Object.create(null);
for (const [k, v] of this.headers) {
retOut[k] = v; // look out! Key must be a string!
}
return retOut;
}
errorExceptionResultCheck(model) {
if (model) {
if (!model.isSuccess) {
const title = 'خطا در دریافت اطلاعات از سرور';
const message = model.errorMessage;
}
}
return model;
}
errorExceptionResultBaseCheck(model) {
if (model) {
if (!model.isSuccess) {
const title = 'خطا در دریافت اطلاعات از سرور';
const message = model.errorMessage;
}
}
// this.loadingStatus=false;
return model;
}
errorExceptionResultCheckExportFile(model) {
if (model) {
if (!model.isSuccess) {
const title = 'خطا در دریافت اطلاعات از سرور';
const message = model.errorMessage;
}
}
// this.loadingStatus=false;
return model;
}
handleError(error, caught) {
let errorMessage = error.message;
if (error && error.status) {
// server-side error
errorMessage = `Cms Error Code: ${error.status}\nMessage: ${error.message}`;
if (error.status === 401 || error.status === '401') {
const title = 'خطای امنیتی';
const message = 'لطفا مجدد وارد سیستم شود';
}
}
else if (error.error instanceof ErrorEvent) {
// client-side error
errorMessage = `Cms Error: ${error.error.message}`;
}
return throwError(errorMessage);
}
}
ApiServerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiServerBase, deps: [{ token: HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
ApiServerBase.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiServerBase });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiServerBase, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.HttpClient, decorators: [{
type: Inject,
args: [HttpClient]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpU2VydmVyQmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnRrLWNtcy1hcGkvc3JjL2xpYi9zZXJ2aWNlL2Jhc2UvYXBpU2VydmVyQmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFLOUMsZ0ZBQWdGO0FBSWhGLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQXVDLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFJaEQsWUFBTyxHQUFHLDJCQUEyQixDQUFDO1FBQ3RDLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUMxQixpQkFBWSxHQUFHLFdBQVcsQ0FBQztRQUMzQixtQkFBYyxHQUFHLGFBQWEsQ0FBQztRQUMvQixlQUFVLEdBQUcsU0FBUyxDQUFDO1FBRWYsZUFBVSxHQUFHLEtBQUssQ0FBQztRQU8zQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQWxCakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUMzQyxDQUFDO0lBV0QsU0FBUyxDQUFDLEdBQVcsRUFBRSxRQUFRLEdBQUcsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENB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LENBQUM7SUFDRCxXQUFXLENBQUMsS0FBVSxFQUFFLE1BQXVCO1FBQzdDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN6QixvQkFBb0I7WUFDcEIsWUFBWSxHQUFHLG1CQUFtQixLQUFLLENBQUMsTUFBTSxjQUFjLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO2dCQUNsRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLDBCQUEwQixDQUFDO2FBQzVDO1NBQ0Y7YUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksVUFBVSxFQUFFO1lBQzVDLG9CQUFvQjtZQUNwQixZQUFZLEdBQUcsY0FBYyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MkdBakxVLGFBQWEsa0JBQ0osVUFBVTsrR0FEbkIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkFFSSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFcnJvckV4Y2VwdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9lbnRpdHkvYmFzZS9lcnJvckV4Y2VwdGlvblJlc3VsdCc7XHJcbmltcG9ydCB7IEVycm9yRXhjZXB0aW9uUmVzdWx0QmFzZSB9IGZyb20gJy4uLy4uL21vZGVscy9lbnRpdHkvYmFzZS9lcnJvckV4Y2VwdGlvblJlc3VsdEJhc2UnO1xyXG5pbXBvcnQgeyBFcnJvckV4Y2VwdGlvblJlc3VsdEV4cG9ydEZpbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW50aXR5L2Jhc2UvZXJyb3JFeGNlcHRpb25SZXN1bHRFeHBvcnRGaWxlJztcclxuaW1wb3J0IHsgTWFuYWdlVXNlckFjY2Vzc0RhdGFUeXBlc0VudW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvZW51bXMvYmFzZS9tYW5hZ2VVc2VyQWNjZXNzRGF0YVR5cGVzRW51bSc7XHJcbi8vaW1wb3J0IHsgTnRrQ21zQXBpU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVkdWNlcnMvbnRrQ21zQXBpU3RvcmUuc2VydmljZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBpU2VydmVyQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBwdWJsaWMgaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgdGhpcy5jaGlsZENvbnN0cnVjdG9yKCk7XHJcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIH1cclxuICBwdWJsaWMgYmFzZVVybCA9ICdodHRwczovL2FwaWNtcy5pci9hcGkvdjIvJztcclxuICBwdWJsaWMgdXNlclRva2VuID0gJyc7XHJcbiAgcHVibGljIGRldmljZVRva2VuID0gJyc7XHJcbiAgcHVibGljIGNvbmZpZ0FwaVJldHJ5ID0gMDtcclxuICBrZXlVc2VyVG9rZW4gPSAndXNlclRva2VuJztcclxuICBrZXlEZXZpY2VUb2tlbiA9ICdkZXZpY2VUb2tlbic7XHJcbiAga2V5QmFzZVVybCA9ICdiYXNlVXJsJztcclxuICBwcml2YXRlIGhlYWRlcnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJpdmF0ZSBhY2Nlc3NMb2FkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBhY2Nlc3NEYXRhVHlwZTogTWFuYWdlVXNlckFjY2Vzc0RhdGFUeXBlc0VudW07XHJcbiAgc2V0Q29uZmlnKHVybDogc3RyaW5nLCBhcGlSZXRyeSA9IDEpOiB2b2lkIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IHVybDtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5QmFzZVVybCwgdXJsKTtcclxuICAgIHRoaXMuY29uZmlnQXBpUmV0cnkgPSBhcGlSZXRyeTtcclxuICB9XHJcbiAgY2FjaEFwaVJlc3VsdCA9IFtdO1xyXG4gIGNhc2hBcGlJc1ZhbGlkKHNlcnZpY2VOYW1lS2F5OiBzdHJpbmcsIGNhc2hBcGlTZWNvbmRzPzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY2FzaEFwaVNlY29uZHMgPiAwKSB7XHJcbiAgICAgIGlmICghdGhpcy5jYWNoQXBpUmVzdWx0W3NlcnZpY2VOYW1lS2F5XSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghdGhpcy5jYWNoQXBpUmVzdWx0W3NlcnZpY2VOYW1lS2F5XS5pc1N1Y2Nlc3MpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5jYWNoQXBpUmVzdWx0W3NlcnZpY2VOYW1lS2F5XS5kYXRlUmVzdWx0ICYmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuY2FjaEFwaVJlc3VsdFtzZXJ2aWNlTmFtZUtheV0uZGF0ZVJlc3VsdCkgPCBjYXNoQXBpU2Vjb25kcylcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgY2hpbGRDb25zdHJ1Y3RvcigpOiBhbnkge1xyXG4gICAgLy8gdGVzdFxyXG4gIH1cclxuICBnZXRCYXNlVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBCYXNlVXJsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlCYXNlVXJsKTtcclxuICAgIGlmIChCYXNlVXJsICYmIEJhc2VVcmwubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gQmFzZVVybDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmJhc2VVcmw7XHJcbiAgfVxyXG4gIGdldE1vZHVsZUNvbnRyb2xsZXJVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnRW1wdHknO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZGVycyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICB9XHJcbiAgc2V0QWNjZXNzTG9hZChzdGF0dXM6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjY2Vzc0xvYWQgPSBzdGF0dXM7XHJcbiAgfVxyXG4gIHNldEFjY2Vzc0RhdGFUeXBlKHN0YXR1czogTWFuYWdlVXNlckFjY2Vzc0RhdGFUeXBlc0VudW0pOiB2b2lkIHtcclxuICAgIHRoaXMuYWNjZXNzRGF0YVR5cGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy51c2VyVG9rZW4gJiYgdGhpcy51c2VyVG9rZW4ubGVuZ3RoID4gMCkgeyByZXR1cm4gdGhpcy51c2VyVG9rZW47IH1cclxuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlVc2VyVG9rZW4pO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRva2VuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGl0bGUgPSAn2KrYp9uM24zYryDYqtmI2qnZhic7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gJ9mE2LfZgdinINmF2KzYr9iv2Kcg2YjYp9ix2K8g2K3Ys9in2Kgg2qnYp9ix2KjYsduMINiu2YjYryDYtNmI24zYryc7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIGdldERldmljZVRva2VuKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlVG9rZW4gJiYgdGhpcy5kZXZpY2VUb2tlbi5sZW5ndGggPiAwKSB7IHJldHVybiB0aGlzLmRldmljZVRva2VuOyB9XHJcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5RGV2aWNlVG9rZW4pO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRva2VuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBzZXRUb2tlbih1c2VyVG9rZW46IHN0cmluZywgZGV2aWNlVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgoIXVzZXJUb2tlbiB8fCB1c2VyVG9rZW4ubGVuZ3RoID09PSAwKSAmJiAoIWRldmljZVRva2VuIHx8IGRldmljZVRva2VuLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5rZXlVc2VyVG9rZW4pO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleURldmljZVRva2VuKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlVc2VyVG9rZW4sIHVzZXJUb2tlbik7XHJcbiAgICBpZiAoZGV2aWNlVG9rZW4gJiYgZGV2aWNlVG9rZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleURldmljZVRva2VuLCBkZXZpY2VUb2tlbik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldERldmljZVRva2VuKGRldmljZVRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghZGV2aWNlVG9rZW4gfHwgZGV2aWNlVG9rZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5RGV2aWNlVG9rZW4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleURldmljZVRva2VuLCBkZXZpY2VUb2tlbik7XHJcbiAgfVxyXG4gIHJlbW92ZVRva2VuKCk6IHZvaWQge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5rZXlVc2VyVG9rZW4pO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5rZXlEZXZpY2VUb2tlbik7XHJcbiAgfVxyXG4gIGdldEhlYWRlcnMoKTogYW55IHtcclxuICAgIGxldCBkYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmhlYWRlcnMuc2V0KCdEYXRlLVRpbWUnLCBkYXRlVGltZS50b0pTT04oKSk7XHJcbiAgICB0aGlzLmhlYWRlcnMuc2V0KCdEYXRlLVRpbWUtWm9uZScsIChkYXRlVGltZS5nZXRUaW1lem9uZU9mZnNldCgpKi0xKS50b1N0cmluZygpKTtcclxuICAgIC8qQXV0aG9yaXphdGlvbiovXHJcbiAgICBpZiAodGhpcy5nZXRVc2VyVG9rZW4oKSAmJiB0aGlzLmdldFVzZXJUb2tlbigpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0VXNlclRva2VuKCkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmhlYWRlcnMuaGFzKCdBdXRob3JpemF0aW9uJykpIHtcclxuICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZSgnQXV0aG9yaXphdGlvbicpO1xyXG4gICAgfVxyXG4gICAgLypEZXZpY2VUb2tlbiovXHJcbiAgICBpZiAodGhpcy5nZXREZXZpY2VUb2tlbigpICYmIHRoaXMuZ2V0RGV2aWNlVG9rZW4oKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ0RldmljZVRva2VuJywgdGhpcy5nZXREZXZpY2VUb2tlbigpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5oZWFkZXJzLmhhcygnRGV2aWNlVG9rZW4nKSkge1xyXG4gICAgICB0aGlzLmhlYWRlcnMuZGVsZXRlKCdEZXZpY2VUb2tlbicpO1xyXG4gICAgfVxyXG4gICAgLypBY2Nlc3NMb2FkKi9cclxuICAgIGlmICh0aGlzLmFjY2Vzc0xvYWQpIHtcclxuICAgICAgdGhpcy5oZWFkZXJzLnNldCgnQWNjZXNzTG9hZCcsICd0cnVlJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnMuaGFzKCdBY2Nlc3NMb2FkJykpIHtcclxuICAgICAgdGhpcy5oZWFkZXJzLmRlbGV0ZSgnQWNjZXNzTG9hZCcpO1xyXG4gICAgfVxyXG4gICAgLypBY2Nlc3NEYXRhVHlwZSovXHJcbiAgICBpZiAodGhpcy5hY2Nlc3NEYXRhVHlwZSkge1xyXG4gICAgICB0aGlzLmhlYWRlcnMuc2V0KCdBY2Nlc3NEYXRhVHlwZScsIHRoaXMuYWNjZXNzRGF0YVR5cGUudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnMuaGFzKCdBY2Nlc3NEYXRhVHlwZScpKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVycy5kZWxldGUoJ0FjY2Vzc0RhdGFUeXBlJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRPdXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5oZWFkZXJzKSB7XHJcbiAgICAgIHJldE91dFtrXSA9IHY7IC8vIGxvb2sgb3V0ISBLZXkgbXVzdCBiZSBhIHN0cmluZyFcclxuICAgIH1cclxuICAgIHJldHVybiByZXRPdXQ7XHJcbiAgfVxyXG5cclxuICBlcnJvckV4Y2VwdGlvblJlc3VsdENoZWNrPFRNb2RlbD4obW9kZWw6IEVycm9yRXhjZXB0aW9uUmVzdWx0PFRNb2RlbD4pOiBFcnJvckV4Y2VwdGlvblJlc3VsdDxUTW9kZWw+IHtcclxuICAgIGlmIChtb2RlbCkge1xyXG4gICAgICBpZiAoIW1vZGVsLmlzU3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gJ9iu2LfYpyDYr9ixINiv2LHbjNin2YHYqiDYp9i32YTYp9i52KfYqiDYp9iyINiz2LHZiNixJztcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbW9kZWwuZXJyb3JNZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG4gIGVycm9yRXhjZXB0aW9uUmVzdWx0QmFzZUNoZWNrKG1vZGVsOiBFcnJvckV4Y2VwdGlvblJlc3VsdEJhc2UpOiBFcnJvckV4Y2VwdGlvblJlc3VsdEJhc2Uge1xyXG4gICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgIGlmICghbW9kZWwuaXNTdWNjZXNzKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSAn2K7Yt9inINiv2LEg2K/YsduM2KfZgdiqINin2LfZhNin2LnYp9iqINin2LIg2LPYsdmI2LEnO1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtb2RlbC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoaXMubG9hZGluZ1N0YXR1cz1mYWxzZTtcclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcbiAgZXJyb3JFeGNlcHRpb25SZXN1bHRDaGVja0V4cG9ydEZpbGUobW9kZWw6IEVycm9yRXhjZXB0aW9uUmVzdWx0RXhwb3J0RmlsZSk6IEVycm9yRXhjZXB0aW9uUmVzdWx0RXhwb3J0RmlsZSB7XHJcbiAgICBpZiAobW9kZWwpIHtcclxuICAgICAgaWYgKCFtb2RlbC5pc1N1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9ICfYrti32Kcg2K/YsSDYr9ix24zYp9mB2Kog2KfYt9mE2KfYudin2Kog2KfYsiDYs9ix2YjYsSc7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG1vZGVsLmVycm9yTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5sb2FkaW5nU3RhdHVzPWZhbHNlO1xyXG4gICAgcmV0dXJuIG1vZGVsO1xyXG4gIH1cclxuICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgIGlmIChlcnJvciAmJiBlcnJvci5zdGF0dXMpIHtcclxuICAgICAgLy8gc2VydmVyLXNpZGUgZXJyb3JcclxuICAgICAgZXJyb3JNZXNzYWdlID0gYENtcyBFcnJvciBDb2RlOiAke2Vycm9yLnN0YXR1c31cXG5NZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YDtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gJzQwMScpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9ICfYrti32KfbjCDYp9mF2YbbjNiq24wnO1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAn2YTYt9mB2Kcg2YXYrNiv2K8g2YjYp9ix2K8g2LPbjNiz2KrZhSDYtNmI2K8nO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAvLyBjbGllbnQtc2lkZSBlcnJvclxyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgQ21zIEVycm9yOiAke2Vycm9yLmVycm9yLm1lc3NhZ2V9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gIH1cclxufVxyXG4iXX0=