UNPKG

@linid-dm/directory-manager-client-core

Version:

Core package by providing a set of angular components for the Directory Manager app.

110 lines 15.4 kB
/** * Copyright (C) 2020-2024 Linagora * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version, provided you comply with the Additional Terms applicable for * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU * Affero General Public License, subsections (b), (c), and (e), pursuant to * which these Appropriate Legal Notices must notably (i) retain the display of * the "LinID™" trademark/logo at the top of the interface window, the display * of the “You are using the Open Source and free version of LinID™, powered by * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise * offer!” infobox and in the e-mails sent with the Program, notice appended to * any type of outbound messages (e.g. e-mail and meeting requests) as well as * in the LinID Directory Manager user interface, (ii) retain all hypertext * links between LinID Directory Manager and https://linid.org/, as well as * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA * intellectual property rights over its trademarks and commercial brands. Other * Additional Terms apply, see <http://www.linagora.com/licenses/> for more * details. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License and * its applicable Additional Terms for LinID Directory Manager along with this * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero * General Public License version 3 and <http://www.linagora.com/licenses/> for * the Additional Terms applicable to the LinID Directory Manager software. */ import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Store } from '@ngxs/store'; import { ToastrService } from 'ngx-toastr'; import { of } from 'rxjs'; import * as Configs from '../states/configs/configs.actions'; import * as ErrorActions from '../states/error/error.actions'; import { ErrorState } from '../states/error/error.state'; import * as ResourcesTypes from '../states/resources-types/resources-types.actions'; import * as i0 from "@angular/core"; const PATH_CONFIG = 'configs'; const PATH_RESOURCES_TYPES = 'resourcestypes'; const POSITION_CLASS = 'toast-bottom-right'; export class ErrorsHandlerService { constructor( // Because errors handler is created before providers so we have to use injector service to use them _injector) { this._injector = _injector; } handleError(error) { const toastrService = this._injector.get(ToastrService); const store = this._injector.get(Store); if (error instanceof HttpErrorResponse) { // No internet connection or server-side error if (!navigator.onLine) { const noInternetConnection = store.selectSnapshot(ErrorState.getNoInternetConnection); // Handle offline errors toastrService.error(noInternetConnection, null, { onActivateTick: true, positionClass: POSITION_CLASS, }); } else { const urlLastPart = error.url.split('/').pop(); switch (urlLastPart) { case PATH_CONFIG: store.dispatch(new Configs.FetchConfigsError()); break; case PATH_RESOURCES_TYPES: store.dispatch(new ResourcesTypes.FetchResourcesTypesError()); break; default: break; } // Handle and display Http errors to user toastrService.error(`${error.status} - ${error.error?.message ? error.error.message : error.message}`, null, { onActivateTick: true, positionClass: POSITION_CLASS, }); } } else { if (error.name === 'TimeoutError') { toastrService.error(`${error.name} - ${error.message}`, null, { onActivateTick: true, positionClass: POSITION_CLASS, }); } } // We always display error in browser console console.error(error); store.dispatch([ new ErrorActions.IsHandlingError(false), new ErrorActions.ResetErrorDetail(), ]); return of(error); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ErrorsHandlerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ErrorsHandlerService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ErrorsHandlerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: i0.Injector }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLWhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvZXJyb3JzLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sS0FBSyxZQUFZLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxjQUFjLE1BQU0sbURBQW1ELENBQUM7O0FBRXBGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUM5QixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDO0FBSzVDLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7SUFDRSxvR0FBb0c7SUFDNUYsU0FBbUI7UUFBbkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtJQUMxQixDQUFDO0lBRUosV0FBVyxDQUNULEtBQWdDO1FBRWhDLE1BQU0sYUFBYSxHQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZDLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQy9DLFVBQVUsQ0FBQyx1QkFBdUIsQ0FDbkMsQ0FBQztnQkFDRix3QkFBd0I7Z0JBQ3hCLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFO29CQUM5QyxjQUFjLEVBQUUsSUFBSTtvQkFDcEIsYUFBYSxFQUFFLGNBQWM7aUJBQzlCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsUUFBUSxXQUFXLEVBQUUsQ0FBQztvQkFDcEIsS0FBSyxXQUFXO3dCQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRCxNQUFNO29CQUNSLEtBQUssb0JBQW9CO3dCQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQzt3QkFDOUQsTUFBTTtvQkFDUjt3QkFDRSxNQUFNO2dCQUNWLENBQUM7Z0JBQ0QseUNBQXlDO2dCQUN6QyxhQUFhLENBQUMsS0FBSyxDQUNqQixHQUFHLEtBQUssQ0FBQyxNQUFNLE1BQ2IsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FDckQsRUFBRSxFQUNGLElBQUksRUFDSjtvQkFDRSxjQUFjLEVBQUUsSUFBSTtvQkFDcEIsYUFBYSxFQUFFLGNBQWM7aUJBQzlCLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRTtvQkFDNUQsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLGFBQWEsRUFBRSxjQUFjO2lCQUM5QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELDZDQUE2QztRQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDYixJQUFJLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLElBQUksWUFBWSxDQUFDLGdCQUFnQixFQUFFO1NBQ3BDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUM7OEdBL0RVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoQykgMjAyMC0yMDI0IExpbmFnb3JhXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXJcbiAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnlcbiAqIGxhdGVyIHZlcnNpb24sIHByb3ZpZGVkIHlvdSBjb21wbHkgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIGZvclxuICogTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUgYnkgTElOQUdPUkEgcHVyc3VhbnQgdG8gU2VjdGlvbiA3IG9mIHRoZSBHTlVcbiAqIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdWJzZWN0aW9ucyAoYiksIChjKSwgYW5kIChlKSwgcHVyc3VhbnQgdG9cbiAqIHdoaWNoIHRoZXNlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMgbXVzdCBub3RhYmx5IChpKSByZXRhaW4gdGhlIGRpc3BsYXkgb2ZcbiAqIHRoZSBcIkxpbklE4oSiXCIgdHJhZGVtYXJrL2xvZ28gYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJmYWNlIHdpbmRvdywgdGhlIGRpc3BsYXlcbiAqIG9mIHRoZSDigJxZb3UgYXJlIHVzaW5nIHRoZSBPcGVuIFNvdXJjZSBhbmQgZnJlZSB2ZXJzaW9uIG9mIExpbklE4oSiLCBwb3dlcmVkIGJ5XG4gKiBMaW5hZ29yYSDCqSAyMDA54oCTMjAxMy4gQ29udHJpYnV0ZSB0byBMaW5JRCBSJkQgYnkgc3Vic2NyaWJpbmcgdG8gYW4gRW50ZXJwcmlzZVxuICogb2ZmZXIh4oCdIGluZm9ib3ggYW5kIGluIHRoZSBlLW1haWxzIHNlbnQgd2l0aCB0aGUgUHJvZ3JhbSwgbm90aWNlIGFwcGVuZGVkIHRvXG4gKiBhbnkgdHlwZSBvZiBvdXRib3VuZCBtZXNzYWdlcyAoZS5nLiBlLW1haWwgYW5kIG1lZXRpbmcgcmVxdWVzdHMpIGFzIHdlbGwgYXNcbiAqIGluIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciB1c2VyIGludGVyZmFjZSwgKGlpKSByZXRhaW4gYWxsIGh5cGVydGV4dFxuICogbGlua3MgYmV0d2VlbiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBhbmQgaHR0cHM6Ly9saW5pZC5vcmcvLCBhcyB3ZWxsIGFzXG4gKiBiZXR3ZWVuIExJTkFHT1JBIGFuZCBMSU5BR09SQS5jb20sIGFuZCAoaWlpKSByZWZyYWluIGZyb20gaW5mcmluZ2luZyBMSU5BR09SQVxuICogaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIGl0cyB0cmFkZW1hcmtzIGFuZCBjb21tZXJjaWFsIGJyYW5kcy4gT3RoZXJcbiAqIEFkZGl0aW9uYWwgVGVybXMgYXBwbHksIHNlZSA8aHR0cDovL3d3dy5saW5hZ29yYS5jb20vbGljZW5zZXMvPiBmb3IgbW9yZVxuICogZGV0YWlscy5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmRcbiAqIGl0cyBhcHBsaWNhYmxlIEFkZGl0aW9uYWwgVGVybXMgZm9yIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFsb25nIHdpdGggdGhpc1xuICogcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+IGZvciB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYW5kIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvclxuICogdGhlIEFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUuXG4gKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBDb25maWdzIGZyb20gJy4uL3N0YXRlcy9jb25maWdzL2NvbmZpZ3MuYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBFcnJvckFjdGlvbnMgZnJvbSAnLi4vc3RhdGVzL2Vycm9yL2Vycm9yLmFjdGlvbnMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZSB9IGZyb20gJy4uL3N0YXRlcy9lcnJvci9lcnJvci5zdGF0ZSc7XG5pbXBvcnQgKiBhcyBSZXNvdXJjZXNUeXBlcyBmcm9tICcuLi9zdGF0ZXMvcmVzb3VyY2VzLXR5cGVzL3Jlc291cmNlcy10eXBlcy5hY3Rpb25zJztcblxuY29uc3QgUEFUSF9DT05GSUcgPSAnY29uZmlncyc7XG5jb25zdCBQQVRIX1JFU09VUkNFU19UWVBFUyA9ICdyZXNvdXJjZXN0eXBlcyc7XG5jb25zdCBQT1NJVElPTl9DTEFTUyA9ICd0b2FzdC1ib3R0b20tcmlnaHQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXJyb3JzSGFuZGxlclNlcnZpY2UgaW1wbGVtZW50cyBFcnJvckhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBCZWNhdXNlIGVycm9ycyBoYW5kbGVyIGlzIGNyZWF0ZWQgYmVmb3JlIHByb3ZpZGVycyBzbyB3ZSBoYXZlIHRvIHVzZSBpbmplY3RvciBzZXJ2aWNlIHRvIHVzZSB0aGVtXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICBoYW5kbGVFcnJvcihcbiAgICBlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZVxuICApOiBPYnNlcnZhYmxlPEVycm9yIHwgSHR0cEVycm9yUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRvYXN0clNlcnZpY2UpO1xuXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RvcmUpO1xuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIC8vIE5vIGludGVybmV0IGNvbm5lY3Rpb24gb3Igc2VydmVyLXNpZGUgZXJyb3JcbiAgICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICBjb25zdCBub0ludGVybmV0Q29ubmVjdGlvbiA9IHN0b3JlLnNlbGVjdFNuYXBzaG90KFxuICAgICAgICAgIEVycm9yU3RhdGUuZ2V0Tm9JbnRlcm5ldENvbm5lY3Rpb25cbiAgICAgICAgKTtcbiAgICAgICAgLy8gSGFuZGxlIG9mZmxpbmUgZXJyb3JzXG4gICAgICAgIHRvYXN0clNlcnZpY2UuZXJyb3Iobm9JbnRlcm5ldENvbm5lY3Rpb24sIG51bGwsIHtcbiAgICAgICAgICBvbkFjdGl2YXRlVGljazogdHJ1ZSxcbiAgICAgICAgICBwb3NpdGlvbkNsYXNzOiBQT1NJVElPTl9DTEFTUyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1cmxMYXN0UGFydCA9IGVycm9yLnVybC5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgICBzd2l0Y2ggKHVybExhc3RQYXJ0KSB7XG4gICAgICAgICAgY2FzZSBQQVRIX0NPTkZJRzpcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKG5ldyBDb25maWdzLkZldGNoQ29uZmlnc0Vycm9yKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBQQVRIX1JFU09VUkNFU19UWVBFUzpcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKG5ldyBSZXNvdXJjZXNUeXBlcy5GZXRjaFJlc291cmNlc1R5cGVzRXJyb3IoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGFuZCBkaXNwbGF5IEh0dHAgZXJyb3JzIHRvIHVzZXJcbiAgICAgICAgdG9hc3RyU2VydmljZS5lcnJvcihcbiAgICAgICAgICBgJHtlcnJvci5zdGF0dXN9IC0gJHtcbiAgICAgICAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlID8gZXJyb3IuZXJyb3IubWVzc2FnZSA6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICB9YCxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQWN0aXZhdGVUaWNrOiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb25DbGFzczogUE9TSVRJT05fQ0xBU1MsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcicpIHtcbiAgICAgICAgdG9hc3RyU2VydmljZS5lcnJvcihgJHtlcnJvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX1gLCBudWxsLCB7XG4gICAgICAgICAgb25BY3RpdmF0ZVRpY2s6IHRydWUsXG4gICAgICAgICAgcG9zaXRpb25DbGFzczogUE9TSVRJT05fQ0xBU1MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBhbHdheXMgZGlzcGxheSBlcnJvciBpbiBicm93c2VyIGNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICBzdG9yZS5kaXNwYXRjaChbXG4gICAgICBuZXcgRXJyb3JBY3Rpb25zLklzSGFuZGxpbmdFcnJvcihmYWxzZSksXG4gICAgICBuZXcgRXJyb3JBY3Rpb25zLlJlc2V0RXJyb3JEZXRhaWwoKSxcbiAgICBdKTtcbiAgICByZXR1cm4gb2YoZXJyb3IpO1xuICB9XG59XG4iXX0=