← back to Animate Museum Posts
src/validateCredentials.js
83 lines
import dotenv from 'dotenv';
dotenv.config();
const colors = {
green: '\x1b[32m',
red: '\x1b[31m',
yellow: '\x1b[33m',
reset: '\x1b[0m'
};
export function validateCredentials() {
console.log('\n=== Credential Validation ===\n');
let hasErrors = false;
let warnings = [];
// Required: Twitter credentials
const twitterKeys = [
'TWITTER_API_KEY',
'TWITTER_API_SECRET',
'TWITTER_ACCESS_TOKEN',
'TWITTER_ACCESS_SECRET'
];
for (const key of twitterKeys) {
if (!process.env[key]) {
console.log(`${colors.red}[MISSING]${colors.reset} ${key} - REQUIRED`);
hasErrors = true;
} else {
console.log(`${colors.green}[OK]${colors.reset} ${key}`);
}
}
// Optional: Animation services
const optionalKeys = [
{ key: 'REPLICATE_API_TOKEN', name: 'Replicate (AI Video)' },
{ key: 'HUGGINGFACE_TOKEN', name: 'HuggingFace (Free AI)' },
{ key: 'RUNWAY_API_TOKEN', name: 'Runway ML (Premium AI)' },
{ key: 'GROK_API_KEY', name: 'Grok API' }
];
console.log('\n--- Optional Animation Services ---');
for (const { key, name } of optionalKeys) {
if (!process.env[key]) {
console.log(`${colors.yellow}[SKIP]${colors.reset} ${key} - ${name} not configured`);
warnings.push(`${name} not available`);
} else {
console.log(`${colors.green}[OK]${colors.reset} ${key} - ${name}`);
}
}
// Optional: Museum APIs
console.log('\n--- Optional Museum APIs ---');
if (!process.env.RIJKSMUSEUM_API_KEY || process.env.RIJKSMUSEUM_API_KEY === '0') {
console.log(`${colors.yellow}[SKIP]${colors.reset} RIJKSMUSEUM_API_KEY - Using hardcoded artworks`);
warnings.push('Rijksmuseum API not configured - using fallback');
} else {
console.log(`${colors.green}[OK]${colors.reset} RIJKSMUSEUM_API_KEY`);
}
// Summary
console.log('\n=== Summary ===');
if (hasErrors) {
console.log(`${colors.red}FAILED: Missing required Twitter credentials${colors.reset}`);
console.log('Get credentials at: https://developer.twitter.com/');
return false;
}
if (warnings.length > 0) {
console.log(`${colors.yellow}WARNINGS:${colors.reset}`);
warnings.forEach(w => console.log(` - ${w}`));
}
console.log(`${colors.green}PASSED: All required credentials present${colors.reset}\n`);
return true;
}
// Run if called directly
if (process.argv[1].includes('validateCredentials')) {
const valid = validateCredentials();
process.exit(valid ? 0 : 1);
}