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