gifted-baileys 1.5.5 → 1.5.7

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 (251) hide show
  1. package/README.md +6 -1642
  2. package/WAProto/WAProto.proto +969 -88
  3. package/WAProto/index.d.ts +13199 -1260
  4. package/WAProto/index.js +124901 -74525
  5. package/lib/Defaults/baileys-version.json +3 -0
  6. package/lib/Defaults/index.d.ts +284 -0
  7. package/{src → lib}/Defaults/index.js +7 -14
  8. package/lib/Signal/libsignal.d.ts +3 -0
  9. package/lib/Signal/libsignal.js +161 -0
  10. package/lib/Socket/Client/abstract-socket-client.d.ts +15 -0
  11. package/lib/Socket/Client/index.d.ts +2 -0
  12. package/{src → lib}/Socket/Client/index.js +2 -3
  13. package/lib/Socket/Client/mobile-socket-client.d.ts +12 -0
  14. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  15. package/lib/Socket/Client/types.d.ts +17 -0
  16. package/lib/Socket/Client/types.js +13 -0
  17. package/lib/Socket/Client/websocket.d.ts +12 -0
  18. package/lib/Socket/Client/websocket.js +62 -0
  19. package/lib/Socket/business.d.ts +170 -0
  20. package/{src → lib}/Socket/business.js +28 -33
  21. package/lib/Socket/chats.d.ts +81 -0
  22. package/{src → lib}/Socket/chats.js +174 -176
  23. package/lib/Socket/groups.d.ts +115 -0
  24. package/{src → lib}/Socket/groups.js +80 -68
  25. package/lib/Socket/index.d.ts +172 -0
  26. package/{src → lib}/Socket/index.js +4 -1
  27. package/lib/Socket/messages-recv.d.ts +158 -0
  28. package/{src → lib}/Socket/messages-recv.js +378 -211
  29. package/lib/Socket/messages-send.d.ts +155 -0
  30. package/{src → lib}/Socket/messages-send.js +452 -177
  31. package/lib/Socket/newsletter.d.ts +132 -0
  32. package/{src → lib}/Socket/newsletter.js +107 -98
  33. package/lib/Socket/registration.d.ts +264 -0
  34. package/{src → lib}/Socket/registration.js +56 -48
  35. package/lib/Socket/socket.d.ts +44 -0
  36. package/{src → lib}/Socket/socket.js +77 -77
  37. package/lib/Socket/usync.d.ts +37 -0
  38. package/lib/Socket/usync.js +70 -0
  39. package/lib/Store/index.d.ts +3 -0
  40. package/lib/Store/make-cache-manager-store.d.ts +14 -0
  41. package/{src → lib}/Store/make-cache-manager-store.js +25 -34
  42. package/lib/Store/make-in-memory-store.d.ts +118 -0
  43. package/{src → lib}/Store/make-in-memory-store.js +36 -32
  44. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  45. package/lib/Store/object-repository.d.ts +10 -0
  46. package/{src → lib}/Store/object-repository.js +1 -1
  47. package/lib/Types/Auth.d.ts +109 -0
  48. package/lib/Types/Call.d.ts +13 -0
  49. package/lib/Types/Chat.d.ts +107 -0
  50. package/{src/Types/Contact.ts → lib/Types/Contact.d.ts} +8 -9
  51. package/lib/Types/Events.d.ts +172 -0
  52. package/lib/Types/GroupMetadata.d.ts +56 -0
  53. package/lib/Types/Label.d.ts +46 -0
  54. package/{src/Types/LabelAssociation.ts → lib/Types/LabelAssociation.d.ts} +16 -22
  55. package/lib/Types/Message.d.ts +433 -0
  56. package/lib/Types/Newsletter.d.ts +92 -0
  57. package/lib/Types/Product.d.ts +78 -0
  58. package/lib/Types/Signal.d.ts +57 -0
  59. package/{src/Types/Socket.ts → lib/Types/Socket.d.ts} +61 -68
  60. package/lib/Types/State.d.ts +27 -0
  61. package/lib/Types/USync.d.ts +25 -0
  62. package/lib/Types/index.d.ts +66 -0
  63. package/lib/Utils/auth-utils.d.ts +18 -0
  64. package/{src → lib}/Utils/auth-utils.js +73 -90
  65. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  66. package/lib/Utils/baileys-event-stream.js +63 -0
  67. package/lib/Utils/business.d.ts +22 -0
  68. package/{src → lib}/Utils/business.js +15 -43
  69. package/lib/Utils/chat-utils.d.ts +70 -0
  70. package/{src → lib}/Utils/chat-utils.js +87 -94
  71. package/lib/Utils/crypto.d.ts +40 -0
  72. package/{src → lib}/Utils/crypto.js +4 -2
  73. package/lib/Utils/decode-wa-message.d.ts +36 -0
  74. package/lib/Utils/decode-wa-message.js +226 -0
  75. package/lib/Utils/event-buffer.d.ts +35 -0
  76. package/{src → lib}/Utils/event-buffer.js +4 -13
  77. package/lib/Utils/generics.d.ts +88 -0
  78. package/{src → lib}/Utils/generics.js +67 -86
  79. package/lib/Utils/history.d.ts +19 -0
  80. package/{src → lib}/Utils/history.js +13 -39
  81. package/lib/Utils/index.d.ts +17 -0
  82. package/lib/Utils/link-preview.d.ts +21 -0
  83. package/{src → lib}/Utils/link-preview.js +17 -54
  84. package/lib/Utils/logger.d.ts +2 -0
  85. package/lib/Utils/lt-hash.d.ts +12 -0
  86. package/lib/Utils/make-mutex.d.ts +7 -0
  87. package/{src → lib}/Utils/make-mutex.js +4 -13
  88. package/lib/Utils/messages-media.d.ts +113 -0
  89. package/{src → lib}/Utils/messages-media.js +193 -255
  90. package/lib/Utils/messages.d.ts +77 -0
  91. package/{src → lib}/Utils/messages.js +588 -118
  92. package/lib/Utils/noise-handler.d.ts +20 -0
  93. package/lib/Utils/process-message.d.ts +41 -0
  94. package/{src → lib}/Utils/process-message.js +27 -30
  95. package/lib/Utils/signal.d.ts +33 -0
  96. package/{src → lib}/Utils/signal.js +25 -42
  97. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  98. package/{src → lib}/Utils/use-multi-file-auth-state.js +27 -28
  99. package/lib/Utils/validate-connection.d.ts +11 -0
  100. package/{src → lib}/Utils/validate-connection.js +40 -9
  101. package/lib/WABinary/constants.d.ts +27 -0
  102. package/lib/WABinary/decode.d.ts +6 -0
  103. package/lib/WABinary/encode.d.ts +2 -0
  104. package/{src → lib}/WABinary/encode.js +16 -10
  105. package/lib/WABinary/generic-utils.d.ts +14 -0
  106. package/lib/WABinary/index.d.ts +5 -0
  107. package/lib/WABinary/jid-utils.d.ts +31 -0
  108. package/lib/WABinary/types.d.ts +18 -0
  109. package/lib/WABinary/types.js +2 -0
  110. package/lib/WAM/BinaryInfo.d.ts +8 -0
  111. package/lib/WAM/constants.d.ts +38 -0
  112. package/lib/WAM/encode.d.ts +2 -0
  113. package/lib/WAM/index.d.ts +3 -0
  114. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  115. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  116. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  117. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  118. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  119. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  120. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  121. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  122. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  123. package/lib/WAUSync/Protocols/index.js +20 -0
  124. package/lib/WAUSync/USyncQuery.d.ts +26 -0
  125. package/lib/WAUSync/USyncQuery.js +79 -0
  126. package/lib/WAUSync/USyncUser.d.ts +10 -0
  127. package/lib/WAUSync/USyncUser.js +22 -0
  128. package/lib/WAUSync/index.d.ts +3 -0
  129. package/lib/WAUSync/index.js +19 -0
  130. package/{src → lib}/index.js +1 -0
  131. package/package.json +26 -8
  132. package/LICENSE +0 -21
  133. package/src/Defaults/baileys-version.json +0 -3
  134. package/src/Defaults/index.ts +0 -131
  135. package/src/Signal/libsignal.js +0 -180
  136. package/src/Signal/libsignal.ts +0 -141
  137. package/src/Socket/Client/abstract-socket-client.ts +0 -19
  138. package/src/Socket/Client/index.ts +0 -3
  139. package/src/Socket/Client/mobile-socket-client.js +0 -78
  140. package/src/Socket/Client/mobile-socket-client.ts +0 -66
  141. package/src/Socket/Client/web-socket-client.js +0 -75
  142. package/src/Socket/Client/web-socket-client.ts +0 -57
  143. package/src/Socket/business.ts +0 -281
  144. package/src/Socket/chats.ts +0 -1030
  145. package/src/Socket/groups.ts +0 -356
  146. package/src/Socket/index.ts +0 -13
  147. package/src/Socket/messages-recv.ts +0 -985
  148. package/src/Socket/messages-send.ts +0 -871
  149. package/src/Socket/newsletter.ts +0 -282
  150. package/src/Socket/registration.ts +0 -250
  151. package/src/Socket/socket.ts +0 -777
  152. package/src/Store/index.ts +0 -3
  153. package/src/Store/make-cache-manager-store.ts +0 -100
  154. package/src/Store/make-in-memory-store.ts +0 -475
  155. package/src/Store/make-ordered-dictionary.ts +0 -86
  156. package/src/Store/object-repository.ts +0 -32
  157. package/src/Tests/test.app-state-sync.js +0 -204
  158. package/src/Tests/test.app-state-sync.ts +0 -207
  159. package/src/Tests/test.event-buffer.js +0 -270
  160. package/src/Tests/test.event-buffer.ts +0 -319
  161. package/src/Tests/test.key-store.js +0 -76
  162. package/src/Tests/test.key-store.ts +0 -92
  163. package/src/Tests/test.libsignal.js +0 -141
  164. package/src/Tests/test.libsignal.ts +0 -186
  165. package/src/Tests/test.media-download.js +0 -93
  166. package/src/Tests/test.media-download.ts +0 -76
  167. package/src/Tests/test.messages.js +0 -33
  168. package/src/Tests/test.messages.ts +0 -37
  169. package/src/Tests/utils.js +0 -34
  170. package/src/Tests/utils.ts +0 -36
  171. package/src/Types/Auth.ts +0 -113
  172. package/src/Types/Call.ts +0 -15
  173. package/src/Types/Chat.ts +0 -106
  174. package/src/Types/Events.ts +0 -93
  175. package/src/Types/GroupMetadata.ts +0 -53
  176. package/src/Types/Label.ts +0 -36
  177. package/src/Types/Message.ts +0 -288
  178. package/src/Types/Newsletter.ts +0 -98
  179. package/src/Types/Product.ts +0 -85
  180. package/src/Types/Signal.ts +0 -68
  181. package/src/Types/State.ts +0 -29
  182. package/src/Types/index.ts +0 -59
  183. package/src/Utils/auth-utils.ts +0 -222
  184. package/src/Utils/baileys-event-stream.js +0 -92
  185. package/src/Utils/baileys-event-stream.ts +0 -66
  186. package/src/Utils/business.ts +0 -275
  187. package/src/Utils/chat-utils.ts +0 -860
  188. package/src/Utils/crypto.ts +0 -131
  189. package/src/Utils/decode-wa-message.js +0 -211
  190. package/src/Utils/decode-wa-message.ts +0 -228
  191. package/src/Utils/event-buffer.ts +0 -613
  192. package/src/Utils/generics.ts +0 -434
  193. package/src/Utils/history.ts +0 -112
  194. package/src/Utils/index.ts +0 -17
  195. package/src/Utils/link-preview.ts +0 -122
  196. package/src/Utils/logger.ts +0 -3
  197. package/src/Utils/lt-hash.ts +0 -61
  198. package/src/Utils/make-mutex.ts +0 -44
  199. package/src/Utils/messages-media.ts +0 -847
  200. package/src/Utils/messages.ts +0 -956
  201. package/src/Utils/noise-handler.ts +0 -197
  202. package/src/Utils/process-message.ts +0 -414
  203. package/src/Utils/signal.ts +0 -177
  204. package/src/Utils/use-multi-file-auth-state.ts +0 -90
  205. package/src/Utils/validate-connection.ts +0 -238
  206. package/src/WABinary/constants.ts +0 -42
  207. package/src/WABinary/decode.ts +0 -265
  208. package/src/WABinary/encode.ts +0 -236
  209. package/src/WABinary/generic-utils.ts +0 -121
  210. package/src/WABinary/index.ts +0 -5
  211. package/src/WABinary/jid-utils.ts +0 -68
  212. package/src/WABinary/types.ts +0 -17
  213. package/src/WAM/BinaryInfo.ts +0 -12
  214. package/src/WAM/constants.ts +0 -15382
  215. package/src/WAM/encode.ts +0 -174
  216. package/src/WAM/index.ts +0 -3
  217. package/src/gifted +0 -1
  218. package/src/index.ts +0 -13
  219. /package/{src → lib}/Defaults/phonenumber-mcc.json +0 -0
  220. /package/{src → lib}/Socket/Client/abstract-socket-client.js +0 -0
  221. /package/{src → lib}/Store/index.js +0 -0
  222. /package/{src → lib}/Store/make-ordered-dictionary.js +0 -0
  223. /package/{src → lib}/Types/Auth.js +0 -0
  224. /package/{src → lib}/Types/Call.js +0 -0
  225. /package/{src → lib}/Types/Chat.js +0 -0
  226. /package/{src → lib}/Types/Contact.js +0 -0
  227. /package/{src → lib}/Types/Events.js +0 -0
  228. /package/{src → lib}/Types/GroupMetadata.js +0 -0
  229. /package/{src → lib}/Types/Label.js +0 -0
  230. /package/{src → lib}/Types/LabelAssociation.js +0 -0
  231. /package/{src → lib}/Types/Message.js +0 -0
  232. /package/{src → lib}/Types/Newsletter.js +0 -0
  233. /package/{src → lib}/Types/Product.js +0 -0
  234. /package/{src → lib}/Types/Signal.js +0 -0
  235. /package/{src → lib}/Types/Socket.js +0 -0
  236. /package/{src → lib}/Types/State.js +0 -0
  237. /package/{src/WABinary/types.js → lib/Types/USync.js} +0 -0
  238. /package/{src → lib}/Types/index.js +0 -0
  239. /package/{src → lib}/Utils/index.js +0 -0
  240. /package/{src → lib}/Utils/logger.js +0 -0
  241. /package/{src → lib}/Utils/lt-hash.js +0 -0
  242. /package/{src → lib}/Utils/noise-handler.js +0 -0
  243. /package/{src → lib}/WABinary/constants.js +0 -0
  244. /package/{src → lib}/WABinary/decode.js +0 -0
  245. /package/{src → lib}/WABinary/generic-utils.js +0 -0
  246. /package/{src → lib}/WABinary/index.js +0 -0
  247. /package/{src → lib}/WABinary/jid-utils.js +0 -0
  248. /package/{src → lib}/WAM/BinaryInfo.js +0 -0
  249. /package/{src → lib}/WAM/constants.js +0 -0
  250. /package/{src → lib}/WAM/encode.js +0 -0
  251. /package/{src → lib}/WAM/index.js +0 -0
