@itsliaaa/baileys 0.2.6 → 0.3.0-rc.10

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 (283) hide show
  1. package/README.md +214 -7
  2. package/WAProto/index.d.ts +392 -2465
  3. package/WAProto/index.js +13116 -3569
  4. package/lib/Defaults/index.d.ts +8 -9
  5. package/lib/Defaults/index.d.ts.map +1 -1
  6. package/lib/Defaults/index.js +13 -14
  7. package/lib/Defaults/index.js.map +1 -1
  8. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -1
  9. package/lib/Signal/Group/ciphertext-message.js.map +1 -1
  10. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -1
  11. package/lib/Signal/Group/group-session-builder.js.map +1 -1
  12. package/lib/Signal/Group/group_cipher.d.ts.map +1 -1
  13. package/lib/Signal/Group/group_cipher.js.map +1 -1
  14. package/lib/Signal/Group/index.d.ts.map +1 -1
  15. package/lib/Signal/Group/index.js.map +1 -1
  16. package/lib/Signal/Group/keyhelper.d.ts.map +1 -1
  17. package/lib/Signal/Group/keyhelper.js.map +1 -1
  18. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -1
  19. package/lib/Signal/Group/sender-chain-key.js.map +1 -1
  20. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -1
  21. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -1
  22. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -1
  23. package/lib/Signal/Group/sender-key-message.js.map +1 -1
  24. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -1
  25. package/lib/Signal/Group/sender-key-name.js.map +1 -1
  26. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -1
  27. package/lib/Signal/Group/sender-key-record.js.map +1 -1
  28. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -1
  29. package/lib/Signal/Group/sender-key-state.js.map +1 -1
  30. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -1
  31. package/lib/Signal/Group/sender-message-key.js.map +1 -1
  32. package/lib/Signal/libsignal.d.ts +12 -0
  33. package/lib/Signal/libsignal.d.ts.map +1 -1
  34. package/lib/Signal/libsignal.js +41 -17
  35. package/lib/Signal/libsignal.js.map +1 -1
  36. package/lib/Signal/lid-mapping.d.ts +2 -2
  37. package/lib/Signal/lid-mapping.d.ts.map +1 -1
  38. package/lib/Signal/lid-mapping.js +2 -2
  39. package/lib/Signal/lid-mapping.js.map +1 -1
  40. package/lib/Socket/Client/index.d.ts.map +1 -1
  41. package/lib/Socket/Client/index.js.map +1 -1
  42. package/lib/Socket/Client/types.d.ts.map +1 -1
  43. package/lib/Socket/Client/types.js.map +1 -1
  44. package/lib/Socket/Client/websocket.d.ts.map +1 -1
  45. package/lib/Socket/Client/websocket.js.map +1 -1
  46. package/lib/Socket/business.d.ts +20 -41
  47. package/lib/Socket/business.d.ts.map +1 -1
  48. package/lib/Socket/business.js +1 -0
  49. package/lib/Socket/business.js.map +1 -1
  50. package/lib/Socket/chats.d.ts +12 -2
  51. package/lib/Socket/chats.d.ts.map +1 -1
  52. package/lib/Socket/chats.js +21 -37
  53. package/lib/Socket/chats.js.map +1 -1
  54. package/lib/Socket/communities.d.ts +22 -42
  55. package/lib/Socket/communities.d.ts.map +1 -1
  56. package/lib/Socket/communities.js +1 -0
  57. package/lib/Socket/communities.js.map +1 -1
  58. package/lib/Socket/groups.d.ts +14 -35
  59. package/lib/Socket/groups.d.ts.map +1 -1
  60. package/lib/Socket/groups.js +17 -4
  61. package/lib/Socket/groups.js.map +1 -1
  62. package/lib/Socket/index.d.ts +21 -41
  63. package/lib/Socket/index.d.ts.map +1 -1
  64. package/lib/Socket/index.js.map +1 -1
  65. package/lib/Socket/messages-recv.d.ts +19 -41
  66. package/lib/Socket/messages-recv.d.ts.map +1 -1
  67. package/lib/Socket/messages-recv.js +416 -297
  68. package/lib/Socket/messages-recv.js.map +1 -1
  69. package/lib/Socket/messages-send.d.ts +19 -35
  70. package/lib/Socket/messages-send.d.ts.map +1 -1
  71. package/lib/Socket/messages-send.js +68 -48
  72. package/lib/Socket/messages-send.js.map +1 -1
  73. package/lib/Socket/mex.d.ts.map +1 -1
  74. package/lib/Socket/mex.js.map +1 -1
  75. package/lib/Socket/newsletter.d.ts +14 -35
  76. package/lib/Socket/newsletter.d.ts.map +1 -1
  77. package/lib/Socket/newsletter.js +2 -3
  78. package/lib/Socket/newsletter.js.map +1 -1
  79. package/lib/Socket/socket.d.ts +7 -1
  80. package/lib/Socket/socket.d.ts.map +1 -1
  81. package/lib/Socket/socket.js +40 -23
  82. package/lib/Socket/socket.js.map +1 -1
  83. package/lib/Store/index.d.ts.map +1 -1
  84. package/lib/Store/index.js.map +1 -1
  85. package/lib/Store/make-in-memory-store.d.ts.map +1 -1
  86. package/lib/Store/make-in-memory-store.js.map +1 -1
  87. package/lib/Store/make-ordered-dictionary.d.ts.map +1 -1
  88. package/lib/Store/make-ordered-dictionary.js.map +1 -1
  89. package/lib/Store/object-repository.d.ts.map +1 -1
  90. package/lib/Store/object-repository.js.map +1 -1
  91. package/lib/Types/Auth.d.ts.map +1 -1
  92. package/lib/Types/Auth.js.map +1 -1
  93. package/lib/Types/Bussines.d.ts.map +1 -1
  94. package/lib/Types/Bussines.js.map +1 -1
  95. package/lib/Types/Call.d.ts.map +1 -1
  96. package/lib/Types/Call.js.map +1 -1
  97. package/lib/Types/Chat.d.ts.map +1 -1
  98. package/lib/Types/Chat.js.map +1 -1
  99. package/lib/Types/Contact.d.ts.map +1 -1
  100. package/lib/Types/Contact.js.map +1 -1
  101. package/lib/Types/Events.d.ts.map +1 -1
  102. package/lib/Types/Events.js.map +1 -1
  103. package/lib/Types/GroupMetadata.d.ts.map +1 -1
  104. package/lib/Types/GroupMetadata.js.map +1 -1
  105. package/lib/Types/Label.d.ts.map +1 -1
  106. package/lib/Types/Label.js.map +1 -1
  107. package/lib/Types/LabelAssociation.d.ts.map +1 -1
  108. package/lib/Types/LabelAssociation.js.map +1 -1
  109. package/lib/Types/Message.d.ts.map +1 -1
  110. package/lib/Types/Message.js.map +1 -1
  111. package/lib/Types/{Newsletter.d.ts → Mex.d.ts} +1 -1
  112. package/lib/Types/Mex.d.ts.map +1 -0
  113. package/lib/Types/{Newsletter.js → Mex.js} +9 -4
  114. package/lib/Types/Mex.js.map +1 -0
  115. package/lib/Types/Product.d.ts.map +1 -1
  116. package/lib/Types/Product.js.map +1 -1
  117. package/lib/Types/RichType.d.ts.map +1 -1
  118. package/lib/Types/RichType.js.map +1 -1
  119. package/lib/Types/Signal.d.ts.map +1 -1
  120. package/lib/Types/Signal.js.map +1 -1
  121. package/lib/Types/Socket.d.ts.map +1 -1
  122. package/lib/Types/Socket.js.map +1 -1
  123. package/lib/Types/State.d.ts +4 -0
  124. package/lib/Types/State.d.ts.map +1 -1
  125. package/lib/Types/State.js +43 -0
  126. package/lib/Types/State.js.map +1 -1
  127. package/lib/Types/USync.d.ts.map +1 -1
  128. package/lib/Types/USync.js.map +1 -1
  129. package/lib/Types/index.d.ts +1 -1
  130. package/lib/Types/index.d.ts.map +1 -1
  131. package/lib/Types/index.js +1 -1
  132. package/lib/Types/index.js.map +1 -1
  133. package/lib/Utils/auth-utils.d.ts +1 -0
  134. package/lib/Utils/auth-utils.d.ts.map +1 -1
  135. package/lib/Utils/auth-utils.js +12 -0
  136. package/lib/Utils/auth-utils.js.map +1 -1
  137. package/lib/Utils/browser-utils.d.ts +0 -1
  138. package/lib/Utils/browser-utils.d.ts.map +1 -1
  139. package/lib/Utils/browser-utils.js +1 -2
  140. package/lib/Utils/browser-utils.js.map +1 -1
  141. package/lib/Utils/business.d.ts.map +1 -1
  142. package/lib/Utils/business.js.map +1 -1
  143. package/lib/Utils/chat-utils.d.ts +5 -5
  144. package/lib/Utils/chat-utils.d.ts.map +1 -1
  145. package/lib/Utils/chat-utils.js +69 -36
  146. package/lib/Utils/chat-utils.js.map +1 -1
  147. package/lib/Utils/companion-reg-client-utils.d.ts +1 -12
  148. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -1
  149. package/lib/Utils/companion-reg-client-utils.js +20 -13
  150. package/lib/Utils/companion-reg-client-utils.js.map +1 -1
  151. package/lib/Utils/crypto.d.ts.map +1 -1
  152. package/lib/Utils/crypto.js.map +1 -1
  153. package/lib/Utils/decode-wa-message.d.ts +3 -1
  154. package/lib/Utils/decode-wa-message.d.ts.map +1 -1
  155. package/lib/Utils/decode-wa-message.js +17 -3
  156. package/lib/Utils/decode-wa-message.js.map +1 -1
  157. package/lib/Utils/event-buffer.d.ts.map +1 -1
  158. package/lib/Utils/event-buffer.js +30 -0
  159. package/lib/Utils/event-buffer.js.map +1 -1
  160. package/lib/Utils/generics.d.ts +1 -1
  161. package/lib/Utils/generics.d.ts.map +1 -1
  162. package/lib/Utils/generics.js +5 -5
  163. package/lib/Utils/generics.js.map +1 -1
  164. package/lib/Utils/history.d.ts +2 -0
  165. package/lib/Utils/history.d.ts.map +1 -1
  166. package/lib/Utils/history.js +1 -0
  167. package/lib/Utils/history.js.map +1 -1
  168. package/lib/Utils/identity-change-handler.d.ts.map +1 -1
  169. package/lib/Utils/identity-change-handler.js.map +1 -1
  170. package/lib/Utils/index.d.ts +1 -1
  171. package/lib/Utils/index.d.ts.map +1 -1
  172. package/lib/Utils/index.js +1 -1
  173. package/lib/Utils/index.js.map +1 -1
  174. package/lib/Utils/link-preview.d.ts.map +1 -1
  175. package/lib/Utils/link-preview.js +2 -2
  176. package/lib/Utils/link-preview.js.map +1 -1
  177. package/lib/Utils/logger.d.ts.map +1 -1
  178. package/lib/Utils/logger.js.map +1 -1
  179. package/lib/Utils/lt-hash.d.ts.map +1 -1
  180. package/lib/Utils/lt-hash.js.map +1 -1
  181. package/lib/Utils/make-mutex.d.ts.map +1 -1
  182. package/lib/Utils/make-mutex.js.map +1 -1
  183. package/lib/Utils/message-retry-manager.d.ts +4 -0
  184. package/lib/Utils/message-retry-manager.d.ts.map +1 -1
  185. package/lib/Utils/message-retry-manager.js +23 -0
  186. package/lib/Utils/message-retry-manager.js.map +1 -1
  187. package/lib/Utils/messages-media.d.ts +2 -1
  188. package/lib/Utils/messages-media.d.ts.map +1 -1
  189. package/lib/Utils/messages-media.js +19 -7
  190. package/lib/Utils/messages-media.js.map +1 -1
  191. package/lib/Utils/messages.d.ts +3 -12
  192. package/lib/Utils/messages.d.ts.map +1 -1
  193. package/lib/Utils/messages.js +210 -193
  194. package/lib/Utils/messages.js.map +1 -1
  195. package/lib/Utils/noise-handler.d.ts.map +1 -1
  196. package/lib/Utils/noise-handler.js.map +1 -1
  197. package/lib/Utils/offline-node-processor.d.ts.map +1 -1
  198. package/lib/Utils/offline-node-processor.js.map +1 -1
  199. package/lib/Utils/pre-key-manager.d.ts.map +1 -1
  200. package/lib/Utils/pre-key-manager.js.map +1 -1
  201. package/lib/Utils/process-message.d.ts.map +1 -1
  202. package/lib/Utils/process-message.js +18 -2
  203. package/lib/Utils/process-message.js.map +1 -1
  204. package/lib/Utils/reporting-utils.d.ts.map +1 -1
  205. package/lib/Utils/reporting-utils.js.map +1 -1
  206. package/lib/Utils/rich-message-utils.d.ts +8 -3
  207. package/lib/Utils/rich-message-utils.d.ts.map +1 -1
  208. package/lib/Utils/rich-message-utils.js +1 -1
  209. package/lib/Utils/rich-message-utils.js.map +1 -1
  210. package/lib/Utils/signal.d.ts +14 -1
  211. package/lib/Utils/signal.d.ts.map +1 -1
  212. package/lib/Utils/signal.js +42 -0
  213. package/lib/Utils/signal.js.map +1 -1
  214. package/lib/Utils/stanza-ack.d.ts.map +1 -1
  215. package/lib/Utils/stanza-ack.js.map +1 -1
  216. package/lib/Utils/sync-action-utils.d.ts.map +1 -1
  217. package/lib/Utils/sync-action-utils.js.map +1 -1
  218. package/lib/Utils/tc-token-utils.d.ts.map +1 -1
  219. package/lib/Utils/tc-token-utils.js +0 -1
  220. package/lib/Utils/tc-token-utils.js.map +1 -1
  221. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -1
  222. package/lib/Utils/use-multi-file-auth-state.js.map +1 -1
  223. package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -1
  224. package/lib/Utils/use-single-file-auth-state.js.map +1 -1
  225. package/lib/Utils/validate-connection.d.ts +1 -1
  226. package/lib/Utils/validate-connection.d.ts.map +1 -1
  227. package/lib/Utils/validate-connection.js +4 -8
  228. package/lib/Utils/validate-connection.js.map +1 -1
  229. package/lib/WABinary/constants.d.ts.map +1 -1
  230. package/lib/WABinary/constants.js.map +1 -1
  231. package/lib/WABinary/decode.d.ts.map +1 -1
  232. package/lib/WABinary/decode.js.map +1 -1
  233. package/lib/WABinary/encode.d.ts.map +1 -1
  234. package/lib/WABinary/encode.js.map +1 -1
  235. package/lib/WABinary/generic-utils.d.ts +1 -3
  236. package/lib/WABinary/generic-utils.d.ts.map +1 -1
  237. package/lib/WABinary/generic-utils.js +6 -7
  238. package/lib/WABinary/generic-utils.js.map +1 -1
  239. package/lib/WABinary/index.d.ts.map +1 -1
  240. package/lib/WABinary/index.js.map +1 -1
  241. package/lib/WABinary/jid-utils.d.ts.map +1 -1
  242. package/lib/WABinary/jid-utils.js.map +1 -1
  243. package/lib/WABinary/types.d.ts.map +1 -1
  244. package/lib/WABinary/types.js.map +1 -1
  245. package/lib/WAM/BinaryInfo.d.ts.map +1 -1
  246. package/lib/WAM/BinaryInfo.js.map +1 -1
  247. package/lib/WAM/constants.d.ts.map +1 -1
  248. package/lib/WAM/constants.js.map +1 -1
  249. package/lib/WAM/encode.d.ts.map +1 -1
  250. package/lib/WAM/encode.js.map +1 -1
  251. package/lib/WAM/index.d.ts.map +1 -1
  252. package/lib/WAM/index.js.map +1 -1
  253. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
  254. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
  255. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -1
  256. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -1
  257. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -1
  258. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -1
  259. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -1
  260. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -1
  261. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -1
  262. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +3 -1
  263. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -1
  264. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -1
  265. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -1
  266. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -1
  267. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -1
  268. package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
  269. package/lib/WAUSync/Protocols/index.js.map +1 -1
  270. package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
  271. package/lib/WAUSync/USyncQuery.js +1 -1
  272. package/lib/WAUSync/USyncQuery.js.map +1 -1
  273. package/lib/WAUSync/USyncUser.d.ts.map +1 -1
  274. package/lib/WAUSync/USyncUser.js.map +1 -1
  275. package/lib/WAUSync/index.d.ts.map +1 -1
  276. package/lib/WAUSync/index.js.map +1 -1
  277. package/lib/index.d.ts +1 -1
  278. package/lib/index.d.ts.map +1 -1
  279. package/lib/index.js +1 -1
  280. package/lib/index.js.map +1 -1
  281. package/package.json +34 -5
  282. package/lib/Types/Newsletter.d.ts.map +0 -1
  283. package/lib/Types/Newsletter.js.map +0 -1
