UNPKG

@agentdb/sdk

Version:

JavaScript SDK for AgentDB database service

196 lines (166 loc) 7.9 kB
/** * AgentDB SDK Template Management Example * * This example demonstrates how to use the template management features * of the AgentDB SDK, including creating, listing, updating, and deleting templates. */ import { DatabaseService, ValidationError, AuthenticationError, DatabaseError } from '../index.js'; // Configuration - replace with your actual values const BASE_URL = process.env.AGENTDB_BASE_URL || 'https://api.agentdb.dev'; const API_KEY = process.env.AGENTDB_API_KEY; const TOKEN = process.env.AGENTDB_TOKEN || 'your-uuid-token-here'; if (!API_KEY) { console.error('Please set AGENTDB_API_KEY environment variable'); process.exit(1); } async function runTemplateManagementExample() { console.log('=== AgentDB SDK Template Management Example ===\n'); try { // Initialize the database service const service = new DatabaseService(BASE_URL, API_KEY, true); // Enable debug mode console.log('1. Creating a new template...'); // Create a sample CRM template const templateName = 'example-crm-template'; const initializationSql = [ `CREATE TABLE customers ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, phone TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );`, `CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, customer_id INTEGER NOT NULL, amount DECIMAL(10,2) NOT NULL, status TEXT DEFAULT 'pending', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (customer_id) REFERENCES customers(id) );`, `CREATE INDEX idx_customers_email ON customers(email);`, `CREATE INDEX idx_orders_customer_id ON orders(customer_id);`, `INSERT INTO customers (name, email, phone) VALUES ('John Doe', 'john@example.com', '+1-555-0123'), ('Jane Smith', 'jane@example.com', '+1-555-0456');` ]; const description = 'Example CRM template with customers and orders tables, including sample data'; try { const createdTemplate = await service.createTemplate(templateName, initializationSql, description); console.log('✓ Template created successfully:', createdTemplate.templateName); } catch (error) { if (error.message.includes('already exists')) { console.log('✓ Template already exists, continuing with example...'); } else { throw error; } } console.log('\n2. Listing all templates...'); const templates = await service.listTemplates(); console.log(`✓ Found ${templates.length} templates:`); templates.forEach(template => { console.log(` - ${template.templateName}: ${template.description}`); }); console.log('\n3. Getting specific template details...'); const templateDetails = await service.getTemplate(templateName); console.log('✓ Template details:'); console.log(` Name: ${templateDetails.templateName}`); console.log(` Description: ${templateDetails.description}`); console.log(` SQL Scripts: ${templateDetails.initializationSql.length} scripts`); console.log(` Created: ${templateDetails.createdAt}`); console.log('\n4. Testing template with a database...'); // Create a connection to test the template const dbName = 'template-test-db'; const connection = service.connect(TOKEN, dbName, 'sqlite'); // Execute a query to create the database and apply the template console.log('Creating database with template...'); await connection.execute({ sql: 'SELECT 1', // Simple query to create the database templateName: templateName // This will apply the template }); console.log('\n5. Getting template info for the database...'); const templateInfo = await service.getTemplateInfo(templateName, TOKEN, dbName, 'sqlite'); console.log('✓ Template info:'); console.log(` Applied: ${templateInfo.isApplied}`); console.log(` Current Version: ${templateInfo.currentVersion}`); console.log(` Total Versions: ${templateInfo.totalVersions}`); console.log(` Schema: ${templateInfo.schema.length} tables/indexes`); console.log('\n6. Getting applied templates for the database...'); const appliedTemplates = await service.getAppliedTemplates(TOKEN, dbName, 'sqlite'); console.log('✓ Applied templates:'); appliedTemplates.appliedTemplates.forEach(template => { console.log(` - ${template.templateName} (version ${template.version}) applied at ${template.appliedAt}`); }); console.log('\n7. Testing natural language to SQL...'); const nlQuery = 'show me all customers with their order count'; const nlResult = await connection.naturalLanguageToSql(nlQuery, null, templateName); console.log('✓ Natural language conversion:'); console.log(` Query: "${nlQuery}"`); console.log(` Generated SQL: ${nlResult.sql}`); if (nlResult.results) { console.log(` Results: ${nlResult.results[0].rows.length} rows returned`); } console.log('\n8. Updating the template...'); const updatedSql = [ ...initializationSql, `ALTER TABLE customers ADD COLUMN address TEXT;`, `CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, price DECIMAL(10,2) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );` ]; const updatedDescription = 'Updated CRM template with address field and products table'; const updateResult = await service.updateTemplate(templateName, updatedSql, updatedDescription); console.log('✓ Template updated successfully'); console.log(` Previous version had ${updateResult.oldTemplate.initializationSql.length} SQL scripts`); console.log(` New version has ${updatedSql.length} SQL scripts`); console.log('\n9. Testing MCP slug creation...'); const mcpParams = { apiKey: 'example-key', token: TOKEN, dbName: dbName, templateName: templateName }; try { const slugResult = await service.createMcpSlug(mcpParams); console.log('✓ MCP slug created:'); console.log(` Slug: ${slugResult.slug}`); console.log(` Full URL: ${slugResult.fullUrl}`); // Test getting the slug back const slugInfo = await service.getMcpSlug(slugResult.slug); console.log('✓ Retrieved slug info:'); console.log(` Query params: ${Object.keys(slugInfo.queryParams).join(', ')}`); } catch (error) { console.log('⚠ MCP slug creation failed (may require authentication):', error.message); } console.log('\n10. Cleaning up - deleting test database...'); await service.deleteDatabase(TOKEN, dbName, 'sqlite'); console.log('✓ Test database deleted'); console.log('\n11. Cleaning up - deleting template...'); const deleteResult = await service.deleteTemplate(templateName); console.log('✓ Template deleted successfully'); console.log('\n=== Template Management Example Complete ==='); } catch (error) { console.error('\n❌ Error during template management example:'); if (error instanceof AuthenticationError) { console.error('Authentication failed. Please check your API key.'); } else if (error instanceof ValidationError) { console.error('Validation error:', error.message); } else if (error instanceof DatabaseError) { console.error('Database error:', error.message); } else { console.error('Unexpected error:', error.message); } // Log debug information if available if (error.response && error.response.debugLogs) { console.error('\nDebug logs:'); error.response.debugLogs.forEach(log => { console.error(`[${log.level}] ${log.timestamp}: ${log.message}`); }); } process.exit(1); } } // Run the example runTemplateManagementExample();