#!/usr/bin/env tsx /** * 简化环境变量系统演示 * 展示如何使用新的 SimpleEnv 和 Config 系统 */ import { SimpleEnv, EnvKeys, Config, SmartAccountDiscovery } from '../src/config/simpleEnv.js' async function simpleEnvDemo() { console.log('🌟 简化环境变量系统演示') console.log('='.repeat(50)) try { // 1. 基础环境变量读取 console.log('\n📋 第一步: 基础配置读取...') console.log(`环境: ${Config.nodeEnv()} ${Config.isDev() ? '(开发)' : '(生产)'}`) console.log(`日志级别: ${Config.logLevel()}`) // 2. 交易所配置读取 console.log('\n🏦 第二步: 交易所配置读取...') // Aster 配置 console.log('🎯 Aster DEX:') console.log(` WebSocket: ${Config.aster.wsUrl} (固定)`) console.log(` HTTP Base: ${Config.aster.httpBase} (固定)`) console.log(` 订阅交易对: ${Config.aster.subscribeSymbols.join(', ')} (固定)`) console.log(` 用户地址: ${Config.aster.orderUser() ? '已设置 ✅' : '未设置 ❌'}`) console.log(` API密钥: ${Config.aster.apiKey() ? '已设置 ✅' : '未设置 ❌'}`) // Pacifica 配置 console.log('\n🌊 Pacifica DEX:') console.log(` Base URL: ${Config.pacifica.baseUrl} (固定)`) console.log(` WebSocket: ${Config.pacifica.wsUrl} (固定)`) console.log(` 交易对: ${Config.pacifica.symbol} (固定)`) console.log(` 测试订单: ${Config.pacifica.enableTestOrder() ? '启用' : '禁用'}`) console.log(` 测试数量: ${Config.pacifica.testQty()}`) console.log(` 账户: ${Config.pacifica.account() ? '已设置 ✅' : '未设置 ❌'}`) // 3. 智能账户发现 console.log('\n🔍 第三步: 智能账户发现...') const discoveredAccounts = SmartAccountDiscovery.discoverAll() console.log(`📊 发现结果:`) console.log(` Pacifica: ${discoveredAccounts.pacifica.length} 个账户`) console.log(` Aster: ${discoveredAccounts.aster.length} 个账户`) console.log(` Binance: ${discoveredAccounts.binance.length} 个账户`) // 显示 Pacifica 账户详情 if (discoveredAccounts.pacifica.length > 0) { console.log('\n🌊 Pacifica 账户详情:') discoveredAccounts.pacifica.forEach((account, index) => { console.log(` ${index + 1}. ${account.name}`) console.log( ` 账户: ${account.account.substring(0, 8)}...${account.account.substring(account.account.length - 4)}`, ) console.log( ` 私钥: ${account.privateKey.substring(0, 8)}...${account.privateKey.substring( account.privateKey.length - 4, )}`, ) }) } // 显示 Aster 账户详情 if (discoveredAccounts.aster.length > 0) { console.log('\n🎯 Aster 账户详情:') discoveredAccounts.aster.forEach((account, index) => { console.log(` ${index + 1}. ${account.name}`) console.log(` 用户: ${account.user.substring(0, 8)}...${account.user.substring(account.user.length - 4)}`) if (account.signer) { console.log( ` 签名者: ${account.signer.substring(0, 8)}...${account.signer.substring(account.signer.length - 4)}`, ) } console.log( ` 私钥: ${account.privateKey.substring(0, 8)}...${account.privateKey.substring( account.privateKey.length - 4, )}`, ) }) } // 4. 高级环境变量操作 console.log('\n🔧 第四步: 高级环境变量操作...') // 布尔值读取 const testOrderEnabled = SimpleEnv.bool('PACIFICA_ENABLE_TEST_ORDER') console.log(`测试订单启用: ${testOrderEnabled}`) // 数组读取 const symbols = SimpleEnv.array('ASTER_SUBSCRIBE_SYMBOLS') console.log(`订阅交易对数组: [${symbols.join(', ')}]`) // 数字读取 const testQty = SimpleEnv.number('PACIFICA_TEST_QTY', 0.001) console.log(`测试数量: ${testQty}`) // 带前缀的环境变量读取 const asterVars = SimpleEnv.getPrefix('ASTER_') console.log(`\nASTER_ 前缀变量数量: ${Object.keys(asterVars).length}`) // 5. 配置验证 console.log('\n✅ 第五步: 配置验证...') const validation = validateConfiguration() if (validation.isValid) { console.log('🟢 配置验证通过') } else { console.log('🔴 配置验证失败:') validation.errors.forEach(error => console.log(` ❌ ${error}`)) } if (validation.warnings.length > 0) { console.log('⚠️ 配置警告:') validation.warnings.forEach(warning => console.log(` ⚠️ ${warning}`)) } // 6. 完整配置导出 if (process.argv.includes('--show-all')) { console.log('\n📄 完整配置:') console.log(JSON.stringify(Config.getAll(), null, 2)) } console.log('\n🎉 简化环境变量系统演示完成!') console.log('\n💡 主要优势:') console.log(' 🔹 统一的配置访问接口') console.log(' 🔹 自动类型转换 (布尔、数字、数组、JSON)') console.log(' 🔹 智能账户自动发现') console.log(' 🔹 缓存机制提升性能') console.log(' 🔹 预定义键避免字符串硬编码') console.log(' 🔹 简洁的 API 设计') } catch (error) { console.error('❌ 演示失败:', error) } } /** * 配置验证函数 */ function validateConfiguration(): { isValid: boolean errors: string[] warnings: string[] } { const result = { isValid: true, errors: [] as string[], warnings: [] as string[], } // 检查基础配置 if (!Config.nodeEnv()) { result.errors.push('NODE_ENV 未设置') } // 检查 Aster 配置 if (!Config.aster.orderUser()) { result.warnings.push('Aster 用户地址未设置') } if (!Config.aster.apiKey()) { result.warnings.push('Aster API 密钥未设置') } // 检查 Pacifica 配置 if (!Config.pacifica.account()) { result.warnings.push('Pacifica 账户未设置') } if (!Config.pacifica.accountPrivateKey()) { result.warnings.push('Pacifica 账户私钥未设置') } // 检查发现的账户 const discovered = SmartAccountDiscovery.discoverAll() const totalAccounts = discovered.pacifica.length + discovered.aster.length + discovered.binance.length if (totalAccounts === 0) { result.warnings.push('没有发现任何可用账户') } result.isValid = result.errors.length === 0 return result } /** * 显示使用示例 */ function showUsageExamples() { console.log('\n💡 简化环境变量 API 使用示例:') console.log(` // 1. 基础用法 import { SimpleEnv, Config } from '../src/config/simpleEnv' // 获取字符串 const nodeEnv = SimpleEnv.get('NODE_ENV', 'development') // 获取必需值 (不存在则抛错) const requiredKey = SimpleEnv.require('REQUIRED_KEY') // 获取布尔值 const isEnabled = SimpleEnv.bool('FEATURE_ENABLED', false) // 获取数字 const port = SimpleEnv.number('PORT', 3000) // 获取数组 const symbols = SimpleEnv.array('SYMBOLS', ['BTC', 'ETH']) // 2. 使用预定义配置 console.log('环境:', Config.nodeEnv()) console.log('是否开发:', Config.isDev()) console.log('Aster URL:', Config.aster.wsUrl()) console.log('Pacifica URL:', Config.pacifica.baseUrl()) // 3. 智能账户发现 import { SmartAccountDiscovery } from '../src/config/simpleEnv' const accounts = SmartAccountDiscovery.discoverAll() console.log('发现的账户:', accounts) `) } // 运行演示 if (import.meta.url === `file://${process.argv[1]}`) { if (process.argv.includes('--help') || process.argv.includes('-h')) { showUsageExamples() } else { simpleEnvDemo() } }