@hdriel/whatsapp-socket 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ 'use strict';var ne=require('fs'),_=require('@fadzzzslebew/baileys'),F=require('ms'),H=require('qrcode'),mongodb=require('mongodb'),re=require('pino'),path=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ne__default=/*#__PURE__*/_interopDefault(ne);var ___default=/*#__PURE__*/_interopDefault(_);var F__default=/*#__PURE__*/_interopDefault(F);var H__default=/*#__PURE__*/_interopDefault(H);var re__default=/*#__PURE__*/_interopDefault(re);var x={replacer:(n,e)=>Buffer.isBuffer(e)||e instanceof Uint8Array||e?.type==="Buffer"?{type:"Buffer",data:Buffer.from(e?.data||e).toString("base64")}:e,reviver:(n,e)=>{if(typeof e=="object"&&e&&(e.buffer===true||e.type==="Buffer")){let s=e.data||e.value;return typeof s=="string"?Buffer.from(s,"base64"):Buffer.from(s||[])}return e}},Y=async n=>{let e=(r,a)=>{let i={$set:{...JSON.parse(JSON.stringify(r,x.replacer))}};return n.updateOne({_id:a},i,{upsert:true})},s=async r=>{try{let a=JSON.stringify(await n.findOne({_id:r}));return JSON.parse(a,x.reviver)}catch{return null}},t=async r=>{try{await n.deleteOne({_id:r});}catch{}},o=await s("creds")||_.initAuthCreds();return {state:{creds:o,keys:{get:async(r,a)=>{let c={};return await Promise.all(a.map(async i=>{let g=await s(`${r}-${i}`);r==="app-state-sync-key"&&g&&(g=_.WAProto.Message.AppStateSyncKeyData.fromObject(g)),c[i]=g;})),c},set:async r=>{let a=[];for(let c of Object.keys(r))for(let i of Object.keys(r[c])){let g=r[c][i],u=`${c}-${i}`;a.push(g?e(g,u):t(u));}await Promise.all(a);}}},saveCreds:()=>e(o,"creds")}},D=Y;var O=n=>F__default.default(n)/1e3;async function p(n){let s=await(await fetch(n)).arrayBuffer();return Buffer.from(s)}async function X(n,e){try{let{parseStream:s}=await import('music-metadata'),t=await s(n,{mimeType:e||"audio/mpeg"});return Math.floor(t.format.duration||0)}catch(s){throw console.error("Error parsing stream:",s),s}finally{n.destroyed||n.destroy();}}async function Z(n,e){try{let{parseBuffer:s}=await import('music-metadata'),t=await s(n,e||"audio/mpeg").catch(()=>null);return t?Math.floor(t.format.duration||0):0}catch(s){throw console.error("Error parsing buffer:",s),s}}async function E(n,e){return n instanceof ne.ReadStream?X(n,e):Z(n,e)}async function L(n){let e=[];for await(let s of n)e.push(s);return Buffer.concat(e)}function U(n){if(n.path){let e=n.path.toString();return path.basename(e)}}var b=n=>new Promise(e=>setTimeout(e,typeof n=="number"?n:F__default.default(n))),j={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",svg:"image/svg+xml",mp4:"video/mp4",avi:"video/x-msvideo",mov:"video/quicktime",mkv:"video/x-matroska",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",opus:"audio/opus",aac:"audio/aac",m4a:"audio/mp4",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"application/vnd.ms-powerpoint",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",txt:"text/plain",zip:"application/zip",rar:"application/x-rar-compressed","7z":"application/x-7z-compressed"};var J=re__default.default({level:"silent"}),C=class n{fileAuthStateDirectoryPath;mongoURL;mongoCollection="whatsapp-auth";logger;debug;printQRInTerminal;pairingPhone;customPairingCode;appName;onPreConnectionSendMessageFailed;onOpen;onClose;onQR;onConnectionStatusChange;onReceiveMessages;static DEFAULT_COUNTRY_CODE="972";static CONNECTION_TIMEOUT="2s";static formatPhoneNumber(e,s=n.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let t=e.replace(/[^0-9]/g,"");return t.startsWith("05")&&(t=t.substring(1)),t.startsWith(s)||(t=s+t),t}static formatPhoneNumberToWhatsappPattern(e,s=n.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let t=n.formatPhoneNumber(e,s);return t=`${t}@s.whatsapp.net`,t.replace(/:\d+@/,"@")}static getWhatsappPhoneLink({phone:e,message:s,countryCode:t=n.DEFAULT_COUNTRY_CODE}){let o=this.formatPhoneNumber(e,t),r=s?`?text=${encodeURI(s)}`:"";return `https://wa.me/${o}${r}`}static async qrToImage(e,s={}){return H__default.default.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...s})}static async qrToTerminalString(e,s={}){return H__default.default.toString(e,{type:"terminal",small:true,...s})}static randomPairingCode(e,s=8){if(!e.includes("[")&&e.length===s)return e;let t="",o=[],r=c=>{let i=[];for(let g=0;g<c.length;g++)if(c[g+1]==="-"&&c[g+2]){let u=c.charCodeAt(g),l=c.charCodeAt(g+2);for(let d=u;d<=l;d++)i.push(String.fromCharCode(d));g+=2;}else i.push(c[g]);return i};for(let c=0;c<e.length&&t.length<s;c++){let i=e[c];if(i==="["){let g=e.indexOf("]",c),u=e.slice(c+1,g);o=r(u),c=g;}else t+=i;}for(;t.length<s&&o.length;)t+=o[Math.floor(Math.random()*o.length)];let a=t.toUpperCase();return a.padEnd(s,a)}static instances=new Map;static getInstance(e){let s=n.buildSocketKey(e);return n.instances.has(s)||new n(e),n.instances.get(s)}static clearInstance(e){e?n.instances.delete(e):n.instances.clear();}constructor(e){let{fileAuthStateDirectoryPath:s,mongoURL:t,mongoCollection:o="whatsapp-auth",logger:r,onOpen:a,onClose:c,onQR:i,onReceiveMessages:g,onConnectionStatusChange:u,debug:l,printQRInTerminal:d,pairingPhone:R,customPairingCode:S,onPreConnectionSendMessageFailed:W,appName:h}=e;this.appName=h,this.mongoURL=t,this.fileAuthStateDirectoryPath=s,this.mongoCollection=o,this.logger=r,this.debug=l,this.printQRInTerminal=d,this.pairingPhone=R,this.customPairingCode=S,this.onPreConnectionSendMessageFailed=W,this.onConnectionStatusChange=u,this.onReceiveMessages=g,this.onOpen=a,this.onClose=c,this.onQR=i,n.instances.has(this.socketKey)&&(this.socket=n.instances.get(this.socketKey));}async getLatestWhatsAppVersion(){try{let e=["https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json","https://raw.githubusercontent.com/whiskeysockets/baileys/master/src/Defaults/baileys-version.json"];for(let s of e)try{let t=await fetch(s);if(t.ok)return (await t.json()).version}catch{continue}return console.log("Could not fetch version, using fallback"),[2,3e3,1015901307]}catch(e){return console.error("Error fetching version:",e),[2,3e3,1015901307]}}async getAuthCollection(){if(!this.mongoURL)return [];let e=new mongodb.MongoClient(this.mongoURL);return await e.connect(),[e.db().collection(this.mongoCollection),e]}async authenticate(){if(!this.mongoURL&&!this.fileAuthStateDirectoryPath)throw new Error("fileAuthStateDirectoryPath/MongoURL is missing");if(!this.mongoURL){let{saveCreds:r,state:a}=await _.useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:a,saveCreds:r}}let[e]=await this.getAuthCollection(),{state:s,saveCreds:t}=await D(e);return {auth:{creds:s.creds,keys:_.makeCacheableSignalKeyStore(s.keys,J)},saveCreds:t}}static buildSocketKey(e){return e.appName||e.pairingPhone||e.mongoCollection||e.fileAuthStateDirectoryPath||"default"}get socketKey(){return this.appName||this.pairingPhone||this.mongoCollection||this.fileAuthStateDirectoryPath||"default"}get socket(){return n.instances.get(this.socketKey)??null}set socket(e){n.instances.set(this.socketKey,e);}async startConnection({options:e,connectionAttempts:s=3,onOpen:t=this.onOpen,onClose:o=this.onClose,onQR:r=this.onQR,onConnectionStatusChange:a=this.onConnectionStatusChange,pairingPhone:c,debug:i}={}){let g=c??this.pairingPhone,{saveCreds:u,auth:l}=await this.authenticate(),d=i===void 0?this.debug:i,R=await this.getLatestWhatsAppVersion(),S=async()=>new Promise(h=>{let y=___default.default({version:R,logger:J,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:true,shouldIgnoreJid:f=>f.includes("@newsletter"),...e,printQRInTerminal:false,auth:l});y.ev.on("connection.update",async f=>{let{connection:w,lastDisconnect:N,qr:T}=f;if(T){if(d&&this.logger?.info("WHATSAPP","QR Code received",{qr:T}),this.printQRInTerminal){let V=await n.qrToTerminalString(T,{small:true}).catch(()=>null);console.log(V);}this.customPairingCode?n.randomPairingCode(this.customPairingCode):void 0;let P=g?n.formatPhoneNumber(g):null,k=P?await y.requestPairingCode(P):null;d&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:k,pairingPhone:P}),await r?.(T,k);}switch(w){case "connecting":{d&&this.logger?.debug("WHATSAPP","Connecting..."),a?.("connecting");break}case "open":{d&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=y,await t?.(),a?.("open"),h(this.socket);break}case "close":{let I=s-- >0&&N?.error?.output?.statusCode!==_.DisconnectReason.loggedOut,P=N?.error?.output?.statusCode,k=N?.error?.message;d&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:P,errorMessage:k,shouldReconnect:I}),I&&s?(d&&this.logger?.info("WHATSAPP","Reconnecting..."),await b(n.CONNECTION_TIMEOUT),h(S())):(d&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,h(this.socket)),a?.("close");break}}}),y.ev.on("creds.update",u),this.onReceiveMessages&&typeof this.onReceiveMessages=="function"&&y.ev.on("messages.upsert",async({messages:f,type:w})=>{this.logger?.info("WHATSAPP","Received messages",{type:w,totalMessages:f.length}),this.onReceiveMessages?.(f,w);});}),W=await S();return await b(n.CONNECTION_TIMEOUT),W}async ensureSocketConnected(){return this.socket||(this.debug&&this.logger?.warn("WHATSAPP","Client not connected, attempting to connect..."),this.socket=await this.startConnection().catch(e=>(this.onPreConnectionSendMessageFailed?.(e),null))),this.socket}async closeConnection(){this.socket&&(this.debug&&this.logger?.info("WHATSAPP","Closing connection"),this.socket.end(void 0),this.socket=null);}async clearAuthState(){if(await this.closeConnection(),this.mongoURL){let[e,s]=await this.getAuthCollection();this.debug&&this.logger?.info("WHATSAPP","Deleting auth state, required to scanning QR again"),await e?.deleteMany({}),await s?.close();}else this.fileAuthStateDirectoryPath&&ne__default.default.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:s=true}={}){await this.clearAuthState(),s&&(await b(n.CONNECTION_TIMEOUT),await this.startConnection({pairingPhone:e}));}isConnected(){return !!this.socket?.user}async deleteMessage(e,s,t=true){if(await this.ensureSocketConnected(),!this.socket)throw new Error("Socket not connected");let o=n.formatPhoneNumberToWhatsappPattern(s);try{if(t){let r=await this.socket.sendMessage(o,{delete:{remoteJid:o,fromMe:!0,id:e,participant:void 0}});return this.debug&&this.logger?.info("WHATSAPP","Message deleted for everyone",{messageId:e,chatJid:o}),r}else throw this.debug&&this.logger?.warn("WHATSAPP","Delete for me is not supported via API",{messageId:e,chatJid:o,reason:["Delete for me only (clear message locally)",`Note: This doesn't work via API - WhatsApp doesn't support "delete for me" via Baileys`,"We can only revoke messages (delete for everyone)"].join(`
2
+ `)}),new Error("Delete for me is not supported via WhatsApp API. Use deleteForEveryone=true to revoke the message.")}catch(r){throw this.debug&&this.logger?.error("WHATSAPP","Failed to delete message",{messageId:e,chatJid:o,error:r.message}),r}}async deleteMessages(e,s=true){await this.ensureSocketConnected();let t=[];for(let{messageId:o,chatJid:r}of e)try{let a=await this.deleteMessage(o,r,s);t.push({success:!0,messageId:o,result:a}),await b("500ms");}catch(a){t.push({success:false,messageId:o,error:a.message});}return t}async loadRecentMessages(e,s){await this.ensureSocketConnected();let t=n.formatPhoneNumberToWhatsappPattern(e);try{return await this.socket?.waitForMessage(s,3e3)||null}catch(o){return this.debug&&this.logger?.error("WHATSAPP","Failed to load message history",{chatJid:t,error:o.message}),null}}};var A=class n extends C{constructor(e){super(e);}async deleteMessageById(e,s){return this.deleteMessage(e,s,true)}async sendTextMessage(e,s){await this.ensureSocketConnected();let t=n.formatPhoneNumberToWhatsappPattern(e);return this.socket?.sendMessage(t,{text:s})}async sendButtonsMessage(e,{subtitle:s,title:t,buttons:o}){if(!t||!o.length)throw new Error("sendButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=o?.map(i=>{let g={display_text:i.label},u;switch(true){case !!i.url:u="cta_url",g.url=i.url;break;case !!i.copy:u="cta_copy",g.copy_code=i.copy;break;case !!i.tel:u="cta_call",g.phone_number=i.tel;break;case !!i.email:u="cta_email",g.email=i.email;break;case !!(i.reminderOn||i.reminderDate):u="cta_reminder";let{reminderOn:l,reminderDate:d}=i;g.reminder_name=i.reminderName,g.reminder_timestamp=d?Math.floor(+new Date(d)/1e3):Math.floor(Date.now()/1e3)+O(l??"0s");break;default:u="";break}return {name:u,buttonParamsJson:JSON.stringify(g)}}).filter(i=>i.name),c=_.generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:_.WAProto.Message.InteractiveMessage.create({...t&&{body:_.WAProto.Message.InteractiveMessage.Body.create({text:t})},...s&&{footer:_.WAProto.Message.InteractiveMessage.Footer.create({text:s})},...!!a?.length&&{nativeFlowMessage:_.WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:a})}})}}},{userJid:r});return this.debug&&this.logger?.debug("WHATSAPP","send buttons message",{jid:r,footer:s,body:t,buttons:a}),this.socket?.relayMessage(r,c.message,{messageId:c.key.id})}async sendReplyButtonsMessage(e,{title:s,subtitle:t,buttons:o}){if(!s||!o.length)throw new Error("sendReplyButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=o.filter(c=>c).map((c,i)=>typeof c=="string"?{buttonId:`id-${i}`,buttonText:{displayText:c},type:1}:{buttonId:`${c.id}`,buttonText:{displayText:c.label},type:1});return this.debug&&this.logger?.debug("WHATSAPP","send reply buttons message",{jid:r,text:s,footer:t,buttons:a}),this.socket?.sendMessage(r,{text:s,...t&&{footer:t},buttons:a})}async sendLocation(e,{latitude:s,longitude:t,name:o,address:r}){if(s===void 0||t===void 0)throw new Error("sendLocation: latitude and longitude are required fields.");if(s<-90||s>90)throw new Error("sendLocation: latitude must be between -90 and 90.");if(t<-180||t>180)throw new Error("sendLocation: longitude must be between -180 and 180.");await this.ensureSocketConnected();let a=n.formatPhoneNumberToWhatsappPattern(e);return this.debug&&this.logger?.debug("WHATSAPP","send location message",{jid:a,latitude:s,longitude:t,name:o,address:r}),this.socket?.sendMessage(a,{location:{degreesLatitude:s,degreesLongitude:t,...o&&{name:o},...r&&{address:r}}})}};var v=class n extends A{constructor(e){super(e);}async sendFileFromStream(e,s,t){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=s instanceof Buffer?s:await this.streamToBuffer(s),a=t.mimetype||this.getMimetypeFromFilename(t.filename),c=await this.createFileMessage(r,a,t),i={...t.replyToMessageId&&{quoted:{key:{id:t.replyToMessageId}}}};return this.socket?.sendMessage(o,c,i)}async streamToBuffer(e){return new Promise((s,t)=>{let o=[];e.on("data",r=>o.push(Buffer.from(r))),e.on("error",r=>t(r)),e.on("end",()=>s(Buffer.concat(o)));})}getMimetypeFromFilename(e){let s=e.split(".").pop()?.toLowerCase();return j[s||""]||"application/octet-stream"}async createFileMessage(e,s,t){let[o]=s.split("/");switch(o){case "image":return {image:e,caption:t.caption,mimetype:s,fileName:t.filename};case "video":return {video:e,caption:t.caption,mimetype:s,fileName:t.filename,gifPlayback:t.gifPlayback||false,jpegThumbnail:t.jpegThumbnail,...t.seconds&&{seconds:t.seconds}};case "audio":return t.ptt?{audio:e,mimetype:"audio/ogg; codecs=opus",ptt:true,...t.seconds&&{seconds:t.seconds}}:{audio:e,mimetype:s,fileName:t.filename,...t.seconds&&{seconds:t.seconds}};default:return {document:e,mimetype:s,fileName:t.filename,caption:t.caption,jpegThumbnail:t.jpegThumbnail}}}async sendImage(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"image.jpg",caption:t.caption,replyToMessageId:t.replyToMessageId})}async sendVideo(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"video.mp4",caption:t.caption,gifPlayback:t.gifPlayback,replyToMessageId:t.replyToMessageId,jpegThumbnail:t.jpegThumbnail})}async sendAudio(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"audio.mp3",mimetype:t.ptt?"audio/ogg; codecs=opus":"",ptt:t.ptt,seconds:t.seconds,replyToMessageId:t.replyToMessageId})}async sendDocument(e,s,t){return this.sendFileFromStream(e,s,{filename:t.filename,mimetype:t.mimetype,caption:t.caption,replyToMessageId:t.replyToMessageId,jpegThumbnail:t.jpegThumbnail})}async sendVoiceNote(e,s,t={}){return this.sendAudio(e,s,{ptt:true,seconds:t.seconds,replyToMessageId:t.replyToMessageId})}async sendSticker(e,s,t={}){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=s instanceof Buffer?s:await this.streamToBuffer(s),a={...t.replyToMessageId&&{quoted:{key:{id:t.replyToMessageId}}}};return this.socket?.sendMessage(o,{sticker:r},a)}};var B=class n extends v{constructor(e){super(e);}async sendImageMessage(e,s,{caption:t="",filename:o}={}){await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=typeof s=="string"?await p(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send image message",{jid:r,caption:t,filename:o}),await this.sendImage(r,a,{caption:t,...o&&{filename:o}})}async sendVideoMessage(e,s,{caption:t="",filename:o,sendAsGifPlayback:r=false}={}){await this.ensureSocketConnected();let a=n.formatPhoneNumberToWhatsappPattern(e),c=typeof s=="string"?await p(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send video message",{jid:a,caption:t,filename:o,gifPlayback:r}),await this.sendVideo(a,c,{caption:t,gifPlayback:r,...o&&{filename:o}})}async sendFileMessage(e,s,{caption:t="",mimetype:o="application/vnd.openxmlformats-officedocument.wordprocessingml.document",replyToMessageId:r,jpegThumbnailSrc:a,filename:c}={}){await this.ensureSocketConnected();let i=n.formatPhoneNumberToWhatsappPattern(e),g=typeof s=="string"?await p(s):s,u;typeof a=="string"?u=await p(a):a instanceof ne.ReadStream?u=await L(a):u=a;let l="mu-document";if(s instanceof ne.ReadStream){let d=U(s);d&&(l=d);}else typeof s=="string"&&(l=path.basename(s));return this.debug&&this.logger?.debug("WHATSAPP","send file message",{jid:i,caption:t,mimetype:o,filename:l,replyToMessageId:r,includeJpegThumbnail:!!u}),await this.sendDocument(i,g,{caption:t,mimetype:o,filename:l,replyToMessageId:r,jpegThumbnail:u})}async sendAudioMessage(e,s,{filename:t,replyToMessageId:o,mimetype:r,seconds:a}={}){await this.ensureSocketConnected();let c=n.formatPhoneNumberToWhatsappPattern(e),i=typeof s=="string"?await p(s):s,g=a||await E(i,r).catch(()=>0);return this.debug&&this.logger?.debug("WHATSAPP","send audio message",{jid:c,mimetype:r,filename:t,seconds:g,replyToMessageId:o}),await this.sendAudio(c,i,{...t&&{filename:t},...r&&{mimetype:r},...g&&{seconds:g},...o&&{replyToMessageId:o}})}async sendStickerMessage(e,s,{replyToMessageId:t}={}){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=typeof s=="string"?await p(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send sticker message",{jid:o,replyToMessageId:t}),await this.sendSticker(o,r,{replyToMessageId:t})}};var q=class extends B{constructor(e){super(e);}};exports.WhatsappSocket=q;//# sourceMappingURL=private.cjs.map
3
+ //# sourceMappingURL=private.cjs.map
@@ -0,0 +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"],"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","WhatsappSocketPrivateStream","_WhatsappSocketPrivateStream","mimetype","messageContent","messageOptions","reject","err","filename","ext","imageBuffer","videoBuffer","audioBuffer","documentBuffer","stickerBuffer","WhatsappSocketPrivateFiles","_WhatsappSocketPrivateFiles","imageSrc","caption","imageData","videoSrc","gifPlayback","fileSrc","replyToMessageId","jpegThumbnailSrc","_filename","fileBuffer","jpegThumbnailBuffer","fname","audioSrc","seconds","durationInSeconds","WhatsappSocket"],"mappings":"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","file":"private.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 type MessageUpsertType,\n type UserFacingSocketConfig,\n type WAMessage,\n type WASocket,\n useMultiFileAuthState,\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')) return phone;\n\n let strNumber = WhatsappSocketBase.formatPhoneNumber(phone, countryCode);\n strNumber = `${strNumber}@s.whatsapp.net`; // formatted Number should look like: '972513334444@s.whatsapp.net'\n return strNumber.replace(/:\\d+@/, '@'); // remove the sessionId\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","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\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\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: _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 let filename = 'mu-document';\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\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 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\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 * @param replyToMessageId\n */\n async sendStickerMessage(\n to: string,\n imageSrc: string | Buffer<any> | ReadStream,\n { replyToMessageId }: { replyToMessageId?: string } = {}\n ) {\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, replyToMessageId });\n return await this.sendSticker(jid, stickerBuffer, { replyToMessageId });\n }\n}\n","import { WhatsappSocketPrivateFiles } from './whatsappSocket.private.files';\nimport type { WhatsappSocketGroupMessagesProps } from './whatsappSocket.group.messages';\n\nexport class WhatsappSocket extends WhatsappSocketPrivateFiles {\n constructor(props: WhatsappSocketGroupMessagesProps) {\n super(props);\n }\n}\n"]}
@@ -0,0 +1,131 @@
1
+ import { ReadStream } from 'node:fs';
2
+ import { Readable } from 'stream';
3
+ import { W as WhatsappSocketBase, a as WhatsappSocketBaseProps, C as CallToActionButtons } from './decs-u-xMMNZ4.cjs';
4
+ import '@fadzzzslebew/baileys';
5
+ import 'ms';
6
+ import 'stack-trace-logger';
7
+
8
+ declare class WhatsappSocketPrivateMessages extends WhatsappSocketBase {
9
+ constructor(props: WhatsappSocketBaseProps);
10
+ /**
11
+ * Delete a sent message
12
+ * @param messageId - The message ID to delete
13
+ * @param chatJid - The recipient's phone number
14
+ * @returns Promise with the result
15
+ */
16
+ deleteMessageById(messageId: string, chatJid: string): Promise<any>;
17
+ sendTextMessage(to: string, text: string): Promise<any>;
18
+ sendButtonsMessage(to: string, { subtitle, title, buttons }: {
19
+ title: string;
20
+ subtitle?: string;
21
+ buttons: CallToActionButtons;
22
+ }): Promise<any>;
23
+ sendReplyButtonsMessage(to: string, { title, subtitle, buttons, }: {
24
+ title: string;
25
+ subtitle?: string;
26
+ buttons: Array<string | {
27
+ id: number | string;
28
+ label: string;
29
+ }>;
30
+ }): Promise<any>;
31
+ sendLocation(to: string, { latitude, longitude, name, address, }: {
32
+ latitude: number;
33
+ longitude: number;
34
+ name?: string;
35
+ address?: string;
36
+ }): Promise<any>;
37
+ }
38
+
39
+ declare class WhatsappSocketPrivateStream extends WhatsappSocketPrivateMessages {
40
+ constructor(props: WhatsappSocketBaseProps);
41
+ protected sendFileFromStream(to: string, stream: Readable | Buffer, options: {
42
+ filename: string;
43
+ mimetype?: string;
44
+ caption?: string;
45
+ replyToMessageId?: string;
46
+ ptt?: boolean;
47
+ seconds?: number;
48
+ gifPlayback?: boolean;
49
+ jpegThumbnail?: Buffer | string;
50
+ }): Promise<any>;
51
+ private streamToBuffer;
52
+ private getMimetypeFromFilename;
53
+ private createFileMessage;
54
+ protected sendImage(to: string, imageBuffer: Buffer | Readable, options?: {
55
+ caption?: string;
56
+ filename?: string;
57
+ replyToMessageId?: string;
58
+ }): Promise<any>;
59
+ protected sendVideo(to: string, videoBuffer: Buffer | Readable, options?: {
60
+ caption?: string;
61
+ filename?: string;
62
+ gifPlayback?: boolean;
63
+ replyToMessageId?: string;
64
+ jpegThumbnail?: Buffer;
65
+ }): Promise<any>;
66
+ protected sendAudio(to: string, audioBuffer: Buffer | Readable, options?: {
67
+ filename?: string;
68
+ ptt?: boolean;
69
+ seconds?: number;
70
+ replyToMessageId?: string;
71
+ }): Promise<any>;
72
+ protected sendDocument(to: string, documentBuffer: Buffer | Readable, options: {
73
+ filename: string;
74
+ caption?: string;
75
+ mimetype?: string;
76
+ replyToMessageId?: string;
77
+ jpegThumbnail?: Buffer;
78
+ }): Promise<any>;
79
+ protected sendVoiceNote(to: string, audioBuffer: Buffer | Readable, options?: {
80
+ seconds?: number;
81
+ replyToMessageId?: string;
82
+ }): Promise<any>;
83
+ protected sendSticker(to: string, stickerBuffer: Buffer | Readable, options?: {
84
+ replyToMessageId?: string;
85
+ }): Promise<any>;
86
+ }
87
+
88
+ declare class WhatsappSocketPrivateFiles extends WhatsappSocketPrivateStream {
89
+ constructor(props: WhatsappSocketBaseProps);
90
+ sendImageMessage(to: string, imageSrc: string | Buffer<any> | ReadStream, { caption, filename }?: {
91
+ caption?: string;
92
+ filename?: string;
93
+ }): Promise<any>;
94
+ sendVideoMessage(to: string, videoSrc: string | Buffer<any> | ReadStream, { caption, filename, sendAsGifPlayback: gifPlayback, }?: {
95
+ caption?: string;
96
+ sendAsGifPlayback?: boolean;
97
+ filename?: string;
98
+ }): Promise<any>;
99
+ sendFileMessage(to: string, fileSrc: string | Buffer<any> | ReadStream, { caption, mimetype, replyToMessageId, jpegThumbnailSrc, filename: _filename, }?: {
100
+ caption?: string;
101
+ mimetype?: string;
102
+ filename?: string;
103
+ replyToMessageId?: string;
104
+ jpegThumbnailSrc?: string | Buffer<any> | ReadStream;
105
+ }): Promise<any>;
106
+ sendAudioMessage(to: string, audioSrc: string | Buffer<any> | ReadStream, { filename, replyToMessageId, mimetype, seconds, }?: {
107
+ filename?: string;
108
+ replyToMessageId?: string;
109
+ mimetype?: string;
110
+ seconds?: number;
111
+ }): Promise<any>;
112
+ /**
113
+ * requirements:
114
+ * * format .webp
115
+ * * imageSize 512pxx512px
116
+ * * maxSize: 100kb
117
+ * * transparent background
118
+ * @param to
119
+ * @param imageSrc
120
+ * @param replyToMessageId
121
+ */
122
+ sendStickerMessage(to: string, imageSrc: string | Buffer<any> | ReadStream, { replyToMessageId }?: {
123
+ replyToMessageId?: string;
124
+ }): Promise<any>;
125
+ }
126
+
127
+ declare class WhatsappSocket extends WhatsappSocketPrivateFiles {
128
+ constructor(props: WhatsappSocketBaseProps);
129
+ }
130
+
131
+ export { WhatsappSocket };
@@ -0,0 +1,131 @@
1
+ import { ReadStream } from 'node:fs';
2
+ import { Readable } from 'stream';
3
+ import { W as WhatsappSocketBase, a as WhatsappSocketBaseProps, C as CallToActionButtons } from './decs-u-xMMNZ4.js';
4
+ import '@fadzzzslebew/baileys';
5
+ import 'ms';
6
+ import 'stack-trace-logger';
7
+
8
+ declare class WhatsappSocketPrivateMessages extends WhatsappSocketBase {
9
+ constructor(props: WhatsappSocketBaseProps);
10
+ /**
11
+ * Delete a sent message
12
+ * @param messageId - The message ID to delete
13
+ * @param chatJid - The recipient's phone number
14
+ * @returns Promise with the result
15
+ */
16
+ deleteMessageById(messageId: string, chatJid: string): Promise<any>;
17
+ sendTextMessage(to: string, text: string): Promise<any>;
18
+ sendButtonsMessage(to: string, { subtitle, title, buttons }: {
19
+ title: string;
20
+ subtitle?: string;
21
+ buttons: CallToActionButtons;
22
+ }): Promise<any>;
23
+ sendReplyButtonsMessage(to: string, { title, subtitle, buttons, }: {
24
+ title: string;
25
+ subtitle?: string;
26
+ buttons: Array<string | {
27
+ id: number | string;
28
+ label: string;
29
+ }>;
30
+ }): Promise<any>;
31
+ sendLocation(to: string, { latitude, longitude, name, address, }: {
32
+ latitude: number;
33
+ longitude: number;
34
+ name?: string;
35
+ address?: string;
36
+ }): Promise<any>;
37
+ }
38
+
39
+ declare class WhatsappSocketPrivateStream extends WhatsappSocketPrivateMessages {
40
+ constructor(props: WhatsappSocketBaseProps);
41
+ protected sendFileFromStream(to: string, stream: Readable | Buffer, options: {
42
+ filename: string;
43
+ mimetype?: string;
44
+ caption?: string;
45
+ replyToMessageId?: string;
46
+ ptt?: boolean;
47
+ seconds?: number;
48
+ gifPlayback?: boolean;
49
+ jpegThumbnail?: Buffer | string;
50
+ }): Promise<any>;
51
+ private streamToBuffer;
52
+ private getMimetypeFromFilename;
53
+ private createFileMessage;
54
+ protected sendImage(to: string, imageBuffer: Buffer | Readable, options?: {
55
+ caption?: string;
56
+ filename?: string;
57
+ replyToMessageId?: string;
58
+ }): Promise<any>;
59
+ protected sendVideo(to: string, videoBuffer: Buffer | Readable, options?: {
60
+ caption?: string;
61
+ filename?: string;
62
+ gifPlayback?: boolean;
63
+ replyToMessageId?: string;
64
+ jpegThumbnail?: Buffer;
65
+ }): Promise<any>;
66
+ protected sendAudio(to: string, audioBuffer: Buffer | Readable, options?: {
67
+ filename?: string;
68
+ ptt?: boolean;
69
+ seconds?: number;
70
+ replyToMessageId?: string;
71
+ }): Promise<any>;
72
+ protected sendDocument(to: string, documentBuffer: Buffer | Readable, options: {
73
+ filename: string;
74
+ caption?: string;
75
+ mimetype?: string;
76
+ replyToMessageId?: string;
77
+ jpegThumbnail?: Buffer;
78
+ }): Promise<any>;
79
+ protected sendVoiceNote(to: string, audioBuffer: Buffer | Readable, options?: {
80
+ seconds?: number;
81
+ replyToMessageId?: string;
82
+ }): Promise<any>;
83
+ protected sendSticker(to: string, stickerBuffer: Buffer | Readable, options?: {
84
+ replyToMessageId?: string;
85
+ }): Promise<any>;
86
+ }
87
+
88
+ declare class WhatsappSocketPrivateFiles extends WhatsappSocketPrivateStream {
89
+ constructor(props: WhatsappSocketBaseProps);
90
+ sendImageMessage(to: string, imageSrc: string | Buffer<any> | ReadStream, { caption, filename }?: {
91
+ caption?: string;
92
+ filename?: string;
93
+ }): Promise<any>;
94
+ sendVideoMessage(to: string, videoSrc: string | Buffer<any> | ReadStream, { caption, filename, sendAsGifPlayback: gifPlayback, }?: {
95
+ caption?: string;
96
+ sendAsGifPlayback?: boolean;
97
+ filename?: string;
98
+ }): Promise<any>;
99
+ sendFileMessage(to: string, fileSrc: string | Buffer<any> | ReadStream, { caption, mimetype, replyToMessageId, jpegThumbnailSrc, filename: _filename, }?: {
100
+ caption?: string;
101
+ mimetype?: string;
102
+ filename?: string;
103
+ replyToMessageId?: string;
104
+ jpegThumbnailSrc?: string | Buffer<any> | ReadStream;
105
+ }): Promise<any>;
106
+ sendAudioMessage(to: string, audioSrc: string | Buffer<any> | ReadStream, { filename, replyToMessageId, mimetype, seconds, }?: {
107
+ filename?: string;
108
+ replyToMessageId?: string;
109
+ mimetype?: string;
110
+ seconds?: number;
111
+ }): Promise<any>;
112
+ /**
113
+ * requirements:
114
+ * * format .webp
115
+ * * imageSize 512pxx512px
116
+ * * maxSize: 100kb
117
+ * * transparent background
118
+ * @param to
119
+ * @param imageSrc
120
+ * @param replyToMessageId
121
+ */
122
+ sendStickerMessage(to: string, imageSrc: string | Buffer<any> | ReadStream, { replyToMessageId }?: {
123
+ replyToMessageId?: string;
124
+ }): Promise<any>;
125
+ }
126
+
127
+ declare class WhatsappSocket extends WhatsappSocketPrivateFiles {
128
+ constructor(props: WhatsappSocketBaseProps);
129
+ }
130
+
131
+ export { WhatsappSocket };
@@ -0,0 +1,3 @@
1
+ import oe,{ReadStream}from'fs';import ee,{generateWAMessageFromContent,WAProto,useMultiFileAuthState,makeCacheableSignalKeyStore,DisconnectReason,initAuthCreds}from'@fadzzzslebew/baileys';import O from'ms';import J from'qrcode';import {MongoClient}from'mongodb';import ae from'pino';import {basename}from'path';var D={replacer:(n,e)=>Buffer.isBuffer(e)||e instanceof Uint8Array||e?.type==="Buffer"?{type:"Buffer",data:Buffer.from(e?.data||e).toString("base64")}:e,reviver:(n,e)=>{if(typeof e=="object"&&e&&(e.buffer===true||e.type==="Buffer")){let s=e.data||e.value;return typeof s=="string"?Buffer.from(s,"base64"):Buffer.from(s||[])}return e}},z=async n=>{let e=(r,a)=>{let i={$set:{...JSON.parse(JSON.stringify(r,D.replacer))}};return n.updateOne({_id:a},i,{upsert:true})},s=async r=>{try{let a=JSON.stringify(await n.findOne({_id:r}));return JSON.parse(a,D.reviver)}catch{return null}},t=async r=>{try{await n.deleteOne({_id:r});}catch{}},o=await s("creds")||initAuthCreds();return {state:{creds:o,keys:{get:async(r,a)=>{let c={};return await Promise.all(a.map(async i=>{let g=await s(`${r}-${i}`);r==="app-state-sync-key"&&g&&(g=WAProto.Message.AppStateSyncKeyData.fromObject(g)),c[i]=g;})),c},set:async r=>{let a=[];for(let c of Object.keys(r))for(let i of Object.keys(r[c])){let g=r[c][i],u=`${c}-${i}`;a.push(g?e(g,u):t(u));}await Promise.all(a);}}},saveCreds:()=>e(o,"creds")}},F=z;var E=n=>O(n)/1e3;async function f(n){let s=await(await fetch(n)).arrayBuffer();return Buffer.from(s)}async function Z(n,e){try{let{parseStream:s}=await import('music-metadata'),t=await s(n,{mimeType:e||"audio/mpeg"});return Math.floor(t.format.duration||0)}catch(s){throw console.error("Error parsing stream:",s),s}finally{n.destroyed||n.destroy();}}async function _(n,e){try{let{parseBuffer:s}=await import('music-metadata'),t=await s(n,e||"audio/mpeg").catch(()=>null);return t?Math.floor(t.format.duration||0):0}catch(s){throw console.error("Error parsing buffer:",s),s}}async function L(n,e){return n instanceof ReadStream?Z(n,e):_(n,e)}async function U(n){let e=[];for await(let s of n)e.push(s);return Buffer.concat(e)}function j(n){if(n.path){let e=n.path.toString();return basename(e)}}var S=n=>new Promise(e=>setTimeout(e,typeof n=="number"?n:O(n))),H={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",svg:"image/svg+xml",mp4:"video/mp4",avi:"video/x-msvideo",mov:"video/quicktime",mkv:"video/x-matroska",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",opus:"audio/opus",aac:"audio/aac",m4a:"audio/mp4",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"application/vnd.ms-powerpoint",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",txt:"text/plain",zip:"application/zip",rar:"application/x-rar-compressed","7z":"application/x-7z-compressed"};var Q=ae({level:"silent"}),M=class n{fileAuthStateDirectoryPath;mongoURL;mongoCollection="whatsapp-auth";logger;debug;printQRInTerminal;pairingPhone;customPairingCode;appName;onPreConnectionSendMessageFailed;onOpen;onClose;onQR;onConnectionStatusChange;onReceiveMessages;static DEFAULT_COUNTRY_CODE="972";static CONNECTION_TIMEOUT="2s";static formatPhoneNumber(e,s=n.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let t=e.replace(/[^0-9]/g,"");return t.startsWith("05")&&(t=t.substring(1)),t.startsWith(s)||(t=s+t),t}static formatPhoneNumberToWhatsappPattern(e,s=n.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let t=n.formatPhoneNumber(e,s);return t=`${t}@s.whatsapp.net`,t.replace(/:\d+@/,"@")}static getWhatsappPhoneLink({phone:e,message:s,countryCode:t=n.DEFAULT_COUNTRY_CODE}){let o=this.formatPhoneNumber(e,t),r=s?`?text=${encodeURI(s)}`:"";return `https://wa.me/${o}${r}`}static async qrToImage(e,s={}){return J.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...s})}static async qrToTerminalString(e,s={}){return J.toString(e,{type:"terminal",small:true,...s})}static randomPairingCode(e,s=8){if(!e.includes("[")&&e.length===s)return e;let t="",o=[],r=c=>{let i=[];for(let g=0;g<c.length;g++)if(c[g+1]==="-"&&c[g+2]){let u=c.charCodeAt(g),l=c.charCodeAt(g+2);for(let d=u;d<=l;d++)i.push(String.fromCharCode(d));g+=2;}else i.push(c[g]);return i};for(let c=0;c<e.length&&t.length<s;c++){let i=e[c];if(i==="["){let g=e.indexOf("]",c),u=e.slice(c+1,g);o=r(u),c=g;}else t+=i;}for(;t.length<s&&o.length;)t+=o[Math.floor(Math.random()*o.length)];let a=t.toUpperCase();return a.padEnd(s,a)}static instances=new Map;static getInstance(e){let s=n.buildSocketKey(e);return n.instances.has(s)||new n(e),n.instances.get(s)}static clearInstance(e){e?n.instances.delete(e):n.instances.clear();}constructor(e){let{fileAuthStateDirectoryPath:s,mongoURL:t,mongoCollection:o="whatsapp-auth",logger:r,onOpen:a,onClose:c,onQR:i,onReceiveMessages:g,onConnectionStatusChange:u,debug:l,printQRInTerminal:d,pairingPhone:W,customPairingCode:w,onPreConnectionSendMessageFailed:N,appName:y}=e;this.appName=y,this.mongoURL=t,this.fileAuthStateDirectoryPath=s,this.mongoCollection=o,this.logger=r,this.debug=l,this.printQRInTerminal=d,this.pairingPhone=W,this.customPairingCode=w,this.onPreConnectionSendMessageFailed=N,this.onConnectionStatusChange=u,this.onReceiveMessages=g,this.onOpen=a,this.onClose=c,this.onQR=i,n.instances.has(this.socketKey)&&(this.socket=n.instances.get(this.socketKey));}async getLatestWhatsAppVersion(){try{let e=["https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json","https://raw.githubusercontent.com/whiskeysockets/baileys/master/src/Defaults/baileys-version.json"];for(let s of e)try{let t=await fetch(s);if(t.ok)return (await t.json()).version}catch{continue}return console.log("Could not fetch version, using fallback"),[2,3e3,1015901307]}catch(e){return console.error("Error fetching version:",e),[2,3e3,1015901307]}}async getAuthCollection(){if(!this.mongoURL)return [];let e=new MongoClient(this.mongoURL);return await e.connect(),[e.db().collection(this.mongoCollection),e]}async authenticate(){if(!this.mongoURL&&!this.fileAuthStateDirectoryPath)throw new Error("fileAuthStateDirectoryPath/MongoURL is missing");if(!this.mongoURL){let{saveCreds:r,state:a}=await useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:a,saveCreds:r}}let[e]=await this.getAuthCollection(),{state:s,saveCreds:t}=await F(e);return {auth:{creds:s.creds,keys:makeCacheableSignalKeyStore(s.keys,Q)},saveCreds:t}}static buildSocketKey(e){return e.appName||e.pairingPhone||e.mongoCollection||e.fileAuthStateDirectoryPath||"default"}get socketKey(){return this.appName||this.pairingPhone||this.mongoCollection||this.fileAuthStateDirectoryPath||"default"}get socket(){return n.instances.get(this.socketKey)??null}set socket(e){n.instances.set(this.socketKey,e);}async startConnection({options:e,connectionAttempts:s=3,onOpen:t=this.onOpen,onClose:o=this.onClose,onQR:r=this.onQR,onConnectionStatusChange:a=this.onConnectionStatusChange,pairingPhone:c,debug:i}={}){let g=c??this.pairingPhone,{saveCreds:u,auth:l}=await this.authenticate(),d=i===void 0?this.debug:i,W=await this.getLatestWhatsAppVersion(),w=async()=>new Promise(y=>{let P=ee({version:W,logger:Q,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:true,shouldIgnoreJid:h=>h.includes("@newsletter"),...e,printQRInTerminal:false,auth:l});P.ev.on("connection.update",async h=>{let{connection:T,lastDisconnect:I,qr:k}=h;if(k){if(d&&this.logger?.info("WHATSAPP","QR Code received",{qr:k}),this.printQRInTerminal){let $=await n.qrToTerminalString(k,{small:true}).catch(()=>null);console.log($);}this.customPairingCode?n.randomPairingCode(this.customPairingCode):void 0;let b=g?n.formatPhoneNumber(g):null,C=b?await P.requestPairingCode(b):null;d&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:C,pairingPhone:b}),await r?.(k,C);}switch(T){case "connecting":{d&&this.logger?.debug("WHATSAPP","Connecting..."),a?.("connecting");break}case "open":{d&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=P,await t?.(),a?.("open"),y(this.socket);break}case "close":{let x=s-- >0&&I?.error?.output?.statusCode!==DisconnectReason.loggedOut,b=I?.error?.output?.statusCode,C=I?.error?.message;d&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:b,errorMessage:C,shouldReconnect:x}),x&&s?(d&&this.logger?.info("WHATSAPP","Reconnecting..."),await S(n.CONNECTION_TIMEOUT),y(w())):(d&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,y(this.socket)),a?.("close");break}}}),P.ev.on("creds.update",u),this.onReceiveMessages&&typeof this.onReceiveMessages=="function"&&P.ev.on("messages.upsert",async({messages:h,type:T})=>{this.logger?.info("WHATSAPP","Received messages",{type:T,totalMessages:h.length}),this.onReceiveMessages?.(h,T);});}),N=await w();return await S(n.CONNECTION_TIMEOUT),N}async ensureSocketConnected(){return this.socket||(this.debug&&this.logger?.warn("WHATSAPP","Client not connected, attempting to connect..."),this.socket=await this.startConnection().catch(e=>(this.onPreConnectionSendMessageFailed?.(e),null))),this.socket}async closeConnection(){this.socket&&(this.debug&&this.logger?.info("WHATSAPP","Closing connection"),this.socket.end(void 0),this.socket=null);}async clearAuthState(){if(await this.closeConnection(),this.mongoURL){let[e,s]=await this.getAuthCollection();this.debug&&this.logger?.info("WHATSAPP","Deleting auth state, required to scanning QR again"),await e?.deleteMany({}),await s?.close();}else this.fileAuthStateDirectoryPath&&oe.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:s=true}={}){await this.clearAuthState(),s&&(await S(n.CONNECTION_TIMEOUT),await this.startConnection({pairingPhone:e}));}isConnected(){return !!this.socket?.user}async deleteMessage(e,s,t=true){if(await this.ensureSocketConnected(),!this.socket)throw new Error("Socket not connected");let o=n.formatPhoneNumberToWhatsappPattern(s);try{if(t){let r=await this.socket.sendMessage(o,{delete:{remoteJid:o,fromMe:!0,id:e,participant:void 0}});return this.debug&&this.logger?.info("WHATSAPP","Message deleted for everyone",{messageId:e,chatJid:o}),r}else throw this.debug&&this.logger?.warn("WHATSAPP","Delete for me is not supported via API",{messageId:e,chatJid:o,reason:["Delete for me only (clear message locally)",`Note: This doesn't work via API - WhatsApp doesn't support "delete for me" via Baileys`,"We can only revoke messages (delete for everyone)"].join(`
2
+ `)}),new Error("Delete for me is not supported via WhatsApp API. Use deleteForEveryone=true to revoke the message.")}catch(r){throw this.debug&&this.logger?.error("WHATSAPP","Failed to delete message",{messageId:e,chatJid:o,error:r.message}),r}}async deleteMessages(e,s=true){await this.ensureSocketConnected();let t=[];for(let{messageId:o,chatJid:r}of e)try{let a=await this.deleteMessage(o,r,s);t.push({success:!0,messageId:o,result:a}),await S("500ms");}catch(a){t.push({success:false,messageId:o,error:a.message});}return t}async loadRecentMessages(e,s){await this.ensureSocketConnected();let t=n.formatPhoneNumberToWhatsappPattern(e);try{return await this.socket?.waitForMessage(s,3e3)||null}catch(o){return this.debug&&this.logger?.error("WHATSAPP","Failed to load message history",{chatJid:t,error:o.message}),null}}};var v=class n extends M{constructor(e){super(e);}async deleteMessageById(e,s){return this.deleteMessage(e,s,true)}async sendTextMessage(e,s){await this.ensureSocketConnected();let t=n.formatPhoneNumberToWhatsappPattern(e);return this.socket?.sendMessage(t,{text:s})}async sendButtonsMessage(e,{subtitle:s,title:t,buttons:o}){if(!t||!o.length)throw new Error("sendButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=o?.map(i=>{let g={display_text:i.label},u;switch(true){case !!i.url:u="cta_url",g.url=i.url;break;case !!i.copy:u="cta_copy",g.copy_code=i.copy;break;case !!i.tel:u="cta_call",g.phone_number=i.tel;break;case !!i.email:u="cta_email",g.email=i.email;break;case !!(i.reminderOn||i.reminderDate):u="cta_reminder";let{reminderOn:l,reminderDate:d}=i;g.reminder_name=i.reminderName,g.reminder_timestamp=d?Math.floor(+new Date(d)/1e3):Math.floor(Date.now()/1e3)+E(l??"0s");break;default:u="";break}return {name:u,buttonParamsJson:JSON.stringify(g)}}).filter(i=>i.name),c=generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:WAProto.Message.InteractiveMessage.create({...t&&{body:WAProto.Message.InteractiveMessage.Body.create({text:t})},...s&&{footer:WAProto.Message.InteractiveMessage.Footer.create({text:s})},...!!a?.length&&{nativeFlowMessage:WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:a})}})}}},{userJid:r});return this.debug&&this.logger?.debug("WHATSAPP","send buttons message",{jid:r,footer:s,body:t,buttons:a}),this.socket?.relayMessage(r,c.message,{messageId:c.key.id})}async sendReplyButtonsMessage(e,{title:s,subtitle:t,buttons:o}){if(!s||!o.length)throw new Error("sendReplyButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=o.filter(c=>c).map((c,i)=>typeof c=="string"?{buttonId:`id-${i}`,buttonText:{displayText:c},type:1}:{buttonId:`${c.id}`,buttonText:{displayText:c.label},type:1});return this.debug&&this.logger?.debug("WHATSAPP","send reply buttons message",{jid:r,text:s,footer:t,buttons:a}),this.socket?.sendMessage(r,{text:s,...t&&{footer:t},buttons:a})}async sendLocation(e,{latitude:s,longitude:t,name:o,address:r}){if(s===void 0||t===void 0)throw new Error("sendLocation: latitude and longitude are required fields.");if(s<-90||s>90)throw new Error("sendLocation: latitude must be between -90 and 90.");if(t<-180||t>180)throw new Error("sendLocation: longitude must be between -180 and 180.");await this.ensureSocketConnected();let a=n.formatPhoneNumberToWhatsappPattern(e);return this.debug&&this.logger?.debug("WHATSAPP","send location message",{jid:a,latitude:s,longitude:t,name:o,address:r}),this.socket?.sendMessage(a,{location:{degreesLatitude:s,degreesLongitude:t,...o&&{name:o},...r&&{address:r}}})}};var B=class n extends v{constructor(e){super(e);}async sendFileFromStream(e,s,t){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=s instanceof Buffer?s:await this.streamToBuffer(s),a=t.mimetype||this.getMimetypeFromFilename(t.filename),c=await this.createFileMessage(r,a,t),i={...t.replyToMessageId&&{quoted:{key:{id:t.replyToMessageId}}}};return this.socket?.sendMessage(o,c,i)}async streamToBuffer(e){return new Promise((s,t)=>{let o=[];e.on("data",r=>o.push(Buffer.from(r))),e.on("error",r=>t(r)),e.on("end",()=>s(Buffer.concat(o)));})}getMimetypeFromFilename(e){let s=e.split(".").pop()?.toLowerCase();return H[s||""]||"application/octet-stream"}async createFileMessage(e,s,t){let[o]=s.split("/");switch(o){case "image":return {image:e,caption:t.caption,mimetype:s,fileName:t.filename};case "video":return {video:e,caption:t.caption,mimetype:s,fileName:t.filename,gifPlayback:t.gifPlayback||false,jpegThumbnail:t.jpegThumbnail,...t.seconds&&{seconds:t.seconds}};case "audio":return t.ptt?{audio:e,mimetype:"audio/ogg; codecs=opus",ptt:true,...t.seconds&&{seconds:t.seconds}}:{audio:e,mimetype:s,fileName:t.filename,...t.seconds&&{seconds:t.seconds}};default:return {document:e,mimetype:s,fileName:t.filename,caption:t.caption,jpegThumbnail:t.jpegThumbnail}}}async sendImage(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"image.jpg",caption:t.caption,replyToMessageId:t.replyToMessageId})}async sendVideo(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"video.mp4",caption:t.caption,gifPlayback:t.gifPlayback,replyToMessageId:t.replyToMessageId,jpegThumbnail:t.jpegThumbnail})}async sendAudio(e,s,t={}){return this.sendFileFromStream(e,s,{filename:t.filename||"audio.mp3",mimetype:t.ptt?"audio/ogg; codecs=opus":"",ptt:t.ptt,seconds:t.seconds,replyToMessageId:t.replyToMessageId})}async sendDocument(e,s,t){return this.sendFileFromStream(e,s,{filename:t.filename,mimetype:t.mimetype,caption:t.caption,replyToMessageId:t.replyToMessageId,jpegThumbnail:t.jpegThumbnail})}async sendVoiceNote(e,s,t={}){return this.sendAudio(e,s,{ptt:true,seconds:t.seconds,replyToMessageId:t.replyToMessageId})}async sendSticker(e,s,t={}){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=s instanceof Buffer?s:await this.streamToBuffer(s),a={...t.replyToMessageId&&{quoted:{key:{id:t.replyToMessageId}}}};return this.socket?.sendMessage(o,{sticker:r},a)}};var R=class n extends B{constructor(e){super(e);}async sendImageMessage(e,s,{caption:t="",filename:o}={}){await this.ensureSocketConnected();let r=n.formatPhoneNumberToWhatsappPattern(e),a=typeof s=="string"?await f(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send image message",{jid:r,caption:t,filename:o}),await this.sendImage(r,a,{caption:t,...o&&{filename:o}})}async sendVideoMessage(e,s,{caption:t="",filename:o,sendAsGifPlayback:r=false}={}){await this.ensureSocketConnected();let a=n.formatPhoneNumberToWhatsappPattern(e),c=typeof s=="string"?await f(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send video message",{jid:a,caption:t,filename:o,gifPlayback:r}),await this.sendVideo(a,c,{caption:t,gifPlayback:r,...o&&{filename:o}})}async sendFileMessage(e,s,{caption:t="",mimetype:o="application/vnd.openxmlformats-officedocument.wordprocessingml.document",replyToMessageId:r,jpegThumbnailSrc:a,filename:c}={}){await this.ensureSocketConnected();let i=n.formatPhoneNumberToWhatsappPattern(e),g=typeof s=="string"?await f(s):s,u;typeof a=="string"?u=await f(a):a instanceof ReadStream?u=await U(a):u=a;let l="mu-document";if(s instanceof ReadStream){let d=j(s);d&&(l=d);}else typeof s=="string"&&(l=basename(s));return this.debug&&this.logger?.debug("WHATSAPP","send file message",{jid:i,caption:t,mimetype:o,filename:l,replyToMessageId:r,includeJpegThumbnail:!!u}),await this.sendDocument(i,g,{caption:t,mimetype:o,filename:l,replyToMessageId:r,jpegThumbnail:u})}async sendAudioMessage(e,s,{filename:t,replyToMessageId:o,mimetype:r,seconds:a}={}){await this.ensureSocketConnected();let c=n.formatPhoneNumberToWhatsappPattern(e),i=typeof s=="string"?await f(s):s,g=a||await L(i,r).catch(()=>0);return this.debug&&this.logger?.debug("WHATSAPP","send audio message",{jid:c,mimetype:r,filename:t,seconds:g,replyToMessageId:o}),await this.sendAudio(c,i,{...t&&{filename:t},...r&&{mimetype:r},...g&&{seconds:g},...o&&{replyToMessageId:o}})}async sendStickerMessage(e,s,{replyToMessageId:t}={}){await this.ensureSocketConnected();let o=n.formatPhoneNumberToWhatsappPattern(e),r=typeof s=="string"?await f(s):s;return this.debug&&this.logger?.debug("WHATSAPP","send sticker message",{jid:o,replyToMessageId:t}),await this.sendSticker(o,r,{replyToMessageId:t})}};var V=class extends R{constructor(e){super(e);}};export{V as WhatsappSocket};//# sourceMappingURL=private.js.map
3
+ //# sourceMappingURL=private.js.map