easyoref 1.18.4 → 1.20.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.
Files changed (91) hide show
  1. package/dist/agent/extract.d.ts +5 -5
  2. package/dist/agent/extract.d.ts.map +1 -1
  3. package/dist/agent/extract.js +86 -110
  4. package/dist/agent/extract.js.map +1 -1
  5. package/dist/agent/types.d.ts.map +1 -1
  6. package/dist/agent/types.js +21 -30
  7. package/dist/agent/types.js.map +1 -1
  8. package/dist/bot.js +17 -19
  9. package/dist/bot.js.map +1 -1
  10. package/dist/gif-state.js +1 -1
  11. package/dist/gif-state.js.map +1 -1
  12. package/dist/init.js +1 -1
  13. package/dist/init.js.map +1 -1
  14. package/package.json +5 -9
  15. package/dist/agent/auth.d.ts +0 -11
  16. package/dist/agent/auth.d.ts.map +0 -1
  17. package/dist/agent/auth.js +0 -54
  18. package/dist/agent/auth.js.map +0 -1
  19. package/dist/agent/clarify.d.ts +0 -44
  20. package/dist/agent/clarify.d.ts.map +0 -1
  21. package/dist/agent/clarify.js +0 -284
  22. package/dist/agent/clarify.js.map +0 -1
  23. package/dist/agent/dry-run.d.ts +0 -12
  24. package/dist/agent/dry-run.d.ts.map +0 -1
  25. package/dist/agent/dry-run.js +0 -236
  26. package/dist/agent/dry-run.js.map +0 -1
  27. package/dist/agent/filters.d.ts +0 -48
  28. package/dist/agent/filters.d.ts.map +0 -1
  29. package/dist/agent/filters.js +0 -124
  30. package/dist/agent/filters.js.map +0 -1
  31. package/dist/agent/gramjs-monitor.d.ts +0 -26
  32. package/dist/agent/gramjs-monitor.d.ts.map +0 -1
  33. package/dist/agent/gramjs-monitor.js +0 -324
  34. package/dist/agent/gramjs-monitor.js.map +0 -1
  35. package/dist/agent/graph.d.ts +0 -30
  36. package/dist/agent/graph.d.ts.map +0 -1
  37. package/dist/agent/graph.js +0 -240
  38. package/dist/agent/graph.js.map +0 -1
  39. package/dist/agent/helpers.d.ts +0 -6
  40. package/dist/agent/helpers.d.ts.map +0 -1
  41. package/dist/agent/helpers.js +0 -15
  42. package/dist/agent/helpers.js.map +0 -1
  43. package/dist/agent/message.d.ts +0 -69
  44. package/dist/agent/message.d.ts.map +0 -1
  45. package/dist/agent/message.js +0 -464
  46. package/dist/agent/message.js.map +0 -1
  47. package/dist/agent/queue.d.ts +0 -15
  48. package/dist/agent/queue.d.ts.map +0 -1
  49. package/dist/agent/queue.js +0 -41
  50. package/dist/agent/queue.js.map +0 -1
  51. package/dist/agent/redis.d.ts +0 -8
  52. package/dist/agent/redis.d.ts.map +0 -1
  53. package/dist/agent/redis.js +0 -33
  54. package/dist/agent/redis.js.map +0 -1
  55. package/dist/agent/store.d.ts +0 -93
  56. package/dist/agent/store.d.ts.map +0 -1
  57. package/dist/agent/store.js +0 -145
  58. package/dist/agent/store.js.map +0 -1
  59. package/dist/agent/tools.d.ts +0 -159
  60. package/dist/agent/tools.d.ts.map +0 -1
  61. package/dist/agent/tools.js +0 -439
  62. package/dist/agent/tools.js.map +0 -1
  63. package/dist/agent/types.d.ts +0 -213
  64. package/dist/agent/vote.d.ts +0 -13
  65. package/dist/agent/vote.d.ts.map +0 -1
  66. package/dist/agent/vote.js +0 -226
  67. package/dist/agent/vote.js.map +0 -1
  68. package/dist/agent/worker.d.ts +0 -14
  69. package/dist/agent/worker.d.ts.map +0 -1
  70. package/dist/agent/worker.js +0 -137
  71. package/dist/agent/worker.js.map +0 -1
  72. package/dist/bin.d.ts +0 -17
  73. package/dist/bot.d.ts +0 -16
  74. package/dist/config.d.ts +0 -129
  75. package/dist/config.d.ts.map +0 -1
  76. package/dist/config.js +0 -157
  77. package/dist/config.js.map +0 -1
  78. package/dist/gif-state.d.ts +0 -17
  79. package/dist/i18n.d.ts +0 -49
  80. package/dist/i18n.d.ts.map +0 -1
  81. package/dist/i18n.js +0 -229
  82. package/dist/i18n.js.map +0 -1
  83. package/dist/init.d.ts +0 -7
  84. package/dist/logger.d.ts +0 -14
  85. package/dist/logger.d.ts.map +0 -1
  86. package/dist/logger.js +0 -45
  87. package/dist/logger.js.map +0 -1
  88. package/dist/service.d.ts +0 -19
  89. package/dist/service.d.ts.map +0 -1
  90. package/dist/service.js +0 -165
  91. package/dist/service.js.map +0 -1
