mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-11-13 15:09:20 +01:00
108 lines
3.3 KiB
JavaScript
108 lines
3.3 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const {logger, logDir} = require("../server/logger");
|
|
|
|
const REPORT_URL = "https://freedom-loader-report.acnolo.fr";
|
|
const REPORT_SERVICE_TIMEOUT_MS = 5000;
|
|
let reportServiceStatus = {
|
|
status: "checking",
|
|
message: "Checking bug report service..."
|
|
};
|
|
let reportServiceCheck = null;
|
|
|
|
async function checkReportService() {
|
|
if (reportServiceCheck) {
|
|
return reportServiceCheck;
|
|
}
|
|
|
|
reportServiceCheck = (async () => {
|
|
const controller = new AbortController();
|
|
const timeout = setTimeout(() => controller.abort(), REPORT_SERVICE_TIMEOUT_MS);
|
|
|
|
try {
|
|
const response = await fetch(REPORT_URL, {
|
|
method: "GET",
|
|
signal: controller.signal
|
|
});
|
|
|
|
if (response.status >= 500) {
|
|
throw new Error(`Server responded with status ${response.status}`);
|
|
}
|
|
|
|
reportServiceStatus = {
|
|
status: "online",
|
|
message: "Bug report service is available."
|
|
};
|
|
logger.info(`Bug report service is reachable (status ${response.status}).`);
|
|
} catch (err) {
|
|
reportServiceStatus = {
|
|
status: "offline",
|
|
message: "Bug report service is unavailable. Reports may fail to send."
|
|
};
|
|
logger.warn(`Bug report service is unreachable: ${err.message}`);
|
|
} finally {
|
|
clearTimeout(timeout);
|
|
}
|
|
|
|
return reportServiceStatus;
|
|
})();
|
|
|
|
return reportServiceCheck;
|
|
}
|
|
|
|
function getReportServiceStatus() {
|
|
return reportServiceStatus;
|
|
}
|
|
|
|
async function sendReport(params) {
|
|
try {
|
|
const {title, description, includeLogs} = params;
|
|
|
|
if (!title || !description) {
|
|
throw new Error("Title and description are required.");
|
|
}
|
|
|
|
const formData = new FormData();
|
|
formData.append("title", title);
|
|
formData.append("context", description);
|
|
|
|
if (includeLogs === "yes" && logDir) {
|
|
// YYYY-MM-DD
|
|
const now = new Date();
|
|
const today = [
|
|
now.getFullYear(),
|
|
String(now.getMonth() + 1).padStart(2, "0"),
|
|
String(now.getDate()).padStart(2, "0")
|
|
].join("-");
|
|
|
|
const logFilePath = path.join(logDir, `LOGS-${today}.log`);
|
|
|
|
if (fs.existsSync(logFilePath)) {
|
|
const logFileContent = fs.readFileSync(logFilePath);
|
|
const blob = new Blob([logFileContent], {type: "text/plain"});
|
|
formData.append("file", blob, `LOGS-${today}.log`);
|
|
logger.info("Logs attached to bug report.");
|
|
} else {
|
|
logger.warn(`Log file not found for today: ${logFilePath}`);
|
|
}
|
|
}
|
|
|
|
const response = await fetch(REPORT_URL, {
|
|
method: "POST",
|
|
body: formData
|
|
});
|
|
|
|
if (!response.ok) {
|
|
logger.error(`Server returned an error: ${response.status}`);
|
|
throw new Error(`Server responded with status ${response.status}`);
|
|
}
|
|
|
|
logger.info("Bug report successfully sent.");
|
|
return true;
|
|
} catch (err) {
|
|
logger.error(`Failed to send bug report: ${err.message}`);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
module.exports = {sendReport, checkReportService, getReportServiceStatus}; |