gifted-baileys 1.5.4 → 1.5.6

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 (252) hide show
  1. package/LICENSE +1 -1
  2. package/WAProto/WAProto.proto +88 -969
  3. package/WAProto/index.d.ts +1256 -13195
  4. package/WAProto/index.js +74730 -125106
  5. package/package.json +9 -27
  6. package/src/Defaults/baileys-version.json +3 -0
  7. package/{lib → src}/Defaults/index.js +14 -7
  8. package/src/Defaults/index.ts +131 -0
  9. package/src/README.md +1 -0
  10. package/src/Signal/libsignal.js +180 -0
  11. package/src/Signal/libsignal.ts +141 -0
  12. package/src/Socket/Client/abstract-socket-client.ts +19 -0
  13. package/{lib → src}/Socket/Client/index.js +3 -2
  14. package/src/Socket/Client/index.ts +3 -0
  15. package/src/Socket/Client/mobile-socket-client.js +78 -0
  16. package/src/Socket/Client/mobile-socket-client.ts +66 -0
  17. package/src/Socket/Client/web-socket-client.js +75 -0
  18. package/src/Socket/Client/web-socket-client.ts +57 -0
  19. package/{lib → src}/Socket/business.js +33 -28
  20. package/src/Socket/business.ts +281 -0
  21. package/{lib → src}/Socket/chats.js +176 -174
  22. package/src/Socket/chats.ts +1030 -0
  23. package/{lib → src}/Socket/groups.js +68 -80
  24. package/src/Socket/groups.ts +356 -0
  25. package/{lib → src}/Socket/index.js +1 -4
  26. package/src/Socket/index.ts +13 -0
  27. package/{lib → src}/Socket/messages-recv.js +211 -378
  28. package/src/Socket/messages-recv.ts +985 -0
  29. package/{lib → src}/Socket/messages-send.js +177 -452
  30. package/src/Socket/messages-send.ts +871 -0
  31. package/{lib → src}/Socket/newsletter.js +98 -107
  32. package/src/Socket/newsletter.ts +282 -0
  33. package/{lib → src}/Socket/registration.js +48 -56
  34. package/src/Socket/registration.ts +250 -0
  35. package/{lib → src}/Socket/socket.js +77 -77
  36. package/src/Socket/socket.ts +777 -0
  37. package/src/Store/index.ts +3 -0
  38. package/{lib → src}/Store/make-cache-manager-store.js +34 -25
  39. package/src/Store/make-cache-manager-store.ts +100 -0
  40. package/{lib → src}/Store/make-in-memory-store.js +32 -36
  41. package/src/Store/make-in-memory-store.ts +475 -0
  42. package/src/Store/make-ordered-dictionary.ts +86 -0
  43. package/{lib → src}/Store/object-repository.js +1 -1
  44. package/src/Store/object-repository.ts +32 -0
  45. package/src/Tests/test.app-state-sync.js +204 -0
  46. package/src/Tests/test.app-state-sync.ts +207 -0
  47. package/src/Tests/test.event-buffer.js +270 -0
  48. package/src/Tests/test.event-buffer.ts +319 -0
  49. package/src/Tests/test.key-store.js +76 -0
  50. package/src/Tests/test.key-store.ts +92 -0
  51. package/src/Tests/test.libsignal.js +141 -0
  52. package/src/Tests/test.libsignal.ts +186 -0
  53. package/src/Tests/test.media-download.js +93 -0
  54. package/src/Tests/test.media-download.ts +76 -0
  55. package/src/Tests/test.messages.js +33 -0
  56. package/src/Tests/test.messages.ts +37 -0
  57. package/src/Tests/utils.js +34 -0
  58. package/src/Tests/utils.ts +36 -0
  59. package/src/Types/Auth.ts +113 -0
  60. package/src/Types/Call.ts +15 -0
  61. package/src/Types/Chat.ts +106 -0
  62. package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
  63. package/src/Types/Events.ts +93 -0
  64. package/src/Types/GroupMetadata.ts +53 -0
  65. package/src/Types/Label.ts +36 -0
  66. package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
  67. package/src/Types/Message.ts +288 -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 -61
  72. package/src/Types/State.ts +29 -0
  73. package/src/Types/index.ts +59 -0
  74. package/{lib → src}/Utils/auth-utils.js +90 -73
  75. package/src/Utils/auth-utils.ts +222 -0
  76. package/src/Utils/baileys-event-stream.js +92 -0
  77. package/src/Utils/baileys-event-stream.ts +66 -0
  78. package/{lib → src}/Utils/business.js +43 -15
  79. package/src/Utils/business.ts +275 -0
  80. package/{lib → src}/Utils/chat-utils.js +94 -87
  81. package/src/Utils/chat-utils.ts +860 -0
  82. package/{lib → src}/Utils/crypto.js +2 -4
  83. package/src/Utils/crypto.ts +131 -0
  84. package/src/Utils/decode-wa-message.js +211 -0
  85. package/src/Utils/decode-wa-message.ts +228 -0
  86. package/{lib → src}/Utils/event-buffer.js +13 -4
  87. package/src/Utils/event-buffer.ts +613 -0
  88. package/{lib → src}/Utils/generics.js +86 -67
  89. package/src/Utils/generics.ts +434 -0
  90. package/{lib → src}/Utils/history.js +39 -13
  91. package/src/Utils/history.ts +112 -0
  92. package/src/Utils/index.ts +17 -0
  93. package/{lib → src}/Utils/link-preview.js +54 -17
  94. package/src/Utils/link-preview.ts +122 -0
  95. package/src/Utils/logger.ts +3 -0
  96. package/src/Utils/lt-hash.ts +61 -0
  97. package/{lib → src}/Utils/make-mutex.js +13 -4
  98. package/src/Utils/make-mutex.ts +44 -0
  99. package/{lib → src}/Utils/messages-media.js +255 -193
  100. package/src/Utils/messages-media.ts +847 -0
  101. package/{lib → src}/Utils/messages.js +118 -588
  102. package/src/Utils/messages.ts +956 -0
  103. package/src/Utils/noise-handler.ts +197 -0
  104. package/{lib → src}/Utils/process-message.js +30 -27
  105. package/src/Utils/process-message.ts +414 -0
  106. package/{lib → src}/Utils/signal.js +42 -25
  107. package/src/Utils/signal.ts +177 -0
  108. package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -27
  109. package/src/Utils/use-multi-file-auth-state.ts +90 -0
  110. package/{lib → src}/Utils/validate-connection.js +9 -40
  111. package/src/Utils/validate-connection.ts +238 -0
  112. package/src/WABinary/constants.ts +42 -0
  113. package/src/WABinary/decode.ts +265 -0
  114. package/{lib → src}/WABinary/encode.js +10 -16
  115. package/src/WABinary/encode.ts +236 -0
  116. package/src/WABinary/generic-utils.ts +121 -0
  117. package/src/WABinary/index.ts +5 -0
  118. package/src/WABinary/jid-utils.ts +68 -0
  119. package/src/WABinary/types.ts +17 -0
  120. package/src/WAM/BinaryInfo.ts +12 -0
  121. package/src/WAM/constants.ts +15382 -0
  122. package/src/WAM/encode.ts +174 -0
  123. package/src/WAM/index.ts +3 -0
  124. package/{lib → src}/index.js +0 -1
  125. package/src/index.ts +13 -0
  126. package/README.md +0 -1645
  127. package/lib/Defaults/baileys-version.json +0 -3
  128. package/lib/Defaults/index.d.ts +0 -284
  129. package/lib/Signal/libsignal.d.ts +0 -3
  130. package/lib/Signal/libsignal.js +0 -161
  131. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -15
  132. package/lib/Socket/Client/index.d.ts +0 -2
  133. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -12
  134. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  135. package/lib/Socket/Client/types.d.ts +0 -17
  136. package/lib/Socket/Client/types.js +0 -13
  137. package/lib/Socket/Client/websocket.d.ts +0 -12
  138. package/lib/Socket/Client/websocket.js +0 -62
  139. package/lib/Socket/business.d.ts +0 -170
  140. package/lib/Socket/chats.d.ts +0 -81
  141. package/lib/Socket/groups.d.ts +0 -115
  142. package/lib/Socket/index.d.ts +0 -172
  143. package/lib/Socket/messages-recv.d.ts +0 -158
  144. package/lib/Socket/messages-send.d.ts +0 -155
  145. package/lib/Socket/newsletter.d.ts +0 -132
  146. package/lib/Socket/registration.d.ts +0 -264
  147. package/lib/Socket/socket.d.ts +0 -44
  148. package/lib/Socket/usync.d.ts +0 -37
  149. package/lib/Socket/usync.js +0 -70
  150. package/lib/Store/index.d.ts +0 -3
  151. package/lib/Store/make-cache-manager-store.d.ts +0 -14
  152. package/lib/Store/make-in-memory-store.d.ts +0 -118
  153. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  154. package/lib/Store/object-repository.d.ts +0 -10
  155. package/lib/Types/Auth.d.ts +0 -109
  156. package/lib/Types/Call.d.ts +0 -13
  157. package/lib/Types/Chat.d.ts +0 -107
  158. package/lib/Types/Events.d.ts +0 -172
  159. package/lib/Types/GroupMetadata.d.ts +0 -56
  160. package/lib/Types/Label.d.ts +0 -46
  161. package/lib/Types/Message.d.ts +0 -433
  162. package/lib/Types/Newsletter.d.ts +0 -92
  163. package/lib/Types/Product.d.ts +0 -78
  164. package/lib/Types/Signal.d.ts +0 -57
  165. package/lib/Types/State.d.ts +0 -27
  166. package/lib/Types/USync.d.ts +0 -25
  167. package/lib/Types/USync.js +0 -2
  168. package/lib/Types/index.d.ts +0 -66
  169. package/lib/Utils/auth-utils.d.ts +0 -18
  170. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  171. package/lib/Utils/baileys-event-stream.js +0 -63
  172. package/lib/Utils/business.d.ts +0 -22
  173. package/lib/Utils/chat-utils.d.ts +0 -70
  174. package/lib/Utils/crypto.d.ts +0 -40
  175. package/lib/Utils/decode-wa-message.d.ts +0 -36
  176. package/lib/Utils/decode-wa-message.js +0 -226
  177. package/lib/Utils/event-buffer.d.ts +0 -35
  178. package/lib/Utils/generics.d.ts +0 -88
  179. package/lib/Utils/history.d.ts +0 -19
  180. package/lib/Utils/index.d.ts +0 -17
  181. package/lib/Utils/link-preview.d.ts +0 -21
  182. package/lib/Utils/logger.d.ts +0 -2
  183. package/lib/Utils/lt-hash.d.ts +0 -12
  184. package/lib/Utils/make-mutex.d.ts +0 -7
  185. package/lib/Utils/messages-media.d.ts +0 -113
  186. package/lib/Utils/messages.d.ts +0 -77
  187. package/lib/Utils/noise-handler.d.ts +0 -20
  188. package/lib/Utils/process-message.d.ts +0 -41
  189. package/lib/Utils/signal.d.ts +0 -33
  190. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  191. package/lib/Utils/validate-connection.d.ts +0 -11
  192. package/lib/WABinary/constants.d.ts +0 -27
  193. package/lib/WABinary/decode.d.ts +0 -6
  194. package/lib/WABinary/encode.d.ts +0 -2
  195. package/lib/WABinary/generic-utils.d.ts +0 -14
  196. package/lib/WABinary/index.d.ts +0 -5
  197. package/lib/WABinary/jid-utils.d.ts +0 -31
  198. package/lib/WABinary/types.d.ts +0 -18
  199. package/lib/WAM/BinaryInfo.d.ts +0 -8
  200. package/lib/WAM/constants.d.ts +0 -38
  201. package/lib/WAM/encode.d.ts +0 -2
  202. package/lib/WAM/index.d.ts +0 -3
  203. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  204. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -32
  205. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  206. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -57
  207. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  208. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -30
  209. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  210. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -42
  211. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  212. package/lib/WAUSync/Protocols/index.js +0 -20
  213. package/lib/WAUSync/USyncQuery.d.ts +0 -26
  214. package/lib/WAUSync/USyncQuery.js +0 -79
  215. package/lib/WAUSync/USyncUser.d.ts +0 -10
  216. package/lib/WAUSync/USyncUser.js +0 -22
  217. package/lib/WAUSync/index.d.ts +0 -3
  218. package/lib/WAUSync/index.js +0 -19
  219. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
  220. /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
  221. /package/{lib → src}/Store/index.js +0 -0
  222. /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
  223. /package/{lib → src}/Types/Auth.js +0 -0
  224. /package/{lib → src}/Types/Call.js +0 -0
  225. /package/{lib → src}/Types/Chat.js +0 -0
  226. /package/{lib → src}/Types/Contact.js +0 -0
  227. /package/{lib → src}/Types/Events.js +0 -0
  228. /package/{lib → src}/Types/GroupMetadata.js +0 -0
  229. /package/{lib → src}/Types/Label.js +0 -0
  230. /package/{lib → src}/Types/LabelAssociation.js +0 -0
  231. /package/{lib → src}/Types/Message.js +0 -0
  232. /package/{lib → src}/Types/Newsletter.js +0 -0
  233. /package/{lib → src}/Types/Product.js +0 -0
  234. /package/{lib → src}/Types/Signal.js +0 -0
  235. /package/{lib → src}/Types/Socket.js +0 -0
  236. /package/{lib → src}/Types/State.js +0 -0
  237. /package/{lib → src}/Types/index.js +0 -0
  238. /package/{lib → src}/Utils/index.js +0 -0
  239. /package/{lib → src}/Utils/logger.js +0 -0
  240. /package/{lib → src}/Utils/lt-hash.js +0 -0
  241. /package/{lib → src}/Utils/noise-handler.js +0 -0
  242. /package/{lib → src}/WABinary/constants.js +0 -0
  243. /package/{lib → src}/WABinary/decode.js +0 -0
  244. /package/{lib → src}/WABinary/generic-utils.js +0 -0
  245. /package/{lib → src}/WABinary/index.js +0 -0
  246. /package/{lib → src}/WABinary/jid-utils.js +0 -0
  247. /package/{lib → src}/WABinary/types.js +0 -0
  248. /package/{lib → src}/WAM/BinaryInfo.js +0 -0
  249. /package/{lib → src}/WAM/constants.js +0 -0
  250. /package/{lib → src}/WAM/encode.js +0 -0
  251. /package/{lib → src}/WAM/index.js +0 -0
  252. /package/{lib → src}/gifted +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");
