const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.static('public')); // Папка с фронтендом
// SSE-эндпоинт для отслеживания токена
app.get('/track-token', async (req, res) => {
const tokenAddress = req.query.address;
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const checkToken = async () => {
try {
// 1. Проверка листинга (пример для BSC)
const listing = await axios.get(`https://api.bscscan.com/api?module=token&action=tokeninfo&contractaddress=${tokenAddress}&apikey=YOUR_API_KEY`);
// 2. Проверка ликвидности (через PancakeSwap API)
const liquidity = await axios.get(`https://api.pancakeswap.info/api/v2/tokens/${tokenAddress}`);
const liquidityUSD = parseFloat(liquidity.data.data.price) * parseFloat(liquidity.data.data.totalLiquidity);
// 3. Проверка миграции (через транзакции)
const migrationCheck = await axios.get(`https://api.bscscan.com/api?module=account&action=txlist&address=${tokenAddress}&apikey=YOUR_API_KEY`);
const hasMigration = migrationCheck.data.result.some(tx => tx.input.includes('migrate'));
// Отправка данных клиенту
res.write(`data: ${JSON.stringify({
token: tokenAddress,
status: listing.data.result ? 'success' : 'error',
message: listing.data.result ? 'Токен активен' : 'Токен не найден',
liquidity: liquidityUSD.toFixed(2),
migration: hasMigration,
})}\n\n`);
} catch (error) {
res.write(`data: ${JSON.stringify({
token: tokenAddress,
status: 'error',
message: 'Ошибка при проверке',
liquidity: 0,
migration: false,
})}\n\n`);
}
};
// Проверяем токен каждые 10 секунд
const interval = setInterval(checkToken, 10000);
// Закрываем соединение при отключении клиента
req.on('close', () => {
clearInterval(interval);
res.end();
});
});
app.listen(3000, () => console.log('Сервер запущен на http://localhost:3000'));