@automagik/omni 2.260501.3 → 2.260501.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -34234,7 +34234,8 @@ class AutomationEngine {
34234
34234
  this.deps = {
34235
34235
  eventBus,
34236
34236
  sendMessage: deps.sendMessage,
34237
- callAgent: deps.callAgent
34237
+ callAgent: deps.callAgent,
34238
+ staleIdleTimeoutGate: deps.staleIdleTimeoutGate
34238
34239
  };
34239
34240
  this.automations = automations.filter((a) => a.enabled);
34240
34241
  await this.reconcileSubscriptions();
@@ -34371,6 +34372,34 @@ class AutomationEngine {
34371
34372
  this.reconcileTimer = null;
34372
34373
  }
34373
34374
  }
34375
+ async shouldSkipStaleIdleTimeout(event) {
34376
+ if (event.type !== "chat.idle_timeout" || !this.deps.staleIdleTimeoutGate)
34377
+ return false;
34378
+ const payload = event.payload;
34379
+ const chatId = payload?.chatId;
34380
+ const payloadInstanceId = payload?.instanceId ?? event.metadata.instanceId;
34381
+ if (!chatId || !payloadInstanceId)
34382
+ return false;
34383
+ try {
34384
+ const verdict = await this.deps.staleIdleTimeoutGate(chatId, payloadInstanceId);
34385
+ if (verdict.skip) {
34386
+ logger4.info("Skipping stale chat.idle_timeout event", {
34387
+ eventId: event.id,
34388
+ chatId,
34389
+ instanceId: payloadInstanceId,
34390
+ reason: verdict.reason ?? "unknown"
34391
+ });
34392
+ return true;
34393
+ }
34394
+ } catch (err2) {
34395
+ logger4.warn("staleIdleTimeoutGate threw, proceeding without skip", {
34396
+ eventId: event.id,
34397
+ chatId,
34398
+ error: err2 instanceof Error ? err2.message : String(err2)
34399
+ });
34400
+ }
34401
+ return false;
34402
+ }
34374
34403
  async handleEvent(event) {
34375
34404
  const eventType = event.type;
34376
34405
  const instanceId = event.metadata.instanceId ?? "global";
@@ -34378,6 +34407,9 @@ class AutomationEngine {
34378
34407
  if (matchingAutomations.length === 0) {
34379
34408
  return;
34380
34409
  }
34410
+ if (await this.shouldSkipStaleIdleTimeout(event)) {
34411
+ return;
34412
+ }
34381
34413
  logger4.debug(`Processing event ${eventType} for ${matchingAutomations.length} automation(s)`, {
34382
34414
  eventId: event.id,
34383
34415
  instanceId
@@ -114177,7 +114209,7 @@ import { fileURLToPath } from "url";
114177
114209
  // package.json
114178
114210
  var package_default = {
114179
114211
  name: "@automagik/omni",
114180
- version: "2.260501.3",
114212
+ version: "2.260501.5",
114181
114213
  description: "LLM-optimized CLI for Omni",
114182
114214
  type: "module",
114183
114215
  bin: {
@@ -28397,7 +28397,8 @@ class AutomationEngine {
28397
28397
  this.deps = {
28398
28398
  eventBus,
28399
28399
  sendMessage: deps.sendMessage,
28400
- callAgent: deps.callAgent
28400
+ callAgent: deps.callAgent,
28401
+ staleIdleTimeoutGate: deps.staleIdleTimeoutGate
28401
28402
  };
28402
28403
  this.automations = automations.filter((a) => a.enabled);
28403
28404
  await this.reconcileSubscriptions();
@@ -28534,6 +28535,34 @@ class AutomationEngine {
28534
28535
  this.reconcileTimer = null;
28535
28536
  }
28536
28537
  }
28538
+ async shouldSkipStaleIdleTimeout(event) {
28539
+ if (event.type !== "chat.idle_timeout" || !this.deps.staleIdleTimeoutGate)
28540
+ return false;
28541
+ const payload = event.payload;
28542
+ const chatId = payload?.chatId;
28543
+ const payloadInstanceId = payload?.instanceId ?? event.metadata.instanceId;
28544
+ if (!chatId || !payloadInstanceId)
28545
+ return false;
28546
+ try {
28547
+ const verdict = await this.deps.staleIdleTimeoutGate(chatId, payloadInstanceId);
28548
+ if (verdict.skip) {
28549
+ logger4.info("Skipping stale chat.idle_timeout event", {
28550
+ eventId: event.id,
28551
+ chatId,
28552
+ instanceId: payloadInstanceId,
28553
+ reason: verdict.reason ?? "unknown"
28554
+ });
28555
+ return true;
28556
+ }
28557
+ } catch (err) {
28558
+ logger4.warn("staleIdleTimeoutGate threw, proceeding without skip", {
28559
+ eventId: event.id,
28560
+ chatId,
28561
+ error: err instanceof Error ? err.message : String(err)
28562
+ });
28563
+ }
28564
+ return false;
28565
+ }
28537
28566
  async handleEvent(event) {
28538
28567
  const eventType = event.type;
28539
28568
  const instanceId = event.metadata.instanceId ?? "global";
@@ -28541,6 +28570,9 @@ class AutomationEngine {
28541
28570
  if (matchingAutomations.length === 0) {
28542
28571
  return;
28543
28572
  }
28573
+ if (await this.shouldSkipStaleIdleTimeout(event)) {
28574
+ return;
28575
+ }
28544
28576
  logger4.debug(`Processing event ${eventType} for ${matchingAutomations.length} automation(s)`, {
28545
28577
  eventId: event.id,
28546
28578
  instanceId
@@ -224654,7 +224686,7 @@ var init_sentry_scrub = __esm(() => {
224654
224686
  var require_package8 = __commonJS((exports, module) => {
224655
224687
  module.exports = {
224656
224688
  name: "@omni/api",
224657
- version: "2.260501.3",
224689
+ version: "2.260501.5",
224658
224690
  type: "module",
224659
224691
  exports: {
224660
224692
  ".": {
@@ -283512,6 +283544,16 @@ class FollowUpLifecycleService {
283512
283544
  const created = row?.xmax === "0";
283513
283545
  return { created };
283514
283546
  }
283547
+ async evaluateIdleTimeoutFreshness(chatId, instanceId) {
283548
+ if (await this.isInActiveCloseState(chatId, instanceId)) {
283549
+ return { skip: true, reason: "chat_closed" };
283550
+ }
283551
+ const row = await this.readExistingRow(chatId, instanceId);
283552
+ if (row?.disarmReason) {
283553
+ return { skip: true, reason: `disarmed_${row.disarmReason}` };
283554
+ }
283555
+ return { skip: false };
283556
+ }
283515
283557
  async readExistingRow(chatId, instanceId) {
283516
283558
  const [row] = await this.db.select({
283517
283559
  disarmReason: chatFollowUpState.disarmReason,
@@ -297326,6 +297368,36 @@ function checkInstanceAccess(apiKey, instanceId) {
297326
297368
  });
297327
297369
  }
297328
297370
  }
297371
+ async function getActiveInstanceId(c) {
297372
+ const keyData = c.get("apiKey");
297373
+ if (!keyData)
297374
+ return null;
297375
+ const db2 = c.get("db");
297376
+ const [row] = await db2.select({
297377
+ activeInstanceId: apiKeys.activeInstanceId,
297378
+ contextInstanceId: apiKeys.contextInstanceId
297379
+ }).from(apiKeys).where(eq(apiKeys.id, keyData.id)).limit(1);
297380
+ return row?.contextInstanceId ?? row?.activeInstanceId ?? null;
297381
+ }
297382
+ async function resolveChatIdParam(c, raw2, explicitInstanceId) {
297383
+ if (UUID_REGEX.test(raw2))
297384
+ return raw2;
297385
+ const instanceId = explicitInstanceId ?? await getActiveInstanceId(c);
297386
+ if (!instanceId)
297387
+ return null;
297388
+ checkInstanceAccess(c.get("apiKey"), instanceId);
297389
+ const services = c.get("services");
297390
+ const chat2 = await services.chats.findByExternalIdSmart(instanceId, raw2);
297391
+ return chat2?.id ?? null;
297392
+ }
297393
+ function chatNotFoundResponse(c, raw2) {
297394
+ return c.json({
297395
+ error: {
297396
+ code: ERROR_CODES.NOT_FOUND,
297397
+ message: `Chat not found: ${raw2}. Pass either a chat UUID or set the API key's active instance via POST /api/v2/context/use first.`
297398
+ }
297399
+ }, 404);
297400
+ }
297329
297401
  async function getPluginForInstance(services, channelRegistry2, instanceId, requiredCapability) {
297330
297402
  const instance4 = await services.instances.getById(instanceId);
297331
297403
  if (!channelRegistry2) {
@@ -297393,16 +297465,19 @@ function resolveContactName2(chat2, contactNames) {
297393
297465
  }
297394
297466
  return;
297395
297467
  }
297396
- var chatsRoutes, ChatTypeSchema, listQuerySchema6, createChatSchema, updateChatSchema, addParticipantSchema, updateParticipantRoleSchema, chatChannelActionSchema, muteActionSchema, labelBodySchema, listMessagesQuerySchema, markChatReadSchema, disappearingSchema, DISAPPEARING_DURATIONS, syncNamesSchema, clearSessionSchema;
297468
+ var chatsRoutes, UUID_REGEX, ChatTypeSchema, listQuerySchema6, createChatSchema, updateChatSchema, addParticipantSchema, updateParticipantRoleSchema, chatChannelActionSchema, muteActionSchema, labelBodySchema, listMessagesQuerySchema, markChatReadSchema, disappearingSchema, DISAPPEARING_DURATIONS, syncNamesSchema, clearSessionSchema;
297397
297469
  var init_chats2 = __esm(() => {
297398
297470
  init_dist6();
297399
297471
  init_src();
297472
+ init_schema2();
297473
+ init_drizzle_orm();
297400
297474
  init_dist2();
297401
297475
  init_zod();
297402
297476
  init_session_cleaner();
297403
297477
  init_date_query();
297404
297478
  init_api_keys();
297405
297479
  chatsRoutes = new Hono2;
297480
+ UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
297406
297481
  ChatTypeSchema = exports_external.enum([
297407
297482
  "dm",
297408
297483
  "group",
@@ -297486,20 +297561,29 @@ var init_chats2 = __esm(() => {
297486
297561
  return c.json({ data: chat2 }, 201);
297487
297562
  });
297488
297563
  chatsRoutes.get("/:id", async (c) => {
297489
- const id = c.req.param("id");
297564
+ const raw2 = c.req.param("id");
297565
+ const id = await resolveChatIdParam(c, raw2);
297566
+ if (id === null)
297567
+ return chatNotFoundResponse(c, raw2);
297490
297568
  const services = c.get("services");
297491
297569
  const chat2 = await services.chats.getById(id);
297492
297570
  return c.json({ data: chat2 });
297493
297571
  });
297494
297572
  chatsRoutes.patch("/:id", zValidator("json", updateChatSchema), async (c) => {
297495
- const id = c.req.param("id");
297573
+ const raw2 = c.req.param("id");
297574
+ const id = await resolveChatIdParam(c, raw2);
297575
+ if (id === null)
297576
+ return chatNotFoundResponse(c, raw2);
297496
297577
  const body = c.req.valid("json");
297497
297578
  const services = c.get("services");
297498
297579
  const chat2 = await services.chats.update(id, body);
297499
297580
  return c.json({ data: chat2 });
297500
297581
  });
297501
297582
  chatsRoutes.delete("/:id", async (c) => {
297502
- const id = c.req.param("id");
297583
+ const raw2 = c.req.param("id");
297584
+ const id = await resolveChatIdParam(c, raw2);
297585
+ if (id === null)
297586
+ return chatNotFoundResponse(c, raw2);
297503
297587
  const services = c.get("services");
297504
297588
  await services.chats.delete(id);
297505
297589
  return c.json({ success: true });
@@ -297512,8 +297596,11 @@ var init_chats2 = __esm(() => {
297512
297596
  duration: exports_external.number().int().positive().optional().describe("Mute duration in milliseconds (default: 8 hours)")
297513
297597
  });
297514
297598
  chatsRoutes.post("/:id/archive", zValidator("json", chatChannelActionSchema), async (c) => {
297515
- const id = c.req.param("id");
297599
+ const raw2 = c.req.param("id");
297516
297600
  const body = c.req.valid("json");
297601
+ const id = await resolveChatIdParam(c, raw2, body?.instanceId);
297602
+ if (id === null)
297603
+ return chatNotFoundResponse(c, raw2);
297517
297604
  const services = c.get("services");
297518
297605
  const channelRegistry2 = c.get("channelRegistry");
297519
297606
  if (body?.instanceId) {
@@ -297527,8 +297614,11 @@ var init_chats2 = __esm(() => {
297527
297614
  return c.json({ data: chat2 });
297528
297615
  });
297529
297616
  chatsRoutes.post("/:id/unarchive", zValidator("json", chatChannelActionSchema), async (c) => {
297530
- const id = c.req.param("id");
297617
+ const raw2 = c.req.param("id");
297531
297618
  const body = c.req.valid("json");
297619
+ const id = await resolveChatIdParam(c, raw2, body?.instanceId);
297620
+ if (id === null)
297621
+ return chatNotFoundResponse(c, raw2);
297532
297622
  const services = c.get("services");
297533
297623
  const channelRegistry2 = c.get("channelRegistry");
297534
297624
  if (body?.instanceId) {
@@ -297545,21 +297635,30 @@ var init_chats2 = __esm(() => {
297545
297635
  label: exports_external.string().min(1).max(50)
297546
297636
  });
297547
297637
  chatsRoutes.post("/:id/hide", async (c) => {
297548
- const id = c.req.param("id");
297638
+ const raw2 = c.req.param("id");
297639
+ const id = await resolveChatIdParam(c, raw2);
297640
+ if (id === null)
297641
+ return chatNotFoundResponse(c, raw2);
297549
297642
  const services = c.get("services");
297550
297643
  await services.chats.hide(id);
297551
297644
  const chat2 = await services.chats.getById(id, { includeHidden: true });
297552
297645
  return c.json({ data: chat2 });
297553
297646
  });
297554
297647
  chatsRoutes.post("/:id/unhide", async (c) => {
297555
- const id = c.req.param("id");
297648
+ const raw2 = c.req.param("id");
297649
+ const id = await resolveChatIdParam(c, raw2);
297650
+ if (id === null)
297651
+ return chatNotFoundResponse(c, raw2);
297556
297652
  const services = c.get("services");
297557
297653
  await services.chats.unhide(id);
297558
297654
  const chat2 = await services.chats.getById(id);
297559
297655
  return c.json({ data: chat2 });
297560
297656
  });
297561
297657
  chatsRoutes.post("/:id/label", zValidator("json", labelBodySchema), async (c) => {
297562
- const id = c.req.param("id");
297658
+ const raw2 = c.req.param("id");
297659
+ const id = await resolveChatIdParam(c, raw2);
297660
+ if (id === null)
297661
+ return chatNotFoundResponse(c, raw2);
297563
297662
  const { label } = c.req.valid("json");
297564
297663
  const services = c.get("services");
297565
297664
  await services.chats.addLabel(id, label);
@@ -297567,7 +297666,10 @@ var init_chats2 = __esm(() => {
297567
297666
  return c.json({ data: chat2 });
297568
297667
  });
297569
297668
  chatsRoutes.delete("/:id/label", zValidator("json", labelBodySchema), async (c) => {
297570
- const id = c.req.param("id");
297669
+ const raw2 = c.req.param("id");
297670
+ const id = await resolveChatIdParam(c, raw2);
297671
+ if (id === null)
297672
+ return chatNotFoundResponse(c, raw2);
297571
297673
  const { label } = c.req.valid("json");
297572
297674
  const services = c.get("services");
297573
297675
  await services.chats.removeLabel(id, label);
@@ -297575,8 +297677,11 @@ var init_chats2 = __esm(() => {
297575
297677
  return c.json({ data: chat2 });
297576
297678
  });
297577
297679
  chatsRoutes.post("/:id/pin", zValidator("json", exports_external.object({ instanceId: exports_external.string().uuid() })), async (c) => {
297578
- const id = c.req.param("id");
297680
+ const raw2 = c.req.param("id");
297579
297681
  const { instanceId } = c.req.valid("json");
297682
+ const id = await resolveChatIdParam(c, raw2, instanceId);
297683
+ if (id === null)
297684
+ return chatNotFoundResponse(c, raw2);
297580
297685
  const services = c.get("services");
297581
297686
  const channelRegistry2 = c.get("channelRegistry");
297582
297687
  checkInstanceAccess(c.get("apiKey"), instanceId);
@@ -297585,8 +297690,11 @@ var init_chats2 = __esm(() => {
297585
297690
  return c.json({ success: true, data: { chatId: id, action: "pin" } });
297586
297691
  });
297587
297692
  chatsRoutes.post("/:id/unpin", zValidator("json", exports_external.object({ instanceId: exports_external.string().uuid() })), async (c) => {
297588
- const id = c.req.param("id");
297693
+ const raw2 = c.req.param("id");
297589
297694
  const { instanceId } = c.req.valid("json");
297695
+ const id = await resolveChatIdParam(c, raw2, instanceId);
297696
+ if (id === null)
297697
+ return chatNotFoundResponse(c, raw2);
297590
297698
  const services = c.get("services");
297591
297699
  const channelRegistry2 = c.get("channelRegistry");
297592
297700
  checkInstanceAccess(c.get("apiKey"), instanceId);
@@ -297595,8 +297703,11 @@ var init_chats2 = __esm(() => {
297595
297703
  return c.json({ success: true, data: { chatId: id, action: "unpin" } });
297596
297704
  });
297597
297705
  chatsRoutes.post("/:id/mute", zValidator("json", muteActionSchema), async (c) => {
297598
- const id = c.req.param("id");
297706
+ const raw2 = c.req.param("id");
297599
297707
  const { instanceId, duration } = c.req.valid("json");
297708
+ const id = await resolveChatIdParam(c, raw2, instanceId);
297709
+ if (id === null)
297710
+ return chatNotFoundResponse(c, raw2);
297600
297711
  const services = c.get("services");
297601
297712
  const channelRegistry2 = c.get("channelRegistry");
297602
297713
  checkInstanceAccess(c.get("apiKey"), instanceId);
@@ -297605,8 +297716,11 @@ var init_chats2 = __esm(() => {
297605
297716
  return c.json({ success: true, data: { chatId: id, action: "mute", duration } });
297606
297717
  });
297607
297718
  chatsRoutes.post("/:id/unmute", zValidator("json", exports_external.object({ instanceId: exports_external.string().uuid() })), async (c) => {
297608
- const id = c.req.param("id");
297719
+ const raw2 = c.req.param("id");
297609
297720
  const { instanceId } = c.req.valid("json");
297721
+ const id = await resolveChatIdParam(c, raw2, instanceId);
297722
+ if (id === null)
297723
+ return chatNotFoundResponse(c, raw2);
297610
297724
  const services = c.get("services");
297611
297725
  const channelRegistry2 = c.get("channelRegistry");
297612
297726
  checkInstanceAccess(c.get("apiKey"), instanceId);
@@ -297615,13 +297729,19 @@ var init_chats2 = __esm(() => {
297615
297729
  return c.json({ success: true, data: { chatId: id, action: "unmute" } });
297616
297730
  });
297617
297731
  chatsRoutes.get("/:id/participants", async (c) => {
297618
- const id = c.req.param("id");
297732
+ const raw2 = c.req.param("id");
297733
+ const id = await resolveChatIdParam(c, raw2);
297734
+ if (id === null)
297735
+ return chatNotFoundResponse(c, raw2);
297619
297736
  const services = c.get("services");
297620
297737
  const participants = await services.chats.getParticipants(id);
297621
297738
  return c.json({ items: participants });
297622
297739
  });
297623
297740
  chatsRoutes.post("/:id/participants", zValidator("json", addParticipantSchema), async (c) => {
297624
- const chatId = c.req.param("id");
297741
+ const raw2 = c.req.param("id");
297742
+ const chatId = await resolveChatIdParam(c, raw2);
297743
+ if (chatId === null)
297744
+ return chatNotFoundResponse(c, raw2);
297625
297745
  const body = c.req.valid("json");
297626
297746
  const services = c.get("services");
297627
297747
  const participant = await services.chats.addParticipant({
@@ -297631,14 +297751,20 @@ var init_chats2 = __esm(() => {
297631
297751
  return c.json({ data: participant }, 201);
297632
297752
  });
297633
297753
  chatsRoutes.delete("/:id/participants/:platformUserId", async (c) => {
297634
- const chatId = c.req.param("id");
297754
+ const raw2 = c.req.param("id");
297755
+ const chatId = await resolveChatIdParam(c, raw2);
297756
+ if (chatId === null)
297757
+ return chatNotFoundResponse(c, raw2);
297635
297758
  const platformUserId = c.req.param("platformUserId");
297636
297759
  const services = c.get("services");
297637
297760
  await services.chats.removeParticipant(chatId, platformUserId);
297638
297761
  return c.json({ success: true });
297639
297762
  });
297640
297763
  chatsRoutes.patch("/:id/participants/:platformUserId/role", zValidator("json", updateParticipantRoleSchema), async (c) => {
297641
- const chatId = c.req.param("id");
297764
+ const raw2 = c.req.param("id");
297765
+ const chatId = await resolveChatIdParam(c, raw2);
297766
+ if (chatId === null)
297767
+ return chatNotFoundResponse(c, raw2);
297642
297768
  const platformUserId = c.req.param("platformUserId");
297643
297769
  const { role } = c.req.valid("json");
297644
297770
  const services = c.get("services");
@@ -297652,7 +297778,10 @@ var init_chats2 = __esm(() => {
297652
297778
  mediaOnly: exports_external.string().optional().transform((v2) => v2 === "true")
297653
297779
  });
297654
297780
  chatsRoutes.get("/:id/messages", zValidator("query", listMessagesQuerySchema), async (c) => {
297655
- const chatId = c.req.param("id");
297781
+ const raw2 = c.req.param("id");
297782
+ const chatId = await resolveChatIdParam(c, raw2);
297783
+ if (chatId === null)
297784
+ return chatNotFoundResponse(c, raw2);
297656
297785
  const { limit: limit2, before, after, mediaOnly } = c.req.valid("query");
297657
297786
  const services = c.get("services");
297658
297787
  const messages4 = await services.messages.getChatMessages(chatId, {
@@ -297680,8 +297809,11 @@ var init_chats2 = __esm(() => {
297680
297809
  instanceId: exports_external.string().uuid().describe("Instance ID")
297681
297810
  });
297682
297811
  chatsRoutes.post("/:id/read", zValidator("json", markChatReadSchema), async (c) => {
297683
- const chatId = c.req.param("id");
297812
+ const raw2 = c.req.param("id");
297684
297813
  const { instanceId } = c.req.valid("json");
297814
+ const chatId = await resolveChatIdParam(c, raw2, instanceId);
297815
+ if (chatId === null)
297816
+ return chatNotFoundResponse(c, raw2);
297685
297817
  const services = c.get("services");
297686
297818
  const channelRegistry2 = c.get("channelRegistry");
297687
297819
  const chat2 = await services.chats.getById(chatId);
@@ -297728,8 +297860,11 @@ var init_chats2 = __esm(() => {
297728
297860
  "90d": 7776000
297729
297861
  };
297730
297862
  chatsRoutes.post("/:id/disappearing", zValidator("json", disappearingSchema), async (c) => {
297731
- const chatId = c.req.param("id");
297863
+ const raw2 = c.req.param("id");
297732
297864
  const { instanceId, duration } = c.req.valid("json");
297865
+ const chatId = await resolveChatIdParam(c, raw2, instanceId);
297866
+ if (chatId === null)
297867
+ return chatNotFoundResponse(c, raw2);
297733
297868
  const services = c.get("services");
297734
297869
  const channelRegistry2 = c.get("channelRegistry");
297735
297870
  checkInstanceAccess(c.get("apiKey"), instanceId);
@@ -297867,7 +298002,10 @@ var init_chats2 = __esm(() => {
297867
298002
  return c.json({ success: true, sessionId, sessionStrategy });
297868
298003
  });
297869
298004
  chatsRoutes.post("/:id/reopen-contact", async (c) => {
297870
- const id = c.req.param("id");
298005
+ const raw2 = c.req.param("id");
298006
+ const id = await resolveChatIdParam(c, raw2);
298007
+ if (id === null)
298008
+ return chatNotFoundResponse(c, raw2);
297871
298009
  const services = c.get("services");
297872
298010
  const chat2 = await services.chats.getById(id);
297873
298011
  if (!chat2)
@@ -302797,7 +302935,7 @@ var init__close_contact_config = __esm(() => {
302797
302935
  import { existsSync as existsSync8 } from "fs";
302798
302936
  import { join as join24 } from "path";
302799
302937
  function isUUID(value) {
302800
- return UUID_REGEX.test(value);
302938
+ return UUID_REGEX2.test(value);
302801
302939
  }
302802
302940
  function extractReactionTargetParticipant(rawPayload) {
302803
302941
  const key = rawPayload?.key;
@@ -302953,7 +303091,7 @@ async function verifyMessageInstanceOwnership(services, message2, instanceId) {
302953
303091
  });
302954
303092
  }
302955
303093
  }
302956
- var log106, mediaDownloadLog, messagesRoutes, UUID_REGEX, MessageSourceSchema, MessageTypeSchema, MessageStatusSchema, DeliveryStatusSchema, listQuerySchema13, createMessageSchema, updateMessageSchema, recordEditSchema, addReactionSchema, removeReactionSchema, updateDeliveryStatusSchema, MentionSchema, sendTextSchema, sendMediaSchema, sendReactionSchema, sendStickerSchema, sendContactSchema, sendLocationSchema, sendHandoffSchema, sendCloseContactSchema, messageRefSchema, _mediaStorageForDownload = null, sendTtsSchema, forwardMessageSchema, sendPresenceSchema, markMessageReadSchema, markBatchReadSchema, sendPollSchema, sendEmbedSchema, editMessageChannelSchema, deleteMessageChannelSchema, starMessageSchema;
303094
+ var log106, mediaDownloadLog, messagesRoutes, UUID_REGEX2, MessageSourceSchema, MessageTypeSchema, MessageStatusSchema, DeliveryStatusSchema, listQuerySchema13, createMessageSchema, updateMessageSchema, recordEditSchema, addReactionSchema, removeReactionSchema, updateDeliveryStatusSchema, MentionSchema, sendTextSchema, sendMediaSchema, sendReactionSchema, sendStickerSchema, sendContactSchema, sendLocationSchema, sendHandoffSchema, sendCloseContactSchema, messageRefSchema, _mediaStorageForDownload = null, sendTtsSchema, forwardMessageSchema, sendPresenceSchema, markMessageReadSchema, markBatchReadSchema, sendPollSchema, sendEmbedSchema, editMessageChannelSchema, deleteMessageChannelSchema, starMessageSchema;
302957
303095
  var init_messages5 = __esm(() => {
302958
303096
  init_dist6();
302959
303097
  init_src2();
@@ -302971,7 +303109,7 @@ var init_messages5 = __esm(() => {
302971
303109
  log106 = createLogger("routes:messages");
302972
303110
  mediaDownloadLog = createLogger("routes:messages:media-download");
302973
303111
  messagesRoutes = new Hono2;
302974
- UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
303112
+ UUID_REGEX2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
302975
303113
  MessageSourceSchema = exports_external.enum(["realtime", "sync", "api", "import"]);
302976
303114
  MessageTypeSchema = exports_external.enum([
302977
303115
  "text",
@@ -305788,10 +305926,10 @@ function createApp(db2, eventBus = null, channelRegistry2 = null) {
305788
305926
  }
305789
305927
  return plugin7.handleWebhook(c.req.raw);
305790
305928
  });
305791
- const UUID_REGEX2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
305929
+ const UUID_REGEX3 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
305792
305930
  app.post("/a2a/:instanceId", authMiddleware, requireInstanceAccess((c) => c.req.param("instanceId")), rateLimitMiddleware, async (c) => {
305793
305931
  const instanceId = c.req.param("instanceId");
305794
- if (!UUID_REGEX2.test(instanceId)) {
305932
+ if (!UUID_REGEX3.test(instanceId)) {
305795
305933
  return c.json({ error: "Invalid instance ID format" }, 400);
305796
305934
  }
305797
305935
  const channelRegistry3 = c.get("channelRegistry");
@@ -308923,6 +309061,9 @@ async function setupEventBusServices(eventBus, services, db3) {
308923
309061
  status: result.metadata.status
308924
309062
  }
308925
309063
  };
309064
+ },
309065
+ staleIdleTimeoutGate: async (chatId, instanceId) => {
309066
+ return services.followUpLifecycle.evaluateIdleTimeoutFreshness(chatId, instanceId);
308926
309067
  }
308927
309068
  });
308928
309069
  } catch (error2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automagik/omni",
3
- "version": "2.260501.3",
3
+ "version": "2.260501.5",
4
4
  "description": "LLM-optimized CLI for Omni",
5
5
  "type": "module",
6
6
  "bin": {
@@ -51,15 +51,15 @@
51
51
  "qrcode-terminal": "^0.12.0"
52
52
  },
53
53
  "devDependencies": {
54
- "@omni/api": "2.260501.2",
55
- "@omni/channel-discord": "2.260501.2",
56
- "@omni/channel-gupshup": "2.260501.2",
57
- "@omni/channel-sdk": "2.260501.2",
58
- "@omni/channel-slack": "2.260501.2",
59
- "@omni/channel-telegram": "2.260501.2",
60
- "@omni/channel-whatsapp": "2.260501.2",
61
- "@omni/core": "2.260501.2",
62
- "@omni/sdk": "2.260501.2",
54
+ "@omni/api": "2.260501.4",
55
+ "@omni/channel-discord": "2.260501.4",
56
+ "@omni/channel-gupshup": "2.260501.4",
57
+ "@omni/channel-sdk": "2.260501.4",
58
+ "@omni/channel-slack": "2.260501.4",
59
+ "@omni/channel-telegram": "2.260501.4",
60
+ "@omni/channel-whatsapp": "2.260501.4",
61
+ "@omni/core": "2.260501.4",
62
+ "@omni/sdk": "2.260501.4",
63
63
  "@types/node": "^22.10.3",
64
64
  "@types/qrcode-terminal": "^0.12.2",
65
65
  "typescript": "^5.7.3"