@badzz88/baileys 8.5.4 → 8.5.6

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 (269) hide show
  1. package/README.md +2 -2
  2. package/WAProto/fix-imports.js +69 -79
  3. package/WAProto/index.d.ts +15305 -87935
  4. package/WAProto/index.js +41109 -194076
  5. package/engine-requirements.js +15 -8
  6. package/package.json +23 -19
  7. package/src/Defaults/index.js +186 -0
  8. package/src/Signal/Group/ciphertext-message.js +15 -0
  9. package/src/Signal/Group/group-session-builder.js +86 -0
  10. package/src/Signal/Group/group_cipher.js +82 -0
  11. package/src/Signal/Group/index.js +140 -0
  12. package/src/Signal/Group/keyhelper.js +77 -0
  13. package/src/Signal/Group/sender-chain-key.js +29 -0
  14. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  15. package/src/Signal/Group/sender-key-message.js +69 -0
  16. package/src/Signal/Group/sender-key-name.js +51 -0
  17. package/src/Signal/Group/sender-key-record.js +44 -0
  18. package/src/Signal/Group/sender-key-state.js +87 -0
  19. package/src/Signal/Group/sender-message-key.js +29 -0
  20. package/src/Signal/libsignal.js +455 -0
  21. package/src/Signal/lid-mapping.js +273 -0
  22. package/src/Socket/Client/index.js +31 -0
  23. package/src/Socket/Client/types.js +13 -0
  24. package/src/Socket/Client/websocket.js +61 -0
  25. package/src/Socket/aigroups.js +221 -0
  26. package/src/Socket/business.js +411 -0
  27. package/src/Socket/chats.js +1449 -0
  28. package/src/Socket/communities.js +463 -0
  29. package/src/Socket/graphql.js +523 -0
  30. package/src/Socket/groups.js +516 -0
  31. package/src/Socket/index.js +31 -0
  32. package/src/Socket/interactive-handler.js +527 -0
  33. package/src/Socket/interop.js +339 -0
  34. package/src/Socket/luxu.js +349 -0
  35. package/src/Socket/managed-account.js +98 -0
  36. package/src/Socket/messages-recv.js +2685 -0
  37. package/src/Socket/messages-send.js +2047 -0
  38. package/src/Socket/mex.js +57 -0
  39. package/src/Socket/newsletter.js +455 -0
  40. package/src/Socket/privacy.js +125 -0
  41. package/src/Socket/registration.js +236 -0
  42. package/src/Socket/socket.js +983 -0
  43. package/src/Socket/text-router.js +65 -0
  44. package/src/Socket/username.js +130 -0
  45. package/src/Store/index.js +33 -0
  46. package/src/Store/keyed-db.js +118 -0
  47. package/src/Store/make-cache-manager-store.js +84 -0
  48. package/src/Store/make-in-memory-store.js +551 -0
  49. package/src/Store/make-ordered-dictionary.js +81 -0
  50. package/src/Store/object-repository.js +26 -0
  51. package/src/Types/Auth.js +31 -0
  52. package/src/Types/Bussines.js +2 -0
  53. package/src/Types/Call.js +2 -0
  54. package/src/Types/Chat.js +4 -0
  55. package/src/Types/Contact.js +2 -0
  56. package/src/Types/Events.js +2 -0
  57. package/src/Types/GroupMetadata.js +2 -0
  58. package/src/Types/Label.js +26 -0
  59. package/src/Types/LabelAssociation.js +8 -0
  60. package/src/Types/Message.js +93 -0
  61. package/src/Types/Mex.js +112 -0
  62. package/src/Types/Newsletter.js +109 -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 +62 -0
  67. package/src/Types/USync.js +2 -0
  68. package/src/Types/index.js +56 -0
  69. package/src/Utils/auth-utils.js +254 -0
  70. package/src/Utils/browser-utils.js +112 -0
  71. package/src/Utils/business.js +240 -0
  72. package/src/Utils/chat-utils.js +1230 -0
  73. package/src/Utils/command-loader.d.ts +27 -0
  74. package/src/Utils/command-loader.js +89 -0
  75. package/src/Utils/companion-reg-client-utils.js +40 -0
  76. package/src/Utils/consumer-application.js +105 -0
  77. package/src/Utils/crypto.js +118 -0
  78. package/src/Utils/curve25519-js.js +242 -0
  79. package/src/Utils/decode-wa-message.js +529 -0
  80. package/src/Utils/event-buffer.js +580 -0
  81. package/src/Utils/generics.js +483 -0
  82. package/src/Utils/group-history.js +44 -0
  83. package/src/Utils/history.js +232 -0
  84. package/src/Utils/identity-change-handler.js +52 -0
  85. package/src/Utils/index.js +58 -0
  86. package/src/Utils/jid-display-normalization.js +195 -0
  87. package/src/Utils/link-preview.js +135 -0
  88. package/src/Utils/logger.js +8 -0
  89. package/src/Utils/lt-hash.js +25 -0
  90. package/src/Utils/make-mutex.js +36 -0
  91. package/src/Utils/message-composer.js +471 -0
  92. package/src/Utils/message-retry-manager.js +217 -0
  93. package/src/Utils/messages-media.js +843 -0
  94. package/src/Utils/messages.js +2817 -0
  95. package/src/Utils/meta-ai-msmsg.js +222 -0
  96. package/src/Utils/native-bridge.js +68 -0
  97. package/src/Utils/noise-handler.js +169 -0
  98. package/src/Utils/offline-node-processor.js +34 -0
  99. package/src/Utils/pre-key-manager.js +90 -0
  100. package/src/Utils/process-message.js +950 -0
  101. package/src/Utils/reporting-utils.js +261 -0
  102. package/src/Utils/session-pool.d.ts +14 -0
  103. package/src/Utils/session-pool.js +70 -0
  104. package/src/Utils/signal.js +217 -0
  105. package/src/Utils/stanza-ack.js +30 -0
  106. package/src/Utils/sticker.d.ts +13 -0
  107. package/src/Utils/sticker.js +123 -0
  108. package/src/Utils/sync-action-utils.js +45 -0
  109. package/src/Utils/tc-token-utils.js +158 -0
  110. package/src/Utils/use-multi-file-auth-state.js +111 -0
  111. package/src/Utils/validate-connection.js +209 -0
  112. package/src/Utils/view-once-cache.d.ts +12 -0
  113. package/src/Utils/view-once-cache.js +63 -0
  114. package/src/Utils/voip-rekey.js +22 -0
  115. package/src/WABinary/constants.js +1304 -0
  116. package/src/WABinary/decode.js +342 -0
  117. package/src/WABinary/encode.js +225 -0
  118. package/src/WABinary/generic-utils.js +238 -0
  119. package/src/WABinary/index.js +34 -0
  120. package/src/WABinary/jid-utils.js +351 -0
  121. package/src/WABinary/types.js +2 -0
  122. package/src/WAM/BinaryInfo.js +13 -0
  123. package/src/WAM/constants.js +39484 -0
  124. package/src/WAM/encode.js +149 -0
  125. package/src/WAM/index.js +32 -0
  126. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +53 -0
  127. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +44 -0
  128. package/src/WAUSync/Protocols/USyncContactProtocol.js +55 -0
  129. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +55 -0
  130. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +31 -0
  131. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +54 -0
  132. package/src/WAUSync/Protocols/USyncLIDProtocol.js +32 -0
  133. package/src/WAUSync/Protocols/USyncNewsletterProtocol.js +473 -0
  134. package/src/WAUSync/Protocols/USyncPictureProtocol.js +34 -0
  135. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  136. package/src/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  137. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  138. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  139. package/src/WAUSync/Protocols/index.js +40 -0
  140. package/src/WAUSync/USyncQuery.js +126 -0
  141. package/src/WAUSync/USyncUser.js +50 -0
  142. package/src/WAUSync/index.js +32 -0
  143. package/src/antiban.js +4152 -0
  144. package/{lib → src}/index.js +51 -49
  145. package/lib/Defaults/index.js +0 -195
  146. package/lib/Signal/Group/ciphertext-message.js +0 -15
  147. package/lib/Signal/Group/group-session-builder.js +0 -92
  148. package/lib/Signal/Group/group_cipher.js +0 -89
  149. package/lib/Signal/Group/index.js +0 -136
  150. package/lib/Signal/Group/keyhelper.js +0 -73
  151. package/lib/Signal/Group/sender-chain-key.js +0 -32
  152. package/lib/Signal/Group/sender-key-distribution-message.js +0 -66
  153. package/lib/Signal/Group/sender-key-message.js +0 -69
  154. package/lib/Signal/Group/sender-key-name.js +0 -50
  155. package/lib/Signal/Group/sender-key-record.js +0 -44
  156. package/lib/Signal/Group/sender-key-state.js +0 -97
  157. package/lib/Signal/Group/sender-message-key.js +0 -30
  158. package/lib/Signal/libsignal.js +0 -470
  159. package/lib/Signal/lid-mapping.js +0 -280
  160. package/lib/Socket/Client/index.js +0 -30
  161. package/lib/Socket/Client/types.js +0 -13
  162. package/lib/Socket/Client/websocket.js +0 -62
  163. package/lib/Socket/aigroups.js +0 -240
  164. package/lib/Socket/business.js +0 -414
  165. package/lib/Socket/chats.js +0 -2165
  166. package/lib/Socket/communities.js +0 -545
  167. package/lib/Socket/graphql.js +0 -863
  168. package/lib/Socket/groups.js +0 -685
  169. package/lib/Socket/index.js +0 -41
  170. package/lib/Socket/interactive-handler.js +0 -579
  171. package/lib/Socket/interop.js +0 -430
  172. package/lib/Socket/managed-account.js +0 -214
  173. package/lib/Socket/messages-recv.js +0 -3000
  174. package/lib/Socket/messages-send.js +0 -2155
  175. package/lib/Socket/mex.js +0 -47
  176. package/lib/Socket/newsletter.js +0 -814
  177. package/lib/Socket/privacy.js +0 -261
  178. package/lib/Socket/registration.js +0 -434
  179. package/lib/Socket/socket.js +0 -1074
  180. package/lib/Socket/username.js +0 -160
  181. package/lib/Store/index.js +0 -36
  182. package/lib/Store/make-cache-manager-store.js +0 -90
  183. package/lib/Store/make-in-memory-store.js +0 -488
  184. package/lib/Store/make-ordered-dictionary.js +0 -81
  185. package/lib/Store/object-repository.js +0 -29
  186. package/lib/Types/Auth.js +0 -38
  187. package/lib/Types/Bussines.js +0 -2
  188. package/lib/Types/Call.js +0 -2
  189. package/lib/Types/Chat.js +0 -4
  190. package/lib/Types/Contact.js +0 -2
  191. package/lib/Types/Events.js +0 -2
  192. package/lib/Types/GroupMetadata.js +0 -2
  193. package/lib/Types/Label.js +0 -27
  194. package/lib/Types/LabelAssociation.js +0 -9
  195. package/lib/Types/Message.js +0 -95
  196. package/lib/Types/Newsletter.js +0 -152
  197. package/lib/Types/Product.js +0 -2
  198. package/lib/Types/Signal.js +0 -2
  199. package/lib/Types/Socket.js +0 -2
  200. package/lib/Types/State.js +0 -70
  201. package/lib/Types/USync.js +0 -2
  202. package/lib/Types/index.js +0 -55
  203. package/lib/Utils/auth-utils.js +0 -301
  204. package/lib/Utils/browser-utils.js +0 -114
  205. package/lib/Utils/business.js +0 -243
  206. package/lib/Utils/chat-utils.js +0 -1272
  207. package/lib/Utils/consumer-application.js +0 -107
  208. package/lib/Utils/crypto.js +0 -125
  209. package/lib/Utils/decode-wa-message.js +0 -793
  210. package/lib/Utils/event-buffer.js +0 -583
  211. package/lib/Utils/generics.js +0 -617
  212. package/lib/Utils/group-history.js +0 -51
  213. package/lib/Utils/history.js +0 -244
  214. package/lib/Utils/identity-change-handler.js +0 -52
  215. package/lib/Utils/index.js +0 -53
  216. package/lib/Utils/jid-display-normalization.js +0 -218
  217. package/lib/Utils/link-preview.js +0 -138
  218. package/lib/Utils/logger.js +0 -9
  219. package/lib/Utils/lt-hash.js +0 -6
  220. package/lib/Utils/make-mutex.js +0 -36
  221. package/lib/Utils/message-composer.js +0 -479
  222. package/lib/Utils/message-inspect.js +0 -393
  223. package/lib/Utils/message-retry-manager.js +0 -205
  224. package/lib/Utils/messages-media.js +0 -925
  225. package/lib/Utils/messages.js +0 -2482
  226. package/lib/Utils/meta-ai-msmsg.js +0 -122
  227. package/lib/Utils/noise-handler.js +0 -194
  228. package/lib/Utils/offline-node-processor.js +0 -37
  229. package/lib/Utils/pre-key-manager.js +0 -97
  230. package/lib/Utils/process-message.js +0 -1139
  231. package/lib/Utils/reporting-utils.js +0 -262
  232. package/lib/Utils/signal.js +0 -189
  233. package/lib/Utils/stanza-ack.js +0 -67
  234. package/lib/Utils/sync-action-utils.js +0 -51
  235. package/lib/Utils/tc-token-utils.js +0 -156
  236. package/lib/Utils/use-multi-file-auth-state.js +0 -137
  237. package/lib/Utils/validate-connection.js +0 -259
  238. package/lib/Utils/voip-rekey.js +0 -22
  239. package/lib/WABinary/constants.js +0 -1304
  240. package/lib/WABinary/decode.js +0 -377
  241. package/lib/WABinary/encode.js +0 -58
  242. package/lib/WABinary/generic-utils.js +0 -150
  243. package/lib/WABinary/index.js +0 -33
  244. package/lib/WABinary/jid-utils.js +0 -374
  245. package/lib/WABinary/types.js +0 -2
  246. package/lib/WAM/BinaryInfo.js +0 -13
  247. package/lib/WAM/constants.js +0 -39486
  248. package/lib/WAM/encode.js +0 -142
  249. package/lib/WAM/index.js +0 -31
  250. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +0 -55
  251. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +0 -100
  252. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -60
  253. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -65
  254. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
  255. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +0 -72
  256. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +0 -31
  257. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -865
  258. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +0 -32
  259. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +0 -29
  260. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -44
  261. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +0 -38
  262. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -28
  263. package/lib/WAUSync/Protocols/index.js +0 -40
  264. package/lib/WAUSync/USyncBackoff.js +0 -26
  265. package/lib/WAUSync/USyncQuery.js +0 -204
  266. package/lib/WAUSync/USyncUser.js +0 -58
  267. package/lib/WAUSync/index.js +0 -32
  268. package/lib/antiban.js +0 -4391
  269. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
