Files
2026-09-13 09:43:24 +03:00

121 lines
15 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UtcpConfigManager = void 0;
exports.getConfigManager = getConfigManager;
const fs_extra_1 = require("fs-extra");
const path_1 = require("path");
const os_1 = require("os");
// @ts-ignore
const package_json_1 = __importDefault(require("../../package.json"));
class UtcpConfigManager {
constructor() {
this.configPath = '';
}
static getInstance() {
if (!UtcpConfigManager.instance) {
UtcpConfigManager.instance = new UtcpConfigManager();
}
return UtcpConfigManager.instance;
}
async initialize() {
const savedPath = await Editor.Profile.getConfig(package_json_1.default.name, 'utcpConfigPath');
if (savedPath && typeof savedPath === 'string') {
this.configPath = savedPath;
}
else {
this.configPath = (0, path_1.join)((0, os_1.homedir)(), '.utcp_config.json');
}
console.log(`[UtcpConfigManager] Initialized with config path: ${this.configPath}`);
}
getConfigPath() {
if (!this.configPath) {
this.configPath = (0, path_1.join)((0, os_1.homedir)(), '.utcp_config.json');
}
return this.configPath;
}
async setConfigPath(path) {
this.configPath = path;
await Editor.Profile.setConfig(package_json_1.default.name, 'utcpConfigPath', path);
console.log(`[UtcpConfigManager] Config path updated to: ${path}`);
}
readConfig() {
const path = this.getConfigPath();
if (path && (0, fs_extra_1.existsSync)(path)) {
try {
const content = (0, fs_extra_1.readFileSync)(path, 'utf-8');
return JSON.parse(content);
}
catch (e) {
console.error('[UtcpConfigManager] Failed to parse UTCP config:', e);
return { manual_call_templates: [] };
}
}
return { manual_call_templates: [] };
}
writeConfig(config) {
const path = this.getConfigPath();
if (!path) {
console.error('[UtcpConfigManager] Config path is not set');
return;
}
try {
(0, fs_extra_1.writeFileSync)(path, JSON.stringify(config, null, 2));
console.log(`[UtcpConfigManager] Saved UTCP config to ${path}`);
}
catch (e) {
console.error('[UtcpConfigManager] Failed to write UTCP config:', e);
}
}
async ensureCocosEditorTemplate(port) {
if (!port || port <= 0) {
console.warn('[UtcpConfigManager] Invalid port provided:', port);
return false;
}
const expectedUrl = `http://localhost:${port}/utcp`;
const config = this.readConfig();
if (!config.manual_call_templates) {
config.manual_call_templates = [];
}
const templates = config.manual_call_templates;
const idx = templates.findIndex((t) => t.name === 'CocosEditor');
let changed = false;
if (idx === -1) {
templates.push({
name: 'CocosEditor',
call_template_type: 'http',
url: expectedUrl,
http_method: 'GET',
content_type: 'application/json',
});
changed = true;
console.log(`[UtcpConfigManager] Created CocosEditor template with port ${port}`);
}
else {
if (templates[idx].url !== expectedUrl) {
templates[idx].url = expectedUrl;
changed = true;
console.log(`[UtcpConfigManager] Updated CocosEditor template port to ${port}`);
}
}
if (changed) {
this.writeConfig(config);
}
return changed;
}
async getCurrentPort() {
const port = await Editor.Profile.getConfig(package_json_1.default.name, 'serverPort');
return typeof port === 'number' ? port : 0;
}
async updatePort(port) {
await Editor.Profile.setConfig(package_json_1.default.name, 'serverPort', port);
await this.ensureCocosEditorTemplate(port);
}
}
exports.UtcpConfigManager = UtcpConfigManager;
function getConfigManager() {
return UtcpConfigManager.getInstance();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvdXRjcC9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2SEEsNENBRUM7QUEvSEQsdUNBQW1FO0FBQ25FLCtCQUE0QjtBQUM1QiwyQkFBNkI7QUFFN0IsYUFBYTtBQUNiLHNFQUE2QztBQUc3QyxNQUFhLGlCQUFpQjtJQUkxQjtRQUZRLGVBQVUsR0FBVyxFQUFFLENBQUM7SUFFVCxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxXQUFXO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRixJQUFJLFNBQVMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBQSxXQUFJLEVBQUMsSUFBQSxZQUFPLEdBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxJQUFJLElBQUksSUFBSSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUM7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBQSx1QkFBWSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUM1RCxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELElBQUEsd0JBQWEsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUN4QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxvQkFBb0IsSUFBSSxPQUFPLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztRQUV0RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGtCQUFrQixFQUFFLE1BQU07Z0JBQzFCLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixXQUFXLEVBQUUsS0FBSztnQkFDbEIsWUFBWSxFQUFFLGtCQUFrQjthQUNuQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4REFBOEQsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDckMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7Z0JBQ2pDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBVyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RSxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0o7QUFuSEQsOENBbUhDO0FBRUQsU0FBZ0IsZ0JBQWdCO0lBQzVCLE9BQU8saUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuXG5cbmV4cG9ydCBjbGFzcyBVdGNwQ29uZmlnTWFuYWdlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFV0Y3BDb25maWdNYW5hZ2VyO1xuICAgIHByaXZhdGUgY29uZmlnUGF0aDogc3RyaW5nID0gJyc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBVdGNwQ29uZmlnTWFuYWdlciB7XG4gICAgICAgIGlmICghVXRjcENvbmZpZ01hbmFnZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIFV0Y3BDb25maWdNYW5hZ2VyLmluc3RhbmNlID0gbmV3IFV0Y3BDb25maWdNYW5hZ2VyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0Y3BDb25maWdNYW5hZ2VyLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNhdmVkUGF0aCA9IGF3YWl0IEVkaXRvci5Qcm9maWxlLmdldENvbmZpZyhwYWNrYWdlSlNPTi5uYW1lLCAndXRjcENvbmZpZ1BhdGgnKTtcbiAgICAgICAgaWYgKHNhdmVkUGF0aCAmJiB0eXBlb2Ygc2F2ZWRQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jb25maWdQYXRoID0gc2F2ZWRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWdQYXRoID0gam9pbihob21lZGlyKCksICcudXRjcF9jb25maWcuanNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBbVXRjcENvbmZpZ01hbmFnZXJdIEluaXRpYWxpemVkIHdpdGggY29uZmlnIHBhdGg6ICR7dGhpcy5jb25maWdQYXRofWApO1xuICAgIH1cblxuICAgIGdldENvbmZpZ1BhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnUGF0aCA9IGpvaW4oaG9tZWRpcigpLCAnLnV0Y3BfY29uZmlnLmpzb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdQYXRoO1xuICAgIH1cblxuICAgIGFzeW5jIHNldENvbmZpZ1BhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuY29uZmlnUGF0aCA9IHBhdGg7XG4gICAgICAgIGF3YWl0IEVkaXRvci5Qcm9maWxlLnNldENvbmZpZyhwYWNrYWdlSlNPTi5uYW1lLCAndXRjcENvbmZpZ1BhdGgnLCBwYXRoKTtcbiAgICAgICAgY29uc29sZS5sb2coYFtVdGNwQ29uZmlnTWFuYWdlcl0gQ29uZmlnIHBhdGggdXBkYXRlZCB0bzogJHtwYXRofWApO1xuICAgIH1cblxuICAgIHJlYWRDb25maWcoKTogYW55IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0Q29uZmlnUGF0aCgpO1xuICAgICAgICBpZiAocGF0aCAmJiBleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1V0Y3BDb25maWdNYW5hZ2VyXSBGYWlsZWQgdG8gcGFyc2UgVVRDUCBjb25maWc6JywgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWFudWFsX2NhbGxfdGVtcGxhdGVzOiBbXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hbnVhbF9jYWxsX3RlbXBsYXRlczogW10gfTtcbiAgICB9XG5cbiAgICB3cml0ZUNvbmZpZyhjb25maWc6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRDb25maWdQYXRoKCk7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1V0Y3BDb25maWdNYW5hZ2VyXSBDb25maWcgcGF0aCBpcyBub3Qgc2V0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1V0Y3BDb25maWdNYW5hZ2VyXSBTYXZlZCBVVENQIGNvbmZpZyB0byAke3BhdGh9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tVdGNwQ29uZmlnTWFuYWdlcl0gRmFpbGVkIHRvIHdyaXRlIFVUQ1AgY29uZmlnOicsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZW5zdXJlQ29jb3NFZGl0b3JUZW1wbGF0ZShwb3J0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFwb3J0IHx8IHBvcnQgPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbVXRjcENvbmZpZ01hbmFnZXJdIEludmFsaWQgcG9ydCBwcm92aWRlZDonLCBwb3J0KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS91dGNwYDtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5yZWFkQ29uZmlnKCk7XG5cbiAgICAgICAgaWYgKCFjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzO1xuICAgICAgICBjb25zdCBpZHggPSB0ZW1wbGF0ZXMuZmluZEluZGV4KCh0OiBhbnkpID0+IHQubmFtZSA9PT0gJ0NvY29zRWRpdG9yJyk7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29jb3NFZGl0b3InLFxuICAgICAgICAgICAgICAgIGNhbGxfdGVtcGxhdGVfdHlwZTogJ2h0dHAnLFxuICAgICAgICAgICAgICAgIHVybDogZXhwZWN0ZWRVcmwsXG4gICAgICAgICAgICAgICAgaHR0cF9tZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbVXRjcENvbmZpZ01hbmFnZXJdIENyZWF0ZWQgQ29jb3NFZGl0b3IgdGVtcGxhdGUgd2l0aCBwb3J0ICR7cG9ydH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZXNbaWR4XS51cmwgIT09IGV4cGVjdGVkVXJsKSB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVzW2lkeF0udXJsID0gZXhwZWN0ZWRVcmw7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtVdGNwQ29uZmlnTWFuYWdlcl0gVXBkYXRlZCBDb2Nvc0VkaXRvciB0ZW1wbGF0ZSBwb3J0IHRvICR7cG9ydH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbmdlZDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDdXJyZW50UG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBwb3J0ID0gYXdhaXQgRWRpdG9yLlByb2ZpbGUuZ2V0Q29uZmlnKHBhY2thZ2VKU09OLm5hbWUsICdzZXJ2ZXJQb3J0Jyk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcG9ydCA9PT0gJ251bWJlcicgPyBwb3J0IDogMDtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBFZGl0b3IuUHJvZmlsZS5zZXRDb25maWcocGFja2FnZUpTT04ubmFtZSwgJ3NlcnZlclBvcnQnLCBwb3J0KTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDb2Nvc0VkaXRvclRlbXBsYXRlKHBvcnQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ01hbmFnZXIoKTogVXRjcENvbmZpZ01hbmFnZXIge1xuICAgIHJldHVybiBVdGNwQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xufVxuIl19