@fer2809fl/baileys 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +424 -0
  3. package/WAProto/GenerateStatics.sh +4 -0
  4. package/WAProto/WAProto.proto +4775 -0
  5. package/WAProto/index.d.ts +55057 -0
  6. package/WAProto/index.js +169661 -0
  7. package/WAProto/index.ts.ts +53473 -0
  8. package/WAProto/n +1 -0
  9. package/lib/Defaults/baileys-version.json +3 -0
  10. package/lib/Defaults/index.d.ts +62 -0
  11. package/lib/Defaults/index.js +117 -0
  12. package/lib/Defaults/n +1 -0
  13. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  14. package/lib/Signal/Group/ciphertext-message.js +15 -0
  15. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  16. package/lib/Signal/Group/group-session-builder.js +64 -0
  17. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  18. package/lib/Signal/Group/group_cipher.js +96 -0
  19. package/lib/Signal/Group/index.d.ts +11 -0
  20. package/lib/Signal/Group/index.js +57 -0
  21. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  22. package/lib/Signal/Group/keyhelper.js +55 -0
  23. package/lib/Signal/Group/queue-job.d.ts +1 -0
  24. package/lib/Signal/Group/queue-job.js +57 -0
  25. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  26. package/lib/Signal/Group/sender-chain-key.js +34 -0
  27. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  28. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  29. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  30. package/lib/Signal/Group/sender-key-message.js +69 -0
  31. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  32. package/lib/Signal/Group/sender-key-name.js +51 -0
  33. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  34. package/lib/Signal/Group/sender-key-record.js +53 -0
  35. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  36. package/lib/Signal/Group/sender-key-state.js +99 -0
  37. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  38. package/lib/Signal/Group/sender-message-key.js +29 -0
  39. package/lib/Signal/libsignal.d.ts +3 -0
  40. package/lib/Signal/libsignal.js +174 -0
  41. package/lib/Signal/n +1 -0
  42. package/lib/Socket/Client/index.d.ts +2 -0
  43. package/lib/Socket/Client/index.js +18 -0
  44. package/lib/Socket/Client/n +1 -0
  45. package/lib/Socket/Client/types.d.ts +16 -0
  46. package/lib/Socket/Client/types.js +13 -0
  47. package/lib/Socket/Client/websocket.d.ts +13 -0
  48. package/lib/Socket/Client/websocket.js +111 -0
  49. package/lib/Socket/business.d.ts +172 -0
  50. package/lib/Socket/business.js +260 -0
  51. package/lib/Socket/chats.d.ts +82 -0
  52. package/lib/Socket/chats.js +871 -0
  53. package/lib/Socket/groups.d.ts +124 -0
  54. package/lib/Socket/groups.js +332 -0
  55. package/lib/Socket/index.d.ts +172 -0
  56. package/lib/Socket/index.js +10 -0
  57. package/lib/Socket/messages-recv.d.ts +161 -0
  58. package/lib/Socket/messages-recv.js +1054 -0
  59. package/lib/Socket/messages-send.d.ts +151 -0
  60. package/lib/Socket/messages-send.js +1057 -0
  61. package/lib/Socket/n +1 -0
  62. package/lib/Socket/newsletter.d.ts +136 -0
  63. package/lib/Socket/newsletter.js +268 -0
  64. package/lib/Socket/setup.js +480 -0
  65. package/lib/Socket/setup.ts +622 -0
  66. package/lib/Socket/socket.d.ts +270 -0
  67. package/lib/Socket/socket.js +534 -0
  68. package/lib/Socket/usync.d.ts +36 -0
  69. package/lib/Socket/usync.js +70 -0
  70. package/lib/Store/index.d.ts +2 -0
  71. package/lib/Store/index.js +8 -0
  72. package/lib/Store/make-in-memory-store.d.ts +118 -0
  73. package/lib/Store/make-in-memory-store.js +439 -0
  74. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  75. package/lib/Store/make-ordered-dictionary.js +81 -0
  76. package/lib/Store/n +1 -0
  77. package/lib/Store/object-repository.d.ts +10 -0
  78. package/lib/Store/object-repository.js +27 -0
  79. package/lib/Types/Auth.d.ts +103 -0
  80. package/lib/Types/Auth.js +2 -0
  81. package/lib/Types/Call.d.ts +13 -0
  82. package/lib/Types/Call.js +2 -0
  83. package/lib/Types/Chat.d.ts +109 -0
  84. package/lib/Types/Chat.js +4 -0
  85. package/lib/Types/Contact.d.ts +23 -0
  86. package/lib/Types/Contact.js +2 -0
  87. package/lib/Types/Events.d.ts +199 -0
  88. package/lib/Types/Events.js +2 -0
  89. package/lib/Types/GroupMetadata.d.ts +64 -0
  90. package/lib/Types/GroupMetadata.js +2 -0
  91. package/lib/Types/Label.d.ts +35 -0
  92. package/lib/Types/Label.js +27 -0
  93. package/lib/Types/LabelAssociation.d.ts +29 -0
  94. package/lib/Types/LabelAssociation.js +9 -0
  95. package/lib/Types/Message.d.ts +400 -0
  96. package/lib/Types/Message.js +7 -0
  97. package/lib/Types/Newsletter.d.ts +79 -0
  98. package/lib/Types/Newsletter.js +18 -0
  99. package/lib/Types/Product.d.ts +78 -0
  100. package/lib/Types/Product.js +2 -0
  101. package/lib/Types/Signal.d.ts +57 -0
  102. package/lib/Types/Signal.js +2 -0
  103. package/lib/Types/Socket.d.ts +119 -0
  104. package/lib/Types/Socket.js +2 -0
  105. package/lib/Types/State.d.ts +27 -0
  106. package/lib/Types/State.js +2 -0
  107. package/lib/Types/USync.d.ts +25 -0
  108. package/lib/Types/USync.js +2 -0
  109. package/lib/Types/index.d.ts +64 -0
  110. package/lib/Types/index.js +42 -0
  111. package/lib/Types/n +1 -0
  112. package/lib/Utils/auth-utils.d.ts +18 -0
  113. package/lib/Utils/auth-utils.js +199 -0
  114. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  115. package/lib/Utils/baileys-event-stream.js +63 -0
  116. package/lib/Utils/business.d.ts +22 -0
  117. package/lib/Utils/business.js +234 -0
  118. package/lib/Utils/chat-utils.d.ts +70 -0
  119. package/lib/Utils/chat-utils.js +730 -0
  120. package/lib/Utils/crypto.d.ts +40 -0
  121. package/lib/Utils/crypto.js +193 -0
  122. package/lib/Utils/decode-wa-message.d.ts +35 -0
  123. package/lib/Utils/decode-wa-message.js +207 -0
  124. package/lib/Utils/event-buffer.d.ts +35 -0
  125. package/lib/Utils/event-buffer.js +518 -0
  126. package/lib/Utils/generics.d.ts +89 -0
  127. package/lib/Utils/generics.js +441 -0
  128. package/lib/Utils/history.d.ts +19 -0
  129. package/lib/Utils/history.js +94 -0
  130. package/lib/Utils/index.d.ts +17 -0
  131. package/lib/Utils/index.js +33 -0
  132. package/lib/Utils/link-preview.d.ts +21 -0
  133. package/lib/Utils/link-preview.js +126 -0
  134. package/lib/Utils/logger.d.ts +11 -0
  135. package/lib/Utils/logger.js +10 -0
  136. package/lib/Utils/lt-hash.d.ts +12 -0
  137. package/lib/Utils/lt-hash.js +51 -0
  138. package/lib/Utils/make-mutex.d.ts +7 -0
  139. package/lib/Utils/make-mutex.js +43 -0
  140. package/lib/Utils/messages-media.d.ts +120 -0
  141. package/lib/Utils/messages-media.js +980 -0
  142. package/lib/Utils/messages.d.ts +80 -0
  143. package/lib/Utils/messages.js +1101 -0
  144. package/lib/Utils/n +1 -0
  145. package/lib/Utils/noise-handler.d.ts +19 -0
  146. package/lib/Utils/noise-handler.js +150 -0
  147. package/lib/Utils/process-message.d.ts +42 -0
  148. package/lib/Utils/process-message.js +404 -0
  149. package/lib/Utils/signal.d.ts +33 -0
  150. package/lib/Utils/signal.js +153 -0
  151. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  152. package/lib/Utils/use-multi-file-auth-state.js +125 -0
  153. package/lib/Utils/validate-connection.d.ts +10 -0
  154. package/lib/Utils/validate-connection.js +229 -0
  155. package/lib/WABinary/constants.d.ts +27 -0
  156. package/lib/WABinary/constants.js +1303 -0
  157. package/lib/WABinary/decode.d.ts +6 -0
  158. package/lib/WABinary/decode.js +265 -0
  159. package/lib/WABinary/encode.d.ts +2 -0
  160. package/lib/WABinary/encode.js +250 -0
  161. package/lib/WABinary/generic-utils.d.ts +14 -0
  162. package/lib/WABinary/generic-utils.js +110 -0
  163. package/lib/WABinary/index.d.ts +5 -0
  164. package/lib/WABinary/index.js +21 -0
  165. package/lib/WABinary/jid-utils.d.ts +37 -0
  166. package/lib/WABinary/jid-utils.js +85 -0
  167. package/lib/WABinary/jid-utils.js.bak +83 -0
  168. package/lib/WABinary/n +1 -0
  169. package/lib/WABinary/types.d.ts +18 -0
  170. package/lib/WABinary/types.js +2 -0
  171. package/lib/WAM/BinaryInfo.d.ts +8 -0
  172. package/lib/WAM/BinaryInfo.js +13 -0
  173. package/lib/WAM/constants.d.ts +38 -0
  174. package/lib/WAM/constants.js +15350 -0
  175. package/lib/WAM/encode.d.ts +2 -0
  176. package/lib/WAM/encode.js +155 -0
  177. package/lib/WAM/index.d.ts +3 -0
  178. package/lib/WAM/index.js +19 -0
  179. package/lib/WAM/n +1 -0
  180. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  181. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  182. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  183. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  184. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  185. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  186. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  187. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  188. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  189. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
  190. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  191. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  192. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  193. package/lib/WAUSync/Protocols/index.js +20 -0
  194. package/lib/WAUSync/Protocols/n +1 -0
  195. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  196. package/lib/WAUSync/USyncQuery.js +89 -0
  197. package/lib/WAUSync/USyncUser.d.ts +12 -0
  198. package/lib/WAUSync/USyncUser.js +26 -0
  199. package/lib/WAUSync/index.d.ts +3 -0
  200. package/lib/WAUSync/index.js +19 -0
  201. package/lib/WAUSync/n +1 -0
  202. package/lib/index.d.ts +16 -0
  203. package/lib/index.js +48 -0
  204. package/lib/n +1 -0
  205. package/package.json +103 -0
