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
This commit is contained in:
12
update-server-example/latest.json
Normal file
12
update-server-example/latest.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"version": "2.5.8",
|
||||
"build_number": "258",
|
||||
"is_prerelease": false,
|
||||
"download_url": "https://your-server.com/downloads/umbrix-2.5.8.apk",
|
||||
"release_notes": "Что нового в версии 2.5.8:\n\n✨ Новые функции:\n- Улучшенная система обновлений\n- Поддержка приватных релизов\n\n🐛 Исправления:\n- Исправлены ошибки подключения\n- Улучшена стабильность работы\n\n📱 Совместимость:\n- Android 5.0+\n- iOS 12.0+",
|
||||
"published_at": "2026-01-16T10:00:00Z",
|
||||
"required_minimum_version": "2.5.0",
|
||||
"changelog_url": "https://your-server.com/changelog/2.5.8",
|
||||
"download_size_bytes": 45678901,
|
||||
"checksum_sha256": "abc123def456..."
|
||||
}
|
||||
112
update-server-example/server.js
Normal file
112
update-server-example/server.js
Normal file
@@ -0,0 +1,112 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user