1
0
mirror of https://github.com/mortdeus/legacy-cc.git synced 2026-10-07 11:21:05 +00:00
Files
mortdeus_legacy-cc/2_copy trading bot(node) using gRPC/index.js
cryptoking1106 086ec82844 init
2025-09-18 18:12:50 -03:00

155 lines
4.2 KiB
JavaScript

import { pump_geyser } from "./main.js";
import { config, validateConfig } from "./config.js";
import logger from "./utils/logger.js";
import notificationService from "./services/notifications.js";
import riskManager from "./services/riskManager.js";
// Start dashboard server if enabled
let dashboardServer = null;
if (process.env.ENABLE_DASHBOARD === 'true') {
try {
const dashboardApp = await import("./dashboard/server.js");
dashboardServer = dashboardApp.default;
logger.info("Dashboard server started");
} catch (error) {
logger.warn("Failed to start dashboard server", error);
}
}
// Validate configuration before starting
try {
validateConfig();
logger.info("Configuration validated successfully");
} catch (error) {
logger.error("Configuration validation failed", error);
process.exit(1);
}
// Check wallet balance
const checkWalletBalance = async () => {
try {
const { getBalance } = await import("./swap.js");
const balance = await getBalance();
if (balance < 1) {
logger.error("Wallet balance is below 1 SOL. Current balance:", balance, "SOL");
await notificationService.sendNotification(
`❌ Insufficient wallet balance: ${balance} SOL`,
'error',
{ balance, required: 1 }
);
process.exit(1);
}
logger.info(`Wallet balance: ${balance} SOL`);
await notificationService.sendNotification(
`✅ Bot startup successful. Wallet balance: ${balance} SOL`,
'success',
{ balance }
);
return balance;
} catch (err) {
logger.error("Error checking wallet balance", err);
await notificationService.sendNotification(
`❌ Failed to check wallet balance: ${err.message}`,
'error',
{ error: err.message }
);
process.exit(1);
}
};
// Main startup function
const main = async () => {
try {
logger.info("🚀 Starting Solana Trading Bot...");
// Check wallet balance
await checkWalletBalance();
// Start the main bot
await pump_geyser();
// Send startup notification
await notificationService.notifyBotStatus("Started", {
timestamp: new Date().toISOString(),
config: {
trading: config.trading,
risk: config.risk,
pools: config.pools,
},
});
logger.info("✅ Bot startup completed successfully");
} catch (error) {
logger.error("❌ Bot startup failed", error);
await notificationService.notifyError(error, "Bot Startup");
process.exit(1);
}
};
// Handle process signals
process.on('SIGINT', async () => {
logger.info("🛑 SIGINT received, shutting down...");
await handleShutdown("SIGINT");
});
process.on('SIGTERM', async () => {
logger.info("🛑 SIGTERM received, shutting down...");
await handleShutdown("SIGTERM");
});
process.on('uncaughtException', async (error) => {
logger.error("Uncaught exception", error);
await notificationService.notifyError(error, "Uncaught Exception");
await handleShutdown("Uncaught Exception");
});
process.on('unhandledRejection', async (reason, promise) => {
logger.error("Unhandled rejection", { reason, promise });
await notificationService.notifyError(new Error(reason), "Unhandled Rejection");
});
// Graceful shutdown handler
const handleShutdown = async (reason) => {
try {
logger.info("Initiating graceful shutdown...");
// Get final statistics
const finalStats = riskManager.getDailyStats();
const riskMetrics = riskManager.getRiskMetrics();
// Send shutdown notification
await notificationService.notifyBotStatus("Shutdown", {
reason,
finalStats,
riskMetrics,
timestamp: new Date().toISOString(),
});
// Close dashboard server if running
if (dashboardServer) {
logger.info("Closing dashboard server...");
// Note: In a real implementation, you'd want to properly close the Express server
}
logger.info("Graceful shutdown completed");
process.exit(0);
} catch (error) {
logger.error("Error during shutdown", error);
process.exit(1);
}
};
// Start the bot
main().catch(async (error) => {
logger.error("Fatal error in main function", error);
await notificationService.notifyError(error, "Main Function");
process.exit(1);
});