UNPKG

dynamic-display-shared

Version:

A library for dynamic view

205 lines 26.7 kB
import { Inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { HttpHeaders, HttpClient } from '@angular/common/http'; import { OAuthService } from 'angular-oauth2-oidc'; import { AzurestorageService } from './azure-storage.service'; import { ApiBaseService } from '../../infrastructure/data/api-base.service'; import { Logger } from '../../infrastructure/logger'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; import * as i2 from "../../infrastructure/logger"; import * as i3 from "angular-oauth2-oidc"; import * as i4 from "./azure-storage.service"; export class StorageService extends ApiBaseService { constructor(http, logger, oauthService, blobService, env) { super(http, logger, oauthService, env); this.http = http; this.logger = logger; this.oauthService = oauthService; this.blobService = blobService; this.env = env; this.subscriptions = []; } ngOnDestroy() { this.subscriptions.forEach(subscription => { if (subscription) { subscription.unsubscribe(); } }); } getSAS(fileName) { const self = this; return new Observable(observer => { const url = `${this.baseUrl}/storage/GetSAS?fileName=${fileName}`; // const requestBody = entityForUpdate; const options = { responseType: 'text', headers: new HttpHeaders({ 'Content-Type': 'application/text', }) }; self.subscriptions.push(this.http.get(url, options).subscribe(response => { observer.next(response); observer.complete(); }, error => { self.logger.error(`An error occurred while get SAS token`, error); observer.error(error); })); }); } getReadSASTokenURL(fileName) { const self = this; return new Observable(observer => { const url = `${this.baseUrl}/storage/GetReadSASTokenURL?fileName=${fileName}`; const options = { responseType: 'text', headers: new HttpHeaders({ 'Content-Type': 'application/text', }) }; self.subscriptions.push(this.http.get(url, options).subscribe(response => { observer.next(response); observer.complete(); }, error => { self.logger.error(`An error occurred while get SAS token url`, error); observer.error(error); })); }); } UploadFilesData(uploadFilesData) { const self = this; let filesUploadCounter = 0; return new Observable(observer => { for (const fileData of uploadFilesData) { // const originalFileName = fileData.file.name; // const fileName = getFileName(entityId, fileData.parameterMetadataId, originalFileName); self.subscriptions.push(this.uploadFileByToken(fileData.file, fileData.storedFileName, fileData.file.type) .subscribe(isUpload => { if (isUpload) { filesUploadCounter++; if (filesUploadCounter == uploadFilesData.length) { observer.next(true); observer.complete(); } } else { observer.error(); } }, error => { observer.error(); })); } }); } // upload(formData: FormData) { // return this.http.post<{ path: string }>( // 'https://localhost:5001/api/storage/uploadfile', // formData // ); // } // public uploadFile(fileName: string) // : Observable<any> { // const self = this; // return new Observable(observer => { // const url = `${this.baseUrl}/storage/GetSAS?fileName=` + fileName; // // const requestBody = entityForUpdate; // const options = { // responseType: 'text', // headers: new HttpHeaders({ // 'Content-Type': 'application/text', // }) // }; // this.http.get<string>(url).subscribe( // response => { // observer.next(response); // observer.complete(); // }, // error => { // self.logger.error(`An error occurred while get SAS token`, error); // observer.error(error); // } // ); // }); // } uploadFileByToken(file, fileName, mimeType) { const self = this; return new Observable(observer => { // this.signalr.startConnection().then(connectionId => { // console.log('SIGNALR ConnectionId', connectionId); self.currentFileName = fileName; const fileToSAS = { FileName: fileName, MimeType: mimeType }; // const fileToSAS: FileToToken = { FileName: fileName, MimeType: mimeType }; self.subscriptions.push(self.getSasTokenWrite(fileName).subscribe(sas => { self.subscriptions.push(self.uploadFile(file, sas, fileName).subscribe(isUpload => { observer.next(isUpload); //observer.complete(); })); })); // }).catch( // err => { // this.showErrr(err); // } // ); }); } getSasTokenWrite(file) { // return this.azureFileUploadService.getSasTokenWrite(file); return this.getSAS(file); } uploadFile(file, token, fileName) { const self = this; return new Observable(observer => { const Config = { sas: token, storageAccount: this.env.azureStorageConfig.storageAccount, containerName: this.env.azureStorageConfig.containerName }; const res = false; if (file !== null) { const fileTitle = fileName == null ? file.name : fileName; const baseUrl = 'https://' + Config.storageAccount + '/' + Config.containerName + '/' + fileTitle; this.uploadConfig = { baseUrl, blockSize: 1024 * 500, sasToken: Config.sas, file, complete: () => { console.log('Transfer completed !'); observer.next(true); observer.complete(); // this.saveFileSuccess(isSave); }, error: (err) => { console.log('Transfer Error:', err); this.saveFileError(err); observer.next(false); observer.error(err); }, progress: (percent) => { this.percent = percent; } }; this.blobService.upload(this.uploadConfig); } }); } saveFileError(error) { console.log('saveFileError', error); } } StorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: StorageService, deps: [{ token: i1.HttpClient }, { token: i2.Logger }, { token: i3.OAuthService }, { token: i4.AzurestorageService }, { token: 'env' }], target: i0.ɵɵFactoryTarget.Injectable }); StorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: StorageService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: StorageService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.Logger }, { type: i3.OAuthService }, { type: i4.AzurestorageService }, { type: undefined, decorators: [{ type: Inject, args: ['env'] }] }]; } }); export class UploadParams { } export class UploadConfig { } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHluYW1pYy1kaXNwbGF5LXNoYXJlZC9zcmMvbGliL3NoYXJlZC9kb2N1bWVudHMvc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQU9yRCxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFPaEQsWUFBK0IsSUFBZ0IsRUFDMUIsTUFBYyxFQUFxQixZQUEwQixFQUFVLFdBQWdDLEVBQW9DLEdBQVE7UUFDdEssS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRlYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQXFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO1FBQW9DLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFIaEssa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBSzNDLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFD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LEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7MkdBbk1VLGNBQWMsaUlBUTZHLEtBQUs7K0dBUmhJLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTZ0ksTUFBTTsyQkFBQyxLQUFLOztBQTZMN0ksTUFBTSxPQUFPLFlBQVk7Q0FJeEI7QUFDRCxNQUFNLE9BQU8sWUFBWTtDQVF4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCB7IEF6dXJlc3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2F6dXJlLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvZGF0YS9hcGktYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvbG9nZ2VyJztcclxuaW1wb3J0IHsgVXBsb2FkRmlsZURhdGEgfSBmcm9tICcuLi9zZXJ2aWNlcy91cGRhdGUtZW50aXR5LnNlcnZpY2UnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTZXJ2aWNlIGV4dGVuZHMgQXBpQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICB1cGxvYWRDb25maWchOiBVcGxvYWRDb25maWc7XHJcbiAgcGVyY2VudCE6IG51bWJlcjtcclxuICBjdXJyZW50RmlsZU5hbWUhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3ZlcnJpZGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBsb2dnZXI6IExvZ2dlciwgcHJvdGVjdGVkIG92ZXJyaWRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLCBwcml2YXRlIGJsb2JTZXJ2aWNlOiBBenVyZXN0b3JhZ2VTZXJ2aWNlLCBASW5qZWN0KCdlbnYnKSBwcm90ZWN0ZWQgb3ZlcnJpZGUgZW52OiBhbnkpIHtcclxuICAgIHN1cGVyKGh0dHAsIGxvZ2dlciwgb2F1dGhTZXJ2aWNlLCBlbnYpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XHJcbiAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcclxuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRTQVMoZmlsZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vc3RvcmFnZS9HZXRTQVM/ZmlsZU5hbWU9JHtmaWxlTmFtZX1gO1xyXG4gICAgICAvLyAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gZW50aXR5Rm9yVXBkYXRlO1xyXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnIGFzICdqc29uJyxcclxuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi90ZXh0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9O1xyXG4gICAgICBzZWxmLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmh0dHAuZ2V0PHN0cmluZz4odXJsLCBvcHRpb25zKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXQgU0FTIHRva2VuYCwgZXJyb3IpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWFkU0FTVG9rZW5VUkwoZmlsZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vc3RvcmFnZS9HZXRSZWFkU0FTVG9rZW5VUkw/ZmlsZU5hbWU9JHtmaWxlTmFtZX1gO1xyXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnIGFzICdqc29uJyxcclxuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi90ZXh0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9O1xyXG4gICAgICBzZWxmLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmh0dHAuZ2V0PHN0cmluZz4odXJsLCBvcHRpb25zKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZSk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldCBTQVMgdG9rZW4gdXJsYCwgZXJyb3IpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGxvYWRGaWxlc0RhdGEodXBsb2FkRmlsZXNEYXRhOiBVcGxvYWRGaWxlRGF0YVtdKVxyXG4gICAgOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgbGV0IGZpbGVzVXBsb2FkQ291bnRlciA9IDA7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICBmb3IgKGNvbnN0IGZpbGVEYXRhIG9mIHVwbG9hZEZpbGVzRGF0YSkge1xyXG4gICAgICAgIC8vIGNvbnN0IG9yaWdpbmFsRmlsZU5hbWUgPSBmaWxlRGF0YS5maWxlLm5hbWU7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsZU5hbWUgPSBnZXRGaWxlTmFtZShlbnRpdHlJZCwgZmlsZURhdGEucGFyYW1ldGVyTWV0YWRhdGFJZCwgb3JpZ2luYWxGaWxlTmFtZSk7XHJcbiAgICAgICAgc2VsZi5zdWJzY3JpcHRpb25zLnB1c2godGhpcy51cGxvYWRGaWxlQnlUb2tlbihmaWxlRGF0YS5maWxlLCBmaWxlRGF0YS5zdG9yZWRGaWxlTmFtZSwgZmlsZURhdGEuZmlsZS50eXBlKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShpc1VwbG9hZCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc1VwbG9hZCkge1xyXG4gICAgICAgICAgICAgIGZpbGVzVXBsb2FkQ291bnRlcisrO1xyXG4gICAgICAgICAgICAgIGlmIChmaWxlc1VwbG9hZENvdW50ZXIgPT0gdXBsb2FkRmlsZXNEYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBsb2FkKGZvcm1EYXRhOiBGb3JtRGF0YSkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHsgcGF0aDogc3RyaW5nIH0+KFxyXG4gIC8vICAgICAnaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9hcGkvc3RvcmFnZS91cGxvYWRmaWxlJyxcclxuICAvLyAgICAgZm9ybURhdGFcclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG4gIC8vIHB1YmxpYyB1cGxvYWRGaWxlKGZpbGVOYW1lOiBzdHJpbmcpXHJcbiAgLy8gICA6IE9ic2VydmFibGU8YW55PiB7XHJcblxyXG4gIC8vICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG4gIC8vICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAvLyAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS9zdG9yYWdlL0dldFNBUz9maWxlTmFtZT1gICsgZmlsZU5hbWU7XHJcbiAgLy8gICAgIC8vICAgY29uc3QgcmVxdWVzdEJvZHkgPSBlbnRpdHlGb3JVcGRhdGU7XHJcbiAgLy8gICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgLy8gICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgLy8gICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAvLyAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdGV4dCcsXHJcbiAgLy8gICAgICAgfSlcclxuICAvLyAgICAgfTtcclxuICAvLyAgICAgdGhpcy5odHRwLmdldDxzdHJpbmc+KHVybCkuc3Vic2NyaWJlKFxyXG4gIC8vICAgICAgIHJlc3BvbnNlID0+IHtcclxuICAvLyAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UpO1xyXG5cclxuICAvLyAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgICBlcnJvciA9PiB7XHJcbiAgLy8gICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0IFNBUyB0b2tlbmAsIGVycm9yKTtcclxuICAvLyAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHVwbG9hZEZpbGVCeVRva2VuKGZpbGU6IEZpbGUsIGZpbGVOYW1lOiBzdHJpbmcsIG1pbWVUeXBlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgLy8gdGhpcy5zaWduYWxyLnN0YXJ0Q29ubmVjdGlvbigpLnRoZW4oY29ubmVjdGlvbklkID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1NJR05BTFIgQ29ubmVjdGlvbklkJywgY29ubmVjdGlvbklkKTtcclxuICAgICAgc2VsZi5jdXJyZW50RmlsZU5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgY29uc3QgZmlsZVRvU0FTID0geyBGaWxlTmFtZTogZmlsZU5hbWUsIE1pbWVUeXBlOiBtaW1lVHlwZSB9O1xyXG4gICAgICAvLyBjb25zdCBmaWxlVG9TQVM6IEZpbGVUb1Rva2VuID0geyBGaWxlTmFtZTogZmlsZU5hbWUsIE1pbWVUeXBlOiBtaW1lVHlwZSB9O1xyXG4gICAgICBzZWxmLnN1YnNjcmlwdGlvbnMucHVzaChzZWxmLmdldFNhc1Rva2VuV3JpdGUoZmlsZU5hbWUpLnN1YnNjcmliZShzYXMgPT4ge1xyXG4gICAgICAgIHNlbGYuc3Vic2NyaXB0aW9ucy5wdXNoKHNlbGYudXBsb2FkRmlsZShmaWxlLCBzYXMsIGZpbGVOYW1lKS5zdWJzY3JpYmUoaXNVcGxvYWQgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChpc1VwbG9hZCk7XHJcbiAgICAgICAgICAvL29ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9LFxyXG4gICAgICApKTtcclxuXHJcbiAgICAgIC8vIH0pLmNhdGNoKFxyXG4gICAgICAvLyAgIGVyciA9PiB7XHJcbiAgICAgIC8vICAgICB0aGlzLnNob3dFcnJyKGVycik7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTYXNUb2tlbldyaXRlKGZpbGU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAvLyAgcmV0dXJuIHRoaXMuYXp1cmVGaWxlVXBsb2FkU2VydmljZS5nZXRTYXNUb2tlbldyaXRlKGZpbGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U0FTKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZShmaWxlOiBGaWxlLCB0b2tlbjogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICBjb25zdCBDb25maWc6IFVwbG9hZFBhcmFtcyA9IHtcclxuICAgICAgICBzYXM6IHRva2VuLFxyXG4gICAgICAgIHN0b3JhZ2VBY2NvdW50OiB0aGlzLmVudi5henVyZVN0b3JhZ2VDb25maWcuc3RvcmFnZUFjY291bnQsXHJcbiAgICAgICAgY29udGFpbmVyTmFtZTogdGhpcy5lbnYuYXp1cmVTdG9yYWdlQ29uZmlnLmNvbnRhaW5lck5hbWVcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcmVzID0gZmFsc2U7XHJcbiAgICAgIGlmIChmaWxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZVRpdGxlID0gZmlsZU5hbWUgPT0gbnVsbCA/IGZpbGUubmFtZSA6IGZpbGVOYW1lO1xyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSAnaHR0cHM6Ly8nICsgQ29uZmlnLnN0b3JhZ2VBY2NvdW50ICsgJy8nICsgQ29uZmlnLmNvbnRhaW5lck5hbWUgKyAnLycgKyBmaWxlVGl0bGU7XHJcbiAgICAgICAgdGhpcy51cGxvYWRDb25maWcgPSB7XHJcbiAgICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgICAgYmxvY2tTaXplOiAxMDI0ICogNTAwLFxyXG4gICAgICAgICAgc2FzVG9rZW46IENvbmZpZy5zYXMsXHJcbiAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RyYW5zZmVyIGNvbXBsZXRlZCAhJyk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2F2ZUZpbGVTdWNjZXNzKGlzU2F2ZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RyYW5zZmVyIEVycm9yOicsIGVycik7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUZpbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcm9ncmVzczogKHBlcmNlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wZXJjZW50ID0gcGVyY2VudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYmxvYlNlcnZpY2UudXBsb2FkKHRoaXMudXBsb2FkQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNhdmVGaWxlRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ3NhdmVGaWxlRXJyb3InLCBlcnJvcik7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRQYXJhbXMge1xyXG4gIHNhcyE6IHN0cmluZztcclxuICBzdG9yYWdlQWNjb3VudCE6IHN0cmluZztcclxuICBjb250YWluZXJOYW1lITogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRDb25maWcge1xyXG4gIGJhc2VVcmwhOiBzdHJpbmc7XHJcbiAgYmxvY2tTaXplITogbnVtYmVyO1xyXG4gIHNhc1Rva2VuITogc3RyaW5nO1xyXG4gIGZpbGUhOiBGaWxlO1xyXG4gIGNvbXBsZXRlITogKCkgPT4gdm9pZDtcclxuICBlcnJvciE6IChlcnI6IGFueSkgPT4gdm9pZDtcclxuICBwcm9ncmVzcyE6IChwZXJjZW50OiBhbnkpID0+IHZvaWQ7XHJcbn1cclxuXHJcblxyXG4iXX0=