diff --git a/package.json b/package.json index d03a8a2..a84e9a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@adiwajshing/baileys", - "version": "3.4.0", + "version": "3.4.1", "description": "WhatsApp Web API", "homepage": "https://github.com/adiwajshing/Baileys", "main": "lib/index.js", diff --git a/src/WAConnection/0.Base.ts b/src/WAConnection/0.Base.ts index e0aa4ed..8348cb4 100644 --- a/src/WAConnection/0.Base.ts +++ b/src/WAConnection/0.Base.ts @@ -195,7 +195,7 @@ export class WAConnection extends EventEmitter { /** Generic function for action, set queries */ async setQuery (nodes: WANode[], binaryTags: WATag = [WAMetric.group, WAFlag.ignore], tag?: string) { const json = ['action', {epoch: this.msgCount.toString(), type: 'set'}, nodes] - const result = await this.query({ json, binaryTags, tag, expect200: true }) as Promise<{status: number}> + const result = await this.query({ json, binaryTags, tag, expect200: true, requiresPhoneConnection: true }) as Promise<{status: number}> return result } /** diff --git a/src/WAConnection/3.Connect.ts b/src/WAConnection/3.Connect.ts index 62e8811..e71034f 100644 --- a/src/WAConnection/3.Connect.ts +++ b/src/WAConnection/3.Connect.ts @@ -215,7 +215,7 @@ export class WAConnection extends Base { if (this.state === 'open' && json[0] === 'Pong') { if (!json[1]) { - this.closeInternal(DisconnectReason.close) + this.unexpectedDisconnect(DisconnectReason.close) this.logger.info('Connection terminated by phone, closing...') return } diff --git a/src/WAConnection/5.User.ts b/src/WAConnection/5.User.ts index c8e4f4b..e0f5963 100644 --- a/src/WAConnection/5.User.ts +++ b/src/WAConnection/5.User.ts @@ -104,13 +104,13 @@ export class WAConnection extends Base { /** Get your contacts */ async getContacts() { const json = ['query', { epoch: this.msgCount.toString(), type: 'contacts' }, null] - const response = await this.query({ json, binaryTags: [6, WAFlag.ignore], expect200: true }) // this has to be an encrypted query + const response = await this.query({ json, binaryTags: [WAMetric.queryContact, WAFlag.ignore], expect200: true, requiresPhoneConnection: true }) // this has to be an encrypted query return response } /** Get the stories of your contacts */ async getStories() { const json = ['query', { epoch: this.msgCount.toString(), type: 'status' }, null] - const response = await this.query({json, binaryTags: [30, WAFlag.ignore], expect200: true }) as WANode + const response = await this.query({json, binaryTags: [WAMetric.queryStatus, WAFlag.ignore], expect200: true, requiresPhoneConnection: true }) as WANode if (Array.isArray(response[2])) { return response[2].map (row => ( { @@ -128,7 +128,13 @@ export class WAConnection extends Base { return this.query({ json, binaryTags: [5, WAFlag.ignore], expect200: true }) // this has to be an encrypted query } /** Query broadcast list info */ - async getBroadcastListInfo(jid: string) { return this.query({json: ['query', 'contact', jid], expect200: true }) as Promise } + async getBroadcastListInfo(jid: string) { + return this.query({ + json: ['query', 'contact', jid], + expect200: true, + requiresPhoneConnection: true + }) as Promise + } /** * Load chats in a paginated manner + gets the profile picture * @param before chats before the given cursor @@ -187,9 +193,6 @@ export class WAConnection extends Base { */ @Mutex (jid => jid) async blockUser (jid: string, type: 'add' | 'remove' = 'add') { - jid.replace('@s.whatsapp.net', '@c.us') - - const tag = this.generateMessageTag() const json: WANode = [ 'block', { @@ -199,7 +202,7 @@ export class WAConnection extends Base { ['user', { jid }, null] ], ] - const result = await this.setQuery ([json], [WAMetric.block, WAFlag.ignore], tag) + const result = await this.setQuery ([json], [WAMetric.block, WAFlag.ignore]) if (result.status === 200) { if (type === 'add') { diff --git a/src/WAConnection/6.MessagesSend.ts b/src/WAConnection/6.MessagesSend.ts index 94c1dd1..c1b0249 100644 --- a/src/WAConnection/6.MessagesSend.ts +++ b/src/WAConnection/6.MessagesSend.ts @@ -260,7 +260,7 @@ export class WAConnection extends Base { key: { remoteJid: id, fromMe: true, - id: generateMessageID(), + id: options?.messageId || generateMessageID(), }, message: message, messageTimestamp: timestamp, @@ -280,7 +280,8 @@ export class WAConnection extends Base { json, binaryTags: [WAMetric.message, flag], tag: mID, - expect200: true + expect200: true, + requiresPhoneConnection: true }) .then(() => message.status = WA_MESSAGE_STATUS_TYPE.SERVER_ACK) @@ -304,7 +305,12 @@ export class WAConnection extends Base { if (!content) throw new BaileysError (`given message ${message.key.id} is not a media message`, message) const query = ['query',{type: 'media', index: message.key.id, owner: message.key.fromMe ? 'true' : 'false', jid: message.key.remoteJid, epoch: this.msgCount.toString()},null] - const response = await this.query ({json: query, binaryTags: [WAMetric.queryMedia, WAFlag.ignore], expect200: true}) + const response = await this.query ({ + json: query, + binaryTags: [WAMetric.queryMedia, WAFlag.ignore], + expect200: true, + requiresPhoneConnection: true + }) Object.keys (response[1]).forEach (key => content[key] = response[1][key]) // update message } /** diff --git a/src/WAConnection/7.MessagesExtra.ts b/src/WAConnection/7.MessagesExtra.ts index 2939260..b287963 100644 --- a/src/WAConnection/7.MessagesExtra.ts +++ b/src/WAConnection/7.MessagesExtra.ts @@ -19,7 +19,12 @@ export class WAConnection extends Base { @Mutex ((jid, messageID) => jid+messageID) async messageInfo (jid: string, messageID: string) { const query = ['query', {type: 'message_info', index: messageID, jid: jid, epoch: this.msgCount.toString()}, null] - const [,,response] = await this.query ({json: query, binaryTags: [WAMetric.queryRead, WAFlag.ignore], expect200: true}) + const [,,response] = await this.query ({ + json: query, + binaryTags: [WAMetric.queryRead, WAFlag.ignore], + expect200: true, + requiresPhoneConnection: true + }) const info: MessageInfo = {reads: [], deliveries: []} if (response) { @@ -87,7 +92,7 @@ export class WAConnection extends Base { }, null, ] - const response = await this.query({json, binaryTags: [WAMetric.queryMessages, WAFlag.ignore], expect200: false}) + const response = await this.query({json, binaryTags: [WAMetric.queryMessages, WAFlag.ignore], expect200: false, requiresPhoneConnection: true}) return (response[2] as WANode[])?.map(item => item[2] as WAMessage) || [] } /** @@ -109,7 +114,7 @@ export class WAConnection extends Base { const chat = this.chats.get (jid) const hasCursor = cursor?.id && typeof cursor?.fromMe !== 'undefined' - const cursorValue = hasCursor && chat.messages.get (GET_MESSAGE_ID(cursor)) + const cursorValue = hasCursor && chat?.messages.get (GET_MESSAGE_ID(cursor)) let messages: WAMessage[] if (chat?.messages && mostRecentFirst && (!hasCursor || cursorValue)) { diff --git a/src/WAConnection/Constants.ts b/src/WAConnection/Constants.ts index e074073..63c922b 100644 --- a/src/WAConnection/Constants.ts +++ b/src/WAConnection/Constants.ts @@ -378,6 +378,8 @@ export interface MessageOptions { /** Should it send as a disappearing messages. * By default 'chat' -- which follows the setting of the chat */ sendEphemeral?: 'chat' | boolean + /** Force message id */ + messageId?: string } export interface WABroadcastListInfo { status: number