UNPKG

@alfresco/adf-content-services

Version:
120 lines 18.2 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 { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; import { AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api'; import { ReplaySubject } from 'rxjs'; import { AppConfigService, AppConfigValues, StorageService } from '@alfresco/adf-core'; import * as i0 from "@angular/core"; import * as i1 from "@alfresco/adf-core"; export const ALFRESCO_API_FACTORY = new InjectionToken('ALFRESCO_API_FACTORY'); export class AlfrescoApiService { getInstance() { return this.alfrescoApi; } constructor(appConfig, storageService, alfrescoApiFactory) { this.appConfig = appConfig; this.storageService = storageService; this.alfrescoApiFactory = alfrescoApiFactory; this.alfrescoApiInitialized = new ReplaySubject(1); this.excludedErrorUrl = ['api/enterprise/system/properties']; } async load(config) { this.currentAppConfig = config; if (config.authType === 'OAUTH') { await this.mapAlfrescoApiOpenIdConfig(); } this.initAlfrescoApi(); this.alfrescoApiInitialized.next(true); } async reset() { this.getCurrentAppConfig(); if (this.currentAppConfig.authType === 'OAUTH') { await this.mapAlfrescoApiOpenIdConfig(); } this.initAlfrescoApiWithConfig(); } getAuthWithFixedOriginLocation() { const oauth = this.appConfig.oauth2; if (oauth) { oauth.redirectUri = window.location.origin + window.location.pathname; oauth.redirectUriLogout = window.location.origin + window.location.pathname; } return oauth; } async mapAlfrescoApiOpenIdConfig() { this.idpConfig = await this.appConfig.loadWellKnown(this.currentAppConfig.oauth2.host); this.currentAppConfig.oauth2.tokenUrl = this.idpConfig.token_endpoint; this.currentAppConfig.oauth2.authorizationUrl = this.idpConfig.authorization_endpoint; this.currentAppConfig.oauth2.logoutUrl = this.idpConfig.end_session_endpoint; this.currentAppConfig.oauth2.userinfoEndpoint = this.idpConfig.userinfo_endpoint; } getCurrentAppConfig() { const oauth = this.getAuthWithFixedOriginLocation(); this.currentAppConfig = new AlfrescoApiConfig({ provider: this.appConfig.get(AppConfigValues.PROVIDERS), hostEcm: this.appConfig.get(AppConfigValues.ECMHOST), hostBpm: this.appConfig.get(AppConfigValues.BPMHOST), authType: this.appConfig.get(AppConfigValues.AUTHTYPE, 'BASIC'), contextRootBpm: this.appConfig.get(AppConfigValues.CONTEXTROOTBPM), contextRoot: this.appConfig.get(AppConfigValues.CONTEXTROOTECM), disableCsrf: this.appConfig.get(AppConfigValues.DISABLECSRF), withCredentials: this.appConfig.get(AppConfigValues.AUTH_WITH_CREDENTIALS, false), domainPrefix: this.appConfig.get(AppConfigValues.STORAGE_PREFIX), oauth2: oauth }); } initAlfrescoApi() { this.getCurrentAppConfig(); this.initAlfrescoApiWithConfig(); } initAlfrescoApiWithConfig() { if (this.alfrescoApi && this.isDifferentConfig(this.lastConfig, this.currentAppConfig)) { this.alfrescoApi.setConfig(this.currentAppConfig); } else { this.alfrescoApi = this.createInstance(this.currentAppConfig); } this.lastConfig = this.currentAppConfig; } createInstance(config) { if (this.alfrescoApiFactory) { return this.alfrescoApiFactory.createAlfrescoApi(config); } return new AlfrescoApi(config); } isDifferentConfig(lastConfig, newConfig) { return JSON.stringify(lastConfig) !== JSON.stringify(newConfig); } isExcludedErrorListener(currentFullPath) { const formattedPath = currentFullPath.replace(this.lastConfig.hostBpm + '/' + this.lastConfig.contextRootBpm, ''); return this.excludedErrorUrl.includes(formattedPath); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AlfrescoApiService, deps: [{ token: i1.AppConfigService }, { token: i1.StorageService }, { token: ALFRESCO_API_FACTORY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AlfrescoApiService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AlfrescoApiService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.AppConfigService }, { type: i1.StorageService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ALFRESCO_API_FACTORY] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxmcmVzY28tYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBeUMsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUU5SCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBSy9FLE1BQU0sT0FBTyxrQkFBa0I7SUFZM0IsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFDYyxTQUEyQixFQUMzQixjQUE4QixFQUdoQyxrQkFBdUM7UUFKckMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBR2hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFwQm5ELDJCQUFzQixHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBUy9DLHFCQUFnQixHQUFhLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQVl2RSxDQUFDO0lBRUosS0FBSyxDQUFDLElBQUksQ0FBQyxNQUF5QjtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBRS9CLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDUCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLDhCQUE4QjtRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0RSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsMEJBQTBCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztRQUN0RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUNyRixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXBELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGlCQUFpQixDQUFDO1lBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBUyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBUyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQzVELE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBUyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQzVELFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztZQUN2RSxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVMsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUMxRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVMsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUN2RSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVUsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUNyRSxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVUsZUFBZSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQztZQUMxRixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVMsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUN4RSxNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsZUFBZTtRQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8seUJBQXlCO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXlCO1FBQ3BDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQTZCLEVBQUUsU0FBNEI7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELHVCQUF1QixDQUFDLGVBQXVCO1FBQzNDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQTFHUSxrQkFBa0IsZ0ZBb0JmLG9CQUFvQjtrSEFwQnZCLGtCQUFrQixjQUZmLE1BQU07OzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQW9CUSxRQUFROzswQkFDUixNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpLCBBbGZyZXNjb0FwaUNvbmZpZyB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlGYWN0b3J5IH0gZnJvbSAnLi9hbGZyZXNjby1hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UsIEFwcENvbmZpZ1ZhbHVlcywgT2F1dGhDb25maWdNb2RlbCwgT3BlbmlkQ29uZmlndXJhdGlvbiwgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuXG5leHBvcnQgY29uc3QgQUxGUkVTQ09fQVBJX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0FMRlJFU0NPX0FQSV9GQUNUT1JZJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxmcmVzY29BcGlTZXJ2aWNlIHtcbiAgICBhbGZyZXNjb0FwaUluaXRpYWxpemVkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgICBwcm90ZWN0ZWQgYWxmcmVzY29BcGk6IEFsZnJlc2NvQXBpO1xuXG4gICAgbGFzdENvbmZpZzogQWxmcmVzY29BcGlDb25maWc7XG4gICAgY3VycmVudEFwcENvbmZpZzogQWxmcmVzY29BcGlDb25maWc7XG5cbiAgICBpZHBDb25maWc6IE9wZW5pZENvbmZpZ3VyYXRpb247XG5cbiAgICBwcml2YXRlIGV4Y2x1ZGVkRXJyb3JVcmw6IHN0cmluZ1tdID0gWydhcGkvZW50ZXJwcmlzZS9zeXN0ZW0vcHJvcGVydGllcyddO1xuXG4gICAgZ2V0SW5zdGFuY2UoKTogQWxmcmVzY29BcGkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGZyZXNjb0FwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChBTEZSRVNDT19BUElfRkFDVE9SWSlcbiAgICAgICAgcHJpdmF0ZSBhbGZyZXNjb0FwaUZhY3Rvcnk/OiBBbGZyZXNjb0FwaUZhY3RvcnlcbiAgICApIHt9XG5cbiAgICBhc3luYyBsb2FkKGNvbmZpZzogQWxmcmVzY29BcGlDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50QXBwQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChjb25maWcuYXV0aFR5cGUgPT09ICdPQVVUSCcpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubWFwQWxmcmVzY29BcGlPcGVuSWRDb25maWcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdEFsZnJlc2NvQXBpKCk7XG4gICAgICAgIHRoaXMuYWxmcmVzY29BcGlJbml0aWFsaXplZC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmdldEN1cnJlbnRBcHBDb25maWcoKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFwcENvbmZpZy5hdXRoVHlwZSA9PT0gJ09BVVRIJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXBBbGZyZXNjb0FwaU9wZW5JZENvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdEFsZnJlc2NvQXBpV2l0aENvbmZpZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXV0aFdpdGhGaXhlZE9yaWdpbkxvY2F0aW9uKCk6IE9hdXRoQ29uZmlnTW9kZWwge1xuICAgICAgICBjb25zdCBvYXV0aCA9IHRoaXMuYXBwQ29uZmlnLm9hdXRoMjtcblxuICAgICAgICBpZiAob2F1dGgpIHtcbiAgICAgICAgICAgIG9hdXRoLnJlZGlyZWN0VXJpID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgICAgIG9hdXRoLnJlZGlyZWN0VXJpTG9nb3V0ID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2F1dGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtYXBBbGZyZXNjb0FwaU9wZW5JZENvbmZpZygpIHtcbiAgICAgICAgdGhpcy5pZHBDb25maWcgPSBhd2FpdCB0aGlzLmFwcENvbmZpZy5sb2FkV2VsbEtub3duKHRoaXMuY3VycmVudEFwcENvbmZpZy5vYXV0aDIuaG9zdCk7XG4gICAgICAgIHRoaXMuY3VycmVudEFwcENvbmZpZy5vYXV0aDIudG9rZW5VcmwgPSB0aGlzLmlkcENvbmZpZy50b2tlbl9lbmRwb2ludDtcbiAgICAgICAgdGhpcy5jdXJyZW50QXBwQ29uZmlnLm9hdXRoMi5hdXRob3JpemF0aW9uVXJsID0gdGhpcy5pZHBDb25maWcuYXV0aG9yaXphdGlvbl9lbmRwb2ludDtcbiAgICAgICAgdGhpcy5jdXJyZW50QXBwQ29uZmlnLm9hdXRoMi5sb2dvdXRVcmwgPSB0aGlzLmlkcENvbmZpZy5lbmRfc2Vzc2lvbl9lbmRwb2ludDtcbiAgICAgICAgdGhpcy5jdXJyZW50QXBwQ29uZmlnLm9hdXRoMi51c2VyaW5mb0VuZHBvaW50ID0gdGhpcy5pZHBDb25maWcudXNlcmluZm9fZW5kcG9pbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50QXBwQ29uZmlnKCkge1xuICAgICAgICBjb25zdCBvYXV0aCA9IHRoaXMuZ2V0QXV0aFdpdGhGaXhlZE9yaWdpbkxvY2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50QXBwQ29uZmlnID0gbmV3IEFsZnJlc2NvQXBpQ29uZmlnKHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLmFwcENvbmZpZy5nZXQ8c3RyaW5nPihBcHBDb25maWdWYWx1ZXMuUFJPVklERVJTKSxcbiAgICAgICAgICAgIGhvc3RFY206IHRoaXMuYXBwQ29uZmlnLmdldDxzdHJpbmc+KEFwcENvbmZpZ1ZhbHVlcy5FQ01IT1NUKSxcbiAgICAgICAgICAgIGhvc3RCcG06IHRoaXMuYXBwQ29uZmlnLmdldDxzdHJpbmc+KEFwcENvbmZpZ1ZhbHVlcy5CUE1IT1NUKSxcbiAgICAgICAgICAgIGF1dGhUeXBlOiB0aGlzLmFwcENvbmZpZy5nZXQ8c3RyaW5nPihBcHBDb25maWdWYWx1ZXMuQVVUSFRZUEUsICdCQVNJQycpLFxuICAgICAgICAgICAgY29udGV4dFJvb3RCcG06IHRoaXMuYXBwQ29uZmlnLmdldDxzdHJpbmc+KEFwcENvbmZpZ1ZhbHVlcy5DT05URVhUUk9PVEJQTSksXG4gICAgICAgICAgICBjb250ZXh0Um9vdDogdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oQXBwQ29uZmlnVmFsdWVzLkNPTlRFWFRST09URUNNKSxcbiAgICAgICAgICAgIGRpc2FibGVDc3JmOiB0aGlzLmFwcENvbmZpZy5nZXQ8Ym9vbGVhbj4oQXBwQ29uZmlnVmFsdWVzLkRJU0FCTEVDU1JGKSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5hcHBDb25maWcuZ2V0PGJvb2xlYW4+KEFwcENvbmZpZ1ZhbHVlcy5BVVRIX1dJVEhfQ1JFREVOVElBTFMsIGZhbHNlKSxcbiAgICAgICAgICAgIGRvbWFpblByZWZpeDogdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oQXBwQ29uZmlnVmFsdWVzLlNUT1JBR0VfUFJFRklYKSxcbiAgICAgICAgICAgIG9hdXRoMjogb2F1dGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRBbGZyZXNjb0FwaSgpIHtcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50QXBwQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuaW5pdEFsZnJlc2NvQXBpV2l0aENvbmZpZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEFsZnJlc2NvQXBpV2l0aENvbmZpZygpIHtcbiAgICAgICAgaWYgKHRoaXMuYWxmcmVzY29BcGkgJiYgdGhpcy5pc0RpZmZlcmVudENvbmZpZyh0aGlzLmxhc3RDb25maWcsIHRoaXMuY3VycmVudEFwcENvbmZpZykpIHtcbiAgICAgICAgICAgIHRoaXMuYWxmcmVzY29BcGkuc2V0Q29uZmlnKHRoaXMuY3VycmVudEFwcENvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsZnJlc2NvQXBpID0gdGhpcy5jcmVhdGVJbnN0YW5jZSh0aGlzLmN1cnJlbnRBcHBDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdENvbmZpZyA9IHRoaXMuY3VycmVudEFwcENvbmZpZztcbiAgICB9XG5cbiAgICBjcmVhdGVJbnN0YW5jZShjb25maWc6IEFsZnJlc2NvQXBpQ29uZmlnKTogQWxmcmVzY29BcGkge1xuICAgICAgICBpZiAodGhpcy5hbGZyZXNjb0FwaUZhY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsZnJlc2NvQXBpRmFjdG9yeS5jcmVhdGVBbGZyZXNjb0FwaShjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWxmcmVzY29BcGkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBpc0RpZmZlcmVudENvbmZpZyhsYXN0Q29uZmlnOiBBbGZyZXNjb0FwaUNvbmZpZywgbmV3Q29uZmlnOiBBbGZyZXNjb0FwaUNvbmZpZykge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobGFzdENvbmZpZykgIT09IEpTT04uc3RyaW5naWZ5KG5ld0NvbmZpZyk7XG4gICAgfVxuXG4gICAgaXNFeGNsdWRlZEVycm9yTGlzdGVuZXIoY3VycmVudEZ1bGxQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkUGF0aCA9IGN1cnJlbnRGdWxsUGF0aC5yZXBsYWNlKHRoaXMubGFzdENvbmZpZy5ob3N0QnBtICsgJy8nICsgdGhpcy5sYXN0Q29uZmlnLmNvbnRleHRSb290QnBtLCAnJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmV4Y2x1ZGVkRXJyb3JVcmwuaW5jbHVkZXMoZm9ybWF0dGVkUGF0aCk7XG4gICAgfVxufVxuIl19