@versatiledatakit/data-pipelines
Version:
Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')
135 lines • 16.8 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
import { Inject, Injectable } from '@angular/core';
import { EMPTY, expand, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { TaurusBaseApiService } from '@versatiledatakit/shared';
import { ErrorUtil } from '../shared/utils';
import { DATA_PIPELINES_CONFIGS } from '../model';
import * as i0 from "@angular/core";
import * as i1 from "./data-jobs-base.api.service";
import * as i2 from "@angular/common/http";
export class DataJobsPublicApiService extends TaurusBaseApiService {
/**
* ** Constructor.
*/
constructor(dataPipelinesConfig, dataJobsBaseService, httpClient) {
super(DataJobsPublicApiService.CLASS_NAME);
this.dataPipelinesConfig = dataPipelinesConfig;
this.dataJobsBaseService = dataJobsBaseService;
this.httpClient = httpClient;
this.registerErrorCodes(DataJobsPublicApiService);
}
/**
* ** Retrieve all DataJobs for Team.
*/
getAllDataJobs(team) {
const pageSize = 1000;
let pageNumber = 1;
let dataJobs = [];
return this._getDataJobsPage(team, pageNumber, pageSize).pipe(expand((dataJobPage) => {
if (dataJobPage.totalPages <= pageNumber) {
return EMPTY;
}
else {
return this._getDataJobsPage(team, ++pageNumber, pageSize);
}
}), map((dataJobPage) => {
dataJobs = dataJobs.concat(dataJobPage.content);
return dataJobs;
}), catchError((error) => throwError(() => ErrorUtil.extractError(error))));
}
/**
* ** Get total number of Data Jobs assets for Team.
*/
getDataJobsTotal(team) {
const filters = [
{
property: 'config.team',
pattern: team,
sort: null
}
];
return this.dataJobsBaseService
.getJobs(team, `query jobsQuery($filter: [Predicate], $search: String, $pageNumber: Int, $pageSize: Int)
{
jobs(filter: $filter, search: $search, pageNumber: $pageNumber, pageSize: $pageSize) {
content {
jobName
config {
team
}
}
totalPages
totalItems
}
}`, {
filter: filters,
search: null,
pageNumber: 1,
pageSize: 1
})
.pipe(map((response) => response?.data?.totalItems ?? 0), catchError((error) => throwError(() => ErrorUtil.extractError(error))));
}
/**
* ** Returns OAuth app client id for given Team name.
*/
getTeamOAuthClientId(teamName) {
return this.httpClient.get(`${this._resolvePipelinesServiceUrl()}/data-jobs/teams/${teamName}/oauth-credentials/client-id`);
}
/**
* ** Returns inventory of found OAuth apps client ids for given Team names.
*/
getInventoryOfTeamsOAuthClientIds(clientIds) {
return this.httpClient.post(`${this._resolvePipelinesServiceUrl()}/data-jobs/oauth-credentials/client-ids`, clientIds);
}
/**
* ** Retrieve the data-jobs page.
*/
_getDataJobsPage(team, pageNumber, pageSize, filters = [], searchQueryValue = null) {
return this.dataJobsBaseService
.getJobs(team, `query jobsQuery($filter: [Predicate], $search: String, $pageNumber: Int, $pageSize: Int)
{
jobs(filter: $filter, search: $search, pageNumber: $pageNumber, pageSize: $pageSize) {
content {
jobName
config {
team
description
sourceUrl
}
}
totalPages
totalItems
}
}`, {
filter: filters,
search: searchQueryValue,
pageNumber,
pageSize
})
.pipe(map((response) => response.data));
}
_resolvePipelinesServiceUrl() {
return this.dataPipelinesConfig?.resourceServer?.getUrl ? this.dataPipelinesConfig.resourceServer.getUrl() : '';
}
}
/**
* @inheritDoc
*/
DataJobsPublicApiService.CLASS_NAME = 'DataJobsPublicApiService';
/**
* @inheritDoc
*/
DataJobsPublicApiService.PUBLIC_NAME = 'Data-Pipelines-Service';
DataJobsPublicApiService.ɵfac = function DataJobsPublicApiService_Factory(t) { return new (t || DataJobsPublicApiService)(i0.ɵɵinject(DATA_PIPELINES_CONFIGS), i0.ɵɵinject(i1.DataJobsBaseApiService), i0.ɵɵinject(i2.HttpClient)); };
DataJobsPublicApiService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DataJobsPublicApiService, factory: DataJobsPublicApiService.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DataJobsPublicApiService, [{
type: Injectable
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [DATA_PIPELINES_CONFIGS]
}] }, { type: i1.DataJobsBaseApiService }, { type: i2.HttpClient }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1qb2JzLXB1YmxpYy5hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtcGlwZWxpbmVzL3NyYy9saWIvc2VydmljZXMvZGF0YS1qb2JzLXB1YmxpYy5hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBMkQsTUFBTSxVQUFVLENBQUM7Ozs7QUFLM0csTUFBTSxPQUFPLHdCQUF5QixTQUFRLG9CQUE4QztJQVd4Rjs7T0FFRztJQUNILFlBQ3FELG1CQUF3QyxFQUN4RSxtQkFBMkMsRUFDM0MsVUFBc0I7UUFFdkMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBSk0sd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4RSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXdCO1FBQzNDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFJdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLElBQVk7UUFVdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLFFBQVEsR0FBYyxF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RSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEgsQ0FBQzs7QUE3SkQ7O0dBRUc7QUFDc0IsbUNBQVUsR0FBVywwQkFBMkIsQ0FBQTtBQUV6RTs7R0FFRztBQUNzQixvQ0FBVyxHQUFXLHdCQUF5QixDQUFBO2dHQVQvRCx3QkFBd0IsY0FlckIsc0JBQXNCOzhFQWZ6Qix3QkFBd0IsV0FBeEIsd0JBQXdCO3VGQUF4Qix3QkFBd0I7Y0FEcEMsVUFBVTs7c0JBZ0JGLE1BQU07dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIzLTIwMjUgQnJvYWRjb21cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBFTVBUWSwgZXhwYW5kLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFwaVByZWRpY2F0ZSwgVGF1cnVzQmFzZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVyc2F0aWxlZGF0YWtpdC9zaGFyZWQnO1xuXG5pbXBvcnQgeyBFcnJvclV0aWwgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMnO1xuXG5pbXBvcnQgeyBEQVRBX1BJUEVMSU5FU19DT05GSUdTLCBEYXRhSm9iLCBEYXRhSm9iUGFnZSwgRGF0YVBpcGVsaW5lc0NvbmZpZywgSVBjc09BdXRoRHRvIH0gZnJvbSAnLi4vbW9kZWwnO1xuXG5pbXBvcnQgeyBEYXRhSm9ic0Jhc2VBcGlTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWpvYnMtYmFzZS5hcGkuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSm9ic1B1YmxpY0FwaVNlcnZpY2UgZXh0ZW5kcyBUYXVydXNCYXNlQXBpU2VydmljZTxEYXRhSm9ic1B1YmxpY0FwaVNlcnZpY2U+IHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBDTEFTU19OQU1FOiBzdHJpbmcgPSAnRGF0YUpvYnNQdWJsaWNBcGlTZXJ2aWNlJztcblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IFBVQkxJQ19OQU1FOiBzdHJpbmcgPSAnRGF0YS1QaXBlbGluZXMtU2VydmljZSc7XG5cbiAgICAvKipcbiAgICAgKiAqKiBDb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChEQVRBX1BJUEVMSU5FU19DT05GSUdTKSBwcml2YXRlIHJlYWRvbmx5IGRhdGFQaXBlbGluZXNDb25maWc6IERhdGFQaXBlbGluZXNDb25maWcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YUpvYnNCYXNlU2VydmljZTogRGF0YUpvYnNCYXNlQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKERhdGFKb2JzUHVibGljQXBpU2VydmljZS5DTEFTU19OQU1FKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXJyb3JDb2RlcyhEYXRhSm9ic1B1YmxpY0FwaVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIFJldHJpZXZlIGFsbCBEYXRhSm9icyBmb3IgVGVhbS5cbiAgICAgKi9cbiAgICBnZXRBbGxEYXRhSm9icyh0ZWFtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFxuICAgICAgICBBcnJheTx7XG4gICAgICAgICAgICBqb2JOYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgY29uZmlnPzoge1xuICAgICAgICAgICAgICAgIHRlYW0/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgc291cmNlVXJsPzogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfT5cbiAgICA+IHtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSAxMDAwO1xuICAgICAgICBsZXQgcGFnZU51bWJlciA9IDE7XG4gICAgICAgIGxldCBkYXRhSm9iczogRGF0YUpvYltdID0gW107XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldERhdGFKb2JzUGFnZSh0ZWFtLCBwYWdlTnVtYmVyLCBwYWdlU2l6ZSkucGlwZShcbiAgICAgICAgICAgIGV4cGFuZCgoZGF0YUpvYlBhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUpvYlBhZ2UudG90YWxQYWdlcyA8PSBwYWdlTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RGF0YUpvYnNQYWdlKHRlYW0sICsrcGFnZU51bWJlciwgcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChkYXRhSm9iUGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGFKb2JzID0gZGF0YUpvYnMuY29uY2F0KGRhdGFKb2JQYWdlLmNvbnRlbnQgYXMgdW5rbm93biBhcyBEYXRhSm9iW10pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFKb2JzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gdGhyb3dFcnJvcigoKSA9PiBFcnJvclV0aWwuZXh0cmFjdEVycm9yKGVycm9yIGFzIEVycm9yKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKiogR2V0IHRvdGFsIG51bWJlciBvZiBEYXRhIEpvYnMgYXNzZXRzIGZvciBUZWFtLlxuICAgICAqL1xuICAgIGdldERhdGFKb2JzVG90YWwodGVhbTogc3RyaW5nKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyczogQXBpUHJlZGljYXRlW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6ICdjb25maWcudGVhbScsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogdGVhbSxcbiAgICAgICAgICAgICAgICBzb3J0OiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUpvYnNCYXNlU2VydmljZVxuICAgICAgICAgICAgLmdldEpvYnMoXG4gICAgICAgICAgICAgICAgdGVhbSxcbiAgICAgICAgICAgICAgICBgcXVlcnkgam9ic1F1ZXJ5KCRmaWx0ZXI6IFtQcmVkaWNhdGVdLCAkc2VhcmNoOiBTdHJpbmcsICRwYWdlTnVtYmVyOiBJbnQsICRwYWdlU2l6ZTogSW50KVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ICBqb2JzKGZpbHRlcjogJGZpbHRlciwgc2VhcmNoOiAkc2VhcmNoLCBwYWdlTnVtYmVyOiAkcGFnZU51bWJlciwgcGFnZVNpemU6ICRwYWdlU2l6ZSkge1xuXHRcdFx0XHRcdFx0ICAgIGNvbnRlbnQge1xuXHRcdFx0XHRcdFx0ICAgICAgam9iTmFtZVxuXHRcdFx0XHRcdFx0ICAgICAgY29uZmlnIHtcblx0XHRcdFx0XHRcdCAgICAgICAgdGVhbVxuXHRcdFx0XHRcdFx0ICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdCAgICB0b3RhbFBhZ2VzXG5cdFx0XHRcdFx0XHQgICAgdG90YWxJdGVtc1xuXHRcdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0XHR9YCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlPy5kYXRhPy50b3RhbEl0ZW1zID8/IDApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB0aHJvd0Vycm9yKCgpID0+IEVycm9yVXRpbC5leHRyYWN0RXJyb3IoZXJyb3IgYXMgRXJyb3IpKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKiogUmV0dXJucyBPQXV0aCBhcHAgY2xpZW50IGlkIGZvciBnaXZlbiBUZWFtIG5hbWUuXG4gICAgICovXG4gICAgZ2V0VGVhbU9BdXRoQ2xpZW50SWQodGVhbU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8SVBjc09BdXRoRHRvPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PElQY3NPQXV0aER0bz4oXG4gICAgICAgICAgICBgJHt0aGlzLl9yZXNvbHZlUGlwZWxpbmVzU2VydmljZVVybCgpfS9kYXRhLWpvYnMvdGVhbXMvJHt0ZWFtTmFtZX0vb2F1dGgtY3JlZGVudGlhbHMvY2xpZW50LWlkYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIFJldHVybnMgaW52ZW50b3J5IG9mIGZvdW5kIE9BdXRoIGFwcHMgY2xpZW50IGlkcyBmb3IgZ2l2ZW4gVGVhbSBuYW1lcy5cbiAgICAgKi9cbiAgICBnZXRJbnZlbnRvcnlPZlRlYW1zT0F1dGhDbGllbnRJZHMoY2xpZW50SWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8SVBjc09BdXRoRHRvW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PElQY3NPQXV0aER0b1tdPihcbiAgICAgICAgICAgIGAke3RoaXMuX3Jlc29sdmVQaXBlbGluZXNTZXJ2aWNlVXJsKCl9L2RhdGEtam9icy9vYXV0aC1jcmVkZW50aWFscy9jbGllbnQtaWRzYCxcbiAgICAgICAgICAgIGNsaWVudElkc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIFJldHJpZXZlIHRoZSBkYXRhLWpvYnMgcGFnZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXREYXRhSm9ic1BhZ2UoXG4gICAgICAgIHRlYW06IHN0cmluZyxcbiAgICAgICAgcGFnZU51bWJlcjogbnVtYmVyLFxuICAgICAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgICAgICBmaWx0ZXJzOiBBcGlQcmVkaWNhdGVbXSA9IFtdLFxuICAgICAgICBzZWFyY2hRdWVyeVZhbHVlOiBzdHJpbmcgPSBudWxsXG4gICAgKTogT2JzZXJ2YWJsZTxEYXRhSm9iUGFnZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhSm9ic0Jhc2VTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Sm9icyhcbiAgICAgICAgICAgICAgICB0ZWFtLFxuICAgICAgICAgICAgICAgIGBxdWVyeSBqb2JzUXVlcnkoJGZpbHRlcjogW1ByZWRpY2F0ZV0sICRzZWFyY2g6IFN0cmluZywgJHBhZ2VOdW1iZXI6IEludCwgJHBhZ2VTaXplOiBJbnQpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQgIGpvYnMoZmlsdGVyOiAkZmlsdGVyLCBzZWFyY2g6ICRzZWFyY2gsIHBhZ2VOdW1iZXI6ICRwYWdlTnVtYmVyLCBwYWdlU2l6ZTogJHBhZ2VTaXplKSB7XG5cdFx0XHRcdFx0XHQgICAgY29udGVudCB7XG5cdFx0XHRcdFx0XHQgICAgICBqb2JOYW1lXG5cdFx0XHRcdFx0XHQgICAgICBjb25maWcge1xuXHRcdFx0XHRcdFx0ICAgICAgICB0ZWFtXG5cdFx0XHRcdFx0XHQgICAgICAgIGRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0XHQgICAgICAgIHNvdXJjZVVybFxuXHRcdFx0XHRcdFx0ICAgICAgfVxuXHRcdFx0XHRcdFx0ICAgIH1cblx0XHRcdFx0XHRcdCAgICB0b3RhbFBhZ2VzXG5cdFx0XHRcdFx0XHQgICAgdG90YWxJdGVtc1xuXHRcdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0XHR9YCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiBzZWFyY2hRdWVyeVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUGlwZWxpbmVzU2VydmljZVVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUGlwZWxpbmVzQ29uZmlnPy5yZXNvdXJjZVNlcnZlcj8uZ2V0VXJsID8gdGhpcy5kYXRhUGlwZWxpbmVzQ29uZmlnLnJlc291cmNlU2VydmVyLmdldFVybCgpIDogJyc7XG4gICAgfVxufVxuIl19