@pontalabs/baileys 1.0.6 → 1.0.7

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 (185) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +839 -267
  3. package/WAProto/GenerateStatics.sh +4 -3
  4. package/WAProto/WAProto.proto +511 -1215
  5. package/WAProto/index.d.ts +55 -14017
  6. package/WAProto/index.js +29 -97689
  7. package/lib/Defaults/index.d.ts +74 -72
  8. package/lib/Defaults/index.js +108 -94
  9. package/lib/Signal/Group/ciphertext-message.d.ts +7 -8
  10. package/lib/Signal/Group/ciphertext-message.js +16 -9
  11. package/lib/Signal/Group/group-session-builder.d.ts +13 -11
  12. package/lib/Signal/Group/group-session-builder.js +61 -19
  13. package/lib/Signal/Group/group_cipher.d.ts +16 -14
  14. package/lib/Signal/Group/group_cipher.js +70 -41
  15. package/lib/Signal/Group/index.d.ts +11 -12
  16. package/lib/Signal/Group/index.js +61 -12
  17. package/lib/Signal/Group/keyhelper.d.ts +14 -9
  18. package/lib/Signal/Group/keyhelper.js +58 -10
  19. package/lib/Signal/Group/sender-chain-key.d.ts +13 -13
  20. package/lib/Signal/Group/sender-chain-key.js +34 -13
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -16
  22. package/lib/Signal/Group/sender-key-distribution-message.js +36 -28
  23. package/lib/Signal/Group/sender-key-message.d.ts +18 -18
  24. package/lib/Signal/Group/sender-key-message.js +45 -38
  25. package/lib/Signal/Group/sender-key-name.d.ts +15 -14
  26. package/lib/Signal/Group/sender-key-name.js +31 -20
  27. package/lib/Signal/Group/sender-key-record.d.ts +25 -24
  28. package/lib/Signal/Group/sender-key-record.js +35 -18
  29. package/lib/Signal/Group/sender-key-state.d.ts +34 -29
  30. package/lib/Signal/Group/sender-key-state.js +100 -37
  31. package/lib/Signal/Group/sender-message-key.d.ts +10 -11
  32. package/lib/Signal/Group/sender-message-key.js +22 -15
  33. package/lib/Signal/libsignal.d.ts +8 -5
  34. package/lib/Signal/libsignal.js +142 -288
  35. package/lib/Signal/lid-mapping.d.ts +28 -23
  36. package/lib/Signal/lid-mapping.js +184 -277
  37. package/lib/Socket/Client/index.d.ts +2 -3
  38. package/lib/Socket/Client/index.js +22 -3
  39. package/lib/Socket/Client/types.d.ts +15 -15
  40. package/lib/Socket/Client/types.js +15 -8
  41. package/lib/Socket/Client/websocket.d.ts +12 -12
  42. package/lib/Socket/Client/websocket.js +37 -29
  43. package/lib/Socket/business.d.ts +178 -208
  44. package/lib/Socket/business.js +127 -91
  45. package/lib/Socket/chats.d.ts +93 -120
  46. package/lib/Socket/chats.js +652 -727
  47. package/lib/Socket/community.js +10 -2
  48. package/lib/Socket/groups.d.ts +111 -143
  49. package/lib/Socket/groups.js +186 -165
  50. package/lib/Socket/index.d.ts +183 -252
  51. package/lib/Socket/index.js +18 -38
  52. package/lib/Socket/messages-recv.d.ts +167 -196
  53. package/lib/Socket/messages-recv.js +1567 -1443
  54. package/lib/Socket/messages-send.d.ts +158 -192
  55. package/lib/Socket/messages-send.js +1208 -1102
  56. package/lib/Socket/newsletter.d.ts +138 -163
  57. package/lib/Socket/newsletter.js +249 -153
  58. package/lib/Socket/socket.d.ts +36 -50
  59. package/lib/Socket/socket.js +820 -749
  60. package/lib/Store/index.d.ts +4 -4
  61. package/lib/Store/index.js +24 -4
  62. package/lib/Store/make-in-memory-store.d.ts +104 -44
  63. package/lib/Store/make-in-memory-store.js +213 -199
  64. package/lib/Store/make-ordered-dictionary.d.ts +12 -13
  65. package/lib/Store/make-ordered-dictionary.js +45 -38
  66. package/lib/Store/object-repository.d.ts +10 -11
  67. package/lib/Store/object-repository.js +16 -9
  68. package/lib/Types/Auth.d.ts +97 -93
  69. package/lib/Types/Auth.js +3 -2
  70. package/lib/Types/Bussines.js +3 -2
  71. package/lib/Types/Call.d.ts +13 -14
  72. package/lib/Types/Call.js +3 -2
  73. package/lib/Types/Chat.d.ts +97 -78
  74. package/lib/Types/Chat.js +9 -8
  75. package/lib/Types/Contact.d.ts +9 -12
  76. package/lib/Types/Contact.js +3 -2
  77. package/lib/Types/Events.d.ts +176 -206
  78. package/lib/Types/Events.js +3 -2
  79. package/lib/Types/GroupMetadata.d.ts +48 -53
  80. package/lib/Types/GroupMetadata.js +3 -2
  81. package/lib/Types/Label.d.ts +14 -13
  82. package/lib/Types/Label.js +30 -24
  83. package/lib/Types/LabelAssociation.d.ts +20 -15
  84. package/lib/Types/LabelAssociation.js +12 -6
  85. package/lib/Types/Message.d.ts +412 -248
  86. package/lib/Types/Message.js +19 -17
  87. package/lib/Types/Product.d.ts +71 -58
  88. package/lib/Types/Product.js +3 -2
  89. package/lib/Types/Signal.d.ts +82 -71
  90. package/lib/Types/Signal.js +3 -2
  91. package/lib/Types/Socket.d.ts +81 -76
  92. package/lib/Types/Socket.js +3 -3
  93. package/lib/Types/State.d.ts +19 -75
  94. package/lib/Types/State.js +14 -56
  95. package/lib/Types/USync.d.ts +8 -8
  96. package/lib/Types/USync.js +3 -2
  97. package/lib/Types/index.d.ts +62 -47
  98. package/lib/Types/index.js +50 -26
  99. package/lib/Utils/auth-utils.d.ts +10 -13
  100. package/lib/Utils/auth-utils.js +472 -213
  101. package/lib/Utils/business.d.ts +20 -14
  102. package/lib/Utils/business.js +134 -110
  103. package/lib/Utils/chat-utils.d.ts +70 -88
  104. package/lib/Utils/chat-utils.js +403 -466
  105. package/lib/Utils/crypto.d.ts +46 -27
  106. package/lib/Utils/crypto.js +188 -117
  107. package/lib/Utils/decode-wa-message.d.ts +45 -58
  108. package/lib/Utils/decode-wa-message.js +311 -212
  109. package/lib/Utils/event-buffer.d.ts +17 -14
  110. package/lib/Utils/event-buffer.js +296 -321
  111. package/lib/Utils/generics.d.ts +92 -66
  112. package/lib/Utils/generics.js +436 -270
  113. package/lib/Utils/history.d.ts +23 -24
  114. package/lib/Utils/history.js +76 -106
  115. package/lib/Utils/index.d.ts +21 -24
  116. package/lib/Utils/index.js +41 -24
  117. package/lib/Utils/link-preview.d.ts +14 -12
  118. package/lib/Utils/link-preview.js +75 -40
  119. package/lib/Utils/logger.d.ts +11 -10
  120. package/lib/Utils/logger.js +7 -3
  121. package/lib/Utils/lt-hash.d.ts +14 -8
  122. package/lib/Utils/lt-hash.js +53 -3
  123. package/lib/Utils/make-mutex.d.ts +7 -7
  124. package/lib/Utils/make-mutex.js +44 -28
  125. package/lib/Utils/message-retry-manager.d.ts +88 -115
  126. package/lib/Utils/message-retry-manager.js +160 -265
  127. package/lib/Utils/messages-media.d.ts +107 -105
  128. package/lib/Utils/messages-media.js +619 -548
  129. package/lib/Utils/messages.d.ts +66 -52
  130. package/lib/Utils/messages.js +1558 -1730
  131. package/lib/Utils/noise-handler.d.ts +18 -18
  132. package/lib/Utils/noise-handler.js +130 -176
  133. package/lib/Utils/process-message.d.ts +32 -43
  134. package/lib/Utils/process-message.js +282 -484
  135. package/lib/Utils/rich-message-utils.js +724 -1220
  136. package/lib/Utils/signal.d.ts +32 -37
  137. package/lib/Utils/signal.js +105 -140
  138. package/lib/Utils/use-multi-file-auth-state.d.ts +5 -5
  139. package/lib/Utils/use-multi-file-auth-state.js +120 -70
  140. package/lib/Utils/use-single-file-auth-state.d.ts +13 -11
  141. package/lib/Utils/use-single-file-auth-state.js +66 -92
  142. package/lib/Utils/validate-connection.d.ts +13 -11
  143. package/lib/Utils/validate-connection.js +113 -128
  144. package/lib/WABinary/constants.d.ts +27 -25
  145. package/lib/WABinary/constants.js +1292 -1451
  146. package/lib/WABinary/decode.d.ts +9 -7
  147. package/lib/WABinary/decode.js +189 -163
  148. package/lib/WABinary/encode.d.ts +3 -3
  149. package/lib/WABinary/encode.js +155 -110
  150. package/lib/WABinary/generic-utils.d.ts +27 -14
  151. package/lib/WABinary/generic-utils.js +105 -177
  152. package/lib/WABinary/index.d.ts +5 -6
  153. package/lib/WABinary/index.js +25 -6
  154. package/lib/WABinary/jid-utils.d.ts +54 -41
  155. package/lib/WABinary/jid-utils.js +152 -83
  156. package/lib/WABinary/types.d.ts +13 -10
  157. package/lib/WABinary/types.js +3 -2
  158. package/lib/WAM/BinaryInfo.d.ts +15 -8
  159. package/lib/WAM/BinaryInfo.js +14 -7
  160. package/lib/WAM/constants.d.ts +37 -30
  161. package/lib/WAM/constants.js +11983 -19465
  162. package/lib/WAM/encode.d.ts +3 -3
  163. package/lib/WAM/encode.js +109 -95
  164. package/lib/WAM/index.d.ts +3 -4
  165. package/lib/WAM/index.js +23 -4
  166. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -9
  167. package/lib/WAUSync/Protocols/USyncContactProtocol.js +21 -37
  168. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -19
  169. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +26 -18
  170. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -11
  171. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +20 -12
  172. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -11
  173. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +24 -16
  174. package/lib/WAUSync/Protocols/index.d.ts +6 -6
  175. package/lib/WAUSync/Protocols/index.js +26 -6
  176. package/lib/WAUSync/USyncQuery.d.ts +28 -27
  177. package/lib/WAUSync/USyncQuery.js +62 -68
  178. package/lib/WAUSync/USyncUser.d.ts +10 -15
  179. package/lib/WAUSync/USyncUser.js +19 -20
  180. package/lib/WAUSync/index.d.ts +3 -4
  181. package/lib/WAUSync/index.js +23 -4
  182. package/lib/index.d.ts +12 -11
  183. package/lib/index.js +39 -12
  184. package/package.json +42 -86
  185. package/engine-requirements.js +0 -10
