easyoref 1.23.1 → 1.23.3
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.
- package/dist/bin.d.ts +8 -8
- package/dist/bin.js +31 -25
- package/dist/bin.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +18 -3
- package/dist/init.js.map +1 -1
- package/dist/service.d.ts +32 -14
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +190 -78
- package/dist/service.js.map +1 -1
- package/package.json +1 -1
package/dist/bin.d.ts
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* easyoref — run the bot (foreground)
|
|
6
6
|
* easyoref run — same as above
|
|
7
7
|
* easyoref init — interactive setup wizard
|
|
8
|
-
* easyoref update — update to latest version
|
|
9
|
-
* easyoref install —
|
|
10
|
-
* easyoref uninstall
|
|
11
|
-
* easyoref start
|
|
12
|
-
* easyoref stop
|
|
13
|
-
* easyoref restart
|
|
14
|
-
* easyoref status
|
|
15
|
-
* easyoref logs
|
|
8
|
+
* easyoref update — update to latest version & restart all services
|
|
9
|
+
* easyoref install — install systemd service(s) for all configs in ~/.easyoref/
|
|
10
|
+
* easyoref uninstall [name] — remove service(s)
|
|
11
|
+
* easyoref start [name] — start service(s)
|
|
12
|
+
* easyoref stop [name] — stop service(s)
|
|
13
|
+
* easyoref restart [name] — restart service(s)
|
|
14
|
+
* easyoref status [name] — show service status
|
|
15
|
+
* easyoref logs [name] — follow service logs
|
|
16
16
|
*/
|
|
17
17
|
export {};
|
|
18
18
|
//# sourceMappingURL=bin.d.ts.map
|
package/dist/bin.js
CHANGED
|
@@ -5,17 +5,18 @@
|
|
|
5
5
|
* easyoref — run the bot (foreground)
|
|
6
6
|
* easyoref run — same as above
|
|
7
7
|
* easyoref init — interactive setup wizard
|
|
8
|
-
* easyoref update — update to latest version
|
|
9
|
-
* easyoref install —
|
|
10
|
-
* easyoref uninstall
|
|
11
|
-
* easyoref start
|
|
12
|
-
* easyoref stop
|
|
13
|
-
* easyoref restart
|
|
14
|
-
* easyoref status
|
|
15
|
-
* easyoref logs
|
|
8
|
+
* easyoref update — update to latest version & restart all services
|
|
9
|
+
* easyoref install — install systemd service(s) for all configs in ~/.easyoref/
|
|
10
|
+
* easyoref uninstall [name] — remove service(s)
|
|
11
|
+
* easyoref start [name] — start service(s)
|
|
12
|
+
* easyoref stop [name] — stop service(s)
|
|
13
|
+
* easyoref restart [name] — restart service(s)
|
|
14
|
+
* easyoref status [name] — show service status
|
|
15
|
+
* easyoref logs [name] — follow service logs
|
|
16
16
|
*/
|
|
17
17
|
import { execSync } from "node:child_process";
|
|
18
18
|
const command = process.argv[2];
|
|
19
|
+
const arg = process.argv[3]; // optional instance name for service commands
|
|
19
20
|
switch (command) {
|
|
20
21
|
case "init": {
|
|
21
22
|
const { init } = await import("./init.js");
|
|
@@ -38,8 +39,10 @@ switch (command) {
|
|
|
38
39
|
"-v easyoref-redis:/data " +
|
|
39
40
|
"redis:7-alpine redis-server --appendonly yes --maxmemory 64mb --maxmemory-policy allkeys-lru", { stdio: "inherit" });
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
// Restart all discovered instances
|
|
43
|
+
const svc = await import("./service.js");
|
|
44
|
+
console.log("\n → restarting all instances...");
|
|
45
|
+
svc.restart();
|
|
43
46
|
console.log("\n✅ EasyOref updated successfully!");
|
|
44
47
|
}
|
|
45
48
|
catch (err) {
|
|
@@ -55,32 +58,32 @@ switch (command) {
|
|
|
55
58
|
}
|
|
56
59
|
case "uninstall": {
|
|
57
60
|
const svc = await import("./service.js");
|
|
58
|
-
svc.uninstall();
|
|
61
|
+
svc.uninstall(arg);
|
|
59
62
|
break;
|
|
60
63
|
}
|
|
61
64
|
case "start": {
|
|
62
65
|
const svc = await import("./service.js");
|
|
63
|
-
svc.start();
|
|
66
|
+
svc.start(arg);
|
|
64
67
|
break;
|
|
65
68
|
}
|
|
66
69
|
case "stop": {
|
|
67
70
|
const svc = await import("./service.js");
|
|
68
|
-
svc.stop();
|
|
71
|
+
svc.stop(arg);
|
|
69
72
|
break;
|
|
70
73
|
}
|
|
71
74
|
case "restart": {
|
|
72
75
|
const svc = await import("./service.js");
|
|
73
|
-
svc.restart();
|
|
76
|
+
svc.restart(arg);
|
|
74
77
|
break;
|
|
75
78
|
}
|
|
76
79
|
case "status": {
|
|
77
80
|
const svc = await import("./service.js");
|
|
78
|
-
svc.status();
|
|
81
|
+
svc.status(arg);
|
|
79
82
|
break;
|
|
80
83
|
}
|
|
81
84
|
case "logs": {
|
|
82
85
|
const svc = await import("./service.js");
|
|
83
|
-
svc.logs();
|
|
86
|
+
svc.logs(arg);
|
|
84
87
|
break;
|
|
85
88
|
}
|
|
86
89
|
case "--help":
|
|
@@ -91,16 +94,19 @@ switch (command) {
|
|
|
91
94
|
Usage:
|
|
92
95
|
easyoref Run the bot (foreground)
|
|
93
96
|
easyoref init Interactive setup wizard
|
|
94
|
-
easyoref update Update to latest version
|
|
97
|
+
easyoref update Update to latest version & restart all services
|
|
95
98
|
|
|
96
|
-
Service management:
|
|
97
|
-
easyoref install
|
|
98
|
-
easyoref uninstall
|
|
99
|
-
easyoref start
|
|
100
|
-
easyoref stop
|
|
101
|
-
easyoref restart
|
|
102
|
-
easyoref status
|
|
103
|
-
easyoref logs
|
|
99
|
+
Service management (multi-instance aware):
|
|
100
|
+
easyoref install Install service(s) for all configs in ~/.easyoref/
|
|
101
|
+
easyoref uninstall [name] Remove service(s)
|
|
102
|
+
easyoref start [name] Start service(s)
|
|
103
|
+
easyoref stop [name] Stop service(s)
|
|
104
|
+
easyoref restart [name] Restart service(s)
|
|
105
|
+
easyoref status [name] Show service status
|
|
106
|
+
easyoref logs [name] Follow service logs
|
|
107
|
+
|
|
108
|
+
[name] is optional. If omitted, applies to all configured instances.
|
|
109
|
+
Example: easyoref restart ru_tlv-south
|
|
104
110
|
`);
|
|
105
111
|
break;
|
|
106
112
|
case "run":
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiG1C"}
|
package/dist/init.js
CHANGED
|
@@ -9,6 +9,7 @@ import { Bot } from "grammy";
|
|
|
9
9
|
import yaml from "js-yaml";
|
|
10
10
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
11
11
|
import { CONFIG_DIR, HOME_CONFIG_PATH } from "@easyoref/shared";
|
|
12
|
+
import { install } from "./service.js";
|
|
12
13
|
export async function init() {
|
|
13
14
|
console.log(chalk.bold("\n🚨 EasyOref Setup\n"));
|
|
14
15
|
// ── Guard: config already exists ─────────────────────
|
|
@@ -89,9 +90,19 @@ export async function init() {
|
|
|
89
90
|
console.log("");
|
|
90
91
|
console.log(chalk.green(`✅ ${t.saved} ${HOME_CONFIG_PATH}`));
|
|
91
92
|
console.log("");
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
// ── 5. Install service ────────────────────────────────
|
|
94
|
+
const shouldInstall = await confirm({
|
|
95
|
+
message: t.installPrompt,
|
|
96
|
+
default: true,
|
|
97
|
+
});
|
|
98
|
+
if (shouldInstall) {
|
|
99
|
+
install();
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(t.next);
|
|
103
|
+
console.log(` ${chalk.cyan("npx easyoref")}`);
|
|
104
|
+
console.log("");
|
|
105
|
+
}
|
|
95
106
|
}
|
|
96
107
|
// ── i18n strings for the wizard ────────────────────────
|
|
97
108
|
const STRINGS = {
|
|
@@ -110,6 +121,7 @@ const STRINGS = {
|
|
|
110
121
|
cityIdFormat: "Только цифры",
|
|
111
122
|
saved: "Конфиг сохранён →",
|
|
112
123
|
next: "Запустите бота:",
|
|
124
|
+
installPrompt: "⚙️ Установить как systemd-сервис сейчас?",
|
|
113
125
|
},
|
|
114
126
|
en: {
|
|
115
127
|
token: "🤖 Bot token (from @BotFather):",
|
|
@@ -126,6 +138,7 @@ const STRINGS = {
|
|
|
126
138
|
cityIdFormat: "Numbers only",
|
|
127
139
|
saved: "Config saved →",
|
|
128
140
|
next: "Start the bot:",
|
|
141
|
+
installPrompt: "⚙️ Install as a systemd service now?",
|
|
129
142
|
},
|
|
130
143
|
he: {
|
|
131
144
|
token: "🤖 טוקן בוט (מ-@BotFather):",
|
|
@@ -142,6 +155,7 @@ const STRINGS = {
|
|
|
142
155
|
cityIdFormat: "מספרים בלבד",
|
|
143
156
|
saved: "הגדרות נשמרו →",
|
|
144
157
|
next: "הפעילו את הבוט:",
|
|
158
|
+
installPrompt: "⚙️ להתקין כשירות systemd עכשיו?",
|
|
145
159
|
},
|
|
146
160
|
ar: {
|
|
147
161
|
token: "🤖 رمز البوت (من @BotFather):",
|
|
@@ -158,6 +172,7 @@ const STRINGS = {
|
|
|
158
172
|
cityIdFormat: "أرقام فقط",
|
|
159
173
|
saved: "تم حفظ الإعدادات →",
|
|
160
174
|
next: "شغّل البوت:",
|
|
175
|
+
installPrompt: "⚙️ هل تريد التثبيت كخدمة systemd الآن؟",
|
|
161
176
|
},
|
|
162
177
|
};
|
|
163
178
|
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,19 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EasyOref — systemd service management (
|
|
2
|
+
* EasyOref — systemd service management (multi-instance aware)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* easyoref
|
|
10
|
-
* easyoref
|
|
4
|
+
* Discovers all config files in ~/.easyoref/:
|
|
5
|
+
* config.yaml → service "easyoref" (legacy / single-instance)
|
|
6
|
+
* config.{name}.yaml → service "easyoref-{name}" (named instances)
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* easyoref install — install all discovered instances
|
|
10
|
+
* easyoref uninstall [name] — uninstall all (or one)
|
|
11
|
+
* easyoref start [name] — start all (or one)
|
|
12
|
+
* easyoref stop [name] — stop all (or one)
|
|
13
|
+
* easyoref restart [name] — restart all (or one)
|
|
14
|
+
* easyoref status [name] — show status for all (or one)
|
|
15
|
+
* easyoref logs [name] — follow logs for one (or first discovered)
|
|
16
|
+
*/
|
|
17
|
+
export declare const CONFIG_DIR: string;
|
|
18
|
+
export interface ServiceInstance {
|
|
19
|
+
/** systemd service name, e.g. "easyoref" or "easyoref-ru_tlv-south" */
|
|
20
|
+
serviceName: string;
|
|
21
|
+
/** absolute path to config file */
|
|
22
|
+
configPath: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Scans ~/.easyoref/ and returns one ServiceInstance per config file found.
|
|
26
|
+
* config.yaml → { serviceName: "easyoref", ... }
|
|
27
|
+
* config.{name}.yaml → { serviceName: "easyoref-{name}", ... }
|
|
11
28
|
*/
|
|
29
|
+
export declare function discoverInstances(): ServiceInstance[];
|
|
12
30
|
export declare function install(): void;
|
|
13
|
-
export declare function uninstall(): void;
|
|
14
|
-
export declare function start(): void;
|
|
15
|
-
export declare function stop(): void;
|
|
16
|
-
export declare function restart(): void;
|
|
17
|
-
export declare function status(): void;
|
|
18
|
-
export declare function logs(): void;
|
|
31
|
+
export declare function uninstall(name?: string): void;
|
|
32
|
+
export declare function start(name?: string): void;
|
|
33
|
+
export declare function stop(name?: string): void;
|
|
34
|
+
export declare function restart(name?: string): void;
|
|
35
|
+
export declare function status(name?: string): void;
|
|
36
|
+
export declare function logs(name?: string): void;
|
|
19
37
|
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,eAAO,MAAM,UAAU,QAA+B,CAAC;AAKvD,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAkCrD;AA0FD,wBAAgB,OAAO,IAAI,IAAI,CAyD9B;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAwB7C;AAED,wBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAezC;AAED,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAexC;AAED,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAe3C;AAED,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAW1C;AAED,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAaxC"}
|
package/dist/service.js
CHANGED
|
@@ -1,28 +1,68 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EasyOref — systemd service management (
|
|
2
|
+
* EasyOref — systemd service management (multi-instance aware)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* easyoref
|
|
10
|
-
* easyoref
|
|
4
|
+
* Discovers all config files in ~/.easyoref/:
|
|
5
|
+
* config.yaml → service "easyoref" (legacy / single-instance)
|
|
6
|
+
* config.{name}.yaml → service "easyoref-{name}" (named instances)
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* easyoref install — install all discovered instances
|
|
10
|
+
* easyoref uninstall [name] — uninstall all (or one)
|
|
11
|
+
* easyoref start [name] — start all (or one)
|
|
12
|
+
* easyoref stop [name] — stop all (or one)
|
|
13
|
+
* easyoref restart [name] — restart all (or one)
|
|
14
|
+
* easyoref status [name] — show status for all (or one)
|
|
15
|
+
* easyoref logs [name] — follow logs for one (or first discovered)
|
|
11
16
|
*/
|
|
12
17
|
import { execSync, spawnSync } from "node:child_process";
|
|
13
|
-
import { existsSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { existsSync, readdirSync, writeFileSync } from "node:fs";
|
|
14
19
|
import { homedir } from "node:os";
|
|
15
20
|
import { join } from "node:path";
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
export const CONFIG_DIR = join(homedir(), ".easyoref");
|
|
22
|
+
const SYSTEMD_DIR = "/etc/systemd/system";
|
|
23
|
+
/**
|
|
24
|
+
* Scans ~/.easyoref/ and returns one ServiceInstance per config file found.
|
|
25
|
+
* config.yaml → { serviceName: "easyoref", ... }
|
|
26
|
+
* config.{name}.yaml → { serviceName: "easyoref-{name}", ... }
|
|
27
|
+
*/
|
|
28
|
+
export function discoverInstances() {
|
|
29
|
+
if (!existsSync(CONFIG_DIR))
|
|
30
|
+
return [];
|
|
31
|
+
const instances = [];
|
|
32
|
+
// Named configs first: config.*.yaml
|
|
33
|
+
try {
|
|
34
|
+
const files = readdirSync(CONFIG_DIR);
|
|
35
|
+
for (const f of files.sort()) {
|
|
36
|
+
const m = f.match(/^config\.(.+)\.ya?ml$/);
|
|
37
|
+
if (m) {
|
|
38
|
+
instances.push({
|
|
39
|
+
serviceName: `easyoref-${m[1]}`,
|
|
40
|
+
configPath: join(CONFIG_DIR, f),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// ignore read errors
|
|
47
|
+
}
|
|
48
|
+
// Legacy single-instance: config.yaml (only if no named configs)
|
|
49
|
+
const legacyPath = join(CONFIG_DIR, "config.yaml");
|
|
50
|
+
const legacyPathYml = join(CONFIG_DIR, "config.yml");
|
|
51
|
+
const legacyExists = existsSync(legacyPath) || existsSync(legacyPathYml);
|
|
52
|
+
if (legacyExists && instances.length === 0) {
|
|
53
|
+
instances.push({
|
|
54
|
+
serviceName: "easyoref",
|
|
55
|
+
configPath: existsSync(legacyPath) ? legacyPath : legacyPathYml,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return instances;
|
|
59
|
+
}
|
|
60
|
+
// ── Helpers ───────────────────────────────────────────────
|
|
20
61
|
function whichBin() {
|
|
21
62
|
try {
|
|
22
63
|
return execSync("which easyoref", { encoding: "utf-8" }).trim();
|
|
23
64
|
}
|
|
24
65
|
catch {
|
|
25
|
-
// Fallback: resolve from npm global
|
|
26
66
|
try {
|
|
27
67
|
return execSync("npm bin -g", { encoding: "utf-8" }).trim() + "/easyoref";
|
|
28
68
|
}
|
|
@@ -39,36 +79,27 @@ function whichNode() {
|
|
|
39
79
|
return "/usr/bin/node";
|
|
40
80
|
}
|
|
41
81
|
}
|
|
42
|
-
function isRoot() {
|
|
43
|
-
return process.getuid?.() === 0;
|
|
44
|
-
}
|
|
45
82
|
function sudoExec(cmd) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
});
|
|
83
|
+
const parts = cmd.split(" ");
|
|
84
|
+
const result = spawnSync("sudo", parts, { stdio: "inherit" });
|
|
49
85
|
if (result.status !== 0) {
|
|
50
86
|
console.error(`❌ Command failed: sudo ${cmd}`);
|
|
51
87
|
process.exit(1);
|
|
52
88
|
}
|
|
53
89
|
}
|
|
54
|
-
function
|
|
55
|
-
|
|
56
|
-
stdio: "inherit",
|
|
57
|
-
});
|
|
58
|
-
if (result.status !== 0) {
|
|
59
|
-
process.exit(result.status ?? 1);
|
|
60
|
-
}
|
|
90
|
+
function unitPath(serviceName) {
|
|
91
|
+
return join(SYSTEMD_DIR, `${serviceName}.service`);
|
|
61
92
|
}
|
|
62
|
-
function isInstalled() {
|
|
63
|
-
return existsSync(
|
|
93
|
+
function isInstalled(serviceName) {
|
|
94
|
+
return existsSync(unitPath(serviceName));
|
|
64
95
|
}
|
|
65
|
-
function generateUnit() {
|
|
96
|
+
function generateUnit(instance) {
|
|
66
97
|
const bin = whichBin();
|
|
67
98
|
const node = whichNode();
|
|
68
99
|
const user = process.env.USER || process.env.LOGNAME || "pi";
|
|
69
100
|
const home = homedir();
|
|
70
101
|
return `[Unit]
|
|
71
|
-
Description=EasyOref
|
|
102
|
+
Description=EasyOref — ${instance.serviceName}
|
|
72
103
|
After=network-online.target
|
|
73
104
|
Wants=network-online.target
|
|
74
105
|
|
|
@@ -77,89 +108,170 @@ Type=simple
|
|
|
77
108
|
User=${user}
|
|
78
109
|
Environment=HOME=${home}
|
|
79
110
|
Environment=NODE_ENV=production
|
|
111
|
+
Environment=EASYOREF_CONFIG=${instance.configPath}
|
|
80
112
|
ExecStart=${node} ${bin} run
|
|
81
113
|
WorkingDirectory=${home}
|
|
82
114
|
Restart=always
|
|
83
115
|
RestartSec=10
|
|
116
|
+
StandardOutput=journal
|
|
117
|
+
StandardError=journal
|
|
84
118
|
|
|
85
119
|
[Install]
|
|
86
120
|
WantedBy=multi-user.target
|
|
87
121
|
`;
|
|
88
122
|
}
|
|
89
|
-
|
|
123
|
+
function filterByName(instances, name) {
|
|
124
|
+
if (!name)
|
|
125
|
+
return instances;
|
|
126
|
+
// Accept short name ("ru_tlv-south") or full service name ("easyoref-ru_tlv-south")
|
|
127
|
+
const fullName = name.startsWith("easyoref") ? name : `easyoref-${name}`;
|
|
128
|
+
const found = instances.filter((i) => i.serviceName === fullName);
|
|
129
|
+
if (found.length === 0) {
|
|
130
|
+
console.error(`❌ No instance found for: ${name}`);
|
|
131
|
+
console.error(` Known instances: ${instances.map((i) => i.serviceName).join(", ")}`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
return found;
|
|
135
|
+
}
|
|
136
|
+
// ── Commands ──────────────────────────────────────────────
|
|
90
137
|
export function install() {
|
|
91
|
-
|
|
92
|
-
|
|
138
|
+
const instances = discoverInstances();
|
|
139
|
+
if (instances.length === 0) {
|
|
140
|
+
console.error(`❌ No config files found in ${CONFIG_DIR}`);
|
|
93
141
|
console.error(` Run: easyoref init`);
|
|
94
142
|
process.exit(1);
|
|
95
143
|
}
|
|
96
|
-
console.log(`📦 Installing ${
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
144
|
+
console.log(`📦 Installing ${instances.length} EasyOref service(s)...\n`);
|
|
145
|
+
// Stop + disable any stale installed easyoref* units not in current set
|
|
146
|
+
try {
|
|
147
|
+
const installed = readdirSync(SYSTEMD_DIR).filter((f) => f.startsWith("easyoref") && f.endsWith(".service"));
|
|
148
|
+
const newNames = new Set(instances.map((i) => `${i.serviceName}.service`));
|
|
149
|
+
for (const stale of installed) {
|
|
150
|
+
if (!newNames.has(stale)) {
|
|
151
|
+
const name = stale.replace(".service", "");
|
|
152
|
+
console.log(` 🗑 Removing stale service: ${name}`);
|
|
153
|
+
try {
|
|
154
|
+
sudoExec(`systemctl stop ${name}`);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// ignore if not running
|
|
158
|
+
}
|
|
159
|
+
sudoExec(`systemctl disable ${name}`);
|
|
160
|
+
sudoExec(`rm ${join(SYSTEMD_DIR, stale)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// /etc/systemd/system may not be readable without sudo — skip stale cleanup
|
|
166
|
+
}
|
|
167
|
+
for (const instance of instances) {
|
|
168
|
+
const unit = generateUnit(instance);
|
|
169
|
+
const tmpPath = `/tmp/${instance.serviceName}.service`;
|
|
170
|
+
writeFileSync(tmpPath, unit);
|
|
171
|
+
sudoExec(`cp ${tmpPath} ${unitPath(instance.serviceName)}`);
|
|
172
|
+
console.log(` ✓ Unit written: ${unitPath(instance.serviceName)}`);
|
|
173
|
+
}
|
|
101
174
|
sudoExec("systemctl daemon-reload");
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
175
|
+
for (const instance of instances) {
|
|
176
|
+
sudoExec(`systemctl enable ${instance.serviceName}`);
|
|
177
|
+
sudoExec(`systemctl restart ${instance.serviceName}`);
|
|
178
|
+
console.log(` ✓ ${instance.serviceName} enabled & started`);
|
|
179
|
+
console.log(` Config: ${instance.configPath}`);
|
|
180
|
+
}
|
|
181
|
+
console.log(`\n✅ All services installed and running`);
|
|
106
182
|
console.log(` Logs: easyoref logs`);
|
|
107
183
|
console.log(` Status: easyoref status`);
|
|
108
184
|
}
|
|
109
|
-
export function uninstall() {
|
|
110
|
-
|
|
111
|
-
|
|
185
|
+
export function uninstall(name) {
|
|
186
|
+
const all = discoverInstances();
|
|
187
|
+
const targets = name ? filterByName(all, name) : all;
|
|
188
|
+
if (targets.length === 0) {
|
|
189
|
+
// Fall back to any installed easyoref* units even if configs are missing
|
|
190
|
+
console.log("ℹ️ No config-based instances found. Nothing to uninstall.");
|
|
112
191
|
return;
|
|
113
192
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
193
|
+
for (const instance of targets) {
|
|
194
|
+
if (!isInstalled(instance.serviceName)) {
|
|
195
|
+
console.log(`ℹ️ ${instance.serviceName}: not installed`);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
console.log(`🗑 Removing ${instance.serviceName}...`);
|
|
199
|
+
sudoExec(`systemctl stop ${instance.serviceName}`);
|
|
200
|
+
sudoExec(`systemctl disable ${instance.serviceName}`);
|
|
201
|
+
sudoExec(`rm ${unitPath(instance.serviceName)}`);
|
|
202
|
+
console.log(` ✓ Removed`);
|
|
203
|
+
}
|
|
118
204
|
sudoExec("systemctl daemon-reload");
|
|
119
|
-
console.log("✅
|
|
205
|
+
console.log("✅ Done");
|
|
120
206
|
}
|
|
121
|
-
export function start() {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
install
|
|
207
|
+
export function start(name) {
|
|
208
|
+
const all = discoverInstances();
|
|
209
|
+
if (all.length === 0) {
|
|
210
|
+
console.log("Service not installed — run: easyoref install");
|
|
125
211
|
return;
|
|
126
212
|
}
|
|
127
|
-
|
|
128
|
-
|
|
213
|
+
const targets = filterByName(all, name);
|
|
214
|
+
for (const instance of targets) {
|
|
215
|
+
if (!isInstalled(instance.serviceName)) {
|
|
216
|
+
console.log(` ${instance.serviceName}: not installed, skipping`);
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
sudoExec(`systemctl start ${instance.serviceName}`);
|
|
220
|
+
console.log(` ✓ Started: ${instance.serviceName}`);
|
|
221
|
+
}
|
|
129
222
|
}
|
|
130
|
-
export function stop() {
|
|
131
|
-
|
|
132
|
-
|
|
223
|
+
export function stop(name) {
|
|
224
|
+
const all = discoverInstances();
|
|
225
|
+
if (all.length === 0) {
|
|
226
|
+
console.log("ℹ️ No instances configured");
|
|
133
227
|
return;
|
|
134
228
|
}
|
|
135
|
-
|
|
136
|
-
|
|
229
|
+
const targets = filterByName(all, name);
|
|
230
|
+
for (const instance of targets) {
|
|
231
|
+
if (!isInstalled(instance.serviceName)) {
|
|
232
|
+
console.log(` ${instance.serviceName}: not installed, skipping`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
sudoExec(`systemctl stop ${instance.serviceName}`);
|
|
236
|
+
console.log(` ✓ Stopped: ${instance.serviceName}`);
|
|
237
|
+
}
|
|
137
238
|
}
|
|
138
|
-
export function restart() {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
install
|
|
239
|
+
export function restart(name) {
|
|
240
|
+
const all = discoverInstances();
|
|
241
|
+
if (all.length === 0) {
|
|
242
|
+
console.log("No instances configured — run: easyoref install");
|
|
142
243
|
return;
|
|
143
244
|
}
|
|
144
|
-
|
|
145
|
-
|
|
245
|
+
const targets = filterByName(all, name);
|
|
246
|
+
for (const instance of targets) {
|
|
247
|
+
if (!isInstalled(instance.serviceName)) {
|
|
248
|
+
console.log(` ${instance.serviceName}: not installed, skipping`);
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
sudoExec(`systemctl restart ${instance.serviceName}`);
|
|
252
|
+
console.log(` ✓ Restarted: ${instance.serviceName}`);
|
|
253
|
+
}
|
|
146
254
|
}
|
|
147
|
-
export function status() {
|
|
148
|
-
|
|
149
|
-
|
|
255
|
+
export function status(name) {
|
|
256
|
+
const all = discoverInstances();
|
|
257
|
+
if (all.length === 0) {
|
|
258
|
+
console.log("ℹ️ No instances configured. Run: easyoref install");
|
|
150
259
|
return;
|
|
151
260
|
}
|
|
152
|
-
|
|
261
|
+
const targets = filterByName(all, name);
|
|
262
|
+
const names = targets.map((i) => i.serviceName);
|
|
263
|
+
spawnSync("systemctl", ["status", ...names, "--no-pager", "-l"], {
|
|
153
264
|
stdio: "inherit",
|
|
154
265
|
});
|
|
155
266
|
}
|
|
156
|
-
export function logs() {
|
|
157
|
-
|
|
158
|
-
|
|
267
|
+
export function logs(name) {
|
|
268
|
+
const all = discoverInstances();
|
|
269
|
+
if (all.length === 0) {
|
|
270
|
+
console.log("ℹ️ No instances configured. Run: easyoref install");
|
|
159
271
|
return;
|
|
160
272
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
273
|
+
// logs follows a single unit; pick the specified one or the first
|
|
274
|
+
const target = name ? filterByName(all, name)[0] : all[0];
|
|
275
|
+
spawnSync("journalctl", ["-u", target.serviceName, "-f", "--no-pager", "-o", "cat"], { stdio: "inherit" });
|
|
164
276
|
}
|
|
165
277
|
//# sourceMappingURL=service.js.map
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|