@wenzyx1/bails 1.0.0

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 (218) hide show
  1. package/README.md +231 -0
  2. package/WAProto/fix-imports.js +85 -0
  3. package/WAProto/index.d.ts +79257 -0
  4. package/WAProto/index.js +242946 -0
  5. package/engine-requirements.js +10 -0
  6. package/lib/Defaults/baileys-version.json +3 -0
  7. package/lib/Defaults/index.d.ts +53 -0
  8. package/lib/Defaults/index.js +147 -0
  9. package/lib/Defaults/phonenumber-mcc.json +223 -0
  10. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  11. package/lib/Signal/Group/ciphertext-message.js +15 -0
  12. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  13. package/lib/Signal/Group/group-session-builder.js +64 -0
  14. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  15. package/lib/Signal/Group/group_cipher.js +93 -0
  16. package/lib/Signal/Group/index.d.ts +11 -0
  17. package/lib/Signal/Group/index.js +57 -0
  18. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  19. package/lib/Signal/Group/keyhelper.js +55 -0
  20. package/lib/Signal/Group/queue-job.d.ts +1 -0
  21. package/lib/Signal/Group/queue-job.js +53 -0
  22. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  23. package/lib/Signal/Group/sender-chain-key.js +34 -0
  24. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  25. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  26. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  27. package/lib/Signal/Group/sender-key-message.js +69 -0
  28. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  29. package/lib/Signal/Group/sender-key-name.js +51 -0
  30. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  31. package/lib/Signal/Group/sender-key-record.js +53 -0
  32. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  33. package/lib/Signal/Group/sender-key-state.js +99 -0
  34. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  35. package/lib/Signal/Group/sender-message-key.js +29 -0
  36. package/lib/Signal/libsignal.d.ts +3 -0
  37. package/lib/Signal/libsignal.js +454 -0
  38. package/lib/Signal/lid-mapping.js +280 -0
  39. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  40. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  41. package/lib/Socket/Client/index.d.ts +3 -0
  42. package/lib/Socket/Client/index.js +19 -0
  43. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  44. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  45. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  46. package/lib/Socket/Client/web-socket-client.js +62 -0
  47. package/lib/Socket/business.d.ts +171 -0
  48. package/lib/Socket/business.js +342 -0
  49. package/lib/Socket/chats.d.ts +267 -0
  50. package/lib/Socket/chats.js +978 -0
  51. package/lib/Socket/communities.mjs +428 -0
  52. package/lib/Socket/dugong.d.ts +254 -0
  53. package/lib/Socket/dugong.js +558 -0
  54. package/lib/Socket/groups.d.ts +115 -0
  55. package/lib/Socket/groups.js +380 -0
  56. package/lib/Socket/index.d.ts +173 -0
  57. package/lib/Socket/index.js +32 -0
  58. package/lib/Socket/luxu.js +545 -0
  59. package/lib/Socket/messages-recv.d.ts +161 -0
  60. package/lib/Socket/messages-recv.js +1124 -0
  61. package/lib/Socket/messages-send.d.ts +149 -0
  62. package/lib/Socket/messages-send.js +1476 -0
  63. package/lib/Socket/mex.mjs +50 -0
  64. package/lib/Socket/newsletter.d.ts +134 -0
  65. package/lib/Socket/newsletter.js +351 -0
  66. package/lib/Socket/registration.d.ts +267 -0
  67. package/lib/Socket/registration.js +166 -0
  68. package/lib/Socket/socket.d.ts +43 -0
  69. package/lib/Socket/socket.js +904 -0
  70. package/lib/Socket/username.mjs +132 -0
  71. package/lib/Socket/usync.d.ts +36 -0
  72. package/lib/Socket/usync.js +70 -0
  73. package/lib/Store/index.d.ts +3 -0
  74. package/lib/Store/index.js +10 -0
  75. package/lib/Store/keyed-db.d.ts +30 -0
  76. package/lib/Store/keyed-db.js +233 -0
  77. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  78. package/lib/Store/make-cache-manager-store.js +83 -0
  79. package/lib/Store/make-in-memory-store.d.ts +118 -0
  80. package/lib/Store/make-in-memory-store.js +427 -0
  81. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  82. package/lib/Store/make-ordered-dictionary.js +81 -0
  83. package/lib/Store/object-repository.d.ts +10 -0
  84. package/lib/Store/object-repository.js +27 -0
  85. package/lib/Types/Auth.d.ts +110 -0
  86. package/lib/Types/Auth.js +2 -0
  87. package/lib/Types/Call.d.ts +13 -0
  88. package/lib/Types/Call.js +2 -0
  89. package/lib/Types/Chat.d.ts +102 -0
  90. package/lib/Types/Chat.js +4 -0
  91. package/lib/Types/Contact.d.ts +19 -0
  92. package/lib/Types/Contact.js +2 -0
  93. package/lib/Types/Events.d.ts +157 -0
  94. package/lib/Types/Events.js +2 -0
  95. package/lib/Types/GroupMetadata.d.ts +55 -0
  96. package/lib/Types/GroupMetadata.js +2 -0
  97. package/lib/Types/Label.d.ts +35 -0
  98. package/lib/Types/Label.js +27 -0
  99. package/lib/Types/LabelAssociation.d.ts +29 -0
  100. package/lib/Types/LabelAssociation.js +9 -0
  101. package/lib/Types/Message.d.ts +273 -0
  102. package/lib/Types/Message.js +9 -0
  103. package/lib/Types/Mex.js +39 -0
  104. package/lib/Types/Newsletter.d.ts +103 -0
  105. package/lib/Types/Newsletter.js +38 -0
  106. package/lib/Types/Product.d.ts +78 -0
  107. package/lib/Types/Product.js +2 -0
  108. package/lib/Types/Signal.d.ts +57 -0
  109. package/lib/Types/Signal.js +2 -0
  110. package/lib/Types/Socket.d.ts +111 -0
  111. package/lib/Types/Socket.js +2 -0
  112. package/lib/Types/State.d.ts +27 -0
  113. package/lib/Types/State.js +2 -0
  114. package/lib/Types/USync.d.ts +25 -0
  115. package/lib/Types/USync.js +2 -0
  116. package/lib/Types/index.d.ts +57 -0
  117. package/lib/Types/index.js +43 -0
  118. package/lib/Utils/Mex.js +39 -0
  119. package/lib/Utils/auth-utils.d.ts +18 -0
  120. package/lib/Utils/auth-utils.js +206 -0
  121. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  122. package/lib/Utils/baileys-event-stream.js +57 -0
  123. package/lib/Utils/browser-presets.js +64 -0
  124. package/lib/Utils/business.d.ts +22 -0
  125. package/lib/Utils/business.js +234 -0
  126. package/lib/Utils/chat-utils.d.ts +71 -0
  127. package/lib/Utils/chat-utils.js +726 -0
  128. package/lib/Utils/companion-reg-client-utils.js +40 -0
  129. package/lib/Utils/crypto.d.ts +41 -0
  130. package/lib/Utils/crypto.js +151 -0
  131. package/lib/Utils/decode-wa-message.d.ts +19 -0
  132. package/lib/Utils/decode-wa-message.js +198 -0
  133. package/lib/Utils/event-buffer.d.ts +35 -0
  134. package/lib/Utils/event-buffer.js +514 -0
  135. package/lib/Utils/extended-messages.js +231 -0
  136. package/lib/Utils/generics.d.ts +92 -0
  137. package/lib/Utils/generics.js +425 -0
  138. package/lib/Utils/history.d.ts +15 -0
  139. package/lib/Utils/history.js +96 -0
  140. package/lib/Utils/identity-change-handler.js +52 -0
  141. package/lib/Utils/index.d.ts +17 -0
  142. package/lib/Utils/index.js +40 -0
  143. package/lib/Utils/link-preview.d.ts +21 -0
  144. package/lib/Utils/link-preview.js +93 -0
  145. package/lib/Utils/logger.d.ts +4 -0
  146. package/lib/Utils/logger.js +7 -0
  147. package/lib/Utils/lt-hash.d.ts +12 -0
  148. package/lib/Utils/lt-hash.js +51 -0
  149. package/lib/Utils/make-mutex.d.ts +7 -0
  150. package/lib/Utils/make-mutex.js +43 -0
  151. package/lib/Utils/message-composer.js +293 -0
  152. package/lib/Utils/message-retry-manager.js +226 -0
  153. package/lib/Utils/messages-media.d.ts +116 -0
  154. package/lib/Utils/messages-media.js +815 -0
  155. package/lib/Utils/messages.d.ts +77 -0
  156. package/lib/Utils/messages.js +888 -0
  157. package/lib/Utils/noise-handler.d.ts +21 -0
  158. package/lib/Utils/noise-handler.js +155 -0
  159. package/lib/Utils/offline-node-processor.js +46 -0
  160. package/lib/Utils/pre-key-manager.js +95 -0
  161. package/lib/Utils/process-message.d.ts +41 -0
  162. package/lib/Utils/process-message.js +321 -0
  163. package/lib/Utils/reporting-utils.js +272 -0
  164. package/lib/Utils/signal.d.ts +32 -0
  165. package/lib/Utils/signal.js +160 -0
  166. package/lib/Utils/stanza-ack.js +38 -0
  167. package/lib/Utils/sync-action-utils.js +50 -0
  168. package/lib/Utils/tc-token-utils.js +169 -0
  169. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  170. package/lib/Utils/use-multi-file-auth-state.js +119 -0
  171. package/lib/Utils/validate-connection.d.ts +11 -0
  172. package/lib/Utils/validate-connection.js +229 -0
  173. package/lib/WABinary/constants.d.ts +30 -0
  174. package/lib/WABinary/constants.js +40 -0
  175. package/lib/WABinary/decode.d.ts +7 -0
  176. package/lib/WABinary/decode.js +252 -0
  177. package/lib/WABinary/encode.d.ts +3 -0
  178. package/lib/WABinary/encode.js +265 -0
  179. package/lib/WABinary/generic-utils.d.ts +17 -0
  180. package/lib/WABinary/generic-utils.js +204 -0
  181. package/lib/WABinary/index.d.ts +5 -0
  182. package/lib/WABinary/index.js +21 -0
  183. package/lib/WABinary/jid-utils.d.ts +31 -0
  184. package/lib/WABinary/jid-utils.js +132 -0
  185. package/lib/WABinary/types.d.ts +18 -0
  186. package/lib/WABinary/types.js +2 -0
  187. package/lib/WAM/BinaryInfo.d.ts +17 -0
  188. package/lib/WAM/BinaryInfo.js +13 -0
  189. package/lib/WAM/constants.d.ts +38 -0
  190. package/lib/WAM/constants.js +15350 -0
  191. package/lib/WAM/encode.d.ts +3 -0
  192. package/lib/WAM/encode.js +155 -0
  193. package/lib/WAM/index.d.ts +3 -0
  194. package/lib/WAM/index.js +19 -0
  195. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  196. package/lib/WAUSync/Protocols/USyncContactProtocol.js +55 -0
  197. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  198. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  199. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  200. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  201. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  202. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  203. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +27 -0
  204. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  205. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
  206. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  207. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  208. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  209. package/lib/WAUSync/Protocols/index.js +21 -0
  210. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  211. package/lib/WAUSync/USyncQuery.js +93 -0
  212. package/lib/WAUSync/USyncUser.d.ts +12 -0
  213. package/lib/WAUSync/USyncUser.js +34 -0
  214. package/lib/WAUSync/index.d.ts +3 -0
  215. package/lib/WAUSync/index.js +19 -0
  216. package/lib/index.d.ts +12 -0
  217. package/lib/index.js +52 -0
  218. package/package.json +112 -0
