#!/usr/bin/env node
/**
* Health check script for Docker and monitoring systems
* Exit codes:
* 0 - Healthy
* 1 - Unhealthy
*/
import { createClient } from '@supabase/supabase-js';
import dotenv from 'dotenv';
// Load environment variables
dotenv.config();
async function checkHealth() {
const checks = {
environment: false,
database: false,
apis: false
};
try {
// Check 1: Environment variables
console.log('Checking environment variables...');
if (process.env.SUPABASE_URL && process.env.SUPABASE_ANON_KEY) {
checks.environment = true;
console.log('✓ Environment variables configured');
} else {
console.error('✗ Missing required environment variables');
return false;
}
// Check 2: Database connectivity
console.log('Checking database connectivity...');
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_ANON_KEY,
{
auth: {
persistSession: false,
autoRefreshToken: false
}
}
);
const { error } = await supabase
.from('projects')
.select('count')
.limit(1);
if (!error) {
checks.database = true;
console.log('✓ Database connection successful');
} else {
console.error('✗ Database connection failed:', error.message);
return false;
}
// Check 3: API keys configured
console.log('Checking API configurations...');
if (process.env.PERPLEXITY_API_KEY) {
checks.apis = true;
console.log('✓ API keys configured');
} else {
console.warn('⚠ Perplexity API key not configured (optional but recommended)');
checks.apis = true; // Not critical
}
// Overall health
const isHealthy = Object.values(checks).every(check => check);
if (isHealthy) {
console.log('\n✓ Health check PASSED');
return true;
} else {
console.log('\n✗ Health check FAILED');
return false;
}
} catch (error) {
console.error('Health check error:', error);
return false;
}
}
// Run health check
checkHealth().then(isHealthy => {
process.exit(isHealthy ? 0 : 1);
}).catch(() => {
process.exit(1);
});