@@ -38,20 +55,20 @@ const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
38
55
  */
39
56
  const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
40
57
  exports.extractUrlFromText = extractUrlFromText;
41
- const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
58
+ const generateLinkPreviewIfRequired = (text, getUrlInfo, logger) => __awaiter(void 0, void 0, void 0, function* () {
42
59
  const url = (0, exports.extractUrlFromText)(text);
43
60
  if (!!getUrlInfo && url) {
44
61
  try {
45
- const urlInfo = await getUrlInfo(url);
62
+ const urlInfo = yield getUrlInfo(url);
46
63
  return urlInfo;
47
64
  }
48
65
  catch (error) { // ignore if fails
49
66
  logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
50
67
  }
51
68
  }
52
- };
69
+ });
53
70
  exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
54
- const assertColor = async (color) => {
71
+ const assertColor = (color) => __awaiter(void 0, void 0, void 0, function* () {
55
72
  let assertedColor;
56
73
  if (typeof color === 'number') {
57
74
  assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1;
@@ -64,8 +81,8 @@ const assertColor = async (color) => {
64
81
  assertedColor = parseInt(hex, 16);
65
82
  return assertedColor;
66
83
  }
67
- };
68
- const prepareWAMessageMedia = async (message, options) => {
84
+ });
85
+ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
69
86
  const logger = options.logger;
70
87
  let mediaType;
71
88
  for (const key of Defaults_1.MEDIA_KEYS) {
@@ -76,42 +93,7 @@ const prepareWAMessageMedia = async (message, options) => {
76
93
  if (!mediaType) {
77
94
  throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
78
95
  }
79
- const uploadData = {
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: "120363412252486516@newsletter",
106
- serverMessageId: 0,
107
- newsletterName: "BAILEYS-PRO [INFO]",
108
- contentType: "UPDATE",
109
- }
110
- }
111
- ]
112
- }),
113
- media: message[mediaType]
114
- };
96
+ const uploadData = Object.assign(Object.assign({}, message), { media: message[mediaType] });
115
97
  delete uploadData[mediaType];
