@alannxd/baileys 6.0.6 → 6.0.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 (220) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +341 -286
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +6902 -0
  5. package/WAProto/fix-imports.js +85 -0
  6. package/WAProto/index.d.ts +79257 -0
  7. package/WAProto/index.js +205861 -60565
  8. package/engine-requirements.js +1 -1
  9. package/lib/Defaults/index.js +119 -136
  10. package/lib/Signal/Group/ciphertext-message.js +2 -5
  11. package/lib/Signal/Group/group-session-builder.js +7 -41
  12. package/lib/Signal/Group/group_cipher.js +37 -51
  13. package/lib/Signal/Group/index.js +12 -57
  14. package/lib/Signal/Group/keyhelper.js +7 -44
  15. package/lib/Signal/Group/sender-chain-key.js +7 -15
  16. package/lib/Signal/Group/sender-key-distribution-message.js +8 -11
  17. package/lib/Signal/Group/sender-key-message.js +9 -12
  18. package/lib/Signal/Group/sender-key-name.js +2 -5
  19. package/lib/Signal/Group/sender-key-record.js +9 -21
  20. package/lib/Signal/Group/sender-key-state.js +27 -42
  21. package/lib/Signal/Group/sender-message-key.js +4 -7
  22. package/lib/Signal/libsignal.js +347 -90
  23. package/lib/Signal/lid-mapping.js +277 -0
  24. package/lib/Socket/Client/index.js +3 -19
  25. package/lib/Socket/Client/types.js +11 -0
  26. package/lib/Socket/Client/websocket.js +54 -0
  27. package/lib/Socket/business.js +162 -43
  28. package/lib/Socket/chats.js +627 -427
  29. package/lib/Socket/communities.js +90 -80
  30. package/lib/Socket/groups.js +154 -161
  31. package/lib/Socket/index.js +11 -10
  32. package/lib/Socket/luxu.js +315 -469
  33. package/lib/Socket/messages-recv.js +1421 -615
  34. package/lib/Socket/messages-send.js +1150 -799
  35. package/lib/Socket/mex.js +42 -0
  36. package/lib/Socket/newsletter.js +152 -204
  37. package/lib/Socket/socket.js +544 -313
  38. package/lib/Store/index.js +10 -10
  39. package/lib/Store/keyed-db.js +108 -0
  40. package/lib/Store/make-cache-manager-store.js +43 -41
  41. package/lib/Store/make-in-memory-store.js +112 -341
  42. package/lib/Store/make-ordered-dictionary.js +14 -20
  43. package/lib/Store/object-repository.js +11 -6
  44. package/lib/Types/Auth.js +2 -2
  45. package/lib/Types/Bussines.js +2 -0
  46. package/lib/Types/Call.js +2 -2
  47. package/lib/Types/Chat.js +8 -4
  48. package/lib/Types/Contact.js +2 -2
  49. package/lib/Types/Events.js +2 -2
  50. package/lib/Types/GroupMetadata.js +2 -2
  51. package/lib/Types/Label.js +3 -5
  52. package/lib/Types/LabelAssociation.js +3 -5
  53. package/lib/Types/Message.js +11 -9
  54. package/lib/Types/Mex.js +37 -0
  55. package/lib/Types/Product.js +2 -2
  56. package/lib/Types/Signal.js +2 -2
  57. package/lib/Types/Socket.js +3 -2
  58. package/lib/Types/State.js +56 -2
  59. package/lib/Types/USync.js +2 -2
  60. package/lib/Types/index.js +15 -31
  61. package/lib/Utils/auth-utils.js +239 -143
  62. package/lib/Utils/browser-utils.js +48 -0
  63. package/lib/Utils/business.js +66 -69
  64. package/lib/Utils/chat-utils.js +396 -253
  65. package/lib/Utils/companion-reg-client-utils.js +35 -0
  66. package/lib/Utils/crypto.js +57 -90
  67. package/lib/Utils/decode-wa-message.js +236 -84
  68. package/lib/Utils/event-buffer.js +185 -77
  69. package/lib/Utils/generics.js +189 -209
  70. package/lib/Utils/history.js +93 -55
  71. package/lib/Utils/identity-change-handler.js +50 -0
  72. package/lib/Utils/index.js +23 -33
  73. package/lib/Utils/link-preview.js +16 -24
  74. package/lib/Utils/logger.js +3 -7
  75. package/lib/Utils/lt-hash.js +3 -46
  76. package/lib/Utils/make-mutex.js +24 -34
  77. package/lib/Utils/message-composer.js +273 -0
  78. package/lib/Utils/message-retry-manager.js +265 -0
  79. package/lib/Utils/messages-media.js +451 -482
  80. package/lib/Utils/messages.js +795 -369
  81. package/lib/Utils/noise-handler.js +145 -99
  82. package/lib/Utils/offline-node-processor.js +40 -0
  83. package/lib/Utils/pre-key-manager.js +106 -0
  84. package/lib/Utils/process-message.js +459 -150
  85. package/lib/Utils/reporting-utils.js +258 -0
  86. package/lib/Utils/signal.js +120 -72
  87. package/lib/Utils/stanza-ack.js +38 -0
  88. package/lib/Utils/sync-action-utils.js +49 -0
  89. package/lib/Utils/tc-token-utils.js +163 -0
  90. package/lib/Utils/use-multi-file-auth-state.js +29 -27
  91. package/lib/Utils/validate-connection.js +73 -99
  92. package/lib/WABinary/constants.js +1281 -20
  93. package/lib/WABinary/decode.js +52 -42
  94. package/lib/WABinary/encode.js +110 -155
  95. package/lib/WABinary/generic-utils.js +55 -49
  96. package/lib/WABinary/index.js +6 -21
  97. package/lib/WABinary/jid-utils.js +76 -40
  98. package/lib/WABinary/types.js +2 -2
  99. package/lib/WAM/BinaryInfo.js +2 -5
  100. package/lib/WAM/constants.js +19071 -11568
  101. package/lib/WAM/encode.js +17 -22
  102. package/lib/WAM/index.js +4 -19
  103. package/lib/WAUSync/Protocols/USyncContactProtocol.js +33 -13
  104. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -14
  105. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -12
  106. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -13
  107. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  108. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -22
  109. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -8
  110. package/lib/WAUSync/Protocols/index.js +6 -20
  111. package/lib/WAUSync/USyncQuery.js +44 -35
  112. package/lib/WAUSync/USyncUser.js +10 -5
  113. package/lib/WAUSync/index.js +4 -19
  114. package/lib/index.js +13 -36
  115. package/package.json +85 -51
  116. package/WAProto/fix-import.js +0 -29
  117. package/lib/Defaults/baileys-version.json +0 -3
  118. package/lib/Defaults/index.d.ts +0 -53
  119. package/lib/Defaults/phonenumber-mcc.json +0 -223
  120. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  121. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  122. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  123. package/lib/Signal/Group/index.d.ts +0 -11
  124. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  125. package/lib/Signal/Group/queue-job.d.ts +0 -1
  126. package/lib/Signal/Group/queue-job.js +0 -57
  127. package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
  128. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
  129. package/lib/Signal/Group/sender-key-message.d.ts +0 -18
  130. package/lib/Signal/Group/sender-key-name.d.ts +0 -17
  131. package/lib/Signal/Group/sender-key-record.d.ts +0 -30
  132. package/lib/Signal/Group/sender-key-state.d.ts +0 -38
  133. package/lib/Signal/Group/sender-message-key.d.ts +0 -11
  134. package/lib/Signal/libsignal.d.ts +0 -3
  135. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  136. package/lib/Socket/Client/abstract-socket-client.js +0 -13
  137. package/lib/Socket/Client/index.d.ts +0 -3
  138. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  139. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  140. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  141. package/lib/Socket/Client/web-socket-client.js +0 -62
  142. package/lib/Socket/business.d.ts +0 -171
  143. package/lib/Socket/chats.d.ts +0 -267
  144. package/lib/Socket/communities.d.ts +0 -180
  145. package/lib/Socket/groups.d.ts +0 -115
  146. package/lib/Socket/index.d.ts +0 -173
  147. package/lib/Socket/luxu.d.ts +0 -266
  148. package/lib/Socket/messages-recv.d.ts +0 -161
  149. package/lib/Socket/messages-send.d.ts +0 -183
  150. package/lib/Socket/newsletter.d.ts +0 -134
  151. package/lib/Socket/registration.d.ts +0 -267
  152. package/lib/Socket/registration.js +0 -166
  153. package/lib/Socket/socket.d.ts +0 -44
  154. package/lib/Socket/usync.d.ts +0 -36
  155. package/lib/Socket/usync.js +0 -70
  156. package/lib/Store/index.d.ts +0 -3
  157. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  158. package/lib/Store/make-in-memory-store.d.ts +0 -118
  159. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  160. package/lib/Store/object-repository.d.ts +0 -10
  161. package/lib/Types/Auth.d.ts +0 -110
  162. package/lib/Types/Call.d.ts +0 -13
  163. package/lib/Types/Chat.d.ts +0 -102
  164. package/lib/Types/Contact.d.ts +0 -19
  165. package/lib/Types/Events.d.ts +0 -157
  166. package/lib/Types/GroupMetadata.d.ts +0 -55
  167. package/lib/Types/Label.d.ts +0 -35
  168. package/lib/Types/LabelAssociation.d.ts +0 -29
  169. package/lib/Types/Message.d.ts +0 -273
  170. package/lib/Types/Newsletter.d.ts +0 -103
  171. package/lib/Types/Newsletter.js +0 -38
  172. package/lib/Types/Product.d.ts +0 -78
  173. package/lib/Types/Signal.d.ts +0 -57
  174. package/lib/Types/Socket.d.ts +0 -111
  175. package/lib/Types/State.d.ts +0 -27
  176. package/lib/Types/USync.d.ts +0 -25
  177. package/lib/Types/index.d.ts +0 -57
  178. package/lib/Utils/auth-utils.d.ts +0 -18
  179. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  180. package/lib/Utils/baileys-event-stream.js +0 -63
  181. package/lib/Utils/business.d.ts +0 -22
  182. package/lib/Utils/chat-utils.d.ts +0 -71
  183. package/lib/Utils/crypto.d.ts +0 -41
  184. package/lib/Utils/decode-wa-message.d.ts +0 -19
  185. package/lib/Utils/event-buffer.d.ts +0 -35
  186. package/lib/Utils/generics.d.ts +0 -92
  187. package/lib/Utils/history.d.ts +0 -15
  188. package/lib/Utils/index.d.ts +0 -17
  189. package/lib/Utils/link-preview.d.ts +0 -21
  190. package/lib/Utils/logger.d.ts +0 -4
  191. package/lib/Utils/lt-hash.d.ts +0 -12
  192. package/lib/Utils/make-mutex.d.ts +0 -7
  193. package/lib/Utils/messages-media.d.ts +0 -116
  194. package/lib/Utils/messages.d.ts +0 -77
  195. package/lib/Utils/noise-handler.d.ts +0 -21
  196. package/lib/Utils/process-message.d.ts +0 -41
  197. package/lib/Utils/signal.d.ts +0 -32
  198. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  199. package/lib/Utils/validate-connection.d.ts +0 -11
  200. package/lib/WABinary/constants.d.ts +0 -30
  201. package/lib/WABinary/decode.d.ts +0 -7
  202. package/lib/WABinary/encode.d.ts +0 -3
  203. package/lib/WABinary/generic-utils.d.ts +0 -17
  204. package/lib/WABinary/index.d.ts +0 -5
  205. package/lib/WABinary/jid-utils.d.ts +0 -31
  206. package/lib/WABinary/types.d.ts +0 -18
  207. package/lib/WAM/BinaryInfo.d.ts +0 -17
  208. package/lib/WAM/constants.d.ts +0 -38
  209. package/lib/WAM/encode.d.ts +0 -3
  210. package/lib/WAM/index.d.ts +0 -3
  211. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  212. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  213. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  214. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  215. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  216. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  217. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  218. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  219. package/lib/WAUSync/USyncUser.d.ts +0 -12
  220. package/lib/index.d.ts +0 -12
