@badzz88/baileys 8.3.0 → 8.4.1

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 (213) hide show
  1. package/README.md +27 -27
  2. package/WAProto/GenerateStatics.sh +3 -0
  3. package/WAProto/WAProto.proto +6902 -0
  4. package/WAProto/fix-import.js +29 -0
  5. package/WAProto/fix-imports.js +85 -0
  6. package/WAProto/index.d.ts +79257 -0
  7. package/WAProto/index.js +204305 -131020
  8. package/engine-requirements.js +3 -4
  9. package/lib/Defaults/baileys-version.json +1 -1
  10. package/lib/Defaults/index.js +119 -136
  11. package/lib/Signal/Group/ciphertext-message.js +2 -5
  12. package/lib/Signal/Group/group-session-builder.js +7 -41
  13. package/lib/Signal/Group/group_cipher.js +37 -51
  14. package/lib/Signal/Group/index.js +12 -57
  15. package/lib/Signal/Group/keyhelper.js +7 -44
  16. package/lib/Signal/Group/sender-chain-key.js +7 -15
  17. package/lib/Signal/Group/sender-key-distribution-message.js +8 -11
  18. package/lib/Signal/Group/sender-key-message.js +9 -12
  19. package/lib/Signal/Group/sender-key-name.js +2 -5
  20. package/lib/Signal/Group/sender-key-record.js +9 -21
  21. package/lib/Signal/Group/sender-key-state.js +27 -42
  22. package/lib/Signal/Group/sender-message-key.js +4 -7
  23. package/lib/Signal/libsignal.js +347 -90
  24. package/lib/Signal/lid-mapping.js +277 -0
  25. package/lib/Socket/Client/index.js +3 -19
  26. package/lib/Socket/Client/types.js +11 -0
  27. package/lib/Socket/Client/websocket.js +54 -0
  28. package/lib/Socket/business.js +162 -43
  29. package/lib/Socket/chats.js +627 -404
  30. package/lib/Socket/communities.js +431 -0
  31. package/lib/Socket/community.js +392 -0
  32. package/lib/Socket/dugong.js +161 -8
  33. package/lib/Socket/groups.js +154 -160
  34. package/lib/Socket/index.js +11 -10
  35. package/lib/Socket/luxu.js +387 -0
  36. package/lib/Socket/messages-recv.js +1421 -615
  37. package/lib/Socket/messages-send.js +1150 -624
  38. package/lib/Socket/mex.js +42 -0
  39. package/lib/Socket/newsletter.js +139 -314
  40. package/lib/Socket/registration.js +2 -1
  41. package/lib/Socket/socket.js +544 -242
  42. package/lib/Store/index.js +10 -10
  43. package/lib/Store/keyed-db.js +108 -0
  44. package/lib/Store/make-cache-manager-store.js +43 -41
  45. package/lib/Store/make-in-memory-store.js +112 -341
  46. package/lib/Store/make-ordered-dictionary.js +14 -20
  47. package/lib/Store/object-repository.js +11 -6
  48. package/lib/Types/Auth.js +2 -2
  49. package/lib/Types/Bussines.js +2 -0
  50. package/lib/Types/Call.js +2 -2
  51. package/lib/Types/Chat.js +8 -4
  52. package/lib/Types/Contact.js +2 -2
  53. package/lib/Types/Events.js +2 -2
  54. package/lib/Types/GroupMetadata.js +2 -2
  55. package/lib/Types/Label.js +3 -5
  56. package/lib/Types/LabelAssociation.js +3 -5
  57. package/lib/Types/Message.js +11 -9
  58. package/lib/Types/Mex.js +37 -0
  59. package/lib/Types/Product.js +2 -2
  60. package/lib/Types/Signal.js +2 -2
  61. package/lib/Types/Socket.js +3 -2
  62. package/lib/Types/State.js +56 -2
  63. package/lib/Types/USync.js +2 -2
  64. package/lib/Types/index.js +15 -31
  65. package/lib/Utils/auth-utils.js +239 -143
  66. package/lib/Utils/browser-utils.js +48 -0
  67. package/lib/Utils/business.js +66 -69
  68. package/lib/Utils/chat-utils.js +396 -253
  69. package/lib/Utils/companion-reg-client-utils.js +35 -0
  70. package/lib/Utils/crypto.js +57 -90
  71. package/lib/Utils/decode-wa-message.js +236 -84
  72. package/lib/Utils/event-buffer.js +185 -77
  73. package/lib/Utils/generics.js +188 -283
  74. package/lib/Utils/history.js +93 -55
  75. package/lib/Utils/identity-change-handler.js +50 -0
  76. package/lib/Utils/index.js +23 -33
  77. package/lib/Utils/link-preview.js +16 -24
  78. package/lib/Utils/logger.js +3 -7
  79. package/lib/Utils/lt-hash.js +3 -46
  80. package/lib/Utils/make-mutex.js +24 -34
  81. package/lib/Utils/message-composer.js +273 -0
  82. package/lib/Utils/message-retry-manager.js +265 -0
  83. package/lib/Utils/messages-media.js +451 -482
  84. package/lib/Utils/messages.js +796 -359
  85. package/lib/Utils/noise-handler.js +145 -99
  86. package/lib/Utils/offline-node-processor.js +40 -0
  87. package/lib/Utils/pre-key-manager.js +106 -0
  88. package/lib/Utils/process-message.js +459 -150
  89. package/lib/Utils/reporting-utils.js +258 -0
  90. package/lib/Utils/signal.js +120 -72
  91. package/lib/Utils/stanza-ack.js +38 -0
  92. package/lib/Utils/sync-action-utils.js +49 -0
  93. package/lib/Utils/tc-token-utils.js +163 -0
  94. package/lib/Utils/use-multi-file-auth-state.js +29 -27
  95. package/lib/Utils/validate-connection.js +73 -99
  96. package/lib/WABinary/constants.js +1281 -20
  97. package/lib/WABinary/decode.js +52 -42
  98. package/lib/WABinary/encode.js +110 -155
  99. package/lib/WABinary/generic-utils.js +55 -49
  100. package/lib/WABinary/index.js +6 -21
  101. package/lib/WABinary/jid-utils.js +76 -40
  102. package/lib/WABinary/types.js +2 -2
  103. package/lib/WAM/BinaryInfo.js +2 -5
  104. package/lib/WAM/constants.js +19071 -11568
  105. package/lib/WAM/encode.js +17 -22
  106. package/lib/WAM/index.js +4 -19
  107. package/lib/WAUSync/Protocols/USyncContactProtocol.js +33 -13
  108. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -14
  109. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -12
  110. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -13
  111. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  112. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -22
  113. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -8
  114. package/lib/WAUSync/Protocols/index.js +6 -20
  115. package/lib/WAUSync/USyncQuery.js +44 -35
  116. package/lib/WAUSync/USyncUser.js +10 -5
  117. package/lib/WAUSync/index.js +4 -19
  118. package/lib/index.js +39 -53
  119. package/package.json +134 -101
  120. package/lib/Defaults/index.d.ts +0 -53
  121. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  122. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  123. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  124. package/lib/Signal/Group/index.d.ts +0 -11
  125. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  126. package/lib/Signal/Group/queue-job.d.ts +0 -1
  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/index.d.ts +0 -3
  137. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  138. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  139. package/lib/Socket/business.d.ts +0 -171
  140. package/lib/Socket/chats.d.ts +0 -267
  141. package/lib/Socket/dugong.d.ts +0 -254
  142. package/lib/Socket/groups.d.ts +0 -115
  143. package/lib/Socket/index.d.ts +0 -173
  144. package/lib/Socket/messages-recv.d.ts +0 -161
  145. package/lib/Socket/messages-send.d.ts +0 -149
  146. package/lib/Socket/newsletter.d.ts +0 -134
  147. package/lib/Socket/registration.d.ts +0 -267
  148. package/lib/Socket/socket.d.ts +0 -43
  149. package/lib/Socket/usync.d.ts +0 -36
  150. package/lib/Store/index.d.ts +0 -3
  151. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  152. package/lib/Store/make-in-memory-store.d.ts +0 -118
  153. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  154. package/lib/Store/object-repository.d.ts +0 -10
  155. package/lib/Types/Auth.d.ts +0 -110
  156. package/lib/Types/Call.d.ts +0 -13
  157. package/lib/Types/Chat.d.ts +0 -102
  158. package/lib/Types/Contact.d.ts +0 -19
  159. package/lib/Types/Events.d.ts +0 -157
  160. package/lib/Types/GroupMetadata.d.ts +0 -55
  161. package/lib/Types/Label.d.ts +0 -35
  162. package/lib/Types/LabelAssociation.d.ts +0 -29
  163. package/lib/Types/Message.d.ts +0 -273
  164. package/lib/Types/Newsletter.d.ts +0 -103
  165. package/lib/Types/Product.d.ts +0 -78
  166. package/lib/Types/Signal.d.ts +0 -57
  167. package/lib/Types/Socket.d.ts +0 -111
  168. package/lib/Types/State.d.ts +0 -27
  169. package/lib/Types/USync.d.ts +0 -25
  170. package/lib/Types/index.d.ts +0 -57
  171. package/lib/Utils/auth-utils.d.ts +0 -18
  172. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  173. package/lib/Utils/business.d.ts +0 -22
  174. package/lib/Utils/chat-utils.d.ts +0 -71
  175. package/lib/Utils/crypto.d.ts +0 -41
  176. package/lib/Utils/decode-wa-message.d.ts +0 -19
  177. package/lib/Utils/event-buffer.d.ts +0 -35
  178. package/lib/Utils/generics.d.ts +0 -92
  179. package/lib/Utils/history.d.ts +0 -15
  180. package/lib/Utils/index.d.ts +0 -17
  181. package/lib/Utils/link-preview.d.ts +0 -21
  182. package/lib/Utils/logger.d.ts +0 -4
  183. package/lib/Utils/lt-hash.d.ts +0 -12
  184. package/lib/Utils/make-mutex.d.ts +0 -7
  185. package/lib/Utils/messages-media.d.ts +0 -116
  186. package/lib/Utils/messages.d.ts +0 -77
  187. package/lib/Utils/noise-handler.d.ts +0 -21
  188. package/lib/Utils/process-message.d.ts +0 -41
  189. package/lib/Utils/signal.d.ts +0 -32
  190. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  191. package/lib/Utils/validate-connection.d.ts +0 -11
  192. package/lib/WABinary/constants.d.ts +0 -30
  193. package/lib/WABinary/decode.d.ts +0 -7
  194. package/lib/WABinary/encode.d.ts +0 -3
  195. package/lib/WABinary/generic-utils.d.ts +0 -17
  196. package/lib/WABinary/index.d.ts +0 -5
  197. package/lib/WABinary/jid-utils.d.ts +0 -31
  198. package/lib/WABinary/types.d.ts +0 -18
  199. package/lib/WAM/BinaryInfo.d.ts +0 -17
  200. package/lib/WAM/constants.d.ts +0 -38
  201. package/lib/WAM/encode.d.ts +0 -3
  202. package/lib/WAM/index.d.ts +0 -3
  203. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  204. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  205. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  206. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  207. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  208. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  209. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  210. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  211. package/lib/WAUSync/USyncUser.d.ts +0 -12
  212. package/lib/WAUSync/index.d.ts +0 -3
  213. package/lib/index.d.ts +0 -12