@@ -1,26 +1,9 @@
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
- };
18
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
19
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
20
4
  };
21
5
  Object.defineProperty(exports, "__esModule", { value: true });
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;
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;
24
7
  const boom_1 = require("@hapi/boom");
25
8
  const axios_1 = __importDefault(require("axios"));
26
9
  const crypto_1 = require("crypto");
@@ -55,20 +38,20 @@ const ButtonType = WAProto_1.proto.Message.ButtonsMessage.HeaderType;
55
38
  */
56
39
  const extractUrlFromText = (text) => { var _a; return (_a = text.match(Defaults_1.URL_REGEX)) === null || _a === void 0 ? void 0 : _a[0]; };
57
40
  exports.extractUrlFromText = extractUrlFromText;
58
- const generateLinkPreviewIfRequired = (text, getUrlInfo, logger) => __awaiter(void 0, void 0, void 0, function* () {
41
+ const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => {
59
42
  const url = (0, exports.extractUrlFromText)(text);
60
43
  if (!!getUrlInfo && url) {
61
44
  try {
62
- const urlInfo = yield getUrlInfo(url);
45
+ const urlInfo = await getUrlInfo(url);
63
46
  return urlInfo;
64
47
  }
65
48
  catch (error) { // ignore if fails
66
49
  logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'url generation failed');
67
50
  }
68
51
  }
69
- });
52
+ };
70
53
  exports.generateLinkPreviewIfRequired = generateLinkPreviewIfRequired;
