@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
JavaScript
/**
* 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=