@queenanya/baileys 9.2.1 → 9.4.1

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 (327) hide show
  1. package/README.md +349 -1171
  2. package/WAProto/fix-imports.js +74 -18
  3. package/WAProto/index.js +201 -160
  4. package/engine-requirements.js +7 -7
  5. package/lib/Defaults/index.d.ts +19 -0
  6. package/lib/Defaults/index.d.ts.map +1 -1
  7. package/lib/Defaults/index.js +32 -6
  8. package/lib/Defaults/index.js.map +1 -1
  9. package/lib/Signal/libsignal.d.ts.map +1 -1
  10. package/lib/Signal/libsignal.js +61 -2
  11. package/lib/Signal/libsignal.js.map +1 -1
  12. package/lib/Signal/lid-mapping.d.ts +5 -9
  13. package/lib/Signal/lid-mapping.d.ts.map +1 -1
  14. package/lib/Signal/lid-mapping.js +170 -70
  15. package/lib/Signal/lid-mapping.js.map +1 -1
  16. package/lib/Socket/Client/websocket.d.ts +1 -1
  17. package/lib/Socket/Client/websocket.d.ts.map +1 -1
  18. package/lib/Socket/Client/websocket.js +5 -1
  19. package/lib/Socket/Client/websocket.js.map +1 -1
  20. package/lib/Socket/business.d.ts +125 -5
  21. package/lib/Socket/business.d.ts.map +1 -1
  22. package/lib/Socket/business.js +11 -8
  23. package/lib/Socket/business.js.map +1 -1
  24. package/lib/Socket/chats.d.ts +22 -3
  25. package/lib/Socket/chats.d.ts.map +1 -1
  26. package/lib/Socket/chats.js +277 -58
  27. package/lib/Socket/chats.js.map +1 -1
  28. package/lib/Socket/communities.d.ts +125 -5
  29. package/lib/Socket/communities.d.ts.map +1 -1
  30. package/lib/Socket/groups.d.ts +19 -3
  31. package/lib/Socket/groups.d.ts.map +1 -1
  32. package/lib/Socket/groups.js +7 -1
  33. package/lib/Socket/groups.js.map +1 -1
  34. package/lib/Socket/index.d.ts +125 -5
  35. package/lib/Socket/index.d.ts.map +1 -1
  36. package/lib/Socket/index.js +0 -6
  37. package/lib/Socket/index.js.map +1 -1
  38. package/lib/Socket/messages-recv.d.ts +126 -6
  39. package/lib/Socket/messages-recv.d.ts.map +1 -1
  40. package/lib/Socket/messages-recv.js +771 -177
  41. package/lib/Socket/messages-recv.js.map +1 -1
  42. package/lib/Socket/messages-send.d.ts +129 -7
  43. package/lib/Socket/messages-send.d.ts.map +1 -1
  44. package/lib/Socket/messages-send.js +430 -119
  45. package/lib/Socket/messages-send.js.map +1 -1
  46. package/lib/Socket/newsletter.d.ts +20 -5
  47. package/lib/Socket/newsletter.d.ts.map +1 -1
  48. package/lib/Socket/newsletter.js +2 -47
  49. package/lib/Socket/newsletter.js.map +1 -1
  50. package/lib/Socket/socket.d.ts +3 -1
  51. package/lib/Socket/socket.d.ts.map +1 -1
  52. package/lib/Socket/socket.js +151 -29
  53. package/lib/Socket/socket.js.map +1 -1
  54. package/lib/Types/Auth.d.ts +2 -0
  55. package/lib/Types/Auth.d.ts.map +1 -1
  56. package/lib/Types/Call.d.ts +10 -1
  57. package/lib/Types/Call.d.ts.map +1 -1
  58. package/lib/Types/Contact.d.ts +2 -0
  59. package/lib/Types/Contact.d.ts.map +1 -1
  60. package/lib/Types/Events.d.ts +60 -6
  61. package/lib/Types/Events.d.ts.map +1 -1
  62. package/lib/Types/GroupMetadata.d.ts +4 -0
  63. package/lib/Types/GroupMetadata.d.ts.map +1 -1
  64. package/lib/Types/Message.d.ts +530 -16
  65. package/lib/Types/Message.d.ts.map +1 -1
  66. package/lib/Types/Message.js.map +1 -1
  67. package/lib/Types/Newsletter.d.ts +32 -45
  68. package/lib/Types/Newsletter.d.ts.map +1 -1
  69. package/lib/Types/Newsletter.js +25 -23
  70. package/lib/Types/Newsletter.js.map +1 -1
  71. package/lib/Types/State.d.ts +54 -0
  72. package/lib/Types/State.d.ts.map +1 -1
  73. package/lib/Types/State.js +42 -0
  74. package/lib/Types/State.js.map +1 -1
  75. package/lib/Types/index.d.ts +9 -0
  76. package/lib/Types/index.d.ts.map +1 -1
  77. package/lib/Types/index.js.map +1 -1
  78. package/lib/Utils/auth-utils.d.ts.map +1 -1
  79. package/lib/Utils/auth-utils.js +53 -20
  80. package/lib/Utils/auth-utils.js.map +1 -1
  81. package/lib/Utils/browser-utils.d.ts +13 -0
  82. package/lib/Utils/browser-utils.d.ts.map +1 -1
  83. package/lib/Utils/browser-utils.js +90 -10
  84. package/lib/Utils/browser-utils.js.map +1 -1
  85. package/lib/Utils/chat-utils.d.ts +30 -0
  86. package/lib/Utils/chat-utils.d.ts.map +1 -1
  87. package/lib/Utils/chat-utils.js +134 -59
  88. package/lib/Utils/chat-utils.js.map +1 -1
  89. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  90. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  91. package/lib/Utils/companion-reg-client-utils.js +34 -0
  92. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  93. package/lib/Utils/crypto.d.ts +4 -8
  94. package/lib/Utils/crypto.d.ts.map +1 -1
  95. package/lib/Utils/crypto.js +2 -26
  96. package/lib/Utils/crypto.js.map +1 -1
  97. package/lib/Utils/decode-wa-message.d.ts +12 -0
  98. package/lib/Utils/decode-wa-message.d.ts.map +1 -1
  99. package/lib/Utils/decode-wa-message.js +16 -0
  100. package/lib/Utils/decode-wa-message.js.map +1 -1
  101. package/lib/Utils/event-buffer.d.ts.map +1 -1
  102. package/lib/Utils/event-buffer.js +43 -8
  103. package/lib/Utils/event-buffer.js.map +1 -1
  104. package/lib/Utils/generics.d.ts +3 -1
  105. package/lib/Utils/generics.d.ts.map +1 -1
  106. package/lib/Utils/generics.js +17 -4
  107. package/lib/Utils/generics.js.map +1 -1
  108. package/lib/Utils/history.d.ts +8 -3
  109. package/lib/Utils/history.d.ts.map +1 -1
  110. package/lib/Utils/history.js +60 -16
  111. package/lib/Utils/history.js.map +1 -1
  112. package/lib/Utils/identity-change-handler.d.ts +44 -0
  113. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  114. package/lib/Utils/identity-change-handler.js +50 -0
  115. package/lib/Utils/identity-change-handler.js.map +1 -0
  116. package/lib/Utils/index.d.ts +6 -0
  117. package/lib/Utils/index.d.ts.map +1 -1
  118. package/lib/Utils/index.js +6 -0
  119. package/lib/Utils/index.js.map +1 -1
  120. package/lib/Utils/interactive-message.d.ts +201 -0
  121. package/lib/Utils/interactive-message.d.ts.map +1 -0
  122. package/lib/Utils/interactive-message.js +256 -0
  123. package/lib/Utils/interactive-message.js.map +1 -0
  124. package/lib/Utils/lt-hash.d.ts +7 -12
  125. package/lib/Utils/lt-hash.d.ts.map +1 -1
  126. package/lib/Utils/lt-hash.js +2 -42
  127. package/lib/Utils/lt-hash.js.map +1 -1
  128. package/lib/Utils/make-mutex.d.ts +1 -0
  129. package/lib/Utils/make-mutex.d.ts.map +1 -1
  130. package/lib/Utils/make-mutex.js +20 -27
  131. package/lib/Utils/make-mutex.js.map +1 -1
  132. package/lib/Utils/message-composer.d.ts +5 -0
  133. package/lib/Utils/message-composer.d.ts.map +1 -0
  134. package/lib/Utils/message-composer.js +5 -0
  135. package/lib/Utils/message-composer.js.map +1 -0
  136. package/lib/Utils/message-retry-manager.d.ts +30 -2
  137. package/lib/Utils/message-retry-manager.d.ts.map +1 -1
  138. package/lib/Utils/message-retry-manager.js +58 -5
  139. package/lib/Utils/message-retry-manager.js.map +1 -1
  140. package/lib/Utils/messages-media.d.ts +35 -5
  141. package/lib/Utils/messages-media.d.ts.map +1 -1
  142. package/lib/Utils/messages-media.js +171 -51
  143. package/lib/Utils/messages-media.js.map +1 -1
  144. package/lib/Utils/messages.d.ts +2 -0
  145. package/lib/Utils/messages.d.ts.map +1 -1
  146. package/lib/Utils/messages.js +475 -35
  147. package/lib/Utils/messages.js.map +1 -1
  148. package/lib/Utils/noise-handler.d.ts +4 -4
  149. package/lib/Utils/noise-handler.d.ts.map +1 -1
  150. package/lib/Utils/noise-handler.js +139 -85
  151. package/lib/Utils/noise-handler.js.map +1 -1
  152. package/lib/Utils/offline-node-processor.d.ts +17 -0
  153. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  154. package/lib/Utils/offline-node-processor.js +40 -0
  155. package/lib/Utils/offline-node-processor.js.map +1 -0
  156. package/lib/Utils/process-message.d.ts.map +1 -1
  157. package/lib/Utils/process-message.js +115 -16
  158. package/lib/Utils/process-message.js.map +1 -1
  159. package/lib/Utils/reporting-utils.d.ts +11 -0
  160. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  161. package/lib/Utils/reporting-utils.js +258 -0
  162. package/lib/Utils/reporting-utils.js.map +1 -0
  163. package/lib/Utils/stanza-ack.d.ts +11 -0
  164. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  165. package/lib/Utils/stanza-ack.js +38 -0
  166. package/lib/Utils/stanza-ack.js.map +1 -0
  167. package/lib/Utils/sync-action-utils.d.ts +19 -0
  168. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  169. package/lib/Utils/sync-action-utils.js +49 -0
  170. package/lib/Utils/sync-action-utils.js.map +1 -0
  171. package/lib/Utils/tc-token-utils.d.ts +37 -0
  172. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  173. package/lib/Utils/tc-token-utils.js +163 -0
  174. package/lib/Utils/tc-token-utils.js.map +1 -0
  175. package/lib/Utils/use-mongo-file-auth-state.d.ts +16 -0
  176. package/lib/Utils/use-mongo-file-auth-state.d.ts.map +1 -0
  177. package/lib/Utils/use-mongo-file-auth-state.js +60 -0
  178. package/lib/Utils/use-mongo-file-auth-state.js.map +1 -0
  179. package/lib/Utils/use-multi-file-auth-state.js +1 -1
  180. package/lib/Utils/use-multi-file-auth-state.js.map +1 -1
  181. package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -1
  182. package/lib/Utils/use-single-file-auth-state.js.map +1 -1
  183. package/lib/Utils/validate-connection.d.ts.map +1 -1
  184. package/lib/Utils/validate-connection.js +11 -1
  185. package/lib/Utils/validate-connection.js.map +1 -1
  186. package/lib/WABinary/decode.d.ts.map +1 -1
  187. package/lib/WABinary/decode.js +24 -0
  188. package/lib/WABinary/decode.js.map +1 -1
  189. package/lib/WABinary/encode.js +5 -1
  190. package/lib/WABinary/encode.js.map +1 -1
  191. package/lib/WABinary/generic-utils.d.ts +10 -1
  192. package/lib/WABinary/generic-utils.d.ts.map +1 -1
  193. package/lib/WABinary/generic-utils.js +42 -8
  194. package/lib/WABinary/generic-utils.js.map +1 -1
  195. package/lib/WABinary/jid-utils.js.map +1 -1
  196. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
  197. package/lib/WAUSync/Protocols/USyncContactProtocol.js +26 -3
  198. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
  199. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  200. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  201. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  202. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  203. package/lib/WAUSync/Protocols/index.d.ts +1 -0
  204. package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
  205. package/lib/WAUSync/Protocols/index.js +1 -0
  206. package/lib/WAUSync/Protocols/index.js.map +1 -1
  207. package/lib/WAUSync/USyncQuery.d.ts +1 -0
  208. package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
  209. package/lib/WAUSync/USyncQuery.js +6 -2
  210. package/lib/WAUSync/USyncQuery.js.map +1 -1
  211. package/lib/WAUSync/USyncUser.d.ts +4 -0
  212. package/lib/WAUSync/USyncUser.d.ts.map +1 -1
  213. package/lib/WAUSync/USyncUser.js +8 -0
  214. package/lib/WAUSync/USyncUser.js.map +1 -1
  215. package/lib/addons/anti-delete.d.ts +72 -0
  216. package/lib/addons/anti-delete.d.ts.map +1 -0
  217. package/lib/addons/anti-delete.js +165 -0
  218. package/lib/addons/anti-delete.js.map +1 -0
  219. package/lib/addons/auto-reply.d.ts +67 -0
  220. package/lib/addons/auto-reply.d.ts.map +1 -0
  221. package/lib/addons/auto-reply.js +145 -0
  222. package/lib/addons/auto-reply.js.map +1 -0
  223. package/lib/addons/browser-presets.d.ts +16 -0
  224. package/lib/addons/browser-presets.d.ts.map +1 -0
  225. package/lib/addons/browser-presets.js +24 -0
  226. package/lib/addons/browser-presets.js.map +1 -0
  227. package/lib/addons/button-sender.d.ts +260 -0
  228. package/lib/addons/button-sender.d.ts.map +1 -0
  229. package/lib/addons/button-sender.js +771 -0
  230. package/lib/addons/button-sender.js.map +1 -0
  231. package/lib/addons/call-handler.d.ts +79 -0
  232. package/lib/addons/call-handler.d.ts.map +1 -0
  233. package/lib/addons/call-handler.js +342 -0
  234. package/lib/addons/call-handler.js.map +1 -0
  235. package/lib/addons/from-chats.d.ts +30 -0
  236. package/lib/addons/from-chats.d.ts.map +1 -0
  237. package/lib/addons/from-chats.js +38 -0
  238. package/lib/addons/from-chats.js.map +1 -0
  239. package/lib/addons/from-messages-recv.d.ts +59 -0
  240. package/lib/addons/from-messages-recv.d.ts.map +1 -0
  241. package/lib/addons/from-messages-recv.js +326 -0
  242. package/lib/addons/from-messages-recv.js.map +1 -0
  243. package/lib/addons/from-messages-send.d.ts +50 -0
  244. package/lib/addons/from-messages-send.d.ts.map +1 -0
  245. package/lib/addons/from-messages-send.js +148 -0
  246. package/lib/addons/from-messages-send.js.map +1 -0
  247. package/lib/addons/from-messages.d.ts +52 -0
  248. package/lib/addons/from-messages.d.ts.map +1 -0
  249. package/lib/addons/from-messages.js +304 -0
  250. package/lib/addons/from-messages.js.map +1 -0
  251. package/lib/addons/index.d.ts +67 -0
  252. package/lib/addons/index.d.ts.map +1 -0
  253. package/lib/addons/index.js +86 -0
  254. package/lib/addons/index.js.map +1 -0
  255. package/lib/addons/interactive-message.d.ts +201 -0
  256. package/lib/addons/interactive-message.d.ts.map +1 -0
  257. package/lib/addons/interactive-message.js +256 -0
  258. package/lib/addons/interactive-message.js.map +1 -0
  259. package/lib/addons/jid-plot.d.ts +49 -0
  260. package/lib/addons/jid-plot.d.ts.map +1 -0
  261. package/lib/addons/jid-plot.js +84 -0
  262. package/lib/addons/jid-plot.js.map +1 -0
  263. package/lib/addons/jid-plotting.d.ts +54 -0
  264. package/lib/addons/jid-plotting.d.ts.map +1 -0
  265. package/lib/addons/jid-plotting.js +150 -0
  266. package/lib/addons/jid-plotting.js.map +1 -0
  267. package/lib/addons/lid-support.d.ts +41 -0
  268. package/lib/addons/lid-support.d.ts.map +1 -0
  269. package/lib/addons/lid-support.js +42 -0
  270. package/lib/addons/lid-support.js.map +1 -0
  271. package/lib/addons/message-composer.d.ts +142 -0
  272. package/lib/addons/message-composer.d.ts.map +1 -0
  273. package/lib/addons/message-composer.js +377 -0
  274. package/lib/addons/message-composer.js.map +1 -0
  275. package/lib/addons/message-scheduler.d.ts +77 -0
  276. package/lib/addons/message-scheduler.d.ts.map +1 -0
  277. package/lib/addons/message-scheduler.js +108 -0
  278. package/lib/addons/message-scheduler.js.map +1 -0
  279. package/lib/addons/message-search.d.ts +51 -0
  280. package/lib/addons/message-search.d.ts.map +1 -0
  281. package/lib/addons/message-search.js +171 -0
  282. package/lib/addons/message-search.js.map +1 -0
  283. package/lib/addons/message-utils.d.ts +88 -0
  284. package/lib/addons/message-utils.d.ts.map +1 -0
  285. package/lib/addons/message-utils.js +292 -0
  286. package/lib/addons/message-utils.js.map +1 -0
  287. package/lib/addons/outgoing-calls.d.ts +64 -0
  288. package/lib/addons/outgoing-calls.d.ts.map +1 -0
  289. package/lib/addons/outgoing-calls.js +139 -0
  290. package/lib/addons/outgoing-calls.js.map +1 -0
  291. package/lib/addons/pairing-fix.d.ts +31 -0
  292. package/lib/addons/pairing-fix.d.ts.map +1 -0
  293. package/lib/addons/pairing-fix.js +74 -0
  294. package/lib/addons/pairing-fix.js.map +1 -0
  295. package/lib/addons/past-participants.d.ts +42 -0
  296. package/lib/addons/past-participants.d.ts.map +1 -0
  297. package/lib/addons/past-participants.js +41 -0
  298. package/lib/addons/past-participants.js.map +1 -0
  299. package/lib/addons/rich-response.d.ts +111 -0
  300. package/lib/addons/rich-response.d.ts.map +1 -0
  301. package/lib/addons/rich-response.js +152 -0
  302. package/lib/addons/rich-response.js.map +1 -0
  303. package/lib/addons/scheduling.d.ts +41 -0
  304. package/lib/addons/scheduling.d.ts.map +1 -0
  305. package/lib/addons/scheduling.js +110 -0
  306. package/lib/addons/scheduling.js.map +1 -0
  307. package/lib/addons/status-posting.d.ts +177 -0
  308. package/lib/addons/status-posting.d.ts.map +1 -0
  309. package/lib/addons/status-posting.js +240 -0
  310. package/lib/addons/status-posting.js.map +1 -0
  311. package/lib/addons/stickerpack.d.ts +37 -0
  312. package/lib/addons/stickerpack.d.ts.map +1 -0
  313. package/lib/addons/stickerpack.js +39 -0
  314. package/lib/addons/stickerpack.js.map +1 -0
  315. package/lib/addons/templates.d.ts +72 -0
  316. package/lib/addons/templates.d.ts.map +1 -0
  317. package/lib/addons/templates.js +145 -0
  318. package/lib/addons/templates.js.map +1 -0
  319. package/lib/addons/vcard.d.ts +59 -0
  320. package/lib/addons/vcard.d.ts.map +1 -0
  321. package/lib/addons/vcard.js +88 -0
  322. package/lib/addons/vcard.js.map +1 -0
  323. package/lib/index.d.ts +1 -0
  324. package/lib/index.d.ts.map +1 -1
  325. package/lib/index.js +1 -0
  326. package/lib/index.js.map +1 -1
  327. package/package.json +6 -3
