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.
Files changed (222) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1429 -684
  3. package/package.json +11 -26
  4. package/src/Defaults/baileys-version.json +3 -0
  5. package/{lib → src}/Defaults/index.js +16 -8
  6. package/src/Defaults/index.ts +131 -0
  7. package/src/Defaults/phonenumber-mcc.json +223 -0
  8. package/src/Signal/libsignal.js +180 -0
  9. package/src/Signal/libsignal.ts +141 -0
  10. package/src/Socket/Client/abstract-socket-client.ts +19 -0
  11. package/src/Socket/Client/index.ts +3 -0
  12. package/src/Socket/Client/mobile-socket-client.js +78 -0
  13. package/src/Socket/Client/mobile-socket-client.ts +66 -0
  14. package/src/Socket/Client/web-socket-client.js +75 -0
  15. package/src/Socket/Client/web-socket-client.ts +57 -0
  16. package/{lib → src}/Socket/business.js +33 -27
  17. package/src/Socket/business.ts +281 -0
  18. package/{lib → src}/Socket/chats.js +197 -178
  19. package/src/Socket/chats.ts +1030 -0
  20. package/{lib → src}/Socket/groups.js +69 -79
  21. package/src/Socket/groups.ts +356 -0
  22. package/{lib → src}/Socket/index.js +1 -4
  23. package/src/Socket/index.ts +13 -0
  24. package/{lib → src}/Socket/messages-recv.js +160 -108
  25. package/src/Socket/messages-recv.ts +985 -0
  26. package/{lib → src}/Socket/messages-send.js +183 -100
  27. package/src/Socket/messages-send.ts +871 -0
  28. package/src/Socket/newsletter.js +227 -0
  29. package/src/Socket/newsletter.ts +282 -0
  30. package/{lib → src}/Socket/registration.js +55 -63
  31. package/src/Socket/registration.ts +250 -0
  32. package/{lib → src}/Socket/socket.js +107 -66
  33. package/src/Socket/socket.ts +777 -0
  34. package/src/Store/index.ts +3 -0
  35. package/{lib → src}/Store/make-cache-manager-store.js +34 -25
  36. package/src/Store/make-cache-manager-store.ts +100 -0
  37. package/{lib → src}/Store/make-in-memory-store.js +51 -61
  38. package/src/Store/make-in-memory-store.ts +475 -0
  39. package/src/Store/make-ordered-dictionary.ts +86 -0
  40. package/{lib → src}/Store/object-repository.js +1 -1
  41. package/src/Store/object-repository.ts +32 -0
  42. package/src/Tests/test.app-state-sync.js +204 -0
  43. package/src/Tests/test.app-state-sync.ts +207 -0
  44. package/src/Tests/test.event-buffer.js +270 -0
  45. package/src/Tests/test.event-buffer.ts +319 -0
  46. package/src/Tests/test.key-store.js +76 -0
  47. package/src/Tests/test.key-store.ts +92 -0
  48. package/src/Tests/test.libsignal.js +141 -0
  49. package/src/Tests/test.libsignal.ts +186 -0
  50. package/src/Tests/test.media-download.js +93 -0
  51. package/src/Tests/test.media-download.ts +76 -0
  52. package/src/Tests/test.messages.js +33 -0
  53. package/src/Tests/test.messages.ts +37 -0
  54. package/src/Tests/utils.js +34 -0
  55. package/src/Tests/utils.ts +36 -0
  56. package/src/Types/Auth.ts +113 -0
  57. package/src/Types/Call.ts +15 -0
  58. package/src/Types/Chat.ts +106 -0
  59. package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
  60. package/src/Types/Events.ts +93 -0
  61. package/src/Types/GroupMetadata.ts +53 -0
  62. package/{lib → src}/Types/Label.js +1 -1
  63. package/src/Types/Label.ts +36 -0
  64. package/{lib → src}/Types/LabelAssociation.js +1 -1
  65. package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
  66. package/src/Types/Message.ts +288 -0
  67. package/src/Types/Newsletter.js +32 -0
  68. package/src/Types/Newsletter.ts +98 -0
  69. package/src/Types/Product.ts +85 -0
  70. package/src/Types/Signal.ts +68 -0
  71. package/{lib/Types/Socket.d.ts → src/Types/Socket.ts} +68 -56
  72. package/src/Types/State.ts +29 -0
  73. package/{lib → src}/Types/index.js +2 -1
  74. package/src/Types/index.ts +59 -0
  75. package/{lib → src}/Utils/auth-utils.js +95 -76
  76. package/src/Utils/auth-utils.ts +222 -0
  77. package/src/Utils/baileys-event-stream.js +92 -0
  78. package/src/Utils/baileys-event-stream.ts +66 -0
  79. package/{lib → src}/Utils/business.js +45 -17
  80. package/src/Utils/business.ts +275 -0
  81. package/{lib → src}/Utils/chat-utils.js +74 -46
  82. package/src/Utils/chat-utils.ts +860 -0
  83. package/{lib → src}/Utils/crypto.js +31 -21
  84. package/src/Utils/crypto.ts +131 -0
  85. package/src/Utils/decode-wa-message.js +211 -0
  86. package/src/Utils/decode-wa-message.ts +228 -0
  87. package/{lib → src}/Utils/event-buffer.js +13 -4
  88. package/src/Utils/event-buffer.ts +613 -0
  89. package/{lib → src}/Utils/generics.js +98 -45
  90. package/src/Utils/generics.ts +434 -0
  91. package/{lib → src}/Utils/history.js +39 -10
  92. package/src/Utils/history.ts +112 -0
  93. package/src/Utils/index.ts +17 -0
  94. package/{lib → src}/Utils/link-preview.js +54 -17
  95. package/src/Utils/link-preview.ts +122 -0
  96. package/src/Utils/logger.ts +3 -0
  97. package/src/Utils/lt-hash.ts +61 -0
  98. package/{lib → src}/Utils/make-mutex.js +13 -4
  99. package/src/Utils/make-mutex.ts +44 -0
  100. package/{lib → src}/Utils/messages-media.js +296 -192
  101. package/src/Utils/messages-media.ts +847 -0
  102. package/{lib → src}/Utils/messages.js +124 -113
  103. package/src/Utils/messages.ts +956 -0
  104. package/{lib → src}/Utils/noise-handler.js +16 -3
  105. package/src/Utils/noise-handler.ts +197 -0
  106. package/{lib → src}/Utils/process-message.js +33 -29
  107. package/src/Utils/process-message.ts +414 -0
  108. package/{lib → src}/Utils/signal.js +23 -14
  109. package/src/Utils/signal.ts +177 -0
  110. package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -19
  111. package/src/Utils/use-multi-file-auth-state.ts +90 -0
  112. package/{lib → src}/Utils/validate-connection.js +25 -42
  113. package/src/Utils/validate-connection.ts +238 -0
  114. package/src/WABinary/constants.ts +42 -0
  115. package/{lib → src}/WABinary/decode.js +17 -7
  116. package/src/WABinary/decode.ts +265 -0
  117. package/{lib → src}/WABinary/encode.js +17 -7
  118. package/src/WABinary/encode.ts +236 -0
  119. package/{lib → src}/WABinary/generic-utils.js +2 -2
  120. package/src/WABinary/generic-utils.ts +121 -0
  121. package/src/WABinary/index.ts +5 -0
  122. package/{lib → src}/WABinary/jid-utils.js +4 -1
  123. package/src/WABinary/jid-utils.ts +68 -0
  124. package/src/WABinary/types.ts +17 -0
  125. package/src/WAM/BinaryInfo.js +13 -0
  126. package/src/WAM/BinaryInfo.ts +12 -0
  127. package/src/WAM/constants.js +15350 -0
  128. package/src/WAM/constants.ts +15382 -0
  129. package/src/WAM/encode.js +155 -0
  130. package/src/WAM/encode.ts +174 -0
  131. package/src/WAM/index.js +19 -0
  132. package/src/WAM/index.ts +3 -0
  133. package/src/gifted +1 -0
  134. package/{lib → src}/index.js +1 -0
  135. package/src/index.ts +13 -0
  136. package/lib/Defaults/baileys-version.json +0 -3
  137. package/lib/Defaults/index.d.ts +0 -284
  138. package/lib/Defaults/phonenumber-mcc.json +0 -223
  139. package/lib/Signal/libsignal.d.ts +0 -3
  140. package/lib/Signal/libsignal.js +0 -152
  141. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  142. package/lib/Socket/Client/index.d.ts +0 -3
  143. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  144. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  145. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  146. package/lib/Socket/Client/web-socket-client.js +0 -62
  147. package/lib/Socket/business.d.ts +0 -135
  148. package/lib/Socket/chats.d.ts +0 -79
  149. package/lib/Socket/groups.d.ts +0 -113
  150. package/lib/Socket/index.d.ts +0 -137
  151. package/lib/Socket/messages-recv.d.ts +0 -124
  152. package/lib/Socket/messages-send.d.ts +0 -119
  153. package/lib/Socket/registration.d.ts +0 -232
  154. package/lib/Socket/socket.d.ts +0 -42
  155. package/lib/Store/index.d.ts +0 -3
  156. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  157. package/lib/Store/make-in-memory-store.d.ts +0 -117
  158. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  159. package/lib/Store/object-repository.d.ts +0 -10
  160. package/lib/Types/Auth.d.ts +0 -108
  161. package/lib/Types/Call.d.ts +0 -13
  162. package/lib/Types/Chat.d.ts +0 -102
  163. package/lib/Types/Events.d.ts +0 -157
  164. package/lib/Types/GroupMetadata.d.ts +0 -52
  165. package/lib/Types/Label.d.ts +0 -35
  166. package/lib/Types/Message.d.ts +0 -261
  167. package/lib/Types/Product.d.ts +0 -78
  168. package/lib/Types/Signal.d.ts +0 -57
  169. package/lib/Types/State.d.ts +0 -27
  170. package/lib/Types/index.d.ts +0 -56
  171. package/lib/Utils/auth-utils.d.ts +0 -18
  172. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  173. package/lib/Utils/baileys-event-stream.js +0 -63
  174. package/lib/Utils/business.d.ts +0 -22
  175. package/lib/Utils/chat-utils.d.ts +0 -71
  176. package/lib/Utils/crypto.d.ts +0 -41
  177. package/lib/Utils/decode-wa-message.d.ts +0 -19
  178. package/lib/Utils/decode-wa-message.js +0 -174
  179. package/lib/Utils/event-buffer.d.ts +0 -35
  180. package/lib/Utils/generics.d.ts +0 -94
  181. package/lib/Utils/history.d.ts +0 -15
  182. package/lib/Utils/index.d.ts +0 -17
  183. package/lib/Utils/link-preview.d.ts +0 -21
  184. package/lib/Utils/logger.d.ts +0 -4
  185. package/lib/Utils/lt-hash.d.ts +0 -12
  186. package/lib/Utils/make-mutex.d.ts +0 -7
  187. package/lib/Utils/messages-media.d.ts +0 -107
  188. package/lib/Utils/messages.d.ts +0 -76
  189. package/lib/Utils/noise-handler.d.ts +0 -20
  190. package/lib/Utils/process-message.d.ts +0 -41
  191. package/lib/Utils/signal.d.ts +0 -32
  192. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  193. package/lib/Utils/validate-connection.d.ts +0 -11
  194. package/lib/WABinary/constants.d.ts +0 -27
  195. package/lib/WABinary/decode.d.ts +0 -7
  196. package/lib/WABinary/encode.d.ts +0 -3
  197. package/lib/WABinary/generic-utils.d.ts +0 -15
  198. package/lib/WABinary/index.d.ts +0 -5
  199. package/lib/WABinary/jid-utils.d.ts +0 -29
  200. package/lib/WABinary/types.d.ts +0 -18
  201. package/lib/index.d.ts +0 -10
  202. /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
  203. /package/{lib → src}/Socket/Client/index.js +0 -0
  204. /package/{lib → src}/Store/index.js +0 -0
  205. /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
  206. /package/{lib → src}/Types/Auth.js +0 -0
  207. /package/{lib → src}/Types/Call.js +0 -0
  208. /package/{lib → src}/Types/Chat.js +0 -0
  209. /package/{lib → src}/Types/Contact.js +0 -0
  210. /package/{lib → src}/Types/Events.js +0 -0
  211. /package/{lib → src}/Types/GroupMetadata.js +0 -0
  212. /package/{lib → src}/Types/Message.js +0 -0
  213. /package/{lib → src}/Types/Product.js +0 -0
  214. /package/{lib → src}/Types/Signal.js +0 -0
  215. /package/{lib → src}/Types/Socket.js +0 -0
  216. /package/{lib → src}/Types/State.js +0 -0
  217. /package/{lib → src}/Utils/index.js +0 -0
  218. /package/{lib → src}/Utils/logger.js +0 -0
  219. /package/{lib → src}/Utils/lt-hash.js +0 -0
  220. /package/{lib → src}/WABinary/constants.js +0 -0
  221. /package/{lib → src}/WABinary/index.js +0 -0
  222. /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.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;
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 = async (text, getUrlInfo, logger) => {
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 = await getUrlInfo(url);
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 = async (color) => {
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 = async (message, options) => {
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], { ...uploadData, media: undefined });
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 } = await (0, messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
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 }] = await Promise.all([
125
- (async () => {
126
- const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
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
- (async () => {
140
+ }))(),
141
+ (() => __awaiter(void 0, void 0, void 0, function* () {
131
142
  try {
132
143
  if (requiresThumbnailComputation) {
133
- const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
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 = await (0, messages_media_1.getAudioDuration)(bodyPath);
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 = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
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 = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
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 = await assertColor(options.backgroundColor);
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(async () => {
165
- encWriteStream.destroy();
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
- await fs_1.promises.unlink(bodyPath);
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
- url: mediaUrl,
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 = async (message, options) => {
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 = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
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 = await assertColor(options.backgroundColor);
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 } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
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 = { ...message.listReply };
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 = await (0, exports.prepareWAMessageMedia)(message, options);
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 => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
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 key = Object.keys(message)[0];
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 = message[key].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
- message[key].contextInfo = contextInfo;
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
- message[key].contextInfo = {
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 = async (jid, content, options) => {
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, await (0, exports.generateWAMessageContent)(content, options), options);
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 = async (message, type, options, ctx) => {
701
- var _a;
702
- try {
703
- const result = await downloadMsg();
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 = await ctx.reuploadRequest(message);
714
- const result = await downloadMsg();
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
- async function downloadMsg() {
722
- const mContent = (0, exports.extractMessageContent)(message.message);
723
- if (!mContent) {
724
- throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
725
- }
726
- const contentType = (0, exports.getContentType)(mContent);
727
- let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
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
- return Buffer.concat(bufferArray);
750
- }
751
- return stream;
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) => {