40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
|
|
import express from 'express';
|
||
|
|
import cors from 'cors';
|
||
|
|
import { readFile } from 'fs/promises';
|
||
|
|
import { fileURLToPath } from 'url';
|
||
|
|
import { dirname, join } from 'path';
|
||
|
|
import dotenv from 'dotenv';
|
||
|
|
|
||
|
|
dotenv.config();
|
||
|
|
|
||
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||
|
|
|
||
|
|
// Lazy import routes after dotenv loaded
|
||
|
|
const { chatRouter } = await import('./routes/chat.js');
|
||
|
|
const { modelsRouter } = await import('./routes/models.js');
|
||
|
|
const { accountRouter } = await import('./routes/account.js');
|
||
|
|
const { searchRouter } = await import('./routes/search.js');
|
||
|
|
|
||
|
|
const app = express();
|
||
|
|
const PORT = process.env.PORT || 3001;
|
||
|
|
const FRONTEND_URL = process.env.FRONTEND_URL || 'http://localhost:5173';
|
||
|
|
|
||
|
|
app.use(cors({
|
||
|
|
origin: [FRONTEND_URL, 'http://localhost:80', 'http://localhost'],
|
||
|
|
credentials: true
|
||
|
|
}));
|
||
|
|
app.use(express.json({ limit: '10mb' }));
|
||
|
|
|
||
|
|
app.use('/api/chat', chatRouter);
|
||
|
|
app.use('/api/models', modelsRouter);
|
||
|
|
app.use('/api/account', accountRouter);
|
||
|
|
app.use('/api/search', searchRouter);
|
||
|
|
|
||
|
|
// Health check
|
||
|
|
app.get('/api/health', (req, res) => res.json({ status: 'ok', timestamp: new Date().toISOString() }));
|
||
|
|
|
||
|
|
app.listen(PORT, '0.0.0.0', () => {
|
||
|
|
console.log(`IQAI Backend running on http://0.0.0.0:${PORT}`);
|
||
|
|
console.log(`API Token: ${process.env.REPLICATE_API_TOKEN ? '✓ configured' : '✗ NOT SET'}`);
|
||
|
|
});
|