openapi: 3.0.0 info: title: InterConnect-Server API version: 1.0.0 description: | InterConnect-Server 是一个 Minecraft WebSocket API 服务器,提供 API Key 管理、事件广播、服务器命令等功能。 权限说明: - **Admin Key**: `mc_admin_` 前缀,拥有完整管理权限。 - **Regular Key**: `mc_key_` 前缀,可查看/管理关联的 Server Key,发送服务器命令。 - **Server Key**: `mc_server_` 前缀,仅用于插件/Mod 配置,用于认证和事件上报。 servers: - url: http://localhost:8000 description: 本地服务器 components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: API Key description: 使用 API Key 进行认证 (Bearer Token) schemas: ApiKey: type: object properties: id: type: string format: uuid name: type: string description: type: string keyPrefix: type: string enum: [mc_admin_, mc_key_, mc_server_] keyType: type: string enum: [admin, regular, server] serverId: type: string nullable: true regularKeyId: type: string nullable: true createdAt: type: string format: date-time lastUsed: type: string format: date-time nullable: true isActive: type: boolean ApiKeyWithSecret: allOf: - $ref: '#/components/schemas/ApiKey' - type: object properties: key: type: string description: 原始 API Key,仅在创建时返回一次 CreateKeyRequest: type: object required: [name] properties: name: type: string description: type: string key_type: type: string enum: [regular, admin] default: regular server_id: type: string CreateServerKeyRequest: type: object required: [name, regular_key_id] properties: name: type: string description: type: string server_id: type: string regular_key_id: type: string Event: type: object required: [event_type, server_name, timestamp, data] properties: event_type: type: string description: 事件类型 (e.g., player_join, player_leave, message, ai_chat) server_name: type: string timestamp: type: string format: date-time data: type: object description: 事件具体数据 CommandRequest: type: object required: [command] properties: command: type: string server_id: type: string description: 仅 Admin Key 需要/可以指定 AiConfig: type: object properties: apiUrl: type: string modelId: type: string apiKey: type: string description: 部分隐藏的 API Key enabled: type: boolean systemPrompt: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time AiConfigUpdateRequest: type: object properties: api_url: type: string model_id: type: string api_key: type: string enabled: type: boolean system_prompt: type: string AiChatRequest: type: object required: [message] properties: message: type: string player_name: type: string server_id: type: string paths: /health: get: summary: 健康检查 description: 获取服务器状态和统计信息 security: [] responses: '200': description: 服务器正常 content: application/json: schema: type: object properties: status: type: string timestamp: type: string active_ws: type: integer keys_total: type: integer admin_active: type: integer server_active: type: integer regular_active: type: integer /manage/keys: get: summary: 获取所有 API Key description: 获取所有 API Key 列表 (仅 Admin) security: - bearerAuth: [] responses: '200': description: 成功 content: application/json: schema: type: array items: $ref: '#/components/schemas/ApiKey' '403': description: 权限不足 post: summary: 创建 API Key description: 创建新的 Admin 或 Regular Key (创建 Regular Key 会自动附带一个 Server Key) security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateKeyRequest' responses: '201': description: 创建成功 content: application/json: schema: oneOf: - $ref: '#/components/schemas/ApiKeyWithSecret' - type: object properties: regularKey: $ref: '#/components/schemas/ApiKeyWithSecret' serverKey: $ref: '#/components/schemas/ApiKeyWithSecret' /manage/keys/{key_id}: get: summary: 获取 API Key 详情 security: - bearerAuth: [] parameters: - in: path name: key_id schema: type: string required: true responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/ApiKey' '404': description: 未找到 delete: summary: 删除 API Key description: 仅 Admin 可操作,不能删除自己 security: - bearerAuth: [] parameters: - in: path name: key_id schema: type: string required: true responses: '204': description: 删除成功 '400': description: 无法删除(如试图删除自己) /manage/keys/{key_id}/activate: patch: summary: 激活 API Key description: Admin 可激活任意 Key,Regular 仅可激活关联的 Server Key security: - bearerAuth: [] parameters: - in: path name: key_id schema: type: string required: true responses: '200': description: 成功 content: application/json: schema: type: object properties: message: type: string /manage/keys/{key_id}/deactivate: patch: summary: 停用 API Key description: Admin 可停用任意 Key,Regular 仅可停用关联的 Server Key security: - bearerAuth: [] parameters: - in: path name: key_id schema: type: string required: true responses: '200': description: 成功 content: application/json: schema: type: object properties: message: type: string /manage/keys/server-keys: get: summary: 获取 Server Key 列表 description: Admin 获取所有 Server Key,Regular 获取关联的 Server Key security: - bearerAuth: [] responses: '200': description: 成功 content: application/json: schema: type: array items: $ref: '#/components/schemas/ApiKey' post: summary: 创建 Server Key description: 为指定的 Regular Key 创建新的 Server Key (仅 Admin) security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateServerKeyRequest' responses: '201': description: 创建成功 content: application/json: schema: $ref: '#/components/schemas/ApiKeyWithSecret' '400': description: 参数错误 '404': description: Regular Key 不存在 /api/events: post: summary: 发送事件 description: 发送 Minecraft 事件并广播给所有 WebSocket 连接 security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Event' responses: '200': description: 成功广播 /api/server/info: get: summary: 获取服务器信息 security: - bearerAuth: [] parameters: - in: query name: server_id schema: type: string description: 仅 Admin 需要 responses: '200': description: 成功 content: application/json: schema: type: object properties: server_id: type: string status: type: string online_players: type: integer /api/server/command: post: summary: 发送服务器命令 security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CommandRequest' responses: '200': description: 命令发送成功 '403': description: 禁止的命令 /api/ai/config: get: summary: 获取 AI 配置 (Admin) security: - bearerAuth: [] responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/AiConfig' post: summary: 创建 AI 配置 (Admin) security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AiConfigUpdateRequest' responses: '201': description: 创建成功 patch: summary: 更新 AI 配置 (Admin) security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AiConfigUpdateRequest' responses: '200': description: 更新成功 delete: summary: 删除 AI 配置 (Admin) security: - bearerAuth: [] responses: '204': description: 删除成功 /api/ai/config/test: post: summary: 测试 AI 连接 (Admin) security: - bearerAuth: [] responses: '200': description: 连接成功 content: application/json: schema: type: object properties: success: type: boolean message: type: string /api/ai/chat: post: summary: AI 聊天 description: 发送消息给 AI 并获取回复 security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiChatRequest' responses: '200': description: 成功 content: application/json: schema: type: object properties: success: type: boolean reply: type: string model: type: string