diff --git a/example.js b/example.js index dd708dc..8a1173c 100644 --- a/example.js +++ b/example.js @@ -386,6 +386,14 @@ client.on('message_create', (msg) => { } }); +client.on('message_ciphertext', (msg) => { + // Receiving new incoming messages that have been encrypted + // msg.type === 'ciphertext' + msg.body = 'Waiting for this message. Check your phone.'; + + // do stuff here +}); + client.on('message_revoke_everyone', async (after, before) => { // Fired whenever a message is deleted by anyone (including you) console.log(after); // message after it was deleted. diff --git a/index.d.ts b/index.d.ts index 2a2c30a..ac1e5ee 100644 --- a/index.d.ts +++ b/index.d.ts @@ -304,6 +304,12 @@ declare namespace WAWebJS { /** The message that was created */ message: Message ) => void): this + + /** Emitted when a new message ciphertext is received */ + on(event: 'message_ciphertext', listener: ( + /** The message that was ciphertext */ + message: Message + ) => void): this /** Emitted when a message is deleted for everyone in the chat */ on(event: 'message_revoke_everyone', listener: ( @@ -647,6 +653,7 @@ declare namespace WAWebJS { AUTHENTICATION_FAILURE = 'auth_failure', READY = 'ready', MESSAGE_RECEIVED = 'message', + MESSAGE_CIPHERTEXT = 'message_ciphertext', MESSAGE_CREATE = 'message_create', MESSAGE_REVOKED_EVERYONE = 'message_revoke_everyone', MESSAGE_REVOKED_ME = 'message_revoke_me', diff --git a/src/Client.js b/src/Client.js index 4705567..fb3b9b8 100644 --- a/src/Client.js +++ b/src/Client.js @@ -43,6 +43,7 @@ const NoAuth = require('./authStrategies/NoAuth'); * @fires Client#message_create * @fires Client#message_revoke_me * @fires Client#message_revoke_everyone + * @fires Client#message_ciphertext * @fires Client#message_edit * @fires Client#media_uploaded * @fires Client#group_join @@ -659,6 +660,16 @@ class Client extends EventEmitter { */ this.emit(Events.MESSAGE_EDIT, new Message(this, msg), newBody, prevBody); }); + + await page.exposeFunction('onAddMessageCiphertextEvent', msg => { + + /** + * Emitted when messages are edited + * @event Client#message_ciphertext + * @param {Message} message + */ + this.emit(Events.MESSAGE_CIPHERTEXT, new Message(this, msg)); + }); await page.evaluate(() => { window.Store.Msg.on('change', (msg) => { window.onChangeMessageEvent(window.WWebJS.getMessageModel(msg)); }); @@ -677,6 +688,7 @@ class Client extends EventEmitter { if(msg.type === 'ciphertext') { // defer message event until ciphertext is resolved (type changed) msg.once('change:type', (_msg) => window.onAddMessageEvent(window.WWebJS.getMessageModel(_msg))); + window.onAddMessageCiphertextEvent(window.WWebJS.getMessageModel(msg)); } else { window.onAddMessageEvent(window.WWebJS.getMessageModel(msg)); } diff --git a/src/util/Constants.js b/src/util/Constants.js index 8135464..012bd65 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -44,6 +44,7 @@ exports.Events = { CHAT_REMOVED: 'chat_removed', CHAT_ARCHIVED: 'chat_archived', MESSAGE_RECEIVED: 'message', + MESSAGE_CIPHERTEXT: 'message_ciphertext', MESSAGE_CREATE: 'message_create', MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone', MESSAGE_REVOKED_ME: 'message_revoke_me',