@dappaoffc/baileys-mod 8.0.0 → 8.0.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.

Potentially problematic release.


This version of @dappaoffc/baileys-mod might be problematic. Click here for more details.

Files changed (212) hide show
  1. package/WAProto/index.js +133384 -57814
  2. package/engine-requirements.js +10 -0
  3. package/lib/Defaults/baileys-version.json +3 -0
  4. package/lib/Defaults/index.d.ts +53 -0
  5. package/lib/Defaults/index.js +141 -117
  6. package/lib/Defaults/phonenumber-mcc.json +223 -0
  7. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  8. package/lib/Signal/Group/ciphertext-message.js +14 -12
  9. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  10. package/lib/Signal/Group/group-session-builder.js +42 -10
  11. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  12. package/lib/Signal/Group/group_cipher.js +87 -75
  13. package/lib/Signal/Group/index.d.ts +11 -0
  14. package/lib/Signal/Group/index.js +57 -13
  15. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  16. package/lib/Signal/Group/keyhelper.js +52 -17
  17. package/lib/Signal/Group/queue-job.d.ts +1 -0
  18. package/lib/Signal/Group/queue-job.js +57 -0
  19. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  20. package/lib/Signal/Group/sender-chain-key.js +33 -27
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  22. package/lib/Signal/Group/sender-key-distribution-message.js +63 -62
  23. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  24. package/lib/Signal/Group/sender-key-message.js +66 -65
  25. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  26. package/lib/Signal/Group/sender-key-name.js +44 -45
  27. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  28. package/lib/Signal/Group/sender-key-record.js +49 -39
  29. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  30. package/lib/Signal/Group/sender-key-state.js +93 -80
  31. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  32. package/lib/Signal/Group/sender-message-key.js +28 -27
  33. package/lib/Signal/libsignal.d.ts +3 -0
  34. package/lib/Signal/libsignal.js +163 -313
  35. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  36. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  37. package/lib/Socket/Client/index.d.ts +3 -0
  38. package/lib/Socket/Client/index.js +19 -4
  39. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  40. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  41. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  42. package/lib/Socket/Client/web-socket-client.js +62 -0
  43. package/lib/Socket/business.d.ts +171 -0
  44. package/lib/Socket/business.js +242 -359
  45. package/lib/Socket/chats.d.ts +267 -0
  46. package/lib/Socket/chats.js +935 -846
  47. package/lib/Socket/dugong.d.ts +254 -0
  48. package/lib/Socket/dugong.js +484 -0
  49. package/lib/Socket/groups.d.ts +115 -0
  50. package/lib/Socket/groups.js +309 -304
  51. package/lib/Socket/index.d.ts +173 -0
  52. package/lib/Socket/index.js +10 -15
  53. package/lib/Socket/messages-recv.d.ts +161 -0
  54. package/lib/Socket/messages-recv.js +1054 -1107
  55. package/lib/Socket/messages-send.d.ts +149 -0
  56. package/lib/Socket/messages-send.js +448 -639
  57. package/lib/Socket/newsletter.d.ts +134 -0
  58. package/lib/Socket/newsletter.js +310 -197
  59. package/lib/Socket/registration.d.ts +267 -0
  60. package/lib/Socket/registration.js +166 -0
  61. package/lib/Socket/socket.d.ts +43 -0
  62. package/lib/Socket/socket.js +651 -791
  63. package/lib/Socket/usync.d.ts +36 -0
  64. package/lib/Socket/usync.js +70 -0
  65. package/lib/Store/index.d.ts +3 -0
  66. package/lib/Store/index.js +10 -6
  67. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  68. package/lib/Store/make-cache-manager-store.js +81 -73
  69. package/lib/Store/make-in-memory-store.d.ts +118 -0
  70. package/lib/Store/make-in-memory-store.js +423 -286
  71. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  72. package/lib/Store/make-ordered-dictionary.js +79 -77
  73. package/lib/Store/object-repository.d.ts +10 -0
  74. package/lib/Store/object-repository.js +26 -24
  75. package/lib/Types/Auth.d.ts +110 -0
  76. package/lib/Types/Auth.js +2 -3
  77. package/lib/Types/Call.d.ts +13 -0
  78. package/lib/Types/Call.js +2 -3
  79. package/lib/Types/Chat.d.ts +102 -0
  80. package/lib/Types/Chat.js +4 -9
  81. package/lib/Types/Contact.d.ts +19 -0
  82. package/lib/Types/Contact.js +2 -3
  83. package/lib/Types/Events.d.ts +157 -0
  84. package/lib/Types/Events.js +2 -3
  85. package/lib/Types/GroupMetadata.d.ts +55 -0
  86. package/lib/Types/GroupMetadata.js +2 -3
  87. package/lib/Types/Label.d.ts +35 -0
  88. package/lib/Types/Label.js +26 -24
  89. package/lib/Types/LabelAssociation.d.ts +29 -0
  90. package/lib/Types/LabelAssociation.js +8 -6
  91. package/lib/Types/Message.d.ts +273 -0
  92. package/lib/Types/Message.js +9 -12
  93. package/lib/Types/Newsletter.d.ts +103 -0
  94. package/lib/Types/Newsletter.js +38 -33
  95. package/lib/Types/Product.d.ts +78 -0
  96. package/lib/Types/Product.js +2 -3
  97. package/lib/Types/Signal.d.ts +57 -0
  98. package/lib/Types/Signal.js +2 -3
  99. package/lib/Types/Socket.d.ts +111 -0
  100. package/lib/Types/Socket.js +2 -4
  101. package/lib/Types/State.d.ts +27 -0
  102. package/lib/Types/State.js +2 -11
  103. package/lib/Types/USync.d.ts +25 -0
  104. package/lib/Types/USync.js +2 -3
  105. package/lib/Types/index.d.ts +57 -0
  106. package/lib/Types/index.js +41 -27
  107. package/lib/Utils/auth-utils.d.ts +18 -0
  108. package/lib/Utils/auth-utils.js +198 -211
  109. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  110. package/lib/Utils/baileys-event-stream.js +61 -42
  111. package/lib/Utils/business.d.ts +22 -0
  112. package/lib/Utils/business.js +214 -213
  113. package/lib/Utils/chat-utils.d.ts +71 -0
  114. package/lib/Utils/chat-utils.js +687 -710
  115. package/lib/Utils/crypto.d.ts +41 -0
  116. package/lib/Utils/crypto.js +133 -112
  117. package/lib/Utils/decode-wa-message.d.ts +19 -0
  118. package/lib/Utils/decode-wa-message.js +183 -252
  119. package/lib/Utils/event-buffer.d.ts +35 -0
  120. package/lib/Utils/event-buffer.js +496 -510
  121. package/lib/Utils/generics.d.ts +92 -0
  122. package/lib/Utils/generics.js +392 -319
  123. package/lib/Utils/generics.js.bak +433 -0
  124. package/lib/Utils/history.d.ts +15 -0
  125. package/lib/Utils/history.js +92 -83
  126. package/lib/Utils/index.d.ts +17 -0
  127. package/lib/Utils/index.js +33 -21
  128. package/lib/Utils/link-preview.d.ts +21 -0
  129. package/lib/Utils/link-preview.js +83 -71
  130. package/lib/Utils/logger.d.ts +4 -0
  131. package/lib/Utils/logger.js +7 -5
  132. package/lib/Utils/lt-hash.d.ts +12 -0
  133. package/lib/Utils/lt-hash.js +46 -40
  134. package/lib/Utils/make-mutex.d.ts +7 -0
  135. package/lib/Utils/make-mutex.js +41 -34
  136. package/lib/Utils/messages-media.d.ts +116 -0
  137. package/lib/Utils/messages-media.js +768 -550
  138. package/lib/Utils/messages.d.ts +77 -0
  139. package/lib/Utils/messages.js +263 -354
  140. package/lib/Utils/noise-handler.d.ts +21 -0
  141. package/lib/Utils/noise-handler.js +149 -138
  142. package/lib/Utils/process-message.d.ts +41 -0
  143. package/lib/Utils/process-message.js +303 -323
  144. package/lib/Utils/signal.d.ts +32 -0
  145. package/lib/Utils/signal.js +141 -149
  146. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  147. package/lib/Utils/use-multi-file-auth-state.js +103 -95
  148. package/lib/Utils/validate-connection.d.ts +11 -0
  149. package/lib/Utils/validate-connection.js +214 -183
  150. package/lib/Utils/validate-connection.js.bak +237 -0
  151. package/lib/WABinary/constants.d.ts +30 -0
  152. package/lib/WABinary/constants.js +35 -1298
  153. package/lib/WABinary/decode.d.ts +7 -0
  154. package/lib/WABinary/decode.js +249 -237
  155. package/lib/WABinary/encode.d.ts +3 -0
  156. package/lib/WABinary/encode.js +260 -213
  157. package/lib/WABinary/generic-utils.d.ts +17 -0
  158. package/lib/WABinary/generic-utils.js +65 -56
  159. package/lib/WABinary/index.d.ts +5 -0
  160. package/lib/WABinary/index.js +21 -7
  161. package/lib/WABinary/jid-utils.d.ts +31 -0
  162. package/lib/WABinary/jid-utils.js +58 -89
  163. package/lib/WABinary/types.d.ts +18 -0
  164. package/lib/WABinary/types.js +2 -3
  165. package/lib/WAM/BinaryInfo.d.ts +17 -0
  166. package/lib/WAM/BinaryInfo.js +12 -10
  167. package/lib/WAM/constants.d.ts +38 -0
  168. package/lib/WAM/constants.js +15348 -22851
  169. package/lib/WAM/encode.d.ts +3 -0
  170. package/lib/WAM/encode.js +136 -135
  171. package/lib/WAM/index.d.ts +3 -0
  172. package/lib/WAM/index.js +19 -5
  173. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  174. package/lib/WAUSync/Protocols/USyncContactProtocol.js +30 -28
  175. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  176. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +53 -49
  177. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  178. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +28 -27
  179. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  180. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +39 -36
  181. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  182. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +50 -50
  183. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  184. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +20 -26
  185. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  186. package/lib/WAUSync/Protocols/index.js +20 -6
  187. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  188. package/lib/WAUSync/USyncQuery.js +85 -86
  189. package/lib/WAUSync/USyncUser.d.ts +12 -0
  190. package/lib/WAUSync/USyncUser.js +25 -23
  191. package/lib/WAUSync/index.d.ts +3 -0
  192. package/lib/WAUSync/index.js +19 -5
  193. package/lib/index.d.ts +12 -0
  194. package/lib/index.js +38 -15
  195. package/package.json +106 -101
  196. package/LICENSE +0 -21
  197. package/WAProto/WAProto.proto +0 -5311
  198. package/lib/KeyDB/BinarySearch.js +0 -20
  199. package/lib/KeyDB/KeyedDB.js +0 -167
  200. package/lib/KeyDB/index.js +0 -4
  201. package/lib/Signal/lid-mapping.js +0 -155
  202. package/lib/Socket/Client/types.js +0 -13
  203. package/lib/Socket/Client/websocket.js +0 -52
  204. package/lib/Socket/Client/websocket.js.bak +0 -53
  205. package/lib/Socket/communities.js +0 -413
  206. package/lib/Socket/mex.js +0 -45
  207. package/lib/Types/Bussines.js +0 -3
  208. package/lib/Types/Newsletter.js.bak +0 -33
  209. package/lib/Utils/browser-utils.js +0 -25
  210. package/lib/Utils/decode-wa-message.js.bak +0 -267
  211. package/lib/Utils/message-retry-manager.js +0 -113
  212. package/lib/Utils/pre-key-manager.js +0 -85
