config.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import dotenv from 'dotenv'
  2. // Cargar variables de entorno
  3. dotenv.config()
  4. // Configuración de variables de entorno
  5. export const config = {
  6. // NextAuth
  7. nextAuth: {
  8. url: process.env.NEXTAUTH_URL || 'http://localhost:3000',
  9. secret: process.env.NEXTAUTH_SECRET || 'tu-clave-secreta-por-defecto-cambiar-en-produccion',
  10. },
  11. // Database
  12. database: {
  13. url: process.env.DATABASE_URL || 'file:./dev.db',
  14. },
  15. // OpenRouter
  16. openRouter: {
  17. apiKey: process.env.OPENROUTER_API_KEY || '',
  18. url: process.env.OPENROUTER_URL || 'https://openrouter.ai/api/v1',
  19. model: process.env.OPENROUTER_MODEL || 'deepseek/deepseek-chat-v3-0324:free',
  20. },
  21. // Session Configuration
  22. session: {
  23. maxAge: parseInt(process.env.SESSION_MAX_AGE || '4') * 60 * 60, // Convert hours to seconds
  24. jwtMaxAge: parseInt(process.env.JWT_MAX_AGE || '4') * 60 * 60, // Convert hours to seconds
  25. },
  26. // UTB API
  27. utbApi: {
  28. url: process.env.UTB_API_URL || 'https://sai.utb.edu.ec/v2/ws/auth/login',
  29. appId: process.env.UTB_API_APP_ID || '',
  30. appToken: process.env.UTB_API_APP_TOKEN || '',
  31. },
  32. // Jitsi Meet
  33. jitsi: {
  34. domain: process.env.JITSI_DOMAIN || '',
  35. appId: process.env.JITSI_APP_ID || '',
  36. appSecret: process.env.JITSI_APP_SECRET || '',
  37. useJWT: process.env.JITSI_USE_JWT === 'true',
  38. },
  39. // Environment
  40. env: process.env.NODE_ENV || 'development',
  41. port: process.env.PORT || '3000',
  42. } as const
  43. // Logger para verificar variables de entorno
  44. export function logEnvironmentConfig() {
  45. console.log('🔧 Configuración de Variables de Entorno:')
  46. console.log('==========================================')
  47. // NextAuth
  48. console.log('📋 NextAuth:')
  49. console.log(` URL: ${config.nextAuth.url}`)
  50. console.log(` Secret: ${config.nextAuth.secret ? '✅ Configurado' : '❌ No configurado'}`)
  51. // Database
  52. console.log('🗄️ Database:')
  53. console.log(` URL: ${config.database.url}`)
  54. // OpenRouter
  55. console.log('🤖 OpenRouter:')
  56. console.log(` API Key: ${config.openRouter.apiKey ? '✅ Configurada' : '❌ No configurada'}`)
  57. console.log(` URL: ${config.openRouter.url}`)
  58. console.log(` Model: ${config.openRouter.model}`)
  59. // Session
  60. console.log('🔐 Session:')
  61. console.log(` Max Age: ${config.session.maxAge / 3600} horas (${config.session.maxAge} segundos)`)
  62. console.log(` JWT Max Age: ${config.session.jwtMaxAge / 3600} horas (${config.session.jwtMaxAge} segundos)`)
  63. // UTB API
  64. console.log('🎓 UTB API:')
  65. console.log(` URL: ${config.utbApi.url}`)
  66. console.log(` App ID: ${config.utbApi.appId ? '✅ Configurado' : '❌ No configurado'}`)
  67. console.log(` App Token: ${config.utbApi.appToken ? '✅ Configurado' : '❌ No configurado'}`)
  68. // Jitsi Meet
  69. console.log('🎥 Jitsi Meet:')
  70. console.log(` Domain: ${config.jitsi.domain}`)
  71. console.log(` App ID: ${config.jitsi.appId ? '✅ Configurado' : '❌ No configurado'}`)
  72. console.log(` App Secret: ${config.jitsi.appSecret ? '✅ Configurado' : '❌ No configurado'}`)
  73. console.log(` Use JWT: ${config.jitsi.useJWT ? '✅ Habilitado' : '❌ Deshabilitado'}`)
  74. // Environment
  75. console.log('🌍 Environment:')
  76. console.log(` NODE_ENV: ${config.env}`)
  77. console.log(` PORT: ${config.port}`)
  78. console.log('==========================================')
  79. // Advertencias
  80. if (!config.nextAuth.secret || config.nextAuth.secret === 'tu-clave-secreta-por-defecto-cambiar-en-produccion') {
  81. console.log('⚠️ ADVERTENCIA: NEXTAUTH_SECRET no está configurado correctamente')
  82. }
  83. if (!config.openRouter.apiKey) {
  84. console.log('⚠️ ADVERTENCIA: OPENROUTER_API_KEY no está configurada - El chat funcionará con respuestas de fallback')
  85. }
  86. if (!config.utbApi.appId || !config.utbApi.appToken) {
  87. console.log('⚠️ ADVERTENCIA: UTB API credentials no están configuradas')
  88. }
  89. if (config.jitsi.useJWT && (!config.jitsi.appId || !config.jitsi.appSecret)) {
  90. console.log('⚠️ ADVERTENCIA: Jitsi JWT está habilitado pero las credenciales no están configuradas')
  91. }
  92. console.log('')
  93. }
  94. // Función para validar configuración crítica
  95. export function validateConfig() {
  96. const errors: string[] = []
  97. if (!config.nextAuth.secret || config.nextAuth.secret === 'tu-clave-secreta-por-defecto-cambiar-en-produccion') {
  98. errors.push('NEXTAUTH_SECRET no está configurado correctamente')
  99. }
  100. if (!config.database.url) {
  101. errors.push('DATABASE_URL no está configurado')
  102. }
  103. return {
  104. isValid: errors.length === 0,
  105. errors
  106. }
  107. }