@linid-dm/directory-manager-client-core
Version:
Core package by providing a set of angular components for the Directory Manager app.
271 lines • 27 kB
JavaScript
import { __decorate } from "tslib";
/**
* 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 { Injectable } from '@angular/core';
import { Action, Selector, State } from '@ngxs/store';
import * as User from './user.actions';
import * as i0 from "@angular/core";
export function initUserStateDefaultValues() {
return {
id: null,
userName: null,
displayName: null,
photo: null,
canAssignOrMove: [],
isConnected: false,
isDisconnected: true,
isConnecting: false,
isDisconnecting: false,
connectionFailed: false,
codeConnectionError: null,
connectionErrorMessage: null,
disconnectionFailed: false,
codeDisconnectionError: null,
disconnectionErrorMessage: null,
};
}
let UserState = class UserState {
static getUser(state) {
return state;
}
static getCurrentUserDetail(state) {
return {
id: state.id,
userName: state.userName,
displayName: state.displayName,
photo: state.photo,
canAssignOrMove: state.canAssignOrMove,
};
}
static getId(state) {
return state.id;
}
static getDisplayName(state) {
return state.displayName;
}
static getPhoto(state) {
return state.photo;
}
static getCanAssignOrMoveAuthorizedTypes(state) {
return state.canAssignOrMove;
}
static getIsConnected(state) {
return state.isConnected;
}
static getIsDisconnected(state) {
return state.isDisconnected;
}
static getIsConnecting(state) {
return state.isConnecting;
}
static getIsDisconnecting(state) {
return state.isDisconnected;
}
static getConnectionFailed(state) {
return state.connectionFailed;
}
static getCodeConnectionError(state) {
return state.codeConnectionError;
}
static getConnectionErrorMessage(state) {
return state.connectionFailed;
}
static getDisconnectionFailed(state) {
return state.disconnectionFailed;
}
static getCodeDisconnectionError(state) {
return state.codeDisconnectionError;
}
static getDisonnectionErrorMessage(state) {
return state.disconnectionErrorMessage;
}
setCurrentUserConfig(ctx, action) {
ctx.setState({
...ctx.getState(),
id: action.payload.id,
userName: action.payload.userName,
displayName: action.payload.displayName,
photo: action.payload.photo,
canAssignOrMove: action.payload.canAssignOrMove,
});
}
updateCurrentUserConfig(ctx, action) {
ctx.setState({
...ctx.getState(),
displayName: action.payload.userInfo.displayName,
photo: action.payload.userInfo.photo,
});
}
connect(ctx, action) {
ctx.setState({
...ctx.getState(),
displayName: action.payload.userInfo.displayName,
isConnecting: true,
connectionFailed: false,
codeConnectionError: null,
connectionErrorMessage: null,
});
}
connectError(ctx, action) {
ctx.setState({
...ctx.getState(),
displayName: null,
isConnecting: false,
connectionFailed: true,
codeConnectionError: action.payload.code,
connectionErrorMessage: action.payload.message,
});
}
connectSuccess(ctx) {
ctx.setState({
...ctx.getState(),
isConnecting: false,
isConnected: true,
isDisconnected: false,
});
}
disconnect(ctx) {
ctx.setState({
...ctx.getState(),
isDisconnecting: true,
disconnectionFailed: false,
codeDisconnectionError: null,
disconnectionErrorMessage: null,
});
}
disconnectError(ctx, action) {
ctx.setState({
...ctx.getState(),
isDisconnecting: false,
disconnectionFailed: true,
codeDisconnectionError: action.payload.code,
disconnectionErrorMessage: action.payload.message,
});
}
disconnectSuccess(ctx) {
ctx.setState({
...ctx.getState(),
displayName: null,
photo: null,
isDisconnecting: false,
isDisconnected: true,
isConnected: false,
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: UserState, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: UserState }); }
};
__decorate([
Action(User.SetCurrentUserConfig)
], UserState.prototype, "setCurrentUserConfig", null);
__decorate([
Action(User.UpdateCurrentUserConfig)
], UserState.prototype, "updateCurrentUserConfig", null);
__decorate([
Action(User.Connect)
], UserState.prototype, "connect", null);
__decorate([
Action(User.ConnectError)
], UserState.prototype, "connectError", null);
__decorate([
Action(User.ConnectSuccess)
], UserState.prototype, "connectSuccess", null);
__decorate([
Action(User.Disconnect)
], UserState.prototype, "disconnect", null);
__decorate([
Action(User.DisconnectError)
], UserState.prototype, "disconnectError", null);
__decorate([
Action(User.DisconnectSuccess)
], UserState.prototype, "disconnectSuccess", null);
__decorate([
Selector()
], UserState, "getUser", null);
__decorate([
Selector()
], UserState, "getCurrentUserDetail", null);
__decorate([
Selector()
], UserState, "getId", null);
__decorate([
Selector()
], UserState, "getDisplayName", null);
__decorate([
Selector()
], UserState, "getPhoto", null);
__decorate([
Selector()
], UserState, "getCanAssignOrMoveAuthorizedTypes", null);
__decorate([
Selector()
], UserState, "getIsConnected", null);
__decorate([
Selector()
], UserState, "getIsDisconnected", null);
__decorate([
Selector()
], UserState, "getIsConnecting", null);
__decorate([
Selector()
], UserState, "getIsDisconnecting", null);
__decorate([
Selector()
], UserState, "getConnectionFailed", null);
__decorate([
Selector()
], UserState, "getCodeConnectionError", null);
__decorate([
Selector()
], UserState, "getConnectionErrorMessage", null);
__decorate([
Selector()
], UserState, "getDisconnectionFailed", null);
__decorate([
Selector()
], UserState, "getCodeDisconnectionError", null);
__decorate([
Selector()
], UserState, "getDisonnectionErrorMessage", null);
UserState = __decorate([
State({
name: 'user',
defaults: initUserStateDefaultValues(),
})
], UserState);
export { UserState };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: UserState, decorators: [{
type: Injectable
}], propDecorators: { setCurrentUserConfig: [], updateCurrentUserConfig: [], connect: [], connectError: [], connectSuccess: [], disconnect: [], disconnectError: [], disconnectSuccess: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvc3RhdGVzL3VzZXIvdXNlci5zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBRXBFLE9BQU8sS0FBSyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7O0FBb0J2QyxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU87UUFDTCxFQUFFLEVBQUUsSUFBSTtRQUNSLFFBQVEsRUFBRSxJQUFJO1FBQ2QsV0FBVyxFQUFFLElBQUk7UUFDakIsS0FBSyxFQUFFLElBQUk7UUFDWCxlQUFlLEVBQUUsRUFBRTtRQUNuQixXQUFXLEVBQUUsS0FBSztRQUNsQixjQUFjLEVBQUUsSUFBSTtRQUNwQixZQUFZLEVBQUUsS0FBSztRQUNuQixlQUFlLEVBQUUsS0FBSztRQUN0QixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLG1CQUFtQixFQUFFLElBQUk7UUFDekIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixtQkFBbUIsRUFBRSxLQUFLO1FBQzFCLHNCQUFzQixFQUFFLElBQUk7UUFDNUIseUJBQXlCLEVBQUUsSUFBSTtLQUNoQyxDQUFDO0FBQ0osQ0FBQztBQU9NLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBUztJQUViLEFBQVAsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFxQjtRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHTSxBQUFQLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFxQjtRQUMvQyxPQUFPO1lBQ0wsRUFB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QUFHTTtJQUROLFFBQVEsRUFBRTsyQ0FTVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzRCQUdWO0FBR007SUFETixRQUFRLEVBQUU7cUNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTsrQkFHVjtBQUdNO0lBRE4sUUFBUSxFQUFFO3dEQUdWO0FBR007SUFETixRQUFRLEVBQUU7cUNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTt3Q0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFO3NDQUdWO0FBR007SUFETixRQUFRLEVBQUU7eUNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTswQ0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzZDQUdWO0FBR007SUFETixRQUFRLEVBQUU7Z0RBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTs2Q0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFO2dEQUdWO0FBR007SUFETixRQUFRLEVBQUU7a0RBR1Y7QUFyRlUsU0FBUztJQUxyQixLQUFLLENBQWlCO1FBQ3JCLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLDBCQUEwQixFQUFFO0tBQ3ZDLENBQUM7R0FFVyxTQUFTLENBMkxyQjs7MkZBM0xZLFNBQVM7a0JBRHJCLFVBQVU7OEJBeUZULG9CQUFvQixNQWVwQix1QkFBdUIsTUFZdkIsT0FBTyxNQVlQLFlBQVksTUFlWixjQUFjLE1BVWQsVUFBVSxNQVdWLGVBQWUsTUFjZixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoQykgMjAyMC0yMDI0IExpbmFnb3JhXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXJcbiAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnlcbiAqIGxhdGVyIHZlcnNpb24sIHByb3ZpZGVkIHlvdSBjb21wbHkgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIGZvclxuICogTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUgYnkgTElOQUdPUkEgcHVyc3VhbnQgdG8gU2VjdGlvbiA3IG9mIHRoZSBHTlVcbiAqIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdWJzZWN0aW9ucyAoYiksIChjKSwgYW5kIChlKSwgcHVyc3VhbnQgdG9cbiAqIHdoaWNoIHRoZXNlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMgbXVzdCBub3RhYmx5IChpKSByZXRhaW4gdGhlIGRpc3BsYXkgb2ZcbiAqIHRoZSBcIkxpbklE4oSiXCIgdHJhZGVtYXJrL2xvZ28gYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJmYWNlIHdpbmRvdywgdGhlIGRpc3BsYXlcbiAqIG9mIHRoZSDigJxZb3UgYXJlIHVzaW5nIHRoZSBPcGVuIFNvdXJjZSBhbmQgZnJlZSB2ZXJzaW9uIG9mIExpbklE4oSiLCBwb3dlcmVkIGJ5XG4gKiBMaW5hZ29yYSDCqSAyMDA54oCTMjAxMy4gQ29udHJpYnV0ZSB0byBMaW5JRCBSJkQgYnkgc3Vic2NyaWJpbmcgdG8gYW4gRW50ZXJwcmlzZVxuICogb2ZmZXIh4oCdIGluZm9ib3ggYW5kIGluIHRoZSBlLW1haWxzIHNlbnQgd2l0aCB0aGUgUHJvZ3JhbSwgbm90aWNlIGFwcGVuZGVkIHRvXG4gKiBhbnkgdHlwZSBvZiBvdXRib3VuZCBtZXNzYWdlcyAoZS5nLiBlLW1haWwgYW5kIG1lZXRpbmcgcmVxdWVzdHMpIGFzIHdlbGwgYXNcbiAqIGluIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciB1c2VyIGludGVyZmFjZSwgKGlpKSByZXRhaW4gYWxsIGh5cGVydGV4dFxuICogbGlua3MgYmV0d2VlbiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBhbmQgaHR0cHM6Ly9saW5pZC5vcmcvLCBhcyB3ZWxsIGFzXG4gKiBiZXR3ZWVuIExJTkFHT1JBIGFuZCBMSU5BR09SQS5jb20sIGFuZCAoaWlpKSByZWZyYWluIGZyb20gaW5mcmluZ2luZyBMSU5BR09SQVxuICogaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIGl0cyB0cmFkZW1hcmtzIGFuZCBjb21tZXJjaWFsIGJyYW5kcy4gT3RoZXJcbiAqIEFkZGl0aW9uYWwgVGVybXMgYXBwbHksIHNlZSA8aHR0cDovL3d3dy5saW5hZ29yYS5jb20vbGljZW5zZXMvPiBmb3IgbW9yZVxuICogZGV0YWlscy5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmRcbiAqIGl0cyBhcHBsaWNhYmxlIEFkZGl0aW9uYWwgVGVybXMgZm9yIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFsb25nIHdpdGggdGhpc1xuICogcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+IGZvciB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYW5kIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvclxuICogdGhlIEFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IElDdXJyZW50VXNlckNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlncy5pbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgVXNlciBmcm9tICcuL3VzZXIuYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclN0YXRlTW9kZWwge1xuICBpZDogc3RyaW5nO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90bzogc3RyaW5nO1xuICBjYW5Bc3NpZ25Pck1vdmU6IHN0cmluZ1tdO1xuICBpc0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgaXNEaXNjb25uZWN0ZWQ6IGJvb2xlYW47XG4gIGlzQ29ubmVjdGluZzogYm9vbGVhbjtcbiAgaXNEaXNjb25uZWN0aW5nOiBib29sZWFuO1xuICBjb25uZWN0aW9uRmFpbGVkOiBib29sZWFuO1xuICBjb2RlQ29ubmVjdGlvbkVycm9yOiBudW1iZXI7XG4gIGNvbm5lY3Rpb25FcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgZGlzY29ubmVjdGlvbkZhaWxlZDogYm9vbGVhbjtcbiAgY29kZURpc2Nvbm5lY3Rpb25FcnJvcjogbnVtYmVyO1xuICBkaXNjb25uZWN0aW9uRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0VXNlclN0YXRlRGVmYXVsdFZhbHVlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogbnVsbCxcbiAgICB1c2VyTmFtZTogbnVsbCxcbiAgICBkaXNwbGF5TmFtZTogbnVsbCxcbiAgICBwaG90bzogbnVsbCxcbiAgICBjYW5Bc3NpZ25Pck1vdmU6IFtdLFxuICAgIGlzQ29ubmVjdGVkOiBmYWxzZSxcbiAgICBpc0Rpc2Nvbm5lY3RlZDogdHJ1ZSxcbiAgICBpc0Nvbm5lY3Rpbmc6IGZhbHNlLFxuICAgIGlzRGlzY29ubmVjdGluZzogZmFsc2UsXG4gICAgY29ubmVjdGlvbkZhaWxlZDogZmFsc2UsXG4gICAgY29kZUNvbm5lY3Rpb25FcnJvcjogbnVsbCxcbiAgICBjb25uZWN0aW9uRXJyb3JNZXNzYWdlOiBudWxsLFxuICAgIGRpc2Nvbm5lY3Rpb25GYWlsZWQ6IGZhbHNlLFxuICAgIGNvZGVEaXNjb25uZWN0aW9uRXJyb3I6IG51bGwsXG4gICAgZGlzY29ubmVjdGlvbkVycm9yTWVzc2FnZTogbnVsbCxcbiAgfTtcbn1cblxuQFN0YXRlPFVzZXJTdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICd1c2VyJyxcbiAgZGVmYXVsdHM6IGluaXRVc2VyU3RhdGVEZWZhdWx0VmFsdWVzKCksXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJTdGF0ZSB7XG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRVc2VyKHN0YXRlOiBVc2VyU3RhdGVNb2RlbCk6IFVzZXJTdGF0ZU1vZGVsIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0Q3VycmVudFVzZXJEZXRhaWwoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogSUN1cnJlbnRVc2VyQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHN0YXRlLmlkLFxuICAgICAgdXNlck5hbWU6IHN0YXRlLnVzZXJOYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IHN0YXRlLmRpc3BsYXlOYW1lLFxuICAgICAgcGhvdG86IHN0YXRlLnBob3RvLFxuICAgICAgY2FuQXNzaWduT3JNb3ZlOiBzdGF0ZS5jYW5Bc3NpZ25Pck1vdmUsXG4gICAgfTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRJZChzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5pZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXREaXNwbGF5TmFtZShzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRQaG90byhzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5waG90bztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRDYW5Bc3NpZ25Pck1vdmVBdXRob3JpemVkVHlwZXMoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYW5Bc3NpZ25Pck1vdmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0SXNDb25uZWN0ZWQoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLmlzQ29ubmVjdGVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldElzRGlzY29ubmVjdGVkKHN0YXRlOiBVc2VyU3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5pc0Rpc2Nvbm5lY3RlZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRJc0Nvbm5lY3Rpbmcoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLmlzQ29ubmVjdGluZztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRJc0Rpc2Nvbm5lY3Rpbmcoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLmlzRGlzY29ubmVjdGVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldENvbm5lY3Rpb25GYWlsZWQoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbm5lY3Rpb25GYWlsZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0Q29kZUNvbm5lY3Rpb25FcnJvcihzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBudW1iZXIge1xuICAgIHJldHVybiBzdGF0ZS5jb2RlQ29ubmVjdGlvbkVycm9yO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldENvbm5lY3Rpb25FcnJvck1lc3NhZ2Uoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbm5lY3Rpb25GYWlsZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0RGlzY29ubmVjdGlvbkZhaWxlZChzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuZGlzY29ubmVjdGlvbkZhaWxlZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRDb2RlRGlzY29ubmVjdGlvbkVycm9yKHN0YXRlOiBVc2VyU3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLmNvZGVEaXNjb25uZWN0aW9uRXJyb3I7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0RGlzb25uZWN0aW9uRXJyb3JNZXNzYWdlKHN0YXRlOiBVc2VyU3RhdGVNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0YXRlLmRpc2Nvbm5lY3Rpb25FcnJvck1lc3NhZ2U7XG4gIH1cblxuICBAQWN0aW9uKFVzZXIuU2V0Q3VycmVudFVzZXJDb25maWcpXG4gIHNldEN1cnJlbnRVc2VyQ29uZmlnKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFVzZXIuU2V0Q3VycmVudFVzZXJDb25maWdcbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgaWQ6IGFjdGlvbi5wYXlsb2FkLmlkLFxuICAgICAgdXNlck5hbWU6IGFjdGlvbi5wYXlsb2FkLnVzZXJOYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IGFjdGlvbi5wYXlsb2FkLmRpc3BsYXlOYW1lLFxuICAgICAgcGhvdG86IGFjdGlvbi5wYXlsb2FkLnBob3RvLFxuICAgICAgY2FuQXNzaWduT3JNb3ZlOiBhY3Rpb24ucGF5bG9hZC5jYW5Bc3NpZ25Pck1vdmUsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFVzZXIuVXBkYXRlQ3VycmVudFVzZXJDb25maWcpXG4gIHVwZGF0ZUN1cnJlbnRVc2VyQ29uZmlnKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFVzZXIuVXBkYXRlQ3VycmVudFVzZXJDb25maWdcbiAgKSB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgZGlzcGxheU5hbWU6IGFjdGlvbi5wYXlsb2FkLnVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgcGhvdG86IGFjdGlvbi5wYXlsb2FkLnVzZXJJbmZvLnBob3RvLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihVc2VyLkNvbm5lY3QpXG4gIGNvbm5lY3QoY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCBhY3Rpb246IFVzZXIuQ29ubmVjdCk6IHZvaWQge1xuICAgIGN0eC5zZXRTdGF0ZSh7XG4gICAgICAuLi5jdHguZ2V0U3RhdGUoKSxcbiAgICAgIGRpc3BsYXlOYW1lOiBhY3Rpb24ucGF5bG9hZC51c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgIGlzQ29ubmVjdGluZzogdHJ1ZSxcbiAgICAgIGNvbm5lY3Rpb25GYWlsZWQ6IGZhbHNlLFxuICAgICAgY29kZUNvbm5lY3Rpb25FcnJvcjogbnVsbCxcbiAgICAgIGNvbm5lY3Rpb25FcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFVzZXIuQ29ubmVjdEVycm9yKVxuICBjb25uZWN0RXJyb3IoXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LFxuICAgIGFjdGlvbjogVXNlci5Db25uZWN0RXJyb3JcbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgZGlzcGxheU5hbWU6IG51bGwsXG4gICAgICBpc0Nvbm5lY3Rpbmc6IGZhbHNlLFxuICAgICAgY29ubmVjdGlvbkZhaWxlZDogdHJ1ZSxcbiAgICAgIGNvZGVDb25uZWN0aW9uRXJyb3I6IGFjdGlvbi5wYXlsb2FkLmNvZGUsXG4gICAgICBjb25uZWN0aW9uRXJyb3JNZXNzYWdlOiBhY3Rpb24ucGF5bG9hZC5tZXNzYWdlLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihVc2VyLkNvbm5lY3RTdWNjZXNzKVxuICBjb25uZWN0U3VjY2VzcyhjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICBpc0Nvbm5lY3Rpbmc6IGZhbHNlLFxuICAgICAgaXNDb25uZWN0ZWQ6IHRydWUsXG4gICAgICBpc0Rpc2Nvbm5lY3RlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFVzZXIuRGlzY29ubmVjdClcbiAgZGlzY29ubmVjdChjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICBpc0Rpc2Nvbm5lY3Rpbmc6IHRydWUsXG4gICAgICBkaXNjb25uZWN0aW9uRmFpbGVkOiBmYWxzZSxcbiAgICAgIGNvZGVEaXNjb25uZWN0aW9uRXJyb3I6IG51bGwsXG4gICAgICBkaXNjb25uZWN0aW9uRXJyb3JNZXNzYWdlOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihVc2VyLkRpc2Nvbm5lY3RFcnJvcilcbiAgZGlzY29ubmVjdEVycm9yKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFVzZXIuQ29ubmVjdEVycm9yXG4gICk6IHZvaWQge1xuICAgIGN0eC5zZXRTdGF0ZSh7XG4gICAgICAuLi5jdHguZ2V0U3RhdGUoKSxcbiAgICAgIGlzRGlzY29ubmVjdGluZzogZmFsc2UsXG4gICAgICBkaXNjb25uZWN0aW9uRmFpbGVkOiB0cnVlLFxuICAgICAgY29kZURpc2Nvbm5lY3Rpb25FcnJvcjogYWN0aW9uLnBheWxvYWQuY29kZSxcbiAgICAgIGRpc2Nvbm5lY3Rpb25FcnJvck1lc3NhZ2U6IGFjdGlvbi5wYXlsb2FkLm1lc3NhZ2UsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFVzZXIuRGlzY29ubmVjdFN1Y2Nlc3MpXG4gIGRpc2Nvbm5lY3RTdWNjZXNzKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIGN0eC5zZXRTdGF0ZSh7XG4gICAgICAuLi5jdHguZ2V0U3RhdGUoKSxcbiAgICAgIGRpc3BsYXlOYW1lOiBudWxsLFxuICAgICAgcGhvdG86IG51bGwsXG4gICAgICBpc0Rpc2Nvbm5lY3Rpbmc6IGZhbHNlLFxuICAgICAgaXNEaXNjb25uZWN0ZWQ6IHRydWUsXG4gICAgICBpc0Nvbm5lY3RlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==