diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index cc0acdf8..52be6339 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -1653,6 +1653,7 @@ export class BaileysStartupService extends ChannelStartupService { let retries = 0; const maxRetries = 3; + const retryDelay = 500; // 500ms delay to avoid blocking for too long while (retries < maxRetries) { const messages = (await this.prismaRepository.$queryRaw` @@ -1669,7 +1670,7 @@ export class BaileysStartupService extends ChannelStartupService { retries++; if (retries < maxRetries) { - await delay(2000); + await delay(retryDelay); } } @@ -1679,6 +1680,13 @@ export class BaileysStartupService extends ChannelStartupService { ); continue; } + + // Sync the incoming key.remoteJid with the stored one. + // This mutation is safe and necessary because Baileys events might use LIDs while we store Phone JIDs (or vice versa). + // Normalizing ensuring downstream logic uses the identifier that exists in our database. + if (findMessage?.key?.remoteJid && key.remoteJid !== findMessage.key.remoteJid) { + key.remoteJid = findMessage.key.remoteJid; + } if (findMessage?.key?.remoteJid && findMessage.key.remoteJid !== key.remoteJid) { this.logger.verbose( `Updating key.remoteJid from ${key.remoteJid} to ${findMessage.key.remoteJid} based on stored message`, diff --git a/src/utils/onWhatsappCache.ts b/src/utils/onWhatsappCache.ts index 50fa08c6..8d7a2c16 100644 --- a/src/utils/onWhatsappCache.ts +++ b/src/utils/onWhatsappCache.ts @@ -1,6 +1,7 @@ import { prismaRepository } from '@api/server.module'; import { configService, Database } from '@config/env.config'; import { Logger } from '@config/logger.config'; +import { Prisma } from '@prisma/client'; import dayjs from 'dayjs'; const logger = new Logger('OnWhatsappCache'); @@ -170,7 +171,11 @@ export async function saveOnWhatsappCache(data: ISaveOnWhatsappCacheParams[]) { }); } catch (error: any) { // Check for unique constraint violation (Prisma error code P2002) - if (error.code === 'P2002' && error.meta?.target?.includes('remoteJid')) { + if ( + error instanceof Prisma.PrismaClientKnownRequestError && + error.code === 'P2002' && + (error.meta?.target as string[])?.includes('remoteJid') + ) { logger.verbose( `[saveOnWhatsappCache] Race condition detected for ${remoteJid}, updating existing record instead.`, );