UNPKG

@bramato/openrouter-mock-generator

Version:

AI-powered mock data generator using OpenRouter API with JSON mode support

225 lines (215 loc) 8.28 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv/config"); const fs_1 = require("fs"); const path_1 = require("path"); const digitalocean_spaces_1 = require("../services/digitalocean-spaces"); class SpacesManagerCLI { constructor() { this.config = {}; } async run() { try { const command = process.argv[2]; if (!command) { this.showHelp(); return; } this.loadConfiguration(); if (!this.hasValidConfig()) { console.error('❌ DigitalOcean Spaces configuration not found. Run "ai-init" first.'); process.exit(1); } this.initializeSpaces(); switch (command) { case 'list': case 'ls': await this.listSpaces(); break; case 'create': await this.createSpace(); break; case 'info': await this.showSpaceInfo(); break; case 'test': await this.testConnection(); break; case 'regions': this.showRegions(); break; default: console.error(`❌ Unknown command: ${command}`); this.showHelp(); process.exit(1); } } catch (error) { console.error('❌ Command failed:', error instanceof Error ? error.message : 'Unknown error'); process.exit(1); } } loadConfiguration() { try { const envPath = (0, path_1.join)(process.cwd(), '.env'); const envContent = (0, fs_1.readFileSync)(envPath, 'utf8'); envContent.split('\n').forEach(line => { const [key, value] = line.split('='); if (key && value) { this.config[key.trim()] = value.trim(); } }); } catch (error) { console.error('❌ Could not load .env file. Run "ai-init" first.'); process.exit(1); } } hasValidConfig() { return !!(this.config.DO_SPACES_ACCESS_KEY && this.config.DO_SPACES_SECRET_KEY && this.config.DO_SPACES_REGION); } initializeSpaces() { this.doSpaces = new digitalocean_spaces_1.DigitalOceanSpaces({ accessKeyId: this.config.DO_SPACES_ACCESS_KEY, secretAccessKey: this.config.DO_SPACES_SECRET_KEY, region: this.config.DO_SPACES_REGION, spaceName: this.config.DO_SPACES_NAME, }); } async listSpaces() { if (!this.doSpaces) return; console.log('🔄 Fetching Spaces list...'); try { const spaces = await this.doSpaces.listSpaces(); if (spaces.length === 0) { console.log('📭 No Spaces found in region:', this.config.DO_SPACES_REGION); return; } console.log(`\n📁 Found ${spaces.length} Space(s) in region ${this.config.DO_SPACES_REGION}:\n`); spaces.forEach((space, index) => { console.log(`${index + 1}. ${space.name}`); console.log(` 📍 Region: ${space.region}`); console.log(` 🌐 URL: ${space.endpoint}`); console.log(` 📡 CDN: ${space.cdnEndpoint}`); if (space.createdAt) { console.log(` 📅 Created: ${new Date(space.createdAt).toLocaleDateString()}`); } console.log(''); }); } catch (error) { console.error('❌ Failed to list Spaces:', error); } } async createSpace() { if (!this.doSpaces) return; const spaceName = process.argv[3]; const region = process.argv[4] || this.config.DO_SPACES_REGION; if (!spaceName) { console.error('❌ Space name is required'); console.log('Usage: ai-spaces-manager create <space-name> [region]'); process.exit(1); } // Validate space name if (!/^[a-z0-9-]+$/.test(spaceName)) { console.error('❌ Space name must contain only lowercase letters, numbers, and hyphens'); process.exit(1); } console.log(`🔄 Creating Space "${spaceName}" in region ${region}...`); try { const space = await this.doSpaces.createSpace(spaceName, region, true); console.log(`✅ Space created successfully!`); console.log(`📍 Name: ${space.name}`); console.log(`📍 Region: ${space.region}`); console.log(`🌐 URL: ${space.endpoint}`); console.log(`📡 CDN: ${space.cdnEndpoint}`); } catch (error) { console.error('❌ Failed to create Space:', error); } } async showSpaceInfo() { const spaceName = process.argv[3] || this.config.DO_SPACES_NAME; if (!spaceName) { console.error('❌ Space name is required'); console.log('Usage: ai-spaces-manager info <space-name>'); console.log('Or configure default space with ai-init'); process.exit(1); } console.log(`📋 Space Information: ${spaceName}\n`); console.log(`📍 Region: ${this.config.DO_SPACES_REGION}`); console.log(`🌐 Endpoint: https://${spaceName}.${this.config.DO_SPACES_REGION}.digitaloceanspaces.com`); console.log(`📡 CDN Endpoint: https://${spaceName}.${this.config.DO_SPACES_REGION}.cdn.digitaloceanspaces.com`); console.log(`🔑 Access Key: ${this.config.DO_SPACES_ACCESS_KEY.substring(0, 8)}...`); // Test if space exists and is accessible await this.testConnection(); } async testConnection() { if (!this.doSpaces) return; console.log('🔄 Testing connection to DigitalOcean Spaces...'); try { const isConnected = await this.doSpaces.testConnection(); if (isConnected) { console.log('✅ Connection successful!'); console.log('📡 Spaces API is accessible and credentials are valid'); } else { console.log('❌ Connection failed'); console.log('Please check your credentials and region configuration'); } } catch (error) { console.error('❌ Connection test failed:', error); } } showRegions() { const regions = digitalocean_spaces_1.DigitalOceanSpaces.getAvailableRegions(); console.log('🌍 Available DigitalOcean Spaces Regions:\n'); regions.forEach((region, index) => { console.log(`${index + 1}. ${region.code} - ${region.name}`); console.log(` 📍 ${region.location}`); console.log(''); }); console.log(`Current configured region: ${this.config.DO_SPACES_REGION || 'Not configured'}`); } showHelp() { console.log(` 🌊 DigitalOcean Spaces Manager USAGE: ai-spaces-manager <command> [options] COMMANDS: list, ls List all Spaces in configured region create <name> [region] Create a new Space info [space-name] Show Space information test Test connection to Spaces regions Show available regions EXAMPLES: # List all Spaces ai-spaces-manager list # Create a new Space ai-spaces-manager create my-images-space # Create Space in specific region ai-spaces-manager create my-space ams3 # Show info about configured Space ai-spaces-manager info # Show info about specific Space ai-spaces-manager info my-space-name # Test connection ai-spaces-manager test # Show available regions ai-spaces-manager regions SETUP: Run 'ai-init' first to configure your DigitalOcean Spaces credentials. `); } } // Run CLI const cli = new SpacesManagerCLI(); cli.run(); //# sourceMappingURL=spaces-manager.js.map