UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

105 lines 16.4 kB
import { Component } from '@angular/core'; import { ApplicationService } from '@c8y/client'; import { AlertService, ContextRouteService, gettext, ModalService, Status, TabsService } from '@c8y/ngx-components'; import { isEmpty } from 'lodash'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; import * as i2 from "@c8y/ngx-components/ecosystem/shared"; import * as i3 from "@c8y/ngx-components"; import * as i4 from "@c8y/client"; import * as i5 from "@angular/common"; export class SubscriptionModalComponent { constructor(bsModalRef, ecosystemService, tabsService, modal, applicationService, alertService, contextRouteService) { this.bsModalRef = bsModalRef; this.ecosystemService = ecosystemService; this.tabsService = tabsService; this.modal = modal; this.applicationService = applicationService; this.alertService = alertService; this.contextRouteService = contextRouteService; this.RETRY_TIMEOUT = 3000; this.isLoading = false; this.result = new Promise(resolve => { this._resolve = resolve; }); this.retryCounter = 0; this.TABS = ['Logs', 'Status']; } ngOnInit() { if (this.isSubscribed) { this.unsubscribe(); } else { this.subscribe(); } } async subscribe() { this.retryCounter = 0; this.isLoading = true; this.message = gettext('Subscribing…'); await this.ecosystemService.subscribeApp(this.application); this.getStatusDetails('subscribe'); } async unsubscribe() { this.retryCounter = 0; this.isLoading = true; this.message = gettext('Unsubscribing…'); await this.ecosystemService.unsubscribeApp(this.application); this.getStatusDetails('unsubscribe'); } async getStatusDetails(action) { this.contextRouteService.refreshContext(); const actionSuccessful = action === 'subscribe' ? await this.onSubscribe() : this.onUnsubscribe(); if (actionSuccessful) { return this.hideSubscriptionModal(); } if (this.retryCounter === 4) { this.showWarningModal(action); return this.hideSubscriptionModal(); } this.retryCounter += 1; setTimeout(async () => { this.getStatusDetails(action); }, this.RETRY_TIMEOUT); } async onSubscribe() { try { if (!this.application.activeVersionId) { return true; } const res = (await this.applicationService.getStatusDetails(this.application)).data[0]; return this.shouldShowMSSpecificTabs(res); } catch (er) { this.alertService.addServerFailure(er); } } // Checks if the UI should show tabs with logs and status shouldShowMSSpecificTabs(mo) { return !isEmpty(mo.c8y_Status?.instances) && !!mo.c8y_SupportedLogs; } onUnsubscribe() { return !this.tabsService.areAvailable(this.TABS); } hideSubscriptionModal() { this._resolve(); this.bsModalRef.hide(); this.isLoading = false; } showWarningModal(action) { const title = gettext('Warning'); const body = action === 'subscribe' ? gettext('Something went wrong, please refresh the page or resubscribe the application.') : gettext('Something went wrong, please refresh the page or retry to unsubscribe from the application.'); this.modal.acknowledge(title, body, Status.WARNING, gettext('Close')); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SubscriptionModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.EcosystemService }, { token: i3.TabsService }, { token: i3.ModalService }, { token: i4.ApplicationService }, { token: i3.AlertService }, { token: i3.ContextRouteService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SubscriptionModalComponent, selector: "c8y-subscription-modal", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-atom\"></i>\n <h4 id=\"modal-title\">{{ message | translate }}</h4>\n </div>\n <div class=\"modal-body\" id=\"modal-body\" *ngIf=\"isLoading\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SubscriptionModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-subscription-modal', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-atom\"></i>\n <h4 id=\"modal-title\">{{ message | translate }}</h4>\n </div>\n <div class=\"modal-body\" id=\"modal-body\" *ngIf=\"isLoading\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.EcosystemService }, { type: i3.TabsService }, { type: i3.ModalService }, { type: i4.ApplicationService }, { type: i3.AlertService }, { type: i3.ContextRouteService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzL3N1YnNjcmlwdGlvbi1tb2RhbC9zdWJzY3JpcHRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMvc3Vic2NyaXB0aW9uLW1vZGFsL3N1YnNjcmlwdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBMkMsTUFBTSxhQUFhLENBQUM7QUFDMUYsT0FBTyxFQUNMLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFlBQVksRUFDWixNQUFNLEVBQ04sV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNeEUsTUFBTSxPQUFPLDBCQUEwQjtJQWNyQyxZQUNVLFVBQXNCLEVBQ3RCLGdCQUFrQyxFQUNsQyxXQUF3QixFQUN4QixLQUFtQixFQUNuQixrQkFBc0MsRUFDdEMsWUFBMEIsRUFDMUIsbUJBQXdDO1FBTnhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXBCekMsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFHOUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixXQUFNLEdBQWtCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFFQSxTQUFJLEdBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFXbEQsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFtQztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsTUFBTSxnQkFBZ0IsR0FDcEIsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUN2QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBOEIsQ0FDckMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNqRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHlEQUF5RDtJQUNqRCx3QkFBd0IsQ0FBQyxFQUE2QjtRQUM1RCxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RSxDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUNSLE1BQU0sS0FBSyxXQUFXO1lBQ3BCLENBQUMsQ0FBQyxPQUFPLENBQUMsK0VBQStFLENBQUM7WUFDMUYsQ0FBQyxDQUFDLE9BQU8sQ0FDTCw2RkFBNkYsQ0FDOUYsQ0FBQztRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDOytHQXZHVSwwQkFBMEI7bUdBQTFCLDBCQUEwQiw4RENsQnZDLGtXQVdBOzs0RkRPYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSwgSUFwcGxpY2F0aW9uLCBJQXBwbGljYXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgVGFic1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc3Vic2NyaXB0aW9uLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBSRVRSWV9USU1FT1VUID0gMzAwMDtcbiAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgcmVzdWx0OiBQcm9taXNlPHZvaWQ+ID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gIH0pO1xuICBpc1N1YnNjcmliZWQ6IGJvb2xlYW47XG4gIHJldHJ5Q291bnRlciA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBUQUJTOiBzdHJpbmdbXSA9IFsnTG9ncycsICdTdGF0dXMnXTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHRhYnNTZXJ2aWNlOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFJvdXRlU2VydmljZTogQ29udGV4dFJvdXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNTdWJzY3JpYmVkKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmV0cnlDb3VudGVyID0gMDtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0dGV4dCgnU3Vic2NyaWJpbmfigKYnKTtcbiAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc3Vic2NyaWJlQXBwKHRoaXMuYXBwbGljYXRpb24pO1xuICAgIHRoaXMuZ2V0U3RhdHVzRGV0YWlscygnc3Vic2NyaWJlJyk7XG4gIH1cblxuICBhc3luYyB1bnN1YnNjcmliZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnRlciA9IDA7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubWVzc2FnZSA9IGdldHRleHQoJ1Vuc3Vic2NyaWJpbmfigKYnKTtcbiAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudW5zdWJzY3JpYmVBcHAodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5nZXRTdGF0dXNEZXRhaWxzKCd1bnN1YnNjcmliZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTdGF0dXNEZXRhaWxzKGFjdGlvbjogJ3N1YnNjcmliZScgfCAndW5zdWJzY3JpYmUnKSB7XG4gICAgdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLnJlZnJlc2hDb250ZXh0KCk7XG4gICAgY29uc3QgYWN0aW9uU3VjY2Vzc2Z1bCA9XG4gICAgICBhY3Rpb24gPT09ICdzdWJzY3JpYmUnID8gYXdhaXQgdGhpcy5vblN1YnNjcmliZSgpIDogdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKGFjdGlvblN1Y2Nlc3NmdWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZGVTdWJzY3JpcHRpb25Nb2RhbCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXRyeUNvdW50ZXIgPT09IDQpIHtcbiAgICAgIHRoaXMuc2hvd1dhcm5pbmdNb2RhbChhY3Rpb24pO1xuICAgICAgcmV0dXJuIHRoaXMuaGlkZVN1YnNjcmlwdGlvbk1vZGFsKCk7XG4gICAgfVxuICAgIHRoaXMucmV0cnlDb3VudGVyICs9IDE7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLmdldFN0YXR1c0RldGFpbHMoYWN0aW9uKTtcbiAgICB9LCB0aGlzLlJFVFJZX1RJTUVPVVQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblN1YnNjcmliZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmFwcGxpY2F0aW9uLmFjdGl2ZVZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlczogSUFwcGxpY2F0aW9uTWFuYWdlZE9iamVjdCA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0U3RhdHVzRGV0YWlscyh0aGlzLmFwcGxpY2F0aW9uKVxuICAgICAgKS5kYXRhWzBdO1xuICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkU2hvd01TU3BlY2lmaWNUYWJzKHJlcyk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrcyBpZiB0aGUgVUkgc2hvdWxkIHNob3cgdGFicyB3aXRoIGxvZ3MgYW5kIHN0YXR1c1xuICBwcml2YXRlIHNob3VsZFNob3dNU1NwZWNpZmljVGFicyhtbzogSUFwcGxpY2F0aW9uTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNFbXB0eShtby5jOHlfU3RhdHVzPy5pbnN0YW5jZXMpICYmICEhbW8uYzh5X1N1cHBvcnRlZExvZ3M7XG4gIH1cblxuICBwcml2YXRlIG9uVW5zdWJzY3JpYmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRhYnNTZXJ2aWNlLmFyZUF2YWlsYWJsZSh0aGlzLlRBQlMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlU3Vic2NyaXB0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzb2x2ZSgpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1dhcm5pbmdNb2RhbChhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnV2FybmluZycpO1xuICAgIGNvbnN0IGJvZHkgPVxuICAgICAgYWN0aW9uID09PSAnc3Vic2NyaWJlJ1xuICAgICAgICA/IGdldHRleHQoJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBvciByZXN1YnNjcmliZSB0aGUgYXBwbGljYXRpb24uJylcbiAgICAgICAgOiBnZXR0ZXh0KFxuICAgICAgICAgICAgJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBvciByZXRyeSB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBhcHBsaWNhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICB0aGlzLm1vZGFsLmFja25vd2xlZGdlKHRpdGxlLCBib2R5LCBTdGF0dXMuV0FSTklORywgZ2V0dGV4dCgnQ2xvc2UnKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3cG9ydC1tb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwiYzh5LWF0b21cIj48L2k+XG4gICAgPGg0IGlkPVwibW9kYWwtdGl0bGVcIj57eyBtZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgaWQ9XCJtb2RhbC1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=