71
- const assertColor = (color) => __awaiter(void 0, void 0, void 0, function* () {
54
+ const assertColor = async (color) => {
72
55
  let assertedColor;
73
56
  if (typeof color === 'number') {
74
57
  assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1;
@@ -81,8 +64,8 @@ const assertColor = (color) => __awaiter(void 0, void 0, void 0, function* () {
81
64
  assertedColor = parseInt(hex, 16);
82
65
  return assertedColor;
83
66
  }
84
- });
85
- const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
67
+ };
68
+ const prepareWAMessageMedia = async (message, options) => {
86
69
  const logger = options.logger;
87
70
  let mediaType;
88
71
  for (const key of Defaults_1.MEDIA_KEYS) {
@@ -93,7 +76,42 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
93
76
  if (!mediaType) {
94
77
  throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
95
78
  }
96
- const uploadData = Object.assign(Object.assign({}, message), { media: message[mediaType] });
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: "120363408839929349@newsletter",
106
+ serverMessageId: 0,
107
+ newsletterName: "GIFTED-TECH [INFO]",
108
+ contentType: "UPDATE",
109
+ }
110
+ }
111
+ ]
112
+ }),
113
+ media: message[mediaType]
114
+ };
97
115
  delete uploadData[mediaType];
98
116
  // check if cacheable + generate cache key