@@ -1,181 +1,277 @@
1
- import { QueryIds, XWAPaths } from '../Types/index.js';
2
- import { generateProfilePicture } from '../Utils/messages-media.js';
3
- import { getBinaryNodeChild } from '../WABinary/index.js';
4
- import { makeGroupsSocket } from './groups.js';
5
- import { executeWMexQuery as genericExecuteWMexQuery } from './mex.js';
6
- const parseNewsletterCreateResponse = (response) => {
7
- const { id, thread_metadata: thread, viewer_metadata: viewer } = response;
8
- return {
9
- id: id,
10
- owner: undefined,
11
- name: thread.name.text,
12
- creation_time: parseInt(thread.creation_time, 10),
13
- description: thread.description.text,
14
- invite: thread.invite,
15
- subscribers: parseInt(thread.subscribers_count, 10),
16
- verification: thread.verification,
17
- picture: {
18
- id: thread.picture.id,
19
- directPath: thread.picture.direct_path
20
- },
21
- mute_state: viewer.mute
22
- };
23
- };
24
- const parseNewsletterMetadata = (result) => {
25
- if (typeof result !== 'object' || result === null) {
26
- return null;
27
- }
28
- if ('id' in result && typeof result.id === 'string') {
29
- return result;
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const Types_1 = require("../Types")
6
+ const Utils_1 = require("../Utils")
7
+ const WABinary_1 = require("../WABinary")
8
+ const groups_1 = require("./groups")
9
+
10
+ const makeNewsletterSocket = (config) => {
11
+ const sock = groups_1.makeGroupsSocket(config)
12
+ const { authState, signalRepository, query, generateMessageTag, ev } = sock
13
+ const encoder = new TextEncoder()
14
+
15
+
16
+ const newsletterQuery = async (jid, type, content) => (query({
17
+ tag: 'iq',
18
+ attrs: {
19
+ id: generateMessageTag(),
20
+ type,
21
+ xmlns: 'newsletter',
22
+ to: jid,
23
+ },
24
+ content
25
+ }))
26
+
27
+ const newsletterWMexQuery = async (jid, queryId, content) => (query({
28
+ tag: 'iq',
29
+ attrs: {
30
+ id: generateMessageTag(),
31
+ type: 'get',
32
+ xmlns: 'w:mex',
33
+ to: WABinary_1.S_WHATSAPP_NET,
34
+ },
35
+ content: [
36
+ {
37
+ tag: 'query',
38
+ attrs: { 'query_id': queryId },
39
+ content: encoder.encode(JSON.stringify({
40
+ variables: {
41
+ 'newsletter_id': jid,
42
+ ...content
43
+ }
44
+ }))
45
+ }
46
+ ]
47
+ }))
48
+
49
+ const parseFetchedUpdates = async (node, type) => {
50
+ let child
51
+ if (type === 'messages') {
52
+ child = WABinary_1.getBinaryNodeChild(node, 'messages')
53
+ } else {
54
+ const parent = WABinary_1.getBinaryNodeChild(node, 'message_updates')
55
+ child = WABinary_1.getBinaryNodeChild(parent, 'messages')
56
+ }
57
+
58
+ return await Promise.all(WABinary_1.getAllBinaryNodeChildren(child).map(async (messageNode) => {
59
+ messageNode.attrs.from = child?.attrs.jid
60
+
61
+ const views = parseInt(WABinary_1.getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0')
62
+ const reactionNode = WABinary_1.getBinaryNodeChild(messageNode, 'reactions')
63
+ const reactions = WABinary_1.getBinaryNodeChildren(reactionNode, 'reaction')
64
+ .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }))
65
+
66
+ const data = {
67
+ 'server_id': messageNode.attrs.server_id,
68
+ views,
69
+ reactions
70
+ }
71
+
72
+ if (type === 'messages') {
73
+ const { fullMessage: message, decrypt } = await Utils_1.decryptMessageNode(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger)
74
+ await decrypt()
75
+ data.message = message
76
+ }
77
+
78
+ return data
79
+ }))
30
80
  }
31
- if ('result' in result && typeof result.result === 'object' && result.result !== null && 'id' in result.result) {
32
- return result.result;
81
+
82
+ const newsletterMetadata = async (type, key, role) => {
83
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
84
+ input: {
85
+ key,
86
+ type: type.toUpperCase(),
87
+ view_role: role || 'GUEST'
88
+ },
89
+ fetch_viewer_metadata: true,
90
+ fetch_full_image: true,
91
+ fetch_creation_time: true
92
+ })
93
+
94
+ return extractNewsletterMetadata(result)
33
95
  }