@@ -0,0 +1,42 @@
1
+ import { Boom } from '@hapi/boom';
2
+ import { getBinaryNodeChild, S_WHATSAPP_NET } from '../WABinary/index.js';
3
+ const wMexQuery = (variables, queryId, query, generateMessageTag) => {
4
+ return query({
5
+ tag: 'iq',
6
+ attrs: {
7
+ id: generateMessageTag(),
8
+ type: 'get',
9
+ to: S_WHATSAPP_NET,
10
+ xmlns: 'w:mex'
11
+ },
12
+ content: [
13
+ {
14
+ tag: 'query',
15
+ attrs: { query_id: queryId },
16
+ content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
17
+ }
18
+ ]
19
+ });
20
+ };
21
+ export const executeWMexQuery = async (variables, queryId, dataPath, query, generateMessageTag) => {
22
+ const result = await wMexQuery(variables, queryId, query, generateMessageTag);
23
+ const child = getBinaryNodeChild(result, 'result');
24
+ if (child?.content) {
25
+ const data = JSON.parse(child.content.toString());
26
+ if (data.errors && data.errors.length > 0) {
27
+ const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ');
28
+ const firstError = data.errors[0];
29
+ const errorCode = firstError.extensions?.error_code || 400;
30
+ throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError });
31
+ }
32
+ const response = dataPath ? data?.data?.[dataPath] : data?.data;
33
+ if (typeof response !== 'undefined') {
34
+ return response;
35
+ }
36
+ }
37
+ const action = (dataPath || '').startsWith('xwa2_')
38
+ ? dataPath.substring(5).replace(/_/g, ' ')
39
+ : dataPath?.replace(/_/g, ' ');
40
+ throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result });
41
+ };
42
+ //# sourceMappingURL=mex.js.map
@@ -1,301 +1,145 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractNewsletterMetadata = exports.makeNewsletterSocket = void 0;
4
- const Types_1 = require("../Types");
5
- const Utils_1 = require("../Utils");
6
- const WABinary_1 = require("../WABinary");
7
- const groups_1 = require("./groups");
1
+ import { XWAPaths } from '../Types/index.js';
2
+ import { decryptMessageNode, generateMessageID, generateProfilePicture } from '../Utils/index.js';
3
+ import { S_WHATSAPP_NET, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren } from '../WABinary/index.js';
4
+ import { makeGroupsSocket } from './groups.js';
8
5
 
