@kyyinfinite/baileys 1.0.0 → 2.1.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 (248) hide show
  1. package/README.md +582 -1340
  2. package/WAProto/WAProto.proto +360 -916
  3. package/WAProto/fix-imports.js +22 -18
  4. package/WAProto/index.d.ts +14015 -0
  5. package/WAProto/index.js +47122 -81757
  6. package/engine-requirements.js +10 -0
  7. package/lib/Defaults/index.d.ts +15 -14
  8. package/lib/Defaults/index.d.ts.map +1 -1
  9. package/lib/Defaults/index.js +99 -107
  10. package/lib/Defaults/index.js.map +1 -1
  11. package/lib/Kyyinfinite/AIRich.js +2041 -0
  12. package/lib/Kyyinfinite/BaseBuilder.js +64 -0
  13. package/lib/Kyyinfinite/Button.js +341 -0
  14. package/lib/Kyyinfinite/ButtonV2.js +175 -0
  15. package/lib/Kyyinfinite/Carousel.js +125 -0
  16. package/lib/Kyyinfinite/Foad.js +542 -0
  17. package/lib/Kyyinfinite/Foad2.js +466 -0
  18. package/lib/Kyyinfinite/Simple/AIBuilder.js +18 -0
  19. package/lib/Kyyinfinite/Simple/BuilderFactories.js +17 -0
  20. package/lib/Kyyinfinite/Simple/ButtonBuilder.js +107 -0
  21. package/lib/Kyyinfinite/Simple/CardBuilder.js +179 -0
  22. package/lib/Kyyinfinite/Simple/CarouselBuilder.js +97 -0
  23. package/lib/Kyyinfinite/Simple/FoadBuilder.js +18 -0
  24. package/lib/Kyyinfinite/Simple/KyyMessage.js +46 -0
  25. package/lib/Kyyinfinite/Simple/MediaBuilder.js +41 -0
  26. package/lib/Kyyinfinite/Simple/MessageBuilder.js +55 -0
  27. package/lib/Kyyinfinite/Simple/MessageTypesBuilder.js +3 -0
  28. package/lib/Kyyinfinite/Simple/SimpleBuilder.js +28 -0
  29. package/lib/Kyyinfinite/Simple/SimpleClient.js +120 -0
  30. package/lib/Kyyinfinite/Simple/TextBuilder.js +28 -0
  31. package/lib/Kyyinfinite/Simple/UniversalMediaBuilder.js +21 -0
  32. package/lib/Kyyinfinite/Simple/index.d.ts +232 -0
  33. package/lib/Kyyinfinite/Simple/index.js +38 -0
  34. package/lib/Kyyinfinite/Simple/jid.js +55 -0
  35. package/lib/Kyyinfinite/Simple/messageUtils.js +49 -0
  36. package/lib/Kyyinfinite/Simple/parseMessage.js +55 -0
  37. package/lib/Kyyinfinite/Toolkit.js +453 -0
  38. package/lib/Kyyinfinite/constants.js +1 -0
  39. package/lib/Kyyinfinite/errors.js +39 -0
  40. package/lib/Kyyinfinite/index.d.ts +2 -0
  41. package/lib/Kyyinfinite/index.js +2 -0
  42. package/lib/Kyyinfinite/wrapper.d.ts +2 -0
  43. package/lib/Kyyinfinite/wrapper.js +10 -0
  44. package/lib/Signal/Group/group_cipher.js.map +1 -1
  45. package/lib/Signal/Group/keyhelper.d.ts.map +1 -1
  46. package/lib/Signal/Group/keyhelper.js.map +1 -1
  47. package/lib/Signal/Group/sender-chain-key.js.map +1 -1
  48. package/lib/Signal/Group/sender-key-message.js.map +1 -1
  49. package/lib/Signal/Group/sender-message-key.js.map +1 -1
  50. package/lib/Signal/libsignal.d.ts.map +1 -1
  51. package/lib/Signal/libsignal.js +45 -17
  52. package/lib/Signal/libsignal.js.map +1 -1
  53. package/lib/Signal/lid-mapping.d.ts +4 -0
  54. package/lib/Signal/lid-mapping.d.ts.map +1 -1
  55. package/lib/Signal/lid-mapping.js +6 -0
  56. package/lib/Signal/lid-mapping.js.map +1 -1
  57. package/lib/Socket/business.d.ts +213 -532
  58. package/lib/Socket/business.d.ts.map +1 -1
  59. package/lib/Socket/business.js +358 -401
  60. package/lib/Socket/chats.d.ts +16 -2
  61. package/lib/Socket/chats.d.ts.map +1 -1
  62. package/lib/Socket/chats.js +247 -40
  63. package/lib/Socket/chats.js.map +1 -1
  64. package/lib/Socket/communities.d.ts +269 -641
  65. package/lib/Socket/communities.d.ts.map +1 -1
  66. package/lib/Socket/groups.d.ts +13 -2
  67. package/lib/Socket/groups.d.ts.map +1 -1
  68. package/lib/Socket/groups.js +21 -1
  69. package/lib/Socket/groups.js.map +1 -1
  70. package/lib/Socket/index.d.ts +255 -631
  71. package/lib/Socket/index.d.ts.map +1 -1
  72. package/lib/Socket/index.js +9 -10
  73. package/lib/Socket/index.js.map +1 -1
  74. package/lib/Socket/messages-recv.d.ts +23 -58
  75. package/lib/Socket/messages-recv.d.ts.map +1 -1
  76. package/lib/Socket/messages-recv.js +645 -181
  77. package/lib/Socket/messages-recv.js.map +1 -1
  78. package/lib/Socket/messages-send.d.ts +195 -575
  79. package/lib/Socket/messages-send.d.ts.map +1 -1
  80. package/lib/Socket/messages-send.js +1099 -1549
  81. package/lib/Socket/messages-send.js.map +1 -1
  82. package/lib/Socket/mex.d.ts.map +1 -1
  83. package/lib/Socket/mex.js +2 -8
  84. package/lib/Socket/mex.js.map +1 -1
  85. package/lib/Socket/newsletter.d.ts +11 -18
  86. package/lib/Socket/newsletter.d.ts.map +1 -1
  87. package/lib/Socket/newsletter.js +167 -302
  88. package/lib/Socket/newsletter.js.map +1 -1
  89. package/lib/Socket/socket.d.ts +6 -2
  90. package/lib/Socket/socket.d.ts.map +1 -1
  91. package/lib/Socket/socket.js +59 -25
  92. package/lib/Socket/socket.js.map +1 -1
  93. package/lib/Types/Auth.d.ts +1 -0
  94. package/lib/Types/Auth.d.ts.map +1 -1
  95. package/lib/Types/Bussines.d.ts +22 -34
  96. package/lib/Types/Call.d.ts +1 -1
  97. package/lib/Types/Call.d.ts.map +1 -1
  98. package/lib/Types/Chat.d.ts +1 -0
  99. package/lib/Types/Chat.d.ts.map +1 -1
  100. package/lib/Types/Contact.d.ts +2 -0
  101. package/lib/Types/Contact.d.ts.map +1 -1
  102. package/lib/Types/Events.d.ts +20 -1
  103. package/lib/Types/Events.d.ts.map +1 -1
  104. package/lib/Types/GroupMetadata.d.ts +4 -1
  105. package/lib/Types/GroupMetadata.d.ts.map +1 -1
  106. package/lib/Types/Message.d.ts +239 -341
  107. package/lib/Types/Message.d.ts.map +1 -1
  108. package/lib/Types/Message.js.map +1 -1
  109. package/lib/Types/{Newsletter.d.ts → Mex.d.ts} +11 -5
  110. package/lib/Types/Mex.d.ts.map +1 -0
  111. package/lib/Types/{Newsletter.js → Mex.js} +9 -3
  112. package/lib/Types/Mex.js.map +1 -0
  113. package/lib/Types/Signal.d.ts +12 -1
  114. package/lib/Types/Signal.d.ts.map +1 -1
  115. package/lib/Types/Socket.d.ts +126 -148
  116. package/lib/Types/Socket.d.ts.map +1 -1
  117. package/lib/Types/State.d.ts +58 -0
  118. package/lib/Types/State.d.ts.map +1 -1
  119. package/lib/Types/State.js +43 -0
  120. package/lib/Types/State.js.map +1 -1
  121. package/lib/Types/index.d.ts +52 -52
  122. package/lib/Types/index.d.ts.map +1 -1
  123. package/lib/Types/index.js +23 -30
  124. package/lib/Types/index.js.map +1 -1
  125. package/lib/Utils/auth-utils.d.ts +5 -0
  126. package/lib/Utils/auth-utils.d.ts.map +1 -1
  127. package/lib/Utils/auth-utils.js +12 -0
  128. package/lib/Utils/auth-utils.js.map +1 -1
  129. package/lib/Utils/browser-utils.d.ts.map +1 -1
  130. package/lib/Utils/browser-utils.js +1 -0
  131. package/lib/Utils/browser-utils.js.map +1 -1
  132. package/lib/Utils/chat-utils.d.ts +34 -4
  133. package/lib/Utils/chat-utils.d.ts.map +1 -1
  134. package/lib/Utils/chat-utils.js +80 -20
  135. package/lib/Utils/chat-utils.js.map +1 -1
  136. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  137. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  138. package/lib/Utils/companion-reg-client-utils.js +35 -0
  139. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  140. package/lib/Utils/crypto.d.ts +12 -12
  141. package/lib/Utils/crypto.d.ts.map +1 -1
  142. package/lib/Utils/crypto.js.map +1 -1
  143. package/lib/Utils/decode-wa-message.d.ts +18 -0
  144. package/lib/Utils/decode-wa-message.d.ts.map +1 -1
  145. package/lib/Utils/decode-wa-message.js +34 -0
  146. package/lib/Utils/decode-wa-message.js.map +1 -1
  147. package/lib/Utils/event-buffer.d.ts +2 -0
  148. package/lib/Utils/event-buffer.d.ts.map +1 -1
  149. package/lib/Utils/event-buffer.js +49 -1
  150. package/lib/Utils/event-buffer.js.map +1 -1
  151. package/lib/Utils/generics.d.ts +3 -2
  152. package/lib/Utils/generics.d.ts.map +1 -1
  153. package/lib/Utils/generics.js +10 -1
  154. package/lib/Utils/generics.js.map +1 -1
  155. package/lib/Utils/history.d.ts +2 -0
  156. package/lib/Utils/history.d.ts.map +1 -1
  157. package/lib/Utils/history.js +12 -9
  158. package/lib/Utils/history.js.map +1 -1
  159. package/lib/Utils/identity-change-handler.d.ts +7 -0
  160. package/lib/Utils/identity-change-handler.d.ts.map +1 -1
  161. package/lib/Utils/identity-change-handler.js +1 -0
  162. package/lib/Utils/identity-change-handler.js.map +1 -1
  163. package/lib/Utils/index.d.ts +22 -25
  164. package/lib/Utils/index.d.ts.map +1 -1
  165. package/lib/Utils/index.js +2 -4
  166. package/lib/Utils/index.js.map +1 -1
  167. package/lib/Utils/link-preview.js +2 -2
  168. package/lib/Utils/link-preview.js.map +1 -1
  169. package/lib/Utils/logger.d.ts +1 -2
  170. package/lib/Utils/logger.d.ts.map +1 -1
  171. package/lib/Utils/message-retry-manager.d.ts +5 -0
  172. package/lib/Utils/message-retry-manager.d.ts.map +1 -1
  173. package/lib/Utils/message-retry-manager.js +40 -0
  174. package/lib/Utils/message-retry-manager.js.map +1 -1
  175. package/lib/Utils/messages-media.d.ts +16 -13
  176. package/lib/Utils/messages-media.d.ts.map +1 -1
  177. package/lib/Utils/messages-media.js +85 -79
  178. package/lib/Utils/messages-media.js.map +1 -1
  179. package/lib/Utils/messages.d.ts +1 -1
  180. package/lib/Utils/messages.d.ts.map +1 -1
  181. package/lib/Utils/messages.js +751 -1096
  182. package/lib/Utils/messages.js.map +1 -1
  183. package/lib/Utils/noise-handler.d.ts +1 -1
  184. package/lib/Utils/process-message.d.ts.map +1 -1
  185. package/lib/Utils/process-message.js +103 -1
  186. package/lib/Utils/process-message.js.map +1 -1
  187. package/lib/Utils/signal.d.ts +13 -0
  188. package/lib/Utils/signal.d.ts.map +1 -1
  189. package/lib/Utils/signal.js +42 -0
  190. package/lib/Utils/signal.js.map +1 -1
  191. package/lib/Utils/sync-action-utils.d.ts.map +1 -1
  192. package/lib/Utils/sync-action-utils.js +1 -0
  193. package/lib/Utils/sync-action-utils.js.map +1 -1
  194. package/lib/Utils/tc-token-utils.d.ts +26 -1
  195. package/lib/Utils/tc-token-utils.d.ts.map +1 -1
  196. package/lib/Utils/tc-token-utils.js +151 -5
  197. package/lib/Utils/tc-token-utils.js.map +1 -1
  198. package/lib/Utils/validate-connection.d.ts.map +1 -1
  199. package/lib/Utils/validate-connection.js +12 -2
  200. package/lib/Utils/validate-connection.js.map +1 -1
  201. package/lib/WABinary/decode.d.ts +1 -1
  202. package/lib/WABinary/decode.d.ts.map +1 -1
  203. package/lib/WABinary/generic-utils.d.ts +1 -3
  204. package/lib/WABinary/generic-utils.d.ts.map +1 -1
  205. package/lib/WABinary/generic-utils.js +0 -78
  206. package/lib/WABinary/generic-utils.js.map +1 -1
  207. package/lib/WAM/encode.d.ts +1 -1
  208. package/lib/WAM/encode.d.ts.map +1 -1
  209. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
  210. package/lib/WAUSync/Protocols/USyncContactProtocol.js +26 -3
  211. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
  212. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  213. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  214. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  215. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  216. package/lib/WAUSync/Protocols/index.d.ts +1 -0
  217. package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
  218. package/lib/WAUSync/Protocols/index.js +1 -0
  219. package/lib/WAUSync/Protocols/index.js.map +1 -1
  220. package/lib/WAUSync/USyncQuery.d.ts +1 -0
  221. package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
  222. package/lib/WAUSync/USyncQuery.js +6 -2
  223. package/lib/WAUSync/USyncQuery.js.map +1 -1
  224. package/lib/WAUSync/USyncUser.d.ts +4 -0
  225. package/lib/WAUSync/USyncUser.d.ts.map +1 -1
  226. package/lib/WAUSync/USyncUser.js +8 -0
  227. package/lib/WAUSync/USyncUser.js.map +1 -1
  228. package/lib/index.d.ts +3 -2
  229. package/lib/index.d.ts.map +1 -1
  230. package/lib/index.js +13 -12
  231. package/lib/index.js.map +1 -1
  232. package/package.json +104 -23
  233. package/test/core.test.js +38 -0
  234. package/test/simple-api.test.js +183 -0
  235. package/lib/Socket/dugong.d.ts +0 -130
  236. package/lib/Socket/dugong.d.ts.map +0 -1
  237. package/lib/Socket/dugong.js +0 -768
  238. package/lib/Socket/dugong.js.map +0 -1
  239. package/lib/Types/Newsletter.d.ts.map +0 -1
  240. package/lib/Types/Newsletter.js.map +0 -1
  241. package/lib/Utils/kyy-features.d.ts +0 -158
  242. package/lib/Utils/kyy-features.js +0 -365
  243. package/lib/Utils/rich-messages.d.ts +0 -277
  244. package/lib/Utils/rich-messages.d.ts.map +0 -1
  245. package/lib/Utils/rich-messages.js +0 -1144
  246. package/lib/Utils/rich-messages.js.map +0 -1
  247. package/lib/Utils/sticker-pack.d.ts +0 -10
  248. package/lib/Utils/sticker-pack.js +0 -111