package/dist/config.js DELETED
@@ -1,157 +0,0 @@
1
- /**
2
- * EasyOref — Centralized Configuration
3
- *
4
- * Primary: config.yaml (searched in cwd, /app, /etc/easyoref)
5
- * Fallback: environment variables + Docker secrets (for backward compat)
6
- *
7
- * See config.yaml.example for all available options.
8
- */
9
- import yaml from "js-yaml";
10
- import { existsSync, readFileSync } from "node:fs";
11
- import { homedir } from "node:os";
12
- import { join, resolve } from "node:path";
13
- import { isValidLanguage } from "./i18n.js";
14
- const VALID_GIF_MODES = ["funny_cats", "none"];
15
- const ALL_ALERT_TYPES = ["early", "siren", "resolved"];
16
- // ── YAML Loader ──────────────────────────────────────────
17
- /** Config dir in user home — ~/.easyoref/ */
18
- export const CONFIG_DIR = join(homedir(), ".easyoref");
19
- export const HOME_CONFIG_PATH = join(CONFIG_DIR, "config.yaml");
20
- const CONFIG_SEARCH_PATHS = [
21
- HOME_CONFIG_PATH,
22
- "config.yaml",
23
- "config.yml",
24
- "/app/config.yaml",
25
- "/etc/easyoref/config.yaml",
26
- ];
27
- function findConfigFile() {
28
- const envPath = process.env.EASYOREF_CONFIG;
29
- if (envPath && existsSync(envPath))
30
- return envPath;
31
- for (const p of CONFIG_SEARCH_PATHS) {
32
- const abs = resolve(p);
33
- if (existsSync(abs))
34
- return abs;
35
- }
36
- return null;
37
- }
38
- function loadYaml() {
39
- const path = findConfigFile();
40
- if (path) {
41
- try {
42
- const raw = readFileSync(path, "utf-8");
43
- const parsed = yaml.load(raw);
44
- // eslint-disable-next-line no-console
45
- console.log(`[config] Loaded from ${path}`);
46
- return parsed ?? {};
47
- }
48
- catch (err) {
49
- // eslint-disable-next-line no-console
50
- console.error(`[config] Failed to parse ${path}:`, err);
51
- }
52
- }
53
- return {};
54
- }
55
- // ── Helpers ──────────────────────────────────────────────
56
- function readSecret(envKey, secretPaths) {
57
- for (const p of secretPaths) {
58
- if (existsSync(p))
59
- return readFileSync(p, "utf-8").trim();
60
- }
61
- return process.env[envKey] ?? "";
62
- }
63
- function parseGifMode(raw) {
64
- const lower = raw.toLowerCase();
65
- return VALID_GIF_MODES.includes(lower) ? lower : "none";
66
- }
67
- function parseAlertTypes(raw) {
68
- if (!raw || !Array.isArray(raw))
69
- return ALL_ALERT_TYPES;
70
- return raw.filter((t) => ALL_ALERT_TYPES.includes(t));
71
- }
72
- // ── Build Config ─────────────────────────────────────────
73
- const yml = loadYaml();
74
- const parsedChatIds = (() => {
75
- const raw = yml.telegram?.chat_id ?? process.env.CHAT_ID ?? "";
76
- if (Array.isArray(raw))
77
- return raw.map(String).filter(Boolean);
78
- return String(raw)
79
- .split(",")
80
- .map((s) => s.trim())
81
- .filter(Boolean);
82
- })();
83
- export const config = {
84
- /** Telegram bot token */
85
- botToken: yml.telegram?.bot_token ??
86
- readSecret("BOT_TOKEN", ["/run/secrets/bot_token", "secrets/bot_token"]),
87
- /** All Telegram chat IDs to broadcast to */
88
- chatIds: parsedChatIds,
89
- /** Primary Telegram chat ID (first in the list) */
90
- chatId: parsedChatIds[0] ?? "",
91
- /** City IDs to monitor (resolved to Hebrew names at startup via cities.json) */
92
- cityIds: yml.city_ids ?? [],
93
- /**
94
- * Hebrew area names — legacy fallback for AREAS env var.
95
- * Populated at startup from cityIds OR from AREAS env if no cityIds.
96
- */
97
- areas: [],
98
- /** Which alert types to send */
99
- alertTypes: parseAlertTypes(yml.alert_types),
100
- /** Message language */
101
- language: (() => {
102
- const raw = (yml.language ?? process.env.LANGUAGE ?? "ru").toLowerCase();
103
- return isValidLanguage(raw) ? raw : "ru";
104
- })(),
105
- /** Emoji overrides per alert type */
106
- emojiOverride: yml.emoji_override ?? {},
107
- /** Title overrides per alert type */
108
- titleOverride: yml.title_override ?? {},
109
- /** Description overrides per alert type */
110
- descriptionOverride: yml.description_override ?? {},
111
- /** Oref API polling interval (ms) */
112
- pollIntervalMs: yml.poll_interval_ms ?? Number(process.env.OREF_POLL_INTERVAL_MS ?? "2000"),
113
- /** Health endpoint port */
114
- healthPort: yml.health_port ?? Number(process.env.HEALTH_PORT ?? "3100"),
115
- /** Oref API URL */
116
- orefApiUrl: yml.oref_api_url ??
117
- process.env.OREF_API_URL ??
118
- "https://www.oref.org.il/WarningMessages/alert/alerts.json",
119
- /** Oref alert history URL (base, without date params) */
120
- orefHistoryUrl: yml.oref_history_url ?? process.env.OREF_HISTORY_URL ?? "",
121
- /** Better Stack Logtail token */
122
- logtailToken: yml.observability?.betterstack_token ?? process.env.LOGTAIL_TOKEN ?? "",
123
- /** GIF mode */
124
- gifMode: parseGifMode(yml.gif_mode ?? process.env.GIF_MODE ?? "none"),
125
- /** Path for persistent data */
126
- dataDir: yml.data_dir ?? process.env.DATA_DIR ?? join(CONFIG_DIR, "data"),
127
- /** AI enrichment config (YAML key: `ai`) */
128
- agent: (() => {
129
- const ai = yml.ai;
130
- return {
131
- enabled: ai?.enabled ?? false,
132
- apiKey: ai?.openrouter_api_key ?? process.env.OPENROUTER_API_KEY ?? "",
133
- filterModel: ai?.openrouter_filter_model ?? "google/gemini-2.5-flash-lite",
134
- extractModel: ai?.openrouter_extract_model ?? "google/gemini-3.1-flash-lite-preview",
135
- redisUrl: ai?.redis_url ?? process.env.REDIS_URL ?? "redis://localhost:6379",
136
- socks5Proxy: ai?.socks5_proxy ?? process.env.SOCKS5_PROXY ?? "",
137
- enrichDelayMs: ai?.enrich_delay_ms ?? 20_000,
138
- confidenceThreshold: ai?.confidence_threshold ?? 0.7,
139
- windowMinutes: ai?.window_minutes ?? 2,
140
- timeoutMinutes: ai?.timeout_minutes ?? 15,
141
- mtproto: {
142
- apiId: ai?.mtproto?.api_id ?? Number(process.env.TG_API_ID ?? "0"),
143
- apiHash: ai?.mtproto?.api_hash ?? process.env.TG_API_HASH ?? "",
144
- sessionString: ai?.mtproto?.session_string ?? process.env.TG_SESSION ?? "",
145
- },
146
- channels: ai?.channels ?? [],
147
- areaLabels: ai?.area_labels ?? {},
148
- /** Enable MCP tool calling — deterministic fan-out on low confidence */
149
- mcpTools: ai?.mcp_tools ?? false,
150
- /** Posts per channel to fetch during clarify (1-4, default 3) */
151
- clarifyFetchCount: Math.min(4, Math.max(1, ai?.clarify_fetch_count ?? 3)),
152
- };
153
- })(),
154
- };
155
- /** Exported for testing */
156
- export { loadYaml as _loadYaml, parseAlertTypes as _parseAlertTypes, };
157
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * EasyOref — Persistent GIF Rotation State
3
- *
4
- * Stores which GIFs have been shown to avoid repeats.
5
- * State survives restarts + redeploys via JSON file.
6
- */
7
- /**
8
- * Initialize persistent GIF state.
9
- * @param dataDir — directory for state file (created if missing)
10
- */
11
- export declare function initGifState(dataDir: string): void;
12
- /**
13
- * Pick a GIF from a pool without repeats.
14
- * When all GIFs in the pool have been shown, reshuffles.
15
- */
16
- export declare function pickGif(pool: string[], poolKey: string): string;
17
- //# sourceMappingURL=gif-state.d.ts.map
package/dist/i18n.d.ts DELETED
@@ -1,49 +0,0 @@
1
- /**
2
- * EasyOref — Internationalization (i18n)
3
- *
4
- * Supported languages: Russian (ru), English (en), Hebrew (he), Arabic (ar)
5
- * Default: ru (built for diaspora families)
6
- *
7
- * Message format:
8
- * <b>⚠️ Title</b>
9
- * Description
10
- * <blockquote>
11
- * <b>Key:</b> Value
12
- * ...
13
- * </blockquote>
14
- */
15
- export type Language = "ru" | "en" | "he" | "ar";
16
- export type AlertKind = "early" | "siren" | "resolved";
17
- export interface AlertMeta {
18
- emoji: string;
19
- title: string;
20
- description: string;
21
- }
22
- export interface I18nLabels {
23
- area: string;
24
- timeToImpact: string;
25
- earlyEta: string;
26
- sirenEta: string;
27
- monitoring: string;
28
- }
29
- export interface LanguagePack {
30
- alerts: Record<AlertKind, AlertMeta>;
31
- labels: I18nLabels;
32
- }
33
- /**
34
- * Load and cache translations from pikud-haoref-api.
35
- * Must be called once at startup (before first alert).
36
- * Falls back silently to Hebrew names on fetch failure.
37
- */
38
- export declare function initTranslations(): Promise<void>;
39
- /** Translate comma-separated Hebrew area names to target language */
40
- export declare function translateAreas(areas: string, lang: Language): string;
41
- /**
42
- * Resolve numeric city IDs to Hebrew area names.
43
- * Call AFTER initTranslations().
44
- * Unknown IDs are logged as warnings and skipped.
45
- */
46
- export declare function resolveCityIds(ids: number[]): string[];
47
- export declare function getLanguagePack(lang: Language): LanguagePack;
48
- export declare function isValidLanguage(s: string): s is Language;
49
- //# sourceMappingURL=i18n.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAIjD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC;CACpB;AAgKD;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCtD;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAapE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAE5D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,QAAQ,CAExD"}
package/dist/i18n.js DELETED
@@ -1,229 +0,0 @@
1
- /**
2
- * EasyOref — Internationalization (i18n)
3
- *
4
- * Supported languages: Russian (ru), English (en), Hebrew (he), Arabic (ar)
5
- * Default: ru (built for diaspora families)
6
- *
7
- * Message format:
8
- * <b>⚠️ Title</b>
9
- * Description
10
- * <blockquote>
11
- * <b>Key:</b> Value
12
- * ...
13
- * </blockquote>
14
- */
15
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
- // Language Packs — structured alert metadata + labels
17
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
- const ruPack = {
19
- alerts: {
20
- early: {
21
- emoji: "⚠️",
22
- title: "Раннее предупреждение",
23
- description: "Обнаружены запуски ракет по Израилю.",
24
- },
25
- siren: {
26
- emoji: "🚨",
27
- title: "Цева Адом",
28
- description: "",
29
- },
30
- resolved: {
31
- emoji: "😮‍💨",
32
- title: "Инцидент завершён",
33
- description: "Можно покинуть защищённое помещение.",
34
- },
35
- },
36
- labels: {
37
- area: "Район",
38
- timeToImpact: "Подлётное время",
39
- earlyEta: "~5–12 мин",
40
- sirenEta: "1.5 мин",
41
- monitoring: '<tg-emoji emoji-id="5258052328455424397">⏳</tg-emoji> Сообщение обновляется...',
42
- },
43
- };
44
- const enPack = {
45
- alerts: {
46
- early: {
47
- emoji: "⚠️",
48
- title: "Early Warning",
49
- description: "Rocket launches detected. Stay near a protected space.",
50
- },
51
- siren: {
52
- emoji: "🚨",
53
- title: "Siren Alert",
54
- description: "Enter a protected space immediately.",
55
- },
56
- resolved: {
57
- emoji: "😮‍💨",
58
- title: "Incident Over",
59
- description: "You may leave the protected space.",
60
- },
61
- },
62
- labels: {
63
- area: "Area",
64
- timeToImpact: "Time to impact",
65
- earlyEta: "~5–12 min",
66
- sirenEta: "1.5 min",
67
- monitoring: '<tg-emoji emoji-id="5258052328455424397">⏳</tg-emoji> Message updating...',
68
- },
69
- };
70
- const hePack = {
71
- alerts: {
72
- early: {
73
- emoji: "⚠️",
74
- title: "התרעה מוקדמת",
75
- description: "זוהו שיגורים. הישארו בקרבת מרחב מוגן.",
76
- },
77
- siren: {
78
- emoji: "🚨",
79
- title: "צבע אדום",
80
- description: "היכנסו למרחב מוגן.",
81
- },
82
- resolved: {
83
- emoji: "😮‍💨",
84
- title: "האירוע הסתיים",
85
- description: "ניתן לצאת מהמרחב המוגן.",
86
- },
87
- },
88
- labels: {
89
- area: "אזור",
90
- timeToImpact: "זמן מעוף",
91
- earlyEta: "~5–12 דקות",
92
- sirenEta: "1.5 דקות",
93
- monitoring: '<tg-emoji emoji-id="5258052328455424397">⏳</tg-emoji> ההודעה מתעדכנת...',
94
- },
95
- };
96
- const arPack = {
97
- alerts: {
98
- early: {
99
- emoji: "⚠️",
100
- title: "إنذار مبكر",
101
- description: "تم رصد إطلاق صواريخ. ابقوا بالقرب من الملجأ.",
102
- },
103
- siren: {
104
- emoji: "🚨",
105
- title: "صفارة إنذار",
106
- description: "ادخلوا إلى الملجأ فوراً.",
107
- },
108
- resolved: {
109
- emoji: "😮‍💨",
110
- title: "انتهى الحادث",
111
- description: "يمكنكم مغادرة الملجأ.",
112
- },
113
- },
114
- labels: {
115
- area: "المنطقة",
116
- timeToImpact: "وقت الوصول",
117
- earlyEta: "~5–12 دقيقة",
118
- sirenEta: "1.5 دقيقة",
119
- monitoring: '<tg-emoji emoji-id="5258052328455424397">⏳</tg-emoji> الرسالة قيد التحديث...',
120
- },
121
- };
122
- const packs = {
123
- ru: ruPack,
124
- en: enPack,
125
- he: hePack,
126
- ar: arPack,
127
- };
128
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
129
- // Area Name Translation — loaded from pikud-haoref-api/cities.json
130
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
131
- const CITIES_JSON_URL = "https://raw.githubusercontent.com/eladnava/pikud-haoref-api/master/cities.json";
132
- /** Hebrew city name → { en, ru, ar } */
133
- const cityMap = new Map();
134
- /** Hebrew zone name → { en, ru, ar } */
135
- const zoneMap = new Map();
136
- /** City ID → Hebrew name (for YAML city_ids resolution) */
137
- const idToNameMap = new Map();
138
- /**
139
- * Known bad translations in upstream cities.json.
140
- * Applied as post-processing corrections after loading.
141
- * Key: Hebrew name, Value: { lang: corrected_name }
142
- */
143
- const TRANSLATION_FIXES = {
144
- "תל אביב - דרום העיר ויפו": {
145
- ru: "Тель-Авив — Южный район и Яффо",
146
- },
147
- };
148
- /**
149
- * Load and cache translations from pikud-haoref-api.
150
- * Must be called once at startup (before first alert).
151
- * Falls back silently to Hebrew names on fetch failure.
152
- */
153
- export async function initTranslations() {
154
- try {
155
- const res = await fetch(CITIES_JSON_URL);
156
- if (!res.ok)
157
- throw new Error(`HTTP ${res.status}`);
158
- const data = (await res.json());
159
- for (const c of data) {
160
- if (!c.name || c.name === "בחר הכל")
161
- continue;
162
- cityMap.set(c.name, { en: c.name_en, ru: c.name_ru, ar: c.name_ar });
163
- if (c.id)
164
- idToNameMap.set(c.id, c.name);
165
- if (c.zone && !zoneMap.has(c.zone)) {
166
- zoneMap.set(c.zone, { en: c.zone_en, ru: c.zone_ru, ar: c.zone_ar });
167
- }
168
- }
169
- // Apply known corrections over upstream data
170
- for (const [heName, fixes] of Object.entries(TRANSLATION_FIXES)) {
171
- const existing = cityMap.get(heName);
172
- if (existing) {
173
- for (const [lang, corrected] of Object.entries(fixes)) {
174
- existing[lang] = corrected;
175
- }
176
- }
177
- }
178
- // eslint-disable-next-line no-console
179
- console.log(`[i18n] Loaded ${cityMap.size} city + ${zoneMap.size} zone translations`);
180
- }
181
- catch (err) {
182
- // eslint-disable-next-line no-console
183
- console.warn("[i18n] Failed to load cities.json — area names will stay in Hebrew", err);
184
- }
185
- }
186
- /** Translate comma-separated Hebrew area names to target language */
187
- export function translateAreas(areas, lang) {
188
- if (lang === "he")
189
- return areas;
190
- const key = lang;
191
- return areas
192
- .split(", ")
193
- .map((a) => {
194
- const city = cityMap.get(a);
195
- if (city?.[key])
196
- return city[key];
197
- const zone = zoneMap.get(a);
198
- if (zone?.[key])
199
- return zone[key];
200
- return a; // fallback: Hebrew as-is
201
- })
202
- .join(", ");
203
- }
204
- /**
205
- * Resolve numeric city IDs to Hebrew area names.
206
- * Call AFTER initTranslations().
207
- * Unknown IDs are logged as warnings and skipped.
208
- */
209
- export function resolveCityIds(ids) {
210
- const names = [];
211
- for (const id of ids) {
212
- const name = idToNameMap.get(id);
213
- if (name) {
214
- names.push(name);
215
- }
216
- else {
217
- // eslint-disable-next-line no-console
218
- console.warn(`[i18n] Unknown city ID: ${id} — skipping`);
219
- }
220
- }
221
- return names;
222
- }
223
- export function getLanguagePack(lang) {
224
- return packs[lang] ?? packs.ru;
225
- }
226
- export function isValidLanguage(s) {
227
- return s === "ru" || s === "en" || s === "he" || s === "ar";
228
- }
229
- //# sourceMappingURL=i18n.js.map
package/dist/i18n.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts DELETED
@@ -1,7 +0,0 @@
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
package/dist/logger.d.ts DELETED
@@ -1,14 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,45 +0,0 @@
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
@@ -1 +0,0 @@
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"}
package/dist/service.d.ts DELETED
@@ -1,19 +0,0 @@
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
@@ -1 +0,0 @@
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"}