locadot
Version:
Secure your local development environment with HTTPS and custom domains like dev.localhost.
135 lines (134 loc) • 5.21 kB
JavaScript
;
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;