cuki-bailx 1.1.1 → 1.2.2
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 +79296 -118676
- package/engine-requirements.js +1 -1
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.d.ts +6 -4
- package/lib/Defaults/index.js +102 -78
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +2 -1
- 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 +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +1 -2
- package/lib/Socket/Client/{websocket.js → web-socket-client.js} +2 -12
- package/lib/Socket/business.d.ts +58 -59
- package/lib/Socket/chats.d.ts +27 -29
- package/lib/Socket/chats.js +90 -97
- package/lib/Socket/dugong.d.ts +219 -0
- package/lib/Socket/dugong.js +441 -0
- package/lib/Socket/groups.d.ts +32 -41
- package/lib/Socket/groups.js +5 -20
- package/lib/Socket/index.d.ts +64 -63
- package/lib/Socket/index.js +2 -2
- package/lib/Socket/messages-recv.js +65 -9
- package/lib/Socket/messages-send.d.ts +47 -49
- package/lib/Socket/messages-send.js +312 -379
- package/lib/Socket/newsletter.d.ts +37 -39
- package/lib/Socket/newsletter.js +40 -54
- package/lib/Socket/registration.d.ts +267 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +10 -10
- package/lib/Socket/socket.js +628 -0
- package/lib/Socket/socket.js.bak +38 -43
- package/lib/Socket/usync.d.ts +3 -3
- package/lib/Store/index.d.ts +2 -1
- package/lib/Store/index.js +3 -1
- package/lib/Store/make-cache-manager-store.d.ts +13 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.d.ts +24 -24
- package/lib/Store/make-in-memory-store.js +11 -13
- package/lib/Store/make-ordered-dictionary.d.ts +1 -1
- package/lib/Store/make-ordered-dictionary.js +2 -2
- package/lib/Types/Auth.d.ts +7 -0
- package/lib/Types/Call.d.ts +1 -1
- package/lib/Types/Chat.d.ts +7 -14
- package/lib/Types/Contact.d.ts +1 -5
- package/lib/Types/Events.d.ts +2 -44
- package/lib/Types/GroupMetadata.d.ts +2 -11
- package/lib/Types/Label.js +1 -1
- package/lib/Types/LabelAssociation.js +1 -1
- package/lib/Types/Message.d.ts +21 -148
- package/lib/Types/Message.js +2 -0
- package/lib/Types/Newsletter.d.ts +13 -0
- package/lib/Types/Newsletter.js +17 -3
- package/lib/Types/Socket.d.ts +9 -17
- package/lib/Types/index.d.ts +1 -8
- package/lib/Types/index.js +2 -2
- package/lib/Utils/auth-utils.d.ts +3 -3
- package/lib/Utils/auth-utils.js +13 -6
- package/lib/Utils/business.js +2 -2
- package/lib/Utils/chat-utils.d.ts +16 -15
- package/lib/Utils/chat-utils.js +35 -36
- package/lib/Utils/crypto.d.ts +16 -15
- package/lib/Utils/crypto.js +29 -71
- package/lib/Utils/decode-wa-message.d.ts +6 -22
- package/lib/Utils/decode-wa-message.js +56 -65
- package/lib/Utils/event-buffer.d.ts +2 -2
- package/lib/Utils/event-buffer.js +7 -11
- package/lib/Utils/generics.d.ts +20 -17
- package/lib/Utils/generics.js +23 -73
- package/lib/Utils/history.d.ts +0 -4
- package/lib/Utils/history.js +6 -4
- package/lib/Utils/link-preview.d.ts +2 -2
- package/lib/Utils/link-preview.js +1 -34
- package/lib/Utils/logger.d.ts +3 -10
- package/lib/Utils/lt-hash.d.ts +2 -2
- package/lib/Utils/lt-hash.js +6 -6
- package/lib/Utils/make-mutex.d.ts +2 -2
- package/lib/Utils/messages-media.d.ts +24 -28
- package/lib/Utils/messages-media.js +115 -263
- package/lib/Utils/messages.d.ts +10 -8
- package/lib/Utils/messages.js +72 -298
- package/lib/Utils/noise-handler.d.ts +12 -10
- package/lib/Utils/noise-handler.js +23 -18
- package/lib/Utils/process-message.d.ts +4 -5
- package/lib/Utils/process-message.js +23 -74
- package/lib/Utils/signal.d.ts +1 -2
- package/lib/Utils/signal.js +35 -37
- package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +6 -51
- package/lib/Utils/validate-connection.d.ts +4 -3
- package/lib/Utils/validate-connection.js +52 -20
- package/lib/WABinary/constants.d.ts +4 -4
- package/lib/WABinary/constants.js +13 -1276
- package/lib/WABinary/decode.d.ts +4 -3
- package/lib/WABinary/decode.js +13 -26
- package/lib/WABinary/encode.d.ts +2 -1
- package/lib/WABinary/encode.js +17 -39
- package/lib/WABinary/generic-utils.d.ts +3 -1
- package/lib/WABinary/generic-utils.js +85 -2
- package/lib/WABinary/jid-utils.d.ts +5 -10
- package/lib/WABinary/jid-utils.js +5 -26
- package/lib/WAM/BinaryInfo.d.ts +11 -2
- package/lib/WAM/encode.d.ts +2 -1
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +1 -1
- package/lib/index.d.ts +2 -6
- package/lib/index.js +7 -22
- package/lib/index.js.bak +37 -0
- package/package.json +103 -111
- package/LICENSE +0 -21
- package/WAProto/GenerateStatics.sh +0 -4
- package/WAProto/WAProto.proto +0 -4775
- package/WAProto/index.d.ts +0 -55057
- package/WAProto/index.ts.ts +0 -53473
- package/WAProto/p.html +0 -1
- package/lib/WABinary/jid-utils.js.bak +0 -83
- /package/lib/Socket/Client/{types.js → abstract-socket-client.js} +0 -0
package/lib/Utils/messages.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Logger } from 'pino';
|
|
1
4
|
import { type Transform } from 'stream';
|
|
2
5
|
import { proto } from '../../WAProto';
|
|
3
|
-
import { ILogger } from './logger';
|
|
4
6
|
import { AnyMediaMessageContent, AnyMessageContent, MediaGenerationOptions, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAProto } from '../Types';
|
|
5
7
|
import { MediaDownloadOptions } from './messages-media';
|
|
6
8
|
/**
|
|
@@ -9,7 +11,7 @@ import { MediaDownloadOptions } from './messages-media';
|
|
|
9
11
|
* @returns the URL, eg. https://google.com
|
|
10
12
|
*/
|
|
11
13
|
export declare const extractUrlFromText: (text: string) => string | undefined;
|
|
12
|
-
export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions[
|
|
14
|
+
export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions['getUrlInfo'], logger: MessageGenerationOptions['logger']) => Promise<import("../Types").WAUrlInfo | undefined>;
|
|
13
15
|
export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MediaGenerationOptions) => Promise<proto.Message>;
|
|
14
16
|
export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
|
|
15
17
|
/**
|
|
@@ -38,13 +40,13 @@ export declare const extractMessageContent: (content: WAMessageContent | undefin
|
|
|
38
40
|
/**
|
|
39
41
|
* Returns the device predicted by message ID
|
|
40
42
|
*/
|
|
41
|
-
export declare const getDevice: (id: string) => "
|
|
43
|
+
export declare const getDevice: (id: string) => "android" | "unknown" | "web" | "ios" | "desktop";
|
|
42
44
|
/** Upserts a receipt in the message */
|
|
43
|
-
export declare const updateMessageWithReceipt: (msg: Pick<WAMessage,
|
|
45
|
+
export declare const updateMessageWithReceipt: (msg: Pick<WAMessage, 'userReceipt'>, receipt: MessageUserReceipt) => void;
|
|
44
46
|
/** Update the message with a new reaction */
|
|
45
|
-
export declare const updateMessageWithReaction: (msg: Pick<WAMessage,
|
|
47
|
+
export declare const updateMessageWithReaction: (msg: Pick<WAMessage, 'reactions'>, reaction: proto.IReaction) => void;
|
|
46
48
|
/** Update the message with a new poll update */
|
|
47
|
-
export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage,
|
|
49
|
+
export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage, 'pollUpdates'>, update: proto.IPollUpdate) => void;
|
|
48
50
|
type VoteAggregation = {
|
|
49
51
|
name: string;
|
|
50
52
|
voters: string[];
|
|
@@ -64,12 +66,12 @@ export declare const aggregateMessageKeysNotFromMe: (keys: proto.IMessageKey[])
|
|
|
64
66
|
}[];
|
|
65
67
|
type DownloadMediaMessageContext = {
|
|
66
68
|
reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
|
|
67
|
-
logger:
|
|
69
|
+
logger: Logger;
|
|
68
70
|
};
|
|
69
71
|
/**
|
|
70
72
|
* Downloads the given message. Throws an error if it's not a media message
|
|
71
73
|
*/
|
|
72
|
-
export declare const downloadMediaMessage: <Type extends "
|
|
74
|
+
export declare const downloadMediaMessage: <Type extends "stream" | "buffer">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer : Transform>;
|
|
73
75
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
74
76
|
export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage;
|
|
75
77
|
export {};
|
package/lib/Utils/messages.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
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
|
-
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
7
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
6
|
+
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.getAggregateVotesInPollMessage = exports.updateMessageWithPollUpdate = exports.updateMessageWithReaction = exports.updateMessageWithReceipt = exports.getDevice = exports.extractMessageContent = exports.normalizeMessageContent = exports.getContentType = exports.generateWAMessage = exports.generateWAMessageFromContent = exports.generateWAMessageContent = exports.generateForwardMessageContent = exports.prepareDisappearingMessageSettingContent = exports.prepareWAMessageMedia = exports.generateLinkPreviewIfRequired = exports.extractUrlFromText = void 0;
|
|
8
7
|
const boom_1 = require("@hapi/boom");
|
|
9
8
|
const axios_1 = __importDefault(require("axios"));
|
|
10
9
|
const crypto_1 = require("crypto");
|
|
@@ -79,6 +78,38 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
79
78
|
}
|
|
80
79
|
const uploadData = {
|
|
81
80
|
...message,
|
|
81
|
+
...(message.annotations ? {
|
|
82
|
+
annotations: message.annotations
|
|
83
|
+
} : {
|
|
84
|
+
annotations: [
|
|
85
|
+
{
|
|
86
|
+
polygonVertices: [
|
|
87
|
+
{
|
|
88
|
+
x: 60.71664810180664,
|
|
89
|
+
y: -36.39784622192383
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
x: -16.710189819335938,
|
|
93
|
+
y: 49.263675689697266
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
x: -56.585853576660156,
|
|
97
|
+
y: 37.85963439941406
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
x: 20.840980529785156,
|
|
101
|
+
y: -47.80188751220703
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
newsletter: {
|
|
105
|
+
newsletterJid: "120363297591152843@newsletter",
|
|
106
|
+
serverMessageId: 0,
|
|
107
|
+
newsletterName: "-",
|
|
108
|
+
contentType: "UPDATE",
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}),
|
|
82
113
|
media: message[mediaType]
|
|
83
114
|
};
|
|
84
115
|
delete uploadData[mediaType];
|
|
@@ -145,6 +176,10 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
145
176
|
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
146
177
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
147
178
|
}
|
|
179
|
+
if (requiresWaveformProcessing) {
|
|
180
|
+
uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
181
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
182
|
+
}
|
|
148
183
|
if (requiresAudioBackground) {
|
|
149
184
|
uploadData.backgroundArgb = await assertColor(options.backgroundColor);
|
|
150
185
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
@@ -161,14 +196,8 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
161
196
|
}
|
|
162
197
|
// remove tmp files
|
|
163
198
|
if (didSaveToTmpPath && bodyPath) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
await fs_1.promises.unlink(bodyPath);
|
|
167
|
-
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp file');
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
logger === null || logger === void 0 ? void 0 : logger.warn('failed to remove tmp file');
|
|
171
|
-
}
|
|
199
|
+
await fs_1.promises.unlink(bodyPath);
|
|
200
|
+
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
172
201
|
}
|
|
173
202
|
});
|
|
174
203
|
const obj = Types_1.WAProto.Message.fromObject({
|
|
@@ -242,8 +271,8 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
242
271
|
};
|
|
243
272
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
244
273
|
const generateWAMessageContent = async (message, options) => {
|
|
245
|
-
var _a
|
|
246
|
-
var
|
|
274
|
+
var _a;
|
|
275
|
+
var _b;
|
|
247
276
|
let m = {};
|
|
248
277
|
if ('text' in message) {
|
|
249
278
|
const extContent = { text: message.text };
|
|
@@ -252,6 +281,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
252
281
|
urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
253
282
|
}
|
|
254
283
|
if (urlInfo) {
|
|
284
|
+
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
255
285
|
extContent.matchedText = urlInfo['matched-text'];
|
|
256
286
|
extContent.jpegThumbnail = urlInfo.jpegThumbnail;
|
|
257
287
|
extContent.description = urlInfo.description;
|
|
@@ -312,54 +342,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
312
342
|
message.disappearingMessagesInChat;
|
|
313
343
|
m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
|
|
314
344
|
}
|
|
315
|
-
else if ('groupInvite' in message) {
|
|
316
|
-
m.groupInviteMessage = {};
|
|
317
|
-
m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
|
|
318
|
-
m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
|
|
319
|
-
m.groupInviteMessage.caption = message.groupInvite.text;
|
|
320
|
-
m.groupInviteMessage.groupJid = message.groupInvite.jid;
|
|
321
|
-
m.groupInviteMessage.groupName = message.groupInvite.subject;
|
|
322
|
-
//TODO: use built-in interface and get disappearing mode info etc.
|
|
323
|
-
//TODO: cache / use store!?
|
|
324
|
-
if (options.getProfilePicUrl) {
|
|
325
|
-
const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
|
|
326
|
-
if (pfpUrl) {
|
|
327
|
-
const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
|
|
328
|
-
if (resp.status === 200) {
|
|
329
|
-
m.groupInviteMessage.jpegThumbnail = resp.data;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
else if ('pin' in message) {
|
|
335
|
-
m.pinInChatMessage = {};
|
|
336
|
-
m.messageContextInfo = {};
|
|
337
|
-
m.pinInChatMessage.key = message.pin;
|
|
338
|
-
m.pinInChatMessage.type = message.type;
|
|
339
|
-
m.pinInChatMessage.senderTimestampMs = Date.now();
|
|
340
|
-
m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
|
|
341
|
-
}
|
|
342
|
-
else if ('keep' in message) {
|
|
343
|
-
m.keepInChatMessage = {};
|
|
344
|
-
m.keepInChatMessage.key = message.keep;
|
|
345
|
-
m.keepInChatMessage.keepType = message.type;
|
|
346
|
-
m.keepInChatMessage.timestampMs = Date.now();
|
|
347
|
-
}
|
|
348
|
-
else if ('call' in message) {
|
|
349
|
-
m = {
|
|
350
|
-
scheduledCallCreationMessage: {
|
|
351
|
-
scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
|
|
352
|
-
callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
|
|
353
|
-
title: message.call.title
|
|
354
|
-
}
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
else if ('paymentInvite' in message) {
|
|
358
|
-
m.paymentInviteMessage = {
|
|
359
|
-
serviceType: message.paymentInvite.type,
|
|
360
|
-
expiryTimestamp: message.paymentInvite.expiry
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
345
|
else if ('buttonReply' in message) {
|
|
364
346
|
switch (message.type) {
|
|
365
347
|
case 'template':
|
|
@@ -378,10 +360,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
378
360
|
break;
|
|
379
361
|
}
|
|
380
362
|
}
|
|
381
|
-
else if ('ptv' in message && message.ptv) {
|
|
382
|
-
const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
|
|
383
|
-
m.ptvMessage = videoMessage;
|
|
384
|
-
}
|
|
385
363
|
else if ('product' in message) {
|
|
386
364
|
const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
387
365
|
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
@@ -392,27 +370,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
392
370
|
}
|
|
393
371
|
});
|
|
394
372
|
}
|
|
395
|
-
else if ('order' in message) {
|
|
396
|
-
m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
|
|
397
|
-
orderId: message.order.id,
|
|
398
|
-
thumbnail: message.order.thumbnail,
|
|
399
|
-
itemCount: message.order.itemCount,
|
|
400
|
-
status: message.order.status,
|
|
401
|
-
surface: message.order.surface,
|
|
402
|
-
orderTitle: message.order.title,
|
|
403
|
-
message: message.order.text,
|
|
404
|
-
sellerJid: message.order.seller,
|
|
405
|
-
token: message.order.token,
|
|
406
|
-
totalAmount1000: message.order.amount,
|
|
407
|
-
totalCurrencyCode: message.order.currency
|
|
408
|
-
});
|
|
409
|
-
}
|
|
410
373
|
else if ('listReply' in message) {
|
|
411
374
|
m.listResponseMessage = { ...message.listReply };
|
|
412
375
|
}
|
|
413
376
|
else if ('poll' in message) {
|
|
414
|
-
(
|
|
415
|
-
(_q = message.poll).toAnnouncementGroup || (_q.toAnnouncementGroup = false);
|
|
377
|
+
(_b = message.poll).selectableCount || (_b.selectableCount = 0);
|
|
416
378
|
if (!Array.isArray(message.poll.values)) {
|
|
417
379
|
throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
|
|
418
380
|
}
|
|
@@ -424,72 +386,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
424
386
|
// encKey
|
|
425
387
|
messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
426
388
|
};
|
|
427
|
-
|
|
389
|
+
m.pollCreationMessage = {
|
|
428
390
|
name: message.poll.name,
|
|
429
391
|
selectableOptionsCount: message.poll.selectableCount,
|
|
430
392
|
options: message.poll.values.map(optionName => ({ optionName })),
|
|
431
393
|
};
|
|
432
|
-
if (message.poll.toAnnouncementGroup) {
|
|
433
|
-
// poll v2 is for community announcement groups (single select and multiple)
|
|
434
|
-
m.pollCreationMessageV2 = pollCreationMessage;
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
if (message.poll.selectableCount === 1) {
|
|
438
|
-
// poll v3 is for single select polls
|
|
439
|
-
m.pollCreationMessageV3 = pollCreationMessage;
|
|
440
|
-
}
|
|
441
|
-
else {
|
|
442
|
-
// poll for multiple choice polls
|
|
443
|
-
m.pollCreationMessage = pollCreationMessage;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
else if ('event' in message) {
|
|
448
|
-
m.messageContextInfo = {
|
|
449
|
-
messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
|
|
450
|
-
};
|
|
451
|
-
m.eventMessage = { ...message.event };
|
|
452
|
-
}
|
|
453
|
-
else if ('inviteAdmin' in message) {
|
|
454
|
-
m.newsletterAdminInviteMessage = {};
|
|
455
|
-
m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
|
|
456
|
-
m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
|
|
457
|
-
m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
|
|
458
|
-
m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
|
|
459
|
-
m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
|
|
460
|
-
}
|
|
461
|
-
else if ('requestPayment' in message) {
|
|
462
|
-
const sticker = ((_c = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _c === void 0 ? void 0 : _c.sticker) ?
|
|
463
|
-
await (0, exports.prepareWAMessageMedia)({ sticker: (_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker, ...options }, options)
|
|
464
|
-
: null;
|
|
465
|
-
let notes = {};
|
|
466
|
-
if ((_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker) {
|
|
467
|
-
notes = {
|
|
468
|
-
stickerMessage: {
|
|
469
|
-
...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
|
|
470
|
-
contextInfo: (_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.contextInfo
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
else if (message.requestPayment.note) {
|
|
475
|
-
notes = {
|
|
476
|
-
extendedTextMessage: {
|
|
477
|
-
text: message.requestPayment.note,
|
|
478
|
-
contextInfo: (_g = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _g === void 0 ? void 0 : _g.contextInfo,
|
|
479
|
-
}
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
else {
|
|
483
|
-
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
484
|
-
}
|
|
485
|
-
m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
|
|
486
|
-
expiryTimestamp: message.requestPayment.expiry,
|
|
487
|
-
amount1000: message.requestPayment.amount,
|
|
488
|
-
currencyCodeIso4217: message.requestPayment.currency,
|
|
489
|
-
requestFrom: message.requestPayment.from,
|
|
490
|
-
noteMessage: { ...notes },
|
|
491
|
-
background: (_h = message.requestPayment.background) !== null && _h !== void 0 ? _h : null,
|
|
492
|
-
});
|
|
493
394
|
}
|
|
494
395
|
else if ('sharePhoneNumber' in message) {
|
|
495
396
|
m.protocolMessage = {
|
|
@@ -499,14 +400,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
499
400
|
else if ('requestPhoneNumber' in message) {
|
|
500
401
|
m.requestPhoneNumberMessage = {};
|
|
501
402
|
}
|
|
502
|
-
else if ('album' in message) {
|
|
503
|
-
const imageMessages = message.album.filter(item => 'image' in item);
|
|
504
|
-
const videoMessages = message.album.filter(item => 'video' in item);
|
|
505
|
-
m.albumMessage = WAProto_1.proto.Message.AlbumMessage.fromObject({
|
|
506
|
-
expectedImageCount: imageMessages.length,
|
|
507
|
-
expectedVideoCount: videoMessages.length,
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
403
|
else {
|
|
511
404
|
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
512
405
|
}
|
|
@@ -526,24 +419,14 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
526
419
|
buttonsMessage.headerType = ButtonType[type];
|
|
527
420
|
Object.assign(buttonsMessage, m);
|
|
528
421
|
}
|
|
529
|
-
if ('title' in message && !!message.title) {
|
|
530
|
-
buttonsMessage.text = message.title,
|
|
531
|
-
buttonsMessage.headerType = ButtonType.TEXT;
|
|
532
|
-
}
|
|
533
422
|
if ('footer' in message && !!message.footer) {
|
|
534
423
|
buttonsMessage.footerText = message.footer;
|
|
535
424
|
}
|
|
536
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
537
|
-
buttonsMessage.contextInfo = message.contextInfo;
|
|
538
|
-
}
|
|
539
|
-
if ('mentions' in message && !!message.mentions) {
|
|
540
|
-
buttonsMessage.contextInfo = { mentionedJid: message.mentions };
|
|
541
|
-
}
|
|
542
425
|
m = { buttonsMessage };
|
|
543
426
|
}
|
|
544
427
|
else if ('templateButtons' in message && !!message.templateButtons) {
|
|
545
428
|
const msg = {
|
|
546
|
-
hydratedButtons: message.
|
|
429
|
+
hydratedButtons: message.templateButtons
|
|
547
430
|
};
|
|
548
431
|
if ('text' in message) {
|
|
549
432
|
msg.hydratedContentText = message.text;
|
|
@@ -575,97 +458,10 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
575
458
|
};
|
|
576
459
|
m = { listMessage };
|
|
577
460
|
}
|
|
578
|
-
if ('interactiveButtons' in message && !!message.interactiveButtons) {
|
|
579
|
-
const interactiveMessage = {
|
|
580
|
-
nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
|
|
581
|
-
buttons: message.interactiveButtons,
|
|
582
|
-
})
|
|
583
|
-
};
|
|
584
|
-
if ('text' in message) {
|
|
585
|
-
interactiveMessage.body = {
|
|
586
|
-
text: message.text
|
|
587
|
-
};
|
|
588
|
-
}
|
|
589
|
-
else if ('caption' in message) {
|
|
590
|
-
interactiveMessage.body = {
|
|
591
|
-
text: message.caption
|
|
592
|
-
};
|
|
593
|
-
interactiveMessage.header = {
|
|
594
|
-
title: message.title,
|
|
595
|
-
subtitle: message.subtitle,
|
|
596
|
-
hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
|
|
597
|
-
};
|
|
598
|
-
Object.assign(interactiveMessage.header, m);
|
|
599
|
-
}
|
|
600
|
-
if ('footer' in message && !!message.footer) {
|
|
601
|
-
interactiveMessage.footer = {
|
|
602
|
-
text: message.footer
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
if ('title' in message && !!message.title) {
|
|
606
|
-
interactiveMessage.header = {
|
|
607
|
-
title: message.title,
|
|
608
|
-
subtitle: message.subtitle,
|
|
609
|
-
hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
|
|
610
|
-
};
|
|
611
|
-
Object.assign(interactiveMessage.header, m);
|
|
612
|
-
}
|
|
613
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
614
|
-
interactiveMessage.contextInfo = message.contextInfo;
|
|
615
|
-
}
|
|
616
|
-
if ('mentions' in message && !!message.mentions) {
|
|
617
|
-
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
618
|
-
}
|
|
619
|
-
m = { interactiveMessage };
|
|
620
|
-
}
|
|
621
|
-
if ('shop' in message && !!message.shop) {
|
|
622
|
-
const interactiveMessage = {
|
|
623
|
-
shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
|
|
624
|
-
surface: message.shop,
|
|
625
|
-
id: message.id
|
|
626
|
-
})
|
|
627
|
-
};
|
|
628
|
-
if ('text' in message) {
|
|
629
|
-
interactiveMessage.body = {
|
|
630
|
-
text: message.text
|
|
631
|
-
};
|
|
632
|
-
}
|
|
633
|
-
else if ('caption' in message) {
|
|
634
|
-
interactiveMessage.body = {
|
|
635
|
-
text: message.caption
|
|
636
|
-
};
|
|
637
|
-
interactiveMessage.header = {
|
|
638
|
-
title: message.title,
|
|
639
|
-
subtitle: message.subtitle,
|
|
640
|
-
hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
|
|
641
|
-
};
|
|
642
|
-
Object.assign(interactiveMessage.header, m);
|
|
643
|
-
}
|
|
644
|
-
if ('footer' in message && !!message.footer) {
|
|
645
|
-
interactiveMessage.footer = {
|
|
646
|
-
text: message.footer
|
|
647
|
-
};
|
|
648
|
-
}
|
|
649
|
-
if ('title' in message && !!message.title) {
|
|
650
|
-
interactiveMessage.header = {
|
|
651
|
-
title: message.title,
|
|
652
|
-
subtitle: message.subtitle,
|
|
653
|
-
hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
|
|
654
|
-
};
|
|
655
|
-
Object.assign(interactiveMessage.header, m);
|
|
656
|
-
}
|
|
657
|
-
if ('contextInfo' in message && !!message.contextInfo) {
|
|
658
|
-
interactiveMessage.contextInfo = message.contextInfo;
|
|
659
|
-
}
|
|
660
|
-
if ('mentions' in message && !!message.mentions) {
|
|
661
|
-
interactiveMessage.contextInfo = { mentionedJid: message.mentions };
|
|
662
|
-
}
|
|
663
|
-
m = { interactiveMessage };
|
|
664
|
-
}
|
|
665
461
|
if ('viewOnce' in message && !!message.viewOnce) {
|
|
666
462
|
m = { viewOnceMessage: { message: m } };
|
|
667
463
|
}
|
|
668
|
-
if ('mentions' in message && ((
|
|
464
|
+
if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
669
465
|
const [messageType] = Object.keys(m);
|
|
670
466
|
m[messageType].contextInfo = m[messageType] || {};
|
|
671
467
|
m[messageType].contextInfo.mentionedJid = message.mentions;
|
|
@@ -698,29 +494,26 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
698
494
|
const key = (0, exports.getContentType)(innerMessage);
|
|
699
495
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
700
496
|
const { quoted, userJid } = options;
|
|
701
|
-
|
|
702
|
-
if (quoted && !(0, WABinary_1.isJidNewsletter)(jid)) {
|
|
497
|
+
if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
703
498
|
const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
|
|
704
499
|
let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
|
|
705
500
|
const msgType = (0, exports.getContentType)(quotedMsg);
|
|
706
501
|
// strip any redundant properties
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
innerMessage[key].contextInfo = contextInfo;
|
|
723
|
-
}
|
|
502
|
+
quotedMsg = WAProto_1.proto.Message.fromObject({ [msgType]: quotedMsg[msgType] });
|
|
503
|
+
const quotedContent = quotedMsg[msgType];
|
|
504
|
+
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
505
|
+
delete quotedContent.contextInfo;
|
|
506
|
+
}
|
|
507
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
508
|
+
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
509
|
+
contextInfo.stanzaId = quoted.key.id;
|
|
510
|
+
contextInfo.quotedMessage = quotedMsg;
|
|
511
|
+
// if a participant is quoted, then it must be a group
|
|
512
|
+
// hence, remoteJid of group must also be entered
|
|
513
|
+
if (jid !== quoted.key.remoteJid) {
|
|
514
|
+
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
515
|
+
}
|
|
516
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
724
517
|
}
|
|
725
518
|
if (
|
|
726
519
|
// if we want to send a disappearing message
|
|
@@ -730,7 +523,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
730
523
|
// already not converted to disappearing message
|
|
731
524
|
key !== 'ephemeralMessage' &&
|
|
732
525
|
// newsletter not accept disappearing messages
|
|
733
|
-
!(0, WABinary_1.
|
|
526
|
+
!(0, WABinary_1.isJidNewsLetter)(jid)) {
|
|
734
527
|
innerMessage[key].contextInfo = {
|
|
735
528
|
...(innerMessage[key].contextInfo || {}),
|
|
736
529
|
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
@@ -742,7 +535,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
742
535
|
key: {
|
|
743
536
|
remoteJid: jid,
|
|
744
537
|
fromMe: true,
|
|
745
|
-
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.
|
|
538
|
+
id: (options === null || options === void 0 ? void 0 : options.messageId) || (0, generics_1.generateMessageID)(),
|
|
746
539
|
},
|
|
747
540
|
message: message,
|
|
748
541
|
messageTimestamp: timestamp,
|
|
@@ -757,7 +550,7 @@ const generateWAMessage = async (jid, content, options) => {
|
|
|
757
550
|
var _a;
|
|
758
551
|
// ensure msg ID is with every log
|
|
759
552
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
760
|
-
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.
|
|
553
|
+
return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
|
|
761
554
|
};
|
|
762
555
|
exports.generateWAMessage = generateWAMessage;
|
|
763
556
|
/** Get the key to access the true type of content */
|
|
@@ -794,24 +587,7 @@ const normalizeMessageContent = (content) => {
|
|
|
794
587
|
|| (message === null || message === void 0 ? void 0 : message.documentWithCaptionMessage)
|
|
795
588
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2)
|
|
796
589
|
|| (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension)
|
|
797
|
-
|| (message === null || message === void 0 ? void 0 : message.editedMessage)
|
|
798
|
-
|| (message === null || message === void 0 ? void 0 : message.groupMentionedMessage)
|
|
799
|
-
|| (message === null || message === void 0 ? void 0 : message.botInvokeMessage)
|
|
800
|
-
|| (message === null || message === void 0 ? void 0 : message.lottieStickerMessage)
|
|
801
|
-
|| (message === null || message === void 0 ? void 0 : message.eventCoverImage)
|
|
802
|
-
|| (message === null || message === void 0 ? void 0 : message.statusMentionMessage)
|
|
803
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationOptionImageMessage)
|
|
804
|
-
|| (message === null || message === void 0 ? void 0 : message.associatedChildMessage)
|
|
805
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMentionMessage)
|
|
806
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV4)
|
|
807
|
-
|| (message === null || message === void 0 ? void 0 : message.pollCreationMessageV5)
|
|
808
|
-
|| (message === null || message === void 0 ? void 0 : message.statusAddYours)
|
|
809
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessage)
|
|
810
|
-
|| (message === null || message === void 0 ? void 0 : message.limitSharingMessage)
|
|
811
|
-
|| (message === null || message === void 0 ? void 0 : message.botTaskMessage)
|
|
812
|
-
|| (message === null || message === void 0 ? void 0 : message.questionMessage)
|
|
813
|
-
|| (message === null || message === void 0 ? void 0 : message.groupStatusMessageV2)
|
|
814
|
-
|| (message === null || message === void 0 ? void 0 : message.botForwardedMessage));
|
|
590
|
+
|| (message === null || message === void 0 ? void 0 : message.editedMessage));
|
|
815
591
|
}
|
|
816
592
|
};
|
|
817
593
|
exports.normalizeMessageContent = normalizeMessageContent;
|
|
@@ -861,11 +637,7 @@ exports.extractMessageContent = extractMessageContent;
|
|
|
861
637
|
/**
|
|
862
638
|
* Returns the device predicted by message ID
|
|
863
639
|
*/
|
|
864
|
-
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' :
|
|
865
|
-
/^3E.{20}$/.test(id) ? 'web' :
|
|
866
|
-
/^(.{21}|.{32})$/.test(id) ? 'android' :
|
|
867
|
-
/^(3F|.{18}$)/.test(id) ? 'desktop' :
|
|
868
|
-
'unknown';
|
|
640
|
+
const getDevice = (id) => /^3A.{18}$/.test(id) ? 'ios' : /^3E.{20}$/.test(id) ? 'web' : /^(.{21}|.{32})$/.test(id) ? 'android' : /^.{18}$/.test(id) ? 'desktop' : 'unknown';
|
|
869
641
|
exports.getDevice = getDevice;
|
|
870
642
|
/** Upserts a receipt in the message */
|
|
871
643
|
const updateMessageWithReceipt = (msg, receipt) => {
|
|
@@ -884,8 +656,9 @@ const updateMessageWithReaction = (msg, reaction) => {
|
|
|
884
656
|
const authorID = (0, generics_1.getKeyAuthor)(reaction.key);
|
|
885
657
|
const reactions = (msg.reactions || [])
|
|
886
658
|
.filter(r => (0, generics_1.getKeyAuthor)(r.key) !== authorID);
|
|
887
|
-
|
|
888
|
-
|
|
659
|
+
if (reaction.text) {
|
|
660
|
+
reactions.push(reaction);
|
|
661
|
+
}
|
|
889
662
|
msg.reactions = reactions;
|
|
890
663
|
};
|
|
891
664
|
exports.updateMessageWithReaction = updateMessageWithReaction;
|
|
@@ -938,6 +711,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
938
711
|
}
|
|
939
712
|
return Object.values(voteHashMap);
|
|
940
713
|
}
|
|
714
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
941
715
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
942
716
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
943
717
|
const keyMap = {};
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Logger } from 'pino';
|
|
2
3
|
import { proto } from '../../WAProto';
|
|
3
4
|
import { KeyPair } from '../Types';
|
|
4
5
|
import { BinaryNode } from '../WABinary';
|
|
5
|
-
export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
|
|
6
|
+
export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, mobile, logger, routingInfo }: {
|
|
6
7
|
keyPair: KeyPair;
|
|
7
8
|
NOISE_HEADER: Uint8Array;
|
|
8
|
-
|
|
9
|
+
mobile: boolean;
|
|
10
|
+
logger: Logger;
|
|
9
11
|
routingInfo?: Buffer | undefined;
|
|
10
12
|
}) => {
|
|
11
|
-
encrypt: (plaintext: Uint8Array) => Buffer
|
|
12
|
-
decrypt: (ciphertext: Uint8Array) => Buffer
|
|
13
|
+
encrypt: (plaintext: Uint8Array) => Buffer;
|
|
14
|
+
decrypt: (ciphertext: Uint8Array) => Buffer;
|
|
13
15
|
authenticate: (data: Uint8Array) => void;
|
|
14
|
-
mixIntoKey: (data: Uint8Array) =>
|
|
15
|
-
finishInit: () =>
|
|
16
|
-
processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) =>
|
|
17
|
-
encodeFrame: (data: Buffer | Uint8Array) => Buffer
|
|
18
|
-
decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) =>
|
|
16
|
+
mixIntoKey: (data: Uint8Array) => void;
|
|
17
|
+
finishInit: () => void;
|
|
18
|
+
processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Buffer;
|
|
19
|
+
encodeFrame: (data: Buffer | Uint8Array) => Buffer;
|
|
20
|
+
decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => void;
|
|
19
21
|
};
|