naya-flore 4.7.1 → 4.7.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/README.md +0 -104
- package/WAProto/WAProto.proto +89 -1195
- package/WAProto/index.d.ts +1256 -13195
- package/WAProto/index.js +11405 -32544
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +0 -231
- package/lib/Defaults/index.js +102 -92
- package/lib/Defaults/phonenumber-mcc.json +221 -221
- package/lib/Signal/libsignal.js +9 -18
- package/lib/Socket/Client/abstract-socket-client.d.ts +2 -0
- package/lib/Socket/Client/index.d.ts +3 -2
- package/lib/Socket/Client/index.js +3 -2
- package/lib/Socket/Client/mobile-socket-client.d.ts +1 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +1 -1
- package/lib/Socket/Client/{websocket.js → web-socket-client.js} +2 -2
- package/lib/Socket/business.d.ts +43 -42
- package/lib/Socket/chats.d.ts +8 -9
- package/lib/Socket/chats.js +34 -41
- package/lib/Socket/groups.d.ts +7 -7
- package/lib/Socket/groups.js +4 -2
- package/lib/Socket/index.d.ts +52 -51
- package/lib/Socket/messages-recv.d.ts +42 -41
- package/lib/Socket/messages-recv.js +127 -190
- package/lib/Socket/messages-send.d.ts +9 -16
- package/lib/Socket/messages-send.js +316 -467
- package/lib/Socket/newsletter.d.ts +28 -26
- package/lib/Socket/newsletter.js +3 -3
- package/lib/Socket/registration.d.ts +52 -49
- package/lib/Socket/registration.js +7 -7
- package/lib/Socket/socket.d.ts +0 -1
- package/lib/Socket/socket.js +23 -49
- package/lib/Socket/usync.d.ts +10 -11
- package/lib/Store/index.d.ts +2 -2
- package/lib/Store/index.js +2 -2
- package/lib/Store/make-cache-manager-store.d.ts +0 -1
- package/lib/Store/make-in-memory-store.js +1 -5
- package/lib/Store/make-ordered-dictionary.d.ts +1 -1
- package/lib/Types/Auth.d.ts +1 -0
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +7 -12
- package/lib/Types/Events.d.ts +2 -17
- package/lib/Types/GroupMetadata.d.ts +2 -3
- package/lib/Types/Label.d.ts +0 -11
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +10 -170
- package/lib/Types/Newsletter.js +3 -3
- package/lib/Types/Socket.d.ts +4 -7
- package/lib/Types/index.d.ts +0 -9
- package/lib/Types/index.js +1 -1
- package/lib/Utils/auth-utils.js +3 -3
- package/lib/Utils/business.d.ts +1 -1
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.d.ts +12 -11
- package/lib/Utils/chat-utils.js +26 -42
- package/lib/Utils/crypto.d.ts +16 -15
- package/lib/Utils/crypto.js +23 -35
- package/lib/Utils/decode-wa-message.d.ts +0 -17
- package/lib/Utils/decode-wa-message.js +15 -43
- package/lib/Utils/generics.d.ts +17 -13
- package/lib/Utils/generics.js +15 -25
- package/lib/Utils/history.d.ts +2 -6
- package/lib/Utils/history.js +6 -4
- package/lib/Utils/logger.d.ts +3 -1
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/messages-media.d.ts +28 -25
- package/lib/Utils/messages-media.js +47 -38
- package/lib/Utils/messages.js +41 -454
- package/lib/Utils/noise-handler.d.ts +5 -4
- package/lib/Utils/process-message.js +2 -2
- package/lib/Utils/signal.d.ts +1 -2
- package/lib/Utils/signal.js +19 -11
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +3 -11
- package/lib/Utils/validate-connection.d.ts +1 -1
- package/lib/Utils/validate-connection.js +1 -1
- package/lib/WABinary/decode.d.ts +2 -1
- package/lib/WABinary/decode.js +7 -17
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.js +17 -33
- package/lib/WABinary/generic-utils.d.ts +3 -2
- package/lib/WABinary/generic-utils.js +2 -2
- package/lib/WABinary/jid-utils.d.ts +1 -1
- package/lib/WAM/BinaryInfo.d.ts +11 -2
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +3 -3
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
- package/lib/WAUSync/USyncQuery.d.ts +2 -0
- package/lib/WAUSync/USyncQuery.js +10 -0
- package/lib/WAUSync/USyncUser.d.ts +2 -0
- package/lib/WAUSync/USyncUser.js +4 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/package.json +19 -32
- package/lib/Socket/Client/types.d.ts +0 -17
- package/lib/Socket/Client/types.js +0 -13
@@ -1,24 +1,22 @@
|
|
1
1
|
"use strict";
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
4
|
+
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.makeMessagesSocket = void 0;
|
7
7
|
const boom_1 = require("@hapi/boom");
|
8
8
|
const node_cache_1 = __importDefault(require("node-cache"));
|
9
9
|
const WAProto_1 = require("../../WAProto");
|
10
10
|
const Defaults_1 = require("../Defaults");
|
11
|
-
const Types_1 = require("../Types");
|
12
11
|
const Utils_1 = require("../Utils");
|
13
12
|
const link_preview_1 = require("../Utils/link-preview");
|
14
13
|
const WABinary_1 = require("../WABinary");
|
15
|
-
const WAUSync_1 = require("../WAUSync");
|
16
14
|
const newsletter_1 = require("./newsletter");
|
17
15
|
var ListType = WAProto_1.proto.Message.ListMessage.ListType;
|
18
16
|
const makeMessagesSocket = (config) => {
|
19
17
|
const { logger, linkPreviewImageThumbnailWidth, generateHighQualityLinkPreview, options: axiosOptions, patchMessageBeforeSending, } = config;
|
20
18
|
const sock = (0, newsletter_1.makeNewsletterSocket)(config);
|
21
|
-
const { ev, authState, processingMutex, signalRepository, upsertMessage, query, fetchPrivacySettings, generateMessageTag, sendNode, groupMetadata,
|
19
|
+
const { ev, authState, processingMutex, signalRepository, upsertMessage, query, fetchPrivacySettings, generateMessageTag, sendNode, groupMetadata, groupToggleEphemeral } = sock;
|
22
20
|
const userDevicesCache = config.userDevicesCache || new node_cache_1.default({
|
23
21
|
stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.USER_DEVICES,
|
24
22
|
useClones: false
|
@@ -111,43 +109,6 @@ const makeMessagesSocket = (config) => {
|
|
111
109
|
const readType = privacySettings.readreceipts === 'all' ? 'read' : 'read-self';
|
112
110
|
await sendReceipts(keys, readType);
|
113
111
|
};
|
114
|
-
const profilePictureUrl = async (jid, type = 'preview', timeoutMs) => {
|
115
|
-
var _a, _b, _c, _d;
|
116
|
-
jid = (0, WABinary_1.jidNormalizedUser)(jid);
|
117
|
-
if ((0, WABinary_1.isJidNewsLetter)(jid)) {
|
118
|
-
const node = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
119
|
-
input: {
|
120
|
-
key: jid,
|
121
|
-
type: "JID",
|
122
|
-
'view_role': 'GUEST'
|
123
|
-
},
|
124
|
-
'fetch_viewer_metadata': true,
|
125
|
-
'fetch_full_image': true,
|
126
|
-
'fetch_creation_time': true
|
127
|
-
});
|
128
|
-
const result = (_b = (_a = (0, WABinary_1.getBinaryNodeChild)(node, 'result')) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.toString();
|
129
|
-
const metadataPath = JSON.parse(result).data[Types_1.XWAPaths.NEWSLETTER];
|
130
|
-
const pictype = type === 'image' ? 'picture' : 'preview';
|
131
|
-
const directPath = (_c = metadataPath === null || metadataPath === void 0 ? void 0 : metadataPath.thread_metadata[pictype]) === null || _c === void 0 ? void 0 : _c.direct_path;
|
132
|
-
return directPath ? (0, Utils_1.getUrlFromDirectPath)(directPath) : null;
|
133
|
-
}
|
134
|
-
else {
|
135
|
-
const result = await query({
|
136
|
-
tag: 'iq',
|
137
|
-
attrs: {
|
138
|
-
target: jid,
|
139
|
-
to: WABinary_1.S_WHATSAPP_NET,
|
140
|
-
type: 'get',
|
141
|
-
xmlns: 'w:profile:picture'
|
142
|
-
},
|
143
|
-
content: [
|
144
|
-
{ tag: 'picture', attrs: { type, query: 'url' } }
|
145
|
-
]
|
146
|
-
}, timeoutMs);
|
147
|
-
const child = (0, WABinary_1.getBinaryNodeChild)(result, 'picture');
|
148
|
-
return (_d = child === null || child === void 0 ? void 0 : child.attrs) === null || _d === void 0 ? void 0 : _d.url;
|
149
|
-
}
|
150
|
-
};
|
151
112
|
/** Fetch all the devices we've to send a message to */
|
152
113
|
const getUSyncDevices = async (jids, useCache, ignoreZeroDevices) => {
|
153
114
|
var _a;
|
@@ -155,46 +116,66 @@ const makeMessagesSocket = (config) => {
|
|
155
116
|
if (!useCache) {
|
156
117
|
logger.debug('not using cache for devices');
|
157
118
|
}
|
158
|
-
const
|
119
|
+
const users = [];
|
159
120
|
jids = Array.from(new Set(jids));
|
160
121
|
for (let jid of jids) {
|
161
122
|
const user = (_a = (0, WABinary_1.jidDecode)(jid)) === null || _a === void 0 ? void 0 : _a.user;
|
162
123
|
jid = (0, WABinary_1.jidNormalizedUser)(jid);
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
logger.trace({ user }, 'using cache for devices');
|
168
|
-
}
|
169
|
-
else {
|
170
|
-
toFetch.push(jid);
|
171
|
-
}
|
124
|
+
const devices = userDevicesCache.get(user);
|
125
|
+
if (devices && useCache) {
|
126
|
+
deviceResults.push(...devices);
|
127
|
+
logger.trace({ user }, 'using cache for devices');
|
172
128
|
}
|
173
129
|
else {
|
174
|
-
|
130
|
+
users.push({ tag: 'user', attrs: { jid } });
|
175
131
|
}
|
176
132
|
}
|
177
|
-
if (!
|
133
|
+
if (!users.length) {
|
178
134
|
return deviceResults;
|
179
135
|
}
|
180
|
-
const
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
136
|
+
const iq = {
|
137
|
+
tag: 'iq',
|
138
|
+
attrs: {
|
139
|
+
to: WABinary_1.S_WHATSAPP_NET,
|
140
|
+
type: 'get',
|
141
|
+
xmlns: 'usync',
|
142
|
+
},
|
143
|
+
content: [
|
144
|
+
{
|
145
|
+
tag: 'usync',
|
146
|
+
attrs: {
|
147
|
+
sid: generateMessageTag(),
|
148
|
+
mode: 'query',
|
149
|
+
last: 'true',
|
150
|
+
index: '0',
|
151
|
+
context: 'message',
|
152
|
+
},
|
153
|
+
content: [
|
154
|
+
{
|
155
|
+
tag: 'query',
|
156
|
+
attrs: {},
|
157
|
+
content: [
|
158
|
+
{
|
159
|
+
tag: 'devices',
|
160
|
+
attrs: { version: '2' }
|
161
|
+
}
|
162
|
+
]
|
163
|
+
},
|
164
|
+
{ tag: 'list', attrs: {}, content: users }
|
165
|
+
]
|
166
|
+
},
|
167
|
+
],
|
168
|
+
};
|
169
|
+
const result = await query(iq);
|
170
|
+
const extracted = (0, Utils_1.extractDeviceJids)(result, authState.creds.me.id, ignoreZeroDevices);
|
171
|
+
const deviceMap = {};
|
172
|
+
for (const item of extracted) {
|
173
|
+
deviceMap[item.user] = deviceMap[item.user] || [];
|
174
|
+
deviceMap[item.user].push(item);
|
175
|
+
deviceResults.push(item);
|
176
|
+
}
|
177
|
+
for (const key in deviceMap) {
|
178
|
+
userDevicesCache.set(key, deviceMap[key]);
|
198
179
|
}
|
199
180
|
return deviceResults;
|
200
181
|
};
|
@@ -241,28 +222,6 @@ const makeMessagesSocket = (config) => {
|
|
241
222
|
}
|
242
223
|
return didFetchNewSession;
|
243
224
|
};
|
244
|
-
const sendPeerDataOperationMessage = async (pdoMessage) => {
|
245
|
-
var _a;
|
246
|
-
//TODO: for later, abstract the logic to send a Peer Message instead of just PDO - useful for App State Key Resync with phone
|
247
|
-
if (!((_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.id)) {
|
248
|
-
throw new boom_1.Boom('Not authenticated');
|
249
|
-
}
|
250
|
-
const protocolMessage = {
|
251
|
-
protocolMessage: {
|
252
|
-
peerDataOperationRequestMessage: pdoMessage,
|
253
|
-
type: WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE
|
254
|
-
}
|
255
|
-
};
|
256
|
-
const meJid = (0, WABinary_1.jidNormalizedUser)(authState.creds.me.id);
|
257
|
-
const msgId = await relayMessage(meJid, protocolMessage, {
|
258
|
-
additionalAttributes: {
|
259
|
-
category: 'peer',
|
260
|
-
// eslint-disable-next-line camelcase
|
261
|
-
push_priority: 'high_force',
|
262
|
-
},
|
263
|
-
});
|
264
|
-
return msgId;
|
265
|
-
};
|
266
225
|
const createParticipantNodes = async (jids, message, extraAttrs) => {
|
267
226
|
const patched = await patchMessageBeforeSending(message, jids);
|
268
227
|
const bytes = (0, Utils_1.encodeWAMessage)(patched);
|
@@ -298,7 +257,6 @@ const makeMessagesSocket = (config) => {
|
|
298
257
|
const isGroup = server === 'g.us';
|
299
258
|
const isStatus = jid === statusJid;
|
300
259
|
const isLid = server === 'lid';
|
301
|
-
const isPrivate = server === 's.whatsapp.net';
|
302
260
|
const isNewsletter = server === 'newsletter';
|
303
261
|
msgId = msgId || (0, Utils_1.generateMessageID)();
|
304
262
|
useUserDevicesCache = useUserDevicesCache !== false;
|
@@ -353,7 +311,7 @@ const makeMessagesSocket = (config) => {
|
|
353
311
|
const additionalDevices = await getUSyncDevices(participantsList, !!useUserDevicesCache, false);
|
354
312
|
devices.push(...additionalDevices);
|
355
313
|
}
|
356
|
-
const patched = await patchMessageBeforeSending(message, devices.map(d => (0, WABinary_1.jidEncode)(d.user, isLid ? 'lid' :
|
314
|
+
const patched = await patchMessageBeforeSending(message, devices.map(d => (0, WABinary_1.jidEncode)(d.user, isLid ? 'lid' : 's.whatsapp.net', d.device)));
|
357
315
|
const bytes = (0, Utils_1.encodeWAMessage)(patched);
|
358
316
|
const { ciphertext, senderKeyDistributionMessage } = await signalRepository.encryptGroupMessage({
|
359
317
|
group: destinationJid,
|
@@ -363,7 +321,7 @@ const makeMessagesSocket = (config) => {
|
|
363
321
|
const senderKeyJids = [];
|
364
322
|
// ensure a connection is established with every device
|
365
323
|
for (const { user, device } of devices) {
|
366
|
-
const jid = (0, WABinary_1.jidEncode)(user,
|
324
|
+
const jid = (0, WABinary_1.jidEncode)(user, (groupData === null || groupData === void 0 ? void 0 : groupData.addressingMode) === 'lid' ? 'lid' : 's.whatsapp.net', device);
|
367
325
|
if (!senderKeyMap[jid] || !!participant) {
|
368
326
|
senderKeyJids.push(jid);
|
369
327
|
// store that this person has had the sender keys sent to them
|
@@ -427,7 +385,7 @@ const makeMessagesSocket = (config) => {
|
|
427
385
|
const otherJids = [];
|
428
386
|
for (const { user, device } of devices) {
|
429
387
|
const isMe = user === meUser;
|
430
|
-
const jid = (0, WABinary_1.jidEncode)(isMe && isLid ? ((_f = (_e = authState.creds) === null || _e === void 0 ? void 0 : _e.me) === null || _f === void 0 ? void 0 : _f.lid.split(':')[0]) || user : user, isLid ? 'lid' :
|
388
|
+
const jid = (0, WABinary_1.jidEncode)(isMe && isLid ? ((_f = (_e = authState.creds) === null || _e === void 0 ? void 0 : _e.me) === null || _f === void 0 ? void 0 : _f.lid.split(':')[0]) || user : user, isLid ? 'lid' : 's.whatsapp.net', device);
|
431
389
|
if (isMe) {
|
432
390
|
meJids.push(jid);
|
433
391
|
}
|
@@ -491,55 +449,34 @@ const makeMessagesSocket = (config) => {
|
|
491
449
|
if (additionalNodes && additionalNodes.length > 0) {
|
492
450
|
stanza.content.push(...additionalNodes);
|
493
451
|
}
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
}]
|
512
|
-
}]
|
513
|
-
};
|
514
|
-
const resultNativeNode = filterNativeNode(additionalNodes);
|
515
|
-
if (resultNativeNode && additionalNodes && additionalNodes.length > 0) {
|
516
|
-
stanza.content.push(...resultNativeNode);
|
517
|
-
}
|
518
|
-
else {
|
519
|
-
stanza.content.push(nativeNode);
|
520
|
-
}
|
521
|
-
}
|
522
|
-
if (isPrivate) {
|
523
|
-
const botNode = {
|
524
|
-
tag: 'bot',
|
525
|
-
attrs: { biz_bot: '1' }
|
526
|
-
};
|
527
|
-
const resultBotNode = filterBotNode(additionalNodes);
|
528
|
-
if (resultBotNode && additionalNodes && additionalNodes.length > 0) {
|
529
|
-
stanza.content.push(...resultBotNode);
|
530
|
-
}
|
531
|
-
else {
|
532
|
-
stanza.content.push(botNode);
|
452
|
+
else {
|
453
|
+
if (((0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidUser)(jid)) && ((message === null || message === void 0 ? void 0 : message.viewOnceMessage) ? message === null || message === void 0 ? void 0 : message.viewOnceMessage : (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2) ? message === null || message === void 0 ? void 0 : message.viewOnceMessageV2 : (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension) ? message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension : (message === null || message === void 0 ? void 0 : message.ephemeralMessage) ? message === null || message === void 0 ? void 0 : message.ephemeralMessage : (message === null || message === void 0 ? void 0 : message.templateMessage) ? message === null || message === void 0 ? void 0 : message.templateMessage : (message === null || message === void 0 ? void 0 : message.interactiveMessage) ? message === null || message === void 0 ? void 0 : message.interactiveMessage : message === null || message === void 0 ? void 0 : message.buttonsMessage)) {
|
454
|
+
stanza.content.push({
|
455
|
+
tag: 'biz',
|
456
|
+
attrs: {},
|
457
|
+
content: [{
|
458
|
+
tag: 'interactive',
|
459
|
+
attrs: {
|
460
|
+
type: 'native_flow',
|
461
|
+
v: '1'
|
462
|
+
},
|
463
|
+
content: [{
|
464
|
+
tag: 'native_flow',
|
465
|
+
attrs: { v: '9', name: 'mixed' }
|
466
|
+
}]
|
467
|
+
}]
|
468
|
+
});
|
533
469
|
}
|
534
470
|
}
|
535
|
-
|
471
|
+
const buttonType = getButtonType(message);
|
472
|
+
if (buttonType) {
|
536
473
|
stanza.content.push({
|
537
474
|
tag: 'biz',
|
538
475
|
attrs: {},
|
539
476
|
content: [
|
540
477
|
{
|
541
|
-
tag:
|
542
|
-
attrs: getButtonArgs(message)
|
478
|
+
tag: buttonType,
|
479
|
+
attrs: getButtonArgs(message),
|
543
480
|
}
|
544
481
|
]
|
545
482
|
});
|
@@ -550,125 +487,154 @@ const makeMessagesSocket = (config) => {
|
|
550
487
|
});
|
551
488
|
return msgId;
|
552
489
|
};
|
553
|
-
const filterNativeNode = (nodeContent) => {
|
554
|
-
if (Array.isArray(nodeContent)) {
|
555
|
-
return nodeContent.filter((item) => {
|
556
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
557
|
-
if (item.tag === 'biz' && ((_a = item === null || item === void 0 ? void 0 : item.content[0]) === null || _a === void 0 ? void 0 : _a.tag) === 'interactive' && ((_c = (_b = item === null || item === void 0 ? void 0 : item.content[0]) === null || _b === void 0 ? void 0 : _b.attrs) === null || _c === void 0 ? void 0 : _c.type) === 'native_flow' && ((_e = (_d = item === null || item === void 0 ? void 0 : item.content[0]) === null || _d === void 0 ? void 0 : _d.content[0]) === null || _e === void 0 ? void 0 : _e.tag) === 'native_flow' && ((_h = (_g = (_f = item === null || item === void 0 ? void 0 : item.content[0]) === null || _f === void 0 ? void 0 : _f.content[0]) === null || _g === void 0 ? void 0 : _g.attrs) === null || _h === void 0 ? void 0 : _h.name) === 'quick_reply') {
|
558
|
-
return false;
|
559
|
-
}
|
560
|
-
return true;
|
561
|
-
});
|
562
|
-
}
|
563
|
-
else {
|
564
|
-
return nodeContent;
|
565
|
-
}
|
566
|
-
};
|
567
|
-
const filterBotNode = (nodeContent) => {
|
568
|
-
if (Array.isArray(nodeContent)) {
|
569
|
-
return nodeContent.filter((item) => {
|
570
|
-
if (item.tag === 'bot' && item.attrs.biz_bot === '1') {
|
571
|
-
return false;
|
572
|
-
}
|
573
|
-
return true;
|
574
|
-
});
|
575
|
-
}
|
576
|
-
else {
|
577
|
-
return nodeContent;
|
578
|
-
}
|
579
|
-
};
|
580
490
|
const getTypeMessage = (msg) => {
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
return getTypeMessage(msg.viewOnceMessageV2Extension.message);
|
589
|
-
}
|
590
|
-
else if (msg.ephemeralMessage) {
|
591
|
-
return getTypeMessage(msg.ephemeralMessage.message);
|
592
|
-
}
|
593
|
-
else if (msg.documentWithCaptionMessage) {
|
594
|
-
return getTypeMessage(msg.documentWithCaptionMessage.message);
|
595
|
-
}
|
596
|
-
else if (msg.reactionMessage) {
|
597
|
-
return 'reaction';
|
598
|
-
}
|
599
|
-
else if (msg.pollCreationMessage || msg.pollCreationMessageV2 || msg.pollCreationMessageV3 || msg.pollUpdateMessage) {
|
600
|
-
return 'poll';
|
601
|
-
}
|
602
|
-
else if (getMediaType(msg)) {
|
603
|
-
return 'media';
|
604
|
-
}
|
491
|
+
const message = Utils_1.normalizeMessageContent(msg)
|
492
|
+
if (message.reactionMessage) {
|
493
|
+
return 'reaction'
|
494
|
+
}
|
495
|
+
else if (getMediaType(message)) {
|
496
|
+
return 'media'
|
497
|
+
}
|
605
498
|
else {
|
606
|
-
return 'text'
|
499
|
+
return 'text'
|
607
500
|
}
|
608
|
-
}
|
501
|
+
}
|
502
|
+
|
609
503
|
const getMediaType = (message) => {
|
610
504
|
if (message.imageMessage) {
|
611
|
-
return 'image'
|
505
|
+
return 'image'
|
612
506
|
}
|
613
507
|
else if (message.videoMessage) {
|
614
|
-
return message.videoMessage.gifPlayback ? 'gif' : 'video'
|
508
|
+
return message.videoMessage.gifPlayback ? 'gif' : 'video'
|
615
509
|
}
|
616
510
|
else if (message.audioMessage) {
|
617
|
-
return message.audioMessage.ptt ? 'ptt' : 'audio'
|
511
|
+
return message.audioMessage.ptt ? 'ptt' : 'audio'
|
618
512
|
}
|
619
513
|
else if (message.contactMessage) {
|
620
|
-
return 'vcard'
|
514
|
+
return 'vcard'
|
621
515
|
}
|
622
516
|
else if (message.documentMessage) {
|
623
|
-
return 'document'
|
517
|
+
return 'document'
|
624
518
|
}
|
625
519
|
else if (message.contactsArrayMessage) {
|
626
|
-
return 'contact_array'
|
520
|
+
return 'contact_array'
|
627
521
|
}
|
628
522
|
else if (message.liveLocationMessage) {
|
629
|
-
return 'livelocation'
|
523
|
+
return 'livelocation'
|
630
524
|
}
|
631
525
|
else if (message.stickerMessage) {
|
632
|
-
return 'sticker'
|
526
|
+
return 'sticker'
|
633
527
|
}
|
634
528
|
else if (message.listMessage) {
|
635
|
-
return 'list'
|
529
|
+
return 'list'
|
636
530
|
}
|
637
531
|
else if (message.listResponseMessage) {
|
638
|
-
return 'list_response'
|
532
|
+
return 'list_response'
|
639
533
|
}
|
640
534
|
else if (message.buttonsResponseMessage) {
|
641
|
-
return 'buttons_response'
|
535
|
+
return 'buttons_response'
|
642
536
|
}
|
643
537
|
else if (message.orderMessage) {
|
644
|
-
return 'order'
|
538
|
+
return 'order'
|
645
539
|
}
|
646
540
|
else if (message.productMessage) {
|
647
|
-
return 'product'
|
541
|
+
return 'product'
|
648
542
|
}
|
649
543
|
else if (message.interactiveResponseMessage) {
|
650
|
-
return 'native_flow_response'
|
544
|
+
return 'native_flow_response'
|
651
545
|
}
|
652
546
|
else if (message.groupInviteMessage) {
|
653
|
-
return 'url'
|
547
|
+
return 'url'
|
654
548
|
}
|
655
|
-
|
656
|
-
|
657
|
-
if (message.templateMessage) {
|
658
|
-
// TODO: Add attributes
|
659
|
-
return {};
|
549
|
+
else if (/https:\/\/wa\.me\/p\/\d+\/\d+/.test(message.extendedTextMessage?.text)) {
|
550
|
+
return 'productlink'
|
660
551
|
}
|
661
|
-
|
662
|
-
|
663
|
-
if (
|
664
|
-
|
665
|
-
|
666
|
-
|
552
|
+
}
|
553
|
+
const getButtonType = (message) => {
|
554
|
+
if (message.listMessage) {
|
555
|
+
return 'list'
|
556
|
+
}
|
557
|
+
else if (message.buttonsMessage) {
|
558
|
+
return 'buttons'
|
667
559
|
}
|
668
|
-
else {
|
669
|
-
return
|
560
|
+
else if(message.interactiveMessage?.nativeFlowMessage) {
|
561
|
+
return 'native_flow'
|
670
562
|
}
|
671
|
-
}
|
563
|
+
}
|
564
|
+
const getButtonArgs = (message) => {
|
565
|
+
if (message.interactiveMessage?.nativeFlowMessage && message.interactiveMessage.nativeFlowMessage?.buttons?.length > 0 && message.interactiveMessage.nativeFlowMessage.buttons[0].name === 'review_and_pay') {
|
566
|
+
return {
|
567
|
+
tag: 'biz',
|
568
|
+
attrs: {
|
569
|
+
native_flow_name: 'order_details'
|
570
|
+
}
|
571
|
+
}
|
572
|
+
} else if (message.interactiveMessage?.nativeFlowMessage && message.interactiveMessage.nativeFlowMessage?.buttons?.length > 0 && message.interactiveMessage.nativeFlowMessage.buttons[0].name === 'payment_info') {
|
573
|
+
return {
|
574
|
+
tag: 'biz',
|
575
|
+
attrs: {
|
576
|
+
native_flow_name: 'payment_info'
|
577
|
+
}
|
578
|
+
}
|
579
|
+
} else if (message.interactiveMessage?.nativeFlowMessage &&message.interactiveMessage.nativeFlowMessage?.buttons?.length > 0 &&
|
580
|
+
['mpm', 'cta_catalog', 'send_location', 'call_permission_request', 'wa_payment_transaction_details', 'automated_greeting_message_view_catalog']
|
581
|
+
.includes(message.interactiveMessage.nativeFlowMessage.buttons[0].name)) {
|
582
|
+
return {
|
583
|
+
tag: 'biz',
|
584
|
+
attrs: {},
|
585
|
+
content: [{
|
586
|
+
tag: 'interactive',
|
587
|
+
attrs: {
|
588
|
+
type: 'native_flow',
|
589
|
+
v: '1'
|
590
|
+
},
|
591
|
+
content: [{
|
592
|
+
tag: 'native_flow',
|
593
|
+
attrs: {
|
594
|
+
v: '2',
|
595
|
+
name: message.interactiveMessage.nativeFlowMessage.buttons[0].name
|
596
|
+
}
|
597
|
+
}]
|
598
|
+
}]
|
599
|
+
}
|
600
|
+
} else if (message.interactiveMessage?.nativeFlowMessage || message.buttonsMessage) {
|
601
|
+
return {
|
602
|
+
tag: 'biz',
|
603
|
+
attrs: {},
|
604
|
+
content: [{
|
605
|
+
tag: 'interactive',
|
606
|
+
attrs: {
|
607
|
+
type: 'native_flow',
|
608
|
+
v: '1'
|
609
|
+
},
|
610
|
+
content: [{
|
611
|
+
tag: 'native_flow',
|
612
|
+
attrs: {
|
613
|
+
v: '9',
|
614
|
+
name: 'mixed'
|
615
|
+
}
|
616
|
+
}]
|
617
|
+
}]
|
618
|
+
}
|
619
|
+
} else if (message.listMessage) {
|
620
|
+
return {
|
621
|
+
tag: 'biz',
|
622
|
+
attrs: {},
|
623
|
+
content: [{
|
624
|
+
tag: 'list',
|
625
|
+
attrs: {
|
626
|
+
v: '2',
|
627
|
+
type: 'product_list'
|
628
|
+
}
|
629
|
+
}]
|
630
|
+
}
|
631
|
+
} else {
|
632
|
+
return {
|
633
|
+
tag: 'biz',
|
634
|
+
attrs: {}
|
635
|
+
}
|
636
|
+
}
|
637
|
+
}
|
672
638
|
const getPrivacyTokens = async (jids) => {
|
673
639
|
const t = (0, Utils_1.unixTimestampSeconds)().toString();
|
674
640
|
const result = await query({
|
@@ -708,9 +674,7 @@ const makeMessagesSocket = (config) => {
|
|
708
674
|
readMessages,
|
709
675
|
refreshMediaConn,
|
710
676
|
getUSyncDevices,
|
711
|
-
sendPeerDataOperationMessage,
|
712
677
|
createParticipantNodes,
|
713
|
-
profilePictureUrl,
|
714
678
|
waUploadToServer,
|
715
679
|
fetchPrivacySettings,
|
716
680
|
updateMediaMessage: async (message) => {
|
@@ -730,7 +694,7 @@ const makeMessagesSocket = (config) => {
|
|
730
694
|
else {
|
731
695
|
try {
|
732
696
|
const media = (0, Utils_1.decryptMediaRetryData)(result.media, mediaKey, result.key.id);
|
733
|
-
if (media
|
697
|
+
if (media.result !== WAProto_1.proto.MediaRetryNotification.ResultType.SUCCESS) {
|
734
698
|
const resultStr = WAProto_1.proto.MediaRetryNotification.ResultType[media.result];
|
735
699
|
throw new boom_1.Boom(`Media re-upload failed by device (${resultStr})`, { data: media, statusCode: (0, Utils_1.getStatusCodeForMediaRetry)(media.result) || 404 });
|
736
700
|
}
|
@@ -754,268 +718,153 @@ const makeMessagesSocket = (config) => {
|
|
754
718
|
]);
|
755
719
|
return message;
|
756
720
|
},
|
757
|
-
|
758
|
-
const userJid =
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
if (isGroup) {
|
765
|
-
let userId = await groupMetadata(id);
|
766
|
-
let participant = await userId.participants;
|
767
|
-
let users = await Promise.all(participant.map(u => (0, WABinary_1.jidNormalizedUser)(u.id)));
|
768
|
-
allUsers = [...allUsers, ...users];
|
769
|
-
}
|
770
|
-
else if (isPrivate) {
|
771
|
-
let users = await Promise.all(jids.map(id => id.replace(/\b\d{18}@.{4}\b/g, '')));
|
772
|
-
allUsers = [...allUsers, ...users];
|
773
|
-
}
|
774
|
-
if (!allUsers.find(user => user.includes(userJid))) {
|
775
|
-
allUsers.push(userJid);
|
776
|
-
}
|
777
|
-
}
|
778
|
-
;
|
779
|
-
const getRandomHexColor = () => {
|
780
|
-
return "#" + Math.floor(Math.random() * 16777215)
|
781
|
-
.toString(16)
|
782
|
-
.padStart(6, "0");
|
721
|
+
sendMessage: async (jid, content, options = {}) => {
|
722
|
+
const userJid = authState.creds.me.id;
|
723
|
+
const { filter = false, quoted } = options;
|
724
|
+
const getParticipantAttr = () => {
|
725
|
+
return filter ? {
|
726
|
+
participant: { jid }
|
727
|
+
} : {};
|
783
728
|
};
|
784
|
-
|
785
|
-
|
729
|
+
|
730
|
+
if ('productMessage' in content) {
|
731
|
+
const { title, description, thumbnail, productId, retailerId, url, body = "", footer = "", buttons = [] } = content.productMessage;
|
732
|
+
const { imageMessage } = await Utils_1.generateWAMessageContent(
|
733
|
+
{ image: { url: thumbnail }},
|
734
|
+
{ upload: waUploadToServer });
|
735
|
+
|
736
|
+
const msg = await Utils_1.generateWAMessageFromContent(jid, {
|
737
|
+
viewOnceMessage: {
|
738
|
+
message: {
|
739
|
+
interactiveMessage: {
|
740
|
+
body: { text: body },
|
741
|
+
footer: { text: footer },
|
742
|
+
header: {
|
743
|
+
title,
|
744
|
+
hasMediaAttachment: true,
|
745
|
+
productMessage: {
|
746
|
+
product: {
|
747
|
+
productImage: imageMessage,
|
748
|
+
productId,
|
749
|
+
title,
|
750
|
+
description,
|
751
|
+
currencyCode: "IDR",
|
752
|
+
priceAmount1000: null,
|
753
|
+
retailerId,
|
754
|
+
url,
|
755
|
+
productImageCount: 1
|
756
|
+
},
|
757
|
+
businessOwnerJid: "0@s.whatsapp.net"
|
758
|
+
}
|
759
|
+
},
|
760
|
+
nativeFlowMessage: { buttons }
|
761
|
+
}
|
762
|
+
}
|
763
|
+
}
|
764
|
+
}, { quoted });
|
765
|
+
|
766
|
+
return await relayMessage(jid, msg.message, {
|
767
|
+
messageId: msg.key.id,
|
768
|
+
...getParticipantAttr()
|
769
|
+
});
|
770
|
+
}
|
771
|
+
if ('interactiveMessage' in content) {
|
772
|
+
const { title, footer, thumbnail, buttons = [] } = content.interactiveMessage;
|
773
|
+
const header = thumbnail ? WAProto_1.proto.Message.InteractiveMessage.Header.create({
|
774
|
+
title: "",
|
775
|
+
hasMediaAttachment: true,
|
776
|
+
...(await Utils_1.prepareWAMessageMedia(
|
777
|
+
{ image: { url: thumbnail } },
|
778
|
+
{ upload: waUploadToServer }
|
779
|
+
))
|
780
|
+
}) : WAProto_1.proto.Message.InteractiveMessage.Header.create({
|
781
|
+
title: "",
|
782
|
+
hasMediaAttachment: false
|
783
|
+
});
|
784
|
+
const msg = await Utils_1.generateWAMessageFromContent(jid, {
|
785
|
+
viewOnceMessage: {
|
786
|
+
message: {
|
787
|
+
messageContextInfo: {
|
788
|
+
deviceListMetadata: {},
|
789
|
+
deviceListMetadataVersion: 2
|
790
|
+
},
|
791
|
+
interactiveMessage: WAProto_1.proto.Message.InteractiveMessage.create({
|
792
|
+
body: { text: title },
|
793
|
+
footer: { text: footer },
|
794
|
+
header,
|
795
|
+
nativeFlowMessage: { buttons }
|
796
|
+
})
|
797
|
+
}
|
798
|
+
}
|
799
|
+
}, { quoted });
|
800
|
+
|
801
|
+
return await relayMessage(jid, msg.message, {
|
802
|
+
messageId: msg.key.id,
|
803
|
+
...getParticipantAttr()
|
804
|
+
});
|
805
|
+
}
|
806
|
+
|
807
|
+
const fullMsg = await Utils_1.generateWAMessage(jid, content, {
|
786
808
|
logger,
|
787
809
|
userJid,
|
788
|
-
|
810
|
+
quoted,
|
811
|
+
getUrlInfo: text => link_preview_1.getUrlInfo(text, {
|
789
812
|
thumbnailWidth: linkPreviewImageThumbnailWidth,
|
790
813
|
fetchOpts: {
|
791
814
|
timeout: 3000,
|
792
815
|
...axiosOptions || {}
|
793
816
|
},
|
794
817
|
logger,
|
795
|
-
uploadImage: generateHighQualityLinkPreview
|
796
|
-
? waUploadToServer
|
797
|
-
: undefined
|
818
|
+
uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined
|
798
819
|
}),
|
799
820
|
upload: async (readStream, opts) => {
|
800
|
-
const up = await waUploadToServer(readStream, {
|
801
|
-
|
821
|
+
const up = await waUploadToServer(readStream, {
|
822
|
+
...opts,
|
823
|
+
newsletter: WABinary_1.isJidNewsLetter(jid)
|
824
|
+
});
|
802
825
|
return up;
|
803
826
|
},
|
804
827
|
mediaCache: config.mediaCache,
|
805
828
|
options: config.options,
|
806
|
-
|
807
|
-
font: Math.floor(Math.random() * 9),
|
808
|
-
});
|
809
|
-
await relayMessage(WABinary_1.STORIES_JID, msg.message, {
|
810
|
-
messageId: msg.key.id,
|
811
|
-
statusJidList: allUsers,
|
812
|
-
additionalNodes: [
|
813
|
-
{
|
814
|
-
tag: 'meta',
|
815
|
-
attrs: {},
|
816
|
-
content: [
|
817
|
-
{
|
818
|
-
tag: 'mentioned_users',
|
819
|
-
attrs: {},
|
820
|
-
content: jids.map(jid => ({
|
821
|
-
tag: 'to',
|
822
|
-
attrs: { jid },
|
823
|
-
content: undefined,
|
824
|
-
})),
|
825
|
-
},
|
826
|
-
],
|
827
|
-
},
|
828
|
-
],
|
829
|
-
});
|
830
|
-
jids.forEach(async (id) => {
|
831
|
-
id = (0, WABinary_1.jidNormalizedUser)(id);
|
832
|
-
const { user, server } = (0, WABinary_1.jidDecode)(id);
|
833
|
-
const isPrivate = server === 's.whatsapp.net';
|
834
|
-
let type = isPrivate
|
835
|
-
? 'statusMentionMessage'
|
836
|
-
: 'groupStatusMentionMessage';
|
837
|
-
await relayMessage(id, {
|
838
|
-
[type]: {
|
839
|
-
message: {
|
840
|
-
protocolMessage: {
|
841
|
-
key: msg.key,
|
842
|
-
type: 25,
|
843
|
-
},
|
844
|
-
},
|
845
|
-
},
|
846
|
-
}, {});
|
847
|
-
await (0, Utils_1.delay)(2500);
|
829
|
+
...options
|
848
830
|
});
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
const
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
if (
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
let mediaHandle;
|
870
|
-
let msg;
|
871
|
-
for (const i in medias) {
|
872
|
-
const media = medias[i];
|
873
|
-
if (media.image) {
|
874
|
-
msg = await (0, Utils_1.generateWAMessage)(jid, {
|
875
|
-
image: media.image,
|
876
|
-
...media,
|
877
|
-
...options
|
878
|
-
}, {
|
879
|
-
userJid,
|
880
|
-
upload: async (readStream, opts) => {
|
881
|
-
const up = await waUploadToServer(readStream, { ...opts, newsletter: (0, WABinary_1.isJidNewsLetter)(jid) });
|
882
|
-
mediaHandle = up.handle;
|
883
|
-
return up;
|
884
|
-
},
|
885
|
-
...options,
|
886
|
-
});
|
887
|
-
}
|
888
|
-
else if (media.video) {
|
889
|
-
msg = await (0, Utils_1.generateWAMessage)(jid, {
|
890
|
-
video: media.video,
|
891
|
-
...media,
|
892
|
-
...options
|
893
|
-
}, {
|
894
|
-
userJid,
|
895
|
-
upload: async (readStream, opts) => {
|
896
|
-
const up = await waUploadToServer(readStream, { ...opts, newsletter: (0, WABinary_1.isJidNewsLetter)(jid) });
|
897
|
-
mediaHandle = up.handle;
|
898
|
-
return up;
|
899
|
-
},
|
900
|
-
...options,
|
901
|
-
});
|
902
|
-
}
|
903
|
-
if (msg) {
|
904
|
-
msg.message.messageContextInfo = {
|
905
|
-
messageAssociation: {
|
906
|
-
associationType: 1,
|
907
|
-
parentMessageKey: album.key
|
908
|
-
}
|
909
|
-
};
|
910
|
-
}
|
911
|
-
await relayMessage(jid, msg.message, { messageId: msg.key.id });
|
912
|
-
await (0, Utils_1.delay)(time);
|
913
|
-
}
|
914
|
-
return album;
|
915
|
-
},
|
916
|
-
sendMessage: async (jid, content, options = {}) => {
|
917
|
-
var _a, _b, _c;
|
918
|
-
const userJid = authState.creds.me.id;
|
919
|
-
if (typeof content === 'object' &&
|
920
|
-
'disappearingMessagesInChat' in content &&
|
921
|
-
typeof content['disappearingMessagesInChat'] !== 'undefined' &&
|
922
|
-
(0, WABinary_1.isJidGroup)(jid)) {
|
923
|
-
const { disappearingMessagesInChat } = content;
|
924
|
-
const value = typeof disappearingMessagesInChat === 'boolean' ?
|
925
|
-
(disappearingMessagesInChat ? Defaults_1.WA_DEFAULT_EPHEMERAL : 0) :
|
926
|
-
disappearingMessagesInChat;
|
927
|
-
await groupToggleEphemeral(jid, value);
|
831
|
+
|
832
|
+
const isDeleteMsg = 'delete' in content && !!content.delete;
|
833
|
+
const isEditMsg = 'edit' in content && !!content.edit;
|
834
|
+
const isAiMsg = 'ai' in content && !!content.ai;
|
835
|
+
|
836
|
+
const additionalAttributes = {};
|
837
|
+
const additionalNodes = [];
|
838
|
+
|
839
|
+
if (isDeleteMsg) {
|
840
|
+
const fromMe = content.delete?.fromMe;
|
841
|
+
const isGroup = WABinary_1.isJidGroup(content.delete?.remoteJid);
|
842
|
+
additionalAttributes.edit = (isGroup && !fromMe) || WABinary_1.isJidNewsLetter(jid) ? '8' : '7';
|
843
|
+
} else if (isEditMsg) {
|
844
|
+
additionalAttributes.edit = WABinary_1.isJidNewsLetter(jid) ? '3' : '1';
|
845
|
+
} else if (isAiMsg) {
|
846
|
+
additionalNodes.push({
|
847
|
+
attrs: {
|
848
|
+
biz_bot: '1'
|
849
|
+
}, tag: "bot"
|
850
|
+
});
|
928
851
|
}
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
const group = (0, WABinary_1.getBinaryNodeChild)(disappearingNode, 'group');
|
942
|
-
const expiration = (0, WABinary_1.getBinaryNodeChild)(group, 'ephemeral');
|
943
|
-
eph = (_a = expiration === null || expiration === void 0 ? void 0 : expiration.attrs) === null || _a === void 0 ? void 0 : _a.expiration;
|
944
|
-
}
|
945
|
-
const fullMsg = await (0, Utils_1.generateWAMessage)(jid, content, {
|
946
|
-
logger,
|
947
|
-
userJid,
|
948
|
-
ephemeralExpiration: (options.ephemeralExpiration && options.ephemeralExpiration > 0) ? options.ephemeralExpiration : eph,
|
949
|
-
getUrlInfo: text => (0, link_preview_1.getUrlInfo)(text, {
|
950
|
-
thumbnailWidth: linkPreviewImageThumbnailWidth,
|
951
|
-
fetchOpts: {
|
952
|
-
timeout: 3000,
|
953
|
-
...axiosOptions || {}
|
954
|
-
},
|
955
|
-
logger,
|
956
|
-
uploadImage: generateHighQualityLinkPreview
|
957
|
-
? waUploadToServer
|
958
|
-
: undefined
|
959
|
-
}),
|
960
|
-
upload: async (readStream, opts) => {
|
961
|
-
const up = await waUploadToServer(readStream, { ...opts, newsletter: (0, WABinary_1.isJidNewsLetter)(jid) });
|
962
|
-
mediaHandle = up.handle;
|
963
|
-
return up;
|
964
|
-
},
|
965
|
-
mediaCache: config.mediaCache,
|
966
|
-
options: config.options,
|
967
|
-
...options,
|
852
|
+
|
853
|
+
await relayMessage(jid, fullMsg.message, {
|
854
|
+
messageId: fullMsg.key.id,
|
855
|
+
cachedGroupMetadata: options.cachedGroupMetadata,
|
856
|
+
additionalNodes: isAiMsg ? additionalNodes : options.additionalNodes,
|
857
|
+
additionalAttributes,
|
858
|
+
statusJidList: options.statusJidList
|
859
|
+
});
|
860
|
+
|
861
|
+
if (config.emitOwnEvents) {
|
862
|
+
process.nextTick(() => {
|
863
|
+
processingMutex.mutex(() => upsertMessage(fullMsg, 'append'));
|
968
864
|
});
|
969
|
-
const isAiMsg = 'ai' in content && !!content.ai;
|
970
|
-
const isPinMsg = 'pin' in content && !!content.pin;
|
971
|
-
const isKeepMsg = 'keep' in content && content.keep;
|
972
|
-
const isPollMsg = 'poll' in content && !!content.poll;
|
973
|
-
const isEditMsg = 'edit' in content && !!content.edit;
|
974
|
-
const isDeleteMsg = 'delete' in content && !!content.delete;
|
975
|
-
const additionalAttributes = {};
|
976
|
-
const additionalNodes = [];
|
977
|
-
// required for delete
|
978
|
-
if (isDeleteMsg) {
|
979
|
-
// if the chat is a group, and I am not the author, then delete the message as an admin
|
980
|
-
if (((0, WABinary_1.isJidGroup)((_b = content.delete) === null || _b === void 0 ? void 0 : _b.remoteJid) && !((_c = content.delete) === null || _c === void 0 ? void 0 : _c.fromMe)) || (0, WABinary_1.isJidNewsLetter)(jid)) {
|
981
|
-
additionalAttributes.edit = '8';
|
982
|
-
}
|
983
|
-
else {
|
984
|
-
additionalAttributes.edit = '7';
|
985
|
-
}
|
986
|
-
}
|
987
|
-
else if (isEditMsg) {
|
988
|
-
additionalAttributes.edit = (0, WABinary_1.isJidNewsLetter)(jid) ? '3' : '1';
|
989
|
-
}
|
990
|
-
else if (isPinMsg) {
|
991
|
-
additionalAttributes.edit = '2';
|
992
|
-
}
|
993
|
-
else if (isAiMsg) {
|
994
|
-
additionalNodes.push({
|
995
|
-
attrs: {
|
996
|
-
biz_bot: '1'
|
997
|
-
},
|
998
|
-
tag: 'bot'
|
999
|
-
});
|
1000
|
-
if (options.additionalNodes) {
|
1001
|
-
additionalNodes.push(...options.additionalNodes);
|
1002
|
-
}
|
1003
|
-
}
|
1004
|
-
if (mediaHandle) {
|
1005
|
-
additionalAttributes['media_id'] = mediaHandle;
|
1006
|
-
}
|
1007
|
-
if ('cachedGroupMetadata' in options) {
|
1008
|
-
console.warn('cachedGroupMetadata in sendMessage are deprecated, now cachedGroupMetadata is part of the socket config.');
|
1009
|
-
}
|
1010
|
-
await relayMessage(jid, fullMsg.message, { messageId: fullMsg.key.id, cachedGroupMetadata: options.cachedGroupMetadata, additionalNodes: isAiMsg ? additionalNodes : options.additionalNodes, additionalAttributes, statusJidList: options.statusJidList });
|
1011
|
-
if (config.emitOwnEvents) {
|
1012
|
-
process.nextTick(() => {
|
1013
|
-
processingMutex.mutex(() => (upsertMessage(fullMsg, 'append')));
|
1014
|
-
});
|
1015
|
-
}
|
1016
|
-
return fullMsg;
|
1017
865
|
}
|
866
|
+
return fullMsg;
|
1018
867
|
}
|
1019
|
-
}
|
868
|
+
}
|
1020
869
|
};
|
1021
870
|
exports.makeMessagesSocket = makeMessagesSocket;
|