@@ -0,0 +1,622 @@
1
+ const WAProto = require('../../WAProto').proto;
2
+ const crypto = require('crypto');
3
+ const Utils_1 = require("../Utils");
4
+
5
+ class yaoii {
6
+ constructor(utils, waUploadToServer, relayMessageFn) {
7
+ this.utils = utils;
8
+ this.relayMessage = relayMessageFn
9
+ this.waUploadToServer = waUploadToServer;
10
+ this.bail = {
11
+ generateWAMessageContent: this.utils.generateWAMessageContent || Utils_1.generateWAMessageContent,
12
+ generateMessageID: Utils_1.generateMessageID,
13
+ getContentType: (msg) => Object.keys(msg.message || {})[0]
14
+ };
15
+ }
16
+
17
+ detectType(content) {
18
+ if (content.requestPaymentMessage) return 'PAYMENT';
19
+ if (content.productMessage) return 'PRODUCT';
20
+ if (content.interactiveMessage) return 'INTERACTIVE';
21
+ if (content.albumMessage) return 'ALBUM';
22
+ if (content.eventMessage) return 'EVENT';
23
+ if (content.pollResultMessage) return 'POLL_RESULT';
24
+ if (content.listMessage) return 'LIST';
25
+ if (content.groupStatusMessage) return 'GROUP_STORY';
26
+ if (content.groupStoryMessage) return 'GROUP_STORY';
27
+ return null;
28
+ }
29
+
30
+ async handlePayment(content, quoted) {
31
+ const data = content.requestPaymentMessage;
32
+ let notes = {};
33
+
34
+ if (data.sticker?.stickerMessage) {
35
+ notes = {
36
+ stickerMessage: {
37
+ ...data.sticker.stickerMessage,
38
+ contextInfo: {
39
+ stanzaId: quoted?.key?.id,
40
+ participant: quoted?.key?.participant || content.sender,
41
+ quotedMessage: quoted?.message
42
+ }
43
+ }
44
+ };
45
+ } else if (data.note) {
46
+ notes = {
47
+ extendedTextMessage: {
48
+ text: data.note,
49
+ contextInfo: {
50
+ stanzaId: quoted?.key?.id,
51
+ participant: quoted?.key?.participant || content.sender,
52
+ quotedMessage: quoted?.message
53
+ }
54
+ }
55
+ };
56
+ }
57
+
58
+ return {
59
+ requestPaymentMessage: WAProto.Message.RequestPaymentMessage.fromObject({
60
+ expiryTimestamp: data.expiry || 0,
61
+ amount1000: data.amount || 0,
62
+ currencyCodeIso4217: data.currency || "IDR",
63
+ requestFrom: data.from || "0@s.whatsapp.net",
64
+ noteMessage: notes,
65
+ background: data.background ?? {
66
+ id: "DEFAULT",
67
+ placeholderArgb: 0xFFF0F0F0
68
+ }
69
+ })
70
+ };
71
+ }
72
+
73
+ async handleProduct(content, jid, quoted) {
74
+ const {
75
+ title,
76
+ description,
77
+ thumbnail,
78
+ productId,
79
+ retailerId,
80
+ url,
81
+ body = "",
82
+ footer = "",
83
+ buttons = [],
84
+ priceAmount1000 = null,
85
+ currencyCode = "IDR"
86
+ } = content.productMessage;
87
+
88
+ let productImage;
89
+
90
+ if (Buffer.isBuffer(thumbnail)) {
91
+ const { imageMessage } = await this.utils.generateWAMessageContent(
92
+ { image: thumbnail },
93
+ { upload: this.waUploadToServer }
94
+ );
95
+ productImage = imageMessage;
96
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
97
+ const { imageMessage } = await this.utils.generateWAMessageContent(
98
+ { image: { url: thumbnail.url }},
99
+ { upload: this.waUploadToServer }
100
+ );
101
+ productImage = imageMessage;
102
+ }
103
+
104
+ return {
105
+ viewOnceMessage: {
106
+ message: {
107
+ interactiveMessage: {
108
+ body: { text: body },
109
+ footer: { text: footer },
110
+ header: {
111
+ title,
112
+ hasMediaAttachment: true,
113
+ productMessage: {
114
+ product: {
115
+ productImage,
116
+ productId,
117
+ title,
118
+ description,
119
+ currencyCode,
120
+ priceAmount1000,
121
+ retailerId,
122
+ url,
123
+ productImageCount: 1
124
+ },
125
+ businessOwnerJid: "0@s.whatsapp.net"
126
+ }
127
+ },
128
+ nativeFlowMessage: { buttons }
129
+ }
130
+ }
131
+ }
132
+ };
133
+ }
134
+
135
+ async handleInteractive(content, jid, quoted) {
136
+ const {
137
+ title,
138
+ footer,
139
+ thumbnail,
140
+ image,
141
+ video,
142
+ document,
143
+ mimetype,
144
+ fileName,
145
+ jpegThumbnail,
146
+ contextInfo,
147
+ externalAdReply,
148
+ buttons = [],
149
+ nativeFlowMessage,
150
+ header
151
+ } = content.interactiveMessage;
152
+
153
+ let media = null;
154
+ let mediaType = null;
155
+
156
+ const getMediaPayload = (mediaData, type) => {
157
+ if (typeof mediaData === 'object' && mediaData.url) {
158
+ return { [type]: { url: mediaData.url } };
159
+ }
160
+ return { [type]: mediaData };
161
+ };
162
+
163
+ if (thumbnail) {
164
+ media = await this.utils.prepareWAMessageMedia(
165
+ getMediaPayload(thumbnail, 'image'),
166
+ { upload: this.waUploadToServer }
167
+ );
168
+ mediaType = 'image';
169
+ } else if (image) {
170
+ media = await this.utils.prepareWAMessageMedia(
171
+ getMediaPayload(image, 'image'),
172
+ { upload: this.waUploadToServer }
173
+ );
174
+ mediaType = 'image';
175
+ } else if (video) {
176
+ media = await this.utils.prepareWAMessageMedia(
177
+ getMediaPayload(video, 'video'),
178
+ { upload: this.waUploadToServer }
179
+ );
180
+ mediaType = 'video';
181
+ } else if (document) {
182
+ let documentPayload = getMediaPayload(document, 'document');
183
+
184
+ if (jpegThumbnail) {
185
+ documentPayload.jpegThumbnail = jpegThumbnail;
186
+ }
187
+
188
+ media = await this.utils.prepareWAMessageMedia(
189
+ documentPayload,
190
+ { upload: this.waUploadToServer }
191
+ );
192
+
193
+ if (fileName) {
194
+ media.documentMessage.fileName = fileName;
195
+ }
196
+ if (mimetype) {
197
+ media.documentMessage.mimetype = mimetype;
198
+ }
199
+ mediaType = 'document';
200
+ }
201
+
202
+ let interactiveMessage = {
203
+ body: { text: title || "" },
204
+ footer: { text: footer || "" }
205
+ };
206
+
207
+ if (buttons && buttons.length > 0) {
208
+ interactiveMessage.nativeFlowMessage = {
209
+ buttons: buttons
210
+ };
211
+
212
+ if (nativeFlowMessage) {
213
+ interactiveMessage.nativeFlowMessage = {
214
+ ...interactiveMessage.nativeFlowMessage,
215
+ ...nativeFlowMessage
216
+ };
217
+ }
218
+ } else if (nativeFlowMessage) {
219
+ interactiveMessage.nativeFlowMessage = nativeFlowMessage;
220
+ }
221
+
222
+ if (media) {
223
+ interactiveMessage.header = {
224
+ title: header || "",
225
+ hasMediaAttachment: true,
226
+ ...media
227
+ };
228
+ } else {
229
+ interactiveMessage.header = {
230
+ title: header || "",
231
+ hasMediaAttachment: false
232
+ };
233
+ }
234
+
235
+ let finalContextInfo = {};
236
+
237
+ const inputContextInfo = contextInfo || {};
238
+ if (quoted) {
239
+ inputContextInfo.stanzaId = quoted.key.id;
240
+ inputContextInfo.participant = quoted.key.participant || quoted.key.remoteJid;
241
+ inputContextInfo.quotedMessage = quoted.message;
242
+ }
243
+
244
+ if (Object.keys(inputContextInfo).length > 0) {
245
+ finalContextInfo = {
246
+ mentionedJid: inputContextInfo.mentionedJid || [],
247
+ forwardingScore: inputContextInfo.forwardingScore || 0,
248
+ isForwarded: inputContextInfo.isForwarded || false,
249
+ ...inputContextInfo
250
+ };
251
+ }
252
+
253
+ if (externalAdReply) {
254
+ finalContextInfo.externalAdReply = {
255
+ title: externalAdReply.title || "",
256
+ body: externalAdReply.body || "",
257
+ mediaType: externalAdReply.mediaType || 1,
258
+ thumbnailUrl: externalAdReply.thumbnailUrl || "",
259
+ mediaUrl: externalAdReply.mediaUrl || "",
260
+ sourceUrl: externalAdReply.sourceUrl || "",
261
+ showAdAttribution: externalAdReply.showAdAttribution || false,
262
+ renderLargerThumbnail: externalAdReply.renderLargerThumbnail || false,
263
+ ...externalAdReply
264
+ };
265
+ }
266
+
267
+ if (Object.keys(finalContextInfo).length > 0) {
268
+ interactiveMessage.contextInfo = finalContextInfo;
269
+ }
270
+
271
+ return {
272
+ interactiveMessage: interactiveMessage
273
+ };
274
+ }
275
+
276
+ async handleAlbum(content, jid, quoted) {
277
+ const array = content.albumMessage;
278
+ const album = await this.utils.generateWAMessageFromContent(jid, {
279
+ messageContextInfo: {
280
+ messageSecret: crypto.randomBytes(32),
281
+ },
282
+ albumMessage: {
283
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
284
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
285
+ },
286
+ }, {
287
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
288
+ quoted,
289
+ upload: this.waUploadToServer
290
+ });
291
+
292
+ await this.relayMessage(jid, album.message, {
293
+ messageId: album.key.id,
294
+ });
295
+
296
+ for (let content of array) {
297
+ const img = await this.utils.generateWAMessage(jid, content, {
298
+ upload: this.waUploadToServer,
299
+ });
300
+
301
+ img.message.messageContextInfo = {
302
+ messageSecret: crypto.randomBytes(32),
303
+ messageAssociation: {
304
+ associationType: 1,
305
+ parentMessageKey: album.key,
306
+ },
307
+ participant: "0@s.whatsapp.net",
308
+ remoteJid: "status@broadcast",
309
+ forwardingScore: 99999,
310
+ isForwarded: true,
311
+ mentionedJid: [jid],
312
+ starred: true,
313
+ labels: ["Y", "Important"],
314
+ isHighlighted: true,
315
+ businessMessageForwardInfo: {
316
+ businessOwnerJid: jid,
317
+ },
318
+ dataSharingContext: {
319
+ showMmDisclosure: true,
320
+ },
321
+ };
322
+
323
+ img.message.forwardedNewsletterMessageInfo = {
324
+ newsletterJid: "0@newsletter",
325
+ serverMessageId: 1,
326
+ newsletterName: `WhatsApp`,
327
+ contentType: 1,
328
+ timestamp: new Date().toISOString(),
329
+ senderName: "Delta",
330
+ content: "Text Message",
331
+ priority: "high",
332
+ status: "sent",
333
+ };
334
+
335
+ img.message.disappearingMode = {
336
+ initiator: 3,
337
+ trigger: 4,
338
+ initiatorDeviceJid: jid,
339
+ initiatedByExternalService: true,
340
+ initiatedByUserDevice: true,
341
+ initiatedBySystem: true,
342
+ initiatedByServer: true,
343
+ initiatedByAdmin: true,
344
+ initiatedByUser: true,
345
+ initiatedByApp: true,
346
+ initiatedByBot: true,
347
+ initiatedByMe: true,
348
+ };
349
+
350
+ await this.relayMessage(jid, img.message, {
351
+ messageId: img.key.id,
352
+ quoted: {
353
+ key: {
354
+ remoteJid: album.key.remoteJid,
355
+ id: album.key.id,
356
+ fromMe: true,
357
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
358
+ },
359
+ message: album.message,
360
+ },
361
+ });
362
+ }
363
+ return album;
364
+ }
365
+
366
+ async handleEvent(content, jid, quoted) {
367
+ const eventData = content.eventMessage;
368
+
369
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
370
+ viewOnceMessage: {
371
+ message: {
372
+ messageContextInfo: {
373
+ deviceListMetadata: {},
374
+ deviceListMetadataVersion: 2,
375
+ messageSecret: crypto.randomBytes(32),
376
+ supportPayload: JSON.stringify({
377
+ version: 2,
378
+ is_ai_message: true,
379
+ should_show_system_message: true,
380
+ ticket_id: crypto.randomBytes(16).toString('hex')
381
+ })
382
+ },
383
+ eventMessage: {
384
+ contextInfo: {
385
+ mentionedJid: [jid],
386
+ participant: jid,
387
+ remoteJid: "status@broadcast",
388
+ forwardedNewsletterMessageInfo: {
389
+ newsletterName: "Delta",
390
+ newsletterJid: "120363403176894973@newsletter",
391
+ serverMessageId: 1
392
+ },
393
+ ...(quoted ? {
394
+ stanzaId: quoted.key.id,
395
+ participant: quoted.key.participant || quoted.key.remoteJid,
396
+ quotedMessage: quoted.message
397
+ } : {})
398
+ },
399
+ isCanceled: eventData.isCanceled || false,
400
+ name: eventData.name,
401
+ description: eventData.description,
402
+ location: eventData.location || {
403
+ degreesLatitude: 0,
404
+ degreesLongitude: 0,
405
+ name: "Location"
406
+ },
407
+ joinLink: eventData.joinLink || '',
408
+ startTime: typeof eventData.startTime === 'string' ? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
409
+ endTime: typeof eventData.endTime === 'string' ? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
410
+ extraGuestsAllowed: eventData.extraGuestsAllowed !== false
411
+ }
412
+ }
413
+ }
414
+ }, { quoted });
415
+
416
+ await this.relayMessage(jid, msg.message, {
417
+ messageId: msg.key.id
418
+ });
419
+ return msg;
420
+ }
421
+
422
+ async handlePollResult(content, jid, quoted) {
423
+ const pollData = content.pollResultMessage;
424
+
425
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
426
+ pollResultSnapshotMessage: {
427
+ name: pollData.name,
428
+ pollVotes: pollData.pollVotes.map(vote => ({
429
+ optionName: vote.optionName,
430
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
431
+ ? vote.optionVoteCount.toString()
432
+ : vote.optionVoteCount
433
+ }))
434
+ }
435
+ }, {
436
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
437
+ quoted
438
+ });
439
+
440
+ await this.relayMessage(jid, msg.message, {
441
+ messageId: msg.key.id
442
+ });
443
+
444
+ return msg;
445
+ }
446
+
447
+ async handleList(content, jid, quoted) {
448
+ const data = content.listMessage;
449
+
450
+ const listMessagePayload = WAProto.Message.ListMessage.fromObject({
451
+ title: data.title || '',
452
+ description: data.description || '',
453
+ buttonText: data.buttonText || 'Pilih',
454
+ sections: data.sections.map(section => ({
455
+ title: section.title,
456
+ rows: section.rows.map(row => ({
457
+ rowId: row.rowId || this.utils.generateMessageID(),
458
+ title: row.title,
459
+ description: row.description || ''
460
+ }))
461
+ })),
462
+ listType: data.listType || 1,
463
+ footerText: data.footer || ''
464
+ });
465
+
466
+ const listContent = {
467
+ listMessage: listMessagePayload
468
+ };
469
+
470
+ const contextInfo = data.contextInfo || {};
471
+
472
+ if (quoted) {
473
+ contextInfo.stanzaId = quoted.key.id;
474
+ contextInfo.participant = quoted.key.participant || quoted.key.remoteJid;
475
+ contextInfo.quotedMessage = quoted.message;
476
+ }
477
+
478
+ if (Object.keys(contextInfo).length > 0) {
479
+ listContent.listMessage.contextInfo = contextInfo;
480
+ }
481
+
482
+ const msg = await this.utils.generateWAMessageFromContent(
483
+ jid,
484
+ listContent,
485
+ { quoted }
486
+ );
487
+
488
+ await this.relayMessage(jid, msg.message, { messageId: msg.key.id });
489
+
490
+ return msg;
491
+ }
492
+
493
+ async handleGroupStory(content, jid, quoted) {
494
+ if (content.groupStatusMessage) {
495
+ const storyData = content.groupStatusMessage;
496
+ let waMsgContent;
497
+
498
+ if (storyData.message) {
499
+ waMsgContent = storyData;
500
+ } else {
501
+ if (typeof this.bail?.generateWAMessageContent === "function") {
502
+ waMsgContent = await this.bail.generateWAMessageContent(storyData, {
503
+ upload: this.waUploadToServer
504
+ });
505
+ } else if (typeof this.utils?.generateWAMessageContent === "function") {
506
+ waMsgContent = await this.utils.generateWAMessageContent(storyData, {
507
+ upload: this.waUploadToServer
508
+ });
509
+ } else if (typeof this.utils?.prepareMessageContent === "function") {
510
+ waMsgContent = await this.utils.prepareMessageContent(storyData, {
511
+ upload: this.waUploadToServer
512
+ });
513
+ } else {
514
+ waMsgContent = await Utils_1.generateWAMessageContent(storyData, {
515
+ upload: this.waUploadToServer
516
+ });
517
+ }
518
+ }
519
+
520
+ let msg = {
521
+ message: {
522
+ groupStatusMessageV2: {
523
+ message: waMsgContent.message || waMsgContent
524
+ }
525
+ }
526
+ };
527
+
528
+ return await this.relayMessage(jid, msg.message, {
529
+ messageId: this.bail.generateMessageID()
530
+ });
531
+
532
+ } else if (content.groupStoryMessage) {
533
+ const { groupStoryMessage } = content;
534
+
535
+ if (!this.utils.isJidGroup(jid)) {
536
+ throw new Error("Group Story messages must be sent to a group JID.");
537
+ }
538
+
539
+ let mediaContent = {};
540
+
541
+ if (groupStoryMessage.image || groupStoryMessage.video) {
542
+ const mediaData = groupStoryMessage.image || groupStoryMessage.video;
543
+ const mediaType = groupStoryMessage.image ? 'image' : 'video';
544
+
545
+ let stream;
546
+ if (Buffer.isBuffer(mediaData)) {
547
+ stream = mediaData;
548
+ } else if (typeof mediaData === 'object' && mediaData.url) {
549
+ throw new Error("Group Story media from URL is not supported in this simplified handler. Use Buffer or fetch it first.");
550
+ } else {
551
+ stream = Buffer.from(mediaData, 'base64');
552
+ }
553
+
554
+ const upload = await this.waUploadToServer(stream, {
555
+ mediaType: mediaType,
556
+ });
557
+
558
+ mediaContent = {
559
+ [mediaType + 'Message']: {
560
+ url: upload.url,
561
+ mimetype: mediaType === 'image' ? 'image/jpeg' : 'video/mp4',
562
+ caption: groupStoryMessage.caption,
563
+ fileSha256: upload.fileSha256,
564
+ fileEncSha256: upload.fileEncSha256,
565
+ mediaKey: upload.mediaKey,
566
+ fileLength: upload.fileLength,
567
+ directPath: upload.directPath,
568
+ mediaKeyTimestamp: this.utils.unixTimestampSeconds(),
569
+ jpegThumbnail: groupStoryMessage.jpegThumbnail,
570
+ }
571
+ };
572
+ } else if (groupStoryMessage.caption) {
573
+ mediaContent = {
574
+ extendedTextMessage: {
575
+ text: groupStoryMessage.caption
576
+ }
577
+ };
578
+ } else {
579
+ throw new Error("Group Story content must contain image, video, or caption.");
580
+ }
581
+
582
+ const groupStatusMessageContent = {
583
+ groupStatusMessage: {
584
+ key: {
585
+ remoteJid: jid,
586
+ fromMe: true,
587
+ id: this.utils.generateMessageID(),
588
+ participant: this.utils.jidNormalizedUser(this.utils.auth.creds.me.id)
589
+ },
590
+ message: {
591
+ ...mediaContent,
592
+ contextInfo: {
593
+ mentionedJid: groupStoryMessage.mentions || [],
594
+ ...(quoted ? {
595
+ stanzaId: quoted.key.id,
596
+ participant: quoted.key.participant || quoted.key.remoteJid,
597
+ quotedMessage: quoted.message
598
+ } : {})
599
+ }
600
+ },
601
+ }
602
+ };
603
+
604
+ const fullMsg = await this.utils.generateWAMessageFromContent(
605
+ jid,
606
+ groupStatusMessageContent,
607
+ { quoted, logger: this.utils.logger }
608
+ );
609
+
610
+ await this.relayMessage(jid, fullMsg.message, {
611
+ messageId: fullMsg.key.id,
612
+ type: 'group_status',
613
+ });
614
+
615
+ return fullMsg;
616
+ } else {
617
+ throw new Error("Invalid content for handleGroupStory. Neither groupStatusMessage nor groupStoryMessage found.");
618
+ }
619
+ }
620
+ }
621
+
622
+ module.exports = yaoii;