34
- return null;
35
- };
36
- export const makeNewsletterSocket = (config) => {
37
- const sock = makeGroupsSocket(config);
38
- const { query, generateMessageTag } = sock;
39
- const executeWMexQuery = (variables, queryId, dataPath) => {
40
- return genericExecuteWMexQuery(variables, queryId, dataPath, query, generateMessageTag);
41
- };
42
- const newsletterUpdate = async (jid, updates) => {
43
- const variables = {
44
- newsletter_id: jid,
45
- updates: {
46
- ...updates,
47
- settings: null
48
- }
49
- };
50
- return executeWMexQuery(variables, QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update');
51
- };
96
+
97
+
52
98
  return {
53
99
  ...sock,
54
- newsletterCreate: async (name, description) => {
55
- const variables = {
56
- input: {
57
- name,
58
- description: description ?? null
59
- }
60
- };
61
- const rawResponse = await executeWMexQuery(variables, QueryIds.CREATE, XWAPaths.xwa2_newsletter_create);
62
- return parseNewsletterCreateResponse(rawResponse);
63
- },
64
- newsletterUpdate,
65
- newsletterSubscribers: async (jid) => {
66
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.SUBSCRIBERS, XWAPaths.xwa2_newsletter_subscribers);
67
- },
68
- newsletterMetadata: async (type, key) => {
69
- const variables = {
70
- fetch_creation_time: true,
71
- fetch_full_image: true,
72
- fetch_viewer_metadata: true,
73
- input: {
74
- key,
75
- type: type.toUpperCase()
76
- }
77
- };
78
- const result = await executeWMexQuery(variables, QueryIds.METADATA, XWAPaths.xwa2_newsletter_metadata);
79
- return parseNewsletterMetadata(result);
80
- },
81
- newsletterFollow: (jid) => {
82
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.FOLLOW, XWAPaths.xwa2_newsletter_join_v2);
83
- },
84
- newsletterUnfollow: (jid) => {
85
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNFOLLOW, XWAPaths.xwa2_newsletter_leave_v2);
100
+ newsletterQuery,
101
+ newsletterWMexQuery,
102
+ subscribeNewsletterUpdates: async (jid) => {
103
+ const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }])
104
+
105
+ return WABinary_1.getBinaryNodeChild(result, 'live_updates')?.attrs
86
106
  },
