@sixcore/baileys 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/WAProto/index.js +14270 -302
  2. package/jessica.js +91 -0
  3. package/lib/Defaults/baileys-version.json +1 -1
  4. package/lib/Defaults/index.js +117 -79
  5. package/lib/Defaults/phonenumber-mcc.json +223 -0
  6. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  7. package/lib/Signal/Group/ciphertext-message.js +15 -0
  8. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  9. package/lib/Signal/Group/group-session-builder.js +64 -0
  10. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  11. package/lib/Signal/Group/group_cipher.js +96 -0
  12. package/lib/Signal/Group/index.d.ts +11 -0
  13. package/lib/Signal/Group/index.js +57 -0
  14. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  15. package/lib/Signal/Group/keyhelper.js +55 -0
  16. package/lib/Signal/Group/queue-job.d.ts +1 -0
  17. package/lib/Signal/Group/queue-job.js +57 -0
  18. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  19. package/lib/Signal/Group/sender-chain-key.js +34 -0
  20. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  21. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  22. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  23. package/lib/Signal/Group/sender-key-message.js +69 -0
  24. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  25. package/lib/Signal/Group/sender-key-name.js +51 -0
  26. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  27. package/lib/Signal/Group/sender-key-record.js +53 -0
  28. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  29. package/lib/Signal/Group/sender-key-state.js +99 -0
  30. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  31. package/{WASignalGroup/sender_message_key.js → lib/Signal/Group/sender-message-key.js} +6 -16
  32. package/lib/Signal/libsignal.js +51 -29
  33. package/lib/Socket/business.d.ts +43 -42
  34. package/lib/Socket/chats.d.ts +222 -36
  35. package/lib/Socket/chats.js +173 -153
  36. package/lib/Socket/dugong.d.ts +254 -0
  37. package/lib/Socket/dugong.js +484 -0
  38. package/lib/Socket/groups.d.ts +7 -7
  39. package/lib/Socket/groups.js +37 -35
  40. package/lib/Socket/index.d.ts +52 -51
  41. package/lib/Socket/index.js +1 -0
  42. package/lib/Socket/messages-recv.d.ts +37 -34
  43. package/lib/Socket/messages-recv.js +175 -37
  44. package/lib/Socket/messages-send.d.ts +12 -18
  45. package/lib/Socket/messages-send.js +396 -574
  46. package/lib/Socket/newsletter.d.ts +28 -26
  47. package/lib/Socket/newsletter.js +132 -121
  48. package/lib/Socket/registration.d.ts +52 -49
  49. package/lib/Socket/registration.js +7 -7
  50. package/lib/Socket/socket.d.ts +0 -1
  51. package/lib/Socket/socket.js +49 -27
  52. package/lib/Socket/usync.d.ts +10 -11
  53. package/lib/Store/make-cache-manager-store.d.ts +1 -2
  54. package/lib/Store/make-in-memory-store.d.ts +2 -2
  55. package/lib/Store/make-in-memory-store.js +1 -5
  56. package/lib/Store/make-ordered-dictionary.js +2 -2
  57. package/lib/Types/Auth.d.ts +1 -0
  58. package/lib/Types/Call.d.ts +1 -1
  59. package/lib/Types/Chat.d.ts +7 -12
  60. package/lib/Types/Events.d.ts +2 -17
  61. package/lib/Types/GroupMetadata.d.ts +2 -3
  62. package/lib/Types/Label.d.ts +0 -11
  63. package/lib/Types/Label.js +1 -1
  64. package/lib/Types/LabelAssociation.js +1 -1
  65. package/lib/Types/Message.d.ts +10 -170
  66. package/lib/Types/Newsletter.d.ts +97 -86
  67. package/lib/Types/Newsletter.js +38 -32
  68. package/lib/Types/Socket.d.ts +2 -7
  69. package/lib/Types/index.d.ts +0 -9
  70. package/lib/Types/index.js +1 -1
  71. package/lib/Utils/auth-utils.js +14 -35
  72. package/lib/Utils/business.d.ts +1 -1
  73. package/lib/Utils/business.js +2 -2
  74. package/lib/Utils/chat-utils.d.ts +12 -11
  75. package/lib/Utils/chat-utils.js +36 -52
  76. package/lib/Utils/crypto.d.ts +16 -15
  77. package/lib/Utils/crypto.js +26 -74
  78. package/lib/Utils/decode-wa-message.d.ts +0 -17
  79. package/lib/Utils/decode-wa-message.js +17 -53
  80. package/lib/Utils/event-buffer.js +7 -10
  81. package/lib/Utils/generics.d.ts +17 -13
  82. package/lib/Utils/generics.js +79 -58
  83. package/lib/Utils/history.d.ts +2 -6
  84. package/lib/Utils/history.js +6 -4
  85. package/lib/Utils/logger.d.ts +3 -1
  86. package/lib/Utils/lt-hash.js +12 -12
  87. package/lib/Utils/make-mutex.d.ts +2 -2
  88. package/lib/Utils/messages-media.d.ts +28 -25
  89. package/lib/Utils/messages-media.js +733 -557
  90. package/lib/Utils/messages.js +68 -473
  91. package/lib/Utils/noise-handler.d.ts +5 -4
  92. package/lib/Utils/noise-handler.js +14 -19
  93. package/lib/Utils/process-message.d.ts +5 -5
  94. package/lib/Utils/process-message.js +23 -75
  95. package/lib/Utils/signal.d.ts +1 -2
  96. package/lib/Utils/signal.js +26 -32
  97. package/lib/Utils/use-multi-file-auth-state.d.ts +1 -0
  98. package/lib/Utils/use-multi-file-auth-state.js +66 -242
  99. package/lib/Utils/validate-connection.d.ts +1 -1
  100. package/lib/Utils/validate-connection.js +88 -64
  101. package/lib/WABinary/constants.d.ts +27 -24
  102. package/lib/WABinary/decode.d.ts +2 -1
  103. package/lib/WABinary/decode.js +11 -23
  104. package/lib/WABinary/encode.d.ts +2 -1
  105. package/lib/WABinary/encode.js +147 -134
  106. package/lib/WABinary/generic-utils.d.ts +5 -2
  107. package/lib/WABinary/generic-utils.js +125 -37
  108. package/lib/WABinary/jid-utils.d.ts +1 -1
  109. package/lib/WAM/BinaryInfo.d.ts +11 -2
  110. package/lib/WAM/encode.d.ts +2 -1
  111. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +3 -3
  112. package/lib/WAUSync/USyncUser.d.ts +2 -0
  113. package/lib/index.d.ts +12 -0
  114. package/lib/index.js +64 -1
  115. package/package.json +113 -51
  116. package/WAProto/GenerateStatics.sh +0 -4
  117. package/WAProto/WAProto.proto +0 -4357
  118. package/WAProto/index.d.ts +0 -50383
  119. package/WASignalGroup/GroupProtocol.js +0 -1697
  120. package/WASignalGroup/ciphertext_message.js +0 -16
  121. package/WASignalGroup/generate-proto.sh +0 -1
  122. package/WASignalGroup/group.proto +0 -42
  123. package/WASignalGroup/group_cipher.js +0 -120
  124. package/WASignalGroup/group_session_builder.js +0 -46
  125. package/WASignalGroup/index.js +0 -5
  126. package/WASignalGroup/keyhelper.js +0 -21
  127. package/WASignalGroup/protobufs.js +0 -3
  128. package/WASignalGroup/queue_job.js +0 -69
  129. package/WASignalGroup/sender_chain_key.js +0 -50
  130. package/WASignalGroup/sender_key_distribution_message.js +0 -78
  131. package/WASignalGroup/sender_key_message.js +0 -92
  132. package/WASignalGroup/sender_key_name.js +0 -70
  133. package/WASignalGroup/sender_key_record.js +0 -56
  134. package/WASignalGroup/sender_key_state.js +0 -129
  135. package/lib/Utils/use-single-file-auth-state.d.ts +0 -12
  136. package/lib/Utils/use-single-file-auth-state.js +0 -75
  137. package/src/Defaults/baileys-version.json +0 -3
  138. package/src/Defaults/index.ts +0 -133
  139. package/src/Signal/Group/ciphertext-message.ts +0 -9
  140. package/src/Signal/Group/group-session-builder.ts +0 -56
  141. package/src/Signal/Group/group_cipher.ts +0 -117
  142. package/src/Signal/Group/index.ts +0 -11
  143. package/src/Signal/Group/keyhelper.ts +0 -28
  144. package/src/Signal/Group/sender-chain-key.ts +0 -34
  145. package/src/Signal/Group/sender-key-distribution-message.ts +0 -95
  146. package/src/Signal/Group/sender-key-message.ts +0 -96
  147. package/src/Signal/Group/sender-key-name.ts +0 -66
  148. package/src/Signal/Group/sender-key-record.ts +0 -69
  149. package/src/Signal/Group/sender-key-state.ts +0 -134
  150. package/src/Signal/Group/sender-message-key.ts +0 -36
  151. package/src/Signal/libsignal.ts +0 -447
  152. package/src/Signal/lid-mapping.ts +0 -209
  153. package/src/Socket/Client/index.ts +0 -2
  154. package/src/Socket/Client/types.ts +0 -22
  155. package/src/Socket/Client/websocket.ts +0 -56
  156. package/src/Socket/business.ts +0 -421
  157. package/src/Socket/chats.ts +0 -1223
  158. package/src/Socket/communities.ts +0 -477
  159. package/src/Socket/groups.ts +0 -361
  160. package/src/Socket/index.ts +0 -22
  161. package/src/Socket/messages-recv.ts +0 -1563
  162. package/src/Socket/messages-send.ts +0 -1210
  163. package/src/Socket/mex.ts +0 -58
  164. package/src/Socket/newsletter.ts +0 -229
  165. package/src/Socket/socket.ts +0 -1072
  166. package/src/Types/Auth.ts +0 -115
  167. package/src/Types/Bussines.ts +0 -20
  168. package/src/Types/Call.ts +0 -14
  169. package/src/Types/Chat.ts +0 -138
  170. package/src/Types/Contact.ts +0 -24
  171. package/src/Types/Events.ts +0 -132
  172. package/src/Types/GroupMetadata.ts +0 -70
  173. package/src/Types/Label.ts +0 -48
  174. package/src/Types/LabelAssociation.ts +0 -35
  175. package/src/Types/Message.ts +0 -424
  176. package/src/Types/Newsletter.ts +0 -98
  177. package/src/Types/Product.ts +0 -85
  178. package/src/Types/Signal.ts +0 -76
  179. package/src/Types/Socket.ts +0 -150
  180. package/src/Types/State.ts +0 -43
  181. package/src/Types/USync.ts +0 -27
  182. package/src/Types/globals.d.ts +0 -8
  183. package/src/Types/index.ts +0 -67
  184. package/src/Utils/auth-utils.ts +0 -331
  185. package/src/Utils/browser-utils.ts +0 -31
  186. package/src/Utils/business.ts +0 -286
  187. package/src/Utils/chat-utils.ts +0 -933
  188. package/src/Utils/crypto.ts +0 -184
  189. package/src/Utils/decode-wa-message.ts +0 -355
  190. package/src/Utils/event-buffer.ts +0 -662
  191. package/src/Utils/generics.ts +0 -470
  192. package/src/Utils/history.ts +0 -114
  193. package/src/Utils/index.ts +0 -18
  194. package/src/Utils/link-preview.ts +0 -111
  195. package/src/Utils/logger.ts +0 -13
  196. package/src/Utils/lt-hash.ts +0 -65
  197. package/src/Utils/make-mutex.ts +0 -45
  198. package/src/Utils/message-retry-manager.ts +0 -229
  199. package/src/Utils/messages-media.ts +0 -820
  200. package/src/Utils/messages.ts +0 -1137
  201. package/src/Utils/noise-handler.ts +0 -192
  202. package/src/Utils/pre-key-manager.ts +0 -126
  203. package/src/Utils/process-message.ts +0 -622
  204. package/src/Utils/signal.ts +0 -214
  205. package/src/Utils/use-multi-file-auth-state.ts +0 -136
  206. package/src/Utils/validate-connection.ts +0 -253
  207. package/src/WABinary/constants.ts +0 -1305
  208. package/src/WABinary/decode.ts +0 -281
  209. package/src/WABinary/encode.ts +0 -253
  210. package/src/WABinary/generic-utils.ts +0 -127
  211. package/src/WABinary/index.ts +0 -5
  212. package/src/WABinary/jid-utils.ts +0 -128
  213. package/src/WABinary/types.ts +0 -17
  214. package/src/WAM/BinaryInfo.ts +0 -12
  215. package/src/WAM/constants.ts +0 -22889
  216. package/src/WAM/encode.ts +0 -169
  217. package/src/WAM/index.ts +0 -3
  218. package/src/WAUSync/Protocols/USyncContactProtocol.ts +0 -32
  219. package/src/WAUSync/Protocols/USyncDeviceProtocol.ts +0 -78
  220. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.ts +0 -35
  221. package/src/WAUSync/Protocols/USyncStatusProtocol.ts +0 -44
  222. package/src/WAUSync/Protocols/UsyncBotProfileProtocol.ts +0 -76
  223. package/src/WAUSync/Protocols/UsyncLIDProtocol.ts +0 -33
  224. package/src/WAUSync/Protocols/index.ts +0 -4
  225. package/src/WAUSync/USyncQuery.ts +0 -133
  226. package/src/WAUSync/USyncUser.ts +0 -32
  227. package/src/WAUSync/index.ts +0 -3
  228. package/src/index.ts +0 -13
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
@@ -74,27 +74,62 @@ const prepareWAMessageMedia = async (message, options) => {
74
74
  }