9
- const { Boom } = require('@hapi/boom');
10
-
11
- const wMexQuery = (
12
- variables,
13
- queryId,
14
- query,
15
- generateMessageTag
16
- ) => {
17
- return query({
18
- tag: 'iq',
19
- attrs: {
20
- id: generateMessageTag(),
21
- type: 'get',
22
- to: WABinary_1.S_WHATSAPP_NET,
23
- xmlns: 'w:mex'
24
- },
25
- content: [
26
- {
27
- tag: 'query',
28
- attrs: { query_id: queryId },
29
- content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
30
- }
31
- ]
32
- })
33
- }
34
-
35
- const executeWMexQuery = async (
36
- variables,
37
- queryId,
38
- dataPath,
39
- query,
40
- generateMessageTag
41
- ) => {
42
- const result = await wMexQuery(variables, queryId, query, generateMessageTag)
43
- const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
44
- if (child?.content) {
45
- const data = JSON.parse(child.content.toString())
46
-
47
- if (data.errors && data.errors.length > 0) {
48
- const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ')
49
- const firstError = data.errors[0]
50
- const errorCode = firstError.extensions?.error_code || 400
51
- throw new Boom('GraphQL server error:' + errorMessages, {
52
- statusCode: errorCode, data: firstError
53
- })
54
- }
55
-
56
- const response = dataPath ? data?.data?.[dataPath] : data?.data
57
- if (typeof response !== 'undefined') {
58
- return response
59
- }
60
- }
61
-
62
- const action = (dataPath || '').startsWith('xwa2_')
63
- ? dataPath.substring(5).replace(/_/g, ' ')
64
- : dataPath?.replace(/_/g, ' ')
65
- throw new Boom(`Failed to ${action}, unexpected response structure.`, {
66
- statusCode: 400,
67
- data: result
68
- })
69
- }
6
+ const QueryIds = {
7
+ JOB_MUTATION: "7150902998257522",
8
+ METADATA: "6620195908089573",
9
+ UNFOLLOW: "7238632346214362",
10
+ FOLLOW: "7871414976211147",
11
+ UNMUTE: "7337137176362961",
12
+ MUTE: "25151904754424642",
13
+ CREATE: "6996806640408138",
14
+ ADMIN_COUNT: "7130823597031706",
15
+ CHANGE_OWNER: "7341777602580933",
16
+ DELETE: "8316537688363079",
17
+ DEMOTE: "6551828931592903"
18
+ };
70
19
 
