sauruslord-baileys 2.1.0 → 3.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 (115) hide show
  1. package/README.md +41 -0
  2. package/lib/Defaults/baileys-version.json +1 -1
  3. package/lib/Defaults/index.d.ts +53 -0
  4. package/lib/Defaults/index.js +2 -4
  5. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  6. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  7. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  8. package/lib/Signal/Group/index.d.ts +11 -0
  9. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  10. package/lib/Signal/Group/queue-job.d.ts +1 -0
  11. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  12. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  13. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  14. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  15. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  16. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  17. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  18. package/lib/Signal/baileys-version.json +3 -0
  19. package/lib/Signal/index.d.ts +53 -0
  20. package/lib/Signal/index.js +147 -0
  21. package/lib/Signal/libsignal.d.ts +3 -0
  22. package/lib/Signal/phonenumber-mcc.json +223 -0
  23. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  24. package/lib/Socket/Client/index.d.ts +3 -0
  25. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  26. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  27. package/lib/Socket/business.d.ts +171 -0
  28. package/lib/Socket/chats.d.ts +267 -0
  29. package/lib/Socket/chats.js +3 -22
  30. package/lib/Socket/dugong.js +9 -148
  31. package/lib/Socket/groups.d.ts +115 -0
  32. package/lib/Socket/index.d.ts +173 -0
  33. package/lib/Socket/lordsaurus.d.ts +266 -0
  34. package/lib/Socket/lordsaurus.js +580 -0
  35. package/lib/Socket/messages-recv.d.ts +161 -0
  36. package/lib/Socket/messages-recv.js +1085 -1085
  37. package/lib/Socket/messages-send.d.ts +149 -0
  38. package/lib/Socket/messages-send.js +257 -391
  39. package/lib/Socket/newsletter.d.ts +134 -0
  40. package/lib/Socket/newsletter.js +53 -159
  41. package/lib/Socket/registration.d.ts +267 -0
  42. package/lib/Socket/socket.d.ts +43 -0
  43. package/lib/Socket/usync.d.ts +36 -0
  44. package/lib/Store/index.d.ts +3 -0
  45. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  46. package/lib/Store/make-in-memory-store.d.ts +118 -0
  47. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  48. package/lib/Store/object-repository.d.ts +10 -0
  49. package/lib/Types/Auth.d.ts +110 -0
  50. package/lib/Types/Call.d.ts +13 -0
  51. package/lib/Types/Chat.d.ts +102 -0
  52. package/lib/Types/Contact.d.ts +19 -0
  53. package/lib/Types/Events.d.ts +157 -0
  54. package/lib/Types/GroupMetadata.d.ts +55 -0
  55. package/lib/Types/Label.d.ts +35 -0
  56. package/lib/Types/LabelAssociation.d.ts +29 -0
  57. package/lib/Types/Message.d.ts +273 -0
  58. package/lib/Types/Newsletter.d.ts +103 -0
  59. package/lib/Types/Product.d.ts +78 -0
  60. package/lib/Types/Signal.d.ts +57 -0
  61. package/lib/Types/Socket.d.ts +111 -0
  62. package/lib/Types/State.d.ts +27 -0
  63. package/lib/Types/USync.d.ts +25 -0
  64. package/lib/Types/index.d.ts +57 -0
  65. package/lib/Utils/auth-utils.d.ts +18 -0
  66. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  67. package/lib/Utils/business.d.ts +22 -0
  68. package/lib/Utils/chat-utils.d.ts +71 -0
  69. package/lib/Utils/crypto.d.ts +41 -0
  70. package/lib/Utils/crypto.js +7 -23
  71. package/lib/Utils/decode-wa-message.d.ts +19 -0
  72. package/lib/Utils/decode-wa-message.js +0 -1
  73. package/lib/Utils/event-buffer.d.ts +35 -0
  74. package/lib/Utils/generics.d.ts +92 -0
  75. package/lib/Utils/generics.js +47 -135
  76. package/lib/Utils/history.d.ts +15 -0
  77. package/lib/Utils/index.d.ts +17 -0
  78. package/lib/Utils/link-preview.d.ts +21 -0
  79. package/lib/Utils/logger.d.ts +4 -0
  80. package/lib/Utils/lt-hash.d.ts +12 -0
  81. package/lib/Utils/make-mutex.d.ts +7 -0
  82. package/lib/Utils/messages-media.d.ts +116 -0
  83. package/lib/Utils/messages-media.js +24 -70
  84. package/lib/Utils/messages.d.ts +77 -0
  85. package/lib/Utils/messages.js +4 -180
  86. package/lib/Utils/noise-handler.d.ts +21 -0
  87. package/lib/Utils/process-message.d.ts +41 -0
  88. package/lib/Utils/signal.d.ts +32 -0
  89. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  90. package/lib/Utils/validate-connection.d.ts +11 -0
  91. package/lib/WABinary/constants.d.ts +30 -0
  92. package/lib/WABinary/decode.d.ts +7 -0
  93. package/lib/WABinary/encode.d.ts +3 -0
  94. package/lib/WABinary/generic-utils.d.ts +17 -0
  95. package/lib/WABinary/index.d.ts +5 -0
  96. package/lib/WABinary/jid-utils.d.ts +31 -0
  97. package/lib/WABinary/types.d.ts +18 -0
  98. package/lib/WAM/BinaryInfo.d.ts +17 -0
  99. package/lib/WAM/constants.d.ts +38 -0
  100. package/lib/WAM/encode.d.ts +3 -0
  101. package/lib/WAM/index.d.ts +3 -0
  102. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  103. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  104. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  105. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  106. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  107. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  108. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  109. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  110. package/lib/WAUSync/USyncUser.d.ts +12 -0
  111. package/lib/WAUSync/index.d.ts +3 -0
  112. package/lib/index.d.ts +12 -0
  113. package/lib/index.js +40 -19
  114. package/package.json +9 -9
  115. package/LICENSE +0 -21
