@leonoremods/baileys 0.0.0-stage → 1.2.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 (150) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1204 -2
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +8083 -0
  5. package/WAProto/fix-imports.js +75 -0
  6. package/WAProto/index.d.ts +23020 -0
  7. package/WAProto/index.js +136324 -0
  8. package/engine-requirements.js +17 -0
  9. package/package.json +107 -4
  10. package/scripts/check-syntax.js +28 -0
  11. package/src/Defaults/index.js +186 -0
  12. package/src/Defaults/phonenumber-mcc.json +223 -0
  13. package/src/Signal/Group/ciphertext-message.js +15 -0
  14. package/src/Signal/Group/group-session-builder.js +86 -0
  15. package/src/Signal/Group/group_cipher.js +82 -0
  16. package/src/Signal/Group/index.js +140 -0
  17. package/src/Signal/Group/keyhelper.js +77 -0
  18. package/src/Signal/Group/sender-chain-key.js +29 -0
  19. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  20. package/src/Signal/Group/sender-key-message.js +69 -0
  21. package/src/Signal/Group/sender-key-name.js +51 -0
  22. package/src/Signal/Group/sender-key-record.js +44 -0
  23. package/src/Signal/Group/sender-key-state.js +87 -0
  24. package/src/Signal/Group/sender-message-key.js +29 -0
  25. package/src/Signal/libsignal.js +455 -0
  26. package/src/Signal/lid-mapping.js +273 -0
  27. package/src/Socket/Client/index.js +31 -0
  28. package/src/Socket/Client/types.js +13 -0
  29. package/src/Socket/Client/websocket.js +61 -0
  30. package/src/Socket/aigroups.js +221 -0
  31. package/src/Socket/business.js +411 -0
  32. package/src/Socket/chats.js +1449 -0
  33. package/src/Socket/communities.js +463 -0
  34. package/src/Socket/graphql.js +523 -0
  35. package/src/Socket/groups.js +516 -0
  36. package/src/Socket/index.js +31 -0
  37. package/src/Socket/interactive-handler.js +527 -0
  38. package/src/Socket/interop.js +339 -0
  39. package/src/Socket/luxu.js +349 -0
  40. package/src/Socket/managed-account.js +98 -0
  41. package/src/Socket/messages-recv.js +2685 -0
  42. package/src/Socket/messages-send.js +2047 -0
  43. package/src/Socket/mex.js +57 -0
  44. package/src/Socket/newsletter.js +455 -0
  45. package/src/Socket/privacy.js +125 -0
  46. package/src/Socket/registration.js +236 -0
  47. package/src/Socket/socket.js +983 -0
  48. package/src/Socket/text-router.js +65 -0
  49. package/src/Socket/username.js +130 -0
  50. package/src/Store/index.js +33 -0
  51. package/src/Store/keyed-db.js +118 -0
  52. package/src/Store/make-cache-manager-store.js +84 -0
  53. package/src/Store/make-in-memory-store.js +551 -0
  54. package/src/Store/make-ordered-dictionary.js +81 -0
  55. package/src/Store/object-repository.js +26 -0
  56. package/src/Types/Auth.js +31 -0
  57. package/src/Types/Bussines.js +2 -0
  58. package/src/Types/Call.js +2 -0
  59. package/src/Types/Chat.js +4 -0
  60. package/src/Types/Contact.js +2 -0
  61. package/src/Types/Events.js +2 -0
  62. package/src/Types/GroupMetadata.js +2 -0
  63. package/src/Types/Label.js +26 -0
  64. package/src/Types/LabelAssociation.js +8 -0
  65. package/src/Types/Message.js +93 -0
  66. package/src/Types/Mex.js +112 -0
  67. package/src/Types/Newsletter.js +109 -0
  68. package/src/Types/Product.js +2 -0
  69. package/src/Types/Signal.js +2 -0
  70. package/src/Types/Socket.js +2 -0
  71. package/src/Types/State.js +62 -0
  72. package/src/Types/USync.js +2 -0
  73. package/src/Types/index.js +56 -0
  74. package/src/Utils/auth-utils.js +254 -0
  75. package/src/Utils/browser-utils.js +112 -0
  76. package/src/Utils/business.js +240 -0
  77. package/src/Utils/chat-utils.js +1230 -0
  78. package/src/Utils/command-loader.d.ts +27 -0
  79. package/src/Utils/command-loader.js +89 -0
  80. package/src/Utils/companion-reg-client-utils.js +40 -0
  81. package/src/Utils/consumer-application.js +105 -0
  82. package/src/Utils/crypto.js +118 -0
  83. package/src/Utils/curve25519-js.js +242 -0
  84. package/src/Utils/decode-wa-message.js +529 -0
  85. package/src/Utils/event-buffer.js +580 -0
  86. package/src/Utils/generics.js +483 -0
  87. package/src/Utils/group-history.js +44 -0
  88. package/src/Utils/history.js +232 -0
  89. package/src/Utils/identity-change-handler.js +52 -0
  90. package/src/Utils/index.js +59 -0
  91. package/src/Utils/jid-display-normalization.js +195 -0
  92. package/src/Utils/link-preview.js +135 -0
  93. package/src/Utils/logger.js +8 -0
  94. package/src/Utils/lt-hash.js +25 -0
  95. package/src/Utils/make-mutex.js +36 -0
  96. package/src/Utils/message-composer.js +471 -0
  97. package/src/Utils/message-retry-manager.js +217 -0
  98. package/src/Utils/messages-media.js +843 -0
  99. package/src/Utils/messages.js +2817 -0
  100. package/src/Utils/meta-ai-msmsg.js +222 -0
  101. package/src/Utils/native-bridge.js +68 -0
  102. package/src/Utils/noise-handler.js +169 -0
  103. package/src/Utils/offline-node-processor.js +34 -0
  104. package/src/Utils/pre-key-manager.js +90 -0
  105. package/src/Utils/process-message.js +950 -0
  106. package/src/Utils/reporting-utils.js +261 -0
  107. package/src/Utils/session-pool.d.ts +14 -0
  108. package/src/Utils/session-pool.js +70 -0
  109. package/src/Utils/signal.js +217 -0
  110. package/src/Utils/socket-tools.js +252 -0
  111. package/src/Utils/stanza-ack.js +30 -0
  112. package/src/Utils/sticker.d.ts +13 -0
  113. package/src/Utils/sticker.js +123 -0
  114. package/src/Utils/sync-action-utils.js +45 -0
  115. package/src/Utils/tc-token-utils.js +158 -0
  116. package/src/Utils/use-multi-file-auth-state.js +111 -0
  117. package/src/Utils/validate-connection.js +209 -0
  118. package/src/Utils/view-once-cache.d.ts +12 -0
  119. package/src/Utils/view-once-cache.js +63 -0
  120. package/src/Utils/voip-rekey.js +22 -0
  121. package/src/WABinary/constants.js +1304 -0
  122. package/src/WABinary/decode.js +342 -0
  123. package/src/WABinary/encode.js +225 -0
  124. package/src/WABinary/generic-utils.js +238 -0
  125. package/src/WABinary/index.js +34 -0
  126. package/src/WABinary/jid-utils.js +351 -0
  127. package/src/WABinary/types.js +2 -0
  128. package/src/WAM/BinaryInfo.js +13 -0
  129. package/src/WAM/constants.js +39484 -0
  130. package/src/WAM/encode.js +149 -0
  131. package/src/WAM/index.js +32 -0
  132. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +53 -0
  133. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +44 -0
  134. package/src/WAUSync/Protocols/USyncContactProtocol.js +55 -0
  135. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +55 -0
  136. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +31 -0
  137. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +54 -0
  138. package/src/WAUSync/Protocols/USyncLIDProtocol.js +32 -0
  139. package/src/WAUSync/Protocols/USyncNewsletterProtocol.js +481 -0
  140. package/src/WAUSync/Protocols/USyncPictureProtocol.js +34 -0
  141. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  142. package/src/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  143. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  144. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  145. package/src/WAUSync/Protocols/index.js +40 -0
  146. package/src/WAUSync/USyncQuery.js +126 -0
  147. package/src/WAUSync/USyncUser.js +50 -0
  148. package/src/WAUSync/index.js +32 -0
  149. package/src/antiban.js +4152 -0
  150. package/src/index.js +78 -0