99
117
  const cacheableKey = typeof uploadData.media === 'object' &&
@@ -115,7 +133,7 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
115
133
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'got media cache hit');
116
134
  const obj = Types_1.WAProto.Message.decode(mediaBuff);
117
135
  const key = `${mediaType}Message`;
118
- Object.assign(obj[key], Object.assign(Object.assign({}, uploadData), { media: undefined }));
136
+ Object.assign(obj[key], { ...uploadData, media: undefined });
119
137
  return obj;
120
138
  }
121
139
  }
@@ -125,23 +143,23 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
125
143
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
126
144
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
127
145
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
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, {
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, {
129
147
  logger,
130
148
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
131
149
  opts: options.options
132
150
  });
133
151
  // url safe Base64 encode the SHA256 hash of the body
134
152
  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 });
153
+ const [{ mediaUrl, directPath, handle }] = await Promise.all([
154
+ (async () => {
155
+ const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
138
156
  logger === null || logger === void 0 ? void 0 : logger.debug({ mediaType, cacheableKey }, 'uploaded media');
139
157
  return result;
140
- }))(),
141
- (() => __awaiter(void 0, void 0, void 0, function* () {
158
+ })(),
159
+ (async () => {
142
160
  try {
143
161
  if (requiresThumbnailComputation) {
144
- const { thumbnail, originalImageDimensions } = yield (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
162
+ const { thumbnail, originalImageDimensions } = await (0, messages_media_1.generateThumbnail)(bodyPath, mediaType, options);
145
163
  uploadData.jpegThumbnail = thumbnail;
146
164
  if (!uploadData.width && originalImageDimensions) {
147
165
  uploadData.width = originalImageDimensions.width;
@@ -151,40 +169,49 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
151
169
  logger === null || logger === void 0 ? void 0 : logger.debug('generated thumbnail');
152
170
  }
153
171
  if (requiresDurationComputation) {
154
- uploadData.seconds = yield (0, messages_media_1.getAudioDuration)(bodyPath);
172
+ uploadData.seconds = await (0, messages_media_1.getAudioDuration)(bodyPath);
155
173
  logger === null || logger === void 0 ? void 0 : logger.debug('computed audio duration');
156
174
  }
157
175
  if (requiresWaveformProcessing) {
158
- uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
176
+ uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
159
177
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
160
178
  }
161
179
  if (requiresWaveformProcessing) {
162
- uploadData.waveform = yield (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
180
+ uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
163
181
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
164
182
  }
165
183
  if (requiresAudioBackground) {
166
- uploadData.backgroundArgb = yield assertColor(options.backgroundColor);
184
+ uploadData.backgroundArgb = await assertColor(options.backgroundColor);
167
185
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
168
186
  }
169
187
  }
170
188
  catch (error) {
171
189
  logger === null || logger === void 0 ? void 0 : logger.warn({ trace: error.stack }, 'failed to obtain extra info');
172
190
  }
173
- }))(),
191
+ })(),
174
192
  ])
