Files
Umbrix Developer 76a374950f feat: mobile-like window size and always-visible stats
- Changed window size to mobile phone format (400x800)
- Removed width condition for ActiveProxyFooter - now always visible
- Added run-umbrix.sh launch script with icon copying
- Stats cards now display on all screen sizes
2026-01-17 13:09:20 +03:00

113 lines
3.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const express = require('express');
const cors = require('cors');
const app = express();
// Middleware
app.use(cors());
app.use(express.json());
// Конфигурация версий - обновляйте это при каждом релизе
const RELEASES = {
stable: {
version: "2.5.8",
build_number: "258",
is_prerelease: false,
download_url: "https://your-storage.com/downloads/umbrix-2.5.8.apk",
release_notes: "Стабильная версия с важными исправлениями:\n\n✨ Новое:\n- Улучшенная система обновлений\n- Оптимизация производительности\n\n🐛 Исправлено:\n- Проблемы с подключением\n- Баги стабильности",
published_at: "2026-01-16T10:00:00Z"
},
beta: {
version: "2.6.0-beta.1",
build_number: "260",
is_prerelease: true,
download_url: "https://your-storage.com/downloads/umbrix-2.6.0-beta.1.apk",
release_notes: "Бета-версия с экспериментальными функциями:\n\n🚀 Новые функции:\n- Новый интерфейс\n- Расширенные настройки\n\n⚠ Внимание: Это бета-версия, могут быть баги!",
published_at: "2026-01-17T08:00:00Z"
}
};
// API ключ для защиты (опционально)
const API_KEY = process.env.API_KEY || 'your-secret-api-key-change-this';
// Middleware для проверки API ключа (опционально)
function checkApiKey(req, res, next) {
const apiKey = req.headers['x-api-key'];
// Если API_KEY не установлен, пропускаем проверку
if (API_KEY === 'your-secret-api-key-change-this') {
return next();
}
if (!apiKey || apiKey !== API_KEY) {
return res.status(401).json({
error: 'Unauthorized',
message: 'Invalid or missing API key'
});
}
next();
}
// Endpoint для получения последней версии
app.get('/api/updates/latest', checkApiKey, (req, res) => {
const includePrerelease = req.query.include_prerelease === 'true';
const release = includePrerelease ? RELEASES.beta : RELEASES.stable;
// Логирование запросов
console.log(`[${new Date().toISOString()}] Update check: prerelease=${includePrerelease}`);
res.json(release);
});
// Endpoint для аналитики (опционально)
app.post('/api/updates/analytics', (req, res) => {
const { current_version, device_info, action } = req.body;
console.log(`[${new Date().toISOString()}] Analytics:`, {
current_version,
device_info,
action
});
res.json({ success: true });
});
// Endpoint для истории версий
app.get('/api/updates/history', checkApiKey, (req, res) => {
const history = [
RELEASES.beta,
RELEASES.stable,
// Добавьте старые версии здесь
];
res.json({ releases: history });
});
// Health check endpoint
app.get('/health', (req, res) => {
res.json({
status: 'ok',
timestamp: new Date().toISOString(),
version: '1.0.0'
});
});
// Запуск сервера
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`
╔════════════════════════════════════════╗
║ Umbrix Update Server ║
║ Running on port ${PORT}
║ ║
║ Endpoints: ║
║ GET /api/updates/latest ║
║ POST /api/updates/analytics ║
║ GET /api/updates/history ║
║ GET /health ║
╚════════════════════════════════════════╝
`);
});
module.exports = app;