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';
|
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) {
|
async function handleCrash(errorContext) {
|
||||||
console.error(`💥 CRITICAL ERROR CAUGHT: ${errorContext}`);
|
console.error(`💥 CRITICAL ERROR CAUGHT: ${errorContext}`);
|
||||||
isReady = false;
|
isReady = false;
|
||||||
|
|
||||||
try {
|
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) {
|
if (client && client.pupBrowser) {
|
||||||
await client.pupBrowser.close().catch(() => {});
|
await client.pupBrowser.close().catch(() => {});
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} 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);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,9 +75,8 @@ const client = new Client({
|
|||||||
'--disable-setuid-sandbox',
|
'--disable-setuid-sandbox',
|
||||||
'--disable-dev-shm-usage',
|
'--disable-dev-shm-usage',
|
||||||
'--disable-gpu',
|
'--disable-gpu',
|
||||||
'--no-zygote',
|
|
||||||
'--single-process',
|
|
||||||
'--disable-extensions'
|
'--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) => {
|
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');
|
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) => {
|
app.post('/auth/logout', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
console.log("Manueller Logout über Web-UI...");
|
console.log("Logout erzwungen über Web-UI...");
|
||||||
|
if (client) {
|
||||||
await client.logout().catch(() => {});
|
await client.logout().catch(() => {});
|
||||||
await fs.remove(path.join(SESSION_DATA, 'session-ha_bridge_session')).catch(() => {});
|
await client.destroy().catch(() => {});
|
||||||
res.json({ success: true, message: "Erfolgreich abgemeldet. Ordner gelöscht. Addon startet neu..." });
|
}
|
||||||
setTimeout(() => process.exit(0), 2000);
|
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) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
res.status(500).json({ error: err.message });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// NOTFALL-RESET: Putzt das komplette Verzeichnis leer
|
||||||
app.delete('/system/reset', async (req, res) => {
|
app.delete('/system/reset', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
await client.destroy().catch(() => {});
|
console.log("Factory Reset erzwungen...");
|
||||||
|
if (client) await client.destroy().catch(() => {});
|
||||||
await fs.emptyDir('/data').catch(() => {});
|
await fs.emptyDir('/data').catch(() => {});
|
||||||
res.json({ success: true, message: "Werkseinstellungen aktiv. Alles gelöscht. Neustart..." });
|
res.json({ success: true, message: "Werkseinstellungen erzwungen. Alles gelöscht. Neustart..." });
|
||||||
setTimeout(() => process.exit(0), 2000);
|
setTimeout(() => process.exit(0), 1500);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.status(500).json({ error: err.message });
|
res.status(500).json({ error: err.message });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user