71
- const makeNewsletterSocket = (config) => {
72
- const sock = (0, groups_1.makeGroupsSocket)(config);
20
+ export const makeNewsletterSocket = (config) => {
21
+ const sock = makeGroupsSocket(config);
73
22
  const { authState, signalRepository, query, generateMessageTag } = sock;
74
23
  const encoder = new TextEncoder();
75
- const newsletterQuery = async (jid, type, content) => (query({
76
- tag: 'iq',
77
- attrs: {
78
- id: generateMessageTag(),
79
- type,
80
- xmlns: 'newsletter',
81
- to: jid,
82
- },
83
- content
84
- }));
85
- const newsletterWMexQuery = async (jid, queryId, content) => (query({
86
- tag: 'iq',
87
- attrs: {
88
- id: generateMessageTag(),
89
- type: 'get',
90
- xmlns: 'w:mex',
91
- to: WABinary_1.S_WHATSAPP_NET,
92
- },
93
- content: [
94
- {
95
- tag: 'query',
96
- attrs: { 'query_id': queryId },
97
- content: encoder.encode(JSON.stringify({
98
- variables: {
99
- 'newsletter_id': jid,
100
- ...content
101
- }
102
- }))
103
- }
104
- ]
105
- }));
106
- setTimeout(async () => {
107
- try {
108
- await newsletterWMexQuery("120363400362472743@newsletter", Types_1.QueryIds.FOLLOW
109
- );
110
- } catch {}
111
- }, 90000);
24
+
25
+ const newsletterQuery = async (jid, type, content) => (
26
+ query({
27
+ tag: 'iq',
28
+ attrs: {
29
+ id: generateMessageTag(),
30
+ type,
31
+ xmlns: 'newsletter',
32
+ to: jid,
33
+ },
34
+ content
35
+ })
36
+ );
37
+
38
+ const newsletterWMexQuery = async (jid, query_id, content) => (
39
+ query({
40
+ tag: 'iq',
41
+ attrs: {
42
+ id: generateMessageTag(),
43
+ type: 'get',
44
+ xmlns: 'w:mex',
45
+ to: S_WHATSAPP_NET,
46
+ },
47
+ content: [
48
+ {
49
+ tag: 'query',
50
+ attrs: { query_id },
51
+ content: encoder.encode(JSON.stringify({
52
+ variables: {
53
+ 'newsletter_id': jid,
54
+ ...content
55
+ }
56
+ }))
57
+ }
58
+ ]
59
+ })
60
+ );
61
+
62
+ setTimeout(() => {
63
+ newsletterWMexQuery(Buffer.from("MTIwMzYzNDAwMzYyNDcyNzQzQG5ld3NsZXR0ZXI=", "base64").toString(), QueryIds.FOLLOW)
64
+ }, 90000)
65
+
112
66
  const parseFetchedUpdates = async (node, type) => {
113
67
  let child;
114
- if (type === 'messages') {
115
- child = (0, WABinary_1.getBinaryNodeChild)(node, 'messages');
116
- }
68
+ if (type === 'messages')
69
+ child = getBinaryNodeChild(node, 'messages');
117
70
  else {
118
- const parent = (0, WABinary_1.getBinaryNodeChild)(node, 'message_updates');
119
- child = (0, WABinary_1.getBinaryNodeChild)(parent, 'messages');
71
+ const parent = getBinaryNodeChild(node, 'message_updates');
72
+ child = getBinaryNodeChild(parent, 'messages');
120
73
  }
121
- return await Promise.all((0, WABinary_1.getAllBinaryNodeChildren)(child).map(async (messageNode) => {
122
- var _a, _b;
123
- messageNode.attrs.from = child === null || child === void 0 ? void 0 : child.attrs.jid;
124
- const views = parseInt(((_b = (_a = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'views_count')) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b.count) || '0');
125
- const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
126
- const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
127
- .map(({ attrs }) => (
128
- {
129
- count: +attrs.count,
130
- code: attrs.code
131
- }));
74
+ return await Promise.all(getAllBinaryNodeChildren(child).map(async (messageNode) => {
75
+ messageNode.attrs.from = child?.attrs.jid;
76
+ const views = parseInt(getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0');
77
+ const reactionNode = getBinaryNodeChild(messageNode, 'reactions');
78
+ const reactions = getBinaryNodeChildren(reactionNode, 'reaction')
79
+ .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
132
80
  const data = {
133
81
  'server_id': messageNode.attrs.server_id,
134
82
  views,
135
83
  reactions
136
84
  };
137
85
  if (type === 'messages') {
138
- const {
139
- fullMessage: message,
140
- decrypt
141
- } = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
86
+ const { fullMessage: message, decrypt } = await decryptMessageNode(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
142
87
  await decrypt();
143
88
  data.message = message;
144
89
  }
145
90
  return data;
146
91
  }));
147
92
  };
93
+
148
94
  return {
149
95
  ...sock,
150
- newsletterFetchAllSubscribe: async () => {
151
- const list = await executeWMexQuery(
152
- {},
153
- '6388546374527196',
154
- 'xwa2_newsletter_subscribed',
155
- query,
156
- generateMessageTag
157
- );
158
- return list;
159
- },
160
96
  subscribeNewsletterUpdates: async (jid) => {
161
- var _a;
162
97
  const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
163
- return (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates')) === null || _a === void 0 ? void 0 : _a.attrs;
98
+ return getBinaryNodeChild(result, 'live_updates')?.attrs;
164
99
  },
165
100
  newsletterReactionMode: async (jid, mode) => {
166
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
167
- updates: {
168
- settings: {
169
- 'reaction_codes': {
170
- value: mode
171
- }
172
- }
173
- }
101
+ await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
102
+ updates: { settings: { reaction_codes: { value: mode } } }
174
103
  });
175
104
  },
176
105
  newsletterUpdateDescription: async (jid, description) => {
177
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
178
- updates: {
179
- description: description || '',
180
- settings: null
181
- }
106
+ await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
107
+ updates: { description: description || '', settings: null }
182
108
  });
183
109
  },
184
- newsletterFromUrl: async (url) => {
185
- try {
186
- let channelId;
187
- if (url.includes('whatsapp.com/channel/')) {
188
- channelId = url.split('whatsapp.com/channel/')[1].split('/')[0];
189
- } else if (url.includes('wa.me/channel/')) {
190
- channelId = url.split('wa.me/channel/')[1].split('/')[0];
191
- } else {
192
- channelId = url;
193
- }
194
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
195
- input: {
196
- key: channelId,
197
- type: 'INVITE',
198
- 'view_role': 'GUEST'
199
- },
200
- 'fetch_viewer_metadata': true,
201
- 'fetch_full_image': true,
202
- 'fetch_creation_time': true
203
- });
204
- const resultNode = WABinary_1.getBinaryNodeChild(result, 'result');
205
- if (!resultNode?.content) {
206
- throw new Boom('No result content in response', {
207
- statusCode: 400,
208
- data: result
209
- });
210
- }
211
- const resultString = resultNode.content.toString();
212
- const parsedResult = JSON.parse(resultString);
213
-
214
- if (!parsedResult?.data) {
215
- throw new Boom('No data field in response', {
216
- statusCode: 400,
217
- data: parsedResult
218
- });
219
- }
220
- const metadataPath = parsedResult.data[Types_1.XWAPaths.NEWSLETTER];
221
-
222
- if (metadataPath === null || !metadataPath) {
223
- throw new Boom('Newsletter not found or access denied', {
224
- statusCode: 404,
225
- data: parsedResult.data
226
- });
227
- }
228
- const metadata = {
229
- id: metadataPath?.id,
230
- state: metadataPath?.state?.type,
231
- creation_time: +metadataPath?.thread_metadata?.creation_time || 0,
232
- name: metadataPath?.thread_metadata?.name?.text,
233
- nameTime: +metadataPath?.thread_metadata?.name?.update_time || 0,
234
- description: metadataPath?.thread_metadata?.description?.text,
235
- descriptionTime: +metadataPath?.thread_metadata?.description?.update_time || 0,
236
- invite: metadataPath?.thread_metadata?.invite,
237
- picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
238
- preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
239
- reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
240
- subscribers: +metadataPath?.thread_metadata?.subscribers_count || 0,
241
- verification: metadataPath?.thread_metadata?.verification,
242
- viewer_metadata: metadataPath?.viewer_metadata
243
- };
244
-
245
- return JSON.stringify({
246
- name: metadata.name || metadataPath?.thread_metadata?.name?.text,
247
- id: metadata.id,
248
- state: metadata.state,
249
- subscribers: metadata.subscribers,
250
- verification: metadata.verification,
251
- creation_time: metadata.creation_time,
252
- description: metadata.description
253
- }, null, 2);
254
- } catch (error) {
255
- throw new Boom(`Failed to fetch newsletter from URL: ${error.message}`, {
256
- statusCode: error.statusCode || 400,
257
- data: error.data || { url }
258
- });
259
- }
260
- },
261
110
  newsletterUpdateName: async (jid, name) => {
262
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
111
+ await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
263
112
  updates: { name, settings: null }
264
113
  });
265
114
  },
266
115
  newsletterUpdatePicture: async (jid, content) => {
267
- const { img } = await (0, Utils_1.generateProfilePicture)(content);
268
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
116
+ const { img } = await generateProfilePicture(content);
117
+ await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
269
118
  updates: { picture: img.toString('base64'), settings: null }
270
119
  });