87
- newsletterMute: (jid) => {
88
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.MUTE, XWAPaths.xwa2_newsletter_mute_v2);
107
+ newsletterReactionMode: async (jid, mode) => {
108
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
109
+ updates: { settings: { 'reaction_codes': { value: mode } } }
110
+ })
89
111
  },
90
- newsletterUnmute: (jid) => {
91
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNMUTE, XWAPaths.xwa2_newsletter_unmute_v2);
112
+ newsletterUpdateDescription: async (jid, description) => {
113
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
114
+ updates: { description: description || '', settings: null }
115
+ })
92
116
  },
93
117
  newsletterUpdateName: async (jid, name) => {
94
- return await newsletterUpdate(jid, { name });
95
- },
96
- newsletterUpdateDescription: async (jid, description) => {
97
- return await newsletterUpdate(jid, { description });
118
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
119
+ updates: { name, settings: null }
120
+ })
98
121
  },
99
122
  newsletterUpdatePicture: async (jid, content) => {
100
- const { img } = await generateProfilePicture(content);
101
- return await newsletterUpdate(jid, { picture: img.toString('base64') });
123
+ const { img } = await Utils_1.generateProfilePicture(content)
124
+
125
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
126
+ updates: { picture: img.toString('base64'), settings: null }
127
+ })
102
128
  },
