@hdriel/whatsapp-socket 1.2.5 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -137
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +58 -29
- package/dist/index.d.ts +58 -29
- package/dist/index.js +3 -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/whatsappSocket.private.messages.ts","../src/whatsappSocket.private.stream.ts","../src/whatsappSocket.private.files.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","chunks","chunk","getFilenameFromStream","pathStr","basename","sleep","timeout","resolve","MIME_TYPES","pinoLogger","P","WhatsappSocketBase","_WhatsappSocketBase","phone","countryCode","strNumber","message","formattedPhone","messageQuery","qr","options","QRCode","pattern","length","result","pool","buildPool","block","chars","i","start","end","c","char","upperCaseResult","props","instanceKey","fileAuthStateDirectoryPath","mongoURL","mongoCollection","logger","onOpen","onClose","onQR","onReceiveMessages","onConnectionStatusChange","debug","printQRInTerminal","pairingPhone","customPairingCode","onPreConnectionSendMessageFailed","appName","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","socket","fs","autoConnect","messageId","chatJid","deleteForEveryone","results","WhatsappSocketPrivateMessages","_WhatsappSocketPrivateMessages","to","text","subtitle","title","buttons","buttonsValue","btn","buttonParamsJson","name","reminderOn","reminderDate","v","msg","generateWAMessageFromContent","index","latitude","longitude","address","position","question","allowMultipleAnswers","pollOptions","WhatsappSocketPrivateStream","_WhatsappSocketPrivateStream","mimetype","messageContent","messageOptions","reject","err","filename","ext","imageBuffer","videoBuffer","audioBuffer","documentBuffer","stickerBuffer","WhatsappSocketPrivateFiles","_WhatsappSocketPrivateFiles","imageSrc","caption","imageData","videoSrc","gifPlayback","fileSrc","replyToMessageId","jpegThumbnailSrc","fileBuffer","jpegThumbnailBuffer","fname","audioSrc","seconds","durationInSeconds","WhatsappSocket","WhatsappSocketGroups","_WhatsappSocketGroups","groupId","participants","description","formattedParticipants","selfJid","pId","formattedGroupId","newName","fetchMetaData","e","setting","participant","action","groups","urlLink","inviteCode","highRes","reason","WhatsappSocketGroupMessages","_WhatsappSocketGroupMessages","mentions","fileName","groupMetadata","p","emoji","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 { basename } from 'node:path';\nimport { ReadStream } from 'node:fs';\nimport ms, { type StringValue } from 'ms';\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: ReadStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n\n return Buffer.concat(chunks);\n}\n\nexport function getFilenameFromStream(stream: ReadStream): 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","// 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 { sleep } from './helpers';\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 onReceiveMessages?: (messages: WAMessage[], type: MessageUpsertType) => 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 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 private readonly onReceiveMessages?: (messages: WAMessage[], type: MessageUpsertType) => 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 onReceiveMessages,\n onConnectionStatusChange,\n debug,\n printQRInTerminal,\n pairingPhone,\n customPairingCode,\n onPreConnectionSendMessageFailed,\n appName,\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.onReceiveMessages = onReceiveMessages;\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 if (!this.mongoURL) return [];\n\n const mongoClient = new MongoClient(this.mongoURL);\n await mongoClient.connect();\n const collection = mongoClient.db().collection(this.mongoCollection);\n\n return [collection, mongoClient];\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 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 // Handle messages\n if (this.onReceiveMessages && typeof this.onReceiveMessages === 'function') {\n sock.ev.on('messages.upsert', async ({ messages, type }) => {\n this.logger?.info('WHATSAPP', 'Received messages', { type, totalMessages: messages.length });\n this.onReceiveMessages?.(messages, type);\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\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 { generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport { WAProto as proto } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nexport type { WhatsappSocketBaseProps as WhatsappSocketMessagesProps } from './whatsappSocket.base';\nimport { getTotalSeconds } from './helpers';\nimport type {\n ButtonURL,\n ButtonReminder,\n ButtonEmail,\n ButtonCopy,\n ButtonPhone,\n ButtonParamsJson,\n CallToActionButtons,\n CallToActionFullButtons,\n} from './decs';\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\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 return this.socket?.sendMessage(jid, { text });\n }\n\n async sendButtonsMessage(\n to: string,\n { subtitle, title, buttons }: { title: string; subtitle?: string; buttons: CallToActionButtons }\n ): Promise<any> {\n if (!title || !buttons.length) {\n throw new Error('sendButtonsMessage: No title or buttons required field found.');\n }\n\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 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 (this.debug) {\n this.logger?.debug('WHATSAPP', 'send buttons message', {\n jid,\n footer: subtitle,\n body: title,\n buttons: buttonsValue,\n });\n }\n\n return this.socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\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 if (!title || !buttons.length) {\n throw new Error('sendReplyButtonsMessage: No title or buttons required field found.');\n }\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send reply buttons message', {\n jid,\n text: title,\n footer: subtitle,\n buttons: buttonsValue,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n text: title,\n ...(subtitle && { footer: subtitle }),\n buttons: buttonsValue /* type: UNKNOWN = 0, RESPONSE = 1, NATIVE_FLOW = 2 */,\n });\n }\n\n async sendLocation(\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 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 await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send location message', {\n jid,\n latitude,\n longitude,\n name,\n address,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n async sendLocationMessage(\n to: string,\n position: { latitude: number; longitude: number },\n name?: string,\n address?: string\n ): Promise<any> {\n const { longitude, latitude } = position;\n if (!to || latitude === undefined || longitude === undefined) {\n throw new Error('sendLocation: phoneTo, latitude, and longitude are required.');\n }\n\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending location', { jid, ...position });\n }\n\n return this.socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n async sendSurveyMessage(\n to: string,\n question: string,\n options: string[],\n allowMultipleAnswers = false\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 await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const pollOptions = options;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send survey message', {\n jid,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\n });\n }\n}\n","import { type AnyMessageContent } from '@fadzzzslebew/baileys';\nimport { Readable } from 'stream';\nimport { WhatsappSocketPrivateMessages, type WhatsappSocketMessagesProps } from './whatsappSocket.private.messages';\nexport { type WhatsappSocketMessagesProps as WhatsappSocketStreamProps } from './whatsappSocket.private.messages';\nimport { MIME_TYPES } from './helpers';\n\nexport class WhatsappSocketPrivateStream extends WhatsappSocketPrivateMessages {\n constructor(props: WhatsappSocketMessagesProps) {\n super(props);\n }\n\n protected async sendFileFromStream(\n to: string,\n stream: Readable | Buffer,\n options: {\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 }\n ): Promise<any> {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateStream.formatPhoneNumberToWhatsappPattern(to);\n\n // Convert stream to buffer if needed\n const buffer = stream instanceof Buffer ? stream : await this.streamToBuffer(stream as Readable);\n\n // Auto-detect mimetype if not provided\n const mimetype = options.mimetype || this.getMimetypeFromFilename(options.filename);\n\n // Determine message type based on mimetype\n const messageContent = await this.createFileMessage(buffer, mimetype, options);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && {\n quoted: { key: { id: options.replyToMessageId } },\n }),\n };\n\n return this.socket?.sendMessage(jid, messageContent, messageOptions);\n }\n\n private async streamToBuffer(stream: Readable): 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\n private getMimetypeFromFilename(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase();\n return MIME_TYPES[ext || ''] || 'application/octet-stream';\n }\n\n private async createFileMessage(\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 ): Promise<AnyMessageContent> {\n const [type] = mimetype.split('/');\n\n switch (type) {\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\n // Helper method to send specific file types\n protected async sendImage(\n to: string,\n imageBuffer: Buffer | Readable,\n options: {\n caption?: string;\n filename?: string;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, imageBuffer, {\n filename: options.filename || 'image.jpg',\n caption: options.caption,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendVideo(\n to: string,\n videoBuffer: Buffer | Readable,\n options: {\n caption?: string;\n filename?: string;\n gifPlayback?: boolean;\n replyToMessageId?: string;\n jpegThumbnail?: Buffer;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, videoBuffer, {\n filename: options.filename || 'video.mp4',\n caption: options.caption,\n gifPlayback: options.gifPlayback,\n replyToMessageId: options.replyToMessageId,\n jpegThumbnail: options.jpegThumbnail,\n });\n }\n\n protected async sendAudio(\n to: string,\n audioBuffer: Buffer | Readable,\n options: {\n filename?: string;\n ptt?: boolean; // Voice note\n seconds?: number;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, audioBuffer, {\n filename: options.filename || 'audio.mp3',\n mimetype: options.ptt ? 'audio/ogg; codecs=opus' : '',\n ptt: options.ptt,\n seconds: options.seconds,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendDocument(\n to: string,\n documentBuffer: Buffer | Readable,\n options: {\n filename: string;\n caption?: string;\n mimetype?: string;\n replyToMessageId?: string;\n jpegThumbnail?: Buffer;\n }\n ): Promise<any> {\n return this.sendFileFromStream(to, documentBuffer, {\n filename: options.filename,\n mimetype: options.mimetype,\n caption: options.caption,\n replyToMessageId: options.replyToMessageId,\n jpegThumbnail: options.jpegThumbnail,\n });\n }\n\n protected async sendVoiceNote(\n to: string,\n audioBuffer: Buffer | Readable,\n options: {\n seconds?: number;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendAudio(to, audioBuffer, {\n ptt: true,\n seconds: options.seconds,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendSticker(\n to: string,\n stickerBuffer: Buffer | Readable,\n options: {\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateStream.formatPhoneNumberToWhatsappPattern(to);\n const buffer =\n stickerBuffer instanceof Buffer ? stickerBuffer : await this.streamToBuffer(stickerBuffer as Readable);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && {\n quoted: { key: { id: options.replyToMessageId } },\n }),\n };\n\n return this.socket?.sendMessage(jid, { sticker: buffer }, messageOptions);\n }\n}\n","import { ReadStream } from 'node:fs';\nimport { WhatsappSocketPrivateStream, type WhatsappSocketStreamProps } from './whatsappSocket.private.stream';\nimport { getAudioFileDuration, getFilenameFromStream, getUrlBuffer, streamToBuffer } from './helpers';\nimport { basename } from 'node:path';\n\nexport class WhatsappSocketPrivateFiles extends WhatsappSocketPrivateStream {\n constructor(props: WhatsappSocketStreamProps) {\n super(props);\n }\n\n async sendImageMessage(\n to: string,\n imageSrc: string | Buffer<any> | ReadStream,\n { caption = '', filename }: { caption?: string; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const imageData = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send image message', { jid, caption, filename });\n return await this.sendImage(jid, imageData, { caption, ...(filename && { filename }) });\n }\n\n async sendVideoMessage(\n to: string,\n videoSrc: string | Buffer<any> | ReadStream,\n {\n caption = '',\n filename,\n sendAsGifPlayback: gifPlayback = false,\n }: { caption?: string; sendAsGifPlayback?: boolean; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const videoBuffer = typeof videoSrc === 'string' ? await getUrlBuffer(videoSrc) : videoSrc;\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send video message', { jid, caption, filename, gifPlayback });\n return await this.sendVideo(jid, videoBuffer, { caption, gifPlayback, ...(filename && { filename }) });\n }\n\n async sendFileMessage(\n to: string,\n fileSrc: string | Buffer<any> | ReadStream,\n {\n caption = '',\n mimetype = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n replyToMessageId,\n jpegThumbnailSrc,\n filename,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n replyToMessageId?: string;\n jpegThumbnailSrc?: string | Buffer<any> | ReadStream;\n }\n ) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const fileBuffer = typeof fileSrc === 'string' ? await getUrlBuffer(fileSrc) : fileSrc;\n\n let jpegThumbnailBuffer: Buffer<any> | undefined;\n if (typeof jpegThumbnailSrc === 'string') {\n jpegThumbnailBuffer = await getUrlBuffer(jpegThumbnailSrc);\n } else if (jpegThumbnailSrc instanceof ReadStream) {\n jpegThumbnailBuffer = await streamToBuffer(jpegThumbnailSrc);\n } else {\n jpegThumbnailBuffer = jpegThumbnailSrc;\n }\n\n if (fileSrc instanceof ReadStream) {\n const fname = getFilenameFromStream(fileSrc);\n if (fname) filename = fname;\n } else if (typeof fileSrc === 'string') {\n filename = basename(fileSrc);\n }\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send file message', {\n jid,\n caption,\n mimetype,\n filename,\n replyToMessageId,\n includeJpegThumbnail: !!jpegThumbnailBuffer,\n });\n }\n\n return await this.sendDocument(jid, fileBuffer, {\n caption,\n mimetype,\n filename,\n replyToMessageId,\n jpegThumbnail: jpegThumbnailBuffer,\n });\n }\n\n async sendAudioMessage(\n to: string,\n audioSrc: string | Buffer<any> | ReadStream,\n {\n filename,\n replyToMessageId,\n mimetype,\n seconds,\n }: { filename?: string; replyToMessageId?: string; mimetype?: string; seconds?: number } = {}\n ) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const audioBuffer = typeof audioSrc === 'string' ? await getUrlBuffer(audioSrc) : audioSrc;\n let durationInSeconds = seconds || (await getAudioFileDuration(audioBuffer, mimetype).catch(() => 0));\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send audio message', {\n jid,\n mimetype,\n filename,\n seconds: durationInSeconds,\n replyToMessageId,\n });\n }\n\n return await this.sendAudio(jid, audioBuffer, {\n ...(filename && { filename }),\n ...(mimetype && { mimetype: mimetype }),\n ...(durationInSeconds && { seconds: durationInSeconds }),\n ...(replyToMessageId && { replyToMessageId: replyToMessageId }),\n });\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> | ReadStream) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const stickerBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send sticker message', { jid });\n return await this.sendSticker(jid, stickerBuffer);\n }\n}\n","import { WhatsappSocketPrivateFiles } from './whatsappSocket.private.files';\nimport type { WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\n\nexport type WhatsappSocketProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocket extends WhatsappSocketPrivateFiles {\n constructor(props: WhatsappSocketProps) {\n super(props);\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 { type MiscMessageGenerationOptions, generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport { WAProto as proto } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketGroups, type WhatsappSocketGroupsProps } from './whatsappSocket.group.management';\nimport type {\n ButtonURL,\n ButtonCopy,\n ButtonPhone,\n ButtonParamsJson,\n CallToActionButtons,\n GroupMessageOptions,\n} from './decs';\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 text message to group\n */\n async sendTextMessage(groupId: string, text: string, options?: GroupMessageOptions): Promise<any> {\n if (!groupId || !text) {\n throw new Error('sendTextMessage: Group ID and text are required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: MiscMessageGenerationOptions = {};\n\n // // Add mentions if provided\n // if (options?.mentions?.length) {\n // const formattedMentions = options.mentions.map((phone) =>\n // WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n // );\n // messageOptions.mentions = formattedMentions;\n // }\n\n // Add reply if provided\n if (options?.replyToMessageId) {\n messageOptions.quoted = { key: { id: options.replyToMessageId } };\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending text message to group', {\n groupId: formattedGroupId,\n textLength: text.length,\n hasMentions: !!options?.mentions?.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, { text }, messageOptions);\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 if (!groupId || !title || !buttons?.length) {\n throw new Error('sendButtonsMessage: Group ID, title, and buttons are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n const buttonsValue = buttons\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 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 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 formattedGroupId,\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 nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: buttonsValue,\n }),\n }),\n },\n },\n },\n { userJid: formattedGroupId }\n );\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending buttons message to group', {\n groupId: formattedGroupId,\n title,\n buttonsCount: buttonsValue.length,\n });\n }\n\n return this.socket?.relayMessage(formattedGroupId, msg.message!, { messageId: msg.key.id! });\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 if (!groupId || !title || !buttons?.length) {\n throw new Error('sendReplyButtonsMessage: Group ID, title, and buttons are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\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,\n ...(subtitle && { footer: subtitle }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending reply buttons message to group', {\n groupId: formattedGroupId,\n title,\n buttonsCount: buttonsValue.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send image to group\n */\n async sendImageMessage(\n groupId: string,\n imageBuffer: Buffer, // todo: handle also stream and string url\n { caption, mentions }: GroupMessageOptions & { caption?: string } = {}\n ): Promise<any> {\n if (!groupId || !imageBuffer) {\n throw new Error('sendImage: Group ID and image buffer are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: any = { image: imageBuffer, ...(caption && { caption }) };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending image to group', {\n groupId: formattedGroupId,\n hasCaption: !!caption,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send video to group\n */\n async sendVideoMessage(\n groupId: string,\n videoBuffer: Buffer, // todo: handle also stream and string url\n caption?: string,\n options?: GroupMessageOptions\n ): Promise<any> {\n if (!groupId || !videoBuffer) {\n throw new Error('sendVideo: Group ID and video buffer are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: any = { video: videoBuffer, ...(caption && { caption }) };\n\n if (options?.mentions?.length) {\n messageOptions.mentions = options.mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending video to group', {\n groupId: formattedGroupId,\n hasCaption: !!caption,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send audio to group\n */\n async sendAudioMessage(\n groupId: string,\n audioBuffer: Buffer, // todo: handle also stream and string url\n options?: { ptt?: boolean; mentions?: string[] }\n ): Promise<any> {\n if (!groupId || !audioBuffer) {\n throw new Error('sendAudio: Group ID and audio buffer are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: any = {\n audio: audioBuffer,\n ptt: options?.ptt ?? false, // PTT = Push To Talk (voice message)\n };\n\n if (options?.mentions?.length) {\n messageOptions.mentions = options.mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending audio to group', {\n groupId: formattedGroupId,\n isPTT: messageOptions.ptt,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send document to group\n */\n async sendDocumentMessage(\n groupId: string,\n documentBuffer: Buffer, // todo: handle also stream and string url\n fileName: string,\n mimeType?: string,\n options?: GroupMessageOptions\n ): Promise<any> {\n if (!groupId || !documentBuffer || !fileName) {\n throw new Error('sendDocument: Group ID, document buffer, and fileName are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: any = {\n document: documentBuffer,\n fileName,\n ...(mimeType && { mimetype: mimeType }),\n };\n\n if (options?.mentions?.length) {\n messageOptions.mentions = options.mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending document to group', {\n groupId: formattedGroupId,\n fileName,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send location to group\n */\n async sendLocationMessage(\n groupId: string,\n position: { latitude: number; longitude: number },\n name?: string,\n address?: string\n ): Promise<any> {\n const { longitude, latitude } = position;\n if (!groupId || latitude === undefined || longitude === undefined) {\n throw new Error('sendLocation: Group ID, latitude, and longitude are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending location to group', {\n groupId: formattedGroupId,\n latitude,\n longitude,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n /**\n * Send message mentioning all group participants\n */\n async sendMentionAll(groupId: string, text: string): Promise<any> {\n if (!groupId || !text) {\n throw new Error('sendMentionAll: Group ID and text are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\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 participants = groupMetadata.participants.map((p) => p.id);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending mention all message to group', {\n groupId: formattedGroupId,\n participantsCount: participants.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n text,\n mentions: participants,\n });\n }\n\n /**\n * Send reaction to a message in group\n */\n async sendReactionMessage(groupId: string, messageId: string, emoji: string): Promise<any> {\n if (!groupId || !messageId || !emoji) {\n throw new Error('sendReaction: Group ID, message ID, and emoji are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending reaction to group message', {\n groupId: formattedGroupId,\n messageId,\n emoji,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n react: {\n text: emoji,\n key: { id: messageId, remoteJid: formattedGroupId },\n },\n });\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 if (!groupId || !messageId) {\n throw new Error('deleteGroupMessage: Group ID and message ID are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Deleting message in group', {\n groupId: formattedGroupId,\n messageId,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n delete: {\n id: messageId,\n remoteJid: formattedGroupId,\n fromMe: true,\n },\n });\n }\n\n async sendSurveyMessage(\n groupId: string,\n question: string,\n options: string[],\n allowMultipleAnswers = false\n ): Promise<any> {\n if (!groupId || !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 await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const pollOptions = options;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send survey message', {\n groupId: formattedGroupId,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\n });\n }\n}\n","import { WhatsappSocketGroupMessages, type WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\n\nexport type WhatsappSocketGroupProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocketGroup extends WhatsappSocketGroupMessages {\n constructor(props: WhatsappSocketGroupProps) {\n super(props);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/mongoAuthState.ts","../src/helpers.ts","../src/whatsappSocket.base.ts","../src/whatsappSocket.private.messages.ts","../src/whatsappSocket.private.stream.ts","../src/whatsappSocket.private.files.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","chunks","chunk","sleep","timeout","resolve","MIME_TYPES","MIME_TO_TYPES","pinoLogger","P","WhatsappSocketBase","_WhatsappSocketBase","phone","countryCode","strNumber","message","formattedPhone","messageQuery","qr","options","QRCode","pattern","length","result","pool","buildPool","block","chars","i","start","end","c","char","upperCaseResult","props","instanceKey","fileAuthStateDirectoryPath","mongoURL","mongoCollection","logger","onOpen","onClose","onQR","onReceiveMessages","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","socket","fs","autoConnect","filename","ext","messageId","chatJid","deleteForEveryone","results","WhatsappSocketPrivateMessages","_WhatsappSocketPrivateMessages","to","text","subtitle","title","buttons","buttonsValue","btn","buttonParamsJson","name","reminderOn","reminderDate","v","msg","generateWAMessageFromContent","index","latitude","longitude","address","position","question","allowMultipleAnswers","pollOptions","WhatsappSocketPrivateStream","_WhatsappSocketPrivateStream","mimetype","messageContent","messageOptions","reject","err","imageBuffer","videoBuffer","audioBuffer","documentBuffer","stickerBuffer","WhatsappSocketPrivateFiles","_WhatsappSocketPrivateFiles","imageSrc","caption","imageData","videoSrc","gifPlayback","audioSrc","replyToMessageId","seconds","durationInSeconds","fileSrc","jpegThumbnailSrc","autoMessageClassification","jpegThumbnailBuffer","Stream","fileBuffer","basename","sendSuccess","WhatsappSocket","WhatsappSocketGroups","_WhatsappSocketGroups","groupId","participants","description","formattedParticipants","selfJid","pId","formattedGroupId","newName","fetchMetaData","e","setting","participant","action","groups","urlLink","inviteCode","highRes","reason","WhatsappSocketGroupMessages","_WhatsappSocketGroupMessages","mentions","decodedFilename","ptt","quotedOptions","documentSrc","fileName","jpegThumbnail","groupMetadata","p","emoji","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';\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 const chunks: Buffer[] = [];\n\n for await (const chunk of stream as ReadStream) {\n chunks.push(chunk);\n }\n\n return Buffer.concat(chunks);\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","// 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 { MIME_TYPES, sleep } from './helpers';\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 onReceiveMessages?: (messages: WAMessage[], type: MessageUpsertType) => 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 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 private readonly onReceiveMessages?: (messages: WAMessage[], type: MessageUpsertType) => 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 onReceiveMessages,\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.onReceiveMessages = onReceiveMessages;\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 if (!this.mongoURL) return [];\n\n const mongoClient = new MongoClient(this.mongoURL);\n await mongoClient.connect();\n const collection = mongoClient.db().collection(this.mongoCollection);\n\n return [collection, mongoClient];\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 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 // Handle messages\n if (this.onReceiveMessages && typeof this.onReceiveMessages === 'function') {\n sock.ev.on('messages.upsert', async ({ messages, type }) => {\n this.logger?.info('WHATSAPP', 'Received messages', { type, totalMessages: messages.length });\n this.onReceiveMessages?.(messages, type);\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\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 protected getMimetypeFromFilename(filename: string): string {\n const ext = filename?.split('.')?.pop()?.toLowerCase();\n return MIME_TYPES[ext || ''] || 'application/octet-stream';\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 { generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport { WAProto as proto } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketBase, type WhatsappSocketBaseProps } from './whatsappSocket.base';\nexport type { WhatsappSocketBaseProps as WhatsappSocketMessagesProps } from './whatsappSocket.base';\nimport { getTotalSeconds } from './helpers';\nimport type {\n ButtonURL,\n ButtonReminder,\n ButtonEmail,\n ButtonCopy,\n ButtonPhone,\n ButtonParamsJson,\n CallToActionButtons,\n CallToActionFullButtons,\n} from './decs';\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\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 return this.socket?.sendMessage(jid, { text });\n }\n\n async sendButtonsMessage(\n to: string,\n { subtitle, title, buttons }: { title: string; subtitle?: string; buttons: CallToActionButtons }\n ): Promise<any> {\n if (!title || !buttons.length) {\n throw new Error('sendButtonsMessage: No title or buttons required field found.');\n }\n\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 (this.debug) {\n this.logger?.debug('WHATSAPP', 'send buttons message', {\n jid,\n footer: subtitle,\n body: title,\n buttons: buttonsValue,\n });\n }\n\n return this.socket?.relayMessage(jid, msg.message!, { messageId: msg.key.id! });\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 if (!title || !buttons.length) {\n throw new Error('sendReplyButtonsMessage: No title or buttons required field found.');\n }\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\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 if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send reply buttons message', {\n jid,\n text: title,\n footer: subtitle,\n buttons: buttonsValue,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n text: title,\n ...(subtitle && { footer: subtitle }),\n buttons: buttonsValue /* type: UNKNOWN = 0, RESPONSE = 1, NATIVE_FLOW = 2 */,\n });\n }\n\n async sendLocation(\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 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 await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send location message', {\n jid,\n latitude,\n longitude,\n name,\n address,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n async sendLocationMessage(\n to: string,\n position: { latitude: number; longitude: number },\n name?: string,\n address?: string\n ): Promise<any> {\n const { longitude, latitude } = position;\n if (!to || latitude === undefined || longitude === undefined) {\n throw new Error('sendLocation: phoneTo, latitude, and longitude are required.');\n }\n\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending location', { jid, ...position });\n }\n\n return this.socket?.sendMessage(jid, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n async sendSurveyMessage(\n to: string,\n question: string,\n options: string[],\n allowMultipleAnswers = false\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 await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateMessages.formatPhoneNumberToWhatsappPattern(to);\n const pollOptions = options;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send survey message', {\n jid,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return this.socket?.sendMessage(jid, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\n });\n }\n}\n","import { type AnyMessageContent } from '@fadzzzslebew/baileys';\nimport { Readable } from 'stream';\nimport { WhatsappSocketPrivateMessages, type WhatsappSocketMessagesProps } from './whatsappSocket.private.messages';\nexport { type WhatsappSocketMessagesProps as WhatsappSocketStreamProps } from './whatsappSocket.private.messages';\nimport type Stream from 'node:stream';\n\nexport class WhatsappSocketPrivateStream extends WhatsappSocketPrivateMessages {\n constructor(props: WhatsappSocketMessagesProps) {\n super(props);\n }\n\n protected async sendFileFromStream(\n to: string,\n stream: Stream | Buffer,\n options: {\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 }\n ): Promise<any> {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateStream.formatPhoneNumberToWhatsappPattern(to);\n\n // Convert stream to buffer if needed\n const buffer = stream instanceof Buffer ? stream : await this.streamToBuffer(stream as Readable);\n\n // Auto-detect mimetype if not provided\n const mimetype = options.mimetype || this.getMimetypeFromFilename(options.filename);\n\n // Determine message type based on mimetype\n const messageContent = await this.createFileMessage(buffer, mimetype, options);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && {\n quoted: { key: { id: options.replyToMessageId } },\n }),\n };\n\n return this.socket?.sendMessage(jid, messageContent, messageOptions);\n }\n\n private async 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\n private async createFileMessage(\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 ): Promise<AnyMessageContent> {\n const [type] = mimetype.split('/');\n\n switch (type) {\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\n // Helper method to send specific file types\n protected async sendImage(\n to: string,\n imageBuffer: Buffer | Stream,\n options: {\n caption?: string;\n filename?: string;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, imageBuffer, {\n filename: options.filename || 'image.jpg',\n caption: options.caption,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendVideo(\n to: string,\n videoBuffer: Buffer | Stream,\n options: {\n caption?: string;\n filename?: string;\n gifPlayback?: boolean;\n replyToMessageId?: string;\n jpegThumbnail?: Buffer;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, videoBuffer, {\n filename: options.filename || 'video.mp4',\n caption: options.caption,\n gifPlayback: options.gifPlayback,\n replyToMessageId: options.replyToMessageId,\n jpegThumbnail: options.jpegThumbnail,\n });\n }\n\n protected async sendAudio(\n to: string,\n audioBuffer: Buffer | Stream,\n options: {\n filename?: string;\n ptt?: boolean; // Voice note\n seconds?: number;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendFileFromStream(to, audioBuffer, {\n filename: options.filename || 'audio.mp3',\n mimetype: options.ptt ? 'audio/ogg; codecs=opus' : '',\n ptt: options.ptt,\n seconds: options.seconds,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendDocument(\n to: string,\n documentBuffer: Buffer | Stream,\n options: {\n filename: string;\n caption?: string;\n mimetype?: string;\n replyToMessageId?: string;\n jpegThumbnail?: Buffer;\n }\n ): Promise<any> {\n return this.sendFileFromStream(to, documentBuffer, {\n filename: options.filename,\n mimetype: options.mimetype,\n caption: options.caption,\n replyToMessageId: options.replyToMessageId,\n jpegThumbnail: options.jpegThumbnail,\n });\n }\n\n protected async sendVoiceNote(\n to: string,\n audioBuffer: Buffer | Stream,\n options: {\n seconds?: number;\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n return this.sendAudio(to, audioBuffer, {\n ptt: true,\n seconds: options.seconds,\n replyToMessageId: options.replyToMessageId,\n });\n }\n\n protected async sendSticker(\n to: string,\n stickerBuffer: Buffer | Stream,\n options: {\n replyToMessageId?: string;\n } = {}\n ): Promise<any> {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateStream.formatPhoneNumberToWhatsappPattern(to);\n const buffer =\n stickerBuffer instanceof Buffer ? stickerBuffer : await this.streamToBuffer(stickerBuffer as Readable);\n\n const messageOptions: any = {\n ...(options.replyToMessageId && {\n quoted: { key: { id: options.replyToMessageId } },\n }),\n };\n\n return this.socket?.sendMessage(jid, { sticker: buffer }, messageOptions);\n }\n}\n","import { WhatsappSocketPrivateStream, type WhatsappSocketStreamProps } from './whatsappSocket.private.stream';\nimport { getAudioFileDuration, getFilenameFromStream, getUrlBuffer, MIME_TO_TYPES, streamToBuffer } from './helpers';\nimport { basename } from 'node:path';\nimport Stream from 'node:stream';\nimport { ReadStream } from 'node:fs';\n\nexport class WhatsappSocketPrivateFiles extends WhatsappSocketPrivateStream {\n constructor(props: WhatsappSocketStreamProps) {\n super(props);\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\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const imageData = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send image message', { jid, caption, filename });\n return await this.sendImage(jid, imageData, { caption, ...(filename && { filename }) });\n }\n\n async sendVideoMessage(\n to: string,\n videoSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n filename,\n sendAsGifPlayback: gifPlayback = false,\n }: { caption?: string; sendAsGifPlayback?: boolean; filename?: string } = {}\n ) {\n await this.ensureSocketConnected();\n\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const videoBuffer = typeof videoSrc === 'string' ? await getUrlBuffer(videoSrc) : videoSrc;\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send video message', { jid, caption, filename, gifPlayback });\n return await this.sendVideo(jid, videoBuffer, { caption, gifPlayback, ...(filename && { filename }) });\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\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const audioBuffer = typeof audioSrc === 'string' ? await getUrlBuffer(audioSrc) : audioSrc;\n let durationInSeconds =\n seconds || (await getAudioFileDuration(audioBuffer as ReadStream, mimetype).catch(() => 0));\n filename = filename && decodeURIComponent(filename);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send audio message', {\n jid,\n mimetype,\n filename,\n seconds: durationInSeconds,\n replyToMessageId,\n });\n }\n\n return await this.sendAudio(jid, audioBuffer, {\n ...(filename && { filename }),\n ...(mimetype && { mimetype: mimetype }),\n ...(durationInSeconds && { seconds: durationInSeconds }),\n ...(replyToMessageId && { replyToMessageId: replyToMessageId }),\n });\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\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\n const stickerBuffer = typeof imageSrc === 'string' ? await getUrlBuffer(imageSrc) : imageSrc;\n\n if (this.debug) this.logger?.debug('WHATSAPP', 'send sticker message', { jid });\n return await this.sendSticker(jid, stickerBuffer);\n }\n\n async sendFileMessage(\n to: string,\n fileSrc: string | Buffer<any> | Stream,\n {\n caption = '',\n mimetype,\n replyToMessageId,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n replyToMessageId?: string;\n jpegThumbnailSrc?: string | Buffer<any> | Stream;\n }\n ) {\n await this.ensureSocketConnected();\n const jid = WhatsappSocketPrivateFiles.formatPhoneNumberToWhatsappPattern(to);\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 filename = filename && decodeURIComponent(filename);\n\n mimetype ||= this.getMimetypeFromFilename(filename);\n mimetype = mimetype?.toLowerCase();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send file message', {\n jid,\n caption,\n mimetype,\n filename,\n replyToMessageId,\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 this.sendImageMessage(jid, fileBuffer, {\n caption,\n filename,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Sticker':\n response = await this.sendStickerMessage(jid, fileBuffer).catch(() => (sendSuccess = false));\n break;\n case 'Video':\n response = await this.sendVideoMessage(jid, fileBuffer, {\n caption,\n filename,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Audio':\n response = await this.sendAudioMessage(jid, fileBuffer, {\n mimetype,\n filename,\n replyToMessageId,\n }).catch(() => (sendSuccess = false));\n break;\n default:\n return await this.sendDocument(jid, fileBuffer, {\n caption,\n mimetype,\n filename,\n replyToMessageId,\n jpegThumbnail: jpegThumbnailBuffer,\n });\n }\n }\n\n if (response && sendSuccess) return response;\n if (!autoMessageClassification || !sendSuccess) {\n return await this.sendDocument(jid, fileBuffer, {\n caption,\n mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n filename,\n replyToMessageId,\n jpegThumbnail: jpegThumbnailBuffer,\n });\n }\n }\n}\n","import { WhatsappSocketPrivateFiles } from './whatsappSocket.private.files';\nimport type { WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\n\nexport type WhatsappSocketProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocket extends WhatsappSocketPrivateFiles {\n constructor(props: WhatsappSocketProps) {\n super(props);\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 { type MiscMessageGenerationOptions, generateWAMessageFromContent } from '@fadzzzslebew/baileys';\nimport { WAProto as proto } from '@fadzzzslebew/baileys';\nimport { WhatsappSocketGroups, type WhatsappSocketGroupsProps } from './whatsappSocket.group.management';\nimport type {\n ButtonURL,\n ButtonCopy,\n ButtonPhone,\n ButtonParamsJson,\n CallToActionButtons,\n GroupMessageOptions,\n} from './decs';\nimport Stream from 'node:stream';\nimport { getAudioFileDuration, getFilenameFromStream, getUrlBuffer, MIME_TO_TYPES, streamToBuffer } from './helpers.ts';\nimport { basename } from 'node:path';\nimport { ReadStream } from 'node:fs';\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 text message to group\n */\n async sendTextMessage(groupId: string, text: string, options?: GroupMessageOptions): Promise<any> {\n if (!groupId || !text) {\n throw new Error('sendTextMessage: Group ID and text are required.');\n }\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const messageOptions: MiscMessageGenerationOptions = {};\n\n // // Add mentions if provided\n // if (options?.mentions?.length) {\n // const formattedMentions = options.mentions.map((phone) =>\n // WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n // );\n // messageOptions.mentions = formattedMentions;\n // }\n\n // Add reply if provided\n if (options?.replyToMessageId) {\n messageOptions.quoted = { key: { id: options.replyToMessageId } };\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending text message to group', {\n groupId: formattedGroupId,\n textLength: text.length,\n hasMentions: !!options?.mentions?.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, { text }, messageOptions);\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 if (!groupId || !title || !buttons?.length) {\n throw new Error('sendButtonsMessage: Group ID, title, and buttons are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n const buttonsValue = buttons\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 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 formattedGroupId,\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 nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n buttons: buttonsValue,\n }),\n }),\n },\n },\n },\n { userJid: formattedGroupId }\n );\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending buttons message to group', {\n groupId: formattedGroupId,\n title,\n buttonsCount: buttonsValue.length,\n });\n }\n\n return this.socket?.relayMessage(formattedGroupId, msg.message!, { messageId: msg.key.id! });\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 if (!groupId || !title || !buttons?.length) {\n throw new Error('sendReplyButtonsMessage: Group ID, title, and buttons are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\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,\n ...(subtitle && { footer: subtitle }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending reply buttons message to group', {\n groupId: formattedGroupId,\n title,\n buttonsCount: buttonsValue.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send image to group\n */\n async sendImageMessage(\n groupId: string,\n imageSrc: string | Buffer | Stream,\n { caption = '', filename, mentions }: GroupMessageOptions & { caption?: string; filename?: string } = {}\n ): Promise<any> {\n if (!groupId || !imageSrc) {\n throw new Error('sendImageMessage: Group ID and image source are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const imageBuffer =\n typeof imageSrc === 'string'\n ? await getUrlBuffer(imageSrc)\n : imageSrc instanceof Stream\n ? await streamToBuffer(imageSrc)\n : imageSrc;\n\n const decodedFilename = filename && decodeURIComponent(filename);\n\n const messageOptions: any = {\n image: imageBuffer,\n ...(caption && { caption }),\n ...(decodedFilename && { filename: decodedFilename }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending image to group', {\n groupId: formattedGroupId,\n hasCaption: !!caption,\n filename: decodedFilename,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\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: gifPlayback = false,\n mentions,\n }: GroupMessageOptions & {\n caption?: string;\n filename?: string;\n sendAsGifPlayback?: boolean;\n } = {}\n ): Promise<any> {\n if (!groupId || !videoSrc) {\n throw new Error('sendVideoMessage: Group ID and video source are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const videoBuffer =\n typeof videoSrc === 'string'\n ? await getUrlBuffer(videoSrc)\n : videoSrc instanceof Stream\n ? await streamToBuffer(videoSrc)\n : videoSrc;\n\n const decodedFilename = filename && decodeURIComponent(filename);\n\n const messageOptions: any = {\n video: videoBuffer,\n ...(caption && { caption }),\n gifPlayback,\n ...(decodedFilename && { filename: decodedFilename }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending video to group', {\n groupId: formattedGroupId,\n hasCaption: !!caption,\n filename: decodedFilename,\n gifPlayback,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions);\n }\n\n /**\n * Send audio to group\n */\n async sendAudioMessage(\n groupId: string,\n audioSrc: string | Buffer | Stream,\n {\n filename,\n replyToMessageId,\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 if (!groupId || !audioSrc) {\n throw new Error('sendAudioMessage: Group ID and audio source are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const audioBuffer =\n typeof audioSrc === 'string'\n ? await getUrlBuffer(audioSrc)\n : audioSrc instanceof Stream\n ? await streamToBuffer(audioSrc)\n : audioSrc;\n\n let durationInSeconds =\n seconds || (await getAudioFileDuration(audioBuffer as unknown as ReadStream, mimetype).catch(() => 0));\n\n const decodedFilename = filename && decodeURIComponent(filename);\n\n const messageOptions: any = {\n audio: audioBuffer,\n ptt, // PTT = Push To Talk (voice message)\n ...(decodedFilename && { filename: decodedFilename }),\n ...(mimetype && { mimetype }),\n ...(durationInSeconds && { seconds: durationInSeconds }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n const quotedOptions: any = {};\n if (replyToMessageId) {\n quotedOptions.quoted = { key: { id: replyToMessageId } };\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending audio to group', {\n groupId: formattedGroupId,\n isPTT: ptt,\n mimetype,\n filename: decodedFilename,\n seconds: durationInSeconds,\n replyToMessageId,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions, quotedOptions);\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 replyToMessageId,\n jpegThumbnail,\n mentions,\n }: {\n fileName: string;\n caption?: string;\n mimetype?: string;\n replyToMessageId?: string;\n jpegThumbnail?: Buffer;\n mentions?: string[];\n }\n ): Promise<any> {\n if (!groupId || !documentSrc || !fileName) {\n throw new Error('sendDocumentMessage: Group ID, document source, and fileName are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const documentBuffer =\n typeof documentSrc === 'string'\n ? await getUrlBuffer(documentSrc)\n : documentSrc instanceof Stream\n ? await streamToBuffer(documentSrc)\n : documentSrc;\n\n const decodedFilename = fileName && decodeURIComponent(fileName);\n\n const messageOptions: any = {\n document: documentBuffer,\n fileName: decodedFilename,\n ...(caption && { caption }),\n ...(mimetype && { mimetype }),\n ...(jpegThumbnail && { jpegThumbnail }),\n };\n\n if (mentions?.length) {\n messageOptions.mentions = mentions.map((phone) =>\n WhatsappSocketGroupMessages.formatPhoneNumberToWhatsappPattern(phone)\n );\n }\n\n const quotedOptions: any = {};\n if (replyToMessageId) {\n quotedOptions.quoted = { key: { id: replyToMessageId } };\n }\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending document to group', {\n groupId: formattedGroupId,\n fileName: decodedFilename,\n mimetype,\n hasCaption: !!caption,\n hasThumbnail: !!jpegThumbnail,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, messageOptions, quotedOptions);\n }\n\n /**\n * Send location to group\n */\n async sendLocationMessage(\n groupId: string,\n position: { latitude: number; longitude: number },\n name?: string,\n address?: string\n ): Promise<any> {\n const { longitude, latitude } = position;\n if (!groupId || latitude === undefined || longitude === undefined) {\n throw new Error('sendLocationMessage: Group ID, latitude, and longitude are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending location to group', {\n groupId: formattedGroupId,\n latitude,\n longitude,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n location: {\n degreesLatitude: latitude,\n degreesLongitude: longitude,\n ...(name && { name }),\n ...(address && { address }),\n },\n });\n }\n\n /**\n * Send message mentioning all group participants\n */\n async sendMentionAll(groupId: string, text: string): Promise<any> {\n if (!groupId || !text) {\n throw new Error('sendMentionAll: Group ID and text are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\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 participants = groupMetadata.participants.map((p) => p.id);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending mention all message to group', {\n groupId: formattedGroupId,\n participantsCount: participants.length,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n text,\n mentions: participants,\n });\n }\n\n /**\n * Send reaction to a message in group\n */\n async sendReactionMessage(groupId: string, messageId: string, emoji: string): Promise<any> {\n if (!groupId || !messageId || !emoji) {\n throw new Error('sendReactionMessage: Group ID, message ID, and emoji are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Sending reaction to group message', {\n groupId: formattedGroupId,\n messageId,\n emoji,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n react: {\n text: emoji,\n key: { id: messageId, remoteJid: formattedGroupId },\n },\n });\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 if (!groupId || !messageId) {\n throw new Error('deleteGroupMessage: Group ID and message ID are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'Deleting message in group', {\n groupId: formattedGroupId,\n messageId,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n delete: {\n id: messageId,\n remoteJid: formattedGroupId,\n fromMe: true,\n },\n });\n }\n\n async sendSurveyMessage(\n groupId: string,\n question: string,\n options: string[],\n allowMultipleAnswers = false\n ): Promise<any> {\n if (!groupId || !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 await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const pollOptions = options;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send survey message', {\n groupId: formattedGroupId,\n question,\n options: pollOptions,\n allowMultipleAnswers,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, {\n poll: {\n name: question,\n values: pollOptions,\n selectableCount: allowMultipleAnswers ? options.length : 1,\n },\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(groupId: string, imageSrc: string | Buffer | Stream): Promise<any> {\n if (!groupId || !imageSrc) {\n throw new Error('sendStickerMessage: Group ID and image source are required.');\n }\n\n await this.ensureSocketConnected();\n\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n const stickerBuffer =\n typeof imageSrc === 'string'\n ? await getUrlBuffer(imageSrc)\n : imageSrc instanceof Stream\n ? await streamToBuffer(imageSrc)\n : imageSrc;\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send sticker message', {\n groupId: formattedGroupId,\n });\n }\n\n return this.socket?.sendMessage(formattedGroupId, { sticker: stickerBuffer });\n }\n\n async sendFileMessage(\n groupId: string,\n fileSrc: string | Buffer | Stream,\n {\n caption = '',\n mimetype,\n replyToMessageId,\n jpegThumbnailSrc,\n autoMessageClassification = true,\n filename,\n }: {\n caption?: string;\n mimetype?: string;\n filename: string;\n autoMessageClassification?: boolean;\n replyToMessageId?: string;\n jpegThumbnailSrc?: string | Buffer | Stream;\n }\n ): Promise<any> {\n await this.ensureSocketConnected();\n const formattedGroupId = WhatsappSocketGroupMessages.formatGroupId(groupId);\n\n let jpegThumbnailBuffer: Buffer | 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 let fileBuffer: Buffer;\n if (typeof fileSrc === 'string') {\n fileBuffer = await getUrlBuffer(fileSrc);\n filename = filename || basename(fileSrc);\n } else if (fileSrc instanceof Stream) {\n fileBuffer = await streamToBuffer(fileSrc);\n const fname = getFilenameFromStream(fileSrc);\n if (fname) filename = fname;\n } else {\n fileBuffer = fileSrc;\n }\n\n filename = filename && decodeURIComponent(filename);\n mimetype ||= this.getMimetypeFromFilename(filename);\n mimetype = mimetype?.toLowerCase();\n\n if (this.debug) {\n this.logger?.debug('WHATSAPP', 'send file message', {\n groupId: formattedGroupId,\n caption,\n mimetype,\n filename,\n replyToMessageId,\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 this.sendImageMessage(formattedGroupId, fileBuffer, {\n caption,\n filename,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Sticker':\n response = await this.sendStickerMessage(formattedGroupId, fileBuffer).catch(\n () => (sendSuccess = false)\n );\n break;\n case 'Video':\n response = await this.sendVideoMessage(formattedGroupId, fileBuffer, {\n caption,\n filename,\n }).catch(() => (sendSuccess = false));\n break;\n case 'Audio':\n response = await this.sendAudioMessage(formattedGroupId, fileBuffer, {\n mimetype,\n filename,\n replyToMessageId,\n }).catch(() => (sendSuccess = false));\n break;\n default:\n return await this.sendDocumentMessage(formattedGroupId, fileBuffer, {\n fileName: filename,\n caption,\n mimetype,\n replyToMessageId,\n jpegThumbnail: jpegThumbnailBuffer,\n });\n }\n }\n\n if (response && sendSuccess) return response;\n if (!autoMessageClassification || !sendSuccess) {\n return await this.sendDocumentMessage(formattedGroupId, fileBuffer, {\n fileName: filename,\n caption,\n mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n replyToMessageId,\n jpegThumbnail: jpegThumbnailBuffer,\n });\n }\n }\n}\n","import { WhatsappSocketGroupMessages, type WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\n\nexport type WhatsappSocketGroupProps = WhatsappSocketGroupMessagesProps;\n\nexport class WhatsappSocketGroup extends WhatsappSocketGroupMessages {\n constructor(props: WhatsappSocketGroupProps) {\n super(props);\n }\n}\n"]}
|