whatsapp_bridge/server.js aktualisiert
1.3.2
This commit is contained in:
@@ -14,20 +14,33 @@ let isInitializing = true;
|
||||
|
||||
const SESSION_DATA = '/data/auth';
|
||||
|
||||
// --- AUTOMATISCHE SELBSTREINIGUNG BEIM START ---
|
||||
// Löscht alte Chromium-Sperrdateien, die das "LADE CLIENT..."-Hängen verursachen
|
||||
try {
|
||||
const lockFolder = path.join(SESSION_DATA, 'session-ha_bridge_session');
|
||||
const lockFile = path.join(lockFolder, 'SingletonLock');
|
||||
if (fs.existsSync(lockFile)) {
|
||||
fs.removeSync(lockFile);
|
||||
console.log('🔒 Blockierendes Chromium-SingletonLock wurde automatisch entfernt!');
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Info: Keine blockierende Sperrdatei beim Start gefunden.');
|
||||
}
|
||||
|
||||
async function handleCrash(errorContext) {
|
||||
console.error(`💥 CRITICAL ERROR CAUGHT: ${errorContext}`);
|
||||
isReady = false;
|
||||
|
||||
try {
|
||||
console.log('Versuche Browser sauber zu schließen, um Session zu retten...');
|
||||
console.log('Versuche Browser sauber zu schließen...');
|
||||
if (client && client.pupBrowser) {
|
||||
await client.pupBrowser.close().catch(() => {});
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Browser konnte nicht sauber geschlossen werden:', e);
|
||||
console.error('Browser-Close fehlgeschlagen:', e);
|
||||
}
|
||||
|
||||
console.log('Add-on wird beendet. HA Watchdog startet es sauber neu...');
|
||||
console.log('Add-on wird beendet. HA Watchdog startet es neu...');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
@@ -62,9 +75,8 @@ const client = new Client({
|
||||
'--disable-setuid-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
'--disable-gpu',
|
||||
'--no-zygote',
|
||||
'--single-process',
|
||||
'--disable-extensions'
|
||||
// '--single-process' und '--no-zygote' wurden entfernt, da sie in Alpine 3.19 Hangs verursachen können!
|
||||
]
|
||||
}
|
||||
});
|
||||
@@ -84,7 +96,7 @@ client.on('ready', () => {
|
||||
});
|
||||
|
||||
client.on('disconnected', async (reason) => {
|
||||
console.log(`WhatsApp Verbindung manuell oder extern getrennt (Grund: ${reason}).`);
|
||||
console.log(`WhatsApp Verbindung getrennt (Grund: ${reason}).`);
|
||||
await handleCrash('Externer Disconnect');
|
||||
});
|
||||
|
||||
@@ -118,24 +130,30 @@ app.get('/api/status', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// NOTFALL-SICHER: Löscht die Session radikal, selbst wenn der Client eingefroren ist!
|
||||
app.post('/auth/logout', async (req, res) => {
|
||||
try {
|
||||
console.log("Manueller Logout über Web-UI...");
|
||||
console.log("Logout erzwungen über Web-UI...");
|
||||
if (client) {
|
||||
await client.logout().catch(() => {});
|
||||
await fs.remove(path.join(SESSION_DATA, 'session-ha_bridge_session')).catch(() => {});
|
||||
res.json({ success: true, message: "Erfolgreich abgemeldet. Ordner gelöscht. Addon startet neu..." });
|
||||
setTimeout(() => process.exit(0), 2000);
|
||||
await client.destroy().catch(() => {});
|
||||
}
|
||||
await fs.remove(SESSION_DATA).catch(() => {});
|
||||
res.json({ success: true, message: "Session radikal gelöscht. Addon startet jetzt sauber neu..." });
|
||||
setTimeout(() => process.exit(0), 1500);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// NOTFALL-RESET: Putzt das komplette Verzeichnis leer
|
||||
app.delete('/system/reset', async (req, res) => {
|
||||
try {
|
||||
await client.destroy().catch(() => {});
|
||||
console.log("Factory Reset erzwungen...");
|
||||
if (client) await client.destroy().catch(() => {});
|
||||
await fs.emptyDir('/data').catch(() => {});
|
||||
res.json({ success: true, message: "Werkseinstellungen aktiv. Alles gelöscht. Neustart..." });
|
||||
setTimeout(() => process.exit(0), 2000);
|
||||
res.json({ success: true, message: "Werkseinstellungen erzwungen. Alles gelöscht. Neustart..." });
|
||||
setTimeout(() => process.exit(0), 1500);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user