103
129
  newsletterRemovePicture: async (jid) => {
104
- return await newsletterUpdate(jid, { picture: '' });
130
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
131
+ updates: { picture: '', settings: null }
132
+ })
133
+ },
134
+ newsletterUnfollow: async (jid) => {
135
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW)
136
+ },
137
+ newsletterFollow: async (jid) => {
138
+ await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW)
105
139
  },
106
- newsletterReactMessage: async (jid, serverId, reaction) => {
140
+ newsletterUnmute: async (jid) => {
141
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE)
142
+ },
143
+ newsletterMute: async (jid) => {
144
+ await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE)
145
+ },
146
+ newsletterAction: async (jid, type) => {
147
+ await newsletterWMexQuery(jid, Types_1.QueryIds[type.toUpperCase()])
148
+ },
149
+ newsletterCreate: async (name, description, picture) => {
107
150
  await query({
108
- tag: 'message',
109
- attrs: {
110
- to: jid,
111
- ...(reaction ? {} : { edit: '7' }),
112
- type: 'reaction',
113
- server_id: serverId,
114
- id: generateMessageTag()
115
- },
116
- content: [
117
- {
118
- tag: 'reaction',
119
- attrs: reaction ? { code: reaction } : {}
120
- }
121
- ]
122
- });
123
- },
124
- newsletterFetchMessages: async (jid, count, since, after) => {
125
- const messageUpdateAttrs = {
126
- count: count.toString()
127
- };
128
- if (typeof since === 'number') {
129
- messageUpdateAttrs.since = since.toString();
130
- }
131
- if (after) {
132
- messageUpdateAttrs.after = after.toString();
133
- }
134
- const result = await query({
135
151
  tag: 'iq',
136
152
  attrs: {
153
+ to: WABinary_1.S_WHATSAPP_NET,
154
+ xmlns: 'tos',
137
155
  id: generateMessageTag(),
138
- type: 'get',
139
- xmlns: 'newsletter',
140
- to: jid
156
+ type: 'set'
141
157
  },
142
158
  content: [
143
159
  {
144
- tag: 'message_updates',
145
- attrs: messageUpdateAttrs
160
+ tag: 'notice',
161
+ attrs: {
162
+ id: '20601218',
163
+ stage: '5'
164
+ },
165
+ content: []
146
166
  }
147
167
  ]
148
- });
149
- return result;
150
- },
151
- subscribeNewsletterUpdates: async (jid) => {
152
- const result = await query({
153
- tag: 'iq',
154
- attrs: {
155
- id: generateMessageTag(),
156
- type: 'set',
157
- xmlns: 'newsletter',
158
- to: jid
159
- },
160
- content: [{ tag: 'live_updates', attrs: {}, content: [] }]
161
- });
162
- const liveUpdatesNode = getBinaryNodeChild(result, 'live_updates');
163
- const duration = liveUpdatesNode?.attrs?.duration;
164
- return duration ? { duration: duration } : null;
168
+ })
169
+
170
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
171
+ input: {
172
+ name,
173
+ description: description || null,
174
+ picture: picture ? (await Utils_1.generateProfilePicture(picture)).img.toString('base64') : null,
175
+ settings: {
176
+ reaction_codes: {
177
+ value: 'ALL'
178
+ }
179
+ }
180
+ }
181
+ })
182
+
183
+ return extractNewsletterMetadata(result, true)
165
184
  },
