Skip to content

Commit 35bb0ba

Browse files
committed
fix: messageTimestamp object <-> int error
1 parent 78c7b96 commit 35bb0ba

File tree

1 file changed

+51
-9
lines changed

1 file changed

+51
-9
lines changed

src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,9 +1117,20 @@ export class BaileysStartupService extends ChannelStartupService {
11171117
await this.sendDataWebhook(Events.MESSAGES_EDITED, editedMessage);
11181118
const oldMessage = await this.getMessage(editedMessage.key, true);
11191119
if ((oldMessage as any)?.id) {
1120-
const editedMessageTimestamp = Long.isLong(editedMessage?.timestampMs)
1121-
? Math.floor(editedMessage.timestampMs.toNumber() / 1000)
1122-
: Math.floor((editedMessage.timestampMs as number) / 1000);
1120+
let editedMessageTimestamp: number;
1121+
if (Long.isLong(editedMessage?.timestampMs)) {
1122+
editedMessageTimestamp = Math.floor(editedMessage.timestampMs.toNumber() / 1000);
1123+
} else if (
1124+
editedMessage?.timestampMs &&
1125+
typeof editedMessage.timestampMs === 'object' &&
1126+
editedMessage.timestampMs &&
1127+
'low' in editedMessage.timestampMs &&
1128+
'high' in editedMessage.timestampMs
1129+
) {
1130+
editedMessageTimestamp = Math.floor(Long.fromValue(editedMessage.timestampMs).toNumber() / 1000);
1131+
} else {
1132+
editedMessageTimestamp = Math.floor((editedMessage?.timestampMs as number) / 1000);
1133+
}
11231134

11241135
await this.prismaRepository.message.update({
11251136
where: { id: (oldMessage as any).id },
@@ -1498,7 +1509,11 @@ export class BaileysStartupService extends ChannelStartupService {
14981509
`) as any[];
14991510
findMessage = messages[0] || null;
15001511

1501-
if (findMessage) message.messageId = findMessage.id;
1512+
if (!findMessage?.id) {
1513+
this.logger.warn(`Original message not found for update. Skipping. Key: ${JSON.stringify(key)}`);
1514+
continue;
1515+
}
1516+
message.messageId = findMessage.id;
15021517
}
15031518

15041519
if (update.message === null && update.status === undefined) {
@@ -4357,6 +4372,18 @@ export class BaileysStartupService extends ChannelStartupService {
43574372
return obj.toNumber();
43584373
}
43594374

4375+
// Handle Long-like objects that aren't detected by Long.isLong()
4376+
if (
4377+
obj &&
4378+
typeof obj === 'object' &&
4379+
'low' in obj &&
4380+
'high' in obj &&
4381+
typeof obj.low === 'number' &&
4382+
typeof obj.high === 'number'
4383+
) {
4384+
return Long.fromValue(obj).toNumber();
4385+
}
4386+
43604387
if (Array.isArray(obj)) {
43614388
return obj.map((item) => this.convertLongToNumber(item));
43624389
}
@@ -4378,6 +4405,23 @@ export class BaileysStartupService extends ChannelStartupService {
43784405
const contentType = getContentType(message.message);
43794406
const contentMsg = message?.message[contentType] as any;
43804407

4408+
// Convert messageTimestamp to number properly
4409+
let messageTimestamp: number;
4410+
if (Long.isLong(message.messageTimestamp)) {
4411+
messageTimestamp = message.messageTimestamp.toNumber();
4412+
} else if (
4413+
message.messageTimestamp &&
4414+
typeof message.messageTimestamp === 'object' &&
4415+
message.messageTimestamp &&
4416+
'low' in message.messageTimestamp &&
4417+
'high' in message.messageTimestamp
4418+
) {
4419+
// Handle Long-like objects that aren't detected by Long.isLong()
4420+
messageTimestamp = Long.fromValue(message.messageTimestamp).toNumber();
4421+
} else {
4422+
messageTimestamp = (message.messageTimestamp as number) || Date.now();
4423+
}
4424+
43814425
const messageRaw = {
43824426
key: message.key, // Save key exactly as it comes from Baileys
43834427
pushName:
@@ -4389,9 +4433,7 @@ export class BaileysStartupService extends ChannelStartupService {
43894433
message: this.convertLongToNumber({ ...message.message }),
43904434
contextInfo: this.convertLongToNumber(contentMsg?.contextInfo),
43914435
messageType: contentType || 'unknown',
4392-
messageTimestamp: Long.isLong(message.messageTimestamp)
4393-
? message.messageTimestamp.toNumber()
4394-
: (message.messageTimestamp as number),
4436+
messageTimestamp,
43954437
instanceId: this.instanceId,
43964438
source: getDevice(message.key.id),
43974439
};
@@ -4561,8 +4603,8 @@ export class BaileysStartupService extends ChannelStartupService {
45614603
return response;
45624604
}
45634605

4564-
public async baileysAssertSessions(jids: string[], force: boolean) {
4565-
const response = await this.client.assertSessions(jids, force);
4606+
public async baileysAssertSessions(jids: string[]) {
4607+
const response = await this.client.assertSessions(jids);
45664608

45674609
return response;
45684610
}

0 commit comments

Comments
 (0)