@@ -0,0 +1,580 @@
1
+ const WAProto = require('../../WAProto').proto;
2
+ const crypto = require('crypto');
3
+ const Utils_1 = require("../Utils");
4
+
5
+ class lordsaurus {
6
+ constructor(utils, waUploadToServer, relayMessageFn) {
7
+ this.utils = utils;
8
+ this.relayMessage = relayMessageFn
9
+ this.waUploadToServer = waUploadToServer;
10
+
11
+ this.bail = {
12
+ generateWAMessageContent: this.utils.generateWAMessageContent || Utils_1.generateWAMessageContent,
13
+ generateMessageID: Utils_1.generateMessageID,
14
+ getContentType: (msg) => Object.keys(msg.message || {})[0]
15
+ };
16
+ }
17
+
18
+ detectType(content) {
19
+ if (content.requestPaymentMessage) return 'PAYMENT';
20
+ if (content.productMessage) return 'PRODUCT';
21
+ if (content.interactiveMessage) return 'INTERACTIVE';
22
+ if (content.albumMessage) return 'ALBUM';
23
+ if (content.eventMessage) return 'EVENT';
24
+ if (content.pollResultMessage) return 'POLL_RESULT';
25
+ if (content.groupStatusMessage) return 'GROUP_STORY';
26
+ if (content.stickerPack) return 'STICKER_PACK';
27
+ return null;
28
+ }
29
+ async handleStickerPack(content, jid, quoted) {
30
+ const packData = content.stickerPack;
31
+ const axios = require('axios');
32
+ const crypto = require('crypto');
33
+ const stickerMessages = [];
34
+ let coverSticker = null;
35
+ let trayIconSticker = null;
36
+
37
+ for (let i = 0; i < Math.min(packData.stickers.length, 20); i++) {
38
+ try {
39
+ const sticker = packData.stickers[i];
40
+ let stickerBuffer;
41
+
42
+ if (sticker.url) {
43
+ const response = await axios.get(sticker.url, {
44
+ responseType: 'arraybuffer',
45
+ timeout: 20000
46
+ });
47
+ stickerBuffer = Buffer.from(response.data);
48
+ } else if (sticker.data) {
49
+ stickerBuffer = sticker.data;
50
+ } else {
51
+ continue;
52
+ }
53
+
54
+ const media = await this.utils.prepareWAMessageMedia(
55
+ { sticker: stickerBuffer },
56
+ { upload: this.waUploadToServer }
57
+ );
58
+
59
+ if (media.stickerMessage) {
60
+ // Simpan cover dan tray icon (sticker pertama)
61
+ if (i === 0) {
62
+ coverSticker = media.stickerMessage;
63
+ trayIconSticker = media.stickerMessage;
64
+ }
65
+
66
+ // Push sticker object (bukan wrapper)
67
+ stickerMessages.push(media.stickerMessage);
68
+ }
69
+ } catch (err) {
70
+ continue;
71
+ }
72
+ }
73
+
74
+ if (!coverSticker || stickerMessages.length === 0) {
75
+ throw new Error('No valid stickers found');
76
+ }
77
+
78
+ const packId = packData.packId || crypto.randomUUID();
79
+ const now = Math.floor(Date.now() / 1000);
80
+ const totalSize = stickerMessages.reduce((acc, msg) => {
81
+ return acc + (msg.fileLength?.low || 0);
82
+ }, 0);
83
+
84
+ // Generate imageDataHash dari cover sticker
85
+ const imageDataHash = coverSticker.fileSha256 ?
86
+ Buffer.from(coverSticker.fileSha256).toString('base64') : '';
87
+
88
+ return {
89
+ stickerPackMessage: {
90
+ stickers: stickerMessages, // Langsung array stickerMessage
91
+ stickerPackId: packId, // Bukan packId
92
+ name: packData.name || "Sticker Pack",
93
+ publisher: packData.publisher || "",
94
+ fileLength: coverSticker.fileLength || { low: totalSize, high: 0, unsigned: true },
95
+ fileSha256: coverSticker.fileSha256,
96
+ fileEncSha256: coverSticker.fileEncSha256,
97
+ mediaKey: coverSticker.mediaKey,
98
+ directPath: coverSticker.directPath,
99
+ contextInfo: {
100
+ mentionedJid: [],
101
+ groupMentions: []
102
+ },
103
+ mediaKeyTimestamp: coverSticker.mediaKeyTimestamp || now,
104
+
105
+ // Tray icon (pakai cover sticker)
106
+ trayIconFileName: `${packId}.png`,
107
+ trayIconDirectPath: coverSticker.directPath,
108
+ trayIconFileLength: coverSticker.fileLength,
109
+ trayIconSha256: coverSticker.fileSha256,
110
+ trayIconEncSha256: coverSticker.fileEncSha256,
111
+ trayIconMediaKey: coverSticker.mediaKey,
112
+ trayIconMediaKeyTimestamp: coverSticker.mediaKeyTimestamp || now,
113
+
114
+ // Thumbnail (beda dari tray icon di contoh asli)
115
+ thumbnailDirectPath: coverSticker.directPath,
116
+ thumbnailSha256: coverSticker.fileSha256,
117
+ thumbnailEncSha256: coverSticker.fileEncSha256,
118
+ thumbnailHeight: 512,
119
+ thumbnailWidth: 512,
120
+
121
+ // Field tambahan yang ada di contoh asli
122
+ imageDataHash: imageDataHash,
123
+ stickerPackSize: { low: totalSize, high: 0, unsigned: true },
124
+ stickerPackOrigin: 2 // Origin 2, bukan 1
125
+ }
126
+ };
127
+ }
128
+
129
+ async handlePayment(content, quoted) {
130
+ const data = content.requestPaymentMessage;
131
+ let notes = {};
132
+
133
+ if (data.sticker?.stickerMessage) {
134
+ notes = {
135
+ stickerMessage: {
136
+ ...data.sticker.stickerMessage,
137
+ contextInfo: {
138
+ stanzaId: quoted?.key?.id,
139
+ participant: quoted?.key?.participant || content.sender,
140
+ quotedMessage: quoted?.message
141
+ }
142
+ }
143
+ };
144
+ } else if (data.note) {
145
+ notes = {
146
+ extendedTextMessage: {
147
+ text: data.note,
148
+ contextInfo: {
149
+ stanzaId: quoted?.key?.id,
150
+ participant: quoted?.key?.participant || content.sender,
151
+ quotedMessage: quoted?.message
152
+ }
153
+ }
154
+ };
155
+ }
156
+
157
+ return {
158
+ requestPaymentMessage: WAProto.Message.RequestPaymentMessage.fromObject({
159
+ expiryTimestamp: data.expiry || 0,
160
+ amount1000: data.amount || 0,
161
+ currencyCodeIso4217: data.currency || "IDR",
162
+ requestFrom: data.from || "0@s.whatsapp.net",
163
+ noteMessage: notes,
164
+ background: data.background ?? {
165
+ id: "DEFAULT",
166
+ placeholderArgb: 0xFFF0F0F0
167
+ }
168
+ })
169
+ };
170
+ }
171
+
172
+ async handleProduct(content, jid, quoted) {
173
+ const {
174
+ title,
175
+ description,
176
+ thumbnail,
177
+ productId,
178
+ retailerId,
179
+ url,
180
+ body = "",
181
+ footer = "",
182
+ buttons = [],
183
+ priceAmount1000 = null,
184
+ currencyCode = "IDR"
185
+ } = content.productMessage;
186
+
187
+ let productImage;
188
+
189
+ if (Buffer.isBuffer(thumbnail)) {
190
+ const { imageMessage } = await this.utils.generateWAMessageContent(
191
+ { image: thumbnail },
192
+ { upload: this.waUploadToServer }
193
+ );
194
+ productImage = imageMessage;
195
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
196
+ const { imageMessage } = await this.utils.generateWAMessageContent(
197
+ { image: { url: thumbnail.url }},
198
+ { upload: this.waUploadToServer }
199
+ );
200
+ productImage = imageMessage;
201
+ }
202
+
203
+ return {
204
+ viewOnceMessage: {
205
+ message: {
206
+ interactiveMessage: {
207
+ body: { text: body },
208
+ footer: { text: footer },
209
+ header: {
210
+ title,
211
+ hasMediaAttachment: true,
212
+ productMessage: {
213
+ product: {
214
+ productImage,
215
+ productId,
216
+ title,
217
+ description,
218
+ currencyCode,
219
+ priceAmount1000,
220
+ retailerId,
221
+ url,
222
+ productImageCount: 1
223
+ },
224
+ businessOwnerJid: "0@s.whatsapp.net"
225
+ }
226
+ },
227
+ nativeFlowMessage: { buttons }
228
+ }
229
+ }
230
+ }
231
+ };
232
+ }
233
+
234
+ async handleInteractive(content, jid, quoted) {
235
+ const {
236
+ title,
237
+ footer,
238
+ thumbnail,
239
+ image,
240
+ video,
241
+ document,
242
+ mimetype,
243
+ fileName,
244
+ jpegThumbnail,
245
+ contextInfo,
246
+ externalAdReply,
247
+ buttons = [],
248
+ nativeFlowMessage,
249
+ header
250
+ } = content.interactiveMessage;
251
+
252
+ let media = null;
253
+ let mediaType = null;
254
+
255
+ if (thumbnail) {
256
+ media = await this.utils.prepareWAMessageMedia(
257
+ { image: { url: thumbnail } },
258
+ { upload: this.waUploadToServer }
259
+ );
260
+ mediaType = 'image';
261
+ } else if (image) {
262
+ if (typeof image === 'object' && image.url) {
263
+ media = await this.utils.prepareWAMessageMedia(
264
+ { image: { url: image.url } },
265
+ { upload: this.waUploadToServer }
266
+ );
267
+ } else {
268
+ media = await this.utils.prepareWAMessageMedia(
269
+ { image: image },
270
+ { upload: this.waUploadToServer }
271
+ );
272
+ }
273
+ mediaType = 'image';
274
+ } else if (video) {
275
+ if (typeof video === 'object' && video.url) {
276
+ media = await this.utils.prepareWAMessageMedia(
277
+ { video: { url: video.url } },
278
+ { upload: this.waUploadToServer }
279
+ );
280
+ } else {
281
+ media = await this.utils.prepareWAMessageMedia(
282
+ { video: video },
283
+ { upload: this.waUploadToServer }
284
+ );
285
+ }
286
+ mediaType = 'video';
287
+ } else if (document) {
288
+ let documentPayload = {
289
+ document: document
290
+ };
291
+ if (jpegThumbnail) {
292
+ if (typeof jpegThumbnail === 'object' && jpegThumbnail.url) {
293
+ documentPayload.jpegThumbnail = { url: jpegThumbnail.url };
294
+ } else {
295
+ documentPayload.jpegThumbnail = jpegThumbnail;
296
+ }
297
+ }
298
+
299
+ media = await this.utils.prepareWAMessageMedia(
300
+ documentPayload,
301
+ { upload: this.waUploadToServer }
302
+ );
303
+ if (fileName) {
304
+ media.documentMessage.fileName = fileName;
305
+ }
306
+ if (mimetype) {
307
+ media.documentMessage.mimetype = mimetype;
308
+ }
309
+ mediaType = 'document';
310
+ }
311
+ let interactiveMessage = {
312
+ body: { text: title || "" },
313
+ footer: { text: footer || "" }
314
+ };
315
+ if (buttons && buttons.length > 0) {
316
+ interactiveMessage.nativeFlowMessage = {
317
+ buttons: buttons
318
+ };
319
+ if (nativeFlowMessage) {
320
+ interactiveMessage.nativeFlowMessage = {
321
+ ...interactiveMessage.nativeFlowMessage,
322
+ ...nativeFlowMessage
323
+ };
324
+ }
325
+ } else if (nativeFlowMessage) {
326
+ interactiveMessage.nativeFlowMessage = nativeFlowMessage;
327
+ }
328
+
329
+ if (media) {
330
+ interactiveMessage.header = {
331
+ title: header || "",
332
+ hasMediaAttachment: true,
333
+ ...media
334
+ };
335
+ } else {
336
+ interactiveMessage.header = {
337
+ title: header || "",
338
+ hasMediaAttachment: false
339
+ };
340
+ }
341
+
342
+ let finalContextInfo = {};
343
+ if (contextInfo) {
344
+ finalContextInfo = {
345
+ mentionedJid: contextInfo.mentionedJid || [],
346
+ forwardingScore: contextInfo.forwardingScore || 0,
347
+ isForwarded: contextInfo.isForwarded || false,
348
+ ...contextInfo
349
+ };
350
+ }
351
+
352
+ if (externalAdReply) {
353
+ finalContextInfo.externalAdReply = {
354
+ title: externalAdReply.title || "",
355
+ body: externalAdReply.body || "",
356
+ mediaType: externalAdReply.mediaType || 1,
357
+ thumbnailUrl: externalAdReply.thumbnailUrl || "",
358
+ mediaUrl: externalAdReply.mediaUrl || "",
359
+ sourceUrl: externalAdReply.sourceUrl || "",
360
+ showAdAttribution: externalAdReply.showAdAttribution || false,
361
+ renderLargerThumbnail: externalAdReply.renderLargerThumbnail || false,
362
+ ...externalAdReply
363
+ };
364
+ }
365
+
366
+ if (Object.keys(finalContextInfo).length > 0) {
367
+ interactiveMessage.contextInfo = finalContextInfo;
368
+ }
369
+ return {
370
+ interactiveMessage: interactiveMessage
371
+ };
372
+ }
373
+
374
+ async handleAlbum(content, jid, quoted) {
375
+ const array = content.albumMessage;
376
+ const album = await this.utils.generateWAMessageFromContent(jid, {
377
+ messageContextInfo: {
378
+ messageSecret: crypto.randomBytes(32),
379
+ },
380
+ albumMessage: {
381
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
382
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
383
+ },
384
+ }, {
385
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
386
+ quoted,
387
+ upload: this.waUploadToServer
388
+ });
389
+
390
+ await this.relayMessage(jid, album.message, {
391
+ messageId: album.key.id,
392
+ });
393
+
394
+ for (let content of array) {
395
+ const img = await this.utils.generateWAMessage(jid, content, {
396
+ upload: this.waUploadToServer,
397
+ });
398
+
399
+ img.message.messageContextInfo = {
400
+ messageSecret: crypto.randomBytes(32),
401
+ messageAssociation: {
402
+ associationType: 1,
403
+ parentMessageKey: album.key,
404
+ },
405
+ participant: "0@s.whatsapp.net",
406
+ remoteJid: "status@broadcast",
407
+ forwardingScore: 99999,
408
+ isForwarded: true,
409
+ mentionedJid: [jid],
410
+ starred: true,
411
+ labels: ["Y", "Important"],
412
+ isHighlighted: true,
413
+ businessMessageForwardInfo: {
414
+ businessOwnerJid: jid,
415
+ },
416
+ dataSharingContext: {
417
+ showMmDisclosure: true,
418
+ },
419
+ };
420
+
421
+ img.message.forwardedNewsletterMessageInfo = {
422
+ newsletterJid: "0@newsletter",
423
+ serverMessageId: 1,
424
+ newsletterName: `WhatsApp`,
425
+ contentType: 1,
426
+ timestamp: new Date().toISOString(),
427
+ senderName: "Who a'Am",
428
+ content: "Text Message",
429
+ priority: "high",
430
+ status: "sent",
431
+ };
432
+
433
+ img.message.disappearingMode = {
434
+ initiator: 3,
435
+ trigger: 4,
436
+ initiatorDeviceJid: jid,
437
+ initiatedByExternalService: true,
438
+ initiatedByUserDevice: true,
439
+ initiatedBySystem: true,
440
+ initiatedByServer: true,
441
+ initiatedByAdmin: true,
442
+ initiatedByUser: true,
443
+ initiatedByApp: true,
444
+ initiatedByBot: true,
445
+ initiatedByMe: true,
446
+ };
447
+
448
+ await this.relayMessage(jid, img.message, {
449
+ messageId: img.key.id,
450
+ quoted: {
451
+ key: {
452
+ remoteJid: album.key.remoteJid,
453
+ id: album.key.id,
454
+ fromMe: true,
455
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
456
+ },
457
+ message: album.message,
458
+ },
459
+ });
460
+ }
461
+ return album;
462
+ }
463
+
464
+ async handleEvent(content, jid, quoted) {
465
+ const eventData = content.eventMessage;
466
+
467
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
468
+ viewOnceMessage: {
469
+ message: {
470
+ messageContextInfo: {
471
+ deviceListMetadata: {},
472
+ deviceListMetadataVersion: 2,
473
+ messageSecret: crypto.randomBytes(32),
474
+ supportPayload: JSON.stringify({
475
+ version: 2,
476
+ is_ai_message: true,
477
+ should_show_system_message: true,
478
+ ticket_id: crypto.randomBytes(16).toString('hex')
479
+ })
480
+ },
481
+ eventMessage: {
482
+ contextInfo: {
483
+ mentionedJid: [jid],
484
+ participant: jid,
485
+ remoteJid: "status@broadcast",
486
+ forwardedNewsletterMessageInfo: {
487
+ newsletterName: "shenvn.",
488
+ newsletterJid: "120363407277177688@newsletter",
489
+ serverMessageId: 1
490
+ }
491
+ },
492
+ isCanceled: eventData.isCanceled || false,
493
+ name: eventData.name,
494
+ description: eventData.description,
495
+ location: eventData.location || {
496
+ degreesLatitude: 0,
497
+ degreesLongitude: 0,
498
+ name: "Location"
499
+ },
500
+ joinLink: eventData.joinLink || '',
501
+ startTime: typeof eventData.startTime === 'string' ? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
502
+ endTime: typeof eventData.endTime === 'string' ? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
503
+ extraGuestsAllowed: eventData.extraGuestsAllowed !== false
504
+ }
505
+ }
506
+ }
507
+ }, { quoted });
508
+
509
+ await this.relayMessage(jid, msg.message, {
510
+ messageId: msg.key.id
511
+ });
512
+ return msg;
513
+ }
514
+
515
+ async handlePollResult(content, jid, quoted) {
516
+ const pollData = content.pollResultMessage;
517
+
518
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
519
+ pollResultSnapshotMessage: {
520
+ name: pollData.name,
521
+ pollVotes: pollData.pollVotes.map(vote => ({
522
+ optionName: vote.optionName,
523
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
524
+ ? vote.optionVoteCount.toString()
525
+ : vote.optionVoteCount
526
+ }))
527
+ }
528
+ }, {
529
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
530
+ quoted
531
+ });
532
+
533
+ await this.relayMessage(jid, msg.message, {
534
+ messageId: msg.key.id
535
+ });
536
+
537
+ return msg;
538
+ }
539
+
540
+ async handleGroupStory(content, jid, quoted) {
541
+ const storyData = content.groupStatusMessage;
542
+ let waMsgContent;
543
+
544
+ if (storyData.message) {
545
+ waMsgContent = storyData;
546
+ } else {
547
+ if (typeof this.bail?.generateWAMessageContent === "function") {
548
+ waMsgContent = await this.bail.generateWAMessageContent(storyData, {
549
+ upload: this.waUploadToServer
550
+ });
551
+ } else if (typeof this.utils?.generateWAMessageContent === "function") {
552
+ waMsgContent = await this.utils.generateWAMessageContent(storyData, {
553
+ upload: this.waUploadToServer
554
+ });
555
+ } else if (typeof this.utils?.prepareMessageContent === "function") {
556
+ waMsgContent = await this.utils.prepareMessageContent(storyData, {
557
+ upload: this.waUploadToServer
558
+ });
559
+ } else {
560
+ waMsgContent = await Utils_1.generateWAMessageContent(storyData, {
561
+ upload: this.waUploadToServer
562
+ });
563
+ }
564
+ }
565
+
566
+ let msg = {
567
+ message: {
568
+ groupStatusMessageV2: {
569
+ message: waMsgContent.message || waMsgContent
570
+ }
571
+ }
572
+ };
573
+
574
+ return await this.relayMessage(jid, msg.message, {
575
+ messageId: this.bail.generateMessageID()
576
+ });
577
+ }
578
+ }
579
+
580
+ module.exports = lordsaurus;