easyoref 1.13.0 → 1.13.1

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.
Files changed (77) hide show
  1. package/dist/agent/auth.d.ts +11 -0
  2. package/dist/agent/auth.d.ts.map +1 -0
  3. package/dist/agent/auth.js +54 -0
  4. package/dist/agent/auth.js.map +1 -0
  5. package/dist/agent/clarify.d.ts +43 -0
  6. package/dist/agent/clarify.d.ts.map +1 -0
  7. package/dist/agent/clarify.js +263 -0
  8. package/dist/agent/clarify.js.map +1 -0
  9. package/dist/agent/dry-run.d.ts +12 -0
  10. package/dist/agent/dry-run.d.ts.map +1 -0
  11. package/dist/agent/dry-run.js +229 -0
  12. package/dist/agent/dry-run.js.map +1 -0
  13. package/dist/agent/gramjs-monitor.d.ts +26 -0
  14. package/dist/agent/gramjs-monitor.d.ts.map +1 -0
  15. package/dist/agent/gramjs-monitor.js +320 -0
  16. package/dist/agent/gramjs-monitor.js.map +1 -0
  17. package/dist/agent/graph.d.ts +50 -0
  18. package/dist/agent/graph.d.ts.map +1 -0
  19. package/dist/agent/graph.js +803 -0
  20. package/dist/agent/graph.js.map +1 -0
  21. package/dist/agent/queue.d.ts +15 -0
  22. package/dist/agent/queue.d.ts.map +1 -0
  23. package/dist/agent/queue.js +41 -0
  24. package/dist/agent/queue.js.map +1 -0
  25. package/dist/agent/redis.d.ts +8 -0
  26. package/dist/agent/redis.d.ts.map +1 -0
  27. package/dist/agent/redis.js +33 -0
  28. package/dist/agent/redis.js.map +1 -0
  29. package/dist/agent/store.d.ts +67 -0
  30. package/dist/agent/store.d.ts.map +1 -0
  31. package/dist/agent/store.js +83 -0
  32. package/dist/agent/store.js.map +1 -0
  33. package/dist/agent/tools.d.ts +159 -0
  34. package/dist/agent/tools.d.ts.map +1 -0
  35. package/dist/agent/tools.js +439 -0
  36. package/dist/agent/tools.js.map +1 -0
  37. package/dist/agent/types.d.ts +102 -0
  38. package/dist/agent/types.d.ts.map +1 -0
  39. package/dist/agent/types.js +3 -0
  40. package/dist/agent/types.js.map +1 -0
  41. package/dist/agent/worker.d.ts +14 -0
  42. package/dist/agent/worker.d.ts.map +1 -0
  43. package/dist/agent/worker.js +90 -0
  44. package/dist/agent/worker.js.map +1 -0
  45. package/dist/bin.d.ts +17 -0
  46. package/dist/bin.d.ts.map +1 -0
  47. package/dist/bin.js +82 -0
  48. package/dist/bin.js.map +1 -0
  49. package/dist/bot.d.ts +16 -0
  50. package/dist/bot.d.ts.map +1 -0
  51. package/dist/bot.js +600 -0
  52. package/dist/bot.js.map +1 -0
  53. package/dist/config.d.ts +125 -0
  54. package/dist/config.d.ts.map +1 -0
  55. package/dist/config.js +145 -0
  56. package/dist/config.js.map +1 -0
  57. package/dist/gif-state.d.ts +17 -0
  58. package/dist/gif-state.d.ts.map +1 -0
  59. package/dist/gif-state.js +67 -0
  60. package/dist/gif-state.js.map +1 -0
  61. package/dist/i18n.d.ts +49 -0
  62. package/dist/i18n.d.ts.map +1 -0
  63. package/dist/i18n.js +229 -0
  64. package/dist/i18n.js.map +1 -0
  65. package/dist/init.d.ts +7 -0
  66. package/dist/init.d.ts.map +1 -0
  67. package/dist/init.js +163 -0
  68. package/dist/init.js.map +1 -0
  69. package/dist/logger.d.ts +14 -0
  70. package/dist/logger.d.ts.map +1 -0
  71. package/dist/logger.js +45 -0
  72. package/dist/logger.js.map +1 -0
  73. package/dist/service.d.ts +19 -0
  74. package/dist/service.d.ts.map +1 -0
  75. package/dist/service.js +165 -0
  76. package/dist/service.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `npx easyoref init` — Interactive setup wizard.