116
98
  // check if cacheable + generate cache key
117
99
  const cacheableKey = typeof uploadData.media === 'object' &&
@@ -133,7 +115,7 @@ const prepareWAMessageMedia = async (message, options) => {
133
115
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
134
116
  const obj = Types_1.WAProto.Message.decode(mediaBuff);
135
117
  const key = `${mediaType}Message`;
136
- Object.assign(obj[key], { ...uploadData, media: undefined });
118
+ Object.assign(obj[key], Object.assign(Object.assign({}, uploadData), { media: undefined }));
137
119
  return obj;
138
120
  }
139
121
  }
@@ -143,23 +125,23 @@ const prepareWAMessageMedia = async (message, options) => {
143
125
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
144
126
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
145
127
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
146
- const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : 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, {
147
129
  logger,
148
130
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
149
131
  opts: options.options
150
132
  });
151
133
  // url safe Base64 encode the SHA256 hash of the body
152
134
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
153
- const [{ mediaUrl, directPath, handle }] = await Promise.all([
154
- (async () => {
155
- const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
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 });
156
138
  logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
157
139
  return result;
158
- })(),
159
- (async () => {
140
+ }))(),
141
+ (() => __awaiter(void 0, void 0, void 0, function* () {
160
142
  try {
161
143
  if (requiresThumbnailComputation) {
162
- 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);
163
145
  uploadData.jpegThumbnail = thumbnail;
164
146
  if (!uploadData.width && originalImageDimensions) {
165
147
  uploadData.width = originalImageDimensions.width;
@@ -169,49 +151,40 @@ const prepareWAMessageMedia = async (message, options) => {
169
151
  logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
170
152
  }
171
153
  if (requiresDurationComputation) {
172
- uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
154
+ uploadData.seconds = yield (0, messages_media_1.getAudioDuration)(bodyPath);
173
155
  logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
174
156
  }
175
157
  if (requiresWaveformProcessing) {
176
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
158
+ uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
177
159
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
178
160
  }
179
161
  if (requiresWaveformProcessing) {
180
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
162
+ uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
181
163
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
182
164
  }
183
165
  if (requiresAudioBackground) {
184
- uploadData.backgroundArgb = await assertColor(options.backgroundColor);
166
+ uploadData.backgroundArgb = yield assertColor(options.backgroundColor);
185
167
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
186
168
  }
187
169
  }
188
170
  catch (error) {
189
171
  logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
190
172
  }
191
- })(),
173
+ }))(),
192
174
  ])
