UNPKG

locadot

Version:

Secure your local development environment with HTTPS and custom domains like dev.localhost.

135 lines (134 loc) 5.21 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); const fs_1 = __importDefault(require("fs")); const child_process_1 = require("child_process"); const sudo_prompt_1 = __importDefault(require("@expo/sudo-prompt")); const constants_1 = __importDefault(require("../constants")); const locadot_file_1 = __importDefault(require("../lib/locadot-file")); const SERVICE_NAME = "reboot-locadot"; const { command, path: commandArgs } = locadot_file_1.default.getStartProxyFile(); const sudoOptions = { name: "Locadot", }; function execSudo(cmd) { return new Promise((resolve, reject) => { sudo_prompt_1.default.exec(cmd, sudoOptions, (error, stdout, stderr) => { if (error) return reject(error); if (stderr) console.error(stderr); if (stdout) console.log(stdout); resolve(); }); }); } class Startup { static async enable() { const platform = constants_1.default.platform(); let cmd = ""; switch (platform) { case "windows": cmd = `schtasks /Create /TN "${SERVICE_NAME}" /TR "${command} ${commandArgs.join(" ")}" /SC ONSTART /RL HIGHEST /RU SYSTEM /F`; break; case "linux": const cronLine = `@reboot ${command} ${commandArgs.join(" ")}`; cmd = `crontab -l | grep -v '${commandArgs[0]}' | { cat; echo '${cronLine}'; } | crontab -`; break; case "mac": const plistPath = path_1.default.join(os_1.default.homedir(), "Library", "LaunchAgents", "com.local.reboot.plist"); const plist = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.local.reboot</string> <key>ProgramArguments</key> <array> <string>${command}</string> ${commandArgs.map((arg) => `<string>${arg}</string>`).join("\n ")} </array> <key>RunAtLoad</key> <true/> </dict> </plist>`; fs_1.default.writeFileSync(plistPath, plist); cmd = `launchctl load "${plistPath}"`; break; default: throw new Error("Unknown platform"); } try { await execSudo(cmd); console.log("✅ Reboot task enabled."); } catch (err) { console.error("❌ Failed to enable reboot task:", err); } } static async disable() { const platform = constants_1.default.platform(); let cmd = ""; switch (platform) { case "windows": cmd = `schtasks /Delete /TN "${SERVICE_NAME}" /F`; break; case "linux": cmd = `crontab -l | grep -v '${commandArgs[0]}' | crontab -`; break; case "mac": const plistPath = path_1.default.join(os_1.default.homedir(), "Library", "LaunchAgents", "com.local.reboot.plist"); cmd = `launchctl unload "${plistPath}" && rm "${plistPath}"`; break; default: throw new Error("Unknown platform"); } try { await execSudo(cmd); console.log("✅ Reboot task disabled."); } catch (err) { console.error("❌ Failed to disable reboot task:", err); } } static async status() { const platform = constants_1.default.platform(); try { switch (platform) { case "linux": { const output = (0, child_process_1.execSync)("crontab -l", { encoding: "utf-8" }); console.log(output.includes(commandArgs[0]) ? "enabled" : "disabled"); break; } case "windows": { try { const output = (0, child_process_1.execSync)(`schtasks /Query /TN "${SERVICE_NAME}"`, { encoding: "utf-8", }); console.log(output.includes(SERVICE_NAME) ? "enabled" : "disabled"); } catch { console.log("disabled"); } break; } case "mac": { const plistPath = path_1.default.join(os_1.default.homedir(), "Library", "LaunchAgents", "com.local.reboot.plist"); console.log(fs_1.default.existsSync(plistPath) ? "enabled" : "disabled"); break; } default: throw new Error("Unknown platform"); } } catch (err) { console.error("❌ Failed to check status:", err); } } } exports.default = Startup;