@alfresco/adf-content-services
Version:
Alfresco ADF content services
138 lines • 17.1 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Injectable } from '@angular/core';
import { from, of } from 'rxjs';
import { AuthenticationService } from '@alfresco/adf-core';
import { map, tap } from 'rxjs/operators';
import { PeopleApi } from '@alfresco/js-api';
import { EcmUserModel } from '../models/ecm-user.model';
import { ContentService } from './content.service';
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import * as i0 from "@angular/core";
import * as i1 from "../../services/alfresco-api.service";
import * as i2 from "@alfresco/adf-core";
import * as i3 from "./content.service";
export class PeopleContentService {
get peopleApi() {
this._peopleApi = this._peopleApi ?? new PeopleApi(this.apiService.getInstance());
return this._peopleApi;
}
constructor(apiService, authenticationService, contentService) {
this.apiService = apiService;
this.contentService = contentService;
authenticationService.onLogout.subscribe(() => {
this.resetLocalCurrentUser();
});
}
/**
* Gets information about a user identified by their username.
*
* @param personId ID of the target user
* @returns User information
*/
getPerson(personId) {
return from(this.peopleApi.getPerson(personId)).pipe(map((personEntry) => new EcmUserModel(personEntry.entry)));
}
getCurrentPerson() {
return this.getCurrentUserInfo();
}
/**
* Gets information about the current user alias -me-
*
* @returns User information
*/
getCurrentUserInfo() {
if (this.currentUser) {
return of(this.currentUser);
}
return this.getPerson('-me-').pipe(tap((user) => (this.currentUser = user)));
}
/**
* Used to know if the current user has the admin capability
*
* @returns true or false
*/
isCurrentUserAdmin() {
return this.currentUser?.isAdmin() ?? false;
}
/**
* Reset the local current user object
*/
resetLocalCurrentUser() {
this.currentUser = undefined;
}
/**
* Gets a list of people.
*
* @param requestQuery maxItems and skipCount parameters supported by JS-API
* @returns Response containing pagination and list of entries
*/
listPeople(requestQuery) {
const requestQueryParams = { skipCount: requestQuery?.skipCount, maxItems: requestQuery?.maxItems };
const orderBy = this.buildOrderArray(requestQuery?.sorting);
if (orderBy.length) {
requestQueryParams['orderBy'] = orderBy;
}
const promise = this.peopleApi.listPeople(requestQueryParams);
return from(promise).pipe(map((response) => ({
pagination: response.list.pagination,
entries: response.list.entries.map((person) => person.entry)
})));
}
/**
* Creates new person.
*
* @param newPerson Object containing the new person details.
* @param opts Optional parameters
* @returns Created new person
*/
createPerson(newPerson, opts) {
return from(this.peopleApi.createPerson(newPerson, opts)).pipe(map((res) => res?.entry));
}
/**
* Updates the person details
*
* @param personId The identifier of a person
* @param details The person details
* @param opts Optional parameters
* @returns Updated person model
*/
updatePerson(personId, details, opts) {
return from(this.peopleApi.updatePerson(personId, details, opts)).pipe(map((res) => res?.entry));
}
/**
* Returns a profile image as a URL.
*
* @param avatarId Target avatar
* @returns Image URL
*/
getUserProfileImage(avatarId) {
return this.contentService.getContentUrl(avatarId);
}
buildOrderArray(sorting) {
return sorting?.orderBy && sorting?.direction ? [`${sorting.orderBy} ${sorting.direction.toUpperCase()}`] : [];
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PeopleContentService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.AuthenticationService }, { token: i3.ContentService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PeopleContentService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PeopleContentService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.AuthenticationService }, { type: i3.ContentService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVvcGxlLWNvbnRlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29tbW9uL3NlcnZpY2VzL3Blb3BsZS1jb250ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBYyxTQUFTLEVBQXNDLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFxQnpFLE1BQU0sT0FBTyxvQkFBb0I7SUFJN0IsSUFBSSxTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQW9CLFVBQThCLEVBQUUscUJBQTRDLEVBQVUsY0FBOEI7UUFBcEgsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBd0QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ3BJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMs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QUFHLEVBQUUsS0FBcUIsQ0FBQyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsUUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWtDO1FBQ3RELE9BQU8sT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25ILENBQUM7OEdBbEhRLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uLCBQZW9wbGVBcGksIFBlcnNvbkJvZHlDcmVhdGUsIFBlcnNvbkJvZHlVcGRhdGUgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEVjbVVzZXJNb2RlbCB9IGZyb20gJy4uL21vZGVscy9lY20tdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4vY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZW9wbGVDb250ZW50UXVlcnlSZXNwb25zZSB7XG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgICBlbnRyaWVzOiBFY21Vc2VyTW9kZWxbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZW9wbGVDb250ZW50U29ydGluZ01vZGVsIHtcbiAgICBvcmRlckJ5OiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVvcGxlQ29udGVudFF1ZXJ5UmVxdWVzdE1vZGVsIHtcbiAgICBza2lwQ291bnQ/OiBudW1iZXI7XG4gICAgbWF4SXRlbXM/OiBudW1iZXI7XG4gICAgc29ydGluZz86IFBlb3BsZUNvbnRlbnRTb3J0aW5nTW9kZWw7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVvcGxlQ29udGVudFNlcnZpY2Uge1xuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IEVjbVVzZXJNb2RlbDtcblxuICAgIHByaXZhdGUgX3Blb3BsZUFwaTogUGVvcGxlQXBpO1xuICAgIGdldCBwZW9wbGVBcGkoKTogUGVvcGxlQXBpIHtcbiAgICAgICAgdGhpcy5fcGVvcGxlQXBpID0gdGhpcy5fcGVvcGxlQXBpID8/IG5ldyBQZW9wbGVBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVvcGxlQXBpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLCBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UpIHtcbiAgICAgICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0TG9jYWxDdXJyZW50VXNlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgdXNlciBpZGVudGlmaWVkIGJ5IHRoZWlyIHVzZXJuYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcnNvbklkIElEIG9mIHRoZSB0YXJnZXQgdXNlclxuICAgICAqIEByZXR1cm5zIFVzZXIgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICBnZXRQZXJzb24ocGVyc29uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RWNtVXNlck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMucGVvcGxlQXBpLmdldFBlcnNvbihwZXJzb25JZCkpLnBpcGUobWFwKChwZXJzb25FbnRyeSkgPT4gbmV3IEVjbVVzZXJNb2RlbChwZXJzb25FbnRyeS5lbnRyeSkpKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50UGVyc29uKCk6IE9ic2VydmFibGU8RWNtVXNlck1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VySW5mbygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdXNlciBhbGlhcyAtbWUtXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBVc2VyIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgZ2V0Q3VycmVudFVzZXJJbmZvKCk6IE9ic2VydmFibGU8RWNtVXNlck1vZGVsPiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5jdXJyZW50VXNlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGVyc29uKCctbWUtJykucGlwZSh0YXAoKHVzZXIpID0+ICh0aGlzLmN1cnJlbnRVc2VyID0gdXNlcikpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGtub3cgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgdGhlIGFkbWluIGNhcGFiaWxpdHlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAgICAgKi9cbiAgICBpc0N1cnJlbnRVc2VyQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyPy5pc0FkbWluKCkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIGxvY2FsIGN1cnJlbnQgdXNlciBvYmplY3RcbiAgICAgKi9cbiAgICByZXNldExvY2FsQ3VycmVudFVzZXIoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGxpc3Qgb2YgcGVvcGxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RRdWVyeSBtYXhJdGVtcyBhbmQgc2tpcENvdW50IHBhcmFtZXRlcnMgc3VwcG9ydGVkIGJ5IEpTLUFQSVxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGNvbnRhaW5pbmcgcGFnaW5hdGlvbiBhbmQgbGlzdCBvZiBlbnRyaWVzXG4gICAgICovXG4gICAgbGlzdFBlb3BsZShyZXF1ZXN0UXVlcnk/OiBQZW9wbGVDb250ZW50UXVlcnlSZXF1ZXN0TW9kZWwpOiBPYnNlcnZhYmxlPFBlb3BsZUNvbnRlbnRRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RRdWVyeVBhcmFtcyA9IHsgc2tpcENvdW50OiByZXF1ZXN0UXVlcnk/LnNraXBDb3VudCwgbWF4SXRlbXM6IHJlcXVlc3RRdWVyeT8ubWF4SXRlbXMgfTtcbiAgICAgICAgY29uc3Qgb3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckFycmF5KHJlcXVlc3RRdWVyeT8uc29ydGluZyk7XG4gICAgICAgIGlmIChvcmRlckJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmVxdWVzdFF1ZXJ5UGFyYW1zWydvcmRlckJ5J10gPSBvcmRlckJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVvcGxlQXBpLmxpc3RQZW9wbGUocmVxdWVzdFF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGZyb20ocHJvbWlzZSkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+ICh7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcmVzcG9uc2UubGlzdC5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICAgIGVudHJpZXM6IHJlc3BvbnNlLmxpc3QuZW50cmllcy5tYXAoKHBlcnNvbikgPT4gcGVyc29uLmVudHJ5IGFzIEVjbVVzZXJNb2RlbClcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IHBlcnNvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdQZXJzb24gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBwZXJzb24gZGV0YWlscy5cbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICogQHJldHVybnMgQ3JlYXRlZCBuZXcgcGVyc29uXG4gICAgICovXG4gICAgY3JlYXRlUGVyc29uKG5ld1BlcnNvbjogUGVyc29uQm9keUNyZWF0ZSwgb3B0cz86IGFueSk6IE9ic2VydmFibGU8RWNtVXNlck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMucGVvcGxlQXBpLmNyZWF0ZVBlcnNvbihuZXdQZXJzb24sIG9wdHMpKS5waXBlKG1hcCgocmVzKSA9PiByZXM/LmVudHJ5IGFzIEVjbVVzZXJNb2RlbCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHBlcnNvbiBkZXRhaWxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVyc29uSWQgVGhlIGlkZW50aWZpZXIgb2YgYSBwZXJzb25cbiAgICAgKiBAcGFyYW0gZGV0YWlscyBUaGUgcGVyc29uIGRldGFpbHNcbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICogQHJldHVybnMgVXBkYXRlZCBwZXJzb24gbW9kZWxcbiAgICAgKi9cbiAgICB1cGRhdGVQZXJzb24ocGVyc29uSWQ6IHN0cmluZywgZGV0YWlsczogUGVyc29uQm9keVVwZGF0ZSwgb3B0cz86IGFueSk6IE9ic2VydmFibGU8RWNtVXNlck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMucGVvcGxlQXBpLnVwZGF0ZVBlcnNvbihwZXJzb25JZCwgZGV0YWlscywgb3B0cykpLnBpcGUobWFwKChyZXMpID0+IHJlcz8uZW50cnkgYXMgRWNtVXNlck1vZGVsKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb2ZpbGUgaW1hZ2UgYXMgYSBVUkwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXZhdGFySWQgVGFyZ2V0IGF2YXRhclxuICAgICAqIEByZXR1cm5zIEltYWdlIFVSTFxuICAgICAqL1xuICAgIGdldFVzZXJQcm9maWxlSW1hZ2UoYXZhdGFySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmdldENvbnRlbnRVcmwoYXZhdGFySWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmRlckFycmF5KHNvcnRpbmc6IFBlb3BsZUNvbnRlbnRTb3J0aW5nTW9kZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nPy5vcmRlckJ5ICYmIHNvcnRpbmc/LmRpcmVjdGlvbiA/IFtgJHtzb3J0aW5nLm9yZGVyQnl9ICR7c29ydGluZy5kaXJlY3Rpb24udG9VcHBlckNhc2UoKX1gXSA6IFtdO1xuICAgIH1cbn1cbiJdfQ==