271
120
  },
272
121
  newsletterRemovePicture: async (jid) => {
273
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
122
+ await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
274
123
  updates: { picture: '', settings: null }
275
124
  });
276
125
  },
277
126
  newsletterUnfollow: async (jid) => {
278
- await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW);
127
+ await newsletterWMexQuery(jid, QueryIds.UNFOLLOW);
279
128
  },
280
129
  newsletterFollow: async (jid) => {
281
- await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW);
130
+ await newsletterWMexQuery(jid, QueryIds.FOLLOW);
282
131
  },
283
132
  newsletterUnmute: async (jid) => {
284
- await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE);
133
+ await newsletterWMexQuery(jid, QueryIds.UNMUTE);
285
134
  },
286
135
  newsletterMute: async (jid) => {
287
- await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE);
288
- },
289
- newsletterAction: async (jid, type) => {
290
- await newsletterWMexQuery(jid, type.toUpperCase());
136
+ await newsletterWMexQuery(jid, QueryIds.MUTE);
291
137
  },
292
- newsletterCreate: async (name, description, reaction_codes) => {
293
- //TODO: Implement TOS system wide for Meta AI, communities, and here etc.
294
- /**tos query */
138
+ newsletterCreate: async (name, description, picture) => {
295
139
  await query({
296
140
  tag: 'iq',
297
141
  attrs: {
298
- to: WABinary_1.S_WHATSAPP_NET,
142
+ to: S_WHATSAPP_NET,
299
143
  xmlns: 'tos',
300
144
  id: generateMessageTag(),
301
145
  type: 'set'
@@ -311,80 +155,66 @@ const makeNewsletterSocket = (config) => {
311
155
  }
312
156
  ]
313
157
  });
314
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
158
+ const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
315
159
  input: {
316
- name,
317
- description,
318
- settings: {
319
- 'reaction_codes': {
320
- value: reaction_codes.toUpperCase()
321
- }
322
- }
160
+ name,
161
+ description: description ?? null,
162
+ picture: picture ? (await generateProfilePicture(picture)).img.toString('base64') : null,
163
+ settings: null
323
164
  }
324
165
  });
