@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
158 lines • 19.5 kB
JavaScript
import { Injectable } from '@angular/core';
import { FetchClient, InventoryService } from '@c8y/client';
import { Router } from '@angular/router';
import { AlertService } from '@c8y/ngx-components';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/client";
import * as i2 from "@angular/router";
import * as i3 from "@c8y/ngx-components";
export class OpcuaService {
constructor(client, inventoryService, router, alertService) {
this.client = client;
this.inventoryService = inventoryService;
this.router = router;
this.alertService = alertService;
this.microserviceUrl = '/service/opcua-mgmt-service/server';
this.deviceTypeProtocolUrl = '/service/opcua-mgmt-service/deviceTypes';
this.header = { 'Content-Type': 'application/json' };
this.binaryService = inventoryService.binary;
}
getServers(id) {
if (id && id.length > 0) {
const options = {
method: 'GET',
headers: this.header
};
return this.client.fetch(`${this.microserviceUrl}/${id}`, options);
}
}
createServer(data) {
if (this.doesGatewayIdExist(data)) {
this.cleanUpPayload(data);
const options = {
method: 'POST',
headers: this.header,
body: JSON.stringify(data)
};
return this.client.fetch(`${this.microserviceUrl}`, options);
}
}
async updateServer(server) {
if (this.doesGatewayIdExist(server) && this.doesIdExist(server)) {
this.cleanUpPayload(server);
const options = {
method: 'POST',
headers: this.header,
body: JSON.stringify(server)
};
const res = await this.client.fetch(`${this.microserviceUrl}`, options);
let data;
try {
data = await res.json();
}
catch (e) {
// nothing
}
if (res.status !== 200) {
this.alertService.addServerFailure({ data, res });
}
else {
return data;
}
}
}
removeServer(data) {
if (this.doesGatewayIdExist(data) && this.doesIdExist(data)) {
const options = {
method: 'DELETE'
};
return this.client.fetch(`${this.microserviceUrl}/${data.gatewayId}/${data.id}`, options);
}
}
getKeystore(binaryId) {
if (binaryId && binaryId.length > 0) {
return this.inventoryService.detail(binaryId);
}
return null;
}
uploadKeystore(file) {
if (file && file.size > 0) {
return this.binaryService.create(file);
}
return Promise.reject('Invalid file');
}
async updateKeystore(id, file) {
if (id && id.length > 0 && file && file.size > 0) {
const { res } = await this.removeKeystore(id);
if (res && res.status === 204) {
return this.uploadKeystore(file);
}
}
return Promise.reject('Invalid file');
}
removeKeystore(id) {
if (id && id.length > 0) {
return this.binaryService.delete(id);
}
}
getMoId() {
const currentUrl = this.router.routerState.snapshot.url;
const isDevice = new RegExp(/device\/\d+/).test(currentUrl);
if (isDevice) {
return currentUrl.match(/\d+/)[0];
}
return '';
}
getId() {
const currentUrl = this.router.routerState.snapshot.url;
const isDeviceprotocol = new RegExp(/deviceprotocols/).test(currentUrl);
if (isDeviceprotocol && RegExp(/\d+$/).test(currentUrl)) {
return currentUrl.match(/\d+$/)[0];
}
}
async getDeviceProtocol(id) {
const options = {
method: 'GET',
headers: this.header
};
return this.client.fetch(`${this.deviceTypeProtocolUrl}/${id}`, options);
}
async updateDeviceProtocol(data) {
const options = {
method: 'PUT',
headers: this.header,
body: JSON.stringify(data)
};
return this.client.fetch(`${this.deviceTypeProtocolUrl}/${data.id}`, options);
}
async createDeviceProtocol(data) {
const options = {
method: 'POST',
headers: this.header,
body: JSON.stringify(data)
};
return this.client.fetch(`${this.deviceTypeProtocolUrl}`, options);
}
doesGatewayIdExist(data) {
return data && data.gatewayId && data.gatewayId.length > 0;
}
doesIdExist(data) {
return data && data.id && data.id.length > 0 && data.id !== 'new';
}
cleanUpPayload(data) {
if (data) {
if (data.id && data.id === 'new') {
delete data.id;
}
if (data.quickInfo) {
delete data.quickInfo;
}
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpcuaService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i2.Router }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpcuaService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OpcuaService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i2.Router }, { type: i3.AlertService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BjdWFTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvdG9jb2wtb3BjdWEvb3BjdWFTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBaUIsZ0JBQWdCLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBRW5HLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBR25ELE1BQU0sT0FBTyxZQUFZO0lBTXZCLFlBQ1UsTUFBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLE1BQWMsRUFDZCxZQUEwQjtRQUgxQixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRWxDLElBQUksQ0FBQyxlQUFlLEdBQUcsb0NBQW9DLENBQUM7UUFDNUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHlDQUF5QyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQVU7UUFDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNyQixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFH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QUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDM0IsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBaUI7UUFDMUMsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFpQjtRQUNuQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQztJQUNwRSxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQWlCO1FBQ3RDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FuS1UsWUFBWTttSEFBWixZQUFZOzs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmV0Y2hDbGllbnQsIElGZXRjaE9wdGlvbnMsIEludmVudG9yeVNlcnZpY2UsIEludmVudG9yeUJpbmFyeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPcGN1YVNlcnZlciB9IGZyb20gJy4vb3BjdWEtc2VydmVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPcGN1YVNlcnZpY2Uge1xuICBwcml2YXRlIGJpbmFyeVNlcnZpY2U6IEludmVudG9yeUJpbmFyeVNlcnZpY2U7XG4gIHByaXZhdGUgbWljcm9zZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgZGV2aWNlVHlwZVByb3RvY29sVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgaGVhZGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5taWNyb3NlcnZpY2VVcmwgPSAnL3NlcnZpY2Uvb3BjdWEtbWdtdC1zZXJ2aWNlL3NlcnZlcic7XG4gICAgdGhpcy5kZXZpY2VUeXBlUHJvdG9jb2xVcmwgPSAnL3NlcnZpY2Uvb3BjdWEtbWdtdC1zZXJ2aWNlL2RldmljZVR5cGVzJztcbiAgICB0aGlzLmhlYWRlciA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgIHRoaXMuYmluYXJ5U2VydmljZSA9IGludmVudG9yeVNlcnZpY2UuYmluYXJ5O1xuICB9XG5cbiAgZ2V0U2VydmVycyhpZDogc3RyaW5nKSB7XG4gICAgaWYgKGlkICYmIGlkLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmZldGNoKGAke3RoaXMubWljcm9zZXJ2aWNlVXJsfS8ke2lkfWAsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVNlcnZlcihkYXRhOiBPcGN1YVNlcnZlcikge1xuICAgIGlmICh0aGlzLmRvZXNHYXRld2F5SWRFeGlzdChkYXRhKSkge1xuICAgICAgdGhpcy5jbGVhblVwUGF5bG9hZChkYXRhKTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcixcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jbGllbnQuZmV0Y2goYCR7dGhpcy5taWNyb3NlcnZpY2VVcmx9YCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlU2VydmVyKHNlcnZlcjogT3BjdWFTZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5kb2VzR2F0ZXdheUlkRXhpc3Qoc2VydmVyKSAmJiB0aGlzLmRvZXNJZEV4aXN0KHNlcnZlcikpIHtcbiAgICAgIHRoaXMuY2xlYW5VcFBheWxvYWQoc2VydmVyKTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcixcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoc2VydmVyKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LmZldGNoKGAke3RoaXMubWljcm9zZXJ2aWNlVXJsfWAsIG9wdGlvbnMpO1xuICAgICAgbGV0IGRhdGE7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm90aGluZ1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoeyBkYXRhLCByZXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmVTZXJ2ZXIoZGF0YTogT3BjdWFTZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5kb2VzR2F0ZXdheUlkRXhpc3QoZGF0YSkgJiYgdGhpcy5kb2VzSWRFeGlzdChkYXRhKSkge1xuICAgICAgY29uc3Qgb3B0aW9uczogSUZldGNoT3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5mZXRjaChgJHt0aGlzLm1pY3Jvc2VydmljZVVybH0vJHtkYXRhLmdhdGV3YXlJZH0vJHtkYXRhLmlkfWAsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldEtleXN0b3JlKGJpbmFyeUlkOiBzdHJpbmcpIHtcbiAgICBpZiAoYmluYXJ5SWQgJiYgYmluYXJ5SWQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHVwbG9hZEtleXN0b3JlKGZpbGU6IEZpbGUpIHtcbiAgICBpZiAoZmlsZSAmJiBmaWxlLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5iaW5hcnlTZXJ2aWNlLmNyZWF0ZShmaWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdJbnZhbGlkIGZpbGUnKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUtleXN0b3JlKGlkOiBzdHJpbmcsIGZpbGU6IEZpbGUpIHtcbiAgICBpZiAoaWQgJiYgaWQubGVuZ3RoID4gMCAmJiBmaWxlICYmIGZpbGUuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IHsgcmVzIH0gPSBhd2FpdCB0aGlzLnJlbW92ZUtleXN0b3JlKGlkKTtcbiAgICAgIGlmIChyZXMgJiYgcmVzLnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZEtleXN0b3JlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0ludmFsaWQgZmlsZScpO1xuICB9XG5cbiAgcmVtb3ZlS2V5c3RvcmUoaWQ6IHN0cmluZykge1xuICAgIGlmIChpZCAmJiBpZC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5iaW5hcnlTZXJ2aWNlLmRlbGV0ZShpZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TW9JZCgpIHtcbiAgICBjb25zdCBjdXJyZW50VXJsOiBzdHJpbmcgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmw7XG4gICAgY29uc3QgaXNEZXZpY2U6IGJvb2xlYW4gPSBuZXcgUmVnRXhwKC9kZXZpY2VcXC9cXGQrLykudGVzdChjdXJyZW50VXJsKTtcbiAgICBpZiAoaXNEZXZpY2UpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VXJsLm1hdGNoKC9cXGQrLylbMF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldElkKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVcmw6IHN0cmluZyA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybDtcbiAgICBjb25zdCBpc0RldmljZXByb3RvY29sOiBib29sZWFuID0gbmV3IFJlZ0V4cCgvZGV2aWNlcHJvdG9jb2xzLykudGVzdChjdXJyZW50VXJsKTtcbiAgICBpZiAoaXNEZXZpY2Vwcm90b2NvbCAmJiBSZWdFeHAoL1xcZCskLykudGVzdChjdXJyZW50VXJsKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRVcmwubWF0Y2goL1xcZCskLylbMF07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0RGV2aWNlUHJvdG9jb2woaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5mZXRjaChgJHt0aGlzLmRldmljZVR5cGVQcm90b2NvbFVybH0vJHtpZH1gLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURldmljZVByb3RvY29sKGRhdGEpIHtcbiAgICBjb25zdCBvcHRpb25zOiBJRmV0Y2hPcHRpb25zID0ge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5mZXRjaChgJHt0aGlzLmRldmljZVR5cGVQcm90b2NvbFVybH0vJHtkYXRhLmlkfWAsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGV2aWNlUHJvdG9jb2woZGF0YSkge1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5mZXRjaChgJHt0aGlzLmRldmljZVR5cGVQcm90b2NvbFVybH1gLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9lc0dhdGV3YXlJZEV4aXN0KGRhdGE6IE9wY3VhU2VydmVyKSB7XG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YS5nYXRld2F5SWQgJiYgZGF0YS5nYXRld2F5SWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgZG9lc0lkRXhpc3QoZGF0YTogT3BjdWFTZXJ2ZXIpIHtcbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmlkICYmIGRhdGEuaWQubGVuZ3RoID4gMCAmJiBkYXRhLmlkICE9PSAnbmV3JztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFBheWxvYWQoZGF0YTogT3BjdWFTZXJ2ZXIpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEuaWQgJiYgZGF0YS5pZCA9PT0gJ25ldycpIHtcbiAgICAgICAgZGVsZXRlIGRhdGEuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5xdWlja0luZm8pIHtcbiAgICAgICAgZGVsZXRlIGRhdGEucXVpY2tJbmZvO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19