@zervonex/baileys 3.0.2 → 3.0.4
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.
- package/README.md +38 -8
- package/WAProto/WAProtoCompile.js +1 -0
- package/WAProto/fetcher.js +17 -33
- package/WAProto/index.js +34 -26
- package/WAProto/parser.js +333 -312
- package/lib/Builders/AIRich.js +14 -14
- package/lib/Builders/base.js +3 -3
- package/lib/Builders/builders.js +460 -448
- package/lib/Defaults/index.js +1 -0
- package/lib/Socket/messages-recv.js +1 -1
- package/lib/Socket/messages-send.js +1 -1
- package/lib/Socket/newsletter.js +1 -0
- package/lib/Socket/socket.js +4 -3
- package/lib/Socket/zervonex-handler.js +1 -1
- package/lib/Utils/browser-utils.js +8 -4
- package/lib/Utils/chat-utils.js +1 -1
- package/lib/Utils/messages.js +91 -40
- package/lib/Utils/use-multi-file-auth-state.js +50 -157
- package/lib/Utils/validate-connection.js +19 -28
- package/lib/WABinary/generic-utils.js +43 -19
- package/lib/index.js +1 -1
- package/package.json +56 -91
package/lib/Builders/AIRich.js
CHANGED
|
@@ -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 || {}
|
package/lib/Builders/base.js
CHANGED
|
@@ -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) })),
|