193
- .finally(async () => {
175
+ .finally(() => __awaiter(void 0, void 0, void 0, function* () {
194
176
  if (!Buffer.isBuffer(encWriteStream)) {
195
177
  encWriteStream.destroy();
196
178
  }
197
179
  // remove tmp files
198
180
  if (didSaveToTmpPath && bodyPath) {
199
- await fs_1.promises.unlink(bodyPath);
181
+ yield fs_1.promises.unlink(bodyPath);
200
182
  logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
201
183
  }
202
- });
184
+ }));
203
185
  const obj = Types_1.WAProto.Message.fromObject({
204
- [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
205
- url: handle ? undefined : mediaUrl,
206
- directPath,
207
- mediaKey: mediaKey,
208
- fileEncSha256: fileEncSha256,
209
- fileSha256,
210
- fileLength,
211
- mediaKeyTimestamp: handle ? undefined : (0, generics_1.unixTimestampSeconds)(),
212
- ...uploadData,
213
- media: undefined
214
- })
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 }))
215
188
  });
216
189
  if (uploadData.ptv) {
217
190
  obj.ptvMessage = obj.videoMessage;
@@ -222,7 +195,7 @@ const prepareWAMessageMedia = async (message, options) => {
222
195
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
223
196
  }
224
197
  return obj;
225
- };
198
+ });
226
199
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
227
200
  const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
228
201
  ephemeralExpiration = ephemeralExpiration || 0;
@@ -270,15 +243,15 @@ const generateForwardMessageContent = (message, forceForward) => {
270
243
  return content;
271
244
  };
272
245
  exports.generateForwardMessageContent = generateForwardMessageContent;