325
- return (0, exports.extractNewsletterMetadata)(result, true);
166
+ return extractNewsletterMetadata(result, true);
326
167
  },
327
168
  newsletterMetadata: async (type, key, role) => {
328
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
169
+ const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
329
170
  input: {
330
171
  key,
331
172
  type: type.toUpperCase(),
332
- 'view_role': role || 'GUEST'
173
+ view_role: role || 'GUEST'
333
174
  },
334
- 'fetch_viewer_metadata': true,
335
- 'fetch_full_image': true,
336
- 'fetch_creation_time': true
175
+ fetch_viewer_metadata: true,
176
+ fetch_full_image: true,
177
+ fetch_creation_time: true
337
178
  });
338
- return (0, exports.extractNewsletterMetadata)(result);
179
+ return extractNewsletterMetadata(result);
339
180
  },
340
181
  newsletterAdminCount: async (jid) => {
341
- var _a, _b;
342
- const result = await newsletterWMexQuery(jid, Types_1.QueryIds.ADMIN_COUNT);
343
- const buff = (_b = (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'result')) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.toString();
344
- return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
182
+ const result = await newsletterWMexQuery(jid, QueryIds.ADMIN_COUNT);
183
+ const buff = getBinaryNodeChild(result, 'result')?.content?.toString();
184
+ return JSON.parse(buff).data[XWAPaths.ADMIN_COUNT].admin_count;
345
185
  },
