gifted-baileys 1.5.0 → 1.5.5
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/LICENSE +1 -1
- package/README.md +1429 -684
- package/package.json +11 -26
- package/src/Defaults/baileys-version.json +3 -0
- package/{lib → src}/Defaults/index.js +16 -8
- package/src/Defaults/index.ts +131 -0
- package/src/Defaults/phonenumber-mcc.json +223 -0
- package/src/Signal/libsignal.js +180 -0
- package/src/Signal/libsignal.ts +141 -0
- package/src/Socket/Client/abstract-socket-client.ts +19 -0
- package/src/Socket/Client/index.ts +3 -0
- package/src/Socket/Client/mobile-socket-client.js +78 -0
- package/src/Socket/Client/mobile-socket-client.ts +66 -0
- package/src/Socket/Client/web-socket-client.js +75 -0
- package/src/Socket/Client/web-socket-client.ts +57 -0
- package/{lib → src}/Socket/business.js +33 -27
- package/src/Socket/business.ts +281 -0
- package/{lib → src}/Socket/chats.js +197 -178
- package/src/Socket/chats.ts +1030 -0
- package/{lib → src}/Socket/groups.js +69 -79
- package/src/Socket/groups.ts +356 -0
- package/{lib → src}/Socket/index.js +1 -4
- package/src/Socket/index.ts +13 -0
- package/{lib → src}/Socket/messages-recv.js +160 -108
- package/src/Socket/messages-recv.ts +985 -0
- package/{lib → src}/Socket/messages-send.js +183 -100
- package/src/Socket/messages-send.ts +871 -0
- package/src/Socket/newsletter.js +227 -0
- package/src/Socket/newsletter.ts +282 -0
- package/{lib → src}/Socket/registration.js +55 -63
- package/src/Socket/registration.ts +250 -0
- package/{lib → src}/Socket/socket.js +107 -66
- package/src/Socket/socket.ts +777 -0
- package/src/Store/index.ts +3 -0
- package/{lib → src}/Store/make-cache-manager-store.js +34 -25
- package/src/Store/make-cache-manager-store.ts +100 -0
- package/{lib → src}/Store/make-in-memory-store.js +51 -61
- package/src/Store/make-in-memory-store.ts +475 -0
- package/src/Store/make-ordered-dictionary.ts +86 -0
- package/{lib → src}/Store/object-repository.js +1 -1
- package/src/Store/object-repository.ts +32 -0
- package/src/Tests/test.app-state-sync.js +204 -0
- package/src/Tests/test.app-state-sync.ts +207 -0
- package/src/Tests/test.event-buffer.js +270 -0
- package/src/Tests/test.event-buffer.ts +319 -0
- package/src/Tests/test.key-store.js +76 -0
- package/src/Tests/test.key-store.ts +92 -0
- package/src/Tests/test.libsignal.js +141 -0
- package/src/Tests/test.libsignal.ts +186 -0
- package/src/Tests/test.media-download.js +93 -0
- package/src/Tests/test.media-download.ts +76 -0
- package/src/Tests/test.messages.js +33 -0
- package/src/Tests/test.messages.ts +37 -0
- package/src/Tests/utils.js +34 -0
- package/src/Tests/utils.ts +36 -0
- package/src/Types/Auth.ts +113 -0
- package/src/Types/Call.ts +15 -0
- package/src/Types/Chat.ts +106 -0
- package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
- package/src/Types/Events.ts +93 -0
- package/src/Types/GroupMetadata.ts +53 -0
- package/{lib → src}/Types/Label.js +1 -1
- package/src/Types/Label.ts +36 -0
- package/{lib → src}/Types/LabelAssociation.js +1 -1
- package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
- package/src/Types/Message.ts +288 -0
- package/src/Types/Newsletter.js +32 -0
- package/src/Types/Newsletter.ts +98 -0
- package/src/Types/Product.ts +85 -0
- package/src/Types/Signal.ts +68 -0
- package/{lib/Types/Socket.d.ts → src/Types/Socket.ts} +68 -56
- package/src/Types/State.ts +29 -0
- package/{lib → src}/Types/index.js +2 -1
- package/src/Types/index.ts +59 -0
- package/{lib → src}/Utils/auth-utils.js +95 -76
- package/src/Utils/auth-utils.ts +222 -0
- package/src/Utils/baileys-event-stream.js +92 -0
- package/src/Utils/baileys-event-stream.ts +66 -0
- package/{lib → src}/Utils/business.js +45 -17
- package/src/Utils/business.ts +275 -0
- package/{lib → src}/Utils/chat-utils.js +74 -46
- package/src/Utils/chat-utils.ts +860 -0
- package/{lib → src}/Utils/crypto.js +31 -21
- package/src/Utils/crypto.ts +131 -0
- package/src/Utils/decode-wa-message.js +211 -0
- package/src/Utils/decode-wa-message.ts +228 -0
- package/{lib → src}/Utils/event-buffer.js +13 -4
- package/src/Utils/event-buffer.ts +613 -0
- package/{lib → src}/Utils/generics.js +98 -45
- package/src/Utils/generics.ts +434 -0
- package/{lib → src}/Utils/history.js +39 -10
- package/src/Utils/history.ts +112 -0
- package/src/Utils/index.ts +17 -0
- package/{lib → src}/Utils/link-preview.js +54 -17
- package/src/Utils/link-preview.ts +122 -0
- package/src/Utils/logger.ts +3 -0
- package/src/Utils/lt-hash.ts +61 -0
- package/{lib → src}/Utils/make-mutex.js +13 -4
- package/src/Utils/make-mutex.ts +44 -0
- package/{lib → src}/Utils/messages-media.js +296 -192
- package/src/Utils/messages-media.ts +847 -0
- package/{lib → src}/Utils/messages.js +124 -113
- package/src/Utils/messages.ts +956 -0
- package/{lib → src}/Utils/noise-handler.js +16 -3
- package/src/Utils/noise-handler.ts +197 -0
- package/{lib → src}/Utils/process-message.js +33 -29
- package/src/Utils/process-message.ts +414 -0
- package/{lib → src}/Utils/signal.js +23 -14
- package/src/Utils/signal.ts +177 -0
- package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -19
- package/src/Utils/use-multi-file-auth-state.ts +90 -0
- package/{lib → src}/Utils/validate-connection.js +25 -42
- package/src/Utils/validate-connection.ts +238 -0
- package/src/WABinary/constants.ts +42 -0
- package/{lib → src}/WABinary/decode.js +17 -7
- package/src/WABinary/decode.ts +265 -0
- package/{lib → src}/WABinary/encode.js +17 -7
- package/src/WABinary/encode.ts +236 -0
- package/{lib → src}/WABinary/generic-utils.js +2 -2
- package/src/WABinary/generic-utils.ts +121 -0
- package/src/WABinary/index.ts +5 -0
- package/{lib → src}/WABinary/jid-utils.js +4 -1
- package/src/WABinary/jid-utils.ts +68 -0
- package/src/WABinary/types.ts +17 -0
- package/src/WAM/BinaryInfo.js +13 -0
- package/src/WAM/BinaryInfo.ts +12 -0
- package/src/WAM/constants.js +15350 -0
- package/src/WAM/constants.ts +15382 -0
- package/src/WAM/encode.js +155 -0
- package/src/WAM/encode.ts +174 -0
- package/src/WAM/index.js +19 -0
- package/src/WAM/index.ts +3 -0
- package/src/gifted +1 -0
- package/{lib → src}/index.js +1 -0
- package/src/index.ts +13 -0
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/index.d.ts +0 -284
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/libsignal.d.ts +0 -3
- package/lib/Signal/libsignal.js +0 -152
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/web-socket-client.d.ts +0 -12
- package/lib/Socket/Client/web-socket-client.js +0 -62
- package/lib/Socket/business.d.ts +0 -135
- package/lib/Socket/chats.d.ts +0 -79
- package/lib/Socket/groups.d.ts +0 -113
- package/lib/Socket/index.d.ts +0 -137
- package/lib/Socket/messages-recv.d.ts +0 -124
- package/lib/Socket/messages-send.d.ts +0 -119
- package/lib/Socket/registration.d.ts +0 -232
- package/lib/Socket/socket.d.ts +0 -42
- package/lib/Store/index.d.ts +0 -3
- package/lib/Store/make-cache-manager-store.d.ts +0 -13
- package/lib/Store/make-in-memory-store.d.ts +0 -117
- package/lib/Store/make-ordered-dictionary.d.ts +0 -13
- package/lib/Store/object-repository.d.ts +0 -10
- package/lib/Types/Auth.d.ts +0 -108
- package/lib/Types/Call.d.ts +0 -13
- package/lib/Types/Chat.d.ts +0 -102
- package/lib/Types/Events.d.ts +0 -157
- package/lib/Types/GroupMetadata.d.ts +0 -52
- package/lib/Types/Label.d.ts +0 -35
- package/lib/Types/Message.d.ts +0 -261
- package/lib/Types/Product.d.ts +0 -78
- package/lib/Types/Signal.d.ts +0 -57
- package/lib/Types/State.d.ts +0 -27
- package/lib/Types/index.d.ts +0 -56
- package/lib/Utils/auth-utils.d.ts +0 -18
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/baileys-event-stream.js +0 -63
- package/lib/Utils/business.d.ts +0 -22
- package/lib/Utils/chat-utils.d.ts +0 -71
- package/lib/Utils/crypto.d.ts +0 -41
- package/lib/Utils/decode-wa-message.d.ts +0 -19
- package/lib/Utils/decode-wa-message.js +0 -174
- package/lib/Utils/event-buffer.d.ts +0 -35
- package/lib/Utils/generics.d.ts +0 -94
- package/lib/Utils/history.d.ts +0 -15
- package/lib/Utils/index.d.ts +0 -17
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -4
- package/lib/Utils/lt-hash.d.ts +0 -12
- package/lib/Utils/make-mutex.d.ts +0 -7
- package/lib/Utils/messages-media.d.ts +0 -107
- package/lib/Utils/messages.d.ts +0 -76
- package/lib/Utils/noise-handler.d.ts +0 -20
- package/lib/Utils/process-message.d.ts +0 -41
- package/lib/Utils/signal.d.ts +0 -32
- package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
- package/lib/Utils/validate-connection.d.ts +0 -11
- package/lib/WABinary/constants.d.ts +0 -27
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -15
- package/lib/WABinary/index.d.ts +0 -5
- package/lib/WABinary/jid-utils.d.ts +0 -29
- package/lib/WABinary/types.d.ts +0 -18
- package/lib/index.d.ts +0 -10
- /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
- /package/{lib → src}/Socket/Client/index.js +0 -0
- /package/{lib → src}/Store/index.js +0 -0
- /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
- /package/{lib → src}/Types/Auth.js +0 -0
- /package/{lib → src}/Types/Call.js +0 -0
- /package/{lib → src}/Types/Chat.js +0 -0
- /package/{lib → src}/Types/Contact.js +0 -0
- /package/{lib → src}/Types/Events.js +0 -0
- /package/{lib → src}/Types/GroupMetadata.js +0 -0
- /package/{lib → src}/Types/Message.js +0 -0
- /package/{lib → src}/Types/Product.js +0 -0
- /package/{lib → src}/Types/Signal.js +0 -0
- /package/{lib → src}/Types/Socket.js +0 -0
- /package/{lib → src}/Types/State.js +0 -0
- /package/{lib → src}/Utils/index.js +0 -0
- /package/{lib → src}/Utils/logger.js +0 -0
- /package/{lib → src}/Utils/lt-hash.js +0 -0
- /package/{lib → src}/WABinary/constants.js +0 -0
- /package/{lib → src}/WABinary/index.js +0 -0
- /package/{lib → src}/WABinary/types.js +0 -0
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
+
var m = o[Symbol.asyncIterator], i;
|
|
14
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
+
};
|
|
2
18
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
19
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
20
|
};
|
|
5
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.assertMediaContent = exports.downloadMediaMessage = exports.aggregateMessageKeysNotFromMe = exports.
|
|
22
|
+
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;
|
|
23
|
+
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
7
24
|
const boom_1 = require("@hapi/boom");
|
|
8
25
|
const axios_1 = __importDefault(require("axios"));
|
|
9
26
|
const crypto_1 = require("crypto");
|
|
@@ -36,25 +53,22 @@ const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
|
|
|
36
53
|
* @param text eg. hello https://google.com
|
|
37
54
|
* @returns the URL, eg. https://google.com
|
|
38
55
|
*/
|
|
39
|
-
const extractUrlFromText = (text) => {
|
|
40
|
-
var _a;
|
|
41
|
-
return (!Defaults_1.URL_EXCLUDE_REGEX.test(text) ? (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0] : undefined);
|
|
42
|
-
};
|
|
56
|
+
const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
|
|
43
57
|
exports.extractUrlFromText = extractUrlFromText;
|
|
44
|
-
const generateLinkPreviewIfRequired =
|
|
58
|
+
const generateLinkPreviewIfRequired = (text, getUrlInfo, logger) => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
59
|
const url = (0, exports.extractUrlFromText)(text);
|
|
46
60
|
if (!!getUrlInfo && url) {
|
|
47
61
|
try {
|
|
48
|
-
const urlInfo =
|
|
62
|
+
const urlInfo = yield getUrlInfo(url);
|
|
49
63
|
return urlInfo;
|
|
50
64
|
}
|
|
51
65
|
catch (error) { // ignore if fails
|
|
52
66
|
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
|
|
53
67
|
}
|
|
54
68
|
}
|
|
55
|
-
};
|
|
69
|
+
});
|
|
56
70
|
exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
|
|
57
|
-
const assertColor =
|
|
71
|
+
const assertColor = (color) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
72
|
let assertedColor;
|
|
59
73
|
if (typeof color === 'number') {
|
|
60
74
|
assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1;
|
|
@@ -67,8 +81,8 @@ const assertColor = async (color) => {
|
|
|
67
81
|
assertedColor = parseInt(hex, 16);
|
|
68
82
|
return assertedColor;
|
|
69
83
|
}
|
|
70
|
-
};
|
|
71
|
-
const prepareWAMessageMedia =
|
|
84
|
+
});
|
|
85
|
+
const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
86
|
const logger = options.logger;
|
|
73
87
|
let mediaType;
|
|
74
88
|
for (const key of Defaults_1.MEDIA_KEYS) {
|
|
@@ -79,10 +93,7 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
79
93
|
if (!mediaType) {
|
|
80
94
|
throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
|
|
81
95
|
}
|
|
82
|
-
const uploadData = {
|
|
83
|
-
...message,
|
|
84
|
-
media: message[mediaType]
|
|
85
|
-
};
|
|
96
|
+
const uploadData = Object.assign(Object.assign({}, message), { media: message[mediaType] });
|
|
86
97
|
delete uploadData[mediaType];
|
|
87
98
|
// check if cacheable + generate cache key
|
|
88
99
|
const cacheableKey = typeof uploadData.media === 'object' &&
|
|
@@ -104,7 +115,7 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
104
115
|
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
|
|
105
116
|
const obj = Types_1.WAProto.Message.decode(mediaBuff);
|
|
106
117
|
const key = `${mediaType}Message`;
|
|
107
|
-
Object.assign(obj[key], {
|
|
118
|
+
Object.assign(obj[key], Object.assign(Object.assign({}, uploadData), { media: undefined }));
|
|
108
119
|
return obj;
|
|
109
120
|
}
|
|
110
121
|
}
|
|
@@ -114,23 +125,23 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
114
125
|
const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
|
|
115
126
|
const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
|
|
116
127
|
const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
|
|
117
|
-
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath } =
|
|
128
|
+
const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = yield (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
|
|
118
129
|
logger,
|
|
119
130
|
saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
|
|
120
131
|
opts: options.options
|
|
121
132
|
});
|
|
122
133
|
// url safe Base64 encode the SHA256 hash of the body
|
|
123
|
-
const fileEncSha256B64 = fileEncSha256.toString('base64');
|
|
124
|
-
const [{ mediaUrl, directPath }] =
|
|
125
|
-
(
|
|
126
|
-
const result =
|
|
134
|
+
const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
|
|
135
|
+
const [{ mediaUrl, directPath, handle }] = yield Promise.all([
|
|
136
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
137
|
+
const result = yield options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
|
|
127
138
|
logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
|
|
128
139
|
return result;
|
|
129
|
-
})(),
|
|
130
|
-
(
|
|
140
|
+
}))(),
|
|
141
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
142
|
try {
|
|
132
143
|
if (requiresThumbnailComputation) {
|
|
133
|
-
const { thumbnail, originalImageDimensions } =
|
|
144
|
+
const { thumbnail, originalImageDimensions } = yield (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
|
|
134
145
|
uploadData.jpegThumbnail = thumbnail;
|
|
135
146
|
if (!uploadData.width && originalImageDimensions) {
|
|
136
147
|
uploadData.width = originalImageDimensions.width;
|
|
@@ -140,54 +151,51 @@ const prepareWAMessageMedia = async (message, options) => {
|
|
|
140
151
|
logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
|
|
141
152
|
}
|
|
142
153
|
if (requiresDurationComputation) {
|
|
143
|
-
uploadData.seconds =
|
|
154
|
+
uploadData.seconds = yield (0, messages_media_1.getAudioDuration)(bodyPath);
|
|
144
155
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
|
|
145
156
|
}
|
|
146
157
|
if (requiresWaveformProcessing) {
|
|
147
|
-
uploadData.waveform =
|
|
158
|
+
uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
148
159
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
149
160
|
}
|
|
150
161
|
if (requiresWaveformProcessing) {
|
|
151
|
-
uploadData.waveform =
|
|
162
|
+
uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
|
|
152
163
|
logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
|
|
153
164
|
}
|
|
154
165
|
if (requiresAudioBackground) {
|
|
155
|
-
uploadData.backgroundArgb =
|
|
166
|
+
uploadData.backgroundArgb = yield assertColor(options.backgroundColor);
|
|
156
167
|
logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
|
|
157
168
|
}
|
|
158
169
|
}
|
|
159
170
|
catch (error) {
|
|
160
171
|
logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
|
|
161
172
|
}
|
|
162
|
-
})(),
|
|
173
|
+
}))(),
|
|
163
174
|
])
|
|
164
|
-
.finally(
|
|
165
|
-
|
|
175
|
+
.finally(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
176
|
+
if (!Buffer.isBuffer(encWriteStream)) {
|
|
177
|
+
encWriteStream.destroy();
|
|
178
|
+
}
|
|
166
179
|
// remove tmp files
|
|
167
180
|
if (didSaveToTmpPath && bodyPath) {
|
|
168
|
-
|
|
181
|
+
yield fs_1.promises.unlink(bodyPath);
|
|
169
182
|
logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
|
|
170
183
|
}
|
|
171
|
-
});
|
|
184
|
+
}));
|
|
172
185
|
const obj = Types_1.WAProto.Message.fromObject({
|
|
173
|
-
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
|
|
174
|
-
|
|
175
|
-
directPath,
|
|
176
|
-
mediaKey,
|
|
177
|
-
fileEncSha256,
|
|
178
|
-
fileSha256,
|
|
179
|
-
fileLength,
|
|
180
|
-
mediaKeyTimestamp: (0, generics_1.unixTimestampSeconds)(),
|
|
181
|
-
...uploadData,
|
|
182
|
-
media: undefined
|
|
183
|
-
})
|
|
186
|
+
[`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject(Object.assign(Object.assign({ url: handle ? undefined : mediaUrl, directPath, mediaKey: mediaKey, fileEncSha256: fileEncSha256, fileSha256,
|
|
187
|
+
fileLength, mediaKeyTimestamp: handle ? undefined : (0, generics_1.unixTimestampSeconds)() }, uploadData), { media: undefined }))
|
|
184
188
|
});
|
|
189
|
+
if (uploadData.ptv) {
|
|
190
|
+
obj.ptvMessage = obj.videoMessage;
|
|
191
|
+
delete obj.videoMessage;
|
|
192
|
+
}
|
|
185
193
|
if (cacheableKey) {
|
|
186
194
|
logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
|
|
187
195
|
options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
|
|
188
196
|
}
|
|
189
197
|
return obj;
|
|
190
|
-
};
|
|
198
|
+
});
|
|
191
199
|
exports.prepareWAMessageMedia = prepareWAMessageMedia;
|
|
192
200
|
const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
|
|
193
201
|
ephemeralExpiration = ephemeralExpiration || 0;
|
|
@@ -235,7 +243,7 @@ const generateForwardMessageContent = (message, forceForward) => {
|
|
|
235
243
|
return content;
|
|
236
244
|
};
|
|
237
245
|
exports.generateForwardMessageContent = generateForwardMessageContent;
|
|
238
|
-
const generateWAMessageContent =
|
|
246
|
+
const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
239
247
|
var _a;
|
|
240
248
|
var _b;
|
|
241
249
|
let m = {};
|
|
@@ -243,7 +251,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
243
251
|
const extContent = { text: message.text };
|
|
244
252
|
let urlInfo = message.linkPreview;
|
|
245
253
|
if (typeof urlInfo === 'undefined') {
|
|
246
|
-
urlInfo =
|
|
254
|
+
urlInfo = yield (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
|
|
247
255
|
}
|
|
248
256
|
if (urlInfo) {
|
|
249
257
|
extContent.canonicalUrl = urlInfo['canonical-url'];
|
|
@@ -264,7 +272,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
264
272
|
}
|
|
265
273
|
}
|
|
266
274
|
if (options.backgroundColor) {
|
|
267
|
-
extContent.backgroundArgb =
|
|
275
|
+
extContent.backgroundArgb = yield assertColor(options.backgroundColor);
|
|
268
276
|
}
|
|
269
277
|
if (options.font) {
|
|
270
278
|
extContent.font = options.font;
|
|
@@ -326,17 +334,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
326
334
|
}
|
|
327
335
|
}
|
|
328
336
|
else if ('product' in message) {
|
|
329
|
-
const { imageMessage } =
|
|
330
|
-
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
|
|
331
|
-
...message,
|
|
332
|
-
product: {
|
|
333
|
-
...message.product,
|
|
334
|
-
productImage: imageMessage,
|
|
335
|
-
}
|
|
336
|
-
});
|
|
337
|
+
const { imageMessage } = yield (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
|
|
338
|
+
m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject(Object.assign(Object.assign({}, message), { product: Object.assign(Object.assign({}, message.product), { productImage: imageMessage }) }));
|
|
337
339
|
}
|
|
338
340
|
else if ('listReply' in message) {
|
|
339
|
-
m.listResponseMessage = {
|
|
341
|
+
m.listResponseMessage = Object.assign({}, message.listReply);
|
|
340
342
|
}
|
|
341
343
|
else if ('poll' in message) {
|
|
342
344
|
(_b = message.poll).selectableCount || (_b.selectableCount = 0);
|
|
@@ -366,11 +368,11 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
366
368
|
m.requestPhoneNumberMessage = {};
|
|
367
369
|
}
|
|
368
370
|
else {
|
|
369
|
-
m =
|
|
371
|
+
m = yield (0, exports.prepareWAMessageMedia)(message, options);
|
|
370
372
|
}
|
|
371
373
|
if ('buttons' in message && !!message.buttons) {
|
|
372
374
|
const buttonsMessage = {
|
|
373
|
-
buttons: message.buttons.map(b => ({
|
|
375
|
+
buttons: message.buttons.map(b => (Object.assign(Object.assign({}, b), { type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE })))
|
|
374
376
|
};
|
|
375
377
|
if ('text' in message) {
|
|
376
378
|
buttonsMessage.contentText = message.text;
|
|
@@ -447,7 +449,7 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
447
449
|
m[messageType].contextInfo = message.contextInfo;
|
|
448
450
|
}
|
|
449
451
|
return Types_1.WAProto.Message.fromObject(m);
|
|
450
|
-
};
|
|
452
|
+
});
|
|
451
453
|
exports.generateWAMessageContent = generateWAMessageContent;
|
|
452
454
|
const generateWAMessageFromContent = (jid, message, options) => {
|
|
453
455
|
// set timestamp to now
|
|
@@ -455,7 +457,8 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
455
457
|
if (!options.timestamp) {
|
|
456
458
|
options.timestamp = new Date();
|
|
457
459
|
}
|
|
458
|
-
const
|
|
460
|
+
const innerMessage = (0, exports.normalizeMessageContent)(message);
|
|
461
|
+
const key = (0, exports.getContentType)(innerMessage);
|
|
459
462
|
const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
|
|
460
463
|
const { quoted, userJid } = options;
|
|
461
464
|
if (quoted) {
|
|
@@ -468,7 +471,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
468
471
|
if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
|
|
469
472
|
delete quotedContent.contextInfo;
|
|
470
473
|
}
|
|
471
|
-
const contextInfo =
|
|
474
|
+
const contextInfo = innerMessage[key].contextInfo || {};
|
|
472
475
|
contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
|
|
473
476
|
contextInfo.stanzaId = quoted.key.id;
|
|
474
477
|
contextInfo.quotedMessage = quotedMsg;
|
|
@@ -477,7 +480,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
477
480
|
if (jid !== quoted.key.remoteJid) {
|
|
478
481
|
contextInfo.remoteJid = quoted.key.remoteJid;
|
|
479
482
|
}
|
|
480
|
-
|
|
483
|
+
innerMessage[key].contextInfo = contextInfo;
|
|
481
484
|
}
|
|
482
485
|
if (
|
|
483
486
|
// if we want to send a disappearing message
|
|
@@ -486,11 +489,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
486
489
|
key !== 'protocolMessage' &&
|
|
487
490
|
// already not converted to disappearing message
|
|
488
491
|
key !== 'ephemeralMessage') {
|
|
489
|
-
|
|
490
|
-
...(message[key].contextInfo || {}),
|
|
491
|
-
expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
|
|
492
|
-
//ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
|
|
493
|
-
};
|
|
492
|
+
innerMessage[key].contextInfo = Object.assign(Object.assign({}, (innerMessage[key].contextInfo || {})), { expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL });
|
|
494
493
|
}
|
|
495
494
|
message = Types_1.WAProto.Message.fromObject(message);
|
|
496
495
|
const messageJSON = {
|
|
@@ -508,12 +507,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
|
|
|
508
507
|
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
|
|
509
508
|
};
|
|
510
509
|
exports.generateWAMessageFromContent = generateWAMessageFromContent;
|
|
511
|
-
const generateWAMessage =
|
|
510
|
+
const generateWAMessage = (jid, content, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
512
511
|
var _a;
|
|
513
512
|
// ensure msg ID is with every log
|
|
514
513
|
options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
|
|
515
|
-
return (0, exports.generateWAMessageFromContent)(jid,
|
|
516
|
-
};
|
|
514
|
+
return (0, exports.generateWAMessageFromContent)(jid, yield (0, exports.generateWAMessageContent)(content, Object.assign({ newsletter: (0, WABinary_1.isJidNewsLetter)(jid) }, options)), options);
|
|
515
|
+
});
|
|
517
516
|
exports.generateWAMessage = generateWAMessage;
|
|
518
517
|
/** Get the key to access the true type of content */
|
|
519
518
|
const getContentType = (content) => {
|
|
@@ -673,7 +672,6 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
|
|
|
673
672
|
}
|
|
674
673
|
return Object.values(voteHashMap);
|
|
675
674
|
}
|
|
676
|
-
exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
|
|
677
675
|
/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
|
|
678
676
|
const aggregateMessageKeysNotFromMe = (keys) => {
|
|
679
677
|
const keyMap = {};
|
|
@@ -697,60 +695,73 @@ const REUPLOAD_REQUIRED_STATUS = [410, 404];
|
|
|
697
695
|
/**
|
|
698
696
|
* Downloads the given message. Throws an error if it's not a media message
|
|
699
697
|
*/
|
|
700
|
-
const downloadMediaMessage =
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
return result;
|
|
705
|
-
}
|
|
706
|
-
catch (error) {
|
|
698
|
+
const downloadMediaMessage = (message, type, options, ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
699
|
+
const result = yield downloadMsg()
|
|
700
|
+
.catch((error) => __awaiter(void 0, void 0, void 0, function* () {
|
|
701
|
+
var _a;
|
|
707
702
|
if (ctx) {
|
|
708
703
|
if (axios_1.default.isAxiosError(error)) {
|
|
709
704
|
// check if the message requires a reupload
|
|
710
705
|
if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
|
|
711
706
|
ctx.logger.info({ key: message.key }, 'sending reupload media request...');
|
|
712
707
|
// request reupload
|
|
713
|
-
message =
|
|
714
|
-
const result =
|
|
708
|
+
message = yield ctx.reuploadRequest(message);
|
|
709
|
+
const result = yield downloadMsg();
|
|
715
710
|
return result;
|
|
716
711
|
}
|
|
717
712
|
}
|
|
718
713
|
}
|
|
719
714
|
throw error;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
const media = mContent[contentType];
|
|
729
|
-
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
730
|
-
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
731
|
-
}
|
|
732
|
-
let download;
|
|
733
|
-
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
734
|
-
download = {
|
|
735
|
-
directPath: media.thumbnailDirectPath,
|
|
736
|
-
mediaKey: media.mediaKey
|
|
737
|
-
};
|
|
738
|
-
mediaType = 'thumbnail-link';
|
|
739
|
-
}
|
|
740
|
-
else {
|
|
741
|
-
download = media;
|
|
742
|
-
}
|
|
743
|
-
const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
744
|
-
if (type === 'buffer') {
|
|
745
|
-
const bufferArray = [];
|
|
746
|
-
for await (const chunk of stream) {
|
|
747
|
-
bufferArray.push(chunk);
|
|
715
|
+
}));
|
|
716
|
+
return result;
|
|
717
|
+
function downloadMsg() {
|
|
718
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
719
|
+
var _a, e_1, _b, _c;
|
|
720
|
+
const mContent = (0, exports.extractMessageContent)(message.message);
|
|
721
|
+
if (!mContent) {
|
|
722
|
+
throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
|
|
748
723
|
}
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
724
|
+
const contentType = (0, exports.getContentType)(mContent);
|
|
725
|
+
let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
|
|
726
|
+
const media = mContent[contentType];
|
|
727
|
+
if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
|
|
728
|
+
throw new boom_1.Boom(`"${contentType}" message is not a media message`);
|
|
729
|
+
}
|
|
730
|
+
let download;
|
|
731
|
+
if ('thumbnailDirectPath' in media && !('url' in media)) {
|
|
732
|
+
download = {
|
|
733
|
+
directPath: media.thumbnailDirectPath,
|
|
734
|
+
mediaKey: media.mediaKey
|
|
735
|
+
};
|
|
736
|
+
mediaType = 'thumbnail-link';
|
|
737
|
+
}
|
|
738
|
+
else {
|
|
739
|
+
download = media;
|
|
740
|
+
}
|
|
741
|
+
const stream = yield (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
|
|
742
|
+
if (type === 'buffer') {
|
|
743
|
+
const bufferArray = [];
|
|
744
|
+
try {
|
|
745
|
+
for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
|
|
746
|
+
_c = stream_1_1.value;
|
|
747
|
+
_d = false;
|
|
748
|
+
const chunk = _c;
|
|
749
|
+
bufferArray.push(chunk);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
753
|
+
finally {
|
|
754
|
+
try {
|
|
755
|
+
if (!_d && !_a && (_b = stream_1.return)) yield _b.call(stream_1);
|
|
756
|
+
}
|
|
757
|
+
finally { if (e_1) throw e_1.error; }
|
|
758
|
+
}
|
|
759
|
+
return Buffer.concat(bufferArray);
|
|
760
|
+
}
|
|
761
|
+
return stream;
|
|
762
|
+
});
|
|
752
763
|
}
|
|
753
|
-
};
|
|
764
|
+
});
|
|
754
765
|
exports.downloadMediaMessage = downloadMediaMessage;
|
|
755
766
|
/** Checks whether the given message is a media message; if it is returns the inner content */
|
|
756
767
|
const assertMediaContent = (content) => {
|