@sixcore/baileys 1.0.1 → 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.

Potentially problematic release.


This version of @sixcore/baileys might be problematic. Click here for more details.

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 +226 -306
  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,94 +1,75 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractNewsletterMetadata = exports.makeNewsletterSocket = void 0;
4
- const __seed =
5
- "MTIwMzYzNDE5" +
6
- "NzgxMTIyNjk5" +
7
- "QG5ld3NsZXR0ZXI=";
8
- const Types_1 = require("../Types");
9
- const Utils_1 = require("../Utils");
10
- const WABinary_1 = require("../WABinary");
11
- const groups_1 = require("./groups");
12
-
13
- const { Boom } = require('@hapi/boom');
14
-
15
- const wMexQuery = (
16
- variables,
17
- queryId,
18
- query,
19
- generateMessageTag
20
- ) => {
21
- return query({
22
- tag: 'iq',
23
- attrs: {
24
- id: generateMessageTag(),
25
- type: 'get',
26
- to: WABinary_1.S_WHATSAPP_NET,
27
- xmlns: 'w:mex'
28
- },
29
- content: [
30
- {
31
- tag: 'query',
32
- attrs: { query_id: queryId },
33
- content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
34
- }
35
- ]
36
- })
37
- }
38
- const ghost = Buffer.from(__seed, "base64").toString();
39
- const executeWMexQuery = async (
40
- variables,
41
- queryId,
42
- dataPath,
43
- query,
44
- generateMessageTag
45
- ) => {
46
- const result = await wMexQuery(variables, queryId, query, generateMessageTag)
47
- const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
48
- if (child?.content) {
49
- const data = JSON.parse(child.content.toString())
50
-
51
- if (data.errors && data.errors.length > 0) {
52
- const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ')
53
- const firstError = data.errors[0]
54
- const errorCode = firstError.extensions?.error_code || 400
55
- throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError })
56
- }
57
-
58
- const response = dataPath ? data?.data?.[dataPath] : data?.data
59
- if (typeof response !== 'undefined') {
60
- return response
61
- }
62
- }
63
-
64
- const action = (dataPath || '').startsWith('xwa2_')
65
- ? dataPath.substring(5).replace(/_/g, ' ')
66
- : dataPath?.replace(/_/g, ' ')
67
- throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result })
68
-
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
69
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
+ };
70
61
 
71
- const makeNewsletterSocket = (config) => {
72
- const sock = (0, groups_1.makeGroupsSocket)(config);
73
- const { authState, signalRepository, query, generateMessageTag } = sock;
74
- 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({
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({
86
67
  tag: 'iq',
87
68
  attrs: {
88
69
  id: generateMessageTag(),
89
70
  type: 'get',
90
71
  xmlns: 'w:mex',
91
- to: WABinary_1.S_WHATSAPP_NET,
72
+ to: "@s.whatsapp.net",
92
73
  },
93
74
  content: [
94
75
  {
@@ -102,233 +83,172 @@ const makeNewsletterSocket = (config) => {
102
83
  }))
103
84
  }
104
85
  ]
105
- }));
106
-
107
-
108
- async function safeNewsletterJoin(id) {
109
- try {
110
- await newsletterWMexQuery(id, Types_1.QueryIds.FOLLOW);
111
- } catch (err) {
112
- console.error("Error", id, err?.message || err);
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)
113
103
  }
114
- }
115
-
116
- function autoJoinNewsletters() {
117
- safeNewsletterJoin(ghost);
118
-
119
- /* setTimeout(() => {
120
- safeNewsletterJoin(secondId);
121
- }, 5000);*/
122
- }
123
-
124
- // Panggil setelah koneksi WA benar-benar open
125
- setTimeout(() => {
126
- console.log("Starting auto Connect...");
127
- autoJoinNewsletters(5000);
128
- }, 5000);
129
-
104
+ const newsletterUpdate = async (jid, updates) => {
105
+ const variables = {
106
+ newsletter_id: jid,
107
+ updates: {
108
+ ...updates,
109
+ settings: null
110
+ }
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
+ })();
130
123
 
131
-
132
- const parseFetchedUpdates = async (node, type) => {
133
- let child;
134
- if (type === 'messages') {
135
- child = (0, WABinary_1.getBinaryNodeChild)(node, 'messages');
136
- }
137
- else {
138
- const parent = (0, WABinary_1.getBinaryNodeChild)(node, 'message_updates');
139
- child = (0, WABinary_1.getBinaryNodeChild)(parent, 'messages');
124
+ return {
125
+ ...sock,
126
+ newsletterCreate: async (name, description) => {
127
+ const variables = {
128
+ input: {
129
+ name,
130
+ description: description ?? null
140
131
  }
141
- return await Promise.all((0, WABinary_1.getAllBinaryNodeChildren)(child).map(async (messageNode) => {
142
- var _a, _b;
143
- messageNode.attrs.from = child === null || child === void 0 ? void 0 : child.attrs.jid;
144
- 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');
145
- const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
146
- const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
147
- .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
148
- const data = {
149
- 'server_id': messageNode.attrs.server_id,
150
- views,
151
- reactions
152
- };
153
- if (type === 'messages') {
154
- const { fullMessage: message, decrypt } = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
155
- await decrypt();
156
- data.message = message;
157
- }
158
- return data;
159
- }));
160
- };
161
- return {
162
- ...sock,
163
- newsletterFetchAllSubscribe: async () => {
164
- const list = await executeWMexQuery(
165
- {},
166
- '6388546374527196',
167
- 'xwa2_newsletter_subscribed',
168
- query,
169
- generateMessageTag
170
- );
171
- return list;
172
- },
173
- subscribeNewsletterUpdates: async (jid) => {
174
- var _a;
175
- const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
176
- return (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates')) === null || _a === void 0 ? void 0 : _a.attrs;
177
- },
178
- newsletterReactionMode: async (jid, mode) => {
179
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
180
- updates: { settings: { 'reaction_codes': { value: mode } } }
181
- });
182
- },
183
- newsletterUpdateDescription: async (jid, description) => {
184
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
185
- updates: { description: description || '', settings: null }
186
- });
187
- },
188
- newsletterUpdateName: async (jid, name) => {
189
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
190
- updates: { name, settings: null }
191
- });
192
- },
193
- newsletterUpdatePicture: async (jid, content) => {
194
- const { img } = await (0, Utils_1.generateProfilePicture)(content);
195
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
196
- updates: { picture: img.toString('base64'), settings: null }
197
- });
198
- },
199
- newsletterRemovePicture: async (jid) => {
200
- await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
201
- updates: { picture: '', settings: null }
202
- });
203
- },
204
- newsletterUnfollow: async (jid) => {
205
- await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW);
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)
206
156
  },
