Files
net/test_directus_connection.js
cawcenter fd9f428dcd Phase 1: Foundation & Stability Infrastructure
 BullMQ job queue system installed and configured
 Zod validation schemas for all collections
 Spintax validator with integrity checks
 Work log helper for centralized logging
 Transaction wrapper for safe database operations
 Batch operation utilities with rate limiting
 Circuit breaker for WordPress/Directus resilience
 Dry-run mode for preview generation
 Version management system
 Environment configuration

This establishes the bulletproof infrastructure for Spark Alpha.
2025-12-13 12:12:17 -05:00

174 lines
6.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* Directus Admin Connection Test
* Tests connection to Spark Directus API and verifies admin access
*/
const DIRECTUS_URL = 'https://spark.jumpstartscaling.com';
const ADMIN_TOKEN = 'SufWLAbsqmbbqF_gg5I70ng8wE1zXt-a';
const ADMIN_EMAIL = 'somescreenname@gmail.com';
async function testDirectusConnection() {
console.log('🔌 Testing Directus Connection...\n');
console.log(`📍 URL: ${DIRECTUS_URL}\n`);
try {
// Test 1: Server status
console.log('1⃣ Testing server availability...');
const serverResponse = await fetch(`${DIRECTUS_URL}/server/info`);
if (!serverResponse.ok) {
throw new Error(`Server not responding: ${serverResponse.status}`);
}
const serverInfo = await serverResponse.json();
console.log(' ✅ Server is online');
console.log(` 📦 Directus Version: ${serverInfo.data?.project?.project_name || 'N/A'}\n`);
// Test 2: Admin authentication
console.log('2⃣ Testing admin token authentication...');
const userResponse = await fetch(`${DIRECTUS_URL}/users/me`, {
headers: {
'Authorization': `Bearer ${ADMIN_TOKEN}`,
'Content-Type': 'application/json'
}
});
if (!userResponse.ok) {
throw new Error(`Authentication failed: ${userResponse.status}`);
}
const userData = await userResponse.json();
console.log(' ✅ Admin authentication successful');
console.log(` 👤 User: ${userData.data.email}`);
console.log(` 🔑 User ID: ${userData.data.id}`);
console.log(` 👑 Role: ${userData.data.role || 'Admin'}\n`);
// Test 3: List collections
console.log('3⃣ Fetching collections...');
const collectionsResponse = await fetch(`${DIRECTUS_URL}/collections`, {
headers: {
'Authorization': `Bearer ${ADMIN_TOKEN}`,
'Content-Type': 'application/json'
}
});
if (!collectionsResponse.ok) {
throw new Error(`Failed to fetch collections: ${collectionsResponse.status}`);
}
const collectionsData = await collectionsResponse.json();
const collections = collectionsData.data || [];
// Filter out system collections for readability
const userCollections = collections.filter(c => !c.collection.startsWith('directus_'));
console.log(` ✅ Found ${userCollections.length} user collections:`);
userCollections.forEach(col => {
console.log(` - ${col.collection}`);
});
console.log('');
// Test 4: Check specific collections
console.log('4⃣ Checking critical collections...');
const criticalCollections = ['sites', 'posts', 'generated_articles', 'generation_jobs', 'avatars', 'work_log'];
const foundCollections = userCollections.map(c => c.collection);
criticalCollections.forEach(collectionName => {
if (foundCollections.includes(collectionName)) {
console.log(`${collectionName} - exists`);
} else {
console.log(` ⚠️ ${collectionName} - NOT FOUND`);
}
});
console.log('');
// Test 5: Count records in key collections
console.log('5⃣ Counting records in key collections...');
for (const collectionName of criticalCollections) {
if (foundCollections.includes(collectionName)) {
try {
const countResponse = await fetch(
`${DIRECTUS_URL}/items/${collectionName}?aggregate[count]=*`,
{
headers: {
'Authorization': `Bearer ${ADMIN_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
if (countResponse.ok) {
const countData = await countResponse.json();
const count = countData.data?.[0]?.count || 0;
console.log(` 📊 ${collectionName}: ${count} records`);
}
} catch (err) {
console.log(` ⚠️ ${collectionName}: Unable to count`);
}
}
}
console.log('');
// Test 6: Admin permissions test
console.log('6⃣ Testing admin write permissions...');
const testLogEntry = {
action: 'connection_test',
message: 'Admin connection test successful',
details: {
timestamp: new Date().toISOString(),
test_runner: 'test_directus_connection.js'
}
};
const writeResponse = await fetch(`${DIRECTUS_URL}/items/work_log`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${ADMIN_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(testLogEntry)
});
if (writeResponse.ok) {
const writeData = await writeResponse.json();
console.log(' ✅ Write permission confirmed');
console.log(` 📝 Created work_log entry ID: ${writeData.data.id}\n`);
} else {
console.log(' ⚠️ Write permission test failed\n');
}
// Final summary
console.log('═══════════════════════════════════════════');
console.log('🎉 CONNECTION TEST COMPLETE');
console.log('═══════════════════════════════════════════');
console.log('Status: ✅ ADMIN CONNECTION VERIFIED');
console.log(`Admin User: ${userData.data.email}`);
console.log(`Directus URL: ${DIRECTUS_URL}`);
console.log(`Collections: ${userCollections.length} available`);
console.log('Permissions: Read ✅ Write ✅');
console.log('═══════════════════════════════════════════\n');
return true;
} catch (error) {
console.error('❌ CONNECTION TEST FAILED\n');
console.error('Error:', error.message);
console.error('\nPlease verify:');
console.error(' 1. Directus server is running');
console.error(' 2. Admin token is correct');
console.error(' 3. Network connectivity to', DIRECTUS_URL);
console.error(' 4. CORS settings allow API access\n');
return false;
}
}
// Run the test
testDirectusConnection()
.then(success => {
process.exit(success ? 0 : 1);
})
.catch(err => {
console.error('Unexpected error:', err);
process.exit(1);
});