easyoref 1.23.0 → 1.23.2

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 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 — create systemd service + start
10
- * easyoref uninstall — remove systemd service
11
- * easyoref start — start service
12
- * easyoref stop — stop service
13
- * easyoref restart — restart service
14
- * easyoref status — show service status
15
- * easyoref logs — follow service 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 — create systemd service + start
10
- * easyoref uninstall — remove systemd service
11
- * easyoref start — start service
12
- * easyoref stop — stop service
13
- * easyoref restart — restart service
14
- * easyoref status — show service status
15
- * easyoref logs — follow service 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
- console.log("\n → sudo systemctl restart easyoref");
42
- execSync("sudo systemctl restart easyoref", { stdio: "inherit" });
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 Create systemd service & start
98
- easyoref uninstall Remove systemd service
99
- easyoref start Start service
100
- easyoref stop Stop service
101
- easyoref restart Restart service
102
- easyoref status Show service status
103
- easyoref logs Follow service 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":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAsF1C"}
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
- console.log(t.next);
93
- console.log(` ${chalk.cyan("npx easyoref")}`);
94
- console.log("");
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":"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"}
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 (à la Homebridge)
2
+ * EasyOref — systemd service management (multi-instance aware)
3
3
  *
4
- * easyoref install — create & enable systemd service, then start
5
- * easyoref uninstall stop & remove systemd service
6
- * easyoref start — start the service (install first if needed)
7
- * easyoref stop — stop the service
8
- * easyoref restart — restart the service
9
- * easyoref status show service status
10
- * easyoref logs follow journal logs
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
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwFH,wBAAgB,OAAO,IAAI,IAAI,CAsB9B;AAED,wBAAgB,SAAS,IAAI,IAAI,CAchC;AAED,wBAAgB,KAAK,IAAI,IAAI,CAQ5B;AAED,wBAAgB,IAAI,IAAI,IAAI,CAO3B;AAED,wBAAgB,OAAO,IAAI,IAAI,CAQ9B;AAED,wBAAgB,MAAM,IAAI,IAAI,CAQ7B;AAED,wBAAgB,IAAI,IAAI,IAAI,CAY3B"}
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 (à la Homebridge)
2
+ * EasyOref — systemd service management (multi-instance aware)
3
3
  *
4
- * easyoref install — create & enable systemd service, then start
5
- * easyoref uninstall stop & remove systemd service
6
- * easyoref start — start the service (install first if needed)
7
- * easyoref stop — stop the service
8
- * easyoref restart — restart the service
9
- * easyoref status show service status
10
- * easyoref logs follow journal logs
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 SERVICE_NAME = "easyoref";
17
- const UNIT_PATH = `/etc/systemd/system/${SERVICE_NAME}.service`;
18
- const CONFIG_DIR = join(homedir(), ".easyoref");
19
- const CONFIG_PATH = join(CONFIG_DIR, "config.yaml");
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 result = spawnSync("sudo", cmd.split(" "), {
47
- stdio: "inherit",
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 exec(cmd) {
55
- const result = spawnSync(cmd.split(" ")[0], cmd.split(" ").slice(1), {
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(UNIT_PATH);
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 Telegram Bot
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
- // ── Commands ─────────────────────────────────────────────
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
- if (!existsSync(CONFIG_PATH)) {
92
- console.error(`❌ Config not found at ${CONFIG_PATH}`);
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 ${SERVICE_NAME} systemd service...`);
97
- const unit = generateUnit();
98
- const tmpPath = `/tmp/${SERVICE_NAME}.service`;
99
- writeFileSync(tmpPath, unit);
100
- sudoExec(`cp ${tmpPath} ${UNIT_PATH}`);
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
- sudoExec(`systemctl enable ${SERVICE_NAME}`);
103
- sudoExec(`systemctl start ${SERVICE_NAME}`);
104
- console.log(`✅ Service installed and started`);
105
- console.log(` Config: ${CONFIG_PATH}`);
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
- if (!isInstalled()) {
111
- console.log("ℹ️ Service not installed");
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
- console.log(`🗑 Removing ${SERVICE_NAME} systemd service...`);
115
- sudoExec(`systemctl stop ${SERVICE_NAME}`);
116
- sudoExec(`systemctl disable ${SERVICE_NAME}`);
117
- sudoExec(`rm ${UNIT_PATH}`);
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("✅ Service removed");
205
+ console.log("✅ Done");
120
206
  }
121
- export function start() {
122
- if (!isInstalled()) {
123
- console.log("Service not installed — installing first...");
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
- sudoExec(`systemctl start ${SERVICE_NAME}`);
128
- console.log("✅ Started");
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
- if (!isInstalled()) {
132
- console.log("ℹ️ Service not installed");
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
- sudoExec(`systemctl stop ${SERVICE_NAME}`);
136
- console.log("✅ Stopped");
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
- if (!isInstalled()) {
140
- console.log("Service not installed — installing first...");
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
- sudoExec(`systemctl restart ${SERVICE_NAME}`);
145
- console.log("✅ Restarted");
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
- if (!isInstalled()) {
149
- console.log("ℹ️ Service not installed. Run: easyoref install");
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
- spawnSync("systemctl", ["status", SERVICE_NAME, "--no-pager"], {
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
- if (!isInstalled()) {
158
- console.log("ℹ️ Service not installed. Run: easyoref install");
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
- spawnSync("journalctl", ["-u", SERVICE_NAME, "-f", "--no-pager", "-o", "cat"], {
162
- stdio: "inherit",
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
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyoref",
3
- "version": "1.23.0",
3
+ "version": "1.23.2",
4
4
  "description": "Real-time Israeli civil defense alerts → Telegram, filtered by your location",
5
5
  "type": "module",
6
6
  "bin": {