@alfresco/adf-content-services
Version:
Alfresco ADF content services
136 lines • 15.9 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 { LegalHoldApi } from '@alfresco/js-api';
import { Injectable } from '@angular/core';
import { from } from 'rxjs';
import { map } from 'rxjs/operators';
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import * as i0 from "@angular/core";
import * as i1 from "../../services/alfresco-api.service";
export class LegalHoldService {
get legalHoldApi() {
this._legalHoldApi = this._legalHoldApi ?? new LegalHoldApi(this.apiService.getInstance());
return this._legalHoldApi;
}
constructor(apiService) {
this.apiService = apiService;
}
/**
* Gets the list of holds available in the file plan.
*
* @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.
* @param options Optional parameters supported by JS-API
* @returns List of holds Observable<Hold[]>
*/
getHolds(filePlanId, options) {
return from(this.legalHoldApi.getHolds(filePlanId, options)).pipe(map(({ list }) => list.entries?.map(({ entry }) => entry)));
}
/**
* Assign a node to a hold.
*
* @param nodeId The Id of the node which will be assigned to a hold
* @param holdId The Id of the hold to which nodes will be assigned
* @returns Observable<HoldEntry>
*/
assignHold(nodeId, holdId) {
return from(this.legalHoldApi.assignHold(nodeId, holdId));
}
/**
* Assign multiple nodes to a hold.
*
* @param nodeIds The list of managed node Ids
* @param holdId The Id of the hold to which nodes will be assigned
* @returns Observable<HoldPaging>
*/
assignHolds(nodeIds, holdId) {
return from(this.legalHoldApi.assignHolds(nodeIds, holdId));
}
/**
* Unassign the relationship between a child with id nodeId and a parent hold with id holdId.
*
* @param holdId The hold Id
* @param nodeId The Id of the node which is unassigned
* @returns Empty response
*/
unassignHold(holdId, nodeId) {
return from(this.legalHoldApi.unassignHold(holdId, nodeId));
}
/**
* Create hold.
*
* @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.
* @param hold Hold to create
* @returns List of created holds Observable<HoldEntry>
*/
createHold(filePlanId, hold) {
return from(this.legalHoldApi.createHold(filePlanId, hold));
}
/**
* Create list of holds.
*
* @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.
* @param holds Array of holds to create
* @returns List of created holds Observable<HoldPaging>
*/
createHolds(filePlanId, holds) {
return from(this.legalHoldApi.createHolds(filePlanId, holds));
}
/**
* Start the asynchronous bulk process for a hold with id holdId based on search query results.
*
* @param holdId The identifier of a hold
* @param query Search query
* @returns Observable<BulkAssignHoldResponseEntry>
*/
bulkAssignHold(holdId, query) {
return from(this.legalHoldApi.bulkAssignHold(holdId, query));
}
/**
* Assign a folder to a hold.
*
* @param holdId The identifier of a hold
* @param folderId The identifier of a folder
* @param language Language code
* @returns Observable<BulkAssignHoldResponseEntry>
*/
bulkAssignHoldToFolder(holdId, folderId, language) {
const query = {
query: `ANCESTOR:'workspace://SpacesStore/${folderId}' and TYPE:content`,
language
};
return from(this.legalHoldApi.bulkAssignHold(holdId, query));
}
/**
* Get status of bulk operation with **bulkStatusId** for **holdId**.
*
* @param bulkStatusId The identifier of a bulk status
* @param holdId The identifier of a hold
* @returns Promise<HoldsBulkStatusEntry>
*/
getBulkOperationStatus(bulkStatusId, holdId) {
return from(this.legalHoldApi.getBulkStatus(bulkStatusId, holdId));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: LegalHoldService, deps: [{ token: i1.AlfrescoApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: LegalHoldService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: LegalHoldService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWwtaG9sZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9sZWdhbC1ob2xkL3NlcnZpY2VzL2xlZ2FsLWhvbGQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBUUgsWUFBWSxFQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBS3pFLE1BQU0sT0FBTyxnQkFBZ0I7SUFFekIsSUFBSSxZQUFZO1FBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQTZCLFVBQThCO1FBQTlCLGVBQVUsR0FBVixVQUFVLENBQW9CO0lBQUcsQ0FBQztJQUUvRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsVUFBa0IsRUFBRSxPQUE0QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEksQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLE9BQXlCLEVBQUUsTUFBYztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLE1BQWMsRUFBRSxNQUFjO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxVQUFVLENBQUMsVUFBa0IsRUFBRSxJQUFjO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsVUFBa0IsRUFBRSxLQUFpQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLE1BQWMsRUFBRSxLQUFtQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHNCQUFzQixDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWdCO1FBQ3JFLE1BQU0sS0FBSyxHQUFpQjtZQUN4QixLQUFLLEVBQUUscUNBQXFDLFFBQVEsb0JBQW9CO1lBQ3hFLFFBQVE7U0FDWCxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNCQUFzQixDQUFDLFlBQW9CLEVBQUUsTUFBYztRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDOzhHQWhIUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZiLE1BQU07OzJGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQnVsa0Fzc2lnbkhvbGRSZXNwb25zZUVudHJ5LFxuICAgIENvbnRlbnRQYWdpbmdRdWVyeSxcbiAgICBIb2xkLFxuICAgIEhvbGRCb2R5LFxuICAgIEhvbGRCdWxrU3RhdHVzRW50cnksXG4gICAgSG9sZEVudHJ5LFxuICAgIEhvbGRQYWdpbmcsXG4gICAgTGVnYWxIb2xkQXBpLFxuICAgIFJlcXVlc3RRdWVyeVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMZWdhbEhvbGRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9sZWdhbEhvbGRBcGk6IExlZ2FsSG9sZEFwaTtcbiAgICBnZXQgbGVnYWxIb2xkQXBpKCk6IExlZ2FsSG9sZEFwaSB7XG4gICAgICAgIHRoaXMuX2xlZ2FsSG9sZEFwaSA9IHRoaXMuX2xlZ2FsSG9sZEFwaSA/PyBuZXcgTGVnYWxIb2xkQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZ2FsSG9sZEFwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSkge31cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaG9sZHMgYXZhaWxhYmxlIGluIHRoZSBmaWxlIHBsYW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBsYW5JZCBUaGUgaWRlbnRpZmllciBvZiBhIGZpbGUgcGxhbi4gWW91IGNhbiBhbHNvIHVzZSB0aGUgLWZpbGVQbGFuLSBhbGlhcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSBKUy1BUElcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIGhvbGRzIE9ic2VydmFibGU8SG9sZFtdPlxuICAgICAqL1xuICAgIGdldEhvbGRzKGZpbGVQbGFuSWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnRlbnRQYWdpbmdRdWVyeSk6IE9ic2VydmFibGU8SG9sZFtdPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubGVnYWxIb2xkQXBpLmdldEhvbGRzKGZpbGVQbGFuSWQsIG9wdGlvbnMpKS5waXBlKG1hcCgoeyBsaXN0IH0pID0+IGxpc3QuZW50cmllcz8ubWFwKCh7IGVudHJ5IH0pID0+IGVudHJ5KSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbiBhIG5vZGUgdG8gYSBob2xkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVJZCBUaGUgSWQgb2YgdGhlIG5vZGUgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byBhIGhvbGRcbiAgICAgKiBAcGFyYW0gaG9sZElkIFRoZSBJZCBvZiB0aGUgaG9sZCB0byB3aGljaCBub2RlcyB3aWxsIGJlIGFzc2lnbmVkXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxIb2xkRW50cnk+XG4gICAgICovXG4gICAgYXNzaWduSG9sZChub2RlSWQ6IHN0cmluZywgaG9sZElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEhvbGRFbnRyeT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmxlZ2FsSG9sZEFwaS5hc3NpZ25Ib2xkKG5vZGVJZCwgaG9sZElkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWduIG11bHRpcGxlIG5vZGVzIHRvIGEgaG9sZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWRzIFRoZSBsaXN0IG9mIG1hbmFnZWQgbm9kZSBJZHNcbiAgICAgKiBAcGFyYW0gaG9sZElkIFRoZSBJZCBvZiB0aGUgaG9sZCB0byB3aGljaCBub2RlcyB3aWxsIGJlIGFzc2lnbmVkXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxIb2xkUGFnaW5nPlxuICAgICAqL1xuICAgIGFzc2lnbkhvbGRzKG5vZGVJZHM6IHsgaWQ6IHN0cmluZyB9W10sIGhvbGRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIb2xkUGFnaW5nPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubGVnYWxIb2xkQXBpLmFzc2lnbkhvbGRzKG5vZGVJZHMsIGhvbGRJZCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuYXNzaWduIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIGNoaWxkIHdpdGggaWQgbm9kZUlkIGFuZCBhIHBhcmVudCBob2xkIHdpdGggaWQgaG9sZElkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGRJZCBUaGUgaG9sZCBJZFxuICAgICAqIEBwYXJhbSBub2RlSWQgVGhlIElkIG9mIHRoZSBub2RlIHdoaWNoIGlzIHVuYXNzaWduZWRcbiAgICAgKiBAcmV0dXJucyBFbXB0eSByZXNwb25zZVxuICAgICAqL1xuICAgIHVuYXNzaWduSG9sZChob2xkSWQ6IHN0cmluZywgbm9kZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5sZWdhbEhvbGRBcGkudW5hc3NpZ25Ib2xkKGhvbGRJZCwgbm9kZUlkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGhvbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBsYW5JZCBUaGUgaWRlbnRpZmllciBvZiBhIGZpbGUgcGxhbi4gWW91IGNhbiBhbHNvIHVzZSB0aGUgLWZpbGVQbGFuLSBhbGlhcy5cbiAgICAgKiBAcGFyYW0gaG9sZCBIb2xkIHRvIGNyZWF0ZVxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgY3JlYXRlZCBob2xkcyBPYnNlcnZhYmxlPEhvbGRFbnRyeT5cbiAgICAgKi9cbiAgICBjcmVhdGVIb2xkKGZpbGVQbGFuSWQ6IHN0cmluZywgaG9sZDogSG9sZEJvZHkpOiBPYnNlcnZhYmxlPEhvbGRFbnRyeT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmxlZ2FsSG9sZEFwaS5jcmVhdGVIb2xkKGZpbGVQbGFuSWQsIGhvbGQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgbGlzdCBvZiBob2xkcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlUGxhbklkIFRoZSBpZGVudGlmaWVyIG9mIGEgZmlsZSBwbGFuLiBZb3UgY2FuIGFsc28gdXNlIHRoZSAtZmlsZVBsYW4tIGFsaWFzLlxuICAgICAqIEBwYXJhbSBob2xkcyBBcnJheSBvZiBob2xkcyB0byBjcmVhdGVcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIGNyZWF0ZWQgaG9sZHMgT2JzZXJ2YWJsZTxIb2xkUGFnaW5nPlxuICAgICAqL1xuICAgIGNyZWF0ZUhvbGRzKGZpbGVQbGFuSWQ6IHN0cmluZywgaG9sZHM6IEhvbGRCb2R5W10pOiBPYnNlcnZhYmxlPEhvbGRQYWdpbmc+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5sZWdhbEhvbGRBcGkuY3JlYXRlSG9sZHMoZmlsZVBsYW5JZCwgaG9sZHMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgYXN5bmNocm9ub3VzIGJ1bGsgcHJvY2VzcyBmb3IgYSBob2xkIHdpdGggaWQgaG9sZElkIGJhc2VkIG9uIHNlYXJjaCBxdWVyeSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvbGRJZCBUaGUgaWRlbnRpZmllciBvZiBhIGhvbGRcbiAgICAgKiBAcGFyYW0gcXVlcnkgU2VhcmNoIHF1ZXJ5XG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxCdWxrQXNzaWduSG9sZFJlc3BvbnNlRW50cnk+XG4gICAgICovXG4gICAgYnVsa0Fzc2lnbkhvbGQoaG9sZElkOiBzdHJpbmcsIHF1ZXJ5OiBSZXF1ZXN0UXVlcnkpOiBPYnNlcnZhYmxlPEJ1bGtBc3NpZ25Ib2xkUmVzcG9uc2VFbnRyeT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmxlZ2FsSG9sZEFwaS5idWxrQXNzaWduSG9sZChob2xkSWQsIHF1ZXJ5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWduIGEgZm9sZGVyIHRvIGEgaG9sZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBob2xkSWQgVGhlIGlkZW50aWZpZXIgb2YgYSBob2xkXG4gICAgICogQHBhcmFtIGZvbGRlcklkIFRoZSBpZGVudGlmaWVyIG9mIGEgZm9sZGVyXG4gICAgICogQHBhcmFtIGxhbmd1YWdlIExhbmd1YWdlIGNvZGVcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEJ1bGtBc3NpZ25Ib2xkUmVzcG9uc2VFbnRyeT5cbiAgICAgKi9cbiAgICBidWxrQXNzaWduSG9sZFRvRm9sZGVyKGhvbGRJZDogc3RyaW5nLCBmb2xkZXJJZDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxCdWxrQXNzaWduSG9sZFJlc3BvbnNlRW50cnk+IHtcbiAgICAgICAgY29uc3QgcXVlcnk6IFJlcXVlc3RRdWVyeSA9IHtcbiAgICAgICAgICAgIHF1ZXJ5OiBgQU5DRVNUT1I6J3dvcmtzcGFjZTovL1NwYWNlc1N0b3JlLyR7Zm9sZGVySWR9JyBhbmQgVFlQRTpjb250ZW50YCxcbiAgICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5sZWdhbEhvbGRBcGkuYnVsa0Fzc2lnbkhvbGQoaG9sZElkLCBxdWVyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzdGF0dXMgb2YgYnVsayBvcGVyYXRpb24gd2l0aCAqKmJ1bGtTdGF0dXNJZCoqIGZvciAqKmhvbGRJZCoqLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1bGtTdGF0dXNJZCBUaGUgaWRlbnRpZmllciBvZiBhIGJ1bGsgc3RhdHVzXG4gICAgICogQHBhcmFtIGhvbGRJZCBUaGUgaWRlbnRpZmllciBvZiBhIGhvbGRcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPEhvbGRzQnVsa1N0YXR1c0VudHJ5PlxuICAgICAqL1xuICAgIGdldEJ1bGtPcGVyYXRpb25TdGF0dXMoYnVsa1N0YXR1c0lkOiBzdHJpbmcsIGhvbGRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIb2xkQnVsa1N0YXR1c0VudHJ5PiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubGVnYWxIb2xkQXBpLmdldEJ1bGtTdGF0dXMoYnVsa1N0YXR1c0lkLCBob2xkSWQpKTtcbiAgICB9XG59XG4iXX0=