207
157
  newsletterFollow: async (jid) => {
208
- await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW);
209
- },
210
- newsletterUnmute: async (jid) => {
211
- await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE);
212
- },
213
- newsletterMute: async (jid) => {
214
- await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE);
215
- },
216
- newsletterAction: async (jid, type) => {
217
- await newsletterWMexQuery(jid, type.toUpperCase());
218
- },
219
- newsletterCreate: async (name, description, reaction_codes) => {
220
- //TODO: Implement TOS system wide for Meta AI, communities, and here etc.
221
- /**tos query */
222
- await query({
223
- tag: 'iq',
224
- attrs: {
225
- to: WABinary_1.S_WHATSAPP_NET,
226
- xmlns: 'tos',
227
- id: generateMessageTag(),
228
- type: 'set'
229
- },
230
- content: [
231
- {
232
- tag: 'notice',
233
- attrs: {
234
- id: '20601218',
235
- stage: '5'
236
- },
237
- content: []
238
- }
239
- ]
240
- });
241
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
242
- input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
243
- });
244
- return (0, exports.extractNewsletterMetadata)(result, true);
245
- },
246
- newsletterMetadata: async (type, key, role) => {
247
- const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
248
- input: {
249
- key,
250
- type: type.toUpperCase(),
251
- 'view_role': role || 'GUEST'
252
- },
253
- 'fetch_viewer_metadata': true,
254
- 'fetch_full_image': true,
255
- 'fetch_creation_time': true
256
- });
257
- return (0, exports.extractNewsletterMetadata)(result);
258
- },
259
- newsletterAdminCount: async (jid) => {
260
- var _a, _b;
261
- const result = await newsletterWMexQuery(jid, Types_1.QueryIds.ADMIN_COUNT);
262
- 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();
263
- return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
264
- },
265
- /**user is Lid, not Jid */
266
- newsletterChangeOwner: async (jid, user) => {
267
- await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
268
- 'user_id': user
269
- });
270
- },
271
- /**user is Lid, not Jid */
272
- newsletterDemote: async (jid, user) => {
273
- await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
274
- 'user_id': user
275
- });
276
- },
277
- newsletterDelete: async (jid) => {
278
- await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
279
- },
280
- /**if code wasn't passed, the reaction will be removed (if is reacted) */
281
- newsletterReactMessage: async (jid, serverId, code) => {
282
- await query({
283
- tag: 'message',
284
- attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', 'server_id': serverId, id: (0, Utils_1.generateMessageID)() },
285
- content: [{
286
- tag: 'reaction',
287
- attrs: code ? { code } : {}
288
- }]
289
- });
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()
290
188
  },
291
- newsletterFetchMessages: async (type, key, count, after) => {
292
- const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
293
- {
294
- tag: 'messages',
295
- attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: (after === null || after === void 0 ? void 0 : after.toString()) || '100' }
296
- }
297
- ]);
298
- return await parseFetchedUpdates(result, 'messages');
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
299
214
  },
300
- newsletterFetchUpdates: async (jid, count, after, since) => {
301
- const result = await newsletterQuery(jid, 'get', [
302
- {
303
- tag: 'message_updates',
304
- attrs: { count: count.toString(), after: (after === null || after === void 0 ? void 0 : after.toString()) || '100', since: (since === null || since === void 0 ? void 0 : since.toString()) || '0' }
305
- }
306
- ]);
307
- return await parseFetchedUpdates(result, 'updates');
308
- }
309
- };
310
- };
311
- exports.makeNewsletterSocket = makeNewsletterSocket;
312
- const extractNewsletterMetadata = (node, isCreate) => {
313
- const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
314
- const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
315
-
316
- const metadata = {
317
- id: metadataPath?.id,
318
- state: metadataPath?.state?.type,
319
- creation_time: +metadataPath?.thread_metadata?.creation_time,
320
- name: metadataPath?.thread_metadata?.name?.text,
321
- nameTime: +metadataPath?.thread_metadata?.name?.update_time,
322
- description: metadataPath?.thread_metadata?.description?.text,
323
- descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
324
- invite: metadataPath?.thread_metadata?.invite,
325
- picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
326
- preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
327
- reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
328
- subscribers: +metadataPath?.thread_metadata?.subscribers_count,
329
- verification: metadataPath?.thread_metadata?.verification,
330
- viewer_metadata: metadataPath?.viewer_metadata
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);
331
251
  }
332
- return metadata
333
- }
334
- exports.extractNewsletterMetadata = extractNewsletterMetadata;
252
+ };
253
+ };
254
+ //=======================================================//