#!/usr/bin/env tsx /** * 优雅账户注入示例 * 演示新的 AccountRegistry 智能账户发现和注册系统 */ import { AccountRegistry } from '../src/accounts/AccountRegistry.js' import { AutoDiscoveryProvider } from '../src/accounts/providers/AutoDiscoveryProvider.js' async function elegantAccountInjectionDemo() { console.log('✨ 优雅账户注入系统演示') console.log('='.repeat(60)) try { // 1. 创建账户注册表 console.log('\n🏗️ 第一步: 初始化账户注册表...') const registry = new AccountRegistry({ discovery: { strategy: 'auto', providers: ['auto-discovery', 'env', 'config'], autoRefresh: true, refreshInterval: 300000, // 5分钟 }, validation: { strictMode: false, // 宽松模式,允许部分账户失败 requiredFields: ['exchange', 'credentials'], timeout: 10000, }, lifecycle: { retryAttempts: 3, retryDelay: 2000, healthCheckInterval: 60000, }, }) // 2. 注册智能发现提供者 console.log('📡 注册智能发现提供者...') registry.registerProvider(new AutoDiscoveryProvider()) // 3. 监听注册表事件 setupRegistryEventListeners(registry) // 4. 自动发现所有可用账户 console.log('\n🔍 第二步: 智能发现可用账户...') const discoveredAccounts = await registry.discover() console.log(`✅ 发现 ${discoveredAccounts.length} 个账户:`) discoveredAccounts.forEach((account, index) => { const status = account.config.enabled ? '✅' : '❌' const source = account.metadata.source const tags = account.metadata.tags.join(', ') console.log(` ${index + 1}. ${status} ${account.name}`) console.log(` ID: ${account.id}`) console.log(` 交易所: ${account.exchange}`) console.log(` 来源: ${source}`) console.log(` 标签: ${tags}`) console.log(` 优先级: ${account.config.priority}`) console.log( ` 限额: $${account.config.limits.maxPosition.toLocaleString()} / $${account.config.limits.maxDailyVolume.toLocaleString()}`, ) console.log() }) // 5. 批量注册所有账户 console.log('🚀 第三步: 批量注册账户实例...') const { successful, failed } = await registry.registerAll() console.log(`\n📊 注册结果:`) console.log(` ✅ 成功: ${successful.length} 个`) console.log(` ❌ 失败: ${failed.length} 个`) // 显示成功注册的账户 if (successful.length > 0) { console.log('\n✅ 成功注册的账户:') successful.forEach((instance, index) => { console.log(` ${index + 1}. ${instance.descriptor.name}`) console.log(` 状态: ${instance.status}`) console.log(` 交易所: ${instance.descriptor.exchange}`) console.log(` 最后健康检查: ${instance.lastHealthCheck?.toLocaleTimeString() || 'N/A'}`) console.log() }) } // 显示失败的账户 if (failed.length > 0) { console.log('\n❌ 注册失败的账户:') failed.forEach((failure, index) => { console.log(` ${index + 1}. ${failure.descriptor.name}`) console.log(` 原因: ${failure.error.message}`) console.log() }) } // 6. 按交易所分组显示 console.log('🏦 第四步: 按交易所分组查看...') const exchanges = ['pacifica', 'aster', 'binance'] for (const exchange of exchanges) { const instances = registry.getInstancesByExchange(exchange) if (instances.length > 0) { console.log(`\n📈 ${exchange.toUpperCase()} (${instances.length} 个账户):`) instances.forEach((instance, index) => { const status = instance.status === 'active' ? '🟢' : '🔴' console.log(` ${status} ${instance.descriptor.name} (优先级: ${instance.descriptor.config.priority})`) }) } } // 7. 执行健康检查 console.log('\n🏥 第五步: 执行健康检查...') const healthReport = await registry.performHealthCheck() console.log(`📊 健康检查报告:`) console.log(` 总账户数: ${healthReport.total}`) console.log(` 健康账户: ${healthReport.healthy}`) console.log(` 不健康账户: ${healthReport.unhealthy}`) console.log(` 健康率: ${((healthReport.healthy / healthReport.total) * 100).toFixed(1)}%`) if (healthReport.unhealthy > 0) { console.log('\n⚠️ 不健康的账户:') healthReport.details .filter(detail => detail.status === 'unhealthy') .forEach(detail => { const instance = registry.getInstance(detail.id) console.log(` 🔴 ${instance?.descriptor.name}: ${instance?.lastError || 'Unknown error'}`) }) } // 8. 演示动态管理 console.log('\n🔄 第六步: 动态管理演示...') // 展示可用的管理操作 console.log('可用的管理操作:') console.log(' • registry.getActiveInstances() - 获取活跃账户') console.log(' • registry.getInstancesByExchange() - 按交易所获取') console.log(' • registry.getInstance(id) - 获取特定账户') console.log(' • registry.unregister(id) - 移除账户') console.log(' • registry.performHealthCheck() - 健康检查') // 获取活跃实例示例 const activeInstances = registry.getActiveInstances() console.log(`\n🟢 当前活跃账户: ${activeInstances.length} 个`) // 展示智能特性 console.log('\n✨ 智能特性展示:') console.log(' ✅ 自动发现环境变量中的账户配置') console.log(' ✅ 支持多账户命名约定 (EXCHANGE_FIELD_1, EXCHANGE_FIELD_2)') console.log(' ✅ 支持角色约定 (MAIN, HEDGE, BACKUP, TEST)') console.log(' ✅ 自动凭证验证和连接测试') console.log(' ✅ 优雅的错误处理和降级') console.log(' ✅ 实时健康监控') console.log(' ✅ 事件驱动的状态通知') console.log('\n🎉 优雅账户注入演示完成!') // 清理资源 console.log('\n🧹 清理资源...') const activeIds = activeInstances.map(i => i.descriptor.id) for (const id of activeIds) { await registry.unregister(id) } console.log('✅ 资源清理完成') } catch (error) { console.error('❌ 演示失败:', error) } } /** * 设置注册表事件监听 */ function setupRegistryEventListeners(registry: AccountRegistry) { console.log('👂 设置事件监听器...') registry.on('accounts_discovered', data => { console.log(`🔍 ${data.provider} 发现 ${data.count} 个账户`) }) registry.on('discovery_error', data => { console.log(`⚠️ ${data.provider} 发现失败: ${data.error.message}`) }) registry.on('discovery_completed', data => { console.log(`📋 账户发现完成: 总计 ${data.total} 个`) Object.entries(data.byExchange).forEach(([exchange, count]) => { console.log(` ${exchange}: ${count} 个`) }) }) registry.on('account_validated', data => { console.log(`✅ 账户验证通过: ${data.descriptor.name}`) }) registry.on('account_validation_failed', data => { console.log(`❌ 账户验证失败: ${data.descriptor.name}`) }) registry.on('account_registered', data => { console.log(`🎯 账户注册成功: ${data.instance.descriptor.name}`) }) registry.on('account_registration_failed', data => { console.log(`💥 账户注册失败: ${data.descriptor.name} - ${data.error.message}`) }) registry.on('batch_registration_completed', data => { console.log(`📦 批量注册完成: ${data.successful}/${data.total} 成功`) }) registry.on('health_check_completed', data => { console.log(`🏥 健康检查完成: ${data.healthy}/${data.total} 健康`) }) registry.on('provider_registered', data => { console.log(`🔌 提供者注册: ${data.provider}`) }) registry.on('account_unregistered', data => { console.log(`🗑️ 账户已移除: ${data.descriptor.name}`) }) } /** * 显示环境变量设置示例 */ function showEnvironmentExamples() { console.log('\n💡 环境变量设置示例:') console.log(` # 1. 单账户模式 export PACIFICA_PRIVATE_KEY="your_private_key" export PACIFICA_ACCOUNT="your_account_id" # 2. 多账户模式 (支持 1-10) export PACIFICA_PRIVATE_KEY_1="main_account_key" export PACIFICA_ACCOUNT_1="main_account_id" export PACIFICA_PRIVATE_KEY_2="hedge_account_key" export PACIFICA_ACCOUNT_2="hedge_account_id" # 3. 角色约定模式 export PACIFICA_PRIVATE_KEY_MAIN="main_account_key" export PACIFICA_ACCOUNT_MAIN="main_account_id" export PACIFICA_PRIVATE_KEY_HEDGE="hedge_account_key" export PACIFICA_ACCOUNT_HEDGE="hedge_account_id" export PACIFICA_PRIVATE_KEY_BACKUP="backup_account_key" export PACIFICA_ACCOUNT_BACKUP="backup_account_id" # 4. 配置选项 export PACIFICA_MAIN_ENABLED=true export PACIFICA_MAIN_TRADING=true export PACIFICA_MAIN_HEDGING=true export PACIFICA_MAX_POSITION_MAIN=20000 export PACIFICA_MAX_DAILY_VOLUME_MAIN=200000 `) } // 运行演示 if (import.meta.url === `file://${process.argv[1]}`) { if (process.argv.includes('--help') || process.argv.includes('-h')) { showEnvironmentExamples() } else { elegantAccountInjectionDemo() } }