@hdriel/whatsapp-socket 1.2.8 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import Ce,{useMultiFileAuthState,makeCacheableSignalKeyStore,generateWAMessageFromContent,WAProto,DisconnectReason,initAuthCreds,downloadMediaMessage}from'@fadzzzslebew/baileys';import re from'ms';import We,{ReadStream}from'fs';import ce from'qrcode';import {MongoClient}from'mongodb';import Ge from'pino';import pe from'stream';import {basename}from'path';var te={replacer:(s,e)=>Buffer.isBuffer(e)||e instanceof Uint8Array||e?.type==="Buffer"?{type:"Buffer",data:Buffer.from(e?.data||e).toString("base64")}:e,reviver:(s,e)=>{if(typeof e=="object"&&e&&(e.buffer===true||e.type==="Buffer")){let t=e.data||e.value;return typeof t=="string"?Buffer.from(t,"base64"):Buffer.from(t||[])}return e}},Me=async s=>{let e=(n,i)=>{let c={$set:{...JSON.parse(JSON.stringify(n,te.replacer))}};return s.updateOne({_id:i},c,{upsert:true})},t=async n=>{try{let i=JSON.stringify(await s.findOne({_id:n}));return JSON.parse(i,te.reviver)}catch{return null}},r=async n=>{try{await s.deleteOne({_id:n});}catch{}},o=await t("creds")||initAuthCreds();return {state:{creds:o,keys:{get:async(n,i)=>{let a={};return await Promise.all(i.map(async c=>{let g=await t(`${n}-${c}`);n==="app-state-sync-key"&&g&&(g=WAProto.Message.AppStateSyncKeyData.fromObject(g)),a[c]=g;})),a},set:async n=>{let i=[];for(let a of Object.keys(n))for(let c of Object.keys(n[a])){let g=n[a][c],u=`${a}-${c}`;i.push(g?e(g,u):r(u));}await Promise.all(i);}}},saveCreds:()=>e(o,"creds")}},se=Me;var oe=s=>re(s)/1e3;async function y(s){let t=await(await fetch(s)).arrayBuffer();return Buffer.from(t)}async function we(s,e){try{let{parseStream:t}=await import('music-metadata'),r=await t(s,{mimeType:e||"audio/mpeg"});return Math.floor(r.format.duration||0)}catch(t){throw console.error("Error parsing stream:",t),t}finally{s.destroyed||s.destroy();}}async function Ae(s,e){try{let{parseBuffer:t}=await import('music-metadata'),r=await t(s,e||"audio/mpeg").catch(()=>null);return r?Math.floor(r.format.duration||0):0}catch(t){throw console.error("Error parsing buffer:",t),t}}async function ne(s,e){return s instanceof ReadStream?we(s,e):Ae(s,e)}async function O(s){return new Promise((e,t)=>{let r=[];s.on("data",o=>r.push(Buffer.from(o))),s.on("error",o=>t(o)),s.on("end",()=>e(Buffer.concat(r)));})}function U(s){let e=s?.split(".")?.pop()?.toLowerCase();return ve[e||""]||"application/octet-stream"}var D=s=>new Promise(e=>setTimeout(e,typeof s=="number"?s:re(s))),ve={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"},ie={jpg:"Image",jpeg:"Image","image/jpeg":"Image",png:"Image","image/png":"Image",ico:"Image","image/ico":"Image",svg:"Document","image/svg+xml":"Document",webp:"Sticker","image/webp":"Sticker",gif:"Image","image/gif":"Image",mp4:"Video","video/mp4":"Video",avi:"Video","video/x-msvideo":"Video",mov:"Video","video/quicktime":"Video",mkv:"Video","video/x-matroska":"Video",webm:"Video","video/webm":"Video",mp3:"Audio","audio/mpeg":"Audio",wav:"Audio","audio/wav":"Audio",ogg:"Audio","audio/ogg":"Audio",opus:"Audio","audio/opus":"Audio",aac:"Audio","audio/aac":"Audio",m4a:"Audio","audio/mp4":"Audio",pdf:"Document","application/pdf":"Document",doc:"Document","application/msword":"Document",docx:"Document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Document",xls:"Document","application/vnd.ms-excel":"Document",xlsx:"Document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Document",ppt:"Document","application/vnd.ms-powerpoint":"Document",pptx:"Document","application/vnd.openxmlformats-officedocument.presentationml.presentation":"Document",txt:"Document","text/plain":"Document",zip:"Document","application/zip":"Document",rar:"Document","application/x-rar-compressed":"Document","7z":"Document","application/x-7z-compressed":"Document"};function ae(s,e,t){let[r]=e.split("/");switch(r){case "sticker":return {sticker:s};case "image":return {image:s,caption:t.caption,mimetype:e,fileName:t.filename};case "video":return {video:s,caption:t.caption,mimetype:e,fileName:t.filename,gifPlayback:t.gifPlayback||false,jpegThumbnail:t.jpegThumbnail,...t.seconds&&{seconds:t.seconds}};case "audio":return t.ptt?{audio:s,mimetype:"audio/ogg; codecs=opus",ptt:true,...t.seconds&&{seconds:t.seconds}}:{audio:s,mimetype:e,fileName:t.filename,...t.seconds&&{seconds:t.seconds}};default:return {document:s,mimetype:e,fileName:t.filename,caption:t.caption,jpegThumbnail:t.jpegThumbnail}}}function R(s,e=2){if(s===0)return "0 Bytes";let t=1024,r=e<0?0:e,o=["Bytes","KB","MB","GB","TB","PB"],n=Math.floor(Math.log(s)/Math.log(t));return parseFloat((s/Math.pow(t,n)).toFixed(r))+" "+o[n]}async function ge(s){let e={};if(e.messageId=s.key.id,e.fromMe=s.key.fromMe,e.sender=s.key.remoteJid,e.username=s.pushName??"",e.timestamp=s.messageTimestamp*1e3,e.text=s.message.conversation??s.message.extendedTextMessage?.text??void 0,e.reaction=s.message.reactionMessage?{messageId:s.message.reactionMessage?.key.id,emoji:s.message.reactionMessage?.text??"",timestamp:+s.message.reactionMessage?.senderTimestampMs}:void 0,s.message?.imageMessage){let o=s.message.imageMessage.mimetype,n=Buffer.from(s.message.imageMessage.jpegThumbnail,"base64"),i=await downloadMediaMessage(s,"buffer",{}),a=s.message.imageMessage.fileLength.low;e.image={mimetype:o,buffer:i,jpegThumbnail:n,fileLength:a,fileSize:R(a),height:s.message.imageMessage.height,width:s.message.imageMessage.width,caption:s.message.imageMessage.caption};}if(s.message?.videoMessage){let o=s.message.videoMessage.mimetype,n=Buffer.from(s.message.videoMessage.jpegThumbnail,"base64"),i=await downloadMediaMessage(s,"buffer",{}),a=s.message.videoMessage.fileLength.low;e.video={buffer:i,jpegThumbnail:n,mimetype:o,fileLength:a,fileSize:R(a),caption:s.message.videoMessage.caption};}if(s.message?.audioMessage){let o=s.message.audioMessage.mimetype,n=await downloadMediaMessage(s,"buffer",{}),i=s.message.audioMessage.fileLength.low;e.audio={buffer:n,mimetype:o,fileLength:i,fileSize:R(i),seconds:s.message.audioMessage.seconds};}if(s.message?.documentMessage){let o=s.message.documentMessage.mimetype,n=await downloadMediaMessage(s,"buffer",{}),i=s.message.documentMessage.fileLength.low;e.file={buffer:n,mimetype:o,fileLength:i,fileSize:R(i),fileName:s.message.documentMessage.fileName,caption:s.message.documentMessage.caption};}if(s.message?.stickerMessage){let o=s.message.stickerMessage.mimetype,n=await downloadMediaMessage(s,"buffer",{}),i=s.message.stickerMessage.fileLength.low;e.sticker={buffer:n,mimetype:o,fileLength:i,fileSize:R(i)};}e.location=s.message?.locationMessage?{latitude:s.message.locationMessage.degreesLatitude,longitude:s.message.locationMessage.degreesLongitude,name:s.message.locationMessage.name,address:s.message.locationMessage.address}:void 0;let t=s.message.interactiveResponseMessage?.nativeFlowResponseMessage?.name==="menu_options",r=t&&JSON.parse(s.message.interactiveResponseMessage.nativeFlowResponseMessage.paramsJson);return e.menuOption=t?{participant:s.message?.interactiveResponseMessage.contextInfo.participant,text:s.message?.interactiveResponseMessage.body.text,description:r.description,id:r.id}:void 0,e.buttonsResponse=s.message?.buttonsResponseMessage?{participant:s.message?.buttonsResponseMessage.contextInfo.participant,description:s.message?.buttonsResponseMessage.description,text:s.message?.buttonsResponseMessage.selectedDisplayText,id:s.message?.buttonsResponseMessage.selectedButtonId}:void 0,JSON.parse(JSON.stringify(e))}var ue=Ge({level:"silent"}),v=class s{fileAuthStateDirectoryPath;mongoURL;mongoCollection="whatsapp-auth";logger;debug;printQRInTerminal;messageReceivedCBs={};pairingPhone;customPairingCode;appName;onPreConnectionSendMessageFailed;onOpen;onClose;onQR;onConnectionStatusChange;static DEFAULT_COUNTRY_CODE="972";static CONNECTION_TIMEOUT="2s";static formatPhoneNumber(e,t=s.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let r=e.replace(/[^0-9]/g,"");return r.startsWith("05")&&(r=r.substring(1)),r.startsWith(t)||(r=t+r),r}static formatPhoneNumberToWhatsappPattern(e,t=s.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e.replace(/:\d+@/,"@");let r=s.formatPhoneNumber(e,t);return r=`${r}@s.whatsapp.net`,r=r.replace(/:\d+@/,"@"),r}static getWhatsappPhoneLink({phone:e,message:t,countryCode:r=s.DEFAULT_COUNTRY_CODE}){let o=this.formatPhoneNumber(e,r),n=t?`?text=${encodeURI(t)}`:"";return `https://wa.me/${o}${n}`}static async qrToImage(e,t={}){return ce.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...t})}static async qrToTerminalString(e,t={}){return ce.toString(e,{type:"terminal",small:true,...t})}static randomPairingCode(e,t=8){if(!e.includes("[")&&e.length===t)return e;let r="",o=[],n=a=>{let c=[];for(let g=0;g<a.length;g++)if(a[g+1]==="-"&&a[g+2]){let u=a.charCodeAt(g),d=a.charCodeAt(g+2);for(let p=u;p<=d;p++)c.push(String.fromCharCode(p));g+=2;}else c.push(a[g]);return c};for(let a=0;a<e.length&&r.length<t;a++){let c=e[a];if(c==="["){let g=e.indexOf("]",a),u=e.slice(a+1,g);o=n(u),a=g;}else r+=c;}for(;r.length<t&&o.length;)r+=o[Math.floor(Math.random()*o.length)];let i=r.toUpperCase();return i.padEnd(t,i)}static instances=new Map;static getInstance(e){let t=s.buildSocketKey(e);return s.instances.has(t)||new s(e),s.instances.get(t)}static clearInstance(e){e?s.instances.delete(e):s.instances.clear();}constructor(e){let{fileAuthStateDirectoryPath:t,mongoURL:r,mongoCollection:o="whatsapp-auth",logger:n,onOpen:i,onClose:a,onQR:c,onConnectionStatusChange:g,debug:u,printQRInTerminal:d,customPairingCode:p,onPreConnectionSendMessageFailed:h,appName:P,pairingPhone:w}=e;this.appName=P,this.mongoURL=r,this.fileAuthStateDirectoryPath=t,this.mongoCollection=o,this.logger=n,this.debug=u,this.printQRInTerminal=d,this.pairingPhone=w,this.customPairingCode=p,this.onPreConnectionSendMessageFailed=h,this.onConnectionStatusChange=g,this.onOpen=i,this.onClose=a,this.onQR=c,s.instances.has(this.socketKey)&&(this.socket=s.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 t of e)try{let r=await fetch(t);if(r.ok)return (await r.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(){return new Promise(async(e,t)=>{if(!this.mongoURL){e([]);return}let r=new MongoClient(this.mongoURL);await r.connect().then(()=>{let o=r.db().collection(this.mongoCollection);e([o,r]);}).catch(o=>{this.logger?.error("WHASTAPP","Error connecting to MongoDB connection",o),t(o);});})}async authenticate(){if(!this.mongoURL&&!this.fileAuthStateDirectoryPath)throw new Error("fileAuthStateDirectoryPath/MongoURL is missing");if(!this.mongoURL){let{saveCreds:n,state:i}=await useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:i,saveCreds:n}}let[e]=await this.getAuthCollection(),{state:t,saveCreds:r}=await se(e);return {auth:{creds:t.creds,keys:makeCacheableSignalKeyStore(t.keys,ue)},saveCreds:r}}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 s.instances.get(this.socketKey)??null}set socket(e){s.instances.set(this.socketKey,e);}async startConnection({options:e,connectionAttempts:t=3,onOpen:r=this.onOpen,onClose:o=this.onClose,onQR:n=this.onQR,onConnectionStatusChange:i=this.onConnectionStatusChange,pairingPhone:a,debug:c}={}){let g=a??this.pairingPhone,{saveCreds:u,auth:d}=await this.authenticate(),p=c===void 0?this.debug:c,h=await this.getLatestWhatsAppVersion(),P=async()=>new Promise(Z=>{let W=Ce({version:h,logger:ue,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:true,shouldIgnoreJid:M=>M.includes("@newsletter"),...e,printQRInTerminal:false,auth:d});W.ev.on("connection.update",async M=>{let{connection:F,lastDisconnect:x,qr:S}=M;if(S){if(p&&this.logger?.info("WHATSAPP","QR Code received",{qr:S}),this.printQRInTerminal){let _=await s.qrToTerminalString(S,{small:true}).catch(()=>null);console.log(_);}this.customPairingCode?s.randomPairingCode(this.customPairingCode):void 0;let b=g?s.formatPhoneNumber(g):null,A=b?await W.requestPairingCode(b):null;p&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:A,pairingPhone:b}),await n?.(S,A);}switch(F){case "connecting":{p&&this.logger?.debug("WHATSAPP","Connecting..."),i?.("connecting");break}case "open":{p&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=W,await r?.(),i?.("open"),Z(this.socket);break}case "close":{let f=t-- >0&&x?.error?.output?.statusCode!==DisconnectReason.loggedOut,b=x?.error?.output?.statusCode,A=x?.error?.message;p&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:b,errorMessage:A,shouldReconnect:f}),f&&t?(p&&this.logger?.info("WHATSAPP","Reconnecting..."),await D(s.CONNECTION_TIMEOUT),Z(P())):(p&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,Z(this.socket)),i?.("close");break}}}),W.ev.on("creds.update",u),W.ev.on("messages.upsert",async M=>{if(!Object.keys(this.messageReceivedCBs).length)return;this.logger?.info("WHATSAPP","Received messages",{type:M.type,totalMessages:M.messages.length});let{messages:F,type:x}=M;if(x!=="notify")return;let S=await Promise.allSettled(F.filter(f=>f.message).map(async f=>ge(f)));S.map((f,b)=>({...f,message:F[b]})).filter(f=>f.status==="rejected").forEach(({reason:f,message:b})=>{this.logger?.error("WHATSAPP","failed to handle message",{error:f?.message,message:b});}),S.filter(f=>f.status==="fulfilled").forEach(({value:f})=>{console.log("handle message",f);let{sender:b,messageId:A,username:_,timestamp:fe,fromMe:he,...ye}=f;Object.keys(this.messageReceivedCBs).filter(ee=>["from_any_groups","from_any_phones",b].includes(ee)).forEach(async ee=>{this.messageReceivedCBs[ee]?.forEach(be=>{be(b,A,{username:_,timestamp:fe,fromMe:he,data:ye});});});});});}),w=await P();return await D(s.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,t]=await this.getAuthCollection();this.debug&&this.logger?.info("WHATSAPP","Deleting auth state, required to scanning QR again"),await e?.deleteMany({}),await t?.close();}else this.fileAuthStateDirectoryPath&&We.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:t=true}={}){await this.clearAuthState(),t&&(await D(s.CONNECTION_TIMEOUT),await this.startConnection({pairingPhone:e}));}isConnected(){return !!this.socket?.user}async deleteMessage(e,t,r=true){if(await this.ensureSocketConnected(),!this.socket)throw new Error("Socket not connected");let o=s.formatPhoneNumberToWhatsappPattern(t);try{if(r){let n=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}),n}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(n){throw this.debug&&this.logger?.error("WHATSAPP","Failed to delete message",{messageId:e,chatJid:o,error:n.message}),n}}async deleteMessages(e,t=true){await this.ensureSocketConnected();let r=[];for(let{messageId:o,chatJid:n}of e)try{let i=await this.deleteMessage(o,n,t);r.push({success:!0,messageId:o,result:i}),await D("500ms");}catch(i){r.push({success:false,messageId:o,error:i.message});}return r}async loadRecentMessages(e,t){await this.ensureSocketConnected();let r=s.formatPhoneNumberToWhatsappPattern(e);try{return await this.socket?.waitForMessage(t,3e3)||null}catch(o){return this.debug&&this.logger?.error("WHATSAPP","Failed to load message history",{chatJid:r,error:o.message}),null}}};async function k({debug:s,logger:e,socket:t},r,o,{mentions:n,...i}){let a=o instanceof Buffer?o:await O(o),c=i.mimetype||U(i.filename),g=ae(a,c,i),u={...i.replyToMessageId&&{quoted:{key:{id:i.replyToMessageId}}},...n?.length&&{mentions:n}};return s&&e?.debug("WHATSAPP","sendFileFromStream",{jid:r,mimetype:c,caption:g?.caption,fileName:g?.fileName}),t?.sendMessage(r,g,u)}async function C({debug:s,logger:e,socket:t},r,o,{filename:n="audio-message.mp3",replyToMessageId:i,mimetype:a,seconds:c,ptt:g,mentions:u}={}){if(!r||!o)throw new Error("sendAudioMessage: jid and audio source are required.");n=n&&decodeURIComponent(n);let d=typeof o=="string"?await y(o):o,p=c||await ne(d,a).catch(()=>0);return s&&e?.debug("WHATSAPP","send audio message",{jid:r,mimetype:a,filename:n,seconds:p,replyToMessageId:i}),k({debug:s,logger:e,socket:t},r,d,{filename:n,...g!==void 0&&{ptt:g},...a&&{mimetype:a},...p&&{seconds:p},...i&&{replyToMessageId:i},...u?.length&&{mentions:u}})}var z=({debug:s,logger:e,socket:t},r,{subtitle:o,title:n,buttons:i})=>{if(!n||!i.length)throw new Error("sendButtonsMessage: No title or buttons required field found.");let a=i?.map(g=>{let u={display_text:g.label},d;switch(true){case !!g.url:d="cta_url",u.url=g.url,u.url=u.url.startsWith("http")?u.url:`https://${u.url}`;break;case !!g.copy:d="cta_copy",u.copy_code=g.copy;break;case !!g.tel:d="cta_call",u.phone_number=g.tel;break;case !!g.email:d="cta_email",u.email=g.email;break;case !!(g.reminderOn||g.reminderDate):d="cta_reminder";let{reminderOn:p,reminderDate:h}=g;u.reminder_name=g.reminderName,u.reminder_timestamp=h?Math.floor(+new Date(h)/1e3):Math.floor(Date.now()/1e3)+oe(p??"0s");break;default:d="";break}return {name:d,buttonParamsJson:JSON.stringify(u)}}).filter(g=>g.name),c=generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:WAProto.Message.InteractiveMessage.create({...n&&{body:WAProto.Message.InteractiveMessage.Body.create({text:n})},...o&&{footer:WAProto.Message.InteractiveMessage.Footer.create({text:o})},...!!a?.length&&{nativeFlowMessage:WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:a})}})}}},{userJid:r});return s&&e?.debug("WHATSAPP","send buttons message",{jid:r,footer:o,body:n,buttons:a}),t?.relayMessage(r,c.message,{messageId:c.key.id})};var de=({debug:s,logger:e,socket:t},r,{messageId:o})=>{if(!o)throw new Error("sendDeleteMessage: No title or buttons required field found.");return s&&e?.debug("WHATSAPP","Deleting message",{jid:r,messageId:o}),t?.sendMessage(r,{delete:{id:o,remoteJid:r,fromMe:true}})};async function L({debug:s,logger:e,socket:t},r,o,{filename:n="audio-message.mp3",caption:i="",mimetype:a,mentions:c,jpegThumbnail:g}={}){if(!r||!o)throw new Error("sendDocumentMessage: jid and document source are required.");n=n&&decodeURIComponent(n);let u=typeof o=="string"?await y(o):o;return s&&e?.debug("WHATSAPP","send document message",{jid:r,mimetype:a,filename:n,caption:i}),k({debug:s,logger:e,socket:t},r,u,{filename:n,...i&&{caption:i},...a&&{mimetype:a},...g&&{jpegThumbnail:g},...c?.length&&{mentions:c}})}async function T({debug:s,logger:e,socket:t},r,o,{caption:n="",filename:i="image.jpg",mentions:a}={}){if(!r||!o)throw new Error("sendImageMessage: jid and image source are required.");i=i&&decodeURIComponent(i);let c=typeof o=="string"?await y(o):o;return s&&e?.debug("WHATSAPP","send image message",{jid:r,caption:n,filename:i}),k({debug:s,logger:e,socket:t},r,c,{filename:i,...a?.length&&{mentions:a}})}async function B({debug:s,logger:e,socket:t},r,o,{caption:n="",filename:i="video.mp4",sendAsGifPlayback:a=false,mentions:c}={}){if(!r||!o)throw new Error("sendVideoMessage: jid and video source are required.");i=i&&decodeURIComponent(i);let g=typeof o=="string"?await y(o):o;return s&&e?.debug("WHATSAPP","send video message",{jid:r,filename:i,gifPlayback:a,mentions:c,caption:n}),k({debug:s,logger:e,socket:t},r,g,{filename:i,...n&&{caption:n},...a&&{gifPlayback:a},...c?.length&&{mentions:c}})}async function I({debug:s,logger:e,socket:t},r,o,{mentions:n}={}){if(!r||!o)throw new Error("sendStickerMessage: jid and sticker image source are required.");let i=typeof o=="string"?await y(o):o;return s&&e?.debug("WHATSAPP","send sticker message",{jid:r}),k({debug:s,logger:e,socket:t},r,i,{mimetype:"sticker",filename:"sticker.webp",...n?.length&&{mentions:n}})}async function q({debug:s,logger:e,socket:t},r,o,{caption:n="",mimetype:i,jpegThumbnailSrc:a,autoMessageClassification:c=true,filename:g,mentions:u}){let d;typeof a=="string"?d=await y(a):a instanceof pe?d=await O(a):d=a;let p=typeof o=="string"?await y(o):o;if(o instanceof pe);else typeof o=="string"&&(g=basename(o));g=g&&decodeURIComponent(g),i||=U(g),i=i?.toLowerCase(),s&&e?.debug("WHATSAPP","send file message",{jid:r,caption:n,mimetype:i,filename:g,includeJpegThumbnail:!!d});let h=true,P;if(c)switch(ie[i]){case "Image":P=await T({debug:s,logger:e,socket:t},r,p,{caption:n,filename:g,mentions:u}).catch(()=>h=false);break;case "Sticker":P=await I({debug:s,logger:e,socket:t},r,p,{mentions:u}).catch(()=>h=false);break;case "Video":P=await B({debug:s,logger:e,socket:t},r,p,{caption:n,filename:g,mentions:u}).catch(()=>h=false);break;case "Audio":P=await C({debug:s,logger:e,socket:t},r,p,{mimetype:i,filename:g,mentions:u}).catch(()=>h=false);break;default:return await L({debug:s,logger:e,socket:t},r,p,{caption:n,mimetype:i,filename:g,jpegThumbnail:d,mentions:u})}if(P&&h)return P;if(!c||!h)return await L({debug:s,logger:e,socket:t},r,p,{caption:n,mimetype:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",filename:g,jpegThumbnail:d,mentions:u})}async function J({debug:s,logger:e,socket:t},r,{latitude:o,longitude:n,name:i,address:a}){if(o===void 0||n===void 0)throw new Error("sendLocation: latitude and longitude are required fields.");if(o<-90||o>90)throw new Error("sendLocation: latitude must be between -90 and 90.");if(n<-180||n>180)throw new Error("sendLocation: longitude must be between -180 and 180.");return s&&e?.debug("WHATSAPP","send location message",{jid:r,latitude:o,longitude:n,name:i,address:a}),t?.sendMessage(r,{location:{degreesLatitude:o,degreesLongitude:n,...i&&{name:i},...a&&{address:a}}})}async function j({debug:s,logger:e,socket:t},r,{title:o,subtitle:n,buttonText:i,sections:a}){if(!o||!i||!a||a.length===0)throw new Error("sendMenuMessage: title, buttonText, and sections are required.");let c=generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:WAProto.Message.InteractiveMessage.create({body:WAProto.Message.InteractiveMessage.Body.create({text:o}),...n&&{footer:WAProto.Message.InteractiveMessage.Footer.create({text:n})},header:WAProto.Message.InteractiveMessage.Header.create({title:i,hasMediaAttachment:false}),nativeFlowMessage:WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:[{name:"single_select",buttonParamsJson:JSON.stringify({title:i,sections:a.map(g=>({title:g.title,rows:g.rows.map(u=>({header:u.title,title:u.title,description:u.description||"",id:u.id}))}))})}]})})}}},{userJid:r});return s&&e?.debug("WHATSAPP","send menu message",{jid:r,title:o,buttonText:i,sectionsCount:a.length,totalRows:a.reduce((g,u)=>g+u.rows.length,0)}),t?.relayMessage(r,c.message,{messageId:c.key.id})}var V=({debug:s,logger:e,socket:t},r,{messageId:o,emoji:n})=>{if(!r||!o||!n)throw new Error("sendReactionMessage: message ID, and emoji are required.");return s&&e?.debug("WHATSAPP","Sending reaction to group message",{jid:r,messageId:o,emoji:n}),t?.sendMessage(r,{react:{text:n,key:{id:o,remoteJid:r}}})};async function Q({debug:s,logger:e,socket:t},r,{title:o,subtitle:n,buttons:i,mentions:a}){if(!o||!i.length)throw new Error("sendReplyButtonsMessage: No title or buttons required field found.");let c=i.filter(u=>u).map((u,d)=>typeof u=="string"?{buttonId:`id-${d}`,buttonText:{displayText:u},type:1}:{buttonId:`${u.id}`,buttonText:{displayText:u.label},type:1}),g={text:o,buttons:c,...n&&{footer:n}};return a?.length&&(g.mentions=a),s&&e?.debug("WHATSAPP","send reply buttons message",{jid:r,text:o,footer:n,buttons:c}),t?.sendMessage(r,g)}async function $({debug:s,logger:e,socket:t},r,{question:o,options:n,allowMultipleAnswers:i=false}){if(!o||!n||n.length<2)throw new Error("sendSurveyMessage: question and at least 2 options are required.");if(n.length>12)throw new Error("sendSurveyMessage: maximum 12 options allowed.");let a=n;return s&&e?.debug("WHATSAPP","send survey message",{jid:r,question:o,options:a,allowMultipleAnswers:i}),t?.sendMessage(r,{poll:{name:o,values:a,selectableCount:i?n.length:1}})}var E=({debug:s,logger:e,socket:t},r,{text:o,mentions:n})=>{if(!o)throw new Error("sendTextMessage: No title or buttons required field found.");return s&&e?.debug("WHATSAPP","send text message",{jid:r,text:o}),t?.sendMessage(r,{text:o,...n?.length&&{mentions:n}})};var K=class s extends v{constructor(e){super(e);}async deleteMessageById(e,t){return this.deleteMessage(e,t,true)}async sendTextMessage(e,t){await this.ensureSocketConnected();let r=s.formatPhoneNumberToWhatsappPattern(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return E(o,r,{text:t})}async sendButtonsMessage(e,{subtitle:t,title:r,buttons:o}){await this.ensureSocketConnected();let n=s.formatPhoneNumberToWhatsappPattern(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return z(i,n,{subtitle:t,title:r,buttons:o})}async sendMenuMessage(e,{title:t,subtitle:r,buttonText:o,sections:n}){await this.ensureSocketConnected();let i=s.formatPhoneNumberToWhatsappPattern(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return j(a,i,{subtitle:r,title:t,sections:n,buttonText:o})}async sendReplyButtonsMessage(e,{title:t,subtitle:r,buttons:o}){await this.ensureSocketConnected();let n=s.formatPhoneNumberToWhatsappPattern(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return Q(i,n,{subtitle:r,title:t,buttons:o})}async sendLocationMessage(e,{latitude:t,longitude:r,name:o,address:n}){await this.ensureSocketConnected();let i=s.formatPhoneNumberToWhatsappPattern(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return J(a,i,{latitude:t,longitude:r,name:o,address:n})}async sendSurveyMessage(e,{question:t,options:r,allowMultipleAnswers:o=false}){await this.ensureSocketConnected();let n=s.formatPhoneNumberToWhatsappPattern(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return $(i,n,{options:r,question:t,allowMultipleAnswers:o})}async sendReactionMessage(e,t,r){await this.ensureSocketConnected();let o=s.formatPhoneNumberToWhatsappPattern(e),n={socket:this.socket,debug:this.debug,logger:this.logger};return V(n,o,{messageId:t,emoji:r})}async sendImageMessage(e,t,{caption:r="",filename:o}={}){await this.ensureSocketConnected();let n=s.formatPhoneNumberToWhatsappPattern(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return T(i,n,t,{caption:r,filename:o})}async sendVideoMessage(e,t,{caption:r="",filename:o,sendAsGifPlayback:n=false}={}){await this.ensureSocketConnected();let i=s.formatPhoneNumberToWhatsappPattern(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return B(a,i,t,{caption:r,filename:o,sendAsGifPlayback:n})}async sendAudioMessage(e,t,{filename:r,replyToMessageId:o,mimetype:n,seconds:i}={}){await this.ensureSocketConnected();let a=s.formatPhoneNumberToWhatsappPattern(e),c={socket:this.socket,debug:this.debug,logger:this.logger};return C(c,a,t,{filename:r,replyToMessageId:o,mimetype:n,seconds:i})}async sendStickerMessage(e,t){await this.ensureSocketConnected();let r=s.formatPhoneNumberToWhatsappPattern(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return I(o,r,t)}async sendFileMessage(e,t,{caption:r="",mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:i=true,filename:a}){await this.ensureSocketConnected();let c=s.formatPhoneNumberToWhatsappPattern(e),g={socket:this.socket,debug:this.debug,logger:this.logger};return q(g,c,t,{autoMessageClassification:i,jpegThumbnailSrc:n,mimetype:o,filename:a,caption:r})}};var me=class s extends K{constructor(e){super(e);}onAnyMessageReceived(e){this.messageReceivedCBs.from_any_phones||=[],this.messageReceivedCBs.from_any_phones.push(e);}offAnyMessageReceived(e){this.messageReceivedCBs.from_any_phones=(this.messageReceivedCBs.from_any_phones??[]).filter(t=>t!==e);}onPhoneMessageReceived(e,t){let r=s.formatPhoneNumberToWhatsappPattern(e);this.messageReceivedCBs[r]||=[],this.messageReceivedCBs[r].push(t);}offPhoneMessageReceived(e,t){let r=s.formatPhoneNumberToWhatsappPattern(e);this.messageReceivedCBs[r]=(this.messageReceivedCBs[r]??[]).filter(o=>o!==t);}};var Y=class s extends v{static formatGroupId(e){return e.endsWith("@g.us")?e:`${e.replace(/@s\.whatsapp\.net|@g\.us/g,"")}@g.us`}static isGroupId(e){return e.endsWith("@g.us")}constructor(e){super(e);}async createGroup({name:e,participants:t,description:r}){if(!e)throw new Error("createGroup: Group name is required.");await this.ensureSocketConnected();let o=(t??[]).map(i=>s.formatPhoneNumberToWhatsappPattern(i));if(o.length===0){let i=this.socket?.user?.id;if(!i)throw new Error("createGroup: Could not get bot user ID. Make sure socket is connected.");let a=s.formatPhoneNumberToWhatsappPattern(i);o.push(a),this.debug&&this.logger?.debug("WHATSAPP","No participants provided, creating group with self only",{selfJid:i});}this.debug&&this.logger?.debug("WHATSAPP","Creating group",{name:e,description:r,participants:o});let n=await this.socket?.groupCreate(e,o);if(r&&n?.id){let i=s.formatGroupId(n.id);await this.updateGroupDescription(i,r);}return n}async updateGroupName(e,t){if(!e||!t)throw new Error("updateGroupName: Group ID and new name are required.");await this.ensureSocketConnected();let r=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group name",{groupId:r,newName:t}),this.socket?.groupUpdateSubject(r,t)}async updateGroupDescription(e,t,r=false){if(!e)throw new Error("updateGroupDescription: Group ID is required.");await this.ensureSocketConnected();let o=s.formatGroupId(e);return r&&await this.socket?.groupMetadata(o).then(n=>{this.debug&&this.logger?.debug("WHATSAPP","Fetch group description metadata",n);}).catch(n=>{this.debug&&this.logger?.warn("WHATSAPP","Failed to update group description metadata",{error:n});}),this.debug&&this.logger?.debug("WHATSAPP","Updating group description",{groupId:o}),this.socket?.groupUpdateDescription(o,t||"")}async updateGroupSettings(e,t){if(!e||!t)throw new Error("updateGroupSettings: Group ID and setting are required.");await this.ensureSocketConnected();let r=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group settings",{groupId:r,setting:t}),this.socket?.groupSettingUpdate(r,t)}async updateGroupParticipants(e,t,r){if(!e)throw new Error("addParticipants: Group ID is required.");let o=[].concat(t).filter(a=>a);if(!o?.length)return;await this.ensureSocketConnected();let n=s.formatGroupId(e),i=o.map(a=>s.formatPhoneNumberToWhatsappPattern(a));return this.debug&&this.logger?.debug("WHATSAPP",`${r} participants to group`,{groupId:n,participantsCount:i.length}),this.socket?.groupParticipantsUpdate(n,i,r)}async addParticipants(e,t){return this.updateGroupParticipants(e,t,"add")}async removeParticipants(e,t){return this.updateGroupParticipants(e,t,"remove")}async promoteToAdmin(e,t){return this.updateGroupParticipants(e,t,"promote")}async demoteFromAdmin(e,t){return this.updateGroupParticipants(e,t,"demote")}async leaveGroup(e){if(!e)throw new Error("leaveGroup: Group ID is required.");await this.ensureSocketConnected();let t=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Leaving group",{groupId:t}),this.socket?.groupLeave(t)}async getGroupMetadata(e){if(!e)throw new Error("getGroupMetadata: Group ID is required.");await this.ensureSocketConnected();let t=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Fetching group metadata",{groupId:t}),this.socket?.groupMetadata(t)}async getAllGroups(){await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching all groups");let e=await this.socket?.groupFetchAllParticipating();return e?Object.values(e):[]}async getGroupInviteCode(e,t){if(!e)throw new Error("getGroupInviteCode: Group ID is required.");await this.ensureSocketConnected();let r=s.formatGroupId(e);this.debug&&this.logger?.debug("WHATSAPP","Fetching group invite code",{groupId:r});let o=await this.socket?.groupInviteCode(r);return t&&o?`https://chat.whatsapp.com/${o}`:o}async revokeGroupInviteCode(e){if(!e)throw new Error("revokeGroupInviteCode: Group ID is required.");await this.ensureSocketConnected();let t=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Revoking group invite code",{groupId:t}),this.socket?.groupRevokeInvite(t)}async joinGroupViaInvite(e){if(!e)throw new Error("joinGroupViaInvite: Invite code is required.");return await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Joining group via invite",{inviteCode:e}),this.socket?.groupAcceptInvite(e)}async getGroupInfoFromInvite(e){if(!e)throw new Error("getGroupInfoFromInvite: Invite code is required.");return await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching group info from invite",{inviteCode:e}),this.socket?.groupGetInviteInfo(e)}async updateGroupProfilePicture(e,t){if(!e||!t)throw new Error("updateGroupProfilePicture: Group ID and image buffer are required.");await this.ensureSocketConnected();let r=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group profile picture",{groupId:r}),this.socket?.updateProfilePicture(r,t)}async removeGroupProfilePicture(e){if(!e)throw new Error("removeGroupProfilePicture: Group ID is required.");await this.ensureSocketConnected();let t=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Removing group profile picture",{groupId:t}),this.socket?.removeProfilePicture(t)}async getGroupProfilePicture(e,t=false){if(!e)throw new Error("getGroupProfilePicture: Group ID is required.");await this.ensureSocketConnected();let r=s.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Fetching group profile picture",{groupId:r,highRes:t}),this.socket?.profilePictureUrl(r,t?"image":"preview").catch(o=>{if(o.message==="item-not-found")return null;throw o})}};var X=class s extends Y{constructor(e){super(e);}async sendMentionAll(e,t){await this.ensureSocketConnected();let r=s.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger},n=await this.getGroupMetadata(r);if(!n)throw new Error("Could not fetch group metadata");let i=n.participants.map(a=>a.id);return E(o,r,{text:t,mentions:i})}async sendReactionMessage(e,t,r){await this.ensureSocketConnected();let o=s.formatGroupId(e),n={socket:this.socket,debug:this.debug,logger:this.logger};return V(n,o,{messageId:t,emoji:r})}async deleteGroupMessage(e,t){await this.ensureSocketConnected();let r=s.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return de(o,r,{messageId:t})}async sendTextMessage(e,t){await this.ensureSocketConnected();let r=s.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return E(o,r,{text:t})}async sendButtonsMessage(e,{title:t,subtitle:r,buttons:o}){await this.ensureSocketConnected();let n=s.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return z(i,n,{subtitle:r,title:t,buttons:o})}async sendReplyButtonsMessage(e,{title:t,subtitle:r,buttons:o,mentions:n}){await this.ensureSocketConnected();let i=s.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return Q(a,i,{subtitle:r,title:t,buttons:o,mentions:n?.map(c=>s.formatPhoneNumberToWhatsappPattern(c))})}async sendMenuMessage(e,{title:t,subtitle:r,buttonText:o,sections:n}){await this.ensureSocketConnected();let i=s.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return j(a,i,{subtitle:r,title:t,sections:n,buttonText:o})}async sendLocationMessage(e,{latitude:t,longitude:r,name:o,address:n}){await this.ensureSocketConnected();let i=s.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return J(a,i,{latitude:t,longitude:r,name:o,address:n})}async sendSurveyMessage(e,{question:t,options:r,allowMultipleAnswers:o=false}){await this.ensureSocketConnected();let n=s.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return $(i,n,{options:r,question:t,allowMultipleAnswers:o})}async sendImageMessage(e,t,{caption:r="",filename:o,mentions:n}={}){await this.ensureSocketConnected();let i=s.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return T(a,i,t,{caption:r,filename:o,mentions:n?.map(c=>s.formatPhoneNumberToWhatsappPattern(c))})}async sendVideoMessage(e,t,{caption:r="",filename:o,sendAsGifPlayback:n=false,mentions:i}={}){await this.ensureSocketConnected();let a=s.formatGroupId(e),c={socket:this.socket,debug:this.debug,logger:this.logger};return B(c,a,t,{caption:r,filename:o,sendAsGifPlayback:n,mentions:i?.map(g=>s.formatPhoneNumberToWhatsappPattern(g))})}async sendAudioMessage(e,t,{filename:r,mimetype:o,seconds:n,ptt:i=false,mentions:a}={}){await this.ensureSocketConnected();let c=s.formatGroupId(e),g={socket:this.socket,debug:this.debug,logger:this.logger};return C(g,c,t,{filename:r,mimetype:o,seconds:n,ptt:i,mentions:a?.map(u=>s.formatPhoneNumberToWhatsappPattern(u))})}async sendDocumentMessage(e,t,{fileName:r,caption:o,mimetype:n,jpegThumbnail:i,mentions:a}){await this.ensureSocketConnected();let c=s.formatGroupId(e),g={socket:this.socket,debug:this.debug,logger:this.logger};return L(g,c,t,{filename:r,caption:o,mimetype:n,jpegThumbnail:i,mentions:a?.map(u=>s.formatPhoneNumberToWhatsappPattern(u))})}async sendStickerMessage(e,t,{mentions:r}={}){await this.ensureSocketConnected();let o=s.formatGroupId(e),n={socket:this.socket,debug:this.debug,logger:this.logger};return I(n,o,t,{mentions:r?.map(i=>s.formatPhoneNumberToWhatsappPattern(i))})}async sendFileMessage(e,t,{caption:r="",mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:i=true,filename:a,mentions:c}){await this.ensureSocketConnected();let g=s.formatGroupId(e),u={socket:this.socket,debug:this.debug,logger:this.logger};return q(u,g,t,{caption:r,mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:i,filename:a,mentions:c?.map(d=>s.formatPhoneNumberToWhatsappPattern(d))})}};var le=class s extends X{constructor(e){super(e);}onAnyGroupMessageReceived(e){this.messageReceivedCBs.from_any_groups||=[],this.messageReceivedCBs.from_any_groups.push(e);}offAnyGroupMessageReceived(e){this.messageReceivedCBs.from_any_groups=(this.messageReceivedCBs.from_any_groups??[]).filter(t=>t!==e);}onGroupMessageReceived(e,t){let r=s.formatGroupId(e);this.messageReceivedCBs[r]||=[],this.messageReceivedCBs[r].push(t);}offGroupMessageReceived(e,t){let r=s.formatGroupId(e);this.messageReceivedCBs[r]=this.messageReceivedCBs[r].filter(o=>o!==t);}};
3
- export{me as WhatsappSocket,le as WhatsappSocketGroup};//# sourceMappingURL=index.js.map
1
+ import Pe from'stream';import We,{useMultiFileAuthState,makeCacheableSignalKeyStore,generateWAMessageFromContent,WAProto,DisconnectReason,initAuthCreds,downloadMediaMessage}from'@fadzzzslebew/baileys';import ne from'ms';import Ge,{ReadStream}from'fs';import he from'qrcode';import {MongoClient}from'mongodb';import Le from'pino';import {basename}from'path';import {clearTimeout,setTimeout as setTimeout$1}from'timers';var ge={replacer:(r,e)=>Buffer.isBuffer(e)||e instanceof Uint8Array||e?.type==="Buffer"?{type:"Buffer",data:Buffer.from(e?.data||e).toString("base64")}:e,reviver:(r,e)=>{if(typeof e=="object"&&e&&(e.buffer===true||e.type==="Buffer")){let t=e.data||e.value;return typeof t=="string"?Buffer.from(t,"base64"):Buffer.from(t||[])}return e}},ve=async r=>{let e=(n,a)=>{let c={$set:{...JSON.parse(JSON.stringify(n,ge.replacer))}};return r.updateOne({_id:a},c,{upsert:true})},t=async n=>{try{let a=JSON.stringify(await r.findOne({_id:n}));return JSON.parse(a,ge.reviver)}catch{return null}},s=async n=>{try{await r.deleteOne({_id:n});}catch{}},o=await t("creds")||initAuthCreds();return {state:{creds:o,keys:{get:async(n,a)=>{let i={};return await Promise.all(a.map(async c=>{let g=await t(`${n}-${c}`);n==="app-state-sync-key"&&g&&(g=WAProto.Message.AppStateSyncKeyData.fromObject(g)),i[c]=g;})),i},set:async n=>{let a=[];for(let i of Object.keys(n))for(let c of Object.keys(n[i])){let g=n[i][c],u=`${i}-${c}`;a.push(g?e(g,u):s(u));}await Promise.all(a);}}},saveCreds:()=>e(o,"creds")}},ce=ve;var ue=r=>ne(r)/1e3,ae=r=>typeof r=="number"?r:ne(r),pe=async r=>Promise.resolve(r);async function k(r){let t=await(await fetch(r)).arrayBuffer();return Buffer.from(t)}async function Te(r,e){try{let{parseStream:t}=await import('music-metadata'),s=await t(r,{mimeType:e||"audio/mpeg"});return Math.floor(s.format.duration||0)}catch(t){throw console.error("Error parsing stream:",t),t}finally{r.destroyed||r.destroy();}}async function Ie(r,e){try{let{parseBuffer:t}=await import('music-metadata'),s=await t(r,e||"audio/mpeg").catch(()=>null);return s?Math.floor(s.format.duration||0):0}catch(t){throw console.error("Error parsing buffer:",t),t}}async function de(r,e){return r instanceof ReadStream?Te(r,e):Ie(r,e)}async function V(r){return new Promise((e,t)=>{let s=[];r.on("data",o=>s.push(Buffer.from(o))),r.on("error",o=>t(o)),r.on("end",()=>e(Buffer.concat(s)));})}function Q(r){let e=r?.split(".")?.pop()?.toLowerCase();return Be[e||""]||"application/octet-stream"}var U=r=>new Promise(e=>setTimeout(e,typeof r=="number"?r:ne(r))),Be={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"},me={jpg:"Image",jpeg:"Image","image/jpeg":"Image",png:"Image","image/png":"Image",ico:"Image","image/ico":"Image",svg:"Document","image/svg+xml":"Document",webp:"Sticker","image/webp":"Sticker",gif:"Image","image/gif":"Image",mp4:"Video","video/mp4":"Video",avi:"Video","video/x-msvideo":"Video",mov:"Video","video/quicktime":"Video",mkv:"Video","video/x-matroska":"Video",webm:"Video","video/webm":"Video",mp3:"Audio","audio/mpeg":"Audio",wav:"Audio","audio/wav":"Audio",ogg:"Audio","audio/ogg":"Audio",opus:"Audio","audio/opus":"Audio",aac:"Audio","audio/aac":"Audio",m4a:"Audio","audio/mp4":"Audio",pdf:"Document","application/pdf":"Document",doc:"Document","application/msword":"Document",docx:"Document","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Document",xls:"Document","application/vnd.ms-excel":"Document",xlsx:"Document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Document",ppt:"Document","application/vnd.ms-powerpoint":"Document",pptx:"Document","application/vnd.openxmlformats-officedocument.presentationml.presentation":"Document",txt:"Document","text/plain":"Document",zip:"Document","application/zip":"Document",rar:"Document","application/x-rar-compressed":"Document","7z":"Document","application/x-7z-compressed":"Document"};function le(r,e,t){let[s]=e.split("/");switch(s){case "sticker":return {sticker:r};case "image":return {image:r,caption:t.caption,mimetype:e,fileName:t.filename};case "video":return {video:r,caption:t.caption,mimetype:e,fileName:t.filename,gifPlayback:t.gifPlayback||false,jpegThumbnail:t.jpegThumbnail,...t.seconds&&{seconds:t.seconds}};case "audio":return t.ptt?{audio:r,mimetype:"audio/ogg; codecs=opus",ptt:true,...t.seconds&&{seconds:t.seconds}}:{audio:r,mimetype:e,fileName:t.filename,...t.seconds&&{seconds:t.seconds}};default:return {document:r,mimetype:e,fileName:t.filename,caption:t.caption,jpegThumbnail:t.jpegThumbnail}}}function O(r,e=2){if(r===0)return "0 Bytes";let t=1024,s=e<0?0:e,o=["Bytes","KB","MB","GB","TB","PB"],n=Math.floor(Math.log(r)/Math.log(t));return parseFloat((r/Math.pow(t,n)).toFixed(s))+" "+o[n]}async function fe(r){let e={};e.messageId=r.key.id,e.fromMe=r.key.fromMe,e.username=r.pushName??"",e.timestamp=r.messageTimestamp*1e3;let t=r.message?.buttonsResponseMessage?.contextInfo?.participant;if(e.sender=t??r.key.participant??r.key.remoteJid,e.sender.endsWith("@lid")&&(e.sender=""),e.text=r.message.conversation??r.message.extendedTextMessage?.text??void 0,e.reaction=r.message.reactionMessage?{messageId:r.message.reactionMessage?.key.id,emoji:r.message.reactionMessage?.text??"",timestamp:+r.message.reactionMessage?.senderTimestampMs}:void 0,r.message?.imageMessage){let n=r.message.imageMessage.mimetype,a=Buffer.from(r.message.imageMessage.jpegThumbnail,"base64"),i=await downloadMediaMessage(r,"buffer",{}),c=r.message.imageMessage.fileLength.low;e.image={mimetype:n,buffer:i,jpegThumbnail:a,fileLength:c,fileSize:O(c),height:r.message.imageMessage.height,width:r.message.imageMessage.width,caption:r.message.imageMessage.caption};}if(r.message?.videoMessage){let n=r.message.videoMessage.mimetype,a=Buffer.from(r.message.videoMessage.jpegThumbnail,"base64"),i=await downloadMediaMessage(r,"buffer",{}),c=r.message.videoMessage.fileLength.low;e.video={buffer:i,jpegThumbnail:a,mimetype:n,fileLength:c,fileSize:O(c),caption:r.message.videoMessage.caption};}if(r.message?.audioMessage){let n=r.message.audioMessage.mimetype,a=await downloadMediaMessage(r,"buffer",{}),i=r.message.audioMessage.fileLength.low;e.audio={buffer:a,mimetype:n,fileLength:i,fileSize:O(i),seconds:r.message.audioMessage.seconds};}if(r.message?.documentMessage){let n=r.message.documentMessage.mimetype,a=await downloadMediaMessage(r,"buffer",{}),i=r.message.documentMessage.fileLength.low;e.file={buffer:a,mimetype:n,fileLength:i,fileSize:O(i),fileName:r.message.documentMessage.fileName,caption:r.message.documentMessage.caption};}if(r.message?.stickerMessage){let n=r.message.stickerMessage.mimetype,a=await downloadMediaMessage(r,"buffer",{}),i=r.message.stickerMessage.fileLength.low;e.sticker={buffer:a,mimetype:n,fileLength:i,fileSize:O(i)};}e.location=r.message?.locationMessage?{latitude:r.message.locationMessage.degreesLatitude,longitude:r.message.locationMessage.degreesLongitude,name:r.message.locationMessage.name,address:r.message.locationMessage.address}:void 0;let s=r.message.interactiveResponseMessage?.nativeFlowResponseMessage?.name==="menu_options",o=s&&JSON.parse(r.message.interactiveResponseMessage.nativeFlowResponseMessage.paramsJson);return e.menuOption=s?{participant:r.message?.interactiveResponseMessage.contextInfo.participant,text:r.message?.interactiveResponseMessage.body.text,description:o.description,id:o.id}:void 0,e.buttonsResponse=r.message?.buttonsResponseMessage?{participant:r.message?.buttonsResponseMessage.contextInfo.participant,description:r.message?.buttonsResponseMessage.description,text:r.message?.buttonsResponseMessage.selectedDisplayText,id:r.message?.buttonsResponseMessage.selectedButtonId}:void 0,JSON.parse(JSON.stringify(e))}var ye=Le({level:"silent"}),D=class r{fileAuthStateDirectoryPath;mongoURL;mongoCollection="whatsapp-auth";logger;debug;printQRInTerminal;messageReceivedCBs={};pairingPhone;customPairingCode;appName;onPreConnectionSendMessageFailed;onOpen;onClose;onQR;onConnectionStatusChange;static DEFAULT_COUNTRY_CODE="972";static CONNECTION_TIMEOUT="2s";static formatPhoneNumber(e,t=r.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e;let s=e.replace(/[^0-9]/g,"");return s.startsWith("05")&&(s=s.substring(1)),s.startsWith(t)||(s=t+s),s}static formatPhoneNumberToWhatsappPattern(e,t=r.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e.replace(/:\d+@/,"@");let s=r.formatPhoneNumber(e,t);return s=`${s}@s.whatsapp.net`,s=s.replace(/:\d+@/,"@"),s}static getWhatsappPhoneLink({phone:e,message:t,countryCode:s=r.DEFAULT_COUNTRY_CODE}){let o=this.formatPhoneNumber(e,s),n=t?`?text=${encodeURI(t)}`:"";return `https://wa.me/${o}${n}`}static async qrToImage(e,t={}){return he.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...t})}static async qrToTerminalString(e,t={}){return he.toString(e,{type:"terminal",small:true,...t})}static randomPairingCode(e,t=8){if(!e.includes("[")&&e.length===t)return e;let s="",o=[],n=i=>{let c=[];for(let g=0;g<i.length;g++)if(i[g+1]==="-"&&i[g+2]){let u=i.charCodeAt(g),p=i.charCodeAt(g+2);for(let d=u;d<=p;d++)c.push(String.fromCharCode(d));g+=2;}else c.push(i[g]);return c};for(let i=0;i<e.length&&s.length<t;i++){let c=e[i];if(c==="["){let g=e.indexOf("]",i),u=e.slice(i+1,g);o=n(u),i=g;}else s+=c;}for(;s.length<t&&o.length;)s+=o[Math.floor(Math.random()*o.length)];let a=s.toUpperCase();return a.padEnd(t,a)}static instances=new Map;static getInstance(e){let t=r.buildSocketKey(e);return r.instances.has(t)||new r(e),r.instances.get(t)}static clearInstance(e){e?r.instances.delete(e):r.instances.clear();}constructor(e){let{fileAuthStateDirectoryPath:t,mongoURL:s,mongoCollection:o="whatsapp-auth",logger:n,onOpen:a,onClose:i,onQR:c,onConnectionStatusChange:g,debug:u,printQRInTerminal:p,customPairingCode:d,onPreConnectionSendMessageFailed:h,appName:w,pairingPhone:M}=e;this.appName=w,this.mongoURL=s,this.fileAuthStateDirectoryPath=t,this.mongoCollection=o,this.logger=n,this.debug=u,this.printQRInTerminal=p,this.pairingPhone=M,this.customPairingCode=d,this.onPreConnectionSendMessageFailed=h,this.onConnectionStatusChange=g,this.onOpen=a,this.onClose=i,this.onQR=c,r.instances.has(this.socketKey)&&(this.socket=r.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 t of e)try{let s=await fetch(t);if(s.ok)return (await s.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(){return new Promise(async(e,t)=>{if(!this.mongoURL){e([]);return}let s=new MongoClient(this.mongoURL);await s.connect().then(()=>{let o=s.db().collection(this.mongoCollection);e([o,s]);}).catch(o=>{this.logger?.error("WHASTAPP","Error connecting to MongoDB connection",o),t(o);});})}async authenticate(){if(!this.mongoURL&&!this.fileAuthStateDirectoryPath)throw new Error("fileAuthStateDirectoryPath/MongoURL is missing");if(!this.mongoURL){let{saveCreds:n,state:a}=await useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:a,saveCreds:n}}let[e]=await this.getAuthCollection(),{state:t,saveCreds:s}=await ce(e);return {auth:{creds:t.creds,keys:makeCacheableSignalKeyStore(t.keys,ye)},saveCreds:s}}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 r.instances.get(this.socketKey)??null}set socket(e){r.instances.set(this.socketKey,e);}async startConnection({options:e,connectionAttempts:t=3,onOpen:s=this.onOpen,onClose:o=this.onClose,onQR:n=this.onQR,onConnectionStatusChange:a=this.onConnectionStatusChange,pairingPhone:i,debug:c}={}){let g=i??this.pairingPhone,{saveCreds:u,auth:p}=await this.authenticate(),d=c===void 0?this.debug:c,h=await this.getLatestWhatsAppVersion(),w=async()=>new Promise(S=>{let A=We({version:h,logger:ye,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:false,shouldSyncHistoryMessage:()=>false,shouldIgnoreJid:v=>v.includes("@newsletter"),...e,printQRInTerminal:false,auth:p});A.ev.on("connection.update",async v=>{let{connection:I,lastDisconnect:B,qr:f}=v;if(f){if(d&&this.logger?.info("WHATSAPP","QR Code received",{qr:f}),this.printQRInTerminal){let R=await r.qrToTerminalString(f,{small:true}).catch(()=>null);console.log(R);}this.customPairingCode?r.randomPairingCode(this.customPairingCode):void 0;let C=g?r.formatPhoneNumber(g):null,W=C?await A.requestPairingCode(C):null;d&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:W,pairingPhone:C}),await n?.(f,W);}switch(I){case "connecting":{d&&this.logger?.debug("WHATSAPP","Connecting..."),a?.("connecting");break}case "open":{d&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=A,await s?.(),a?.("open"),S(this.socket);break}case "close":{let P=t-- >0&&B?.error?.output?.statusCode!==DisconnectReason.loggedOut,C=B?.error?.output?.statusCode,W=B?.error?.message;d&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:C,errorMessage:W,shouldReconnect:P}),P&&t?(d&&this.logger?.info("WHATSAPP","Reconnecting..."),await U(r.CONNECTION_TIMEOUT),S(w())):(d&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,S(this.socket)),a?.("close");break}}}),A.ev.on("creds.update",u),A.ev.on("messages.upsert",async v=>{if(!Object.keys(this.messageReceivedCBs).length)return;this.logger?.info("WHATSAPP","Received messages",{type:v.type,totalMessages:v.messages.length});let I=v.messages,B=await Promise.allSettled(I.filter(f=>f.message).map(async f=>fe(f)));B.map((f,P)=>({...f,message:I[P]})).filter(f=>f.status==="rejected").forEach(({reason:f,message:P})=>{this.logger?.error("WHATSAPP","failed to handle message",{error:f?.message,message:P});}),B.filter(f=>f.status==="fulfilled").forEach(({value:f})=>{console.log("handle message",f);let{sender:P,messageId:C,username:W,timestamp:R,fromMe:q,...y}=f;Object.keys(this.messageReceivedCBs).filter(b=>["from_any_groups","from_any_phones",P].includes(b)).forEach(async b=>{this.messageReceivedCBs[b]?.forEach(x=>{P&&x(P,C,{username:W,timestamp:R,fromMe:q,data:y});});});});});}),M=await w();return await U(r.CONNECTION_TIMEOUT),M}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,t]=await this.getAuthCollection();this.debug&&this.logger?.info("WHATSAPP","Deleting auth state, required to scanning QR again"),await e?.deleteMany({}),await t?.close();}else this.fileAuthStateDirectoryPath&&Ge.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:t=true}={}){await this.clearAuthState(),t&&(await U(r.CONNECTION_TIMEOUT),await this.startConnection({pairingPhone:e}));}isConnected(){return !!this.socket?.user}myJID(){return this.socket?.user?.id?r.formatPhoneNumberToWhatsappPattern(this.socket?.user?.id):null}async deleteMessage(e,t,s=true){if(await this.ensureSocketConnected(),!this.socket)throw new Error("Socket not connected");let o=r.formatPhoneNumberToWhatsappPattern(t);try{if(s){let n=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}),n}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(n){throw this.debug&&this.logger?.error("WHATSAPP","Failed to delete message",{messageId:e,chatJid:o,error:n.message}),n}}async deleteMessages(e,t=true){await this.ensureSocketConnected();let s=[];for(let{messageId:o,chatJid:n}of e)try{let a=await this.deleteMessage(o,n,t);s.push({success:!0,messageId:o,result:a}),await U("500ms");}catch(a){s.push({success:false,messageId:o,error:a.message});}return s}async loadRecentMessages(e,t){await this.ensureSocketConnected();let s=r.formatPhoneNumberToWhatsappPattern(e);try{return await this.socket?.waitForMessage(t,3e3)||null}catch(o){return this.debug&&this.logger?.error("WHATSAPP","Failed to load message history",{chatJid:s,error:o.message}),null}}async getContactByJid(e){if(!e)return;await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching contacts");let t=this.socket?.store?.contacts[e];return this.debug&&this.logger?.debug("WHATSAPP","Contacts fetched",{remoteJid:e,contact:t}),t}async getContacts(e,t=true){await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching contacts");let s=Object.values(this.socket?.store?.contacts||{});if(e?.trim()){let o=t?e?.trim().split(" "):[e?.trim()];s=s.filter(n=>o.some(a=>n.name?.includes(a)));}return this.debug&&this.logger?.debug("WHATSAPP","Contacts fetched",{count:s.length}),s}async areRegisteredOnWhatsApp(e){await this.ensureSocketConnected();let t=[].concat(e).map(a=>r.formatPhoneNumberToWhatsappPattern(a));this.debug&&this.logger?.debug("WHATSAPP","Checking is registered numbers",{count:t.length});let s=await this.socket?.onWhatsApp(...t),n=(await Promise.allSettled((s??[]).map(async(a,i)=>({phone:t[i],exists:!!a?.exists,jid:a?.jid,contact:await this.getContactByJid(a.jid)})))).filter(a=>a.status==="fulfilled").map(a=>a.value);return this.debug&&this.logger?.debug("WHATSAPP","Multiple registration check results",{total:n.length,registered:n.filter(a=>a.exists).length}),n}};async function T({debug:r,logger:e,socket:t},s,o,{mentions:n,...a}){let i=o instanceof Buffer?o:await V(o),c=a.mimetype||Q(a.filename),g=le(i,c,a),u={...a.replyToMessageId&&{quoted:{key:{id:a.replyToMessageId}}},...n?.length&&{mentions:n}};return r&&e?.debug("WHATSAPP","sendFileFromStream",{jid:s,mimetype:c,caption:g?.caption,fileName:g?.fileName}),t?.sendMessage(s,g,u)}async function G({debug:r,logger:e,socket:t},s,o,{filename:n="audio-message.mp3",replyToMessageId:a,mimetype:i,seconds:c,ptt:g,mentions:u}={}){if(!s||!o)throw new Error("sendAudioMessage: jid and audio source are required.");n=n&&decodeURIComponent(n);let p=typeof o=="string"?await k(o):o,d=c||await de(p,i).catch(()=>0);return r&&e?.debug("WHATSAPP","send audio message",{jid:s,mimetype:i,filename:n,seconds:d,replyToMessageId:a}),T({debug:r,logger:e,socket:t},s,p,{filename:n,...g!==void 0&&{ptt:g},...i&&{mimetype:i},...d&&{seconds:d},...a&&{replyToMessageId:a},...u?.length&&{mentions:u}})}var K=({debug:r,logger:e,socket:t},s,{subtitle:o,title:n,buttons:a})=>{if(!n||!a.length)throw new Error("sendButtonsMessage: No title or buttons required field found.");let i=a?.map(g=>{let u={display_text:g.label},p;switch(true){case !!g.url:p="cta_url",u.url=g.url,u.url=u.url.startsWith("http")?u.url:`https://${u.url}`;break;case !!g.copy:p="cta_copy",u.copy_code=g.copy;break;case !!g.tel:p="cta_call",u.phone_number=g.tel;break;case !!g.email:p="cta_email",u.email=g.email;break;case !!(g.reminderOn||g.reminderDate):p="cta_reminder";let{reminderOn:d,reminderDate:h}=g;u.reminder_name=g.reminderName,u.reminder_timestamp=h?Math.floor(+new Date(h)/1e3):Math.floor(Date.now()/1e3)+ue(d??"0s");break;default:p="";break}return {name:p,buttonParamsJson:JSON.stringify(u)}}).filter(g=>g.name),c=generateWAMessageFromContent(s,{viewOnceMessage:{message:{interactiveMessage:WAProto.Message.InteractiveMessage.create({...n&&{body:WAProto.Message.InteractiveMessage.Body.create({text:n})},...o&&{footer:WAProto.Message.InteractiveMessage.Footer.create({text:o})},...!!i?.length&&{nativeFlowMessage:WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:i})}})}}},{userJid:s});return r&&e?.debug("WHATSAPP","send buttons message",{jid:s,footer:o,body:n,buttons:i}),t?.relayMessage(s,c.message,{messageId:c.key.id})};var be=({debug:r,logger:e,socket:t},s,{messageId:o})=>{if(!o)throw new Error("sendDeleteMessage: No title or buttons required field found.");return r&&e?.debug("WHATSAPP","Deleting message",{jid:s,messageId:o}),t?.sendMessage(s,{delete:{id:o,remoteJid:s,fromMe:true}})};async function H({debug:r,logger:e,socket:t},s,o,{filename:n="audio-message.mp3",caption:a="",mimetype:i,mentions:c,jpegThumbnail:g}={}){if(!s||!o)throw new Error("sendDocumentMessage: jid and document source are required.");n=n&&decodeURIComponent(n);let u=typeof o=="string"?await k(o):o;return r&&e?.debug("WHATSAPP","send document message",{jid:s,mimetype:i,filename:n,caption:a}),T({debug:r,logger:e,socket:t},s,u,{filename:n,...a&&{caption:a},...i&&{mimetype:i},...g&&{jpegThumbnail:g},...c?.length&&{mentions:c}})}async function F({debug:r,logger:e,socket:t},s,o,{caption:n="",filename:a="image.jpg",mentions:i}={}){if(!s||!o)throw new Error("sendImageMessage: jid and image source are required.");a=a&&decodeURIComponent(a);let c=typeof o=="string"?await k(o):o;return r&&e?.debug("WHATSAPP","send image message",{jid:s,caption:n,filename:a}),T({debug:r,logger:e,socket:t},s,c,{filename:a,...i?.length&&{mentions:i}})}async function L({debug:r,logger:e,socket:t},s,o,{caption:n="",filename:a="video.mp4",sendAsGifPlayback:i=false,mentions:c}={}){if(!s||!o)throw new Error("sendVideoMessage: jid and video source are required.");a=a&&decodeURIComponent(a);let g=typeof o=="string"?await k(o):o;return r&&e?.debug("WHATSAPP","send video message",{jid:s,filename:a,gifPlayback:i,mentions:c,caption:n}),T({debug:r,logger:e,socket:t},s,g,{filename:a,...n&&{caption:n},...i&&{gifPlayback:i},...c?.length&&{mentions:c}})}async function E({debug:r,logger:e,socket:t},s,o,{mentions:n}={}){if(!s||!o)throw new Error("sendStickerMessage: jid and sticker image source are required.");let a=typeof o=="string"?await k(o):o;return r&&e?.debug("WHATSAPP","send sticker message",{jid:s}),T({debug:r,logger:e,socket:t},s,a,{mimetype:"sticker",filename:"sticker.webp",...n?.length&&{mentions:n}})}async function Y({debug:r,logger:e,socket:t},s,o,{caption:n="",mimetype:a,jpegThumbnailSrc:i,autoMessageClassification:c=true,filename:g,mentions:u}){let p;typeof i=="string"?p=await k(i):i instanceof Pe?p=await V(i):p=i;let d=typeof o=="string"?await k(o):o;if(o instanceof Pe);else typeof o=="string"&&(g=basename(o));g=g&&decodeURIComponent(g),a||=Q(g),a=a?.toLowerCase(),r&&e?.debug("WHATSAPP","send file message",{jid:s,caption:n,mimetype:a,filename:g,includeJpegThumbnail:!!p});let h=true,w;if(c)switch(me[a]){case "Image":w=await F({debug:r,logger:e,socket:t},s,d,{caption:n,filename:g,mentions:u}).catch(()=>h=false);break;case "Sticker":w=await E({debug:r,logger:e,socket:t},s,d,{mentions:u}).catch(()=>h=false);break;case "Video":w=await L({debug:r,logger:e,socket:t},s,d,{caption:n,filename:g,mentions:u}).catch(()=>h=false);break;case "Audio":w=await G({debug:r,logger:e,socket:t},s,d,{mimetype:a,filename:g,mentions:u}).catch(()=>h=false);break;default:return await H({debug:r,logger:e,socket:t},s,d,{caption:n,mimetype:a,filename:g,jpegThumbnail:p,mentions:u})}if(w&&h)return w;if(!c||!h)return await H({debug:r,logger:e,socket:t},s,d,{caption:n,mimetype:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",filename:g,jpegThumbnail:p,mentions:u})}async function X({debug:r,logger:e,socket:t},s,{latitude:o,longitude:n,name:a,address:i}){if(o===void 0||n===void 0)throw new Error("sendLocation: latitude and longitude are required fields.");if(o<-90||o>90)throw new Error("sendLocation: latitude must be between -90 and 90.");if(n<-180||n>180)throw new Error("sendLocation: longitude must be between -180 and 180.");return r&&e?.debug("WHATSAPP","send location message",{jid:s,latitude:o,longitude:n,name:a,address:i}),t?.sendMessage(s,{location:{degreesLatitude:o,degreesLongitude:n,...a&&{name:a},...i&&{address:i}}})}async function Z({debug:r,logger:e,socket:t},s,{title:o,subtitle:n,buttonText:a,sections:i}){if(!o||!a||!i||i.length===0)throw new Error("sendMenuMessage: title, buttonText, and sections are required.");let c=generateWAMessageFromContent(s,{viewOnceMessage:{message:{interactiveMessage:WAProto.Message.InteractiveMessage.create({body:WAProto.Message.InteractiveMessage.Body.create({text:o}),...n&&{footer:WAProto.Message.InteractiveMessage.Footer.create({text:n})},header:WAProto.Message.InteractiveMessage.Header.create({title:a,hasMediaAttachment:false}),nativeFlowMessage:WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:[{name:"single_select",buttonParamsJson:JSON.stringify({title:a,sections:i.map(g=>({title:g.title,rows:g.rows.map(u=>({header:u.title,title:u.title,description:u.description||"",id:u.id}))}))})}]})})}}},{userJid:s});return r&&e?.debug("WHATSAPP","send menu message",{jid:s,title:o,buttonText:a,sectionsCount:i.length,totalRows:i.reduce((g,u)=>g+u.rows.length,0)}),t?.relayMessage(s,c.message,{messageId:c.key.id})}var J=({debug:r,logger:e,socket:t},s,{messageId:o,emoji:n})=>{if(!s||!o||!n)throw new Error("sendReactionMessage: message ID, and emoji are required.");return r&&e?.debug("WHATSAPP","Sending reaction to group message",{jid:s,messageId:o,emoji:n}),t?.sendMessage(s,{react:{text:n,key:{id:o,remoteJid:s}}})};async function _({debug:r,logger:e,socket:t},s,{title:o,subtitle:n,buttons:a,mentions:i}){if(!o||!a.length)throw new Error("sendReplyButtonsMessage: No title or buttons required field found.");let c=a.filter(u=>u).map((u,p)=>typeof u=="string"?{buttonId:`id-${p}`,buttonText:{displayText:u},type:1}:{buttonId:`${u.id}`,buttonText:{displayText:u.label},type:1}),g={text:o,buttons:c,...n&&{footer:n}};return i?.length&&(g.mentions=i),r&&e?.debug("WHATSAPP","send reply buttons message",{jid:s,text:o,footer:n,buttons:c}),t?.sendMessage(s,g)}async function ee({debug:r,logger:e,socket:t},s,{question:o,options:n,allowMultipleAnswers:a=false}){if(!o||!n||n.length<2)throw new Error("sendSurveyMessage: question and at least 2 options are required.");if(n.length>12)throw new Error("sendSurveyMessage: maximum 12 options allowed.");let i=n;return r&&e?.debug("WHATSAPP","send survey message",{jid:s,question:o,options:i,allowMultipleAnswers:a}),t?.sendMessage(s,{poll:{name:o,values:i,selectableCount:a?n.length:1}})}var j=({debug:r,logger:e,socket:t},s,{text:o,mentions:n})=>{let a=o?.text??o;if(!a)throw new Error("sendTextMessage: No title or buttons required field found.");return r&&e?.debug("WHATSAPP","send text message",{jid:s,text:a}),t?.sendMessage(s,{text:a,...n?.length&&{mentions:n}})};var te=class r extends D{timers={};constructor(e){super(e);}async sendMessageByType(e,t,s){switch(t){case "text":await this.sendTextMessage(e,s);break;case "reply":await this.sendReplyButtonsMessage(e,s);break;case "menu":await this.sendMenuMessage(e,s);break;case "buttons":await this.sendButtonsMessage(e,s);break;case "image":await this.sendImageMessage(e,s);break;case "video":await this.sendVideoMessage(e,s);break;case "audio":await this.sendAudioMessage(e,s);break;case "location":await this.sendLocationMessage(e,s);break}}async setTimer(e,t,s,o,n=["\u2705 \u05D4\u05D4\u05D5\u05D3\u05E2\u05D4 \u05EA\u05D9\u05E9\u05DC\u05D7 \u05D1-{date}","\u05D0\u05DC \u05D4\u05DE\u05E1\u05E4\u05E8: {phone}","\u05DE\u05D6\u05D4\u05D4 \u05D4\u05D1\u05E7\u05E9\u05D4: {timerId}"].join(`
3
+ `)){let a=setTimeout(()=>this.sendMessageByType(e,t,s),o);return this.timers[e]||={},this.timers[e][+a]={timeoutId:o,date:new Date(new Date().getTime()+o),data:s,messageType:t},n&&await this.sendTextMessage(null,n.replace("{date}",this.timers[e][+a].date.toLocaleString("he-IL")).replace("{timerId}",`${+a}`).replace("{phone}",e.split("@")[0])),a}getTimers(e){return Object.entries(this.timers[e]??{}).map(([t,s])=>({code:t,message:s}))}removeTimerId(e,t){clearTimeout(t),delete this.timers[e][t];}resetTimers(e){if(e){Object.keys(this.timers[e]??{}).forEach(clearTimeout),delete this.timers[e];return}Object.keys(this.timers).forEach(t=>Object.keys(this.timers[t]).forEach(clearTimeout)),this.timers={};}async deleteMessageById(e,t){return this.deleteMessage(e,t,true)}async sendTextMessage(e,t){await this.ensureSocketConnected();let s=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),o={socket:this.socket,debug:this.debug,logger:this.logger};return j(o,s,{text:t})}async sendButtonsMessage(e,{subtitle:t,title:s,buttons:o}){await this.ensureSocketConnected();let n=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),a={socket:this.socket,debug:this.debug,logger:this.logger};return K(a,n,{subtitle:t,title:s,buttons:o})}async sendMenuMessage(e,{title:t,subtitle:s,buttonText:o,sections:n}){await this.ensureSocketConnected();let a=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),i={socket:this.socket,debug:this.debug,logger:this.logger};return Z(i,a,{subtitle:s,title:t,sections:n,buttonText:o})}async sendReplyButtonsMessage(e,{title:t,subtitle:s,buttons:o}){await this.ensureSocketConnected();let n=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),a={socket:this.socket,debug:this.debug,logger:this.logger};return _(a,n,{subtitle:s,title:t,buttons:o})}async sendLocationMessage(e,{latitude:t,longitude:s,name:o,address:n}){await this.ensureSocketConnected();let a=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),i={socket:this.socket,debug:this.debug,logger:this.logger};return X(i,a,{latitude:t,longitude:s,name:o,address:n})}async sendSurveyMessage(e,{question:t,options:s,allowMultipleAnswers:o=false}){await this.ensureSocketConnected();let n=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),a={socket:this.socket,debug:this.debug,logger:this.logger};return ee(a,n,{options:s,question:t,allowMultipleAnswers:o})}async sendReactionMessage(e,t,s){await this.ensureSocketConnected();let o=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),n={socket:this.socket,debug:this.debug,logger:this.logger};return J(n,o,{messageId:t,emoji:s})}async sendImageMessage(e,t,{caption:s="",filename:o}={}){await this.ensureSocketConnected();let n=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),a={socket:this.socket,debug:this.debug,logger:this.logger};return F(a,n,t,{caption:s,filename:o})}async sendVideoMessage(e,t,{caption:s="",filename:o,sendAsGifPlayback:n=false}={}){await this.ensureSocketConnected();let a=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),i={socket:this.socket,debug:this.debug,logger:this.logger};return L(i,a,t,{caption:s,filename:o,sendAsGifPlayback:n})}async sendAudioMessage(e,t,{filename:s,replyToMessageId:o,mimetype:n,seconds:a}={}){await this.ensureSocketConnected();let i=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),c={socket:this.socket,debug:this.debug,logger:this.logger};return G(c,i,t,{filename:s,replyToMessageId:o,mimetype:n,seconds:a})}async sendStickerMessage(e,t){await this.ensureSocketConnected();let s=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),o={socket:this.socket,debug:this.debug,logger:this.logger};return E(o,s,t)}async sendFileMessage(e,t,{caption:s="",mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:a=true,filename:i}){await this.ensureSocketConnected();let c=e?r.formatPhoneNumberToWhatsappPattern(e):this.myJID(),g={socket:this.socket,debug:this.debug,logger:this.logger};return Y(g,c,t,{autoMessageClassification:a,jpegThumbnailSrc:n,mimetype:o,filename:i,caption:s})}};var se=class r extends te{constructor(e){super(e);}onAnyMessageReceived(e){this.messageReceivedCBs.from_any_phones||=[],this.messageReceivedCBs.from_any_phones.push(e);}offAnyMessageReceived(e){this.messageReceivedCBs.from_any_phones=(this.messageReceivedCBs.from_any_phones??[]).filter(t=>t!==e);}onPhoneMessageReceived(e,t){let s=e&&r.formatPhoneNumberToWhatsappPattern(e);this.messageReceivedCBs[s]||=[],this.messageReceivedCBs[s].push(t);}offPhoneMessageReceived(e,t){let s=r.formatPhoneNumberToWhatsappPattern(e);this.messageReceivedCBs[s]=t?(this.messageReceivedCBs[s]??[]).filter(o=>o!==t):[];}};var re=class r extends D{static formatGroupId(e){return e.endsWith("@g.us")?e:`${e.replace(/@s\.whatsapp\.net|@g\.us/g,"")}@g.us`}static isGroupId(e){return e.endsWith("@g.us")}constructor(e){super(e);}async createGroup({name:e,participants:t,description:s}){if(!e)throw new Error("createGroup: Group name is required.");await this.ensureSocketConnected();let o=(t??[]).map(a=>r.formatPhoneNumberToWhatsappPattern(a));if(o.length===0){let a=this.socket?.user?.id;if(!a)throw new Error("createGroup: Could not get bot user ID. Make sure socket is connected.");let i=r.formatPhoneNumberToWhatsappPattern(a);o.push(i),this.debug&&this.logger?.debug("WHATSAPP","No participants provided, creating group with self only",{selfJid:a});}this.debug&&this.logger?.debug("WHATSAPP","Creating group",{name:e,description:s,participants:o});let n=await this.socket?.groupCreate(e,o);if(s&&n?.id){let a=r.formatGroupId(n.id);await this.updateGroupDescription(a,s);}return n}async updateGroupName(e,t){if(!e||!t)throw new Error("updateGroupName: Group ID and new name are required.");await this.ensureSocketConnected();let s=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group name",{groupId:s,newName:t}),this.socket?.groupUpdateSubject(s,t)}async updateGroupDescription(e,t,s=false){if(!e)throw new Error("updateGroupDescription: Group ID is required.");await this.ensureSocketConnected();let o=r.formatGroupId(e);return s&&await this.socket?.groupMetadata(o).then(n=>{this.debug&&this.logger?.debug("WHATSAPP","Fetch group description metadata",n);}).catch(n=>{this.debug&&this.logger?.warn("WHATSAPP","Failed to update group description metadata",{error:n});}),this.debug&&this.logger?.debug("WHATSAPP","Updating group description",{groupId:o}),this.socket?.groupUpdateDescription(o,t||"")}async updateGroupSettings(e,t){if(!e||!t)throw new Error("updateGroupSettings: Group ID and setting are required.");await this.ensureSocketConnected();let s=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group settings",{groupId:s,setting:t}),this.socket?.groupSettingUpdate(s,t)}async updateGroupParticipants(e,t,s){if(!e)throw new Error("addParticipants: Group ID is required.");let o=[].concat(t).filter(i=>i);if(!o?.length)return;await this.ensureSocketConnected();let n=r.formatGroupId(e),a=o.map(i=>r.formatPhoneNumberToWhatsappPattern(i));return this.debug&&this.logger?.debug("WHATSAPP",`${s} participants to group`,{groupId:n,participantsCount:a.length}),this.socket?.groupParticipantsUpdate(n,a,s)}async addParticipants(e,t){return this.updateGroupParticipants(e,t,"add")}async removeParticipants(e,t){return this.updateGroupParticipants(e,t,"remove")}async promoteToAdmin(e,t){return this.updateGroupParticipants(e,t,"promote")}async demoteFromAdmin(e,t){return this.updateGroupParticipants(e,t,"demote")}async leaveGroup(e){if(!e)throw new Error("leaveGroup: Group ID is required.");await this.ensureSocketConnected();let t=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Leaving group",{groupId:t}),this.socket?.groupLeave(t)}async getGroupMetadata(e){if(!e)throw new Error("getGroupMetadata: Group ID is required.");await this.ensureSocketConnected();let t=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Fetching group metadata",{groupId:t}),this.socket?.groupMetadata(t)}async getAllGroups(){await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching all groups");let e=await this.socket?.groupFetchAllParticipating();return e?Object.values(e):[]}async getGroupInviteCode(e,t){if(!e)throw new Error("getGroupInviteCode: Group ID is required.");await this.ensureSocketConnected();let s=r.formatGroupId(e);this.debug&&this.logger?.debug("WHATSAPP","Fetching group invite code",{groupId:s});let o=await this.socket?.groupInviteCode(s);return t&&o?`https://chat.whatsapp.com/${o}`:o}async revokeGroupInviteCode(e){if(!e)throw new Error("revokeGroupInviteCode: Group ID is required.");await this.ensureSocketConnected();let t=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Revoking group invite code",{groupId:t}),this.socket?.groupRevokeInvite(t)}async joinGroupViaInvite(e){if(!e)throw new Error("joinGroupViaInvite: Invite code is required.");return await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Joining group via invite",{inviteCode:e}),this.socket?.groupAcceptInvite(e)}async getGroupInfoFromInvite(e){if(!e)throw new Error("getGroupInfoFromInvite: Invite code is required.");return await this.ensureSocketConnected(),this.debug&&this.logger?.debug("WHATSAPP","Fetching group info from invite",{inviteCode:e}),this.socket?.groupGetInviteInfo(e)}async updateGroupProfilePicture(e,t){if(!e||!t)throw new Error("updateGroupProfilePicture: Group ID and image buffer are required.");await this.ensureSocketConnected();let s=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Updating group profile picture",{groupId:s}),this.socket?.updateProfilePicture(s,t)}async removeGroupProfilePicture(e){if(!e)throw new Error("removeGroupProfilePicture: Group ID is required.");await this.ensureSocketConnected();let t=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Removing group profile picture",{groupId:t}),this.socket?.removeProfilePicture(t)}async getGroupProfilePicture(e,t=false){if(!e)throw new Error("getGroupProfilePicture: Group ID is required.");await this.ensureSocketConnected();let s=r.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Fetching group profile picture",{groupId:s,highRes:t}),this.socket?.profilePictureUrl(s,t?"image":"preview").catch(o=>{if(o.message==="item-not-found")return null;throw o})}};var oe=class r extends re{constructor(e){super(e);}async sendMentionAll(e,t){await this.ensureSocketConnected();let s=r.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger},n=await this.getGroupMetadata(s);if(!n)throw new Error("Could not fetch group metadata");let a=n.participants.map(i=>i.id);return j(o,s,{text:t,mentions:a})}async sendReactionMessage(e,t,s){await this.ensureSocketConnected();let o=r.formatGroupId(e),n={socket:this.socket,debug:this.debug,logger:this.logger};return J(n,o,{messageId:t,emoji:s})}async deleteGroupMessage(e,t){await this.ensureSocketConnected();let s=r.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return be(o,s,{messageId:t})}async sendTextMessage(e,t){await this.ensureSocketConnected();let s=r.formatGroupId(e),o={socket:this.socket,debug:this.debug,logger:this.logger};return j(o,s,{text:t})}async sendButtonsMessage(e,{title:t,subtitle:s,buttons:o}){await this.ensureSocketConnected();let n=r.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return K(a,n,{subtitle:s,title:t,buttons:o})}async sendReplyButtonsMessage(e,{title:t,subtitle:s,buttons:o,mentions:n}){await this.ensureSocketConnected();let a=r.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return _(i,a,{subtitle:s,title:t,buttons:o,mentions:n?.map(c=>r.formatPhoneNumberToWhatsappPattern(c))})}async sendMenuMessage(e,{title:t,subtitle:s,buttonText:o,sections:n}){await this.ensureSocketConnected();let a=r.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return Z(i,a,{subtitle:s,title:t,sections:n,buttonText:o})}async sendLocationMessage(e,{latitude:t,longitude:s,name:o,address:n}){await this.ensureSocketConnected();let a=r.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return X(i,a,{latitude:t,longitude:s,name:o,address:n})}async sendSurveyMessage(e,{question:t,options:s,allowMultipleAnswers:o=false}){await this.ensureSocketConnected();let n=r.formatGroupId(e),a={socket:this.socket,debug:this.debug,logger:this.logger};return ee(a,n,{options:s,question:t,allowMultipleAnswers:o})}async sendImageMessage(e,t,{caption:s="",filename:o,mentions:n}={}){await this.ensureSocketConnected();let a=r.formatGroupId(e),i={socket:this.socket,debug:this.debug,logger:this.logger};return F(i,a,t,{caption:s,filename:o,mentions:n?.map(c=>r.formatPhoneNumberToWhatsappPattern(c))})}async sendVideoMessage(e,t,{caption:s="",filename:o,sendAsGifPlayback:n=false,mentions:a}={}){await this.ensureSocketConnected();let i=r.formatGroupId(e),c={socket:this.socket,debug:this.debug,logger:this.logger};return L(c,i,t,{caption:s,filename:o,sendAsGifPlayback:n,mentions:a?.map(g=>r.formatPhoneNumberToWhatsappPattern(g))})}async sendAudioMessage(e,t,{filename:s,mimetype:o,seconds:n,ptt:a=false,mentions:i}={}){await this.ensureSocketConnected();let c=r.formatGroupId(e),g={socket:this.socket,debug:this.debug,logger:this.logger};return G(g,c,t,{filename:s,mimetype:o,seconds:n,ptt:a,mentions:i?.map(u=>r.formatPhoneNumberToWhatsappPattern(u))})}async sendDocumentMessage(e,t,{fileName:s,caption:o,mimetype:n,jpegThumbnail:a,mentions:i}){await this.ensureSocketConnected();let c=r.formatGroupId(e),g={socket:this.socket,debug:this.debug,logger:this.logger};return H(g,c,t,{filename:s,caption:o,mimetype:n,jpegThumbnail:a,mentions:i?.map(u=>r.formatPhoneNumberToWhatsappPattern(u))})}async sendStickerMessage(e,t,{mentions:s}={}){await this.ensureSocketConnected();let o=r.formatGroupId(e),n={socket:this.socket,debug:this.debug,logger:this.logger};return E(n,o,t,{mentions:s?.map(a=>r.formatPhoneNumberToWhatsappPattern(a))})}async sendFileMessage(e,t,{caption:s="",mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:a=true,filename:i,mentions:c}){await this.ensureSocketConnected();let g=r.formatGroupId(e),u={socket:this.socket,debug:this.debug,logger:this.logger};return Y(u,g,t,{caption:s,mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:a,filename:i,mentions:c?.map(p=>r.formatPhoneNumberToWhatsappPattern(p))})}};var Me=class r extends oe{constructor(e){super(e);}onAnyGroupMessageReceived(e){this.messageReceivedCBs.from_any_groups||=[],this.messageReceivedCBs.from_any_groups.push(e);}offAnyGroupMessageReceived(e){this.messageReceivedCBs.from_any_groups=(this.messageReceivedCBs.from_any_groups??[]).filter(t=>t!==e);}onGroupMessageReceived(e,t){let s=r.formatGroupId(e);this.messageReceivedCBs[s]||=[],this.messageReceivedCBs[s].push(t);}offGroupMessageReceived(e,t){let s=r.formatGroupId(e);this.messageReceivedCBs[s]=this.messageReceivedCBs[s].filter(o=>o!==t);}};var ke=class{schema;phone;client;schemaRefs={};remoteFlow={};dataFlow={};timeoutFlow={};lastMessages={};constructor(e,t){this.phone=t&&se.formatPhoneNumberToWhatsappPattern(t),this.schema=e,this.updateSchemaRefs(this.schema.flow);}updateSchemaRefs(e){e&&Object.keys(e.response??{}).forEach(t=>{this.schemaRefs[t]=e.response?.[t];});}set socket(e){this.client=e,this.onMessageReceived();}get socket(){return this.client}async sendMessageList(e,t){let s=[].concat(t).filter(n=>n);if(!s?.length)return false;let o=[];for(let n of s){typeof n=="function"&&(n=await n(e,this.dataFlow[e]));let[a,{forceExit:i,timeout:c,...g}]=Object.entries(n)[0],u=c?ae(c):0;if(u)return this.client?.setTimer(e,a,g,u),i;let p;switch(a){case "text":p=await this.client?.sendTextMessage(e,g);break;case "reply":p=await this.client?.sendReplyButtonsMessage(e,g);break;case "menu":p=await this.client?.sendMenuMessage(e,g);break;case "buttons":p=await this.client?.sendButtonsMessage(e,g);break;case "image":p=await this.client?.sendImageMessage(e,g);break;case "video":p=await this.client?.sendVideoMessage(e,g);break;case "audio":p=await this.client?.sendAudioMessage(e,g);break;case "location":p=await this.client?.sendLocationMessage(e,g);break;default:p=await this.client?.sendTextMessage(e,"Done");break}if(o.push(p.key.id),i)return true}return this.lastMessages[e]||=[],this.lastMessages[e].unshift(...o),this.lastMessages[e]=this.lastMessages[e].slice(0,10),false}getFlow(e){return this.remoteFlow[e]}setFlow(e,t){this.remoteFlow[e]=t;}resetFlow(e){delete this.remoteFlow[e];}getDataFlow(e){return this.dataFlow[e]}getLastMessages(e){return this.lastMessages[e]}setDataFlow(e,t,s){this.dataFlow[e]||={...this.dataFlow[e],[t]:s};}resetDataFlow(e){delete this.dataFlow[e];}setTimeoutFlow(e,t){let s=this.timeoutFlow[e];s&&clearTimeout(s),this.timeoutFlow[e]=t;}resetTimeoutFlow(e){let t=this.timeoutFlow[e];t&&clearTimeout(t),delete this.timeoutFlow[e];}getResponseId(e){return e.data?.buttonsResponse?e.data.buttonsResponse.id:e.data?.menuResponse?e.data.menuResponse.id:""}async onMessageReceivedCB(e,t,s){if(this.getLastMessages(e)?.includes(t)||s.fromMe&&!Object.keys(s.data??{}).length&&!s.username)return;let{exitCode:o,exitMsg:n,timeoutMsg:a,unknownInputMsg:i,flow:c,idleTimeout:g,fields:u,matches:p}=this.schema,d=async(y=true)=>{y&&await this.sendMessageList(e,n),this.resetDataFlow(e),this.resetFlow(e),this.resetTimeoutFlow(e);},h=()=>{let y=g&&ae(g);if(y&&g){let b=setTimeout$1(async()=>{await this.sendMessageList(e,a),await d();},y);this.setTimeoutFlow(e,b);}},w=async y=>{if(!y?.length)return null;for(let b of y){if(b==null)continue;let x=false;if(typeof b=="string"?x=b===S:typeof b=="function"?x=await pe(b(e,S,!!s.fromMe)):x=b.test(S),x)return b}return null},M=this.getFlow(e),S=s?.data?.text??(typeof s=="string"?s:"");if(!M){if(o&&o===S){await d(false);return}let y=!!p?.length,b=await w(p);if(y&&!b)return;if(await this.sendMessageList(e,c?.messages)){await d();return}this.setFlow(e,c),this.resetDataFlow(e),h();return}if(h(),o&&o===S){await d();return}let A=this.getResponseId(s);if(!M.response[A]){s.data&&i&&await this.sendMessageList(e,i);return}let v=S||A,I=M.field,B=M.messages,{parseFieldData:f,validationError:P,validate:C}=u?.[I]??{};if(await this.sendMessageList(e,B)){await d();return}if(I)if(!C||C(v)){if(I){let y=f?.(S)??S;this.setDataFlow(e,I,y);}}else {let y=typeof P=="function"?P(v):P;await this.client?.sendTextMessage(e,y||"invalid input!"),await this.sendMessageList(e,M?.messages);return}await M.response[A]?.onSubmit?.({remoteJid:e,messageId:t,options:s,data:this.getDataFlow(e)});let R=M[A]?.next,q=R?.messages;if(q?.length){if(await this.sendMessageList(e,q)){await d();return}this.setFlow(e,R);}else await d();}onMessageReceived(){let e=this.onMessageReceivedCB.bind(this);this.phone?this.client?.onPhoneMessageReceived(this.phone,e):this.client?.onAnyMessageReceived(e);}};
4
+ export{se as WhatsappSocket,ke as WhatsappSocketBot,Me as WhatsappSocketGroup};//# sourceMappingURL=index.js.map
4
5
  //# sourceMappingURL=index.js.map