UNPKG

@iflow-mcp/promptx

Version:

AI角色创建平台和智能工具开发平台,基于MCP协议提供专业AI能力注入

268 lines (266 loc) 7.93 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { ServerConfigManager: () => ServerConfigManager }); module.exports = __toCommonJS(index_exports); // src/serverConfigManager/index.ts var import_fs = require("fs"); var import_path = require("path"); var import_os = require("os"); var DEFAULT_CONFIG = { port: 5203, host: "localhost", transport: "stdio", corsEnabled: false, debug: false }; var ServerConfigManager = class { /** * 构造函数 * * @param {string} [configDir] - 可选的配置目录路径,默认为用户主目录下的 .promptx */ constructor(configDir) { const defaultConfigDir = (0, import_path.join)((0, import_os.homedir)(), ".promptx"); const actualConfigDir = configDir || defaultConfigDir; this.configPath = (0, import_path.join)(actualConfigDir, "server-config.json"); if (!(0, import_fs.existsSync)(actualConfigDir)) { (0, import_fs.mkdirSync)(actualConfigDir, { recursive: true }); } this.config = this.loadConfig(); } /** * 从文件加载配置 * * @private * @returns {ServerConfig} 加载的配置对象 */ loadConfig() { try { if ((0, import_fs.existsSync)(this.configPath)) { const configData = (0, import_fs.readFileSync)(this.configPath, "utf-8"); const parsedConfig = JSON.parse(configData); return { ...DEFAULT_CONFIG, ...parsedConfig }; } } catch (error) { console.warn(`Failed to load server config from ${this.configPath}:`, error); } return { ...DEFAULT_CONFIG }; } /** * 保存配置到文件 * * @private * @throws {Error} 当保存失败时抛出错误 */ saveConfig() { try { const configDir = (0, import_path.dirname)(this.configPath); if (!(0, import_fs.existsSync)(configDir)) { (0, import_fs.mkdirSync)(configDir, { recursive: true }); } (0, import_fs.writeFileSync)(this.configPath, JSON.stringify(this.config, null, 2), "utf-8"); } catch (error) { throw new Error(`Failed to save server config to ${this.configPath}: ${error}`); } } /** * 获取当前完整配置 * * @returns {ServerConfig} 当前配置对象的副本 */ getConfig() { return { ...this.config }; } /** * 获取端口号 * * @returns {number} 当前配置的端口号 */ getPort() { return this.config.port; } /** * 设置端口号 * * @param {number} port - 要设置的端口号 * @throws {Error} 当端口号无效时抛出错误 */ setPort(port) { if (!Number.isInteger(port) || port < 1 || port > 65535) { throw new Error(`Invalid port number: ${port}. Port must be an integer between 1 and 65535.`); } this.config.port = port; this.saveConfig(); } /** * 获取主机地址 * * @returns {string} 当前配置的主机地址 */ getHost() { return this.config.host; } /** * 设置主机地址 * * @param {string} host - 要设置的主机地址 * @throws {Error} 当主机地址无效时抛出错误 */ setHost(host) { if (!host || typeof host !== "string" || host.trim().length === 0) { throw new Error(`Invalid host address: ${host}. Host must be a non-empty string.`); } this.config.host = host.trim(); this.saveConfig(); } /** * 获取传输类型 * * @returns {'stdio' | 'http'} 当前配置的传输类型 */ getTransport() { return this.config.transport; } /** * 设置传输类型 * * @param {'stdio' | 'http'} transport - 要设置的传输类型 * @throws {Error} 当传输类型无效时抛出错误 */ setTransport(transport) { if (transport !== "stdio" && transport !== "http") { throw new Error(`Invalid transport type: ${transport}. Transport must be 'stdio' or 'http'.`); } this.config.transport = transport; this.saveConfig(); } /** * 获取 CORS 启用状态 * * @returns {boolean} 当前 CORS 启用状态 */ getCorsEnabled() { return this.config.corsEnabled; } /** * 设置 CORS 启用状态 * * @param {boolean} enabled - 是否启用 CORS */ setCorsEnabled(enabled) { this.config.corsEnabled = Boolean(enabled); this.saveConfig(); } /** * 获取调试模式状态 * * @returns {boolean} 当前调试模式状态 */ getDebug() { return this.config.debug; } /** * 设置调试模式状态 * * @param {boolean} enabled - 是否启用调试模式 */ setDebug(enabled) { this.config.debug = Boolean(enabled); this.saveConfig(); } /** * 批量更新配置 * * @param {Partial<ServerConfig>} updates - 要更新的配置项 * @throws {Error} 当配置项无效时抛出错误 */ updateConfig(updates) { if (updates.port !== void 0) { if (!Number.isInteger(updates.port) || updates.port < 1 || updates.port > 65535) { throw new Error(`Invalid port number: ${updates.port}. Port must be an integer between 1 and 65535.`); } } if (updates.host !== void 0) { if (!updates.host || typeof updates.host !== "string" || updates.host.trim().length === 0) { throw new Error(`Invalid host address: ${updates.host}. Host must be a non-empty string.`); } } if (updates.transport !== void 0) { if (updates.transport !== "stdio" && updates.transport !== "http") { throw new Error(`Invalid transport type: ${updates.transport}. Transport must be 'stdio' or 'http'.`); } } this.config = { ...this.config, ...updates, host: updates.host ? updates.host.trim() : this.config.host, corsEnabled: updates.corsEnabled !== void 0 ? Boolean(updates.corsEnabled) : this.config.corsEnabled, debug: updates.debug !== void 0 ? Boolean(updates.debug) : this.config.debug }; this.saveConfig(); } /** * 重置配置为默认值 */ resetToDefaults() { this.config = { ...DEFAULT_CONFIG }; this.saveConfig(); } /** * 获取服务器 URL(仅在 HTTP 传输模式下有效) * * @returns {string} 服务器 URL */ getServerUrl() { if (this.config.transport !== "http") { throw new Error("Server URL is only available in HTTP transport mode"); } return `http://${this.config.host}:${this.config.port}`; } /** * 检查端口是否可用(简单检查,不进行实际绑定测试) * * @param {number} port - 要检查的端口号 * @returns {boolean} 端口号是否在有效范围内 */ static isValidPort(port) { return Number.isInteger(port) && port >= 1 && port <= 65535; } /** * 检查主机地址格式是否有效(简单检查) * * @param {string} host - 要检查的主机地址 * @returns {boolean} 主机地址格式是否有效 */ static isValidHost(host) { return typeof host === "string" && host.trim().length > 0; } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ServerConfigManager }); //# sourceMappingURL=index.cjs.map