UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

155 lines 21.3 kB
/** * @packageDocumentation * @module notification */ import { DialogService, DialogSize, MessageType, NOTIFICATION_DEFAULT_CONFIG, NotificationService, } from '@alauda/ui'; import { Injectable, Injector, numberAttribute } from '@angular/core'; import { get } from 'lodash-es'; import { take } from 'rxjs'; import { CodeDisplayDialogComponent } from '../code/code-display-dialog/component'; import { NOTIFY_DURATION_HEADER } from '../core/public-api'; import { TimeService } from '../core/services/public-api'; import { TranslateService } from '../translate/translate.service'; import { DEFAULT_ZH_ERROR, ZH_ERRORS } from './errors-mapper'; import { FeedbackNotificationComponent, } from './feedback-notification/component'; import { isK8sErrorStatus } from './helpers'; import * as i0 from "@angular/core"; import * as i1 from "@alauda/ui"; import * as i2 from "../core/services/public-api"; export class NotificationUtilService { constructor(injector, dialog, time, notification) { this.injector = injector; this.dialog = dialog; this.time = time; this.notification = notification; } viewDetail(json, title, notificationId) { this.dialog.open(CodeDisplayDialogComponent, { data: { code: this.normalizeJson(json), language: 'json', title: title || 'view_detail', ellipsis: true, }, size: DialogSize.Big, }); if (notificationId) { this.notification.remove(notificationId); } } createFeedback(config, { content, onPrimary, onSecondary, pre, primary, secondary, summary, } = {}) { const { instance } = this.notification.create({ type: MessageType.Error, ...config, content: null, contentRef: FeedbackNotificationComponent, }); const feedback = instance.childComponentInstance; if (primary === true) { primary = 'view_detail'; } else if (secondary === true) { secondary = 'view_detail'; } content = this.normalizeJson(content || config.content); const viewDetail = this.viewDetail.bind(this, content, config.title, instance.uniqueId); if (primary && !onPrimary) { onPrimary = viewDetail; } if (onPrimary) { feedback.onPrimary.pipe(take(1)).subscribe(onPrimary); } else if (secondary && !onSecondary) { onSecondary = viewDetail; } if (onSecondary) { feedback.onSecondary.pipe(take(1)).subscribe(onSecondary); } Object.assign(feedback, { content: this.normalizeJson(summary), pre, primary, secondary, }); } normalizeJson(json) { return typeof json === 'string' ? json : json && JSON.stringify(json, null, 2); } async notify(reqOrStatus, res) { // we stored original req in `err.__req__` const req = ('__req__' in reqOrStatus ? get(reqOrStatus, '__req__') : reqOrStatus); if (isK8sErrorStatus(reqOrStatus)) { res = get(reqOrStatus, '__origin__'); } const duration = Math.round(numberAttribute(req.headers.get(NOTIFY_DURATION_HEADER), NOTIFICATION_DEFAULT_CONFIG.duration)); let reason; let resError = res.error; if (resError instanceof Blob && resError.type === 'application/json') { try { resError = JSON.parse(await resError.text()); } catch { } } if (isK8sErrorStatus(resError)) { reason = resError.reason; reason = this.injector.get(TranslateService).locale === 'zh' ? ZH_ERRORS[reason] || DEFAULT_ZH_ERROR : reason; } this.createFeedback({ title: reason || this.getResErrorMessage(res), duration, }, { content: { apiVersion: 'v1', RequestURI: req.urlWithParams, Method: req.method, RequestObject: { Time: this.time.format(req.requestAt), Header: this.getAllHeaders(req.headers), Body: req.body, }, ResponseObject: { Time: this.time.format(), RelativeTime: this.time.distance(req.requestAt), StatusCode: res.status, Header: this.getAllHeaders(res.headers), Body: resError, }, }, secondary: true, }); } getResErrorMessage(res) { return typeof res.error === 'string' ? res.error : (res.statusText === 'OK' && res.error.message) || // compatible with legacy ACE API get(res.error, 'errors[0].message') || res.statusText; } getAllHeaders(headers) { return headers .keys() .reduce((acc, key) => { let values = headers.getAll(key); if (Array.isArray(values) && values.length === 1) { values = values[0]; } acc[key] = values; return acc; }, {}); } static { this.ɵfac = function NotificationUtilService_Factory(t) { return new (t || NotificationUtilService)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i1.DialogService), i0.ɵɵinject(i2.TimeService), i0.ɵɵinject(i1.NotificationService)); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NotificationUtilService, factory: NotificationUtilService.ɵfac, providedIn: 'root' }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NotificationUtilService, [{ type: Injectable, args: [{ providedIn: 'root', }] }], () => [{ type: i0.Injector }, { type: i1.DialogService }, { type: i2.TimeService }, { type: i1.NotificationService }], null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXV0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixXQUFXLEVBQ1gsMkJBQTJCLEVBRTNCLG1CQUFtQixHQUNwQixNQUFNLFlBQVksQ0FBQztBQU1wQixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25GLE9BQU8sRUFBWSxzQkFBc0IsRUFBVSxNQUFNLG9CQUFvQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixHQUU5QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQXdCN0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNtQixRQUFrQixFQUNsQixNQUFxQixFQUNyQixJQUFpQixFQUNqQixZQUFpQztRQUhqQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBYTtR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O2dCQUNuQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBb0I7UUFDeEMsT0FBTyxPQUFPO2FBQ1gsSUFBSSxFQUFFO2FBQ04sTUFBTSxDQUFvQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN0RCxJQUFJLE1BQU0sR0FBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7d0ZBOUtVLHVCQUF1Qjt1RUFBdkIsdUJBQXVCLFdBQXZCLHVCQUF1QixtQkFGdEIsTUFBTTs7aUZBRVAsdUJBQXVCO2NBSG5DLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIG5vdGlmaWNhdGlvblxuICovXG5cbmltcG9ydCB7XG4gIERpYWxvZ1NlcnZpY2UsXG4gIERpYWxvZ1NpemUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOT1RJRklDQVRJT05fREVGQVVMVF9DT05GSUcsXG4gIE5vdGlmaWNhdGlvbkNvbmZpZyxcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbn0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBSZXF1ZXN0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgbnVtYmVyQXR0cmlidXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb2RlRGlzcGxheURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvZGUvY29kZS1kaXNwbGF5LWRpYWxvZy9jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsbGJhY2ssIE5PVElGWV9EVVJBVElPTl9IRUFERVIsIFN0YXR1cyB9IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUaW1lU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgREVGQVVMVF9aSF9FUlJPUiwgWkhfRVJST1JTIH0gZnJvbSAnLi9lcnJvcnMtbWFwcGVyJztcbmltcG9ydCB7XG4gIEZlZWRiYWNrTm90aWZpY2F0aW9uQ29tcG9uZW50LFxuICBGZWVkYmFja05vdGlmaWNhdGlvblByb3BzLFxufSBmcm9tICcuL2ZlZWRiYWNrLW5vdGlmaWNhdGlvbi9jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNLOHNFcnJvclN0YXR1cyB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uSHR0cFJlcXVlc3Q8VCA9IHVua25vd24+IGV4dGVuZHMgSHR0cFJlcXVlc3Q8VD4ge1xuICByZXF1ZXN0QXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZlZWRiYWNrTm90aWZpY2F0aW9uUHJvcHNXaXRoRXZlbnRzID0gT21pdDxcbiAgRmVlZGJhY2tOb3RpZmljYXRpb25Qcm9wcyxcbiAgJ2NvbnRlbnQnIHwgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeSdcbj4gJlxuICBQYXJ0aWFsPHtcbiAgICBjb250ZW50OiB1bmtub3duO1xuICAgIHN1bW1hcnk6IHVua25vd247XG4gICAgcHJpbWFyeTogc3RyaW5nIHwgdHJ1ZTtcbiAgICBzZWNvbmRhcnk6IHN0cmluZyB8IHRydWU7XG4gICAgb25QcmltYXJ5OiBDYWxsYmFjaztcbiAgICBvblNlY29uZGFyeTogQ2FsbGJhY2s7XG4gIH0+O1xuXG5leHBvcnQgdHlwZSBGZWVkYmFja05vdGlmaWNhdGlvbkNvbmZpZyA9IE9taXQ8Tm90aWZpY2F0aW9uQ29uZmlnLCAnY29udGVudFJlZic+O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uVXRpbFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbWU6IFRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICApIHt9XG5cbiAgdmlld0RldGFpbChqc29uOiB1bmtub3duLCB0aXRsZT86IHN0cmluZywgbm90aWZpY2F0aW9uSWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKENvZGVEaXNwbGF5RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvZGU6IHRoaXMubm9ybWFsaXplSnNvbihqc29uKSxcbiAgICAgICAgbGFuZ3VhZ2U6ICdqc29uJyxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8ICd2aWV3X2RldGFpbCcsXG4gICAgICAgIGVsbGlwc2lzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNpemU6IERpYWxvZ1NpemUuQmlnLFxuICAgIH0pO1xuICAgIGlmIChub3RpZmljYXRpb25JZCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb24ucmVtb3ZlKG5vdGlmaWNhdGlvbklkKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVGZWVkYmFjayhcbiAgICBjb25maWc6IEZlZWRiYWNrTm90aWZpY2F0aW9uQ29uZmlnLFxuICAgIHtcbiAgICAgIGNvbnRlbnQsXG4gICAgICBvblByaW1hcnksXG4gICAgICBvblNlY29uZGFyeSxcbiAgICAgIHByZSxcbiAgICAgIHByaW1hcnksXG4gICAgICBzZWNvbmRhcnksXG4gICAgICBzdW1tYXJ5LFxuICAgIH06IEZlZWRiYWNrTm90aWZpY2F0aW9uUHJvcHNXaXRoRXZlbnRzID0ge30sXG4gICkge1xuICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHRoaXMubm90aWZpY2F0aW9uLmNyZWF0ZSh7XG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICBjb250ZW50UmVmOiBGZWVkYmFja05vdGlmaWNhdGlvbkNvbXBvbmVudCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZlZWRiYWNrID1cbiAgICAgIGluc3RhbmNlLmNoaWxkQ29tcG9uZW50SW5zdGFuY2UgYXMgRmVlZGJhY2tOb3RpZmljYXRpb25Db21wb25lbnQ7XG5cbiAgICBpZiAocHJpbWFyeSA9PT0gdHJ1ZSkge1xuICAgICAgcHJpbWFyeSA9ICd2aWV3X2RldGFpbCc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRhcnkgPT09IHRydWUpIHtcbiAgICAgIHNlY29uZGFyeSA9ICd2aWV3X2RldGFpbCc7XG4gICAgfVxuXG4gICAgY29udGVudCA9IHRoaXMubm9ybWFsaXplSnNvbihjb250ZW50IHx8IGNvbmZpZy5jb250ZW50KTtcbiAgICBjb25zdCB2aWV3RGV0YWlsID0gdGhpcy52aWV3RGV0YWlsLmJpbmQoXG4gICAgICB0aGlzLFxuICAgICAgY29udGVudCxcbiAgICAgIGNvbmZpZy50aXRsZSxcbiAgICAgIGluc3RhbmNlLnVuaXF1ZUlkLFxuICAgICk7XG5cbiAgICBpZiAocHJpbWFyeSAmJiAhb25QcmltYXJ5KSB7XG4gICAgICBvblByaW1hcnkgPSB2aWV3RGV0YWlsO1xuICAgIH1cblxuICAgIGlmIChvblByaW1hcnkpIHtcbiAgICAgIGZlZWRiYWNrLm9uUHJpbWFyeS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvblByaW1hcnkpO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kYXJ5ICYmICFvblNlY29uZGFyeSkge1xuICAgICAgb25TZWNvbmRhcnkgPSB2aWV3RGV0YWlsO1xuICAgIH1cblxuICAgIGlmIChvblNlY29uZGFyeSkge1xuICAgICAgZmVlZGJhY2sub25TZWNvbmRhcnkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUob25TZWNvbmRhcnkpO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oZmVlZGJhY2ssIHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMubm9ybWFsaXplSnNvbihzdW1tYXJ5KSxcbiAgICAgIHByZSxcbiAgICAgIHByaW1hcnksXG4gICAgICBzZWNvbmRhcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUpzb24oanNvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0eXBlb2YganNvbiA9PT0gJ3N0cmluZydcbiAgICAgID8ganNvblxuICAgICAgOiBqc29uICYmIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpO1xuICB9XG5cbiAgbm90aWZ5KHN0YXR1czogU3RhdHVzKTogdm9pZDtcbiAgbm90aWZ5KHJlcTogTm90aWZpY2F0aW9uSHR0cFJlcXVlc3QsIHJlczogSHR0cEVycm9yUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+O1xuICBhc3luYyBub3RpZnkoXG4gICAgcmVxT3JTdGF0dXM6IE5vdGlmaWNhdGlvbkh0dHBSZXF1ZXN0IHwgU3RhdHVzLFxuICAgIHJlcz86IEh0dHBFcnJvclJlc3BvbnNlLFxuICApIHtcbiAgICAvLyB3ZSBzdG9yZWQgb3JpZ2luYWwgcmVxIGluIGBlcnIuX19yZXFfX2BcbiAgICBjb25zdCByZXEgPSAoXG4gICAgICAnX19yZXFfXycgaW4gcmVxT3JTdGF0dXMgPyBnZXQocmVxT3JTdGF0dXMsICdfX3JlcV9fJykgOiByZXFPclN0YXR1c1xuICAgICkgYXMgTm90aWZpY2F0aW9uSHR0cFJlcXVlc3Q7XG5cbiAgICBpZiAoaXNLOHNFcnJvclN0YXR1cyhyZXFPclN0YXR1cykpIHtcbiAgICAgIHJlcyA9IGdldChyZXFPclN0YXR1cywgJ19fb3JpZ2luX18nKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGgucm91bmQoXG4gICAgICBudW1iZXJBdHRyaWJ1dGUoXG4gICAgICAgIHJlcS5oZWFkZXJzLmdldChOT1RJRllfRFVSQVRJT05fSEVBREVSKSxcbiAgICAgICAgTk9USUZJQ0FUSU9OX0RFRkFVTFRfQ09ORklHLmR1cmF0aW9uLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgbGV0IHJlYXNvbjogc3RyaW5nO1xuICAgIGxldCByZXNFcnJvciA9IHJlcy5lcnJvcjtcblxuICAgIGlmIChyZXNFcnJvciBpbnN0YW5jZW9mIEJsb2IgJiYgcmVzRXJyb3IudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNFcnJvciA9IEpTT04ucGFyc2UoYXdhaXQgcmVzRXJyb3IudGV4dCgpKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG5cbiAgICBpZiAoaXNLOHNFcnJvclN0YXR1cyhyZXNFcnJvcikpIHtcbiAgICAgIHJlYXNvbiA9IHJlc0Vycm9yLnJlYXNvbjtcbiAgICAgIHJlYXNvbiA9XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmxvY2FsZSA9PT0gJ3poJ1xuICAgICAgICAgID8gWkhfRVJST1JTW3JlYXNvbl0gfHwgREVGQVVMVF9aSF9FUlJPUlxuICAgICAgICAgIDogcmVhc29uO1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlRmVlZGJhY2soXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiByZWFzb24gfHwgdGhpcy5nZXRSZXNFcnJvck1lc3NhZ2UocmVzKSxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICAgICAgICBSZXF1ZXN0VVJJOiByZXEudXJsV2l0aFBhcmFtcyxcbiAgICAgICAgICBNZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgICAgUmVxdWVzdE9iamVjdDoge1xuICAgICAgICAgICAgVGltZTogdGhpcy50aW1lLmZvcm1hdChyZXEucmVxdWVzdEF0KSxcbiAgICAgICAgICAgIEhlYWRlcjogdGhpcy5nZXRBbGxIZWFkZXJzKHJlcS5oZWFkZXJzKSxcbiAgICAgICAgICAgIEJvZHk6IHJlcS5ib2R5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUmVzcG9uc2VPYmplY3Q6IHtcbiAgICAgICAgICAgIFRpbWU6IHRoaXMudGltZS5mb3JtYXQoKSxcbiAgICAgICAgICAgIFJlbGF0aXZlVGltZTogdGhpcy50aW1lLmRpc3RhbmNlKHJlcS5yZXF1ZXN0QXQpLFxuICAgICAgICAgICAgU3RhdHVzQ29kZTogcmVzLnN0YXR1cyxcbiAgICAgICAgICAgIEhlYWRlcjogdGhpcy5nZXRBbGxIZWFkZXJzKHJlcy5oZWFkZXJzKSxcbiAgICAgICAgICAgIEJvZHk6IHJlc0Vycm9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlY29uZGFyeTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVzRXJyb3JNZXNzYWdlKHJlczogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdHlwZW9mIHJlcy5lcnJvciA9PT0gJ3N0cmluZydcbiAgICAgID8gcmVzLmVycm9yXG4gICAgICA6IChyZXMuc3RhdHVzVGV4dCA9PT0gJ09LJyAmJiByZXMuZXJyb3IubWVzc2FnZSkgfHxcbiAgICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggbGVnYWN5IEFDRSBBUElcbiAgICAgICAgICBnZXQocmVzLmVycm9yLCAnZXJyb3JzWzBdLm1lc3NhZ2UnKSB8fFxuICAgICAgICAgIHJlcy5zdGF0dXNUZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxIZWFkZXJzKGhlYWRlcnM6IEh0dHBIZWFkZXJzKSB7XG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgICAgIC5rZXlzKClcbiAgICAgIC5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlczogc3RyaW5nIHwgc3RyaW5nW10gPSBoZWFkZXJzLmdldEFsbChrZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gIH1cbn1cbiJdfQ==