Files
umbrix/update-server-example/server.js

113 lines
3.9 KiB
JavaScript
Raw Permalink Normal View History

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;