3
+ *
4
+ * Asks 4 questions, writes ~/.easyoref/config.yaml.
5
+ */
6
+ export declare function init(): Promise<void>;
7
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +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"}
package/dist/init.js ADDED
@@ -0,0 +1,163 @@
1
+ /**
2
+ * `npx easyoref init` — Interactive setup wizard.
3
+ *
4
+ * Asks 4 questions, writes ~/.easyoref/config.yaml.
5
+ */
6
+ import { confirm, input, password, select } from "@inquirer/prompts";
7
+ import chalk from "chalk";
8
+ import { Bot } from "grammy";
9
+ import yaml from "js-yaml";
10
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
11
+ import { CONFIG_DIR, HOME_CONFIG_PATH } from "./config.js";
12
+ export async function init() {
13
+ console.log(chalk.bold("\n🚨 EasyOref Setup\n"));
14
+ // ── Guard: config already exists ─────────────────────
15
+ if (existsSync(HOME_CONFIG_PATH)) {
16
+ const overwrite = await confirm({
17
+ message: `${HOME_CONFIG_PATH} already exists. Overwrite?`,
18
+ default: false,
19
+ });
20
+ if (!overwrite) {
21
+ console.log(chalk.dim("Cancelled."));
22
+ return;
23
+ }
24
+ }
25
+ // ── 1. Language ──────────────────────────────────────
26
+ const language = await select({
27
+ message: "🌍 Language / Язык / שפה:",
28
+ choices: [
29
+ { name: "Русский", value: "ru" },
30
+ { name: "English", value: "en" },
31
+ { name: "עברית", value: "he" },
32
+ { name: "العربية", value: "ar" },
33
+ ],
34
+ });
35
+ const t = STRINGS[language] ?? STRINGS.en;
36
+ // ── 2. Bot Token ─────────────────────────────────────
37
+ const botToken = await password({
38
+ message: t.token,
39
+ validate: (val) => {
40
+ if (!val || val.length < 10)
41
+ return t.tokenRequired;
42
+ if (!val.includes(":"))
43
+ return t.tokenFormat;
44
+ return true;
45
+ },
46
+ });
47
+ console.log(chalk.dim(t.validating));
48
+ try {
49
+ const bot = new Bot(botToken);
50
+ const me = await bot.api.getMe();
51
+ console.log(chalk.green(` ✅ ${t.botOk}: @${me.username}`));
52
+ }
53
+ catch {
54
+ console.log(chalk.yellow(` ⚠️ ${t.botFail}`));
55
+ }
56
+ // ── 3. Chat ID ───────────────────────────────────────
57
+ const chatId = await input({
58
+ message: t.chatId,
59
+ validate: (val) => {
60
+ if (!val)
61
+ return t.chatIdRequired;
62
+ if (!/^-?\d+$/.test(val))
63
+ return t.chatIdFormat;
64
+ return true;
65
+ },
66
+ });
67
+ // ── 4. City ID ───────────────────────────────────────
68
+ const cityIdRaw = await input({
69
+ message: t.cityId,
70
+ validate: (val) => {
71
+ if (!val)
72
+ return t.cityIdRequired;
73
+ if (!/^\d+$/.test(val))
74
+ return t.cityIdFormat;
75
+ return true;
76
+ },
77
+ });
78
+ // ── Write config ─────────────────────────────────────
79
+ const cfg = {
80
+ city_ids: [Number(cityIdRaw)],
81
+ language,
82
+ telegram: {
83
+ bot_token: botToken,
84
+ chat_id: chatId,
85
+ },
86
+ };
87
+ mkdirSync(CONFIG_DIR, { recursive: true });
88
+ writeFileSync(HOME_CONFIG_PATH, yaml.dump(cfg), "utf-8");
89
+ console.log("");
90
+ console.log(chalk.green(`✅ ${t.saved} ${HOME_CONFIG_PATH}`));
91
+ console.log("");
92
+ console.log(t.next);
93
+ console.log(` ${chalk.cyan("npx easyoref")}`);
94
+ console.log("");
95
+ }
96
+ // ── i18n strings for the wizard ────────────────────────
97
+ const STRINGS = {
98
+ ru: {
99
+ token: "🤖 Токен бота (от @BotFather):",
100
+ tokenRequired: "Токен обязателен",
101
+ tokenFormat: "Формат: 123456:ABC-DEF...",
102
+ validating: " Проверяем токен...",
103
+ botOk: "Бот найден",
104
+ botFail: "Не удалось проверить (продолжаем)",
105
+ chatId: "💬 Chat ID (отрицательное число для групп):",
106
+ chatIdRequired: "Chat ID обязателен",
107
+ chatIdFormat: "Число (отрицательное для групп)",
108
+ cityId: "📍 ID города (найдите на https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
109
+ cityIdRequired: "ID обязателен",
110
+ cityIdFormat: "Только цифры",
111
+ saved: "Конфиг сохранён →",
112
+ next: "Запустите бота:",
113
+ },
114
+ en: {
115
+ token: "🤖 Bot token (from @BotFather):",
116
+ tokenRequired: "Token is required",
117
+ tokenFormat: "Format: 123456:ABC-DEF...",
118
+ validating: " Validating token...",
119
+ botOk: "Bot found",
120
+ botFail: "Could not verify (continuing anyway)",
121
+ chatId: "💬 Chat ID (negative number for groups):",
122
+ chatIdRequired: "Chat ID is required",
123
+ chatIdFormat: "Must be a number (negative for groups)",
124
+ cityId: "📍 City ID (find at https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
125
+ cityIdRequired: "City ID is required",
126
+ cityIdFormat: "Numbers only",
127
+ saved: "Config saved →",
128
+ next: "Start the bot:",
129
+ },
130
+ he: {
131
+ token: "🤖 טוקן בוט (מ-@BotFather):",
132
+ tokenRequired: "טוקן נדרש",
133
+ tokenFormat: "פורמט: 123456:ABC-DEF...",
134
+ validating: " מאמת טוקן...",
135
+ botOk: "בוט נמצא",
136
+ botFail: "לא ניתן לאמת (ממשיכים)",
137
+ chatId: "💬 Chat ID (מספר שלילי לקבוצות):",
138
+ chatIdRequired: "Chat ID נדרש",
139
+ chatIdFormat: "חייב להיות מספר (שלילי לקבוצות)",
140
+ cityId: "📍 ID עיר (מצאו ב-https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
141
+ cityIdRequired: "ID עיר נדרש",
142
+ cityIdFormat: "מספרים בלבד",
143
+ saved: "הגדרות נשמרו →",
144
+ next: "הפעילו את הבוט:",
145
+ },
146
+ ar: {
147
+ token: "🤖 رمز البوت (من @BotFather):",
148
+ tokenRequired: "الرمز مطلوب",
149
+ tokenFormat: "الشكل: 123456:ABC-DEF...",
150
+ validating: " جارٍ التحقق...",
151
+ botOk: "تم العثور على البوت",
152
+ botFail: "تعذر التحقق (متابعة)",
153
+ chatId: "💬 Chat ID (رقم سالب للمجموعات):",
154
+ chatIdRequired: "Chat ID مطلوب",
155
+ chatIdFormat: "يجب أن يكون رقمًا (سالب للمجموعات)",
156
+ cityId: "📍 رقم المدينة (ابحث في https://github.com/eladnava/pikud-haoref-api/blob/master/cities.json):",
157
+ cityIdRequired: "رقم المدينة مطلوب",
158
+ cityIdFormat: "أرقام فقط",
159
+ saved: "تم حفظ الإعدادات →",
160
+ next: "شغّل البوت:",
161
+ },
162
+ };
163
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * EasyOref Logger
3
+ *
4
+ * Dual-output: console (always) + Better Stack Logtail (if token set).
5
+ * Token source: config.yaml `observability.betterstack_token` or LOGTAIL_TOKEN env.
6
+ * Live Tail: https://logs.betterstack.com → your source → "Live Tail"
7
+ */
8
+ export declare function info(message: string, ctx?: Record<string, unknown>): void;
9
+ export declare function warn(message: string, ctx?: Record<string, unknown>): void;
10
+ export declare function error(message: string, ctx?: Record<string, unknown>): void;
11
+ export declare function debug(message: string, ctx?: Record<string, unknown>): void;
12
+ /** Call before process.exit() — flushes Logtail buffer */
13
+ export declare function flush(): Promise<void>;
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGzE;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGzE;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG1E;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK1E;AAED,0DAA0D;AAC1D,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3C"}
package/dist/logger.js ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * EasyOref Logger
3
+ *
4
+ * Dual-output: console (always) + Better Stack Logtail (if token set).
5
+ * Token source: config.yaml `observability.betterstack_token` or LOGTAIL_TOKEN env.
6
+ * Live Tail: https://logs.betterstack.com → your source → "Live Tail"
7
+ */
8
+ import { Logtail } from "@logtail/node";
9
+ import { config } from "./config.js";
10
+ const token = config.logtailToken;
11
+ const logtail = token ? new Logtail(token) : null;
12
+ const base = {
13
+ service: "easyoref",
14
+ env: process.env.NODE_ENV ?? "production",
15
+ };
16
+ if (logtail) {
17
+ console.log("📡 Better Stack Logtail enabled — live tail at logs.betterstack.com");
18
+ }
19
+ else {
20
+ console.log("📟 LOGTAIL_TOKEN not set — logging to console only");
21
+ }
22
+ // ── Public API ────────────────────────────────────────────────────────────────
23
+ export function info(message, ctx) {
24
+ console.log(message, ctx ?? "");
25
+ logtail?.info(message, { ...base, ...ctx });
26
+ }
27
+ export function warn(message, ctx) {
28
+ console.warn(message, ctx ?? "");
29
+ logtail?.warn(message, { ...base, ...ctx });
30
+ }
31
+ export function error(message, ctx) {
32
+ console.error(message, ctx ?? "");
33
+ logtail?.error(message, { ...base, ...ctx });
34
+ }
35
+ export function debug(message, ctx) {
36
+ if (process.env.LOG_LEVEL === "debug") {
37
+ console.debug(message, ctx ?? "");
38
+ }
39
+ logtail?.debug(message, { ...base, ...ctx });
40
+ }
41
+ /** Call before process.exit() — flushes Logtail buffer */
42
+ export async function flush() {
43
+ await logtail?.flush();
44
+ }
45
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAElD,MAAM,IAAI,GAAG;IACX,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;CAC1C,CAAC;AAEF,IAAI,OAAO,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;AACJ,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAA6B;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAA6B;IACjE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAA6B;IAClE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAA6B;IAClE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;AACzB,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.13.0",
3
+ "version": "1.13.1",
4
4
  "description": "Real-time Israeli civil defense alerts → Telegram, filtered by your location",
5
5
  "type": "module",
6
6
  "bin": {