166
- newsletterAdminCount: async (jid) => {
167
- const response = await executeWMexQuery({ newsletter_id: jid }, QueryIds.ADMIN_COUNT, XWAPaths.xwa2_newsletter_admin_count);
168
- return response.admin_count;
185
+ newsletterMetadata,
186
+ newsletterFetchAllParticipating: async () => {
187
+ const data = {}
188
+
189
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.SUBSCRIBED)
190
+ const child = JSON.parse(WABinary_1.getBinaryNodeChild(result, 'result')?.content?.toString())
191
+ const newsletters = child.data[Types_1.XWAPaths.SUBSCRIBED]
192
+
193
+ for (const i of newsletters) {
194
+ if (!WABinary_1.isJidNewsletter(i.id)) {
195
+ continue
196
+ }
197
+
198
+ const metadata = await newsletterMetadata('JID', i.id)
199
+ data[metadata.id] = metadata
200
+ }
201
+
202
+ return data
169
203
  },
170
- newsletterChangeOwner: async (jid, newOwnerJid) => {
171
- await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, QueryIds.CHANGE_OWNER, XWAPaths.xwa2_newsletter_change_owner);
204
+ newsletterChangeOwner: async (jid, userLid) => {
205
+ await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
206
+ user_id: userLid
207
+ })
172
208
  },
173
- newsletterDemote: async (jid, userJid) => {
174
- await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, QueryIds.DEMOTE, XWAPaths.xwa2_newsletter_demote);
209
+ newsletterDemote: async (jid, userLid) => {
210
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
211
+ user_id: userLid
212
+ })
175
213
  },
