@d0v3riz/baileys 6.7.22 → 6.7.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WAProto/GenerateStatics.sh +3 -2
- package/WAProto/fix-imports.js +29 -0
- package/WAProto/index.js +4136 -4138
- package/lib/Defaults/index.d.ts +3 -2
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +36 -40
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js +2 -5
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +4 -3
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js +7 -41
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +3 -2
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +14 -16
- package/lib/Signal/Group/group_cipher.js.map +1 -0
- package/lib/Signal/Group/index.d.ts +12 -11
- package/lib/Signal/Group/index.d.ts.map +1 -0
- package/lib/Signal/Group/index.js +12 -57
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +2 -1
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +8 -44
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/queue-job.d.ts +2 -0
- package/lib/Signal/Group/queue-job.d.ts.map +1 -0
- package/lib/Signal/Group/queue-job.js +5 -5
- package/lib/Signal/Group/queue-job.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +2 -1
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +7 -9
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +2 -1
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +6 -9
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +2 -1
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +10 -12
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js +2 -5
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +2 -1
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js +9 -12
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +3 -2
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js +6 -9
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +5 -7
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +3 -2
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +22 -55
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Socket/Client/index.d.ts +3 -2
- package/lib/Socket/Client/index.d.ts.map +1 -0
- package/lib/Socket/Client/index.js +3 -18
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +2 -1
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +4 -6
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +2 -1
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js +14 -26
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/business.d.ts +66 -64
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +32 -37
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +21 -19
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +176 -141
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +219 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +351 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/groups.d.ts +37 -35
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +56 -63
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +102 -70
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +16 -9
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages-recv.d.ts +51 -49
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +180 -173
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +48 -46
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +75 -84
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +2 -1
- package/lib/Socket/mex.d.ts.map +1 -0
- package/lib/Socket/mex.js +12 -16
- package/lib/Socket/mex.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +46 -44
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +23 -27
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/socket.d.ts +13 -12
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +135 -115
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Socket/usync.d.ts +15 -14
- package/lib/Socket/usync.d.ts.map +1 -0
- package/lib/Socket/usync.js +9 -11
- package/lib/Socket/usync.js.map +1 -0
- package/lib/Types/Auth.d.ts +4 -3
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/Call.d.ts +1 -0
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +10 -7
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +2 -4
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +1 -0
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +11 -10
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -2
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +3 -2
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +1 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +3 -5
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +1 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +3 -5
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +9 -7
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +7 -7
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Newsletter.d.ts +1 -0
- package/lib/Types/Newsletter.d.ts.map +1 -0
- package/lib/Types/Newsletter.js +5 -7
- package/lib/Types/Newsletter.js.map +1 -0
- package/lib/Types/Product.d.ts +2 -1
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/Signal.d.ts +2 -1
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +8 -7
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +3 -2
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +14 -2
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +13 -2
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +3 -2
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js +2 -2
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +15 -14
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +15 -31
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/auth-utils.d.ts +3 -2
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +25 -34
- package/lib/Utils/auth-utils.js.map +1 -0
- package/lib/Utils/baileys-event-stream.d.ts +2 -1
- package/lib/Utils/baileys-event-stream.d.ts.map +1 -0
- package/lib/Utils/baileys-event-stream.js +15 -22
- package/lib/Utils/baileys-event-stream.js.map +1 -0
- package/lib/Utils/business.d.ts +3 -2
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +61 -70
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +8 -7
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +130 -137
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/crypto.d.ts +2 -1
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +37 -86
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +5 -4
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +38 -44
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +4 -4
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +37 -50
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +9 -8
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +87 -114
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/history.d.ts +4 -3
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +32 -40
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/index.d.ts +18 -17
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +18 -33
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/link-preview.d.ts +4 -3
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js +10 -47
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/logger.d.ts +8 -6
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -7
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +9 -8
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +23 -26
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +1 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js +5 -9
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +11 -10
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +141 -203
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +7 -6
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +190 -199
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/noise-handler.d.ts +5 -4
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +22 -26
- package/lib/Utils/noise-handler.js.map +1 -0
- package/lib/Utils/process-message.d.ts +5 -4
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +95 -104
- package/lib/Utils/process-message.js.map +1 -0
- package/lib/Utils/signal.d.ts +5 -4
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +47 -52
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +2 -1
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +23 -26
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +4 -3
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +52 -58
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/WABinary/constants.d.ts +1 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +9 -11
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +2 -1
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js +13 -51
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js +5 -41
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +4 -3
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +30 -38
- package/lib/WABinary/generic-utils.js.map +1 -0
- package/lib/WABinary/index.d.ts +6 -5
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js +6 -21
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +1 -0
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +21 -35
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +2 -1
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js +2 -2
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +2 -1
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js +2 -5
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +1 -0
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js +4 -6
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js +12 -14
- package/lib/WAM/encode.js.map +1 -0
- package/lib/WAM/index.d.ts +4 -3
- package/lib/WAM/index.d.ts.map +1 -0
- package/lib/WAM/index.js +4 -19
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +6 -9
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +9 -12
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +6 -9
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +7 -11
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +19 -21
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -2
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +2 -5
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +5 -4
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +5 -20
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncQuery.d.ts +4 -3
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +18 -20
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +6 -5
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +2 -5
- package/lib/WAUSync/USyncUser.js.map +1 -0
- package/lib/WAUSync/index.d.ts +4 -3
- package/lib/WAUSync/index.d.ts.map +1 -0
- package/lib/WAUSync/index.js +4 -19
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +9 -8
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +11 -30
- package/lib/index.js.map +1 -0
- package/package.json +26 -26
package/lib/Socket/socket.js
CHANGED
|
@@ -1,66 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const WABinary_1 = require("../WABinary");
|
|
13
|
-
const Client_1 = require("./Client");
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { randomBytes } from 'crypto';
|
|
3
|
+
import { URL } from 'url';
|
|
4
|
+
import { promisify } from 'util';
|
|
5
|
+
import { proto } from '../../WAProto/index.js';
|
|
6
|
+
import { DEF_CALLBACK_PREFIX, DEF_TAG_PREFIX, INITIAL_PREKEY_COUNT, MIN_PREKEY_COUNT, NOISE_WA_HEADER } from '../Defaults/index.js';
|
|
7
|
+
import { cleanupQueues } from '../Signal/Group/queue-job.js';
|
|
8
|
+
import { DisconnectReason } from '../Types/index.js';
|
|
9
|
+
import { addTransactionCapability, aesEncryptCTR, bindWaitForConnectionUpdate, bytesToCrockford, configureSuccessfulPairing, Curve, derivePairingCodeKey, generateLoginNode, generateMdTagPrefix, generateRegistrationNode, getCodeFromWSError, getErrorCodeFromStreamError, getNextPreKeysNode, getPlatformId, makeEventBuffer, makeNoiseHandler, promiseTimeout } from '../Utils/index.js';
|
|
10
|
+
import { assertNodeErrorFree, binaryNodeToString, encodeBinaryNode, getBinaryNodeChild, getBinaryNodeChildren, jidEncode, S_WHATSAPP_NET } from '../WABinary/index.js';
|
|
11
|
+
import { WebSocketClient } from './Client/index.js';
|
|
14
12
|
/**
|
|
15
13
|
* Connects to WA servers and performs:
|
|
16
14
|
* - simple queries (no retry mechanism, wait for connection establishment)
|
|
17
15
|
* - listen to messages and emit events
|
|
18
16
|
* - query phone connection
|
|
19
17
|
*/
|
|
20
|
-
const makeSocket = (config) => {
|
|
21
|
-
var _a, _b;
|
|
18
|
+
export const makeSocket = (config) => {
|
|
22
19
|
const { waWebSocketUrl, connectTimeoutMs, logger, keepAliveIntervalMs, browser, auth: authState, printQRInTerminal, defaultQueryTimeoutMs, transactionOpts, qrTimeout, makeSignalRepository } = config;
|
|
23
20
|
if (printQRInTerminal) {
|
|
24
21
|
console.warn('⚠️ The printQRInTerminal option has been deprecated. You will no longer receive QR codes in the terminal automatically. Please listen to the connection.update event yourself and handle the QR your way. You can remove this message by removing this opttion. This message will be removed in a future version.');
|
|
25
22
|
}
|
|
26
|
-
const url = typeof waWebSocketUrl === 'string' ? new
|
|
23
|
+
const url = typeof waWebSocketUrl === 'string' ? new URL(waWebSocketUrl) : waWebSocketUrl;
|
|
27
24
|
if (config.mobile || url.protocol === 'tcp:') {
|
|
28
|
-
throw new
|
|
25
|
+
throw new Boom('Mobile API is not supported anymore', { statusCode: DisconnectReason.loggedOut });
|
|
29
26
|
}
|
|
30
|
-
if (url.protocol === 'wss' &&
|
|
27
|
+
if (url.protocol === 'wss' && authState?.creds?.routingInfo) {
|
|
31
28
|
url.searchParams.append('ED', authState.creds.routingInfo.toString('base64url'));
|
|
32
29
|
}
|
|
33
|
-
const ws = new
|
|
30
|
+
const ws = new WebSocketClient(url, config);
|
|
34
31
|
ws.connect();
|
|
35
|
-
const ev =
|
|
32
|
+
const ev = makeEventBuffer(logger);
|
|
36
33
|
/** ephemeral key pair used to encrypt/decrypt communication. Unique for each connection */
|
|
37
|
-
const ephemeralKeyPair =
|
|
34
|
+
const ephemeralKeyPair = Curve.generateKeyPair();
|
|
38
35
|
/** WA noise protocol wrapper */
|
|
39
|
-
const noise =
|
|
36
|
+
const noise = makeNoiseHandler({
|
|
40
37
|
keyPair: ephemeralKeyPair,
|
|
41
|
-
NOISE_HEADER:
|
|
38
|
+
NOISE_HEADER: NOISE_WA_HEADER,
|
|
42
39
|
logger,
|
|
43
|
-
routingInfo:
|
|
40
|
+
routingInfo: authState?.creds?.routingInfo
|
|
44
41
|
});
|
|
45
42
|
const { creds } = authState;
|
|
46
43
|
// add transaction capability
|
|
47
|
-
const keys =
|
|
44
|
+
const keys = addTransactionCapability(authState.keys, logger, transactionOpts);
|
|
48
45
|
const signalRepository = makeSignalRepository({ creds, keys });
|
|
49
46
|
let lastDateRecv;
|
|
50
47
|
let epoch = 1;
|
|
51
48
|
let keepAliveReq;
|
|
52
49
|
let qrTimer;
|
|
53
50
|
let closed = false;
|
|
54
|
-
const uqTagId =
|
|
51
|
+
const uqTagId = generateMdTagPrefix();
|
|
55
52
|
const generateMessageTag = () => `${uqTagId}${epoch++}`;
|
|
56
|
-
const sendPromise =
|
|
53
|
+
const sendPromise = promisify(ws.send);
|
|
57
54
|
/** send a raw buffer */
|
|
58
55
|
const sendRawMessage = async (data) => {
|
|
59
56
|
if (!ws.isOpen) {
|
|
60
|
-
throw new
|
|
57
|
+
throw new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed });
|
|
61
58
|
}
|
|
62
59
|
const bytes = noise.encodeFrame(data);
|
|
63
|
-
await
|
|
60
|
+
await promiseTimeout(connectTimeoutMs, async (resolve, reject) => {
|
|
64
61
|
try {
|
|
65
62
|
await sendPromise.call(ws, bytes);
|
|
66
63
|
resolve();
|
|
@@ -73,9 +70,9 @@ const makeSocket = (config) => {
|
|
|
73
70
|
/** send a binary node */
|
|
74
71
|
const sendNode = (frame) => {
|
|
75
72
|
if (logger.level === 'trace') {
|
|
76
|
-
logger.trace({ xml:
|
|
73
|
+
logger.trace({ xml: binaryNodeToString(frame), msg: 'xml send' });
|
|
77
74
|
}
|
|
78
|
-
const buff =
|
|
75
|
+
const buff = encodeBinaryNode(frame);
|
|
79
76
|
return sendRawMessage(buff);
|
|
80
77
|
};
|
|
81
78
|
/** log & process any unexpected errors */
|
|
@@ -85,13 +82,13 @@ const makeSocket = (config) => {
|
|
|
85
82
|
/** await the next incoming message */
|
|
86
83
|
const awaitNextMessage = async (sendMsg) => {
|
|
87
84
|
if (!ws.isOpen) {
|
|
88
|
-
throw new
|
|
89
|
-
statusCode:
|
|
85
|
+
throw new Boom('Connection Closed', {
|
|
86
|
+
statusCode: DisconnectReason.connectionClosed
|
|
90
87
|
});
|
|
91
88
|
}
|
|
92
89
|
let onOpen;
|
|
93
90
|
let onClose;
|
|
94
|
-
const result =
|
|
91
|
+
const result = promiseTimeout(connectTimeoutMs, (resolve, reject) => {
|
|
95
92
|
onOpen = resolve;
|
|
96
93
|
onClose = mapWebSocketError(reject);
|
|
97
94
|
ws.on('frame', onOpen);
|
|
@@ -116,21 +113,38 @@ const makeSocket = (config) => {
|
|
|
116
113
|
let onRecv;
|
|
117
114
|
let onErr;
|
|
118
115
|
try {
|
|
119
|
-
const result = await
|
|
120
|
-
onRecv =
|
|
116
|
+
const result = await promiseTimeout(timeoutMs, (resolve, reject) => {
|
|
117
|
+
onRecv = data => {
|
|
118
|
+
resolve(data);
|
|
119
|
+
};
|
|
121
120
|
onErr = err => {
|
|
122
|
-
reject(err ||
|
|
121
|
+
reject(err ||
|
|
122
|
+
new Boom('Connection Closed', {
|
|
123
|
+
statusCode: DisconnectReason.connectionClosed
|
|
124
|
+
}));
|
|
123
125
|
};
|
|
124
126
|
ws.on(`TAG:${msgId}`, onRecv);
|
|
125
|
-
ws.on('close', onErr);
|
|
126
|
-
ws.
|
|
127
|
+
ws.on('close', onErr);
|
|
128
|
+
ws.on('error', onErr);
|
|
129
|
+
return () => reject(new Boom('Query Cancelled'));
|
|
127
130
|
});
|
|
128
131
|
return result;
|
|
129
132
|
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
// Catch timeout and return undefined instead of throwing
|
|
135
|
+
if (error instanceof Boom && error.output?.statusCode === DisconnectReason.timedOut) {
|
|
136
|
+
logger?.warn?.({ msgId }, 'timed out waiting for message');
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
130
141
|
finally {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
if (onRecv)
|
|
143
|
+
ws.off(`TAG:${msgId}`, onRecv);
|
|
144
|
+
if (onErr) {
|
|
145
|
+
ws.off('close', onErr);
|
|
146
|
+
ws.off('error', onErr);
|
|
147
|
+
}
|
|
134
148
|
}
|
|
135
149
|
};
|
|
136
150
|
/** send a query, and wait for its response. auto-generates message ID if not provided */
|
|
@@ -139,9 +153,14 @@ const makeSocket = (config) => {
|
|
|
139
153
|
node.attrs.id = generateMessageTag();
|
|
140
154
|
}
|
|
141
155
|
const msgId = node.attrs.id;
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
(
|
|
156
|
+
const result = await promiseTimeout(timeoutMs, async (resolve, reject) => {
|
|
157
|
+
const result = await waitForMessage(msgId, timeoutMs).catch(reject);
|
|
158
|
+
sendNode(node)
|
|
159
|
+
.then(() => resolve(result))
|
|
160
|
+
.catch(reject);
|
|
161
|
+
});
|
|
162
|
+
if (result && 'tag' in result) {
|
|
163
|
+
assertNodeErrorFree(result);
|
|
145
164
|
}
|
|
146
165
|
return result;
|
|
147
166
|
};
|
|
@@ -150,24 +169,24 @@ const makeSocket = (config) => {
|
|
|
150
169
|
let helloMsg = {
|
|
151
170
|
clientHello: { ephemeral: ephemeralKeyPair.public }
|
|
152
171
|
};
|
|
153
|
-
helloMsg =
|
|
172
|
+
helloMsg = proto.HandshakeMessage.fromObject(helloMsg);
|
|
154
173
|
logger.info({ browser, helloMsg }, 'connected to WA');
|
|
155
|
-
const init =
|
|
174
|
+
const init = proto.HandshakeMessage.encode(helloMsg).finish();
|
|
156
175
|
const result = await awaitNextMessage(init);
|
|
157
|
-
const handshake =
|
|
176
|
+
const handshake = proto.HandshakeMessage.decode(result);
|
|
158
177
|
logger.trace({ handshake }, 'handshake recv from WA');
|
|
159
178
|
const keyEnc = await noise.processHandshake(handshake, creds.noiseKey);
|
|
160
179
|
let node;
|
|
161
180
|
if (!creds.me) {
|
|
162
|
-
node =
|
|
181
|
+
node = generateRegistrationNode(creds, config);
|
|
163
182
|
logger.info({ node }, 'not logged in, attempting registration...');
|
|
164
183
|
}
|
|
165
184
|
else {
|
|
166
|
-
node =
|
|
185
|
+
node = generateLoginNode(creds.me.id, config);
|
|
167
186
|
logger.info({ node }, 'logging in...');
|
|
168
187
|
}
|
|
169
|
-
const payloadEnc = noise.encrypt(
|
|
170
|
-
await sendRawMessage(
|
|
188
|
+
const payloadEnc = noise.encrypt(proto.ClientPayload.encode(node).finish());
|
|
189
|
+
await sendRawMessage(proto.HandshakeMessage.encode({
|
|
171
190
|
clientFinish: {
|
|
172
191
|
static: keyEnc,
|
|
173
192
|
payload: payloadEnc
|
|
@@ -183,18 +202,18 @@ const makeSocket = (config) => {
|
|
|
183
202
|
id: generateMessageTag(),
|
|
184
203
|
xmlns: 'encrypt',
|
|
185
204
|
type: 'get',
|
|
186
|
-
to:
|
|
205
|
+
to: S_WHATSAPP_NET
|
|
187
206
|
},
|
|
188
207
|
content: [{ tag: 'count', attrs: {} }]
|
|
189
208
|
});
|
|
190
|
-
const countChild =
|
|
209
|
+
const countChild = getBinaryNodeChild(result, 'count');
|
|
191
210
|
return +countChild.attrs.value;
|
|
192
211
|
};
|
|
193
212
|
/** generates and uploads a set of pre-keys to the server */
|
|
194
|
-
const uploadPreKeys = async (count =
|
|
213
|
+
const uploadPreKeys = async (count = INITIAL_PREKEY_COUNT) => {
|
|
195
214
|
await keys.transaction(async () => {
|
|
196
215
|
logger.info({ count }, 'uploading pre-keys');
|
|
197
|
-
const { update, node } = await
|
|
216
|
+
const { update, node } = await getNextPreKeysNode({ creds, keys }, count);
|
|
198
217
|
await query(node);
|
|
199
218
|
ev.emit('creds.update', update);
|
|
200
219
|
logger.info({ count }, 'uploaded pre-keys');
|
|
@@ -203,13 +222,12 @@ const makeSocket = (config) => {
|
|
|
203
222
|
const uploadPreKeysToServerIfRequired = async () => {
|
|
204
223
|
const preKeyCount = await getAvailablePreKeysOnServer();
|
|
205
224
|
logger.info(`${preKeyCount} pre-keys found on server`);
|
|
206
|
-
if (preKeyCount <=
|
|
225
|
+
if (preKeyCount <= MIN_PREKEY_COUNT) {
|
|
207
226
|
await uploadPreKeys();
|
|
208
227
|
}
|
|
209
228
|
};
|
|
210
229
|
const onMessageReceived = (data) => {
|
|
211
230
|
noise.decodeFrame(data, frame => {
|
|
212
|
-
var _a;
|
|
213
231
|
// reset ping timeout
|
|
214
232
|
lastDateRecv = new Date();
|
|
215
233
|
let anyTriggered = false;
|
|
@@ -218,21 +236,21 @@ const makeSocket = (config) => {
|
|
|
218
236
|
if (!(frame instanceof Uint8Array)) {
|
|
219
237
|
const msgId = frame.attrs.id;
|
|
220
238
|
if (logger.level === 'trace') {
|
|
221
|
-
logger.trace({ xml:
|
|
239
|
+
logger.trace({ xml: binaryNodeToString(frame), msg: 'recv xml' });
|
|
222
240
|
}
|
|
223
241
|
/* Check if this is a response to a message we sent */
|
|
224
|
-
anyTriggered = ws.emit(`${
|
|
242
|
+
anyTriggered = ws.emit(`${DEF_TAG_PREFIX}${msgId}`, frame) || anyTriggered;
|
|
225
243
|
/* Check if this is a response to a message we are expecting */
|
|
226
244
|
const l0 = frame.tag;
|
|
227
245
|
const l1 = frame.attrs || {};
|
|
228
|
-
const l2 = Array.isArray(frame.content) ?
|
|
246
|
+
const l2 = Array.isArray(frame.content) ? frame.content[0]?.tag : '';
|
|
229
247
|
for (const key of Object.keys(l1)) {
|
|
230
|
-
anyTriggered = ws.emit(`${
|
|
231
|
-
anyTriggered = ws.emit(`${
|
|
232
|
-
anyTriggered = ws.emit(`${
|
|
248
|
+
anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}:${l1[key]},${l2}`, frame) || anyTriggered;
|
|
249
|
+
anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}:${l1[key]}`, frame) || anyTriggered;
|
|
250
|
+
anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}`, frame) || anyTriggered;
|
|
233
251
|
}
|
|
234
|
-
anyTriggered = ws.emit(`${
|
|
235
|
-
anyTriggered = ws.emit(`${
|
|
252
|
+
anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},,${l2}`, frame) || anyTriggered;
|
|
253
|
+
anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0}`, frame) || anyTriggered;
|
|
236
254
|
if (!anyTriggered && logger.level === 'debug') {
|
|
237
255
|
logger.debug({ unhandled: true, msgId, fromMe: false, frame }, 'communication recv');
|
|
238
256
|
}
|
|
@@ -241,11 +259,12 @@ const makeSocket = (config) => {
|
|
|
241
259
|
};
|
|
242
260
|
const end = (error) => {
|
|
243
261
|
if (closed) {
|
|
244
|
-
logger.trace({ trace: error
|
|
262
|
+
logger.trace({ trace: error?.stack }, 'connection already closed');
|
|
245
263
|
return;
|
|
246
264
|
}
|
|
265
|
+
cleanupQueues();
|
|
247
266
|
closed = true;
|
|
248
|
-
logger.info({ trace: error
|
|
267
|
+
logger.info({ trace: error?.stack }, error ? 'connection errored' : 'connection closed');
|
|
249
268
|
clearInterval(keepAliveReq);
|
|
250
269
|
clearTimeout(qrTimer);
|
|
251
270
|
ws.removeAllListeners('close');
|
|
@@ -255,7 +274,7 @@ const makeSocket = (config) => {
|
|
|
255
274
|
try {
|
|
256
275
|
ws.close();
|
|
257
276
|
}
|
|
258
|
-
catch
|
|
277
|
+
catch { }
|
|
259
278
|
}
|
|
260
279
|
ev.emit('connection.update', {
|
|
261
280
|
connection: 'close',
|
|
@@ -271,7 +290,7 @@ const makeSocket = (config) => {
|
|
|
271
290
|
return;
|
|
272
291
|
}
|
|
273
292
|
if (ws.isClosed || ws.isClosing) {
|
|
274
|
-
throw new
|
|
293
|
+
throw new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed });
|
|
275
294
|
}
|
|
276
295
|
let onOpen;
|
|
277
296
|
let onClose;
|
|
@@ -297,7 +316,7 @@ const makeSocket = (config) => {
|
|
|
297
316
|
it could be that the network is down
|
|
298
317
|
*/
|
|
299
318
|
if (diff > keepAliveIntervalMs + 5000) {
|
|
300
|
-
end(new
|
|
319
|
+
end(new Boom('Connection was lost', { statusCode: DisconnectReason.connectionLost }));
|
|
301
320
|
}
|
|
302
321
|
else if (ws.isOpen) {
|
|
303
322
|
// if its all good, send a keep alive request
|
|
@@ -305,7 +324,7 @@ const makeSocket = (config) => {
|
|
|
305
324
|
tag: 'iq',
|
|
306
325
|
attrs: {
|
|
307
326
|
id: generateMessageTag(),
|
|
308
|
-
to:
|
|
327
|
+
to: S_WHATSAPP_NET,
|
|
309
328
|
type: 'get',
|
|
310
329
|
xmlns: 'w:p'
|
|
311
330
|
},
|
|
@@ -322,7 +341,7 @@ const makeSocket = (config) => {
|
|
|
322
341
|
const sendPassiveIq = (tag) => query({
|
|
323
342
|
tag: 'iq',
|
|
324
343
|
attrs: {
|
|
325
|
-
to:
|
|
344
|
+
to: S_WHATSAPP_NET,
|
|
326
345
|
xmlns: 'passive',
|
|
327
346
|
type: 'set'
|
|
328
347
|
},
|
|
@@ -330,13 +349,12 @@ const makeSocket = (config) => {
|
|
|
330
349
|
});
|
|
331
350
|
/** logout & invalidate connection */
|
|
332
351
|
const logout = async (msg) => {
|
|
333
|
-
|
|
334
|
-
const jid = (_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.id;
|
|
352
|
+
const jid = authState.creds.me?.id;
|
|
335
353
|
if (jid) {
|
|
336
354
|
await sendNode({
|
|
337
355
|
tag: 'iq',
|
|
338
356
|
attrs: {
|
|
339
|
-
to:
|
|
357
|
+
to: S_WHATSAPP_NET,
|
|
340
358
|
type: 'set',
|
|
341
359
|
id: generateMessageTag(),
|
|
342
360
|
xmlns: 'md'
|
|
@@ -352,23 +370,23 @@ const makeSocket = (config) => {
|
|
|
352
370
|
]
|
|
353
371
|
});
|
|
354
372
|
}
|
|
355
|
-
end(new
|
|
373
|
+
end(new Boom(msg || 'Intentional Logout', { statusCode: DisconnectReason.loggedOut }));
|
|
356
374
|
};
|
|
357
375
|
const requestPairingCode = async (phoneNumber, customPairingCode) => {
|
|
358
|
-
const pairingCode = customPairingCode
|
|
359
|
-
if (customPairingCode &&
|
|
376
|
+
const pairingCode = customPairingCode ?? bytesToCrockford(randomBytes(5));
|
|
377
|
+
if (customPairingCode && customPairingCode?.length !== 8) {
|
|
360
378
|
throw new Error('Custom pairing code must be exactly 8 chars');
|
|
361
379
|
}
|
|
362
380
|
authState.creds.pairingCode = pairingCode;
|
|
363
381
|
authState.creds.me = {
|
|
364
|
-
id:
|
|
382
|
+
id: jidEncode(phoneNumber, 's.whatsapp.net'),
|
|
365
383
|
name: '~'
|
|
366
384
|
};
|
|
367
385
|
ev.emit('creds.update', authState.creds);
|
|
368
386
|
await sendNode({
|
|
369
387
|
tag: 'iq',
|
|
370
388
|
attrs: {
|
|
371
|
-
to:
|
|
389
|
+
to: S_WHATSAPP_NET,
|
|
372
390
|
type: 'set',
|
|
373
391
|
id: generateMessageTag(),
|
|
374
392
|
xmlns: 'md'
|
|
@@ -379,7 +397,6 @@ const makeSocket = (config) => {
|
|
|
379
397
|
attrs: {
|
|
380
398
|
jid: authState.creds.me.id,
|
|
381
399
|
stage: 'companion_hello',
|
|
382
|
-
// eslint-disable-next-line camelcase
|
|
383
400
|
should_show_push_notification: 'true'
|
|
384
401
|
},
|
|
385
402
|
content: [
|
|
@@ -396,7 +413,7 @@ const makeSocket = (config) => {
|
|
|
396
413
|
{
|
|
397
414
|
tag: 'companion_platform_id',
|
|
398
415
|
attrs: {},
|
|
399
|
-
content:
|
|
416
|
+
content: getPlatformId(browser[1])
|
|
400
417
|
},
|
|
401
418
|
{
|
|
402
419
|
tag: 'companion_platform_display',
|
|
@@ -415,17 +432,17 @@ const makeSocket = (config) => {
|
|
|
415
432
|
return authState.creds.pairingCode;
|
|
416
433
|
};
|
|
417
434
|
async function generatePairingKey() {
|
|
418
|
-
const salt =
|
|
419
|
-
const randomIv =
|
|
420
|
-
const key = await
|
|
421
|
-
const ciphered =
|
|
435
|
+
const salt = randomBytes(32);
|
|
436
|
+
const randomIv = randomBytes(16);
|
|
437
|
+
const key = await derivePairingCodeKey(authState.creds.pairingCode, salt);
|
|
438
|
+
const ciphered = aesEncryptCTR(authState.creds.pairingEphemeralKeyPair.public, key, randomIv);
|
|
422
439
|
return Buffer.concat([salt, randomIv, ciphered]);
|
|
423
440
|
}
|
|
424
441
|
const sendWAMBuffer = (wamBuffer) => {
|
|
425
442
|
return query({
|
|
426
443
|
tag: 'iq',
|
|
427
444
|
attrs: {
|
|
428
|
-
to:
|
|
445
|
+
to: S_WHATSAPP_NET,
|
|
429
446
|
id: generateMessageTag(),
|
|
430
447
|
xmlns: 'w:stats'
|
|
431
448
|
},
|
|
@@ -449,22 +466,22 @@ const makeSocket = (config) => {
|
|
|
449
466
|
}
|
|
450
467
|
});
|
|
451
468
|
ws.on('error', mapWebSocketError(end));
|
|
452
|
-
ws.on('close', () => end(new
|
|
469
|
+
ws.on('close', () => end(new Boom('Connection Terminated', { statusCode: DisconnectReason.connectionClosed })));
|
|
453
470
|
// the server terminated the connection
|
|
454
|
-
ws.on('CB:xmlstreamend', () => end(new
|
|
471
|
+
ws.on('CB:xmlstreamend', () => end(new Boom('Connection Terminated by Server', { statusCode: DisconnectReason.connectionClosed })));
|
|
455
472
|
// QR gen
|
|
456
473
|
ws.on('CB:iq,type:set,pair-device', async (stanza) => {
|
|
457
474
|
const iq = {
|
|
458
475
|
tag: 'iq',
|
|
459
476
|
attrs: {
|
|
460
|
-
to:
|
|
477
|
+
to: S_WHATSAPP_NET,
|
|
461
478
|
type: 'result',
|
|
462
479
|
id: stanza.attrs.id
|
|
463
480
|
}
|
|
464
481
|
};
|
|
465
482
|
await sendNode(iq);
|
|
466
|
-
const pairDeviceNode =
|
|
467
|
-
const refNodes =
|
|
483
|
+
const pairDeviceNode = getBinaryNodeChild(stanza, 'pair-device');
|
|
484
|
+
const refNodes = getBinaryNodeChildren(pairDeviceNode, 'ref');
|
|
468
485
|
const noiseKeyB64 = Buffer.from(creds.noiseKey.public).toString('base64');
|
|
469
486
|
const identityKeyB64 = Buffer.from(creds.signedIdentityKey.public).toString('base64');
|
|
470
487
|
const advB64 = creds.advSecretKey;
|
|
@@ -475,7 +492,7 @@ const makeSocket = (config) => {
|
|
|
475
492
|
}
|
|
476
493
|
const refNode = refNodes.shift();
|
|
477
494
|
if (!refNode) {
|
|
478
|
-
end(new
|
|
495
|
+
end(new Boom('QR refs attempts ended', { statusCode: DisconnectReason.timedOut }));
|
|
479
496
|
return;
|
|
480
497
|
}
|
|
481
498
|
const ref = refNode.content.toString('utf-8');
|
|
@@ -491,7 +508,7 @@ const makeSocket = (config) => {
|
|
|
491
508
|
ws.on('CB:iq,,pair-success', async (stanza) => {
|
|
492
509
|
logger.debug('pair success recv');
|
|
493
510
|
try {
|
|
494
|
-
const { reply, creds: updatedCreds } =
|
|
511
|
+
const { reply, creds: updatedCreds } = configureSuccessfulPairing(stanza, creds);
|
|
495
512
|
logger.info({ me: updatedCreds.me, platform: updatedCreds.platform }, 'pairing configured successfully, expect to restart the connection...');
|
|
496
513
|
ev.emit('creds.update', updatedCreds);
|
|
497
514
|
ev.emit('connection.update', { isNewLogin: true, qr: undefined });
|
|
@@ -504,8 +521,13 @@ const makeSocket = (config) => {
|
|
|
504
521
|
});
|
|
505
522
|
// login complete
|
|
506
523
|
ws.on('CB:success', async (node) => {
|
|
507
|
-
|
|
508
|
-
|
|
524
|
+
try {
|
|
525
|
+
await uploadPreKeysToServerIfRequired();
|
|
526
|
+
await sendPassiveIq('active');
|
|
527
|
+
}
|
|
528
|
+
catch (err) {
|
|
529
|
+
logger.warn({ err }, 'failed to send initial passive iq');
|
|
530
|
+
}
|
|
509
531
|
logger.info('opened connection to WA');
|
|
510
532
|
clearTimeout(qrTimer); // will never happen in all likelyhood -- but just in case WA sends success on first try
|
|
511
533
|
ev.emit('creds.update', { me: { ...authState.creds.me, lid: node.attrs.lid } });
|
|
@@ -513,16 +535,16 @@ const makeSocket = (config) => {
|
|
|
513
535
|
});
|
|
514
536
|
ws.on('CB:stream:error', (node) => {
|
|
515
537
|
logger.error({ node }, 'stream errored out');
|
|
516
|
-
const { reason, statusCode } =
|
|
517
|
-
end(new
|
|
538
|
+
const { reason, statusCode } = getErrorCodeFromStreamError(node);
|
|
539
|
+
end(new Boom(`Stream Errored (${reason})`, { statusCode, data: node }));
|
|
518
540
|
});
|
|
519
541
|
// stream fail, possible logout
|
|
520
542
|
ws.on('CB:failure', (node) => {
|
|
521
543
|
const reason = +(node.attrs.reason || 500);
|
|
522
|
-
end(new
|
|
544
|
+
end(new Boom('Connection Failure', { statusCode: reason, data: node.attrs }));
|
|
523
545
|
});
|
|
524
546
|
ws.on('CB:ib,,downgrade_webclient', () => {
|
|
525
|
-
end(new
|
|
547
|
+
end(new Boom('Multi-device beta not joined', { statusCode: DisconnectReason.multideviceMismatch }));
|
|
526
548
|
});
|
|
527
549
|
ws.on('CB:ib,,offline_preview', (node) => {
|
|
528
550
|
logger.info('offline preview received', JSON.stringify(node));
|
|
@@ -533,17 +555,16 @@ const makeSocket = (config) => {
|
|
|
533
555
|
});
|
|
534
556
|
});
|
|
535
557
|
ws.on('CB:ib,,edge_routing', (node) => {
|
|
536
|
-
const edgeRoutingNode =
|
|
537
|
-
const routingInfo =
|
|
538
|
-
if (routingInfo
|
|
539
|
-
authState.creds.routingInfo = Buffer.from(routingInfo
|
|
558
|
+
const edgeRoutingNode = getBinaryNodeChild(node, 'edge_routing');
|
|
559
|
+
const routingInfo = getBinaryNodeChild(edgeRoutingNode, 'routing_info');
|
|
560
|
+
if (routingInfo?.content) {
|
|
561
|
+
authState.creds.routingInfo = Buffer.from(routingInfo?.content);
|
|
540
562
|
ev.emit('creds.update', authState.creds);
|
|
541
563
|
}
|
|
542
564
|
});
|
|
543
565
|
let didStartBuffer = false;
|
|
544
566
|
process.nextTick(() => {
|
|
545
|
-
|
|
546
|
-
if ((_a = creds.me) === null || _a === void 0 ? void 0 : _a.id) {
|
|
567
|
+
if (creds.me?.id) {
|
|
547
568
|
// start buffering important events
|
|
548
569
|
// if we're logged in
|
|
549
570
|
ev.buffer();
|
|
@@ -553,8 +574,8 @@ const makeSocket = (config) => {
|
|
|
553
574
|
});
|
|
554
575
|
// called when all offline notifs are handled
|
|
555
576
|
ws.on('CB:ib,,offline', (node) => {
|
|
556
|
-
const child =
|
|
557
|
-
const offlineNotifs = +(
|
|
577
|
+
const child = getBinaryNodeChild(node, 'offline');
|
|
578
|
+
const offlineNotifs = +(child?.attrs.count || 0);
|
|
558
579
|
logger.info(`handled ${offlineNotifs} offline messages/notifications`);
|
|
559
580
|
if (didStartBuffer) {
|
|
560
581
|
ev.flush();
|
|
@@ -564,10 +585,9 @@ const makeSocket = (config) => {
|
|
|
564
585
|
});
|
|
565
586
|
// update credentials when required
|
|
566
587
|
ev.on('creds.update', update => {
|
|
567
|
-
|
|
568
|
-
const name = (_a = update.me) === null || _a === void 0 ? void 0 : _a.name;
|
|
588
|
+
const name = update.me?.name;
|
|
569
589
|
// if name has just been received
|
|
570
|
-
if (
|
|
590
|
+
if (creds.me?.name !== name) {
|
|
571
591
|
logger.debug({ name }, 'updated pushName');
|
|
572
592
|
sendNode({
|
|
573
593
|
tag: 'presence',
|
|
@@ -600,17 +620,17 @@ const makeSocket = (config) => {
|
|
|
600
620
|
uploadPreKeysToServerIfRequired,
|
|
601
621
|
requestPairingCode,
|
|
602
622
|
/** Waits for the connection to WA to reach a state */
|
|
603
|
-
waitForConnectionUpdate:
|
|
623
|
+
waitForConnectionUpdate: bindWaitForConnectionUpdate(ev),
|
|
604
624
|
sendWAMBuffer
|
|
605
625
|
};
|
|
606
626
|
};
|
|
607
|
-
exports.makeSocket = makeSocket;
|
|
608
627
|
/**
|
|
609
628
|
* map the websocket error to the right type
|
|
610
629
|
* so it can be retried by the caller
|
|
611
630
|
* */
|
|
612
631
|
function mapWebSocketError(handler) {
|
|
613
632
|
return (error) => {
|
|
614
|
-
handler(new
|
|
633
|
+
handler(new Boom(`WebSocket Error (${error?.message})`, { statusCode: getCodeFromWSError(error), data: error }));
|
|
615
634
|
};
|
|
616
635
|
}
|
|
636
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/Socket/socket.ts"],"names":[],"mappings":"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"}
|