easyoref 1.11.0 → 1.11.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.
Files changed (69) 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/dry-run.d.ts +12 -0
  6. package/dist/agent/dry-run.d.ts.map +1 -0
  7. package/dist/agent/dry-run.js +229 -0
  8. package/dist/agent/dry-run.js.map +1 -0
  9. package/dist/agent/gramjs-monitor.d.ts +13 -0
  10. package/dist/agent/gramjs-monitor.d.ts.map +1 -0
  11. package/dist/agent/gramjs-monitor.js +193 -0
  12. package/dist/agent/gramjs-monitor.js.map +1 -0
  13. package/dist/agent/graph.d.ts +44 -0
  14. package/dist/agent/graph.d.ts.map +1 -0
  15. package/dist/agent/graph.js +707 -0
  16. package/dist/agent/graph.js.map +1 -0
  17. package/dist/agent/queue.d.ts +15 -0
  18. package/dist/agent/queue.d.ts.map +1 -0
  19. package/dist/agent/queue.js +40 -0
  20. package/dist/agent/queue.js.map +1 -0
  21. package/dist/agent/redis.d.ts +8 -0
  22. package/dist/agent/redis.d.ts.map +1 -0
  23. package/dist/agent/redis.js +33 -0
  24. package/dist/agent/redis.js.map +1 -0
  25. package/dist/agent/store.d.ts +39 -0
  26. package/dist/agent/store.d.ts.map +1 -0
  27. package/dist/agent/store.js +52 -0
  28. package/dist/agent/store.js.map +1 -0
  29. package/dist/agent/types.d.ts +102 -0
  30. package/dist/agent/types.d.ts.map +1 -0
  31. package/dist/agent/types.js +3 -0
  32. package/dist/agent/types.js.map +1 -0
  33. package/dist/agent/worker.d.ts +10 -0
  34. package/dist/agent/worker.d.ts.map +1 -0
  35. package/dist/agent/worker.js +69 -0
  36. package/dist/agent/worker.js.map +1 -0
  37. package/dist/bin.d.ts +17 -0
  38. package/dist/bin.d.ts.map +1 -0
  39. package/dist/bin.js +82 -0
  40. package/dist/bin.js.map +1 -0
  41. package/dist/bot.d.ts +16 -0
  42. package/dist/bot.d.ts.map +1 -0
  43. package/dist/bot.js +557 -0
  44. package/dist/bot.js.map +1 -0
  45. package/dist/config.d.ts +116 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +145 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/gif-state.d.ts +17 -0
  50. package/dist/gif-state.d.ts.map +1 -0
  51. package/dist/gif-state.js +67 -0
  52. package/dist/gif-state.js.map +1 -0
  53. package/dist/i18n.d.ts +49 -0
  54. package/dist/i18n.d.ts.map +1 -0
  55. package/dist/i18n.js +229 -0
  56. package/dist/i18n.js.map +1 -0
  57. package/dist/init.d.ts +7 -0
  58. package/dist/init.d.ts.map +1 -0
  59. package/dist/init.js +163 -0
  60. package/dist/init.js.map +1 -0
  61. package/dist/logger.d.ts +14 -0
  62. package/dist/logger.d.ts.map +1 -0
  63. package/dist/logger.js +45 -0
  64. package/dist/logger.js.map +1 -0
  65. package/dist/service.d.ts +19 -0
  66. package/dist/service.d.ts.map +1 -0
  67. package/dist/service.js +165 -0
  68. package/dist/service.js.map +1 -0
  69. package/package.json +3 -3
@@ -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.11.0",
3
+ "version": "1.11.2",
4
4
  "description": "Real-time Israeli civil defense alerts → Telegram, filtered by your location",
5
5
  "type": "module",
6
6
  "bin": {
@@ -32,8 +32,8 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@inquirer/prompts": "^7.0.0",
35
- "@langchain/core": "^0.3.0",
36
- "@langchain/langgraph": "^0.2.0",
35
+ "@langchain/core": "^1.1.31",
36
+ "@langchain/langgraph": "^1.2.1",
37
37
  "@langchain/openai": "^1.2.12",
38
38
  "@logtail/node": "^0.5.6",
39
39
  "bullmq": "^5.0.0",