@@ -0,0 +1,139 @@
1
+ /**
2
+ * addon: outgoing-calls
3
+ * Source patch: Baileys-feature-outgoing-calls
4
+ *
5
+ * Adds:
6
+ * - WAInitiateCallOptions / WAInitiateCallResult types
7
+ * - createCallLink() — creates an audio or video call invite link via WA servers
8
+ * - initiateCall() — initiates a direct 1-on-1 or group call (binary node send)
9
+ * - rejectCall() — rejects an incoming call by call-id
10
+ *
11
+ * createCallLink is wired directly into chats.ts; initiateCall and rejectCall
12
+ * are implemented here as standalone helpers that require a `sendNode` / `query` ref.
13
+ */
14
+ import { getBinaryNodeChild } from '../WABinary/index.js';
15
+ // generateMessageTag is a socket-layer util; we inline a compatible version here
16
+ const generateMessageTag = () => Math.random().toString(36).slice(2, 8).toUpperCase() + Date.now().toString(36).toUpperCase();
17
+ // ── createCallLink ─────────────────────────────────────────────────────────────
18
+ /**
19
+ * Creates an audio or video call invite link via WA servers.
20
+ * Returns the invite token string, or undefined on failure.
21
+ *
22
+ * Must be called with the socket's `query` and `generateMessageTag` functions.
23
+ *
24
+ * @example
25
+ * const token = await createCallLink(query, generateMessageTag, 'video')
26
+ * // Share: https://call.whatsapp.com/voice/token/<token>
27
+ */
28
+ export const createCallLink = async (query, type, event, timeoutMs) => {
29
+ const result = await query({
30
+ tag: 'call',
31
+ attrs: {
32
+ id: generateMessageTag(),
33
+ to: '@call'
34
+ },
35
+ content: [
36
+ {
37
+ tag: 'link_create',
38
+ attrs: { media: type },
39
+ content: event ? [{ tag: 'event', attrs: { start_time: String(event.startTime) } }] : undefined
40
+ }
41
+ ]
42
+ }, timeoutMs);
43
+ const child = getBinaryNodeChild(result, 'link_create');
44
+ return child?.attrs?.token;
45
+ };
46
+ // ── initiateCall ──────────────────────────────────────────────────────────────
47
+ /**
48
+ * Initiate a direct 1-on-1 or group call.
49
+ * Sends a `call` binary node with an `offer` child to the recipient JID.
50
+ * Returns the generated callId.
51
+ *
52
+ * @param sendNode — socket's raw sendNode function
53
+ * @param meJid — our own JID
54
+ * @param toJid — recipient / group JID
55
+ * @param opts — { isVideo?: boolean }
56
+ */
57
+ export const initiateCall = async (sendNode, meJid, toJid, opts = {}) => {
58
+ const callId = generateMessageTag();
59
+ const isVideo = opts.isVideo ?? false;
60
+ await sendNode({
61
+ tag: 'call',
62
+ attrs: {
63
+ from: meJid,
64
+ to: toJid
65
+ },
66
+ content: [
67
+ {
68
+ tag: 'offer',
69
+ attrs: {
70
+ 'call-id': callId,
71
+ 'call-creator': meJid
72
+ },
73
+ content: [
74
+ {
75
+ tag: 'audio',
76
+ attrs: { enc: 'opus', rate: '16000' }
77
+ },
78
+ ...(isVideo
79
+ ? [{ tag: 'video', attrs: { orientation: '0', device_orientation: '0', enc: 'vp8', dec: 'vp8' } }]
80
+ : [])
81
+ ]
82
+ }
83
+ ]
84
+ });
85
+ return { callId, to: toJid, isVideo };
86
+ };
87
+ // ── rejectCall ────────────────────────────────────────────────────────────────
88
+ /**
89
+ * Reject an incoming call.
90
+ * Sends a `call` binary node with a `reject` child.
91
+ *
92
+ * @param sendNode — socket's raw sendNode function
93
+ * @param meJid — our own JID
94
+ * @param fromJid — caller's JID
95
+ * @param callId — the call-id from the incoming offer
96
+ * @param callCreator — who created the call (usually same as fromJid)
97
+ */
98
+ export const rejectCall = async (sendNode, meJid, fromJid, callId, callCreator) => {
99
+ await sendNode({
100
+ tag: 'call',
101
+ attrs: {
102
+ from: meJid,
103
+ to: fromJid
104
+ },
105
+ content: [
106
+ {
107
+ tag: 'reject',
108
+ attrs: {
109
+ 'call-id': callId,
110
+ 'call-creator': callCreator ?? fromJid
111
+ }
112
+ }
113
+ ]
114
+ });
115
+ };
116
+ // ── endCall ───────────────────────────────────────────────────────────────────
117
+ /**
118
+ * Terminate / end an ongoing call.
119
+ */
120
+ export const endCall = async (sendNode, meJid, toJid, callId, callCreator) => {
121
+ await sendNode({
122
+ tag: 'call',
123
+ attrs: {
124
+ from: meJid,
125
+ to: toJid
126
+ },
127
+ content: [
128
+ {
129
+ tag: 'terminate',
130
+ attrs: {
131
+ 'call-id': callId,
132
+ 'call-creator': callCreator ?? meJid,
133
+ reason: 'timeout'
134
+ }
135
+ }
136
+ ]
137
+ });
138
+ };
139
+ //# sourceMappingURL=outgoing-calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outgoing-calls.js","sourceRoot":"","sources":["../../src/addons/outgoing-calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * addon: pairing-fix
3
+ * Source patch: Baileys-fix-pairing-code
4
+ *
5
+ * Problem: requestPairingCode() fires immediately even if the WebSocket
6
+ * hasn't yet received the `pair-device` stanza from WA servers, causing
7
+ * 404/timeout errors.
8
+ *
9
+ * Fix: wraps the raw pairing IQ (sendPairingIQ) in a queue that waits
10
+ * for `pairingReady` before firing. Socket.ts must call
11
+ * `setPairingReady()` when it receives the `pair-device` stanza and
12
+ * `clearPairingState()` on disconnect.
13
+ *
14
+ * Usage:
15
+ * import { createPairingQueue } from '../addons/pairing-fix'
16
+ * const pq = createPairingQueue(sendPairingIQFn)
17
+ * // In pair-device handler: pq.setReady()
18
+ * // In disconnect handler: pq.clear()
19
+ * // Replace requestPairingCode with: pq.requestPairingCode
20
+ */
21
+ export type SendPairingIQFn = (phoneNumber: string, customPairingCode?: string) => Promise<string>;
22
+ export type PairingQueue = {
23
+ /** Mark socket as ready to accept a pairing IQ */
24
+ setReady: () => void;
25
+ /** Clear all pending state (call on disconnect) */
26
+ clear: (err?: Error) => void;
27
+ /** Drop-in replacement for requestPairingCode */
28
+ requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise<string>;
29
+ };
30
+ export declare const createPairingQueue: (sendPairingIQ: SendPairingIQFn) => PairingQueue;
31
+ //# sourceMappingURL=pairing-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing-fix.d.ts","sourceRoot":"","sources":["../../src/addons/pairing-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAElG,MAAM,MAAM,YAAY,GAAG;IAC1B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,mDAAmD;IACnD,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,iDAAiD;IACjD,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACxF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,eAAe,eAAe,KAAG,YA4DnE,CAAA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * addon: pairing-fix
3
+ * Source patch: Baileys-fix-pairing-code
4
+ *
5
+ * Problem: requestPairingCode() fires immediately even if the WebSocket
6
+ * hasn't yet received the `pair-device` stanza from WA servers, causing
7
+ * 404/timeout errors.
8
+ *
9
+ * Fix: wraps the raw pairing IQ (sendPairingIQ) in a queue that waits
10
+ * for `pairingReady` before firing. Socket.ts must call
11
+ * `setPairingReady()` when it receives the `pair-device` stanza and
12
+ * `clearPairingState()` on disconnect.
13
+ *
14
+ * Usage:
15
+ * import { createPairingQueue } from '../addons/pairing-fix'
16
+ * const pq = createPairingQueue(sendPairingIQFn)
17
+ * // In pair-device handler: pq.setReady()
18
+ * // In disconnect handler: pq.clear()
19
+ * // Replace requestPairingCode with: pq.requestPairingCode
20
+ */
21
+ export const createPairingQueue = (sendPairingIQ) => {
22
+ let ready = false;
23
+ let inProgress = false;
24
+ let pendingResolve;
25
+ let pendingReject;
26
+ const setReady = () => {
27
+ ready = true;
28
+ if (pendingResolve) {
29
+ const r = pendingResolve;
30
+ pendingResolve = undefined;
31
+ pendingReject = undefined;
32
+ r();
33
+ }
34
+ };
35
+ const clear = (err) => {
36
+ if (pendingReject) {
37
+ pendingReject(err ?? new Error('Connection closed before pairing completed'));
38
+ pendingResolve = undefined;
39
+ pendingReject = undefined;
40
+ }
41
+ ready = false;
42
+ inProgress = false;
43
+ };
44
+ const requestPairingCode = async (phoneNumber, customPairingCode) => {
45
+ if (inProgress) {
46
+ throw new Error('A pairing request is already in progress');
47
+ }
48
+ inProgress = true;
49
+ if (ready) {
50
+ try {
51
+ return await sendPairingIQ(phoneNumber, customPairingCode);
52
+ }
53
+ finally {
54
+ inProgress = false;
55
+ }
56
+ }
57
+ return new Promise((resolve, reject) => {
58
+ pendingResolve = () => {
59
+ sendPairingIQ(phoneNumber, customPairingCode)
60
+ .then(resolve)
61
+ .catch(reject)
62
+ .finally(() => {
63
+ inProgress = false;
64
+ });
65
+ };
66
+ pendingReject = (err) => {
67
+ inProgress = false;
68
+ reject(err);
69
+ };
70
+ });
71
+ };
72
+ return { setReady, clear, requestPairingCode };
73
+ };
74
+ //# sourceMappingURL=pairing-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing-fix.js","sourceRoot":"","sources":["../../src/addons/pairing-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAaH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAA8B,EAAgB,EAAE;IAClF,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,cAAwC,CAAA;IAC5C,IAAI,aAAiD,CAAA;IAErD,MAAM,QAAQ,GAAG,GAAG,EAAE;QACrB,KAAK,GAAG,IAAI,CAAA;QACZ,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,cAAc,CAAA;YACxB,cAAc,GAAG,SAAS,CAAA;YAC1B,aAAa,GAAG,SAAS,CAAA;YACzB,CAAC,EAAE,CAAA;QACJ,CAAC;IACF,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;QAC7B,IAAI,aAAa,EAAE,CAAC;YACnB,aAAa,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAA;YAC7E,cAAc,GAAG,SAAS,CAAA;YAC1B,aAAa,GAAG,SAAS,CAAA;QAC1B,CAAC;QAED,KAAK,GAAG,KAAK,CAAA;QACb,UAAU,GAAG,KAAK,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,KAAK,EAAE,WAAmB,EAAE,iBAA0B,EAAmB,EAAE;QACrG,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC5D,CAAC;QAED,UAAU,GAAG,IAAI,CAAA;QAEjB,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC;gBACJ,OAAO,MAAM,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;YAC3D,CAAC;oBAAS,CAAC;gBACV,UAAU,GAAG,KAAK,CAAA;YACnB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,cAAc,GAAG,GAAG,EAAE;gBACrB,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC;qBAC3C,IAAI,CAAC,OAAO,CAAC;qBACb,KAAK,CAAC,MAAM,CAAC;qBACb,OAAO,CAAC,GAAG,EAAE;oBACb,UAAU,GAAG,KAAK,CAAA;gBACnB,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,aAAa,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC9B,UAAU,GAAG,KAAK,CAAA;gBAClB,MAAM,CAAC,GAAG,CAAC,CAAA;YACZ,CAAC,CAAA;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAA;AAC/C,CAAC,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * addon: past-participants
3
+ * Source patch: Baileys-pastParticepnts
4
+ *
5
+ * Adds:
6
+ * - pastParticipants field on history sync events
7
+ * - GroupParticipant.authorPn — phone-number JID of the actor
8
+ * - handlePastParticipants() — processes proto.IPastParticipants[]
9
+ * and returns structured GroupPastParticipant[]
10
+ *
11
+ * The patch replaces chunkOrder with pastParticipants in history sync events.
12
+ * groups.ts emit now includes authorPn from actingParticipantPn.
13
+ */
14
+ import { proto } from '../../WAProto/index.js';
15
+ export type GroupPastParticipant = {
16
+ /** JID of the participant */
17
+ jid: string;
18
+ /** LID JID if available */
19
+ lid?: string;
20
+ /** ISO timestamp when they left/were removed */
21
+ leaveTs?: number;
22
+ /** How they left: 'left' | 'removed' */
23
+ leaveReason?: 'left' | 'removed';
24
+ };
25
+ export type GroupPastParticipantsResult = {
26
+ /** Group JID */
27
+ groupJid: string;
28
+ participants: GroupPastParticipant[];
29
+ };
30
+ /**
31
+ * Process proto.IPastParticipants[] from a history sync payload.
32
+ * Returns a structured list per group.
33
+ */
34
+ export declare const processPastParticipants: (pastParticipantsList: proto.IPastParticipants[]) => GroupPastParticipantsResult[];
35
+ /**
36
+ * Check if a history sync event contains past participants data.
37
+ * (pastParticipants field replaces chunkOrder in this patch)
38
+ */
39
+ export declare const hasPastParticipants: (event: {
40
+ pastParticipants?: proto.IPastParticipants[] | null;
41
+ }) => boolean;
42
+ //# sourceMappingURL=past-participants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"past-participants.d.ts","sourceRoot":"","sources":["../../src/addons/past-participants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,MAAM,MAAM,oBAAoB,GAAG;IAClC,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,oBAAoB,EAAE,CAAA;CACpC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GACnC,sBAAsB,KAAK,CAAC,iBAAiB,EAAE,KAC7C,2BAA2B,EAe7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO;IAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAA;CAAE,KAAG,OAEpG,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * addon: past-participants
3
+ * Source patch: Baileys-pastParticepnts
4
+ *
5
+ * Adds:
6
+ * - pastParticipants field on history sync events
7
+ * - GroupParticipant.authorPn — phone-number JID of the actor
8
+ * - handlePastParticipants() — processes proto.IPastParticipants[]
9
+ * and returns structured GroupPastParticipant[]
10
+ *
11
+ * The patch replaces chunkOrder with pastParticipants in history sync events.
12
+ * groups.ts emit now includes authorPn from actingParticipantPn.
13
+ */
14
+ import { proto } from '../../WAProto/index.js';
15
+ /**
16
+ * Process proto.IPastParticipants[] from a history sync payload.
17
+ * Returns a structured list per group.
18
+ */
19
+ export const processPastParticipants = (pastParticipantsList) => {
20
+ return pastParticipantsList.map(pp => {
21
+ const groupJid = pp.groupJid ?? '';
22
+ const participants = (pp.pastParticipants ?? []).map(p => ({
23
+ jid: p.userJid ?? '',
24
+ leaveTs: p.leaveTs ? Number(p.leaveTs) : undefined,
25
+ leaveReason: p.leaveReason === proto.PastParticipant.LeaveReason.LEFT
26
+ ? 'left'
27
+ : p.leaveReason === proto.PastParticipant.LeaveReason.REMOVED
28
+ ? 'removed'
29
+ : undefined
30
+ }));
31
+ return { groupJid, participants };
32
+ });
33
+ };
34
+ /**
35
+ * Check if a history sync event contains past participants data.
36
+ * (pastParticipants field replaces chunkOrder in this patch)
37
+ */
38
+ export const hasPastParticipants = (event) => {
39
+ return Array.isArray(event.pastParticipants) && event.pastParticipants.length > 0;
40
+ };
41
+ //# sourceMappingURL=past-participants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"past-participants.js","sourceRoot":"","sources":["../../src/addons/past-participants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAmB9C;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,oBAA+C,EACf,EAAE;IAClC,OAAO,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACpC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAA;QAClC,MAAM,YAAY,GAA2B,CAAC,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAClD,WAAW,EACV,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI;gBACvD,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO;oBAC5D,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS;SACd,CAAC,CAAC,CAAA;QACH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAA8D,EAAW,EAAE;IAC9G,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAA;AAClF,CAAC,CAAA"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Rich Response Utilities
3
+ * sendTable, sendList, sendCodeBlock, sendLatex, sendLatexImage,
4
+ * sendLatexInlineImage, sendRichMessage, captureUnifiedResponse, sendUnifiedResponse
5
+ */
6
+ import type { AnyMessageContent, MiscMessageGenerationOptions } from '../Types/index.js';
7
+ type SendFn = (jid: string, content: AnyMessageContent, options?: MiscMessageGenerationOptions) => Promise<any>;
8
+ /**
9
+ * Format a 2D array as a plain-text table and send it.
10
+ * @example sendTable(sock.sendMessage, jid, [['Name','Age'],['Alice','30']])
11
+ */
12
+ export declare const sendTable: (sendMessage: SendFn, jid: string, rows: string[][], opts?: {
13
+ title?: string;
14
+ headerRow?: boolean;
15
+ } & MiscMessageGenerationOptions) => Promise<void>;
16
+ /**
17
+ * Format an array of items as a numbered or bulleted list and send it.
18
+ */
19
+ export declare const sendList: (sendMessage: SendFn, jid: string, items: string[], opts?: {
20
+ title?: string;
21
+ ordered?: boolean;
22
+ } & MiscMessageGenerationOptions) => Promise<void>;
23
+ /**
24
+ * Send a code block (wrapped in triple backticks).
25
+ * language is a hint for syntax highlighting in clients that support it.
26
+ */
27
+ export declare const sendCodeBlock: (sendMessage: SendFn, jid: string, code: string, opts?: {
28
+ language?: string;
29
+ title?: string;
30
+ } & MiscMessageGenerationOptions) => Promise<void>;
31
+ /**
32
+ * Send a LaTeX expression as raw text (wrapped in backticks).
33
+ * Note: WhatsApp does not natively render LaTeX. This sends the raw expression.
34
+ */
35
+ export declare const sendLatex: (sendMessage: SendFn, jid: string, expression: string, opts?: MiscMessageGenerationOptions) => Promise<void>;
36
+ /**
37
+ * Render a LaTeX expression to a PNG image via an external API (e.g. quicklatex.com)
38
+ * and send it as an image message.
39
+ */
40
+ export declare const sendLatexImage: (sendMessage: SendFn, jid: string, expression: string, opts?: {
41
+ caption?: string;
42
+ } & MiscMessageGenerationOptions) => Promise<void>;
43
+ /**
44
+ * Render a LaTeX expression to PNG and send it inline (as image with expression as caption).
45
+ */
46
+ export declare const sendLatexInlineImage: (sendMessage: SendFn, jid: string, expression: string, opts?: MiscMessageGenerationOptions) => Promise<void>;
47
+ type RichTextTable = {
48
+ rows: string[][];
49
+ headerRow?: boolean;
50
+ title?: string;
51
+ };
52
+ type RichTextList = {
53
+ items: string[];
54
+ ordered?: boolean;
55
+ title?: string;
56
+ };
57
+ type CodeBlockOptions = {
58
+ code: string;
59
+ language?: string;
60
+ };
61
+ type LatexOptions = {
62
+ expression: string;
63
+ };
64
+ type RichMessageOptions = {
65
+ parts: ({
66
+ type: 'text';
67
+ text: string;
68
+ } | {
69
+ type: 'table';
70
+ table: RichTextTable;
71
+ } | {
72
+ type: 'list';
73
+ list: RichTextList;
74
+ } | {
75
+ type: 'code';
76
+ code: CodeBlockOptions;
77
+ } | {
78
+ type: 'latex';
79
+ latex: LatexOptions;
80
+ })[];
81
+ caption?: string;
82
+ };
83
+ /**
84
+ * Send a rich message composed of mixed content parts (text, table, list, code, latex).
85
+ */
86
+ export declare const sendRichMessage: (sendMessage: SendFn, jid: string, rich: RichMessageOptions, opts?: MiscMessageGenerationOptions) => Promise<void>;
87
+ export type UnifiedResponseEntry = {
88
+ jid: string;
89
+ content: AnyMessageContent;
90
+ options?: MiscMessageGenerationOptions;
91
+ };
92
+ /**
93
+ * Capture a response without immediately sending it.
94
+ * Useful for building batched sends.
95
+ */
96
+ export declare const captureUnifiedResponse: (jid: string, content: AnyMessageContent, options?: MiscMessageGenerationOptions) => UnifiedResponseEntry;
97
+ /**
98
+ * Send all captured unified responses and clear the capture buffer.
99
+ * Returns the results in order.
100
+ */
101
+ export declare const sendUnifiedResponse: (sendMessage: SendFn) => Promise<any[]>;
102
+ /**
103
+ * Clear captured responses without sending them
104
+ */
105
+ export declare const clearCapturedResponses: () => void;
106
+ /**
107
+ * Get current captured responses without clearing
108
+ */
109
+ export declare const getCapturedResponses: () => UnifiedResponseEntry[];
110
+ export {};
111
+ //# sourceMappingURL=rich-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-response.d.ts","sourceRoot":"","sources":["../../src/addons/rich-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Rich Response Utilities
3
+ * sendTable, sendList, sendCodeBlock, sendLatex, sendLatexImage,
4
+ * sendLatexInlineImage, sendRichMessage, captureUnifiedResponse, sendUnifiedResponse
5
+ */
6
+ // ─── Table ────────────────────────────────────────────────────────────────────
7
+ /**
8
+ * Format a 2D array as a plain-text table and send it.
9
+ * @example sendTable(sock.sendMessage, jid, [['Name','Age'],['Alice','30']])
10
+ */
11
+ export const sendTable = async (sendMessage, jid, rows, opts) => {
12
+ const hasHeader = opts?.headerRow !== false;
13
+ const colWidths = rows[0]?.map((_, ci) => Math.max(...rows.map((r) => (r[ci] ?? '').length))) ?? [];
14
+ const divider = colWidths.map((w) => '─'.repeat(w + 2)).join('┼');
15
+ const formatted = rows.map((row, ri) => {
16
+ const line = row.map((cell, ci) => (cell ?? '').padEnd(colWidths[ci] ?? 0)).join(' │ ');
17
+ if (hasHeader && ri === 0)
18
+ return `┌${divider}┐\n│ ${line} │\n├${divider}┤`;
19
+ return `│ ${line} │`;
20
+ });
21
+ formatted.push(`└${divider}┘`);
22
+ const tableText = (opts?.title ? `*${opts.title}*\n` : '') + '```\n' + formatted.join('\n') + '\n```';
23
+ await sendMessage(jid, { text: tableText }, opts);
24
+ };
25
+ // ─── List ─────────────────────────────────────────────────────────────────────
26
+ /**
27
+ * Format an array of items as a numbered or bulleted list and send it.
28
+ */
29
+ export const sendList = async (sendMessage, jid, items, opts) => {
30
+ const { title, ordered = false } = opts ?? {};
31
+ const lines = items.map((item, i) => (ordered ? `${i + 1}. ${item}` : `• ${item}`));
32
+ const text = (title ? `*${title}*\n` : '') + lines.join('\n');
33
+ await sendMessage(jid, { text }, opts);
34
+ };
35
+ // ─── Code Block ───────────────────────────────────────────────────────────────
36
+ /**
37
+ * Send a code block (wrapped in triple backticks).
38
+ * language is a hint for syntax highlighting in clients that support it.
39
+ */
40
+ export const sendCodeBlock = async (sendMessage, jid, code, opts) => {
41
+ const { language = '', title } = opts ?? {};
42
+ const block = '```' + language + '\n' + code + '\n```';
43
+ const text = (title ? `*${title}*\n` : '') + block;
44
+ await sendMessage(jid, { text }, opts);
45
+ };
46
+ // ─── LaTeX ────────────────────────────────────────────────────────────────────
47
+ /**
48
+ * Send a LaTeX expression as raw text (wrapped in backticks).
49
+ * Note: WhatsApp does not natively render LaTeX. This sends the raw expression.
50
+ */
51
+ export const sendLatex = async (sendMessage, jid, expression, opts) => {
52
+ await sendMessage(jid, { text: '`' + expression + '`' }, opts);
53
+ };
54
+ /**
55
+ * Render a LaTeX expression to a PNG image via an external API (e.g. quicklatex.com)
56
+ * and send it as an image message.
57
+ */
58
+ export const sendLatexImage = async (sendMessage, jid, expression, opts) => {
59
+ // Uses QuickLaTeX render API — no API key required for simple expressions
60
+ const encodedFormula = encodeURIComponent(`\\documentclass{standalone}\\begin{document}\\Large $${expression}$\\end{document}`);
61
+ const apiUrl = `https://quicklatex.com/latex3.f?formula=${encodedFormula}&fsize=50px&fcolor=000000&bcolor=ffffff`;
62
+ const { caption, ...sendOpts } = opts ?? {};
63
+ const resp = await fetch(apiUrl);
64
+ const text = await resp.text();
65
+ // Response format: "0\n<imageUrl>\n<width> <height>"
66
+ const lines = text.trim().split('\n');
67
+ if (lines[0] !== '0')
68
+ throw new Error('LaTeX render failed: ' + text);
69
+ const imageUrl = lines[1].trim();
70
+ await sendMessage(jid, { image: { url: imageUrl }, caption }, sendOpts);
71
+ };
72
+ /**
73
+ * Render a LaTeX expression to PNG and send it inline (as image with expression as caption).
74
+ */
75
+ export const sendLatexInlineImage = async (sendMessage, jid, expression, opts) => {
76
+ await sendLatexImage(sendMessage, jid, expression, { ...opts, caption: expression });
77
+ };
78
+ const renderTable = (table) => {
79
+ const rows = table.rows;
80
+ if (!rows.length)
81
+ return '';
82
+ const hasHeader = table.headerRow !== false;
83
+ const colWidths = rows[0].map((_, ci) => Math.max(...rows.map(r => (r[ci] ?? '').length)));
84
+ const divider = colWidths.map((w) => '─'.repeat(w + 2)).join('┼');
85
+ const lines = rows.map((row, ri) => {
86
+ const line = row.map((cell, ci) => (cell ?? '').padEnd(colWidths[ci] ?? 0)).join(' │ ');
87
+ if (hasHeader && ri === 0)
88
+ return `┌${divider}┐\n│ ${line} │\n├${divider}┤`;
89
+ return `│ ${line} │`;
90
+ });
91
+ lines.push(`└${divider}┘`);
92
+ return (table.title ? `*${table.title}*\n` : '') + '```\n' + lines.join('\n') + '\n```';
93
+ };
94
+ const renderList = (list) => {
95
+ const lines = list.items.map((item, i) => (list.ordered ? `${i + 1}. ${item}` : `• ${item}`));
96
+ return (list.title ? `*${list.title}*\n` : '') + lines.join('\n');
97
+ };
98
+ const renderCode = (code) => '```' + (code.language ?? '') + '\n' + code.code + '\n```';
99
+ const renderLatex = (latex) => '`' + latex.expression + '`';
100
+ /**
101
+ * Send a rich message composed of mixed content parts (text, table, list, code, latex).
102
+ */
103
+ export const sendRichMessage = async (sendMessage, jid, rich, opts) => {
104
+ const parts = rich.parts.map((part) => {
105
+ switch (part.type) {
106
+ case 'text':
107
+ return part.text;
108
+ case 'table':
109
+ return renderTable(part.table);
110
+ case 'list':
111
+ return renderList(part.list);
112
+ case 'code':
113
+ return renderCode(part.code);
114
+ case 'latex':
115
+ return renderLatex(part.latex);
116
+ default:
117
+ return '';
118
+ }
119
+ });
120
+ const text = parts.join('\n\n') + (rich.caption ? '\n\n' + rich.caption : '');
121
+ await sendMessage(jid, { text }, opts);
122
+ };
123
+ let capturedResponses = [];
124
+ /**
125
+ * Capture a response without immediately sending it.
126
+ * Useful for building batched sends.
127
+ */
128
+ export const captureUnifiedResponse = (jid, content, options) => {
129
+ const entry = { jid, content, options };
130
+ capturedResponses.push(entry);
131
+ return entry;
132
+ };
133
+ /**
134
+ * Send all captured unified responses and clear the capture buffer.
135
+ * Returns the results in order.
136
+ */
137
+ export const sendUnifiedResponse = async (sendMessage) => {
138
+ const toSend = [...capturedResponses];
139
+ capturedResponses = [];
140
+ return Promise.all(toSend.map(e => sendMessage(e.jid, e.content, e.options)));
141
+ };
142
+ /**
143
+ * Clear captured responses without sending them
144
+ */
145
+ export const clearCapturedResponses = () => {
146
+ capturedResponses = [];
147
+ };
148
+ /**
149
+ * Get current captured responses without clearing
150
+ */
151
+ export const getCapturedResponses = () => [...capturedResponses];
152
+ //# sourceMappingURL=rich-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-response.js","sourceRoot":"","sources":["../../src/addons/rich-response.ts"],"names":[],"mappings":"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"}