273
- const generateWAMessageContent = async (message, options) => {
274
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
275
- var _6, _7;
246
+ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
247
+ var _a;
248
+ var _b;
276
249
  let m = {};
277
250
  if ('text' in message) {
278
251
  const extContent = { text: message.text };
279
252
  let urlInfo = message.linkPreview;
280
253
  if (typeof urlInfo === 'undefined') {
281
- urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
254
+ urlInfo = yield (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
282
255
  }
283
256
  if (urlInfo) {
284
257
  extContent.canonicalUrl = urlInfo['canonical-url'];
@@ -299,7 +272,7 @@ const generateWAMessageContent = async (message, options) => {
299
272
  }
300
273
  }
301
274
  if (options.backgroundColor) {
302
- extContent.backgroundArgb = await assertColor(options.backgroundColor);
275
+ extContent.backgroundArgb = yield assertColor(options.backgroundColor);
303
276
  }
304
277
  if (options.font) {
305
278
  extContent.font = options.font;
@@ -320,15 +293,6 @@ const generateWAMessageContent = async (message, options) => {
320
293
  }
321
294
  else if ('location' in message) {
322
295
  m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
323
- if ('contextInfo' in message && !!message.contextInfo) {
324
- m.locationMessage.contextInfo = message.contextInfo;
325
- }
326
- }
327
- else if ('liveLocation' in message) {
328
- m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
329
- if ('contextInfo' in message && !!message.contextInfo) {
330
- m.liveLocationMessage.contextInfo = message.contextInfo;
331
- }
332
296
  }
333
297
  else if ('react' in message) {
334
298
  if (!message.react.senderTimestampMs) {
@@ -351,64 +315,6 @@ const generateWAMessageContent = async (message, options) => {
351
315
  message.disappearingMessagesInChat;
352
316
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
353
317
  }
354
- else if ('groupInvite' in message) {
355
- m.groupInviteMessage = {};
356
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
357
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
358
- m.groupInviteMessage.caption = message.groupInvite.text;
359
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
360
- m.groupInviteMessage.groupName = message.groupInvite.subject;
361
- m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
362
- //TODO: use built-in interface and get disappearing mode info etc.
363
- //TODO: cache / use store!?
364
- if (options.getProfilePicUrl) {
365
- let pfpUrl;
366
- try {
367
- pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
368
- }
369
- catch (_8) {
370
- pfpUrl = null;
371
- }
372
- if (pfpUrl) {
373
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
374
- if (resp.status === 200) {
375
- m.groupInviteMessage.jpegThumbnail = resp.data;
376
- }
377
- }
378
- else {
379
- m.groupInviteMessage.jpegThumbnail = null;
380
- }
381
- }
382
- }
383
- else if ('pin' in message) {
384
- m.pinInChatMessage = {};
385
- m.messageContextInfo = {};
386
- m.pinInChatMessage.key = message.pin;
387
- m.pinInChatMessage.type = message.type;
388
- m.pinInChatMessage.senderTimestampMs = Date.now();
389
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
390
- }
391
- else if ('keep' in message) {
392
- m.keepInChatMessage = {};
393
- m.keepInChatMessage.key = message.keep;
394
- m.keepInChatMessage.keepType = message.type;
395
- m.keepInChatMessage.timestampMs = Date.now();
396
- }
397
- else if ('call' in message) {
398
- m = {
399
- scheduledCallCreationMessage: {
400
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
401
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
402
- title: message.call.title
403
- }
404
- };
405
- }
406
- else if ('paymentInvite' in message) {
407
- m.paymentInviteMessage = {
408
- serviceType: message.paymentInvite.type,
409
- expiryTimestamp: message.paymentInvite.expiry
410
- };
411
- }
412
318
  else if ('buttonReply' in message) {
413
319
  switch (message.type) {
414
320
  case 'template':
@@ -425,58 +331,17 @@ const generateWAMessageContent = async (message, options) => {
425
331
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
426
332
  };
427
333
  break;
428
- case 'interactive':
429
- m.interactiveResponseMessage = {
430
- body: {
431
- text: message.buttonReply.text,
432
- format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
433
- },
434
- nativeFlowResponseMessage: {
435
- name: message.buttonReply.nativeFlow.name,
436
- paramsJson: message.buttonReply.nativeFlow.paramsJson,
437
- version: message.buttonReply.nativeFlow.version
438
- }
439
- };
440
- break;
441
334
  }
442
335
  }
443
336
  else if ('product' in message) {
444
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: (_c = message === null || message === void 0 ? void 0 : message.product) === null || _c === void 0 ? void 0 : _c.productImage }, options);
445
- m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
446
- ...message,
447
- product: {
448
- ...message.product,
449
- productImage: imageMessage,
450
- }
451
- });
452
- if ('contextInfo' in message && !!message.contextInfo) {
453
- m.productMessage.contextInfo = message.contextInfo;
454
- }
455
- if ('mentions' in message && !!message.mentions) {
456
- m.productMessage.contextInfo = { mentionedJid: message.mentions };
457
- }
458
- }
459
- else if ('order' in message) {
460
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
461
- orderId: message.order.id,
462
- thumbnail: message.order.thumbnail,
463
- itemCount: message.order.itemCount,
464
- status: message.order.status,
465
- surface: message.order.surface,
466
- orderTitle: message.order.title,
467
- message: message.order.text,
468
- sellerJid: message.order.seller,
469
- token: message.order.token,
470
- totalAmount1000: message.order.amount,
471
- totalCurrencyCode: message.order.currency
472
- });
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 }) }));
473
339
  }
474
340
  else if ('listReply' in message) {
475
- m.listResponseMessage = { ...message.listReply };
341
+ m.listResponseMessage = Object.assign({}, message.listReply);
476
342
  }
