@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.
- package/dist/commands/events.d.ts +4 -0
- package/dist/commands/events.d.ts.map +1 -1
- package/dist/index.js +23 -3
- package/dist/server/index.js +122 -46
- package/package.json +1 -1
|
@@ -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.
|
|
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
|
|
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
|
|
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);
|
package/dist/server/index.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
|
367139
|
-
log91.debug("Skipping
|
|
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
|
|
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-${
|
|
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
|
|
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_${
|
|
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
|
|
397720
|
+
async function resolveChatLink(db2, instanceId, chatId) {
|
|
397639
397721
|
if (!instanceId || !chatId)
|
|
397640
|
-
return
|
|
397722
|
+
return NO_CHAT_LINK;
|
|
397641
397723
|
try {
|
|
397642
|
-
const
|
|
397643
|
-
return chat2
|
|
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
|
|
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
|
|
397682
|
-
const
|
|
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
|
-
|
|
397788
|
+
...chatLink
|
|
397708
397789
|
};
|
|
397709
|
-
await sdb.insert(omniEvents).values(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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(),
|