easyoref 1.27.9 → 2.0.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.
@@ -1,5 +1,5 @@
1
1
  /** Re-export types from shared and agent packages */
2
- export type { ActiveSession, AlertMeta, AlertType, AlertTypeConfig, ChannelPost, ChannelTrackingType, ClarifyInput, ClarifyOutput, Enrichment, GifMode, Insight, NewsChannelWithUpdatesType, NewsMessageType, QualitativeCountType, RelevanceCheckType, RunEnrichmentInput, TelegramMessage, ValidatedInsight, VotedResult, } from "@easyoref/shared";
2
+ export type { ActiveSession, AlertMeta, AlertType, AlertTypeConfig, ChannelPost, ChannelTrackingType, Enrichment, GifMode, Insight, NewsChannelWithUpdatesType, NewsMessageType, QualitativeCountType, RelevanceCheckType, RunEnrichmentInput, TelegramMessage, ValidatedInsight, VotedResult, } from "@easyoref/shared";
3
3
  export { AgentState } from "@easyoref/agent";
4
4
  export type { AgentStateType } from "@easyoref/agent";
5
5
  import { createEmptyEnrichment } from "@easyoref/shared";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,YAAY,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,OAAO,EACP,OAAO,EACP,0BAA0B,EAC1B,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,eAAO,MAAM,eAAe,8BAAwB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,YAAY,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,OAAO,EACP,OAAO,EACP,0BAA0B,EAC1B,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,eAAO,MAAM,eAAe,8BAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC"}
package/dist/bot.js CHANGED
@@ -12,30 +12,32 @@
12
12
  *
13
13
  * No LLM needed — purely deterministic matching for <1s latency.
14
14
  */
15
- import { buildEnrichedMessage, enqueueEnrich, startEnrichWorker, stopEnrichWorker, } from "@easyoref/agent";
16
- import { startMonitor, stopMonitor } from "@easyoref/gramjs";
17
- import * as logger from "@easyoref/monitoring";
18
- import { clearSession, closeRedis, config, getActiveSession, getEnrichment, getLanguagePack, initLangSmithTracing, initTranslations, PHASE_ENRICH_DELAY_MS, PHASE_INITIAL_DELAY_MS, resolveCityIds, saveAlertMeta, setActiveSession, translateAreas, } from "@easyoref/shared";
15
+ import { buildEnrichedMessage, enqueueEnrich, runCanary, startEnrichWorker, stopEnrichWorker, } from "@easyoref/agent";
16
+ import { isGramJsConnected, startMonitor, stopMonitor } from "@easyoref/gramjs";
17
+ import { clearSession, closeRedis, config, getActiveSession, getAllUsers, getEnrichment, getLanguagePack, getLastUpdateTs, initLangSmithTracing, initTranslations, PHASE_ENRICH_DELAY_MS, PHASE_INITIAL_DELAY_MS, saveAlertMeta, setActiveSession, translateAreas, } from "@easyoref/shared";
18
+ import * as logger from "@easyoref/shared/logger";
19
19
  import { Bot } from "grammy";
20
20
  import { createServer } from "node:http";
21
21
  import { initGifState, pickGif } from "./gif-state.js";
