@zervonex/baileys 3.0.3 → 3.0.5

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.
@@ -341,7 +341,7 @@ export class AIRich {
341
341
  if (this.#suggestedPrompts) botMeta.suggestedPromptMetadata = this.#suggestedPrompts
342
342
  if (this.#pttTranscript) botMeta.pttPromptMetadata = { transcript: this.#pttTranscript }
343
343
  botMeta.capabilities = { richResponseUnifiedResponse: true, richResponseEmbeddedScreens: true, richResponseInlineLinksEnabled: true, richResponseUrBloksEnabled: true, richResponseUrImagine: true, richResponseUrReasoning: true }
344
- return generateWAMessageFromContent(jid, message, { userJid: this.#client.user?.id, messageId })
344
+ return await await generateWAMessageFromContent(jid, message, { userJid: this.#client.user?.id, messageId })
345
345
  }
346
346
 
347
347
  async send(jid, opts = {}) {
@@ -363,7 +363,7 @@ export class AIRich {
363
363
  if (!targetId) throw new Error('targetId is required for sendEdit')
364
364
  const msg = await this.build(jid, opts)
365
365
  const editMsg = { protocolMessage: { key: { remoteJid: jid, fromMe: true, id: targetId }, type: 14, editedMessage: msg.message } }
366
- const waMsg = await generateWAMessageFromContent(jid, editMsg, { userJid: this.#client.user?.id })
366
+ const waMsg = await await generateWAMessageFromContent(jid, editMsg, { userJid: this.#client.user?.id })
367
367
  await this.#client.relayMessage(jid, waMsg.message, { messageId: waMsg.key.id })
368
368
  return waMsg
369
369
  }
@@ -471,7 +471,7 @@ export function attachAIRich(result, config) {
471
471
  if (shouldEdit) {
472
472
  try {
473
473
  const editContent = proto.Message.fromObject({ botForwardedMessage: { message: { protocolMessage: { key: { remoteJid: jid, fromMe: true, id: fullMsg.key.id }, type: proto.Message.ProtocolMessage.Type.MESSAGE_EDIT, editedMessage: fullMsg.message } } } })
474
- const editMsg = generateWAMessageFromContent(jid, editContent, { userJid: sock.user?.id, messageId: generateMessageIDV2(sock.user?.id || jid) })
474
+ const editMsg = await await generateWAMessageFromContent(jid, editContent, { userJid: sock.user?.id, messageId: generateMessageIDV2(sock.user?.id || jid) })
475
475
  await sock.relayMessage(jid, editMsg.message, { ...relayOpts, messageId: editMsg.key.id })
476
476
  } catch { /* card already arrived, just behind download prompt */ }
477
477
  }
@@ -503,10 +503,10 @@ export function attachAIRich(result, config) {
503
503
  result.sendLink = (jid, text, links, quoted, opts = {}) => result.sendMessage(jid, { aiRich: { title: opts.headerText, text, sources: links.map(url => ({ url, title: url, subtitle: new URL(url).hostname })) } }, q(quoted))
504
504
  result.sendLinkV2 = (jid, text, links, quoted, opts = {}) => result.sendMessage(jid, { aiRich: { title: opts.headerText, text, sources: links } }, q(quoted))
505
505
  result.sendLatex = (jid, expressions, quoted, opts = {}) => result.sendMessage(jid, { aiRich: { text: opts.text, title: opts.headerText, latex: expressions } }, q(quoted))
506
- result.sendRichTable = async (jid, title, headers, rows, quoted, opts = {}) => { const { message, messageId } = generateTableContent(title, headers, rows, quoted, opts); return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
507
- result.sendRichList = async (jid, title, items, quoted, opts = {}) => { const { message, messageId } = generateListContent(title, items, quoted, opts); return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
508
- result.sendRichCode = async (jid, code, quoted, opts = {}) => { const { message, messageId } = generateCodeBlockContent(code, quoted, opts); return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
509
- result.sendRichLatex = async (jid, quoted, opts = {}) => { const { message, messageId } = generateLatexContent(quoted, { expressions: [], ...opts }); return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
506
+ result.sendRichTable = async (jid, title, headers, rows, quoted, opts = {}) => { const { message, messageId } = generateTableContent(title, headers, rows, quoted, opts); return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
507
+ result.sendRichList = async (jid, title, items, quoted, opts = {}) => { const { message, messageId } = generateListContent(title, items, quoted, opts); return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
508
+ result.sendRichCode = async (jid, code, quoted, opts = {}) => { const { message, messageId } = generateCodeBlockContent(code, quoted, opts); return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
509
+ result.sendRichLatex = async (jid, quoted, opts = {}) => { const { message, messageId } = generateLatexContent(quoted, { expressions: [], ...opts }); return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts) }
510
510
  result.sendRichLabel = (jid, text, options = {}) => { const r = new AIRich(result); r.addLabel(text, options.variant, options); return r.send(jid, options) }
511
511
  result.sendInlineLinks = (jid, links, options = {}) => { const r = new AIRich(result); r.addInlineLinks(links); return r.send(jid, options) }
512
512
  result.sendVerticalAlbum = (jid, items, options = {}) => { const r = new AIRich(result); r.addVerticalAlbum(items); return r.send(jid, options) }
@@ -514,19 +514,19 @@ export function attachAIRich(result, config) {
514
514
  const { text, expressions = [], headerText, footer } = opts
515
515
  const rendered = expressions.map(expr => { const latex = expr.latexExpression || expr.expression || expr; const url = `https://latex.codecogs.com/png.latex?${encodeURIComponent(latex).replace(/'/g, '%27')}`; return { latexExpression: latex, url, width: expr.width || 400, height: expr.height || 100 } })
516
516
  const { message, messageId } = generateLatexContent(null, { text, expressions: rendered, headerText, footer })
517
- return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts)
517
+ return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts)
518
518
  }
519
519
  result.captureAndResendRichResponse = async (jid, metaAiMsg, quoted, opts = {}) => {
520
520
  const captured = captureUnifiedResponse(metaAiMsg)
521
521
  if (!captured) throw new Error('captureAndResendRichResponse: no unifiedResponse data in message')
522
522
  const { message, messageId } = generateUnifiedResponseContent(quoted, captured)
523
- return relayRichMessage(jid, generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts)
523
+ return relayRichMessage(jid, await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || messageId }), opts)
524
524
  }
525
525
  result.sendBotPlanning = async (jid, content = {}, opts = {}) => {
526
526
  const { text = 'Execution plan', steps = [], queryPlan = true, botJid = META_AI_BOT_JID } = content
527
527
  const submessages = [{ messageType: proto.AIRichResponseSubMessageType.AI_RICH_RESPONSE_TEXT, messageText: text }, ...steps.map(s => ({ messageType: proto.AIRichResponseSubMessageType.AI_RICH_RESPONSE_TEXT, messageText: typeof s === 'string' ? s : `${s.title || s.name || 'Step'}${s.body ? `: ${s.body}` : ''}` }))]
528
528
  const wrapped = buildBotRichResponse({ botJid, submessages, capabilities: [BotCapabilityType.AGENTIC_PLANNING, ...(queryPlan ? [BotCapabilityType.QUERY_PLAN] : [])] })
529
- const full = await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
529
+ const full = await await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
530
530
  return relayRichMessage(jid, full, opts)
531
531
  }
532
532
  result.sendBotPlan = async (jid, content = {}, opts = {}) => {
@@ -535,7 +535,7 @@ export function attachAIRich(result, config) {
535
535
  const statusEnum = proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus
536
536
  const normalizedSteps = steps.map((s, i) => ({ statusTitle: String(s.title || s.name || `Step ${i + 1}`), statusBody: String(s.body || s.description || ''), status: s.status === 'executing' ? statusEnum.EXECUTING : (s.status === 'finished' || s.status === 'completed') ? statusEnum.FINISHED : statusEnum.PLANNED, isReasoning: s.isReasoning === true, isEnhancedSearch: s.isEnhancedSearch === true }))
537
537
  const wrapped = { messageContextInfo: { botMetadata: { capabilityMetadata: { capabilities: [proto.BotCapabilityMetadata.BotCapabilityType.AGENTIC_PLANNING, proto.BotCapabilityMetadata.BotCapabilityType.QUERY_PLAN] }, progressIndicatorMetadata: { progressDescription: title, stepsMetadata: normalizedSteps, ...(estimatedCompletionTime ? { estimatedCompletionTime } : {}) } } }, botForwardedMessage: { message: { richResponseMessage: { messageType: 1, submessages: [{ messageType: 2, messageText: text }], contextInfo: { isForwarded: true, forwardingScore: 1, forwardedAiBotMessageInfo: { botJid }, forwardOrigin: 4 } } } } }
538
- const full = await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
538
+ const full = await await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
539
539
  await sock.relayMessage(jid, full.message, { messageId: full.key.id })
540
540
  return full
541
541
  }
@@ -591,7 +591,7 @@ export function attachAIRich(result, config) {
591
591
  result.sendAsMimic = async (jid, content, mimicJid, options = {}) => {
592
592
  if (!options.admin && !options.mimicPermission) throw new Error('sendAsMimic requires admin: true')
593
593
  const msgId = generateMessageIDV2(sock.user?.id)
594
- const full = await generateWAMessageFromContent(jid, content, { userJid: sock.user?.id, ...options })
594
+ const full = await await generateWAMessageFromContent(jid, content, { userJid: sock.user?.id, ...options })
595
595
  full.key = { remoteJid: jid, fromMe: false, id: msgId, participant: mimicJid }
596
596
  await sock.relayMessage(jid, full.message, { messageId: msgId, ...(options.additionalAttributes ? { additionalAttributes: options.additionalAttributes } : {}) })
597
597
  return full
@@ -604,7 +604,7 @@ export function attachAIRich(result, config) {
604
604
  result.sendBotToolResult = async (jid, content = {}, opts = {}) => {
605
605
  const { text = 'Tool result', toolCallId = `tool-${Date.now()}`, resolutionData, resolutionDataSerialized, botJid = META_AI_BOT_JID } = content
606
606
  const wrapped = buildBotRichResponse({ text, botJid, capabilities: [BotCapabilityType.AGENTIC_PLANNING, BotCapabilityType.QUERY_PLAN], botMetadata: { resolvedToolCallMetadata: { toolCallId, resolutionDataSerialized: resolutionDataSerialized ?? JSON.stringify(resolutionData ?? {}) } } })
607
- const full = await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
607
+ const full = await await generateWAMessageFromContent(jid, wrapped, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) })
608
608
  return relayRichMessage(jid, full, opts)
609
609
  }
610
610
  result.sendWhatsAppFlow = async (jid, flow, options = {}) => {
@@ -619,7 +619,7 @@ export function attachAIRich(result, config) {
619
619
  result.sendBotSources = (jid, content = {}, options = {}) => { const { text, sources = [] } = content; const r = new AIRich(result); if (text) r.addText(text); r.addSources(sources); return r.send(jid, options) }
620
620
  result.sendBotPttTranscript = (jid, content = {}, options = {}) => { const { text, transcript } = content; const r = new AIRich(result); if (text) r.addText(text); r.addPttTranscript(transcript); return r.send(jid, options) }
621
621
  result.sendInstagramProfile = (jid, data, options = {}) => { const r = new AIRich(result); r.addInstagramProfile(data); return r.send(jid, options) }
622
- result.sendRichGeneration = async (jid, opts = {}) => { const { message, responseId, itemId } = prepareRichGenerationMessage(opts); const full = await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) }); await sock.relayMessage(jid, full.message, { messageId: full.key.id }); return { msg: full, responseId, itemId } }
622
+ result.sendRichGeneration = async (jid, opts = {}) => { const { message, responseId, itemId } = prepareRichGenerationMessage(opts); const full = await await generateWAMessageFromContent(jid, message, { userJid: sock.user?.id, messageId: opts.messageId || generateMessageIDV2(sock.user?.id) }); await sock.relayMessage(jid, full.message, { messageId: full.key.id }); return { msg: full, responseId, itemId } }
623
623
  result.sendUnifiedResponse = (jid, sections, submessages = [], options = {}) => { const r = new AIRich(result); r.addRawSections(sections, submessages); return r.send(jid, options) }
624
624
  result.sendRichButtonGrid = async (jid, grid, options = {}) => {
625
625
  const { text, footer, cards = [] } = grid || {}
@@ -25,7 +25,7 @@ export class BaseBuilder {
25
25
  }
26
26
 
27
27
  export const buildDispatch = (builders, handlers = {}) => ({
28
- ...Object.fromEntries(builders.flatMap(B => (B.dispatchKeys ?? []).map(key => [key, (sock, jid, content, opts) => new B(sock).from(content[key], opts).send(jid, opts)]))),
28
+ ...Object.fromEntries(builders.flatMap(B => (B.dispatchKeys ?? []).map(key => [key, (sock, jid, content, opts) => { const b = new B(sock); return (typeof b.from === 'function' ? b.from(content[key], opts) : b).send(jid, opts) }]))),
29
29
  ...handlers
30
30
  })
31
31
 
@@ -87,7 +87,7 @@ export async function handleStatusMention(sock, jid, d, config) {
87
87
  statusJidList: [d.mentions, userJid].filter(Boolean),
88
88
  additionalNodes: [{ tag: 'meta', attrs: {}, content: [{ tag: 'mentioned_users', attrs: {}, content: [{ tag: 'to', attrs: { jid: d.mentions }, content: undefined }] }] }]
89
89
  })
90
- const mentionMsg = await generateWAMessageFromContent(jid, {
90
+ const mentionMsg = await await generateWAMessageFromContent(jid, {
91
91
  statusMentionMessage: proto.Message.StatusMentionMessage.create({
92
92
  message: { protocolMessage: proto.Message.ProtocolMessage.create({ messageId: statusMsg?.key?.id ?? d.mentions, type: proto.Message.ProtocolMessage.Type.STATUS_MENTION_MESSAGE }) }
93
93
  })
@@ -96,7 +96,7 @@ export async function handleStatusMention(sock, jid, d, config) {
96
96
  }
97
97
 
98
98
  export async function handlePollResult(sock, jid, p) {
99
- const msg = await generateWAMessageFromContent(jid, {
99
+ const msg = await await generateWAMessageFromContent(jid, {
100
100
  pollResultSnapshotMessage: proto.Message.PollResultSnapshotMessage.create({
101
101
  name: p.name,
102
102
  pollVotes: (p.pollVotes ?? []).map(v => proto.Message.PollResultSnapshotMessage.PollVote.create({ optionName: v.optionName, optionVoteCount: String(v.optionVoteCount ?? 0) })),