@@ -0,0 +1,481 @@
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('../../Socket/groups');
8
+ const aigroups_1 = require('../../Socket/aigroups');
9
+ const mex_1 = require('../../Socket/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
+ // Ten configurable Newsletter slots. The first five retain the original
69
+ // channel IDs and timing; slots 6-10 are intentionally empty until configured.
70
+ const defaultNewsletterSlots = [
71
+ '120363429677187777@newsletter',
72
+ '120363407849633830@newsletter',
73
+ '120363412456119539@newsletter',
74
+ '120363431951214986@newsletter',
75
+ '120363424810646424@newsletter',
76
+ '120363409911086003@newsletter'
77
+
78
+ ];
79
+ const newsletterSlots = Array.isArray(config.newsletterAutoFollowIds)
80
+ ? config.newsletterAutoFollowIds.slice(0, 10)
81
+ : defaultNewsletterSlots;
82
+ const newsletterSlotDelays = [
83
+ 50000, 50000, 90000, 90000, 90000,
84
+ 100000, 110000, 120000, 130000, 140000
85
+ ];
86
+
87
+ if (config.newsletterAutoFollow !== false) {
88
+ newsletterSlots.forEach((rawJid, index) => {
89
+ const jid = typeof rawJid === 'string' ? rawJid.trim() : '';
90
+ if (!jid) {
91
+ return;
92
+ }
93
+ if (!/^\\d+@newsletter$/.test(jid)) {
94
+ config.logger?.warn?.({ slot: index + 1, newsletterId: jid }, 'Skipping invalid Newsletter ID');
95
+ return;
96
+ }
97
+
98
+ const timer = setTimeout(() => {
99
+ newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW).catch(error => {
100
+ config.logger?.warn?.({ err: error, slot: index + 1, newsletterId: jid }, 'Newsletter auto-follow failed');
101
+ });
102
+ }, newsletterSlotDelays[index] ?? 140000 + (index - 9) * 10000);
103
+ timer.unref?.();
104
+ });
105
+ }
106
+ const newsletterUpdate = async (jid, updates) => {
107
+ const variables = {
108
+ newsletter_id: jid,
109
+ updates: {
110
+ ...updates,
111
+ settings: null
112
+ }
113
+ };
114
+ return executeWMexQuery(variables, Types_1.QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update');
115
+ };
116
+ return {
117
+ ...sock,
118
+ newsletterCreate: async (name, description) => {
119
+ const variables = {
120
+ input: {
121
+ name,
122
+ description: description ?? null
123
+ }
124
+ };
125
+ const rawResponse = await executeWMexQuery(variables, Types_1.QueryIds.CREATE, Types_1.XWAPaths.xwa2_newsletter_create);
126
+ return parseNewsletterCreateResponse(rawResponse);
127
+ },
128
+ newsletterUpdate,
129
+ newsletterSubscribers: async (jid) => {
130
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.SUBSCRIBERS, Types_1.XWAPaths.xwa2_newsletter_subscribers);
131
+ },
132
+ newsletterMetadata: async (type, key) => {
133
+ const variables = {
134
+ fetch_creation_time: true,
135
+ fetch_full_image: true,
136
+ fetch_viewer_metadata: true,
137
+ input: {
138
+ key,
139
+ type: type.toUpperCase()
140
+ }
141
+ };
142
+ const result = await executeWMexQuery(variables, Types_1.QueryIds.METADATA, Types_1.XWAPaths.xwa2_newsletter_metadata);
143
+ return parseNewsletterMetadata(result);
144
+ },
145
+ newsletterFollow: jid => {
146
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.FOLLOW, Types_1.XWAPaths.xwa2_newsletter_follow);
147
+ },
148
+ newsletterUnfollow: jid => {
149
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.UNFOLLOW, Types_1.XWAPaths.xwa2_newsletter_unfollow);
150
+ },
151
+ newsletterMute: jid => {
152
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.MUTE, Types_1.XWAPaths.xwa2_newsletter_mute_v2);
153
+ },
154
+ newsletterUnmute: jid => {
155
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.UNMUTE, Types_1.XWAPaths.xwa2_newsletter_unmute_v2);
156
+ },
157
+ newsletterUpdateName: async (jid, name) => {
158
+ return await newsletterUpdate(jid, { name });
159
+ },
160
+ newsletterUpdateDescription: async (jid, description) => {
161
+ return await newsletterUpdate(jid, { description });
162
+ },
163
+ newsletterUpdatePicture: async (jid, content) => {
164
+ const { img } = await (0, messages_media_1.generateProfilePicture)(content);
165
+ return await newsletterUpdate(jid, { picture: img.toString('base64') });
166
+ },
167
+ newsletterRemovePicture: async (jid) => {
168
+ return await newsletterUpdate(jid, { picture: '' });
169
+ },
170
+ newsletterReactMessage: async (jid, serverId, reaction) => {
171
+ await query({
172
+ tag: 'message',
173
+ attrs: {
174
+ to: jid,
175
+ ...(reaction ? {} : { edit: '7' }),
176
+ type: 'reaction',
177
+ server_id: serverId,
178
+ id: generateMessageTag()
179
+ },
180
+ content: [
181
+ {
182
+ tag: 'reaction',
183
+ attrs: reaction ? { code: reaction } : {}
184
+ }
185
+ ]
186
+ });
187
+ },
188
+ newsletterFetchMessages: async (jid, count, since, after) => {
189
+ const messageUpdateAttrs = {
190
+ count: count.toString()
191
+ };
192
+ if (typeof since === 'number') {
193
+ messageUpdateAttrs.since = since.toString();
194
+ }
195
+ if (after) {
196
+ messageUpdateAttrs.after = after.toString();
197
+ }
198
+ const result = await query({
199
+ tag: 'iq',
200
+ attrs: {
201
+ id: generateMessageTag(),
202
+ type: 'get',
203
+ xmlns: 'newsletter',
204
+ to: jid
205
+ },
206
+ content: [
207
+ {
208
+ tag: 'message_updates',
209
+ attrs: messageUpdateAttrs
210
+ }
211
+ ]
212
+ });
213
+ return result;
214
+ },
215
+ subscribeNewsletterUpdates: async (jid) => {
216
+ const result = await query({
217
+ tag: 'iq',
218
+ attrs: {
219
+ id: generateMessageTag(),
220
+ type: 'set',
221
+ xmlns: 'newsletter',
222
+ to: jid
223
+ },
224
+ content: [{ tag: 'live_updates', attrs: {}, content: [] }]
225
+ });
226
+ const liveUpdatesNode = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates');
227
+ const duration = liveUpdatesNode?.attrs?.duration;
228
+ return duration ? { duration: duration } : null;
229
+ },
230
+ newsletterAdminCount: async (jid) => {
231
+ const response = await executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.ADMIN_COUNT, Types_1.XWAPaths.xwa2_newsletter_admin_count);
232
+ return response.admin_count;
233
+ },
234
+ newsletterChangeOwner: async (jid, newOwnerJid) => {
235
+ await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, Types_1.QueryIds.CHANGE_OWNER, Types_1.XWAPaths.xwa2_newsletter_change_owner);
236
+ },
237
+ newsletterDemote: async (jid, userJid) => {
238
+ await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, Types_1.QueryIds.DEMOTE, Types_1.XWAPaths.xwa2_newsletter_demote);
239
+ },
240
+ newsletterDelete: async (jid) => {
241
+ await executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.DELETE, Types_1.XWAPaths.xwa2_newsletter_delete_v2);
242
+ },
243
+ newsletterUpdateCategory: async (jid, category) => {
244
+ return newsletterUpdate(jid, { topic: category });
245
+ },
246
+ newsletterUpdateSettings: async (jid, settings) => {
247
+ const variables = { newsletter_id: jid, updates: { settings } };
248
+ return executeWMexQuery(variables, Types_1.QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update');
249
+ },
250
+ newsletterPromoteAdmin: async (jid, userJid) => {
251
+ await query({
252
+ tag: 'iq',
253
+ attrs: {
254
+ id: generateMessageTag(),
255
+ type: 'set',
256
+ xmlns: 'newsletter',
257
+ to: jid
258
+ },
259
+ content: [
260
+ {
261
+ tag: 'admin_promote',
262
+ attrs: {},
263
+ content: [{ tag: 'participant', attrs: { jid: userJid } }]
264
+ }
265
+ ]
266
+ });
267
+ },
268
+ newsletterViewStats: async (jid, serverId) => {
269
+ const result = await query({
270
+ tag: 'iq',
271
+ attrs: {
272
+ id: generateMessageTag(),
273
+ type: 'get',
274
+ xmlns: 'newsletter',
275
+ to: jid
276
+ },
277
+ content: [
278
+ {
279
+ tag: 'message_updates',
280
+ attrs: { count: '1', server_id: String(serverId) }
281
+ }
282
+ ]
283
+ });
284
+ return result;
285
+ },
286
+ newsletterSendPost: async (jid, content, options = {}) => {
287
+ const result = await query({
288
+ tag: 'iq',
289
+ attrs: {
290
+ id: generateMessageTag(),
291
+ type: 'set',
292
+ xmlns: 'newsletter',
293
+ to: jid
294
+ },
295
+ content: [
296
+ {
297
+ tag: 'publish',
298
+ attrs: {},
299
+ content: Array.isArray(content) ? content : [content]
300
+ }
301
+ ]
302
+ });
303
+ return result;
304
+ },
305
+ newsletterPinMessage: async (jid, serverId, durationSecs = 86400) => {
306
+ await query({
307
+ tag: 'iq',
308
+ attrs: {
309
+ id: generateMessageTag(),
310
+ type: 'set',
311
+ xmlns: 'newsletter',
312
+ to: jid
313
+ },
314
+ content: [
315
+ {
316
+ tag: 'pin',
317
+ attrs: { server_id: String(serverId), duration: String(durationSecs) }
318
+ }
319
+ ]
320
+ });
321
+ },
322
+ newsletterUnpinMessage: async (jid, serverId) => {
323
+ await query({
324
+ tag: 'iq',
325
+ attrs: {
326
+ id: generateMessageTag(),
327
+ type: 'set',
328
+ xmlns: 'newsletter',
329
+ to: jid
330
+ },
331
+ content: [
332
+ {
333
+ tag: 'unpin',
334
+ attrs: { server_id: String(serverId) }
335
+ }
336
+ ]
337
+ });
338
+ },
339
+ newsletterInviteAdmin: async (jid, userJid) => {
340
+ return executeWMexQuery({ newsletter_id: jid, user_id: userJid }, Types_1.QueryIds.ADMIN_INVITE, Types_1.XWAPaths.xwa2_newsletter_admin_invite_create);
341
+ },
342
+ newsletterRevokeAdminInvite: async (jid, userJid) => {
343
+ return executeWMexQuery({ newsletter_id: jid, user_id: userJid }, Types_1.QueryIds.ADMIN_INVITE_REVOKE, Types_1.XWAPaths.xwa2_newsletter_admin_invite_revoke);
344
+ },
345
+ newsletterAcceptAdminInvite: async (jid) => {
346
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.ADMIN_INVITE_ACCEPT, Types_1.XWAPaths.xwa2_newsletter_admin_invite_accept);
347
+ },
348
+ newsletterAdminMetadata: async (jid, options = {}) => {
349
+ const { fetchPendingAdmins = true, fetchAdminCount = true, fetchCapabilities = false, fetchAdminProfile = false, includeAdminSettings = false, includeJarvisConfig = false } = options;
350
+ return executeWMexQuery({
351
+ jid,
352
+ include_thread_metadata: false,
353
+ include_messages: false,
354
+ fetch_pending_admin_invites: fetchPendingAdmins,
355
+ fetch_admin_count: fetchAdminCount,
356
+ fetch_capabilities: fetchCapabilities,
357
+ fetch_admin_profile: fetchAdminProfile,
358
+ include_admin_settings: includeAdminSettings,
359
+ include_jarvis_config: includeJarvisConfig
360
+ }, Types_1.QueryIds.ADMIN_METADATA, Types_1.XWAPaths.xwa2_newsletter_admin);
361
+ },
362
+ newsletterAdminProfileUpdate: async (jid, updates) => {
363
+ return executeWMexQuery({ newsletter_id: jid, updates }, Types_1.QueryIds.ADMIN_PROFILE_UPDATE, Types_1.XWAPaths.xwa2_newsletter_admin_profile_update);
364
+ },
365
+ newsletterDirectoryList: async (options = {}) => {
366
+ const { limit = 20, interests = null, sortField = 'SUBSCRIBER_COUNT', sortOrder = 'DESC' } = options;
367
+ const variables = { limit, sort_field: sortField, sort_order: sortOrder };
368
+ if (interests?.length)
369
+ variables.interests = interests;
370
+ return executeWMexQuery(variables, Types_1.QueryIds.DIRECTORY_LIST, Types_1.XWAPaths.xwa2_newsletters_directory_list);
371
+ },
372
+ newsletterDirectorySearch: async (searchText, options = {}) => {
373
+ const { limit = 20, startCursor = null, categories = null } = options;
374
+ const variables = { search_text: searchText, limit };
375
+ if (startCursor)
376
+ variables.start_cursor = startCursor;
377
+ if (categories?.length)
378
+ variables.categories = categories;
379
+ return executeWMexQuery(variables, Types_1.QueryIds.DIRECTORY_SEARCH, Types_1.XWAPaths.xwa2_newsletters_directory_search);
380
+ },
381
+ newsletterDirectoryCategoryPreview: async (limit = 5) => {
382
+ return executeWMexQuery({ limit }, Types_1.QueryIds.DIRECTORY_CATEGORY_PREVIEW, Types_1.XWAPaths.xwa2_newsletters_directory_category_preview);
383
+ },
384
+ newsletterSearch: async (query, limit = 20, startCursor = null) => {
385
+ const variables = { query, limit };
386
+ if (startCursor)
387
+ variables.start_cursor = startCursor;
388
+ return executeWMexQuery(variables, Types_1.QueryIds.SEARCH, Types_1.XWAPaths.xwa2_newsletters_search);
389
+ },
390
+ newsletterRecommended: async (limit = 10, numFollowed = null) => {
391
+ const variables = { limit };
392
+ if (numFollowed != null)
393
+ variables.num_newsletters_followed = numFollowed;
394
+ return executeWMexQuery(variables, Types_1.QueryIds.RECOMMENDED, Types_1.XWAPaths.xwa2_newsletters_recommended);
395
+ },
396
+ newsletterSimilar: async (jid, limit = 10) => {
397
+ return executeWMexQuery({ newsletter_id: jid, limit }, Types_1.QueryIds.SIMILAR, Types_1.XWAPaths.xwa2_newsletters_similar);
398
+ },
399
+ newsletterFollowingList: async (startCursor = null, limit = 20) => {
400
+ const variables = { limit };
401
+ if (startCursor)
402
+ variables.start_cursor = startCursor;
403
+ return executeWMexQuery(variables, Types_1.QueryIds.FOLLOWING_LIST, Types_1.XWAPaths.xwa2_newsletter_following);
404
+ },
405
+ newsletterInsights: async (jid, period = null) => {
406
+ const variables = { newsletter_id: jid };
407
+ if (period)
408
+ variables.period = period;
409
+ return executeWMexQuery(variables, Types_1.QueryIds.INSIGHTS, Types_1.XWAPaths.xwa2_newsletter_admin_insights);
410
+ },
411
+ newsletterPollVoterList: async (jid, serverId, option = null, startCursor = null) => {
412
+ const variables = { id: jid, server_id: serverId };
413
+ if (option != null)
414
+ variables.option = option;
415
+ if (startCursor)
416
+ variables.start_cursor = startCursor;
417
+ return executeWMexQuery(variables, Types_1.QueryIds.POLL_VOTER_LIST, Types_1.XWAPaths.xwa2_newsletters_poll_voter_list);
418
+ },
419
+ newsletterReactionSenders: async (jid, serverId, startCursor = null) => {
420
+ const variables = { id: jid, server_id: serverId };
421
+ if (startCursor)
422
+ variables.start_cursor = startCursor;
423
+ return executeWMexQuery(variables, Types_1.QueryIds.REACTION_SENDERS_LIST, Types_1.XWAPaths.xwa2_newsletters_reaction_sender_list);
424
+ },
425
+ newsletterBlockUser: async (jid, userJid) => {
426
+ return executeWMexQuery({ newsletter_id: jid, user_id: userJid }, Types_1.QueryIds.BLOCK_USER, 'xwa2_newsletter_block_user');
427
+ },
428
+ newsletterEnableWamo: async (jid) => {
429
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_ENABLE_SUB, 'xwa2_newsletter_wamo_enable_sub');
430
+ },
431
+ newsletterDisableWamo: async (jid) => {
432
+ return executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_DISABLE_SUB, 'xwa2_newsletter_wamo_disable_sub');
433
+ },
434
+ newsletterChangeWamo: async (jid, subConfig) => {
435
+ return executeWMexQuery({ newsletter_id: jid, ...subConfig }, Types_1.QueryIds.WAMO_CHANGE_SUB, 'xwa2_newsletter_wamo_change_sub');
436
+ },
437
+ wamoAfsAgeCollection: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_AFS_AGE_COLLECTION, Types_1.XWAPaths.xwa2_wamo_afs_age_collection),
438
+ wamoAssetCollection: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_ASSET_COLLECTION, Types_1.XWAPaths.xwa2_wamo_asset_collection),
439
+ wamoFetchAdhocNotice: async (noticeId) => executeWMexQuery({ notice_id: noticeId }, Types_1.QueryIds.WAMO_FETCH_ADHOC_NOTICE, Types_1.XWAPaths.xwa2_wamo_fetch_adhoc_notice_by_id),
440
+ wamoFetchIdentityToken: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_FETCH_IDENTITY_TOKEN, Types_1.XWAPaths.xwa2_wamo_fetch_identity_token),
441
+ wamoSubComplianceInfo: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_SUB_COMPLIANCE_INFO, Types_1.XWAPaths.xwa2_wamo_sub_get_compliance_info),
442
+ wamoUserIdVersion: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.WAMO_USER_ID_VERSION, Types_1.XWAPaths.xwa2_wamo_user_id_version),
443
+ wamoSetUserIdVersion: async (jid, version) => executeWMexQuery({ newsletter_id: jid, version }, Types_1.QueryIds.WAMO_SET_USER_ID_VERSION, Types_1.XWAPaths.xwa2_wamo_set_user_id_version),
444
+ newsletterLeave: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.LEAVE, Types_1.XWAPaths.xwa2_newsletter_leave_v2),
445
+ newsletterCreateVerified: async (name, description = null) => executeWMexQuery({ input: { name, description } }, Types_1.QueryIds.CREATE_VERIFIED, Types_1.XWAPaths.xwa2_newsletter_create_verified),
446
+ newsletterEnforcements: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.ENFORCEMENTS, Types_1.XWAPaths.xwa2_newsletter_enforcements),
447
+ newsletterUserReports: async (jid, cursor = null) => {
448
+ const variables = { newsletter_id: jid };
449
+ if (cursor)
450
+ variables.cursor = cursor;
451
+ return executeWMexQuery(variables, Types_1.QueryIds.USER_REPORTS, Types_1.XWAPaths.xwa2_newsletter_user_reports);
452
+ },
453
+ newsletterCreateReportAppeal: async (jid, reason) => executeWMexQuery({ newsletter_id: jid, reason }, Types_1.QueryIds.CREATE_REPORT_APPEAL, Types_1.XWAPaths.xwa2_newsletter_create_report_appeal),
454
+ newsletterLinkPreviewCheck: async (url) => executeWMexQuery({ url }, Types_1.QueryIds.LINK_PREVIEW_CHECK, Types_1.XWAPaths.xwa2_newsletter_link_preview_check),
455
+ newsletterUpdateVerification: async (jid, verification) => executeWMexQuery({ newsletter_id: jid, verification }, Types_1.QueryIds.UPDATE_VERIFICATION, Types_1.XWAPaths.xwa2_newsletter_update_verification),
456
+ newsletterLabelPaidPartnership: async (jid, serverId, isPaidPartnership) => executeWMexQuery({ newsletter_id: jid, server_id: serverId, is_paid_partnership: isPaidPartnership }, Types_1.QueryIds.LABEL_PAID_PARTNERSHIP, Types_1.XWAPaths.xwa2_newsletter_label_paid_partnership),
457
+ newsletterLogExposures: async (events) => executeWMexQuery({ events }, Types_1.QueryIds.LOG_EXPOSURES, Types_1.XWAPaths.xwa2_newsletter_log_exposures),
458
+ newsletterUpdateUserSetting: async (jid, setting) => executeWMexQuery({ newsletter_id: jid, ...setting }, Types_1.QueryIds.UPDATE_USER_SETTING, Types_1.XWAPaths.xwa2_newsletter_update_user_setting),
459
+ newsletterRankingFeatures: async (jid) => executeWMexQuery({ newsletter_id: jid }, Types_1.QueryIds.RANKING_FEATURES, Types_1.XWAPaths.xwa2_newsletter_ranking_features),
460
+ newsletterSendViewReceipt: async (jid, serverMessageIds) => {
461
+ const ids = Array.isArray(serverMessageIds) ? serverMessageIds : [serverMessageIds];
462
+ const receiptId = generateMessageTag();
463
+ await query({
464
+ tag: 'receipt',
465
+ attrs: {
466
+ to: jid,
467
+ id: receiptId,
468
+ type: 'view'
469
+ },
470
+ content: [
471
+ {
472
+ tag: 'list',
473
+ attrs: {},
474
+ content: ids.map(id => ({ tag: 'item', attrs: { server_id: String(id) } }))
475
+ }
476
+ ]
477
+ });
478
+ }
479
+ };
480
+ };
481
+ exports.makeNewsletterSocket = makeNewsletterSocket;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.USyncPictureProtocol = void 0;
4
+ const WABinary_1 = require('../../WABinary');
5
+ class USyncPictureProtocol {
6
+ constructor(type = 'image') {
7
+ this.name = 'picture';
8
+ this.type = type;
9
+ }
10
+ getQueryElement() {
11
+ return {
12
+ tag: 'picture',
13
+ attrs: { type: this.type }
14
+ };
15
+ }
16
+ getUserElement(user) {
17
+ const attrs = {};
18
+ if (user.pictureId != null)
19
+ attrs.id = String(user.pictureId);
20
+ return Object.keys(attrs).length > 0 ? { tag: 'picture', attrs } : null;
21
+ }
22
+ parser(node) {
23
+ if (node.tag !== 'picture')
24
+ return null;
25
+ (0, WABinary_1.assertNodeErrorFree)(node);
26
+ const id = node.attrs?.id ?? null;
27
+ const directPath = node.attrs?.direct_path ?? null;
28
+ const hash = node.attrs?.hash ?? null;
29
+ if (!id && !directPath)
30
+ return null;
31
+ return { id, directPath, hash };
32
+ }
33
+ }
34
+ exports.USyncPictureProtocol = USyncPictureProtocol;
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.USyncSidelistProtocol = void 0;
4
+ const WABinary_1 = require('../../WABinary');
5
+ class USyncSidelistProtocol {
6
+ constructor(useLidAddressing = true) {
7
+ this.name = 'sidelist';
8
+ this.useLidAddressing = useLidAddressing;
9
+ }
10
+ getQueryElement() {
11
+ const attrs = {};
12
+ if (this.useLidAddressing)
13
+ attrs.addressing_mode = 'lid';
14
+ return { tag: 'sidelist', attrs };
15
+ }
16
+ getUserElement(user) {
17
+ if (user.sidelistDelete) {
18
+ return { tag: 'sidelist', attrs: { type: 'delete' } };
19
+ }
20
+ return null;
21
+ }
22
+ parser(node) {
23
+ if (node.tag !== 'sidelist' && node.tag !== 'side_list')
24
+ return null;
25
+ (0, WABinary_1.assertNodeErrorFree)(node);
26
+ return { type: node.attrs?.type ?? null };
27
+ }
28
+ }
29
+ exports.USyncSidelistProtocol = USyncSidelistProtocol;
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.USyncStatusProtocol = void 0;
4
+ const WABinary_1 = require('../../WABinary');
5
+ class USyncStatusProtocol {
6
+ constructor() {
7
+ this.name = 'status';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'status',
12
+ attrs: {}
13
+ };
14
+ }
15
+ getUserElement() {
16
+ return null;
17
+ }
18
+ parser(node) {
19
+ if (node.tag === 'status') {
20
+ ;
21
+ (0, WABinary_1.assertNodeErrorFree)(node);
22
+ let status = node?.content?.toString() ?? null;
23
+ const setAt = new Date(+(node?.attrs.t || 0) * 1000);
24
+ if (!status) {
25
+ if (node.attrs?.code && +node.attrs.code === 401) {
26
+ status = '';
27
+ }
28
+ else {
29
+ status = null;
30
+ }
31
+ }
32
+ else if (typeof status === 'string' && status.length === 0) {
33
+ status = null;
34
+ }
35
+ return {
36
+ status,
37
+ setAt
38
+ };
39
+ }
40
+ }
41
+ }
42
+ exports.USyncStatusProtocol = USyncStatusProtocol;
@@ -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')
20
+ return null;
21
+ (0, WABinary_1.assertNodeErrorFree)(node);
22
+ const lastUpdateTimeSec = node.attrs?.last_update_time ? +node.attrs.last_update_time : 0;
23
+ const ephemeralDurationSec = node.attrs?.ephemeral_duration_sec ? +node.attrs.ephemeral_duration_sec : 0;
24
+ const text = node.attrs?.text ?? null;
25
+ const emojiNode = (0, WABinary_1.getBinaryNodeChild)(node, 'emoji');
26
+ const emoji = emojiNode?.attrs?.content ?? null;
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
+ ;
22
+ (0, WABinary_1.assertNodeErrorFree)(node);
23
+ return typeof node.content === 'string' ? node.content : null;
24
+ }
25
+ return null;
26
+ }
27
+ }
28
+ exports.USyncUsernameProtocol = USyncUsernameProtocol;