@sixcore/baileys 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 (278) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +606 -0
  3. package/WAProto/GenerateStatics.sh +4 -0
  4. package/WAProto/WAProto.proto +4357 -0
  5. package/WAProto/index.d.ts +50383 -0
  6. package/WAProto/index.js +155693 -0
  7. package/WASignalGroup/GroupProtocol.js +1697 -0
  8. package/WASignalGroup/ciphertext_message.js +16 -0
  9. package/WASignalGroup/generate-proto.sh +1 -0
  10. package/WASignalGroup/group.proto +42 -0
  11. package/WASignalGroup/group_cipher.js +120 -0
  12. package/WASignalGroup/group_session_builder.js +46 -0
  13. package/WASignalGroup/index.js +5 -0
  14. package/WASignalGroup/keyhelper.js +21 -0
  15. package/WASignalGroup/protobufs.js +3 -0
  16. package/WASignalGroup/queue_job.js +69 -0
  17. package/WASignalGroup/sender_chain_key.js +50 -0
  18. package/WASignalGroup/sender_key_distribution_message.js +78 -0
  19. package/WASignalGroup/sender_key_message.js +92 -0
  20. package/WASignalGroup/sender_key_name.js +70 -0
  21. package/WASignalGroup/sender_key_record.js +56 -0
  22. package/WASignalGroup/sender_key_state.js +129 -0
  23. package/WASignalGroup/sender_message_key.js +39 -0
  24. package/lib/Defaults/baileys-version.json +3 -0
  25. package/lib/Defaults/index.d.ts +53 -0
  26. package/lib/Defaults/index.js +108 -0
  27. package/lib/Signal/libsignal.d.ts +3 -0
  28. package/lib/Signal/libsignal.js +152 -0
  29. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
  30. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  31. package/lib/Socket/Client/index.d.ts +3 -0
  32. package/lib/Socket/Client/index.js +19 -0
  33. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  34. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  35. package/lib/Socket/Client/web-socket-client.d.ts +12 -0
  36. package/lib/Socket/Client/web-socket-client.js +62 -0
  37. package/lib/Socket/business.d.ts +170 -0
  38. package/lib/Socket/business.js +260 -0
  39. package/lib/Socket/chats.d.ts +81 -0
  40. package/lib/Socket/chats.js +950 -0
  41. package/lib/Socket/groups.d.ts +115 -0
  42. package/lib/Socket/groups.js +315 -0
  43. package/lib/Socket/index.d.ts +172 -0
  44. package/lib/Socket/index.js +10 -0
  45. package/lib/Socket/messages-recv.d.ts +158 -0
  46. package/lib/Socket/messages-recv.js +972 -0
  47. package/lib/Socket/messages-send.d.ts +155 -0
  48. package/lib/Socket/messages-send.js +1087 -0
  49. package/lib/Socket/newsletter.d.ts +132 -0
  50. package/lib/Socket/newsletter.js +236 -0
  51. package/lib/Socket/registration.d.ts +264 -0
  52. package/lib/Socket/registration.js +166 -0
  53. package/lib/Socket/socket.d.ts +44 -0
  54. package/lib/Socket/socket.js +643 -0
  55. package/lib/Socket/usync.d.ts +37 -0
  56. package/lib/Socket/usync.js +70 -0
  57. package/lib/Store/index.d.ts +3 -0
  58. package/lib/Store/index.js +10 -0
  59. package/lib/Store/make-cache-manager-store.d.ts +14 -0
  60. package/lib/Store/make-cache-manager-store.js +83 -0
  61. package/lib/Store/make-in-memory-store.d.ts +118 -0
  62. package/lib/Store/make-in-memory-store.js +431 -0
  63. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  64. package/lib/Store/make-ordered-dictionary.js +81 -0
  65. package/lib/Store/object-repository.d.ts +10 -0
  66. package/lib/Store/object-repository.js +27 -0
  67. package/lib/Types/Auth.d.ts +109 -0
  68. package/lib/Types/Auth.js +2 -0
  69. package/lib/Types/Call.d.ts +13 -0
  70. package/lib/Types/Call.js +2 -0
  71. package/lib/Types/Chat.d.ts +107 -0
  72. package/lib/Types/Chat.js +4 -0
  73. package/lib/Types/Contact.d.ts +19 -0
  74. package/lib/Types/Contact.js +2 -0
  75. package/lib/Types/Events.d.ts +172 -0
  76. package/lib/Types/Events.js +2 -0
  77. package/lib/Types/GroupMetadata.d.ts +56 -0
  78. package/lib/Types/GroupMetadata.js +2 -0
  79. package/lib/Types/Label.d.ts +46 -0
  80. package/lib/Types/Label.js +27 -0
  81. package/lib/Types/LabelAssociation.d.ts +29 -0
  82. package/lib/Types/LabelAssociation.js +9 -0
  83. package/lib/Types/Message.d.ts +433 -0
  84. package/lib/Types/Message.js +9 -0
  85. package/lib/Types/Newsletter.d.ts +92 -0
  86. package/lib/Types/Newsletter.js +32 -0
  87. package/lib/Types/Product.d.ts +78 -0
  88. package/lib/Types/Product.js +2 -0
  89. package/lib/Types/Signal.d.ts +57 -0
  90. package/lib/Types/Signal.js +2 -0
  91. package/lib/Types/Socket.d.ts +116 -0
  92. package/lib/Types/Socket.js +2 -0
  93. package/lib/Types/State.d.ts +27 -0
  94. package/lib/Types/State.js +2 -0
  95. package/lib/Types/USync.d.ts +25 -0
  96. package/lib/Types/USync.js +2 -0
  97. package/lib/Types/index.d.ts +66 -0
  98. package/lib/Types/index.js +42 -0
  99. package/lib/Utils/auth-utils.d.ts +18 -0
  100. package/lib/Utils/auth-utils.js +227 -0
  101. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  102. package/lib/Utils/baileys-event-stream.js +63 -0
  103. package/lib/Utils/business.d.ts +22 -0
  104. package/lib/Utils/business.js +234 -0
  105. package/lib/Utils/chat-utils.d.ts +70 -0
  106. package/lib/Utils/chat-utils.js +745 -0
  107. package/lib/Utils/crypto.d.ts +40 -0
  108. package/lib/Utils/crypto.js +199 -0
  109. package/lib/Utils/decode-wa-message.d.ts +36 -0
  110. package/lib/Utils/decode-wa-message.js +234 -0
  111. package/lib/Utils/event-buffer.d.ts +35 -0
  112. package/lib/Utils/event-buffer.js +517 -0
  113. package/lib/Utils/generics.d.ts +88 -0
  114. package/lib/Utils/generics.js +402 -0
  115. package/lib/Utils/history.d.ts +19 -0
  116. package/lib/Utils/history.js +94 -0
  117. package/lib/Utils/index.d.ts +17 -0
  118. package/lib/Utils/index.js +33 -0
  119. package/lib/Utils/link-preview.d.ts +21 -0
  120. package/lib/Utils/link-preview.js +93 -0
  121. package/lib/Utils/logger.d.ts +2 -0
  122. package/lib/Utils/logger.js +7 -0
  123. package/lib/Utils/lt-hash.d.ts +12 -0
  124. package/lib/Utils/lt-hash.js +51 -0
  125. package/lib/Utils/make-mutex.d.ts +7 -0
  126. package/lib/Utils/make-mutex.js +43 -0
  127. package/lib/Utils/messages-media.d.ts +113 -0
  128. package/lib/Utils/messages-media.js +643 -0
  129. package/lib/Utils/messages.d.ts +77 -0
  130. package/lib/Utils/messages.js +1221 -0
  131. package/lib/Utils/noise-handler.d.ts +20 -0
  132. package/lib/Utils/noise-handler.js +160 -0
  133. package/lib/Utils/process-message.d.ts +41 -0
  134. package/lib/Utils/process-message.js +373 -0
  135. package/lib/Utils/signal.d.ts +33 -0
  136. package/lib/Utils/signal.js +159 -0
  137. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  138. package/lib/Utils/use-multi-file-auth-state.js +295 -0
  139. package/lib/Utils/use-single-file-auth-state.d.ts +12 -0
  140. package/lib/Utils/use-single-file-auth-state.js +75 -0
  141. package/lib/Utils/validate-connection.d.ts +11 -0
  142. package/lib/Utils/validate-connection.js +205 -0
  143. package/lib/WABinary/constants.d.ts +27 -0
  144. package/lib/WABinary/constants.js +40 -0
  145. package/lib/WABinary/decode.d.ts +6 -0
  146. package/lib/WABinary/decode.js +264 -0
  147. package/lib/WABinary/encode.d.ts +2 -0
  148. package/lib/WABinary/encode.js +252 -0
  149. package/lib/WABinary/generic-utils.d.ts +14 -0
  150. package/lib/WABinary/generic-utils.js +110 -0
  151. package/lib/WABinary/index.d.ts +5 -0
  152. package/lib/WABinary/index.js +21 -0
  153. package/lib/WABinary/jid-utils.d.ts +31 -0
  154. package/lib/WABinary/jid-utils.js +62 -0
  155. package/lib/WABinary/types.d.ts +18 -0
  156. package/lib/WABinary/types.js +2 -0
  157. package/lib/WAM/BinaryInfo.d.ts +8 -0
  158. package/lib/WAM/BinaryInfo.js +13 -0
  159. package/lib/WAM/constants.d.ts +38 -0
  160. package/lib/WAM/constants.js +15350 -0
  161. package/lib/WAM/encode.d.ts +2 -0
  162. package/lib/WAM/encode.js +155 -0
  163. package/lib/WAM/index.d.ts +3 -0
  164. package/lib/WAM/index.js +19 -0
  165. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  166. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  167. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  168. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  169. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  170. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  171. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  172. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  173. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  174. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
  175. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  176. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  177. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  178. package/lib/WAUSync/Protocols/index.js +20 -0
  179. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  180. package/lib/WAUSync/USyncQuery.js +89 -0
  181. package/lib/WAUSync/USyncUser.d.ts +10 -0
  182. package/lib/WAUSync/USyncUser.js +26 -0
  183. package/lib/WAUSync/index.d.ts +3 -0
  184. package/lib/WAUSync/index.js +19 -0
  185. package/lib/index.js +31 -0
  186. package/package.json +51 -0
  187. package/src/Defaults/baileys-version.json +3 -0
  188. package/src/Defaults/index.ts +133 -0
  189. package/src/Signal/Group/ciphertext-message.ts +9 -0
  190. package/src/Signal/Group/group-session-builder.ts +56 -0
  191. package/src/Signal/Group/group_cipher.ts +117 -0
  192. package/src/Signal/Group/index.ts +11 -0
  193. package/src/Signal/Group/keyhelper.ts +28 -0
  194. package/src/Signal/Group/sender-chain-key.ts +34 -0
  195. package/src/Signal/Group/sender-key-distribution-message.ts +95 -0
  196. package/src/Signal/Group/sender-key-message.ts +96 -0
  197. package/src/Signal/Group/sender-key-name.ts +66 -0
  198. package/src/Signal/Group/sender-key-record.ts +69 -0
  199. package/src/Signal/Group/sender-key-state.ts +134 -0
  200. package/src/Signal/Group/sender-message-key.ts +36 -0
  201. package/src/Signal/libsignal.ts +447 -0
  202. package/src/Signal/lid-mapping.ts +209 -0
  203. package/src/Socket/Client/index.ts +2 -0
  204. package/src/Socket/Client/types.ts +22 -0
  205. package/src/Socket/Client/websocket.ts +56 -0
  206. package/src/Socket/business.ts +421 -0
  207. package/src/Socket/chats.ts +1223 -0
  208. package/src/Socket/communities.ts +477 -0
  209. package/src/Socket/groups.ts +361 -0
  210. package/src/Socket/index.ts +22 -0
  211. package/src/Socket/messages-recv.ts +1563 -0
  212. package/src/Socket/messages-send.ts +1210 -0
  213. package/src/Socket/mex.ts +58 -0
  214. package/src/Socket/newsletter.ts +229 -0
  215. package/src/Socket/socket.ts +1072 -0
  216. package/src/Types/Auth.ts +115 -0
  217. package/src/Types/Bussines.ts +20 -0
  218. package/src/Types/Call.ts +14 -0
  219. package/src/Types/Chat.ts +138 -0
  220. package/src/Types/Contact.ts +24 -0
  221. package/src/Types/Events.ts +132 -0
  222. package/src/Types/GroupMetadata.ts +70 -0
  223. package/src/Types/Label.ts +48 -0
  224. package/src/Types/LabelAssociation.ts +35 -0
  225. package/src/Types/Message.ts +424 -0
  226. package/src/Types/Newsletter.ts +98 -0
  227. package/src/Types/Product.ts +85 -0
  228. package/src/Types/Signal.ts +76 -0
  229. package/src/Types/Socket.ts +150 -0
  230. package/src/Types/State.ts +43 -0
  231. package/src/Types/USync.ts +27 -0
  232. package/src/Types/globals.d.ts +8 -0
  233. package/src/Types/index.ts +67 -0
  234. package/src/Utils/auth-utils.ts +331 -0
  235. package/src/Utils/browser-utils.ts +31 -0
  236. package/src/Utils/business.ts +286 -0
  237. package/src/Utils/chat-utils.ts +933 -0
  238. package/src/Utils/crypto.ts +184 -0
  239. package/src/Utils/decode-wa-message.ts +355 -0
  240. package/src/Utils/event-buffer.ts +662 -0
  241. package/src/Utils/generics.ts +470 -0
  242. package/src/Utils/history.ts +114 -0
  243. package/src/Utils/index.ts +18 -0
  244. package/src/Utils/link-preview.ts +111 -0
  245. package/src/Utils/logger.ts +13 -0
  246. package/src/Utils/lt-hash.ts +65 -0
  247. package/src/Utils/make-mutex.ts +45 -0
  248. package/src/Utils/message-retry-manager.ts +229 -0
  249. package/src/Utils/messages-media.ts +820 -0
  250. package/src/Utils/messages.ts +1137 -0
  251. package/src/Utils/noise-handler.ts +192 -0
  252. package/src/Utils/pre-key-manager.ts +126 -0
  253. package/src/Utils/process-message.ts +622 -0
  254. package/src/Utils/signal.ts +214 -0
  255. package/src/Utils/use-multi-file-auth-state.ts +136 -0
  256. package/src/Utils/validate-connection.ts +253 -0
  257. package/src/WABinary/constants.ts +1305 -0
  258. package/src/WABinary/decode.ts +281 -0
  259. package/src/WABinary/encode.ts +253 -0
  260. package/src/WABinary/generic-utils.ts +127 -0
  261. package/src/WABinary/index.ts +5 -0
  262. package/src/WABinary/jid-utils.ts +128 -0
  263. package/src/WABinary/types.ts +17 -0
  264. package/src/WAM/BinaryInfo.ts +12 -0
  265. package/src/WAM/constants.ts +22889 -0
  266. package/src/WAM/encode.ts +169 -0
  267. package/src/WAM/index.ts +3 -0
  268. package/src/WAUSync/Protocols/USyncContactProtocol.ts +32 -0
  269. package/src/WAUSync/Protocols/USyncDeviceProtocol.ts +78 -0
  270. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.ts +35 -0
  271. package/src/WAUSync/Protocols/USyncStatusProtocol.ts +44 -0
  272. package/src/WAUSync/Protocols/UsyncBotProfileProtocol.ts +76 -0
  273. package/src/WAUSync/Protocols/UsyncLIDProtocol.ts +33 -0
  274. package/src/WAUSync/Protocols/index.ts +4 -0
  275. package/src/WAUSync/USyncQuery.ts +133 -0
  276. package/src/WAUSync/USyncUser.ts +32 -0
  277. package/src/WAUSync/index.ts +3 -0
  278. package/src/index.ts +13 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Rajeh Taher/WhiskeySockets
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,606 @@
1
+ <div align="center">
2
+
3
+ # @sixcore/baileys
4
+
5
+ ![npm](https://img.shields.io/npm/v/@sixcore/baileys?color=%23009a44&label=npm)
6
+ ![license](https://img.shields.io/badge/license-MIT-%23ce1126)
7
+ ![node](https://img.shields.io/badge/node-%3E%3D18-%23fce100)
8
+ ![made in](https://img.shields.io/badge/feito%20em-Mo%C3%A7ambique%20-%23009a44)
9
+
10
+ **Fork modificado e extendido do Baileys — WhatsApp Web API**
11
+ Desenvolvido em Moçambique , para o mundo.
12
+ Suporte nativo a botões, interactive messages, buttons flow, download melhorado e muito mais.
13
+
14
+ [GitHub](https://github.com/Ytsixx/lena-baileys) • [Issues](https://github.com/Ytsixx/lena-baileys/issues)
15
+
16
+ ---
17
+
18
+ *"A luta continua"*
19
+
20
+ </div>
21
+
22
+ ---
23
+
24
+ ## ⚠️ Aviso
25
+
26
+ Este projeto **não é afiliado, endossado ou conectado oficialmente ao WhatsApp Inc. ou Meta Platforms, Inc.**
27
+ Use com responsabilidade. O autor **não se responsabiliza** por banimentos ou violações dos Termos de Serviço do WhatsApp.
28
+
29
+ ---
30
+
31
+ ## 📦 Instalação
32
+
33
+ ```bash
34
+ npm install @sixcore/baileys
35
+ ```
36
+
37
+ ---
38
+
39
+ ## 🚀 Início Rápido
40
+
41
+ ```javascript
42
+ const makeWASocket = require('@sixcore/baileys').default
43
+ const { useMultiFileAuthState, fetchLatestBaileysVersion, DisconnectReason } = require('@sixcore/baileys')
44
+ const qrcode = require('qrcode-terminal')
45
+
46
+ async function start() {
47
+ const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
48
+ const { version } = await fetchLatestBaileysVersion()
49
+
50
+ const sock = makeWASocket({
51
+ version,
52
+ auth: state,
53
+ printQRInTerminal: false,
54
+ browser: ['Ubuntu', 'Chrome', '20.0.04'],
55
+ })
56
+
57
+ sock.ev.on('creds.update', saveCreds)
58
+
59
+ sock.ev.on('connection.update', ({ connection, lastDisconnect, qr }) => {
60
+ if (qr) qrcode.generate(qr, { small: true })
61
+ if (connection === 'open') console.log('✅ Conectado!')
62
+ if (connection === 'close') {
63
+ const code = lastDisconnect?.error?.output?.statusCode
64
+ if (code !== DisconnectReason.loggedOut) start()
65
+ }
66
+ })
67
+
68
+ sock.ev.on('messages.upsert', async ({ messages, type }) => {
69
+ if (type !== 'notify') return
70
+ for (const m of messages) {
71
+ if (m.key.fromMe) continue
72
+ console.log('Nova mensagem de:', m.key.remoteJid)
73
+ }
74
+ })
75
+ }
76
+
77
+ start()
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 🔗 Conexão
83
+
84
+ ### QR Code
85
+
86
+ ```javascript
87
+ const sock = makeWASocket({
88
+ auth: state,
89
+ printQRInTerminal: true
90
+ })
91
+ ```
92
+
93
+ ### Pairing Code (sem QR)
94
+
95
+ ```javascript
96
+ const sock = makeWASocket({
97
+ auth: state,
98
+ printQRInTerminal: false
99
+ })
100
+
101
+ if (!sock.authState.creds.registered) {
102
+ const number = '2588XXXXXXXX' // número moçambicano: 258 + número
103
+ const code = await sock.requestPairingCode(number)
104
+ console.log('Código:', code)
105
+ }
106
+ ```
107
+
108
+ ---
109
+
110
+ ## 💬 Mensagens
111
+
112
+ ### Texto simples
113
+
114
+ ```javascript
115
+ await sock.sendMessage(jid, { text: 'Olá! Maboko!' })
116
+ ```
117
+
118
+ ### Responder mensagem
119
+
120
+ ```javascript
121
+ await sock.sendMessage(jid, { text: 'Resposta!' }, { quoted: message })
122
+ ```
123
+
124
+ ### Mencionar usuário
125
+
126
+ ```javascript
127
+ await sock.sendMessage(jid, {
128
+ text: '@2588XXXXXXXX olá!',
129
+ mentions: ['2588XXXXXXXX@s.whatsapp.net']
130
+ })
131
+ ```
132
+
133
+ ### Editar mensagem
134
+
135
+ ```javascript
136
+ const sent = await sock.sendMessage(jid, { text: 'Texto original' })
137
+ await sock.sendMessage(jid, { text: 'Texto corrigido', edit: sent.key })
138
+ ```
139
+
140
+ ### Apagar para todos
141
+
142
+ ```javascript
143
+ const sent = await sock.sendMessage(jid, { text: 'Olá' })
144
+ await sock.sendMessage(jid, { delete: sent.key })
145
+ ```
146
+
147
+ ### Reagir
148
+
149
+ ```javascript
150
+ await sock.sendMessage(jid, {
151
+ react: { text: '', key: message.key }
152
+ })
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 🔘 Botões
158
+
159
+ ### Buttons simples
160
+
161
+ ```javascript
162
+ await sock.sendMessage(jid, {
163
+ text: 'Escolha uma opção:',
164
+ footer: '@sixcore/baileys ',
165
+ buttons: [
166
+ { buttonId: 'op1', buttonText: { displayText: '✅ Opção 1' }, type: 1 },
167
+ { buttonId: 'op2', buttonText: { displayText: '❌ Opção 2' }, type: 1 },
168
+ ],
169
+ headerType: 1,
170
+ viewOnce: true,
171
+ })
172
+ ```
173
+
174
+ ### Buttons Flow (botões + lista embutida)
175
+
176
+ > Exclusivo do `@sixcore/baileys` — combina botões clicáveis com lista dropdown num único componente.
177
+
178
+ ```javascript
179
+ await sock.sendMessage(jid, {
180
+ text: 'Escolha:',
181
+ footer: '@sixcore/baileys ',
182
+ buttons: [
183
+ { buttonId: 'b1', buttonText: { displayText: '🤖 Opção A' }, type: 1 },
184
+ {
185
+ buttonId: 'b2',
186
+ buttonText: { displayText: '📋 Abrir Lista' },
187
+ type: 4,
188
+ nativeFlowInfo: {
189
+ name: 'single_select',
190
+ paramsJson: JSON.stringify({
191
+ title: 'Selecione',
192
+ sections: [{
193
+ title: 'Secção 1',
194
+ highlight_label: '⭐ Novo',
195
+ rows: [
196
+ { id: 'row1', title: 'Item 1', description: 'Descrição 1' },
197
+ { id: 'row2', title: 'Item 2', description: 'Descrição 2' },
198
+ ]
199
+ }]
200
+ })
201
+ }
202
+ }
203
+ ],
204
+ headerType: 1,
205
+ viewOnce: true,
206
+ })
207
+ ```
208
+
209
+ ### Interactive Buttons
210
+
211
+ ```javascript
212
+ await sock.sendMessage(jid, {
213
+ text: 'Selecione uma ação:',
214
+ title: 'Menu',
215
+ footer: '@sixcore/baileys ',
216
+ interactiveButtons: [
217
+ { name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: '✅ Confirmar', id: 'confirm' }) },
218
+ { name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: '❌ Cancelar', id: 'cancel' }) },
219
+ { name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '🌐 GitHub', url: 'https://github.com/Ytsixx/lena-baileys' }) },
220
+ ],
221
+ })
222
+ ```
223
+
224
+ ### Interactive Lista
225
+
226
+ ```javascript
227
+ await sock.sendMessage(jid, {
228
+ text: 'Escolha um item:',
229
+ title: 'Menu',
230
+ footer: '@sixcore/baileys ',
231
+ interactiveButtons: [{
232
+ name: 'single_select',
233
+ buttonParamsJson: JSON.stringify({
234
+ title: 'Abrir lista',
235
+ sections: [
236
+ {
237
+ title: 'Secção 1',
238
+ rows: [
239
+ { id: 'item1', title: 'Item 1', description: 'Descrição 1' },
240
+ { id: 'item2', title: 'Item 2', description: 'Descrição 2' },
241
+ ]
242
+ }
243
+ ]
244
+ })
245
+ }]
246
+ })
247
+ ```
248
+
249
+ ### Imagem com Botões
250
+
251
+ ```javascript
252
+ await sock.sendMessage(jid, {
253
+ image: buffer,
254
+ caption: 'Legenda',
255
+ footer: '@sixcore/baileys ',
256
+ buttons: [
257
+ { buttonId: 'sim', buttonText: { displayText: '✅ Sim' }, type: 1 },
258
+ { buttonId: 'nao', buttonText: { displayText: '❌ Não' }, type: 1 },
259
+ ],
260
+ headerType: 4,
261
+ viewOnce: true,
262
+ })
263
+ ```
264
+
265
+ ### Imagem com Interactive Buttons
266
+
267
+ ```javascript
268
+ await sock.sendMessage(jid, {
269
+ image: buffer,
270
+ caption: 'Descrição',
271
+ title: 'Título',
272
+ footer: '@sixcore/baileys ',
273
+ media: true,
274
+ interactiveButtons: [
275
+ { name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: '❤️ Curtir', id: 'like' }) },
276
+ { name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '🌐 Ver mais', url: 'https://github.com/Ytsixx/lena-baileys' }) },
277
+ ],
278
+ })
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 🖼️ Mídia
284
+
285
+ ### Imagem
286
+
287
+ ```javascript
288
+ await sock.sendMessage(jid, {
289
+ image: { url: 'https://...' },
290
+ caption: 'Legenda'
291
+ })
292
+ ```
293
+
294
+ ### Vídeo
295
+
296
+ ```javascript
297
+ await sock.sendMessage(jid, {
298
+ video: { url: 'https://...' },
299
+ caption: 'Legenda',
300
+ mimetype: 'video/mp4'
301
+ })
302
+ ```
303
+
304
+ ### GIF
305
+
306
+ ```javascript
307
+ await sock.sendMessage(jid, {
308
+ video: { url: 'https://...' },
309
+ gifPlayback: true,
310
+ mimetype: 'video/mp4'
311
+ })
312
+ ```
313
+
314
+ ### Áudio
315
+
316
+ ```javascript
317
+ await sock.sendMessage(jid, {
318
+ audio: { url: 'https://...' },
319
+ mimetype: 'audio/mp4'
320
+ })
321
+ ```
322
+
323
+ ### PTT (nota de voz)
324
+
325
+ ```javascript
326
+ await sock.sendMessage(jid, {
327
+ audio: { url: 'https://...' },
328
+ mimetype: 'audio/ogg; codecs=opus',
329
+ ptt: true
330
+ })
331
+ ```
332
+
333
+ ### Documento
334
+
335
+ ```javascript
336
+ await sock.sendMessage(jid, {
337
+ document: { url: 'https://...' },
338
+ mimetype: 'application/pdf',
339
+ fileName: 'arquivo.pdf'
340
+ })
341
+ ```
342
+
343
+ ### Sticker
344
+
345
+ ```javascript
346
+ await sock.sendMessage(jid, { sticker: buffer })
347
+ ```
348
+
349
+ ### View Once
350
+
351
+ ```javascript
352
+ await sock.sendMessage(jid, {
353
+ image: { url: 'https://...' },
354
+ viewOnce: true,
355
+ caption: 'Ver uma vez'
356
+ })
357
+ ```
358
+
359
+ ---
360
+
361
+ ## 📥 Download de Mídia
362
+
363
+ ### Original
364
+
365
+ ```javascript
366
+ const { downloadContentFromMessage } = require('@sixcore/baileys')
367
+
368
+ const stream = await downloadContentFromMessage(message.imageMessage, 'image')
369
+ const chunks = []
370
+ for await (const chunk of stream) chunks.push(chunk)
371
+ const buffer = Buffer.concat(chunks)
372
+ ```
373
+
374
+ ### V1 — Melhorado ⚡
375
+
376
+ > Retry automático, progresso, cache em memória, timeout e salvamento direto em arquivo.
377
+
378
+ ```javascript
379
+ const { downloadContentFromMessageV1 } = require('@sixcore/baileys')
380
+
381
+ // Como buffer
382
+ const buffer = await downloadContentFromMessageV1(message.imageMessage, 'image', {
383
+ asBuffer: true,
384
+ useCache: true,
385
+ timeoutMs: 60_000,
386
+ retries: 3,
387
+ onProgress: ({ downloaded, total, percent }) => {
388
+ console.log(`Download: ${percent}%`)
389
+ }
390
+ })
391
+
392
+ // Salvar em arquivo
393
+ await downloadContentFromMessageV1(message.videoMessage, 'video', {
394
+ saveToFile: './video.mp4',
395
+ retries: 5,
396
+ timeoutMs: 120_000,
397
+ })
398
+ ```
399
+
400
+ #### Opções do V1
401
+
402
+ | Opção | Tipo | Padrão | Descrição |
403
+ |---|---|---|---|
404
+ | `asBuffer` | boolean | false | Retorna Buffer em vez de stream |
405
+ | `useCache` | boolean | false | Cache em memória para evitar re-downloads |
406
+ | `saveToFile` | string | null | Caminho para salvar direto em arquivo |
407
+ | `timeoutMs` | number | 60000 | Timeout em milissegundos |
408
+ | `retries` | number | 3 | Tentativas automáticas em caso de falha |
409
+ | `onProgress` | function | null | `({ downloaded, total, percent }) => void` |
410
+
411
+ ---
412
+
413
+ ## 👤 Perfil
414
+
415
+ ```javascript
416
+ // Foto de perfil
417
+ const url = await sock.profilePictureUrl(jid, 'image')
418
+
419
+ // Status/Bio
420
+ const status = await sock.fetchStatus(jid)
421
+
422
+ // Verificar se número existe
423
+ const [result] = await sock.onWhatsApp(jid)
424
+ if (result.exists) console.log('JID:', result.jid)
425
+
426
+ // Atualizar foto
427
+ await sock.updateProfilePicture(jid, { url: './foto.jpg' })
428
+
429
+ // Atualizar nome
430
+ await sock.updateProfileName('Novo Nome')
431
+
432
+ // Atualizar status
433
+ await sock.updateProfileStatus('Feito em Moçambique ')
434
+ ```
435
+
436
+ ---
437
+
438
+ ## 👥 Grupos
439
+
440
+ ```javascript
441
+ // Criar grupo
442
+ const group = await sock.groupCreate('Nome do Grupo', ['2588XXXXXXXX@s.whatsapp.net'])
443
+
444
+ // Adicionar / Remover / Promover / Rebaixar
445
+ await sock.groupParticipantsUpdate(jid, ['2588XXXXXXXX@s.whatsapp.net'], 'add')
446
+ await sock.groupParticipantsUpdate(jid, ['2588XXXXXXXX@s.whatsapp.net'], 'remove')
447
+ await sock.groupParticipantsUpdate(jid, ['2588XXXXXXXX@s.whatsapp.net'], 'promote')
448
+ await sock.groupParticipantsUpdate(jid, ['2588XXXXXXXX@s.whatsapp.net'], 'demote')
449
+
450
+ // Metadados
451
+ const meta = await sock.groupMetadata(jid)
452
+
453
+ // Link de convite
454
+ const code = await sock.groupInviteCode(jid)
455
+ console.log('https://chat.whatsapp.com/' + code)
456
+
457
+ // Sair do grupo
458
+ await sock.groupLeave(jid)
459
+ ```
460
+
461
+ ---
462
+
463
+ ## 🔔 Eventos
464
+
465
+ ```javascript
466
+ sock.ev.on('messages.upsert', ({ messages, type }) => { })
467
+ sock.ev.on('messages.update', (updates) => { })
468
+ sock.ev.on('connection.update', ({ connection, qr, lastDisconnect }) => { })
469
+ sock.ev.on('creds.update', saveCreds)
470
+ sock.ev.on('group-participants.update', ({ id, participants, action }) => { })
471
+ sock.ev.on('presence.update', ({ id, presences }) => { })
472
+ sock.ev.on('call', (calls) => { })
473
+ ```
474
+
475
+ ---
476
+
477
+ ## 🛠️ Utilitários
478
+
479
+ ```javascript
480
+ const {
481
+ getContentType,
482
+ getDevice,
483
+ jidNormalizedUser,
484
+ detectMimeType,
485
+ clearDownloadCache
486
+ } = require('@sixcore/baileys')
487
+
488
+ // Tipo da mensagem
489
+ const type = getContentType(message)
490
+ // 'conversation' | 'imageMessage' | 'videoMessage' | ...
491
+
492
+ // Dispositivo pelo ID
493
+ const device = getDevice(message.key.id)
494
+ // 'android' | 'ios' | 'web' | 'desktop'
495
+
496
+ // Normalizar JID
497
+ const jid = jidNormalizedUser('2588XXXXXXXX@s.whatsapp.net')
498
+
499
+ // Mime type por buffer
500
+ const mime = detectMimeType(buffer)
501
+ // 'image/jpeg' | 'video/mp4' | 'audio/ogg' | ...
502
+
503
+ // Limpar cache de downloads
504
+ clearDownloadCache()
505
+ ```
506
+
507
+ ---
508
+
509
+ ## 📋 Enquetes
510
+
511
+ ```javascript
512
+ await sock.sendMessage(jid, {
513
+ poll: {
514
+ name: 'Qual cidade preferes?',
515
+ values: ['Maputo 🌆', 'Beira 🌊', 'Nampula 🌿', 'Tete ⛏️'],
516
+ selectableCount: 1,
517
+ }
518
+ })
519
+ ```
520
+
521
+ ---
522
+
523
+ ## 📍 Localização
524
+
525
+ ```javascript
526
+ // Maputo — capital de Moçambique
527
+ await sock.sendMessage(jid, {
528
+ location: {
529
+ degreesLatitude: -25.9692,
530
+ degreesLongitude: 32.5732
531
+ }
532
+ })
533
+ ```
534
+
535
+ ---
536
+
537
+ ## 🔒 Privacidade
538
+
539
+ ```javascript
540
+ await sock.updateLastSeenPrivacy('contacts')
541
+ await sock.updateOnlinePrivacy('all')
542
+ await sock.updateProfilePicturePrivacy('contacts')
543
+ await sock.updateStatusPrivacy('contacts')
544
+ await sock.updateReadReceiptsPrivacy('all')
545
+ await sock.updateGroupsAddPrivacy('contacts')
546
+ await sock.updateBlockStatus(jid, 'block') // ou 'unblock'
547
+ ```
548
+
549
+ ---
550
+
551
+ ## 🆔 Formato de JIDs
552
+
553
+ | Tipo | Formato |
554
+ |---|---|
555
+ | Usuário (MZ) | `2588XXXXXXXX@s.whatsapp.net` |
556
+ | Grupo | `123456789-123456@g.us` |
557
+ | Status | `status@broadcast` |
558
+ | Broadcast | `123456789@broadcast` |
559
+ | Newsletter | `123456789@newsletter` |
560
+
561
+ ---
562
+
563
+ ## ⚙️ Configuração do Socket
564
+
565
+ ```javascript
566
+ const sock = makeWASocket({
567
+ version,
568
+ auth: state,
569
+ printQRInTerminal: false,
570
+ browser: ['Ubuntu', 'Chrome', '20.0.04'],
571
+ markOnlineOnConnect: false,
572
+ syncFullHistory: false,
573
+ getMessage: async (key) => { /* buscar do store */ },
574
+ cachedGroupMetadata: async (jid) => groupCache.get(jid),
575
+ logger: pino({ level: 'silent' }),
576
+ })
577
+ ```
578
+
579
+ ---
580
+
581
+ ## 📝 Changelog
582
+
583
+ ### v7.0.0-rc.9
584
+ - ✅ Suporte nativo a **buttons**, **buttons flow**, **interactive buttons**, **interactive lista**
585
+ - ✅ Suporte a **imagem/vídeo com botões**
586
+ - ✅ `downloadContentFromMessageV1` — retry automático, cache, progresso, timeout, salvar em arquivo
587
+ - ✅ `detectMimeType` — detecção de mime type por buffer
588
+ - ✅ `clearDownloadCache` — limpeza manual do cache de downloads
589
+
590
+ ---
591
+
592
+ ## 📄 Licença
593
+
594
+ MIT — © Sixx
595
+
596
+ ---
597
+
598
+ <div align="center">
599
+
600
+ **Feito com em Moçambique**
601
+
602
+ [@sixcore/baileys](https://github.com/Ytsixx/lena-baileys) — por **Sixx**
603
+
604
+ *Moçambique para o mundo* 🌍
605
+
606
+ </div>
@@ -0,0 +1,4 @@
1
+ yarn pbjs -t static-module -w commonjs -o ./WAProto/index.js ./WAProto/WAProto.proto;
2
+ yarn pbts -o ./WAProto/index.d.ts ./WAProto/index.js;
3
+
4
+ #protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_opt=env=node,useOptionals=true,forceLong=long --ts_proto_out=. ./src/Binary/WAMessage.proto;