@@ -0,0 +1,542 @@
1
+ import crypto from 'crypto';
2
+ import { generateWAMessageFromContent } from '../Utils/messages.js';
3
+ import { generateMessageIDV2 } from '../Utils/generics.js';
4
+ import { BaseBuilder } from './BaseBuilder.js';
5
+ import { Toolkit } from './Toolkit.js';
6
+ import { AIRich } from './AIRich.js';
7
+
8
+ class Foad extends BaseBuilder {
9
+ #client;
10
+
11
+ constructor(client, { dynamic = true } = {}) {
12
+ super();
13
+
14
+ if (!client) {
15
+ throw new Error('Socket is required');
16
+ }
17
+
18
+ this.#client = client;
19
+
20
+ this._dynamic = !!dynamic;
21
+ this._messageText = '';
22
+ this._previewTitle = 'Preview';
23
+
24
+ this._tabs = [];
25
+
26
+ this._responseId = crypto.randomUUID();
27
+ this._botResponseId = crypto.randomUUID();
28
+
29
+ this._lastMessageKey = null;
30
+ }
31
+
32
+ /**
33
+ * Set response ID
34
+ */
35
+ setResponseId(id) {
36
+ if (typeof id !== 'string') {
37
+ throw new TypeError('Response id must be a string');
38
+ }
39
+
40
+ this._responseId = id;
41
+
42
+ return this;
43
+ }
44
+
45
+ /**
46
+ * Generate new response ID
47
+ */
48
+ refreshResponseId() {
49
+ this._responseId = crypto.randomUUID();
50
+
51
+ return this;
52
+ }
53
+
54
+ /**
55
+ * Set bot response ID
56
+ */
57
+ setBotResponseId(id) {
58
+ if (typeof id !== 'string') {
59
+ throw new TypeError('Bot response id must be a string');
60
+ }
61
+
62
+ this._botResponseId = id;
63
+
64
+ return this;
65
+ }
66
+
67
+ /**
68
+ * Generate new bot response ID
69
+ */
70
+ refreshBotResponseId() {
71
+ this._botResponseId = crypto.randomUUID();
72
+
73
+ return this;
74
+ }
75
+
76
+ /**
77
+ * Add title / message text
78
+ */
79
+ addTitle(text) {
80
+ if (typeof text !== 'string') {
81
+ throw new TypeError('Title must be a string');
82
+ }
83
+
84
+ this._messageText = text;
85
+
86
+ return this;
87
+ }
88
+
89
+ /**
90
+ * Set FOAD preview title
91
+ */
92
+ setPreviewTitle(title) {
93
+ if (typeof title !== 'string') {
94
+ throw new TypeError('Preview title must be a string');
95
+ }
96
+
97
+ this._previewTitle = title;
98
+
99
+ return this;
100
+ }
101
+
102
+ /**
103
+ * Add HTML widget
104
+ *
105
+ * This creates:
106
+ *
107
+ * tabs[]
108
+ * └── sections[]
109
+ * └── GenAIaeacdsnwHtmlPrimitive
110
+ */
111
+ addHtml(
112
+ html,
113
+ {
114
+ title = 'HTML',
115
+ id,
116
+ url = 'https://nixel.dev',
117
+ trustedSources = ['nixel.dev'],
118
+ stepEntries = []
119
+ } = {}
120
+ ) {
121
+ if (typeof html !== 'string') {
122
+ throw new TypeError('HTML must be a string');
123
+ }
124
+
125
+ if (typeof title !== 'string') {
126
+ throw new TypeError('Tab title must be a string');
127
+ }
128
+
129
+ if (typeof url !== 'string') {
130
+ throw new TypeError('URL must be a string');
131
+ }
132
+
133
+ if (!Array.isArray(trustedSources)) {
134
+ throw new TypeError('trustedSources must be an array');
135
+ }
136
+
137
+ if (!Array.isArray(stepEntries)) {
138
+ throw new TypeError('stepEntries must be an array');
139
+ }
140
+
141
+ const tabId = id ?? `tab_${this._tabs.length}`;
142
+
143
+ if (typeof tabId !== 'string' || !tabId) {
144
+ throw new TypeError('Tab id must be a non-empty string');
145
+ }
146
+
147
+ if (this._tabs.some(tab => tab.id === tabId)) {
148
+ throw new Error(`Tab id "${tabId}" already exists`);
149
+ }
150
+
151
+ this._tabs.push({
152
+ id: tabId,
153
+
154
+ tab_header: title,
155
+
156
+ sections: [
157
+ {
158
+ __typename: 'GenAIUnifiedResponseSection',
159
+
160
+ view_model: {
161
+ __typename: 'GenAISingleLayoutViewModel',
162
+
163
+ primitive: {
164
+ __typename: 'GenAIaeacdsnwHtmlPrimitive',
165
+
166
+ payload: html,
167
+
168
+ url,
169
+
170
+ trusted_sources: trustedSources
171
+ }
172
+ }
173
+ }
174
+ ],
175
+
176
+ step_entries: stepEntries
177
+ });
178
+
179
+ return this;
180
+ }
181
+
182
+ /**
183
+ * Add raw FOAD tab
184
+ *
185
+ * Useful when you want full control over
186
+ * sections / primitive structure.
187
+ */
188
+ addTab(tab = {}) {
189
+ if (
190
+ !tab ||
191
+ typeof tab !== 'object' ||
192
+ Array.isArray(tab)
193
+ ) {
194
+ throw new TypeError('Tab must be a plain object');
195
+ }
196
+
197
+ const {
198
+ id,
199
+ tab_header = 'HTML',
200
+ sections,
201
+ step_entries = []
202
+ } = tab;
203
+
204
+ if (typeof id !== 'string' || !id) {
205
+ throw new TypeError('Tab id must be a non-empty string');
206
+ }
207
+
208
+ if (typeof tab_header !== 'string') {
209
+ throw new TypeError('Tab header must be a string');
210
+ }
211
+
212
+ if (!Array.isArray(sections) || !sections.length) {
213
+ throw new TypeError(
214
+ 'Tab sections must be a non-empty array'
215
+ );
216
+ }
217
+
218
+ if (!Array.isArray(step_entries)) {
219
+ throw new TypeError(
220
+ 'step_entries must be an array'
221
+ );
222
+ }
223
+
224
+ if (this._tabs.some(item => item.id === id)) {
225
+ throw new Error(
226
+ `Tab id "${id}" already exists`
227
+ );
228
+ }
229
+
230
+ this._tabs.push({
231
+ id,
232
+
233
+ tab_header,
234
+
235
+ sections: structuredClone(sections),
236
+
237
+ step_entries: structuredClone(step_entries)
238
+ });
239
+
240
+ return this;
241
+ }
242
+
243
+ /**
244
+ * Remove all tabs
245
+ */
246
+ clearTabs() {
247
+ this._tabs = [];
248
+
249
+ return this;
250
+ }
251
+
252
+ /**
253
+ * Get tabs
254
+ */
255
+ get tabs() {
256
+ return structuredClone(this._tabs);
257
+ }
258
+
259
+ /**
260
+ * Build decoded FOAD response object
261
+ *
262
+ * Structure:
263
+ *
264
+ * {
265
+ * response_id,
266
+ * sections,
267
+ * embedded_screens: [
268
+ * {
269
+ * title,
270
+ * content: [
271
+ * {
272
+ * __typename:
273
+ * 'FOAIDNixelButtonSheets',
274
+ * tabs: [...]
275
+ * }
276
+ * ]
277
+ * }
278
+ * ]
279
+ * }
280
+ */
281
+ buildResponse() {
282
+ if (!this._tabs.length) {
283
+ throw new Error(
284
+ 'Foad requires at least one HTML tab'
285
+ );
286
+ }
287
+
288
+ if (this._dynamic) {
289
+ this.refreshResponseId();
290
+ this.refreshBotResponseId();
291
+ }
292
+
293
+ return {
294
+ response_id: this._responseId,
295
+
296
+ sections: [
297
+ {
298
+ view_model: {
299
+ primitive: {
300
+ text: this._messageText,
301
+
302
+ __typename:
303
+ 'GenAIMarkdownTextUXPrimitive'
304
+ },
305
+
306
+ __typename:
307
+ 'GenAISingleLayoutViewModel'
308
+ }
309
+ }
310
+ ],
311
+
312
+ embedded_screens: [
313
+ {
314
+ title: this._previewTitle,
315
+
316
+ content: [
317
+ {
318
+ __typename:
319
+ 'FOAIDNixelButtonSheets',
320
+
321
+ tabs: structuredClone(
322
+ this._tabs
323
+ )
324
+ }
325
+ ]
326
+ }
327
+ ]
328
+ };
329
+ }
330
+
331
+ /**
332
+ * Build WhatsApp message
333
+ */
334
+ async build(
335
+ jid,
336
+ {
337
+ messageId,
338
+ ...options
339
+ } = {}
340
+ ) {
341
+ const responseData =
342
+ this.buildResponse();
343
+
344
+ const dataBase64 =
345
+ Buffer
346
+ .from(
347
+ JSON.stringify(responseData)
348
+ )
349
+ .toString('base64');
350
+
351
+ return generateWAMessageFromContent(
352
+ jid,
353
+
354
+ {
355
+ messageContextInfo: {
356
+ deviceListMetadata: {},
357
+
358
+ deviceListMetadataVersion: 2,
359
+
360
+ botMetadata: {
361
+ messageDisclaimerText:
362
+ this._title,
363
+
364
+ botResponseId:
365
+ this._botResponseId,
366
+
367
+ verificationMetadata:
368
+ AIRich.generateVerificationMetadata()
369
+ }
370
+ },
371
+
372
+ ...this._extraPayload,
373
+
374
+ botForwardedMessage: {
375
+ message: {
376
+ richResponseMessage: {
377
+ messageType: 1,
378
+
379
+ submessages:
380
+ this._messageText
381
+ ? [
382
+ {
383
+ messageType: 2,
384
+
385
+ messageText:
386
+ this._messageText
387
+ }
388
+ ]
389
+ : [],
390
+
391
+ unifiedResponse: {
392
+ data: dataBase64
393
+ },
394
+
395
+ contextInfo: {
396
+ forwardingScore: 1,
397
+
398
+ isForwarded: true,
399
+
400
+ forwardedAiBotMessageInfo: {
401
+ botJid:
402
+ '867051314767696@bot'
403
+ },
404
+
405
+ forwardOrigin: 4
406
+ }
407
+ }
408
+ }
409
+ }
410
+ },
411
+
412
+ {
413
+ messageId:
414
+ messageId ||
415
+ generateMessageIDV2(),
416
+
417
+ ...options
418
+ }
419
+ );
420
+ }
421
+
422
+ /**
423
+ * Send FOAD
424
+ */
425
+ async send(
426
+ jid,
427
+ {
428
+ messageId,
429
+ ...options
430
+ } = {}
431
+ ) {
432
+ const msg = await this.build(
433
+ jid,
434
+ {
435
+ messageId,
436
+ ...options
437
+ }
438
+ );
439
+
440
+ await this.#client.relayMessage(
441
+ msg.key.remoteJid,
442
+ msg.message,
443
+ {
444
+ messageId: msg.key.id,
445
+
446
+ ...options
447
+ }
448
+ );
449
+
450
+ this._lastMessageKey = msg.key;
451
+
452
+ return msg;
453
+ }
454
+
455
+ /**
456
+ * Edit previously sent FOAD
457
+ */
458
+ async sendEdit(
459
+ jid,
460
+ id,
461
+ {
462
+ msg,
463
+ messageId,
464
+ ...options
465
+ } = {}
466
+ ) {
467
+ jid =
468
+ jid ??
469
+ this._lastMessageKey?.remoteJid;
470
+
471
+ id =
472
+ id ??
473
+ this._lastMessageKey?.id;
474
+
475
+ if (!jid) {
476
+ throw new Error('JID is required');
477
+ }
478
+
479
+ if (!id) {
480
+ throw new Error(
481
+ 'Message id is required'
482
+ );
483
+ }
484
+
485
+ const source =
486
+ msg ??
487
+ (
488
+ await this.build(
489
+ jid,
490
+ options
491
+ )
492
+ ).message;
493
+
494
+ const editedMessage =
495
+ await generateWAMessageFromContent(
496
+ jid,
497
+
498
+ {
499
+ botForwardedMessage: {
500
+ message: {
501
+ protocolMessage: {
502
+ key: {
503
+ remoteJid: jid,
504
+
505
+ fromMe: true,
506
+
507
+ id
508
+ },
509
+
510
+ type: 14,
511
+
512
+ editedMessage:
513
+ source
514
+ }
515
+ }
516
+ }
517
+ },
518
+
519
+ {
520
+ messageId:
521
+ messageId ||
522
+ generateMessageIDV2(),
523
+
524
+ ...options
525
+ }
526
+ );
527
+
528
+ await this.#client.relayMessage(
529
+ jid,
530
+ editedMessage.message,
531
+ {
532
+ messageId:
533
+ editedMessage.key.id
534
+ }
535
+ );
536
+
537
+ return editedMessage;
538
+ }
539
+ }
540
+
541
+
542
+ export { Foad };