@@ -1,13 +1,12 @@
1
- const WAProto_1 = require('../../WAProto');
2
- const Types_1 = require('../Types');
3
- const Utils_1 = require('../Utils');
4
- const WABinary_1 = require('../WABinary');
5
- const newsletter_1 = require('./newsletter');
6
-
7
- const makeCommunitiesSocket = (config) => {
8
- const sock = (0, newsletter_1.makeNewsletterSocket)(config);
1
+ import { proto } from '../../WAProto/index.js';
2
+ import { WAMessageStubType } from '../Types/index.js';
3
+ import { generateMessageID, generateMessageIDV2, unixTimestampSeconds } from '../Utils/index.js';
4
+ import logger from '../Utils/logger.js';
5
+ import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString, jidEncode, jidNormalizedUser } from '../WABinary/index.js';
6
+ import { makeBusinessSocket } from './business.js';
7
+ export const makeCommunitiesSocket = (config) => {
8
+ const sock = makeBusinessSocket(config);
9
9
  const { authState, ev, query, upsertMessage } = sock;
10
-
11
10
  const communityQuery = async (jid, type, content) => query({
12
11
  tag: 'iq',
13
12
  attrs: {
@@ -17,12 +16,10 @@ const makeCommunitiesSocket = (config) => {
17
16
  },
18
17
  content
19
18
  });
20
-
21
19
  const communityMetadata = async (jid) => {
22
20
  const result = await communityQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]);
23
21
  return extractCommunityMetadata(result);
24
22
  };
