easyoref 1.1.0 → 1.2.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.
package/dist/bin.d.ts CHANGED
@@ -2,8 +2,16 @@
2
2
  /**
3
3
  * EasyOref CLI entrypoint.
4
4
  *
5
- * npx easyoref — run the bot
6
- * npx easyoref init interactive setup wizard
5
+ * easyoref — run the bot (foreground)
6
+ * easyoref run same as above
7
+ * easyoref init — interactive setup wizard
8
+ * easyoref install — create systemd service + start
9
+ * easyoref uninstall — remove systemd service
10
+ * easyoref start — start service (install if needed)
11
+ * easyoref stop — stop service
12
+ * easyoref restart — restart service
13
+ * easyoref status — show service status
14
+ * easyoref logs — follow service logs
7
15
  */
8
16
  export {};
9
17
  //# sourceMappingURL=bin.d.ts.map
package/dist/bin.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
package/dist/bin.js CHANGED
@@ -2,24 +2,81 @@
2
2
  /**
3
3
  * EasyOref CLI entrypoint.
4
4
  *
5
- * npx easyoref — run the bot
6
- * npx easyoref init interactive setup wizard
5
+ * easyoref — run the bot (foreground)
6
+ * easyoref run same as above
7
+ * easyoref init — interactive setup wizard
8
+ * easyoref install — create systemd service + start
9
+ * easyoref uninstall — remove systemd service
10
+ * easyoref start — start service (install if needed)
11
+ * easyoref stop — stop service
12
+ * easyoref restart — restart service
13
+ * easyoref status — show service status
14
+ * easyoref logs — follow service logs
7
15
  */
8
16
  const command = process.argv[2];