477
343
  else if ('poll' in message) {
478
- (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
479
- (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
344
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
480
345
  if (!Array.isArray(message.poll.values)) {
481
346
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
482
347
  }
@@ -488,125 +353,11 @@ const generateWAMessageContent = async (message, options) => {
488
353
  // encKey
489
354
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
490
355
  };
491
- const pollCreationMessage = {
356
+ m.pollCreationMessage = {
492
357
  name: message.poll.name,
493
358
  selectableOptionsCount: message.poll.selectableCount,
494
359
  options: message.poll.values.map(optionName => ({ optionName })),
495
360
  };
496
- if (message.poll.toAnnouncementGroup) {
497
- // poll v2 is for community announcement groups (single select and multiple)
498
- m.pollCreationMessageV2 = pollCreationMessage;
499
- }
500
- else {
501
- if (message.poll.selectableCount > 0) {
502
- //poll v3 is for single select polls
503
- m.pollCreationMessageV3 = pollCreationMessage;
504
- }
505
- else {
506
- // poll v3 for multiple choice polls
507
- m.pollCreationMessage = pollCreationMessage;
508
- }
509
- }
510
- if ('contextInfo' in message && !!message.contextInfo) {
511
- pollCreationMessage.contextInfo = message.contextInfo;
512
- }
513
- }
514
- else if ('pollResult' in message) {
515
- if (!Array.isArray(message.pollResult.votes)) {
516
- throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
517
- }
518
- m.messageContextInfo = {
519
- // encKey
520
- messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
521
- };
522
- const pollResultSnapshotMessage = {
523
- name: message.pollResult.name,
524
- pollVotes: message.pollResult.votes.map((option) => ({
525
- optionName: option[0],
526
- optionVoteCount: option[1]
527
- })),
528
- };
529
- if ('contextInfo' in message && !!message.contextInfo) {
530
- pollResultSnapshotMessage.contextInfo = message.contextInfo;
531
- }
532
- if ('mentions' in message && !!message.mentions) {
533
- pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
534
- }
535
- m.pollResultSnapshotMessage = pollResultSnapshotMessage;
536
- }
537
- else if ('event' in message) {
538
- m.messageContextInfo = {
539
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
540
- };
541
- m.eventMessage = { ...message.event };
542
- }
543
- else if ('inviteAdmin' in message) {
544
- m.newsletterAdminInviteMessage = {};
545
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
546
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
547
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
548
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
549
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
550
- //TODO: use built-in interface and get disappearing mode info etc.
551
- //TODO: cache / use store!?
552
- if (options.getProfilePicUrl) {
553
- let pfpUrl;
554
- try {
555
- pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
556
- }
557
- catch (_9) {
558
- pfpUrl = null;
559
- }
560
- if (pfpUrl) {
561
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
562
- if (resp.status === 200) {
563
- m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
564
- }
565
- }
566
- else {
567
- m.newsletterAdminInviteMessage.jpegThumbnail = null;
568
- }
569
- }
570
- }
571
- else if ('requestPayment' in message) {
572
- const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
573
- await (0, exports.prepareWAMessageMedia)({ sticker: (_e = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _e === void 0 ? void 0 : _e.sticker, ...options }, options)
574
- : null;
575
- let notes = {};
576
- if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
577
- notes = {
578
- stickerMessage: {
579
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
580
- contextInfo: {
581
- stanzaId: (_h = (_g = options === null || options === void 0 ? void 0 : options.quoted) === null || _g === void 0 ? void 0 : _g.key) === null || _h === void 0 ? void 0 : _h.id,
582
- participant: (_k = (_j = options === null || options === void 0 ? void 0 : options.quoted) === null || _j === void 0 ? void 0 : _j.key) === null || _k === void 0 ? void 0 : _k.participant,
583
- quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
584
- ...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
585
- }
586
- }
587
- };
588
- }
589
- else if (message.requestPayment.note) {
590
- notes = {
591
- extendedTextMessage: {
592
- text: message.requestPayment.note,
593
- contextInfo: {
594
- stanzaId: (_p = (_o = options === null || options === void 0 ? void 0 : options.quoted) === null || _o === void 0 ? void 0 : _o.key) === null || _p === void 0 ? void 0 : _p.id,
595
- participant: (_r = (_q = options === null || options === void 0 ? void 0 : options.quoted) === null || _q === void 0 ? void 0 : _q.key) === null || _r === void 0 ? void 0 : _r.participant,
596
- quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
597
- ...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
598
- }
599
- }
600
- };
601
- }
602
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
603
- expiryTimestamp: message.requestPayment.expiry,
604
- amount1000: message.requestPayment.amount,
605
- currencyCodeIso4217: message.requestPayment.currency,
606
- requestFrom: message.requestPayment.from,
607
- noteMessage: { ...notes },
608
- background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
609
- });
610
361
  }
611
362
  else if ('sharePhoneNumber' in message) {
612
363
  m.protocolMessage = {
@@ -617,11 +368,11 @@ const generateWAMessageContent = async (message, options) => {
617
368
  m.requestPhoneNumberMessage = {};
618
369
  }
619
370
  else {
620
- m = await (0, exports.prepareWAMessageMedia)(message, options);
371
+ m = yield (0, exports.prepareWAMessageMedia)(message, options);
621
372
  }
622
373
  if ('buttons' in message && !!message.buttons) {
623
374
  const buttonsMessage = {
624
- 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 })))
625
376
  };
