project-indexer
Version:
Local project indexer with browser trigger support
71 lines (55 loc) • 1.93 kB
JavaScript
// src/server.js
import cors from 'cors';
import express from 'express';
import {indexProject} from './projectIndexer.js';
const app = express();
const PORT = 5666;
app.use(cors());
app.use(express.json());
let isIndexing = false;
const key = 'bb891f7294e7bff539a47d212884f1789f861ae8517cad17a80f4ca7559703ca'
app.post('/index', async (req, res) => {
const {dir, projectId, serverUrl,projectName, token, deviceId} = req.body;
console.log('indexing', dir, projectId, serverUrl);
if (!token || !deviceId) {
return res.status(400).json({error: 'Missing token or deviceId'});
}
if (!dir || !serverUrl || !projectId || !projectName) {
return res.status(400).json({error: 'Missing dir, projectId or serverUrl'});
}
if (isIndexing) {
return res.status(409).json({error: 'Already indexing'});
}
try {
isIndexing = true;
const result = await indexProject(dir, serverUrl, projectId,projectName, token, deviceId);
isIndexing = false;
console.log('indexing done', result);
// res.json({success: true, res: result});
return res.json(result);
} catch (err) {
isIndexing = false;
res.status(500).json({error: err.message});
}
});
app.get('/status', (req, res) => {
res.json({ indexing: isIndexing });
});
const server = app.listen(PORT, () => {
console.log(`📡 Local indexer running at http://localhost:${PORT}`);
});
// Handle graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM signal received: closing HTTP server');
server.close(() => {
console.log('HTTP server closed');
process.exit(0);
});
});
process.on('SIGINT', () => {
console.log('SIGINT signal received: closing HTTP server');
server.close(() => {
console.log('HTTP server closed');
process.exit(0);
});
});