@automagik/omni 2.260910.1 → 2.260910.3

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.
@@ -197,6 +197,10 @@ export interface FollowParams {
197
197
  isStopped?: () => boolean;
198
198
  /** Line sink — defaults to output.raw (stdout). Injected by tests. */
199
199
  emit?: (line: string) => void;
200
+ /** Consecutive transport failures tolerated before giving up (default 5). */
201
+ maxRetries?: number;
202
+ /** First backoff delay; doubles per retry up to 30s (default 1000). */
203
+ retryBaseMs?: number;
200
204
  }
201
205
  /**
202
206
  * The `omni events follow` loop: pull a page from the stored cursor, print
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -137139,7 +137139,7 @@ import { fileURLToPath } from "url";
137139
137139
  // package.json
137140
137140
  var package_default = {
137141
137141
  name: "@automagik/omni",
137142
- version: "2.260910.1",
137142
+ version: "2.260910.3",
137143
137143
  repository: {
137144
137144
  type: "git",
137145
137145
  url: "git+https://github.com/automagik-dev/omni.git",
@@ -144289,13 +144289,32 @@ function summarizeConsumerRow(row) {
144289
144289
  updatedAt: row.updatedAt
144290
144290
  };
144291
144291
  }
144292
+ var sleep4 = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms));
144293
+ var isTransportError = (err2) => !(err2 instanceof Error && err2.message.startsWith("API returned "));
144294
+ async function pullWithRetry(params) {
144295
+ const maxRetries = params.maxRetries ?? 5;
144296
+ const baseMs = params.retryBaseMs ?? 1000;
144297
+ const path = `/${encodeURIComponent(params.consumer)}/pull?limit=${params.limit}&waitMs=${params.waitMs}`;
144298
+ for (let attempt = 0;; attempt++) {
144299
+ try {
144300
+ return await consumersApiRequest(path, { method: "POST" });
144301
+ } catch (err2) {
144302
+ if (!isTransportError(err2) || attempt >= maxRetries || params.isStopped?.())
144303
+ throw err2;
144304
+ const delay = Math.min(baseMs * 2 ** attempt, 30000);
144305
+ process.stderr.write(`\u26A0 Pull failed (${errorMessage(err2)}); reconnecting in ${delay}ms (${attempt + 1}/${maxRetries})
144306
+ `);
144307
+ await sleep4(delay);
144308
+ }
144309
+ }
144310
+ }
144292
144311
  async function followConsumer(params) {
144293
144312
  const emit = params.emit ?? raw;
144294
144313
  let acked = -1;
144295
144314
  for (;; ) {
144296
144315
  if (params.isStopped?.())
144297
144316
  return;
144298
- const page = await consumersApiRequest(`/${encodeURIComponent(params.consumer)}/pull?limit=${params.limit}&waitMs=${params.waitMs}`, { method: "POST" });
144317
+ const page = await pullWithRetry(params);
144299
144318
  for (const item of page.items) {
144300
144319
  emit(JSON.stringify(item));
144301
144320
  }
@@ -144316,7 +144335,7 @@ async function followConsumer(params) {
144316
144335
  return;
144317
144336
  }
144318
144337
  if (!progressed && params.waitMs < 1000) {
144319
- await new Promise((resolve2) => setTimeout(resolve2, 1000));
144338
+ await sleep4(1000);
144320
144339
  }
144321
144340
  }
144322
144341
  }
@@ -144463,6 +144482,7 @@ function createEventsCommand() {
144463
144482
  });
144464
144483
  } catch (err2) {
144465
144484
  error(`Failed to follow consumer: ${errorMessage(err2)}`);
144485
+ process.exitCode = 1;
144466
144486
  } finally {
144467
144487
  processEvents.off("SIGINT", shutdown);
144468
144488
  processEvents.off("SIGTERM", shutdown);
@@ -44693,6 +44693,7 @@ class InstanceManager {
44693
44693
  // ../channel-sdk/src/base/BaseChannelPlugin.ts
44694
44694
  class BaseChannelPlugin {
44695
44695
  eventBus;
44696
+ ingressClaim;
44696
44697
  logger;
44697
44698
  storage;
44698
44699
  config;
@@ -44704,6 +44705,7 @@ class BaseChannelPlugin {
44704
44705
  this.storage = context2.storage;
44705
44706
  this.config = context2.config;
44706
44707
  this.db = context2.db;
44708
+ this.ingressClaim = context2.ingressClaim;
44707
44709
  await this.onInitialize(context2);
44708
44710
  }
44709
44711
  async onInitialize(_context) {}
@@ -44829,10 +44831,34 @@ class BaseChannelPlugin {
44829
44831
  }
44830
44832
  async emitMessageReceived(params) {
44831
44833
  const { instanceId, timings, isHistorySync, ...payload } = params;
44832
- return this.publishEventInternal("message.received", payload, instanceId, {
44834
+ const options = {
44833
44835
  timings,
44834
44836
  ingestMode: isHistorySync ? "history-sync" : "realtime"
44835
- });
44837
+ };
44838
+ if (this.ingressClaim) {
44839
+ const idempotencyKey = `${this.id}:${instanceId}:${payload.externalId}:${payload.content.type}`;
44840
+ const eventId = await this.ingressClaim.claim({
44841
+ idempotencyKey,
44842
+ instanceId,
44843
+ channelType: this.id,
44844
+ externalId: payload.externalId
44845
+ });
44846
+ if (eventId === null) {
44847
+ this.logger.info("Skipping duplicate inbound message (idempotency key already journaled)", {
44848
+ instanceId,
44849
+ idempotencyKey
44850
+ });
44851
+ return generateCorrelationId("evt");
44852
+ }
44853
+ options.publishEventId = eventId;
44854
+ try {
44855
+ return await this.publishEventInternal("message.received", payload, instanceId, options);
44856
+ } catch (error) {
44857
+ await this.ingressClaim.release(eventId).catch(() => {});
44858
+ throw error;
44859
+ }
44860
+ }
44861
+ return this.publishEventInternal("message.received", payload, instanceId, options);
44836
44862
  }
44837
44863
  async emitMessageSent(params) {
44838
44864
  const { instanceId, ...payload } = params;
@@ -251569,7 +251595,7 @@ var init_sentry_scrub = __esm(() => {
251569
251595
  var require_package7 = __commonJS((exports, module) => {
251570
251596
  module.exports = {
251571
251597
  name: "@omni/api",
251572
- version: "2.260910.1",
251598
+ version: "2.260910.3",
251573
251599
  private: true,
251574
251600
  type: "module",
251575
251601
  exports: {
@@ -363041,6 +363067,7 @@ var init_storage = __esm(() => {
363041
363067
  });
363042
363068
 
363043
363069
  // ../api/src/plugins/context.ts
363070
+ import { randomUUID as randomUUID2 } from "crypto";
363044
363071
  function createPluginDatabase(db2) {
363045
363072
  return {
363046
363073
  async execute(_sql, _params) {
@@ -363052,6 +363079,38 @@ function createPluginDatabase(db2) {
363052
363079
  }
363053
363080
  };
363054
363081
  }
363082
+ function createIngressClaim(db2) {
363083
+ return {
363084
+ async claim({ idempotencyKey, instanceId, channelType, externalId }) {
363085
+ const id = randomUUID2();
363086
+ try {
363087
+ const claimed = await db2.insert(omniEvents).values({
363088
+ id,
363089
+ externalId,
363090
+ channel: channelTypes.includes(channelType) ? channelType : "discord",
363091
+ instanceId,
363092
+ eventType: "message.received",
363093
+ direction: "inbound",
363094
+ status: "received",
363095
+ idempotencyKey,
363096
+ receivedAt: new Date,
363097
+ metadata: { correlationId: id, source: `channel:${channelType}`, idempotencyKey },
363098
+ tenantId: resolvePublishTenantId(undefined, instanceId)
363099
+ }).onConflictDoNothing({ target: omniEvents.idempotencyKey }).returning({ id: omniEvents.id });
363100
+ return claimed.length > 0 ? id : null;
363101
+ } catch (error3) {
363102
+ log88.warn("Ingress idempotency claim failed; publishing without dedup", {
363103
+ idempotencyKey,
363104
+ error: String(error3)
363105
+ });
363106
+ return id;
363107
+ }
363108
+ },
363109
+ async release(eventId) {
363110
+ await db2.delete(omniEvents).where(eq(omniEvents.id, eventId));
363111
+ }
363112
+ };
363113
+ }
363055
363114
  function createPluginContext(options) {
363056
363115
  const { pluginId, eventBus, db: db2 } = options;
363057
363116
  const env2 = "development";
@@ -363070,12 +363129,15 @@ function createPluginContext(options) {
363070
363129
  basePath: process.env.MEDIA_STORAGE_PATH ?? "./data/media"
363071
363130
  }
363072
363131
  },
363073
- db: createPluginDatabase(db2)
363132
+ db: createPluginDatabase(db2),
363133
+ ingressClaim: createIngressClaim(db2)
363074
363134
  };
363075
363135
  }
363076
363136
  var log88;
363077
363137
  var init_context3 = __esm(() => {
363078
363138
  init_src();
363139
+ init_src5();
363140
+ init_drizzle_orm();
363079
363141
  init_logger4();
363080
363142
  init_storage();
363081
363143
  log88 = createLogger("api:plugin-context");
@@ -363692,6 +363754,15 @@ function maybeUpdateRecency(services, instanceId, chatId, rawPayload, payload, p
363692
363754
  log90.debug("Failed to update instance lastMessageAt (non-critical)", { error: String(error3) });
363693
363755
  });
363694
363756
  }
363757
+ async function linkJournalRow(db2, eventId, link) {
363758
+ if (!isValidUuid(eventId))
363759
+ return;
363760
+ await scopedHandle(db2).update(omniEvents).set({
363761
+ chatUuid: link.chatUuid,
363762
+ canonicalChatId: link.canonicalChatId,
363763
+ personId: sql`coalesce(${omniEvents.personId}, ${link.personId})`
363764
+ }).where(eq(omniEvents.id, eventId));
363765
+ }
363695
363766
  async function resolveOrCreateChat(services, instanceId, chatExternalId, chatType, channel5, effectiveName, canonicalId, rawPayload, trustedTenantId) {
363696
363767
  const resolvedPhoneJid = rawPayload?.resolvedPhoneJid;
363697
363768
  if (chatExternalId.endsWith("@lid") && resolvedPhoneJid) {
@@ -363806,6 +363877,7 @@ async function handleMessageReceived(services, payload, metadata, eventTimestamp
363806
363877
  }
363807
363878
  await maybeRecordParticipantActivity(services, chat2.id, payload.from);
363808
363879
  maybeUpdateRecency(services, metadata.instanceId, chat2.id, rawPayload, payload, platformTimestamp ?? new Date(eventTimestamp), trustedTenantId);
363880
+ return { chatUuid: chat2.id, canonicalChatId: chat2.canonicalId ?? null, personId: personId ?? null };
363809
363881
  }
363810
363882
  function logMessageReceivedError(payload, error3) {
363811
363883
  const rawPayload = payload.rawPayload;
@@ -363901,7 +363973,12 @@ async function setupMessagePersistence(eventBus, services) {
363901
363973
  try {
363902
363974
  const workMetadata = { ...metadata, instanceId };
363903
363975
  const identity = await resolveSenderIdentityForWorkItem(services, payload, workMetadata, metadata.channelType ?? "whatsapp", trustedTenantId);
363904
- await runConsumerInTenantContext(services.db, event, () => handleMessageReceived(services, payload, workMetadata, event.timestamp, trustedTenantId, identity));
363976
+ const journalLink = await runConsumerInTenantContext(services.db, event, () => handleMessageReceived(services, payload, workMetadata, event.timestamp, trustedTenantId, identity));
363977
+ if (journalLink) {
363978
+ await runTenantWorkDb(services.db, trustedTenantId, () => linkJournalRow(services.db, event.id, journalLink)).catch((err2) => {
363979
+ log90.debug("Failed to link journal row (non-critical)", { eventId: event.id, error: String(err2) });
363980
+ });
363981
+ }
363905
363982
  if (sentryEnabled()) {
363906
363983
  exports_public_api2.count("messages.received", 1, {
363907
363984
  attributes: { channel_type: metadata.channelType ?? "whatsapp" }
@@ -364187,8 +364264,11 @@ async function detectStartupGaps(services) {
364187
364264
  var log90, CONTENT_TYPE_MAP, INTERNAL_JID_SUFFIXES, MEDIA_BADGES, OUTBOUND_MEDIA_TYPES;
364188
364265
  var init_message_persistence = __esm(() => {
364189
364266
  init_src();
364267
+ init_src5();
364190
364268
  init_esm6();
364269
+ init_drizzle_orm();
364191
364270
  init_sentry_scrub();
364271
+ init_tenant_scope();
364192
364272
  init_worker_tenant_context();
364193
364273
  init_canonical_handle();
364194
364274
  init_loader2();
@@ -367135,10 +367215,11 @@ async function shouldProcessMessage3(agentRunner, accessService, chatsService, m
367135
367215
  if (await isAgentOutboundEcho(chatsService, messagesService, db2, payload, metadata.instanceId, trustedTenantId)) {
367136
367216
  return null;
367137
367217
  }
367138
- if (payload.content?.type === "reaction") {
367139
- log91.debug("Skipping reaction dual-emit on message path (reaction.received owns dispatch)", {
367218
+ if (payload.content?.type && NON_DISPATCHABLE_CONTENT_TYPES.has(payload.content.type)) {
367219
+ log91.debug("Skipping non-conversational content type on message path", {
367140
367220
  instanceId: metadata.instanceId,
367141
- chatId: payload.chatId
367221
+ chatId: payload.chatId,
367222
+ contentType: payload.content.type
367142
367223
  });
367143
367224
  return null;
367144
367225
  }
@@ -367671,7 +367752,7 @@ async function setupAgentDispatcher(eventBus, services, db2) {
367671
367752
  log91.info("Agent dispatcher shutdown complete");
367672
367753
  };
367673
367754
  }
367674
- var import_api31, log91, agentDispatchLimiter, _natsGenieProviderCtor, QUOTED_MESSAGE_MAX_CHARS = 4000, DM_HISTORY_LIMIT = 20, LIFECYCLE_PREVIEW_MAX_CHARS = 160, LIFECYCLE_SENSITIVE_KEY_PARTS, PRESENCE_DEFAULT_MIN_MS = 5000, PRESENCE_DEFAULT_MAX_WAIT_MS = 30000, activeMessageDebouncer = null, DEFAULT_DISPATCH_ERROR_MESSAGE = "Opa, tive um probleminha aqui \uD83D\uDE05 Pode mandar de novo?", DEFAULT_ERROR_HANDOFF_MESSAGE = "T\xF4 com um probleminha t\xE9cnico aqui agora. Logo algu\xE9m do time vai entrar em contato com voc\xEA.", TRANSIENT_DISPATCH_ERROR_PATTERNS, TRANSIENT_DISPATCH_RETRY_DELAYS_MS, CHANNEL_MESSAGE_LIMITS, DEFAULT_MESSAGE_LIMIT = 4000, MEDIA_BASE_PATH3, MEDIA_ICONS, MEDIA_WAIT_NULL, mediaCompletions, mediaResultCache, MEDIA_WAIT_TIMEOUT_MS = 30000, DEFAULT_SEND_MEDIA_PATH_TYPES, BOT_PREFIX = "\uD83E\uDD16 ", activeStreams, activeRunAborts, CancelThreadPayloadSchema, sessionActivityStore, PROC_REACT_START, PROC_REACT_DONE = "\u2705", queuedMessageAcks, QUEUED_ACK_TIMEOUT_MS = 120000, providerCache, openclawClientPool, _openClawClientCtor, nullFilterWarnedInstances, ACTIVE_OWNER_IDENTIFIER_CACHE_TTL_MS = 1e4, cachedActiveOwnerIdentifiers = null, cachedActiveOwnerIdentifiersAt = 0, tenantCachedActiveOwnerIdentifiers, DEFAULT_GATE_MODEL = "gemini-3-flash-preview", GATE_TIMEOUT_MS = 3000, setupAgentResponder;
367755
+ var import_api31, log91, agentDispatchLimiter, _natsGenieProviderCtor, QUOTED_MESSAGE_MAX_CHARS = 4000, DM_HISTORY_LIMIT = 20, LIFECYCLE_PREVIEW_MAX_CHARS = 160, LIFECYCLE_SENSITIVE_KEY_PARTS, PRESENCE_DEFAULT_MIN_MS = 5000, PRESENCE_DEFAULT_MAX_WAIT_MS = 30000, activeMessageDebouncer = null, DEFAULT_DISPATCH_ERROR_MESSAGE = "Opa, tive um probleminha aqui \uD83D\uDE05 Pode mandar de novo?", DEFAULT_ERROR_HANDOFF_MESSAGE = "T\xF4 com um probleminha t\xE9cnico aqui agora. Logo algu\xE9m do time vai entrar em contato com voc\xEA.", TRANSIENT_DISPATCH_ERROR_PATTERNS, TRANSIENT_DISPATCH_RETRY_DELAYS_MS, CHANNEL_MESSAGE_LIMITS, DEFAULT_MESSAGE_LIMIT = 4000, MEDIA_BASE_PATH3, NON_DISPATCHABLE_CONTENT_TYPES, MEDIA_ICONS, MEDIA_WAIT_NULL, mediaCompletions, mediaResultCache, MEDIA_WAIT_TIMEOUT_MS = 30000, DEFAULT_SEND_MEDIA_PATH_TYPES, BOT_PREFIX = "\uD83E\uDD16 ", activeStreams, activeRunAborts, CancelThreadPayloadSchema, sessionActivityStore, PROC_REACT_START, PROC_REACT_DONE = "\u2705", queuedMessageAcks, QUEUED_ACK_TIMEOUT_MS = 120000, providerCache, openclawClientPool, _openClawClientCtor, nullFilterWarnedInstances, ACTIVE_OWNER_IDENTIFIER_CACHE_TTL_MS = 1e4, cachedActiveOwnerIdentifiers = null, cachedActiveOwnerIdentifiersAt = 0, tenantCachedActiveOwnerIdentifiers, DEFAULT_GATE_MODEL = "gemini-3-flash-preview", GATE_TIMEOUT_MS = 3000, setupAgentResponder;
367675
367756
  var init_agent_dispatcher = __esm(() => {
367676
367757
  init_src2();
367677
367758
  init_src();
@@ -367718,6 +367799,7 @@ var init_agent_dispatcher = __esm(() => {
367718
367799
  telegram: 4096
367719
367800
  };
367720
367801
  MEDIA_BASE_PATH3 = process.env.MEDIA_STORAGE_PATH || "./data/media";
367802
+ NON_DISPATCHABLE_CONTENT_TYPES = new Set(["reaction", "delete", "unknown"]);
367721
367803
  MEDIA_ICONS = {
367722
367804
  audio: "\uD83C\uDFB5",
367723
367805
  image: "\uD83D\uDDBC\uFE0F",
@@ -368486,7 +368568,7 @@ var init_batch_pricing = __esm(() => {
368486
368568
  });
368487
368569
 
368488
368570
  // ../api/src/services/media-storage.ts
368489
- import { randomUUID as randomUUID2 } from "crypto";
368571
+ import { randomUUID as randomUUID3 } from "crypto";
368490
368572
  import { existsSync as existsSync4, mkdirSync as mkdirSync2 } from "fs";
368491
368573
  import { rm as rm3, writeFile as writeFile5 } from "fs/promises";
368492
368574
  import { tmpdir as tmpdir12 } from "os";
@@ -368720,7 +368802,7 @@ class MediaStorageService {
368720
368802
  }
368721
368803
  const buffer3 = await this.backend.read(reference);
368722
368804
  const ext = extname2(reference) || ".bin";
368723
- const tempPath = join23(tmpdir12(), `omni-media-${randomUUID2()}${ext}`);
368805
+ const tempPath = join23(tmpdir12(), `omni-media-${randomUUID3()}${ext}`);
368724
368806
  try {
368725
368807
  await writeFile5(tempPath, buffer3);
368726
368808
  } catch (error3) {
@@ -395917,7 +395999,7 @@ var init_webhooks3 = __esm(() => {
395917
395999
  });
395918
396000
 
395919
396001
  // ../api/src/lib/oauth-token-cache.ts
395920
- import { randomUUID as randomUUID3 } from "crypto";
396002
+ import { randomUUID as randomUUID4 } from "crypto";
395921
396003
  function put(accessToken, ttlMs = DEFAULT_TTL_MS4) {
395922
396004
  if (!accessToken)
395923
396005
  throw new Error("oauth-token-cache: accessToken is required");
@@ -395926,7 +396008,7 @@ function put(accessToken, ttlMs = DEFAULT_TTL_MS4) {
395926
396008
  if (oldest)
395927
396009
  store.delete(oldest);
395928
396010
  }
395929
- const handle = `eshandle_${randomUUID3()}`;
396011
+ const handle = `eshandle_${randomUUID4()}`;
395930
396012
  store.set(handle, { accessToken, expiresAt: Date.now() + ttlMs });
395931
396013
  return handle;
395932
396014
  }
@@ -397635,14 +397717,14 @@ function mapContentType2(contentType) {
397635
397717
  function eventIdInsert(eventId) {
397636
397718
  return eventId && isValidUuid(eventId) ? { id: eventId } : {};
397637
397719
  }
397638
- async function resolveChatUuid(db2, instanceId, chatId) {
397720
+ async function resolveChatLink(db2, instanceId, chatId) {
397639
397721
  if (!instanceId || !chatId)
397640
- return null;
397722
+ return NO_CHAT_LINK;
397641
397723
  try {
397642
- const [chat2] = await db2.select({ id: chats.id }).from(chats).where(and2(eq(chats.instanceId, instanceId), eq(chats.externalId, chatId))).limit(1);
397643
- return chat2?.id ?? null;
397724
+ const chat2 = await new ChatService(db2, null).findByExternalIdSmart(instanceId, chatId);
397725
+ return chat2 ? { chatUuid: chat2.id, canonicalChatId: chat2.canonicalId ?? null } : NO_CHAT_LINK;
397644
397726
  } catch {
397645
- return null;
397727
+ return NO_CHAT_LINK;
397646
397728
  }
397647
397729
  }
397648
397730
  async function resolvePersonId2(db2, candidate) {
@@ -397678,9 +397760,8 @@ async function setupEventPersistence(eventBus, db2) {
397678
397760
  try {
397679
397761
  await runConsumerInTenantContext(db2, event, async () => {
397680
397762
  const sdb = scopedHandle(db2);
397681
- const chatUuid = await resolveChatUuid(sdb, metadata.instanceId, payload.chatId);
397682
- const newEvent = {
397683
- ...eventIdInsert(event.id),
397763
+ const chatLink = await resolveChatLink(sdb, metadata.instanceId, payload.chatId);
397764
+ const columns2 = {
397684
397765
  externalId: payload.externalId,
397685
397766
  channel: mapChannelType(metadata.channelType),
397686
397767
  instanceId: metadata.instanceId,
@@ -397704,9 +397785,9 @@ async function setupEventPersistence(eventBus, db2) {
397704
397785
  agentId: metadata.agentId ?? null,
397705
397786
  causationId: metadata.causationId ?? null,
397706
397787
  conversationId: null,
397707
- chatUuid
397788
+ ...chatLink
397708
397789
  };
397709
- await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397790
+ await sdb.insert(omniEvents).values({ ...eventIdInsert(event.id), ...columns2 }).onConflictDoUpdate({ target: omniEvents.id, set: columns2 });
397710
397791
  });
397711
397792
  if (metadata.timings && metadata.correlationId) {
397712
397793
  const tracker = getJourneyTracker();
@@ -397729,7 +397810,7 @@ async function setupEventPersistence(eventBus, db2) {
397729
397810
  try {
397730
397811
  await runConsumerInTenantContext(db2, event, async () => {
397731
397812
  const sdb = scopedHandle(db2);
397732
- const chatUuid = await resolveChatUuid(sdb, metadata.instanceId, payload.chatId);
397813
+ const chatLink = await resolveChatLink(sdb, metadata.instanceId, payload.chatId);
397733
397814
  const newEvent = {
397734
397815
  ...eventIdInsert(event.id),
397735
397816
  externalId: payload.externalId,
@@ -397758,7 +397839,7 @@ async function setupEventPersistence(eventBus, db2) {
397758
397839
  agentId: metadata.agentId ?? null,
397759
397840
  causationId: metadata.causationId ?? null,
397760
397841
  conversationId: null,
397761
- chatUuid
397842
+ ...chatLink
397762
397843
  };
397763
397844
  await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397764
397845
  });
@@ -397784,7 +397865,7 @@ async function setupEventPersistence(eventBus, db2) {
397784
397865
  status: "completed"
397785
397866
  }).where(eq(omniEvents.externalId, payload.externalId)).returning();
397786
397867
  if (updated.length === 0) {
397787
- const chatUuid = await resolveChatUuid(sdb, metadata.instanceId, payload.chatId);
397868
+ const chatLink = await resolveChatLink(sdb, metadata.instanceId, payload.chatId);
397788
397869
  const newEvent = {
397789
397870
  ...eventIdInsert(event.id),
397790
397871
  externalId: payload.externalId,
@@ -397799,7 +397880,7 @@ async function setupEventPersistence(eventBus, db2) {
397799
397880
  agentId: metadata.agentId ?? null,
397800
397881
  causationId: metadata.causationId ?? null,
397801
397882
  conversationId: null,
397802
- chatUuid
397883
+ ...chatLink
397803
397884
  };
397804
397885
  await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397805
397886
  }
@@ -397824,7 +397905,7 @@ async function setupEventPersistence(eventBus, db2) {
397824
397905
  readAt: new Date(payload.readAt)
397825
397906
  }).where(eq(omniEvents.externalId, payload.externalId)).returning();
397826
397907
  if (updated.length === 0) {
397827
- const chatUuid = await resolveChatUuid(sdb, metadata.instanceId, payload.chatId);
397908
+ const chatLink = await resolveChatLink(sdb, metadata.instanceId, payload.chatId);
397828
397909
  const newEvent = {
397829
397910
  ...eventIdInsert(event.id),
397830
397911
  externalId: payload.externalId,
@@ -397839,7 +397920,7 @@ async function setupEventPersistence(eventBus, db2) {
397839
397920
  agentId: metadata.agentId ?? null,
397840
397921
  causationId: metadata.causationId ?? null,
397841
397922
  conversationId: null,
397842
- chatUuid
397923
+ ...chatLink
397843
397924
  };
397844
397925
  await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397845
397926
  }
@@ -397873,7 +397954,7 @@ async function setupEventPersistence(eventBus, db2) {
397873
397954
  }).where(and2(eq(omniEvents.instanceId, metadata.instanceId), eq(omniEvents.externalId, payload.externalId))).returning({ id: omniEvents.id });
397874
397955
  }
397875
397956
  if (updated.length === 0) {
397876
- const chatUuid = await resolveChatUuid(sdb, metadata.instanceId, payload.chatId);
397957
+ const chatLink = await resolveChatLink(sdb, metadata.instanceId, payload.chatId);
397877
397958
  const newEvent = {
397878
397959
  ...eventIdInsert(event.id),
397879
397960
  externalId: payload.externalId,
@@ -397894,7 +397975,7 @@ async function setupEventPersistence(eventBus, db2) {
397894
397975
  agentId: metadata.agentId ?? null,
397895
397976
  causationId: metadata.causationId ?? null,
397896
397977
  conversationId: null,
397897
- chatUuid
397978
+ ...chatLink
397898
397979
  };
397899
397980
  await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397900
397981
  }
@@ -397922,7 +398003,8 @@ async function setupEventPersistence(eventBus, db2) {
397922
398003
  const instanceId = metadata.instanceId && isValidUuid(metadata.instanceId) ? metadata.instanceId : null;
397923
398004
  const payloadChatId = typeof payload.chatId === "string" ? payload.chatId : undefined;
397924
398005
  const personId = await resolvePersonId2(sdb, metadata.personId) ?? await resolvePersonId2(sdb, payload.personId);
397925
- const chatUuid = await resolveChatUuidById(sdb, payload.chatUuid) ?? await resolveChatUuid(sdb, instanceId ?? undefined, payloadChatId);
398006
+ const chatUuid = await resolveChatUuidById(sdb, payload.chatUuid);
398007
+ const chatLink = chatUuid ? { chatUuid, canonicalChatId: null } : await resolveChatLink(sdb, instanceId ?? undefined, payloadChatId);
397926
398008
  const newEvent = {
397927
398009
  ...eventIdInsert(event.id),
397928
398010
  channel: "internal",
@@ -397941,7 +398023,7 @@ async function setupEventPersistence(eventBus, db2) {
397941
398023
  causationId: metadata.causationId ?? null,
397942
398024
  conversationId: null,
397943
398025
  chatId: payloadChatId,
397944
- chatUuid
398026
+ ...chatLink
397945
398027
  };
397946
398028
  await sdb.insert(omniEvents).values(newEvent).onConflictDoNothing({ target: omniEvents.id });
397947
398029
  });
@@ -397959,14 +398041,16 @@ async function setupEventPersistence(eventBus, db2) {
397959
398041
  throw error3;
397960
398042
  }
397961
398043
  }
397962
- var log125, CONSUMER_OPTIONS;
398044
+ var log125, NO_CHAT_LINK, CONSUMER_OPTIONS;
397963
398045
  var init_event_persistence = __esm(() => {
397964
398046
  init_src();
397965
398047
  init_src5();
397966
398048
  init_drizzle_orm();
398049
+ init_chats();
397967
398050
  init_tenant_scope();
397968
398051
  init_worker_tenant_context();
397969
398052
  log125 = createLogger("event-persistence");
398053
+ NO_CHAT_LINK = { chatUuid: null, canonicalChatId: null };
397970
398054
  CONSUMER_OPTIONS = {
397971
398055
  queue: "event-persistence",
397972
398056
  maxRetries: 3,
@@ -401227,6 +401311,7 @@ function startBunServer(app) {
401227
401311
  return Bun.serve({
401228
401312
  port: PORT,
401229
401313
  hostname: HOST,
401314
+ idleTimeout: 60,
401230
401315
  fetch(req, server) {
401231
401316
  const url = new URL(req.url);
401232
401317
  if (url.pathname.startsWith("/api/v2/voice/stream/")) {
@@ -407437,10 +407522,7 @@ class DiscordPlugin extends BaseChannelPlugin {
407437
407522
  externalId: `${messageId}-delete-${Date.now()}`,
407438
407523
  chatId,
407439
407524
  from: chatId,
407440
- content: {
407441
- type: "delete",
407442
- text: fromMe ? "Message deleted by bot" : "Message deleted"
407443
- },
407525
+ content: { type: "delete" },
407444
407526
  rawPayload: {
407445
407527
  deletedMessageId: messageId,
407446
407528
  deletedAt: Date.now(),
@@ -528091,10 +528173,7 @@ function extractUnknownContent(message2) {
528091
528173
  return null;
528092
528174
  }
528093
528175
  log52.debug("Unknown message type", { keys: messageKeys });
528094
- return {
528095
- type: "unknown",
528096
- text: `Unknown message type: ${messageKeys.join(", ")}`
528097
- };
528176
+ return { type: "unknown" };
528098
528177
  }
528099
528178
  function extractContent3(msg) {
528100
528179
  const message2 = msg.message;
@@ -531336,10 +531415,7 @@ class WhatsAppPlugin extends BaseChannelPlugin {
531336
531415
  externalId: `${externalId}-delete-${Date.now()}`,
531337
531416
  chatId,
531338
531417
  from: chatId,
531339
- content: {
531340
- type: "delete",
531341
- text: fromMe ? "Message deleted by sender" : "Message deleted"
531342
- },
531418
+ content: { type: "delete" },
531343
531419
  rawPayload: {
531344
531420
  deletedMessageId: externalId,
531345
531421
  deletedAt: Date.now(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automagik/omni",
3
- "version": "2.260910.1",
3
+ "version": "2.260910.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/automagik-dev/omni.git",