embedia
Version:
Zero-configuration AI chatbot integration CLI - direct file copy with embedded API keys
68 lines (55 loc) • 2.21 kB
JavaScript
const fetch = require('node-fetch');
const chalk = require('chalk');
/**
* Simple Server Communication
* Replaces complex binding contract system with basic file fetching
*/
class SimpleServerClient {
constructor(baseUrl = 'https://server-api-bay.vercel.app') {
this.baseUrl = baseUrl;
}
async fetchEmbediaFiles(token) {
console.log(chalk.cyan('📡 Fetching Embedia files from server...'));
try {
// Validate token format
if (!token || !token.startsWith('ac_')) {
throw new Error('Invalid token format. Token must start with "ac_"');
}
// GET request with token as query parameter
const response = await fetch(`${this.baseUrl}/api/autochat?token=${token}`, {
method: 'GET'
});
if (!response.ok) {
// Try to get the actual error message from the server
let errorMessage = `Server responded with ${response.status}: ${response.statusText}`;
try {
const errorData = await response.json();
if (errorData.error) {
errorMessage = `Server error: ${errorData.error}`;
}
} catch (e) {
// If we can't parse the error response, use the default message
}
throw new Error(errorMessage);
}
const data = await response.json();
// Handle server error responses
if (data.error) {
throw new Error(`Server error: ${data.error}`);
}
// Parse the expected response structure
if (!data.generatedCode || !data.generatedCode.fullProject) {
throw new Error('Invalid response format: missing generatedCode.fullProject');
}
const fileArray = data.generatedCode.fullProject;
console.log(chalk.green(`✅ Files retrieved successfully (${fileArray.length} files)`));
console.log(chalk.gray(` Retrieved at: ${data.retrievedAt || 'N/A'}`));
// Return raw fullProject array with {path, content} structure
return { fullProject: fileArray };
} catch (error) {
console.error(chalk.red('❌ Failed to fetch files from server:'), error.message);
throw error;
}
}
}
module.exports = { SimpleServerClient };