quick-status-check.jsā¢7.83 kB
#!/usr/bin/env node
// ODIADEV MCP Server - Quick Functional Status Check
// Provides immediate status of all endpoints and systems
console.log('ā” ODIADEV MCP SERVER - QUICK STATUS CHECK');
console.log('=' .repeat(50));
async function quickStatusCheck() {
const results = {
endpoints: [],
overall: 'CHECKING'
};
console.log('š Checking all systems...\n');
// 1. Health Check Test
console.log('1. š„ Health Check Endpoint:');
try {
const healthModule = require('./api/healthcheck.js');
let healthData = null;
const mockReq = { method: 'GET', headers: {}, url: '/health' };
const mockRes = {
setHeader: () => {},
status: () => mockRes,
json: (data) => { healthData = data; }
};
await healthModule(mockReq, mockRes);
if (healthData?.ok) {
console.log(' ā
ONLINE - Service responding correctly');
console.log(` š Service: ${healthData.service}`);
console.log(` š Version: ${healthData.version}`);
console.log(` šÆ Status: ${healthData.status}`);
results.endpoints.push({ name: 'Health', status: 'ONLINE' });
} else {
console.log(' ā ERROR - Invalid response');
results.endpoints.push({ name: 'Health', status: 'ERROR' });
}
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Health', status: 'ERROR' });
}
// 2. Payment API Test
console.log('\n2. š° Payment API:');
try {
const paymentModule = require('./api/payments/initiate.js');
console.log(' ā
MODULE LOADED - Payment endpoint compiled');
console.log(' ā ļø CONFIG NEEDED - Flutterwave credentials required');
results.endpoints.push({ name: 'Payment', status: 'CONFIG_NEEDED' });
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Payment', status: 'ERROR' });
}
// 3. TTS Service Test
console.log('\n3. š¤ TTS Service:');
try {
const ttsModule = require('./api/tts/speak.js');
const config = require('./lib/config');
if (config.validate.tts()) {
console.log(' ā
READY - TTS service configured');
console.log(` š£ļø Voice: ${config.tts.defaultVoice}`);
console.log(` š URL: ${config.tts.baseUrl}`);
results.endpoints.push({ name: 'TTS', status: 'ONLINE' });
} else {
console.log(' ā ļø CONFIG ISSUE - TTS configuration invalid');
results.endpoints.push({ name: 'TTS', status: 'CONFIG_NEEDED' });
}
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'TTS', status: 'ERROR' });
}
// 4. Webhook Handler Test
console.log('\n4. š Webhook Handler:');
try {
const webhookModule = require('./api/webhook/flutterwave.js');
console.log(' ā
READY - Webhook handler loaded');
console.log(' šØ Events: charge.completed, transfer.completed');
results.endpoints.push({ name: 'Webhook', status: 'ONLINE' });
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Webhook', status: 'ERROR' });
}
// 5. Security Features Test
console.log('\n5. š”ļø Security Features:');
try {
const { setSecurityHeaders, validateInput } = require('./lib/utils');
const mockRes = { headers: {}, setHeader: (n, v) => mockRes.headers[n] = v };
setSecurityHeaders(mockRes);
const headerCount = Object.keys(mockRes.headers).length;
console.log(` ā
ACTIVE - ${headerCount} security headers set`);
console.log(' š Features: XSS protection, CSRF protection, CORS');
// Test validation
const emailTest = validateInput('test@odia.dev', 'email');
console.log(` ā
VALIDATION - Email validation: ${emailTest.valid ? 'WORKING' : 'FAILED'}`);
results.endpoints.push({ name: 'Security', status: 'ONLINE' });
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Security', status: 'ERROR' });
}
// 6. Nigerian Features Test
console.log('\n6. š³š¬ Nigerian Features:');
try {
const { validateNigerianPhone, validateNigerianAmount } = require('./lib/utils');
const config = require('./lib/config');
// Test phone validation
const phoneTest = validateNigerianPhone('+2348012345678');
const amountTest = validateNigerianAmount(1000, 'NGN');
console.log(` ā
ACTIVE - Phone validation: ${phoneTest.valid ? 'WORKING' : 'FAILED'}`);
console.log(` ā
ACTIVE - Amount validation: ${amountTest.valid ? 'WORKING' : 'FAILED'}`);
console.log(` š° Currency: ${config.nigerian.currency}`);
console.log(` š Timezone: ${config.nigerian.timezone}`);
results.endpoints.push({ name: 'Nigerian Features', status: 'ONLINE' });
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Nigerian Features', status: 'ERROR' });
}
// 7. Monitoring System Test
console.log('\n7. š Monitoring System:');
try {
const monitor = require('./lib/monitoring');
// Test monitoring functions
monitor.recordBusinessEvent('test_event', { type: 'status_check' });
const health = monitor.getHealthSummary();
console.log(` ā
ACTIVE - Health status: ${health.status}`);
console.log(` š Metrics: ${health.metrics.requests} requests tracked`);
console.log(` š Security: ${health.security.recentEvents} events logged`);
results.endpoints.push({ name: 'Monitoring', status: 'ONLINE' });
} catch (error) {
console.log(` ā ERROR - ${error.message}`);
results.endpoints.push({ name: 'Monitoring', status: 'ERROR' });
}
// Calculate overall status
const onlineCount = results.endpoints.filter(e => e.status === 'ONLINE').length;
const configNeededCount = results.endpoints.filter(e => e.status === 'CONFIG_NEEDED').length;
const errorCount = results.endpoints.filter(e => e.status === 'ERROR').length;
const totalCount = results.endpoints.length;
console.log('\n' + '=' .repeat(50));
console.log('šÆ QUICK STATUS SUMMARY:');
console.log('=' .repeat(50));
console.log(`š Total Systems: ${totalCount}`);
console.log(`š¢ Online: ${onlineCount}`);
console.log(`š” Config Needed: ${configNeededCount}`);
console.log(`š“ Errors: ${errorCount}`);
const readinessScore = Math.round(((onlineCount + configNeededCount * 0.7) / totalCount) * 100);
console.log(`\nšÆ Readiness Score: ${readinessScore}%`);
if (errorCount === 0 && readinessScore >= 90) {
results.overall = 'READY';
console.log('š¢ STATUS: PRODUCTION READY');
console.log('š All systems operational - ready for deployment!');
} else if (errorCount === 0) {
results.overall = 'CONFIG_NEEDED';
console.log('š” STATUS: CONFIGURATION NEEDED');
console.log('āļø Minor configuration required for full operation');
} else {
results.overall = 'NEEDS_ATTENTION';
console.log('š“ STATUS: NEEDS ATTENTION');
console.log('š§ Critical issues require immediate attention');
}
console.log('\nš NEXT STEPS:');
if (configNeededCount > 0) {
console.log('1. Set Flutterwave production credentials');
console.log('2. Configure production API keys (8+ characters)');
}
console.log('3. Deploy to production: vercel --prod');
console.log('4. Run live deployment test: node verify-production.js [url]');
console.log('\nā
QUICK STATUS CHECK COMPLETE!');
return results;
}
// Execute quick status check
if (require.main === module) {
quickStatusCheck().catch(error => {
console.error('\nā Status check failed:', error);
process.exit(1);
});
}
module.exports = { quickStatusCheck };