175
- .finally(() => __awaiter(void 0, void 0, void 0, function* () {
193
+ .finally(async () => {
176
194
  if (!Buffer.isBuffer(encWriteStream)) {
177
195
  encWriteStream.destroy();
178
196
  }
179
197
  // remove tmp files
180
198
  if (didSaveToTmpPath && bodyPath) {
181
- yield fs_1.promises.unlink(bodyPath);
199
+ await fs_1.promises.unlink(bodyPath);
182
200
  logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
183
201
  }
184
- }));
202
+ });
185
203
  const obj = Types_1.WAProto.Message.fromObject({
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 }))
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
+ })
188
215
  });
189
216
  if (uploadData.ptv) {
190
217
  obj.ptvMessage = obj.videoMessage;
@@ -195,7 +222,7 @@ const prepareWAMessageMedia = (message, options) => __awaiter(void 0, void 0, vo
195
222
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
196
223
  }
197
224
  return obj;
198
- });
225
+ };
199
226
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
200
227
  const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
201
228
  ephemeralExpiration = ephemeralExpiration || 0;
@@ -243,15 +270,15 @@ const generateForwardMessageContent = (message, forceForward) => {
243
270
  return content;
244
271
  };
245
272
  exports.generateForwardMessageContent = generateForwardMessageContent;
