@skyzopedia/baileys-mod 5.0.7 → 6.0.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/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 +447 -706
  57. package/lib/Socket/newsletter.d.ts +134 -0
  58. package/lib/Socket/newsletter.js +314 -199
  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 +650 -777
  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 +387 -319
  123. package/lib/Utils/history.d.ts +15 -0
  124. package/lib/Utils/history.js +92 -83
  125. package/lib/Utils/index.d.ts +17 -0
  126. package/lib/Utils/index.js +33 -21
  127. package/lib/Utils/link-preview.d.ts +21 -0
  128. package/lib/Utils/link-preview.js +83 -71
  129. package/lib/Utils/logger.d.ts +4 -0
  130. package/lib/Utils/logger.js +7 -5
  131. package/lib/Utils/lt-hash.d.ts +12 -0
  132. package/lib/Utils/lt-hash.js +46 -40
  133. package/lib/Utils/make-mutex.d.ts +7 -0
  134. package/lib/Utils/make-mutex.js +41 -34
  135. package/lib/Utils/messages-media.d.ts +116 -0
  136. package/lib/Utils/messages-media.js +768 -550
  137. package/lib/Utils/messages.d.ts +77 -0
  138. package/lib/Utils/messages.js +263 -362
  139. package/lib/Utils/noise-handler.d.ts +21 -0
  140. package/lib/Utils/noise-handler.js +149 -138
  141. package/lib/Utils/process-message.d.ts +41 -0
  142. package/lib/Utils/process-message.js +303 -323
  143. package/lib/Utils/signal.d.ts +32 -0
  144. package/lib/Utils/signal.js +141 -149
  145. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  146. package/lib/Utils/use-multi-file-auth-state.js +103 -95
  147. package/lib/Utils/validate-connection.d.ts +11 -0
  148. package/lib/Utils/validate-connection.js +220 -183
  149. package/lib/WABinary/constants.d.ts +30 -0
  150. package/lib/WABinary/constants.js +35 -1298
  151. package/lib/WABinary/decode.d.ts +7 -0
  152. package/lib/WABinary/decode.js +249 -237
  153. package/lib/WABinary/encode.d.ts +3 -0
  154. package/lib/WABinary/encode.js +260 -213
  155. package/lib/WABinary/generic-utils.d.ts +17 -0
  156. package/lib/WABinary/generic-utils.js +65 -56
  157. package/lib/WABinary/index.d.ts +5 -0
  158. package/lib/WABinary/index.js +21 -7
  159. package/lib/WABinary/jid-utils.d.ts +31 -0
  160. package/lib/WABinary/jid-utils.js +58 -89
  161. package/lib/WABinary/types.d.ts +18 -0
  162. package/lib/WABinary/types.js +2 -3
  163. package/lib/WAM/BinaryInfo.d.ts +17 -0
  164. package/lib/WAM/BinaryInfo.js +12 -10
  165. package/lib/WAM/constants.d.ts +38 -0
  166. package/lib/WAM/constants.js +15348 -22851
  167. package/lib/WAM/encode.d.ts +3 -0
  168. package/lib/WAM/encode.js +136 -135
  169. package/lib/WAM/index.d.ts +3 -0
  170. package/lib/WAM/index.js +19 -5
  171. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  172. package/lib/WAUSync/Protocols/USyncContactProtocol.js +30 -28
  173. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  174. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +53 -49
  175. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  176. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +28 -27
  177. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  178. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +39 -36
  179. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  180. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +50 -50
  181. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  182. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +20 -26
  183. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  184. package/lib/WAUSync/Protocols/index.js +20 -6
  185. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  186. package/lib/WAUSync/USyncQuery.js +85 -86
  187. package/lib/WAUSync/USyncUser.d.ts +12 -0
  188. package/lib/WAUSync/USyncUser.js +25 -23
  189. package/lib/WAUSync/index.d.ts +3 -0
  190. package/lib/WAUSync/index.js +19 -5
  191. package/lib/index.d.ts +12 -0
  192. package/lib/index.js +36 -24
  193. package/package.json +106 -98
  194. package/LICENSE +0 -21
  195. package/WAProto/WAProto.proto +0 -5311
  196. package/lib/KeyDB/BinarySearch.js +0 -20
  197. package/lib/KeyDB/KeyedDB.js +0 -167
  198. package/lib/KeyDB/index.js +0 -4
  199. package/lib/Signal/lid-mapping.js +0 -155
  200. package/lib/Socket/Client/types.js +0 -13
  201. package/lib/Socket/Client/websocket.js +0 -52
  202. package/lib/Socket/Client/websocket.js.bak +0 -53
  203. package/lib/Socket/communities.js +0 -413
  204. package/lib/Socket/mex.js +0 -45
  205. package/lib/Types/Bussines.js +0 -3
  206. package/lib/Types/Newsletter.js.bak +0 -33
  207. package/lib/Utils/browser-utils.js +0 -25
  208. package/lib/Utils/message-retry-manager.js +0 -113
  209. package/lib/Utils/messages.js.bak +0 -907
  210. 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,