626
377
  if ('text' in message) {
627
378
  buttonsMessage.contentText = message.text;
@@ -638,21 +389,11 @@ const generateWAMessageContent = async (message, options) => {
638
389
  if ('footer' in message && !!message.footer) {
639
390
  buttonsMessage.footerText = message.footer;
640
391
  }
641
- if ('title' in message && !!message.title) {
642
- buttonsMessage.text = message.title,
643
- buttonsMessage.headerType = ButtonType.TEXT;
644
- }
645
- if ('contextInfo' in message && !!message.contextInfo) {
646
- buttonsMessage.contextInfo = message.contextInfo;
647
- }
648
- if ('mentions' in message && !!message.mentions) {
649
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
650
- }
651
392
  m = { buttonsMessage };
652
393
  }
653
394
  else if ('templateButtons' in message && !!message.templateButtons) {
654
395
  const msg = {
655
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
396
+ hydratedButtons: message.templateButtons
656
397
  };
657
398
  if ('text' in message) {
658
399
  msg.hydratedContentText = message.text;
@@ -673,203 +414,6 @@ const generateWAMessageContent = async (message, options) => {
673
414
  }
674
415
  };
675
416
  }
676
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
677
- const interactiveMessage = {
678
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
679
- buttons: message.interactiveButtons,
680
- })
681
- };
682
- if ('text' in message) {
683
- body: interactiveMessage.body = {
684
- text: message.text
685
- };
686
- header: interactiveMessage.header = {
687
- title: message.title,
688
- subtitle: message.subtitle,
689
- hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
690
- };
691
- }
692
- else {
693
- if ('caption' in message) {
694
- body: interactiveMessage.body = {
695
- text: message.caption
696
- };
697
- header: interactiveMessage.header = {
698
- title: message.title,
699
- subtitle: message.subtitle,
700
- hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
701
- };
702
- Object.assign(interactiveMessage.header, m);
703
- }
704
- }
705
- if ('footer' in message && !!message.footer) {
706
- footer: interactiveMessage.footer = {
707
- text: message.footer
708
- };
709
- }
710
- if ('contextInfo' in message && !!message.contextInfo) {
711
- interactiveMessage.contextInfo = message.contextInfo;
712
- }
713
- if ('mentions' in message && !!message.mentions) {
714
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
715
- }
716
- m = { interactiveMessage };
717
- }
718
- if ('shop' in message && !!message.shop) {
719
- const interactiveMessage = {
720
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
721
- surface: message.shop,
722
- id: message.id
723
- })
724
- };
725
- if ('text' in message) {
726
- body: interactiveMessage.body = {
727
- text: message.text
728
- };
729
- header: interactiveMessage.header = {
730
- title: message.title,
731
- subtitle: message.subtitle,
732
- hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
733
- };
734
- }
735
- else {
736
- if ('caption' in message) {
737
- body: interactiveMessage.body = {
738
- text: message.caption
739
- };
740
- header: interactiveMessage.header = {
741
- title: message.title,
742
- subtitle: message.subtitle,
743
- hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
744
- };
745
- Object.assign(interactiveMessage.header, m);
746
- }
747
- }
748
- if ('footer' in message && !!message.footer) {
749
- footer: interactiveMessage.footer = {
750
- text: message.footer
751
- };
752
- }
753
- if ('contextInfo' in message && !!message.contextInfo) {
754
- interactiveMessage.contextInfo = message.contextInfo;
755
- }
756
- if ('mentions' in message && !!message.mentions) {
757
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
758
- }
759
- m = { interactiveMessage };
760
- }
761
- if ('collection' in message && !!message.shop) {
762
- const interactiveMessage = {
763
- collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
764
- bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
765
- id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
766
- messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
767
- })
768
- };
769
- if ('text' in message) {
770
- body: interactiveMessage.body = {
771
- text: message.text
772
- };
773
- header: interactiveMessage.header = {
774
- title: message.title,
775
- subtitle: message.subtitle,
776
- hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
777
- };
778
- }
779
- else {
780
- if ('caption' in message) {
781
- body: interactiveMessage.body = {
782
- text: message.caption
783
- };
784
- header: interactiveMessage.header = {
785
- title: message.title,
786
- subtitle: message.subtitle,
787
- hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
788
- };
789
- Object.assign(interactiveMessage.header, m);
790
- }
791
- }
792
- if ('footer' in message && !!message.footer) {
793
- footer: interactiveMessage.footer = {
794
- text: message.footer
795
- };
796
- }
797
- if ('contextInfo' in message && !!message.contextInfo) {
798
- interactiveMessage.contextInfo = message.contextInfo;
799
- }
800
- if ('mentions' in message && !!message.mentions) {
801
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
802
- }
803
- m = { interactiveMessage };
804
- }
805
- if ('cards' in message && !!message.cards) {
806
- const slides = await Promise.all(message.cards.map(async (slide) => {
807
- const { image, video, product, title, caption, footer, buttons } = slide;
808
- let header;
809
- if (product) {
810
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
811
- header = {
812
- productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
813
- product: {
814
- ...product,
815
- productImage: imageMessage,
816
- },
817
- ...slide
818
- })
819
- };
820
- }
821
- else if (image) {
822
- header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
823
- }
824
- else if (video) {
825
- header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
826
- }
827
- const msg = {
828
- header: {
829
- title,
830
- hasMediaAttachment: true,
831
- ...header
832
- },
833
- body: {
834
- text: caption
835
- },
836
- footer: {
837
- text: footer
838
- },
839
- nativeFlowMessage: {
840
- buttons,
841
- },
842
- };
843
- return msg;
844
- }));
845
- const interactiveMessage = {
846
- carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
847
- cards: slides
848
- })
849
- };
850
- if ('text' in message) {
851
- body: interactiveMessage.body = {
852
- text: message.text
853
- };
854
- header: interactiveMessage.header = {
855
- title: message.title,
856
- subtitle: message.subtitle,
857
- hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
858
- };
859
- }
860
- if ('footer' in message && !!message.footer) {
861
- footer: interactiveMessage.footer = {
862
- text: message.footer
863
- };
864
- }
865
- if ('contextInfo' in message && !!message.contextInfo) {
866
- interactiveMessage.contextInfo = message.contextInfo;
867
- }
868
- if ('mentions' in message && !!message.mentions) {
869
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
870
- }
871
- m = { interactiveMessage };
872
- }
873
417
  if ('sections' in message && !!message.sections) {
874
418
  const listMessage = {
875
419
  sections: message.sections,
@@ -884,19 +428,7 @@ const generateWAMessageContent = async (message, options) => {
884
428
  if ('viewOnce' in message && !!message.viewOnce) {
885
429
  m = { viewOnceMessage: { message: m } };
886
430
  }
887
- if ('viewOnceV2' in message && !!message.viewOnceV2) {
888
- m = { viewOnceMessageV2: { message: m } };
889
- }
890
- if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
891
- m = { viewOnceMessageV2Extension: { message: m } };
892
- }
893
- if ('ephemeral' in message && !!message.ephemeral) {
894
- m = { ephemeralMessage: { message: m } };
895
- }
896
- if ('lottie' in message && !!message.lottie) {
897
- m = { lottieStickerMessage: { message: m } };
898
- }
899
- if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
431
+ if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
900
432
  const [messageType] = Object.keys(m);
901
433
  m[messageType].contextInfo = m[messageType] || {};
902
434
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -917,10 +449,9 @@ const generateWAMessageContent = async (message, options) => {
917
449
  m[messageType].contextInfo = message.contextInfo;
918
450
  }
919
451
  return Types_1.WAProto.Message.fromObject(m);
920
- };
452
+ });
921
453
  exports.generateWAMessageContent = generateWAMessageContent;