@@ -0,0 +1,558 @@
1
+ // "kikyy dugonggg", ah dejavu (r)
2
+ // tanggal 14 agustus 2025 makassar
3
+ // telegram: @tskiofc & @kyuucode
4
+
5
+ const WAProto = require('../../WAProto').proto;
6
+ const crypto = require('crypto');
7
+ const Utils_1 = require("../Utils");
8
+
9
+ class kikyy {
10
+ constructor(utils, waUploadToServer, relayMessageFn) {
11
+ this.utils = utils;
12
+ this.relayMessage = relayMessageFn
13
+ this.waUploadToServer = waUploadToServer;
14
+
15
+ this.bail = {
16
+ generateWAMessageContent: this.utils.generateWAMessageContent || Utils_1.generateWAMessageContent,
17
+ generateMessageID: Utils_1.generateMessageID,
18
+ getContentType: (msg) => Object.keys(msg.message || {})[0]
19
+ };
20
+ }
21
+
22
+ detectType(content) {
23
+ if (content.requestPaymentMessage) return 'PAYMENT';
24
+ if (content.productMessage) return 'PRODUCT';
25
+ if (content.interactiveMessage) return 'INTERACTIVE';
26
+ if (content.albumMessage) return 'ALBUM';
27
+ if (content.eventMessage) return 'EVENT';
28
+ if (content.pollResultMessage) return 'POLL_RESULT';
29
+ if (content.groupStatusMessage) return 'GROUP_STORY';
30
+ if (content.orderMessage) return 'ORDER';
31
+ if (content.groupLabel) return 'GROUP_LABEL';
32
+ return null;
33
+ }
34
+
35
+ async handlePayment(content, quoted) {
36
+ const data = content.requestPaymentMessage;
37
+ let notes = {};
38
+
39
+ if (data.sticker?.stickerMessage) {
40
+ notes = {
41
+ stickerMessage: {
42
+ ...data.sticker.stickerMessage,
43
+ contextInfo: {
44
+ stanzaId: quoted?.key?.id,
45
+ participant: quoted?.key?.participant || content.sender,
46
+ quotedMessage: quoted?.message
47
+ }
48
+ }
49
+ };
50
+ } else if (data.note) {
51
+ notes = {
52
+ extendedTextMessage: {
53
+ text: data.note,
54
+ contextInfo: {
55
+ stanzaId: quoted?.key?.id,
56
+ participant: quoted?.key?.participant || content.sender,
57
+ quotedMessage: quoted?.message
58
+ }
59
+ }
60
+ };
61
+ }
62
+
63
+ return {
64
+ requestPaymentMessage: WAProto.Message.RequestPaymentMessage.fromObject({
65
+ expiryTimestamp: data.expiry || 0,
66
+ amount1000: data.amount || 0,
67
+ currencyCodeIso4217: data.currency || "IDR",
68
+ requestFrom: data.from || "0@s.whatsapp.net",
69
+ noteMessage: notes,
70
+ background: data.background ?? {
71
+ id: "DEFAULT",
72
+ placeholderArgb: 0xFFF0F0F0
73
+ }
74
+ })
75
+ };
76
+ }
77
+
78
+ async handleProduct(content, jid, quoted) {
79
+ const {
80
+ title,
81
+ description,
82
+ thumbnail,
83
+ productId,
84
+ retailerId,
85
+ url,
86
+ body = "",
87
+ footer = "",
88
+ buttons = [],
89
+ priceAmount1000 = null,
90
+ currencyCode = "IDR"
91
+ } = content.productMessage;
92
+
93
+ let productImage;
94
+
95
+ if (Buffer.isBuffer(thumbnail)) {
96
+ const { imageMessage } = await this.utils.generateWAMessageContent(
97
+ { image: thumbnail },
98
+ { upload: this.waUploadToServer }
99
+ );
100
+ productImage = imageMessage;
101
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
102
+ const { imageMessage } = await this.utils.generateWAMessageContent(
103
+ { image: { url: thumbnail.url }},
104
+ { upload: this.waUploadToServer }
105
+ );
106
+ productImage = imageMessage;
107
+ }
108
+
109
+ return {
110
+ viewOnceMessage: {
111
+ message: {
112
+ interactiveMessage: {
113
+ body: { text: body },
114
+ footer: { text: footer },
115
+ header: {
116
+ title,
117
+ hasMediaAttachment: true,
118
+ productMessage: {
119
+ product: {
120
+ productImage,
121
+ productId,
122
+ title,
123
+ description,
124
+ currencyCode,
125
+ priceAmount1000,
126
+ retailerId,
127
+ url,
128
+ productImageCount: 1
129
+ },
130
+ businessOwnerJid: "0@s.whatsapp.net"
131
+ }
132
+ },
133
+ nativeFlowMessage: { buttons }
134
+ }
135
+ }
136
+ }
137
+ };
138
+ }
139
+
140
+ async handleInteractive(content, jid, quoted) {
141
+ const {
142
+ title,
143
+ footer,
144
+ thumbnail,
145
+ image,
146
+ video,
147
+ document,
148
+ mimetype,
149
+ fileName,
150
+ jpegThumbnail,
151
+ contextInfo,
152
+ externalAdReply,
153
+ buttons = [],
154
+ nativeFlowMessage,
155
+ header,
156
+ carouselMessage,
157
+ shopStorefrontMessage,
158
+ collectionMessage
159
+ } = content.interactiveMessage;
160
+
161
+ let media = null;
162
+ let mediaType = null;
163
+
164
+ if (thumbnail) {
165
+ media = await this.utils.prepareWAMessageMedia(
166
+ { image: { url: thumbnail } },
167
+ { upload: this.waUploadToServer }
168
+ );
169
+ mediaType = 'image';
170
+ } else if (image) {
171
+ if (typeof image === 'object' && image.url) {
172
+ media = await this.utils.prepareWAMessageMedia(
173
+ { image: { url: image.url } },
174
+ { upload: this.waUploadToServer }
175
+ );
176
+ } else {
177
+ media = await this.utils.prepareWAMessageMedia(
178
+ { image: image },
179
+ { upload: this.waUploadToServer }
180
+ );
181
+ }
182
+ mediaType = 'image';
183
+ } else if (video) {
184
+ if (typeof video === 'object' && video.url) {
185
+ media = await this.utils.prepareWAMessageMedia(
186
+ { video: { url: video.url } },
187
+ { upload: this.waUploadToServer }
188
+ );
189
+ } else {
190
+ media = await this.utils.prepareWAMessageMedia(
191
+ { video: video },
192
+ { upload: this.waUploadToServer }
193
+ );
194
+ }
195
+ mediaType = 'video';
196
+ } else if (document) {
197
+ let documentPayload = {
198
+ document: document
199
+ };
200
+ if (jpegThumbnail) {
201
+ if (typeof jpegThumbnail === 'object' && jpegThumbnail.url) {
202
+ documentPayload.jpegThumbnail = { url: jpegThumbnail.url };
203
+ } else {
204
+ documentPayload.jpegThumbnail = jpegThumbnail;
205
+ }
206
+ }
207
+
208
+ media = await this.utils.prepareWAMessageMedia(
209
+ documentPayload,
210
+ { upload: this.waUploadToServer }
211
+ );
212
+ if (fileName) {
213
+ media.documentMessage.fileName = fileName;
214
+ }
215
+ if (mimetype) {
216
+ media.documentMessage.mimetype = mimetype;
217
+ }
218
+ mediaType = 'document';
219
+ }
220
+ let interactiveMessage = {
221
+ body: { text: title || "" },
222
+ footer: { text: footer || "" }
223
+ };
224
+ if (buttons && buttons.length > 0) {
225
+ interactiveMessage.nativeFlowMessage = {
226
+ buttons: buttons
227
+ };
228
+ if (nativeFlowMessage) {
229
+ interactiveMessage.nativeFlowMessage = {
230
+ ...interactiveMessage.nativeFlowMessage,
231
+ ...nativeFlowMessage
232
+ };
233
+ }
234
+ } else if (nativeFlowMessage) {
235
+ interactiveMessage.nativeFlowMessage = nativeFlowMessage;
236
+ }
237
+
238
+ // Catalog/business UI variants of InteractiveMessage. WhatsApp only
239
+ // accepts one "action" sub-message per interactiveMessage, so these
240
+ // are checked in priority order and are mutually exclusive with
241
+ // nativeFlowMessage/buttons above. Caller supplies the sub-message
242
+ // shape directly (see WAProto.proto: InteractiveMessage.CarouselMessage,
243
+ // .ShopMessage, .CollectionMessage) — not validated/transformed here,
244
+ // and not tested against a live WhatsApp Business account.
245
+ if (carouselMessage) {
246
+ delete interactiveMessage.nativeFlowMessage;
247
+ interactiveMessage.carouselMessage = carouselMessage;
248
+ } else if (shopStorefrontMessage) {
249
+ delete interactiveMessage.nativeFlowMessage;
250
+ interactiveMessage.shopStorefrontMessage = shopStorefrontMessage;
251
+ } else if (collectionMessage) {
252
+ delete interactiveMessage.nativeFlowMessage;
253
+ interactiveMessage.collectionMessage = collectionMessage;
254
+ }
255
+
256
+ if (media) {
257
+ interactiveMessage.header = {
258
+ title: header || "",
259
+ hasMediaAttachment: true,
260
+ ...media
261
+ };
262
+ } else {
263
+ interactiveMessage.header = {
264
+ title: header || "",
265
+ hasMediaAttachment: false
266
+ };
267
+ }
268
+
269
+ let finalContextInfo = {};
270
+ if (contextInfo) {
271
+ finalContextInfo = {
272
+ mentionedJid: contextInfo.mentionedJid || [],
273
+ forwardingScore: contextInfo.forwardingScore || 0,
274
+ isForwarded: contextInfo.isForwarded || false,
275
+ ...contextInfo
276
+ };
277
+ }
278
+
279
+ if (externalAdReply) {
280
+ finalContextInfo.externalAdReply = {
281
+ title: externalAdReply.title || "",
282
+ body: externalAdReply.body || "",
283
+ mediaType: externalAdReply.mediaType || 1,
284
+ thumbnailUrl: externalAdReply.thumbnailUrl || "",
285
+ mediaUrl: externalAdReply.mediaUrl || "",
286
+ sourceUrl: externalAdReply.sourceUrl || "",
287
+ showAdAttribution: externalAdReply.showAdAttribution || false,
288
+ renderLargerThumbnail: externalAdReply.renderLargerThumbnail || false,
289
+ ...externalAdReply
290
+ };
291
+ }
292
+
293
+ if (Object.keys(finalContextInfo).length > 0) {
294
+ interactiveMessage.contextInfo = finalContextInfo;
295
+ }
296
+ return {
297
+ interactiveMessage: interactiveMessage
298
+ };
299
+ }
300
+
301
+ async handleAlbum(content, jid, quoted) {
302
+ const array = content.albumMessage;
303
+ const album = await this.utils.generateWAMessageFromContent(jid, {
304
+ messageContextInfo: {
305
+ messageSecret: crypto.randomBytes(32),
306
+ },
307
+ albumMessage: {
308
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
309
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
310
+ },
311
+ }, {
312
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
313
+ quoted,
314
+ upload: this.waUploadToServer
315
+ });
316
+
317
+ await this.relayMessage(jid, album.message, {
318
+ messageId: album.key.id,
319
+ });
320
+
321
+ for (let content of array) {
322
+ const img = await this.utils.generateWAMessage(jid, content, {
323
+ upload: this.waUploadToServer,
324
+ });
325
+
326
+ img.message.messageContextInfo = {
327
+ messageSecret: crypto.randomBytes(32),
328
+ messageAssociation: {
329
+ associationType: 1,
330
+ parentMessageKey: album.key,
331
+ },
332
+ participant: "0@s.whatsapp.net",
333
+ remoteJid: "status@broadcast",
334
+ forwardingScore: 99999,
335
+ isForwarded: true,
336
+ mentionedJid: [jid],
337
+ starred: true,
338
+ labels: ["Y", "Important"],
339
+ isHighlighted: true,
340
+ businessMessageForwardInfo: {
341
+ businessOwnerJid: jid,
342
+ },
343
+ dataSharingContext: {
344
+ showMmDisclosure: true,
345
+ },
346
+ };
347
+
348
+ img.message.forwardedNewsletterMessageInfo = {
349
+ newsletterJid: "120363425458769503@newsletter",
350
+ serverMessageId: 1,
351
+ newsletterName: `𝐒𝐇𝐀𝐑𝐄 𝐒𝐂 𝐅𝐑𝐄𝐄`,
352
+ contentType: 1,
353
+ timestamp: new Date().toISOString(),
354
+ senderName: "Rixzz",
355
+ content: "Text Message",
356
+ priority: "high",
357
+ status: "sent",
358
+ };
359
+
360
+ img.message.disappearingMode = {
361
+ initiator: 3,
362
+ trigger: 4,
363
+ initiatorDeviceJid: jid,
364
+ initiatedByExternalService: true,
365
+ initiatedByUserDevice: true,
366
+ initiatedBySystem: true,
367
+ initiatedByServer: true,
368
+ initiatedByAdmin: true,
369
+ initiatedByUser: true,
370
+ initiatedByApp: true,
371
+ initiatedByBot: true,
372
+ initiatedByMe: true,
373
+ };
374
+
375
+ await this.relayMessage(jid, img.message, {
376
+ messageId: img.key.id,
377
+ quoted: {
378
+ key: {
379
+ remoteJid: album.key.remoteJid,
380
+ id: album.key.id,
381
+ fromMe: true,
382
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
383
+ },
384
+ message: album.message,
385
+ },
386
+ });
387
+ }
388
+ return album;
389
+ }
390
+
391
+ async handleEvent(content, jid, quoted) {
392
+ const eventData = content.eventMessage;
393
+
394
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
395
+ viewOnceMessage: {
396
+ message: {
397
+ messageContextInfo: {
398
+ deviceListMetadata: {},
399
+ deviceListMetadataVersion: 2,
400
+ messageSecret: crypto.randomBytes(32),
401
+ supportPayload: JSON.stringify({
402
+ version: 2,
403
+ is_ai_message: true,
404
+ should_show_system_message: true,
405
+ ticket_id: crypto.randomBytes(16).toString('hex')
406
+ })
407
+ },
408
+ eventMessage: {
409
+ contextInfo: {
410
+ mentionedJid: [jid],
411
+ participant: jid,
412
+ remoteJid: "status@broadcast",
413
+ forwardedNewsletterMessageInfo: {
414
+ newsletterName: "Rixzz",
415
+ newsletterJid: "120363422684021546@newsletter",
416
+ serverMessageId: 1
417
+ }
418
+ },
419
+ isCanceled: eventData.isCanceled || false,
420
+ name: eventData.name,
421
+ description: eventData.description,
422
+ location: eventData.location || {
423
+ degreesLatitude: 0,
424
+ degreesLongitude: 0,
425
+ name: "Location"
426
+ },
427
+ joinLink: eventData.joinLink || '',
428
+ startTime: typeof eventData.startTime === 'string' ? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
429
+ endTime: typeof eventData.endTime === 'string' ? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
430
+ extraGuestsAllowed: eventData.extraGuestsAllowed !== false
431
+ }
432
+ }
433
+ }
434
+ }, { quoted });
435
+
436
+ await this.relayMessage(jid, msg.message, {
437
+ messageId: msg.key.id
438
+ });
439
+ return msg;
440
+ }
441
+
442
+ async handlePollResult(content, jid, quoted) {
443
+ const pollData = content.pollResultMessage;
444
+
445
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
446
+ pollResultSnapshotMessage: {
447
+ name: pollData.name,
448
+ pollVotes: pollData.pollVotes.map(vote => ({
449
+ optionName: vote.optionName,
450
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
451
+ ? vote.optionVoteCount.toString()
452
+ : vote.optionVoteCount
453
+ }))
454
+ }
455
+ }, {
456
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
457
+ quoted
458
+ });
459
+
460
+ await this.relayMessage(jid, msg.message, {
461
+ messageId: msg.key.id
462
+ });
463
+
464
+ return msg;
465
+ }
466
+
467
+ async handleGroupStory(content, jid, quoted) {
468
+ const storyData = content.groupStatusMessage;
469
+ let waMsgContent;
470
+
471
+ if (storyData.message) {
472
+ waMsgContent = storyData;
473
+ } else {
474
+ if (typeof this.bail?.generateWAMessageContent === "function") {
475
+ waMsgContent = await this.bail.generateWAMessageContent(storyData, {
476
+ upload: this.waUploadToServer
477
+ });
478
+ } else if (typeof this.utils?.generateWAMessageContent === "function") {
479
+ waMsgContent = await this.utils.generateWAMessageContent(storyData, {
480
+ upload: this.waUploadToServer
481
+ });
482
+ } else if (typeof this.utils?.prepareMessageContent === "function") {
483
+ waMsgContent = await this.utils.prepareMessageContent(storyData, {
484
+ upload: this.waUploadToServer
485
+ });
486
+ } else {
487
+ waMsgContent = await Utils_1.generateWAMessageContent(storyData, {
488
+ upload: this.waUploadToServer
489
+ });
490
+ }
491
+ }
492
+
493
+ let msg = {
494
+ message: {
495
+ groupStatusMessageV2: {
496
+ message: waMsgContent.message || waMsgContent
497
+ }
498
+ }
499
+ };
500
+
501
+ return await this.relayMessage(jid, msg.message, {
502
+ messageId: this.bail.generateMessageID()
503
+ });
504
+ }
505
+
506
+ // Ported from xata-bail's luxu.js (imup class) — the two message types
507
+ // dugong.js didn't cover yet.
508
+ async handleOrderMessage(content, jid, quoted) {
509
+ const orderData = content.orderMessage;
510
+ const orderMsg = await this.utils.generateWAMessageFromContent(jid, {
511
+ orderMessage: {
512
+ orderId: orderData.orderId || ('POUCODE' + Date.now()),
513
+ thumbnail: orderData.thumbnail || null,
514
+ itemCount: orderData.itemCount || 0,
515
+ status: 'ACCEPTED',
516
+ surface: 'CATALOG',
517
+ message: orderData.message,
518
+ orderTitle: orderData.orderTitle,
519
+ sellerJid: '0@whatsapp.net',
520
+ token: orderData.token || 'POUCODE_EXAMPLE_TOKEN',
521
+ totalAmount1000: orderData.totalAmount1000 || 0,
522
+ totalCurrencyCode: orderData.totalCurrencyCode || 'IDR',
523
+ messageVersion: 2
524
+ }
525
+ }, { quoted: quoted });
526
+ await this.relayMessage(jid, orderMsg.message, {});
527
+ return orderMsg;
528
+ }
529
+
530
+ async handleGbLabel(content, jid) {
531
+ const x = content.groupLabel;
532
+ if (!jid.endsWith('@g.us')) {
533
+ throw new Error('group required!');
534
+ }
535
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
536
+ protocolMessage: {
537
+ type: 'GROUP_MEMBER_LABEL_CHANGE',
538
+ memberLabel: {
539
+ label: x.labelText.slice(0, 30)
540
+ }
541
+ }
542
+ }, {});
543
+ await this.relayMessage(jid, msg.message, {
544
+ additionalNodes: [
545
+ {
546
+ tag: 'meta',
547
+ attrs: {
548
+ tag_reason: 'user_update',
549
+ appdata: 'member_tag'
550
+ },
551
+ content: undefined
552
+ }
553
+ ]
554
+ });
555
+ }
556
+ }
557
+
558
+ module.exports = kikyy;
@@ -0,0 +1,115 @@
1
+ /// <reference types="node" />
2
+ import { proto } from '../../WAProto';
3
+ import { GroupMetadata, ParticipantAction, SocketConfig } from '../Types';
4
+ import { BinaryNode } from '../WABinary';
5
+ export declare const makeGroupsSocket: (config: SocketConfig) => {
6
+ groupMetadata: (jid: string) => Promise<GroupMetadata>;
7
+ groupCreate: (subject: string, participants: string[]) => Promise<GroupMetadata>;
8
+ groupLeave: (id: string) => Promise<void>;
9
+ groupUpdateSubject: (jid: string, subject: string) => Promise<void>;
10
+ groupRequestParticipantsList: (jid: string) => Promise<{
11
+ [key: string]: string;
12
+ }[]>;
13
+ groupRequestParticipantsUpdate: (jid: string, participants: string[], action: 'approve' | 'reject') => Promise<{
14
+ status: string;
15
+ jid: string;
16
+ }[]>;
17
+ groupParticipantsUpdate: (jid: string, participants: string[], action: ParticipantAction) => Promise<{
18
+ status: string;
19
+ jid: string;
20
+ content: BinaryNode;
21
+ }[]>;
22
+ groupUpdateDescription: (jid: string, description?: string) => Promise<void>;
23
+ groupInviteCode: (jid: string) => Promise<string | undefined>;
24
+ groupRevokeInvite: (jid: string) => Promise<string | undefined>;
25
+ groupAcceptInvite: (code: string) => Promise<string | undefined>;
26
+ /**
27
+ * accept a GroupInviteMessage
28
+ * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
29
+ * @param inviteMessage the message to accept
30
+ */
31
+ groupAcceptInviteV4: (key: string | proto.IMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise<string>;
32
+ groupGetInviteInfo: (code: string) => Promise<GroupMetadata>;
33
+ groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise<void>;
34
+ groupSettingUpdate: (jid: string, setting: 'announcement' | 'not_announcement' | 'locked' | 'unlocked') => Promise<void>;
35
+ groupMemberAddMode: (jid: string, mode: 'admin_add' | 'all_member_add') => Promise<void>;
36
+ groupJoinApprovalMode: (jid: string, mode: 'on' | 'off') => Promise<void>;
37
+ groupFetchAllParticipating: () => Promise<{
38
+ [_: string]: GroupMetadata;
39
+ }>;
40
+ processingMutex: {
41
+ mutex<T>(code: () => T | Promise<T>): Promise<T>;
42
+ };
43
+ fetchPrivacySettings: (force?: boolean) => Promise<{
44
+ [_: string]: string;
45
+ }>;
46
+ upsertMessage: (msg: proto.IWebMessageInfo, type: import("../Types").MessageUpsertType) => Promise<void>;
47
+ appPatch: (patchCreate: import("../Types").WAPatchCreate) => Promise<void>;
48
+ sendPresenceUpdate: (type: import("../Types").WAPresence, toJid?: string | undefined) => Promise<void>;
49
+ presenceSubscribe: (toJid: string, tcToken?: Buffer | undefined) => Promise<void>;
50
+ profilePictureUrl: (jid: string, type?: "image" | "preview", timeoutMs?: number | undefined) => Promise<string | undefined>;
51
+ onWhatsApp: (...jids: string[]) => Promise<{
52
+ jid: string;
53
+ exists: unknown;
54
+ lid: unknown;
55
+ }[] | undefined>;
56
+ fetchBlocklist: () => Promise<string[]>;
57
+ fetchStatus: (jid: string) => Promise<{
58
+ status: string | undefined;
59
+ setAt: Date;
60
+ } | undefined>;
61
+ updateProfilePicture: (jid: string, content: import("../Types").WAMediaUpload) => Promise<void>;
62
+ removeProfilePicture: (jid: string) => Promise<void>;
63
+ updateProfileStatus: (status: string) => Promise<void>;
64
+ updateProfileName: (name: string) => Promise<void>;
65
+ updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise<void>;
66
+ updateLastSeenPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
67
+ updateOnlinePrivacy: (value: import("../Types").WAPrivacyOnlineValue) => Promise<void>;
68
+ updateProfilePicturePrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
69
+ updateStatusPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
70
+ updateReadReceiptsPrivacy: (value: import("../Types").WAReadReceiptsValue) => Promise<void>;
71
+ updateGroupsAddPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
72
+ updateDefaultDisappearingMode: (duration: number) => Promise<void>;
73
+ getBusinessProfile: (jid: string) => Promise<void | import("../Types").WABusinessProfile>;
74
+ resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
75
+ chatModify: (mod: import("../Types").ChatModification, jid: string) => Promise<void>;
76
+ cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: string | number | undefined) => Promise<void>;
77
+ addChatLabel: (jid: string, labelId: string) => Promise<void>;
78
+ removeChatLabel: (jid: string, labelId: string) => Promise<void>;
79
+ addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
80
+ removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
81
+ star: (jid: string, messages: {
82
+ id: string;
83
+ fromMe?: boolean | undefined;
84
+ }[], star: boolean) => Promise<void>;
85
+ type: "md";
86
+ ws: any;
87
+ ev: import("../Types").BaileysEventEmitter & {
88
+ process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void;
89
+ buffer(): void;
90
+ createBufferedFunction<A extends any[], T_1>(work: (...args: A) => Promise<T_1>): (...args: A) => Promise<T_1>;
91
+ flush(force?: boolean | undefined): boolean;
92
+ isBuffering(): boolean;
93
+ };
94
+ authState: {
95
+ creds: import("../Types").AuthenticationCreds;
96
+ keys: import("../Types").SignalKeyStoreWithTransaction;
97
+ };
98
+ signalRepository: import("../Types").SignalRepository;
99
+ user: import("../Types").Contact | undefined;
100
+ generateMessageTag: () => string;
101
+ query: (node: BinaryNode, timeoutMs?: number | undefined) => Promise<BinaryNode>;
102
+ waitForMessage: <T_2>(msgId: string, timeoutMs?: number | undefined) => Promise<T_2>;
103
+ waitForSocketOpen: () => Promise<void>;
104
+ sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
105
+ sendNode: (frame: BinaryNode) => Promise<void>;
106
+ logout: (msg?: string | undefined) => Promise<void>;
107
+ end: (error: Error | undefined) => void;
108
+ onUnexpectedError: (err: Error | import("@hapi/boom").Boom<any>, msg: string) => void;
109
+ uploadPreKeys: (count?: number) => Promise<void>;
110
+ uploadPreKeysToServerIfRequired: () => Promise<void>;
111
+ requestPairingCode: (phoneNumber: string) => Promise<string>;
112
+ waitForConnectionUpdate: (check: (u: Partial<import("../Types").ConnectionState>) => boolean | undefined, timeoutMs?: number | undefined) => Promise<void>;
113
+ sendWAMBuffer: (wamBuffer: Buffer) => Promise<BinaryNode>;
114
+ };
115
+ export declare const extractGroupMetadata: (result: BinaryNode) => GroupMetadata;