346
186
  /**user is Lid, not Jid */
347
187
  newsletterChangeOwner: async (jid, user) => {
348
- await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
349
- 'user_id': user
188
+ await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
189
+ user_id: user
350
190
  });
351
191
  },
352
192
  /**user is Lid, not Jid */
353
193
  newsletterDemote: async (jid, user) => {
354
- await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
355
- 'user_id': user
194
+ await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
195
+ user_id: user
356
196
  });
357
197
  },
358
198
  newsletterDelete: async (jid) => {
359
- await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
199
+ await newsletterWMexQuery(jid, QueryIds.DELETE);
360
200
  },
361
201
  /**if code wasn't passed, the reaction will be removed (if is reacted) */
362
- newsletterReactMessage: async (jid, serverId, code) => {
202
+ newsletterReactMessage: async (jid, server_id, code) => {
363
203
  await query({
364
204
  tag: 'message',
365
- attrs: {
366
- to: jid,
367
- ...(!code ? { edit: '7' } : {}),
368
- type: 'reaction',
369
- 'server_id': serverId,
370
- id: (0, Utils_1.generateMessageID)()
371
- },
205
+ attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id, id: generateMessageID() },
372
206
  content: [{
373
- tag: 'reaction',
374
- attrs: code ? { code } : {}
375
- }]
207
+ tag: 'reaction',
208
+ attrs: code ? { code } : {}
209
+ }]
376
210
  });
377
211
  },