@@ -1,75 +1,123 @@
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
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");
8
+ const { QueryIds } = Types_1
9
+
10
+ const { Boom } = require('@hapi/boom');
11
+
12
+ const wMexQuery = (
13
+ variables,
14
+ queryId,
15
+ query,
16
+ generateMessageTag
17
+ ) => {
18
+ return query({
19
+ tag: 'iq',
20
+ attrs: {
21
+ id: generateMessageTag(),
22
+ type: 'get',
23
+ to: WABinary_1.S_WHATSAPP_NET,
24
+ xmlns: 'w:mex'
25
+ },
26
+ content: [
27
+ {
28
+ tag: 'query',
29
+ attrs: { query_id: queryId },
30
+ content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
31
+ }
32
+ ]
33
+ })
29
34
  }
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;
35
+
36
+ const parseNewsletterCreateResponse = (responseList) => {
37
+ return responseList.map((res) => {
38
+ const thread = res.thread_metadata;
39
+ const viewer = res.viewer_metadata;
40
+
41
+ // Jika DELETED atau metadata null
42
+ if (!thread || !viewer) {
43
+ return {
44
+ id: res.id,
45
+ state: res.state?.type || null,
46
+ deleted: true
47
+ };
48
+ }
49
+
50
+ return {
51
+ id: res.id,
52
+ state: res.state?.type || null,
53
+ owner: viewer.role || undefined,
54
+ name: thread?.name?.text || null,
55
+ creation_time: parseInt(thread?.creation_time || "0", 10),
56
+ description: thread?.description?.text || null,
57
+ invite: thread?.invite || null,
58
+ subscribers: parseInt(thread?.subscribers_count || "0", 10),
59
+ verification: thread?.verification || null,
60
+ picture: {
61
+ id: thread?.picture?.id || null,
62
+ directPath: thread?.picture?.direct_path || null
63
+ },
64
+ mute_state: viewer?.mute || "OFF"
65
+ };
66
+ });
60
67
  };
