@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 +34 -2
- package/dist/server/index.js +170 -29
- package/package.json +10 -10
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.
|
|
114212
|
+
version: "2.260501.5",
|
|
114181
114213
|
description: "LLM-optimized CLI for Omni",
|
|
114182
114214
|
type: "module",
|
|
114183
114215
|
bin: {
|
package/dist/server/index.js
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
|
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 (!
|
|
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
|
+
"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.
|
|
55
|
-
"@omni/channel-discord": "2.260501.
|
|
56
|
-
"@omni/channel-gupshup": "2.260501.
|
|
57
|
-
"@omni/channel-sdk": "2.260501.
|
|
58
|
-
"@omni/channel-slack": "2.260501.
|
|
59
|
-
"@omni/channel-telegram": "2.260501.
|
|
60
|
-
"@omni/channel-whatsapp": "2.260501.
|
|
61
|
-
"@omni/core": "2.260501.
|
|
62
|
-
"@omni/sdk": "2.260501.
|
|
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"
|