@@ -20,16 +20,7 @@ export function getAggregateResponsesInEventMessage({ eventResponses }: {
20
20
  export function extractUrlFromText(text: any): any;
21
21
  export function generateLinkPreviewIfRequired(text: any, getUrlInfo: any, logger: any): Promise<any>;
22
22
  export function prepareWAMessageMedia(message: any, options: any): Promise<proto.Message>;
23
- export function prepareDisappearingMessageSettingContent(ephemeralExpiration: any): {
24
- ephemeralMessage: {
25
- message: {
26
- protocolMessage: {
27
- type: proto.Message.ProtocolMessage.Type;
28
- ephemeralExpiration: any;
29
- };
30
- };
31
- };
32
- };
23
+ export function prepareDisappearingMessageSettingContent(ephemeralExpiration: any): proto.Message;
33
24
  export function generateForwardMessageContent(message: any, forceForward: any): any;
34
25
  export function hasNonNullishProperty(message: any, key: any): boolean;
35
26
  export function hasOptionalProperty(obj: any, key: any): boolean;
@@ -38,11 +29,11 @@ export function hasValidInteractiveHeader(message: any): any;
38
29
  export function hasValidCarouselHeader(message: any): any;
39
30
  export function generateWAMessageContent(message: any, options: any): Promise<any>;
40
31
  export function generateWAMessageFromContent(jid: any, message: any, options: any): proto.WebMessageInfo;
41
- export function generateWAMessage(jid: any, content: any, options?: {}): Promise<proto.WebMessageInfo>;
32
+ export function generateWAMessage(jid: any, content: any, options: any): Promise<proto.WebMessageInfo>;
42
33
  export function getContentType(content: any): string | undefined;
43
34
  export function normalizeMessageContent(content: any): any;
44
35
  export function extractMessageContent(content: any): any;
45
- export function getDevice(id: any): "unknown" | "ios" | "web" | "android" | "desktop";
36
+ export function getDevice(id: any): "unknown" | "android" | "web" | "ios" | "desktop";
46
37
  export function updateMessageWithReceipt(msg: any, receipt: any): void;
47
38
  export function updateMessageWithReaction(msg: any, reaction: any): void;
48
39
  export function updateMessageWithPollUpdate(msg: any, update: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../lib/Utils/messages.js"],"names":[],"mappings":"AAsmDA;;;;;GAKG;AACH;;;qBAgCC;AACD;;;;;GAKG;AACH;;qBAgBC;AA1mDM,mDAA+D;AAC/D,qGAYN;AAgBM,0FAoKN;AACM;;;;;;;;;EAaN;AA4TM,oFAoCN;AACM,uEAKN;AACM,iEAKN;AAEM,sDAGN;AACM,6DAMN;AAEM,0DAIN;AACM,mFA0vBN;AACM,yGA4EN;AACM,uGAQN;AAEM,iEAMN;AAOM,2DAyCN;AAKM,yDAkCN;AAIM,sFAQoB;AAEpB,uEASN;AAEM,yEAMN;AAEM,yEAON;AAEM,4EAKN;AAgEM,gEAgBN;AAKM,oGA8CN;AAEM,sDAWN;AAkEM,8DAUN;sBA5zDqB,wBAAwB"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/Utils/messages.js"],"names":[],"mappings":"AA8mDA;;;;;GAKG;AACH;;;qBAgCC;AACD;;;;;GAKG;AACH;;qBAgBC;AAlnDM,mDAA+D;AAC/D,qGAYN;AAeM,0FAmKN;AAuTM,kGAaN;AAMM,oFAwBN;AACM,uEAKN;AACM,iEAKN;AAEM,sDAGN;AACM,6DAMN;AAEM,0DAIN;AACM,mFA+wBN;AACM,yGA4EN;AACM,uGAQN;AAEM,iEAMN;AAOM,2DA0CN;AAKM,yDAkCN;AAIM,sFAQoB;AAEpB,uEASN;AAEM,yEAMN;AAEM,yEAON;AAEM,4EAKN;AAgEM,gEAgBN;AAKM,oGA8CN;AAEM,sDAWN;AAkEM,8DAUN;sBAp0DqB,wBAAwB"}
@@ -5,7 +5,7 @@ import { promises as fs } from 'fs';
5
5
  import { proto } from '../../WAProto/index.js';
6
6
  import { CALL_AUDIO_PREFIX, CALL_VIDEO_PREFIX, DONATE_URL, LIBRARY_NAME, MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js';
7
7
  import { AssociationType, ButtonHeaderType, ButtonType, CarouselCardType, ListType, ProtocolType, WAMessageStatus, WAProto } from '../Types/index.js';
8
- import { isPnUser, isLidUser, isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js';
8
+ import { isLidUser, isPnUser, isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js';
9
9
  import { sha256 } from './crypto.js';
10
10
  import { generateMessageIDV2, getKeyAuthor, unixTimestampSeconds } from './generics.js';
11
11
  import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, getAudioWaveform, getImageProcessingLibrary, getRawMediaUploadData, getStream, toBuffer } from './messages-media.js';
@@ -82,26 +82,33 @@ const assertColor = async (color) => {
82
82
  return assertedColor;
83
83
  }
84
84
  };
85
- // Lia@Changes 21-04-26 --- Refactor prepareWAMessageMedia function
86
85
  export const prepareWAMessageMedia = async (message, options) => {
87
86
  const logger = options.logger;
88
- const mediaType = MEDIA_KEYS.find(key => key in message);
87
+ let mediaType;
88
+ for (const key of MEDIA_KEYS) {
89
+ if (key in message) {
90
+ mediaType = key;
91
+ }
92
+ }
89
93
  if (!mediaType) {
90
94
  throw new Boom('Invalid media type', { statusCode: 400 });
91
95
  }
92
- const uploadData = { ...message };
93
- const mediaPayload = uploadData[mediaType];
96
+ const uploadData = {
97
+ ...message,
98
+ media: message[mediaType]
99
+ };
94
100
  delete uploadData[mediaType];
95
101
  if (uploadData.image || uploadData.video) {
96
102
  uploadData.annotations = mediaAnnotation;
97
103
  }
98
- const cacheableKey = typeof mediaPayload === 'object' &&
99
- 'url' in mediaPayload &&
100
- !!mediaPayload.url &&
104
+ // check if cacheable + generate cache key
105
+ const cacheableKey = typeof uploadData.media === 'object' &&
106
+ 'url' in uploadData.media &&
107
+ !!uploadData.media.url &&
101
108
  !!options.mediaCache &&
102
- `${mediaType}:${mediaPayload.url}`;
109
+ mediaType + ':' + uploadData.media.url.toString();
103
110
  if (mediaType === 'document' && !uploadData.fileName) {
104
- uploadData.fileName = LIBRARY_NAME;
111
+ uploadData.fileName = 'file';
105
112
  }
106
113
  if (!uploadData.mimetype) {
107
114
  uploadData.mimetype = MIMETYPE_MAP[mediaType];
@@ -112,149 +119,133 @@ export const prepareWAMessageMedia = async (message, options) => {
112
119
  logger?.debug({ cacheableKey }, 'got media cache hit');
113
120
  const obj = proto.Message.decode(mediaBuff);
114
121
  const key = `${mediaType}Message`;
115
- Object.assign(obj[key], uploadData);
122
+ Object.assign(obj[key], { ...uploadData, media: undefined });
116
123
  return obj;
117
124
  }
118
125
  }
119
- const isNewsletter = isJidNewsletter(options.jid);
120
- const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
121
- const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData.jpegThumbnail === 'undefined';
122
- const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined';
123
- const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
124
- const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation || requiresWaveformProcessing;
125
- let mediaUrl, directPath, thumbnailDirectPath, thumbnailSha256, fileSha256, fileLength, mediaKey, fileEncSha256;
126
- // Lia@Changes 06-02-26 --- Add few support for sending media to newsletter (⁠≧⁠▽⁠≦⁠)
126
+ const isNewsletter = !!options.jid && isJidNewsletter(options.jid);
127
127
  if (isNewsletter) {
128
128
  logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter');
129
- const rawData = await getRawMediaUploadData(mediaPayload, options.mediaTypeOverride || mediaType, logger);
130
- fileSha256 = rawData.fileSha256;
131
- fileLength = rawData.fileLength;
132
- const filePath = rawData.filePath;
129
+ const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger);
133
130
  const fileSha256B64 = fileSha256.toString('base64');
134
- const [uploadResult] = await Promise.all([
135
- options.upload(filePath, {
136
- fileEncSha256B64: fileSha256B64,
137
- mediaType,
138
- timeoutMs: options.mediaUploadTimeoutMs,
139
- newsletter: true
140
- }),
141
- (async () => {
142
- try {
143
- if (requiresThumbnailComputation) {
144
- const { thumbnail } = await generateThumbnail(filePath, mediaType, options);
145
- uploadData.jpegThumbnail = thumbnail;
146
- }
147
- if (requiresDurationComputation) {
148
- uploadData.seconds = await getAudioDuration(filePath);
149
- }
150
- }
151
- catch (error) {
152
- logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
153
- }
154
- })()
155
- ]);
156
- // todo: add more support here
157
- mediaUrl = uploadResult.mediaUrl;
158
- directPath = uploadResult.directPath;
159
- thumbnailDirectPath = uploadResult.thumbnailDirectPath;
160
- thumbnailSha256 = uploadResult.thumbnailSha256;
161
- fs.unlink(filePath).catch(() => logger?.warn('failed to remove tmp file'));
162
- }
163
- else {
164
- const encryptedData = await encryptedStream(mediaPayload, options.mediaTypeOverride || mediaType, {
165
- logger,
166
- saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
167
- opts: options.options
131
+ const { mediaUrl, directPath, thumbnailDirectPath, thumbnailSha256 } = await options.upload(filePath, {
132
+ fileEncSha256B64: fileSha256B64,
133
+ mediaType: mediaType,
134
+ timeoutMs: options.mediaUploadTimeoutMs,
135
+ newsletter: isNewsletter
136
+ });
137
+ await fs.unlink(filePath);
138
+ const obj = WAProto.Message.fromObject({
139
+ // todo: add more support here
140
+ [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
141
+ url: mediaUrl,
142
+ directPath,
143
+ fileSha256,
144
+ fileLength,
145
+ thumbnailDirectPath,
146
+ thumbnailSha256,
147
+ ...uploadData,
148
+ media: undefined
149
+ })
168
150
  });
169
- mediaKey = encryptedData.mediaKey;
170
- fileEncSha256 = encryptedData.fileEncSha256;
171
- fileSha256 = encryptedData.fileSha256;
172
- fileLength = encryptedData.fileLength;
173
- const encFilePath = encryptedData.encFilePath;
174
- const originalFilePath = encryptedData.originalFilePath;
175
- const fileEncSha256B64 = fileEncSha256.toString('base64');
176
- const [uploadResult] = await Promise.all([
177
- options.upload(encFilePath, {
151
+ if (uploadData.ptv) {
152
+ obj.ptvMessage = obj.videoMessage;
153
+ delete obj.videoMessage;
154
+ }
155
+ if (obj.stickerMessage) {
156
+ obj.stickerMessage.stickerSentTs = Date.now();
157
+ }
158
+ if (cacheableKey) {
159
+ logger?.debug({ cacheableKey }, 'set cache');
160
+ await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
161
+ }
162
+ return obj;
163
+ }
164
+ const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined';
165
+ const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined';
166
+ const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined';
167
+ const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true;
168
+ const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation;
169
+ const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, {
170
+ logger,
171
+ saveOriginalFileIfRequired: requiresOriginalForSomeProcessing,
172
+ opts: options.options
173
+ });
174
+ const fileEncSha256B64 = fileEncSha256.toString('base64');
175
+ const [{ mediaUrl, directPath }] = await Promise.all([
176
+ (async () => {
177
+ const result = await options.upload(encFilePath, {
178
178
  fileEncSha256B64,
179
179
  mediaType,
180
180
  timeoutMs: options.mediaUploadTimeoutMs
181
- }),
182
- (async () => {
183
- try {
184
- if (requiresThumbnailComputation) {
185
- const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
186
- uploadData.jpegThumbnail = thumbnail;
187
- if (!uploadData.width && originalImageDimensions) {
188
- uploadData.width = originalImageDimensions.width;
189
- uploadData.height = originalImageDimensions.height;
190
- }
191
- }
192
- if (requiresDurationComputation) {
193
- uploadData.seconds = await getAudioDuration(originalFilePath);
194
- }
195
- if (requiresWaveformProcessing) {
196
- uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
197
- }
198
- if (requiresAudioBackground) {
199
- uploadData.backgroundArgb = await assertColor(options.backgroundColor);
181
+ });
182
+ logger?.debug({ mediaType, cacheableKey }, 'uploaded media');
183
+ return result;
184
+ })(),
185
+ (async () => {
186
+ try {
187
+ if (requiresThumbnailComputation) {
188
+ const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options);
189
+ uploadData.jpegThumbnail = thumbnail;
190
+ if (!uploadData.width && originalImageDimensions) {
191
+ uploadData.width = originalImageDimensions.width;
192
+ uploadData.height = originalImageDimensions.height;
193
+ logger?.debug('set dimensions');
200
194
  }
195
+ logger?.debug('generated thumbnail');
201
196
  }
202
- catch (error) {
203
- logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
197
+ if (requiresDurationComputation) {
198
+ uploadData.seconds = await getAudioDuration(originalFilePath);
199
+ logger?.debug('computed audio duration');
204
200
  }
205
- })()
206
- ]);
207
- mediaUrl = uploadResult.mediaUrl;
208
- directPath = uploadResult.directPath;
209
- fs.unlink(encFilePath).catch(() => logger?.warn('failed to remove tmp file'));
210
- fs.unlink(originalFilePath).catch(() => logger?.warn('failed to remove tmp file'));
211
- }
212
- const messagePayload = {
213
- url: mediaUrl,
214
- directPath,
215
- fileSha256,
216
- fileLength,
217
- ...uploadData
218
- };
219
- if (isNewsletter) {
220
- messagePayload.thumbnailDirectPath = thumbnailDirectPath;
221
- messagePayload.thumbnailSha256 = thumbnailSha256;
222
- }
223
- else {
224
- messagePayload.mediaKey = mediaKey;
225
- messagePayload.fileEncSha256 = fileEncSha256;
226
- messagePayload.mediaKeyTimestamp = unixTimestampSeconds();
227
- }
228
- const obj = proto.Message.create({
229
- [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject(messagePayload)
201
+ if (requiresWaveformProcessing) {
202
+ uploadData.waveform = await getAudioWaveform(originalFilePath, logger);
203
+ logger?.debug('processed waveform');
204
+ }
205
+ if (requiresAudioBackground) {
206
+ uploadData.backgroundArgb = await assertColor(options.backgroundColor);
207
+ logger?.debug('computed backgroundColor audio status');
208
+ }
209
+ }
210
+ catch (error) {
211
+ logger?.warn({ trace: error.stack }, 'failed to obtain extra info');
212
+ }
213
+ })()
214
+ ]).finally(async () => {
215
+ try {
216
+ await fs.unlink(encFilePath);
217
+ if (originalFilePath) {
218
+ await fs.unlink(originalFilePath);
219
+ }
220
+ logger?.debug('removed tmp files');
221
+ }
222
+ catch (error) {
223
+ logger?.warn('failed to remove tmp file');
224
+ }
225
+ });
226
+ const obj = WAProto.Message.fromObject({
227
+ [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({
228
+ url: mediaUrl,
229
+ directPath,
230
+ mediaKey,
231
+ fileEncSha256,
232
+ fileSha256,
233
+ fileLength,
234
+ mediaKeyTimestamp: unixTimestampSeconds(),
235
+ ...uploadData,
236
+ media: undefined
237
+ })
230
238
  });
231
239
  if (uploadData.ptv) {
232
240
  obj.ptvMessage = obj.videoMessage;
233
241
  delete obj.videoMessage;
234
242
  }
235
- if (obj.stickerMessage) {
236
- obj.stickerMessage.stickerSentTs = Date.now();
237
- }
238
243
  if (cacheableKey) {
239
- logger?.debug({ cacheableKey }, 'set cache (background)');
240
- options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
244
+ logger?.debug({ cacheableKey }, 'set cache');
245
+ await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish());
241
246
  }
242
247
  return obj;
243
248
  };
244
- export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
245
- ephemeralExpiration = ephemeralExpiration || 0;
246
- const content = {
247
- ephemeralMessage: {
248
- message: {
249
- protocolMessage: {
250
- type: ProtocolType.EPHEMERAL_SETTING,
251
- ephemeralExpiration
252
- }
253
- }
254
- }
255
- };
256
- return content;
257
- };
258
249
  // Lia@Changes 31-01-26 --- Extract product message into a standalone function so it can also be reused as the header for interactive messages
259
250
  const prepareProductMessage = async (message, options) => {
260
251
  if (!message.businessOwnerJid) {
@@ -559,8 +550,22 @@ const prepareNativeFlowButtons = (message) => {
559
550
  return button;
560
551
  }),
561
552
  messageParamsJson: JSON.stringify(messageParamsJson),
562
- messageVersion: 1
553
+ messageVersion: 3
554
+ };
555
+ };
556
+ export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => {
557
+ ephemeralExpiration = ephemeralExpiration || 0;
558
+ const content = {
559
+ ephemeralMessage: {
560
+ message: {
561
+ protocolMessage: {
562
+ type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,
563
+ ephemeralExpiration
564
+ }
565
+ }
566
+ }
563
567
  };
568
+ return WAProto.Message.fromObject(content);
564
569
  };
565
570
  /**
566
571
  * Generate forwarded message content like WA does
@@ -568,7 +573,7 @@ const prepareNativeFlowButtons = (message) => {
568
573
  * @param options.forceForward will show the message as forwarded even if it is from you
569
574
  */
570
575
  export const generateForwardMessageContent = (message, forceForward) => {
571
- let content = message.message || message;
576
+ let content = message.message;
572
577
  if (!content) {
573
578
  throw new Boom('no content in message', { statusCode: 400 });
574
579
  }
@@ -584,24 +589,12 @@ export const generateForwardMessageContent = (message, forceForward) => {
584
589
  key = 'extendedTextMessage';
585
590
  }
586
591
  const key_ = content?.[key];
587
- const contextInfo = {};
588
592
  if (score > 0) {
589
- contextInfo.forwardingScore = score;
590
- contextInfo.isForwarded = true;
591
- }
592
- // when forwarding a newsletter/channel message, add the newsletter context
593
- // so the server knows where to find the original media
594
- const remoteJid = message.key?.remoteJid;
595
- if (remoteJid && isJidNewsletter(remoteJid)) {
596
- contextInfo.forwardedNewsletterMessageInfo = {
597
- newsletterJid: remoteJid,
598
- serverMessageId: message.key?.server_id ? parseInt(message.key.server_id) : null,
599
- newsletterName: null
600
- };
601
- // strip messageContextInfo (contains messageSecret etc.) as WA Web does
602
- delete content.messageContextInfo;
593
+ key_.contextInfo = { forwardingScore: score, isForwarded: true };
594
+ }
595
+ else {
596
+ key_.contextInfo = {};
603
597
  }
604
- key_.contextInfo = contextInfo;
605
598
  return content;
606
599
  };
607
600
  export const hasNonNullishProperty = (message, key) => {
@@ -676,8 +669,11 @@ export const generateWAMessageContent = async (message, options) => {
676
669
  }
677
670
  }
678
671
  const faviconData = message.favicon;
679
- if (faviconData) {
680
- const { imageMessage } = await prepareWAMessageMedia({ image: faviconData, mimetype: 'image/png' }, options);
672
+ if (faviconData && typeof options?.upload === 'function') {
673
+ const { imageMessage } = await prepareWAMessageMedia({
674
+ image: faviconData,
675
+ mimetype: 'image/png'
676
+ }, options);
681
677
  extContent.faviconMMSMetadata = {
682
678
  thumbnailDirectPath: imageMessage.directPath,
683
679
  mediaKey: imageMessage.mediaKey,
@@ -702,25 +698,25 @@ export const generateWAMessageContent = async (message, options) => {
702
698
  throw new Boom('require atleast 1 contact', { statusCode: 400 });
703
699
  }
704
700
  if (contactLen === 1) {
705
- m.contactMessage = message.contacts.contacts[0];
701
+ m.contactMessage = WAProto.Message.ContactMessage.create(message.contacts.contacts[0]);
706
702
  }
707
703
  else {
708
- m.contactsArrayMessage = message.contacts;
704
+ m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.create(message.contacts);
709
705
  }
710
706
  }
711
707
  else if (hasNonNullishProperty(message, 'location')) {
712
- m.locationMessage = message.location;
708
+ m.locationMessage = WAProto.Message.LocationMessage.create(message.location);
713
709
  }
714
710
  else if (hasNonNullishProperty(message, 'react')) {
715
711
  if (!message.react.senderTimestampMs) {
716
712
  message.react.senderTimestampMs = Date.now();
717
713
  }
718
- m.reactionMessage = message.react;
714
+ m.reactionMessage = WAProto.Message.ReactionMessage.create(message.react);
719
715
  }
720
716
  else if (hasNonNullishProperty(message, 'delete')) {
721
717
  m.protocolMessage = {
722
718
  key: message.delete,
723
- type: ProtocolType.REVOKE
719
+ type: WAProto.Message.ProtocolMessage.Type.REVOKE
724
720
  };
725
721
  }
726
722
  else if (hasNonNullishProperty(message, 'forward')) {
@@ -922,25 +918,6 @@ export const generateWAMessageContent = async (message, options) => {
922
918
  vote: message.pollUpdate.vote
923
919
  };
924
920
  }
925
- else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
926
- m.protocolMessage = {
927
- type: ProtocolType.SHARE_PHONE_NUMBER
928
- };
929
- }
930
- else if (hasNonNullishProperty(message, 'requestPhoneNumber')) {
931
- m.requestPhoneNumberMessage = {};
932
- }
933
- else if (hasNonNullishProperty(message, 'limitSharing')) {
934
- m.protocolMessage = {
935
- type: ProtocolType.LIMIT_SHARING,
936
- limitSharing: {
937
- sharingLimited: message.limitSharing === true,
938
- trigger: 1,
939
- limitSharingSettingTimestamp: Date.now(),
940
- initiatedByMe: true
941
- }
942
- };
943
- }
944
921
  // Lia@Changes 01-02-26 --- Add payment invite message
945
922
  else if (hasNonNullishProperty(message, 'paymentInviteServiceType')) {
946
923
  m.paymentInviteMessage = {
@@ -992,6 +969,25 @@ export const generateWAMessageContent = async (message, options) => {
992
969
  expectedVideoCount: videoCount
993
970
  };
994
971
  }
972
+ else if (hasNonNullishProperty(message, 'sharePhoneNumber')) {
973
+ m.protocolMessage = {
974
+ type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER
975
+ };
976
+ }
977
+ else if (hasNonNullishProperty(message, 'requestPhoneNumber')) {
978
+ m.requestPhoneNumberMessage = {};
979
+ }
980
+ else if (hasNonNullishProperty(message, 'limitSharing')) {
981
+ m.protocolMessage = {
982
+ type: proto.Message.ProtocolMessage.Type.LIMIT_SHARING,
983
+ limitSharing: {
984
+ sharingLimited: message.limitSharing === true,
985
+ trigger: 1,
986
+ limitSharingSettingTimestamp: Date.now(),
987
+ initiatedByMe: true
988
+ }
989
+ };
990
+ }
995
991
  else {
996
992
  m = await prepareWAMessageMedia(message, options);
997
993
  }
@@ -1155,11 +1151,11 @@ export const generateWAMessageContent = async (message, options) => {
1155
1151
  Object.assign(interactiveMessage.header, m);
1156
1152
  }
1157
1153
  if (hasOptionalProperty(message, 'audioFooter')) {
1158
- const parseFooter = await prepareWAMessageMedia({
1154
+ const { audioMessage } = await prepareWAMessageMedia({
1159
1155
  audio: message.audioFooter
1160
1156
  }, options);
1161
1157
  interactiveMessage.footer = {
1162
- audioMessage: parseFooter.audioMessage,
1158
+ audioMessage,
1163
1159
  hasMediaAttachment: true
1164
1160
  };
1165
1161
  }
@@ -1204,11 +1200,11 @@ export const generateWAMessageContent = async (message, options) => {
1204
1200
  Object.assign(carouselCard.header, carouselHeader);
1205
1201
  }
1206
1202
  if (hasOptionalProperty(card, 'audioFooter')) {
1207
- const parseFooter = await prepareWAMessageMedia({
1203
+ const { audioMessage } = await prepareWAMessageMedia({
1208
1204
  audio: card.audioFooter
1209
1205
  }, options);
1210
1206
  carouselCard.footer = {
1211
- audioMessage: parseFooter.audioMessage,
1207
+ audioMessage,
1212
1208
  hasMediaAttachment: true
1213
1209
  };
1214
1210
  }
@@ -1315,18 +1311,21 @@ export const generateWAMessageContent = async (message, options) => {
1315
1311
  (hasOptionalProperty(message, 'mentionAll') && message.mentionAll)) {
1316
1312
  const messageType = Object.keys(m)[0];
1317
1313
  const key = m[messageType];
1318
- if ('contextInfo' in key && !!key.contextInfo) {
1319
- key.contextInfo.mentionedJid = message.mentions || [];
1314
+ if (key && 'contextInfo' in key) {
1315
+ key.contextInfo = key.contextInfo || {};
1316
+ if (message.mentions?.length) {
1317
+ key.contextInfo.mentionedJid = message.mentions;
1318
+ }
1319
+ if (message.mentionAll) {
1320
+ key.contextInfo.nonJidMentions = 1;
1321
+ }
1320
1322
  }
1321
1323
  else if (key) {
1322
1324
  key.contextInfo = {
1323
- mentionedJid: message.mentions || []
1325
+ mentionedJid: message.mentions,
1326
+ nonJidMentions: message.mentionAll ? 1 : 0
1324
1327
  };
1325
1328
  }
1326
- if (message.mentionAll) {
1327
- key.contextInfo.mentionedJid = [];
1328
- key.contextInfo.nonJidMentions = 1;
1329
- }
1330
1329
  }
1331
1330
  if (hasOptionalProperty(message, 'contextInfo') && !!message.contextInfo) {
1332
1331
  const messageType = Object.keys(m)[0];
@@ -1353,6 +1352,21 @@ export const generateWAMessageContent = async (message, options) => {
1353
1352
  m = { groupStatusMessageV2: { message: m } };
1354
1353
  delete message.groupStatus;
1355
1354
  }
1355
+ // Lia@Changes 06-05-26 --- Add "spoiler" boolean to set contextInfo.isSpoiler and wrap message into spoilerMessage
1356
+ if (hasOptionalProperty(message, 'spoiler') && !!message.spoiler) {
1357
+ const messageType = Object.keys(m)[0];
1358
+ const key = m[messageType];
1359
+ if ('contextInfo' in key && !!key.contextInfo) {
1360
+ key.contextInfo.isSpoiler = message.spoiler;
1361
+ }
1362
+ else if (key) {
1363
+ key.contextInfo = {
1364
+ isSpoiler: message.spoiler
1365
+ };
1366
+ }
1367
+ m = { spoilerMessage: { message: m } };
1368
+ delete message.spoiler;
1369
+ }
1356
1370
  // Lia@Changes 02-02-26 --- Add "interactiveAsTemplate" boolean to wrap interactiveMessage into templateMessage
1357
1371
  else if (hasOptionalProperty(message, 'interactiveAsTemplate') && !!message.interactiveAsTemplate) {
1358
1372
  if (!m.interactiveMessage) {
@@ -1390,7 +1404,7 @@ export const generateWAMessageContent = async (message, options) => {
1390
1404
  key: message.edit,
1391
1405
  editedMessage: m,
1392
1406
  timestampMs: Date.now(),
1393
- type: ProtocolType.MESSAGE_EDIT
1407
+ type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
1394
1408
  }
1395
1409
  };
1396
1410
  }
@@ -1400,16 +1414,16 @@ export const generateWAMessageContent = async (message, options) => {
1400
1414
  m.messageContextInfo.messageSecret = randomBytes(32);
1401
1415
  }
1402
1416
  }
1403
- return proto.Message.create(m);
1417
+ return WAProto.Message.create(m);
1404
1418
  };
1405
1419
  export const generateWAMessageFromContent = (jid, message, options) => {
1406
1420
  // set timestamp to now
1407
1421
  // if not specified
1408
1422
  if (!options.timestamp) {
1409
- options.timestamp = Date.now();
1423
+ options.timestamp = new Date();
1410
1424
  }
1411
- const messageContextInfo = message.messageContextInfo;
1412
1425
  const innerMessage = normalizeMessageContent(message);
1426
+ const messageContextInfo = message.messageContextInfo;
1413
1427
  const key = getContentType(innerMessage);
1414
1428
  const timestamp = unixTimestampSeconds(options.timestamp);
1415
1429
  const isNewsletter = isJidNewsletter(jid);
@@ -1464,7 +1478,7 @@ export const generateWAMessageFromContent = (jid, message, options) => {
1464
1478
  };
1465
1479
  messageContextInfo.deviceListMetadataVersion = 2;
1466
1480
  }
1467
- message = proto.Message.create(message);
1481
+ message = WAProto.Message.create(message);
1468
1482
  const messageJSON = {
1469
1483
  key: {
1470
1484
  remoteJid: jid,
@@ -1479,11 +1493,11 @@ export const generateWAMessageFromContent = (jid, message, options) => {
1479
1493
  };
1480
1494
  return WAProto.WebMessageInfo.fromObject(messageJSON);
1481
1495
  };
1482
- export const generateWAMessage = async (jid, content, options = {}) => {
1496
+ export const generateWAMessage = async (jid, content, options) => {
1483
1497
  // ensure msg ID is with every log
1484
1498
  options.logger = options?.logger?.child({ msgId: options.messageId });
1485
1499
  // Pass jid in the options to generateWAMessageContent
1486
- if (jid && typeof options === 'object') {
1500
+ if (jid) {
1487
1501
  options.jid = jid;
1488
1502
  }
1489
1503
  return generateWAMessageFromContent(jid, await generateWAMessageContent(content, options), options);
@@ -1531,10 +1545,13 @@ export const normalizeMessageContent = (content) => {
1531
1545
  message?.groupStatusMessageV2 ||
1532
1546
  message?.limitSharingMessage ||
1533
1547
  message?.lottieStickerMessage ||
1548
+ message?.newsletterAdminProfileMessage ||
1549
+ message?.newsletterAdminProfileMessageV2 ||
1534
1550
  message?.pollCreationMessageV4 ||
1535
1551
  message?.pollCreationOptionImageMessage ||
1536
1552
  message?.questionMessage ||
1537
1553
  message?.questionReplyMessage ||
1554
+ message?.spoilerMessage ||
1538
1555
  message?.statusAddYours ||
1539
1556
  message?.statusMentionMessage ||
1540
1557
  message?.viewOnceMessage ||