@questionbase/deskfree 0.3.0-alpha.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ declare function install(token: string): void;
2
+
3
+ export { install };
@@ -0,0 +1,53 @@
1
+ import { createRequire } from 'node:module';
2
+ import { execSync } from 'child_process';
3
+ import { writeFileSync, chmodSync } from 'fs';
4
+
5
+ createRequire(import.meta.url);
6
+ var SERVICE_NAME = "deskfree-agent";
7
+ var SERVICE_FILE = `/etc/systemd/system/${SERVICE_NAME}.service`;
8
+ var ENV_FILE = `/etc/${SERVICE_NAME}.env`;
9
+ var PACKAGE = "@questionbase/deskfree@latest";
10
+ function install(token) {
11
+ if (process.getuid?.() !== 0) {
12
+ console.error("Error: install must be run as root (use sudo)");
13
+ process.exit(1);
14
+ }
15
+ let npxPath;
16
+ try {
17
+ npxPath = execSync("which npx", { encoding: "utf8" }).trim();
18
+ } catch {
19
+ console.error("Error: npx not found in PATH");
20
+ process.exit(1);
21
+ }
22
+ writeFileSync(ENV_FILE, `DESKFREE_LAUNCH=${token}
23
+ `, { mode: 384 });
24
+ chmodSync(ENV_FILE, 384);
25
+ console.log(`Wrote ${ENV_FILE}`);
26
+ const unit = `[Unit]
27
+ Description=DeskFree Agent
28
+ After=network-online.target
29
+ Wants=network-online.target
30
+
31
+ [Service]
32
+ Type=simple
33
+ ExecStart=${npxPath} ${PACKAGE} start
34
+ EnvironmentFile=${ENV_FILE}
35
+ Environment=NODE_ENV=production
36
+ Restart=always
37
+ RestartSec=10
38
+
39
+ [Install]
40
+ WantedBy=multi-user.target
41
+ `;
42
+ writeFileSync(SERVICE_FILE, unit);
43
+ console.log(`Wrote ${SERVICE_FILE}`);
44
+ execSync("systemctl daemon-reload");
45
+ execSync(`systemctl enable ${SERVICE_NAME}`);
46
+ execSync(`systemctl start ${SERVICE_NAME}`);
47
+ console.log(`Service ${SERVICE_NAME} installed and started.`);
48
+ console.log(`Check status: systemctl status ${SERVICE_NAME}`);
49
+ }
50
+
51
+ export { install };
52
+ //# sourceMappingURL=install.js.map
53
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/install.ts"],"names":[],"mappings":";;;;;AAGA,IAAM,YAAA,GAAe,gBAAA;AACrB,IAAM,YAAA,GAAe,uBAAuB,YAAY,CAAA,QAAA,CAAA;AACxD,IAAM,QAAA,GAAW,QAAQ,YAAY,CAAA,IAAA,CAAA;AACrC,IAAM,OAAA,GAAU,+BAAA;AAET,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAS,KAAM,CAAA,EAAG;AAC5B,IAAA,OAAA,CAAQ,MAAM,+CAA+C,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,SAAS,WAAA,EAAa,EAAE,UAAU,MAAA,EAAQ,EAAE,IAAA,EAAK;AAAA,EAC7D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,MAAM,8BAA8B,CAAA;AAC5C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,aAAA,CAAc,QAAA,EAAU,mBAAmB,KAAK;AAAA,CAAA,EAAM,EAAE,IAAA,EAAM,GAAA,EAAO,CAAA;AACrE,EAAA,SAAA,CAAU,UAAU,GAAK,CAAA;AACzB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAE,CAAA;AAG/B,EAAA,MAAM,IAAA,GAAO,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,UAAA,EAOH,OAAO,IAAI,OAAO,CAAA;AAAA,gBAAA,EACZ,QAAQ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AASxB,EAAA,aAAA,CAAc,cAAc,IAAI,CAAA;AAChC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,EAAS,YAAY,CAAA,CAAE,CAAA;AAGnC,EAAA,QAAA,CAAS,yBAAyB,CAAA;AAClC,EAAA,QAAA,CAAS,CAAA,iBAAA,EAAoB,YAAY,CAAA,CAAE,CAAA;AAC3C,EAAA,QAAA,CAAS,CAAA,gBAAA,EAAmB,YAAY,CAAA,CAAE,CAAA;AAE1C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,YAAY,CAAA,uBAAA,CAAyB,CAAA;AAC5D,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAE,CAAA;AAC9D","file":"install.js","sourcesContent":["import { execSync } from 'node:child_process';\nimport { chmodSync, writeFileSync } from 'node:fs';\n\nconst SERVICE_NAME = 'deskfree-agent';\nconst SERVICE_FILE = `/etc/systemd/system/${SERVICE_NAME}.service`;\nconst ENV_FILE = `/etc/${SERVICE_NAME}.env`;\nconst PACKAGE = '@questionbase/deskfree@latest';\n\nexport function install(token: string): void {\n if (process.getuid?.() !== 0) {\n console.error('Error: install must be run as root (use sudo)');\n process.exit(1);\n }\n\n // Resolve full npx path so systemd doesn't depend on PATH\n let npxPath: string;\n try {\n npxPath = execSync('which npx', { encoding: 'utf8' }).trim();\n } catch {\n console.error('Error: npx not found in PATH');\n process.exit(1);\n }\n\n // Write env file with token (chmod 600 — only root can read)\n writeFileSync(ENV_FILE, `DESKFREE_LAUNCH=${token}\\n`, { mode: 0o600 });\n chmodSync(ENV_FILE, 0o600);\n console.log(`Wrote ${ENV_FILE}`);\n\n // Write systemd unit file\n const unit = `[Unit]\nDescription=DeskFree Agent\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nExecStart=${npxPath} ${PACKAGE} start\nEnvironmentFile=${ENV_FILE}\nEnvironment=NODE_ENV=production\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n`;\n\n writeFileSync(SERVICE_FILE, unit);\n console.log(`Wrote ${SERVICE_FILE}`);\n\n // Enable and start\n execSync('systemctl daemon-reload');\n execSync(`systemctl enable ${SERVICE_NAME}`);\n execSync(`systemctl start ${SERVICE_NAME}`);\n\n console.log(`Service ${SERVICE_NAME} installed and started.`);\n console.log(`Check status: systemctl status ${SERVICE_NAME}`);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ declare function uninstall(): void;
2
+
3
+ export { uninstall };
@@ -0,0 +1,36 @@
1
+ import { createRequire } from 'node:module';
2
+ import { execSync } from 'child_process';
3
+ import { existsSync, unlinkSync } from 'fs';
4
+
5
+ createRequire(import.meta.url);
6
+ var SERVICE_NAME = "deskfree-agent";
7
+ var SERVICE_FILE = `/etc/systemd/system/${SERVICE_NAME}.service`;
8
+ var ENV_FILE = `/etc/${SERVICE_NAME}.env`;
9
+ function uninstall() {
10
+ if (process.getuid?.() !== 0) {
11
+ console.error("Error: uninstall must be run as root (use sudo)");
12
+ process.exit(1);
13
+ }
14
+ try {
15
+ execSync(`systemctl stop ${SERVICE_NAME}`, { stdio: "ignore" });
16
+ } catch {
17
+ }
18
+ try {
19
+ execSync(`systemctl disable ${SERVICE_NAME}`, { stdio: "ignore" });
20
+ } catch {
21
+ }
22
+ if (existsSync(SERVICE_FILE)) {
23
+ unlinkSync(SERVICE_FILE);
24
+ console.log(`Removed ${SERVICE_FILE}`);
25
+ }
26
+ if (existsSync(ENV_FILE)) {
27
+ unlinkSync(ENV_FILE);
28
+ console.log(`Removed ${ENV_FILE}`);
29
+ }
30
+ execSync("systemctl daemon-reload");
31
+ console.log(`Service ${SERVICE_NAME} uninstalled.`);
32
+ }
33
+
34
+ export { uninstall };
35
+ //# sourceMappingURL=uninstall.js.map
36
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":";;;;;AAGA,IAAM,YAAA,GAAe,gBAAA;AACrB,IAAM,YAAA,GAAe,uBAAuB,YAAY,CAAA,QAAA,CAAA;AACxD,IAAM,QAAA,GAAW,QAAQ,YAAY,CAAA,IAAA,CAAA;AAE9B,SAAS,SAAA,GAAkB;AAChC,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAS,KAAM,CAAA,EAAG;AAC5B,IAAA,OAAA,CAAQ,MAAM,iDAAiD,CAAA;AAC/D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,kBAAkB,YAAY,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,EAChE,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,qBAAqB,YAAY,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,EACnE,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI,UAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,IAAA,UAAA,CAAW,YAAY,CAAA;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,YAAY,CAAA,CAAE,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,IAAA,UAAA,CAAW,QAAQ,CAAA;AACnB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,QAAQ,CAAA,CAAE,CAAA;AAAA,EACnC;AAEA,EAAA,QAAA,CAAS,yBAAyB,CAAA;AAClC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,YAAY,CAAA,aAAA,CAAe,CAAA;AACpD","file":"uninstall.js","sourcesContent":["import { execSync } from 'node:child_process';\nimport { existsSync, unlinkSync } from 'node:fs';\n\nconst SERVICE_NAME = 'deskfree-agent';\nconst SERVICE_FILE = `/etc/systemd/system/${SERVICE_NAME}.service`;\nconst ENV_FILE = `/etc/${SERVICE_NAME}.env`;\n\nexport function uninstall(): void {\n if (process.getuid?.() !== 0) {\n console.error('Error: uninstall must be run as root (use sudo)');\n process.exit(1);\n }\n\n // Stop and disable (ignore errors if not running/enabled)\n try {\n execSync(`systemctl stop ${SERVICE_NAME}`, { stdio: 'ignore' });\n } catch {\n // not running — fine\n }\n try {\n execSync(`systemctl disable ${SERVICE_NAME}`, { stdio: 'ignore' });\n } catch {\n // not enabled — fine\n }\n\n // Remove files\n if (existsSync(SERVICE_FILE)) {\n unlinkSync(SERVICE_FILE);\n console.log(`Removed ${SERVICE_FILE}`);\n }\n if (existsSync(ENV_FILE)) {\n unlinkSync(ENV_FILE);\n console.log(`Removed ${ENV_FILE}`);\n }\n\n execSync('systemctl daemon-reload');\n console.log(`Service ${SERVICE_NAME} uninstalled.`);\n}\n"]}