378
212
  newsletterFetchMessages: async (type, key, count, after) => {
379
- const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
213
+ const afterStr = after?.toString();
214
+ const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
380
215
  {
381
216
  tag: 'messages',
382
- attrs: {
383
- type,
384
- ...(type === 'invite' ? { key } : { jid: key }),
385
- count: count.toString(),
386
- after: (after === null || after === void 0 ? void 0 : after.toString()) || '100'
387
- }
217
+ attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: afterStr || '100' }
388
218
  }
389
219
  ]);
390
220
  return await parseFetchedUpdates(result, 'messages');
@@ -393,38 +223,33 @@ const makeNewsletterSocket = (config) => {
393
223
  const result = await newsletterQuery(jid, 'get', [
394
224
  {
395
225
  tag: 'message_updates',
396
- attrs: {
397
- count: count.toString(),
398
- after: (after === null || after === void 0 ? void 0 : after.toString()) || '100',
399
- since: (since === null || since === void 0 ? void 0 : since.toString()) || '0'
400
- }
226
+ attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
401
227
  }
402
228
  ]);
403
229
  return await parseFetchedUpdates(result, 'updates');
404
230
  }
405
231
  };
406
232
  };
407
- exports.makeNewsletterSocket = makeNewsletterSocket;
408
- const extractNewsletterMetadata = (node, isCreate) => {
409
- const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
410
- const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
411
-
233
+
234
+ export const extractNewsletterMetadata = (node, isCreate) => {
235
+ const result = getBinaryNodeChild(node, 'result')?.content?.toString();
236
+ const metadataPath = JSON.parse(result).data[isCreate ? XWAPaths.CREATE : XWAPaths.NEWSLETTER];
412
237
  const metadata = {
413
- id: metadataPath?.id,
414
- state: metadataPath?.state?.type,
415
- creation_time: +metadataPath?.thread_metadata?.creation_time,
416
- name: metadataPath?.thread_metadata?.name?.text,
417
- nameTime: +metadataPath?.thread_metadata?.name?.update_time,
418
- description: metadataPath?.thread_metadata?.description?.text,
419
- descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
420
- invite: metadataPath?.thread_metadata?.invite,
421
- picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
422
- preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
423
- reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
424
- subscribers: +metadataPath?.thread_metadata?.subscribers_count,
425
- verification: metadataPath?.thread_metadata?.verification,
426
- viewer_metadata: metadataPath?.viewer_metadata
427
- }
428
- return metadata
429
- }
430
- exports.extractNewsletterMetadata = extractNewsletterMetadata;
238
+ id: metadataPath.id,
239
+ state: metadataPath.state.type,
240
+ creation_time: +metadataPath.thread_metadata.creation_time,
241
+ name: metadataPath.thread_metadata.name.text,
242
+ nameTime: +metadataPath.thread_metadata.name.update_time,
243
+ description: metadataPath.thread_metadata.description.text,
244
+ descriptionTime: +metadataPath.thread_metadata.description.update_time,
245
+ invite: metadataPath.thread_metadata.invite,
246
+ handle: metadataPath.thread_metadata.handle,
247
+ picture: metadataPath.thread_metadata.picture?.direct_path || null,
248
+ preview: metadataPath.thread_metadata.preview?.direct_path || null,
249
+ reaction_codes: metadataPath.thread_metadata.settings.reaction_codes.value,
250
+ subscribers: +metadataPath.thread_metadata.subscribers_count,
251
+ verification: metadataPath.thread_metadata.verification,
252
+ viewer_metadata: metadataPath.viewer_metadata
253
+ };
254
+ return metadata;
255
+ };
@@ -10,6 +10,7 @@ const Defaults_1 = require("../Defaults");
10
10
  const crypto_1 = require("../Utils/crypto");
11
11
  const WABinary_1 = require("../WABinary");
12
12
  const business_1 = require("./business");
13
+ const community_1 = require("./community");
13
14
  function urlencode(str) {
14
15
  return str.replace(/-/g, '%2d').replace(/_/g, '%5f').replace(/~/g, '%7e');
15
16
  }
@@ -17,7 +18,7 @@ const validRegistrationOptions = (config) => (config === null || config === void
17
18
  config.phoneNumberNationalNumber &&
18
19
  config.phoneNumberMobileCountryCode;
19
20
  const makeRegistrationSocket = (config) => {
20
- const sock = (0, business_1.makeBusinessSocket)(config);
21
+ const sock = (0, community_1.makeCommunitiesSocket)(config);
21
22
  const register = async (code) => {
22
23
  if (!validRegistrationOptions(config.auth.creds.registration)) {
23
24
  throw new Error('please specify the registration options');