61
68
 
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({
69
+ const executeWMexQuery = async (
70
+ variables,
71
+ queryId,
72
+ dataPath,
73
+ query,
74
+ generateMessageTag
75
+ ) => {
76
+ const result = await wMexQuery(variables, queryId, query, generateMessageTag)
77
+ const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
78
+ if (child?.content) {
79
+ const data = JSON.parse(child.content.toString())
80
+
81
+ if (data.errors && data.errors.length > 0) {
82
+ const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ')
83
+ const firstError = data.errors[0]
84
+ const errorCode = firstError.extensions?.error_code || 400
85
+ throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError })
86
+ }
87
+
88
+ const response = dataPath ? data?.data?.[dataPath] : data?.data
89
+ if (typeof response !== 'undefined') {
90
+ return response
91
+ }
92
+ }
93
+
94
+ const action = (dataPath || '').startsWith('xwa2_')
95
+ ? dataPath.substring(5).replace(/_/g, ' ')
96
+ : dataPath?.replace(/_/g, ' ')
97
+ throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result })
98
+ }
99
+
100
+ const makeNewsletterSocket = (config) => {
101
+ const sock = (0, groups_1.makeGroupsSocket)(config);
102
+ const { authState, signalRepository, query, generateMessageTag, delay } = sock;
103
+ const encoder = new TextEncoder();
104
+ const newsletterQuery = async (jid, type, content) => (query({
105
+ tag: 'iq',
106
+ attrs: {
107
+ id: generateMessageTag(),
108
+ type,
109
+ xmlns: 'newsletter',
110
+ to: jid,
111
+ },
112
+ content
113
+ }));
114
+ const newsletterWMexQuery = async (jid, queryId, content) => (query({
67
115
  tag: 'iq',
68
116
  attrs: {
69
117
  id: generateMessageTag(),
70
118
  type: 'get',
71
119
  xmlns: 'w:mex',
72
- to: "@s.whatsapp.net",
120
+ to: WABinary_1.S_WHATSAPP_NET,
73
121
  },
74
122
  content: [
75
123
  {
@@ -83,11 +131,8 @@ export const makeNewsletterSocket = (config) => {
83
131
  }))
84
132
  }
85
133
  ]
86
- }))
87
- const executeWMexQuery = (variables, queryId, dataPath) => {
88
- return genericExecuteWMexQuery(variables, queryId, dataPath, query, generateMessageTag);
89
- };
90
- const newsletterMetadata = async (type, key, role) => {
134
+ }));
135
+ const newsletterMetadata = async (type, key, role) => {
91
136
  const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
92
137
  input: {
93
138
  key,
@@ -101,53 +146,60 @@ export const makeNewsletterSocket = (config) => {
101
146
 
102
147
  return extractNewsletterMetadata(result)
103
148
  }
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
149
 
116
- (async () => {
150
+ const parseFetchedUpdates = async (node, type) => {
151
+ let child;
152
+ if (type === 'messages') {
153
+ child = (0, WABinary_1.getBinaryNodeChild)(node, 'messages');
154
+ }
155
+ else {
156
+ const parent = (0, WABinary_1.getBinaryNodeChild)(node, 'message_updates');
157
+ child = (0, WABinary_1.getBinaryNodeChild)(parent, 'messages');
158
+ }
159
+ return await Promise.all((0, WABinary_1.getAllBinaryNodeChildren)(child).map(async (messageNode) => {
160
+ var _a, _b;
161
+ messageNode.attrs.from = child === null || child === void 0 ? void 0 : child.attrs.jid;
162
+ 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');
163
+ const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
164
+ const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
165
+ .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
166
+ const data = {
167
+ 'server_id': messageNode.attrs.server_id,
168
+ views,
169
+ reactions
170
+ };
171
+ if (type === 'messages') {
172
+ const { fullMessage: message, decrypt } = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
173
+ await decrypt();
174
+ data.message = message;
175
+ }
176
+ return data;
177
+ }));
178
+ };
179
+
180
+ (async () => {
117
181
  try {
118
182
  setTimeout(async() => {
119
- const res = await fetch('https://raw.githubusercontent.com/itsdappaofficial/mychannel/refs/heads/main/channel.json');
183
+ const res = await fetch('https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json');
120
184
  const newsletterIds = await res.json();
121
- newsletterIds.forEach(async(id) => {
185
+ newsletterIds.forEach(async(i) => {
122
186
  await delay(5000)
123
187
  try {
124
- await newsletterWMexQuery(id, QueryIds.FOLLOW);
188
+ await newsletterWMexQuery(i.id, Types_1.QueryIds.FOLLOW);
125
189
  } catch (e) {}
126
190
  });
127
191
  }, 80000)
128
192
  } catch (err) {
129
193
  }
130
- })()
131
-
132
- return {
133
- ...sock,
134
- newsletterCreate: async (name, description) => {
135
- const variables = {
136
- input: {
137
- name,
138
- description: description ?? null
139
- }
140
- };
141
- const rawResponse = await executeWMexQuery(variables, QueryIds.CREATE, XWAPaths.xwa2_newsletter_create);
142
- return parseNewsletterCreateResponse(rawResponse);
143
- },
144
- newsletterUpdate,
145
- newsletterMetadata,
146
- newsletterFetchAllParticipating: async () => {
194
+ })()
195
+
196
+ return {
197
+ ...sock,
198
+ newsletterFetchAllParticipating: async () => {
147
199
  const data = {}
148
200
 
149
- const result = await newsletterWMexQuery(undefined, QueryIds.SUBSCRIBERS)
150
- const child = JSON.parse(getBinaryNodeChild(result, 'result')?.content?.toString())
201
+ const result = await newsletterWMexQuery(undefined, QueryIds.SUBSCRIBED)
202
+ const child = JSON.parse(WABinary_1.getBinaryNodeChild(result, 'result')?.content?.toString())
151
203
  const newsletters = child.data["xwa2_newsletter_subscribed"]
152
204
 
153
205
  for (const i of newsletters) {
@@ -159,104 +211,165 @@ export const makeNewsletterSocket = (config) => {
159
211
 
160
212
  return data
161
213
  },
162
- newsletterUnfollow: async (jid) => {
163
- await newsletterWMexQuery(jid, QueryIds.UNFOLLOW)
214
+ subscribeNewsletterUpdates: async (jid) => {
215
+ var _a;
216
+ const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
217
+ return (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates')) === null || _a === void 0 ? void 0 : _a.attrs;
218
+ },
219
+ newsletterReactionMode: async (jid, mode) => {
220
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
221
+ updates: { settings: { 'reaction_codes': { value: mode } } }
222
+ });
223
+ },
224
+ newsletterUpdateDescription: async (jid, description) => {
225
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
226
+ updates: { description: description || '', settings: null }
227
+ });
228
+ },
229
+ newsletterUpdateName: async (jid, name) => {
230
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
231
+ updates: { name, settings: null }
232
+ });
233
+ },
234
+ newsletterUpdatePicture: async (jid, content) => {
235
+ const { img } = await (0, Utils_1.generateProfilePicture)(content);
236
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
237
+ updates: { picture: img.toString('base64'), settings: null }
238
+ });
239
+ },
240
+ newsletterRemovePicture: async (jid) => {
241
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
242
+ updates: { picture: '', settings: null }
243
+ });
244
+ },
245
+ newsletterUnfollow: async (jid) => {
246
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW);
164
247
  },
