@queenanya/baileys 9.2.1 → 9.4.1
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/README.md +349 -1171
- package/WAProto/fix-imports.js +74 -18
- package/WAProto/index.js +201 -160
- package/engine-requirements.js +7 -7
- package/lib/Defaults/index.d.ts +19 -0
- package/lib/Defaults/index.d.ts.map +1 -1
- package/lib/Defaults/index.js +32 -6
- package/lib/Defaults/index.js.map +1 -1
- package/lib/Signal/libsignal.d.ts.map +1 -1
- package/lib/Signal/libsignal.js +61 -2
- package/lib/Signal/libsignal.js.map +1 -1
- package/lib/Signal/lid-mapping.d.ts +5 -9
- package/lib/Signal/lid-mapping.d.ts.map +1 -1
- package/lib/Signal/lid-mapping.js +170 -70
- package/lib/Signal/lid-mapping.js.map +1 -1
- package/lib/Socket/Client/websocket.d.ts +1 -1
- package/lib/Socket/Client/websocket.d.ts.map +1 -1
- package/lib/Socket/Client/websocket.js +5 -1
- package/lib/Socket/Client/websocket.js.map +1 -1
- package/lib/Socket/business.d.ts +125 -5
- package/lib/Socket/business.d.ts.map +1 -1
- package/lib/Socket/business.js +11 -8
- package/lib/Socket/business.js.map +1 -1
- package/lib/Socket/chats.d.ts +22 -3
- package/lib/Socket/chats.d.ts.map +1 -1
- package/lib/Socket/chats.js +277 -58
- package/lib/Socket/chats.js.map +1 -1
- package/lib/Socket/communities.d.ts +125 -5
- package/lib/Socket/communities.d.ts.map +1 -1
- package/lib/Socket/groups.d.ts +19 -3
- package/lib/Socket/groups.d.ts.map +1 -1
- package/lib/Socket/groups.js +7 -1
- package/lib/Socket/groups.js.map +1 -1
- package/lib/Socket/index.d.ts +125 -5
- package/lib/Socket/index.d.ts.map +1 -1
- package/lib/Socket/index.js +0 -6
- package/lib/Socket/index.js.map +1 -1
- package/lib/Socket/messages-recv.d.ts +126 -6
- package/lib/Socket/messages-recv.d.ts.map +1 -1
- package/lib/Socket/messages-recv.js +771 -177
- package/lib/Socket/messages-recv.js.map +1 -1
- package/lib/Socket/messages-send.d.ts +129 -7
- package/lib/Socket/messages-send.d.ts.map +1 -1
- package/lib/Socket/messages-send.js +430 -119
- package/lib/Socket/messages-send.js.map +1 -1
- package/lib/Socket/newsletter.d.ts +20 -5
- package/lib/Socket/newsletter.d.ts.map +1 -1
- package/lib/Socket/newsletter.js +2 -47
- package/lib/Socket/newsletter.js.map +1 -1
- package/lib/Socket/socket.d.ts +3 -1
- package/lib/Socket/socket.d.ts.map +1 -1
- package/lib/Socket/socket.js +151 -29
- package/lib/Socket/socket.js.map +1 -1
- package/lib/Types/Auth.d.ts +2 -0
- package/lib/Types/Auth.d.ts.map +1 -1
- package/lib/Types/Call.d.ts +10 -1
- package/lib/Types/Call.d.ts.map +1 -1
- package/lib/Types/Contact.d.ts +2 -0
- package/lib/Types/Contact.d.ts.map +1 -1
- package/lib/Types/Events.d.ts +60 -6
- package/lib/Types/Events.d.ts.map +1 -1
- package/lib/Types/GroupMetadata.d.ts +4 -0
- package/lib/Types/GroupMetadata.d.ts.map +1 -1
- package/lib/Types/Message.d.ts +530 -16
- package/lib/Types/Message.d.ts.map +1 -1
- package/lib/Types/Message.js.map +1 -1
- package/lib/Types/Newsletter.d.ts +32 -45
- package/lib/Types/Newsletter.d.ts.map +1 -1
- package/lib/Types/Newsletter.js +25 -23
- package/lib/Types/Newsletter.js.map +1 -1
- package/lib/Types/State.d.ts +54 -0
- package/lib/Types/State.d.ts.map +1 -1
- package/lib/Types/State.js +42 -0
- package/lib/Types/State.js.map +1 -1
- package/lib/Types/index.d.ts +9 -0
- package/lib/Types/index.d.ts.map +1 -1
- package/lib/Types/index.js.map +1 -1
- package/lib/Utils/auth-utils.d.ts.map +1 -1
- package/lib/Utils/auth-utils.js +53 -20
- package/lib/Utils/auth-utils.js.map +1 -1
- package/lib/Utils/browser-utils.d.ts +13 -0
- package/lib/Utils/browser-utils.d.ts.map +1 -1
- package/lib/Utils/browser-utils.js +90 -10
- package/lib/Utils/browser-utils.js.map +1 -1
- package/lib/Utils/chat-utils.d.ts +30 -0
- package/lib/Utils/chat-utils.d.ts.map +1 -1
- package/lib/Utils/chat-utils.js +134 -59
- package/lib/Utils/chat-utils.js.map +1 -1
- package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
- package/lib/Utils/companion-reg-client-utils.js +34 -0
- package/lib/Utils/companion-reg-client-utils.js.map +1 -0
- package/lib/Utils/crypto.d.ts +4 -8
- package/lib/Utils/crypto.d.ts.map +1 -1
- package/lib/Utils/crypto.js +2 -26
- package/lib/Utils/crypto.js.map +1 -1
- package/lib/Utils/decode-wa-message.d.ts +12 -0
- package/lib/Utils/decode-wa-message.d.ts.map +1 -1
- package/lib/Utils/decode-wa-message.js +16 -0
- package/lib/Utils/decode-wa-message.js.map +1 -1
- package/lib/Utils/event-buffer.d.ts.map +1 -1
- package/lib/Utils/event-buffer.js +43 -8
- package/lib/Utils/event-buffer.js.map +1 -1
- package/lib/Utils/generics.d.ts +3 -1
- package/lib/Utils/generics.d.ts.map +1 -1
- package/lib/Utils/generics.js +17 -4
- package/lib/Utils/generics.js.map +1 -1
- package/lib/Utils/history.d.ts +8 -3
- package/lib/Utils/history.d.ts.map +1 -1
- package/lib/Utils/history.js +60 -16
- package/lib/Utils/history.js.map +1 -1
- package/lib/Utils/identity-change-handler.d.ts +44 -0
- package/lib/Utils/identity-change-handler.d.ts.map +1 -0
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/identity-change-handler.js.map +1 -0
- package/lib/Utils/index.d.ts +6 -0
- package/lib/Utils/index.d.ts.map +1 -1
- package/lib/Utils/index.js +6 -0
- package/lib/Utils/index.js.map +1 -1
- package/lib/Utils/interactive-message.d.ts +201 -0
- package/lib/Utils/interactive-message.d.ts.map +1 -0
- package/lib/Utils/interactive-message.js +256 -0
- package/lib/Utils/interactive-message.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +7 -12
- package/lib/Utils/lt-hash.d.ts.map +1 -1
- package/lib/Utils/lt-hash.js +2 -42
- package/lib/Utils/lt-hash.js.map +1 -1
- package/lib/Utils/make-mutex.d.ts +1 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -1
- package/lib/Utils/make-mutex.js +20 -27
- package/lib/Utils/make-mutex.js.map +1 -1
- package/lib/Utils/message-composer.d.ts +5 -0
- package/lib/Utils/message-composer.d.ts.map +1 -0
- package/lib/Utils/message-composer.js +5 -0
- package/lib/Utils/message-composer.js.map +1 -0
- package/lib/Utils/message-retry-manager.d.ts +30 -2
- package/lib/Utils/message-retry-manager.d.ts.map +1 -1
- package/lib/Utils/message-retry-manager.js +58 -5
- package/lib/Utils/message-retry-manager.js.map +1 -1
- package/lib/Utils/messages-media.d.ts +35 -5
- package/lib/Utils/messages-media.d.ts.map +1 -1
- package/lib/Utils/messages-media.js +171 -51
- package/lib/Utils/messages-media.js.map +1 -1
- package/lib/Utils/messages.d.ts +2 -0
- package/lib/Utils/messages.d.ts.map +1 -1
- package/lib/Utils/messages.js +475 -35
- package/lib/Utils/messages.js.map +1 -1
- package/lib/Utils/noise-handler.d.ts +4 -4
- package/lib/Utils/noise-handler.d.ts.map +1 -1
- package/lib/Utils/noise-handler.js +139 -85
- package/lib/Utils/noise-handler.js.map +1 -1
- package/lib/Utils/offline-node-processor.d.ts +17 -0
- package/lib/Utils/offline-node-processor.d.ts.map +1 -0
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/offline-node-processor.js.map +1 -0
- package/lib/Utils/process-message.d.ts.map +1 -1
- package/lib/Utils/process-message.js +115 -16
- package/lib/Utils/process-message.js.map +1 -1
- package/lib/Utils/reporting-utils.d.ts +11 -0
- package/lib/Utils/reporting-utils.d.ts.map +1 -0
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/reporting-utils.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.d.ts.map +1 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +163 -0
- package/lib/Utils/tc-token-utils.js.map +1 -0
- package/lib/Utils/use-mongo-file-auth-state.d.ts +16 -0
- package/lib/Utils/use-mongo-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-mongo-file-auth-state.js +60 -0
- package/lib/Utils/use-mongo-file-auth-state.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +1 -1
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -1
- package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -1
- package/lib/Utils/use-single-file-auth-state.js.map +1 -1
- package/lib/Utils/validate-connection.d.ts.map +1 -1
- package/lib/Utils/validate-connection.js +11 -1
- package/lib/Utils/validate-connection.js.map +1 -1
- package/lib/WABinary/decode.d.ts.map +1 -1
- package/lib/WABinary/decode.js +24 -0
- package/lib/WABinary/decode.js.map +1 -1
- package/lib/WABinary/encode.js +5 -1
- package/lib/WABinary/encode.js.map +1 -1
- package/lib/WABinary/generic-utils.d.ts +10 -1
- package/lib/WABinary/generic-utils.d.ts.map +1 -1
- package/lib/WABinary/generic-utils.js +42 -8
- package/lib/WABinary/generic-utils.js.map +1 -1
- package/lib/WABinary/jid-utils.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +26 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +1 -0
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
- package/lib/WAUSync/Protocols/index.js +1 -0
- package/lib/WAUSync/Protocols/index.js.map +1 -1
- package/lib/WAUSync/USyncQuery.d.ts +1 -0
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
- package/lib/WAUSync/USyncQuery.js +6 -2
- package/lib/WAUSync/USyncQuery.js.map +1 -1
- package/lib/WAUSync/USyncUser.d.ts +4 -0
- package/lib/WAUSync/USyncUser.d.ts.map +1 -1
- package/lib/WAUSync/USyncUser.js +8 -0
- package/lib/WAUSync/USyncUser.js.map +1 -1
- package/lib/addons/anti-delete.d.ts +72 -0
- package/lib/addons/anti-delete.d.ts.map +1 -0
- package/lib/addons/anti-delete.js +165 -0
- package/lib/addons/anti-delete.js.map +1 -0
- package/lib/addons/auto-reply.d.ts +67 -0
- package/lib/addons/auto-reply.d.ts.map +1 -0
- package/lib/addons/auto-reply.js +145 -0
- package/lib/addons/auto-reply.js.map +1 -0
- package/lib/addons/browser-presets.d.ts +16 -0
- package/lib/addons/browser-presets.d.ts.map +1 -0
- package/lib/addons/browser-presets.js +24 -0
- package/lib/addons/browser-presets.js.map +1 -0
- package/lib/addons/button-sender.d.ts +260 -0
- package/lib/addons/button-sender.d.ts.map +1 -0
- package/lib/addons/button-sender.js +771 -0
- package/lib/addons/button-sender.js.map +1 -0
- package/lib/addons/call-handler.d.ts +79 -0
- package/lib/addons/call-handler.d.ts.map +1 -0
- package/lib/addons/call-handler.js +342 -0
- package/lib/addons/call-handler.js.map +1 -0
- package/lib/addons/from-chats.d.ts +30 -0
- package/lib/addons/from-chats.d.ts.map +1 -0
- package/lib/addons/from-chats.js +38 -0
- package/lib/addons/from-chats.js.map +1 -0
- package/lib/addons/from-messages-recv.d.ts +59 -0
- package/lib/addons/from-messages-recv.d.ts.map +1 -0
- package/lib/addons/from-messages-recv.js +326 -0
- package/lib/addons/from-messages-recv.js.map +1 -0
- package/lib/addons/from-messages-send.d.ts +50 -0
- package/lib/addons/from-messages-send.d.ts.map +1 -0
- package/lib/addons/from-messages-send.js +148 -0
- package/lib/addons/from-messages-send.js.map +1 -0
- package/lib/addons/from-messages.d.ts +52 -0
- package/lib/addons/from-messages.d.ts.map +1 -0
- package/lib/addons/from-messages.js +304 -0
- package/lib/addons/from-messages.js.map +1 -0
- package/lib/addons/index.d.ts +67 -0
- package/lib/addons/index.d.ts.map +1 -0
- package/lib/addons/index.js +86 -0
- package/lib/addons/index.js.map +1 -0
- package/lib/addons/interactive-message.d.ts +201 -0
- package/lib/addons/interactive-message.d.ts.map +1 -0
- package/lib/addons/interactive-message.js +256 -0
- package/lib/addons/interactive-message.js.map +1 -0
- package/lib/addons/jid-plot.d.ts +49 -0
- package/lib/addons/jid-plot.d.ts.map +1 -0
- package/lib/addons/jid-plot.js +84 -0
- package/lib/addons/jid-plot.js.map +1 -0
- package/lib/addons/jid-plotting.d.ts +54 -0
- package/lib/addons/jid-plotting.d.ts.map +1 -0
- package/lib/addons/jid-plotting.js +150 -0
- package/lib/addons/jid-plotting.js.map +1 -0
- package/lib/addons/lid-support.d.ts +41 -0
- package/lib/addons/lid-support.d.ts.map +1 -0
- package/lib/addons/lid-support.js +42 -0
- package/lib/addons/lid-support.js.map +1 -0
- package/lib/addons/message-composer.d.ts +142 -0
- package/lib/addons/message-composer.d.ts.map +1 -0
- package/lib/addons/message-composer.js +377 -0
- package/lib/addons/message-composer.js.map +1 -0
- package/lib/addons/message-scheduler.d.ts +77 -0
- package/lib/addons/message-scheduler.d.ts.map +1 -0
- package/lib/addons/message-scheduler.js +108 -0
- package/lib/addons/message-scheduler.js.map +1 -0
- package/lib/addons/message-search.d.ts +51 -0
- package/lib/addons/message-search.d.ts.map +1 -0
- package/lib/addons/message-search.js +171 -0
- package/lib/addons/message-search.js.map +1 -0
- package/lib/addons/message-utils.d.ts +88 -0
- package/lib/addons/message-utils.d.ts.map +1 -0
- package/lib/addons/message-utils.js +292 -0
- package/lib/addons/message-utils.js.map +1 -0
- package/lib/addons/outgoing-calls.d.ts +64 -0
- package/lib/addons/outgoing-calls.d.ts.map +1 -0
- package/lib/addons/outgoing-calls.js +139 -0
- package/lib/addons/outgoing-calls.js.map +1 -0
- package/lib/addons/pairing-fix.d.ts +31 -0
- package/lib/addons/pairing-fix.d.ts.map +1 -0
- package/lib/addons/pairing-fix.js +74 -0
- package/lib/addons/pairing-fix.js.map +1 -0
- package/lib/addons/past-participants.d.ts +42 -0
- package/lib/addons/past-participants.d.ts.map +1 -0
- package/lib/addons/past-participants.js +41 -0
- package/lib/addons/past-participants.js.map +1 -0
- package/lib/addons/rich-response.d.ts +111 -0
- package/lib/addons/rich-response.d.ts.map +1 -0
- package/lib/addons/rich-response.js +152 -0
- package/lib/addons/rich-response.js.map +1 -0
- package/lib/addons/scheduling.d.ts +41 -0
- package/lib/addons/scheduling.d.ts.map +1 -0
- package/lib/addons/scheduling.js +110 -0
- package/lib/addons/scheduling.js.map +1 -0
- package/lib/addons/status-posting.d.ts +177 -0
- package/lib/addons/status-posting.d.ts.map +1 -0
- package/lib/addons/status-posting.js +240 -0
- package/lib/addons/status-posting.js.map +1 -0
- package/lib/addons/stickerpack.d.ts +37 -0
- package/lib/addons/stickerpack.d.ts.map +1 -0
- package/lib/addons/stickerpack.js +39 -0
- package/lib/addons/stickerpack.js.map +1 -0
- package/lib/addons/templates.d.ts +72 -0
- package/lib/addons/templates.d.ts.map +1 -0
- package/lib/addons/templates.js +145 -0
- package/lib/addons/templates.js.map +1 -0
- package/lib/addons/vcard.d.ts +59 -0
- package/lib/addons/vcard.d.ts.map +1 -0
- package/lib/addons/vcard.js +88 -0
- package/lib/addons/vcard.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/package.json +6 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"business.js","sourceRoot":"","sources":["../../src/Socket/business.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iCAAiC,EACjC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAmB,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAoB,EAAE,EAAE;IAC1D,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IAEnD,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAAgC,EAAE,EAAE;QACxE,MAAM,IAAI,GAAiB,EAAE,CAAA;QAC7B,MAAM,YAAY,GAAyC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;QAE9F,IAAI,CAAC,IAAI,CACR,GAAG,YAAY;aACb,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"business.js","sourceRoot":"","sources":["../../src/Socket/business.ts"],"names":[],"mappings":"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"}
|
package/lib/Socket/chats.d.ts
CHANGED
|
@@ -6,11 +6,28 @@ import type { LabelActionBody } from '../Types/Label.js';
|
|
|
6
6
|
import { type BinaryNode } from '../WABinary/index.js';
|
|
7
7
|
import { USyncQuery } from '../WAUSync/index.js';
|
|
8
8
|
export declare const makeChatsSocket: (config: SocketConfig) => {
|
|
9
|
+
serverProps: {
|
|
10
|
+
/** AB prop 10518: gate tctoken on 1:1 messages. Default true (safe: avoids 463). */
|
|
11
|
+
privacyTokenOn1to1: boolean;
|
|
12
|
+
/** AB prop 9666: gate tctoken on profile picture IQs. WA Web default: true. */
|
|
13
|
+
profilePicPrivacyToken: boolean;
|
|
14
|
+
/** AB prop 14303: issue tctokens to LID instead of PN. WA Web default: false. */
|
|
15
|
+
lidTrustedTokenIssueToLid: boolean;
|
|
16
|
+
};
|
|
9
17
|
createCallLink: (type: "audio" | "video", event?: {
|
|
10
18
|
startTime: number;
|
|
11
19
|
}, timeoutMs?: number) => Promise<string | undefined>;
|
|
12
20
|
getBotListV2: () => Promise<BotListInfo[]>;
|
|
13
|
-
|
|
21
|
+
messageMutex: {
|
|
22
|
+
mutex<T>(code: () => Promise<T> | T): Promise<T>;
|
|
23
|
+
};
|
|
24
|
+
receiptMutex: {
|
|
25
|
+
mutex<T>(code: () => Promise<T> | T): Promise<T>;
|
|
26
|
+
};
|
|
27
|
+
appStatePatchMutex: {
|
|
28
|
+
mutex<T>(code: () => Promise<T> | T): Promise<T>;
|
|
29
|
+
};
|
|
30
|
+
notificationMutex: {
|
|
14
31
|
mutex<T>(code: () => Promise<T> | T): Promise<T>;
|
|
15
32
|
};
|
|
16
33
|
fetchPrivacySettings: (force?: boolean) => Promise<{
|
|
@@ -19,7 +36,7 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
|
|
|
19
36
|
upsertMessage: (msg: WAMessage, type: MessageUpsertType) => Promise<void>;
|
|
20
37
|
appPatch: (patchCreate: WAPatchCreate) => Promise<void>;
|
|
21
38
|
sendPresenceUpdate: (type: WAPresence, toJid?: string) => Promise<void>;
|
|
22
|
-
presenceSubscribe: (toJid: string
|
|
39
|
+
presenceSubscribe: (toJid: string) => Promise<void>;
|
|
23
40
|
profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise<string | undefined>;
|
|
24
41
|
fetchBlocklist: () => Promise<(string | undefined)[]>;
|
|
25
42
|
fetchStatus: (...jids: string[]) => Promise<import("../WAUSync/index.js").USyncQueryResultList[] | undefined>;
|
|
@@ -81,13 +98,15 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
|
|
|
81
98
|
sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
|
|
82
99
|
sendNode: (frame: BinaryNode) => Promise<void>;
|
|
83
100
|
logout: (msg?: string) => Promise<void>;
|
|
84
|
-
end: (error: Error | undefined) => void
|
|
101
|
+
end: (error: Error | undefined) => Promise<void>;
|
|
85
102
|
onUnexpectedError: (err: Error | Boom, msg: string) => void;
|
|
86
103
|
uploadPreKeys: (count?: number, retryCount?: number) => Promise<void>;
|
|
87
104
|
uploadPreKeysToServerIfRequired: () => Promise<void>;
|
|
88
105
|
digestKeyBundle: () => Promise<void>;
|
|
89
106
|
rotateSignedPreKey: () => Promise<void>;
|
|
90
107
|
requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise<string>;
|
|
108
|
+
updateServerTimeOffset: ({ attrs }: BinaryNode) => void;
|
|
109
|
+
sendUnifiedSession: () => Promise<void>;
|
|
91
110
|
wamBuffer: import("../index.js").BinaryInfo;
|
|
92
111
|
waitForConnectionUpdate: (check: (u: Partial<import("../Types/index.js").ConnectionState>) => Promise<boolean | undefined>, timeoutMs?: number) => Promise<void>;
|
|
93
112
|
sendWAMBuffer: (wamBuffer: Buffer) => Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/Socket/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EACX,WAAW,EAEX,gBAAgB,EAGhB,iBAAiB,EAEjB,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EAEb,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/Socket/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EACX,WAAW,EAEX,gBAAgB,EAGhB,iBAAiB,EAEjB,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EAEb,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAqBrD,OAAO,EACN,KAAK,UAAU,EAWf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAA;AAGlD,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY;;QA6BlD,oFAAoF;;QAEpF,+EAA+E;;QAE/E,iFAAiF;;;2BAwqB9C,OAAO,GAAG,OAAO,UAAU;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,cAAc,MAAM;;;;;;;;;;;;;;;;;;4BA0HnE,aAAa;+BApGV,UAAU,UAAU,MAAM;+BA8C1B,MAAM;6BA5GR,MAAM,SAAQ,SAAS,GAAG,OAAO,cAA0B,MAAM;;2BAhdnE,MAAM,EAAE;yCAaM,MAAM,EAAE;gCAepD,MAAM,WACF,aAAa,eACT;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;gCAmCN,MAAM;kCA0BJ,MAAM;8BAkBV,MAAM;6BAkBP,MAAM,UAAU,OAAO,GAAG,SAAS;2DAkoBX,OAAO;+BAn1B7B,kBAAkB;mCAJd,sBAAsB;mCAQtB,cAAc;iCAIhB,oBAAoB;yCAIZ,cAAc;iCAItB,cAAc;uCAIR,mBAAmB;oCAItB,sBAAsB;8CAIZ,MAAM;8BAqPtB,MAAM,KAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;;sBA0jBxD,gBAAgB,OAAO,MAAM;2BAxgBlB,cAAc,GAAG,QAAQ,kBAAkB,MAAM,GAAG,MAAM;4BA2iB/D,MAAM,WAAW,KAAK,CAAC,eAAe,CAAC,cAAc;yBAYxD,MAAM;oBAYX,MAAM,UAAU,eAAe;wBAc3B,MAAM,WAAW,MAAM;2BAcpB,MAAM,WAAW,MAAM;2BAcvB,MAAM,aAAa,MAAM,WAAW,MAAM;8BAevC,MAAM,aAAa,MAAM,WAAW,MAAM;gBAhGxD,MAAM,YAAY;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,QAAQ,OAAO;sCA+G7C,gBAAgB;kCAYpB,MAAM;;;;;;0DA3lCrC,GAAE,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAq6CrC,CAAA"}
|
package/lib/Socket/chats.js
CHANGED
|
@@ -1,26 +1,51 @@
|
|
|
1
1
|
import NodeCache from '@cacheable/node-cache';
|
|
2
2
|
import { Boom } from '@hapi/boom';
|
|
3
3
|
import { proto } from '../../WAProto/index.js';
|
|
4
|
-
import { DEFAULT_CACHE_TTLS, PROCESSABLE_HISTORY_TYPES } from '../Defaults/index.js';
|
|
4
|
+
import { DEFAULT_CACHE_TTLS, HISTORY_SYNC_PAUSED_TIMEOUT_MS, PROCESSABLE_HISTORY_TYPES } from '../Defaults/index.js';
|
|
5
5
|
import { ALL_WA_PATCH_NAMES } from '../Types/index.js';
|
|
6
6
|
import { SyncState } from '../Types/State.js';
|
|
7
|
-
import { chatModificationToAppPatch, decodePatches, decodeSyncdSnapshot, encodeSyncdPatch, extractSyncdPatches, generateProfilePicture, getHistoryMsg, newLTHashState, processSyncAction } from '../Utils/index.js';
|
|
7
|
+
import { chatModificationToAppPatch, decodePatches, decodeSyncdSnapshot, encodeSyncdPatch, ensureLTHashStateVersion, extractSyncdPatches, generateProfilePicture, getHistoryMsg, isAppStateSyncIrrecoverable, isMissingKeyError, MAX_SYNC_ATTEMPTS, newLTHashState, processSyncAction } from '../Utils/index.js';
|
|
8
8
|
import { makeMutex } from '../Utils/make-mutex.js';
|
|
9
9
|
import processMessage from '../Utils/process-message.js';
|
|
10
|
-
import {
|
|
10
|
+
import { buildTcTokenFromJid } from '../Utils/tc-token-utils.js';
|
|
11
|
+
import { getBinaryNodeChild, getBinaryNodeChildren, isHostedLidUser, isHostedPnUser, isLidUser, isPnUser, jidDecode, jidNormalizedUser, reduceBinaryNodeToDictionary, S_WHATSAPP_NET } from '../WABinary/index.js';
|
|
11
12
|
import { USyncQuery, USyncUser } from '../WAUSync/index.js';
|
|
12
13
|
import { makeSocket } from './socket.js';
|
|
13
|
-
const MAX_SYNC_ATTEMPTS = 2;
|
|
14
14
|
export const makeChatsSocket = (config) => {
|
|
15
15
|
const { logger, markOnlineOnConnect, fireInitQueries, appStateMacVerification, shouldIgnoreJid, shouldSyncHistoryMessage, getMessage } = config;
|
|
16
16
|
const sock = makeSocket(config);
|
|
17
|
-
const { ev, ws, authState, generateMessageTag, sendNode, query, signalRepository, onUnexpectedError } = sock;
|
|
17
|
+
const { ev, ws, authState, generateMessageTag, sendNode, query, signalRepository, onUnexpectedError, sendUnifiedSession } = sock;
|
|
18
|
+
const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping);
|
|
18
19
|
let privacySettings;
|
|
20
|
+
/** Server-assigned AB props for protocol behavior. */
|
|
21
|
+
const serverProps = {
|
|
22
|
+
/** AB prop 10518: gate tctoken on 1:1 messages. Default true (safe: avoids 463). */
|
|
23
|
+
privacyTokenOn1to1: true,
|
|
24
|
+
/** AB prop 9666: gate tctoken on profile picture IQs. WA Web default: true. */
|
|
25
|
+
profilePicPrivacyToken: true,
|
|
26
|
+
/** AB prop 14303: issue tctokens to LID instead of PN. WA Web default: false. */
|
|
27
|
+
lidTrustedTokenIssueToLid: false
|
|
28
|
+
};
|
|
19
29
|
let syncState = SyncState.Connecting;
|
|
20
|
-
/** this mutex ensures that
|
|
21
|
-
const
|
|
30
|
+
/** this mutex ensures that messages are processed in order */
|
|
31
|
+
const messageMutex = makeMutex();
|
|
32
|
+
/** this mutex ensures that receipts are processed in order */
|
|
33
|
+
const receiptMutex = makeMutex();
|
|
34
|
+
/** this mutex ensures that app state patches are processed in order */
|
|
35
|
+
const appStatePatchMutex = makeMutex();
|
|
36
|
+
/** this mutex ensures that notifications are processed in order */
|
|
37
|
+
const notificationMutex = makeMutex();
|
|
22
38
|
// Timeout for AwaitingInitialSync state
|
|
23
39
|
let awaitingSyncTimeout;
|
|
40
|
+
// In-memory history sync completion tracking (resets on reconnection)
|
|
41
|
+
const historySyncStatus = {
|
|
42
|
+
initialBootstrapComplete: false,
|
|
43
|
+
recentSyncComplete: false
|
|
44
|
+
};
|
|
45
|
+
let historySyncPausedTimeout;
|
|
46
|
+
// Collections blocked on missing app state sync keys (mirrors WA Web's "Blocked" state).
|
|
47
|
+
// When a key arrives via APP_STATE_SYNC_KEY_SHARE, these are re-synced.
|
|
48
|
+
const blockedCollections = new Set();
|
|
24
49
|
const placeholderResendCache = config.placeholderResendCache ||
|
|
25
50
|
new NodeCache({
|
|
26
51
|
stdTTL: DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour
|
|
@@ -251,6 +276,42 @@ export const makeChatsSocket = (config) => {
|
|
|
251
276
|
return getBinaryNodeChildren(listNode, 'item').map(n => n.attrs.jid);
|
|
252
277
|
};
|
|
253
278
|
const updateBlockStatus = async (jid, action) => {
|
|
279
|
+
const normalizedJid = jidNormalizedUser(jid);
|
|
280
|
+
let lid;
|
|
281
|
+
let pn_jid;
|
|
282
|
+
if (isLidUser(normalizedJid) || isHostedLidUser(normalizedJid)) {
|
|
283
|
+
lid = normalizedJid;
|
|
284
|
+
if (action === 'block') {
|
|
285
|
+
const pn = await signalRepository.lidMapping.getPNForLID(normalizedJid);
|
|
286
|
+
if (!pn) {
|
|
287
|
+
throw new Boom(`Unable to resolve PN JID for LID: ${jid}`, { statusCode: 400 });
|
|
288
|
+
}
|
|
289
|
+
pn_jid = jidNormalizedUser(pn);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (isPnUser(normalizedJid) || isHostedPnUser(normalizedJid)) {
|
|
293
|
+
const mapped = await signalRepository.lidMapping.getLIDForPN(normalizedJid);
|
|
294
|
+
if (!mapped) {
|
|
295
|
+
throw new Boom(`Unable to resolve LID for PN JID: ${jid}`, { statusCode: 400 });
|
|
296
|
+
}
|
|
297
|
+
lid = mapped;
|
|
298
|
+
if (action === 'block') {
|
|
299
|
+
pn_jid = jidNormalizedUser(normalizedJid);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
throw new Boom(`Invalid jid: ${jid}`, { statusCode: 400 });
|
|
304
|
+
}
|
|
305
|
+
const itemAttrs = {
|
|
306
|
+
action,
|
|
307
|
+
jid: lid
|
|
308
|
+
};
|
|
309
|
+
if (action === 'block') {
|
|
310
|
+
if (!pn_jid) {
|
|
311
|
+
throw new Boom(`pn_jid required for block: ${jid}`, { statusCode: 400 });
|
|
312
|
+
}
|
|
313
|
+
itemAttrs.pn_jid = pn_jid;
|
|
314
|
+
}
|
|
254
315
|
await query({
|
|
255
316
|
tag: 'iq',
|
|
256
317
|
attrs: {
|
|
@@ -261,10 +322,7 @@ export const makeChatsSocket = (config) => {
|
|
|
261
322
|
content: [
|
|
262
323
|
{
|
|
263
324
|
tag: 'item',
|
|
264
|
-
attrs:
|
|
265
|
-
action,
|
|
266
|
-
jid
|
|
267
|
-
}
|
|
325
|
+
attrs: itemAttrs
|
|
268
326
|
}
|
|
269
327
|
]
|
|
270
328
|
});
|
|
@@ -346,6 +404,15 @@ export const makeChatsSocket = (config) => {
|
|
|
346
404
|
};
|
|
347
405
|
};
|
|
348
406
|
const resyncAppState = ev.createBufferedFunction(async (collections, isInitialSync) => {
|
|
407
|
+
const appStateSyncKeyCache = new Map();
|
|
408
|
+
const getCachedAppStateSyncKey = async (keyId) => {
|
|
409
|
+
if (appStateSyncKeyCache.has(keyId)) {
|
|
410
|
+
return appStateSyncKeyCache.get(keyId) ?? undefined;
|
|
411
|
+
}
|
|
412
|
+
const key = await getAppStateSyncKey(keyId);
|
|
413
|
+
appStateSyncKeyCache.set(keyId, key ?? null);
|
|
414
|
+
return key;
|
|
415
|
+
};
|
|
349
416
|
// we use this to determine which events to fire
|
|
350
417
|
// otherwise when we resync from scratch -- all notifications will fire
|
|
351
418
|
const initialVersionMap = {};
|
|
@@ -354,6 +421,9 @@ export const makeChatsSocket = (config) => {
|
|
|
354
421
|
const collectionsToHandle = new Set(collections);
|
|
355
422
|
// in case something goes wrong -- ensure we don't enter a loop that cannot be exited from
|
|
356
423
|
const attemptsMap = {};
|
|
424
|
+
// collections that failed and need a full snapshot on retry
|
|
425
|
+
// mirrors WA Web's ErrorFatal -> force snapshot behavior
|
|
426
|
+
const forceSnapshotCollections = new Set();
|
|
357
427
|
// keep executing till all collections are done
|
|
358
428
|
// sometimes a single patch request will not return all the patches (God knows why)
|
|
359
429
|
// so we fetch till they're all done (this is determined by the "has_more_patches" flag)
|
|
@@ -364,6 +434,7 @@ export const makeChatsSocket = (config) => {
|
|
|
364
434
|
const result = await authState.keys.get('app-state-sync-version', [name]);
|
|
365
435
|
let state = result[name];
|
|
366
436
|
if (state) {
|
|
437
|
+
state = ensureLTHashStateVersion(state);
|
|
367
438
|
if (typeof initialVersionMap[name] === 'undefined') {
|
|
368
439
|
initialVersionMap[name] = state.version;
|
|
369
440
|
}
|
|
@@ -372,14 +443,18 @@ export const makeChatsSocket = (config) => {
|
|
|
372
443
|
state = newLTHashState();
|
|
373
444
|
}
|
|
374
445
|
states[name] = state;
|
|
375
|
-
|
|
446
|
+
const shouldForceSnapshot = forceSnapshotCollections.has(name);
|
|
447
|
+
if (shouldForceSnapshot) {
|
|
448
|
+
forceSnapshotCollections.delete(name);
|
|
449
|
+
}
|
|
450
|
+
logger.info(`resyncing ${name} from v${state.version}${shouldForceSnapshot ? ' (forcing snapshot)' : ''}`);
|
|
376
451
|
nodes.push({
|
|
377
452
|
tag: 'collection',
|
|
378
453
|
attrs: {
|
|
379
454
|
name,
|
|
380
455
|
version: state.version.toString(),
|
|
381
|
-
// return snapshot if
|
|
382
|
-
return_snapshot: (!state.version).toString()
|
|
456
|
+
// return snapshot if syncing from scratch or forcing after a failed attempt
|
|
457
|
+
return_snapshot: (shouldForceSnapshot || !state.version).toString()
|
|
383
458
|
}
|
|
384
459
|
});
|
|
385
460
|
}
|
|
@@ -405,7 +480,7 @@ export const makeChatsSocket = (config) => {
|
|
|
405
480
|
const { patches, hasMorePatches, snapshot } = decoded[name];
|
|
406
481
|
try {
|
|
407
482
|
if (snapshot) {
|
|
408
|
-
const { state: newState, mutationMap } = await decodeSyncdSnapshot(name, snapshot,
|
|
483
|
+
const { state: newState, mutationMap } = await decodeSyncdSnapshot(name, snapshot, getCachedAppStateSyncKey, initialVersionMap[name], appStateMacVerification.snapshot);
|
|
409
484
|
states[name] = newState;
|
|
410
485
|
Object.assign(globalMutationMap, mutationMap);
|
|
411
486
|
logger.info(`restored state of ${name} from snapshot to v${newState.version} with mutations`);
|
|
@@ -413,7 +488,7 @@ export const makeChatsSocket = (config) => {
|
|
|
413
488
|
}
|
|
414
489
|
// only process if there are syncd patches
|
|
415
490
|
if (patches.length) {
|
|
416
|
-
const { state: newState, mutationMap } = await decodePatches(name, patches, states[name],
|
|
491
|
+
const { state: newState, mutationMap } = await decodePatches(name, patches, states[name], getCachedAppStateSyncKey, config.options, initialVersionMap[name], logger, appStateMacVerification.patch);
|
|
417
492
|
await authState.keys.set({ 'app-state-sync-version': { [name]: newState } });
|
|
418
493
|
logger.info(`synced ${name} to v${newState.version}`);
|
|
419
494
|
initialVersionMap[name] = newState.version;
|
|
@@ -428,19 +503,37 @@ export const makeChatsSocket = (config) => {
|
|
|
428
503
|
}
|
|
429
504
|
}
|
|
430
505
|
catch (error) {
|
|
431
|
-
// if retry attempts overshoot
|
|
432
|
-
// or key not found
|
|
433
|
-
const isIrrecoverableError = attemptsMap[name] >= MAX_SYNC_ATTEMPTS ||
|
|
434
|
-
error.output?.statusCode === 404 ||
|
|
435
|
-
error.name === 'TypeError';
|
|
436
|
-
logger.info({ name, error: error.stack }, `failed to sync state from version${isIrrecoverableError ? '' : ', removing and trying from scratch'}`);
|
|
437
|
-
await authState.keys.set({ 'app-state-sync-version': { [name]: null } });
|
|
438
|
-
// increment number of retries
|
|
439
506
|
attemptsMap[name] = (attemptsMap[name] || 0) + 1;
|
|
440
|
-
|
|
441
|
-
|
|
507
|
+
const logData = {
|
|
508
|
+
name,
|
|
509
|
+
attempt: attemptsMap[name],
|
|
510
|
+
version: states[name].version,
|
|
511
|
+
statusCode: error.output?.statusCode,
|
|
512
|
+
errorType: error.name,
|
|
513
|
+
error: error.stack
|
|
514
|
+
};
|
|
515
|
+
if (isMissingKeyError(error) && attemptsMap[name] >= MAX_SYNC_ATTEMPTS) {
|
|
516
|
+
// WA Web treats missing keys as "Blocked" — park the collection
|
|
517
|
+
// until the key arrives via APP_STATE_SYNC_KEY_SHARE.
|
|
518
|
+
logger.warn(logData, `${name} blocked on missing key from v${states[name].version}, parking after ${attemptsMap[name]} attempts`);
|
|
519
|
+
blockedCollections.add(name);
|
|
520
|
+
collectionsToHandle.delete(name);
|
|
521
|
+
}
|
|
522
|
+
else if (isMissingKeyError(error)) {
|
|
523
|
+
// Retry with a snapshot which may use a different key.
|
|
524
|
+
logger.info(logData, `${name} blocked on missing key from v${states[name].version}, retrying with snapshot`);
|
|
525
|
+
forceSnapshotCollections.add(name);
|
|
526
|
+
}
|
|
527
|
+
else if (isAppStateSyncIrrecoverable(error, attemptsMap[name])) {
|
|
528
|
+
logger.warn(logData, `failed to sync ${name} from v${states[name].version}, giving up`);
|
|
442
529
|
collectionsToHandle.delete(name);
|
|
443
530
|
}
|
|
531
|
+
else {
|
|
532
|
+
logger.info(logData, `failed to sync ${name} from v${states[name].version}, forcing snapshot retry`);
|
|
533
|
+
// force a full snapshot on retry to recover from
|
|
534
|
+
// corrupted local state (e.g. LTHash MAC mismatch)
|
|
535
|
+
forceSnapshotCollections.add(name);
|
|
536
|
+
}
|
|
444
537
|
}
|
|
445
538
|
}
|
|
446
539
|
}
|
|
@@ -456,7 +549,23 @@ export const makeChatsSocket = (config) => {
|
|
|
456
549
|
* type = "image for the high res picture"
|
|
457
550
|
*/
|
|
458
551
|
const profilePictureUrl = async (jid, type = 'preview', timeoutMs) => {
|
|
459
|
-
|
|
552
|
+
const baseContent = [{ tag: 'picture', attrs: { type, query: 'url' } }];
|
|
553
|
+
// WA Web only includes tctoken for user JIDs (not groups/newsletters)
|
|
554
|
+
// and never for own profile pic (Chat model for self has no tcToken).
|
|
555
|
+
// Including tctoken for own JID causes the server to never respond.
|
|
556
|
+
const normalizedJid = jidNormalizedUser(jid);
|
|
557
|
+
const isUserJid = isPnUser(normalizedJid) || isLidUser(normalizedJid);
|
|
558
|
+
const me = authState.creds.me;
|
|
559
|
+
const isSelf = me && (normalizedJid === jidNormalizedUser(me.id) || (me.lid && normalizedJid === jidNormalizedUser(me.lid)));
|
|
560
|
+
let content = baseContent;
|
|
561
|
+
if (serverProps.profilePicPrivacyToken && isUserJid && !isSelf) {
|
|
562
|
+
content = await buildTcTokenFromJid({
|
|
563
|
+
authState,
|
|
564
|
+
jid: normalizedJid,
|
|
565
|
+
baseContent,
|
|
566
|
+
getLIDForPN
|
|
567
|
+
});
|
|
568
|
+
}
|
|
460
569
|
jid = jidNormalizedUser(jid);
|
|
461
570
|
const result = await query({
|
|
462
571
|
tag: 'iq',
|
|
@@ -466,7 +575,7 @@ export const makeChatsSocket = (config) => {
|
|
|
466
575
|
type: 'get',
|
|
467
576
|
xmlns: 'w:profile:picture'
|
|
468
577
|
},
|
|
469
|
-
content
|
|
578
|
+
content
|
|
470
579
|
}, timeoutMs);
|
|
471
580
|
const child = getBinaryNodeChild(result, 'picture');
|
|
472
581
|
return child?.attrs?.url;
|
|
@@ -491,12 +600,16 @@ export const makeChatsSocket = (config) => {
|
|
|
491
600
|
};
|
|
492
601
|
const sendPresenceUpdate = async (type, toJid) => {
|
|
493
602
|
const me = authState.creds.me;
|
|
494
|
-
|
|
603
|
+
const isAvailableType = type === 'available';
|
|
604
|
+
if (isAvailableType || type === 'unavailable') {
|
|
495
605
|
if (!me.name) {
|
|
496
606
|
logger.warn('no name present, ignoring presence update request...');
|
|
497
607
|
return;
|
|
498
608
|
}
|
|
499
|
-
ev.emit('connection.update', { isOnline:
|
|
609
|
+
ev.emit('connection.update', { isOnline: isAvailableType });
|
|
610
|
+
if (isAvailableType) {
|
|
611
|
+
void sendUnifiedSession();
|
|
612
|
+
}
|
|
500
613
|
await sendNode({
|
|
501
614
|
tag: 'presence',
|
|
502
615
|
attrs: {
|
|
@@ -527,23 +640,23 @@ export const makeChatsSocket = (config) => {
|
|
|
527
640
|
* @param toJid the jid to subscribe to
|
|
528
641
|
* @param tcToken token for subscription, use if present
|
|
529
642
|
*/
|
|
530
|
-
const presenceSubscribe = (toJid
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
}
|
|
643
|
+
const presenceSubscribe = async (toJid) => {
|
|
644
|
+
// Only include tctoken for user JIDs — groups/newsletters don't use tctokens
|
|
645
|
+
const normalizedToJid = jidNormalizedUser(toJid);
|
|
646
|
+
const isUserJid = isPnUser(normalizedToJid) || isLidUser(normalizedToJid);
|
|
647
|
+
const tcTokenContent = isUserJid
|
|
648
|
+
? await buildTcTokenFromJid({ authState, jid: normalizedToJid, getLIDForPN })
|
|
649
|
+
: undefined;
|
|
650
|
+
return sendNode({
|
|
651
|
+
tag: 'presence',
|
|
652
|
+
attrs: {
|
|
653
|
+
to: toJid,
|
|
654
|
+
id: generateMessageTag(),
|
|
655
|
+
type: 'subscribe'
|
|
656
|
+
},
|
|
657
|
+
content: tcTokenContent
|
|
658
|
+
});
|
|
659
|
+
};
|
|
547
660
|
const handlePresenceUpdate = ({ tag, attrs, content }) => {
|
|
548
661
|
let presence;
|
|
549
662
|
const jid = attrs.from;
|
|
@@ -583,12 +696,12 @@ export const makeChatsSocket = (config) => {
|
|
|
583
696
|
}
|
|
584
697
|
let initial;
|
|
585
698
|
let encodeResult;
|
|
586
|
-
await
|
|
699
|
+
await appStatePatchMutex.mutex(async () => {
|
|
587
700
|
await authState.keys.transaction(async () => {
|
|
588
701
|
logger.debug({ patch: patchCreate }, 'applying app patch');
|
|
589
702
|
await resyncAppState([name], false);
|
|
590
703
|
const { [name]: currentSyncVersion } = await authState.keys.get('app-state-sync-version', [name]);
|
|
591
|
-
initial = currentSyncVersion
|
|
704
|
+
initial = currentSyncVersion ? ensureLTHashStateVersion(currentSyncVersion) : newLTHashState();
|
|
592
705
|
encodeResult = await encodeSyncdPatch(patchCreate, myAppStateKeyId, initial, getAppStateSyncKey);
|
|
593
706
|
const { patch, state } = encodeResult;
|
|
594
707
|
const node = {
|
|
@@ -634,22 +747,21 @@ export const makeChatsSocket = (config) => {
|
|
|
634
747
|
}
|
|
635
748
|
}
|
|
636
749
|
};
|
|
637
|
-
/**
|
|
750
|
+
/** fetch AB props */
|
|
638
751
|
const fetchProps = async () => {
|
|
639
|
-
//TODO: implement both protocol 1 and protocol 2 prop fetching, specially for abKey for WM
|
|
640
752
|
const resultNode = await query({
|
|
641
753
|
tag: 'iq',
|
|
642
754
|
attrs: {
|
|
643
755
|
to: S_WHATSAPP_NET,
|
|
644
|
-
xmlns: '
|
|
756
|
+
xmlns: 'abt',
|
|
645
757
|
type: 'get'
|
|
646
758
|
},
|
|
647
759
|
content: [
|
|
648
760
|
{
|
|
649
761
|
tag: 'props',
|
|
650
762
|
attrs: {
|
|
651
|
-
protocol: '
|
|
652
|
-
hash: authState
|
|
763
|
+
protocol: '1',
|
|
764
|
+
...(authState?.creds?.lastPropHash ? { hash: authState.creds.lastPropHash } : {})
|
|
653
765
|
}
|
|
654
766
|
}
|
|
655
767
|
]
|
|
@@ -664,7 +776,20 @@ export const makeChatsSocket = (config) => {
|
|
|
664
776
|
}
|
|
665
777
|
props = reduceBinaryNodeToDictionary(propsNode, 'prop');
|
|
666
778
|
}
|
|
667
|
-
|
|
779
|
+
// Extract protocol-relevant AB props (only the ones we need)
|
|
780
|
+
const privacyTokenProp = props['10518'] ?? props['privacy_token_sending_on_all_1_on_1_messages'];
|
|
781
|
+
if (privacyTokenProp !== undefined) {
|
|
782
|
+
serverProps.privacyTokenOn1to1 = privacyTokenProp === 'true' || privacyTokenProp === '1';
|
|
783
|
+
}
|
|
784
|
+
const profilePicProp = props['9666'] ?? props['profile_scraping_privacy_token_in_photo_iq'];
|
|
785
|
+
if (profilePicProp !== undefined) {
|
|
786
|
+
serverProps.profilePicPrivacyToken = profilePicProp === 'true' || profilePicProp === '1';
|
|
787
|
+
}
|
|
788
|
+
const lidIssueProp = props['14303'] ?? props['lid_trusted_token_issue_to_lid'];
|
|
789
|
+
if (lidIssueProp !== undefined) {
|
|
790
|
+
serverProps.lidTrustedTokenIssueToLid = lidIssueProp === 'true' || lidIssueProp === '1';
|
|
791
|
+
}
|
|
792
|
+
logger.debug({ serverProps }, 'fetched props');
|
|
668
793
|
return props;
|
|
669
794
|
};
|
|
670
795
|
/**
|
|
@@ -804,6 +929,47 @@ export const makeChatsSocket = (config) => {
|
|
|
804
929
|
? shouldSyncHistoryMessage(historyMsg) &&
|
|
805
930
|
PROCESSABLE_HISTORY_TYPES.includes(historyMsg.syncType)
|
|
806
931
|
: false;
|
|
932
|
+
if (historyMsg && shouldProcessHistoryMsg) {
|
|
933
|
+
const syncType = historyMsg.syncType;
|
|
934
|
+
// INITIAL_BOOTSTRAP — fire immediately, no progress check (same as WA Web K function)
|
|
935
|
+
if (syncType === proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP &&
|
|
936
|
+
!historySyncStatus.initialBootstrapComplete) {
|
|
937
|
+
historySyncStatus.initialBootstrapComplete = true;
|
|
938
|
+
ev.emit('messaging-history.status', {
|
|
939
|
+
syncType,
|
|
940
|
+
status: 'complete',
|
|
941
|
+
explicit: true
|
|
942
|
+
});
|
|
943
|
+
}
|
|
944
|
+
// RECENT with progress === 100 — explicit completion
|
|
945
|
+
if (syncType === proto.HistorySync.HistorySyncType.RECENT &&
|
|
946
|
+
historyMsg.progress === 100 &&
|
|
947
|
+
!historySyncStatus.recentSyncComplete) {
|
|
948
|
+
historySyncStatus.recentSyncComplete = true;
|
|
949
|
+
clearTimeout(historySyncPausedTimeout);
|
|
950
|
+
historySyncPausedTimeout = undefined;
|
|
951
|
+
ev.emit('messaging-history.status', {
|
|
952
|
+
syncType,
|
|
953
|
+
status: 'complete',
|
|
954
|
+
explicit: true
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
// Reset 120s paused timeout on any RECENT chunk (like WA Web's handleChunkProgress)
|
|
958
|
+
if (syncType === proto.HistorySync.HistorySyncType.RECENT && !historySyncStatus.recentSyncComplete) {
|
|
959
|
+
clearTimeout(historySyncPausedTimeout);
|
|
960
|
+
historySyncPausedTimeout = setTimeout(() => {
|
|
961
|
+
if (!historySyncStatus.recentSyncComplete) {
|
|
962
|
+
historySyncStatus.recentSyncComplete = true;
|
|
963
|
+
ev.emit('messaging-history.status', {
|
|
964
|
+
syncType: proto.HistorySync.HistorySyncType.RECENT,
|
|
965
|
+
status: 'paused',
|
|
966
|
+
explicit: false
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
historySyncPausedTimeout = undefined;
|
|
970
|
+
}, HISTORY_SYNC_PAUSED_TIMEOUT_MS);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
807
973
|
// State machine: decide on sync and flush
|
|
808
974
|
if (historyMsg && syncState === SyncState.AwaitingInitialSync) {
|
|
809
975
|
if (awaitingSyncTimeout) {
|
|
@@ -823,6 +989,8 @@ export const makeChatsSocket = (config) => {
|
|
|
823
989
|
}
|
|
824
990
|
const doAppStateSync = async () => {
|
|
825
991
|
if (syncState === SyncState.Syncing) {
|
|
992
|
+
// All collections will be synced, so clear any blocked ones
|
|
993
|
+
blockedCollections.clear();
|
|
826
994
|
logger.info('Doing app state sync');
|
|
827
995
|
await resyncAppState(ALL_WA_PATCH_NAMES, true);
|
|
828
996
|
// Sync is complete, go online and flush everything
|
|
@@ -882,6 +1050,11 @@ export const makeChatsSocket = (config) => {
|
|
|
882
1050
|
}
|
|
883
1051
|
});
|
|
884
1052
|
ev.on('connection.update', ({ connection, receivedPendingNotifications }) => {
|
|
1053
|
+
if (connection === 'close') {
|
|
1054
|
+
blockedCollections.clear();
|
|
1055
|
+
clearTimeout(historySyncPausedTimeout);
|
|
1056
|
+
historySyncPausedTimeout = undefined;
|
|
1057
|
+
}
|
|
885
1058
|
if (connection === 'open') {
|
|
886
1059
|
if (fireInitQueries) {
|
|
887
1060
|
executeInitQueries().catch(error => onUnexpectedError(error, 'init queries'));
|
|
@@ -891,6 +1064,10 @@ export const makeChatsSocket = (config) => {
|
|
|
891
1064
|
if (!receivedPendingNotifications || syncState !== SyncState.Connecting) {
|
|
892
1065
|
return;
|
|
893
1066
|
}
|
|
1067
|
+
historySyncStatus.initialBootstrapComplete = false;
|
|
1068
|
+
historySyncStatus.recentSyncComplete = false;
|
|
1069
|
+
clearTimeout(historySyncPausedTimeout);
|
|
1070
|
+
historySyncPausedTimeout = undefined;
|
|
894
1071
|
syncState = SyncState.AwaitingInitialSync;
|
|
895
1072
|
logger.info('Connection is now AwaitingInitialSync, buffering events');
|
|
896
1073
|
ev.buffer();
|
|
@@ -903,24 +1080,66 @@ export const makeChatsSocket = (config) => {
|
|
|
903
1080
|
setTimeout(() => ev.flush(), 0);
|
|
904
1081
|
return;
|
|
905
1082
|
}
|
|
906
|
-
|
|
1083
|
+
// On reconnection (accountSyncCounter > 0), the server does not push
|
|
1084
|
+
// history sync notifications — the device already has its data.
|
|
1085
|
+
// Skip the 20s wait and go online immediately.
|
|
1086
|
+
if (authState.creds.accountSyncCounter > 0) {
|
|
1087
|
+
logger.info('Reconnection with existing sync data, skipping history sync wait. Transitioning to Online.');
|
|
1088
|
+
syncState = SyncState.Online;
|
|
1089
|
+
setTimeout(() => ev.flush(), 0);
|
|
1090
|
+
return;
|
|
1091
|
+
}
|
|
1092
|
+
logger.info('First connection, awaiting history sync notification with a 20s timeout.');
|
|
907
1093
|
if (awaitingSyncTimeout) {
|
|
908
1094
|
clearTimeout(awaitingSyncTimeout);
|
|
909
1095
|
}
|
|
910
1096
|
awaitingSyncTimeout = setTimeout(() => {
|
|
911
1097
|
if (syncState === SyncState.AwaitingInitialSync) {
|
|
912
|
-
// TODO: investigate
|
|
913
1098
|
logger.warn('Timeout in AwaitingInitialSync, forcing state to Online and flushing buffer');
|
|
914
1099
|
syncState = SyncState.Online;
|
|
915
1100
|
ev.flush();
|
|
1101
|
+
// Increment so subsequent reconnections skip the 20s wait.
|
|
1102
|
+
// Late-arriving history is still processed via processMessage
|
|
1103
|
+
// regardless of the state machine phase.
|
|
1104
|
+
const accountSyncCounter = (authState.creds.accountSyncCounter || 0) + 1;
|
|
1105
|
+
ev.emit('creds.update', { accountSyncCounter });
|
|
916
1106
|
}
|
|
917
1107
|
}, 20000);
|
|
918
1108
|
});
|
|
1109
|
+
// When an app state sync key arrives (myAppStateKeyId is set) and there are
|
|
1110
|
+
// collections blocked on a missing key, trigger a re-sync for just those collections.
|
|
1111
|
+
// This mirrors WA Web's Blocked → retry-on-key-arrival behavior.
|
|
1112
|
+
ev.on('creds.update', ({ myAppStateKeyId }) => {
|
|
1113
|
+
if (!myAppStateKeyId || blockedCollections.size === 0) {
|
|
1114
|
+
return;
|
|
1115
|
+
}
|
|
1116
|
+
// If we're in the middle of a full sync, doAppStateSync handles all collections
|
|
1117
|
+
if (syncState === SyncState.Syncing) {
|
|
1118
|
+
blockedCollections.clear();
|
|
1119
|
+
return;
|
|
1120
|
+
}
|
|
1121
|
+
const collections = [...blockedCollections];
|
|
1122
|
+
blockedCollections.clear();
|
|
1123
|
+
logger.info({ collections }, 'app state sync key arrived, re-syncing blocked collections');
|
|
1124
|
+
resyncAppState(collections, false).catch(error => onUnexpectedError(error, 'blocked collections resync'));
|
|
1125
|
+
});
|
|
1126
|
+
ev.on('lid-mapping.update', async ({ lid, pn }) => {
|
|
1127
|
+
try {
|
|
1128
|
+
await signalRepository.lidMapping.storeLIDPNMappings([{ lid, pn }]);
|
|
1129
|
+
}
|
|
1130
|
+
catch (error) {
|
|
1131
|
+
logger.warn({ lid, pn, error }, 'Failed to store LID-PN mapping');
|
|
1132
|
+
}
|
|
1133
|
+
});
|
|
919
1134
|
return {
|
|
920
1135
|
...sock,
|
|
1136
|
+
serverProps,
|
|
921
1137
|
createCallLink,
|
|
922
1138
|
getBotListV2,
|
|
923
|
-
|
|
1139
|
+
messageMutex,
|
|
1140
|
+
receiptMutex,
|
|
1141
|
+
appStatePatchMutex,
|
|
1142
|
+
notificationMutex,
|
|
924
1143
|
fetchPrivacySettings,
|
|
925
1144
|
upsertMessage,
|
|
926
1145
|
appPatch,
|