22
- const langPack = getLanguagePack(config.language);
22
+ import { registerAdminHandler } from "./handlers/admin.js";
23
+ import { registerInlineHandler } from "./handlers/inline.js";
24
+ import { registerQaHandler } from "./handlers/qa.js";
25
+ import { registerShelterHandler } from "./handlers/shelter.js";
26
+ import { initDefaultAreas, registerStartHandler } from "./handlers/start.js";
23
27
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
24
- // Area Filter (from config.yaml city_ids)
28
+ // Per-user Area Filter
25
29
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
26
- /** Check if alert data contains any of our monitored areas. */
27
- function isRelevantArea(alertAreas) {
28
- for (const monitored of config.areas) {
29
- if (alertAreas.includes(monitored))
30
- return true;
31
- if (alertAreas.some((a) => a.startsWith(monitored) || monitored.startsWith(a)))
32
- return true;
33
- }
34
- return false;
30
+ /** Check if this user has any of their configured areas in the alert. */
31
+ function userMatchesAlert(user, alertAreas) {
32
+ if (user.areas.length === 0)
33
+ return true; // no filter → all alerts
34
+ return user.areas.some((monitored) => alertAreas.some((a) => a === monitored || a.startsWith(monitored) || monitored.startsWith(a)));
35
35
  }
36
- /** Return human-readable area label for messages */
37
- function matchedAreaLabel(alertAreas) {
38
- const matched = alertAreas.filter((a) => config.areas.some((m) => a.startsWith(m) || m.startsWith(a) || a === m));
36
+ /** Return the user's matched area label, falling back to full alert areas. */
37
+ function userMatchedLabel(user, alertAreas) {
38
+ if (user.areas.length === 0)
39
+ return alertAreas.slice(0, 3).join(", ");
40
+ const matched = alertAreas.filter((a) => user.areas.some((m) => a === m || a.startsWith(m) || m.startsWith(a)));
39
41
  return matched.length > 0
40
42
  ? matched.join(", ")
41
43
  : alertAreas.slice(0, 3).join(", ");
@@ -57,6 +59,25 @@ function classifyAlertType(title) {
57
59
  return "red_alert";
58
60
  }
59
61
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
62
+ // Health tracking
63
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
64
+ let lastAlertTs = 0;
65
+ let registeredUserCount = 0;
66
+ /** Called by processAlert after sending a Telegram message */
67
+ function trackAlert() {
68
+ lastAlertTs = Date.now();
69
+ }
70
+ /** Update registered user count (called periodically) */
71
+ async function refreshUserCount() {
72
+ try {
73
+ const users = await getAllUsers();
74
+ registeredUserCount = users.length;
75
+ }
76
+ catch {
77
+ // non-critical
78
+ }
79
+ }
80
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
60
81
  // Cooldown / Dedup
61
82
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
62
83
  const COOLDOWN_EARLY_MS = 3 * 60 * 1000; // 3 min (Oref sends multiple alert IDs per wave)
@@ -237,16 +258,7 @@ function initBot() {
237
258
  logger.error("BOT_TOKEN not set — Telegram DISABLED");
238
259
  return null;
239
260
  }
240
- if (config.chatIds.length === 0) {
241
- logger.error("CHAT_ID not set — Telegram DISABLED");
242
- return null;
243
- }
244
- logger.info("Bot initialized", {
245
- chat_ids: config.chatIds.map((id) => id.slice(0, -4) + "****"),
246
- language: config.language,
247
- areas: config.areas,
248
- gif_mode: config.gifMode,
249
- });
261
+ logger.info("Bot initialized", { gif_mode: config.gifMode });
250
262
  return new Bot(config.botToken);
251
263
  }
252
264
  function nowHHMM() {
@@ -256,12 +268,14 @@ function nowHHMM() {
256
268
  timeZone: "Asia/Jerusalem",
257
269
  });
258
270
  }
259
- function formatMessage(alertType, areas) {
271
+ function formatMessage(alertType, areas, language) {
260
272
  const time = nowHHMM();
261
- const localAreas = translateAreas(areas, config.language);
273
+ const lang = language ?? "ru";
274
+ const localAreas = translateAreas(areas, lang);
262
275
  const cfgKey = ALERT_TYPE_TO_CONFIG[alertType];
263
- const defaults = langPack.alerts[cfgKey];
264
- const labels = langPack.labels;
276
+ const lp = getLanguagePack(lang);
277
+ const defaults = lp.alerts[cfgKey];
278
+ const labels = lp.labels;
265
279
  const emoji = config.emojiOverride[cfgKey] ?? defaults.emoji;
266
280
  const title = config.titleOverride[cfgKey] ?? defaults.title;
267
281
  const desc = config.descriptionOverride[cfgKey] ?? defaults.description;
@@ -360,8 +374,11 @@ async function sendTelegram(chatId, alertType, text, replyToMessageId) {
360
374
  // Alert Processing
361
375
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
362
376
  async function processAlert(alert) {
363
- if (!isRelevantArea(alert.data)) {
364
- logger.info("Alert not in our area", {
377
+ // ── Load all registered users and find those matching this alert's areas ──
378
+ const allUsers = await getAllUsers();
379
+ const matchedUsers = allUsers.filter((u) => userMatchesAlert(u, alert.data));
380
+ if (matchedUsers.length === 0) {
381
+ logger.info("Alert — no users matched area", {
365
382
  alert_id: alert.id,
366
383
  areas_he: alert.data,
367
384
  });
@@ -378,11 +395,14 @@ async function processAlert(alert) {
378
395
  });
379
396
  return;
380
397
  }
381
- const areas = matchedAreaLabel(alert.data);
398
+ const areas = matchedUsers[0]
399
+ ? userMatchedLabel(matchedUsers[0], alert.data)
400
+ : alert.data.slice(0, 3).join(", ");
382
401
  logger.info("Alert — RELEVANT", {
383
402
  alert_id: alert.id,
384
403
  type: alertType,
385
404
  areas_he: alert.data,
405
+ matched_users: matchedUsers.length,
386
406
  });
387
407
  if (!shouldSend(alertType)) {
388
408
  logger.info("Cooldown active, skipping Telegram", {
@@ -392,17 +412,18 @@ async function processAlert(alert) {
392
412
  return;
393
413
  }
394
414
  markSent(alertType);
395
- const baseMessage = formatMessage(alertType, areas);
396
- let message = baseMessage;
415
+ trackAlert();
416
+ // Build canonical (English) base message for session storage
417
+ const baseMessage = formatMessage(alertType, areas, "en");
397
418
  const alertTs = Date.now();
398
- // ── Reply chain + carry-forward enrichment ──
419
+ // ── Reply chain + carry-forward enrichment (per-session) ──
399
420
  const replyToMap = new Map();
421
+ let legacyInsights = [];
400
422
  if (config.agent.enabled) {
401
423
  const existingForReply = await getActiveSession();
402
424
  const shouldReply = existingForReply &&
403
425
  (alertType === "resolved" || existingForReply.phase !== "resolved");
404
426
  if (shouldReply) {
405
- // Build per-chat reply targets
406
427
  const cms = existingForReply.telegramMessages ?? [
407
428
  {
408
429
  chatId: existingForReply.chatId,
@@ -418,25 +439,46 @@ async function processAlert(alert) {
418
439
  prevEnrichment.rocketCount ||
419
440
  prevEnrichment.intercepted;
420
441
  if (hasData) {
421
- // Convert legacy Record<string,string> enrichment to SynthesizedInsight[] for buildEnrichedMessage
422
- const legacyInsights = Object.entries(prevEnrichment)
442
+ legacyInsights = Object.entries(prevEnrichment)
423
443
  .filter(([, v]) => v !== undefined && v !== "")
424
- .map(([key, value]) => ({ key, value: String(value), confidence: 0.5, sourceUrls: [] }));
425
- message = buildEnrichedMessage(message, alertType, alertTs, legacyInsights);
444
+ .map(([key, value]) => {
445
+ const v = String(value);
446
+ return {
447
+ key,
448
+ value: { ru: v, en: v, he: v, ar: v },
449
+ confidence: 0.5,
450
+ sourceUrls: [],
451
+ };
452
+ });
426
453
  }
427
454
  }
428
455
  }
429
456
  try {
430
- // ── Send to all configured chats ──
457
+ // ── Send to each matched user in their language ──
458
+ // Only pro users are tracked in telegramMessages (for enrichment editing).
459
+ // Free users receive a plain message in private chats only.
431
460
  const telegramMessages = [];
432
- for (const cid of config.chatIds) {
433
- const replyTo = replyToMap.get(cid);
434
- const sent = await sendTelegram(cid, alertType, message, replyTo);
435
- if (sent) {
461
+ for (const user of matchedUsers) {
462
+ const isPro = user.tier === "pro";
463
+ // Free users cannot receive alerts in group/channel chats (negative chatId)
464
+ if (!isPro && user.chatId.startsWith("-"))
465
+ continue;
466
+ const lang = (user.language ?? "ru");
467
+ const userAreaLabel = userMatchedLabel(user, alert.data);
468
+ let message = formatMessage(alertType, userAreaLabel, lang);
469
+ // Only pro users get carry-forward enrichment pre-populated
470
+ if (isPro && legacyInsights.length > 0) {
471
+ message = buildEnrichedMessage(message, alertType, alertTs, legacyInsights, lang);
472
+ }
473
+ const replyTo = replyToMap.get(user.chatId);
474
+ const sent = await sendTelegram(user.chatId, alertType, message, replyTo);
475
+ if (sent && isPro) {
476
+ // Only pro users tracked — enrichment agent only edits their messages
436
477
  telegramMessages.push({
437
- chatId: cid,
478
+ chatId: user.chatId,
438
479
  messageId: sent.messageId,
439
480
  isCaption: sent.isCaption,
481
+ language: user.language,
440
482
  });
441
483
  }
442
484
  }
@@ -446,7 +488,7 @@ async function processAlert(alert) {
446
488
  // ── Session-based enrichment lifecycle ──
447
489
  if (config.agent.enabled) {
448
490
  const existingSession = await getActiveSession();
449
- // Save meta for this alert (primary chat)
491
+ // Save meta for this alert (primary chat; English canonical text)
450
492
  await saveAlertMeta({
451
493
  alertId: alert.id,
452
494
  messageId: primary.messageId,
@@ -455,7 +497,7 @@ async function processAlert(alert) {
455
497
  alertTs,
456
498
  alertType,
457
499
  alertAreas: alert.data,
458
- currentText: message,
500
+ currentText: baseMessage,
459
501
  });
460
502
  if (alertType === "resolved") {
461
503
  // ── Resolved: switch existing session to resolved phase ──
@@ -469,7 +511,7 @@ async function processAlert(alert) {
469
511
  latestAlertTs: alertTs,
470
512
  chatId: primary.chatId,
471
513
  isCaption: primary.isCaption,
472
- currentText: message,
514
+ currentText: baseMessage,
473
515
  baseText: baseMessage,
474
516
  telegramMessages,
475
517
  };
@@ -500,7 +542,7 @@ async function processAlert(alert) {
500
542
  latestAlertTs: alertTs,
501
543
  chatId: primary.chatId,
502
544
  isCaption: primary.isCaption,
503
- currentText: message,
545
+ currentText: baseMessage,
504
546
  baseText: baseMessage,
505
547
  alertAreas: alert.data,
506
548
  telegramMessages,
@@ -528,7 +570,7 @@ async function processAlert(alert) {
528
570
  latestAlertTs: alertTs,
529
571
  chatId: primary.chatId,
530
572
  isCaption: primary.isCaption,
531
- currentText: message,
573
+ currentText: baseMessage,
532
574
  baseText: baseMessage,
533
575
  alertAreas: alert.data,
534
576
  telegramMessages,
@@ -556,17 +598,34 @@ async function processAlert(alert) {
556
598
  // Health Server
557
599
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
558
600
  function startHealthServer() {
559
- const server = createServer((req, res) => {
601
+ const server = createServer(async (req, res) => {
560
602
  if (req.url === "/health") {
603
+ let redisConnected = false;
604
+ let activeSessionPhase = null;
605
+ let lastEnrichTs = 0;
606
+ try {
607
+ const session = await getActiveSession();
608
+ activeSessionPhase = session?.phase ?? null;
609
+ lastEnrichTs = await getLastUpdateTs();
610
+ redisConnected = true;
611
+ }
612
+ catch {
613
+ // Redis unreachable
614
+ }
561
615
  res.writeHead(200, { "Content-Type": "application/json" });
562
616
  res.end(JSON.stringify({
563
617
  status: "ok",
564
618
  service: "easyoref",
565
619
  uptime: process.uptime(),
566
620
  seen_alerts: seenAlerts.size,
567
- language: config.language,
568
621
  gif_mode: config.gifMode,
569
- areas: config.areas,
622
+ last_alert_ts: lastAlertTs || null,
623
+ last_enrichment_ts: lastEnrichTs || null,
624
+ registered_users: registeredUserCount,
625
+ redis_connected: redisConnected,
626
+ gramjs_connected: config.agent.enabled ? isGramJsConnected() : null,
627
+ active_session_phase: activeSessionPhase,
628
+ agent_enabled: config.agent.enabled,
570
629
  }));
571
630
  }
572
631
  else {
@@ -585,24 +644,30 @@ async function main() {
585
644
  logger.info("EasyOref starting", {
586
645
  poll_interval_ms: config.pollIntervalMs,
587
646
  telegram: config.botToken ? "enabled" : "disabled",
588
- language: config.language,
589
647
  gif_mode: config.gifMode,
590
- areas: config.areas,
591
648
  });
592
- await initTranslations();
593
- // Resolve YAML city_ids Hebrew area names for Oref API matching
594
- if (config.cityIds.length > 0) {
595
- config.areas = resolveCityIds(config.cityIds);
596
- logger.info("Resolved city IDs to area names", {
597
- city_ids: config.cityIds,
598
- areas: config.areas,
649
+ // Load area translations (fetches cities.json from pikud-haoref-api).
650
+ // Retry once if network not ready yet (common on RPi cold boot).
651
+ await initTranslations().catch(async () => {
652
+ logger.warn("initTranslations failed — retrying in 30s");
653
+ await new Promise((r) => setTimeout(r, 30_000));
654
+ await initTranslations().catch(() => {
655
+ logger.warn("initTranslations failed on retry — area names may show in Hebrew");
599
656
  });
600
- }
601
- if (config.areas.length === 0) {
602
- logger.warn("No areas configured — bot will not filter alerts by area");
603
- }
657
+ });
604
658
  initGifState(config.dataDir);
605
659
  bot = initBot();
660
+ if (bot) {
661
+ initDefaultAreas();
662
+ registerStartHandler(bot);
663
+ registerAdminHandler(bot);
664
+ registerShelterHandler(bot);
665
+ registerQaHandler(bot);
666
+ registerInlineHandler(bot);
667
+ bot.start({ drop_pending_updates: true }).catch((err) => {
668
+ logger.error("Bot polling failed", { error: String(err) });
669
+ });
670
+ }
606
671
  startHealthServer();
607
672
  // Start agent subsystems if enabled
608
673
  if (config.agent.enabled) {
@@ -615,6 +680,12 @@ async function main() {
615
680
  channels: 14, // MONITORED_CHANNELS length (hardcoded)
616
681
  enrich_delay_ms: config.agent.enrichDelayMs,
617
682
  });
683
+ // Canary: synthetic self-test (non-blocking)
684
+ if (config.agent.canary) {
685
+ runCanary().catch((err) => {
686
+ logger.error("Canary failed", { error: String(err) });
687
+ });
688
+ }
618
689
  }
619
690
  // Poll loop
620
691
  setInterval(async () => {
@@ -631,12 +702,13 @@ async function main() {
631
702
  logger.error("Poll error", { error: String(err) });
632
703
  }
633
704
  }, config.pollIntervalMs);
634
- // Heartbeat — flush Logtail buffer every 30s
705
+ // Heartbeat — flush Logtail buffer + refresh user count every 30s
635
706
  setInterval(async () => {
636
707
  logger.debug("heartbeat", {
637
708
  uptime_s: Math.round(process.uptime()),
638
709
  seen_alerts: seenAlerts.size,
639
710
  });
711
+ await refreshUserCount();
640
712
  await logger.flush();
641
713
  }, 30_000);
642
714
  // Graceful shutdown
package/dist/bot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
package/dist/gif-state.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Stores which GIFs have been shown to avoid repeats.
5
5
  * State survives restarts + redeploys via JSON file.
6
6
  */
7
- import * as logger from "@easyoref/monitoring";
7
+ import * as logger from "@easyoref/shared/logger";
8
8
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
9
9
  import { join } from "node:path";
10
10
  let gifBags = {};
@@ -1 +1 @@
1
- {"version":3,"file":"gif-state.js","sourceRoot":"","sources":["../src/gif-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,IAAI,OAAO,GAAY,EAAE,CAAC;AAC1B,IAAI,aAAa,GAAG,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC9B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;oBAClC,IAAI,EAAE,aAAa;iBACpB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,OAAO;IACd,IAAI,CAAC;QACH,MAAM,KAAK,GAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1D,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,OAAe;IACrD,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAG,CAAC;IACvB,OAAO,EAAE,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"gif-state.js","sourceRoot":"","sources":["../src/gif-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,IAAI,OAAO,GAAY,EAAE,CAAC;AAC1B,IAAI,aAAa,GAAG,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC9B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;oBAClC,IAAI,EAAE,aAAa;iBACpB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,OAAO;IACd,IAAI,CAAC;QACH,MAAM,KAAK,GAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1D,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,OAAe;IACrD,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAG,CAAC;IACvB,OAAO,EAAE,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Bot } from "grammy";
2
+ export declare function registerAdminHandler(bot: Bot): void;
3
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAMlC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAgEnD"}
@@ -0,0 +1,65 @@
1
+ import { config, getAllUsers, setUserTier } from "@easyoref/shared";
2
+ import * as logger from "@easyoref/shared/logger";
3
+ function isAdmin(chatId) {
4
+ return config.adminChatIds.includes(Number(chatId));
5
+ }
6
+ export function registerAdminHandler(bot) {
7
+ // /grant <chatId> — upgrade user to Pro
8
+ bot.command("grant", async (ctx) => {
9
+ const adminId = String(ctx.chat.id);
10
+ if (!isAdmin(adminId)) {
11
+ await ctx.reply("Unauthorized.");
12
+ return;
13
+ }
14
+ const args = ctx.match?.trim();
15
+ if (!args) {
16
+ await ctx.reply("Usage: /grant <chatId>");
17
+ return;
18
+ }
19
+ const success = await setUserTier(args, "pro");
20
+ if (success) {
21
+ await ctx.reply(`✅ User ${args} upgraded to Pro.`);
22
+ logger.info("Admin: granted pro", { adminId, targetId: args });
23
+ }
24
+ else {
25
+ await ctx.reply(`User ${args} not found.`);
26
+ }
27
+ });
28
+ // /revoke <chatId> — downgrade user to Free
29
+ bot.command("revoke", async (ctx) => {
30
+ const adminId = String(ctx.chat.id);
31
+ if (!isAdmin(adminId)) {
32
+ await ctx.reply("Unauthorized.");
33
+ return;
34
+ }
35
+ const args = ctx.match?.trim();
36
+ if (!args) {
37
+ await ctx.reply("Usage: /revoke <chatId>");
38
+ return;
39
+ }
40
+ const success = await setUserTier(args, "free");
41
+ if (success) {
42
+ await ctx.reply(`✅ User ${args} downgraded to Free.`);
43
+ logger.info("Admin: revoked pro", { adminId, targetId: args });
44
+ }
45
+ else {
46
+ await ctx.reply(`User ${args} not found.`);
47
+ }
48
+ });
49
+ // /users — list all registered users
50
+ bot.command("users", async (ctx) => {
51
+ const adminId = String(ctx.chat.id);
52
+ if (!isAdmin(adminId)) {
53
+ await ctx.reply("Unauthorized.");
54
+ return;
55
+ }
56
+ const allUsers = await getAllUsers();
57
+ if (allUsers.length === 0) {
58
+ await ctx.reply("No registered users.");
59
+ return;
60
+ }
61
+ const lines = allUsers.map((u) => `• <code>${u.chatId}</code> — ${u.tier} — ${u.language} — ${u.areas.join(", ")}`);
62
+ await ctx.reply(`<b>Registered Users (${allUsers.length}):</b>\n\n${lines.join("\n")}`, { parse_mode: "HTML" });
63
+ });
64
+ }
65
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Bot } from "grammy";
2
+ export declare function registerInlineHandler(bot: Bot): void;
3
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAGlC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAmFpD"}
@@ -0,0 +1,88 @@
1
+ import { runQa } from "@easyoref/agent";
2
+ import { getActiveSession, getUser } from "@easyoref/shared";
3
+ import * as logger from "@easyoref/shared/logger";
4
+ export function registerInlineHandler(bot) {
5
+ bot.on("inline_query", async (ctx) => {
6
+ const query = ctx.inlineQuery.query.trim();
7
+ const results = [];
8
+ try {
9
+ if (!query) {
10
+ // Status widget — show current alert status from Redis
11
+ const session = await getActiveSession();
12
+ if (session) {
13
+ const phase = session.phase;
14
+ const areas = session.alertAreas.slice(0, 3).join(", ");
15
+ results.push({
16
+ type: "article",
17
+ id: "current_status",
18
+ title: `\u{1F6A8} Active Alert (${phase})`,
19
+ description: areas,
20
+ input_message_content: {
21
+ message_text: `<b>\u{1F6A8} Active Alert</b>\nPhase: ${phase}\nAreas: ${areas}`,
22
+ parse_mode: "HTML",
23
+ },
24
+ });
25
+ }
26
+ else {
27
+ results.push({
28
+ type: "article",
29
+ id: "no_alerts",
30
+ title: "\u2705 No Active Alerts",
31
+ description: "All clear",
32
+ input_message_content: {
33
+ message_text: "<b>\u2705 No Active Alerts</b>\nEasyOref is monitoring for threats.",
34
+ parse_mode: "HTML",
35
+ },
36
+ });
37
+ }
38
+ }
39
+ else {
40
+ // Q&A — run the QA graph
41
+ const chatId = String(ctx.from.id);
42
+ const user = await getUser(chatId);
43
+ if (user) {
44
+ const answer = await runQa(query, chatId);
45
+ const preview = answer.slice(0, 50) + (answer.length > 50 ? "…" : "");
46
+ results.push({
47
+ type: "article",
48
+ id: "qa_answer",
49
+ title: preview,
50
+ description: answer.slice(0, 100),
51
+ input_message_content: {
52
+ message_text: answer,
53
+ parse_mode: "HTML",
54
+ },
55
+ });
56
+ }
57
+ else {
58
+ results.push({
59
+ type: "article",
60
+ id: "not_registered",
61
+ title: "Not registered",
62
+ description: "Use /start to register",
63
+ input_message_content: {
64
+ message_text: "Please start the bot first: @easyorefbot",
65
+ },
66
+ });
67
+ }
68
+ }
69
+ }
70
+ catch (err) {
71
+ logger.error("Inline query failed", {
72
+ error: String(err),
73
+ query: query.slice(0, 100),
74
+ });
75
+ results.push({
76
+ type: "article",
77
+ id: "error",
78
+ title: "Error",
79
+ description: "Could not process query",
80
+ input_message_content: {
81
+ message_text: "An error occurred. Please try again.",
82
+ },
83
+ });
84
+ }
85
+ await ctx.answerInlineQuery(results, { cache_time: 30 });
86
+ });
87
+ }
88
+ //# sourceMappingURL=inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Bot } from "grammy";
2
+ export declare function registerQaHandler(bot: Bot): void;
3
+ //# sourceMappingURL=qa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAmChD"}
@@ -0,0 +1,38 @@
1
+ import { runQa } from "@easyoref/agent";
2
+ import { config, getRedis, getUser } from "@easyoref/shared";
3
+ import * as logger from "@easyoref/shared/logger";
4
+ export function registerQaHandler(bot) {
5
+ bot.on("message:text", async (ctx) => {
6
+ if (ctx.chat.type !== "private")
7
+ return;
8
+ const chatId = String(ctx.chat.id);
9
+ // Rate limit: qaRateLimitPerMin per user (Redis INCR + EXPIRE)
10
+ const redis = getRedis();
11
+ const rateLimitKey = `qa:rate:${chatId}`;
12
+ const count = await redis.incr(rateLimitKey);
13
+ if (count === 1)
14
+ await redis.expire(rateLimitKey, 60);
15
+ if (count > config.agent.qaRateLimitPerMin) {
16
+ await ctx.reply("Too many questions. Please wait a minute.");
17
+ return;
18
+ }
19
+ // Skip /commands — let grammY command handlers handle them
20
+ if (ctx.message.text.startsWith("/"))
21
+ return;
22
+ const user = await getUser(chatId);
23
+ if (!user) {
24
+ await ctx.reply("Please use /start to register first.");
25
+ return;
26
+ }
27
+ await ctx.replyWithChatAction("typing");
28
+ try {
29
+ const answer = await runQa(ctx.message.text, chatId);
30
+ await ctx.reply(answer, { parse_mode: "HTML" });
31
+ }
32
+ catch (err) {
33
+ logger.error("Q&A failed", { error: String(err), chatId });
34
+ await ctx.reply("I couldn't process your question. Please try again.");
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=qa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAGlD,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QAExC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnC,+DAA+D;QAC/D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,WAAW,MAAM,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC3C,MAAM,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,2DAA2D;QAC3D,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAE7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shelter search handler — responds to location messages with nearest bomb shelters.
3
+ * Safety-critical feature: available to ALL tiers (free + pro).
4
+ */
5
+ import type { Bot } from "grammy";
6
+ export declare function registerShelterHandler(bot: Bot): void;
7
+ //# sourceMappingURL=shelter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shelter.d.ts","sourceRoot":"","sources":["../../src/handlers/shelter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAiBlC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA2BrD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shelter search handler — responds to location messages with nearest bomb shelters.
3
+ * Safety-critical feature: available to ALL tiers (free + pro).
4
+ */
5
+ import { fetchNearestShelters } from "@easyoref/shared";
6
+ import * as logger from "@easyoref/shared/logger";
7
+ function formatShelterList(nearest) {
8
+ const lines = nearest.map((s, i) => {
9
+ const dist = s.distanceKm < 1
10
+ ? `${Math.round(s.distanceKm * 1000)}m`
11
+ : `${s.distanceKm.toFixed(1)}km`;
12
+ return (`${i + 1}. <b>${s.name}</b>${s.address ? ` — ${s.address}` : ""}\n` +
13
+ ` 📍 ${dist} (~${s.walkingMinutes} min walk)\n` +
14
+ ` <a href="${s.googleMapsUrl}">Open in Maps</a>`);
15
+ });
16
+ return `🏚 <b>Nearest shelters:</b>\n\n${lines.join("\n\n")}`;
17
+ }
18
+ export function registerShelterHandler(bot) {
19
+ bot.on("message:location", async (ctx) => {
20
+ const { latitude, longitude } = ctx.message.location;
21
+ const chatId = String(ctx.chat.id);
22
+ logger.info("Shelter search requested", { chatId, latitude, longitude });
23
+ // Send typing indicator while fetching
24
+ await ctx.replyWithChatAction("find_location").catch(() => { });
25
+ const nearest = await fetchNearestShelters(latitude, longitude);
26
+ if (nearest.length === 0) {
27
+ await ctx.reply("No shelters found nearby in OpenStreetMap data.\n\n" +
28
+ "Try the official Pikud HaOref shelter finder:\n" +
29
+ "https://www.oref.org.il/NAShelters/", { link_preview_options: { is_disabled: true } });
30
+ return;
31
+ }
32
+ await ctx.reply(formatShelterList(nearest), {
33
+ parse_mode: "HTML",
34
+ link_preview_options: { is_disabled: true },
35
+ });
36
+ });
37
+ }
38
+ //# sourceMappingURL=shelter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shelter.js","sourceRoot":"","sources":["../../src/handlers/shelter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAoB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAGlD,SAAS,iBAAiB,CAAC,OAAsB;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,IAAI,GACR,CAAC,CAAC,UAAU,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG;YACvC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,OAAO,CACL,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;YACnE,SAAS,IAAI,MAAM,CAAC,CAAC,cAAc,cAAc;YACjD,eAAe,CAAC,CAAC,aAAa,oBAAoB,CACnD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,kCAAkC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAQ;IAC7C,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAEzE,uCAAuC;QACvC,MAAM,GAAG,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,KAAK,CACb,qDAAqD;gBACnD,iDAAiD;gBACjD,qCAAqC,EACvC,EAAE,oBAAoB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAChD,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;YAC1C,UAAU,EAAE,MAAM;YAClB,oBAAoB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Bot } from "grammy";
2
+ export declare function initDefaultAreas(): void;
3
+ /**
4
+ * /start [lang] — register or update user.
5
+ * In private chat: registers the user with their chat ID.
6
+ * In group chat: registers the group chat ID.
7
+ *
8
+ * Areas default to config.city_ids (resolved Hebrew names).
9
+ * Language defaults to "ru" or optional argument.
10
+ *
11
+ * Examples:
12
+ * /start → register with default language (ru)
13
+ * /start en → register with English
14
+ * /start he → register with Hebrew
15
+ */
16
+ export declare function registerStartHandler(bot: Bot): void;
17
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/handlers/start.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAKlC,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA8CnD"}
@@ -0,0 +1,61 @@
1
+ import { config, getUser, isValidLanguage, resolveCityIds, saveUser, } from "@easyoref/shared";
2
+ import * as logger from "@easyoref/shared/logger";
3
+ /** Default areas from config city_ids (resolved at startup via initTranslations) */
4
+ let defaultAreas = [];
5
+ export function initDefaultAreas() {
6
+ if (config.cityIds.length > 0) {
7
+ defaultAreas = resolveCityIds(config.cityIds);
8
+ }
9
+ }
10
+ /**
11
+ * /start [lang] — register or update user.
12
+ * In private chat: registers the user with their chat ID.
13
+ * In group chat: registers the group chat ID.
14
+ *
15
+ * Areas default to config.city_ids (resolved Hebrew names).
16
+ * Language defaults to "ru" or optional argument.
17
+ *
18
+ * Examples:
19
+ * /start → register with default language (ru)
20
+ * /start en → register with English
21
+ * /start he → register with Hebrew
22
+ */
23
+ export function registerStartHandler(bot) {
24
+ bot.command("start", async (ctx) => {
25
+ const chatId = String(ctx.chat.id);
26
+ const args = ctx.match?.trim();
27
+ // Parse optional language argument
28
+ let lang = "ru";
29
+ if (args && isValidLanguage(args)) {
30
+ lang = args;
31
+ }
32
+ // Resolve areas: use defaults from config city_ids
33
+ const areas = defaultAreas.length > 0 ? defaultAreas : ["תל אביב - דרום העיר ויפו"];
34
+ const existing = await getUser(chatId);
35
+ if (existing) {
36
+ // Update language if changed, refresh lastActiveAt
37
+ const updated = {
38
+ ...existing,
39
+ language: lang,
40
+ lastActiveAt: Date.now(),
41
+ };
42
+ await saveUser(updated);
43
+ await ctx.reply(`✅ Updated! Language: ${lang}, Areas: ${areas.join(", ")}`);
44
+ logger.info("User updated via /start", { chatId, lang });
45
+ return;
46
+ }
47
+ // New registration
48
+ const user = {
49
+ chatId,
50
+ language: lang,
51
+ areas,
52
+ tier: "free",
53
+ registeredAt: Date.now(),
54
+ lastActiveAt: Date.now(),
55
+ };
56
+ await saveUser(user);
57
+ await ctx.reply(`✅ Registered! Language: ${lang}, Areas: ${areas.join(", ")}\n\nYou will receive alerts for these areas.`);
58
+ logger.info("User registered via /start", { chatId, lang, areas });
59
+ });
60
+ }
61
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/handlers/start.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,eAAe,EACf,cAAc,EACd,QAAQ,GAET,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAGlD,oFAAoF;AACpF,IAAI,YAAY,GAAa,EAAE,CAAC;AAEhC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAQ;IAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAE/B,mCAAmC;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;QAED,mDAAmD;QACnD,MAAM,KAAK,GACT,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,mDAAmD;YACnD,MAAM,OAAO,GAAe;gBAC1B,GAAG,QAAQ;gBACX,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,CAAC;YACF,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,GAAG,CAAC,KAAK,CACb,wBAAwB,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3D,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,GAAe;YACvB,MAAM;YACN,QAAQ,EAAE,IAAI;YACd,KAAK;YACL,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;QACF,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,GAAG,CAAC,KAAK,CACb,2BAA2B,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAC1G,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Context, NextFunction } from "grammy";
2
+ /**
3
+ * Middleware that requires the user to have a "pro" tier.
4
+ * Replies with an upgrade prompt and stops the handler chain for free users.
5
+ */
6
+ export declare function requirePro(ctx: Context, next: NextFunction): Promise<void>;
7
+ //# sourceMappingURL=tier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../src/middleware/tier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEpD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,17 @@
1
+ import { getUser } from "@easyoref/shared";
2
+ /**
3
+ * Middleware that requires the user to have a "pro" tier.
4
+ * Replies with an upgrade prompt and stops the handler chain for free users.
5
+ */
6
+ export async function requirePro(ctx, next) {
7
+ const chatId = String(ctx.chat?.id ?? "");
8
+ if (!chatId)
9
+ return;
10
+ const user = await getUser(chatId);
11
+ if (user?.tier !== "pro") {
12
+ await ctx.reply("This feature requires Pro tier. Contact the bot admin.");
13
+ return;
14
+ }
15
+ return next();
16
+ }
17
+ //# sourceMappingURL=tier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier.js","sourceRoot":"","sources":["../../src/middleware/tier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,IAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easyoref",
3
- "version": "1.27.9",
3
+ "version": "2.0.0",
4
4
  "description": "Real-time Israeli civil defense alerts → Telegram, filtered by your location",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,7 +37,6 @@
37
37
  "js-yaml": "^4.1.1",
38
38
  "qrcode-terminal": "^0.12.0",
39
39
  "@easyoref/shared": "*",
40
- "@easyoref/monitoring": "*",
41
40
  "@easyoref/agent": "*",
42
41
  "@easyoref/gramjs": "*"
43
42
  },