43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
|
|
import { cleanupProviderConnections, getSettings } from "@/lib/localDb";
|
||
|
|
import { enableTunnel } from "@/lib/tunnel/tunnelManager";
|
||
|
|
import { killCloudflared, isCloudflaredRunning, ensureCloudflared } from "@/lib/tunnel/cloudflared";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Initialize app on startup
|
||
|
|
* - Cleanup stale data
|
||
|
|
* - Auto-reconnect tunnel if previously enabled
|
||
|
|
* - Register shutdown handler to kill cloudflared
|
||
|
|
*/
|
||
|
|
export async function initializeApp() {
|
||
|
|
try {
|
||
|
|
await cleanupProviderConnections();
|
||
|
|
|
||
|
|
// Auto-reconnect tunnel if it was enabled before restart
|
||
|
|
const settings = await getSettings();
|
||
|
|
if (settings.tunnelEnabled && !isCloudflaredRunning()) {
|
||
|
|
console.log("[InitApp] Tunnel was enabled, auto-reconnecting...");
|
||
|
|
try {
|
||
|
|
await enableTunnel();
|
||
|
|
console.log("[InitApp] Tunnel reconnected");
|
||
|
|
} catch (error) {
|
||
|
|
console.log("[InitApp] Tunnel reconnect failed:", error.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Kill cloudflared on process exit
|
||
|
|
const cleanup = () => {
|
||
|
|
killCloudflared();
|
||
|
|
process.exit();
|
||
|
|
};
|
||
|
|
process.on("SIGINT", cleanup);
|
||
|
|
process.on("SIGTERM", cleanup);
|
||
|
|
|
||
|
|
// Pre-download cloudflared binary in background
|
||
|
|
ensureCloudflared().catch(() => {});
|
||
|
|
} catch (error) {
|
||
|
|
console.error("[InitApp] Error:", error);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export default initializeApp;
|