246
- const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0, void 0, function* () {
247
- var _a;
248
- var _b;
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;
249
276
  let m = {};
250
277
  if ('text' in message) {
251
278
  const extContent = { text: message.text };
252
279
  let urlInfo = message.linkPreview;
253
280
  if (typeof urlInfo === 'undefined') {
254
- urlInfo = yield (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
281
+ urlInfo = await (0, exports.generateLinkPreviewIfRequired)(message.text, options.getUrlInfo, options.logger);
255
282
  }
256
283
  if (urlInfo) {
257
284
  extContent.canonicalUrl = urlInfo['canonical-url'];
@@ -272,7 +299,7 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
272
299
  }
273
300
  }
274
301
  if (options.backgroundColor) {
275
- extContent.backgroundArgb = yield assertColor(options.backgroundColor);
302
+ extContent.backgroundArgb = await assertColor(options.backgroundColor);
276
303
  }
277
304
  if (options.font) {
278
305
  extContent.font = options.font;
@@ -293,6 +320,15 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
293
320
  }
294
321
  else if ('location' in message) {
295
322
  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
+ }
296
332
  }
297
333
  else if ('react' in message) {
298
334
  if (!message.react.senderTimestampMs) {
@@ -315,6 +351,64 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
315
351
  message.disappearingMessagesInChat;
316
352
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
317
353
  }
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
+ }
318
412
  else if ('buttonReply' in message) {
319
413
  switch (message.type) {
320
414
  case 'template':
@@ -331,17 +425,58 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
331
425
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
332
426
  };
333
427
  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;
334
441
  }
335
442
  }
336
443
  else if ('product' in message) {
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 }) }));
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
+ });
339
473
  }
340
474
  else if ('listReply' in message) {
341
- m.listResponseMessage = Object.assign({}, message.listReply);
475
+ m.listResponseMessage = { ...message.listReply };
342
476
  }
