@badzz88/baileys 8.4.6 → 8.4.9
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/LICENSE +21 -0
- package/README.md +1055 -337
- package/WAProto/WAProto.proto +850 -32
- package/WAProto/index.d.ts +4913 -25
- package/WAProto/index.js +14074 -98
- package/package.json +96 -131
- package/src/Defaults/index.js +201 -0
- package/src/Defaults/phonenumber-mcc.json +223 -0
- package/src/Signal/Group/ciphertext-message.js +15 -0
- package/src/Signal/Group/group-session-builder.js +92 -0
- package/src/Signal/Group/group_cipher.js +89 -0
- package/src/Signal/Group/index.js +136 -0
- package/src/Signal/Group/keyhelper.js +73 -0
- package/src/Signal/Group/sender-chain-key.js +32 -0
- package/src/Signal/Group/sender-key-distribution-message.js +66 -0
- package/src/Signal/Group/sender-key-message.js +69 -0
- package/src/Signal/Group/sender-key-name.js +50 -0
- package/src/Signal/Group/sender-key-record.js +44 -0
- package/src/Signal/Group/sender-key-state.js +97 -0
- package/src/Signal/Group/sender-message-key.js +30 -0
- package/src/Signal/libsignal.js +470 -0
- package/src/Signal/lid-mapping.js +262 -0
- package/src/Socket/Client/index.js +30 -0
- package/src/Socket/Client/types.js +13 -0
- package/src/Socket/Client/websocket.js +62 -0
- package/src/Socket/aigroups.js +240 -0
- package/src/Socket/business.js +422 -0
- package/src/Socket/chats.js +2374 -0
- package/src/Socket/communities.js +580 -0
- package/src/Socket/graphql.js +915 -0
- package/src/Socket/groups.js +812 -0
- package/src/Socket/index.js +37 -0
- package/src/Socket/interactive-handler.js +579 -0
- package/src/Socket/interop.js +566 -0
- package/src/Socket/managed-account.js +214 -0
- package/src/Socket/messages-recv.js +3012 -0
- package/src/Socket/messages-send.js +2163 -0
- package/{lib → src}/Socket/mex.js +11 -5
- package/src/Socket/newsletter.js +1057 -0
- package/src/Socket/privacy.js +452 -0
- package/src/Socket/registration.js +434 -0
- package/src/Socket/socket.js +1079 -0
- package/src/Socket/text-router.js +67 -0
- package/src/Socket/username.js +234 -0
- package/src/Store/index.js +36 -0
- package/src/Store/make-cache-manager-store.js +90 -0
- package/src/Store/make-in-memory-store.js +506 -0
- package/src/Store/make-ordered-dictionary.js +81 -0
- package/src/Store/object-repository.js +29 -0
- package/src/Types/Auth.js +38 -0
- package/src/Types/Bussines.js +2 -0
- package/src/Types/Call.js +2 -0
- package/src/Types/Chat.js +4 -0
- package/src/Types/Contact.js +2 -0
- package/src/Types/Events.js +2 -0
- package/src/Types/GroupMetadata.js +2 -0
- package/src/Types/Label.js +27 -0
- package/src/Types/LabelAssociation.js +9 -0
- package/src/Types/Message.js +95 -0
- package/src/Types/Newsletter.js +152 -0
- package/src/Types/Product.js +2 -0
- package/src/Types/Signal.js +2 -0
- package/src/Types/Socket.js +2 -0
- package/src/Types/State.js +70 -0
- package/src/Types/USync.js +2 -0
- package/src/Types/index.js +54 -0
- package/src/Utils/auth-utils.js +306 -0
- package/src/Utils/browser-utils.js +114 -0
- package/src/Utils/business.js +247 -0
- package/src/Utils/chat-utils.js +1272 -0
- package/src/Utils/consumer-application.js +107 -0
- package/src/Utils/crypto.js +125 -0
- package/src/Utils/decode-wa-message.js +808 -0
- package/src/Utils/event-buffer.js +586 -0
- package/src/Utils/generics.js +640 -0
- package/src/Utils/group-history.js +60 -0
- package/src/Utils/history.js +244 -0
- package/src/Utils/identity-change-handler.js +52 -0
- package/src/Utils/index.js +53 -0
- package/src/Utils/jid-display-normalization.js +218 -0
- package/src/Utils/link-preview.js +143 -0
- package/src/Utils/logger.js +9 -0
- package/src/Utils/lt-hash.js +10 -0
- package/src/Utils/make-mutex.js +36 -0
- package/src/Utils/message-composer.js +479 -0
- package/src/Utils/message-inspect.js +400 -0
- package/src/Utils/message-retry-manager.js +231 -0
- package/src/Utils/messages-media.js +943 -0
- package/src/Utils/messages.js +2490 -0
- package/src/Utils/meta-ai-msmsg.js +133 -0
- package/src/Utils/noise-handler.js +194 -0
- package/src/Utils/offline-node-processor.js +42 -0
- package/src/Utils/pre-key-manager.js +107 -0
- package/src/Utils/process-message.js +1047 -0
- package/src/Utils/reporting-utils.js +262 -0
- package/src/Utils/signal.js +192 -0
- package/src/Utils/stanza-ack.js +74 -0
- package/src/Utils/sync-action-utils.js +54 -0
- package/src/Utils/tc-token-utils.js +161 -0
- package/src/Utils/use-multi-file-auth-state.js +121 -0
- package/src/Utils/validate-connection.js +248 -0
- package/src/Utils/voip-rekey.js +22 -0
- package/src/WABinary/constants.js +1304 -0
- package/src/WABinary/decode.js +377 -0
- package/src/WABinary/encode.js +58 -0
- package/src/WABinary/generic-utils.js +148 -0
- package/src/WABinary/index.js +33 -0
- package/src/WABinary/jid-utils.js +374 -0
- package/src/WABinary/types.js +2 -0
- package/src/WAM/BinaryInfo.js +13 -0
- package/src/WAM/constants.js +39486 -0
- package/src/WAM/encode.js +142 -0
- package/src/WAM/index.js +31 -0
- package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +55 -0
- package/src/WAUSync/Protocols/USyncBusinessProtocol.js +100 -0
- package/src/WAUSync/Protocols/USyncContactProtocol.js +60 -0
- package/src/WAUSync/Protocols/USyncDeviceProtocol.js +65 -0
- package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
- package/src/WAUSync/Protocols/USyncFeatureProtocol.js +74 -0
- package/src/WAUSync/Protocols/USyncLIDProtocol.js +31 -0
- package/src/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
- package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
- package/src/WAUSync/Protocols/USyncStatusProtocol.js +44 -0
- package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
- package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
- package/src/WAUSync/Protocols/index.js +40 -0
- package/src/WAUSync/USyncBackoff.js +31 -0
- package/src/WAUSync/USyncQuery.js +204 -0
- package/src/WAUSync/USyncUser.js +58 -0
- package/src/WAUSync/index.js +32 -0
- package/src/antiban.js +4726 -0
- package/{lib → src}/index.js +48 -16
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/index.js +0 -137
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/Protocols.js +0 -269
- package/lib/Signal/Group/ciphertext-message.js +0 -12
- package/lib/Signal/Group/group-session-builder.js +0 -30
- package/lib/Signal/Group/group_cipher.js +0 -82
- package/lib/Signal/Group/index.js +0 -12
- package/lib/Signal/Group/keyhelper.js +0 -18
- package/lib/Signal/Group/queue-job.js +0 -57
- package/lib/Signal/Group/sender-chain-key.js +0 -26
- package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
- package/lib/Signal/Group/sender-key-message.js +0 -66
- package/lib/Signal/Group/sender-key-name.js +0 -48
- package/lib/Signal/Group/sender-key-record.js +0 -41
- package/lib/Signal/Group/sender-key-state.js +0 -84
- package/lib/Signal/Group/sender-message-key.js +0 -26
- package/lib/Signal/libsignal.js +0 -432
- package/lib/Signal/lid-mapping.js +0 -277
- package/lib/Socket/Client/abstract-socket-client.js +0 -13
- package/lib/Socket/Client/index.js +0 -3
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/types.js +0 -11
- package/lib/Socket/Client/web-socket-client.js +0 -62
- package/lib/Socket/Client/websocket.js +0 -54
- package/lib/Socket/business.js +0 -379
- package/lib/Socket/chats.js +0 -1193
- package/lib/Socket/communities.js +0 -431
- package/lib/Socket/community.js +0 -392
- package/lib/Socket/dugong.js +0 -637
- package/lib/Socket/groups.js +0 -374
- package/lib/Socket/index.js +0 -12
- package/lib/Socket/luxu.js +0 -387
- package/lib/Socket/messages-recv.js +0 -1916
- package/lib/Socket/messages-send.js +0 -1459
- package/lib/Socket/newsletter.js +0 -253
- package/lib/Socket/registration.js +0 -167
- package/lib/Socket/socket.js +0 -950
- package/lib/Socket/username.js +0 -146
- package/lib/Socket/usync.js +0 -69
- package/lib/Store/index.js +0 -10
- package/lib/Store/keyed-db.js +0 -108
- package/lib/Store/make-cache-manager-store.js +0 -85
- package/lib/Store/make-in-memory-store.js +0 -198
- package/lib/Store/make-ordered-dictionary.js +0 -75
- package/lib/Store/object-repository.js +0 -32
- package/lib/Types/Auth.js +0 -2
- package/lib/Types/Bussines.js +0 -2
- package/lib/Types/Call.js +0 -2
- package/lib/Types/Chat.js +0 -8
- package/lib/Types/Contact.js +0 -2
- package/lib/Types/Events.js +0 -2
- package/lib/Types/GroupMetadata.js +0 -2
- package/lib/Types/Label.js +0 -25
- package/lib/Types/LabelAssociation.js +0 -7
- package/lib/Types/Message.js +0 -11
- package/lib/Types/Mex.js +0 -37
- package/lib/Types/Newsletter.js +0 -38
- package/lib/Types/Product.js +0 -2
- package/lib/Types/Signal.js +0 -2
- package/lib/Types/Socket.js +0 -3
- package/lib/Types/State.js +0 -56
- package/lib/Types/USync.js +0 -2
- package/lib/Types/index.js +0 -26
- package/lib/Utils/auth-utils.js +0 -302
- package/lib/Utils/baileys-event-stream.js +0 -63
- package/lib/Utils/browser-utils.js +0 -48
- package/lib/Utils/business.js +0 -231
- package/lib/Utils/chat-utils.js +0 -873
- package/lib/Utils/companion-reg-client-utils.js +0 -35
- package/lib/Utils/crypto.js +0 -118
- package/lib/Utils/decode-wa-message.js +0 -350
- package/lib/Utils/event-buffer.js +0 -622
- package/lib/Utils/generics.js +0 -399
- package/lib/Utils/history.js +0 -134
- package/lib/Utils/identity-change-handler.js +0 -50
- package/lib/Utils/index.js +0 -23
- package/lib/Utils/link-preview.js +0 -85
- package/lib/Utils/logger.js +0 -3
- package/lib/Utils/lt-hash.js +0 -8
- package/lib/Utils/make-mutex.js +0 -33
- package/lib/Utils/message-composer.js +0 -273
- package/lib/Utils/message-retry-manager.js +0 -265
- package/lib/Utils/messages-media.js +0 -788
- package/lib/Utils/messages.js +0 -1260
- package/lib/Utils/noise-handler.js +0 -201
- package/lib/Utils/offline-node-processor.js +0 -40
- package/lib/Utils/pre-key-manager.js +0 -106
- package/lib/Utils/process-message.js +0 -630
- package/lib/Utils/reporting-utils.js +0 -258
- package/lib/Utils/signal.js +0 -202
- package/lib/Utils/stanza-ack.js +0 -38
- package/lib/Utils/sync-action-utils.js +0 -49
- package/lib/Utils/tc-token-utils.js +0 -163
- package/lib/Utils/use-multi-file-auth-state.js +0 -121
- package/lib/Utils/validate-connection.js +0 -204
- package/lib/WABinary/constants.js +0 -1301
- package/lib/WABinary/decode.js +0 -262
- package/lib/WABinary/encode.js +0 -220
- package/lib/WABinary/generic-utils.js +0 -204
- package/lib/WABinary/index.js +0 -6
- package/lib/WABinary/jid-utils.js +0 -98
- package/lib/WABinary/types.js +0 -2
- package/lib/WAM/BinaryInfo.js +0 -10
- package/lib/WAM/constants.js +0 -22853
- package/lib/WAM/encode.js +0 -150
- package/lib/WAM/index.js +0 -4
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -52
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -54
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -38
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
- package/lib/WAUSync/Protocols/index.js +0 -6
- package/lib/WAUSync/USyncQuery.js +0 -98
- package/lib/WAUSync/USyncUser.js +0 -31
- package/lib/WAUSync/index.js +0 -4
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
+
exports.USyncTextStatusProtocol = void 0
|
|
4
|
+
const WABinary_1 = require('../../WABinary')
|
|
5
|
+
class USyncTextStatusProtocol {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'text_status'
|
|
8
|
+
}
|
|
9
|
+
getQueryElement() {
|
|
10
|
+
return {
|
|
11
|
+
tag: 'text_status',
|
|
12
|
+
attrs: {}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
getUserElement() {
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
parser(node) {
|
|
19
|
+
if (node.tag !== 'text_status') return null
|
|
20
|
+
;(0, WABinary_1.assertNodeErrorFree)(node)
|
|
21
|
+
const lastUpdateTimeSec = node.attrs?.last_update_time ? +node.attrs.last_update_time : 0
|
|
22
|
+
const ephemeralDurationSec = node.attrs?.ephemeral_duration_sec ? +node.attrs.ephemeral_duration_sec : 0
|
|
23
|
+
const text = node.attrs?.text ?? null
|
|
24
|
+
const emojiNode = (0, WABinary_1.getBinaryNodeChild)(node, 'emoji')
|
|
25
|
+
const emoji = emojiNode?.attrs?.content ?? null
|
|
26
|
+
// expiry is lastUpdateTime + ephemeralDuration (both in ms); 0 means no expiry
|
|
27
|
+
const expiresAt = ephemeralDurationSec > 0
|
|
28
|
+
? new Date((lastUpdateTimeSec + ephemeralDurationSec) * 1000)
|
|
29
|
+
: null
|
|
30
|
+
return {
|
|
31
|
+
text,
|
|
32
|
+
emoji,
|
|
33
|
+
setAt: new Date(lastUpdateTimeSec * 1000),
|
|
34
|
+
expiresAt
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.USyncTextStatusProtocol = USyncTextStatusProtocol
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
+
exports.USyncUsernameProtocol = void 0
|
|
4
|
+
const WABinary_1 = require('../../WABinary')
|
|
5
|
+
class USyncUsernameProtocol {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'username'
|
|
8
|
+
}
|
|
9
|
+
getQueryElement() {
|
|
10
|
+
return {
|
|
11
|
+
tag: 'username',
|
|
12
|
+
attrs: {}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
getUserElement(user) {
|
|
16
|
+
void user
|
|
17
|
+
return null
|
|
18
|
+
}
|
|
19
|
+
parser(node) {
|
|
20
|
+
if (node.tag === 'username') {
|
|
21
|
+
;(0, WABinary_1.assertNodeErrorFree)(node)
|
|
22
|
+
const username = node.content != null ? node.content.toString() : null
|
|
23
|
+
return username && username.length > 0 ? username : null
|
|
24
|
+
}
|
|
25
|
+
return null
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.USyncUsernameProtocol = USyncUsernameProtocol
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
var __createBinding =
|
|
3
|
+
(this && this.__createBinding) ||
|
|
4
|
+
(Object.create
|
|
5
|
+
? function (o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k)
|
|
8
|
+
if (!desc || ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return m[k]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc)
|
|
17
|
+
}
|
|
18
|
+
: function (o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k
|
|
20
|
+
o[k2] = m[k]
|
|
21
|
+
})
|
|
22
|
+
var __exportStar =
|
|
23
|
+
(this && this.__exportStar) ||
|
|
24
|
+
function (m, exports) {
|
|
25
|
+
for (var p in m)
|
|
26
|
+
if (p !== 'default' && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p)
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
29
|
+
__exportStar(require('./USyncDeviceProtocol'), exports)
|
|
30
|
+
__exportStar(require('./USyncContactProtocol'), exports)
|
|
31
|
+
__exportStar(require('./USyncStatusProtocol'), exports)
|
|
32
|
+
__exportStar(require('./USyncDisappearingModeProtocol'), exports)
|
|
33
|
+
__exportStar(require('./USyncUsernameProtocol'), exports)
|
|
34
|
+
__exportStar(require('./USyncBotProfileProtocol'), exports)
|
|
35
|
+
__exportStar(require('./USyncBusinessProtocol'), exports)
|
|
36
|
+
__exportStar(require('./USyncPictureProtocol'), exports)
|
|
37
|
+
__exportStar(require('./USyncTextStatusProtocol'), exports)
|
|
38
|
+
__exportStar(require('./USyncLIDProtocol'), exports)
|
|
39
|
+
__exportStar(require('./USyncSidelistProtocol'), exports)
|
|
40
|
+
__exportStar(require('./USyncFeatureProtocol'), exports)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
+
exports.waitForBackoff = exports.setProtocolBackoffMs = void 0
|
|
4
|
+
|
|
5
|
+
// Per-protocol backoff state, ported from WhatsApp Web's WAWebUsyncBackoff.
|
|
6
|
+
// A server-reported error on a usync protocol (e.g. "devices") can carry a
|
|
7
|
+
// backoff (seconds); subsequent usync queries touching that protocol should
|
|
8
|
+
// wait it out before firing, except time-critical device lookups made while
|
|
9
|
+
// sending a message or placing a call.
|
|
10
|
+
const backoffPromises = new Map()
|
|
11
|
+
|
|
12
|
+
const setProtocolBackoffMs = (protocolName, ms) => {
|
|
13
|
+
backoffPromises.set(protocolName, new Promise(resolve => setTimeout(resolve, ms)))
|
|
14
|
+
}
|
|
15
|
+
exports.setProtocolBackoffMs = setProtocolBackoffMs
|
|
16
|
+
|
|
17
|
+
const shouldWaitForBackoff = query => {
|
|
18
|
+
if (query.context === 'interactive') {
|
|
19
|
+
return false
|
|
20
|
+
}
|
|
21
|
+
const protocolNames = query.protocols.map(p => p.name)
|
|
22
|
+
return !(protocolNames.includes('devices') && (query.context === 'message' || query.context === 'voip'))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const waitForBackoff = async query => {
|
|
26
|
+
if (!shouldWaitForBackoff(query)) {
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
await Promise.all(query.protocols.map(p => backoffPromises.get(p.name)))
|
|
30
|
+
}
|
|
31
|
+
exports.waitForBackoff = waitForBackoff
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
+
exports.USyncQuery = void 0
|
|
4
|
+
const WABinary_1 = require('../WABinary')
|
|
5
|
+
const USyncBotProfileProtocol_1 = require('./Protocols/USyncBotProfileProtocol')
|
|
6
|
+
const USyncLIDProtocol_1 = require('./Protocols/USyncLIDProtocol')
|
|
7
|
+
const USyncBusinessProtocol_1 = require('./Protocols/USyncBusinessProtocol')
|
|
8
|
+
const USyncFeatureProtocol_1 = require('./Protocols/USyncFeatureProtocol')
|
|
9
|
+
const USyncPictureProtocol_1 = require('./Protocols/USyncPictureProtocol')
|
|
10
|
+
const USyncTextStatusProtocol_1 = require('./Protocols/USyncTextStatusProtocol')
|
|
11
|
+
const USyncSidelistProtocol_1 = require('./Protocols/USyncSidelistProtocol')
|
|
12
|
+
const Protocols_1 = require('./Protocols')
|
|
13
|
+
class USyncQuery {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.protocols = []
|
|
16
|
+
this.users = []
|
|
17
|
+
this.context = 'interactive'
|
|
18
|
+
this.mode = 'query'
|
|
19
|
+
}
|
|
20
|
+
withMode(mode) {
|
|
21
|
+
this.mode = mode
|
|
22
|
+
return this
|
|
23
|
+
}
|
|
24
|
+
withContext(context) {
|
|
25
|
+
this.context = context
|
|
26
|
+
return this
|
|
27
|
+
}
|
|
28
|
+
withUser(user) {
|
|
29
|
+
this.users.push(user)
|
|
30
|
+
return this
|
|
31
|
+
}
|
|
32
|
+
parseUSyncQueryResult(result) {
|
|
33
|
+
if (!result || result.attrs.type !== 'result') {
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
const protocolMap = Object.fromEntries(
|
|
37
|
+
this.protocols.map(protocol => {
|
|
38
|
+
return [protocol.name, protocol.parser]
|
|
39
|
+
})
|
|
40
|
+
)
|
|
41
|
+
const queryResult = {
|
|
42
|
+
errors: {},
|
|
43
|
+
refresh: {},
|
|
44
|
+
list: [],
|
|
45
|
+
sideList: []
|
|
46
|
+
}
|
|
47
|
+
const usyncNode = (0, WABinary_1.getBinaryNodeChild)(result, 'usync')
|
|
48
|
+
// Each protocol's result child can carry either an <error code text backoff/>
|
|
49
|
+
// (caller should back off future queries for that protocol) or a refresh="n"
|
|
50
|
+
// attr (caller may cache the response for n seconds). Ported from WAWebUsync's
|
|
51
|
+
// usyncParser.
|
|
52
|
+
const resultNode = usyncNode ? (0, WABinary_1.getBinaryNodeChild)(usyncNode, 'result') : undefined
|
|
53
|
+
if (resultNode) {
|
|
54
|
+
for (const protocol of this.protocols) {
|
|
55
|
+
const protocolNode = (0, WABinary_1.getBinaryNodeChild)(resultNode, protocol.name)
|
|
56
|
+
if (!protocolNode) continue
|
|
57
|
+
const errorNode = (0, WABinary_1.getBinaryNodeChild)(protocolNode, 'error')
|
|
58
|
+
if (errorNode) {
|
|
59
|
+
queryResult.errors[protocol.name] = {
|
|
60
|
+
errorCode: errorNode.attrs.code ? +errorNode.attrs.code : undefined,
|
|
61
|
+
errorText: errorNode.attrs.text,
|
|
62
|
+
errorBackoff: errorNode.attrs.backoff ? +errorNode.attrs.backoff : undefined
|
|
63
|
+
}
|
|
64
|
+
} else if (protocolNode.attrs.refresh !== undefined) {
|
|
65
|
+
queryResult.refresh[protocol.name] = +protocolNode.attrs.refresh
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const parseUserNodes = nodes => {
|
|
70
|
+
return nodes.reduce((acc, node) => {
|
|
71
|
+
const id = node?.attrs.jid
|
|
72
|
+
if (id) {
|
|
73
|
+
// G. Blocked-by tracking: a user-level error attribute signals the contact
|
|
74
|
+
// has blocked us (WA uses 401/403/405 on the <user> node in this case).
|
|
75
|
+
const userErrorCode = node?.attrs?.error ? parseInt(node.attrs.error, 10) : 0
|
|
76
|
+
const isBlockedByAttr = userErrorCode === 401 || userErrorCode === 403 || userErrorCode === 405
|
|
77
|
+
|
|
78
|
+
const data = Array.isArray(node?.content)
|
|
79
|
+
? Object.fromEntries(
|
|
80
|
+
node.content
|
|
81
|
+
.map(content => {
|
|
82
|
+
const protocol = content.tag
|
|
83
|
+
|
|
84
|
+
// B. Privacy Token: extract per-contact privacy_token and
|
|
85
|
+
// privacy_mode_ts from <privacy> child elements in usync responses.
|
|
86
|
+
if (protocol === 'privacy') {
|
|
87
|
+
const tokenNode = (0, WABinary_1.getBinaryNodeChild)(content, 'token')
|
|
88
|
+
const modeTsNode = (0, WABinary_1.getBinaryNodeChild)(content, 'mode_ts')
|
|
89
|
+
// Also accept inline attrs format
|
|
90
|
+
const tokenVal = tokenNode?.content || content.attrs?.token
|
|
91
|
+
const modeTsVal =
|
|
92
|
+
modeTsNode?.content?.toString?.() || modeTsNode?.attrs?.value || content.attrs?.mode_ts || null
|
|
93
|
+
if (tokenVal) {
|
|
94
|
+
return [
|
|
95
|
+
'privacy',
|
|
96
|
+
{
|
|
97
|
+
token:
|
|
98
|
+
Buffer.isBuffer(tokenVal) || tokenVal instanceof Uint8Array
|
|
99
|
+
? Buffer.from(tokenVal)
|
|
100
|
+
: tokenVal,
|
|
101
|
+
modeTs: modeTsVal
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
return ['privacy', null]
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const parser = protocolMap[protocol]
|
|
109
|
+
if (parser) {
|
|
110
|
+
try {
|
|
111
|
+
return [protocol, parser(content)]
|
|
112
|
+
} catch (err) {
|
|
113
|
+
// G. Blocked-by: sub-node parser errors with blocked codes
|
|
114
|
+
// should surface as isBlockedByContact rather than crashing.
|
|
115
|
+
const errCode = err?.data ?? err?.output?.payload?.data
|
|
116
|
+
if (errCode === 401 || errCode === 403 || errCode === 405) {
|
|
117
|
+
return ['isBlockedByContact', true]
|
|
118
|
+
}
|
|
119
|
+
throw err
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
return [protocol, null]
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
.filter(([, b]) => b !== null)
|
|
126
|
+
)
|
|
127
|
+
: {}
|
|
128
|
+
|
|
129
|
+
// Merge user-attr blocked flag with any parser-detected blocked flag.
|
|
130
|
+
if (isBlockedByAttr) {
|
|
131
|
+
data.isBlockedByContact = true
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Remap snake_case protocol keys to camelCase contact fields.
|
|
135
|
+
if ('disappearing_mode' in data) {
|
|
136
|
+
data.disappearingMode = data.disappearing_mode
|
|
137
|
+
delete data.disappearing_mode
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
acc.push({ ...data, id })
|
|
141
|
+
}
|
|
142
|
+
return acc
|
|
143
|
+
}, [])
|
|
144
|
+
}
|
|
145
|
+
const listNode = usyncNode ? (0, WABinary_1.getBinaryNodeChild)(usyncNode, 'list') : undefined
|
|
146
|
+
if (listNode?.content && Array.isArray(listNode.content)) {
|
|
147
|
+
queryResult.list = parseUserNodes(listNode.content)
|
|
148
|
+
}
|
|
149
|
+
const sideListNode = usyncNode ? (0, WABinary_1.getBinaryNodeChild)(usyncNode, 'side_list') : undefined
|
|
150
|
+
if (sideListNode?.content && Array.isArray(sideListNode.content)) {
|
|
151
|
+
queryResult.sideList = parseUserNodes(sideListNode.content)
|
|
152
|
+
}
|
|
153
|
+
return queryResult
|
|
154
|
+
}
|
|
155
|
+
withDeviceProtocol() {
|
|
156
|
+
this.protocols.push(new Protocols_1.USyncDeviceProtocol())
|
|
157
|
+
return this
|
|
158
|
+
}
|
|
159
|
+
withContactProtocol() {
|
|
160
|
+
this.protocols.push(new Protocols_1.USyncContactProtocol())
|
|
161
|
+
return this
|
|
162
|
+
}
|
|
163
|
+
withStatusProtocol() {
|
|
164
|
+
this.protocols.push(new Protocols_1.USyncStatusProtocol())
|
|
165
|
+
return this
|
|
166
|
+
}
|
|
167
|
+
withDisappearingModeProtocol() {
|
|
168
|
+
this.protocols.push(new Protocols_1.USyncDisappearingModeProtocol())
|
|
169
|
+
return this
|
|
170
|
+
}
|
|
171
|
+
withBotProfileProtocol() {
|
|
172
|
+
this.protocols.push(new USyncBotProfileProtocol_1.USyncBotProfileProtocol())
|
|
173
|
+
return this
|
|
174
|
+
}
|
|
175
|
+
withLIDProtocol() {
|
|
176
|
+
this.protocols.push(new USyncLIDProtocol_1.USyncLIDProtocol())
|
|
177
|
+
return this
|
|
178
|
+
}
|
|
179
|
+
withUsernameProtocol() {
|
|
180
|
+
this.protocols.push(new Protocols_1.USyncUsernameProtocol())
|
|
181
|
+
return this
|
|
182
|
+
}
|
|
183
|
+
withBusinessProtocol(profileVersion) {
|
|
184
|
+
this.protocols.push(new USyncBusinessProtocol_1.USyncBusinessProtocol(profileVersion))
|
|
185
|
+
return this
|
|
186
|
+
}
|
|
187
|
+
withPictureProtocol(type) {
|
|
188
|
+
this.protocols.push(new USyncPictureProtocol_1.USyncPictureProtocol(type))
|
|
189
|
+
return this
|
|
190
|
+
}
|
|
191
|
+
withTextStatusProtocol() {
|
|
192
|
+
this.protocols.push(new USyncTextStatusProtocol_1.USyncTextStatusProtocol())
|
|
193
|
+
return this
|
|
194
|
+
}
|
|
195
|
+
withSidelistProtocol(useLidAddressing) {
|
|
196
|
+
this.protocols.push(new USyncSidelistProtocol_1.USyncSidelistProtocol(useLidAddressing))
|
|
197
|
+
return this
|
|
198
|
+
}
|
|
199
|
+
withFeatureProtocol(features) {
|
|
200
|
+
this.protocols.push(new USyncFeatureProtocol_1.USyncFeatureProtocol(features))
|
|
201
|
+
return this
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.USyncQuery = USyncQuery
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
+
exports.USyncUser = void 0
|
|
4
|
+
class USyncUser {
|
|
5
|
+
withId(id) {
|
|
6
|
+
this.id = id
|
|
7
|
+
return this
|
|
8
|
+
}
|
|
9
|
+
withLid(lid) {
|
|
10
|
+
this.lid = lid
|
|
11
|
+
return this
|
|
12
|
+
}
|
|
13
|
+
withPhone(phone) {
|
|
14
|
+
this.phone = phone
|
|
15
|
+
return this
|
|
16
|
+
}
|
|
17
|
+
withUsername(username) {
|
|
18
|
+
this.username = username
|
|
19
|
+
return this
|
|
20
|
+
}
|
|
21
|
+
withUsernameKey(usernameKey) {
|
|
22
|
+
this.usernameKey = usernameKey
|
|
23
|
+
return this
|
|
24
|
+
}
|
|
25
|
+
withType(type) {
|
|
26
|
+
this.type = type
|
|
27
|
+
return this
|
|
28
|
+
}
|
|
29
|
+
withPersonaId(personaId) {
|
|
30
|
+
this.personaId = personaId
|
|
31
|
+
return this
|
|
32
|
+
}
|
|
33
|
+
withTcToken(tcToken) {
|
|
34
|
+
this.tcToken = tcToken
|
|
35
|
+
return this
|
|
36
|
+
}
|
|
37
|
+
withPnJid(pnJid) {
|
|
38
|
+
this.pnJid = pnJid
|
|
39
|
+
return this
|
|
40
|
+
}
|
|
41
|
+
withDeviceHash(deviceHash) {
|
|
42
|
+
this.deviceHash = deviceHash
|
|
43
|
+
return this
|
|
44
|
+
}
|
|
45
|
+
withTs(ts) {
|
|
46
|
+
this.ts = ts
|
|
47
|
+
return this
|
|
48
|
+
}
|
|
49
|
+
withExpectedTs(expectedTs) {
|
|
50
|
+
this.expectedTs = expectedTs
|
|
51
|
+
return this
|
|
52
|
+
}
|
|
53
|
+
/** Ported from WAWebUsyncUser's validate() — a usync user needs at least one addressable field. */
|
|
54
|
+
validate() {
|
|
55
|
+
return !!(this.id || this.phone || this.username || this.pnJid)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.USyncUser = USyncUser
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
var __createBinding =
|
|
3
|
+
(this && this.__createBinding) ||
|
|
4
|
+
(Object.create
|
|
5
|
+
? function (o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k)
|
|
8
|
+
if (!desc || ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return m[k]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc)
|
|
17
|
+
}
|
|
18
|
+
: function (o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k
|
|
20
|
+
o[k2] = m[k]
|
|
21
|
+
})
|
|
22
|
+
var __exportStar =
|
|
23
|
+
(this && this.__exportStar) ||
|
|
24
|
+
function (m, exports) {
|
|
25
|
+
for (var p in m)
|
|
26
|
+
if (p !== 'default' && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p)
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(exports, '__esModule', { value: true })
|
|
29
|
+
__exportStar(require('./Protocols/index'), exports)
|
|
30
|
+
__exportStar(require('./USyncQuery'), exports)
|
|
31
|
+
__exportStar(require('./USyncUser'), exports)
|
|
32
|
+
__exportStar(require('./USyncBackoff'), exports)
|