agentic-os/utility-agent/server.js

70 lines
2.2 KiB
JavaScript

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const fs = require('fs');
const path = require('path');
const cron = require('node-cron');
const { runScrapers } = require('./scraper');
const app = express();
app.use(cors());
app.use(express.json());
const SECRETS_DIR = path.join(__dirname, '.secrets');
if (!fs.existsSync(SECRETS_DIR)) {
fs.mkdirSync(SECRETS_DIR, { recursive: true });
}
const CREDENTIALS_FILE = path.join(SECRETS_DIR, 'utility_creds.json');
function getCredentials() {
if (fs.existsSync(CREDENTIALS_FILE)) {
return JSON.parse(fs.readFileSync(CREDENTIALS_FILE, 'utf8'));
}
return {};
}
function saveCredentials(creds) {
fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2));
}
app.get('/api/credentials', (req, res) => {
const creds = getCredentials();
// Don't send passwords back to the client for security
res.json({
success: true,
firstEnergyUser: creds.firstEnergy ? creds.firstEnergy.username : '',
peoplesGasUser: creds.peoplesGas ? creds.peoplesGas.username : ''
});
});
app.post('/api/credentials', (req, res) => {
const { firstEnergyUser, firstEnergyPass, peoplesGasUser, peoplesGasPass } = req.body;
const creds = getCredentials();
if (firstEnergyUser) {
creds.firstEnergy = { username: firstEnergyUser, password: firstEnergyPass || creds.firstEnergy?.password };
}
if (peoplesGasUser) {
creds.peoplesGas = { username: peoplesGasUser, password: peoplesGasPass || creds.peoplesGas?.password };
}
saveCredentials(creds);
res.json({ success: true, message: 'Credentials saved securely.' });
});
app.post('/api/run', async (req, res) => {
res.json({ success: true, message: 'Scraping started in background.' });
runScrapers(getCredentials());
});
const PORT = process.env.PORT || 5005;
app.listen(PORT, '0.0.0.0', () => {
console.log(`[Utility Agent] Server running on 0.0.0.0:${PORT}`);
// Run daily at 11:30 PM (23:30)
cron.schedule('30 23 * * *', () => {
console.log('[Utility Agent] Running daily scheduled scrape...');
runScrapers(getCredentials());
});
});