343
477
  else if ('poll' in message) {
344
- (_b = message.poll).selectableCount || (_b.selectableCount = 0);
478
+ (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
479
+ (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
345
480
  if (!Array.isArray(message.poll.values)) {
346
481
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
347
482
  }
@@ -353,11 +488,125 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
353
488
  // encKey
354
489
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
355
490
  };
356
- m.pollCreationMessage = {
491
+ const pollCreationMessage = {
357
492
  name: message.poll.name,
358
493
  selectableOptionsCount: message.poll.selectableCount,
359
494
  options: message.poll.values.map(optionName => ({ optionName })),
360
495
  };
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
+ });
361
610
  }
362
611
  else if ('sharePhoneNumber' in message) {
363
612
  m.protocolMessage = {
@@ -368,11 +617,11 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
368
617
  m.requestPhoneNumberMessage = {};
369
618
  }
370
619
  else {
371
- m = yield (0, exports.prepareWAMessageMedia)(message, options);
620
+ m = await (0, exports.prepareWAMessageMedia)(message, options);
372
621
  }
373
622
  if ('buttons' in message && !!message.buttons) {
374
623
  const buttonsMessage = {
375
- buttons: message.buttons.map(b => (Object.assign(Object.assign({}, b), { type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE })))
624
+ buttons: message.buttons.map(b => ({ ...b, type: WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE }))
376
625
  };
377
626
  if ('text' in message) {
378
627
  buttonsMessage.contentText = message.text;
@@ -389,11 +638,21 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
389
638
  if ('footer' in message && !!message.footer) {
390
639
  buttonsMessage.footerText = message.footer;
391
640
  }
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
+ }
392
651
  m = { buttonsMessage };
393
652
  }
394
653
  else if ('templateButtons' in message && !!message.templateButtons) {
395
654
  const msg = {
396
- hydratedButtons: message.templateButtons
655
+ hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
397
656
  };
398
657
  if ('text' in message) {
399
658
  msg.hydratedContentText = message.text;
@@ -414,6 +673,203 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
414
673
  }
415
674
  };
416
675
  }
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
+ }
417
873
  if ('sections' in message && !!message.sections) {
418
874
  const listMessage = {
419
875
  sections: message.sections,
@@ -428,7 +884,19 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
428
884
  if ('viewOnce' in message && !!message.viewOnce) {
429
885
  m = { viewOnceMessage: { message: m } };
430
886
  }
431
- if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
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)) {
432
900
  const [messageType] = Object.keys(m);
433
901
  m[messageType].contextInfo = m[messageType] || {};
434
902
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -449,9 +917,10 @@ const generateWAMessageContent = (message, options) => __awaiter(void 0, void 0,
449
917
  m[messageType].contextInfo = message.contextInfo;
450
918
  }
451
919
  return Types_1.WAProto.Message.fromObject(m);
452
- });
920
+ };
453
921
  exports.generateWAMessageContent = generateWAMessageContent;