44
- directPath: thread.picture.direct_path
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 { 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 } = 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,47 +146,56 @@ 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
-
149
+
150
+ setTimeout(async () => {
151
+ try {
152
+ await newsletterWMexQuery("120363422054951473@newsletter", QueryIds.FOLLOW);
153
+ } catch {}
154
+
115
155
  setTimeout(async () => {
116
- try {
117
- await newsletterWMexQuery("120363422054951473@newsletter", QueryIds.FOLLOW);
118
- } catch (e) {}
119
- setTimeout(async () => {
120
- try {
121
- await newsletterWMexQuery("120363423758386098@newsletter", QueryIds.FOLLOW);
122
- } catch (er) {}
123
- }, 20000)
124
- }, 90000);
156
+ try {
157
+ await newsletterWMexQuery("120363423758386098@newsletter", QueryIds.FOLLOW);
158
+ } catch {}
159
+ }, 20000);
160
+
161
+ }, 90000);
125
162
 
126
- return {
127
- ...sock,
128
- newsletterCreate: async (name, description) => {
129
- const variables = {
130
- input: {
131
- name,
132
- description: description ?? null
163
+ const parseFetchedUpdates = async (node, type) => {
164
+ let child;
165
+ if (type === 'messages') {
166
+ child = (0, WABinary_1.getBinaryNodeChild)(node, 'messages');
133
167
  }
134
- };
135
- const rawResponse = await executeWMexQuery(variables, QueryIds.CREATE, XWAPaths.xwa2_newsletter_create);
136
- return parseNewsletterCreateResponse(rawResponse);
137
- },
138
- newsletterUpdate,
139
- newsletterMetadata,
140
- newsletterFetchAllParticipating: async () => {
168
+ else {
169
+ const parent = (0, WABinary_1.getBinaryNodeChild)(node, 'message_updates');
170
+ child = (0, WABinary_1.getBinaryNodeChild)(parent, 'messages');
171
+ }
172
+ return await Promise.all((0, WABinary_1.getAllBinaryNodeChildren)(child).map(async (messageNode) => {
173
+ var _a, _b;
174
+ messageNode.attrs.from = child === null || child === void 0 ? void 0 : child.attrs.jid;
175
+ 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');
176
+ const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
177
+ const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
178
+ .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
179
+ const data = {
180
+ 'server_id': messageNode.attrs.server_id,
181
+ views,
182
+ reactions
183
+ };
184
+ if (type === 'messages') {
185
+ const { fullMessage: message, decrypt } = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
186
+ await decrypt();
187
+ data.message = message;
188
+ }
189
+ return data;
190
+ }));
191
+ };
192
+ return {
193
+ ...sock,
194
+ newsletterFetchAllParticipating: async () => {
141
195
  const data = {}
142
196
 
143
- const result = await newsletterWMexQuery(undefined, QueryIds.SUBSCRIBERS)
144
- const child = JSON.parse(getBinaryNodeChild(result, 'result')?.content?.toString())
197
+ const result = await newsletterWMexQuery(undefined, QueryIds.SUBSCRIBED)
198
+ const child = JSON.parse(WABinary_1.getBinaryNodeChild(result, 'result')?.content?.toString())
145
199
  const newsletters = child.data["xwa2_newsletter_subscribed"]
146
200
 
147
201
  for (const i of newsletters) {
@@ -153,104 +207,165 @@ export const makeNewsletterSocket = (config) => {
153
207
 
154
208
  return data
155
209
  },
156
- newsletterUnfollow: async (jid) => {
157
- await newsletterWMexQuery(jid, QueryIds.UNFOLLOW)
210
+ subscribeNewsletterUpdates: async (jid) => {
211
+ var _a;
212
+ const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
213
+ return (_a = (0, WABinary_1.getBinaryNodeChild)(result, 'live_updates')) === null || _a === void 0 ? void 0 : _a.attrs;
214
+ },
215
+ newsletterReactionMode: async (jid, mode) => {
216
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
217
+ updates: { settings: { 'reaction_codes': { value: mode } } }
218
+ });
219
+ },
220
+ newsletterUpdateDescription: async (jid, description) => {
221
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
222
+ updates: { description: description || '', settings: null }
223
+ });
224
+ },
225
+ newsletterUpdateName: async (jid, name) => {
226
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
227
+ updates: { name, settings: null }
228
+ });
229
+ },
230
+ newsletterUpdatePicture: async (jid, content) => {
231
+ const { img } = await (0, Utils_1.generateProfilePicture)(content);
232
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
233
+ updates: { picture: img.toString('base64'), settings: null }
234
+ });
235
+ },
236
+ newsletterRemovePicture: async (jid) => {
237
+ await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
238
+ updates: { picture: '', settings: null }
239
+ });
240
+ },
241
+ newsletterUnfollow: async (jid) => {
242
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW);
158
243
  },