176
214
  newsletterDelete: async (jid) => {
177
- await executeWMexQuery({ newsletter_id: jid }, QueryIds.DELETE, XWAPaths.xwa2_newsletter_delete_v2);
215
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE)
216
+ },
217
+ newsletterReactMessage: async (jid, serverId, code) => {
218
+ await query({
219
+ tag: 'message',
220
+ attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id: serverId, id: Utils_1.generateMessageID() },
221
+ content: [{
222
+ tag: 'reaction',
223
+ attrs: code ? { code } : {}
224
+ }]
225
+ })
226
+ },
227
+ newsletterFetchMessages: async (type, key, count, after) => {
228
+ const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
229
+ {
230
+ tag: 'messages',
231
+ attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: after?.toString() || '100' }
232
+ }
233
+ ])
234
+
235
+ return await parseFetchedUpdates(result, 'messages')
236
+ },
237
+ newsletterFetchUpdates: async (jid, count, after, since) => {
238
+ const result = await newsletterQuery(jid, 'get', [
239
+ {
240
+ tag: 'message_updates',
241
+ attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
242
+ }
243
+ ])
244
+
245
+ return await parseFetchedUpdates(result, 'updates')
178
246
  }
179
- };
180
- };
181
- //# sourceMappingURL=newsletter.js.map
247
+ }
248
+ }
249
+
250
+ const extractNewsletterMetadata = (node, isCreate) => {
251
+ const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
252
+ const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
253
+
254
+ const metadata = {
255
+ id: metadataPath?.id,
256
+ state: metadataPath?.state?.type,
257
+ creation_time: +metadataPath?.thread_metadata?.creation_time,
258
+ name: metadataPath?.thread_metadata?.name?.text,
259
+ nameTime: +metadataPath?.thread_metadata?.name?.update_time,
260
+ description: metadataPath?.thread_metadata?.description?.text,
261
+ descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
262
+ invite: metadataPath?.thread_metadata?.invite,
263
+ handle: metadataPath?.thread_metadata?.handle,
264
+ picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
265
+ preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
266
+ reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
267
+ subscribers: +metadataPath?.thread_metadata?.subscribers_count,
268
+ verification: metadataPath?.thread_metadata?.verification,
269
+ viewer_metadata: metadataPath?.viewer_metadata
270
+ }
271
+ return metadata
272
+ }
273
+
274
+ module.exports = {
275
+ makeNewsletterSocket,
276
+ extractNewsletterMetadata
277
+ }
@@ -1,9 +1,8 @@
1
- import { Boom } from '@hapi/boom';
2
- import { type NewChatMessageCapInfo, type ReachoutTimelockState, type SocketConfig } from '../Types/index.js';
3
- import { type BinaryNode } from '../WABinary/index.js';
4
- import { BinaryInfo } from '../WAM/BinaryInfo.js';
5
- import { USyncQuery } from '../WAUSync/index.js';
6
- import { WebSocketClient } from './Client/index.js';
1
+ import { Boom } from '@hapi/boom'
2
+ import { SocketConfig } from '../Types'
3
+ import { BinaryNode } from '../WABinary'
4
+ import { WebSocketClient } from './Client'
5
+
7
6
  /**
8
7
  * Connects to WA servers and performs:
9
8
  * - simple queries (no retry mechanism, wait for connection establishment)
@@ -11,49 +10,36 @@ import { WebSocketClient } from './Client/index.js';
11
10
  * - query phone connection
12
11
  */