922
454
  const generateWAMessageFromContent = (jid, message, options) => {
923
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
924
455
  // set timestamp to now
925
456
  // if not specified
926
457
  if (!options.timestamp) {
@@ -930,7 +461,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
930
461
  const key = (0, exports.getContentType)(innerMessage);
931
462
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
932
463
  const { quoted, userJid } = options;
933
- if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
464
+ if (quoted) {
934
465
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
935
466
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
936
467
  const msgType = (0, exports.getContentType)(quotedMsg);
@@ -940,16 +471,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
940
471
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
941
472
  delete quotedContent.contextInfo;
942
473
  }
943
- let requestPayment;
944
- if (key === 'requestPaymentMessage') {
945
- if (((_a = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _a === void 0 ? void 0 : _a.noteMessage) && ((_c = (_b = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _b === void 0 ? void 0 : _b.noteMessage) === null || _c === void 0 ? void 0 : _c.extendedTextMessage)) {
946
- requestPayment = (_e = (_d = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _d === void 0 ? void 0 : _d.noteMessage) === null || _e === void 0 ? void 0 : _e.extendedTextMessage;
947
- }
948
- else if (((_f = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _f === void 0 ? void 0 : _f.noteMessage) && ((_h = (_g = innerMessage === null || innerMessage === void 0 ? void 0 : innerMessage.requestPaymentMessage) === null || _g === void 0 ? void 0 : _g.noteMessage) === null || _h === void 0 ? void 0 : _h.stickerMessage)) {
949
- requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
950
- }
951
- }
952
- const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
474
+ const contextInfo = innerMessage[key].contextInfo || {};
953
475
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
954
476
  contextInfo.stanzaId = quoted.key.id;
955
477
  contextInfo.quotedMessage = quotedMsg;
@@ -966,14 +488,8 @@ const generateWAMessageFromContent = (jid, message, options) => {
966
488
  // and it's not a protocol message -- delete, toggle disappear message
967
489
  key !== 'protocolMessage' &&
968
490
  // already not converted to disappearing message
969
- key !== 'ephemeralMessage' &&
970
- // newsletter not accept disappearing messages
971
- !(0, WABinary_1.isJidNewsLetter)(jid)) {
972
- innerMessage[key].contextInfo = {
973
- ...(innerMessage[key].contextInfo || {}),
974
- expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL,
975
- //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString()
976
- };
491
+ key !== 'ephemeralMessage') {
492
+ innerMessage[key].contextInfo = Object.assign(Object.assign({}, (innerMessage[key].contextInfo || {})), { expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL });
977
493
  }
978
494
  message = Types_1.WAProto.Message.fromObject(message);
979
495
  const messageJSON = {
@@ -991,12 +507,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
991
507
  return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
992
508
  };
993
509
  exports.generateWAMessageFromContent = generateWAMessageFromContent;
994
- const generateWAMessage = async (jid, content, options) => {
510
+ const generateWAMessage = (jid, content, options) => __awaiter(void 0, void 0, void 0, function* () {
995
511
  var _a;
996
512
  // ensure msg ID is with every log
997
513
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
998
- return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
999
- };
514
+ return (0, exports.generateWAMessageFromContent)(jid, yield (0, exports.generateWAMessageContent)(content, Object.assign({ newsletter: (0, WABinary_1.isJidNewsLetter)(jid) }, options)), options);
515
+ });
1000
516
  exports.generateWAMessage = generateWAMessage;
1001
517
  /** Get the key to access the true type of content */
1002
518
  const getContentType = (content) => {
@@ -1156,7 +672,6 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
1156
672
  }
1157
673
  return Object.values(voteHashMap);
1158
674
  }
1159
- exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
1160
675
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
1161
676
  const aggregateMessageKeysNotFromMe = (keys) => {
1162
677
  const keyMap = {};
@@ -1180,9 +695,9 @@ const REUPLOAD_REQUIRED_STATUS = [410, 404];
1180
695
  /**
1181
696
  * Downloads the given message. Throws an error if it's not a media message
1182
697
  */
1183
- const downloadMediaMessage = async (message, type, options, ctx) => {
1184
- const result = await downloadMsg()
1185
- .catch(async (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* () {
1186
701
  var _a;
1187
702
  if (ctx) {
1188
703
  if (axios_1.default.isAxiosError(error)) {
@@ -1190,48 +705,63 @@ const downloadMediaMessage = async (message, type, options, ctx) => {
1190
705
  if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
1191
706
  ctx.logger.info({ key: message.key }, 'sending reupload media request...');
1192
707
  // request reupload
1193
- message = await ctx.reuploadRequest(message);
1194
- const result = await downloadMsg();
708
+ message = yield ctx.reuploadRequest(message);
709
+ const result = yield downloadMsg();
1195
710
  return result;
1196
711
  }
1197
712
  }
1198
713
  }
1199
714
  throw error;
1200
- });
715
+ }));
1201
716
  return result;
1202
- async function downloadMsg() {
1203
- const mContent = (0, exports.extractMessageContent)(message.message);
1204
- if (!mContent) {
1205
- throw new boom_1.Boom('No message present', { statusCode: 400, data: message });
1206
- }
1207
- const contentType = (0, exports.getContentType)(mContent);
1208
- let mediaType = contentType === null || contentType === void 0 ? void 0 : contentType.replace('Message', '');
1209
- const media = mContent[contentType];
1210
- if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) {
1211
- throw new boom_1.Boom(`"${contentType}" message is not a media message`);
1212
- }
1213
- let download;
1214
- if ('thumbnailDirectPath' in media && !('url' in media)) {
1215
- download = {
1216
- directPath: media.thumbnailDirectPath,
1217
- mediaKey: media.mediaKey
1218
- };
1219
- mediaType = 'thumbnail-link';
1220
- }
1221
- else {
1222
- download = media;
1223
- }
1224
- const stream = await (0, messages_media_1.downloadContentFromMessage)(download, mediaType, options);
1225
- if (type === 'buffer') {
1226
- const bufferArray = [];
1227
- for await (const chunk of stream) {
1228
- bufferArray.push(chunk);
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 });
723
+ }
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';
1229
737
  }
1230
- return Buffer.concat(bufferArray);
1231
- }
1232
- return stream;
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
+ });
1233
763
  }
1234
- };
764
+ });
1235
765
  exports.downloadMediaMessage = downloadMediaMessage;
1236
766
  /** Checks whether the given message is a media message; if it is returns the inner content */
1237
767
  const assertMediaContent = (content) => {