@hdriel/whatsapp-socket 1.2.8 → 1.2.9
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/dist/index.cjs +4 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +232 -16
- package/dist/index.d.ts +232 -16
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mongoAuthState.ts","../src/helpers.ts","../src/whatsappSocket.base.ts","../src/messages/file-stream.message.ts","../src/messages/audio.message.ts","../src/messages/buttons.message.ts","../src/messages/delete.message.ts","../src/messages/document.message.ts","../src/messages/image.message.ts","../src/messages/video.message.ts","../src/messages/sticker.message.ts","../src/messages/file.message.ts","../src/messages/location.message.ts","../src/messages/menu.message.ts","../src/messages/reaction.message.ts","../src/messages/reply.message.ts","../src/messages/survey.message.ts","../src/messages/text.message.ts","../src/whatsappSocket.private.messages.ts","../src/whatsappSocket.private.client.ts","../src/whatsappSocket.group.management.ts","../src/whatsappSocket.group.messages.ts","../src/whatsappSocket.group.client.ts"],"names":["BufferJSON","_k","value","_","val","useMongoDBAuthState","collection","writeData","data","id","update","readData","removeData","creds","initAuthCreds","type","ids","proto","tasks","category","key","mongoAuthState_default","getTotalSeconds","msValue","ms","getUrlBuffer","url","arrayBuffer","getDurationFromStream","stream","mimeType","parseStream","metadata","error","getDurationFromBuffer","buffer","parseBuffer","getAudioFileDuration","audioFile","ReadStream","streamToBuffer","resolve","reject","chunks","chunk","err","getFilenameMimetype","filename","ext","MIME_TYPES","sleep","timeout","MIME_TO_TYPES","getFileMessageProps","mimetype","options","formatFileSize","bytes","decimals","k","dm","sizes","i","extractMessageData","message","jpegThumbnail","downloadMediaMessage","fileLength","isMenuMessage","listMessageParamJson","pinoLogger","P","WhatsappSocketBase","_WhatsappSocketBase","phone","countryCode","strNumber","formattedPhone","messageQuery","qr","QRCode","pattern","length","result","pool","buildPool","block","chars","start","end","c","char","upperCaseResult","props","instanceKey","fileAuthStateDirectoryPath","mongoURL","mongoCollection","logger","onOpen","onClose","onQR","onConnectionStatusChange","debug","printQRInTerminal","customPairingCode","onPreConnectionSendMessageFailed","appName","pairingPhone","sources","response","mongoClient","MongoClient","saveCreds","state","useMultiFileAuthState","makeCacheableSignalKeyStore","sock","connectionAttempts","_pairingPhone","_debug","auth","version","connect","makeWASocket","jid","connection","lastDisconnect","qrcode","pairing","code","shouldReconnect","DisconnectReason","statusCode","errorMessage","messages","messageDataList","p","reason","messageData","sender","messageId","username","timestamp","fromMe","cb","socket","fs","autoConnect","chatJid","deleteForEveryone","results","sendFileFromStream","mentions","messageContent","messageOptions","sendAudioMessage","audioSrc","replyToMessageId","seconds","ptt","audioBuffer","durationInSeconds","sendButtonsMessage","subtitle","title","buttons","buttonsValue","btn","buttonParamsJson","name","reminderOn","reminderDate","v","msg","generateWAMessageFromContent","sendDeleteMessage","sendDocumentMessage","documentSrc","caption","documentBuffer","sendImageMessage","imageSrc","imageBuffer","sendVideoMessage","videoSrc","gifPlayback","videoBuffer","sendStickerMessage","sendFileMessage","fileSrc","jpegThumbnailSrc","autoMessageClassification","jpegThumbnailBuffer","Stream","fileBuffer","basename","sendSuccess","sendLocationMessage","latitude","longitude","address","sendMenuMessage","buttonText","sections","section","row","acc","s","sendReactionMessage","emoji","sendReplyMessage","formattedMentionsPhones","index","sendSurveyMessage","question","allowMultipleAnswers","pollOptions","sendTextMessage","text","WhatsappSocketPrivateMessages","_WhatsappSocketPrivateMessages","to","baseProps","sendAsGifPlayback","WhatsappSocket","_WhatsappSocket","WhatsappSocketGroups","_WhatsappSocketGroups","groupId","participants","description","formattedParticipants","selfJid","pId","formattedGroupId","newName","fetchMetaData","e","setting","participant","action","groups","urlLink","inviteCode","highRes","WhatsappSocketGroupMessages","_WhatsappSocketGroupMessages","groupMetadata","groupParticipants","fileName","WhatsappSocketGroup","_WhatsappSocketGroup"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n type AuthenticationCreds,\n type SignalDataTypeMap,\n initAuthCreds,\n WAProto as proto,\n} from '@fadzzzslebew/baileys';\n\nconst BufferJSON = {\n replacer: (_k: string, value: any) => {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array || value?.type === 'Buffer') {\n return {\n type: 'Buffer',\n data: Buffer.from(value?.data || value).toString('base64'),\n };\n }\n return value;\n },\n\n reviver: (_: string, value: any) => {\n if (typeof value === 'object' && !!value && (value.buffer === true || value.type === 'Buffer')) {\n const val = value.data || value.value;\n return typeof val === 'string' ? Buffer.from(val, 'base64') : Buffer.from(val || []);\n }\n return value;\n },\n};\n\nconst useMongoDBAuthState = async (collection: any) => {\n const writeData = (data: any, id: string) => {\n const informationToStore = JSON.parse(JSON.stringify(data, BufferJSON.replacer));\n const update = { $set: { ...informationToStore } };\n return collection.updateOne({ _id: id }, update, { upsert: true });\n };\n\n const readData = async (id: string) => {\n try {\n const data = JSON.stringify(await collection.findOne({ _id: id }));\n return JSON.parse(data, BufferJSON.reviver);\n } catch (error) {\n return null;\n }\n };\n\n const removeData = async (id: string) => {\n try {\n await collection.deleteOne({ _id: id });\n } catch (_a) {}\n };\n\n const creds: AuthenticationCreds = (await readData('creds')) || initAuthCreds();\n\n return {\n state: {\n creds,\n keys: {\n get: async (type: keyof SignalDataTypeMap, ids: string[]) => {\n const data: { [id: string]: any } = {};\n await Promise.all(\n ids.map(async (id) => {\n let value = await readData(`${type}-${id}`);\n if (type === 'app-state-sync-key' && value) {\n value = proto.Message.AppStateSyncKeyData.fromObject(value);\n }\n data[id] = value;\n })\n );\n return data;\n },\n set: async (data: any) => {\n const tasks: Promise<any>[] = [];\n for (const category of Object.keys(data)) {\n for (const id of Object.keys(data[category])) {\n const value = data[category][id];\n const key = `${category}-${id}`;\n tasks.push(value ? writeData(value, key) : removeData(key));\n }\n }\n await Promise.all(tasks);\n },\n },\n },\n saveCreds: () => {\n return writeData(creds, 'creds');\n },\n };\n};\n\nexport default useMongoDBAuthState;\n","import { ReadStream } from 'node:fs';\nimport ms, { type StringValue } from 'ms';\nimport type Stream from 'node:stream';\nimport { type AnyMessageContent, type WAMessage, downloadMediaMessage } from '@fadzzzslebew/baileys';\n// NOTE: Hidden for Dynamic Import for ESM-only Packages\n// import { parseBuffer, parseStream } from 'music-metadata';\n\nexport const getTotalSeconds = (msValue: StringValue) => {\n const value = ms(msValue);\n return value / 1000;\n};\n\nexport async function getUrlBuffer(url: string) {\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n return buffer;\n}\n\nasync function getDurationFromStream(stream: ReadStream, mimeType?: string): Promise<number> {\n try {\n const { parseStream } = await import('music-metadata');\n const metadata = await parseStream(stream, { mimeType: mimeType || 'audio/mpeg' });\n return Math.floor(metadata.format.duration || 0);\n } catch (error) {\n console.error('Error parsing stream:', error);\n throw error;\n } finally {\n if (!stream.destroyed) {\n stream.destroy();\n }\n }\n}\n\nasync function getDurationFromBuffer(buffer: Buffer, mimeType?: string): Promise<number> {\n try {\n const { parseBuffer } = await import('music-metadata');\n const metadata = await parseBuffer(buffer, mimeType || 'audio/mpeg').catch(() => null);\n return metadata ? Math.floor(metadata.format.duration || 0) : 0;\n } catch (error) {\n console.error('Error parsing buffer:', error);\n throw error;\n }\n}\n\nexport async function getAudioFileDuration(audioFile: ReadStream | Buffer, mimeType?: string): Promise<number> {\n if (audioFile instanceof ReadStream) {\n return getDurationFromStream(audioFile, mimeType);\n } else {\n return getDurationFromBuffer(audioFile, mimeType);\n }\n}\n\nexport async function streamToBuffer(stream: Stream): Promise<Buffer> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));\n stream.on('error', (err) => reject(err));\n stream.on('end', () => resolve(Buffer.concat(chunks)));\n });\n}\n\nexport function getFilenameMimetype(filename: string): string {\n const ext = filename?.split('.')?.pop()?.toLowerCase();\n return MIME_TYPES[ext || ''] || 'application/octet-stream';\n}\n\nexport function getFilenameFromStream(_stream: Stream): string | undefined {\n // if (stream.path) {\n // const pathStr = stream.path.toString();\n // return basename(pathStr);\n // }\n return undefined;\n}\n\nexport const sleep = (timeout: StringValue | number) => {\n return new Promise((resolve) => setTimeout(resolve, typeof timeout === 'number' ? timeout : ms(timeout)));\n};\n\nexport const MIME_TYPES: { [key: string]: string } = {\n // Images\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n\n // Videos\n mp4: 'video/mp4',\n avi: 'video/x-msvideo',\n mov: 'video/quicktime',\n mkv: 'video/x-matroska',\n webm: 'video/webm',\n\n // Audio\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n m4a: 'audio/mp4',\n\n // Documents\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n txt: 'text/plain',\n zip: 'application/zip',\n rar: 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed',\n};\n\nexport const MIME_TO_TYPES: { [key: string]: 'Image' | 'Video' | 'Audio' | 'Document' | 'Sticker' } = {\n jpg: 'Image',\n jpeg: 'Image',\n 'image/jpeg': 'Image',\n png: 'Image',\n 'image/png': 'Image',\n ico: 'Image',\n 'image/ico': 'Image',\n svg: 'Document',\n 'image/svg+xml': 'Document',\n // bmp: 'Image',\n // 'image/bmp': 'Image',\n\n // Sticker\n webp: 'Sticker',\n 'image/webp': 'Sticker',\n\n // Videos\n gif: 'Image',\n 'image/gif': 'Image',\n mp4: 'Video',\n 'video/mp4': 'Video',\n avi: 'Video',\n 'video/x-msvideo': 'Video',\n mov: 'Video',\n 'video/quicktime': 'Video',\n mkv: 'Video',\n 'video/x-matroska': 'Video',\n webm: 'Video',\n 'video/webm': 'Video',\n\n // Audio\n mp3: 'Audio',\n 'audio/mpeg': 'Audio',\n wav: 'Audio',\n 'audio/wav': 'Audio',\n ogg: 'Audio',\n 'audio/ogg': 'Audio',\n opus: 'Audio',\n 'audio/opus': 'Audio',\n aac: 'Audio',\n 'audio/aac': 'Audio',\n m4a: 'Audio',\n 'audio/mp4': 'Audio',\n\n // Documents\n pdf: 'Document',\n 'application/pdf': 'Document',\n doc: 'Document',\n 'application/msword': 'Document',\n docx: 'Document',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Document',\n xls: 'Document',\n 'application/vnd.ms-excel': 'Document',\n xlsx: 'Document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Document',\n ppt: 'Document',\n 'application/vnd.ms-powerpoint': 'Document',\n pptx: 'Document',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'Document',\n txt: 'Document',\n 'text/plain': 'Document',\n zip: 'Document',\n 'application/zip': 'Document',\n rar: 'Document',\n 'application/x-rar-compressed': 'Document',\n '7z': 'Document',\n 'application/x-7z-compressed': 'Document',\n};\n\nexport function getFileMessageProps(\n buffer: Buffer,\n mimetype: string,\n options: {\n filename: string;\n caption?: string;\n ptt?: boolean;\n seconds?: number;\n gifPlayback?: boolean;\n jpegThumbnail?: Buffer | string;\n }\n): AnyMessageContent {\n const [type] = mimetype.split('/');\n\n switch (type) {\n case 'sticker':\n return {\n sticker: buffer,\n };\n\n case 'image':\n return {\n image: buffer,\n caption: options.caption,\n mimetype,\n fileName: options.filename,\n };\n\n case 'video':\n return {\n video: buffer,\n caption: options.caption,\n mimetype,\n fileName: options.filename,\n gifPlayback: options.gifPlayback || false,\n jpegThumbnail: options.jpegThumbnail as string,\n ...(options.seconds && { seconds: options.seconds }),\n };\n\n case 'audio':\n if (options.ptt) {\n // Voice note\n return {\n audio: buffer,\n mimetype: 'audio/ogg; codecs=opus',\n ptt: true,\n ...(options.seconds && { seconds: options.seconds }),\n };\n }\n\n return {\n audio: buffer,\n mimetype,\n fileName: options.filename,\n ...(options.seconds && { seconds: options.seconds }),\n };\n\n default:\n // Document (PDF, DOC, etc.)\n return {\n document: buffer,\n mimetype,\n fileName: options.filename,\n caption: options.caption,\n jpegThumbnail: options.jpegThumbnail as string,\n };\n }\n}\n\nexport function getBufferDataUri(buffer: Buffer, mimetype: string = 'image/jpeg'): string {\n const base64 = buffer.toString('base64');\n const dataUri = `data:${mimetype};base64,${base64}`;\n return dataUri;\n}\n\nfunction formatFileSize(bytes: number, decimals = 2) {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n\ntype MessageData = {\n messageId: string;\n fromMe: boolean;\n sender: string;\n username: string;\n timestamp: number;\n text?: string;\n reaction?: { messageId: string; emoji: string; timestamp: number };\n image?: {\n jpegThumbnail: Buffer;\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n height: number;\n width: number;\n caption?: string;\n };\n video?: {\n jpegThumbnail: Buffer;\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n caption?: string;\n };\n audio?: { buffer: Buffer; mimetype: string; fileLength: number; fileSize: string; seconds: number };\n location?: { latitude: number; longitude: number; name: string; address: string };\n file?: {\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n fileName: string;\n caption?: string;\n };\n sticker?: { buffer: Buffer; mimetype: string; fileLength: number; fileSize: string };\n menuOption?: { participant: string; text: string; description?: string; id: string };\n buttonsResponse?: { participant: string; description?: string; text: string; id: string };\n};\n\nexport async function extractMessageData(message: WAMessage): Promise<MessageData> {\n const data: MessageData = {} as MessageData;\n\n data.messageId = message.key.id;\n data.fromMe = message.key.fromMe;\n data.sender = message.key.remoteJid;\n data.username = message.pushName ?? '';\n data.timestamp = message.messageTimestamp * 1000;\n\n data.text = message.message.conversation ?? message.message.extendedTextMessage?.text ?? undefined;\n\n data.reaction = message.message.reactionMessage\n ? {\n messageId: message.message.reactionMessage?.key.id,\n emoji: message.message.reactionMessage?.text ?? '',\n timestamp: +message.message.reactionMessage?.senderTimestampMs,\n }\n : undefined;\n\n if (message.message?.imageMessage) {\n const mimetype = message.message.imageMessage.mimetype;\n const jpegThumbnail = Buffer.from(message.message.imageMessage.jpegThumbnail, 'base64');\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.imageMessage.fileLength.low;\n\n data.image = {\n mimetype,\n buffer,\n jpegThumbnail,\n fileLength,\n fileSize: formatFileSize(fileLength),\n height: message.message.imageMessage.height,\n width: message.message.imageMessage.width,\n caption: message.message.imageMessage.caption,\n };\n }\n\n if (message.message?.videoMessage) {\n const mimetype = message.message.videoMessage.mimetype;\n const jpegThumbnail = Buffer.from(message.message.videoMessage.jpegThumbnail, 'base64');\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.videoMessage.fileLength.low;\n\n data.video = {\n buffer,\n jpegThumbnail,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n caption: message.message.videoMessage.caption,\n };\n }\n\n if (message.message?.audioMessage) {\n const mimetype = message.message.audioMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.audioMessage.fileLength.low;\n\n data.audio = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n seconds: message.message.audioMessage.seconds,\n };\n }\n\n if (message.message?.documentMessage) {\n const mimetype = message.message.documentMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.documentMessage.fileLength.low;\n\n data.file = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n fileName: message.message.documentMessage.fileName,\n caption: message.message.documentMessage.caption,\n };\n }\n\n if (message.message?.stickerMessage) {\n const mimetype = message.message.stickerMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.stickerMessage.fileLength.low;\n\n // @ts-ignore\n // const dataUri = getBufferDataUri(buffer, mimetype);\n\n data.sticker = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n };\n }\n\n data.location = message.message?.locationMessage\n ? {\n latitude: message.message.locationMessage.degreesLatitude,\n longitude: message.message.locationMessage.degreesLongitude,\n name: message.message.locationMessage.name,\n address: message.message.locationMessage.address,\n }\n : undefined;\n\n const isMenuMessage =\n message.message.interactiveResponseMessage?.nativeFlowResponseMessage?.name === 'menu_options';\n\n const listMessageParamJson =\n isMenuMessage && JSON.parse(message.message.interactiveResponseMessage.nativeFlowResponseMessage.paramsJson);\n\n data.menuOption = isMenuMessage\n ? {\n participant: message.message?.interactiveResponseMessage.contextInfo.participant,\n text: message.message?.interactiveResponseMessage.body.text,\n description: listMessageParamJson.description,\n id: listMessageParamJson.id,\n }\n : undefined;\n\n data.buttonsResponse = message.message?.buttonsResponseMessage\n ? {\n participant: message.message?.buttonsResponseMessage.contextInfo.participant,\n description: message.message?.buttonsResponseMessage.description,\n text: message.message?.buttonsResponseMessage.selectedDisplayText,\n id: message.message?.buttonsResponseMessage.selectedButtonId,\n }\n : undefined;\n\n return JSON.parse(JSON.stringify(data));\n}\n","// Baileys links\n// https://whiskeysockets.github.io/docs/tutorial-basics/sending-messages\n// https://github.com/WhiskeySockets/Baileys\n// https://github.com/ndalu-id/baileys-api\n// https://whiskeysockets.github.io/Baileys/\n// alternatives:\n// https://www.npmjs.com/package/mudslide\n// https://www.npmjs.com/package/whatsapp-web.js\n// https://www.npmjs.com/package/wbm\nimport {\n default as makeWASocket,\n DisconnectReason,\n makeCacheableSignalKeyStore,\n useMultiFileAuthState,\n type MessageUpsertType,\n type UserFacingSocketConfig,\n type WAMessage,\n type WASocket,\n type AuthenticationState,\n} from '@fadzzzslebew/baileys';\nimport { type StringValue } from 'ms';\nimport type { Logger as MyLogger } from 'stack-trace-logger';\nimport fs from 'node:fs';\nimport QRCode from 'qrcode';\nimport { type Collection, type Document as MongoDocument, MongoClient } from 'mongodb';\nimport P from 'pino';\nimport type { Boom } from '@hapi/boom';\nimport useMongoDBAuthState from './mongoAuthState';\nimport { extractMessageData, sleep } from './helpers';\nimport type { MessageReceivedCB } from './decs.ts';\n\nconst pinoLogger: any = P({ level: 'silent' });\n\nexport type WhatsappSocketBaseProps = (\n | { mongoURL: string; fileAuthStateDirectoryPath?: string | undefined }\n | { mongoURL?: string | undefined; fileAuthStateDirectoryPath: string }\n) & {\n appName?: string;\n logger?: MyLogger;\n mongoCollection?: string;\n onOpen?: () => Promise<void> | void;\n onClose?: () => Promise<void> | void;\n onConnectionStatusChange?: (connectionStatus: 'connecting' | 'close' | 'open') => Promise<void> | void;\n onPreConnectionSendMessageFailed?: (error: Error | string) => Promise<void> | void;\n onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n debug?: boolean;\n printQRInTerminal?: boolean;\n pairingPhone?: string;\n customPairingCode?: string;\n};\n\nexport class WhatsappSocketBase {\n protected readonly fileAuthStateDirectoryPath?: string;\n protected readonly mongoURL?: string;\n protected readonly mongoCollection: string = 'whatsapp-auth';\n protected readonly logger?: MyLogger;\n protected readonly debug?: boolean;\n protected readonly printQRInTerminal?: boolean;\n protected readonly messageReceivedCBs: Record<string, MessageReceivedCB[]> = {};\n protected readonly pairingPhone?: string;\n protected readonly customPairingCode?: string;\n protected readonly appName?: string;\n private readonly onPreConnectionSendMessageFailed?: (error: Error | string) => Promise<void> | void;\n private onOpen?: () => Promise<void> | void;\n private onClose?: () => Promise<void> | void;\n private onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n private onConnectionStatusChange?: (connectionStatus: 'open' | 'close' | 'connecting') => Promise<void> | void;\n static DEFAULT_COUNTRY_CODE: string = '972';\n static CONNECTION_TIMEOUT: StringValue = '2s';\n\n static formatPhoneNumber(phone: string, countryCode: string = WhatsappSocketBase.DEFAULT_COUNTRY_CODE): string {\n if (phone.endsWith('@s.whatsapp.net')) return phone;\n\n let strNumber = phone.replace(/[^0-9]/g, '');\n if (strNumber.startsWith('05')) strNumber = strNumber.substring(1);\n if (!strNumber.startsWith(countryCode)) strNumber = countryCode + strNumber;\n\n return strNumber; // formatted Number should look like: '+972 051-333-4444' to: '972513334444'\n }\n\n static formatPhoneNumberToWhatsappPattern(\n phone: string,\n countryCode: string = WhatsappSocketBase.DEFAULT_COUNTRY_CODE\n ): string {\n if (phone.endsWith('@s.whatsapp.net')) {\n return phone.replace(/:\\d+@/, '@');\n }\n\n let strNumber = WhatsappSocketBase.formatPhoneNumber(phone, countryCode);\n strNumber = `${strNumber}@s.whatsapp.net`; // formatted Number should look like: '972513334444@s.whatsapp.net'\n strNumber = strNumber.replace(/:\\d+@/, '@'); // remove the sessionId\n return strNumber;\n }\n\n static getWhatsappPhoneLink({\n phone,\n message,\n countryCode = WhatsappSocketBase.DEFAULT_COUNTRY_CODE,\n }: {\n phone: string;\n countryCode?: string;\n message?: string;\n }) {\n const formattedPhone = this.formatPhoneNumber(phone, countryCode);\n const messageQuery = message ? `?text=${encodeURI(message)}` : '';\n return `https://wa.me/${formattedPhone}${messageQuery}`;\n }\n\n static async qrToImage(\n qr: string,\n options: {\n errorCorrectionLevel?: 'H' | 'L' | 'M';\n width?: number;\n margin?: number;\n [key: string]: any;\n } = {}\n ) {\n return QRCode.toDataURL(qr, {\n errorCorrectionLevel: 'H', // Changed to 'H' (High) for better reliability\n width: 400, // Increased size for better scanning\n margin: 2, // Ensure adequate margin\n ...options,\n });\n }\n\n static async qrToTerminalString(qr: string, options: { small?: boolean; [key: string]: any } = {}) {\n return QRCode.toString(qr, { type: 'terminal', small: true, ...options });\n }\n\n // only 8 alphanumeric (no more or less), patterns [a-z0-8] | aaaa[0-8] xxzzvvcc [zaq0-8]\n static randomPairingCode(pattern: string, length = 8) {\n // no randomness needed\n if (!pattern.includes('[') && pattern.length === length) {\n return pattern;\n }\n\n let result = '';\n let pool: string[] = [];\n\n const buildPool = (block: string) => {\n const chars: string[] = [];\n\n for (let i = 0; i < block.length; i++) {\n if (block[i + 1] === '-' && block[i + 2]) {\n const start = block.charCodeAt(i);\n const end = block.charCodeAt(i + 2);\n\n for (let c = start; c <= end; c++) {\n chars.push(String.fromCharCode(c));\n }\n\n i += 2;\n } else {\n chars.push(block[i]);\n }\n }\n\n return chars;\n };\n\n for (let i = 0; i < pattern.length && result.length < length; i++) {\n const char = pattern[i];\n\n if (char === '[') {\n const end = pattern.indexOf(']', i);\n const block = pattern.slice(i + 1, end);\n\n pool = buildPool(block);\n i = end;\n } else {\n result += char;\n }\n }\n\n // fill remaining from pool\n while (result.length < length && pool.length) {\n result += pool[Math.floor(Math.random() * pool.length)];\n }\n\n const upperCaseResult = result.toUpperCase();\n return upperCaseResult.padEnd(length, upperCaseResult);\n }\n\n private static instances: Map<string, WASocket | null> = new Map();\n\n static getInstance(props: WhatsappSocketBaseProps): WASocket {\n const instanceKey = WhatsappSocketBase.buildSocketKey(props);\n if (!WhatsappSocketBase.instances.has(instanceKey)) {\n new WhatsappSocketBase(props);\n }\n\n return WhatsappSocketBase.instances.get(instanceKey)!;\n }\n\n static clearInstance(key?: string): void {\n if (key) {\n WhatsappSocketBase.instances.delete(key);\n } else {\n WhatsappSocketBase.instances.clear();\n }\n }\n\n constructor(props: WhatsappSocketBaseProps) {\n const {\n fileAuthStateDirectoryPath,\n mongoURL,\n mongoCollection = 'whatsapp-auth',\n logger,\n onOpen,\n onClose,\n onQR,\n onConnectionStatusChange,\n debug,\n printQRInTerminal,\n customPairingCode,\n onPreConnectionSendMessageFailed,\n appName,\n pairingPhone,\n } = props;\n\n this.appName = appName;\n this.mongoURL = mongoURL;\n this.fileAuthStateDirectoryPath = fileAuthStateDirectoryPath;\n this.mongoCollection = mongoCollection;\n this.logger = logger;\n this.debug = debug;\n this.printQRInTerminal = printQRInTerminal;\n this.pairingPhone = pairingPhone;\n this.customPairingCode = customPairingCode;\n this.onPreConnectionSendMessageFailed = onPreConnectionSendMessageFailed;\n this.onConnectionStatusChange = onConnectionStatusChange;\n this.onOpen = onOpen;\n this.onClose = onClose;\n this.onQR = onQR;\n\n if (WhatsappSocketBase.instances.has(this.socketKey)) {\n this.socket = WhatsappSocketBase.instances.get(this.socketKey)!;\n // instance.logger?.debug('WHATSAPP', 'RETURN SINGLETON INSTANCE!');\n }\n }\n\n private async getLatestWhatsAppVersion(): Promise<[number, number, number]> {\n try {\n // Try multiple sources\n const sources = [\n 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json',\n 'https://raw.githubusercontent.com/whiskeysockets/baileys/master/src/Defaults/baileys-version.json',\n ];\n\n for (const url of sources) {\n try {\n const response = await fetch(url);\n if (response.ok) {\n const data = (await response.json()) as { version: [number, number, number] };\n return data.version as [number, number, number];\n }\n } catch (err) {\n continue;\n }\n }\n\n // Fallback to a known working version\n console.log('Could not fetch version, using fallback');\n return [2, 3000, 1015901307]; // Recent version as of late 2024\n } catch (error) {\n console.error('Error fetching version:', error);\n return [2, 3000, 1015901307]; // Fallback\n }\n }\n\n private async getAuthCollection(): Promise<[] | [Collection<MongoDocument>, MongoClient]> {\n return new Promise(async (resolve, reject) => {\n if (!this.mongoURL) {\n resolve([]);\n return;\n }\n\n const mongoClient = new MongoClient(this.mongoURL);\n await mongoClient\n .connect()\n .then(() => {\n const collection = mongoClient.db().collection(this.mongoCollection);\n resolve([collection, mongoClient]);\n })\n .catch((error) => {\n this.logger?.error('WHASTAPP', 'Error connecting to MongoDB connection', error);\n reject(error);\n });\n });\n }\n\n private async authenticate(): Promise<{ auth: AuthenticationState; saveCreds: any }> {\n if (!this.mongoURL && !this.fileAuthStateDirectoryPath) {\n throw new Error('fileAuthStateDirectoryPath/MongoURL is missing');\n }\n\n if (!this.mongoURL) {\n const { saveCreds, state } = await useMultiFileAuthState(this.fileAuthStateDirectoryPath as string);\n return { auth: state, saveCreds };\n }\n\n const [collection] = await this.getAuthCollection();\n\n const { state, saveCreds } = await useMongoDBAuthState(collection);\n const auth = {\n creds: state.creds,\n keys: makeCacheableSignalKeyStore(state.keys, pinoLogger as any),\n } as AuthenticationState;\n\n return { auth, saveCreds };\n }\n\n static buildSocketKey(props: Partial<WhatsappSocketBaseProps>) {\n return (\n props.appName ||\n props.pairingPhone ||\n props.mongoCollection ||\n props.fileAuthStateDirectoryPath ||\n 'default'\n );\n }\n\n get socketKey(): string {\n return (\n this.appName || this.pairingPhone || this.mongoCollection || this.fileAuthStateDirectoryPath || 'default'\n );\n }\n\n get socket(): WASocket | null {\n return WhatsappSocketBase.instances.get(this.socketKey) ?? null;\n }\n\n set socket(sock: WASocket | null) {\n WhatsappSocketBase.instances.set(this.socketKey, sock);\n }\n\n async startConnection({\n options,\n connectionAttempts = 3,\n onOpen = this.onOpen,\n onClose = this.onClose,\n onQR = this.onQR,\n onConnectionStatusChange = this.onConnectionStatusChange,\n pairingPhone: _pairingPhone,\n debug: _debug,\n }: {\n options?: UserFacingSocketConfig;\n debug?: boolean;\n pairingPhone?: string;\n connectionAttempts?: number;\n onOpen?: () => Promise<void> | void;\n onClose?: () => Promise<void> | void;\n onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n onConnectionStatusChange?: (status: 'open' | 'close' | 'connecting') => Promise<void> | void;\n } = {}): Promise<WASocket | null> {\n const pairingPhone = _pairingPhone ?? this.pairingPhone;\n const { saveCreds, auth } = await this.authenticate();\n const debug = _debug === undefined ? this.debug : _debug;\n\n // Fetch latest Baileys version for better compatibility\n const version = await this.getLatestWhatsAppVersion();\n\n const connect = async (): Promise<WASocket | null> => {\n return new Promise((resolve) => {\n const sock = makeWASocket({\n version: version,\n logger: pinoLogger,\n browser: [this.appName || 'baileys', '1.0.0', ''], // ['Ubuntu', 'Chrome', '20.0.04'],\n syncFullHistory: true, // Don't sync full history on first connect\n // shouldSyncHistoryMessage: () => false,\n shouldIgnoreJid: (jid) => jid.includes('@newsletter'), // Ignore newsletter\n ...options,\n printQRInTerminal: false,\n ...{ auth },\n });\n\n // CRITICAL: Handle connection updates properly\n sock.ev.on('connection.update', async (update) => {\n const { connection, lastDisconnect, qr } = update;\n\n if (qr) {\n if (debug) this.logger?.info('WHATSAPP', 'QR Code received', { qr });\n if (this.printQRInTerminal) {\n const qrcode = await WhatsappSocketBase.qrToTerminalString(qr, { small: true }).catch(\n () => null\n );\n console.log(qrcode);\n }\n\n // @ts-ignore\n const pair = this.customPairingCode\n ? WhatsappSocketBase.randomPairingCode(this.customPairingCode)\n : undefined;\n\n const pairing = pairingPhone ? WhatsappSocketBase.formatPhoneNumber(pairingPhone) : null;\n const code = pairing ? await sock.requestPairingCode(pairing) : null;\n\n if (debug && this.printQRInTerminal) {\n this.logger?.info('WHATSAPP', 'QR Pairing Code', { code, pairingPhone: pairing });\n }\n await onQR?.(qr, code);\n }\n\n switch (connection) {\n case 'connecting': {\n if (debug) this.logger?.debug('WHATSAPP', 'Connecting...');\n onConnectionStatusChange?.('connecting');\n break;\n }\n\n case 'open': {\n if (debug) this.logger?.info('WHATSAPP', 'Connection opened successfully!');\n this.socket = sock;\n await onOpen?.();\n onConnectionStatusChange?.('open');\n resolve(this.socket);\n break;\n }\n\n case 'close': {\n const shouldReconnect =\n connectionAttempts-- > 0 &&\n (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut;\n\n const statusCode = (lastDisconnect?.error as Boom)?.output?.statusCode;\n const errorMessage = lastDisconnect?.error?.message;\n\n if (debug) {\n this.logger?.info('WHATSAPP', 'Connection closed', {\n statusCode,\n errorMessage,\n shouldReconnect,\n });\n }\n\n // IMPORTANT: Error code 515 (Stream Errored) after QR scan is NORMAL\n // The connection must restart after pairing - this is expected behavior\n if (shouldReconnect && connectionAttempts) {\n if (debug) this.logger?.info('WHATSAPP', 'Reconnecting...');\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT);\n resolve(connect());\n } else {\n if (debug) this.logger?.warn('WHATSAPP', 'Logged out, clearing auth state');\n await onClose?.();\n this.socket = null;\n resolve(this.socket);\n }\n\n onConnectionStatusChange?.('close');\n break;\n }\n }\n });\n\n // Save credentials when they update\n sock.ev.on('creds.update', saveCreds);\n\n sock.ev.on('messages.upsert', async (props: { messages: WAMessage[]; type: MessageUpsertType }) => {\n if (!Object.keys(this.messageReceivedCBs).length) return;\n\n this.logger?.info('WHATSAPP', 'Received messages', {\n type: props.type,\n totalMessages: props.messages.length,\n });\n\n const { messages, type: type } = props;\n\n // if (type === 'append') return;\n if (type !== 'notify') return;\n\n const messageDataList = await Promise.allSettled(\n messages\n .filter((message) => message.message)\n .map(async (message) => extractMessageData(message))\n );\n\n messageDataList\n .map((p, i) => ({ ...p, message: messages[i] }))\n .filter((p) => p.status === 'rejected')\n .forEach(({ reason, message }) => {\n this.logger?.error('WHATSAPP', 'failed to handle message', {\n error: reason?.message,\n message,\n });\n });\n\n messageDataList\n .filter((p) => p.status === 'fulfilled')\n .forEach(({ value: messageData }) => {\n console.log('handle message', messageData);\n const { sender, messageId, username, timestamp, fromMe, ...data } = messageData;\n\n Object.keys(this.messageReceivedCBs)\n .filter((jid) => ['from_any_groups', 'from_any_phones', sender].includes(jid))\n .forEach(async (jid) => {\n this.messageReceivedCBs[jid]?.forEach((cb) => {\n cb(sender, messageId, { username, timestamp, fromMe, data });\n });\n });\n });\n\n // const msg = messages[0]\n // if (!msg.key.fromMe && msg.message?.conversation) {\n // const sender = msg.key.remoteJid\n // const text = msg.message.conversation.toLowerCase()\n //\n // console.log(`📩 Message from ${sender}: ${text}`)\n //\n // if (text === 'hi') {\n // await sock.sendMessage(sender, { text: 'Hello! How can I help you today?' })\n // }\n // }\n });\n });\n };\n\n const socket = await connect();\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT);\n\n return socket;\n }\n\n async ensureSocketConnected(): Promise<WASocket | null> {\n if (!this.socket) {\n if (this.debug) this.logger?.warn('WHATSAPP', 'Client not connected, attempting to connect...');\n this.socket = await this.startConnection().catch((error: Error) => {\n this.onPreConnectionSendMessageFailed?.(error);\n return null;\n });\n }\n\n return this.socket;\n }\n\n async closeConnection() {\n if (this.socket) {\n if (this.debug) this.logger?.info('WHATSAPP', 'Closing connection');\n this.socket.end(undefined);\n this.socket = null;\n }\n }\n\n async clearAuthState() {\n await this.closeConnection();\n\n if (this.mongoURL) {\n const [collection, mongoClient] = await this.getAuthCollection();\n\n if (this.debug) this.logger?.info('WHATSAPP', 'Deleting auth state, required to scanning QR again');\n await collection?.deleteMany({});\n await mongoClient?.close();\n } else if (this.fileAuthStateDirectoryPath) {\n fs.rmSync(this.fileAuthStateDirectoryPath, { recursive: true, force: true });\n }\n }\n\n async resetConnection({ pairingPhone, autoConnect = true }: { pairingPhone?: string; autoConnect?: boolean } = {}) {\n await this.clearAuthState();\n if (!autoConnect) return;\n\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT); // Wait a bit before reconnecting\n await this.startConnection({ pairingPhone });\n }\n\n isConnected() {\n return !!this.socket?.user;\n }\n\n /**\n * Delete a message for everyone (if within time limit) or just for yourself\n * @param messageId - The message ID to delete\n * @param chatJid - The chat JID (phone number in WhatsApp format)\n * @param deleteForEveryone - If true, deletes for everyone (only works if you sent the message and within ~48h)\n * @returns Promise with the result\n */\n async deleteMessage(messageId: string, chatJid: string, deleteForEveryone: true = true): Promise<any> {\n await this.ensureSocketConnected();\n\n if (!this.socket) {\n throw new Error('Socket not connected');\n }\n\n const jid = WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(chatJid);\n\n try {\n if (deleteForEveryone) {\n // Delete for everyone (revoke message)\n const result = await this.socket.sendMessage(jid, {\n delete: {\n remoteJid: jid,\n fromMe: true,\n id: messageId,\n participant: undefined,\n },\n });\n\n if (this.debug) {\n this.logger?.info('WHATSAPP', 'Message deleted for everyone', {\n messageId,\n chatJid: jid,\n });\n }\n\n return result;\n } else {\n // Delete for me only (clear message locally)\n // Note: This doesn't work via API - WhatsApp doesn't support \"delete for me\" via Baileys\n // We can only revoke messages (delete for everyone)\n if (this.debug) {\n this.logger?.warn('WHATSAPP', 'Delete for me is not supported via API', {\n messageId,\n chatJid: jid,\n reason: [\n 'Delete for me only (clear message locally)',\n `Note: This doesn't work via API - WhatsApp doesn't support \"delete for me\" via Baileys`,\n 'We can only revoke messages (delete for everyone)',\n ].join('\\n'),\n });\n }\n\n throw new Error(\n 'Delete for me is not supported via WhatsApp API. Use deleteForEveryone=true to revoke the message.'\n );\n }\n } catch (error) {\n if (this.debug) {\n this.logger?.error('WHATSAPP', 'Failed to delete message', {\n messageId,\n chatJid: jid,\n error: (error as Error).message,\n });\n }\n throw error;\n }\n }\n\n /**\n * Delete multiple messages at once\n * @param messages - Array of {messageId, chatJid} objects\n * @param deleteForEveryone - If true, deletes for everyone\n * @returns Promise with array of results\n */\n async deleteMessages(\n messages: Array<{ messageId: string; chatJid: string }>,\n deleteForEveryone: true = true\n ): Promise<any[]> {\n await this.ensureSocketConnected();\n\n const results: Array<{ success: boolean; messageId: string; result?: any; error?: null | string }> = [];\n\n for (const { messageId, chatJid } of messages) {\n try {\n const result = await this.deleteMessage(messageId, chatJid, deleteForEveryone);\n results.push({ success: true, messageId, result });\n\n // Small delay between deletions to avoid rate limiting\n await sleep('500ms');\n } catch (error) {\n results.push({\n success: false,\n messageId,\n error: (error as Error).message,\n });\n }\n }\n\n return results;\n }\n\n async loadRecentMessages(chatJid: string, messageId: string): Promise<WAMessage | null> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(chatJid);\n\n try {\n const message: WAMessage = await this.socket?.waitForMessage(messageId, 3000);\n return message || null;\n } catch (error) {\n if (this.debug) {\n this.logger?.error('WHATSAPP', 'Failed to load message history', {\n chatJid: jid,\n error: (error as Error).message,\n });\n }\n return null;\n }\n }\n}\n","import type Stream from 'node:stream';\nimport { Readable } from 'stream';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { getFileMessageProps, getFilenameMimetype, streamToBuffer } from '../helpers.ts';\n\nexport async function sendFileFromStream(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n stream: Stream | Buffer,\n {\n mentions,\n ...options\n }: {\n filename: string;\n mimetype?: string;\n caption?: string;\n replyToMessageId?: string;\n // File type specific options\n ptt?: boolean; // Push to talk (voice note)\n seconds?: number; // Duration for audio/video\n gifPlayback?: boolean; // For GIF videos\n // Additional options\n jpegThumbnail?: Buffer | string; // Thumbnail for videos/documents\n mentions?: string[];\n }\n): Promise<any> {\n // Convert stream to buffer if needed\n const buffer = stream instanceof Buffer ? stream : await streamToBuffer(stream as Readable);\n\n // Auto-detect mimetype if not provided\n const mimetype = options.mimetype || getFilenameMimetype(options.filename);\n\n // Determine message type based on mimetype\n const messageContent = getFileMessageProps(buffer, mimetype, options);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && { quoted: { key: { id: options.replyToMessageId } } }),\n ...(mentions?.length && { mentions }),\n };\n\n if (debug) {\n logger?.debug('WHATSAPP', 'sendFileFromStream', {\n jid,\n mimetype,\n caption: (messageContent as any)?.caption,\n fileName: (messageContent as any)?.fileName,\n });\n }\n\n return socket?.sendMessage(jid, messageContent, messageOptions);\n}\n","import Stream from 'node:stream';\nimport { getAudioFileDuration, getUrlBuffer } from '../helpers.ts';\nimport { ReadStream } from 'node:fs';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\n\nexport async function sendAudioMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n audioSrc: string | Buffer<any> | Stream,\n {\n filename = 'audio-message.mp3',\n replyToMessageId,\n mimetype,\n seconds,\n ptt,\n mentions,\n }: {\n filename?: string;\n replyToMessageId?: string;\n mimetype?: string;\n seconds?: number;\n ptt?: boolean;\n mentions?: string[];\n } = {}\n) {\n if (!jid || !audioSrc) {\n throw new Error('sendAudioMessage: jid and audio source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const audioBuffer = typeof audioSrc === 'string' ? await getUrlBuffer(audioSrc) : audioSrc;\n let durationInSeconds = seconds || (await getAudioFileDuration(audioBuffer as ReadStream, mimetype).catch(() => 0));\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send audio message', {\n jid,\n mimetype,\n filename,\n seconds: durationInSeconds,\n replyToMessageId,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, audioBuffer, {\n filename,\n ...(ptt !== undefined && { ptt }), // PTT = Push To Talk (voice message)\n ...(mimetype && { mimetype: mimetype }),\n ...(durationInSeconds && { seconds: durationInSeconds }),\n ...(replyToMessageId && { replyToMessageId: replyToMessageId }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import { generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\nimport { WAProto as proto, type WASocket } from '@fadzzzslebew/baileys';\nimport type {\n ButtonCopy,\n ButtonEmail,\n ButtonParamsJson,\n ButtonPhone,\n ButtonReminder,\n ButtonURL,\n CallToActionButtons,\n CallToActionFullButtons,\n} from '../decs.ts';\nimport { getTotalSeconds } from '../helpers.ts';\n\nexport const sendButtonsMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n {\n subtitle,\n title,\n buttons,\n }: {\n title: string;\n subtitle?: string;\n buttons: CallToActionButtons;\n }\n) => {\n if (!title || !buttons.length) {\n throw new Error('sendButtonsMessage: No title or buttons required field found.');\n }\n\n const buttonsValue = (buttons as CallToActionFullButtons)\n ?.map((btn) => {\n const buttonParamsJson: ButtonParamsJson = { display_text: btn.label };\n\n let name: string;\n switch (true) {\n case !!(btn as ButtonURL).url:\n name = 'cta_url';\n buttonParamsJson.url = (btn as ButtonURL).url;\n buttonParamsJson.url = buttonParamsJson.url.startsWith('http')\n ? buttonParamsJson.url\n : `https://${buttonParamsJson.url}`;\n break;\n case !!(btn as ButtonCopy).copy:\n name = 'cta_copy';\n buttonParamsJson.copy_code = (btn as ButtonCopy).copy;\n break;\n case !!(btn as ButtonPhone).tel:\n name = 'cta_call';\n buttonParamsJson.phone_number = (btn as ButtonPhone).tel;\n break;\n case !!(btn as ButtonEmail).email:\n name = 'cta_email';\n buttonParamsJson.email = (btn as ButtonEmail).email;\n break;\n case !!((btn as ButtonReminder).reminderOn || (btn as ButtonReminder).reminderDate):\n name = 'cta_reminder';\n const { reminderOn, reminderDate } = btn as ButtonReminder;\n buttonParamsJson.reminder_name = (btn as ButtonReminder).reminderName;\n buttonParamsJson.reminder_timestamp = reminderDate\n ? Math.floor(+new Date(reminderDate) / 1000)\n : Math.floor(Date.now() / 1000) + getTotalSeconds(reminderOn ?? '0s');\n break;\n default:\n name = '';\n break;\n }\n\n return { name, buttonParamsJson: JSON.stringify(buttonParamsJson) };\n })\n .filter((v) => v.name);\n\n const msg = generateWAMessageFromContent(\n jid,\n {\n viewOnceMessage: {\n message: {\n interactiveMessage: proto.Message.InteractiveMessage.create({\n ...(title && {\n body: proto.Message.InteractiveMessage.Body.create({ text: title }),\n }),\n ...(subtitle && {\n footer: proto.Message.InteractiveMessage.Footer.create({ text: subtitle }),\n }),\n ...(!!buttonsValue?.length && {\n nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: buttonsValue,\n }),\n }),\n }),\n },\n },\n },\n { userJid: jid }\n );\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send buttons message', {\n jid,\n footer: subtitle,\n body: title,\n buttons: buttonsValue,\n });\n }\n\n return socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\n};\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\n\nexport const sendDeleteMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { messageId }: { messageId: string }\n) => {\n if (!messageId) {\n throw new Error('sendDeleteMessage: No title or buttons required field found.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'Deleting message', {\n jid,\n messageId,\n });\n }\n\n return socket?.sendMessage(jid, { delete: { id: messageId, remoteJid: jid, fromMe: true } });\n};\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\n\nexport async function sendDocumentMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n documentSrc: string | Buffer<any> | Stream,\n {\n filename = 'audio-message.mp3',\n caption = '',\n mimetype,\n mentions,\n jpegThumbnail,\n }: {\n filename?: string;\n caption?: string;\n mimetype?: string;\n mentions?: string[];\n jpegThumbnail?: Buffer | string;\n } = {}\n) {\n if (!jid || !documentSrc) {\n throw new Error('sendDocumentMessage: jid and document source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const documentBuffer = typeof documentSrc === 'string' ? await getUrlBuffer(documentSrc) : documentSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send document message', {\n jid,\n mimetype,\n filename,\n caption,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, documentBuffer, {\n filename,\n ...(caption && { caption }),\n ...(mimetype && { mimetype }),\n ...(jpegThumbnail && { jpegThumbnail }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\n\nexport async function sendImageMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n imageSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n filename = 'image.jpg',\n mentions,\n }: { caption?: string; filename?: string; mentions?: string[] } = {}\n) {\n if (!jid || !imageSrc) {\n throw new Error('sendImageMessage: jid and image source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const imageBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send image message', { jid, caption, filename });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, imageBuffer, {\n filename,\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\n\nexport async function sendVideoMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n videoSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n filename = 'video.mp4',\n sendAsGifPlayback: gifPlayback = false,\n mentions,\n }: { caption?: string; sendAsGifPlayback?: boolean; filename?: string; mentions?: string[] } = {}\n) {\n if (!jid || !videoSrc) {\n throw new Error('sendVideoMessage: jid and video source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const videoBuffer = typeof videoSrc === 'string' ? await getUrlBuffer(videoSrc) : videoSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send video message', {\n jid,\n filename,\n gifPlayback,\n mentions,\n caption,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, videoBuffer, {\n filename,\n ...(caption && { caption }),\n ...(gifPlayback && { gifPlayback }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\n\nexport async function sendStickerMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n imageSrc: string | Buffer<any> | Stream,\n { mentions }: { mentions?: string[] } = {}\n) {\n if (!jid || !imageSrc) {\n throw new Error('sendStickerMessage: jid and sticker image source are required.');\n }\n\n const imageBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send sticker message', { jid });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, imageBuffer, {\n mimetype: 'sticker',\n filename: 'sticker.webp',\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getFilenameFromStream, getFilenameMimetype, getUrlBuffer, MIME_TO_TYPES, streamToBuffer } from '../helpers.ts';\nimport { basename } from 'node:path';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendAudioMessage } from './audio.message';\nimport { sendImageMessage } from './image.message';\nimport { sendVideoMessage } from './video.message';\nimport { sendStickerMessage } from './sticker.message';\nimport { sendDocumentMessage } from './document.message';\n\nexport async function sendFileMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n fileSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n mentions,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n jpegThumbnailSrc?: string | Buffer<any> | Stream;\n mentions?: string[];\n }\n) {\n let jpegThumbnailBuffer: Buffer<any> | undefined;\n if (typeof jpegThumbnailSrc === 'string') {\n jpegThumbnailBuffer = await getUrlBuffer(jpegThumbnailSrc);\n } else if (jpegThumbnailSrc instanceof Stream) {\n jpegThumbnailBuffer = await streamToBuffer(jpegThumbnailSrc);\n } else {\n jpegThumbnailBuffer = jpegThumbnailSrc;\n }\n\n const fileBuffer = typeof fileSrc === 'string' ? await getUrlBuffer(fileSrc) : fileSrc;\n if (fileSrc instanceof Stream) {\n const fname = getFilenameFromStream(fileSrc);\n if (fname) filename = fname;\n } else if (typeof fileSrc === 'string') {\n filename = basename(fileSrc);\n }\n\n filename = filename && decodeURIComponent(filename);\n mimetype ||= getFilenameMimetype(filename);\n mimetype = mimetype?.toLowerCase();\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send file message', {\n jid,\n caption,\n mimetype,\n filename,\n includeJpegThumbnail: !!jpegThumbnailBuffer,\n });\n }\n\n let sendSuccess = true;\n let response: any;\n if (autoMessageClassification) {\n switch (MIME_TO_TYPES[mimetype as string]) {\n case 'Image':\n response = await sendImageMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Sticker':\n response = await sendStickerMessage({ debug, logger, socket }, jid, fileBuffer, { mentions }).catch(\n () => (sendSuccess = false)\n );\n break;\n case 'Video':\n response = await sendVideoMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Audio':\n response = await sendAudioMessage({ debug, logger, socket }, jid, fileBuffer, {\n mimetype,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n default:\n return await sendDocumentMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n mimetype,\n filename,\n jpegThumbnail: jpegThumbnailBuffer,\n mentions,\n });\n }\n }\n\n if (response && sendSuccess) return response;\n if (!autoMessageClassification || !sendSuccess) {\n return await sendDocumentMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n filename,\n jpegThumbnail: jpegThumbnailBuffer,\n mentions,\n });\n }\n}\n","import { type WASocket } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\n\nexport async function sendLocationMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n {\n latitude,\n longitude,\n name,\n address,\n }: {\n latitude: number;\n longitude: number;\n name?: string;\n address?: string;\n }\n): Promise<any> {\n if (latitude === undefined || longitude === undefined) {\n throw new Error('sendLocation: latitude and longitude are required fields.');\n }\n\n // Validate coordinate ranges\n if (latitude < -90 || latitude > 90) {\n throw new Error('sendLocation: latitude must be between -90 and 90.');\n }\n if (longitude < -180 || longitude > 180) {\n throw new Error('sendLocation: longitude must be between -180 and 180.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send location message', {\n jid,\n latitude,\n longitude,\n name,\n address,\n });\n }\n\n return socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n}\n","import { WAProto as proto, type WASocket, generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\n\nexport async function sendMenuMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n {\n title,\n subtitle,\n buttonText,\n sections,\n }: {\n title: string;\n subtitle?: string;\n buttonText: string;\n sections: Array<{\n title: string;\n rows: Array<{\n id: string;\n title: string;\n description?: string;\n }>;\n }>;\n }\n): Promise<any> {\n if (!title || !buttonText || !sections || sections.length === 0) {\n throw new Error('sendMenuMessage: title, buttonText, and sections are required.');\n }\n\n const msg = generateWAMessageFromContent(\n jid,\n {\n viewOnceMessage: {\n message: {\n interactiveMessage: proto.Message.InteractiveMessage.create({\n body: proto.Message.InteractiveMessage.Body.create({ text: title }),\n ...(subtitle && {\n footer: proto.Message.InteractiveMessage.Footer.create({ text: subtitle }),\n }),\n header: proto.Message.InteractiveMessage.Header.create({\n title: buttonText,\n hasMediaAttachment: false,\n }),\n nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: [\n {\n name: 'single_select',\n buttonParamsJson: JSON.stringify({\n title: buttonText,\n sections: sections.map((section) => ({\n title: section.title,\n rows: section.rows.map((row) => ({\n header: row.title,\n title: row.title,\n description: row.description || '',\n id: row.id,\n })),\n })),\n }),\n },\n ],\n }),\n }),\n },\n },\n },\n { userJid: jid }\n );\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send menu message', {\n jid,\n title,\n buttonText,\n sectionsCount: sections.length,\n totalRows: sections.reduce((acc, s) => acc + s.rows.length, 0),\n });\n }\n\n return socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\n}\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\n\nexport const sendReactionMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { messageId, emoji }: { messageId: string; emoji: string }\n) => {\n if (!jid || !messageId || !emoji) {\n throw new Error('sendReactionMessage: message ID, and emoji are required.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'Sending reaction to group message', {\n jid,\n messageId,\n emoji,\n });\n }\n\n return socket?.sendMessage(jid, {\n react: {\n text: emoji,\n key: { id: messageId, remoteJid: jid },\n },\n });\n};\n","import type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\n\nexport async function sendReplyMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n {\n title,\n subtitle,\n buttons,\n mentions: formattedMentionsPhones,\n }: {\n title: string;\n subtitle?: string;\n buttons: Array<string | { id: number | string; label: string }>;\n mentions?: string[];\n }\n): Promise<any> {\n if (!title || !buttons.length) {\n throw new Error('sendReplyButtonsMessage: No title or buttons required field found.');\n }\n\n const buttonsValue = buttons\n .filter((v) => v)\n .map((btn, index) =>\n typeof btn === 'string'\n ? { buttonId: `id-${index}`, buttonText: { displayText: btn }, type: 1 }\n : { buttonId: `${btn.id}`, buttonText: { displayText: btn.label }, type: 1 }\n );\n\n const messageOptions: any = {\n text: title,\n buttons: buttonsValue /* type: UNKNOWN = 0, RESPONSE = 1, NATIVE_FLOW = 2 */,\n ...(subtitle && { footer: subtitle }),\n };\n\n if (formattedMentionsPhones?.length) {\n messageOptions.mentions = formattedMentionsPhones;\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send reply buttons message', {\n jid,\n text: title,\n footer: subtitle,\n buttons: buttonsValue,\n });\n }\n\n return socket?.sendMessage(jid, messageOptions);\n}\n","import type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\n\nexport async function sendSurveyMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n {\n question,\n options,\n allowMultipleAnswers = false,\n }: {\n question: string;\n options: string[];\n allowMultipleAnswers?: boolean;\n }\n): Promise<any> {\n if (!question || !options || options.length < 2) {\n throw new Error('sendSurveyMessage: question and at least 2 options are required.');\n }\n\n if (options.length > 12) {\n throw new Error('sendSurveyMessage: maximum 12 options allowed.');\n }\n\n const pollOptions = options;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send survey message', {\n jid,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return socket?.sendMessage(jid, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\n });\n}\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\n\nexport const sendTextMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { text, mentions }: { text: string; mentions?: string[] }\n) => {\n if (!text) {\n throw new Error('sendTextMessage: No title or buttons required field found.');\n }\n\n // let options: MiscMessageGenerationOptions = {};\n // if (replyToMessageId) {\n // // @ts-ignore\n // const message = await this.loadRecentMessages(jid, replyToMessageId);\n // // We need the full message object to quote it properly\n // // Option 1: If you have the message stored, use it directly\n // // Option 2: Create a minimal quoted message structure\n // options.quoted = {\n // key: { remoteJid: jid, id: replyToMessageId },\n // message: { conversation: \"\" }, // Placeholder - ideally you'd have the actual message\n // } as any;\n // }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send text message', { jid, text });\n }\n\n return socket?.sendMessage(jid, { text, ...(mentions?.length && { mentions }) });\n};\n","import { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nexport type { WhatsappSocketBaseProps as WhatsappSocketMessagesProps } from './whatsappSocket.base';\nimport type { CallToActionButtons } from './decs';\nimport {\n sendButtonsMessage,\n sendMenuMessage,\n sendReplyMessage,\n sendLocationMessage,\n sendSurveyMessage,\n sendTextMessage,\n sendReactionMessage,\n sendAudioMessage,\n sendStickerMessage,\n sendFileMessage,\n sendVideoMessage,\n sendImageMessage,\n} from './messages';\nimport Stream from 'node:stream';\n\nexport class WhatsappSocketPrivateMessages extends WhatsappSocketBase {\n constructor(props: WhatsappSocketBaseProps) {\n super(props);\n }\n\n /**\n * Delete a sent message\n * @param messageId - The message ID to delete\n * @param chatJid - The recipient's phone number\n * @returns Promise with the result\n */\n async deleteMessageById(messageId: string, chatJid: string): Promise<any> {\n return this.deleteMessage(messageId, chatJid, true);\n }\n\n async sendTextMessage(to: string, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendTextMessage(baseProps, jid, { text });\n }\n\n async sendButtonsMessage(\n to: string,\n { subtitle, title, buttons }: { title: string; subtitle?: string; buttons: CallToActionButtons }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendButtonsMessage(baseProps, jid, { subtitle, title, buttons });\n }\n\n async sendMenuMessage(\n to: string,\n {\n title,\n subtitle,\n buttonText,\n sections,\n }: {\n title: string;\n subtitle?: string;\n buttonText: string;\n sections: Array<{\n title: string;\n rows: Array<{ id: string; title: string; description?: string }>;\n }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendMenuMessage(baseProps, jid, { subtitle, title, sections, buttonText });\n }\n\n async sendReplyButtonsMessage(\n to: string,\n {\n title,\n subtitle,\n buttons,\n }: {\n title: string;\n subtitle?: string;\n buttons: Array<string | { id: number | string; label: string }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReplyMessage(baseProps, jid, { subtitle, title, buttons });\n }\n\n async sendLocationMessage(\n to: string,\n {\n latitude,\n longitude,\n name,\n address,\n }: {\n latitude: number;\n longitude: number;\n name?: string;\n address?: string;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendLocationMessage(baseProps, jid, { latitude, longitude, name, address });\n }\n\n async sendSurveyMessage(\n to: string,\n {\n question,\n options,\n allowMultipleAnswers = false,\n }: { question: string; options: string[]; allowMultipleAnswers?: boolean }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendSurveyMessage(baseProps, jid, { options, question, allowMultipleAnswers });\n }\n\n async sendReactionMessage(to: string, messageId: string, emoji: string): Promise<any> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReactionMessage(baseProps, jid, { messageId, emoji });\n }\n\n async sendImageMessage(\n to: string,\n imageSrc: string | Buffer<any> | Stream,\n { caption = '', filename }: { caption?: string; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendImageMessage(baseProps, jid, imageSrc, { caption, filename });\n }\n\n async sendVideoMessage(\n to: string,\n videoSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n filename,\n sendAsGifPlayback = false,\n }: { caption?: string; sendAsGifPlayback?: boolean; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendVideoMessage(baseProps, jid, videoSrc, { caption, filename, sendAsGifPlayback });\n }\n\n async sendAudioMessage(\n to: string,\n audioSrc: string | Buffer<any> | Stream,\n {\n filename,\n replyToMessageId,\n mimetype,\n seconds,\n }: { filename?: string; replyToMessageId?: string; mimetype?: string; seconds?: number } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendAudioMessage(baseProps, jid, audioSrc, { filename, replyToMessageId, mimetype, seconds });\n }\n\n /**\n * requirements:\n * * format .webp\n * * imageSize 512pxx512px\n * * maxSize: 100kb\n * * transparent background\n * @param to\n * @param imageSrc\n */\n async sendStickerMessage(to: string, imageSrc: string | Buffer<any> | Stream) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendStickerMessage(baseProps, jid, imageSrc);\n }\n\n async sendFileMessage(\n to: string,\n fileSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n jpegThumbnailSrc?: string | Buffer<any> | Stream;\n }\n ) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendFileMessage(baseProps, jid, fileSrc, {\n autoMessageClassification,\n jpegThumbnailSrc,\n mimetype,\n filename,\n caption,\n });\n }\n}\n","import { WhatsappSocketPrivateMessages, type WhatsappSocketMessagesProps } from './whatsappSocket.private.messages';\nimport type { MessageReceivedCB } from './decs.ts';\n\nexport type WhatsappSocketProps = WhatsappSocketMessagesProps;\n\nexport class WhatsappSocket extends WhatsappSocketPrivateMessages {\n constructor(props: WhatsappSocketProps) {\n super(props);\n }\n\n onAnyMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_phones ||= [];\n this.messageReceivedCBs.from_any_phones.push(cb);\n }\n\n offAnyMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_phones = (this.messageReceivedCBs.from_any_phones ?? []).filter(\n (c) => c !== cb\n );\n }\n\n onPhoneMessageReceived(phone: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocket.formatPhoneNumberToWhatsappPattern(phone);\n this.messageReceivedCBs[jid] ||= [];\n this.messageReceivedCBs[jid].push(cb);\n }\n\n offPhoneMessageReceived(phone: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocket.formatPhoneNumberToWhatsappPattern(phone);\n this.messageReceivedCBs[jid] = (this.messageReceivedCBs[jid] ?? []).filter((c) => c !== cb);\n }\n}\n","import type { GroupMetadata, ParticipantAction } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nimport type { CreateGroupOptions, GroupSettingsType } from './decs';\nexport type { WhatsappSocketBaseProps as WhatsappSocketGroupsProps } from './whatsappSocket.base';\n\nexport class WhatsappSocketGroups extends WhatsappSocketBase {\n /**\n * פורמט Group ID לתבנית WhatsApp\n * Format Group ID to WhatsApp pattern\n * Group IDs end with @g.us instead of @s.whatsapp.net\n */\n static formatGroupId(groupId: string): string {\n if (groupId.endsWith('@g.us')) return groupId;\n const cleanId = groupId.replace(/@s\\.whatsapp\\.net|@g\\.us/g, '');\n\n return `${cleanId}@g.us`;\n }\n\n /**\n * בדיקה האם מדובר ב-Group ID או Phone Number\n * Check if this is a group ID or phone number\n */\n static isGroupId(jid: string): boolean {\n return jid.endsWith('@g.us');\n }\n\n constructor(props: WhatsappSocketBaseProps) {\n super(props);\n }\n\n /**\n * Create a new WhatsApp group\n */\n async createGroup({ name, participants, description }: CreateGroupOptions): Promise<any> {\n if (!name) {\n throw new Error('createGroup: Group name is required.');\n }\n await this.ensureSocketConnected();\n\n // Format phone numbers to WhatsApp pattern\n const formattedParticipants: string[] = (participants ?? []).map((phone) =>\n WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(phone)\n );\n\n // If no participants provided, use self (bot's own number)\n if (formattedParticipants.length === 0) {\n const selfJid = this.socket?.user?.id; // Get bot's own JID (user ID)\n if (!selfJid) {\n throw new Error('createGroup: Could not get bot user ID. Make sure socket is connected.');\n }\n\n const pId = WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(selfJid);\n formattedParticipants.push(pId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'No participants provided, creating group with self only', {\n selfJid,\n });\n }\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Creating group', {\n name,\n description,\n participants: formattedParticipants,\n });\n }\n\n const result = await this.socket?.groupCreate(name, formattedParticipants);\n\n // Set description if provided\n if (description && result?.id) {\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(result.id);\n await this.updateGroupDescription(formattedGroupId, description);\n }\n\n return result;\n }\n\n /**\n * Update group name (subject)\n */\n async updateGroupName(groupId: string, newName: string): Promise<any> {\n if (!groupId || !newName) {\n throw new Error('updateGroupName: Group ID and new name are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group name', { groupId: formattedGroupId, newName });\n }\n\n return this.socket?.groupUpdateSubject(formattedGroupId, newName);\n }\n\n /**\n * Update group description\n */\n async updateGroupDescription(groupId: string, description: string, fetchMetaData = false): Promise<any> {\n if (!groupId) {\n throw new Error('updateGroupDescription: Group ID is required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (fetchMetaData) {\n await this.socket\n ?.groupMetadata(formattedGroupId)\n .then((data) => {\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetch group description metadata', data);\n }\n })\n .catch((e) => {\n if (this.debug) {\n this.logger?.warn('WHATSAPP', 'Failed to update group description metadata', { error: e });\n }\n });\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group description', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupUpdateDescription(formattedGroupId, description || '');\n }\n\n /**\n * Update group settings (who can send messages, edit info, etc.)\n */\n async updateGroupSettings(groupId: string, setting: GroupSettingsType): Promise<any> {\n if (!groupId || !setting) {\n throw new Error('updateGroupSettings: Group ID and setting are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group settings', { groupId: formattedGroupId, setting });\n }\n\n return this.socket?.groupSettingUpdate(formattedGroupId, setting);\n }\n\n private async updateGroupParticipants(\n groupId: string,\n participant: string | string[],\n action: ParticipantAction\n ): Promise<any> {\n if (!groupId) throw new Error('addParticipants: Group ID is required.');\n const participants = ([] as string[]).concat(participant).filter((v) => v);\n if (!participants?.length) return;\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n const formattedParticipants = participants.map((phone) =>\n WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(phone)\n );\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', `${action} participants to group`, {\n groupId: formattedGroupId,\n participantsCount: formattedParticipants.length,\n });\n }\n\n return this.socket?.groupParticipantsUpdate(formattedGroupId, formattedParticipants, action);\n }\n\n /**\n * Add participants to group\n */\n async addParticipants(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'add');\n }\n\n /**\n * Remove participants from group\n */\n async removeParticipants(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'remove');\n }\n\n /**\n * Promote participant to admin\n */\n async promoteToAdmin(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'promote');\n }\n\n /**\n * הורדת משתתף ממנהל\n * Demote participant from admin\n */\n async demoteFromAdmin(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'demote');\n }\n\n /**\n * Leave a group\n */\n async leaveGroup(groupId: string): Promise<any> {\n if (!groupId) throw new Error('leaveGroup: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Leaving group', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupLeave(formattedGroupId);\n }\n\n /**\n * Get group metadata\n */\n async getGroupMetadata(groupId: string): Promise<GroupMetadata | undefined> {\n if (!groupId) throw new Error('getGroupMetadata: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group metadata', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupMetadata(formattedGroupId);\n }\n\n /**\n * Get all groups\n */\n async getAllGroups(): Promise<GroupMetadata[]> {\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching all groups');\n }\n\n const groups = await this.socket?.groupFetchAllParticipating();\n return groups ? Object.values(groups) : [];\n }\n\n /**\n * Get group invite code\n */\n async getGroupInviteCode(groupId: string, urlLink?: boolean): Promise<string | undefined> {\n if (!groupId) throw new Error('getGroupInviteCode: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group invite code', { groupId: formattedGroupId });\n }\n\n const inviteCode = await this.socket?.groupInviteCode(formattedGroupId);\n\n return urlLink && inviteCode ? `https://chat.whatsapp.com/${inviteCode}` : inviteCode;\n }\n\n /**\n * Revoke group invite code (creates new one)\n */\n async revokeGroupInviteCode(groupId: string): Promise<string | undefined> {\n if (!groupId) throw new Error('revokeGroupInviteCode: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Revoking group invite code', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupRevokeInvite(formattedGroupId);\n }\n\n /**\n * Join group using invite code\n */\n async joinGroupViaInvite(inviteCode: string): Promise<string | undefined> {\n if (!inviteCode) throw new Error('joinGroupViaInvite: Invite code is required.');\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Joining group via invite', { inviteCode });\n }\n\n return this.socket?.groupAcceptInvite(inviteCode);\n }\n\n /**\n * Get group info from invite code\n */\n async getGroupInfoFromInvite(inviteCode: string): Promise<any> {\n if (!inviteCode) throw new Error('getGroupInfoFromInvite: Invite code is required.');\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group info from invite', { inviteCode });\n }\n\n return this.socket?.groupGetInviteInfo(inviteCode);\n }\n\n /**\n * Update group profile picture\n */\n async updateGroupProfilePicture(groupId: string, imageBuffer: Buffer): Promise<any> {\n if (!groupId || !imageBuffer) {\n throw new Error('updateGroupProfilePicture: Group ID and image buffer are required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group profile picture', { groupId: formattedGroupId });\n }\n\n return this.socket?.updateProfilePicture(formattedGroupId, imageBuffer);\n }\n\n /**\n * Remove group profile picture\n */\n async removeGroupProfilePicture(groupId: string): Promise<any> {\n if (!groupId) throw new Error('removeGroupProfilePicture: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Removing group profile picture', { groupId: formattedGroupId });\n }\n\n return this.socket?.removeProfilePicture(formattedGroupId);\n }\n\n /**\n * Get group profile picture URL\n */\n async getGroupProfilePicture(groupId: string, highRes: boolean = false): Promise<string | undefined | null> {\n if (!groupId) throw new Error('getGroupProfilePicture: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group profile picture', { groupId: formattedGroupId, highRes });\n }\n\n return this.socket\n ?.profilePictureUrl(formattedGroupId, highRes ? 'image' : 'preview')\n .catch((reason: Error) => {\n if (reason.message === 'item-not-found') return null;\n throw reason;\n // if (reason === 'No image processing library available')\n // throw 'No image processing library available (try to install sharp/jimp)';\n });\n }\n}\n","import { WhatsappSocketGroups, type WhatsappSocketGroupsProps } from './whatsappSocket.group.management';\nimport type { CallToActionButtons, MessageOptions } from './decs';\nimport Stream from 'node:stream';\nimport {\n sendButtonsMessage,\n sendSurveyMessage,\n sendTextMessage,\n sendReplyMessage,\n sendMenuMessage,\n sendLocationMessage,\n sendAudioMessage,\n sendImageMessage,\n sendVideoMessage,\n sendStickerMessage,\n sendFileMessage,\n sendDocumentMessage,\n sendDeleteMessage,\n sendReactionMessage,\n} from './messages';\n\nexport type { WhatsappSocketGroupsProps as WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.management';\n\nexport class WhatsappSocketGroupMessages extends WhatsappSocketGroups {\n constructor(props: WhatsappSocketGroupsProps) {\n super(props);\n }\n\n /**\n * Send message mentioning all group participants\n */\n async sendMentionAll(groupId: string, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n // Get all group participants\n const groupMetadata = await this.getGroupMetadata(formattedGroupId);\n if (!groupMetadata) {\n throw new Error('Could not fetch group metadata');\n }\n\n const groupParticipants = groupMetadata.participants.map((p) => p.id);\n\n return sendTextMessage(baseProps, formattedGroupId, { text, mentions: groupParticipants });\n }\n\n /**\n * Send reaction to a message in group\n */\n async sendReactionMessage(groupId: string, messageId: string, emoji: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReactionMessage(baseProps, formattedGroupId, { messageId, emoji });\n }\n\n /**\n * Delete a message in group (only works for own messages)\n */\n async deleteGroupMessage(groupId: string, messageId: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendDeleteMessage(baseProps, formattedGroupId, { messageId });\n }\n\n /**\n * Send text message to group\n */\n async sendTextMessage(groupId: string, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendTextMessage(baseProps, formattedGroupId, { text });\n }\n\n /**\n * Send buttons message to group\n */\n async sendButtonsMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttons,\n }: {\n title: string;\n subtitle?: string;\n buttons: CallToActionButtons;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendButtonsMessage(baseProps, formattedGroupId, { subtitle, title, buttons });\n }\n\n /**\n * Send reply buttons message to group\n */\n async sendReplyButtonsMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttons,\n mentions,\n }: {\n title: string;\n subtitle?: string;\n buttons: Array<string | { id: number | string; label: string }>;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReplyMessage(baseProps, formattedGroupId, {\n subtitle,\n title,\n buttons,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n async sendMenuMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttonText,\n sections,\n }: {\n title: string;\n subtitle?: string;\n buttonText: string;\n sections: Array<{\n title: string;\n rows: Array<{\n id: string;\n title: string;\n description?: string;\n }>;\n }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendMenuMessage(baseProps, formattedGroupId, { subtitle, title, sections, buttonText });\n }\n\n /**\n * Send location to group\n */\n async sendLocationMessage(\n groupId: string,\n {\n latitude,\n longitude,\n name,\n address,\n }: {\n latitude: number;\n longitude: number;\n name?: string;\n address?: string;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendLocationMessage(baseProps, formattedGroupId, { latitude, longitude, name, address });\n }\n\n async sendSurveyMessage(\n groupId: string,\n {\n question,\n options,\n allowMultipleAnswers = false,\n }: { question: string; options: string[]; allowMultipleAnswers?: boolean }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendSurveyMessage(baseProps, formattedGroupId, { options, question, allowMultipleAnswers });\n }\n\n /**\n * Send image to group\n */\n async sendImageMessage(\n groupId: string,\n imageSrc: string | Buffer | Stream,\n { caption = '', filename, mentions }: MessageOptions & { caption?: string; filename?: string } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendImageMessage(baseProps, formattedGroupId, imageSrc, {\n caption,\n filename,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send video to group\n */\n async sendVideoMessage(\n groupId: string,\n videoSrc: string | Buffer | Stream,\n {\n caption = '',\n filename,\n sendAsGifPlayback = false,\n mentions,\n }: MessageOptions & {\n caption?: string;\n filename?: string;\n sendAsGifPlayback?: boolean;\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendVideoMessage(baseProps, formattedGroupId, videoSrc, {\n caption,\n filename,\n sendAsGifPlayback,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send audio to group\n */\n async sendAudioMessage(\n groupId: string,\n audioSrc: string | Buffer | Stream,\n {\n filename,\n mimetype,\n seconds,\n ptt = false,\n mentions,\n }: {\n filename?: string;\n replyToMessageId?: string;\n mimetype?: string;\n seconds?: number;\n ptt?: boolean;\n mentions?: string[];\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendAudioMessage(baseProps, formattedGroupId, audioSrc, {\n filename,\n mimetype,\n seconds,\n ptt,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send document to group\n */\n async sendDocumentMessage(\n groupId: string,\n documentSrc: string | Buffer | Stream,\n {\n fileName,\n caption,\n mimetype,\n jpegThumbnail,\n mentions,\n }: {\n fileName: string;\n caption?: string;\n mimetype?: string;\n jpegThumbnail?: Buffer;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendDocumentMessage(baseProps, formattedGroupId, documentSrc, {\n filename: fileName,\n caption,\n mimetype,\n jpegThumbnail,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send sticker to group\n * Requirements:\n * * format .webp\n * * imageSize 512px x 512px\n * * maxSize: 100kb\n * * transparent background\n */\n async sendStickerMessage(\n groupId: string,\n imageSrc: string | Buffer | Stream,\n { mentions }: { mentions?: string[] } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendStickerMessage(baseProps, formattedGroupId, imageSrc, {\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n async sendFileMessage(\n groupId: string,\n fileSrc: string | Buffer | Stream,\n {\n caption = '',\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n mentions,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n jpegThumbnailSrc?: string | Buffer | Stream;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendFileMessage(baseProps, formattedGroupId, fileSrc, {\n caption,\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification,\n filename,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n}\n","import { WhatsappSocketGroupMessages, type WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\nimport type { MessageReceivedCB } from './decs.ts';\n\nexport type WhatsappSocketGroupProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocketGroup extends WhatsappSocketGroupMessages {\n constructor(props: WhatsappSocketGroupProps) {\n super(props);\n }\n\n onAnyGroupMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_groups ||= [];\n this.messageReceivedCBs.from_any_groups.push(cb);\n }\n\n offAnyGroupMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_groups = (this.messageReceivedCBs.from_any_groups ?? []).filter(\n (c) => c !== cb\n );\n }\n\n onGroupMessageReceived(groupId: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocketGroup.formatGroupId(groupId);\n this.messageReceivedCBs[jid] ||= [];\n this.messageReceivedCBs[jid].push(cb);\n }\n\n offGroupMessageReceived(groupId: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocketGroup.formatGroupId(groupId);\n this.messageReceivedCBs[jid] = this.messageReceivedCBs[jid].filter((c) => c !== cb);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/mongoAuthState.ts","../src/helpers.ts","../src/whatsappSocket.base.ts","../src/messages/file-stream.message.ts","../src/messages/audio.message.ts","../src/messages/buttons.message.ts","../src/messages/delete.message.ts","../src/messages/document.message.ts","../src/messages/image.message.ts","../src/messages/video.message.ts","../src/messages/sticker.message.ts","../src/messages/file.message.ts","../src/messages/location.message.ts","../src/messages/menu.message.ts","../src/messages/reaction.message.ts","../src/messages/reply.message.ts","../src/messages/survey.message.ts","../src/messages/text.message.ts","../src/whatsappSocket.private.messages.ts","../src/whatsappSocket.private.client.ts","../src/whatsappSocket.group.management.ts","../src/whatsappSocket.group.messages.ts","../src/whatsappSocket.group.client.ts","../src/whatsappSocket.private.bot.ts"],"names":["BufferJSON","_k","value","_","val","useMongoDBAuthState","collection","writeData","data","id","update","readData","removeData","creds","initAuthCreds","type","ids","proto","tasks","category","key","mongoAuthState_default","getTotalSeconds","msValue","ms","getMS","awaitIfNeeded","getUrlBuffer","url","arrayBuffer","getDurationFromStream","stream","mimeType","parseStream","metadata","error","getDurationFromBuffer","buffer","parseBuffer","getAudioFileDuration","audioFile","ReadStream","streamToBuffer","resolve","reject","chunks","chunk","err","getFilenameMimetype","filename","ext","MIME_TYPES","sleep","timeout","MIME_TO_TYPES","getFileMessageProps","mimetype","options","formatFileSize","bytes","decimals","k","dm","sizes","i","extractMessageData","message","participantButtonsResponse","jpegThumbnail","downloadMediaMessage","fileLength","isMenuMessage","listMessageParamJson","pinoLogger","P","WhatsappSocketBase","_WhatsappSocketBase","phone","countryCode","strNumber","formattedPhone","messageQuery","qr","QRCode","pattern","length","result","pool","buildPool","block","chars","start","end","c","char","upperCaseResult","props","instanceKey","fileAuthStateDirectoryPath","mongoURL","mongoCollection","logger","onOpen","onClose","onQR","onConnectionStatusChange","debug","printQRInTerminal","customPairingCode","onPreConnectionSendMessageFailed","appName","pairingPhone","sources","response","mongoClient","MongoClient","saveCreds","state","useMultiFileAuthState","makeCacheableSignalKeyStore","sock","connectionAttempts","_pairingPhone","_debug","auth","version","connect","makeWASocket","jid","connection","lastDisconnect","qrcode","pairing","code","shouldReconnect","DisconnectReason","statusCode","errorMessage","messages","messageDataList","p","reason","messageData","sender","messageId","username","timestamp","fromMe","cb","socket","fs","autoConnect","chatJid","deleteForEveryone","results","remoteJid","contact","byWords","contacts","names","word","phoneNumbers","mappedResults","index","r","sendFileFromStream","mentions","messageContent","messageOptions","sendAudioMessage","audioSrc","replyToMessageId","seconds","ptt","audioBuffer","durationInSeconds","sendButtonsMessage","subtitle","title","buttons","buttonsValue","btn","buttonParamsJson","name","reminderOn","reminderDate","v","msg","generateWAMessageFromContent","sendDeleteMessage","sendDocumentMessage","documentSrc","caption","documentBuffer","sendImageMessage","imageSrc","imageBuffer","sendVideoMessage","videoSrc","gifPlayback","videoBuffer","sendStickerMessage","sendFileMessage","fileSrc","jpegThumbnailSrc","autoMessageClassification","jpegThumbnailBuffer","Stream","fileBuffer","basename","sendSuccess","sendLocationMessage","latitude","longitude","address","sendMenuMessage","buttonText","sections","section","row","acc","s","sendReactionMessage","emoji","sendReplyMessage","formattedMentionsPhones","sendSurveyMessage","question","allowMultipleAnswers","pollOptions","sendTextMessage","_text","text","WhatsappSocketPrivateMessages","_WhatsappSocketPrivateMessages","messageType","autoSelfNotificationFormat","timerId","clearTimeout","to","baseProps","sendAsGifPlayback","WhatsappSocket","_WhatsappSocket","WhatsappSocketGroups","_WhatsappSocketGroups","groupId","participants","description","formattedParticipants","selfJid","pId","formattedGroupId","newName","fetchMetaData","e","setting","participant","action","groups","urlLink","inviteCode","highRes","WhatsappSocketGroupMessages","_WhatsappSocketGroupMessages","groupMetadata","groupParticipants","fileName","WhatsappSocketGroup","_WhatsappSocketGroup","WhatsappSocketBot","schema","flow","messageList","messageIds","forceExit","timeoutValue","messageResponse","field","timeoutId","oldTimeoutId","EXIT_CODE","EXIT_MSG","TIMEOUT_MSG","UNKNOWN_INPUT_MSG","FLOW","IDLE_TIMEOUT","FIELDS","MATCHES","cleanupRemoteJid","sendExitMsg","restartIdleTimeout","idleTimeoutMS","setTimeout","checkForMatches","matches","match","isMatched","msgText","currentFlow","shouldMatchingForStart","matchedItem","stepMessages","parseFieldData","validationError","validate","errMsg","nextFlow","nextMessages"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n type AuthenticationCreds,\n type SignalDataTypeMap,\n initAuthCreds,\n WAProto as proto,\n} from '@fadzzzslebew/baileys';\n\nconst BufferJSON = {\n replacer: (_k: string, value: any) => {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array || value?.type === 'Buffer') {\n return {\n type: 'Buffer',\n data: Buffer.from(value?.data || value).toString('base64'),\n };\n }\n return value;\n },\n\n reviver: (_: string, value: any) => {\n if (typeof value === 'object' && !!value && (value.buffer === true || value.type === 'Buffer')) {\n const val = value.data || value.value;\n return typeof val === 'string' ? Buffer.from(val, 'base64') : Buffer.from(val || []);\n }\n return value;\n },\n};\n\nconst useMongoDBAuthState = async (collection: any) => {\n const writeData = (data: any, id: string) => {\n const informationToStore = JSON.parse(JSON.stringify(data, BufferJSON.replacer));\n const update = { $set: { ...informationToStore } };\n return collection.updateOne({ _id: id }, update, { upsert: true });\n };\n\n const readData = async (id: string) => {\n try {\n const data = JSON.stringify(await collection.findOne({ _id: id }));\n return JSON.parse(data, BufferJSON.reviver);\n } catch (error) {\n return null;\n }\n };\n\n const removeData = async (id: string) => {\n try {\n await collection.deleteOne({ _id: id });\n } catch (_a) {}\n };\n\n const creds: AuthenticationCreds = (await readData('creds')) || initAuthCreds();\n\n return {\n state: {\n creds,\n keys: {\n get: async (type: keyof SignalDataTypeMap, ids: string[]) => {\n const data: { [id: string]: any } = {};\n await Promise.all(\n ids.map(async (id) => {\n let value = await readData(`${type}-${id}`);\n if (type === 'app-state-sync-key' && value) {\n value = proto.Message.AppStateSyncKeyData.fromObject(value);\n }\n data[id] = value;\n })\n );\n return data;\n },\n set: async (data: any) => {\n const tasks: Promise<any>[] = [];\n for (const category of Object.keys(data)) {\n for (const id of Object.keys(data[category])) {\n const value = data[category][id];\n const key = `${category}-${id}`;\n tasks.push(value ? writeData(value, key) : removeData(key));\n }\n }\n await Promise.all(tasks);\n },\n },\n },\n saveCreds: () => {\n return writeData(creds, 'creds');\n },\n };\n};\n\nexport default useMongoDBAuthState;\n","import { ReadStream } from 'node:fs';\nimport ms, { type StringValue } from 'ms';\nimport type Stream from 'node:stream';\nimport { type AnyMessageContent, downloadMediaMessage, type WAMessage } from '@fadzzzslebew/baileys';\n// NOTE: Hidden for Dynamic Import for ESM-only Packages\n// import { parseBuffer, parseStream } from 'music-metadata';\n\nexport const getTotalSeconds = (msValue: StringValue) => {\n const value = ms(msValue);\n return value / 1000;\n};\n\nexport const getMS = (msValue: number | StringValue) => {\n return typeof msValue === 'number' ? msValue : ms(msValue);\n};\n\nexport const awaitIfNeeded = async <T>(value: T | Promise<T>): Promise<T> => {\n return Promise.resolve(value);\n};\n\nexport async function getUrlBuffer(url: string) {\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n return buffer;\n}\n\nasync function getDurationFromStream(stream: ReadStream, mimeType?: string): Promise<number> {\n try {\n const { parseStream } = await import('music-metadata');\n const metadata = await parseStream(stream, { mimeType: mimeType || 'audio/mpeg' });\n return Math.floor(metadata.format.duration || 0);\n } catch (error) {\n console.error('Error parsing stream:', error);\n throw error;\n } finally {\n if (!stream.destroyed) {\n stream.destroy();\n }\n }\n}\n\nasync function getDurationFromBuffer(buffer: Buffer, mimeType?: string): Promise<number> {\n try {\n const { parseBuffer } = await import('music-metadata');\n const metadata = await parseBuffer(buffer, mimeType || 'audio/mpeg').catch(() => null);\n return metadata ? Math.floor(metadata.format.duration || 0) : 0;\n } catch (error) {\n console.error('Error parsing buffer:', error);\n throw error;\n }\n}\n\nexport async function getAudioFileDuration(audioFile: ReadStream | Buffer, mimeType?: string): Promise<number> {\n if (audioFile instanceof ReadStream) {\n return getDurationFromStream(audioFile, mimeType);\n } else {\n return getDurationFromBuffer(audioFile, mimeType);\n }\n}\n\nexport async function streamToBuffer(stream: Stream): Promise<Buffer> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));\n stream.on('error', (err) => reject(err));\n stream.on('end', () => resolve(Buffer.concat(chunks)));\n });\n}\n\nexport function getFilenameMimetype(filename: string): string {\n const ext = filename?.split('.')?.pop()?.toLowerCase();\n return MIME_TYPES[ext || ''] || 'application/octet-stream';\n}\n\nexport function getFilenameFromStream(_stream: Stream): string | undefined {\n // if (stream.path) {\n // const pathStr = stream.path.toString();\n // return basename(pathStr);\n // }\n return undefined;\n}\n\nexport const sleep = (timeout: StringValue | number) => {\n return new Promise((resolve) => setTimeout(resolve, typeof timeout === 'number' ? timeout : ms(timeout)));\n};\n\nexport const MIME_TYPES: { [key: string]: string } = {\n // Images\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n\n // Videos\n mp4: 'video/mp4',\n avi: 'video/x-msvideo',\n mov: 'video/quicktime',\n mkv: 'video/x-matroska',\n webm: 'video/webm',\n\n // Audio\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n opus: 'audio/opus',\n aac: 'audio/aac',\n m4a: 'audio/mp4',\n\n // Documents\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n txt: 'text/plain',\n zip: 'application/zip',\n rar: 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed',\n};\n\nexport const MIME_TO_TYPES: { [key: string]: 'Image' | 'Video' | 'Audio' | 'Document' | 'Sticker' } = {\n jpg: 'Image',\n jpeg: 'Image',\n 'image/jpeg': 'Image',\n png: 'Image',\n 'image/png': 'Image',\n ico: 'Image',\n 'image/ico': 'Image',\n svg: 'Document',\n 'image/svg+xml': 'Document',\n // bmp: 'Image',\n // 'image/bmp': 'Image',\n\n // Sticker\n webp: 'Sticker',\n 'image/webp': 'Sticker',\n\n // Videos\n gif: 'Image',\n 'image/gif': 'Image',\n mp4: 'Video',\n 'video/mp4': 'Video',\n avi: 'Video',\n 'video/x-msvideo': 'Video',\n mov: 'Video',\n 'video/quicktime': 'Video',\n mkv: 'Video',\n 'video/x-matroska': 'Video',\n webm: 'Video',\n 'video/webm': 'Video',\n\n // Audio\n mp3: 'Audio',\n 'audio/mpeg': 'Audio',\n wav: 'Audio',\n 'audio/wav': 'Audio',\n ogg: 'Audio',\n 'audio/ogg': 'Audio',\n opus: 'Audio',\n 'audio/opus': 'Audio',\n aac: 'Audio',\n 'audio/aac': 'Audio',\n m4a: 'Audio',\n 'audio/mp4': 'Audio',\n\n // Documents\n pdf: 'Document',\n 'application/pdf': 'Document',\n doc: 'Document',\n 'application/msword': 'Document',\n docx: 'Document',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Document',\n xls: 'Document',\n 'application/vnd.ms-excel': 'Document',\n xlsx: 'Document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Document',\n ppt: 'Document',\n 'application/vnd.ms-powerpoint': 'Document',\n pptx: 'Document',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'Document',\n txt: 'Document',\n 'text/plain': 'Document',\n zip: 'Document',\n 'application/zip': 'Document',\n rar: 'Document',\n 'application/x-rar-compressed': 'Document',\n '7z': 'Document',\n 'application/x-7z-compressed': 'Document',\n};\n\nexport function getFileMessageProps(\n buffer: Buffer,\n mimetype: string,\n options: {\n filename: string;\n caption?: string;\n ptt?: boolean;\n seconds?: number;\n gifPlayback?: boolean;\n jpegThumbnail?: Buffer | string;\n }\n): AnyMessageContent {\n const [type] = mimetype.split('/');\n\n switch (type) {\n case 'sticker':\n return {\n sticker: buffer,\n };\n\n case 'image':\n return {\n image: buffer,\n caption: options.caption,\n mimetype,\n fileName: options.filename,\n };\n\n case 'video':\n return {\n video: buffer,\n caption: options.caption,\n mimetype,\n fileName: options.filename,\n gifPlayback: options.gifPlayback || false,\n jpegThumbnail: options.jpegThumbnail as string,\n ...(options.seconds && { seconds: options.seconds }),\n };\n\n case 'audio':\n if (options.ptt) {\n // Voice note\n return {\n audio: buffer,\n mimetype: 'audio/ogg; codecs=opus',\n ptt: true,\n ...(options.seconds && { seconds: options.seconds }),\n };\n }\n\n return {\n audio: buffer,\n mimetype,\n fileName: options.filename,\n ...(options.seconds && { seconds: options.seconds }),\n };\n\n default:\n // Document (PDF, DOC, etc.)\n return {\n document: buffer,\n mimetype,\n fileName: options.filename,\n caption: options.caption,\n jpegThumbnail: options.jpegThumbnail as string,\n };\n }\n}\n\nexport function getBufferDataUri(buffer: Buffer, mimetype: string = 'image/jpeg'): string {\n const base64 = buffer.toString('base64');\n const dataUri = `data:${mimetype};base64,${base64}`;\n return dataUri;\n}\n\nfunction formatFileSize(bytes: number, decimals = 2) {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n\ntype MessageData = {\n messageId: string;\n fromMe: boolean;\n sender: string;\n username: string;\n timestamp: number;\n text?: string;\n reaction?: { messageId: string; emoji: string; timestamp: number };\n image?: {\n jpegThumbnail: Buffer;\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n height: number;\n width: number;\n caption?: string;\n };\n video?: {\n jpegThumbnail: Buffer;\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n caption?: string;\n };\n audio?: { buffer: Buffer; mimetype: string; fileLength: number; fileSize: string; seconds: number };\n location?: { latitude: number; longitude: number; name: string; address: string };\n file?: {\n buffer: Buffer;\n mimetype: string;\n fileLength: number;\n fileSize: string;\n fileName: string;\n caption?: string;\n };\n sticker?: { buffer: Buffer; mimetype: string; fileLength: number; fileSize: string };\n menuOption?: { participant: string; text: string; description?: string; id: string };\n buttonsResponse?: { participant: string; description?: string; text: string; id: string };\n};\n\nexport async function extractMessageData(message: WAMessage): Promise<MessageData> {\n const data: MessageData = {} as MessageData;\n\n data.messageId = message.key.id;\n data.fromMe = message.key.fromMe;\n data.username = message.pushName ?? '';\n data.timestamp = message.messageTimestamp * 1000;\n\n const participantButtonsResponse = message.message?.buttonsResponseMessage?.contextInfo?.participant;\n data.sender = participantButtonsResponse ?? message.key.participant ?? message.key.remoteJid;\n if (data.sender.endsWith('@lid')) data.sender = '';\n\n data.text = message.message.conversation ?? message.message.extendedTextMessage?.text ?? undefined;\n\n data.reaction = message.message.reactionMessage\n ? {\n messageId: message.message.reactionMessage?.key.id,\n emoji: message.message.reactionMessage?.text ?? '',\n timestamp: +message.message.reactionMessage?.senderTimestampMs,\n }\n : undefined;\n\n if (message.message?.imageMessage) {\n const mimetype = message.message.imageMessage.mimetype;\n const jpegThumbnail = Buffer.from(message.message.imageMessage.jpegThumbnail, 'base64');\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.imageMessage.fileLength.low;\n\n data.image = {\n mimetype,\n buffer,\n jpegThumbnail,\n fileLength,\n fileSize: formatFileSize(fileLength),\n height: message.message.imageMessage.height,\n width: message.message.imageMessage.width,\n caption: message.message.imageMessage.caption,\n };\n }\n\n if (message.message?.videoMessage) {\n const mimetype = message.message.videoMessage.mimetype;\n const jpegThumbnail = Buffer.from(message.message.videoMessage.jpegThumbnail, 'base64');\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.videoMessage.fileLength.low;\n\n data.video = {\n buffer,\n jpegThumbnail,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n caption: message.message.videoMessage.caption,\n };\n }\n\n if (message.message?.audioMessage) {\n const mimetype = message.message.audioMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.audioMessage.fileLength.low;\n\n data.audio = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n seconds: message.message.audioMessage.seconds,\n };\n }\n\n if (message.message?.documentMessage) {\n const mimetype = message.message.documentMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.documentMessage.fileLength.low;\n\n data.file = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n fileName: message.message.documentMessage.fileName,\n caption: message.message.documentMessage.caption,\n };\n }\n\n if (message.message?.stickerMessage) {\n const mimetype = message.message.stickerMessage.mimetype;\n const buffer = await downloadMediaMessage(message, 'buffer', {});\n const fileLength = message.message.stickerMessage.fileLength.low;\n\n // @ts-ignore\n // const dataUri = getBufferDataUri(buffer, mimetype);\n\n data.sticker = {\n buffer,\n mimetype,\n fileLength,\n fileSize: formatFileSize(fileLength),\n };\n }\n\n data.location = message.message?.locationMessage\n ? {\n latitude: message.message.locationMessage.degreesLatitude,\n longitude: message.message.locationMessage.degreesLongitude,\n name: message.message.locationMessage.name,\n address: message.message.locationMessage.address,\n }\n : undefined;\n\n const isMenuMessage =\n message.message.interactiveResponseMessage?.nativeFlowResponseMessage?.name === 'menu_options';\n\n const listMessageParamJson =\n isMenuMessage && JSON.parse(message.message.interactiveResponseMessage.nativeFlowResponseMessage.paramsJson);\n\n data.menuOption = isMenuMessage\n ? {\n participant: message.message?.interactiveResponseMessage.contextInfo.participant,\n text: message.message?.interactiveResponseMessage.body.text,\n description: listMessageParamJson.description,\n id: listMessageParamJson.id,\n }\n : undefined;\n\n data.buttonsResponse = message.message?.buttonsResponseMessage\n ? {\n participant: message.message?.buttonsResponseMessage.contextInfo.participant,\n description: message.message?.buttonsResponseMessage.description,\n text: message.message?.buttonsResponseMessage.selectedDisplayText,\n id: message.message?.buttonsResponseMessage.selectedButtonId,\n }\n : undefined;\n\n return JSON.parse(JSON.stringify(data));\n}\n","// Baileys links\n// https://whiskeysockets.github.io/docs/tutorial-basics/sending-messages\n// https://github.com/WhiskeySockets/Baileys\n// https://github.com/ndalu-id/baileys-api\n// https://whiskeysockets.github.io/Baileys/\n// alternatives:\n// https://www.npmjs.com/package/mudslide\n// https://www.npmjs.com/package/whatsapp-web.js\n// https://www.npmjs.com/package/wbm\nimport {\n default as makeWASocket,\n DisconnectReason,\n makeCacheableSignalKeyStore,\n useMultiFileAuthState,\n type MessageUpsertType,\n type UserFacingSocketConfig,\n type WAMessage,\n type WASocket,\n type AuthenticationState,\n type Contact,\n} from '@fadzzzslebew/baileys';\nimport { type StringValue } from 'ms';\nimport type { Logger as MyLogger } from 'stack-trace-logger';\nimport fs from 'node:fs';\nimport QRCode from 'qrcode';\nimport { type Collection, type Document as MongoDocument, MongoClient } from 'mongodb';\nimport P from 'pino';\nimport type { Boom } from '@hapi/boom';\nimport useMongoDBAuthState from './mongoAuthState';\nimport { extractMessageData, sleep } from './helpers';\nimport type { MessageReceivedCB } from './decs.ts';\n\nconst pinoLogger: any = P({ level: 'silent' });\n\nexport type WhatsappSocketBaseProps = (\n | { mongoURL: string; fileAuthStateDirectoryPath?: string | undefined }\n | { mongoURL?: string | undefined; fileAuthStateDirectoryPath: string }\n) & {\n appName?: string;\n logger?: MyLogger;\n mongoCollection?: string;\n onOpen?: () => Promise<void> | void;\n onClose?: () => Promise<void> | void;\n onConnectionStatusChange?: (connectionStatus: 'connecting' | 'close' | 'open') => Promise<void> | void;\n onPreConnectionSendMessageFailed?: (error: Error | string) => Promise<void> | void;\n onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n debug?: boolean;\n printQRInTerminal?: boolean;\n pairingPhone?: string;\n customPairingCode?: string;\n};\n\nexport class WhatsappSocketBase {\n protected readonly fileAuthStateDirectoryPath?: string;\n protected readonly mongoURL?: string;\n protected readonly mongoCollection: string = 'whatsapp-auth';\n protected readonly logger?: MyLogger;\n protected readonly debug?: boolean;\n protected readonly printQRInTerminal?: boolean;\n protected readonly messageReceivedCBs: Record<string, MessageReceivedCB[]> = {};\n protected readonly pairingPhone?: string;\n protected readonly customPairingCode?: string;\n protected readonly appName?: string;\n private readonly onPreConnectionSendMessageFailed?: (error: Error | string) => Promise<void> | void;\n private onOpen?: () => Promise<void> | void;\n private onClose?: () => Promise<void> | void;\n private onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n private onConnectionStatusChange?: (connectionStatus: 'open' | 'close' | 'connecting') => Promise<void> | void;\n static DEFAULT_COUNTRY_CODE: string = '972';\n static CONNECTION_TIMEOUT: StringValue = '2s';\n\n static formatPhoneNumber(phone: string, countryCode: string = WhatsappSocketBase.DEFAULT_COUNTRY_CODE): string {\n if (phone.endsWith('@s.whatsapp.net')) return phone;\n\n let strNumber = phone.replace(/[^0-9]/g, '');\n if (strNumber.startsWith('05')) strNumber = strNumber.substring(1);\n if (!strNumber.startsWith(countryCode)) strNumber = countryCode + strNumber;\n\n return strNumber; // formatted Number should look like: '+972 051-333-4444' to: '972513334444'\n }\n\n static formatPhoneNumberToWhatsappPattern(\n phone: string,\n countryCode: string = WhatsappSocketBase.DEFAULT_COUNTRY_CODE\n ): string {\n if (phone.endsWith('@s.whatsapp.net')) {\n return phone.replace(/:\\d+@/, '@');\n }\n\n let strNumber = WhatsappSocketBase.formatPhoneNumber(phone, countryCode);\n strNumber = `${strNumber}@s.whatsapp.net`; // formatted Number should look like: '972513334444@s.whatsapp.net'\n strNumber = strNumber.replace(/:\\d+@/, '@'); // remove the sessionId\n return strNumber;\n }\n\n static getWhatsappPhoneLink({\n phone,\n message,\n countryCode = WhatsappSocketBase.DEFAULT_COUNTRY_CODE,\n }: {\n phone: string;\n countryCode?: string;\n message?: string;\n }) {\n const formattedPhone = this.formatPhoneNumber(phone, countryCode);\n const messageQuery = message ? `?text=${encodeURI(message)}` : '';\n return `https://wa.me/${formattedPhone}${messageQuery}`;\n }\n\n static async qrToImage(\n qr: string,\n options: {\n errorCorrectionLevel?: 'H' | 'L' | 'M';\n width?: number;\n margin?: number;\n [key: string]: any;\n } = {}\n ) {\n return QRCode.toDataURL(qr, {\n errorCorrectionLevel: 'H', // Changed to 'H' (High) for better reliability\n width: 400, // Increased size for better scanning\n margin: 2, // Ensure adequate margin\n ...options,\n });\n }\n\n static async qrToTerminalString(qr: string, options: { small?: boolean; [key: string]: any } = {}) {\n return QRCode.toString(qr, { type: 'terminal', small: true, ...options });\n }\n\n // only 8 alphanumeric (no more or less), patterns [a-z0-8] | aaaa[0-8] xxzzvvcc [zaq0-8]\n static randomPairingCode(pattern: string, length = 8) {\n // no randomness needed\n if (!pattern.includes('[') && pattern.length === length) {\n return pattern;\n }\n\n let result = '';\n let pool: string[] = [];\n\n const buildPool = (block: string) => {\n const chars: string[] = [];\n\n for (let i = 0; i < block.length; i++) {\n if (block[i + 1] === '-' && block[i + 2]) {\n const start = block.charCodeAt(i);\n const end = block.charCodeAt(i + 2);\n\n for (let c = start; c <= end; c++) {\n chars.push(String.fromCharCode(c));\n }\n\n i += 2;\n } else {\n chars.push(block[i]);\n }\n }\n\n return chars;\n };\n\n for (let i = 0; i < pattern.length && result.length < length; i++) {\n const char = pattern[i];\n\n if (char === '[') {\n const end = pattern.indexOf(']', i);\n const block = pattern.slice(i + 1, end);\n\n pool = buildPool(block);\n i = end;\n } else {\n result += char;\n }\n }\n\n // fill remaining from pool\n while (result.length < length && pool.length) {\n result += pool[Math.floor(Math.random() * pool.length)];\n }\n\n const upperCaseResult = result.toUpperCase();\n return upperCaseResult.padEnd(length, upperCaseResult);\n }\n\n private static instances: Map<string, WASocket | null> = new Map();\n\n static getInstance(props: WhatsappSocketBaseProps): WASocket {\n const instanceKey = WhatsappSocketBase.buildSocketKey(props);\n if (!WhatsappSocketBase.instances.has(instanceKey)) {\n new WhatsappSocketBase(props);\n }\n\n return WhatsappSocketBase.instances.get(instanceKey)!;\n }\n\n static clearInstance(key?: string): void {\n if (key) {\n WhatsappSocketBase.instances.delete(key);\n } else {\n WhatsappSocketBase.instances.clear();\n }\n }\n\n constructor(props: WhatsappSocketBaseProps) {\n const {\n fileAuthStateDirectoryPath,\n mongoURL,\n mongoCollection = 'whatsapp-auth',\n logger,\n onOpen,\n onClose,\n onQR,\n onConnectionStatusChange,\n debug,\n printQRInTerminal,\n customPairingCode,\n onPreConnectionSendMessageFailed,\n appName,\n pairingPhone,\n } = props;\n\n this.appName = appName;\n this.mongoURL = mongoURL;\n this.fileAuthStateDirectoryPath = fileAuthStateDirectoryPath;\n this.mongoCollection = mongoCollection;\n this.logger = logger;\n this.debug = debug;\n this.printQRInTerminal = printQRInTerminal;\n this.pairingPhone = pairingPhone;\n this.customPairingCode = customPairingCode;\n this.onPreConnectionSendMessageFailed = onPreConnectionSendMessageFailed;\n this.onConnectionStatusChange = onConnectionStatusChange;\n this.onOpen = onOpen;\n this.onClose = onClose;\n this.onQR = onQR;\n\n if (WhatsappSocketBase.instances.has(this.socketKey)) {\n this.socket = WhatsappSocketBase.instances.get(this.socketKey)!;\n // instance.logger?.debug('WHATSAPP', 'RETURN SINGLETON INSTANCE!');\n }\n }\n\n private async getLatestWhatsAppVersion(): Promise<[number, number, number]> {\n try {\n // Try multiple sources\n const sources = [\n 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json',\n 'https://raw.githubusercontent.com/whiskeysockets/baileys/master/src/Defaults/baileys-version.json',\n ];\n\n for (const url of sources) {\n try {\n const response = await fetch(url);\n if (response.ok) {\n const data = (await response.json()) as { version: [number, number, number] };\n return data.version as [number, number, number];\n }\n } catch (err) {\n continue;\n }\n }\n\n // Fallback to a known working version\n console.log('Could not fetch version, using fallback');\n return [2, 3000, 1015901307]; // Recent version as of late 2024\n } catch (error) {\n console.error('Error fetching version:', error);\n return [2, 3000, 1015901307]; // Fallback\n }\n }\n\n private async getAuthCollection(): Promise<[] | [Collection<MongoDocument>, MongoClient]> {\n return new Promise(async (resolve, reject) => {\n if (!this.mongoURL) {\n resolve([]);\n return;\n }\n\n const mongoClient = new MongoClient(this.mongoURL);\n await mongoClient\n .connect()\n .then(() => {\n const collection = mongoClient.db().collection(this.mongoCollection);\n resolve([collection, mongoClient]);\n })\n .catch((error) => {\n this.logger?.error('WHASTAPP', 'Error connecting to MongoDB connection', error);\n reject(error);\n });\n });\n }\n\n private async authenticate(): Promise<{ auth: AuthenticationState; saveCreds: any }> {\n if (!this.mongoURL && !this.fileAuthStateDirectoryPath) {\n throw new Error('fileAuthStateDirectoryPath/MongoURL is missing');\n }\n\n if (!this.mongoURL) {\n const { saveCreds, state } = await useMultiFileAuthState(this.fileAuthStateDirectoryPath as string);\n return { auth: state, saveCreds };\n }\n\n const [collection] = await this.getAuthCollection();\n\n const { state, saveCreds } = await useMongoDBAuthState(collection);\n const auth = {\n creds: state.creds,\n keys: makeCacheableSignalKeyStore(state.keys, pinoLogger as any),\n } as AuthenticationState;\n\n return { auth, saveCreds };\n }\n\n static buildSocketKey(props: Partial<WhatsappSocketBaseProps>) {\n return (\n props.appName ||\n props.pairingPhone ||\n props.mongoCollection ||\n props.fileAuthStateDirectoryPath ||\n 'default'\n );\n }\n\n get socketKey(): string {\n return (\n this.appName || this.pairingPhone || this.mongoCollection || this.fileAuthStateDirectoryPath || 'default'\n );\n }\n\n get socket(): WASocket | null {\n return WhatsappSocketBase.instances.get(this.socketKey) ?? null;\n }\n\n set socket(sock: WASocket | null) {\n WhatsappSocketBase.instances.set(this.socketKey, sock);\n }\n\n async startConnection({\n options,\n connectionAttempts = 3,\n onOpen = this.onOpen,\n onClose = this.onClose,\n onQR = this.onQR,\n onConnectionStatusChange = this.onConnectionStatusChange,\n pairingPhone: _pairingPhone,\n debug: _debug,\n }: {\n options?: UserFacingSocketConfig;\n debug?: boolean;\n pairingPhone?: string;\n connectionAttempts?: number;\n onOpen?: () => Promise<void> | void;\n onClose?: () => Promise<void> | void;\n onQR?: (qr: string, code?: string | null) => Promise<void> | void;\n onConnectionStatusChange?: (status: 'open' | 'close' | 'connecting') => Promise<void> | void;\n } = {}): Promise<WASocket | null> {\n const pairingPhone = _pairingPhone ?? this.pairingPhone;\n const { saveCreds, auth } = await this.authenticate();\n const debug = _debug === undefined ? this.debug : _debug;\n\n // Fetch latest Baileys version for better compatibility\n const version = await this.getLatestWhatsAppVersion();\n\n const connect = async (): Promise<WASocket | null> => {\n return new Promise((resolve) => {\n const sock = makeWASocket({\n version: version,\n logger: pinoLogger,\n browser: [this.appName || 'baileys', '1.0.0', ''], // ['Ubuntu', 'Chrome', '20.0.04'],\n syncFullHistory: false, // Don't sync full history on first connect\n shouldSyncHistoryMessage: () => false,\n shouldIgnoreJid: (jid) => jid.includes('@newsletter'), // Ignore newsletter\n ...options,\n printQRInTerminal: false, // baileys not good with it, printing manually to terminal later\n ...{ auth },\n });\n\n // CRITICAL: Handle connection updates properly\n sock.ev.on('connection.update', async (update) => {\n const { connection, lastDisconnect, qr } = update;\n\n if (qr) {\n if (debug) this.logger?.info('WHATSAPP', 'QR Code received', { qr });\n if (this.printQRInTerminal) {\n const qrcode = await WhatsappSocketBase.qrToTerminalString(qr, { small: true }).catch(\n () => null\n );\n console.log(qrcode);\n }\n\n // @ts-ignore\n const pair = this.customPairingCode\n ? WhatsappSocketBase.randomPairingCode(this.customPairingCode)\n : undefined;\n\n const pairing = pairingPhone ? WhatsappSocketBase.formatPhoneNumber(pairingPhone) : null;\n const code = pairing ? await sock.requestPairingCode(pairing) : null;\n\n if (debug && this.printQRInTerminal) {\n this.logger?.info('WHATSAPP', 'QR Pairing Code', { code, pairingPhone: pairing });\n }\n await onQR?.(qr, code);\n }\n\n switch (connection) {\n case 'connecting': {\n if (debug) this.logger?.debug('WHATSAPP', 'Connecting...');\n onConnectionStatusChange?.('connecting');\n break;\n }\n\n case 'open': {\n if (debug) this.logger?.info('WHATSAPP', 'Connection opened successfully!');\n this.socket = sock;\n await onOpen?.();\n onConnectionStatusChange?.('open');\n resolve(this.socket);\n break;\n }\n\n case 'close': {\n const shouldReconnect =\n connectionAttempts-- > 0 &&\n (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut;\n\n const statusCode = (lastDisconnect?.error as Boom)?.output?.statusCode;\n const errorMessage = lastDisconnect?.error?.message;\n\n if (debug) {\n this.logger?.info('WHATSAPP', 'Connection closed', {\n statusCode,\n errorMessage,\n shouldReconnect,\n });\n }\n\n // IMPORTANT: Error code 515 (Stream Errored) after QR scan is NORMAL\n // The connection must restart after pairing - this is expected behavior\n if (shouldReconnect && connectionAttempts) {\n if (debug) this.logger?.info('WHATSAPP', 'Reconnecting...');\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT);\n resolve(connect());\n } else {\n if (debug) this.logger?.warn('WHATSAPP', 'Logged out, clearing auth state');\n await onClose?.();\n this.socket = null;\n resolve(this.socket);\n }\n\n onConnectionStatusChange?.('close');\n break;\n }\n }\n });\n\n // Save credentials when they update\n sock.ev.on('creds.update', saveCreds);\n\n sock.ev.on('messages.upsert', async (props: { messages: WAMessage[]; type: MessageUpsertType }) => {\n if (!Object.keys(this.messageReceivedCBs).length) return;\n\n this.logger?.info('WHATSAPP', 'Received messages', {\n type: props.type,\n totalMessages: props.messages.length,\n });\n\n // const messageUpsertType = props.type;\n // if (type === 'append') return;\n // if (type !== 'notify') return;\n\n const messages = props.messages;\n\n const messageDataList = await Promise.allSettled(\n messages\n .filter((message) => message.message)\n .map(async (message) => extractMessageData(message))\n );\n\n messageDataList\n .map((p, i) => ({ ...p, message: messages[i] }))\n .filter((p) => p.status === 'rejected')\n .forEach(({ reason, message }) => {\n this.logger?.error('WHATSAPP', 'failed to handle message', {\n error: reason?.message,\n message,\n });\n });\n\n messageDataList\n .filter((p) => p.status === 'fulfilled')\n .forEach(({ value: messageData }) => {\n console.log('handle message', messageData);\n const { sender, messageId, username, timestamp, fromMe, ...data } = messageData;\n\n Object.keys(this.messageReceivedCBs)\n .filter((jid) => ['from_any_groups', 'from_any_phones', sender].includes(jid))\n .forEach(async (jid) => {\n this.messageReceivedCBs[jid]?.forEach((cb) => {\n if (sender) {\n cb(sender, messageId, { username, timestamp, fromMe, data });\n }\n });\n });\n });\n\n // const msg = messages[0]\n // if (!msg.key.fromMe && msg.message?.conversation) {\n // const sender = msg.key.remoteJid\n // const text = msg.message.conversation.toLowerCase()\n //\n // console.log(`📩 Message from ${sender}: ${text}`)\n //\n // if (text === 'hi') {\n // await sock.sendMessage(sender, { text: 'Hello! How can I help you today?' })\n // }\n // }\n });\n });\n };\n\n const socket = await connect();\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT);\n\n return socket;\n }\n\n async ensureSocketConnected(): Promise<WASocket | null> {\n if (!this.socket) {\n if (this.debug) this.logger?.warn('WHATSAPP', 'Client not connected, attempting to connect...');\n this.socket = await this.startConnection().catch((error: Error) => {\n this.onPreConnectionSendMessageFailed?.(error);\n return null;\n });\n }\n\n return this.socket;\n }\n\n async closeConnection() {\n if (this.socket) {\n if (this.debug) this.logger?.info('WHATSAPP', 'Closing connection');\n this.socket.end(undefined);\n this.socket = null;\n }\n }\n\n async clearAuthState() {\n await this.closeConnection();\n\n if (this.mongoURL) {\n const [collection, mongoClient] = await this.getAuthCollection();\n\n if (this.debug) this.logger?.info('WHATSAPP', 'Deleting auth state, required to scanning QR again');\n await collection?.deleteMany({});\n await mongoClient?.close();\n } else if (this.fileAuthStateDirectoryPath) {\n fs.rmSync(this.fileAuthStateDirectoryPath, { recursive: true, force: true });\n }\n }\n\n async resetConnection({ pairingPhone, autoConnect = true }: { pairingPhone?: string; autoConnect?: boolean } = {}) {\n await this.clearAuthState();\n if (!autoConnect) return;\n\n await sleep(WhatsappSocketBase.CONNECTION_TIMEOUT); // Wait a bit before reconnecting\n await this.startConnection({ pairingPhone });\n }\n\n isConnected() {\n return !!this.socket?.user;\n }\n\n myJID() {\n if (!this.socket?.user?.id) return null;\n return WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(this.socket?.user?.id);\n }\n\n /**\n * Delete a message for everyone (if within time limit) or just for yourself\n * @param messageId - The message ID to delete\n * @param chatJid - The chat JID (phone number in WhatsApp format)\n * @param deleteForEveryone - If true, deletes for everyone (only works if you sent the message and within ~48h)\n * @returns Promise with the result\n */\n async deleteMessage(messageId: string, chatJid: string, deleteForEveryone: true = true): Promise<any> {\n await this.ensureSocketConnected();\n\n if (!this.socket) {\n throw new Error('Socket not connected');\n }\n\n const jid = WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(chatJid);\n\n try {\n if (deleteForEveryone) {\n // Delete for everyone (revoke message)\n const result = await this.socket.sendMessage(jid, {\n delete: {\n remoteJid: jid,\n fromMe: true,\n id: messageId,\n participant: undefined,\n },\n });\n\n if (this.debug) {\n this.logger?.info('WHATSAPP', 'Message deleted for everyone', {\n messageId,\n chatJid: jid,\n });\n }\n\n return result;\n } else {\n // Delete for me only (clear message locally)\n // Note: This doesn't work via API - WhatsApp doesn't support \"delete for me\" via Baileys\n // We can only revoke messages (delete for everyone)\n if (this.debug) {\n this.logger?.warn('WHATSAPP', 'Delete for me is not supported via API', {\n messageId,\n chatJid: jid,\n reason: [\n 'Delete for me only (clear message locally)',\n `Note: This doesn't work via API - WhatsApp doesn't support \"delete for me\" via Baileys`,\n 'We can only revoke messages (delete for everyone)',\n ].join('\\n'),\n });\n }\n\n throw new Error(\n 'Delete for me is not supported via WhatsApp API. Use deleteForEveryone=true to revoke the message.'\n );\n }\n } catch (error) {\n if (this.debug) {\n this.logger?.error('WHATSAPP', 'Failed to delete message', {\n messageId,\n chatJid: jid,\n error: (error as Error).message,\n });\n }\n throw error;\n }\n }\n\n /**\n * Delete multiple messages at once\n * @param messages - Array of {messageId, chatJid} objects\n * @param deleteForEveryone - If true, deletes for everyone\n * @returns Promise with array of results\n */\n async deleteMessages(\n messages: Array<{ messageId: string; chatJid: string }>,\n deleteForEveryone: true = true\n ): Promise<any[]> {\n await this.ensureSocketConnected();\n\n const results: Array<{ success: boolean; messageId: string; result?: any; error?: null | string }> = [];\n\n for (const { messageId, chatJid } of messages) {\n try {\n const result = await this.deleteMessage(messageId, chatJid, deleteForEveryone);\n results.push({ success: true, messageId, result });\n\n // Small delay between deletions to avoid rate limiting\n await sleep('500ms');\n } catch (error) {\n results.push({\n success: false,\n messageId,\n error: (error as Error).message,\n });\n }\n }\n\n return results;\n }\n\n async loadRecentMessages(chatJid: string, messageId: string): Promise<WAMessage | null> {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(chatJid);\n\n try {\n const message: WAMessage = await this.socket?.waitForMessage(messageId, 3000);\n return message || null;\n } catch (error) {\n if (this.debug) {\n this.logger?.error('WHATSAPP', 'Failed to load message history', {\n chatJid: jid,\n error: (error as Error).message,\n });\n }\n return null;\n }\n }\n\n async getContactByJid(remoteJid: string): Promise<Contact | undefined> {\n if (!remoteJid) return undefined;\n\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching contacts');\n }\n\n // @ts-ignore\n const contact = this.socket?.store?.contacts[remoteJid] as Contact;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Contacts fetched', { remoteJid, contact });\n }\n\n return contact;\n }\n\n async getContacts(username?: string, byWords = true): Promise<Contact[]> {\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching contacts');\n }\n\n // @ts-ignore\n let contacts = Object.values(this.socket?.store?.contacts || {}) as Contact[];\n if (username?.trim()) {\n const names = byWords ? username?.trim().split(' ') : [username?.trim()];\n contacts = contacts.filter((contact) => names.some((word) => contact.name?.includes(word)));\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Contacts fetched', {\n count: contacts.length,\n });\n }\n\n return contacts;\n }\n\n async areRegisteredOnWhatsApp(\n phone: string | string[]\n ): Promise<Array<{ phone: string; exists: boolean; jid?: string; contact: Contact | undefined }>> {\n await this.ensureSocketConnected();\n\n const phoneNumbers = ([] as string[])\n .concat(phone)\n .map((p) => WhatsappSocketBase.formatPhoneNumberToWhatsappPattern(p));\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Checking is registered numbers', { count: phoneNumbers.length });\n }\n\n const results = await this.socket?.onWhatsApp(...phoneNumbers);\n\n const mappedResultsPromises = await Promise.allSettled(\n (results ?? []).map(async (result, index) => ({\n phone: phoneNumbers[index],\n exists: !!result?.exists,\n jid: result?.jid,\n contact: await this.getContactByJid(result.jid),\n }))\n );\n const mappedResults = mappedResultsPromises\n .filter((result) => result.status === 'fulfilled')\n .map((result) => result.value);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Multiple registration check results', {\n total: mappedResults.length,\n registered: mappedResults.filter((r) => r.exists).length,\n });\n }\n\n return mappedResults;\n }\n}\n","import type Stream from 'node:stream';\nimport { Readable } from 'stream';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { getFileMessageProps, getFilenameMimetype, streamToBuffer } from '../helpers.ts';\n\nexport async function sendFileFromStream(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n stream: Stream | Buffer,\n {\n mentions,\n ...options\n }: {\n filename: string;\n mimetype?: string;\n caption?: string;\n replyToMessageId?: string;\n // File type specific options\n ptt?: boolean; // Push to talk (voice note)\n seconds?: number; // Duration for audio/video\n gifPlayback?: boolean; // For GIF videos\n // Additional options\n jpegThumbnail?: Buffer | string; // Thumbnail for videos/documents\n mentions?: string[];\n }\n): Promise<any> {\n // Convert stream to buffer if needed\n const buffer = stream instanceof Buffer ? stream : await streamToBuffer(stream as Readable);\n\n // Auto-detect mimetype if not provided\n const mimetype = options.mimetype || getFilenameMimetype(options.filename);\n\n // Determine message type based on mimetype\n const messageContent = getFileMessageProps(buffer, mimetype, options);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && { quoted: { key: { id: options.replyToMessageId } } }),\n ...(mentions?.length && { mentions }),\n };\n\n if (debug) {\n logger?.debug('WHATSAPP', 'sendFileFromStream', {\n jid,\n mimetype,\n caption: (messageContent as any)?.caption,\n fileName: (messageContent as any)?.fileName,\n });\n }\n\n return socket?.sendMessage(jid, messageContent, messageOptions);\n}\n","import Stream from 'node:stream';\nimport { getAudioFileDuration, getUrlBuffer } from '../helpers.ts';\nimport { ReadStream } from 'node:fs';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\nimport type { AudioMessageProps } from './messages.decs.ts';\n\nexport async function sendAudioMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n audioSrc: string | Buffer<any> | Stream,\n { filename = 'audio-message.mp3', replyToMessageId, mimetype, seconds, ptt, mentions }: AudioMessageProps = {}\n) {\n if (!jid || !audioSrc) {\n throw new Error('sendAudioMessage: jid and audio source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const audioBuffer = typeof audioSrc === 'string' ? await getUrlBuffer(audioSrc) : audioSrc;\n let durationInSeconds = seconds || (await getAudioFileDuration(audioBuffer as ReadStream, mimetype).catch(() => 0));\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send audio message', {\n jid,\n mimetype,\n filename,\n seconds: durationInSeconds,\n replyToMessageId,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, audioBuffer, {\n filename,\n ...(ptt !== undefined && { ptt }), // PTT = Push To Talk (voice message)\n ...(mimetype && { mimetype: mimetype }),\n ...(durationInSeconds && { seconds: durationInSeconds }),\n ...(replyToMessageId && { replyToMessageId: replyToMessageId }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import { generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\nimport { WAProto as proto, type WASocket } from '@fadzzzslebew/baileys';\nimport type {\n ButtonCopy,\n ButtonEmail,\n ButtonParamsJson,\n ButtonPhone,\n ButtonReminder,\n ButtonURL,\n CallToActionFullButtons,\n} from '../decs.ts';\nimport { getTotalSeconds } from '../helpers.ts';\nimport type { ButtonsMessageProps } from './messages.decs.ts';\n\nexport const sendButtonsMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { subtitle, title, buttons }: ButtonsMessageProps\n) => {\n if (!title || !buttons.length) {\n throw new Error('sendButtonsMessage: No title or buttons required field found.');\n }\n\n const buttonsValue = (buttons as CallToActionFullButtons)\n ?.map((btn) => {\n const buttonParamsJson: ButtonParamsJson = { display_text: btn.label };\n\n let name: string;\n switch (true) {\n case !!(btn as ButtonURL).url:\n name = 'cta_url';\n buttonParamsJson.url = (btn as ButtonURL).url;\n buttonParamsJson.url = buttonParamsJson.url.startsWith('http')\n ? buttonParamsJson.url\n : `https://${buttonParamsJson.url}`;\n break;\n case !!(btn as ButtonCopy).copy:\n name = 'cta_copy';\n buttonParamsJson.copy_code = (btn as ButtonCopy).copy;\n break;\n case !!(btn as ButtonPhone).tel:\n name = 'cta_call';\n buttonParamsJson.phone_number = (btn as ButtonPhone).tel;\n break;\n case !!(btn as ButtonEmail).email:\n name = 'cta_email';\n buttonParamsJson.email = (btn as ButtonEmail).email;\n break;\n case !!((btn as ButtonReminder).reminderOn || (btn as ButtonReminder).reminderDate):\n name = 'cta_reminder';\n const { reminderOn, reminderDate } = btn as ButtonReminder;\n buttonParamsJson.reminder_name = (btn as ButtonReminder).reminderName;\n buttonParamsJson.reminder_timestamp = reminderDate\n ? Math.floor(+new Date(reminderDate) / 1000)\n : Math.floor(Date.now() / 1000) + getTotalSeconds(reminderOn ?? '0s');\n break;\n default:\n name = '';\n break;\n }\n\n return { name, buttonParamsJson: JSON.stringify(buttonParamsJson) };\n })\n .filter((v) => v.name);\n\n const msg = generateWAMessageFromContent(\n jid,\n {\n viewOnceMessage: {\n message: {\n interactiveMessage: proto.Message.InteractiveMessage.create({\n ...(title && {\n body: proto.Message.InteractiveMessage.Body.create({ text: title }),\n }),\n ...(subtitle && {\n footer: proto.Message.InteractiveMessage.Footer.create({ text: subtitle }),\n }),\n ...(!!buttonsValue?.length && {\n nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: buttonsValue,\n }),\n }),\n }),\n },\n },\n },\n { userJid: jid }\n );\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send buttons message', {\n jid,\n footer: subtitle,\n body: title,\n buttons: buttonsValue,\n });\n }\n\n return socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\n};\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\n\nexport const sendDeleteMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { messageId }: { messageId: string }\n) => {\n if (!messageId) {\n throw new Error('sendDeleteMessage: No title or buttons required field found.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'Deleting message', {\n jid,\n messageId,\n });\n }\n\n return socket?.sendMessage(jid, { delete: { id: messageId, remoteJid: jid, fromMe: true } });\n};\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\nimport type { DocumentMessageProps } from './messages.decs.ts';\n\nexport async function sendDocumentMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n documentSrc: string | Buffer<any> | Stream,\n { filename = 'audio-message.mp3', caption = '', mimetype, mentions, jpegThumbnail }: DocumentMessageProps = {}\n) {\n if (!jid || !documentSrc) {\n throw new Error('sendDocumentMessage: jid and document source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const documentBuffer = typeof documentSrc === 'string' ? await getUrlBuffer(documentSrc) : documentSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send document message', {\n jid,\n mimetype,\n filename,\n caption,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, documentBuffer, {\n filename,\n ...(caption && { caption }),\n ...(mimetype && { mimetype }),\n ...(jpegThumbnail && { jpegThumbnail }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\nimport type { ImageMessageProps } from './messages.decs.ts';\n\nexport async function sendImageMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n imageSrc: string | Buffer<any> | Stream,\n { caption = '', filename = 'image.jpg', mentions }: ImageMessageProps = {}\n) {\n if (!jid || !imageSrc) {\n throw new Error('sendImageMessage: jid and image source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const imageBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send image message', { jid, caption, filename });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, imageBuffer, {\n filename,\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\nimport type { VideoMessageProps } from './messages.decs.ts';\n\nexport async function sendVideoMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n videoSrc: string | Buffer<any> | Stream,\n { caption = '', filename = 'video.mp4', sendAsGifPlayback: gifPlayback = false, mentions }: VideoMessageProps = {}\n) {\n if (!jid || !videoSrc) {\n throw new Error('sendVideoMessage: jid and video source are required.');\n }\n\n filename = filename && decodeURIComponent(filename);\n const videoBuffer = typeof videoSrc === 'string' ? await getUrlBuffer(videoSrc) : videoSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send video message', {\n jid,\n filename,\n gifPlayback,\n mentions,\n caption,\n });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, videoBuffer, {\n filename,\n ...(caption && { caption }),\n ...(gifPlayback && { gifPlayback }),\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getUrlBuffer } from '../helpers.ts';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendFileFromStream } from './file-stream.message';\nimport type { StickerMessageProps } from './messages.decs.ts';\n\nexport async function sendStickerMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n imageSrc: string | Buffer<any> | Stream,\n { mentions }: StickerMessageProps = {}\n) {\n if (!jid || !imageSrc) {\n throw new Error('sendStickerMessage: jid and sticker image source are required.');\n }\n\n const imageBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send sticker message', { jid });\n }\n\n return sendFileFromStream({ debug, logger, socket }, jid, imageBuffer, {\n mimetype: 'sticker',\n filename: 'sticker.webp',\n ...(mentions?.length && { mentions }),\n });\n}\n","import Stream from 'node:stream';\nimport { getFilenameFromStream, getFilenameMimetype, getUrlBuffer, MIME_TO_TYPES, streamToBuffer } from '../helpers.ts';\nimport { basename } from 'node:path';\nimport type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport { sendAudioMessage } from './audio.message';\nimport { sendImageMessage } from './image.message';\nimport { sendVideoMessage } from './video.message';\nimport { sendStickerMessage } from './sticker.message';\nimport { sendDocumentMessage } from './document.message';\nimport type { FileMessageProps } from './messages.decs.ts';\n\nexport async function sendFileMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n fileSrc: string | Buffer<any> | Stream,\n { caption = '', mimetype, jpegThumbnailSrc, autoMessageClassification = true, filename, mentions }: FileMessageProps\n) {\n let jpegThumbnailBuffer: Buffer<any> | undefined;\n if (typeof jpegThumbnailSrc === 'string') {\n jpegThumbnailBuffer = await getUrlBuffer(jpegThumbnailSrc);\n } else if (jpegThumbnailSrc instanceof Stream) {\n jpegThumbnailBuffer = await streamToBuffer(jpegThumbnailSrc);\n } else {\n jpegThumbnailBuffer = jpegThumbnailSrc;\n }\n\n const fileBuffer = typeof fileSrc === 'string' ? await getUrlBuffer(fileSrc) : fileSrc;\n if (fileSrc instanceof Stream) {\n const fname = getFilenameFromStream(fileSrc);\n if (fname) filename = fname;\n } else if (typeof fileSrc === 'string') {\n filename = basename(fileSrc);\n }\n\n filename = filename && decodeURIComponent(filename);\n mimetype ||= getFilenameMimetype(filename);\n mimetype = mimetype?.toLowerCase();\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send file message', {\n jid,\n caption,\n mimetype,\n filename,\n includeJpegThumbnail: !!jpegThumbnailBuffer,\n });\n }\n\n let sendSuccess = true;\n let response: any;\n if (autoMessageClassification) {\n switch (MIME_TO_TYPES[mimetype as string]) {\n case 'Image':\n response = await sendImageMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Sticker':\n response = await sendStickerMessage({ debug, logger, socket }, jid, fileBuffer, { mentions }).catch(\n () => (sendSuccess = false)\n );\n break;\n case 'Video':\n response = await sendVideoMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Audio':\n response = await sendAudioMessage({ debug, logger, socket }, jid, fileBuffer, {\n mimetype,\n filename,\n mentions,\n }).catch(() => (sendSuccess = false));\n break;\n default:\n return await sendDocumentMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n mimetype,\n filename,\n jpegThumbnail: jpegThumbnailBuffer,\n mentions,\n });\n }\n }\n\n if (response && sendSuccess) return response;\n if (!autoMessageClassification || !sendSuccess) {\n return await sendDocumentMessage({ debug, logger, socket }, jid, fileBuffer, {\n caption,\n mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n filename,\n jpegThumbnail: jpegThumbnailBuffer,\n mentions,\n });\n }\n}\n","import { type WASocket } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\nimport type { LocationMessageProps } from './messages.decs.ts';\n\nexport async function sendLocationMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { latitude, longitude, name, address }: LocationMessageProps\n): Promise<any> {\n if (latitude === undefined || longitude === undefined) {\n throw new Error('sendLocation: latitude and longitude are required fields.');\n }\n\n // Validate coordinate ranges\n if (latitude < -90 || latitude > 90) {\n throw new Error('sendLocation: latitude must be between -90 and 90.');\n }\n if (longitude < -180 || longitude > 180) {\n throw new Error('sendLocation: longitude must be between -180 and 180.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send location message', {\n jid,\n latitude,\n longitude,\n name,\n address,\n });\n }\n\n return socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n}\n","import { WAProto as proto, type WASocket, generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport type { Logger } from 'stack-trace-logger';\nimport type { MenuMessageProps } from './messages.decs.ts';\n\nexport async function sendMenuMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { title, subtitle, buttonText, sections }: MenuMessageProps\n): Promise<any> {\n if (!title || !buttonText || !sections || sections.length === 0) {\n throw new Error('sendMenuMessage: title, buttonText, and sections are required.');\n }\n\n const msg = generateWAMessageFromContent(\n jid,\n {\n viewOnceMessage: {\n message: {\n interactiveMessage: proto.Message.InteractiveMessage.create({\n body: proto.Message.InteractiveMessage.Body.create({ text: title }),\n ...(subtitle && {\n footer: proto.Message.InteractiveMessage.Footer.create({ text: subtitle }),\n }),\n header: proto.Message.InteractiveMessage.Header.create({\n title: buttonText,\n hasMediaAttachment: false,\n }),\n nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: [\n {\n name: 'single_select',\n buttonParamsJson: JSON.stringify({\n title: buttonText,\n sections: sections.map((section) => ({\n title: section.title,\n rows: section.rows.map((row) => ({\n header: row.title,\n title: row.title,\n description: row.description || '',\n id: row.id,\n })),\n })),\n }),\n },\n ],\n }),\n }),\n },\n },\n },\n { userJid: jid }\n );\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send menu message', {\n jid,\n title,\n buttonText,\n sectionsCount: sections.length,\n totalRows: sections.reduce((acc, s) => acc + s.rows.length, 0),\n });\n }\n\n return socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\n}\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\nimport type { ReactionMessageProps } from './messages.decs.ts';\n\nexport const sendReactionMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { messageId, emoji }: ReactionMessageProps\n) => {\n if (!jid || !messageId || !emoji) {\n throw new Error('sendReactionMessage: message ID, and emoji are required.');\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'Sending reaction to group message', {\n jid,\n messageId,\n emoji,\n });\n }\n\n return socket?.sendMessage(jid, {\n react: {\n text: emoji,\n key: { id: messageId, remoteJid: jid },\n },\n });\n};\n","import type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport type { ReplyMessageProps } from './messages.decs.ts';\n\nexport async function sendReplyMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { title, subtitle, buttons, mentions: formattedMentionsPhones }: ReplyMessageProps & { mentions?: string[] }\n): Promise<any> {\n if (!title || !buttons.length) {\n throw new Error('sendReplyButtonsMessage: No title or buttons required field found.');\n }\n\n const buttonsValue = buttons\n .filter((v) => v)\n .map((btn, index) =>\n typeof btn === 'string'\n ? { buttonId: `id-${index}`, buttonText: { displayText: btn }, type: 1 }\n : { buttonId: `${btn.id}`, buttonText: { displayText: btn.label }, type: 1 }\n );\n\n const messageOptions: any = {\n text: title,\n buttons: buttonsValue /* type: UNKNOWN = 0, RESPONSE = 1, NATIVE_FLOW = 2 */,\n ...(subtitle && { footer: subtitle }),\n };\n\n if (formattedMentionsPhones?.length) {\n messageOptions.mentions = formattedMentionsPhones;\n }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send reply buttons message', {\n jid,\n text: title,\n footer: subtitle,\n buttons: buttonsValue,\n });\n }\n\n return socket?.sendMessage(jid, messageOptions);\n}\n","import type { Logger } from 'stack-trace-logger';\nimport type { WASocket } from '@fadzzzslebew/baileys';\nimport type { SurveyMessageProps } from './messages.decs.ts';\n\nexport async function sendSurveyMessage(\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { question, options, allowMultipleAnswers = false }: SurveyMessageProps\n): Promise<any> {\n if (!question || !options || options.length < 2) {\n throw new Error('sendSurveyMessage: question and at least 2 options are required.');\n }\n\n if (options.length > 12) {\n throw new Error('sendSurveyMessage: maximum 12 options allowed.');\n }\n\n const pollOptions = options;\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send survey message', {\n jid,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return socket?.sendMessage(jid, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\n });\n}\n","import type { Logger } from 'stack-trace-logger';\nimport { type WASocket } from '@fadzzzslebew/baileys';\nimport type { TextMessageProps } from './messages.decs.ts';\n\nexport const sendTextMessage = (\n { debug, logger, socket }: { debug?: boolean; logger?: Logger; socket: WASocket | null },\n jid: string,\n { text: _text, mentions }: TextMessageProps & { mentions?: string[] }\n) => {\n // @ts-ignore\n const text = _text?.text ?? _text;\n if (!text) {\n throw new Error('sendTextMessage: No title or buttons required field found.');\n }\n\n // let options: MiscMessageGenerationOptions = {};\n // if (replyToMessageId) {\n // // @ts-ignore\n // const message = await this.loadRecentMessages(jid, replyToMessageId);\n // // We need the full message object to quote it properly\n // // Option 1: If you have the message stored, use it directly\n // // Option 2: Create a minimal quoted message structure\n // options.quoted = {\n // key: { remoteJid: jid, id: replyToMessageId },\n // message: { conversation: \"\" }, // Placeholder - ideally you'd have the actual message\n // } as any;\n // }\n\n if (debug) {\n logger?.debug('WHATSAPP', 'send text message', { jid, text });\n }\n\n return socket?.sendMessage(jid, { text, ...(mentions?.length && { mentions }) });\n};\n","import Stream from 'node:stream';\nimport { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nexport type { WhatsappSocketBaseProps as WhatsappSocketMessagesProps } from './whatsappSocket.base';\nimport type { CallToActionButtons } from './decs';\nimport {\n sendButtonsMessage,\n sendMenuMessage,\n sendReplyMessage,\n sendLocationMessage,\n sendSurveyMessage,\n sendTextMessage,\n sendReactionMessage,\n sendAudioMessage,\n sendStickerMessage,\n sendFileMessage,\n sendVideoMessage,\n sendImageMessage,\n} from './messages';\nimport { clearTimeout } from 'node:timers';\nimport type { Message } from './bot.schema.ts';\n\ntype MessageType = 'text' | 'reply' | 'menu' | 'buttons' | 'image' | 'video' | 'audio' | 'location';\n\nexport class WhatsappSocketPrivateMessages extends WhatsappSocketBase {\n protected timers: Record<\n string,\n Record<number, { timeoutId: number; date: Date; data: Message; messageType: MessageType }>\n > = {};\n\n constructor(props: WhatsappSocketBaseProps) {\n super(props);\n }\n\n protected async sendMessageByType(remoteJid: string | null, messageType: MessageType, message: any) {\n switch (messageType) {\n case 'text':\n await this.sendTextMessage(remoteJid, message);\n break;\n case 'reply':\n await this.sendReplyButtonsMessage(remoteJid, message);\n break;\n case 'menu':\n await this.sendMenuMessage(remoteJid, message);\n break;\n case 'buttons':\n await this.sendButtonsMessage(remoteJid, message);\n break;\n case 'image':\n await this.sendImageMessage(remoteJid, message);\n break;\n case 'video':\n await this.sendVideoMessage(remoteJid, message);\n break;\n case 'audio':\n await this.sendAudioMessage(remoteJid, message);\n break;\n case 'location':\n await this.sendLocationMessage(remoteJid, message);\n break;\n }\n }\n\n public async setTimer(\n remoteJid: string,\n messageType: MessageType,\n message: any,\n timeout: number,\n autoSelfNotificationFormat: string | null = [\n '✅ ההודעה תישלח ב-{date}',\n 'אל המספר: {phone}',\n 'מזהה הבקשה: {timerId}',\n ].join('\\n')\n ) {\n const timerId = setTimeout(() => this.sendMessageByType(remoteJid, messageType, message), timeout);\n\n this.timers[remoteJid] ||= {};\n this.timers[remoteJid][+timerId] = {\n timeoutId: timeout,\n date: new Date(new Date().getTime() + timeout),\n data: message,\n messageType,\n };\n\n if (autoSelfNotificationFormat) {\n await this.sendTextMessage(\n null,\n autoSelfNotificationFormat\n .replace('{date}', this.timers[remoteJid][+timerId].date.toLocaleString('he-IL'))\n .replace('{timerId}', `${+timerId}`)\n .replace('{phone}', remoteJid.split('@')[0])\n );\n }\n\n return timerId;\n }\n\n public getTimers(remoteJid: string) {\n return Object.entries(this.timers[remoteJid] ?? {}).map(([key, message]) => {\n return { code: key, message }; // todo: defined the message format to display\n });\n }\n\n public removeTimerId(remoteJid: string, timerId: number) {\n clearTimeout(timerId);\n delete this.timers[remoteJid][timerId];\n }\n\n public resetTimers(remoteJid?: string) {\n if (remoteJid) {\n Object.keys(this.timers[remoteJid] ?? {}).forEach(clearTimeout);\n delete this.timers[remoteJid];\n return;\n }\n\n Object.keys(this.timers).forEach((remoteJid) => Object.keys(this.timers[remoteJid]).forEach(clearTimeout));\n this.timers = {};\n }\n\n /**\n * Delete a sent message\n * @param messageId - The message ID to delete\n * @param chatJid - The recipient's phone number\n * @returns Promise with the result\n */\n async deleteMessageById(messageId: string, chatJid: string): Promise<any> {\n return this.deleteMessage(messageId, chatJid, true);\n }\n\n async sendTextMessage(to: string | null, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendTextMessage(baseProps, jid, { text });\n }\n\n async sendButtonsMessage(\n to: string | null,\n { subtitle, title, buttons }: { title: string; subtitle?: string; buttons: CallToActionButtons }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendButtonsMessage(baseProps, jid, { subtitle, title, buttons });\n }\n\n async sendMenuMessage(\n to: string | null,\n {\n title,\n subtitle,\n buttonText,\n sections,\n }: {\n title: string;\n subtitle?: string;\n buttonText: string;\n sections: Array<{\n title: string;\n rows: Array<{ id: string; title: string; description?: string }>;\n }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendMenuMessage(baseProps, jid, { subtitle, title, sections, buttonText });\n }\n\n async sendReplyButtonsMessage(\n to: string | null,\n {\n title,\n subtitle,\n buttons,\n }: {\n title: string;\n subtitle?: string;\n buttons: Array<string | { id: number | string; label: string }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReplyMessage(baseProps, jid, { subtitle, title, buttons });\n }\n\n async sendLocationMessage(\n to: string | null,\n {\n latitude,\n longitude,\n name,\n address,\n }: {\n latitude: number;\n longitude: number;\n name?: string;\n address?: string;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendLocationMessage(baseProps, jid, { latitude, longitude, name, address });\n }\n\n async sendSurveyMessage(\n to: string | null,\n {\n question,\n options,\n allowMultipleAnswers = false,\n }: { question: string; options: string[]; allowMultipleAnswers?: boolean }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendSurveyMessage(baseProps, jid, { options, question, allowMultipleAnswers });\n }\n\n async sendReactionMessage(to: string | null, messageId: string, emoji: string): Promise<any> {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReactionMessage(baseProps, jid, { messageId, emoji });\n }\n\n async sendImageMessage(\n to: string | null,\n imageSrc: string | Buffer<any> | Stream,\n { caption = '', filename }: { caption?: string; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendImageMessage(baseProps, jid, imageSrc, { caption, filename });\n }\n\n async sendVideoMessage(\n to: string | null,\n videoSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n filename,\n sendAsGifPlayback = false,\n }: { caption?: string; sendAsGifPlayback?: boolean; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendVideoMessage(baseProps, jid, videoSrc, { caption, filename, sendAsGifPlayback });\n }\n\n async sendAudioMessage(\n to: string | null,\n audioSrc: string | Buffer<any> | Stream,\n {\n filename,\n replyToMessageId,\n mimetype,\n seconds,\n }: { filename?: string; replyToMessageId?: string; mimetype?: string; seconds?: number } = {}\n ) {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendAudioMessage(baseProps, jid, audioSrc, { filename, replyToMessageId, mimetype, seconds });\n }\n\n /**\n * requirements:\n * * format .webp\n * * imageSize 512pxx512px\n * * maxSize: 100kb\n * * transparent background\n * @param to\n * @param imageSrc\n */\n async sendStickerMessage(to: string | null, imageSrc: string | Buffer<any> | Stream) {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendStickerMessage(baseProps, jid, imageSrc);\n }\n\n async sendFileMessage(\n to: string | null,\n fileSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n jpegThumbnailSrc?: string | Buffer<any> | Stream;\n }\n ) {\n await this.ensureSocketConnected();\n const jid = (\n to ? WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to) : this.myJID()\n ) as string;\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendFileMessage(baseProps, jid, fileSrc, {\n autoMessageClassification,\n jpegThumbnailSrc,\n mimetype,\n filename,\n caption,\n });\n }\n}\n","import { WhatsappSocketPrivateMessages, type WhatsappSocketMessagesProps } from './whatsappSocket.private.messages';\nimport type { MessageReceivedCB } from './decs.ts';\n\nexport type WhatsappSocketProps = WhatsappSocketMessagesProps;\n\nexport class WhatsappSocket extends WhatsappSocketPrivateMessages {\n constructor(props: WhatsappSocketProps) {\n super(props);\n }\n\n onAnyMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_phones ||= [];\n this.messageReceivedCBs.from_any_phones.push(cb);\n }\n\n offAnyMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_phones = (this.messageReceivedCBs.from_any_phones ?? []).filter(\n (c) => c !== cb\n );\n }\n\n onPhoneMessageReceived(phone: string, cb: MessageReceivedCB) {\n const jid = phone && WhatsappSocket.formatPhoneNumberToWhatsappPattern(phone);\n this.messageReceivedCBs[jid] ||= [];\n this.messageReceivedCBs[jid].push(cb);\n }\n\n offPhoneMessageReceived(phone: string, cb?: MessageReceivedCB) {\n const jid = WhatsappSocket.formatPhoneNumberToWhatsappPattern(phone);\n this.messageReceivedCBs[jid] = cb ? (this.messageReceivedCBs[jid] ?? []).filter((c) => c !== cb) : [];\n }\n}\n","import type { GroupMetadata, ParticipantAction } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nimport type { CreateGroupOptions, GroupSettingsType } from './decs';\nexport type { WhatsappSocketBaseProps as WhatsappSocketGroupsProps } from './whatsappSocket.base';\n\nexport class WhatsappSocketGroups extends WhatsappSocketBase {\n /**\n * פורמט Group ID לתבנית WhatsApp\n * Format Group ID to WhatsApp pattern\n * Group IDs end with @g.us instead of @s.whatsapp.net\n */\n static formatGroupId(groupId: string): string {\n if (groupId.endsWith('@g.us')) return groupId;\n const cleanId = groupId.replace(/@s\\.whatsapp\\.net|@g\\.us/g, '');\n\n return `${cleanId}@g.us`;\n }\n\n /**\n * בדיקה האם מדובר ב-Group ID או Phone Number\n * Check if this is a group ID or phone number\n */\n static isGroupId(jid: string): boolean {\n return jid.endsWith('@g.us');\n }\n\n constructor(props: WhatsappSocketBaseProps) {\n super(props);\n }\n\n /**\n * Create a new WhatsApp group\n */\n async createGroup({ name, participants, description }: CreateGroupOptions): Promise<any> {\n if (!name) {\n throw new Error('createGroup: Group name is required.');\n }\n await this.ensureSocketConnected();\n\n // Format phone numbers to WhatsApp pattern\n const formattedParticipants: string[] = (participants ?? []).map((phone) =>\n WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(phone)\n );\n\n // If no participants provided, use self (bot's own number)\n if (formattedParticipants.length === 0) {\n const selfJid = this.socket?.user?.id; // Get bot's own JID (user ID)\n if (!selfJid) {\n throw new Error('createGroup: Could not get bot user ID. Make sure socket is connected.');\n }\n\n const pId = WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(selfJid);\n formattedParticipants.push(pId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'No participants provided, creating group with self only', {\n selfJid,\n });\n }\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Creating group', {\n name,\n description,\n participants: formattedParticipants,\n });\n }\n\n const result = await this.socket?.groupCreate(name, formattedParticipants);\n\n // Set description if provided\n if (description && result?.id) {\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(result.id);\n await this.updateGroupDescription(formattedGroupId, description);\n }\n\n return result;\n }\n\n /**\n * Update group name (subject)\n */\n async updateGroupName(groupId: string, newName: string): Promise<any> {\n if (!groupId || !newName) {\n throw new Error('updateGroupName: Group ID and new name are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group name', { groupId: formattedGroupId, newName });\n }\n\n return this.socket?.groupUpdateSubject(formattedGroupId, newName);\n }\n\n /**\n * Update group description\n */\n async updateGroupDescription(groupId: string, description: string, fetchMetaData = false): Promise<any> {\n if (!groupId) {\n throw new Error('updateGroupDescription: Group ID is required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (fetchMetaData) {\n await this.socket\n ?.groupMetadata(formattedGroupId)\n .then((data) => {\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetch group description metadata', data);\n }\n })\n .catch((e) => {\n if (this.debug) {\n this.logger?.warn('WHATSAPP', 'Failed to update group description metadata', { error: e });\n }\n });\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group description', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupUpdateDescription(formattedGroupId, description || '');\n }\n\n /**\n * Update group settings (who can send messages, edit info, etc.)\n */\n async updateGroupSettings(groupId: string, setting: GroupSettingsType): Promise<any> {\n if (!groupId || !setting) {\n throw new Error('updateGroupSettings: Group ID and setting are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group settings', { groupId: formattedGroupId, setting });\n }\n\n return this.socket?.groupSettingUpdate(formattedGroupId, setting);\n }\n\n private async updateGroupParticipants(\n groupId: string,\n participant: string | string[],\n action: ParticipantAction\n ): Promise<any> {\n if (!groupId) throw new Error('addParticipants: Group ID is required.');\n const participants = ([] as string[]).concat(participant).filter((v) => v);\n if (!participants?.length) return;\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n const formattedParticipants = participants.map((phone) =>\n WhatsappSocketGroups.formatPhoneNumberToWhatsappPattern(phone)\n );\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', `${action} participants to group`, {\n groupId: formattedGroupId,\n participantsCount: formattedParticipants.length,\n });\n }\n\n return this.socket?.groupParticipantsUpdate(formattedGroupId, formattedParticipants, action);\n }\n\n /**\n * Add participants to group\n */\n async addParticipants(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'add');\n }\n\n /**\n * Remove participants from group\n */\n async removeParticipants(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'remove');\n }\n\n /**\n * Promote participant to admin\n */\n async promoteToAdmin(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'promote');\n }\n\n /**\n * הורדת משתתף ממנהל\n * Demote participant from admin\n */\n async demoteFromAdmin(groupId: string, participant: string | string[]): Promise<any> {\n return this.updateGroupParticipants(groupId, participant, 'demote');\n }\n\n /**\n * Leave a group\n */\n async leaveGroup(groupId: string): Promise<any> {\n if (!groupId) throw new Error('leaveGroup: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Leaving group', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupLeave(formattedGroupId);\n }\n\n /**\n * Get group metadata\n */\n async getGroupMetadata(groupId: string): Promise<GroupMetadata | undefined> {\n if (!groupId) throw new Error('getGroupMetadata: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group metadata', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupMetadata(formattedGroupId);\n }\n\n /**\n * Get all groups\n */\n async getAllGroups(): Promise<GroupMetadata[]> {\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching all groups');\n }\n\n const groups = await this.socket?.groupFetchAllParticipating();\n return groups ? Object.values(groups) : [];\n }\n\n /**\n * Get group invite code\n */\n async getGroupInviteCode(groupId: string, urlLink?: boolean): Promise<string | undefined> {\n if (!groupId) throw new Error('getGroupInviteCode: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group invite code', { groupId: formattedGroupId });\n }\n\n const inviteCode = await this.socket?.groupInviteCode(formattedGroupId);\n\n return urlLink && inviteCode ? `https://chat.whatsapp.com/${inviteCode}` : inviteCode;\n }\n\n /**\n * Revoke group invite code (creates new one)\n */\n async revokeGroupInviteCode(groupId: string): Promise<string | undefined> {\n if (!groupId) throw new Error('revokeGroupInviteCode: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Revoking group invite code', { groupId: formattedGroupId });\n }\n\n return this.socket?.groupRevokeInvite(formattedGroupId);\n }\n\n /**\n * Join group using invite code\n */\n async joinGroupViaInvite(inviteCode: string): Promise<string | undefined> {\n if (!inviteCode) throw new Error('joinGroupViaInvite: Invite code is required.');\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Joining group via invite', { inviteCode });\n }\n\n return this.socket?.groupAcceptInvite(inviteCode);\n }\n\n /**\n * Get group info from invite code\n */\n async getGroupInfoFromInvite(inviteCode: string): Promise<any> {\n if (!inviteCode) throw new Error('getGroupInfoFromInvite: Invite code is required.');\n await this.ensureSocketConnected();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group info from invite', { inviteCode });\n }\n\n return this.socket?.groupGetInviteInfo(inviteCode);\n }\n\n /**\n * Update group profile picture\n */\n async updateGroupProfilePicture(groupId: string, imageBuffer: Buffer): Promise<any> {\n if (!groupId || !imageBuffer) {\n throw new Error('updateGroupProfilePicture: Group ID and image buffer are required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Updating group profile picture', { groupId: formattedGroupId });\n }\n\n return this.socket?.updateProfilePicture(formattedGroupId, imageBuffer);\n }\n\n /**\n * Remove group profile picture\n */\n async removeGroupProfilePicture(groupId: string): Promise<any> {\n if (!groupId) throw new Error('removeGroupProfilePicture: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Removing group profile picture', { groupId: formattedGroupId });\n }\n\n return this.socket?.removeProfilePicture(formattedGroupId);\n }\n\n /**\n * Get group profile picture URL\n */\n async getGroupProfilePicture(groupId: string, highRes: boolean = false): Promise<string | undefined | null> {\n if (!groupId) throw new Error('getGroupProfilePicture: Group ID is required.');\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroups.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Fetching group profile picture', { groupId: formattedGroupId, highRes });\n }\n\n return this.socket\n ?.profilePictureUrl(formattedGroupId, highRes ? 'image' : 'preview')\n .catch((reason: Error) => {\n if (reason.message === 'item-not-found') return null;\n throw reason;\n // if (reason === 'No image processing library available')\n // throw 'No image processing library available (try to install sharp/jimp)';\n });\n }\n}\n","import { WhatsappSocketGroups, type WhatsappSocketGroupsProps } from './whatsappSocket.group.management';\nimport type { CallToActionButtons, MessageOptions } from './decs';\nimport Stream from 'node:stream';\nimport {\n sendButtonsMessage,\n sendSurveyMessage,\n sendTextMessage,\n sendReplyMessage,\n sendMenuMessage,\n sendLocationMessage,\n sendAudioMessage,\n sendImageMessage,\n sendVideoMessage,\n sendStickerMessage,\n sendFileMessage,\n sendDocumentMessage,\n sendDeleteMessage,\n sendReactionMessage,\n} from './messages';\n\nexport type { WhatsappSocketGroupsProps as WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.management';\n\nexport class WhatsappSocketGroupMessages extends WhatsappSocketGroups {\n constructor(props: WhatsappSocketGroupsProps) {\n super(props);\n }\n\n /**\n * Send message mentioning all group participants\n */\n async sendMentionAll(groupId: string, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n // Get all group participants\n const groupMetadata = await this.getGroupMetadata(formattedGroupId);\n if (!groupMetadata) {\n throw new Error('Could not fetch group metadata');\n }\n\n const groupParticipants = groupMetadata.participants.map((p) => p.id);\n\n return sendTextMessage(baseProps, formattedGroupId, { text, mentions: groupParticipants });\n }\n\n /**\n * Send reaction to a message in group\n */\n async sendReactionMessage(groupId: string, messageId: string, emoji: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReactionMessage(baseProps, formattedGroupId, { messageId, emoji });\n }\n\n /**\n * Delete a message in group (only works for own messages)\n */\n async deleteGroupMessage(groupId: string, messageId: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendDeleteMessage(baseProps, formattedGroupId, { messageId });\n }\n\n /**\n * Send text message to group\n */\n async sendTextMessage(groupId: string, text: string): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendTextMessage(baseProps, formattedGroupId, { text });\n }\n\n /**\n * Send buttons message to group\n */\n async sendButtonsMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttons,\n }: {\n title: string;\n subtitle?: string;\n buttons: CallToActionButtons;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendButtonsMessage(baseProps, formattedGroupId, { subtitle, title, buttons });\n }\n\n /**\n * Send reply buttons message to group\n */\n async sendReplyButtonsMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttons,\n mentions,\n }: {\n title: string;\n subtitle?: string;\n buttons: Array<string | { id: number | string; label: string }>;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendReplyMessage(baseProps, formattedGroupId, {\n subtitle,\n title,\n buttons,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n async sendMenuMessage(\n groupId: string,\n {\n title,\n subtitle,\n buttonText,\n sections,\n }: {\n title: string;\n subtitle?: string;\n buttonText: string;\n sections: Array<{\n title: string;\n rows: Array<{\n id: string;\n title: string;\n description?: string;\n }>;\n }>;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendMenuMessage(baseProps, formattedGroupId, { subtitle, title, sections, buttonText });\n }\n\n /**\n * Send location to group\n */\n async sendLocationMessage(\n groupId: string,\n {\n latitude,\n longitude,\n name,\n address,\n }: {\n latitude: number;\n longitude: number;\n name?: string;\n address?: string;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendLocationMessage(baseProps, formattedGroupId, { latitude, longitude, name, address });\n }\n\n async sendSurveyMessage(\n groupId: string,\n {\n question,\n options,\n allowMultipleAnswers = false,\n }: { question: string; options: string[]; allowMultipleAnswers?: boolean }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendSurveyMessage(baseProps, formattedGroupId, { options, question, allowMultipleAnswers });\n }\n\n /**\n * Send image to group\n */\n async sendImageMessage(\n groupId: string,\n imageSrc: string | Buffer | Stream,\n { caption = '', filename, mentions }: MessageOptions & { caption?: string; filename?: string } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendImageMessage(baseProps, formattedGroupId, imageSrc, {\n caption,\n filename,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send video to group\n */\n async sendVideoMessage(\n groupId: string,\n videoSrc: string | Buffer | Stream,\n {\n caption = '',\n filename,\n sendAsGifPlayback = false,\n mentions,\n }: MessageOptions & {\n caption?: string;\n filename?: string;\n sendAsGifPlayback?: boolean;\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendVideoMessage(baseProps, formattedGroupId, videoSrc, {\n caption,\n filename,\n sendAsGifPlayback,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send audio to group\n */\n async sendAudioMessage(\n groupId: string,\n audioSrc: string | Buffer | Stream,\n {\n filename,\n mimetype,\n seconds,\n ptt = false,\n mentions,\n }: {\n filename?: string;\n replyToMessageId?: string;\n mimetype?: string;\n seconds?: number;\n ptt?: boolean;\n mentions?: string[];\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendAudioMessage(baseProps, formattedGroupId, audioSrc, {\n filename,\n mimetype,\n seconds,\n ptt,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send document to group\n */\n async sendDocumentMessage(\n groupId: string,\n documentSrc: string | Buffer | Stream,\n {\n fileName,\n caption,\n mimetype,\n jpegThumbnail,\n mentions,\n }: {\n fileName: string;\n caption?: string;\n mimetype?: string;\n jpegThumbnail?: Buffer;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendDocumentMessage(baseProps, formattedGroupId, documentSrc, {\n filename: fileName,\n caption,\n mimetype,\n jpegThumbnail,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n /**\n * Send sticker to group\n * Requirements:\n * * format .webp\n * * imageSize 512px x 512px\n * * maxSize: 100kb\n * * transparent background\n */\n async sendStickerMessage(\n groupId: string,\n imageSrc: string | Buffer | Stream,\n { mentions }: { mentions?: string[] } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendStickerMessage(baseProps, formattedGroupId, imageSrc, {\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n\n async sendFileMessage(\n groupId: string,\n fileSrc: string | Buffer | Stream,\n {\n caption = '',\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n mentions,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n jpegThumbnailSrc?: string | Buffer | Stream;\n mentions?: string[];\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const baseProps = { socket: this.socket, debug: this.debug, logger: this.logger };\n\n return sendFileMessage(baseProps, formattedGroupId, fileSrc, {\n caption,\n mimetype,\n jpegThumbnailSrc,\n autoMessageClassification,\n filename,\n mentions: mentions?.map((phone) => WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)),\n });\n }\n}\n","import { WhatsappSocketGroupMessages, type WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\nimport type { MessageReceivedCB } from './decs.ts';\n\nexport type WhatsappSocketGroupProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocketGroup extends WhatsappSocketGroupMessages {\n constructor(props: WhatsappSocketGroupProps) {\n super(props);\n }\n\n onAnyGroupMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_groups ||= [];\n this.messageReceivedCBs.from_any_groups.push(cb);\n }\n\n offAnyGroupMessageReceived(cb: MessageReceivedCB) {\n this.messageReceivedCBs.from_any_groups = (this.messageReceivedCBs.from_any_groups ?? []).filter(\n (c) => c !== cb\n );\n }\n\n onGroupMessageReceived(groupId: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocketGroup.formatGroupId(groupId);\n this.messageReceivedCBs[jid] ||= [];\n this.messageReceivedCBs[jid].push(cb);\n }\n\n offGroupMessageReceived(groupId: string, cb: MessageReceivedCB) {\n const jid = WhatsappSocketGroup.formatGroupId(groupId);\n this.messageReceivedCBs[jid] = this.messageReceivedCBs[jid].filter((c) => c !== cb);\n }\n}\n","import { WhatsappSocket } from './whatsappSocket.private.client';\nimport type { BotSchema, Message, MessageCB, MessageItem, Scenario } from './bot.schema';\nimport { awaitIfNeeded, getMS } from './helpers.ts';\nimport { clearTimeout, setTimeout } from 'node:timers';\nexport type { BotSchema } from './bot.schema';\n\nexport class WhatsappSocketBot {\n protected schema: BotSchema;\n protected phone?: string;\n protected client?: WhatsappSocket;\n private schemaRefs: Record<string, any> = {};\n private remoteFlow: Record<string, any> = {};\n private dataFlow: Record<string, any> = {};\n private timeoutFlow: Record<string, string> = {};\n private lastMessages: Record<string, string[]> = {};\n\n constructor(schema: BotSchema, phone?: string) {\n this.phone = phone && WhatsappSocket.formatPhoneNumberToWhatsappPattern(phone);\n this.schema = schema;\n this.updateSchemaRefs(this.schema.flow);\n }\n\n updateSchemaRefs(flow: undefined | Scenario) {\n if (!flow) return;\n\n Object.keys(flow.response ?? {}).forEach((id: string) => {\n this.schemaRefs[id] = flow.response?.[id];\n });\n }\n\n set socket(socket: WhatsappSocket) {\n this.client = socket;\n this.onMessageReceived();\n }\n\n get socket() {\n return this.client as WhatsappSocket;\n }\n\n private async sendMessageList(remoteJid: string, messages?: MessageItem | MessageItem[] | undefined) {\n const messageList: Message[] = ([] as Message[]).concat(messages as Message).filter((v) => v);\n if (!messageList?.length) return false;\n\n const messageIds: string[] = [];\n\n for (let message of messageList) {\n if (typeof message === 'function') {\n message = await (<MessageCB>message)(remoteJid, this.dataFlow[remoteJid]);\n }\n\n const [key, { forceExit, timeout, ...value }]: any = Object.entries(message)[0];\n const timeoutValue = timeout ? getMS(timeout) : 0;\n if (timeoutValue) {\n this.client?.setTimer(remoteJid, key, value, timeoutValue);\n return forceExit;\n }\n\n let messageResponse: any;\n switch (key) {\n case 'text':\n messageResponse = await this.client?.sendTextMessage(remoteJid, value);\n break;\n case 'reply':\n messageResponse = await this.client?.sendReplyButtonsMessage(remoteJid, value);\n break;\n case 'menu':\n messageResponse = await this.client?.sendMenuMessage(remoteJid, value);\n break;\n case 'buttons':\n messageResponse = await this.client?.sendButtonsMessage(remoteJid, value);\n break;\n case 'image':\n messageResponse = await this.client?.sendImageMessage(remoteJid, value);\n break;\n case 'video':\n messageResponse = await this.client?.sendVideoMessage(remoteJid, value);\n break;\n case 'audio':\n messageResponse = await this.client?.sendAudioMessage(remoteJid, value);\n break;\n case 'location':\n messageResponse = await this.client?.sendLocationMessage(remoteJid, value);\n break;\n default:\n messageResponse = await this.client?.sendTextMessage(remoteJid, 'Done');\n break;\n }\n\n messageIds.push(messageResponse.key.id as string);\n if (forceExit) return true;\n }\n\n this.lastMessages[remoteJid] ||= [];\n this.lastMessages[remoteJid].unshift(...messageIds);\n this.lastMessages[remoteJid] = this.lastMessages[remoteJid].slice(0, 10);\n return false;\n }\n\n private getFlow(remoteJid: string) {\n return this.remoteFlow[remoteJid];\n }\n\n private setFlow(remoteJid: string, flow: any) {\n this.remoteFlow[remoteJid] = flow;\n }\n\n private resetFlow(remoteJid: string) {\n delete this.remoteFlow[remoteJid];\n }\n\n private getDataFlow(remoteJid: string) {\n return this.dataFlow[remoteJid];\n }\n\n private getLastMessages(remoteJid: string) {\n return this.lastMessages[remoteJid];\n }\n\n private setDataFlow(remoteJid: string, field: string, data: any) {\n this.dataFlow[remoteJid] ||= { ...this.dataFlow[remoteJid], [field]: data };\n }\n\n private resetDataFlow(remoteJid: string) {\n delete this.dataFlow[remoteJid];\n }\n\n private setTimeoutFlow(remoteJid: string, timeoutId: any) {\n const oldTimeoutId = this.timeoutFlow[remoteJid];\n if (oldTimeoutId) clearTimeout(oldTimeoutId);\n this.timeoutFlow[remoteJid] = timeoutId;\n }\n\n private resetTimeoutFlow(remoteJid: string) {\n const oldTimeoutId = this.timeoutFlow[remoteJid];\n if (oldTimeoutId) clearTimeout(oldTimeoutId);\n delete this.timeoutFlow[remoteJid];\n }\n\n private getResponseId(response: any) {\n if (response.data?.buttonsResponse) {\n return response.data.buttonsResponse.id;\n }\n\n if (response.data?.menuResponse) {\n return response.data.menuResponse.id;\n }\n\n return '';\n }\n\n private async onMessageReceivedCB(remoteJid: string, messageId: string, options: any) {\n if (this.getLastMessages(remoteJid)?.includes(messageId)) return;\n if (options.fromMe && !Object.keys(options.data ?? {}).length && !options.username) return;\n\n const {\n exitCode: EXIT_CODE,\n exitMsg: EXIT_MSG,\n timeoutMsg: TIMEOUT_MSG,\n unknownInputMsg: UNKNOWN_INPUT_MSG,\n flow: FLOW,\n idleTimeout: IDLE_TIMEOUT,\n fields: FIELDS,\n matches: MATCHES,\n // backCode,\n // name,\n // description,\n } = this.schema;\n\n const cleanupRemoteJid = async (sendExitMsg = true) => {\n sendExitMsg && (await this.sendMessageList(remoteJid, EXIT_MSG));\n this.resetDataFlow(remoteJid);\n this.resetFlow(remoteJid);\n this.resetTimeoutFlow(remoteJid);\n };\n\n const restartIdleTimeout = () => {\n const idleTimeoutMS = IDLE_TIMEOUT && getMS(IDLE_TIMEOUT);\n if (idleTimeoutMS && IDLE_TIMEOUT) {\n const timeoutId = setTimeout(async () => {\n await this.sendMessageList(remoteJid, TIMEOUT_MSG);\n await cleanupRemoteJid();\n }, idleTimeoutMS);\n\n this.setTimeoutFlow(remoteJid, timeoutId);\n }\n };\n\n const checkForMatches = async (matches) => {\n if (!matches?.length) {\n return null;\n }\n\n for (const match of matches) {\n if (match === undefined || match === null) continue;\n\n let isMatched = false;\n\n if (typeof match === 'string') {\n isMatched = match === msgText;\n } else if (typeof match === 'function') {\n isMatched = await awaitIfNeeded<boolean>((<any>match)(remoteJid, msgText, !!options.fromMe));\n } else {\n isMatched = match.test(msgText);\n }\n\n if (isMatched) return match;\n }\n\n return null;\n };\n\n // get current flow\n const currentFlow = this.getFlow(remoteJid);\n\n // get current text message\n const msgText = options?.data?.text ?? (typeof options === 'string' ? options : '');\n\n // if not exists flow, start over from schema matching flow\n if (!currentFlow) {\n if (EXIT_CODE && EXIT_CODE === msgText) {\n await cleanupRemoteJid(false);\n return;\n }\n\n // check if msgText as match to matching current schema if not ignore message, unless start session\n const shouldMatchingForStart = !!MATCHES?.length;\n const matchedItem = await checkForMatches(MATCHES);\n const notRelevant = shouldMatchingForStart && !matchedItem;\n if (notRelevant) return;\n\n // start schema flow session send intro messages\n const forceExit = await this.sendMessageList(remoteJid, FLOW?.messages);\n if (forceExit) {\n await cleanupRemoteJid();\n return;\n }\n\n // save schema flow session to current remoteJid\n this.setFlow(remoteJid, FLOW);\n\n // reset schema flow data session to current remoteJid\n this.resetDataFlow(remoteJid);\n\n // start idle timeout for unreached contact session\n restartIdleTimeout();\n\n return;\n }\n\n // extend idle timeout from the (current) last response\n restartIdleTimeout();\n\n // if user decide to quit by typing the exit code then reset session\n if (EXIT_CODE && EXIT_CODE === msgText) {\n await cleanupRemoteJid();\n return;\n }\n\n // extract user data (id) options\n const key = this.getResponseId(options);\n\n if (!currentFlow.response[key]) {\n if (options.data && UNKNOWN_INPUT_MSG) {\n await this.sendMessageList(remoteJid, UNKNOWN_INPUT_MSG);\n }\n return;\n }\n\n const text = msgText || key;\n const field = currentFlow.field;\n const stepMessages = currentFlow.messages;\n const { parseFieldData, validationError, validate } = FIELDS?.[field as string] ?? {};\n\n const forceExit = await this.sendMessageList(remoteJid, stepMessages);\n if (forceExit) {\n await cleanupRemoteJid();\n return;\n }\n\n if (field) {\n if (!validate || validate(text)) {\n // validate user response\n // store user response data flow\n if (field) {\n const data = parseFieldData?.(msgText) ?? msgText;\n this.setDataFlow(remoteJid, field, data);\n }\n } else {\n // send to user warning about invalid input\n const errMsg = typeof validationError === 'function' ? validationError(text) : validationError;\n await this.client?.sendTextMessage(remoteJid, errMsg || 'invalid input!');\n await this.sendMessageList(remoteJid, currentFlow?.messages);\n\n return;\n }\n }\n\n // apply to submit handler of this current step if exists handler\n await currentFlow.response[key]?.onSubmit?.({\n remoteJid,\n messageId,\n options,\n data: this.getDataFlow(remoteJid),\n });\n\n const nextFlow = currentFlow[key]?.next;\n const nextMessages = nextFlow?.messages;\n\n // send next session messages\n if (nextMessages?.length) {\n const forceExit = await this.sendMessageList(remoteJid, nextMessages);\n if (forceExit) {\n await cleanupRemoteJid();\n return;\n }\n\n this.setFlow(remoteJid, nextFlow);\n } else {\n // reset session if not exists any continue session\n await cleanupRemoteJid();\n }\n }\n\n onMessageReceived() {\n const cb = this.onMessageReceivedCB.bind(this);\n if (this.phone) this.client?.onPhoneMessageReceived(this.phone, cb);\n else this.client?.onAnyMessageReceived(cb);\n }\n}\n"]}
|