@@ -1,430 +0,0 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.makeInteropSocket = void 0
4
-
5
- const { getBinaryNodeChild, getBinaryNodeChildren, S_WHATSAPP_NET } = require('../WABinary')
6
- const { executeWMexQuery } = require('./mex')
7
-
8
-
9
- const INTEROP_MEX_QUERY_IDS = {
10
- CREATE_GROUP: '25726817620301611',
11
- LEAVE_GROUP: '25346167795013271',
12
- ADD_PARTICIPANTS: '25732168276369451',
13
- QUERY_GROUP_INFO: '32734144032867938',
14
- PRIVACY_SETTINGS_QUERY: '24849123668112654',
15
- PRIVACY_SETTINGS_UPDATE: '25421856497452763',
16
- PRIVACY_SETTINGS_WITH_CONTACT_LIST: '24913399124998598'
17
- }
18
-
19
-
20
- const INTEGRATOR_BIRDYCHAT = 12
21
- const INTEGRATOR_HAIKET = 13
22
-
23
-
24
- const TOS_TRACKABLE_ID = '20240306'
25
- const TOS_RESULT_SHOWN = '105'
26
- const TOS_RESULT_ACCEPTED = '160'
27
-
28
-
29
- const INTEROP_BATCH_MAX = 256
30
-
31
- const makeInteropSocket = sock => {
32
- const { query, generateMessageTag, logger, signalRepository, masqueradeAsPrimary } = sock
33
-
34
- const mexQuery = (variables, queryId, dataPath) =>
35
- executeWMexQuery(variables, queryId, dataPath, query, generateMessageTag)
36
-
37
-
38
- const fetchIntegrators = async () => {
39
- const result = await query({
40
- tag: 'iq',
41
- attrs: {
42
- type: 'get',
43
- xmlns: 'w:interop',
44
- to: S_WHATSAPP_NET
45
- },
46
- content: [{ tag: 'integrator', attrs: { fetch: 'all' } }]
47
- })
48
- const listNode = getBinaryNodeChild(result, 'integrator_list')
49
- if (!listNode) return []
50
- const globalOptedIn = listNode.attrs?.opted_in === 'true'
51
- return getBinaryNodeChildren(listNode, 'integrator').map(node => {
52
- const featuresNode = getBinaryNodeChild(node, 'features')
53
- return {
54
- id: parseInt(node.attrs.id, 10),
55
- name: node.attrs.name,
56
-
57
- status: node.attrs.status,
58
- icon: node.attrs.icon,
59
-
60
- identifierType: node.attrs.identifier_type,
61
-
62
- optedIn: node.attrs.opted_in === 'true' || globalOptedIn,
63
- features: {
64
- groupMessaging: featuresNode?.attrs?.group_messaging === 'true'
65
- }
66
- }
67
- })
68
- }
69
-
70
-
71
- const sendTOSTrackable = async (id, result) => {
72
- await query({
73
- tag: 'iq',
74
- attrs: { to: S_WHATSAPP_NET, type: 'set', xmlns: 'tos' },
75
- content: [{ tag: 'trackable', attrs: { id, result } }]
76
- })
77
- }
78
-
79
-
80
- const acceptInteropTOS = async () => {
81
- await sendTOSTrackable(TOS_TRACKABLE_ID, TOS_RESULT_SHOWN)
82
- await sendTOSTrackable(TOS_TRACKABLE_ID, TOS_RESULT_ACCEPTED)
83
- }
84
-
85
-
86
- const optInIntegrators = async (integratorIds = [INTEGRATOR_BIRDYCHAT, INTEGRATOR_HAIKET]) => {
87
- await query({
88
- tag: 'iq',
89
- attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
90
- content: [
91
- {
92
- tag: 'opt_in_integrators',
93
- attrs: {},
94
- content: [
95
- {
96
- tag: 'integrator_list',
97
- attrs: {},
98
- content: integratorIds.map(id => ({
99
- tag: 'integrator',
100
- attrs: { id: id.toString() }
101
- }))
102
- }
103
- ]
104
- }
105
- ]
106
- })
107
- }
108
-
109
-
110
- const optOutIntegrators = async (integratorIds = [INTEGRATOR_BIRDYCHAT, INTEGRATOR_HAIKET]) => {
111
- await query({
112
- tag: 'iq',
113
- attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
114
- content: [
115
- {
116
- tag: 'opt_out_integrators',
117
- attrs: {},
118
- content: [
119
- {
120
- tag: 'integrator_list',
121
- attrs: {},
122
- content: integratorIds.map(id => ({
123
- tag: 'integrator',
124
- attrs: { id: id.toString() }
125
- }))
126
- }
127
- ]
128
- }
129
- ]
130
- })
131
- }
132
-
133
-
134
- const resolveInteropUsers = async users => {
135
- if (!users || users.length === 0) return []
136
- if (users.length > INTEROP_BATCH_MAX) {
137
- throw new Error(`resolveInteropUsers: max ${INTEROP_BATCH_MAX} users per request`)
138
- }
139
- const result = await query({
140
- tag: 'iq',
141
- attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
142
- content: [
143
- {
144
- tag: 'users',
145
- attrs: {},
146
- content: users.map(({ externalId, integratorId }) => ({
147
- tag: 'user',
148
- attrs: {
149
- external_id: externalId,
150
- integrator_id: integratorId.toString()
151
- }
152
- }))
153
- }
154
- ]
155
- })
156
- const usersNode = getBinaryNodeChild(result, 'users')
157
- if (!usersNode) return []
158
- return getBinaryNodeChildren(usersNode, 'user').map(userNode => {
159
- const errorNode = getBinaryNodeChild(userNode, 'error')
160
- if (errorNode) {
161
- return {
162
- externalId: userNode.attrs.external_id,
163
- integratorId: parseInt(userNode.attrs.integrator_id, 10),
164
- error: {
165
- code: parseInt(errorNode.attrs.code, 10),
166
- text: errorNode.attrs.text
167
- }
168
- }
169
- }
170
- return {
171
- jid: userNode.attrs.jid,
172
- externalId: userNode.attrs.external_id,
173
- normalizedExternalId: userNode.attrs.normalized_external_id,
174
- integratorId: parseInt(userNode.attrs.integrator_id, 10)
175
- }
176
- })
177
- }
178
-
179
-
180
- const resolveInteropUser = async (externalId, integratorId) => {
181
- const results = await resolveInteropUsers([{ externalId, integratorId }])
182
- return results[0] ?? null
183
- }
184
-
185
-
186
- const getReachabilitySettings = async () => {
187
- const result = await query({
188
- tag: 'iq',
189
- attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
190
- content: [{ tag: 'reachability_settings', attrs: {} }]
191
- })
192
- const settingsNode = getBinaryNodeChild(result, 'reachability_settings')
193
- if (!settingsNode) return null
194
- return {
195
- enabled: settingsNode.attrs?.enabled,
196
- users: getBinaryNodeChildren(settingsNode, 'user').map(n => ({
197
- externalId: n.attrs.external_id,
198
- integratorId: parseInt(n.attrs.integrator_id, 10),
199
- jid: n.attrs.jid
200
- }))
201
- }
202
- }
203
-
204
-
205
- const setReachabilitySettings = async (users, enabled = 'true') => {
206
- await query({
207
- tag: 'iq',
208
- attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
209
- content: [
210
- {
211
- tag: 'reachability_settings',
212
- attrs: { enabled },
213
- content: users.map(({ externalId, integratorId }) => ({
214
- tag: 'user',
215
- attrs: {
216
- external_id: externalId,
217
- integrator_id: integratorId.toString()
218
- }
219
- }))
220
- }
221
- ]
222
- })
223
- }
224
-
225
-
226
- const updateInteropBlockStatus = async (jid, action) => {
227
- await query({
228
- tag: 'iq',
229
- attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
230
- content: [
231
- {
232
- tag: 'blocklist',
233
- attrs: {},
234
- content: [{ tag: 'item', attrs: { action, jid } }]
235
- }
236
- ]
237
- })
238
- }
239
-
240
- const blockInteropUser = jid => updateInteropBlockStatus(jid, 'block')
241
- const unblockInteropUser = jid => updateInteropBlockStatus(jid, 'unblock')
242
-
243
-
244
- const reportInteropSpam = async (jid, spamFlow = 'account_info_block') => {
245
- await query({
246
- tag: 'iq',
247
- attrs: { type: 'set', xmlns: 'spam', to: S_WHATSAPP_NET },
248
- content: [{ tag: 'spam_list', attrs: { jid, spam_flow: spamFlow } }]
249
- })
250
- }
251
-
252
-
253
- const trustInteropContact = async jid => {
254
- const t = Math.floor(Date.now() / 1000).toString()
255
- await query({
256
- tag: 'iq',
257
- attrs: { to: S_WHATSAPP_NET, xmlns: 'privacy', type: 'set' },
258
- content: [
259
- {
260
- tag: 'tokens',
261
- attrs: {},
262
- content: [{ tag: 'token', attrs: { jid, type: 'trusted_contact', t } }]
263
- }
264
- ]
265
- })
266
- }
267
-
268
-
269
- const initInterop = async () => {
270
- let integrators
271
- try {
272
- integrators = await fetchIntegrators()
273
- } catch (err) {
274
- logger.warn({ err }, 'interop: failed to fetch integrators')
275
- return []
276
- }
277
- const toOptIn = integrators.filter(i => i.status === 'active' || i.status === 'onboarding')
278
- if (toOptIn.length === 0) return integrators
279
- try {
280
- await acceptInteropTOS()
281
- } catch (err) {
282
- logger.warn({ err }, 'interop: failed to accept TOS')
283
- }
284
- try {
285
- await optInIntegrators(toOptIn.map(i => i.id))
286
- } catch (err) {
287
- logger.warn({ err }, 'interop: failed to opt-in integrators')
288
- }
289
- logger.info({ integrators: toOptIn.map(i => i.name) }, 'interop: opted in')
290
- logger.warn(
291
- { integrators: toOptIn.map(i => i.name) },
292
- 'interop: receiving messages from interop contacts (BirdyChat/Haiket) is NOT YET SUPPORTED. ' +
293
- 'The interop bridge only delivers to device 0 (primary phone) via a single Signal session — ' +
294
- 'no fan-out to companion devices. Opt-in and sending may work, but inbound messages will not arrive.'
295
- )
296
- return integrators
297
- }
298
-
299
-
300
- const resetInteropSession = async jid => {
301
- await signalRepository.deleteSession([jid])
302
- logger.info({ jid }, '[interop] session reset — next send will use pkmsg')
303
- }
304
-
305
-
306
- const createInteropGroup = async participants => {
307
- const result = await mexQuery(
308
- { input: { participants: participants.map(jid => ({ jid })) } },
309
- INTEROP_MEX_QUERY_IDS.CREATE_GROUP,
310
- 'xwa2_interop_group_create'
311
- )
312
- logger.info({ participants }, '[interop] group created via MEX')
313
- return result
314
- }
315
-
316
-
317
- const leaveInteropGroup = async jids => {
318
- const ids = Array.isArray(jids) ? jids : [jids]
319
- const result = await mexQuery(
320
- { input: { groups_to_leave: ids.map(jid => ({ gid: jid.split('@')[0] })) } },
321
- INTEROP_MEX_QUERY_IDS.LEAVE_GROUP,
322
- 'xwa2_interop_group_leave'
323
- )
324
- logger.info({ jids: ids }, '[interop] left group(s) via MEX')
325
- return result
326
- }
327
-
328
-
329
- const addParticipantsToInteropGroup = async (groupJid, participants) => {
330
- const gid = groupJid.split('@')[0]
331
- return mexQuery(
332
- { input: { gid, participants: participants.map(jid => ({ jid })) } },
333
- INTEROP_MEX_QUERY_IDS.ADD_PARTICIPANTS,
334
- 'xwa2_interop_add_participants_to_group'
335
- )
336
- }
337
-
338
-
339
- const queryInteropGroupInfo = async groupJid => {
340
- const gid = groupJid.split('@')[0]
341
- return mexQuery({ group_input: { gid } }, INTEROP_MEX_QUERY_IDS.QUERY_GROUP_INFO, 'xwa2_interop_group_query_by_id')
342
- }
343
-
344
-
345
- const updateInteropPrivacySetting = async (feature, setting) => {
346
- return mexQuery(
347
- { feature, setting },
348
- INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_UPDATE,
349
- 'xwa2_interop_privacy_setting_update'
350
- )
351
- }
352
-
353
-
354
- const updateInteropPrivacySettingWithContactList = async (
355
- feature,
356
- setting,
357
- contacts,
358
- contactListType,
359
- dhash = 'none'
360
- ) => {
361
- return mexQuery(
362
- { feature, setting, contacts, contact_list_type: contactListType, dhash },
363
- INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_WITH_CONTACT_LIST,
364
- 'xwa2_interop_privacy_setting_with_contact_list_update'
365
- )
366
- }
367
-
368
-
369
- const queryInteropPrivacySettings = () =>
370
- mexQuery({}, INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_QUERY, 'xwa2_interop_privacy_settings')
371
-
372
-
373
- const getInteropGroupAddPrivacy = async (jid, integratorId) => {
374
- const result = await query({
375
- tag: 'iq',
376
- attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
377
- content: [
378
- {
379
- tag: 'privacy',
380
- attrs: { feature: 'GROUPADD' },
381
- content: [
382
- {
383
- tag: 'user',
384
- attrs: {
385
- jid,
386
- integrator_id: integratorId.toString()
387
- }
388
- }
389
- ]
390
- }
391
- ]
392
- })
393
- const privacyNode = getBinaryNodeChild(result, 'privacy')
394
- const userNode = getBinaryNodeChild(privacyNode, 'user')
395
-
396
-
397
- return userNode?.attrs?.result === 'allowed'
398
- }
399
-
400
- return {
401
- ...sock,
402
- fetchIntegrators,
403
- acceptInteropTOS,
404
- optInIntegrators,
405
- optOutIntegrators,
406
- resolveInteropUser,
407
- resolveInteropUsers,
408
- getReachabilitySettings,
409
- setReachabilitySettings,
410
- blockInteropUser,
411
- unblockInteropUser,
412
- reportInteropSpam,
413
- trustInteropContact,
414
- initInterop,
415
- resetInteropSession,
416
- createInteropGroup,
417
- leaveInteropGroup,
418
- addParticipantsToInteropGroup,
419
- queryInteropGroupInfo,
420
- queryInteropPrivacySettings,
421
- updateInteropPrivacySetting,
422
- updateInteropPrivacySettingWithContactList,
423
- getInteropGroupAddPrivacy,
424
- INTEGRATOR_BIRDYCHAT,
425
- INTEGRATOR_HAIKET,
426
- INTEROP_MEX_QUERY_IDS
427
- }
428
- }
429
-
430
- exports.makeInteropSocket = makeInteropSocket
@@ -1,214 +0,0 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.makeManagedAccountSocket = void 0
4
-
5
- const { executeWMexQuery } = require('./mex')
6
-
7
- const MANAGED_ACCOUNT_MEX_IDS = {
8
-
9
- QUERY: '27232244463035262',
10
- INITIATE_LINKING: '26671873552498548',
11
- VALIDATE_LINKING: '35449808311284430',
12
- ACCEPT_LINKING: '26708926155457677',
13
- COMPLETE_LINKING: '26866501363013203',
14
- REVOKE_LINKING: '27435058196100677',
15
- SYNC_ACTIVITIES: '26594352680227840',
16
- UPDATE_PIN: '27653949584193082',
17
- GET_SPONSOR_AGE_VERIFICATION: '26433623289634522',
18
-
19
- PAYMENTS_PASSKEY_HAS_CREDENTIAL: '26328228500182426',
20
- PAYMENTS_PASSKEY_ENROLL_CHALLENGE: '25233109079721001',
21
- PAYMENTS_PASSKEY_ENROLL_VERIFY: '26563835863283058',
22
- PAYMENTS_PASSKEY_REGISTER_FINISH: '26658791263822236',
23
- PAYMENTS_PASSKEY_AUTH_CHALLENGE: '26425370627105628',
24
- PAYMENTS_PASSKEY_TOGGLE_ON: '25841989828834577',
25
- PAYMENTS_PASSKEY_TOGGLE_OFF: '26267673096201391',
26
- PAYMENTS_PASSKEY_TOGGLE_CHALLENGE: '26133062322993192',
27
- PAYMENTS_PASSKEY_TOGGLE_CLEANUP: '26492078607084840',
28
- PAYMENTS_PASSKEY_CLEANUP: '26538338805859092',
29
- PAYMENTS_IS_RECOVERABLE: '27351347491148282',
30
-
31
- UPI_SEND_OTP: '25829794080022469',
32
- UPI_VERIFY_OTP: '34104109149204669',
33
-
34
- IPLS_HANDSHAKE_INIT: '25523747957257182',
35
- IPLS_CLIENT_HELLO: '25376330595367716',
36
- IPLSD_CLIENT_HELLO_V2: '26561780580105679',
37
- IPLSD_CLIENT_INIT_V2: '26547193874915344'
38
- }
39
-
40
- const makeManagedAccountSocket = sock => {
41
- const { query, generateMessageTag } = sock
42
-
43
- const mexQuery = (variables, queryId, dataPath) =>
44
- executeWMexQuery(variables, queryId, dataPath, query, generateMessageTag)
45
-
46
-
47
-
48
- const managedAccountQuery = jid => mexQuery({ jid }, MANAGED_ACCOUNT_MEX_IDS.QUERY, 'xwa2_managed_account')
49
-
50
- const managedAccountInitiateLinking = phoneNumber =>
51
- mexQuery(
52
- { phone_number: phoneNumber },
53
- MANAGED_ACCOUNT_MEX_IDS.INITIATE_LINKING,
54
- 'xwa2_managed_account_initiate_linking'
55
- )
56
-
57
- const managedAccountValidateLinking = (linkingToken, sponsorJid) =>
58
- mexQuery(
59
- { linking_token: linkingToken, sponsor_jid: sponsorJid },
60
- MANAGED_ACCOUNT_MEX_IDS.VALIDATE_LINKING,
61
- 'xwa2_managed_account_validate_linking'
62
- )
63
-
64
- const managedAccountAcceptLinking = linkingToken =>
65
- mexQuery(
66
- { linking_token: linkingToken },
67
- MANAGED_ACCOUNT_MEX_IDS.ACCEPT_LINKING,
68
- 'xwa2_managed_account_accept_linking'
69
- )
70
-
71
- const managedAccountCompleteLinking = linkingToken =>
72
- mexQuery(
73
- { linking_token: linkingToken },
74
- MANAGED_ACCOUNT_MEX_IDS.COMPLETE_LINKING,
75
- 'xwa2_managed_account_complete_linking'
76
- )
77
-
78
- const managedAccountRevokeLinking = sponsoredJid =>
79
- mexQuery(
80
- { sponsored_jid: sponsoredJid },
81
- MANAGED_ACCOUNT_MEX_IDS.REVOKE_LINKING,
82
- 'xwa2_managed_account_revoke_linking'
83
- )
84
-
85
- const managedAccountSyncActivities = (jid, lastSyncTime = null) => {
86
- const variables = { jid }
87
- if (lastSyncTime != null) variables.last_sync_time = lastSyncTime
88
- return mexQuery(variables, MANAGED_ACCOUNT_MEX_IDS.SYNC_ACTIVITIES, 'xwa2_managed_account_sync_activities')
89
- }
90
-
91
- const managedAccountUpdatePin = (oldPin, newPin) =>
92
- mexQuery(
93
- { input: { old_pin: oldPin, new_pin: newPin } },
94
- MANAGED_ACCOUNT_MEX_IDS.UPDATE_PIN,
95
- 'xwa2_managed_account_update_pin'
96
- )
97
-
98
- const managedAccountGetSponsorAgeVerification = sponsorJid =>
99
- mexQuery(
100
- { sponsor_jid: sponsorJid },
101
- MANAGED_ACCOUNT_MEX_IDS.GET_SPONSOR_AGE_VERIFICATION,
102
- 'xwa2_managed_account_sponsor_age_verification'
103
- )
104
-
105
-
106
-
107
- const paymentsPasskeyHasCredential = () =>
108
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_HAS_CREDENTIAL, 'xwa2_payments_passkey_has_credential')
109
-
110
- const paymentsPasskeyEnrollChallenge = () =>
111
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_ENROLL_CHALLENGE, 'xwa2_payments_passkey_enroll_challenge')
112
-
113
- const paymentsPasskeyEnrollVerify = (credentialId, attestationObject, clientDataJson) =>
114
- mexQuery(
115
- { credential_id: credentialId, attestation_object: attestationObject, client_data_json: clientDataJson },
116
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_ENROLL_VERIFY,
117
- 'xwa2_payments_passkey_enroll_verify'
118
- )
119
-
120
- const paymentsPasskeyRegisterFinish = (credentialId, attestationObject, clientDataJson) =>
121
- mexQuery(
122
- { credential_id: credentialId, attestation_object: attestationObject, client_data_json: clientDataJson },
123
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_REGISTER_FINISH,
124
- 'xwa2_payments_passkey_register_finish'
125
- )
126
-
127
- const paymentsPasskeyAuthChallenge = credentialId =>
128
- mexQuery(
129
- { credential_id: credentialId },
130
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_AUTH_CHALLENGE,
131
- 'xwa2_payments_passkey_auth_challenge'
132
- )
133
-
134
- const paymentsPasskeyToggleOn = () =>
135
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_ON, 'xwa2_payments_passkey_toggle_on')
136
-
137
- const paymentsPasskeyToggleOff = () =>
138
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_OFF, 'xwa2_payments_passkey_toggle_off')
139
-
140
- const paymentsPasskeyToggleChallenge = credentialId =>
141
- mexQuery(
142
- { credential_id: credentialId },
143
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_CHALLENGE,
144
- 'xwa2_payments_passkey_toggle_challenge'
145
- )
146
-
147
- const paymentsPasskeyToggleCleanup = () =>
148
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_CLEANUP, 'xwa2_payments_passkey_toggle_cleanup')
149
-
150
- const paymentsPasskeyCleanup = () =>
151
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_CLEANUP, 'xwa2_payments_passkey_cleanup')
152
-
153
- const paymentsIsAccountRecoverable = () =>
154
- mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_IS_RECOVERABLE, 'xwa2_payments_is_account_recoverable')
155
-
156
-
157
-
158
- const upiSendOtp = phoneNumber =>
159
- mexQuery({ phone_number: phoneNumber }, MANAGED_ACCOUNT_MEX_IDS.UPI_SEND_OTP, 'xwa2_upi_send_otp')
160
-
161
- const upiVerifyOtp = (phoneNumber, otp) =>
162
- mexQuery({ phone_number: phoneNumber, otp }, MANAGED_ACCOUNT_MEX_IDS.UPI_VERIFY_OTP, 'xwa2_upi_verify_otp')
163
-
164
-
165
-
166
- const iplsHandshakeInit = payload =>
167
- mexQuery({ payload }, MANAGED_ACCOUNT_MEX_IDS.IPLS_HANDSHAKE_INIT, 'xwa2_ipls_handshake_init')
168
-
169
- const iplsClientHello = payload =>
170
- mexQuery({ payload }, MANAGED_ACCOUNT_MEX_IDS.IPLS_CLIENT_HELLO, 'xwa2_ipls_client_hello')
171
-
172
- const iplsdClientHelloV2 = payload =>
173
- mexQuery({ payload }, MANAGED_ACCOUNT_MEX_IDS.IPLSD_CLIENT_HELLO_V2, 'xwa2_iplsd_client_hello_v2')
174
-
175
- const iplsdClientInitV2 = payload =>
176
- mexQuery({ payload }, MANAGED_ACCOUNT_MEX_IDS.IPLSD_CLIENT_INIT_V2, 'xwa2_iplsd_client_init_v2')
177
-
178
- return {
179
- ...sock,
180
-
181
- managedAccountQuery,
182
- managedAccountInitiateLinking,
183
- managedAccountValidateLinking,
184
- managedAccountAcceptLinking,
185
- managedAccountCompleteLinking,
186
- managedAccountRevokeLinking,
187
- managedAccountSyncActivities,
188
- managedAccountUpdatePin,
189
- managedAccountGetSponsorAgeVerification,
190
-
191
- paymentsPasskeyHasCredential,
192
- paymentsPasskeyEnrollChallenge,
193
- paymentsPasskeyEnrollVerify,
194
- paymentsPasskeyRegisterFinish,
195
- paymentsPasskeyAuthChallenge,
196
- paymentsPasskeyToggleOn,
197
- paymentsPasskeyToggleOff,
198
- paymentsPasskeyToggleChallenge,
199
- paymentsPasskeyToggleCleanup,
200
- paymentsPasskeyCleanup,
201
- paymentsIsAccountRecoverable,
202
-
203
- upiSendOtp,
204
- upiVerifyOtp,
205
-
206
- iplsHandshakeInit,
207
- iplsClientHello,
208
- iplsdClientHelloV2,
209
- iplsdClientInitV2,
210
- MANAGED_ACCOUNT_MEX_IDS
211
- }
212
- }
213
-
214
- exports.makeManagedAccountSocket = makeManagedAccountSocket