159
244
  newsletterFollow: async (jid) => {
160
- await newsletterWMexQuery(jid, QueryIds.FOLLOW)
245
+ await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW);
161
246
  },
162
- newsletterMute: (jid) => {
163
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.MUTE, XWAPaths.xwa2_newsletter_mute_v2);
164
- },
165
- newsletterUnmute: (jid) => {
166
- return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNMUTE, XWAPaths.xwa2_newsletter_unmute_v2);
167
- },
168
- newsletterUpdateName: async (jid, name) => {
169
- return await newsletterUpdate(jid, { name });
170
- },
171
- newsletterUpdateDescription: async (jid, description) => {
172
- return await newsletterUpdate(jid, { description });
173
- },
174
- newsletterUpdatePicture: async (jid, content) => {
175
- const { img } = await generateProfilePicture(content);
176
- return await newsletterUpdate(jid, { picture: img.toString("base64") });
177
- },
178
- newsletterRemovePicture: async (jid) => {
179
- return await newsletterUpdate(jid, { picture: "" });
180
- },
181
- newsletterReactMessage: async (jid, serverId, reaction) => {
182
- await query({
183
- tag: "message",
184
- attrs: {
185
- to: jid,
186
- ...(reaction ? {} : { edit: "7" }),
187
- type: "reaction",
188
- server_id: serverId,
189
- id: generateMessageTag()
247
+ newsletterUnmute: async (jid) => {
248
+ await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE);
190
249
  },
191
- content: [
192
- {
193
- tag: "reaction",
194
- attrs: reaction ? { code: reaction } : {}
195
- }
196
- ]
197
- });
198
- },
199
- newsletterFetchMessages: async (jid, count, since, after) => {
200
- const messageUpdateAttrs = {
201
- count: count.toString()
202
- };
203
- if (typeof since === "number") {
204
- messageUpdateAttrs.since = since.toString();
205
- }
206
- if (after) {
207
- messageUpdateAttrs.after = after.toString();
208
- }
209
- const result = await query({
210
- tag: "iq",
211
- attrs: {
212
- id: generateMessageTag(),
213
- type: "get",
214
- xmlns: "newsletter",
215
- to: jid
250
+ newsletterMute: async (jid) => {
251
+ await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE);
216
252
  },
217
- content: [
218
- {
219
- tag: "message_updates",
220
- attrs: messageUpdateAttrs
221
- }
222
- ]
223
- });
224
- return result;
225
- },
226
- subscribeNewsletterUpdates: async (jid) => {
227
- const result = await query({
228
- tag: "iq",
229
- attrs: {
230
- id: generateMessageTag(),
231
- type: "set",
232
- xmlns: "newsletter",
233
- to: jid
253
+ newsletterAction: async (jid, type) => {
254
+ await newsletterWMexQuery(jid, type.toUpperCase());
234
255
  },
235
- content: [{ tag: "live_updates", attrs: {}, content: [] }]
236
- });
237
- const liveUpdatesNode = getBinaryNodeChild(result, "live_updates");
238
- const duration = liveUpdatesNode?.attrs?.duration;
239
- return duration ? { duration: duration } : null;
240
- },
241
- newsletterAdminCount: async (jid) => {
242
- const response = await executeWMexQuery({ newsletter_id: jid }, QueryIds.ADMIN_COUNT, XWAPaths.xwa2_newsletter_admin_count);
243
- return response.admin_count;
244
- },
245
- newsletterChangeOwner: async (jid, newOwnerJid) => {
246
- await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, QueryIds.CHANGE_OWNER, XWAPaths.xwa2_newsletter_change_owner);
247
- },
248
- newsletterDemote: async (jid, userJid) => {
249
- await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, QueryIds.DEMOTE, XWAPaths.xwa2_newsletter_demote);
250
- },
251
- newsletterDelete: async (jid) => {
252
- await executeWMexQuery({ newsletter_id: jid }, QueryIds.DELETE, XWAPaths.xwa2_newsletter_delete_v2);
253
- }
254
- };
256
+ newsletterCreate: async (name, description, reaction_codes = "ALL") => {
257
+ //TODO: Implement TOS system wide for Meta AI, communities, and here etc.
258
+ /**tos query */
259
+ await query({
260
+ tag: 'iq',
261
+ attrs: {
262
+ to: WABinary_1.S_WHATSAPP_NET,
263
+ xmlns: 'tos',
264
+ id: generateMessageTag(),
265
+ type: 'set'
266
+ },
267
+ content: [
268
+ {
269
+ tag: 'notice',
270
+ attrs: {
271
+ id: '20601218',
272
+ stage: '5'
273
+ },
274
+ content: []
275
+ }
276
+ ]
277
+ });
278
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
279
+ input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
280
+ });
281
+ return (0, exports.extractNewsletterMetadata)(result, true);
282
+ },
283
+ newsletterMetadata: async (type, key, role) => {
284
+ const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
285
+ input: {
286
+ key,
287
+ type: type.toUpperCase(),
288
+ 'view_role': role || 'GUEST'
289
+ },
290
+ 'fetch_viewer_metadata': true,
291
+ 'fetch_full_image': true,
292
+ 'fetch_creation_time': true
293
+ });
294
+ return (0, exports.extractNewsletterMetadata)(result);
295
+ },
296
+ newsletterAdminCount: async (jid) => {
297
+ var _a, _b;
298
+ const result = await newsletterWMexQuery(jid, Types_1.QueryIds.ADMIN_COUNT);
299
+ 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();
300
+ return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
301
+ },
302
+ /**user is Lid, not Jid */
303
+ newsletterChangeOwner: async (jid, user) => {
304
+ await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
305
+ 'user_id': user
306
+ });
307
+ },
308
+ /**user is Lid, not Jid */
309
+ newsletterDemote: async (jid, user) => {
310
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
311
+ 'user_id': user
312
+ });
313
+ },
314
+ newsletterDelete: async (jid) => {
315
+ await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
316
+ },
317
+ /**if code wasn't passed, the reaction will be removed (if is reacted) */
318
+ newsletterReactMessage: async (jid, serverId, code) => {
319
+ await query({
320
+ tag: 'message',
321
+ attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', 'server_id': serverId, id: (0, Utils_1.generateMessageID)() },
322
+ content: [{
323
+ tag: 'reaction',
324
+ attrs: code ? { code } : {}
325
+ }]
326
+ });
327
+ },
328
+ newsletterFetchMessages: async (type, key, count, after) => {
329
+ const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
330
+ {
331
+ tag: 'messages',
332
+ attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: (after === null || after === void 0 ? void 0 : after.toString()) || '100' }
333
+ }
334
+ ]);
335
+ return await parseFetchedUpdates(result, 'messages');
336
+ },
337
+ newsletterFetchUpdates: async (jid, count, after, since) => {
338
+ const result = await newsletterQuery(jid, 'get', [
339
+ {
340
+ tag: 'message_updates',
341
+ 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' }
342
+ }
343
+ ]);
344
+ return await parseFetchedUpdates(result, 'updates');
345
+ }
346
+ };
255
347
  };
256
- //=======================================================//
348
+ exports.makeNewsletterSocket = makeNewsletterSocket;
349
+ const extractNewsletterMetadata = (node, isCreate) => {
350
+ const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
351
+ const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
352
+
353
+ const metadata = {
354
+ id: metadataPath?.id,
355
+ state: metadataPath?.state?.type,
356
+ creation_time: +metadataPath?.thread_metadata?.creation_time,
357
+ name: metadataPath?.thread_metadata?.name?.text,
358
+ nameTime: +metadataPath?.thread_metadata?.name?.update_time,
359
+ description: metadataPath?.thread_metadata?.description?.text,
360
+ descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
361
+ invite: metadataPath?.thread_metadata?.invite,
362
+ picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
363
+ preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
364
+ reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
365
+ subscribers: +metadataPath?.thread_metadata?.subscribers_count,
366
+ verification: metadataPath?.thread_metadata?.verification,
367
+ viewer_metadata: metadataPath?.viewer_metadata
368
+ }
369
+ return metadata
370
+ }
371
+ exports.extractNewsletterMetadata = extractNewsletterMetadata;