UNPKG

@alfresco/adf-content-services

Version:
122 lines 16.3 kB
/*! * @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, Output, EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { DownloadService } from '@alfresco/adf-core'; import { MatDialog } from '@angular/material/dialog'; import { ContentService } from '../../common/services/content.service'; import { NodeDownloadDirective } from '../../directives/node-download.directive'; import { AlfrescoApiService } from '../../services/alfresco-api.service'; import { DocumentListService } from './document-list.service'; import { ContentNodeDialogService } from '../../content-node-selector/content-node-dialog.service'; import { NodeAction } from '../models/node-action.enum'; import * as i0 from "@angular/core"; import * as i1 from "../../content-node-selector/content-node-dialog.service"; import * as i2 from "@angular/material/dialog"; import * as i3 from "../../common/services/content.service"; import * as i4 from "./document-list.service"; import * as i5 from "../../services/alfresco-api.service"; import * as i6 from "@alfresco/adf-core"; // eslint-disable-next-line @angular-eslint/directive-class-suffix export class NodeActionsService { constructor(contentDialogService, dialogRef, content, documentListService, apiService, dialog, downloadService) { this.contentDialogService = contentDialogService; this.dialogRef = dialogRef; this.content = content; this.documentListService = documentListService; this.apiService = apiService; this.dialog = dialog; this.downloadService = downloadService; this.error = new EventEmitter(); } downloadNode(node) { new NodeDownloadDirective(this.apiService, this.downloadService, this.dialog).downloadNode(node); } /** * Copy content node * * @param contentEntry node to copy * @param permission permission which is needed to apply the action * @returns operation result */ copyContent(contentEntry, permission) { return this.doFileOperation(NodeAction.COPY, 'content', contentEntry, permission); } /** * Copy folder node * * @param contentEntry node to copy * @param permission permission which is needed to apply the action * @returns operation result */ copyFolder(contentEntry, permission) { return this.doFileOperation(NodeAction.COPY, 'folder', contentEntry, permission); } /** * Move content node * * @param contentEntry node to move * @param permission permission which is needed to apply the action * @returns operation result */ moveContent(contentEntry, permission) { return this.doFileOperation(NodeAction.MOVE, 'content', contentEntry, permission); } /** * Move folder node * * @param contentEntry node to move * @param permission permission which is needed to apply the action * @returns operation result */ moveFolder(contentEntry, permission) { return this.doFileOperation(NodeAction.MOVE, 'folder', contentEntry, permission); } /** * General method for performing the given operation (copy|move) * * @param action the action to perform (copy|move) * @param type type of the content (content|folder) * @param contentEntry the contentEntry which has to have the action performed on * @param permission permission which is needed to apply the action * @returns operation result */ doFileOperation(action, type, contentEntry, permission) { const observable = new Subject(); this.contentDialogService.openCopyMoveDialog(action, contentEntry, permission).subscribe((selections) => { const selection = selections[0]; this.documentListService[`${action.toLowerCase()}Node`] .call(this.documentListService, contentEntry.id, selection.id) .subscribe(observable.next.bind(observable, `OPERATION.SUCCESS.${type.toUpperCase()}.${action}`), observable.error.bind(observable)); }, (error) => { observable.error(error); return observable; }); return observable; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NodeActionsService, deps: [{ token: i1.ContentNodeDialogService }, { token: i2.MatDialog }, { token: i3.ContentService }, { token: i4.DocumentListService }, { token: i5.AlfrescoApiService }, { token: i2.MatDialog }, { token: i6.DownloadService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NodeActionsService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NodeActionsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.ContentNodeDialogService }, { type: i2.MatDialog }, { type: i3.ContentService }, { type: i4.DocumentListService }, { type: i5.AlfrescoApiService }, { type: i2.MatDialog }, { type: i6.DownloadService }], propDecorators: { error: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1hY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3Qvc2VydmljZXMvbm9kZS1hY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQUt4RCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLGtCQUFrQjtJQUkzQixZQUNZLG9CQUE4QyxFQUMvQyxTQUFvQixFQUNwQixPQUF1QixFQUN0QixtQkFBeUMsRUFDekMsVUFBK0IsRUFDL0IsTUFBa0IsRUFDbEIsZUFBaUM7UUFOakMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEwQjtRQUMvQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBc0I7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQixvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFUN0MsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFVN0IsQ0FBQztJQUVKLFlBQVksQ0FBQyxJQUFlO1FBQ3hCLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxZQUFrQixFQUFFLFVBQW1CO1FBQy9DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FBQyxZQUFrQixFQUFFLFVBQW1CO1FBQzlDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxZQUFrQixFQUFFLFVBQW1CO1FBQy9DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFVBQVUsQ0FBQyxZQUFrQixFQUFFLFVBQW1CO1FBQzlDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssZUFBZSxDQUNuQixNQUF5QyxFQUN6QyxJQUEwQixFQUMxQixZQUFrQixFQUNsQixVQUFtQjtRQUVuQixNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXpDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDcEYsQ0FBQyxVQUFrQixFQUFFLEVBQUU7WUFDbkIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2lCQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztpQkFDN0QsU0FBUyxDQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxxQkFBcUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQ3JGLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO1FBQ1YsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDTixVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUMsQ0FDSixDQUFDO1FBQ0YsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQzs4R0EvRlEsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FIZixNQUFNOzsyRkFHVCxrQkFBa0I7a0JBSjlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzJRQUlHLEtBQUs7c0JBREosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUsIE5vZGVFbnRyeSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZURvd25sb2FkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ub2RlLWRvd25sb2FkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5cbmltcG9ydCB7IERvY3VtZW50TGlzdFNlcnZpY2UgfSBmcm9tICcuL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50Tm9kZURpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLWRpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVBY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvbm9kZS1hY3Rpb24uZW51bSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBOb2RlQWN0aW9uc1NlcnZpY2Uge1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50RGlhbG9nU2VydmljZTogQ29udGVudE5vZGVEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2csXG4gICAgICAgIHB1YmxpYyBjb250ZW50OiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudExpc3RTZXJ2aWNlPzogRG9jdW1lbnRMaXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcGlTZXJ2aWNlPzogQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZz86IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSBkb3dubG9hZFNlcnZpY2U/OiBEb3dubG9hZFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBkb3dubG9hZE5vZGUobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIG5ldyBOb2RlRG93bmxvYWREaXJlY3RpdmUodGhpcy5hcGlTZXJ2aWNlLCB0aGlzLmRvd25sb2FkU2VydmljZSwgdGhpcy5kaWFsb2cpLmRvd25sb2FkTm9kZShub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGNvbnRlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRlbnRFbnRyeSBub2RlIHRvIGNvcHlcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbiBwZXJtaXNzaW9uIHdoaWNoIGlzIG5lZWRlZCB0byBhcHBseSB0aGUgYWN0aW9uXG4gICAgICogQHJldHVybnMgb3BlcmF0aW9uIHJlc3VsdFxuICAgICAqL1xuICAgIGNvcHlDb250ZW50KGNvbnRlbnRFbnRyeTogTm9kZSwgcGVybWlzc2lvbj86IHN0cmluZyk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvRmlsZU9wZXJhdGlvbihOb2RlQWN0aW9uLkNPUFksICdjb250ZW50JywgY29udGVudEVudHJ5LCBwZXJtaXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZvbGRlciBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGVudEVudHJ5IG5vZGUgdG8gY29weVxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uIHBlcm1pc3Npb24gd2hpY2ggaXMgbmVlZGVkIHRvIGFwcGx5IHRoZSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBvcGVyYXRpb24gcmVzdWx0XG4gICAgICovXG4gICAgY29weUZvbGRlcihjb250ZW50RW50cnk6IE5vZGUsIHBlcm1pc3Npb24/OiBzdHJpbmcpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb0ZpbGVPcGVyYXRpb24oTm9kZUFjdGlvbi5DT1BZLCAnZm9sZGVyJywgY29udGVudEVudHJ5LCBwZXJtaXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIGNvbnRlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRlbnRFbnRyeSBub2RlIHRvIG1vdmVcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbiBwZXJtaXNzaW9uIHdoaWNoIGlzIG5lZWRlZCB0byBhcHBseSB0aGUgYWN0aW9uXG4gICAgICogQHJldHVybnMgb3BlcmF0aW9uIHJlc3VsdFxuICAgICAqL1xuICAgIG1vdmVDb250ZW50KGNvbnRlbnRFbnRyeTogTm9kZSwgcGVybWlzc2lvbj86IHN0cmluZyk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvRmlsZU9wZXJhdGlvbihOb2RlQWN0aW9uLk1PVkUsICdjb250ZW50JywgY29udGVudEVudHJ5LCBwZXJtaXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIGZvbGRlciBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGVudEVudHJ5IG5vZGUgdG8gbW92ZVxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uIHBlcm1pc3Npb24gd2hpY2ggaXMgbmVlZGVkIHRvIGFwcGx5IHRoZSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBvcGVyYXRpb24gcmVzdWx0XG4gICAgICovXG4gICAgbW92ZUZvbGRlcihjb250ZW50RW50cnk6IE5vZGUsIHBlcm1pc3Npb24/OiBzdHJpbmcpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb0ZpbGVPcGVyYXRpb24oTm9kZUFjdGlvbi5NT1ZFLCAnZm9sZGVyJywgY29udGVudEVudHJ5LCBwZXJtaXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmFsIG1ldGhvZCBmb3IgcGVyZm9ybWluZyB0aGUgZ2l2ZW4gb3BlcmF0aW9uIChjb3B5fG1vdmUpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSAoY29weXxtb3ZlKVxuICAgICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIGNvbnRlbnQgKGNvbnRlbnR8Zm9sZGVyKVxuICAgICAqIEBwYXJhbSBjb250ZW50RW50cnkgdGhlIGNvbnRlbnRFbnRyeSB3aGljaCBoYXMgdG8gaGF2ZSB0aGUgYWN0aW9uIHBlcmZvcm1lZCBvblxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uIHBlcm1pc3Npb24gd2hpY2ggaXMgbmVlZGVkIHRvIGFwcGx5IHRoZSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBvcGVyYXRpb24gcmVzdWx0XG4gICAgICovXG4gICAgcHJpdmF0ZSBkb0ZpbGVPcGVyYXRpb24oXG4gICAgICAgIGFjdGlvbjogTm9kZUFjdGlvbi5DT1BZIHwgTm9kZUFjdGlvbi5NT1ZFLFxuICAgICAgICB0eXBlOiAnY29udGVudCcgfCAnZm9sZGVyJyxcbiAgICAgICAgY29udGVudEVudHJ5OiBOb2RlLFxuICAgICAgICBwZXJtaXNzaW9uPzogc3RyaW5nXG4gICAgKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnREaWFsb2dTZXJ2aWNlLm9wZW5Db3B5TW92ZURpYWxvZyhhY3Rpb24sIGNvbnRlbnRFbnRyeSwgcGVybWlzc2lvbikuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKHNlbGVjdGlvbnM6IE5vZGVbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlW2Ake2FjdGlvbi50b0xvd2VyQ2FzZSgpfU5vZGVgXVxuICAgICAgICAgICAgICAgICAgICAuY2FsbCh0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UsIGNvbnRlbnRFbnRyeS5pZCwgc2VsZWN0aW9uLmlkKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5uZXh0LmJpbmQob2JzZXJ2YWJsZSwgYE9QRVJBVElPTi5TVUNDRVNTLiR7dHlwZS50b1VwcGVyQ2FzZSgpfS4ke2FjdGlvbn1gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmFibGUuZXJyb3IuYmluZChvYnNlcnZhYmxlKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9XG59XG4iXX0=