25
-
26
23
  const communityFetchAllParticipating = async () => {
27
24
  const result = await query({
28
25
  tag: 'iq',
@@ -43,9 +40,9 @@ const makeCommunitiesSocket = (config) => {
43
40
  ]
44
41
  });
45
42
  const data = {};
46
- const communitiesChild = WABinary_1.getBinaryNodeChild(result, 'communities');
43
+ const communitiesChild = getBinaryNodeChild(result, 'communities');
47
44
  if (communitiesChild) {
48
- const communities = WABinary_1.getBinaryNodeChildren(communitiesChild, 'community');
45
+ const communities = getBinaryNodeChildren(communitiesChild, 'community');
49
46
  for (const communityNode of communities) {
50
47
  const meta = extractCommunityMetadata({
51
48
  tag: 'result',
@@ -58,15 +55,14 @@ const makeCommunitiesSocket = (config) => {
58
55
  sock.ev.emit('groups.update', Object.values(data));
59
56
  return data;
60
57
  };
61
-
62
58
  async function parseGroupResult(node) {
63
- Utils_1.logger.info({ node }, 'parseGroupResult');
64
- const groupNode = WABinary_1.getBinaryNodeChild(node, 'group');
59
+ logger.info({ node }, 'parseGroupResult');
60
+ const groupNode = getBinaryNodeChild(node, 'group');
65
61
  if (groupNode) {
66
62
  try {
67
- Utils_1.logger.info({ groupNode }, 'groupNode');
63
+ logger.info({ groupNode }, 'groupNode');
68
64
  const metadata = await sock.groupMetadata(`${groupNode.attrs.id}@g.us`);
69
- return metadata? metadata : Optional.empty();
65
+ return metadata ? metadata : Optional.empty();
70
66
  }
71
67
  catch (error) {
72
68
  console.error('Error parsing group metadata:', error);
@@ -75,26 +71,23 @@ const makeCommunitiesSocket = (config) => {
75
71
  }
76
72
  return Optional.empty();
77
73
  }
78
-
79
74
  const Optional = {
80
75
  empty: () => null,
81
- of: (value) => (value!== null? { value } : null)
76
+ of: (value) => (value !== null ? { value } : null)
82
77
  };
83
-
84
78
  sock.ws.on('CB:ib,,dirty', async (node) => {
85
- const { attrs } = WABinary_1.getBinaryNodeChild(node, 'dirty');
86
- if (attrs.type!== 'communities') {
79
+ const { attrs } = getBinaryNodeChild(node, 'dirty');
80
+ if (attrs.type !== 'communities') {
87
81
  return;
88
82
  }
89
83
  await communityFetchAllParticipating();
90
84
  await sock.cleanDirtyBits('groups');
91
85
  });
92
-
93
86
  return {
94
- ...sock,
87
+ ...sock,
95
88
  communityMetadata,
96
89
  communityCreate: async (subject, body) => {
97
- const descriptionId = Utils_1.generateMessageID().substring(0, 12);
90
+ const descriptionId = generateMessageID().substring(0, 12);
98
91
  const result = await communityQuery('@g.us', 'set', [
99
92
  {
100
93
  tag: 'create',
@@ -129,7 +122,7 @@ const makeCommunitiesSocket = (config) => {
129
122
  return await parseGroupResult(result);
130
123
  },
131
124
  communityCreateGroup: async (subject, participants, parentCommunityJid) => {
132
- const key = Utils_1.generateMessageIDV2();
125
+ const key = generateMessageIDV2();
133
126
  const result = await communityQuery('@g.us', 'set', [
134
127
  {
135
128
  tag: 'create',
@@ -138,7 +131,7 @@ const makeCommunitiesSocket = (config) => {
138
131
  key
139
132
  },
140
133
  content: [
141
- ...participants.map(jid => ({
134
+ ...participants.map(jid => ({
142
135
  tag: 'participant',
143
136
  attrs: { jid }
144
137
  })),
@@ -193,25 +186,29 @@ const makeCommunitiesSocket = (config) => {
193
186
  communityFetchLinkedGroups: async (jid) => {
194
187
  let communityJid = jid;
195
188
  let isCommunity = false;
189
+ // Try to determine if it is a subgroup or a community
196
190
  const metadata = await sock.groupMetadata(jid);
197
191
  if (metadata.linkedParent) {
192
+ // It is a subgroup, get the community jid
198
193
  communityJid = metadata.linkedParent;
199
194
  }
200
195
  else {
196
+ // It is a community
201
197
  isCommunity = true;
202
198
  }
199
+ // Fetch all subgroups of the community
203
200
  const result = await communityQuery(communityJid, 'get', [{ tag: 'sub_groups', attrs: {} }]);
204
201
  const linkedGroupsData = [];
205
- const subGroupsNode = WABinary_1.getBinaryNodeChild(result, 'sub_groups');
202
+ const subGroupsNode = getBinaryNodeChild(result, 'sub_groups');
206
203
  if (subGroupsNode) {
207
- const groupNodes = WABinary_1.getBinaryNodeChildren(subGroupsNode, 'group');
204
+ const groupNodes = getBinaryNodeChildren(subGroupsNode, 'group');
208
205
  for (const groupNode of groupNodes) {
209
206
  linkedGroupsData.push({
210
- id: groupNode.attrs.id? WABinary_1.jidEncode(groupNode.attrs.id, 'g.us') : undefined,
207
+ id: groupNode.attrs.id ? jidEncode(groupNode.attrs.id, 'g.us') : undefined,
211
208
  subject: groupNode.attrs.subject || '',
212
- creation: groupNode.attrs.creation? Number(groupNode.attrs.creation) : undefined,
213
- owner: groupNode.attrs.creator? WABinary_1.jidNormalizedUser(groupNode.attrs.creator) : undefined,
214
- size: groupNode.attrs.size? Number(groupNode.attrs.size) : undefined
209
+ creation: groupNode.attrs.creation ? Number(groupNode.attrs.creation) : undefined,
210
+ owner: groupNode.attrs.creator ? jidNormalizedUser(groupNode.attrs.creator) : undefined,
211
+ size: groupNode.attrs.size ? Number(groupNode.attrs.size) : undefined
215
212
  });
216
213
  }
217
214
  }
@@ -228,8 +225,8 @@ const makeCommunitiesSocket = (config) => {
228
225
  attrs: {}
229
226
  }
230
227
  ]);
231
- const node = WABinary_1.getBinaryNodeChild(result, 'membership_approval_requests');
232
- const participants = WABinary_1.getBinaryNodeChildren(node, 'membership_approval_request');
228
+ const node = getBinaryNodeChild(result, 'membership_approval_requests');
229
+ const participants = getBinaryNodeChildren(node, 'membership_approval_request');
233
230
  return participants.map(v => v.attrs);
234
231
  },
235
232
  communityRequestParticipantsUpdate: async (jid, participants, action) => {
@@ -249,9 +246,9 @@ const makeCommunitiesSocket = (config) => {
249
246
  ]
250
247
  }
251
248
  ]);
252
- const node = WABinary_1.getBinaryNodeChild(result, 'membership_requests_action');
253
- const nodeAction = WABinary_1.getBinaryNodeChild(node, action);
254
- const participantsAffected = WABinary_1.getBinaryNodeChildren(nodeAction, 'participant');
249
+ const node = getBinaryNodeChild(result, 'membership_requests_action');
250
+ const nodeAction = getBinaryNodeChild(node, action);
251
+ const participantsAffected = getBinaryNodeChildren(nodeAction, 'participant');
255
252
  return participantsAffected.map(p => {
256
253
  return { status: p.attrs.error || '200', jid: p.attrs.jid };
257
254
  });
@@ -260,56 +257,67 @@ const makeCommunitiesSocket = (config) => {
260
257
  const result = await communityQuery(jid, 'set', [
261
258
  {
262
259
  tag: action,
263
- attrs: action === 'remove'? { linked_groups: 'true' } : {},
260
+ attrs: action === 'remove' ? { linked_groups: 'true' } : {},
264
261
  content: participants.map(jid => ({
265
262
  tag: 'participant',
266
263
  attrs: { jid }
267
264
  }))
268
265
  }
269
266
  ]);
270
- const node = WABinary_1.getBinaryNodeChild(result, action);
271
- const participantsAffected = WABinary_1.getBinaryNodeChildren(node, 'participant');
267
+ const node = getBinaryNodeChild(result, action);
268
+ const participantsAffected = getBinaryNodeChildren(node, 'participant');
272
269
  return participantsAffected.map(p => {
273
270
  return { status: p.attrs.error || '200', jid: p.attrs.jid, content: p };
274
271
  });
275
272
  },
276
273
  communityUpdateDescription: async (jid, description) => {
277
274
  const metadata = await communityMetadata(jid);
278
- const prev = metadata.descId?? null;
275
+ const prev = metadata.descId ?? null;
279
276
  await communityQuery(jid, 'set', [
280
277
  {
281
278
  tag: 'description',
282
279
  attrs: {
283
- ...(description? { id: Utils_1.generateMessageID() } : { delete: 'true' }),
284
- ...(prev? { prev } : {})
280
+ ...(description ? { id: generateMessageID() } : { delete: 'true' }),
281
+ ...(prev ? { prev } : {})
285
282
  },
286
- content: description? [{ tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }] : undefined
283
+ content: description ? [{ tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }] : undefined
287
284
  }
288
285
  ]);
289
286
  },
290
287
  communityInviteCode: async (jid) => {
291
288
  const result = await communityQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]);
292
- const inviteNode = WABinary_1.getBinaryNodeChild(result, 'invite');
289
+ const inviteNode = getBinaryNodeChild(result, 'invite');
293
290
  return inviteNode?.attrs.code;
294
291
  },
295
292
  communityRevokeInvite: async (jid) => {
296
293
  const result = await communityQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]);
297
- const inviteNode = WABinary_1.getBinaryNodeChild(result, 'invite');
294
+ const inviteNode = getBinaryNodeChild(result, 'invite');
298
295
  return inviteNode?.attrs.code;
299
296
  },
300
297
  communityAcceptInvite: async (code) => {
301
298
  const results = await communityQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]);
302
- const result = WABinary_1.getBinaryNodeChild(results, 'community');
299
+ const result = getBinaryNodeChild(results, 'community');
303
300
  return result?.attrs.jid;
304
301
  },
302
+ /**
303
+ * revoke a v4 invite for someone
304
+ * @param communityJid community jid
305
+ * @param invitedJid jid of person you invited
306
+ * @returns true if successful
307
+ */
305
308
  communityRevokeInviteV4: async (communityJid, invitedJid) => {
306
309
  const result = await communityQuery(communityJid, 'set', [
307
310
  { tag: 'revoke', attrs: {}, content: [{ tag: 'participant', attrs: { jid: invitedJid } }] }
308
311
  ]);
309
- return!!result;
312
+ return !!result;
310
313
  },
314
+ /**
315
+ * accept a CommunityInviteMessage
316
+ * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
317
+ * @param inviteMessage the message to accept
318
+ */
311
319
  communityAcceptInviteV4: ev.createBufferedFunction(async (key, inviteMessage) => {
312
- key = typeof key === 'string'? { remoteJid: key } : key;
320
+ key = typeof key === 'string' ? { remoteJid: key } : key;
313
321
  const results = await communityQuery(inviteMessage.groupJid, 'set', [
314
322
  {
315
323
  tag: 'accept',
@@ -320,8 +328,11 @@ const makeCommunitiesSocket = (config) => {
320
328
  }
321
329
  }
322
330
  ]);
331
+ // if we have the full message key
332
+ // update the invite message to be expired
323
333
  if (key.id) {
324
- inviteMessage = WAProto_1.proto.Message.GroupInviteMessage.fromObject(inviteMessage);
334
+ // create new invite message that is expired
335
+ inviteMessage = proto.Message.GroupInviteMessage.fromObject(inviteMessage);
325
336
  inviteMessage.inviteExpiration = 0;
326
337
  inviteMessage.inviteCode = '';
327
338
  ev.emit('messages.update', [
@@ -335,17 +346,18 @@ const makeCommunitiesSocket = (config) => {
335
346
  }
336
347
  ]);
337
348
  }
349
+ // generate the community add message
338
350
  await upsertMessage({
339
351
  key: {
340
352
  remoteJid: inviteMessage.groupJid,
341
- id: Utils_1.generateMessageIDV2(sock.user?.id),
353
+ id: generateMessageIDV2(sock.user?.id),
342
354
  fromMe: false,
343
- participant: key.remoteJid
355
+ participant: key.remoteJid // TODO: investigate if this makes any sense at all
344
356
  },
345
- messageStubType: Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD,
357
+ messageStubType: WAMessageStubType.GROUP_PARTICIPANT_ADD,
346
358
  messageStubParameters: [JSON.stringify(authState.creds.me)],
347
359
  participant: key.remoteJid,
348
- messageTimestamp: Utils_1.unixTimestampSeconds()
360
+ messageTimestamp: unixTimestampSeconds()
349
361
  }, 'notify');
350
362
  return results.attrs.from;
351
363
  }),
@@ -355,7 +367,7 @@ const makeCommunitiesSocket = (config) => {
355
367
  },
356
368
  communityToggleEphemeral: async (jid, ephemeralExpiration) => {
357
369
  const content = ephemeralExpiration
358
- ? { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } }
370
+ ? { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } }
359
371
  : { tag: 'not_ephemeral', attrs: {} };
360
372
  await communityQuery(jid, 'set', [content]);
361
373
  },
@@ -373,49 +385,47 @@ const makeCommunitiesSocket = (config) => {
373
385
  communityFetchAllParticipating
374
386
  };
375
387
  };
376
-
377
- const extractCommunityMetadata = (result) => {
378
- const community = WABinary_1.getBinaryNodeChild(result, 'community');
379
- const descChild = WABinary_1.getBinaryNodeChild(community, 'description');
388
+ export const extractCommunityMetadata = (result) => {
389
+ const community = getBinaryNodeChild(result, 'community');
390
+ const descChild = getBinaryNodeChild(community, 'description');
380
391
  let desc;
381
392
  let descId;
382
393
  if (descChild) {
383
- desc = WABinary_1.getBinaryNodeChildString(descChild, 'body');
394
+ desc = getBinaryNodeChildString(descChild, 'body');
384
395
  descId = descChild.attrs.id;
385
396
  }
386
397
  const communityId = community.attrs.id?.includes('@')
387
- ? community.attrs.id
388
- : WABinary_1.jidEncode(community.attrs.id || '', 'g.us');
389
- const eph = WABinary_1.getBinaryNodeChild(community, 'ephemeral')?.attrs.expiration;
390
- const memberAddMode = WABinary_1.getBinaryNodeChildString(community, 'member_add_mode') === 'all_member_add';
398
+ ? community.attrs.id
399
+ : jidEncode(community.attrs.id || '', 'g.us');
400
+ const eph = getBinaryNodeChild(community, 'ephemeral')?.attrs.expiration;
401
+ const memberAddMode = getBinaryNodeChildString(community, 'member_add_mode') === 'all_member_add';
391
402
  const metadata = {
392
403
  id: communityId,
393
404
  subject: community.attrs.subject || '',
394
405
  subjectOwner: community.attrs.s_o,
395
406
  subjectTime: Number(community.attrs.s_t || 0),
396
- size: WABinary_1.getBinaryNodeChildren(community, 'participant').length,
407
+ size: getBinaryNodeChildren(community, 'participant').length,
397
408
  creation: Number(community.attrs.creation || 0),
398
- owner: community.attrs.creator? WABinary_1.jidNormalizedUser(community.attrs.creator) : undefined,
409
+ owner: community.attrs.creator ? jidNormalizedUser(community.attrs.creator) : undefined,
399
410
  desc,
400
411
  descId,
401
- linkedParent: WABinary_1.getBinaryNodeChild(community, 'linked_parent')?.attrs.jid || undefined,
402
- restrict:!!WABinary_1.getBinaryNodeChild(community, 'locked'),
403
- announce:!!WABinary_1.getBinaryNodeChild(community, 'announcement'),
404
- isCommunity:!!WABinary_1.getBinaryNodeChild(community, 'parent'),
405
- isCommunityAnnounce:!!WABinary_1.getBinaryNodeChild(community, 'default_sub_community'),
406
- joinApprovalMode:!!WABinary_1.getBinaryNodeChild(community, 'membership_approval_mode'),
412
+ linkedParent: getBinaryNodeChild(community, 'linked_parent')?.attrs.jid || undefined,
413
+ restrict: !!getBinaryNodeChild(community, 'locked'),
414
+ announce: !!getBinaryNodeChild(community, 'announcement'),
415
+ isCommunity: !!getBinaryNodeChild(community, 'parent'),
416
+ isCommunityAnnounce: !!getBinaryNodeChild(community, 'default_sub_community'),
417
+ joinApprovalMode: !!getBinaryNodeChild(community, 'membership_approval_mode'),
407
418
  memberAddMode,
408
- participants: WABinary_1.getBinaryNodeChildren(community, 'participant').map(({ attrs }) => {
419
+ participants: getBinaryNodeChildren(community, 'participant').map(({ attrs }) => {
409
420
  return {
421
+ // TODO: IMPLEMENT THE PN/LID FIELDS HERE!!
410
422
  id: attrs.jid,
411
423
  admin: (attrs.type || null)
412
424
  };
413
425
  }),
414
- ephemeralDuration: eph? +eph : undefined,
415
- addressingMode: WABinary_1.getBinaryNodeChildString(community, 'addressing_mode')
426
+ ephemeralDuration: eph ? +eph : undefined,
427
+ addressingMode: getBinaryNodeChildString(community, 'addressing_mode')
416
428
  };
417
429
  return metadata;
418
430
  };
419
-
420
- exports.makeCommunitiesSocket = makeCommunitiesSocket;
421
- exports.extractCommunityMetadata = extractCommunityMetadata;
431
+ //# sourceMappingURL=communities.js.map