UNPKG

@harbor/ui

Version:

Harbor shared UI components based on Clarity and Angular6

271 lines (270 loc) 22.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable, Inject } from "@angular/core"; import { Http } from "@angular/http"; import { SERVICE_CONFIG } from "../service.config"; import { buildHttpRequestOptions, HTTP_JSON_OPTIONS, HTTP_GET_OPTIONS } from "../utils"; import { RequestQueryParams } from "./RequestQueryParams"; /** * Define the service methods to handle the endpoint related things. * * * * @abstract * class EndpointService * @abstract */ export class EndpointService { } if (false) { /** * Get all the endpoints. * Set the argument 'endpointName' to return only the endpoints match the name pattern. * * @abstract * ** deprecated param {string} [endpointName] * ** deprecated param {RequestQueryParams} [queryParams] * returns {(Observable<Endpoint[]> | Endpoint[])} * * \@memberOf EndpointService * @abstract * @param {?=} endpointName * @param {?=} queryParams * @return {?} */ EndpointService.prototype.getEndpoints = function (endpointName, queryParams) { }; /** * Get the specified endpoint. * * @abstract * ** deprecated param {(number | string)} endpointId * returns {(Observable<Endpoint> | Endpoint)} * * \@memberOf EndpointService * @abstract * @param {?} endpointId * @return {?} */ EndpointService.prototype.getEndpoint = function (endpointId) { }; /** * Create new endpoint. * * @abstract * ** deprecated param {Endpoint} endpoint * returns {(Observable<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} endpoint * @return {?} */ EndpointService.prototype.createEndpoint = function (endpoint) { }; /** * Update the specified endpoint. * * @abstract * ** deprecated param {(number | string)} endpointId * ** deprecated param {Endpoint} endpoint * returns {(Observable<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} endpointId * @param {?} endpoint * @return {?} */ EndpointService.prototype.updateEndpoint = function (endpointId, endpoint) { }; /** * Delete the specified endpoint. * * @abstract * ** deprecated param {(number | string)} endpointId * returns {(Observable<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} endpointId * @return {?} */ EndpointService.prototype.deleteEndpoint = function (endpointId) { }; /** * Ping the specified endpoint. * * @abstract * ** deprecated param {Endpoint} endpoint * returns {(Observable<any> | any)} * * \@memberOf EndpointService * @abstract * @param {?} endpoint * @return {?} */ EndpointService.prototype.pingEndpoint = function (endpoint) { }; /** * Check endpoint whether in used with specific replication rule. * * @abstract * ** deprecated param {{number | string}} endpointId * returns {{Observable<any> | any}} * @abstract * @param {?} endpointId * @return {?} */ EndpointService.prototype.getEndpointWithReplicationRules = function (endpointId) { }; } /** * Implement default service for endpoint. * * * * class EndpointDefaultService * extends {EndpointService} */ export class EndpointDefaultService extends EndpointService { /** * @param {?} config * @param {?} http */ constructor(config, http) { super(); this.http = http; this._endpointUrl = config.targetBaseEndpoint ? config.targetBaseEndpoint : "/api/targets"; } /** * @param {?=} endpointName * @param {?=} queryParams * @return {?} */ getEndpoints(endpointName, queryParams) { if (!queryParams) { queryParams = new RequestQueryParams(); } if (endpointName) { queryParams.set("name", endpointName); } /** @type {?} */ let requestUrl = `${this._endpointUrl}`; return this.http .get(requestUrl, buildHttpRequestOptions(queryParams)) .toPromise() .then(response => response.json()) .catch(error => Promise.reject(error)); } /** * @param {?} endpointId * @return {?} */ getEndpoint(endpointId) { if (!endpointId || endpointId <= 0) { return Promise.reject("Bad request argument."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}/${endpointId}`; return this.http .get(requestUrl, HTTP_GET_OPTIONS) .toPromise() .then(response => /** @type {?} */ (response.json())) .catch(error => Promise.reject(error)); } /** * @param {?} endpoint * @return {?} */ createEndpoint(endpoint) { if (!endpoint) { return Promise.reject("Invalid endpoint."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}`; return this.http .post(requestUrl, JSON.stringify(endpoint), HTTP_JSON_OPTIONS) .toPromise() .then(response => response.status) .catch(error => Promise.reject(error)); } /** * @param {?} endpointId * @param {?} endpoint * @return {?} */ updateEndpoint(endpointId, endpoint) { if (!endpointId || endpointId <= 0) { return Promise.reject("Bad request argument."); } if (!endpoint) { return Promise.reject("Invalid endpoint."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}/${endpointId}`; return this.http .put(requestUrl, JSON.stringify(endpoint), HTTP_JSON_OPTIONS) .toPromise() .then(response => response.status) .catch(error => Promise.reject(error)); } /** * @param {?} endpointId * @return {?} */ deleteEndpoint(endpointId) { if (!endpointId || endpointId <= 0) { return Promise.reject("Bad request argument."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}/${endpointId}`; return this.http .delete(requestUrl) .toPromise() .then(response => response.status) .catch(error => Promise.reject(error)); } /** * @param {?} endpoint * @return {?} */ pingEndpoint(endpoint) { if (!endpoint) { return Promise.reject("Invalid endpoint."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}/ping`; return this.http .post(requestUrl, endpoint, HTTP_JSON_OPTIONS) .toPromise() .then(response => response.status) .catch(error => Promise.reject(error)); } /** * @param {?} endpointId * @return {?} */ getEndpointWithReplicationRules(endpointId) { if (!endpointId || endpointId <= 0) { return Promise.reject("Bad request argument."); } /** @type {?} */ let requestUrl = `${this._endpointUrl}/${endpointId}/policies`; return this.http .get(requestUrl, HTTP_GET_OPTIONS) .toPromise() .then(response => /** @type {?} */ (response.json())) .catch(error => Promise.reject(error)); } } EndpointDefaultService.decorators = [ { type: Injectable } ]; /** @nocollapse */ EndpointDefaultService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [SERVICE_CONFIG,] }] }, { type: Http } ]; if (false) { /** @type {?} */ EndpointDefaultService.prototype._endpointUrl; /** @type {?} */ EndpointDefaultService.prototype.http; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoYXJib3IvdWkvIiwic291cmNlcyI6WyJzcmMvc2VydmljZS9lbmRwb2ludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JDLE9BQU8sRUFBa0IsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7QUFVMUQsTUFBTTtDQThGTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVRCxNQUFNLDZCQUE4QixTQUFRLGVBQWU7Ozs7O0lBR3pELFlBQzBCLE1BQXNCLEVBQ3RDO1FBRVIsS0FBSyxFQUFFLENBQUM7UUFGQSxTQUFJLEdBQUosSUFBSTtRQUdaLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQjtZQUMzQixDQUFDLENBQUMsY0FBYyxDQUFDO0tBQ3BCOzs7Ozs7SUFFTSxZQUFZLENBQ2pCLFlBQXFCLEVBQ3JCLFdBQWdDO1FBRWhDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsV0FBVyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztTQUN4QztRQUNELElBQUksWUFBWSxFQUFFO1lBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FB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QUMsUUFBUSxDQUFDLElBQUksRUFBdUIsQ0FBQSxDQUFDO2FBQ3RELEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7OztZQXJINUMsVUFBVTs7Ozs0Q0FLTixNQUFNLFNBQUMsY0FBYztZQS9IakIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwIH0gZnJvbSBcIkBhbmd1bGFyL2h0dHBcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBJU2VydmljZUNvbmZpZywgU0VSVklDRV9DT05GSUcgfSBmcm9tIFwiLi4vc2VydmljZS5jb25maWdcIjtcbmltcG9ydCB7XG4gIGJ1aWxkSHR0cFJlcXVlc3RPcHRpb25zLFxuICBIVFRQX0pTT05fT1BUSU9OUyxcbiAgSFRUUF9HRVRfT1BUSU9OU1xufSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJlcXVlc3RRdWVyeVBhcmFtcyB9IGZyb20gXCIuL1JlcXVlc3RRdWVyeVBhcmFtc1wiO1xuaW1wb3J0IHsgRW5kcG9pbnQsIFJlcGxpY2F0aW9uUnVsZSB9IGZyb20gXCIuL2ludGVyZmFjZVwiO1xuXG4vKipcbiAqIERlZmluZSB0aGUgc2VydmljZSBtZXRob2RzIHRvIGhhbmRsZSB0aGUgZW5kcG9pbnQgcmVsYXRlZCB0aGluZ3MuXG4gKlxuICoqXG4gKiBAYWJzdHJhY3RcbiAqIGNsYXNzIEVuZHBvaW50U2VydmljZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW5kcG9pbnRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGVuZHBvaW50cy5cbiAgICogU2V0IHRoZSBhcmd1bWVudCAnZW5kcG9pbnROYW1lJyB0byByZXR1cm4gb25seSB0aGUgZW5kcG9pbnRzIG1hdGNoIHRoZSBuYW1lIHBhdHRlcm4uXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7c3RyaW5nfSBbZW5kcG9pbnROYW1lXVxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7UmVxdWVzdFF1ZXJ5UGFyYW1zfSBbcXVlcnlQYXJhbXNdXG4gICAqIHJldHVybnMgeyhPYnNlcnZhYmxlPEVuZHBvaW50W10+IHwgRW5kcG9pbnRbXSl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbmRwb2ludFNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGdldEVuZHBvaW50cyhcbiAgICBlbmRwb2ludE5hbWU/OiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM/OiBSZXF1ZXN0UXVlcnlQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxFbmRwb2ludFtdPiB8IFByb21pc2U8RW5kcG9pbnRbXT4gfCBFbmRwb2ludFtdO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNwZWNpZmllZCBlbmRwb2ludC5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHsobnVtYmVyIHwgc3RyaW5nKX0gZW5kcG9pbnRJZFxuICAgKiByZXR1cm5zIHsoT2JzZXJ2YWJsZTxFbmRwb2ludD4gfCBFbmRwb2ludCl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbmRwb2ludFNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGdldEVuZHBvaW50KFxuICAgIGVuZHBvaW50SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEVuZHBvaW50PiB8IFByb21pc2U8RW5kcG9pbnQ+IHwgRW5kcG9pbnQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7RW5kcG9pbnR9IGVuZHBvaW50XG4gICAqIHJldHVybnMgeyhPYnNlcnZhYmxlPGFueT4gfCBhbnkpfVxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW5kcG9pbnRTZXJ2aWNlXG4gICAqL1xuICBhYnN0cmFjdCBjcmVhdGVFbmRwb2ludChcbiAgICBlbmRwb2ludDogRW5kcG9pbnRcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHNwZWNpZmllZCBlbmRwb2ludC5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHsobnVtYmVyIHwgc3RyaW5nKX0gZW5kcG9pbnRJZFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7RW5kcG9pbnR9IGVuZHBvaW50XG4gICAqIHJldHVybnMgeyhPYnNlcnZhYmxlPGFueT4gfCBhbnkpfVxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW5kcG9pbnRTZXJ2aWNlXG4gICAqL1xuICBhYnN0cmFjdCB1cGRhdGVFbmRwb2ludChcbiAgICBlbmRwb2ludElkOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50XG4gICk6IE9ic2VydmFibGU8YW55PiB8IFByb21pc2U8YW55PiB8IGFueTtcblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7KG51bWJlciB8IHN0cmluZyl9IGVuZHBvaW50SWRcbiAgICogcmV0dXJucyB7KE9ic2VydmFibGU8YW55PiB8IGFueSl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbmRwb2ludFNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IGRlbGV0ZUVuZHBvaW50KFxuICAgIGVuZHBvaW50SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPGFueT4gfCBQcm9taXNlPGFueT4gfCBhbnk7XG5cbiAgLyoqXG4gICAqIFBpbmcgdGhlIHNwZWNpZmllZCBlbmRwb2ludC5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHtFbmRwb2ludH0gZW5kcG9pbnRcbiAgICogcmV0dXJucyB7KE9ic2VydmFibGU8YW55PiB8IGFueSl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbmRwb2ludFNlcnZpY2VcbiAgICovXG4gIGFic3RyYWN0IHBpbmdFbmRwb2ludChcbiAgICBlbmRwb2ludDogRW5kcG9pbnRcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55O1xuXG4gIC8qKlxuICAgKiBDaGVjayBlbmRwb2ludCB3aGV0aGVyIGluIHVzZWQgd2l0aCBzcGVjaWZpYyByZXBsaWNhdGlvbiBydWxlLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0ge3tudW1iZXIgfCBzdHJpbmd9fSBlbmRwb2ludElkXG4gICAqIHJldHVybnMge3tPYnNlcnZhYmxlPGFueT4gfCBhbnl9fVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RW5kcG9pbnRXaXRoUmVwbGljYXRpb25SdWxlcyhcbiAgICBlbmRwb2ludElkOiBudW1iZXIgfCBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55O1xufVxuXG4vKipcbiAqIEltcGxlbWVudCBkZWZhdWx0IHNlcnZpY2UgZm9yIGVuZHBvaW50LlxuICpcbiAqKlxuICogY2xhc3MgRW5kcG9pbnREZWZhdWx0U2VydmljZVxuICogZXh0ZW5kcyB7RW5kcG9pbnRTZXJ2aWNlfVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnREZWZhdWx0U2VydmljZSBleHRlbmRzIEVuZHBvaW50U2VydmljZSB7XG4gIF9lbmRwb2ludFVybDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoU0VSVklDRV9DT05GSUcpIGNvbmZpZzogSVNlcnZpY2VDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZW5kcG9pbnRVcmwgPSBjb25maWcudGFyZ2V0QmFzZUVuZHBvaW50XG4gICAgICA/IGNvbmZpZy50YXJnZXRCYXNlRW5kcG9pbnRcbiAgICAgIDogXCIvYXBpL3RhcmdldHNcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFbmRwb2ludHMoXG4gICAgZW5kcG9pbnROYW1lPzogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zPzogUmVxdWVzdFF1ZXJ5UGFyYW1zXG4gICk6IE9ic2VydmFibGU8RW5kcG9pbnRbXT4gfCBQcm9taXNlPEVuZHBvaW50W10+IHwgRW5kcG9pbnRbXSB7XG4gICAgaWYgKCFxdWVyeVBhcmFtcykge1xuICAgICAgcXVlcnlQYXJhbXMgPSBuZXcgUmVxdWVzdFF1ZXJ5UGFyYW1zKCk7XG4gICAgfVxuICAgIGlmIChlbmRwb2ludE5hbWUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zLnNldChcIm5hbWVcIiwgZW5kcG9pbnROYW1lKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RVcmw6IHN0cmluZyA9IGAke3RoaXMuX2VuZHBvaW50VXJsfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChyZXF1ZXN0VXJsLCBidWlsZEh0dHBSZXF1ZXN0T3B0aW9ucyhxdWVyeVBhcmFtcykpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICB9XG5cbiAgcHVibGljIGdldEVuZHBvaW50KFxuICAgIGVuZHBvaW50SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEVuZHBvaW50PiB8IFByb21pc2U8RW5kcG9pbnQ+IHwgRW5kcG9pbnQge1xuICAgIGlmICghZW5kcG9pbnRJZCB8fCBlbmRwb2ludElkIDw9IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkJhZCByZXF1ZXN0IGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RVcmw6IHN0cmluZyA9IGAke3RoaXMuX2VuZHBvaW50VXJsfS8ke2VuZHBvaW50SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHJlcXVlc3RVcmwsIEhUVFBfR0VUX09QVElPTlMpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSBhcyBFbmRwb2ludClcbiAgICAgIC5jYXRjaChlcnJvciA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUVuZHBvaW50KFxuICAgIGVuZHBvaW50OiBFbmRwb2ludFxuICApOiBPYnNlcnZhYmxlPGFueT4gfCBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIGlmICghZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkludmFsaWQgZW5kcG9pbnQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFVybDogc3RyaW5nID0gYCR7dGhpcy5fZW5kcG9pbnRVcmx9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChyZXF1ZXN0VXJsLCBKU09OLnN0cmluZ2lmeShlbmRwb2ludCksIEhUVFBfSlNPTl9PUFRJT05TKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5zdGF0dXMpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVFbmRwb2ludChcbiAgICBlbmRwb2ludElkOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50XG4gICk6IE9ic2VydmFibGU8YW55PiB8IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgaWYgKCFlbmRwb2ludElkIHx8IGVuZHBvaW50SWQgPD0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiQmFkIHJlcXVlc3QgYXJndW1lbnQuXCIpO1xuICAgIH1cbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJJbnZhbGlkIGVuZHBvaW50LlwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RVcmw6IHN0cmluZyA9IGAke3RoaXMuX2VuZHBvaW50VXJsfS8ke2VuZHBvaW50SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHJlcXVlc3RVcmwsIEpTT04uc3RyaW5naWZ5KGVuZHBvaW50KSwgSFRUUF9KU09OX09QVElPTlMpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnN0YXR1cylcbiAgICAgIC5jYXRjaChlcnJvciA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUVuZHBvaW50KFxuICAgIGVuZHBvaW50SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPGFueT4gfCBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIGlmICghZW5kcG9pbnRJZCB8fCBlbmRwb2ludElkIDw9IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkJhZCByZXF1ZXN0IGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RVcmw6IHN0cmluZyA9IGAke3RoaXMuX2VuZHBvaW50VXJsfS8ke2VuZHBvaW50SWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZGVsZXRlKHJlcXVlc3RVcmwpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnN0YXR1cylcbiAgICAgIC5jYXRjaChlcnJvciA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICB9XG5cbiAgcHVibGljIHBpbmdFbmRwb2ludChcbiAgICBlbmRwb2ludDogRW5kcG9pbnRcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55IHtcbiAgICBpZiAoIWVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJJbnZhbGlkIGVuZHBvaW50LlwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RVcmw6IHN0cmluZyA9IGAke3RoaXMuX2VuZHBvaW50VXJsfS9waW5nYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChyZXF1ZXN0VXJsLCBlbmRwb2ludCwgSFRUUF9KU09OX09QVElPTlMpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnN0YXR1cylcbiAgICAgIC5jYXRjaChlcnJvciA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICB9XG5cbiAgcHVibGljIGdldEVuZHBvaW50V2l0aFJlcGxpY2F0aW9uUnVsZXMoXG4gICAgZW5kcG9pbnRJZDogbnVtYmVyIHwgc3RyaW5nXG4gICk6IE9ic2VydmFibGU8YW55PiB8IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgaWYgKCFlbmRwb2ludElkIHx8IGVuZHBvaW50SWQgPD0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiQmFkIHJlcXVlc3QgYXJndW1lbnQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFVybDogc3RyaW5nID0gYCR7dGhpcy5fZW5kcG9pbnRVcmx9LyR7ZW5kcG9pbnRJZH0vcG9saWNpZXNgO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQocmVxdWVzdFVybCwgSFRUUF9HRVRfT1BUSU9OUylcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpIGFzIFJlcGxpY2F0aW9uUnVsZVtdKVxuICAgICAgLmNhdGNoKGVycm9yID0+IFByb21pc2UucmVqZWN0KGVycm9yKSk7XG4gIH1cbn1cbiJdfQ==