Skip to main content
Glama
1yhy
by 1yhy
oss.config.ts4.45 kB
import { config } from "dotenv"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import { z } from "zod"; config(); // OSS配置验证Schema export const OssConfigSchema = z.object({ region: z.string(), accessKeyId: z.string(), accessKeySecret: z.string(), bucket: z.string(), endpoint: z.string(), }); // 导出OSS配置类型 export type OssConfig = z.infer<typeof OssConfigSchema>; // 服务器配置接口 export interface ServerConfig { port: number; ossConfig: Record<string, OssConfig>; configSources: { port: "cli" | "env" | "default"; ossConfig: "cli" | "env" | "default"; }; } // 掩码函数,用于打印敏感信息 function maskSecret(secret: string): string { if (secret.length <= 4) return "****"; return `${secret.substring(0, 4)}****${secret.slice(-4)}`; } // 获取服务器配置 export function getServerConfig(isStdioMode: boolean = false): ServerConfig { // 解析命令行参数 const argv = yargs(hideBin(process.argv)) .options({ "oss-config": { type: "string", description: "OSS配置JSON字符串", }, port: { type: "number", description: "服务器运行端口", default: 3000, }, }) .help() .version("1.0.0") .parseSync(); const config: ServerConfig = { port: 3000, ossConfig: {}, configSources: { port: "default", ossConfig: "default", }, }; // 处理端口配置 if (argv.port) { config.port = argv.port; config.configSources.port = "cli"; } else if (process.env.PORT) { config.port = parseInt(process.env.PORT, 10); config.configSources.port = "env"; } // 处理OSS配置 - 首先检查命令行参数 if (argv["oss-config"]) { const allOssConfigs = JSON.parse(argv["oss-config"] as string); if (allOssConfigs.region && allOssConfigs.accessKeyId) { config.ossConfig.default = OssConfigSchema.parse(allOssConfigs); } else { Object.entries(allOssConfigs).forEach(([name, cfg]) => { config.ossConfig[name.toLowerCase()] = OssConfigSchema.parse(cfg); }); } config.configSources.ossConfig = "cli"; } else if (process.env.OSS_CONFIG_DEFAULT) { const ossConfig = JSON.parse(process.env.OSS_CONFIG_DEFAULT) config.ossConfig.default = OssConfigSchema.parse(ossConfig); config.configSources.ossConfig = "env"; } // 检查其他命名的OSS配置 Object.entries(process.env).forEach(([key, value]) => { if (key.startsWith("OSS_CONFIG_") && key !== "OSS_CONFIG_DEFAULT" && value) { try { const configName = key.replace("OSS_CONFIG_", "").toLowerCase(); const ossConfig = JSON.parse(value); config.ossConfig[configName] = OssConfigSchema.parse(ossConfig); } catch (error) { console.error(`解析环境变量${key}失败:`, error); } } }); // 验证配置 if (Object.keys(config.ossConfig).length === 0) { console.warn("未找到有效的OSS配置。服务器将启动,但上传功能将不可用。"); } // 打印配置信息(非stdio模式下) if (!isStdioMode) { console.log("\n配置信息:"); console.log(`- 端口: ${config.port} (来源: ${config.configSources.port})`); if (Object.keys(config.ossConfig).length > 0) { console.log("- OSS配置:"); Object.entries(config.ossConfig).forEach(([name, cfg]) => { console.log(` - ${name}:`); console.log(` Region: ${cfg.region}`); console.log(` Endpoint: ${cfg.endpoint}`); console.log(` Bucket: ${cfg.bucket}`); console.log(` AccessKeyId: ${maskSecret(cfg.accessKeyId)}`); console.log(` AccessKeySecret: ${maskSecret(cfg.accessKeySecret)}`); }); } else { console.log("- OSS配置: 未找到"); } console.log(); // 空行,增加可读性 } return config; } // 获取所有OSS配置 export function getAllOssConfigs(): Record<string, OssConfig> { const { ossConfig } = getServerConfig(true); return ossConfig; } // 获取特定名称的OSS配置 export function getOssConfig(name: string = 'default'): OssConfig | null { const configs = getAllOssConfigs(); const normalizedName = name.toLowerCase(); return configs[normalizedName] || null; } // 获取可用的OSS配置名称列表 export function getAvailableOssConfigNames(): string[] { return Object.keys(getAllOssConfigs()); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/1yhy/oss-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server