"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvdXRjcC9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2SEEsNENBRUM7QUEvSEQsdUNBQW1FO0FBQ25FLCtCQUE0QjtBQUM1QiwyQkFBNkI7QUFFN0IsYUFBYTtBQUNiLHNFQUE2QztBQUc3QyxNQUFhLGlCQUFpQjtJQUkxQjtRQUZRLGVBQVUsR0FBVyxFQUFFLENBQUM7SUFFVCxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxXQUFXO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRixJQUFJLFNBQVMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBQSxXQUFJLEVBQUMsSUFBQSxZQUFPLEdBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFBLFdB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Q0o7QUFuSEQsOENBbUhDO0FBRUQsU0FBZ0IsZ0JBQWdCO0lBQzVCLE9BQU8saUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuXG5cbmV4cG9ydCBjbGFzcyBVdGNwQ29uZmlnTWFuYWdlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFV0Y3BDb25maWdNYW5hZ2VyO1xuICAgIHByaXZhdGUgY29uZmlnUGF0aDogc3RyaW5nID0gJyc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBVdGNwQ29uZmlnTWFuYWdlciB7XG4gICAgICAgIGlmICghVXRjcENvbmZpZ01hbmFnZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIFV0Y3BDb25maWdNYW5hZ2VyLmluc3RhbmNlID0gbmV3IFV0Y3BDb25maWdNYW5hZ2VyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFV0Y3BDb25maWdNYW5hZ2VyLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNhdmVkUGF0aCA9IGF3YWl0IEVkaXRvci5Qcm9maWxlLmdldENvbmZpZyhwYWNrYWdlSlNPTi5uYW1lLCAndXRjcENvbmZpZ1BhdGgnKTtcbiAgICAgICAgaWYgKHNhdmVkUGF0aCAmJiB0eXBlb2Ygc2F2ZWRQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jb25maWdQYXRoID0gc2F2ZWRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWdQYXRoID0gam9pbihob21lZGlyKCksICcudXRjcF9jb25maWcuanNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBbVXRjcENvbmZpZ01hbmFnZXJdIEluaXRpYWxpemVkIHdpdGggY29uZmlnIHBhdGg6ICR7dGhpcy5jb25maWdQYXRofWApO1xuICAgIH1cblxuICAgIGdldENvbmZpZ1BhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnUGF0aCA9IGpvaW4oaG9tZWRpcigpLCAnLnV0Y3BfY29uZmlnLmpzb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdQYXRoO1xuICAgIH1cblxuICAgIGFzeW5jIHNldENvbmZpZ1BhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuY29uZmlnUGF0aCA9IHBhdGg7XG4gICAgICAgIGF3YWl0IEVkaXRvci5Qcm9maWxlLnNldENvbmZpZyhwYWNrYWdlSlNPTi5uYW1lLCAndXRjcENvbmZpZ1BhdGgnLCBwYXRoKTtcbiAgICAgICAgY29uc29sZS5sb2coYFtVdGNwQ29uZmlnTWFuYWdlcl0gQ29uZmlnIHBhdGggdXBkYXRlZCB0bzogJHtwYXRofWApO1xuICAgIH1cblxuICAgIHJlYWRDb25maWcoKTogYW55IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0Q29uZmlnUGF0aCgpO1xuICAgICAgICBpZiAocGF0aCAmJiBleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1V0Y3BDb25maWdNYW5hZ2VyXSBGYWlsZWQgdG8gcGFyc2UgVVRDUCBjb25maWc6JywgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWFudWFsX2NhbGxfdGVtcGxhdGVzOiBbXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hbnVhbF9jYWxsX3RlbXBsYXRlczogW10gfTtcbiAgICB9XG5cbiAgICB3cml0ZUNvbmZpZyhjb25maWc6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRDb25maWdQYXRoKCk7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1V0Y3BDb25maWdNYW5hZ2VyXSBDb25maWcgcGF0aCBpcyBub3Qgc2V0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW1V0Y3BDb25maWdNYW5hZ2VyXSBTYXZlZCBVVENQIGNvbmZpZyB0byAke3BhdGh9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tVdGNwQ29uZmlnTWFuYWdlcl0gRmFpbGVkIHRvIHdyaXRlIFVUQ1AgY29uZmlnOicsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZW5zdXJlQ29jb3NFZGl0b3JUZW1wbGF0ZShwb3J0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFwb3J0IHx8IHBvcnQgPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbVXRjcENvbmZpZ01hbmFnZXJdIEludmFsaWQgcG9ydCBwcm92aWRlZDonLCBwb3J0KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS91dGNwYDtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5yZWFkQ29uZmlnKCk7XG5cbiAgICAgICAgaWYgKCFjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBjb25maWcubWFudWFsX2NhbGxfdGVtcGxhdGVzO1xuICAgICAgICBjb25zdCBpZHggPSB0ZW1wbGF0ZXMuZmluZEluZGV4KCh0OiBhbnkpID0+IHQubmFtZSA9PT0gJ0NvY29zRWRpdG9yJyk7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29jb3NFZGl0b3InLFxuICAgICAgICAgICAgICAgIGNhbGxfdGVtcGxhdGVfdHlwZTogJ2h0dHAnLFxuICAgICAgICAgICAgICAgIHVybDogZXhwZWN0ZWRVcmwsXG4gICAgICAgICAgICAgICAgaHR0cF9tZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbVXRjcENvbmZpZ01hbmFnZXJdIENyZWF0ZWQgQ29jb3NFZGl0b3IgdGVtcGxhdGUgd2l0aCBwb3J0ICR7cG9ydH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZXNbaWR4XS51cmwgIT09IGV4cGVjdGVkVXJsKSB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVzW2lkeF0udXJsID0gZXhwZWN0ZWRVcmw7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtVdGNwQ29uZmlnTWFuYWdlcl0gVXBkYXRlZCBDb2Nvc0VkaXRvciB0ZW1wbGF0ZSBwb3J0IHRvICR7cG9ydH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbmdlZDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDdXJyZW50UG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBwb3J0ID0gYXdhaXQgRWRpdG9yLlByb2ZpbGUuZ2V0Q29uZmlnKHBhY2thZ2VKU09OLm5hbWUsICdzZXJ2ZXJQb3J0Jyk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcG9ydCA9PT0gJ251bWJlcicgPyBwb3J0IDogMDtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBFZGl0b3IuUHJvZmlsZS5zZXRDb25maWcocGFja2FnZUpTT04ubmFtZSwgJ3NlcnZlclBvcnQnLCBwb3J0KTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDb2Nvc0VkaXRvclRlbXBsYXRlKHBvcnQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ01hbmFnZXIoKTogVXRjcENvbmZpZ01hbmFnZXIge1xuICAgIHJldHVybiBVdGNwQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xufVxuIl19