@badzz88/baileys 8.4.7 → 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.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1055 -337
  3. package/WAProto/WAProto.proto +347 -6
  4. package/WAProto/fix-import.js +38 -0
  5. package/WAProto/fix-imports.js +86 -85
  6. package/WAProto/index.d.ts +4913 -25
  7. package/WAProto/index.js +14074 -98
  8. package/package.json +50 -90
  9. package/src/Defaults/index.js +201 -0
  10. package/src/Defaults/phonenumber-mcc.json +223 -0
  11. package/src/Signal/Group/ciphertext-message.js +15 -0
  12. package/src/Signal/Group/group-session-builder.js +92 -0
  13. package/src/Signal/Group/group_cipher.js +89 -0
  14. package/src/Signal/Group/index.js +136 -0
  15. package/src/Signal/Group/keyhelper.js +73 -0
  16. package/src/Signal/Group/sender-chain-key.js +32 -0
  17. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  18. package/src/Signal/Group/sender-key-message.js +69 -0
  19. package/src/Signal/Group/sender-key-name.js +50 -0
  20. package/src/Signal/Group/sender-key-record.js +44 -0
  21. package/src/Signal/Group/sender-key-state.js +97 -0
  22. package/src/Signal/Group/sender-message-key.js +30 -0
  23. package/src/Signal/libsignal.js +470 -0
  24. package/src/Signal/lid-mapping.js +262 -0
  25. package/src/Socket/Client/index.js +30 -0
  26. package/src/Socket/Client/types.js +13 -0
  27. package/src/Socket/Client/websocket.js +62 -0
  28. package/src/Socket/aigroups.js +240 -0
  29. package/src/Socket/business.js +422 -0
  30. package/src/Socket/chats.js +2374 -0
  31. package/src/Socket/communities.js +580 -0
  32. package/src/Socket/graphql.js +915 -0
  33. package/src/Socket/groups.js +812 -0
  34. package/src/Socket/index.js +37 -0
  35. package/src/Socket/interactive-handler.js +579 -0
  36. package/src/Socket/interop.js +566 -0
  37. package/src/Socket/managed-account.js +214 -0
  38. package/src/Socket/messages-recv.js +3012 -0
  39. package/src/Socket/messages-send.js +2163 -0
  40. package/{lib → src}/Socket/mex.js +11 -5
  41. package/src/Socket/newsletter.js +1057 -0
  42. package/src/Socket/privacy.js +452 -0
  43. package/src/Socket/registration.js +434 -0
  44. package/src/Socket/socket.js +1079 -0
  45. package/src/Socket/text-router.js +67 -0
  46. package/src/Socket/username.js +234 -0
  47. package/src/Store/index.js +36 -0
  48. package/src/Store/make-cache-manager-store.js +90 -0
  49. package/src/Store/make-in-memory-store.js +506 -0
  50. package/src/Store/make-ordered-dictionary.js +81 -0
  51. package/src/Store/object-repository.js +29 -0
  52. package/src/Types/Auth.js +38 -0
  53. package/src/Types/Bussines.js +2 -0
  54. package/src/Types/Call.js +2 -0
  55. package/src/Types/Chat.js +4 -0
  56. package/src/Types/Contact.js +2 -0
  57. package/src/Types/Events.js +2 -0
  58. package/src/Types/GroupMetadata.js +2 -0
  59. package/src/Types/Label.js +27 -0
  60. package/src/Types/LabelAssociation.js +9 -0
  61. package/src/Types/Message.js +95 -0
  62. package/src/Types/Newsletter.js +152 -0
  63. package/src/Types/Product.js +2 -0
  64. package/src/Types/Signal.js +2 -0
  65. package/src/Types/Socket.js +2 -0
  66. package/src/Types/State.js +70 -0
  67. package/src/Types/USync.js +2 -0
  68. package/src/Types/index.js +54 -0
  69. package/src/Utils/auth-utils.js +306 -0
  70. package/src/Utils/browser-utils.js +114 -0
  71. package/src/Utils/business.js +247 -0
  72. package/src/Utils/chat-utils.js +1272 -0
  73. package/src/Utils/consumer-application.js +107 -0
  74. package/src/Utils/crypto.js +125 -0
  75. package/src/Utils/decode-wa-message.js +808 -0
  76. package/src/Utils/event-buffer.js +586 -0
  77. package/src/Utils/generics.js +640 -0
  78. package/src/Utils/group-history.js +60 -0
  79. package/src/Utils/history.js +244 -0
  80. package/src/Utils/identity-change-handler.js +52 -0
  81. package/src/Utils/index.js +53 -0
  82. package/src/Utils/jid-display-normalization.js +218 -0
  83. package/src/Utils/link-preview.js +143 -0
  84. package/src/Utils/logger.js +9 -0
  85. package/src/Utils/lt-hash.js +10 -0
  86. package/src/Utils/make-mutex.js +36 -0
  87. package/src/Utils/message-composer.js +479 -0
  88. package/src/Utils/message-inspect.js +400 -0
  89. package/src/Utils/message-retry-manager.js +231 -0
  90. package/src/Utils/messages-media.js +943 -0
  91. package/src/Utils/messages.js +2490 -0
  92. package/src/Utils/meta-ai-msmsg.js +133 -0
  93. package/src/Utils/noise-handler.js +194 -0
  94. package/src/Utils/offline-node-processor.js +42 -0
  95. package/src/Utils/pre-key-manager.js +107 -0
  96. package/src/Utils/process-message.js +1047 -0
  97. package/src/Utils/reporting-utils.js +262 -0
  98. package/src/Utils/signal.js +192 -0
  99. package/src/Utils/stanza-ack.js +74 -0
  100. package/src/Utils/sync-action-utils.js +54 -0
  101. package/src/Utils/tc-token-utils.js +161 -0
  102. package/src/Utils/use-multi-file-auth-state.js +121 -0
  103. package/src/Utils/validate-connection.js +248 -0
  104. package/src/Utils/voip-rekey.js +22 -0
  105. package/src/WABinary/constants.js +1304 -0
  106. package/src/WABinary/decode.js +377 -0
  107. package/src/WABinary/encode.js +58 -0
  108. package/src/WABinary/generic-utils.js +148 -0
  109. package/src/WABinary/index.js +33 -0
  110. package/src/WABinary/jid-utils.js +374 -0
  111. package/src/WABinary/types.js +2 -0
  112. package/src/WAM/BinaryInfo.js +13 -0
  113. package/src/WAM/constants.js +39486 -0
  114. package/src/WAM/encode.js +142 -0
  115. package/src/WAM/index.js +31 -0
  116. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +55 -0
  117. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +100 -0
  118. package/src/WAUSync/Protocols/USyncContactProtocol.js +60 -0
  119. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +65 -0
  120. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  121. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +74 -0
  122. package/src/WAUSync/Protocols/USyncLIDProtocol.js +31 -0
  123. package/src/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
  124. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  125. package/src/WAUSync/Protocols/USyncStatusProtocol.js +44 -0
  126. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  127. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  128. package/src/WAUSync/Protocols/index.js +40 -0
  129. package/src/WAUSync/USyncBackoff.js +31 -0
  130. package/src/WAUSync/USyncQuery.js +204 -0
  131. package/src/WAUSync/USyncUser.js +58 -0
  132. package/src/WAUSync/index.js +32 -0
  133. package/src/antiban.js +4726 -0
  134. package/{lib → src}/index.js +48 -15
  135. package/lib/Defaults/index.js +0 -130
  136. package/lib/Signal/Group/ciphertext-message.js +0 -12
  137. package/lib/Signal/Group/group-session-builder.js +0 -30
  138. package/lib/Signal/Group/group_cipher.js +0 -82
  139. package/lib/Signal/Group/index.js +0 -12
  140. package/lib/Signal/Group/keyhelper.js +0 -18
  141. package/lib/Signal/Group/sender-chain-key.js +0 -26
  142. package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
  143. package/lib/Signal/Group/sender-key-message.js +0 -66
  144. package/lib/Signal/Group/sender-key-name.js +0 -48
  145. package/lib/Signal/Group/sender-key-record.js +0 -41
  146. package/lib/Signal/Group/sender-key-state.js +0 -84
  147. package/lib/Signal/Group/sender-message-key.js +0 -26
  148. package/lib/Signal/libsignal.js +0 -431
  149. package/lib/Signal/lid-mapping.js +0 -277
  150. package/lib/Socket/Client/index.js +0 -3
  151. package/lib/Socket/Client/types.js +0 -11
  152. package/lib/Socket/Client/websocket.js +0 -54
  153. package/lib/Socket/business.js +0 -379
  154. package/lib/Socket/chats.js +0 -1193
  155. package/lib/Socket/communities.js +0 -431
  156. package/lib/Socket/groups.js +0 -374
  157. package/lib/Socket/index.js +0 -12
  158. package/lib/Socket/luxu.js +0 -386
  159. package/lib/Socket/messages-recv.js +0 -1916
  160. package/lib/Socket/messages-send.js +0 -1453
  161. package/lib/Socket/newsletter.js +0 -251
  162. package/lib/Socket/socket.js +0 -980
  163. package/lib/Socket/username.js +0 -146
  164. package/lib/Store/index.js +0 -10
  165. package/lib/Store/keyed-db.js +0 -108
  166. package/lib/Store/make-cache-manager-store.js +0 -85
  167. package/lib/Store/make-in-memory-store.js +0 -198
  168. package/lib/Store/make-ordered-dictionary.js +0 -75
  169. package/lib/Store/object-repository.js +0 -32
  170. package/lib/Types/Auth.js +0 -2
  171. package/lib/Types/Bussines.js +0 -2
  172. package/lib/Types/Call.js +0 -2
  173. package/lib/Types/Chat.js +0 -8
  174. package/lib/Types/Contact.js +0 -2
  175. package/lib/Types/Events.js +0 -2
  176. package/lib/Types/GroupMetadata.js +0 -2
  177. package/lib/Types/Label.js +0 -25
  178. package/lib/Types/LabelAssociation.js +0 -7
  179. package/lib/Types/Message.js +0 -11
  180. package/lib/Types/Mex.js +0 -37
  181. package/lib/Types/Product.js +0 -2
  182. package/lib/Types/Signal.js +0 -2
  183. package/lib/Types/Socket.js +0 -3
  184. package/lib/Types/State.js +0 -56
  185. package/lib/Types/USync.js +0 -2
  186. package/lib/Types/index.js +0 -26
  187. package/lib/Utils/auth-utils.js +0 -302
  188. package/lib/Utils/browser-utils.js +0 -49
  189. package/lib/Utils/business.js +0 -231
  190. package/lib/Utils/chat-utils.js +0 -872
  191. package/lib/Utils/companion-reg-client-utils.js +0 -35
  192. package/lib/Utils/crypto.js +0 -118
  193. package/lib/Utils/decode-wa-message.js +0 -350
  194. package/lib/Utils/event-buffer.js +0 -622
  195. package/lib/Utils/generics.js +0 -403
  196. package/lib/Utils/history.js +0 -134
  197. package/lib/Utils/identity-change-handler.js +0 -50
  198. package/lib/Utils/index.js +0 -23
  199. package/lib/Utils/link-preview.js +0 -85
  200. package/lib/Utils/logger.js +0 -3
  201. package/lib/Utils/lt-hash.js +0 -8
  202. package/lib/Utils/make-mutex.js +0 -33
  203. package/lib/Utils/message-composer.js +0 -273
  204. package/lib/Utils/message-retry-manager.js +0 -265
  205. package/lib/Utils/messages-media.js +0 -788
  206. package/lib/Utils/messages.js +0 -1260
  207. package/lib/Utils/noise-handler.js +0 -201
  208. package/lib/Utils/offline-node-processor.js +0 -40
  209. package/lib/Utils/pre-key-manager.js +0 -106
  210. package/lib/Utils/process-message.js +0 -630
  211. package/lib/Utils/reporting-utils.js +0 -258
  212. package/lib/Utils/signal.js +0 -201
  213. package/lib/Utils/stanza-ack.js +0 -38
  214. package/lib/Utils/sync-action-utils.js +0 -49
  215. package/lib/Utils/tc-token-utils.js +0 -163
  216. package/lib/Utils/use-multi-file-auth-state.js +0 -121
  217. package/lib/Utils/validate-connection.js +0 -203
  218. package/lib/WABinary/constants.js +0 -1301
  219. package/lib/WABinary/decode.js +0 -262
  220. package/lib/WABinary/encode.js +0 -220
  221. package/lib/WABinary/generic-utils.js +0 -204
  222. package/lib/WABinary/index.js +0 -6
  223. package/lib/WABinary/jid-utils.js +0 -98
  224. package/lib/WABinary/types.js +0 -2
  225. package/lib/WAM/BinaryInfo.js +0 -10
  226. package/lib/WAM/constants.js +0 -22853
  227. package/lib/WAM/encode.js +0 -150
  228. package/lib/WAM/index.js +0 -4
  229. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -52
  230. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -54
  231. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
  232. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -263
  233. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -38
  234. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  235. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
  236. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
  237. package/lib/WAUSync/Protocols/index.js +0 -6
  238. package/lib/WAUSync/USyncQuery.js +0 -98
  239. package/lib/WAUSync/USyncUser.js +0 -31
  240. 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)