UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

98 lines 15.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const testcafe_hammerhead_1 = require("testcafe-hammerhead"); const lodash_1 = require("lodash"); const http_status_codes_1 = require("http-status-codes"); const headers_1 = require("../../utils/headers"); const lowercase_object_keys_1 = __importDefault(require("../../../utils/lowercase-object-keys")); class RequestPausedEventBasedEventFactory extends testcafe_hammerhead_1.BaseRequestHookEventFactory { constructor(event, sessionId) { super(); this._event = event; this._responseBody = Buffer.alloc(0); this._sessionId = sessionId; this._modifyResponseFunction = this._createModifyResponseFunctions(); this.headersModified = false; } _createModifyResponseFunctions() { return { setHeader: (name, value) => { const header = this._event.responseHeaders.find(h => h.name.toLowerCase() === name.toLowerCase()); if (!header) this._event.responseHeaders.push({ name, value }); else header.value = value; this.headersModified = true; }, removeHeader: (name) => { (0, lodash_1.remove)(this._event.responseHeaders, header => header.name.toLowerCase() === name.toLowerCase()); this.headersModified = true; }, }; } static _getRequestData(request) { if (request.postData) return Buffer.from(request.postData); return Buffer.alloc(0); } static _getIsAjaxRequest(event) { return event.resourceType === 'XHR' || event.resourceType === 'Fetch'; } update(event) { this._event = event; } setResponseBody(body) { this._responseBody = body; } createRequestInfo() { const { requestId, request } = this._event; return new testcafe_hammerhead_1.RequestInfo({ requestId, sessionId: this._sessionId, userAgent: testcafe_hammerhead_1.RequestInfo.getUserAgent(request.headers), url: request.url, method: request.method.toLowerCase(), headers: Object.assign({}, (0, lowercase_object_keys_1.default)(request.headers)), body: RequestPausedEventBasedEventFactory._getRequestData(request), isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event), }); } createRequestOptions() { const parsedUrl = new URL(this._event.request.url); const requestParams = { method: this._event.request.method, url: this._event.request.url, protocol: parsedUrl.protocol, hostname: parsedUrl.hostname, host: parsedUrl.host, port: parsedUrl.port, path: parsedUrl.pathname, headers: Object.assign({}, (0, lowercase_object_keys_1.default)(this._event.request.headers)), body: RequestPausedEventBasedEventFactory._getRequestData(this._event.request), isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event), }; if (parsedUrl.username) requestParams.auth = parsedUrl.username + ':' + parsedUrl.password; return new testcafe_hammerhead_1.RequestOptions(requestParams, true); } createConfigureResponseEvent(rule) { return new testcafe_hammerhead_1.ConfigureResponseEvent(rule, this._modifyResponseFunction); } createResponseInfo() { return new testcafe_hammerhead_1.ResponseInfo({ statusCode: this._event.responseStatusCode || http_status_codes_1.StatusCodes.OK, headers: (0, headers_1.convertToOutgoingHttpHeaders)(this._event.responseHeaders), body: this._responseBody, sessionId: this._sessionId, requestId: this._event.requestId, isSameOriginPolicyFailed: false, }); } } exports.default = RequestPausedEventBasedEventFactory; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1mYWN0b3J5L3JlcXVlc3QtcGF1c2VkLWV2ZW50LWJhc2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkRBUzZCO0FBQzdCLG1DQUFnQztBQUtoQyx5REFBZ0Q7QUFDaEQsaURBQW1FO0FBQ25FLGlHQUF1RTtBQUd2RSxNQUFxQixtQ0FBb0MsU0FBUSxpREFBMkI7SUFPeEYsWUFBb0IsS0FBeUIsRUFBRSxTQUFpQjtRQUM1RCxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxNQUFNLEdBQW9CLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBZ0IsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFXLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRU8sOEJBQThCO1FBQ2xDLE9BQU87WUFDSCxTQUFTLEVBQUUsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBaUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUVySCxJQUFJLENBQUMsTUFBTTtvQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWlDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7O29CQUVyRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFFekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDaEMsQ0FBQztZQUNELFlBQVksRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO2dCQUMzQixJQUFBLGVBQU0sRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWdDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUVqSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNoQyxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFFLE9BQWdCO1FBQzVDLElBQUksT0FBTyxDQUFDLFFBQVE7WUFDaEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBRSxLQUF5QjtRQUN2RCxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssS0FBSztlQUM1QixLQUFLLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQztJQUMxQyxDQUFDO0lBRU0sTUFBTSxDQUFFLEtBQXlCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxlQUFlLENBQUUsSUFBWTtRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRU0saUJBQWlCO1FBQ3BCLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUzQyxPQUFPLElBQUksaUNBQVcsQ0FBQztZQUNuQixTQUFTO1lBQ1QsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLFNBQVMsRUFBRSxpQ0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3BELEdBQUcsRUFBUSxPQUFPLENBQUMsR0FBRztZQUN0QixNQUFNLEVBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDdkMsT0FBTyxFQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUEsK0JBQW1CLEVBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLElBQUksRUFBTyxtQ0FBbUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQ3ZFLE1BQU0sRUFBSyxtQ0FBbUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ2hGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQXlCO1lBQ3hDLE1BQU0sRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3BDLEdBQUcsRUFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsSUFBSSxFQUFNLFNBQVMsQ0FBQyxJQUFJO1lBQ3hCLElBQUksRUFBTSxTQUFTLENBQUMsSUFBSTtZQUN4QixJQUFJLEVBQU0sU0FBUyxDQUFDLFFBQVE7WUFDNUIsT0FBTyxFQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUEsK0JBQW1CLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0UsSUFBSSxFQUFNLG1DQUFtQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNsRixNQUFNLEVBQUksbUNBQW1DLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMvRSxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsUUFBUTtZQUNsQixhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdkUsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSw0QkFBNEIsQ0FBRSxJQUF1QjtRQUN4RCxPQUFPLElBQUksNENBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsT0FBTyxJQUFJLGtDQUFZLENBQUM7WUFDcEIsVUFBVSxFQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLCtCQUFXLENBQUMsRUFBRTtZQUMxRSxPQUFPLEVBQW1CLElBQUEsc0NBQTRCLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDbkYsSUFBSSxFQUFzQixJQUFJLENBQUMsYUFBYTtZQUM1QyxTQUFTLEVBQWlCLElBQUksQ0FBQyxVQUFVO1lBQ3pDLFNBQVMsRUFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQy9DLHdCQUF3QixFQUFFLEtBQUs7U0FDbEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBNUdELHNEQTRHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5LFxuICAgIENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQsXG4gICAgTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgUmVxdWVzdEluZm8sXG4gICAgUmVxdWVzdE9wdGlvbnMsXG4gICAgUmVxdWVzdE9wdGlvbnNQYXJhbXMsXG4gICAgUmVzcG9uc2VJbmZvLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBSZXF1ZXN0ID0gUHJvdG9jb2wuTmV0d29yay5SZXF1ZXN0O1xuaW1wb3J0IEhlYWRlckVudHJ5ID0gUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnk7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyB9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcbmltcG9ydCB7IGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnMgfSBmcm9tICcuLi8uLi91dGlscy9oZWFkZXJzJztcbmltcG9ydCBsb3dlcmNhc2VPYmplY3RLZXlzIGZyb20gJy4uLy4uLy4uL3V0aWxzL2xvd2VyY2FzZS1vYmplY3Qta2V5cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkgZXh0ZW5kcyBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgIHByaXZhdGUgX2V2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQ7XG4gICAgcHJpdmF0ZSBfcmVzcG9uc2VCb2R5OiBCdWZmZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbjogTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnM7XG4gICAgcHVibGljIGhlYWRlcnNNb2RpZmllZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9ldmVudCAgICAgICAgICAgICAgICAgID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlQm9keSAgICAgICAgICAgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMuX3Nlc3Npb25JZCAgICAgICAgICAgICAgPSBzZXNzaW9uSWQ7XG4gICAgICAgIHRoaXMuX21vZGlmeVJlc3BvbnNlRnVuY3Rpb24gPSB0aGlzLl9jcmVhdGVNb2RpZnlSZXNwb25zZUZ1bmN0aW9ucygpO1xuICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCAgICAgICAgID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMgKCk6IE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNldEhlYWRlcjogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9ICh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSkuZmluZChoID0+IGgubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSkucHVzaCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlSGVhZGVyOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX2V2ZW50LnJlc3BvbnNlSGVhZGVycyBhcyBIZWFkZXJFbnRyeVtdLCBoZWFkZXIgPT4gaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldFJlcXVlc3REYXRhIChyZXF1ZXN0OiBSZXF1ZXN0KTogQnVmZmVyIHtcbiAgICAgICAgaWYgKHJlcXVlc3QucG9zdERhdGEpXG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVxdWVzdC5wb3N0RGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0SXNBamF4UmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VUeXBlID09PSAnWEhSJ1xuICAgICAgICAgICAgfHwgZXZlbnQucmVzb3VyY2VUeXBlID09PSAnRmV0Y2gnO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGUgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnQgPSBldmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UmVzcG9uc2VCb2R5IChib2R5OiBCdWZmZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5ID0gYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVxdWVzdEluZm8gKCk6IFJlcXVlc3RJbmZvIHtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SWQsIHJlcXVlc3QgfSA9IHRoaXMuX2V2ZW50O1xuXG4gICAgICAgIHJldHVybiBuZXcgUmVxdWVzdEluZm8oe1xuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLl9zZXNzaW9uSWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IFJlcXVlc3RJbmZvLmdldFVzZXJBZ2VudChyZXF1ZXN0LmhlYWRlcnMpLFxuICAgICAgICAgICAgdXJsOiAgICAgICByZXF1ZXN0LnVybCxcbiAgICAgICAgICAgIG1ldGhvZDogICAgcmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGhlYWRlcnM6ICAgT2JqZWN0LmFzc2lnbih7fSwgbG93ZXJjYXNlT2JqZWN0S2V5cyhyZXF1ZXN0LmhlYWRlcnMpKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkuX2dldFJlcXVlc3REYXRhKHJlcXVlc3QpLFxuICAgICAgICAgICAgaXNBamF4OiAgICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSZXF1ZXN0T3B0aW9ucyAoKTogUmVxdWVzdE9wdGlvbnMge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHRoaXMuX2V2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICBjb25zdCByZXF1ZXN0UGFyYW1zOiBSZXF1ZXN0T3B0aW9uc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIG1ldGhvZDogICB0aGlzLl9ldmVudC5yZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogICAgICB0aGlzLl9ldmVudC5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgIHByb3RvY29sOiBwYXJzZWRVcmwucHJvdG9jb2wsXG4gICAgICAgICAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgaG9zdDogICAgIHBhcnNlZFVybC5ob3N0LFxuICAgICAgICAgICAgcG9ydDogICAgIHBhcnNlZFVybC5wb3J0LFxuICAgICAgICAgICAgcGF0aDogICAgIHBhcnNlZFVybC5wYXRobmFtZSxcbiAgICAgICAgICAgIGhlYWRlcnM6ICBPYmplY3QuYXNzaWduKHt9LCBsb3dlcmNhc2VPYmplY3RLZXlzKHRoaXMuX2V2ZW50LnJlcXVlc3QuaGVhZGVycykpLFxuICAgICAgICAgICAgYm9keTogICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YSh0aGlzLl9ldmVudC5yZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBhcnNlZFVybC51c2VybmFtZSlcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMuYXV0aCA9IHBhcnNlZFVybC51c2VybmFtZSArICc6JyArIHBhcnNlZFVybC5wYXNzd29yZDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHJlcXVlc3RQYXJhbXMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDb25maWd1cmVSZXNwb25zZUV2ZW50IChydWxlOiBSZXF1ZXN0RmlsdGVyUnVsZSk6IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQge1xuICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQocnVsZSwgdGhpcy5fbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlc3BvbnNlSW5mbyAoKTogUmVzcG9uc2VJbmZvIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluZm8oe1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogICAgICAgICAgICAgICB0aGlzLl9ldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgfHwgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICBoZWFkZXJzOiAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnModGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgc2Vzc2lvbklkOiAgICAgICAgICAgICAgICB0aGlzLl9zZXNzaW9uSWQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIGlzU2FtZU9yaWdpblBvbGljeUZhaWxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==