Fix: Implement stable risk monitor with curl to resolve fetch compatibility issues

- Create lib/stable-risk-monitor.js using curl instead of fetch for Node.js compatibility
- Fix autonomous risk manager fetch errors that were causing beach mode failures
- Update simple-automation.js to use stable risk monitor with proper cleanup
- Ensure all monitoring processes are properly terminated on automation stop
- Maintain 4-tier autonomous AI risk management system (Emergency/High/Medium/Safe)
- Preserve beautiful dark theme position monitor and emergency stop controls
- System now fully operational for autonomous beach mode trading 🏖️
This commit is contained in:
mindesbunister
2025-07-25 12:14:14 +02:00
parent c687562ecf
commit 2faf3148d8
4 changed files with 213 additions and 25 deletions

View File

@@ -8,6 +8,35 @@
const fs = require('fs').promises;
const path = require('path');
// Import fetch for Node.js compatibility
let fetch;
(async () => {
try {
const fetchModule = await import('node-fetch');
fetch = fetchModule.default;
} catch (error) {
console.warn('node-fetch not available, using alternative fetch method');
// Fallback to http module if node-fetch is not available
const http = require('http');
fetch = (url) => {
return new Promise((resolve, reject) => {
const req = http.get(url, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
try {
resolve({ json: () => Promise.resolve(JSON.parse(data)) });
} catch (e) {
reject(e);
}
});
});
req.on('error', reject);
});
};
}
})();
class AutonomousRiskManager {
constructor() {
this.isActive = false;
@@ -223,20 +252,34 @@ class AutonomousRiskManager {
await this.log('🏖️ BEACH MODE ACTIVATED: Full autonomous operation');
this.isActive = true;
// Run continuous autonomous monitoring
setInterval(async () => {
try {
const response = await fetch('http://localhost:9001/api/automation/position-monitor');
const data = await response.json();
if (data.success) {
const decision = await this.analyzePosition(data.monitor);
await this.executeDecision(decision);
// Wait a bit for fetch to be initialized
setTimeout(() => {
// Run continuous autonomous monitoring
setInterval(async () => {
try {
if (!fetch) {
await this.log('Fetch not yet available, skipping this cycle');
return;
}
const response = await fetch('http://localhost:9001/api/automation/position-monitor');
const data = await response.json();
if (data.success) {
const decision = await this.analyzePosition(data.monitor);
await this.executeDecision(decision);
} else {
await this.log('No position data available');
}
} catch (error) {
await this.log(`Error in beach mode: ${error.message}`);
// Don't log fetch errors every cycle to avoid spam
if (!error.message.includes('fetch')) {
console.error('Beach mode error:', error);
}
}
} catch (error) {
await this.log(`Error in beach mode: ${error.message}`);
}
}, 30000); // Check every 30 seconds
}, 60000); // Check every 60 seconds to reduce spam
}, 3000); // Wait 3 seconds for initialization
}
async executeDecision(decision) {