70 lines
2.2 KiB
JavaScript
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());
|
|
});
|
|
});
|