9
- if (command === "init") {
10
- const { init } = await import("./init.js");
11
- await init();
12
- }
13
- else if (command === "--help" || command === "-h") {
14
- console.log(`
17
+ switch (command) {
18
+ case "init": {
19
+ const { init } = await import("./init.js");
20
+ await init();
21
+ break;
22
+ }
23
+ case "install": {
24
+ const svc = await import("./service.js");
25
+ svc.install();
26
+ break;
27
+ }
28
+ case "uninstall": {
29
+ const svc = await import("./service.js");
30
+ svc.uninstall();
31
+ break;
32
+ }
33
+ case "start": {
34
+ const svc = await import("./service.js");
35
+ svc.start();
36
+ break;
37
+ }
38
+ case "stop": {
39
+ const svc = await import("./service.js");
40
+ svc.stop();
41
+ break;
42
+ }
43
+ case "restart": {
44
+ const svc = await import("./service.js");
45
+ svc.restart();
46
+ break;
47
+ }
48
+ case "status": {
49
+ const svc = await import("./service.js");
50
+ svc.status();
51
+ break;
52
+ }
53
+ case "logs": {
54
+ const svc = await import("./service.js");
55
+ svc.logs();
56
+ break;
57
+ }
58
+ case "--help":
59
+ case "-h":
60
+ console.log(`
61
+ EasyOref — Telegram alert bot for Israeli civil defense
62
+
15
63
  Usage:
16
- easyoref Start the bot
17
- easyoref init Interactive setup wizard
18
- easyoref --help Show this message
64
+ easyoref Run the bot (foreground)
65
+ easyoref init Interactive setup wizard
66
+
67
+ Service management:
68
+ easyoref install Create systemd service & start
69
+ easyoref uninstall Remove systemd service
70
+ easyoref start Start service (auto-install if needed)
71
+ easyoref stop Stop service
72
+ easyoref restart Restart service
73
+ easyoref status Show service status
74
+ easyoref logs Follow service logs
19
75
  `);
20
- }
21
- else {
22
- await import("./bot.js");
76
+ break;
77
+ case "run":
78
+ default:
79
+ await import("./bot.js");
23
80
  }
24
81
  export {};
25
82
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,IAAI,EAAE,CAAC;AACf,CAAC;KAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;AACH,CAAC;KAAM,CAAC;IACN,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,IAAI,EAAE,CAAC;QACb,MAAM;IACR,CAAC;IAED,KAAK,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,OAAO,EAAE,CAAC;QACd,MAAM;IACR,CAAC;IAED,KAAK,WAAW,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM;IACR,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,MAAM;IACR,CAAC;IAED,KAAK,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,OAAO,EAAE,CAAC;QACd,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,MAAM;IACR,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAef,CAAC,CAAC;QACC,MAAM;IAER,KAAK,KAAK,CAAC;IACX;QACE,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * EasyOref — systemd service management (à la Homebridge)
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
11
+ */
12
+ 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;
19
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * EasyOref — systemd service management (à la Homebridge)
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
11
+ */
12
+ import { execSync, spawnSync } from "node:child_process";
13
+ import { existsSync, writeFileSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ 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");
20
+ function whichBin() {
21
+ try {
22
+ return execSync("which easyoref", { encoding: "utf-8" }).trim();
23
+ }
24
+ catch {
25
+ // Fallback: resolve from npm global
26
+ try {
27
+ return execSync("npm bin -g", { encoding: "utf-8" }).trim() + "/easyoref";
28
+ }
29
+ catch {
30
+ return "/usr/bin/easyoref";
31
+ }
32
+ }
33
+ }
34
+ function whichNode() {
35
+ try {
36
+ return execSync("which node", { encoding: "utf-8" }).trim();
37
+ }
38
+ catch {
39
+ return "/usr/bin/node";
40
+ }
41
+ }
42
+ function isRoot() {
43
+ return process.getuid?.() === 0;
44
+ }
45
+ function sudoExec(cmd) {
46
+ const result = spawnSync("sudo", cmd.split(" "), {
47
+ stdio: "inherit",
48
+ });
49
+ if (result.status !== 0) {
50
+ console.error(`❌ Command failed: sudo ${cmd}`);
51
+ process.exit(1);
52
+ }
53
+ }
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
+ }
61
+ }
62
+ function isInstalled() {
63
+ return existsSync(UNIT_PATH);
64
+ }
65
+ function generateUnit() {
66
+ const bin = whichBin();
67
+ const node = whichNode();
68
+ const user = process.env.USER || process.env.LOGNAME || "pi";
69
+ const home = homedir();
70
+ return `[Unit]
71
+ Description=EasyOref Telegram Bot
72
+ After=network-online.target
73
+ Wants=network-online.target
74
+
75
+ [Service]
76
+ Type=simple
77
+ User=${user}
78
+ Environment=HOME=${home}
79
+ Environment=NODE_ENV=production
80
+ ExecStart=${node} ${bin} run
81
+ WorkingDirectory=${home}
82
+ Restart=always
83
+ RestartSec=10
84
+
85
+ [Install]
86
+ WantedBy=multi-user.target
87
+ `;
88
+ }
89
+ // ── Commands ─────────────────────────────────────────────
90
+ export function install() {
91
+ if (!existsSync(CONFIG_PATH)) {
92
+ console.error(`❌ Config not found at ${CONFIG_PATH}`);
93
+ console.error(` Run: easyoref init`);
94
+ process.exit(1);
95
+ }
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}`);
101
+ 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}`);
106
+ console.log(` Logs: easyoref logs`);
107
+ console.log(` Status: easyoref status`);
108
+ }
109
+ export function uninstall() {
110
+ if (!isInstalled()) {
111
+ console.log("ℹ️ Service not installed");
112
+ return;
113
+ }
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}`);
118
+ sudoExec("systemctl daemon-reload");
119
+ console.log("✅ Service removed");
120
+ }
121
+ export function start() {
122
+ if (!isInstalled()) {
123
+ console.log("Service not installed — installing first...");
124
+ install();
125
+ return;
126
+ }
127
+ sudoExec(`systemctl start ${SERVICE_NAME}`);
128
+ console.log("✅ Started");
129
+ }
130
+ export function stop() {
131
+ if (!isInstalled()) {
132
+ console.log("ℹ️ Service not installed");
133
+ return;
134
+ }
135
+ sudoExec(`systemctl stop ${SERVICE_NAME}`);
136
+ console.log("✅ Stopped");
137
+ }
138
+ export function restart() {
139
+ if (!isInstalled()) {
140
+ console.log("Service not installed — installing first...");
141
+ install();
142
+ return;
143
+ }
144
+ sudoExec(`systemctl restart ${SERVICE_NAME}`);
145
+ console.log("✅ Restarted");
146
+ }
147
+ export function status() {
148
+ if (!isInstalled()) {
149
+ console.log("ℹ️ Service not installed. Run: easyoref install");
150
+ return;
151
+ }
152
+ spawnSync("systemctl", ["status", SERVICE_NAME, "--no-pager"], {
153
+ stdio: "inherit",
154
+ });
155
+ }
156
+ export function logs() {
157
+ if (!isInstalled()) {
158
+ console.log("ℹ️ Service not installed. Run: easyoref install");
159
+ return;
160
+ }
161
+ spawnSync("journalctl", ["-u", SERVICE_NAME, "-f", "--no-pager", "-o", "cat"], {
162
+ stdio: "inherit",
163
+ });
164
+ }
165
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
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.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Real-time Israeli civil defense alerts → Telegram, filtered by your location",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,7 +45,7 @@
45
45
  "typescript": "^5.7.0"
46
46
  },
47
47
  "engines": {
48
- "node": ">=22"
48
+ "node": ">=20"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public",