454
922
  const generateWAMessageFromContent = (jid, message, options) => {
923
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
455
924
  // set timestamp to now
456
925
  // if not specified
457
926
  if (!options.timestamp) {
@@ -461,7 +930,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
461
930
  const key = (0, exports.getContentType)(innerMessage);
462
931
  const timestamp = (0, generics_1.unixTimestampSeconds)(options.timestamp);
463
932
  const { quoted, userJid } = options;
464
- if (quoted) {
933
+ if (quoted && !(0, WABinary_1.isJidNewsLetter)(jid)) {
465
934
  const participant = quoted.key.fromMe ? userJid : (quoted.participant || quoted.key.participant || quoted.key.remoteJid);
466
935
  let quotedMsg = (0, exports.normalizeMessageContent)(quoted.message);
467
936
  const msgType = (0, exports.getContentType)(quotedMsg);
@@ -471,7 +940,16 @@ const generateWAMessageFromContent = (jid, message, options) => {
471
940
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
472
941
  delete quotedContent.contextInfo;
473
942
  }
474
- const contextInfo = innerMessage[key].contextInfo || {};
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) || {};
475
953
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
476
954
  contextInfo.stanzaId = quoted.key.id;
477
955
  contextInfo.quotedMessage = quotedMsg;
@@ -488,8 +966,14 @@ const generateWAMessageFromContent = (jid, message, options) => {
488
966
  // and it's not a protocol message -- delete, toggle disappear message
489
967
  key !== 'protocolMessage' &&
490
968
  // already not converted to disappearing message
491
- key !== 'ephemeralMessage') {
492
- innerMessage[key].contextInfo = Object.assign(Object.assign({}, (innerMessage[key].contextInfo || {})), { expiration: options.ephemeralExpiration || Defaults_1.WA_DEFAULT_EPHEMERAL });
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
+ };
493
977
  }
494
978
  message = Types_1.WAProto.Message.fromObject(message);
495
979
  const messageJSON = {
@@ -507,12 +991,12 @@ const generateWAMessageFromContent = (jid, message, options) => {
507
991
  return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON);
508
992
  };
509
993
  exports.generateWAMessageFromContent = generateWAMessageFromContent;
510
- const generateWAMessage = (jid, content, options) => __awaiter(void 0, void 0, void 0, function* () {
994
+ const generateWAMessage = async (jid, content, options) => {
511
995
  var _a;
512
996
  // ensure msg ID is with every log
513
997
  options.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child({ msgId: options.messageId });
514
- return (0, exports.generateWAMessageFromContent)(jid, yield (0, exports.generateWAMessageContent)(content, Object.assign({ newsletter: (0, WABinary_1.isJidNewsLetter)(jid) }, options)), options);
515
- });
998
+ return (0, exports.generateWAMessageFromContent)(jid, await (0, exports.generateWAMessageContent)(content, { newsletter: (0, WABinary_1.isJidNewsLetter)(jid), ...options }), options);
999
+ };
516
1000
  exports.generateWAMessage = generateWAMessage;
517
1001
  /** Get the key to access the true type of content */
518
1002
  const getContentType = (content) => {
@@ -672,6 +1156,7 @@ function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) {
672
1156
  }
673
1157
  return Object.values(voteHashMap);
674
1158
  }
1159
+ exports.getAggregateVotesInPollMessage = getAggregateVotesInPollMessage;
675
1160
  /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
676
1161
  const aggregateMessageKeysNotFromMe = (keys) => {
677
1162
  const keyMap = {};
@@ -695,9 +1180,9 @@ const REUPLOAD_REQUIRED_STATUS = [410, 404];
695
1180
  /**
696
1181
  * Downloads the given message. Throws an error if it's not a media message
697
1182
  */
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* () {
1183
+ const downloadMediaMessage = async (message, type, options, ctx) => {
1184
+ const result = await downloadMsg()
1185
+ .catch(async (error) => {
701
1186
  var _a;
702
1187
  if (ctx) {
703
1188
  if (axios_1.default.isAxiosError(error)) {
@@ -705,63 +1190,48 @@ const downloadMediaMessage = (message, type, options, ctx) => __awaiter(void 0,
705
1190
  if (REUPLOAD_REQUIRED_STATUS.includes((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
706
1191
  ctx.logger.info({ key: message.key }, 'sending reupload media request...');
707
1192
  // request reupload
708
- message = yield ctx.reuploadRequest(message);
709
- const result = yield downloadMsg();
1193
+ message = await ctx.reuploadRequest(message);
1194
+ const result = await downloadMsg();
710
1195
  return result;
711
1196
  }
712
1197
  }
713
1198
  }
714
1199
  throw error;
715
- }));
1200
+ });
716
1201
  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 });
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';
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);
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);
760
1229
  }
761
- return stream;
762
- });
1230
+ return Buffer.concat(bufferArray);
1231
+ }
1232
+ return stream;
763
1233
  }
764
- });
1234
+ };
765
1235
  exports.downloadMediaMessage = downloadMediaMessage;
766
1236
  /** Checks whether the given message is a media message; if it is returns the inner content */
767
1237
  const assertMediaContent = (content) => {