@developmentyora/baileyss 0.0.1-security → 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.

Potentially problematic release.


This version of @developmentyora/baileyss might be problematic. Click here for more details.

Files changed (116) hide show
  1. package/LICENSE +30 -0
  2. package/README.md +404 -3
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +6902 -0
  5. package/WAProto/fix-imports.js +85 -0
  6. package/WAProto/index.d.ts +79257 -0
  7. package/WAProto/index.js +242946 -0
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/index.js +130 -0
  10. package/lib/Signal/Group/ciphertext-message.js +12 -0
  11. package/lib/Signal/Group/group-session-builder.js +30 -0
  12. package/lib/Signal/Group/group_cipher.js +82 -0
  13. package/lib/Signal/Group/index.js +12 -0
  14. package/lib/Signal/Group/keyhelper.js +18 -0
  15. package/lib/Signal/Group/sender-chain-key.js +26 -0
  16. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  17. package/lib/Signal/Group/sender-key-message.js +66 -0
  18. package/lib/Signal/Group/sender-key-name.js +48 -0
  19. package/lib/Signal/Group/sender-key-record.js +41 -0
  20. package/lib/Signal/Group/sender-key-state.js +84 -0
  21. package/lib/Signal/Group/sender-message-key.js +26 -0
  22. package/lib/Signal/libsignal.js +431 -0
  23. package/lib/Signal/lid-mapping.js +277 -0
  24. package/lib/Socket/Client/index.js +3 -0
  25. package/lib/Socket/Client/types.js +11 -0
  26. package/lib/Socket/Client/websocket.js +84 -0
  27. package/lib/Socket/business.js +379 -0
  28. package/lib/Socket/chats.js +1193 -0
  29. package/lib/Socket/communities.js +431 -0
  30. package/lib/Socket/groups.js +374 -0
  31. package/lib/Socket/index.js +12 -0
  32. package/lib/Socket/luxu.js +386 -0
  33. package/lib/Socket/messages-recv.js +1916 -0
  34. package/lib/Socket/messages-send.js +1453 -0
  35. package/lib/Socket/mex.js +41 -0
  36. package/lib/Socket/newsletter.js +294 -0
  37. package/lib/Socket/socket.js +980 -0
  38. package/lib/Socket/username.js +234 -0
  39. package/lib/Store/index.js +10 -0
  40. package/lib/Store/keyed-db.js +108 -0
  41. package/lib/Store/make-cache-manager-store.js +85 -0
  42. package/lib/Store/make-in-memory-store.js +198 -0
  43. package/lib/Store/make-ordered-dictionary.js +75 -0
  44. package/lib/Store/object-repository.js +32 -0
  45. package/lib/Types/Auth.js +2 -0
  46. package/lib/Types/Bussines.js +2 -0
  47. package/lib/Types/Call.js +2 -0
  48. package/lib/Types/Chat.js +8 -0
  49. package/lib/Types/Contact.js +2 -0
  50. package/lib/Types/Events.js +2 -0
  51. package/lib/Types/GroupMetadata.js +2 -0
  52. package/lib/Types/Label.js +25 -0
  53. package/lib/Types/LabelAssociation.js +7 -0
  54. package/lib/Types/Message.js +11 -0
  55. package/lib/Types/Mex.js +37 -0
  56. package/lib/Types/Product.js +2 -0
  57. package/lib/Types/Signal.js +2 -0
  58. package/lib/Types/Socket.js +3 -0
  59. package/lib/Types/State.js +56 -0
  60. package/lib/Types/USync.js +2 -0
  61. package/lib/Types/index.js +26 -0
  62. package/lib/Utils/auth-utils.js +302 -0
  63. package/lib/Utils/browser-utils.js +49 -0
  64. package/lib/Utils/business.js +231 -0
  65. package/lib/Utils/chat-utils.js +872 -0
  66. package/lib/Utils/companion-reg-client-utils.js +35 -0
  67. package/lib/Utils/crypto.js +118 -0
  68. package/lib/Utils/decode-wa-message.js +350 -0
  69. package/lib/Utils/event-buffer.js +622 -0
  70. package/lib/Utils/generics.js +403 -0
  71. package/lib/Utils/history.js +134 -0
  72. package/lib/Utils/identity-change-handler.js +50 -0
  73. package/lib/Utils/index.js +23 -0
  74. package/lib/Utils/link-preview.js +85 -0
  75. package/lib/Utils/logger.js +3 -0
  76. package/lib/Utils/lt-hash.js +8 -0
  77. package/lib/Utils/make-mutex.js +33 -0
  78. package/lib/Utils/message-composer.js +273 -0
  79. package/lib/Utils/message-retry-manager.js +265 -0
  80. package/lib/Utils/messages-media.js +788 -0
  81. package/lib/Utils/messages.js +1260 -0
  82. package/lib/Utils/noise-handler.js +201 -0
  83. package/lib/Utils/offline-node-processor.js +40 -0
  84. package/lib/Utils/pre-key-manager.js +106 -0
  85. package/lib/Utils/process-message.js +630 -0
  86. package/lib/Utils/reporting-utils.js +258 -0
  87. package/lib/Utils/signal.js +201 -0
  88. package/lib/Utils/stanza-ack.js +38 -0
  89. package/lib/Utils/sync-action-utils.js +49 -0
  90. package/lib/Utils/tc-token-utils.js +163 -0
  91. package/lib/Utils/use-multi-file-auth-state.js +121 -0
  92. package/lib/Utils/validate-connection.js +203 -0
  93. package/lib/WABinary/constants.js +1301 -0
  94. package/lib/WABinary/decode.js +262 -0
  95. package/lib/WABinary/encode.js +220 -0
  96. package/lib/WABinary/generic-utils.js +204 -0
  97. package/lib/WABinary/index.js +6 -0
  98. package/lib/WABinary/jid-utils.js +98 -0
  99. package/lib/WABinary/types.js +2 -0
  100. package/lib/WAM/BinaryInfo.js +10 -0
  101. package/lib/WAM/constants.js +22853 -0
  102. package/lib/WAM/encode.js +150 -0
  103. package/lib/WAM/index.js +4 -0
  104. package/lib/WAUSync/Protocols/USyncContactProtocol.js +52 -0
  105. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
  106. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  107. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
  108. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  109. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  110. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  111. package/lib/WAUSync/Protocols/index.js +6 -0
  112. package/lib/WAUSync/USyncQuery.js +98 -0
  113. package/lib/WAUSync/USyncUser.js +31 -0
  114. package/lib/WAUSync/index.js +4 -0
  115. package/lib/index.js +20 -0
  116. package/package.json +152 -3