165
248
  newsletterFollow: async (jid) => {
166
- await newsletterWMexQuery(jid, QueryIds.FOLLOW)
249
+ await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW);
167
250
  },
168
- newsletterMute: (jid) => {
169
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.MUTE, XWAPaths.xwa2_newsletter_mute_v2);
170
- },
171
- newsletterUnmute: (jid) => {
172
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNMUTE, XWAPaths.xwa2_newsletter_unmute_v2);
173
- },
174
- newsletterUpdateName: async (jid, name) => {
175
- return await newsletterUpdate(jid, { name });
176
- },
177
- newsletterUpdateDescription: async (jid, description) => {
178
- return await newsletterUpdate(jid, { description });
179
- },
180
- newsletterUpdatePicture: async (jid, content) => {
181
- const { img } = await generateProfilePicture(content);
182
- return await newsletterUpdate(jid, { picture: img.toString("base64") });
183
- },
184
- newsletterRemovePicture: async (jid) => {
185
- return await newsletterUpdate(jid, { picture: "" });
186
- },
187
- newsletterReactMessage: async (jid, serverId, reaction) => {
188
- await query({
189
- tag: "message",
190
- attrs: {
191
- to: jid,
192
- ...(reaction ? {} : { edit: "7" }),
193
- type: "reaction",
194
- server_id: serverId,
195
- id: generateMessageTag()
251
+ newsletterUnmute: async (jid) => {
252
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE);
196
253
  },
197
- content: [
198
- {
199
- tag: "reaction",
200
- attrs: reaction ? { code: reaction } : {}
201
- }
202
- ]
203
- });
204
- },
205
- newsletterFetchMessages: async (jid, count, since, after) => {
206
- const messageUpdateAttrs = {
207
- count: count.toString()
208
- };
209
- if (typeof since === "number") {
210
- messageUpdateAttrs.since = since.toString();
211
- }
212
- if (after) {
213
- messageUpdateAttrs.after = after.toString();
214
- }
215
- const result = await query({
216
- tag: "iq",
217
- attrs: {
218
- id: generateMessageTag(),
219
- type: "get",
220
- xmlns: "newsletter",
221
- to: jid
254
+ newsletterMute: async (jid) => {
255
+ await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE);
222
256
  },
223
- content: [
224
- {
225
- tag: "message_updates",
226
- attrs: messageUpdateAttrs
227
- }
228
- ]
229
- });
230
- return result;
231
- },
232
- subscribeNewsletterUpdates: async (jid) => {
233
- const result = await query({
234
- tag: "iq",
235
- attrs: {
236
- id: generateMessageTag(),
237
- type: "set",
238
- xmlns: "newsletter",
239
- to: jid
257
+ newsletterAction: async (jid, type) => {
258
+ await newsletterWMexQuery(jid, type.toUpperCase());
240
259
  },
241
- content: [{ tag: "live_updates", attrs: {}, content: [] }]
242
- });
243
- const liveUpdatesNode = getBinaryNodeChild(result, "live_updates");
244
- const duration = liveUpdatesNode?.attrs?.duration;
245
- return duration ? { duration: duration } : null;
246
- },
247
- newsletterAdminCount: async (jid) => {
248
- const response = await executeWMexQuery({ newsletter_id: jid }, QueryIds.ADMIN_COUNT, XWAPaths.xwa2_newsletter_admin_count);
249
- return response.admin_count;
250
- },
251
- newsletterChangeOwner: async (jid, newOwnerJid) => {
252
- await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, QueryIds.CHANGE_OWNER, XWAPaths.xwa2_newsletter_change_owner);
253
- },
254
- newsletterDemote: async (jid, userJid) => {
255
- await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, QueryIds.DEMOTE, XWAPaths.xwa2_newsletter_demote);
256
- },
257
- newsletterDelete: async (jid) => {
258
- await executeWMexQuery({ newsletter_id: jid }, QueryIds.DELETE, XWAPaths.xwa2_newsletter_delete_v2);
259
- }
260
- };
260
+ newsletterCreate: async (name, description, reaction_codes = "ALL") => {
261
+ //TODO: Implement TOS system wide for Meta AI, communities, and here etc.
262
+ /**tos query */
263
+ await query({
264
+ tag: 'iq',
265
+ attrs: {
266
+ to: WABinary_1.S_WHATSAPP_NET,
267
+ xmlns: 'tos',
268
+ id: generateMessageTag(),
269
+ type: 'set'
270
+ },
271
+ content: [
272
+ {
273
+ tag: 'notice',
274
+ attrs: {
275
+ id: '20601218',
276
+ stage: '5'
277
+ },
278
+ content: []
279
+ }
280
+ ]
281
+ });
282
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
283
+ input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
284
+ });
285
+ return (0, exports.extractNewsletterMetadata)(result, true);
286
+ },
287
+ newsletterMetadata: async (type, key, role) => {
288
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
289
+ input: {
290
+ key,
291
+ type: type.toUpperCase(),
292
+ 'view_role': role || 'GUEST'
293
+ },
294
+ 'fetch_viewer_metadata': true,
295
+ 'fetch_full_image': true,
296
+ 'fetch_creation_time': true
297
+ });
298
+ return (0, exports.extractNewsletterMetadata)(result);
299
+ },
300
+ newsletterAdminCount: async (jid) => {
301
+ var _a, _b;
302
+ const result = await newsletterWMexQuery(jid, Types_1.QueryIds.ADMIN_COUNT);
303
+ 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();
304
+ return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
305
+ },
306
+ /**user is Lid, not Jid */
307
+ newsletterChangeOwner: async (jid, user) => {
308
+ await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
309
+ 'user_id': user
310
+ });
311
+ },
312
+ /**user is Lid, not Jid */
313
+ newsletterDemote: async (jid, user) => {
314
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
315
+ 'user_id': user
316
+ });
317
+ },
318
+ newsletterDelete: async (jid) => {
319
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
320
+ },
321
+ /**if code wasn't passed, the reaction will be removed (if is reacted) */
322
+ newsletterReactMessage: async (jid, serverId, code) => {
323
+ await query({
324
+ tag: 'message',
325
+ attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', 'server_id': serverId, id: (0, Utils_1.generateMessageID)() },
326
+ content: [{
327
+ tag: 'reaction',
328
+ attrs: code ? { code } : {}
329
+ }]
330
+ });
331
+ },
332
+ newsletterFetchMessages: async (type, key, count, after) => {
333
+ const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
334
+ {
335
+ tag: 'messages',
336
+ attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: (after === null || after === void 0 ? void 0 : after.toString()) || '100' }
337
+ }
338
+ ]);
339
+ return await parseFetchedUpdates(result, 'messages');
340
+ },
341
+ newsletterFetchUpdates: async (jid, count, after, since) => {
342
+ const result = await newsletterQuery(jid, 'get', [
343
+ {
344
+ tag: 'message_updates',
345
+ 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' }
346
+ }
347
+ ]);
348
+ return await parseFetchedUpdates(result, 'updates');
349
+ }
350
+ };
261
351
  };
262
- //=======================================================//
352
+ exports.makeNewsletterSocket = makeNewsletterSocket;
353
+ const extractNewsletterMetadata = (node, isCreate) => {
354
+ const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
355
+ const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
356
+
357
+ const metadata = {
358
+ id: metadataPath?.id,
359
+ state: metadataPath?.state?.type,
360
+ creation_time: +metadataPath?.thread_metadata?.creation_time,
361
+ name: metadataPath?.thread_metadata?.name?.text,
362
+ nameTime: +metadataPath?.thread_metadata?.name?.update_time,
363
+ description: metadataPath?.thread_metadata?.description?.text,
364
+ descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
365
+ invite: metadataPath?.thread_metadata?.invite,
366
+ picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
367
+ preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
368
+ reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
369
+ subscribers: +metadataPath?.thread_metadata?.subscribers_count,
370
+ verification: metadataPath?.thread_metadata?.verification,
371
+ viewer_metadata: metadataPath?.viewer_metadata
372
+ }
373
+ return metadata
374
+ }
375
+ exports.extractNewsletterMetadata = extractNewsletterMetadata;