13
12
  export declare const makeSocket: (config: SocketConfig) => {
14
- type: "md";
15
- ws: WebSocketClient;
16
- ev: import("../Types/index.js").BaileysEventEmitter & {
17
- process(handler: (events: Partial<import("../Types/index.js").BaileysEventMap>) => void | Promise<void>): () => void;
18
- buffer(): void;
19
- createBufferedFunction<A extends any[], T>(work: (...args: A) => Promise<T>): (...args: A) => Promise<T>;
20
- flush(): boolean;
21
- isBuffering(): boolean;
22
- destroy(): void;
23
- };
13
+ type: "md"
14
+ ws: WebSocketClient
15
+ ev: import("../Types").BaileysEventEmitter & {
16
+ process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void
17
+ buffer(): void
18
+ createBufferedFunction<A extends any[], T>(work: (...args: A) => Promise<T>): (...args: A) => Promise<T>
19
+ flush(force?: boolean | undefined): boolean
20
+ isBuffering(): boolean
21
+ }
24
22
  authState: {
25
- creds: import("../Types/index.js").AuthenticationCreds;
26
- keys: import("../Types/index.js").SignalKeyStoreWithTransaction;
27
- };
28
- signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore;
29
- readonly user: import("../Types/index.js").Contact | undefined;
30
- generateMessageTag: () => string;
31
- query: (node: BinaryNode, timeoutMs?: number) => Promise<any>;
32
- waitForMessage: <T>(msgId: string, timeoutMs?: number | undefined) => Promise<T | undefined>;
33
- waitForSocketOpen: () => Promise<void>;
34
- sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
35
- sendNode: (frame: BinaryNode) => Promise<void>;
36
- logout: (msg?: string) => Promise<void>;
37
- end: (error: Error | undefined) => Promise<void>;
38
- registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise<void>) => void;
39
- onUnexpectedError: (err: Error | Boom, msg: string) => void;
40
- uploadPreKeys: (count?: number) => Promise<void>;
41
- uploadPreKeysToServerIfRequired: () => Promise<void>;
42
- digestKeyBundle: () => Promise<void>;
43
- rotateSignedPreKey: () => Promise<void>;
44
- requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise<string>;
45
- updateServerTimeOffset: ({ attrs }: BinaryNode) => void;
46
- sendUnifiedSession: () => Promise<void>;
47
- wamBuffer: BinaryInfo;
23
+ creds: import("../Types").AuthenticationCreds
24
+ keys: import("../Types").SignalKeyStoreWithTransaction
25
+ }
26
+ signalRepository: import("../Types").SignalRepository
27
+ readonly user: import("../Types").Contact | undefined
28
+ generateMessageTag: () => string
29
+ query: (node: BinaryNode, timeoutMs?: number) => Promise<BinaryNode>
30
+ waitForMessage: <T_1>(msgId: string, timeoutMs?: number | undefined) => Promise<T_1>
31
+ waitForSocketOpen: () => Promise<void>
32
+ sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>
33
+ sendNode: (frame: BinaryNode) => Promise<void>
34
+ logout: (msg?: string) => Promise<void>
35
+ end: (error: Error | undefined) => void
36
+ onUnexpectedError: (err: Error | Boom, msg: string) => void
37
+ uploadPreKeys: (count?: number) => Promise<void>
38
+ uploadPreKeysToServerIfRequired: () => Promise<void>
39
+ requestPairingCode: (phoneNumber: string, code?: string) => Promise<string>
48
40
  /** Waits for the connection to WA to reach a state */
49
- waitForConnectionUpdate: (check: (u: Partial<import("../Types/index.js").ConnectionState>) => Promise<boolean | undefined>, timeoutMs?: number) => Promise<void>;
50
- sendWAMBuffer: (wamBuffer: Buffer) => Promise<any>;
51
- executeUSyncQuery: (usyncQuery: USyncQuery) => Promise<import("../index.js").USyncQueryResult | undefined>;
52
- onWhatsApp: (...phoneNumber: string[]) => Promise<{
53
- jid: string;
54
- exists: boolean;
55
- }[] | undefined>;
56
- fetchAccountReachoutTimelock: () => Promise<ReachoutTimelockState>;
57
- fetchNewChatMessageCap: () => Promise<NewChatMessageCapInfo>;
58
- };
59
- //# sourceMappingURL=socket.d.ts.map
41
+ waitForConnectionUpdate: (check: (u: Partial<import("../Types").ConnectionState>) => boolean | undefined, timeoutMs?: number | undefined) => Promise<void>
42
+ sendWAMBuffer: (wamBuffer: Buffer) => Promise<BinaryNode>
43
+ }
44
+
45
+ export type Socket = ReturnType<typeof makeSocket>