UNPKG

webdriverio-automation

Version:

WebdriverIO-Automation android ios project

211 lines (167 loc) 27.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _logger = _interopRequireDefault(require("./logger")); var _lodash = _interopRequireDefault(require("lodash")); class RpcMessageHandler { constructor(specialHandlers) { this.setHandlers(); this.errorHandlers = {}; this.specialHandlers = _lodash.default.clone(specialHandlers); this.dataHandlers = {}; this.willNavigateWithoutReload = false; } setDataMessageHandler(key, errorHandler, handler) { this.errorHandlers[key] = errorHandler; this.dataHandlers[key] = handler; } setSpecialMessageHandler(key, errorHandler, handler) { this.errorHandlers[key] = errorHandler; this.specialHandlers[key] = handler; } getSpecialMessageHandler(key) { return this.specialHandlers[key]; } setTimelineEventHandler(timelineEventHandler) { this.timelineEventHandler = timelineEventHandler; } setConsoleLogEventHandler(consoleLogEventHandler) { this.consoleLogEventHandler = consoleLogEventHandler; } setNetworkEventHandler(networkLogEventHandler) { this.networkLogEventHandler = networkLogEventHandler; } hasErrorHandler(key) { return _lodash.default.has(this.errorHandlers, key); } hasSpecialMessageHandler(key) { return _lodash.default.has(this.specialHandlers, key); } allowNavigationWithoutReload(allow = true) { this.willNavigateWithoutReload = allow; } handleMessage(plist) { let handlerFor = plist.__selector; if (!handlerFor) { _logger.default.debug('Got an invalid plist'); return; } if (_lodash.default.has(this.handlers, handlerFor)) { this.handlers[handlerFor](plist); } else { _logger.default.debug(`Debugger got a message for '${handlerFor}' and have no ` + `handler, doing nothing.`); } } handleSpecialMessage(handler, ...args) { const fn = this.specialHandlers[handler]; if (fn) { if (handler !== '_rpc_forwardGetListing:' && handler !== '_rpc_applicationDisconnected:' && handler !== '_rpc_applicationConnected:' && handler !== '_rpc_applicationUpdated:' && handler !== '_rpc_reportConnectedDriverList:') { this.specialHandlers[handler] = null; } fn(...args); } else { _logger.default.warn(`Tried to access special message handler '${handler}' ` + `but none was found`); } } parseDataKey(plist) { try { return JSON.parse(plist.__argument.WIRMessageDataKey.toString('utf8')); } catch (err) { _logger.default.error(`Unparseable message data: ${_lodash.default.truncate(JSON.stringify(plist), { length: 100 })}`); throw new Error(`Unable to parse message data: ${err.message}`); } } handleDataMessage(plist) { var _this = this; return (0, _asyncToGenerator2.default)(function* () { const dataKey = _this.parseDataKey(plist); const msgId = (dataKey.id || '').toString(); let result = dataKey.result; let error = dataKey.error || null; if (result && result.wasThrown) { let message = result.result && (result.result.value || result.result.description) ? result.result.value || result.result.description : 'Error occurred in handling data message'; error = new Error(message); } if (error) { if (_this.hasErrorHandler(msgId)) { _this.errorHandlers[msgId](error); } else { _logger.default.error(`Error occurred in handling data message: ${error}`); _logger.default.error('No error handler present, ignoring'); } return; } if (dataKey.method === 'Profiler.resetProfiles') { _logger.default.debug('Device is telling us to reset profiles. Should probably ' + 'do some kind of callback here'); } else if (dataKey.method === 'Page.frameNavigated') { if (!_this.willNavigateWithoutReload && !_this.pageLoading) { _logger.default.debug('Frame navigated, unloading page'); if (_lodash.default.isFunction(_this.specialHandlers['Page.frameNavigated'])) { _this.specialHandlers['Page.frameNavigated']('remote-debugger'); _this.specialHandlers['Page.frameNavigated'] = null; } } else { _logger.default.debug('Frame navigated but we were warned about it, not ' + 'considering page state unloaded'); _this.willNavigateWithoutReload = false; } } else if (dataKey.method === 'Page.loadEventFired' && _lodash.default.isFunction(_this.specialHandlers.pageLoad)) { yield _this.specialHandlers.pageLoad(); } else if (dataKey.method === 'Page.frameDetached' && _lodash.default.isFunction(_this.specialHandlers.frameDetached)) { yield _this.specialHandlers.frameDetached(); } else if (dataKey.method === 'Timeline.eventRecorded' && _lodash.default.isFunction(_this.timelineEventHandler)) { _this.timelineEventHandler(dataKey.params.record); } else if (dataKey.method === 'Console.messageAdded' && _lodash.default.isFunction(_this.consoleLogEventHandler)) { _this.consoleLogEventHandler(dataKey.params.message); } else if (dataKey.method && dataKey.method.startsWith('Network.') && _lodash.default.isFunction(_this.networkLogEventHandler)) { _this.networkLogEventHandler(dataKey.method, dataKey.params); } else if (_lodash.default.isFunction(_this.dataHandlers[msgId])) { _logger.default.debug('Found data handler for response'); if (result.result && result.result.value) { result = result.result.value; } _this.dataHandlers[msgId](result); _this.dataHandlers[msgId] = null; } else if (_this.dataHandlers[msgId] === null) { _logger.default.error(`Debugger returned data for message ${msgId} ` + `but we already ran that callback! WTF??`); } else { if (msgId || result || error) { _logger.default.error(`Debugger returned data for message '${msgId}' ` + `but we were not waiting for that message! ` + `result: '${JSON.stringify(result)}'; ` + `error: '${error}'`); } } })(); } setHandlers() { this.handlers = { '_rpc_reportSetup:': plist => { this.handleSpecialMessage('_rpc_reportIdentifier:', plist.__argument.WIRSimulatorNameKey, plist.__argument.WIRSimulatorBuildKey, plist.__argument.WIRSimulatorProductVersionKey); }, '_rpc_reportConnectedApplicationList:': plist => { this.handleSpecialMessage('_rpc_reportConnectedApplicationList:', plist.__argument.WIRApplicationDictionaryKey); }, '_rpc_applicationSentListing:': plist => { this.handleSpecialMessage('_rpc_forwardGetListing:', plist.__argument.WIRApplicationIdentifierKey, plist.__argument.WIRListingKey); }, '_rpc_applicationConnected:': plist => { this.handleSpecialMessage('_rpc_applicationConnected:', plist.__argument); }, '_rpc_applicationDisconnected:': plist => { this.handleSpecialMessage('_rpc_applicationDisconnected:', plist.__argument); }, '_rpc_applicationUpdated:': plist => { this.handleSpecialMessage('_rpc_applicationUpdated:', plist.__argument); }, '_rpc_reportConnectedDriverList:': plist => { this.handleSpecialMessage('_rpc_reportConnectedDriverList:', plist.__argument); }, '_rpc_applicationSentData:': this.handleDataMessage.bind(this) }; } } exports.default = RpcMessageHandler;require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZW1vdGUtZGVidWdnZXItbWVzc2FnZS1oYW5kbGVyLmpzIl0sIm5hbWVzIjpbIlJwY01lc3NhZ2VIYW5kbGVyIiwiY29uc3RydWN0b3IiLCJzcGVjaWFsSGFuZGxlcnMiLCJzZXRIYW5kbGVycyIsImVycm9ySGFuZGxlcnMiLCJfIiwiY2xvbmUiLCJkYXRhSGFuZGxlcnMiLCJ3aWxsTmF2aWdhdGVXaXRob3V0UmVsb2FkIiwic2V0RGF0YU1lc3NhZ2VIYW5kbGVyIiwia2V5IiwiZXJyb3JIYW5kbGVyIiwiaGFuZGxlciIsInNldFNwZWNpYWxNZXNzYWdlSGFuZGxlciIsImdldFNwZWNpYWxNZXNzYWdlSGFuZGxlciIsInNldFRpbWVsaW5lRXZlbnRIYW5kbGVyIiwidGltZWxpbmVFdmVudEhhbmRsZXIiLCJzZXRDb25zb2xlTG9nRXZlbnRIYW5kbGVyIiwiY29uc29sZUxvZ0V2ZW50SGFuZGxlciIsInNldE5ldHdvcmtFdmVudEhhbmRsZXIiLCJuZXR3b3JrTG9nRXZlbnRIYW5kbGVyIiwiaGFzRXJyb3JIYW5kbGVyIiwiaGFzIiwiaGFzU3BlY2lhbE1lc3NhZ2VIYW5kbGVyIiwiYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCIsImFsbG93IiwiaGFuZGxlTWVzc2FnZSIsInBsaXN0IiwiaGFuZGxlckZvciIsIl9fc2VsZWN0b3IiLCJsb2ciLCJkZWJ1ZyIsImhhbmRsZXJzIiwiaGFuZGxlU3BlY2lhbE1lc3NhZ2UiLCJhcmdzIiwiZm4iLCJ3YXJuIiwicGFyc2VEYXRhS2V5IiwiSlNPTiIsInBhcnNlIiwiX19hcmd1bWVudCIsIldJUk1lc3NhZ2VEYXRhS2V5IiwidG9TdHJpbmciLCJlcnIiLCJlcnJvciIsInRydW5jYXRlIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwiRXJyb3IiLCJtZXNzYWdlIiwiaGFuZGxlRGF0YU1lc3NhZ2UiLCJkYXRhS2V5IiwibXNnSWQiLCJpZCIsInJlc3VsdCIsIndhc1Rocm93biIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJtZXRob2QiLCJwYWdlTG9hZGluZyIsImlzRnVuY3Rpb24iLCJwYWdlTG9hZCIsImZyYW1lRGV0YWNoZWQiLCJwYXJhbXMiLCJyZWNvcmQiLCJzdGFydHNXaXRoIiwiV0lSU2ltdWxhdG9yTmFtZUtleSIsIldJUlNpbXVsYXRvckJ1aWxkS2V5IiwiV0lSU2ltdWxhdG9yUHJvZHVjdFZlcnNpb25LZXkiLCJXSVJBcHBsaWNhdGlvbkRpY3Rpb25hcnlLZXkiLCJXSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXkiLCJXSVJMaXN0aW5nS2V5IiwiYmluZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHZSxNQUFNQSxpQkFBTixDQUF3QjtBQUNyQ0MsRUFBQUEsV0FBVyxDQUFFQyxlQUFGLEVBQW1CO0FBQzVCLFNBQUtDLFdBQUw7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0YsZUFBTCxHQUF1QkcsZ0JBQUVDLEtBQUYsQ0FBUUosZUFBUixDQUF2QjtBQUNBLFNBQUtLLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQyx5QkFBTCxHQUFpQyxLQUFqQztBQUNEOztBQUVEQyxFQUFBQSxxQkFBcUIsQ0FBRUMsR0FBRixFQUFPQyxZQUFQLEVBQXFCQyxPQUFyQixFQUE4QjtBQUNqRCxTQUFLUixhQUFMLENBQW1CTSxHQUFuQixJQUEwQkMsWUFBMUI7QUFDQSxTQUFLSixZQUFMLENBQWtCRyxHQUFsQixJQUF5QkUsT0FBekI7QUFDRDs7QUFFREMsRUFBQUEsd0JBQXdCLENBQUVILEdBQUYsRUFBT0MsWUFBUCxFQUFxQkMsT0FBckIsRUFBOEI7QUFDcEQsU0FBS1IsYUFBTCxDQUFtQk0sR0FBbkIsSUFBMEJDLFlBQTFCO0FBQ0EsU0FBS1QsZUFBTCxDQUFxQlEsR0FBckIsSUFBNEJFLE9BQTVCO0FBQ0Q7O0FBRURFLEVBQUFBLHdCQUF3QixDQUFFSixHQUFGLEVBQU87QUFDN0IsV0FBTyxLQUFLUixlQUFMLENBQXFCUSxHQUFyQixDQUFQO0FBQ0Q7O0FBRURL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NEIsSUFBNUI7QUFoQ2YsS0FBaEI7QUFrQ0Q7O0FBek1vQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNNZXNzYWdlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChzcGVjaWFsSGFuZGxlcnMpIHtcbiAgICB0aGlzLnNldEhhbmRsZXJzKCk7XG4gICAgdGhpcy5lcnJvckhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zcGVjaWFsSGFuZGxlcnMgPSBfLmNsb25lKHNwZWNpYWxIYW5kbGVycyk7XG4gICAgdGhpcy5kYXRhSGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLndpbGxOYXZpZ2F0ZVdpdGhvdXRSZWxvYWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNldERhdGFNZXNzYWdlSGFuZGxlciAoa2V5LCBlcnJvckhhbmRsZXIsIGhhbmRsZXIpIHtcbiAgICB0aGlzLmVycm9ySGFuZGxlcnNba2V5XSA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLmRhdGFIYW5kbGVyc1trZXldID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFNwZWNpYWxNZXNzYWdlSGFuZGxlciAoa2V5LCBlcnJvckhhbmRsZXIsIGhhbmRsZXIpIHtcbiAgICB0aGlzLmVycm9ySGFuZGxlcnNba2V5XSA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnNwZWNpYWxIYW5kbGVyc1trZXldID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldFNwZWNpYWxNZXNzYWdlSGFuZGxlciAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlY2lhbEhhbmRsZXJzW2tleV07XG4gIH1cblxuICBzZXRUaW1lbGluZUV2ZW50SGFuZGxlciAodGltZWxpbmVFdmVudEhhbmRsZXIpIHtcbiAgICB0aGlzLnRpbWVsaW5lRXZlbnRIYW5kbGVyID0gdGltZWxpbmVFdmVudEhhbmRsZXI7XG4gIH1cblxuICBzZXRDb25zb2xlTG9nRXZlbnRIYW5kbGVyIChjb25zb2xlTG9nRXZlbnRIYW5kbGVyKSB7XG4gICAgdGhpcy5jb25zb2xlTG9nRXZlbnRIYW5kbGVyID0gY29uc29sZUxvZ0V2ZW50SGFuZGxlcjtcbiAgfVxuXG4gIHNldE5ldHdvcmtFdmVudEhhbmRsZXIgKG5ldHdvcmtMb2dFdmVudEhhbmRsZXIpIHtcbiAgICB0aGlzLm5ldHdvcmtMb2dFdmVudEhhbmRsZXIgPSBuZXR3b3JrTG9nRXZlbnRIYW5kbGVyO1xuICB9XG5cbiAgaGFzRXJyb3JIYW5kbGVyIChrZXkpIHtcbiAgICByZXR1cm4gXy5oYXModGhpcy5lcnJvckhhbmRsZXJzLCBrZXkpO1xuICB9XG5cbiAgaGFzU3BlY2lhbE1lc3NhZ2VIYW5kbGVyIChrZXkpIHtcbiAgICByZXR1cm4gXy5oYXModGhpcy5zcGVjaWFsSGFuZGxlcnMsIGtleSk7XG4gIH1cblxuICBhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkIChhbGxvdyA9IHRydWUpIHtcbiAgICB0aGlzLndpbGxOYXZpZ2F0ZVdpdGhvdXRSZWxvYWQgPSBhbGxvdztcbiAgfVxuXG4gIGhhbmRsZU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgbGV0IGhhbmRsZXJGb3IgPSBwbGlzdC5fX3NlbGVjdG9yO1xuICAgIGlmICghaGFuZGxlckZvcikge1xuICAgICAgbG9nLmRlYnVnKCdHb3QgYW4gaW52YWxpZCBwbGlzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChfLmhhcyh0aGlzLmhhbmRsZXJzLCBoYW5kbGVyRm9yKSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1toYW5kbGVyRm9yXShwbGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhgRGVidWdnZXIgZ290IGEgbWVzc2FnZSBmb3IgJyR7aGFuZGxlckZvcn0nIGFuZCBoYXZlIG5vIGAgK1xuICAgICAgICAgICAgICAgIGBoYW5kbGVyLCBkb2luZyBub3RoaW5nLmApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNwZWNpYWxNZXNzYWdlIChoYW5kbGVyLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgZm4gPSB0aGlzLnNwZWNpYWxIYW5kbGVyc1toYW5kbGVyXTtcblxuICAgIGlmIChmbikge1xuICAgICAgLy8gbW9zdCByZXNwb25zZXMgYXJlIG9ubHkgdG8gYmUgY2FsbGVkIG9uY2UsIHRoZW5cbiAgICAgIC8vIHJlbW92ZWQuIEJ1dCBub3QgdGhlIG9uZXMgYmVsb3csIHdoaWNoIGhhbmRsZVxuICAgICAgLy8gcGFnZSBjaGFuZ2UgYW5kIGFwcCBjb25uZWN0L2Rpc2Nvbm5lY3RcbiAgICAgIGlmIChoYW5kbGVyICE9PSAnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonICYmXG4gICAgICAgICAgaGFuZGxlciAhPT0gJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JyAmJlxuICAgICAgICAgIGhhbmRsZXIgIT09ICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicgJiZcbiAgICAgICAgICBoYW5kbGVyICE9PSAnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JyAmJlxuICAgICAgICAgIGhhbmRsZXIgIT09ICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6Jykge1xuICAgICAgICB0aGlzLnNwZWNpYWxIYW5kbGVyc1toYW5kbGVyXSA9IG51bGw7XG4gICAgICB9XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oYFRyaWVkIHRvIGFjY2VzcyBzcGVjaWFsIG1lc3NhZ2UgaGFuZGxlciAnJHtoYW5kbGVyfScgYCArXG4gICAgICAgICAgICAgICBgYnV0IG5vbmUgd2FzIGZvdW5kYCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VEYXRhS2V5IChwbGlzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGlzdC5fX2FyZ3VtZW50LldJUk1lc3NhZ2VEYXRhS2V5LnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbnBhcnNlYWJsZSBtZXNzYWdlIGRhdGE6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShwbGlzdCksIHtsZW5ndGg6IDEwMH0pfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVzc2FnZSBkYXRhOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURhdGFNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLnBhcnNlRGF0YUtleShwbGlzdCk7XG4gICAgY29uc3QgbXNnSWQgPSAoZGF0YUtleS5pZCB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUtleS5yZXN1bHQ7XG4gICAgbGV0IGVycm9yID0gZGF0YUtleS5lcnJvciB8fCBudWxsO1xuXG4gICAgLy8gd2UgY2FuIGdldCBhbiBlcnJvciwgb3Igd2UgY2FuIGdldCBhIHJlc3BvbnNlIHRoYXQgaXMgYW4gZXJyb3JcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC53YXNUaHJvd24pIHtcbiAgICAgIGxldCBtZXNzYWdlID0gKHJlc3VsdC5yZXN1bHQgJiYgKHJlc3VsdC5yZXN1bHQudmFsdWUgfHwgcmVzdWx0LnJlc3VsdC5kZXNjcmlwdGlvbikpXG4gICAgICAgID8gKHJlc3VsdC5yZXN1bHQudmFsdWUgfHwgcmVzdWx0LnJlc3VsdC5kZXNjcmlwdGlvbilcbiAgICAgICAgOiAnRXJyb3Igb2NjdXJyZWQgaW4gaGFuZGxpbmcgZGF0YSBtZXNzYWdlJztcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuaGFzRXJyb3JIYW5kbGVyKG1zZ0lkKSkge1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlcnNbbXNnSWRdKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5lcnJvcihgRXJyb3Igb2NjdXJyZWQgaW4gaGFuZGxpbmcgZGF0YSBtZXNzYWdlOiAke2Vycm9yfWApO1xuICAgICAgICBsb2cuZXJyb3IoJ05vIGVycm9yIGhhbmRsZXIgcHJlc2VudCwgaWdub3JpbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2hvcnQgY2lyY3VpdFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhS2V5Lm1ldGhvZCA9PT0gJ1Byb2ZpbGVyLnJlc2V0UHJvZmlsZXMnKSB7XG4gICAgICBsb2cuZGVidWcoJ0RldmljZSBpcyB0ZWxsaW5nIHVzIHRvIHJlc2V0IHByb2ZpbGVzLiBTaG91bGQgcHJvYmFibHkgJyArXG4gICAgICAgICAgICAgICAgJ2RvIHNvbWUga2luZCBvZiBjYWxsYmFjayBoZXJlJyk7XG4gICAgfSBlbHNlIGlmIChkYXRhS2V5Lm1ldGhvZCA9PT0gJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnKSB7XG4gICAgICBpZiAoIXRoaXMud2lsbE5hdmlnYXRlV2l0aG91dFJlbG9hZCAmJiAhdGhpcy5wYWdlTG9hZGluZykge1xuICAgICAgICBsb2cuZGVidWcoJ0ZyYW1lIG5hdmlnYXRlZCwgdW5sb2FkaW5nIHBhZ2UnKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnNwZWNpYWxIYW5kbGVyc1snUGFnZS5mcmFtZU5hdmlnYXRlZCddKSkge1xuICAgICAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZXJzWydQYWdlLmZyYW1lTmF2aWdhdGVkJ10oJ3JlbW90ZS1kZWJ1Z2dlcicpO1xuICAgICAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZXJzWydQYWdlLmZyYW1lTmF2aWdhdGVkJ10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ0ZyYW1lIG5hdmlnYXRlZCBidXQgd2Ugd2VyZSB3YXJuZWQgYWJvdXQgaXQsIG5vdCAnICtcbiAgICAgICAgICAgICAgICAgICdjb25zaWRlcmluZyBwYWdlIHN0YXRlIHVubG9hZGVkJyk7XG4gICAgICAgIHRoaXMud2lsbE5hdmlnYXRlV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YUtleS5tZXRob2QgPT09ICdQYWdlLmxvYWRFdmVudEZpcmVkJyAmJiBfLmlzRnVuY3Rpb24odGhpcy5zcGVjaWFsSGFuZGxlcnMucGFnZUxvYWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNwZWNpYWxIYW5kbGVycy5wYWdlTG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoZGF0YUtleS5tZXRob2QgPT09ICdQYWdlLmZyYW1lRGV0YWNoZWQnICYmIF8uaXNGdW5jdGlvbih0aGlzLnNwZWNpYWxIYW5kbGVycy5mcmFtZURldGFjaGVkKSkge1xuICAgICAgYXdhaXQgdGhpcy5zcGVjaWFsSGFuZGxlcnMuZnJhbWVEZXRhY2hlZCgpO1xuICAgIH0gZWxzZSBpZiAoZGF0YUtleS5tZXRob2QgPT09ICdUaW1lbGluZS5ldmVudFJlY29yZGVkJyAmJiBfLmlzRnVuY3Rpb24odGhpcy50aW1lbGluZUV2ZW50SGFuZGxlcikpIHtcbiAgICAgIHRoaXMudGltZWxpbmVFdmVudEhhbmRsZXIoZGF0YUtleS5wYXJhbXMucmVjb3JkKTtcbiAgICB9IGVsc2UgaWYgKGRhdGFLZXkubWV0aG9kID09PSAnQ29uc29sZS5tZXNzYWdlQWRkZWQnICYmIF8uaXNGdW5jdGlvbih0aGlzLmNvbnNvbGVMb2dFdmVudEhhbmRsZXIpKSB7XG4gICAgICB0aGlzLmNvbnNvbGVMb2dFdmVudEhhbmRsZXIoZGF0YUtleS5wYXJhbXMubWVzc2FnZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhS2V5Lm1ldGhvZCAmJiBkYXRhS2V5Lm1ldGhvZC5zdGFydHNXaXRoKCdOZXR3b3JrLicpICYmIF8uaXNGdW5jdGlvbih0aGlzLm5ldHdvcmtMb2dFdmVudEhhbmRsZXIpKSB7XG4gICAgICB0aGlzLm5ldHdvcmtMb2dFdmVudEhhbmRsZXIoZGF0YUtleS5tZXRob2QsIGRhdGFLZXkucGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbih0aGlzLmRhdGFIYW5kbGVyc1ttc2dJZF0pKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGRhdGEgaGFuZGxlciBmb3IgcmVzcG9uc2UnKTtcbiAgICAgIC8vIHdlIHdpbGwgZWl0aGVyIGdldCBiYWNrIGEgcmVzdWx0IG9iamVjdCB0aGF0IGhhcyBhIHJlc3VsdC52YWx1ZVxuICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGF0IGlzIHdoYXQgd2Ugd2FudCxcbiAgICAgIC8vIG9yIGVsc2Ugd2UgcmV0dXJuIHRoZSB3aG9sZSB0aGluZ1xuICAgICAgaWYgKHJlc3VsdC5yZXN1bHQgJiYgcmVzdWx0LnJlc3VsdC52YWx1ZSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVzdWx0LnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhSGFuZGxlcnNbbXNnSWRdKHJlc3VsdCk7XG4gICAgICB0aGlzLmRhdGFIYW5kbGVyc1ttc2dJZF0gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhSGFuZGxlcnNbbXNnSWRdID09PSBudWxsKSB7XG4gICAgICBsb2cuZXJyb3IoYERlYnVnZ2VyIHJldHVybmVkIGRhdGEgZm9yIG1lc3NhZ2UgJHttc2dJZH0gYCArXG4gICAgICAgICAgICAgICAgYGJ1dCB3ZSBhbHJlYWR5IHJhbiB0aGF0IGNhbGxiYWNrISBXVEY/P2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobXNnSWQgfHwgcmVzdWx0IHx8IGVycm9yKSB7XG4gICAgICAgIGxvZy5lcnJvcihgRGVidWdnZXIgcmV0dXJuZWQgZGF0YSBmb3IgbWVzc2FnZSAnJHttc2dJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGJ1dCB3ZSB3ZXJlIG5vdCB3YWl0aW5nIGZvciB0aGF0IG1lc3NhZ2UhIGAgK1xuICAgICAgICAgICAgICAgICAgYHJlc3VsdDogJyR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX0nOyBgICtcbiAgICAgICAgICAgICAgICAgIGBlcnJvcjogJyR7ZXJyb3J9J2ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEhhbmRsZXJzICgpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgJ19ycGNfcmVwb3J0U2V0dXA6JzogKHBsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3BlY2lhbE1lc3NhZ2UoJ19ycGNfcmVwb3J0SWRlbnRpZmllcjonLFxuICAgICAgICAgICAgcGxpc3QuX19hcmd1bWVudC5XSVJTaW11bGF0b3JOYW1lS2V5LFxuICAgICAgICAgICAgcGxpc3QuX19hcmd1bWVudC5XSVJTaW11bGF0b3JCdWlsZEtleSxcbiAgICAgICAgICAgIHBsaXN0Ll9fYXJndW1lbnQuV0lSU2ltdWxhdG9yUHJvZHVjdFZlcnNpb25LZXkpO1xuICAgICAgfSxcbiAgICAgICdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonOiAocGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTcGVjaWFsTWVzc2FnZSgnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JyxcbiAgICAgICAgICAgIHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5KTtcbiAgICAgIH0sXG4gICAgICAnX3JwY19hcHBsaWNhdGlvblNlbnRMaXN0aW5nOic6IChwbGlzdCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVNwZWNpYWxNZXNzYWdlKCdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOicsXG4gICAgICAgICAgICBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICAgICAgICAgIHBsaXN0Ll9fYXJndW1lbnQuV0lSTGlzdGluZ0tleSk7XG4gICAgICB9LFxuICAgICAgJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JzogKHBsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3BlY2lhbE1lc3NhZ2UoJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JyxcbiAgICAgICAgICAgIHBsaXN0Ll9fYXJndW1lbnQpO1xuICAgICAgfSxcbiAgICAgICdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOic6IChwbGlzdCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVNwZWNpYWxNZXNzYWdlKCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsXG4gICAgICAgICAgICBwbGlzdC5fX2FyZ3VtZW50KTtcbiAgICAgIH0sXG4gICAgICAnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JzogKHBsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3BlY2lhbE1lc3NhZ2UoJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsXG4gICAgICAgICAgICBwbGlzdC5fX2FyZ3VtZW50KTtcbiAgICAgIH0sXG4gICAgICAnX3JwY19yZXBvcnRDb25uZWN0ZWREcml2ZXJMaXN0Oic6IChwbGlzdCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVNwZWNpYWxNZXNzYWdlKCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JyxcbiAgICAgICAgICAgIHBsaXN0Ll9fYXJndW1lbnQpO1xuICAgICAgfSxcbiAgICAgICdfcnBjX2FwcGxpY2F0aW9uU2VudERhdGE6JzogdGhpcy5oYW5kbGVEYXRhTWVzc2FnZS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJmaWxlIjoibGliL3JlbW90ZS1kZWJ1Z2dlci1tZXNzYWdlLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==