UNPKG

route-claudecode

Version:

Advanced routing and transformation system for Claude Code outputs to multiple AI providers

296 lines 11.6 kB
"use strict"; /** * Modular Router Server * * 按照细菌式编程原则重构的服务器主入口 * - 小巧:每个模块不超过500行 * - 模块化:功能组织成可插拔的独立单元 * - 自包含:每个模块都可以独立使用和测试 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModularRouterServer = void 0; exports.createModularRouterServer = createModularRouterServer; const fastify_1 = __importDefault(require("fastify")); const unified_processor_1 = require("@/input/unified-processor"); const routing_1 = require("@/routing"); const anthropic_1 = require("@/output/anthropic"); const logging_1 = require("@/logging"); const provider_expander_1 = require("@/routing/provider-expander"); // Patch system removed - now using unified compatibility preprocessor // // import { ResponsePipeline } from '@/pipeline/response-pipeline'; const manager_1 = require("@/transformers/manager"); const unified_patch_preprocessor_1 = require("@/preprocessing/unified-patch-preprocessor"); // 导入模块化组件 const provider_manager_1 = require("./core/provider-manager"); const health_handler_1 = require("./handlers/health-handler"); const admin_handler_1 = require("./handlers/admin-handler"); const messages_handler_1 = require("./handlers/messages-handler"); const streaming_handler_1 = require("./handlers/streaming-handler"); const route_setup_1 = require("./core/route-setup"); /** * 模块化路由服务器 * * 采用依赖注入和组合模式,将复杂的服务器逻辑分解为小的、 * 可测试的模块 */ class ModularRouterServer { fastify; config; // 核心组件 logger; requestTracker; errorTracker; // 业务组件 inputProcessor; routingEngine; outputProcessor; // private patchManager: removed - using unified compatibility preprocessor // // private responsePipeline!: ResponsePipeline; unifiedPreprocessor; // 模块化组件 providerManager; healthHandler; adminHandler; messagesHandler; streamingHandler; routeSetup; constructor(config, serverType = 'modular') { this.config = config; this.fastify = (0, fastify_1.default)({ logger: false, bodyLimit: 10 * 1024 * 1024 // 10MB }); this.initializeCore(); this.initializeBusinessComponents(); this.initializeModularComponents(); this.logger.info('Modular Router Server initialized', { type: serverType, port: config.server.port, providers: Object.keys(config.providers || {}).length }); } /** * 初始化核心组件 */ initializeCore() { // 设置日志系统 (0, logging_1.setDefaultPort)(this.config.server.port); this.logger = (0, logging_1.getLogger)(this.config.server.port); this.requestTracker = (0, logging_1.createRequestTracker)(this.config.server.port); this.errorTracker = (0, logging_1.createErrorTracker)(this.config.server.port); this.logger.info('Core components initialized'); } /** * 初始化业务组件 */ initializeBusinessComponents() { // 输入/输出处理器 this.inputProcessor = new unified_processor_1.UnifiedInputProcessor(); this.outputProcessor = new anthropic_1.AnthropicOutputProcessor(this.config.server.port); // 路由引擎 this.routingEngine = new routing_1.RoutingEngine(this.config.routing || {}); // 补丁和流水线系统 (补丁系统已移除) // this.patchManager = removed - using unified compatibility preprocessor // // this.responsePipeline = new ResponsePipeline(removed, transformationManager, this.config.server.port); this.unifiedPreprocessor = (0, unified_patch_preprocessor_1.getUnifiedPatchPreprocessor)(this.config.server.port); // 初始化变换管理器 if ('initialize' in manager_1.transformationManager && typeof manager_1.transformationManager.initialize === 'function') { manager_1.transformationManager.initialize(this.config.server.port); } this.logger.info('Business components initialized'); } /** * 初始化模块化组件 */ initializeModularComponents() { // Provider管理器 this.providerManager = (0, provider_manager_1.createProviderManager)({ config: this.config, logger: this.logger }); this.providerManager.initializeProviders(); // 处理器模块 this.healthHandler = (0, health_handler_1.createHealthHandler)({ providers: this.providerManager.getAllProviders(), logger: this.logger, errorTracker: this.errorTracker, requestTracker: this.requestTracker }); this.adminHandler = (0, admin_handler_1.createAdminHandler)({ providers: this.providerManager.getAllProviders(), logger: this.logger, errorTracker: this.errorTracker, requestTracker: this.requestTracker, config: this.config }); this.streamingHandler = (0, streaming_handler_1.createStreamingHandler)({ logger: this.logger, // responsePipeline: this.responsePipeline, unifiedPreprocessor: this.unifiedPreprocessor, config: this.config }); this.messagesHandler = (0, messages_handler_1.createMessagesHandler)({ inputProcessor: this.inputProcessor, routingEngine: this.routingEngine, outputProcessor: this.outputProcessor, streamingHandler: this.streamingHandler, providers: this.providerManager.getAllProviders(), logger: this.logger, config: this.config }); // 路由设置 this.routeSetup = (0, route_setup_1.createRouteSetup)({ fastify: this.fastify, healthHandler: this.healthHandler, adminHandler: this.adminHandler, messagesHandler: this.messagesHandler, logger: this.logger, config: this.config }); this.logger.info('Modular components initialized'); } /** * 设置路由和中间件 */ setup() { // 设置路由 this.routeSetup.setupRoutes(); // 设置钩子 this.routeSetup.setupHooks(); // 处理Provider扩展 this.handleProviderExpansion(); this.logger.info('Server setup completed'); } /** * 处理Provider扩展 */ async handleProviderExpansion() { try { if (this.config.providers && Object.keys(this.config.providers).length > 0) { this.logger.info('Processing provider expansion...'); const expansion = provider_expander_1.ProviderExpander.expandProviders(this.config.providers); this.logger.info('Provider expansion completed', { originalCount: Object.keys(this.config.providers).length, expandedCount: expansion.expandedProviders.size, originalProviders: expansion.originalProviders.size }); } } catch (error) { this.logger.warn('Provider expansion failed, continuing with original config', { error: error instanceof Error ? error.message : String(error) }); } } /** * 启动服务器 */ async start() { try { this.setup(); await this.fastify.listen({ port: this.config.server.port, host: this.config.server.host || '0.0.0.0' }); const healthyProviders = await this.providerManager.getHealthyProviders(); console.log('\n🚀 Modular Router Server Started'); console.log('================================'); console.log(`📡 Server URL: http://${this.config.server.host || 'localhost'}:${this.config.server.port}`); console.log(`🔧 Total Providers: ${this.providerManager.getProviderCount()}`); console.log(`✅ Healthy Providers: ${healthyProviders.length}`); console.log(`📋 Available Endpoints:`); console.log(` • Health: GET /health`); console.log(` • Status: GET /status`); console.log(` • Messages: POST /v1/messages`); console.log(` • OpenAI Compat: POST /v1/chat/completions`); console.log(` • Admin: GET /api/stats`); this.logger.info('Modular Router Server started successfully', { port: this.config.server.port, host: this.config.server.host, totalProviders: this.providerManager.getProviderCount(), healthyProviders: healthyProviders.length, providers: healthyProviders }); } catch (error) { this.logger.error('Failed to start server', { error: error instanceof Error ? error.message : String(error), port: this.config.server.port }); throw error; } } /** * 停止服务器 */ async stop() { try { this.logger.info('Shutting down Modular Router Server...'); // 关闭Provider await this.providerManager.shutdown(); // 清理会话管理器(没有shutdown方法) // sessionManager is a singleton and will persist // 关闭服务器 await this.fastify.close(); console.log('\n📴 Modular Router Server Stopped'); this.logger.info('Modular Router Server stopped successfully'); } catch (error) { this.logger.error('Error during server shutdown', { error: error instanceof Error ? error.message : String(error) }); throw error; } } /** * 获取服务器统计信息 */ async getStats() { const healthyProviders = await this.providerManager.getHealthyProviders(); const providerStats = await this.providerManager.getProviderStats(); return { timestamp: new Date().toISOString(), server: { port: this.config.server.port, uptime: process.uptime(), memory: process.memoryUsage() }, providers: { total: this.providerManager.getProviderCount(), healthy: healthyProviders.length, stats: providerStats }, system: { nodeVersion: process.version, platform: process.platform } }; } /** * 获取Provider管理器(用于测试) */ getProviderManager() { return this.providerManager; } /** * 获取Fastify实例(用于测试) */ getFastify() { return this.fastify; } } exports.ModularRouterServer = ModularRouterServer; /** * 创建模块化服务器实例的工厂函数 */ function createModularRouterServer(config, serverType) { return new ModularRouterServer(config, serverType); } /** * 默认导出 */ exports.default = ModularRouterServer; //# sourceMappingURL=modular-server.js.map