@@ -0,0 +1,386 @@
1
+ import { proto } from '../../WAProto/index.js'
2
+ import * as Utils from '../Utils/index.js'
3
+ import crypto from 'crypto'
4
+
5
+ export default class imup {
6
+ constructor(utils, waUploadToServer, relayMessageFn) {
7
+ this.utils = utils
8
+ this.relayMessage = relayMessageFn
9
+ this.waUploadToServer = waUploadToServer
10
+ }
11
+
12
+ detectType(content) {
13
+ if (content.requestPaymentMessage) return 'PAYMENT'
14
+ if (content.productMessage) return 'PRODUCT'
15
+ if (content.albumMessage) return 'ALBUM'
16
+ if (content.eventMessage) return 'EVENT'
17
+ if (content.pollResultMessage) return 'POLL_RESULT'
18
+ if (content.orderMessage) return 'ORDER'
19
+ if (content.groupStatus) return 'GROUP_STATUS'
20
+ if (content.groupLabel) return 'GROUP_LABEL'
21
+ return null
22
+ }
23
+
24
+ async handlePayment(content, quoted) {
25
+ const data = content.requestPaymentMessage
26
+ let notes = {}
27
+
28
+ if (data.sticker?.stickerMessage) {
29
+ notes = {
30
+ stickerMessage: {
31
+ ...data.sticker.stickerMessage,
32
+ contextInfo: {
33
+ stanzaId: quoted?.key?.id,
34
+ participant: quoted?.key?.participant || content.sender,
35
+ quotedMessage: quoted?.message
36
+ }
37
+ }
38
+ }
39
+ } else if (data.note) {
40
+ notes = {
41
+ extendedTextMessage: {
42
+ text: data.note,
43
+ contextInfo: {
44
+ stanzaId: quoted?.key?.id,
45
+ participant: quoted?.key?.participant || content.sender,
46
+ quotedMessage: quoted?.message
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ return {
53
+ requestPaymentMessage: proto.Message.RequestPaymentMessage.fromObject({
54
+ expiryTimestamp: data.expiry || 0,
55
+ amount1000: data.amount || 0,
56
+ currencyCodeIso4217: data.currency || "IDR",
57
+ requestFrom: data.from || "0@s.whatsapp.net",
58
+ noteMessage: notes,
59
+ background: data.background?? {
60
+ id: "DEFAULT",
61
+ placeholderArgb: 0xFFF0F0F0
62
+ }
63
+ })
64
+ }
65
+ }
66
+
67
+ async handleProduct(content, jid, quoted) {
68
+ const {
69
+ title,
70
+ description,
71
+ thumbnail,
72
+ productId,
73
+ retailerId,
74
+ url,
75
+ body = "",
76
+ footer = "",
77
+ buttons = [],
78
+ priceAmount1000 = null,
79
+ currencyCode = "IDR"
80
+ } = content.productMessage
81
+
82
+ let productImage
83
+
84
+ if (Buffer.isBuffer(thumbnail)) {
85
+ const { imageMessage } = await this.utils.generateWAMessageContent(
86
+ { image: thumbnail },
87
+ { upload: this.waUploadToServer }
88
+ )
89
+ productImage = imageMessage
90
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
91
+ const { imageMessage } = await this.utils.generateWAMessageContent(
92
+ { image: { url: thumbnail.url } },
93
+ { upload: this.waUploadToServer }
94
+ )
95
+ productImage = imageMessage
96
+ }
97
+
98
+ return {
99
+ viewOnceMessage: {
100
+ message: {
101
+ interactiveMessage: {
102
+ body: { text: body },
103
+ footer: { text: footer },
104
+ header: {
105
+ title,
106
+ hasMediaAttachment: true,
107
+ productMessage: {
108
+ product: {
109
+ productImage,
110
+ productId,
111
+ title,
112
+ description,
113
+ currencyCode,
114
+ priceAmount1000,
115
+ retailerId,
116
+ url,
117
+ productImageCount: 1
118
+ },
119
+ businessOwnerJid: "0@s.whatsapp.net"
120
+ }
121
+ },
122
+ nativeFlowMessage: { buttons }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ async handleAlbum(content, jid, quoted) {
130
+ const array = content.albumMessage
131
+ const album = await this.utils.generateWAMessageFromContent(jid, {
132
+ messageContextInfo: {
133
+ messageSecret: crypto.randomBytes(32),
134
+ },
135
+ albumMessage: {
136
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
137
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
138
+ },
139
+ }, {
140
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
141
+ quoted,
142
+ upload: this.waUploadToServer
143
+ })
144
+
145
+ await this.relayMessage(jid, album.message, {
146
+ messageId: album.key.id,
147
+ })
148
+
149
+ for (let content of array) {
150
+ const img = await this.utils.generateWAMessage(jid, content, {
151
+ upload: this.waUploadToServer,
152
+ })
153
+
154
+ img.message.messageContextInfo = {
155
+ messageSecret: crypto.randomBytes(32),
156
+ messageAssociation: {
157
+ associationType: 1,
158
+ parentMessageKey: album.key,
159
+ },
160
+ participant: "0@s.whatsapp.net",
161
+ remoteJid: "status@broadcast",
162
+ forwardingScore: 99999,
163
+ isForwarded: true,
164
+ mentionedJid: [jid],
165
+ starred: true,
166
+ labels: ["Y", "Important"],
167
+ isHighlighted: true,
168
+ businessMessageForwardInfo: {
169
+ businessOwnerJid: jid,
170
+ },
171
+ dataSharingContext: {
172
+ showMmDisclosure: true,
173
+ },
174
+ }
175
+
176
+ img.message.forwardedNewsletterMessageInfo = {
177
+ newsletterJid: "0@newsletter",
178
+ serverMessageId: 1,
179
+ newsletterName: `WhatsApp`,
180
+ timestamp: new Date().toISOString(),
181
+ senderName: "7-Yuukey",
182
+ contentType: "UPDATE_CARD",
183
+ priority: "high",
184
+ status: "sent",
185
+ }
186
+
187
+ img.message.disappearingMode = {
188
+ initiator: 3,
189
+ trigger: 4,
190
+ initiatorDeviceJid: jid,
191
+ initiatedByExternalService: true,
192
+ initiatedByUserDevice: true,
193
+ initiatedBySystem: true,
194
+ initiatedByServer: true,
195
+ initiatedByAdmin: true,
196
+ initiatedByUser: true,
197
+ initiatedByApp: true,
198
+ initiatedByBot: true,
199
+ initiatedByMe: true,
200
+ }
201
+
202
+ await this.relayMessage(jid, img.message, {
203
+ messageId: img.key.id,
204
+ quoted: {
205
+ key: {
206
+ remoteJid: album.key.remoteJid,
207
+ id: album.key.id,
208
+ fromMe: true,
209
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
210
+ },
211
+ message: album.message,
212
+ },
213
+ })
214
+ }
215
+ return album
216
+ }
217
+
218
+ async handleEvent(content, jid, quoted) {
219
+ const eventData = content.eventMessage
220
+
221
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
222
+ viewOnceMessage: {
223
+ message: {
224
+ messageContextInfo: {
225
+ deviceListMetadata: {},
226
+ deviceListMetadataVersion: 2,
227
+ messageSecret: crypto.randomBytes(32),
228
+ supportPayload: JSON.stringify({
229
+ version: 2,
230
+ is_ai_message: true,
231
+ should_show_system_message: true,
232
+ ticket_id: crypto.randomBytes(16).toString('hex')
233
+ })
234
+ },
235
+ eventMessage: {
236
+ contextInfo: {
237
+ mentionedJid: [jid],
238
+ participant: jid,
239
+ remoteJid: "status@broadcast",
240
+ forwardedNewsletterMessageInfo: {
241
+ newsletterName: "ᴋɪʏᴏʀᴀ ᴍᴀɴᴀɢᴇᴍᴇɴᴛ",
242
+ newsletterJid: "120363427594836299@newsletter",
243
+ serverMessageId: 1
244
+ }
245
+ },
246
+ isCanceled: eventData.isCanceled || false,
247
+ name: eventData.name,
248
+ description: eventData.description,
249
+ location: eventData.location || {
250
+ degreesLatitude: 0,
251
+ degreesLongitude: 0,
252
+ name: "Location"
253
+ },
254
+ joinLink: eventData.joinLink || '',
255
+ startTime: typeof eventData.startTime === 'string'? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
256
+ endTime: typeof eventData.endTime === 'string'? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
257
+ extraGuestsAllowed: eventData.extraGuestsAllowed!== false
258
+ }
259
+ }
260
+ }
261
+ }, { quoted })
262
+
263
+ await this.relayMessage(jid, msg.message, {
264
+ messageId: msg.key.id
265
+ })
266
+ return msg
267
+ }
268
+
269
+ async handlePollResult(content, jid, quoted) {
270
+ const pollData = content.pollResultMessage
271
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
272
+ pollResultSnapshotMessage: {
273
+ name: pollData.name,
274
+ pollVotes: pollData.pollVotes.map(vote => ({
275
+ optionName: vote.optionName,
276
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
277
+ ? vote.optionVoteCount.toString()
278
+ : vote.optionVoteCount
279
+ })),
280
+ contextInfo: {
281
+ isForwarded: true,
282
+ forwardingScore: 1,
283
+ forwardedNewsletterMessageInfo: {
284
+ newsletterName: pollData.newsletter.newsletterName || "120363427594836299@newsletter",
285
+ newsletterJid: pollData.newsletter.newsletterJid || "Newsletter",
286
+ serverMessageId: 1000,
287
+ contentType: "UPDATE"
288
+ }
289
+ }
290
+ }
291
+ }, {
292
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
293
+ quoted
294
+ })
295
+
296
+ await this.relayMessage(jid, msg.message, {
297
+ messageId: msg.key.id
298
+ })
299
+
300
+ return msg
301
+ }
302
+
303
+ async handleOrderMessage(content, jid, quoted) {
304
+ const orderData = content.orderMessage
305
+
306
+ const Haha = await this.utils.generateWAMessageFromContent(jid, {
307
+ orderMessage: {
308
+ orderId: orderData.orderId || ("ᴋɪʏᴏʀᴀ ᴍᴀɴᴀɢᴇᴍᴇɴᴛ" + Date.now()),
309
+ thumbnail: orderData.thumbnail || null,
310
+ itemCount: orderData.itemCount || 0,
311
+ status: "ACCEPTED",
312
+ surface: "CATALOG",
313
+ message: orderData.message,
314
+ orderTitle: orderData.orderTitle,
315
+ sellerJid: "0@whatsapp.net",
316
+ token: orderData.token || "POUCODE_EXAMPLE_TOKEN",
317
+ totalAmount1000: orderData.totalAmount1000 || 0,
318
+ totalCurrencyCode: orderData.totalCurrencyCode || "IDR",
319
+ messageVersion: 2
320
+ }
321
+ }, { quoted: quoted })
322
+
323
+ await this.relayMessage(jid, Haha.message, {})
324
+ return Haha
325
+ }
326
+
327
+ async handleGroupStory(content, jid, quoted) {
328
+ const storyData = content.groupStatus
329
+ let messageContent
330
+
331
+ if (storyData.message) {
332
+ messageContent = storyData
333
+ } else {
334
+ if (typeof this.utils?.generateWAMessageContent === "function") {
335
+ messageContent = await this.utils.generateWAMessageContent(storyData, {
336
+ upload: this.waUploadToServer
337
+ })
338
+ } else {
339
+ messageContent = await Utils.generateWAMessageContent(storyData, {
340
+ upload: this.waUploadToServer
341
+ })
342
+ }
343
+ }
344
+
345
+ let msg = {
346
+ message: {
347
+ groupStatusMessageV2: {
348
+ message: messageContent.message || messageContent
349
+ }
350
+ }
351
+ }
352
+
353
+ return await this.relayMessage(jid, msg.message, {
354
+ messageId: this.utils.generateMessageID()
355
+ })
356
+ }
357
+
358
+ async handleGbLabel(content, jid) {
359
+ const x = content.groupLabel
360
+ if (!jid.endsWith('@g.us')) {
361
+ throw new Error('group required!')
362
+ }
363
+
364
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
365
+ protocolMessage: {
366
+ type: "GROUP_MEMBER_LABEL_CHANGE",
367
+ memberLabel: {
368
+ label: x.labelText.slice(0, 30)
369
+ }
370
+ }
371
+ }, {})
372
+
373
+ await this.relayMessage(jid, msg.message, {
374
+ additionalNodes: [
375
+ {
376
+ tag: 'meta',
377
+ attrs: {
378
+ tag_reason: 'user_update',
379
+ appdata: 'member_tag'
380
+ },
381
+ content: undefined
382
+ }
383
+ ]
384
+ })
385
+ }
386
+ }