81 lines
3.9 KiB
JavaScript
81 lines
3.9 KiB
JavaScript
"use strict";
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
const yargs_1 = __importDefault(require("yargs"));
|
||
const helpers_1 = require("yargs/helpers");
|
||
const steamSession_1 = require("./app/steamSession");
|
||
const fetchMatchFromSharecode_1 = require("./app/fetchMatchFromSharecode");
|
||
const downloadDemoFile_1 = require("./app/downloadDemoFile");
|
||
const http_1 = __importDefault(require("http"));
|
||
const fs_1 = __importDefault(require("fs"));
|
||
const path_1 = __importDefault(require("path"));
|
||
const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)).options({
|
||
username: { type: 'string', demandOption: true },
|
||
password: { type: 'string', demandOption: true },
|
||
mfa: { type: 'string', demandOption: false },
|
||
authCode: { type: 'string', demandOption: false },
|
||
port: { type: 'number', default: 4000, demandOption: false },
|
||
demoPath: {
|
||
type: 'string',
|
||
default: 'demos',
|
||
demandOption: false,
|
||
description: 'Zielverzeichnis für heruntergeladene Demos',
|
||
},
|
||
}).parseSync();
|
||
const PORT = argv.port;
|
||
const resolvedDemoPath = path_1.default.resolve(argv.demoPath);
|
||
if (!fs_1.default.existsSync(resolvedDemoPath)) {
|
||
fs_1.default.mkdirSync(resolvedDemoPath, { recursive: true });
|
||
console.log(`📂 Verzeichnis erstellt: ${resolvedDemoPath}`);
|
||
}
|
||
async function start() {
|
||
const session = await (0, steamSession_1.createSteamSession)(argv.username, argv.password, argv.mfa);
|
||
console.log(`🚀 Server läuft auf http://localhost:${PORT}`);
|
||
http_1.default
|
||
.createServer(async (req, res) => {
|
||
if (req.method === 'POST' && req.url === '/download') {
|
||
let body = '';
|
||
req.on('data', (chunk) => (body += chunk));
|
||
req.on('end', async () => {
|
||
try {
|
||
const { shareCode, steamId } = JSON.parse(body);
|
||
console.log(`📦 ShareCode empfangen: ${shareCode}`);
|
||
const match = await (0, fetchMatchFromSharecode_1.fetchMatchFromShareCode)(shareCode, session);
|
||
const demoFilePath = await (0, downloadDemoFile_1.downloadDemoFile)(match, resolvedDemoPath, (percent) => {
|
||
process.stdout.write(`📶 Fortschritt: ${percent}%\r`);
|
||
if (percent === 100) {
|
||
console.log('✅ Download abgeschlossen');
|
||
}
|
||
});
|
||
// JSON nur erstellen, wenn die .dem existiert
|
||
if (demoFilePath && fs_1.default.existsSync(demoFilePath)) {
|
||
const jsonFilePath = demoFilePath.replace(/\.dem$/, '.json');
|
||
const jsonFileName = path_1.default.basename(jsonFilePath);
|
||
await fs_1.default.promises.writeFile(jsonFilePath, JSON.stringify(match, null, 2), 'utf-8');
|
||
console.log(`📝 Match-Daten gespeichert unter: ${jsonFileName}`);
|
||
}
|
||
else {
|
||
console.warn('⚠️ Keine Demo-Datei vorhanden – JSON wird nicht erstellt.');
|
||
}
|
||
// Antwort an den Client
|
||
res.writeHead(200, { 'Content-Type': 'application/json' });
|
||
res.end(JSON.stringify({ success: true, path: demoFilePath }));
|
||
}
|
||
catch (err) {
|
||
console.error('❌ Fehler:', err);
|
||
res.writeHead(500, { 'Content-Type': 'application/json' });
|
||
res.end(JSON.stringify({ success: false, error: err instanceof Error ? err.message : err }));
|
||
}
|
||
});
|
||
}
|
||
else {
|
||
res.writeHead(404);
|
||
res.end();
|
||
}
|
||
})
|
||
.listen(PORT);
|
||
}
|
||
start();
|