← 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);
}