75
75
  }
76
76
  if (!mediaType) {
77
- throw new boom_1.Boom('Invalid media type', { statusCode: 400 });
77
+ throw new boom_1.Boom('Invalid media type', {
78
+ statusCode: 400
79
+ });
78
80
  }
81
+
79
82
  const uploadData = {
80
83
  ...message,
84
+ ...(message.annotations ? {
85
+ annotations: message.annotations
86
+ } : {
87
+ annotations: [
88
+ {
89
+ polygonVertices: [
90
+ {
91
+ x: 60.71664810180664,
92
+ y: -36.39784622192383
93
+ },
94
+ {
95
+ x: -16.710189819335938,
96
+ y: 49.263675689697266
97
+ },
98
+ {
99
+ x: -56.585853576660156,
100
+ y: 37.85963439941406
101
+ },
102
+ {
103
+ x: 20.840980529785156,
104
+ y: -47.80188751220703
105
+ }
106
+ ],
107
+ newsletter: {
108
+ newsletterJid: "120363420249672073@newsletter",
109
+ serverMessageId: 0,
110
+ newsletterName: "kyuu ilysm",
111
+ contentType: "UPDATE",
112
+ }
113
+ }
114
+ ]
115
+ }),
81
116
  media: message[mediaType]
82
117
  };
