diff --git a/src/services/queue/metadata.ts b/src/services/queue/metadata.ts index 35eef6a..d50b994 100644 --- a/src/services/queue/metadata.ts +++ b/src/services/queue/metadata.ts @@ -44,3 +44,12 @@ export function parseQueueMetadata(raw: string | null | undefined): QueueMetadat return null; } } + +export function isReactionMeta(m: QueueMetadata | null | undefined): m is ReactionMeta { + if (!m || typeof m !== 'object') return false; + const any = m as any; + return any.kind === 'reaction' + && typeof any.chatId === 'string' + && typeof any.messageId === 'string' + && typeof any.emoji === 'string'; +} diff --git a/src/services/response-queue.ts b/src/services/response-queue.ts index 0503b3c..26b3cf6 100644 --- a/src/services/response-queue.ts +++ b/src/services/response-queue.ts @@ -6,7 +6,7 @@ import { Metrics } from './metrics'; import { toIsoSqlUTC } from '../utils/datetime'; import * as EvolutionClient from '../clients/evolution'; import { runCleanupOnce as cleanupRunOnce } from './queue/cleanup'; -import { parseQueueMetadata } from './queue/metadata'; +import { parseQueueMetadata, isReactionMeta } from './queue/metadata'; const MAX_FALLBACK_DIGITS = (() => { const raw = (process.env.ONBOARDING_FALLBACK_MAX_DIGITS || '').trim(); @@ -264,7 +264,7 @@ export const ResponseQueue = { // Detectar jobs de reacción const meta = parseQueueMetadata(item.metadata); - if (meta && meta.kind === 'reaction') { + if (isReactionMeta(meta)) { const chatId = String(meta.chatId || ''); const messageId = String(meta.messageId || ''); const emoji = String(meta.emoji || ''); @@ -283,11 +283,15 @@ export const ResponseQueue = { const errTxt = result.error || (typeof result.status === 'number' ? `HTTP ${result.status}` : 'unknown_error'); console.warn('Send reaction failed:', { status: result.status, body: errTxt }); try { Metrics.inc('reactions_failed_total', 1, { emoji: emojiLabel }); } catch {} - return { ok: false, status: result.status, error: errTxt }; + const out: { ok: false; error: string } & { status?: number } = { ok: false, error: errTxt }; + if (typeof result.status === 'number') out.status = result.status; + return out; } console.log(`✅ Sent reaction with payload: ${JSON.stringify(payload)}`); try { Metrics.inc('reactions_sent_total', 1, { emoji: emojiLabel }); } catch {} - return { ok: true, status: result.status }; + const okOut: { ok: true } & { status?: number } = { ok: true }; + if (typeof result.status === 'number') okOut.status = result.status; + return okOut; } // Endpoint típico de Evolution API para texto simple @@ -363,10 +367,14 @@ export const ResponseQueue = { if (!result.ok) { const errTxt = result.error || (typeof result.status === 'number' ? `HTTP ${result.status}` : 'unknown_error'); console.warn('Send failed:', { status: result.status, body: errTxt }); - return { ok: false, status: result.status, error: errTxt }; + const out: { ok: false; error: string } & { status?: number } = { ok: false, error: errTxt }; + if (typeof result.status === 'number') out.status = result.status; + return out; } console.log(`✅ Sent message with payload: ${JSON.stringify(payload)}`); - return { ok: true, status: result.status }; + const okOut: { ok: true } & { status?: number } = { ok: true }; + if (typeof result.status === 'number') okOut.status = result.status; + return okOut; } } catch (err) { const errMsg = (err instanceof Error ? err.message : String(err));