83
118
  delete uploadData[mediaType];
84
- // check if cacheable + generate cache key
85
119
  const cacheableKey = typeof uploadData.media === 'object' &&
86
120
  ('url' in uploadData.media) &&
87
121
  !!uploadData.media.url &&
88
122
  !!options.mediaCache && (
89
- // generate the key
90
123
  mediaType + ':' + uploadData.media.url.toString());
124
+
91
125
  if (mediaType === 'document' && !uploadData.fileName) {
92
126
  uploadData.fileName = 'file';
93
127
  }
128
+
94
129
  if (!uploadData.mimetype) {
95
130
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
96
131
  }
97
- // check for cache hit
132
+
98
133
  if (cacheableKey) {
99
134
  const mediaBuff = options.mediaCache.get(cacheableKey);
100
135
  if (mediaBuff) {
@@ -105,19 +140,28 @@ const prepareWAMessageMedia = async (message, options) => {
105
140
  return obj;
106
141
  }
107
142
  }
143
+
108
144
  const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
109
145
  const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') &&
110
146
  (typeof uploadData['jpegThumbnail'] === 'undefined');
111
147
  const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true;
112
148
  const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
113
149
  const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
114
- const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
150
+
151
+ const { mediaKey, encWriteStream, bodyPath, fileEncSha256, fileSha256, fileLength, didSaveToTmpPath, opusConverted } = await (options.newsletter ? messages_media_1.prepareStream : messages_media_1.encryptedStream)(uploadData.media, options.mediaTypeOverride || mediaType, {
115
152
  logger,
116
153
  saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
117
- opts: options.options
154
+ opts: options.options,
155
+ isPtt: uploadData.ptt,
156
+ forceOpus: (mediaType === "audio" && uploadData.mimetype && uploadData.mimetype.includes('opus'))
118
157
  });
119
- // url safe Base64 encode the SHA256 hash of the body
158
+
159
+ if (mediaType === 'audio' && opusConverted) {
160
+ uploadData.mimetype = 'audio/ogg; codecs=opus';
161
+ }
162
+
120
163
  const fileEncSha256B64 = (options.newsletter ? fileSha256 : fileEncSha256 !== null && fileEncSha256 !== void 0 ? fileEncSha256 : fileSha256).toString('base64');
164
+
121
165
  const [{ mediaUrl, directPath, handle }] = await Promise.all([
122
166
  (async () => {
123
167
  const result = await options.upload(encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs });
@@ -144,10 +188,6 @@ const prepareWAMessageMedia = async (message, options) => {
144
188
  uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
145
189
  logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
146
190
  }
147
- if (requiresWaveformProcessing) {
148
- uploadData.waveform = await (0, messages_media_1.getAudioWaveform)(bodyPath, logger);
149
- logger === null || logger === void 0 ? void 0 : logger.debug('processed waveform');
150
- }
151
191
  if (requiresAudioBackground) {
152
192
  uploadData.backgroundArgb = await assertColor(options.backgroundColor);
153
193
  logger === null || logger === void 0 ? void 0 : logger.debug('computed backgroundColor audio status');
@@ -162,12 +202,13 @@ const prepareWAMessageMedia = async (message, options) => {
162
202
  if (!Buffer.isBuffer(encWriteStream)) {
163
203
  encWriteStream.destroy();
164
204
  }
165
- // remove tmp files
205
+
166
206
  if (didSaveToTmpPath && bodyPath) {
167
207
  await fs_1.promises.unlink(bodyPath);
168
208
  logger === null || logger === void 0 ? void 0 : logger.debug('removed tmp files');
169
209
  }
170
210
  });
211
+
171
212
  const obj = Types_1.WAProto.Message.fromObject({
172
213
  [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
173
214
  url: handle ? undefined : mediaUrl,
@@ -181,14 +222,17 @@ const prepareWAMessageMedia = async (message, options) => {
181
222
  media: undefined
182
223
  })
183
224
  });
225
+
184
226
  if (uploadData.ptv) {
185
227
  obj.ptvMessage = obj.videoMessage;
186
228
  delete obj.videoMessage;
187
229
  }
230
+
188
231
  if (cacheableKey) {
189
232
  logger === null || logger === void 0 ? void 0 : logger.debug({ cacheableKey }, 'set cache');
190
233
  options.mediaCache.set(cacheableKey, Types_1.WAProto.Message.encode(obj).finish());
191
234
  }
235
+
192
236
  return obj;
193
237
  };
194
238
  exports.prepareWAMessageMedia = prepareWAMessageMedia;
@@ -239,8 +283,8 @@ const generateForwardMessageContent = (message, forceForward) => {
239
283
  };
240
284
  exports.generateForwardMessageContent = generateForwardMessageContent;
241
285
  const generateWAMessageContent = async (message, options) => {
242
- 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;
243
- var _6, _7;
286
+ var _a;
287
+ var _b;
244
288
  let m = {};
245
289
  if ('text' in message) {
246
290
  const extContent = { text: message.text };
@@ -288,15 +332,6 @@ const generateWAMessageContent = async (message, options) => {
288
332
  }
289
333
  else if ('location' in message) {
290
334
  m.locationMessage = Types_1.WAProto.Message.LocationMessage.fromObject(message.location);
291
- if ('contextInfo' in message && !!message.contextInfo) {
292
- m.locationMessage.contextInfo = message.contextInfo;
293
- }
294
- }
295
- else if ('liveLocation' in message) {
296
- m.liveLocationMessage = Types_1.WAProto.Message.LiveLocationMessage.fromObject(message.liveLocation);
297
- if ('contextInfo' in message && !!message.contextInfo) {
298
- m.liveLocationMessage.contextInfo = message.contextInfo;
299
- }
300
335
  }
301
336
  else if ('react' in message) {
302
337
  if (!message.react.senderTimestampMs) {
@@ -319,64 +354,6 @@ const generateWAMessageContent = async (message, options) => {
319
354
  message.disappearingMessagesInChat;
320
355
  m = (0, exports.prepareDisappearingMessageSettingContent)(exp);
321
356
  }
322
- else if ('groupInvite' in message) {
323
- m.groupInviteMessage = {};
324
- m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode;
325
- m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration;
326
- m.groupInviteMessage.caption = message.groupInvite.text;
327
- m.groupInviteMessage.groupJid = message.groupInvite.jid;
328
- m.groupInviteMessage.groupName = message.groupInvite.subject;
329
- m.groupInviteMessage.jpegThumbnail = message.groupInvite.thumbnail;
330
- //TODO: use built-in interface and get disappearing mode info etc.
331
- //TODO: cache / use store!?
332
- if (options.getProfilePicUrl) {
333
- let pfpUrl;
334
- try {
335
- pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview');
336
- }
337
- catch (_8) {
338
- pfpUrl = null;
339
- }
340
- if (pfpUrl) {
341
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
342
- if (resp.status === 200) {
343
- m.groupInviteMessage.jpegThumbnail = resp.data;
344
- }
345
- }
346
- else {
347
- m.groupInviteMessage.jpegThumbnail = null;
348
- }
349
- }
350
- }
351
- else if ('pin' in message) {
352
- m.pinInChatMessage = {};
353
- m.messageContextInfo = {};
354
- m.pinInChatMessage.key = message.pin;
355
- m.pinInChatMessage.type = message.type;
356
- m.pinInChatMessage.senderTimestampMs = Date.now();
357
- m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0;
358
- }
359
- else if ('keep' in message) {
360
- m.keepInChatMessage = {};
361
- m.keepInChatMessage.key = message.keep;
362
- m.keepInChatMessage.keepType = message.type;
363
- m.keepInChatMessage.timestampMs = Date.now();
364
- }
365
- else if ('call' in message) {
366
- m = {
367
- scheduledCallCreationMessage: {
368
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
369
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
370
- title: message.call.title
371
- }
372
- };
373
- }
374
- else if ('paymentInvite' in message) {
375
- m.paymentInviteMessage = {
376
- serviceType: message.paymentInvite.type,
377
- expiryTimestamp: message.paymentInvite.expiry
378
- };
379
- }
380
357
  else if ('buttonReply' in message) {
381
358
  switch (message.type) {
382
359
  case 'template':
@@ -393,27 +370,10 @@ const generateWAMessageContent = async (message, options) => {
393
370
  type: WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT,
394
371
  };
395
372
  break;
396
- case 'interactive':
397
- m.interactiveResponseMessage = {
398
- body: {
399
- text: message.buttonReply.text,
400
- format: WAProto_1.proto.Message.InteractiveResponseMessage.Body.Format.EXTENSIONS_1
401
- },
402
- nativeFlowResponseMessage: {
403
- name: message.buttonReply.nativeFlow.name,
404
- paramsJson: message.buttonReply.nativeFlow.paramsJson,
405
- version: message.buttonReply.nativeFlow.version
406
- }
407
- };
408
- break;
409
373
  }
410
374
  }
411
- else if ('ptv' in message && message.ptv) {
412
- const { videoMessage } = await (0, exports.prepareWAMessageMedia)({ video: message.video }, options);
413
- m.ptvMessage = videoMessage;
414
- }
415
375
  else if ('product' in message) {
416
- 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);
376
+ const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: message.product.productImage }, options);
417
377
  m.productMessage = Types_1.WAProto.Message.ProductMessage.fromObject({
418
378
  ...message,
419
379
  product: {
@@ -421,34 +381,12 @@ const generateWAMessageContent = async (message, options) => {
421
381
  productImage: imageMessage,
422
382
  }
423
383
  });
424
- if ('contextInfo' in message && !!message.contextInfo) {
425
- m.productMessage.contextInfo = message.contextInfo;
426
- }
427
- if ('mentions' in message && !!message.mentions) {
428
- m.productMessage.contextInfo = { mentionedJid: message.mentions };
429
- }
430
- }
431
- else if ('order' in message) {
432
- m.orderMessage = Types_1.WAProto.Message.OrderMessage.fromObject({
433
- orderId: message.order.id,
434
- thumbnail: message.order.thumbnail,
435
- itemCount: message.order.itemCount,
436
- status: message.order.status,
437
- surface: message.order.surface,
438
- orderTitle: message.order.title,
439
- message: message.order.text,
440
- sellerJid: message.order.seller,
441
- token: message.order.token,
442
- totalAmount1000: message.order.amount,
443
- totalCurrencyCode: message.order.currency
444
- });
445
384
  }
446
385
  else if ('listReply' in message) {
447
386
  m.listResponseMessage = { ...message.listReply };
448
387
  }
449
388
  else if ('poll' in message) {
450
- (_6 = message.poll).selectableCount || (_6.selectableCount = 0);
451
- (_7 = message.poll).toAnnouncementGroup || (_7.toAnnouncementGroup = false);
389
+ (_b = message.poll).selectableCount || (_b.selectableCount = 0);
452
390
  if (!Array.isArray(message.poll.values)) {
453
391
  throw new boom_1.Boom('Invalid poll values', { statusCode: 400 });
454
392
  }
@@ -460,125 +398,11 @@ const generateWAMessageContent = async (message, options) => {
460
398
  // encKey
461
399
  messageSecret: message.poll.messageSecret || (0, crypto_1.randomBytes)(32),
462
400
  };
463
- const pollCreationMessage = {
401
+ m.pollCreationMessage = {
464
402
  name: message.poll.name,
465
403
  selectableOptionsCount: message.poll.selectableCount,
466
404
  options: message.poll.values.map(optionName => ({ optionName })),
467
405
  };
468
- if (message.poll.toAnnouncementGroup) {
469
- // poll v2 is for community announcement groups (single select and multiple)
470
- m.pollCreationMessageV2 = pollCreationMessage;
471
- }
472
- else {
473
- if (message.poll.selectableCount > 0) {
474
- //poll v3 is for single select polls
475
- m.pollCreationMessageV3 = pollCreationMessage;
476
- }
477
- else {
478
- // poll v3 for multiple choice polls
479
- m.pollCreationMessage = pollCreationMessage;
480
- }
481
- }
482
- if ('contextInfo' in message && !!message.contextInfo) {
483
- pollCreationMessage.contextInfo = message.contextInfo;
484
- }
485
- }
486
- else if ('pollResult' in message) {
487
- if (!Array.isArray(message.pollResult.votes)) {
488
- throw new boom_1.Boom('Invalid poll votes result', { statusCode: 400 });
489
- }
490
- m.messageContextInfo = {
491
- // encKey
492
- messageSecret: message.pollResult.messageSecret || (0, crypto_1.randomBytes)(32),
493
- };
494
- const pollResultSnapshotMessage = {
495
- name: message.pollResult.name,
496
- pollVotes: message.pollResult.votes.map((option) => ({
497
- optionName: option[0],
498
- optionVoteCount: option[1]
499
- })),
500
- };
501
- if ('contextInfo' in message && !!message.contextInfo) {
502
- pollResultSnapshotMessage.contextInfo = message.contextInfo;
503
- }
504
- if ('mentions' in message && !!message.mentions) {
505
- pollResultSnapshotMessage.contextInfo = { mentionedJid: message.mentions };
506
- }
507
- m.pollResultSnapshotMessage = pollResultSnapshotMessage;
508
- }
509
- else if ('event' in message) {
510
- m.messageContextInfo = {
511
- messageSecret: message.event.messageSecret || (0, crypto_1.randomBytes)(32),
512
- };
513
- m.eventMessage = { ...message.event };
514
- }
515
- else if ('inviteAdmin' in message) {
516
- m.newsletterAdminInviteMessage = {};
517
- m.newsletterAdminInviteMessage.inviteExpiration = message.inviteAdmin.inviteExpiration;
518
- m.newsletterAdminInviteMessage.caption = message.inviteAdmin.text;
519
- m.newsletterAdminInviteMessage.newsletterJid = message.inviteAdmin.jid;
520
- m.newsletterAdminInviteMessage.newsletterName = message.inviteAdmin.subject;
521
- m.newsletterAdminInviteMessage.jpegThumbnail = message.inviteAdmin.thumbnail;
522
- //TODO: use built-in interface and get disappearing mode info etc.
523
- //TODO: cache / use store!?
524
- if (options.getProfilePicUrl) {
525
- let pfpUrl;
526
- try {
527
- pfpUrl = await options.getProfilePicUrl(message.inviteAdmin.jid, 'preview');
528
- }
529
- catch (_9) {
530
- pfpUrl = null;
531
- }
532
- if (pfpUrl) {
533
- const resp = await axios_1.default.get(pfpUrl, { responseType: 'arraybuffer' });
534
- if (resp.status === 200) {
535
- m.newsletterAdminInviteMessage.jpegThumbnail = resp.data;
536
- }
537
- }
538
- else {
539
- m.newsletterAdminInviteMessage.jpegThumbnail = null;
540
- }
541
- }
542
- }
543
- else if ('requestPayment' in message) {
544
- const sticker = ((_d = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _d === void 0 ? void 0 : _d.sticker) ?
545
- 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)
546
- : null;
547
- let notes = {};
548
- if ((_f = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _f === void 0 ? void 0 : _f.sticker) {
549
- notes = {
550
- stickerMessage: {
551
- ...sticker === null || sticker === void 0 ? void 0 : sticker.stickerMessage,
552
- contextInfo: {
553
- 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,
554
- 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,
555
- quotedMessage: (_l = options === null || options === void 0 ? void 0 : options.quoted) === null || _l === void 0 ? void 0 : _l.message,
556
- ...(_m = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _m === void 0 ? void 0 : _m.contextInfo,
557
- }
558
- }
559
- };
560
- }
561
- else if (message.requestPayment.note) {
562
- notes = {
563
- extendedTextMessage: {
564
- text: message.requestPayment.note,
565
- contextInfo: {
566
- 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,
567
- 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,
568
- quotedMessage: (_s = options === null || options === void 0 ? void 0 : options.quoted) === null || _s === void 0 ? void 0 : _s.message,
569
- ...(_t = message === null || message === void 0 ? void 0 : message.requestPayment) === null || _t === void 0 ? void 0 : _t.contextInfo,
570
- }
571
- }
572
- };
573
- }
574
- m.requestPaymentMessage = Types_1.WAProto.Message.RequestPaymentMessage.fromObject({
575
- expiryTimestamp: message.requestPayment.expiry,
576
- amount1000: message.requestPayment.amount,
577
- currencyCodeIso4217: message.requestPayment.currency,
578
- requestFrom: message.requestPayment.from,
579
- noteMessage: { ...notes },
580
- background: (_u = message.requestPayment.background) !== null && _u !== void 0 ? _u : null,
581
- });
582
406
  }
583
407
  else if ('sharePhoneNumber' in message) {
584
408
  m.protocolMessage = {
@@ -610,21 +434,11 @@ const generateWAMessageContent = async (message, options) => {
610
434
  if ('footer' in message && !!message.footer) {
611
435
  buttonsMessage.footerText = message.footer;
612
436
  }
613
- if ('title' in message && !!message.title) {
614
- buttonsMessage.text = message.title,
615
- buttonsMessage.headerType = ButtonType.TEXT;
616
- }
617
- if ('contextInfo' in message && !!message.contextInfo) {
618
- buttonsMessage.contextInfo = message.contextInfo;
619
- }
620
- if ('mentions' in message && !!message.mentions) {
621
- buttonsMessage.contextInfo = { mentionedJid: message.mentions };
622
- }
623
437
  m = { buttonsMessage };
624
438
  }
625
439
  else if ('templateButtons' in message && !!message.templateButtons) {
626
440
  const msg = {
627
- hydratedButtons: message.hasOwnProperty("templateButtons") ? message.templateButtons : message.templateButtons
441
+ hydratedButtons: message.templateButtons
628
442
  };
629
443
  if ('text' in message) {
630
444
  msg.hydratedContentText = message.text;
@@ -645,230 +459,21 @@ const generateWAMessageContent = async (message, options) => {
645
459
  }
646
460
  };
647
461
  }
648
- if ('interactiveButtons' in message && !!message.interactiveButtons) {
649
- const interactiveMessage = {
650
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
651
- buttons: message.interactiveButtons,
652
- })
653
- };
654
- if ('text' in message) {
655
- body: interactiveMessage.body = {
656
- text: message.text
657
- };
658
- header: interactiveMessage.header = {
659
- title: message.title,
660
- subtitle: message.subtitle,
661
- hasMediaAttachment: (_v = message === null || message === void 0 ? void 0 : message.media) !== null && _v !== void 0 ? _v : false,
662
- };
663
- }
664
- else {
665
- if ('caption' in message) {
666
- body: interactiveMessage.body = {
667
- text: message.caption
668
- };
669
- header: interactiveMessage.header = {
670
- title: message.title,
671
- subtitle: message.subtitle,
672
- hasMediaAttachment: (_w = message === null || message === void 0 ? void 0 : message.media) !== null && _w !== void 0 ? _w : false,
673
- };
674
- Object.assign(interactiveMessage.header, m);
675
- }
676
- }
677
- if ('footer' in message && !!message.footer) {
678
- footer: interactiveMessage.footer = {
679
- text: message.footer
680
- };
681
- }
682
- if ('contextInfo' in message && !!message.contextInfo) {
683
- interactiveMessage.contextInfo = message.contextInfo;
684
- }
685
- if ('mentions' in message && !!message.mentions) {
686
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
687
- }
688
- m = { interactiveMessage };
689
- }
690
- if ('shop' in message && !!message.shop) {
691
- const interactiveMessage = {
692
- shopStorefrontMessage: Types_1.WAProto.Message.InteractiveMessage.ShopMessage.fromObject({
693
- surface: message.shop,
694
- id: message.id
695
- })
696
- };
697
- if ('text' in message) {
698
- body: interactiveMessage.body = {
699
- text: message.text
700
- };
701
- header: interactiveMessage.header = {
702
- title: message.title,
703
- subtitle: message.subtitle,
704
- hasMediaAttachment: (_x = message === null || message === void 0 ? void 0 : message.media) !== null && _x !== void 0 ? _x : false,
705
- };
706
- }
707
- else {
708
- if ('caption' in message) {
709
- body: interactiveMessage.body = {
710
- text: message.caption
711
- };
712
- header: interactiveMessage.header = {
713
- title: message.title,
714
- subtitle: message.subtitle,
715
- hasMediaAttachment: (_y = message === null || message === void 0 ? void 0 : message.media) !== null && _y !== void 0 ? _y : false,
716
- };
717
- Object.assign(interactiveMessage.header, m);
718
- }
719
- }
720
- if ('footer' in message && !!message.footer) {
721
- footer: interactiveMessage.footer = {
722
- text: message.footer
723
- };
724
- }
725
- if ('contextInfo' in message && !!message.contextInfo) {
726
- interactiveMessage.contextInfo = message.contextInfo;
727
- }
728
- if ('mentions' in message && !!message.mentions) {
729
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
730
- }
731
- m = { interactiveMessage };
732
- }
733
- if ('collection' in message && !!message.shop) {
734
- const interactiveMessage = {
735
- collectionMessage: Types_1.WAProto.Message.InteractiveMessage.CollectionMessage.fromObject({
736
- bizJid: (_z = message === null || message === void 0 ? void 0 : message.collection) === null || _z === void 0 ? void 0 : _z.bizJid,
737
- id: (_0 = message === null || message === void 0 ? void 0 : message.collection) === null || _0 === void 0 ? void 0 : _0.id,
738
- messageVersion: (_1 = message === null || message === void 0 ? void 0 : message.collection) === null || _1 === void 0 ? void 0 : _1.version
739
- })
740
- };
741
- if ('text' in message) {
742
- body: interactiveMessage.body = {
743
- text: message.text
744
- };
745
- header: interactiveMessage.header = {
746
- title: message.title,
747
- subtitle: message.subtitle,
748
- hasMediaAttachment: (_2 = message === null || message === void 0 ? void 0 : message.media) !== null && _2 !== void 0 ? _2 : false,
749
- };
750
- }
751
- else {
752
- if ('caption' in message) {
753
- body: interactiveMessage.body = {
754
- text: message.caption
755
- };
756
- header: interactiveMessage.header = {
757
- title: message.title,
758
- subtitle: message.subtitle,
759
- hasMediaAttachment: (_3 = message === null || message === void 0 ? void 0 : message.media) !== null && _3 !== void 0 ? _3 : false,
760
- };
761
- Object.assign(interactiveMessage.header, m);
762
- }
763
- }
764
- if ('footer' in message && !!message.footer) {
765
- footer: interactiveMessage.footer = {
766
- text: message.footer
767
- };
768
- }
769
- if ('contextInfo' in message && !!message.contextInfo) {
770
- interactiveMessage.contextInfo = message.contextInfo;
771
- }
772
- if ('mentions' in message && !!message.mentions) {
773
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
774
- }
775
- m = { interactiveMessage };
776
- }
777
- if ('cards' in message && !!message.cards) {
778
- const slides = await Promise.all(message.cards.map(async (slide) => {
779
- const { image, video, product, title, caption, footer, buttons } = slide;
780
- let header;
781
- if (product) {
782
- const { imageMessage } = await (0, exports.prepareWAMessageMedia)({ image: product.productImage, ...options }, options);
783
- header = {
784
- productMesage: Types_1.WAProto.Message.ProductMessage.fromObject({
785
- product: {
786
- ...product,
787
- productImage: imageMessage,
788
- },
789
- ...slide
790
- })
791
- };
792
- }
793
- else if (image) {
794
- header = await (0, exports.prepareWAMessageMedia)({ image: image, ...options }, options);
795
- }
796
- else if (video) {
797
- header = await (0, exports.prepareWAMessageMedia)({ video: video, ...options }, options);
798
- }
799
- const msg = {
800
- header: Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
801
- title,
802
- hasMediaAttachment: true,
803
- ...header
804
- }),
805
- body: Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
806
- text: caption
807
- }),
808
- footer: Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
809
- text: footer
810
- }),
811
- nativeFlowMessage: Types_1.WAProto.Message.InteractiveMessage.NativeFlowMessage.fromObject({
812
- buttons,
813
- }),
814
- };
815
- return msg;
816
- }));
817
- const interactiveMessage = {
818
- carouselMessage: Types_1.WAProto.Message.InteractiveMessage.CarouselMessage.fromObject({
819
- cards: slides
820
- })
821
- };
822
- if ('text' in message) {
823
- interactiveMessage.body = Types_1.WAProto.Message.InteractiveMessage.Body.fromObject({
824
- text: message.text
825
- });
826
- interactiveMessage.header = Types_1.WAProto.Message.InteractiveMessage.Header.fromObject({
827
- title: message.title,
828
- subtitle: message.subtitle,
829
- hasMediaAttachment: (_4 = message === null || message === void 0 ? void 0 : message.media) !== null && _4 !== void 0 ? _4 : false,
830
- });
831
- }
832
- if ('footer' in message && !!message.footer) {
833
- interactiveMessage.footer = Types_1.WAProto.Message.InteractiveMessage.Footer.fromObject({
834
- text: message.footer
835
- });
836
- }
837
- if ('contextInfo' in message && !!message.contextInfo) {
838
- interactiveMessage.contextInfo = message.contextInfo;
839
- }
840
- if ('mentions' in message && !!message.mentions) {
841
- interactiveMessage.contextInfo = { mentionedJid: message.mentions };
842
- }
843
- m = { interactiveMessage };
844
- }
845
462
  if ('sections' in message && !!message.sections) {
846
- const listMessage = WAProto_1.proto.Message.ListMessage.fromObject({
463
+ const listMessage = {
847
464
  sections: message.sections,
848
465
  buttonText: message.buttonText,
849
466
  title: message.title,
850
467
  footerText: message.footer,
851
468
  description: message.text,
852
- listType: WAProto_1.proto.Message.ListMessage.ListType.PRODUCT_LIST
853
- });
469
+ listType: WAProto_1.proto.Message.ListMessage.ListType.SINGLE_SELECT
470
+ };
854
471
  m = { listMessage };
855
472
  }
856
473
  if ('viewOnce' in message && !!message.viewOnce) {
857
474
  m = { viewOnceMessage: { message: m } };
858
475
  }
859
- if ('viewOnceV2' in message && !!message.viewOnceV2) {
860
- m = { viewOnceMessageV2: { message: m } };
861
- }
862
- if ('viewOnceV2Extension' in message && !!message.viewOnceV2Extension) {
863
- m = { viewOnceMessageV2Extension: { message: m } };
864
- }
865
- if ('ephemeral' in message && !!message.ephemeral) {
866
- m = { ephemeralMessage: { message: m } };
867
- }
868
- if ('lottie' in message && !!message.lottie) {
869
- m = { lottieStickerMessage: { message: m } };
870
- }
871
- if ('mentions' in message && ((_5 = message.mentions) === null || _5 === void 0 ? void 0 : _5.length)) {
476
+ if ('mentions' in message && ((_a = message.mentions) === null || _a === void 0 ? void 0 : _a.length)) {
872
477
  const [messageType] = Object.keys(m);
873
478
  m[messageType].contextInfo = m[messageType] || {};
874
479
  m[messageType].contextInfo.mentionedJid = message.mentions;
@@ -892,7 +497,6 @@ const generateWAMessageContent = async (message, options) => {
892
497
  };
893
498
  exports.generateWAMessageContent = generateWAMessageContent;
894
499
  const generateWAMessageFromContent = (jid, message, options) => {
895
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
896
500
  // set timestamp to now
897
501
  // if not specified
898
502
  if (!options.timestamp) {
@@ -912,16 +516,7 @@ const generateWAMessageFromContent = (jid, message, options) => {
912
516
  if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) {
913
517
  delete quotedContent.contextInfo;
914
518
  }
915
- let requestPayment;
916
- if (key === 'requestPaymentMessage') {
917
- 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)) {
918
- 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;
919
- }
920
- 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)) {
921
- requestPayment = (_k = (_j = innerMessage.requestPaymentMessage) === null || _j === void 0 ? void 0 : _j.noteMessage) === null || _k === void 0 ? void 0 : _k.stickerMessage;
922
- }
923
- }
924
- const contextInfo = (key === 'requestPaymentMessage' ? requestPayment.contextInfo : innerMessage[key].contextInfo) || {};
519
+ const contextInfo = innerMessage[key].contextInfo || {};
925
520
  contextInfo.participant = (0, WABinary_1.jidNormalizedUser)(participant);
926
521
  contextInfo.stanzaId = quoted.key.id;
927
522
  contextInfo.quotedMessage = quotedMsg;