@hdriel/whatsapp-socket 1.2.8 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,5 @@
1
- 'use strict';var ve=require('@fadzzzslebew/baileys'),se=require('ms'),Ie=require('fs'),ge=require('qrcode'),mongodb=require('mongodb'),xe=require('pino'),de=require('stream'),path=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ve__default=/*#__PURE__*/_interopDefault(ve);var se__default=/*#__PURE__*/_interopDefault(se);var Ie__default=/*#__PURE__*/_interopDefault(Ie);var ge__default=/*#__PURE__*/_interopDefault(ge);var xe__default=/*#__PURE__*/_interopDefault(xe);var de__default=/*#__PURE__*/_interopDefault(de);var ee={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}},ke=async s=>{let e=(n,i)=>{let c={$set:{...JSON.parse(JSON.stringify(n,ee.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,ee.reviver)}catch{return null}},r=async n=>{try{await s.deleteOne({_id:n});}catch{}},o=await t("creds")||ve.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=ve.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")}},te=ke;var re=s=>se__default.default(s)/1e3;async function h(s){let t=await(await fetch(s)).arrayBuffer();return Buffer.from(t)}async function Se(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 we(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 oe(s,e){return s instanceof Ie.ReadStream?Se(s,e):we(s,e)}async function F(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 O(s){let e=s?.split(".")?.pop()?.toLowerCase();return Ae[e||""]||"application/octet-stream"}var R=s=>new Promise(e=>setTimeout(e,typeof s=="number"?s:se__default.default(s))),Ae={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"},ne={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 ie(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 G(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 ae(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 ve.downloadMediaMessage(s,"buffer",{}),a=s.message.imageMessage.fileLength.low;e.image={mimetype:o,buffer:i,jpegThumbnail:n,fileLength:a,fileSize:G(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 ve.downloadMediaMessage(s,"buffer",{}),a=s.message.videoMessage.fileLength.low;e.video={buffer:i,jpegThumbnail:n,mimetype:o,fileLength:a,fileSize:G(a),caption:s.message.videoMessage.caption};}if(s.message?.audioMessage){let o=s.message.audioMessage.mimetype,n=await ve.downloadMediaMessage(s,"buffer",{}),i=s.message.audioMessage.fileLength.low;e.audio={buffer:n,mimetype:o,fileLength:i,fileSize:G(i),seconds:s.message.audioMessage.seconds};}if(s.message?.documentMessage){let o=s.message.documentMessage.mimetype,n=await ve.downloadMediaMessage(s,"buffer",{}),i=s.message.documentMessage.fileLength.low;e.file={buffer:n,mimetype:o,fileLength:i,fileSize:G(i),fileName:s.message.documentMessage.fileName,caption:s.message.documentMessage.caption};}if(s.message?.stickerMessage){let o=s.message.stickerMessage.mimetype,n=await ve.downloadMediaMessage(s,"buffer",{}),i=s.message.stickerMessage.fileLength.low;e.sticker={buffer:n,mimetype:o,fileLength:i,fileSize:G(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 ce=xe__default.default({level:"silent"}),A=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 ge__default.default.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...t})}static async qrToTerminalString(e,t={}){return ge__default.default.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:f,appName:b,pairingPhone:S}=e;this.appName=b,this.mongoURL=r,this.fileAuthStateDirectoryPath=t,this.mongoCollection=o,this.logger=n,this.debug=u,this.printQRInTerminal=d,this.pairingPhone=S,this.customPairingCode=p,this.onPreConnectionSendMessageFailed=f,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 mongodb.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 ve.useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:i,saveCreds:n}}let[e]=await this.getAuthCollection(),{state:t,saveCreds:r}=await te(e);return {auth:{creds:t.creds,keys:ve.makeCacheableSignalKeyStore(t.keys,ce)},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,f=await this.getLatestWhatsAppVersion(),b=async()=>new Promise(X=>{let I=ve__default.default({version:f,logger:ce,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:true,shouldIgnoreJid:k=>k.includes("@newsletter"),...e,printQRInTerminal:false,auth:d});I.ev.on("connection.update",async k=>{let{connection:E,lastDisconnect:W,qr:M}=k;if(M){if(p&&this.logger?.info("WHATSAPP","QR Code received",{qr:M}),this.printQRInTerminal){let Z=await s.qrToTerminalString(M,{small:true}).catch(()=>null);console.log(Z);}this.customPairingCode?s.randomPairingCode(this.customPairingCode):void 0;let y=g?s.formatPhoneNumber(g):null,w=y?await I.requestPairingCode(y):null;p&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:w,pairingPhone:y}),await n?.(M,w);}switch(E){case "connecting":{p&&this.logger?.debug("WHATSAPP","Connecting..."),i?.("connecting");break}case "open":{p&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=I,await r?.(),i?.("open"),X(this.socket);break}case "close":{let l=t-- >0&&W?.error?.output?.statusCode!==ve.DisconnectReason.loggedOut,y=W?.error?.output?.statusCode,w=W?.error?.message;p&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:y,errorMessage:w,shouldReconnect:l}),l&&t?(p&&this.logger?.info("WHATSAPP","Reconnecting..."),await R(s.CONNECTION_TIMEOUT),X(b())):(p&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,X(this.socket)),i?.("close");break}}}),I.ev.on("creds.update",u),I.ev.on("messages.upsert",async k=>{if(!Object.keys(this.messageReceivedCBs).length)return;this.logger?.info("WHATSAPP","Received messages",{type:k.type,totalMessages:k.messages.length});let{messages:E,type:W}=k;if(W!=="notify")return;let M=await Promise.allSettled(E.filter(l=>l.message).map(async l=>ae(l)));M.map((l,y)=>({...l,message:E[y]})).filter(l=>l.status==="rejected").forEach(({reason:l,message:y})=>{this.logger?.error("WHATSAPP","failed to handle message",{error:l?.message,message:y});}),M.filter(l=>l.status==="fulfilled").forEach(({value:l})=>{console.log("handle message",l);let{sender:y,messageId:w,username:Z,timestamp:le,fromMe:fe,...he}=l;Object.keys(this.messageReceivedCBs).filter(_=>["from_any_groups","from_any_phones",y].includes(_)).forEach(async _=>{this.messageReceivedCBs[_]?.forEach(ye=>{ye(y,w,{username:Z,timestamp:le,fromMe:fe,data:he});});});});});}),S=await b();return await R(s.CONNECTION_TIMEOUT),S}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&&Ie__default.default.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:t=true}={}){await this.clearAuthState(),t&&(await R(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 R("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 P({debug:s,logger:e,socket:t},r,o,{mentions:n,...i}){let a=o instanceof Buffer?o:await F(o),c=i.mimetype||O(i.filename),g=ie(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 v({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 h(o):o,p=c||await oe(d,a).catch(()=>0);return s&&e?.debug("WHATSAPP","send audio message",{jid:r,mimetype:a,filename:n,seconds:p,replyToMessageId:i}),P({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 H=({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:f}=g;u.reminder_name=g.reminderName,u.reminder_timestamp=f?Math.floor(+new Date(f)/1e3):Math.floor(Date.now()/1e3)+re(p??"0s");break;default:d="";break}return {name:d,buttonParamsJson:JSON.stringify(u)}}).filter(g=>g.name),c=ve.generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:ve.WAProto.Message.InteractiveMessage.create({...n&&{body:ve.WAProto.Message.InteractiveMessage.Body.create({text:n})},...o&&{footer:ve.WAProto.Message.InteractiveMessage.Footer.create({text:o})},...!!a?.length&&{nativeFlowMessage:ve.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 ue=({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 D({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 h(o):o;return s&&e?.debug("WHATSAPP","send document message",{jid:r,mimetype:a,filename:n,caption:i}),P({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 C({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 h(o):o;return s&&e?.debug("WHATSAPP","send image message",{jid:r,caption:n,filename:i}),P({debug:s,logger:e,socket:t},r,c,{filename:i,...a?.length&&{mentions:a}})}async function T({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 h(o):o;return s&&e?.debug("WHATSAPP","send video message",{jid:r,filename:i,gifPlayback:a,mentions:c,caption:n}),P({debug:s,logger:e,socket:t},r,g,{filename:i,...n&&{caption:n},...a&&{gifPlayback:a},...c?.length&&{mentions:c}})}async function B({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 h(o):o;return s&&e?.debug("WHATSAPP","send sticker message",{jid:r}),P({debug:s,logger:e,socket:t},r,i,{mimetype:"sticker",filename:"sticker.webp",...n?.length&&{mentions:n}})}async function z({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 h(a):a instanceof de__default.default?d=await F(a):d=a;let p=typeof o=="string"?await h(o):o;if(o instanceof de__default.default);else typeof o=="string"&&(g=path.basename(o));g=g&&decodeURIComponent(g),i||=O(g),i=i?.toLowerCase(),s&&e?.debug("WHATSAPP","send file message",{jid:r,caption:n,mimetype:i,filename:g,includeJpegThumbnail:!!d});let f=true,b;if(c)switch(ne[i]){case "Image":b=await C({debug:s,logger:e,socket:t},r,p,{caption:n,filename:g,mentions:u}).catch(()=>f=false);break;case "Sticker":b=await B({debug:s,logger:e,socket:t},r,p,{mentions:u}).catch(()=>f=false);break;case "Video":b=await T({debug:s,logger:e,socket:t},r,p,{caption:n,filename:g,mentions:u}).catch(()=>f=false);break;case "Audio":b=await v({debug:s,logger:e,socket:t},r,p,{mimetype:i,filename:g,mentions:u}).catch(()=>f=false);break;default:return await D({debug:s,logger:e,socket:t},r,p,{caption:n,mimetype:i,filename:g,jpegThumbnail:d,mentions:u})}if(b&&f)return b;if(!c||!f)return await D({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 q({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=ve.generateWAMessageFromContent(r,{viewOnceMessage:{message:{interactiveMessage:ve.WAProto.Message.InteractiveMessage.create({body:ve.WAProto.Message.InteractiveMessage.Body.create({text:o}),...n&&{footer:ve.WAProto.Message.InteractiveMessage.Footer.create({text:n})},header:ve.WAProto.Message.InteractiveMessage.Header.create({title:i,hasMediaAttachment:false}),nativeFlowMessage:ve.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 j=({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 V({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 Q({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 N=({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 $=class s extends A{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 N(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 H(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 V(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 q(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 Q(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 j(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 C(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 T(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 v(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 B(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 z(g,c,t,{autoMessageClassification:i,jpegThumbnailSrc:n,mimetype:o,filename:a,caption:r})}};var pe=class s extends ${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 K=class s extends A{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 Y=class s extends K{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 N(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 j(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 ue(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 N(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 H(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 V(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 q(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 Q(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 C(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 T(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 v(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 D(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 B(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 z(u,g,t,{caption:r,mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:i,filename:a,mentions:c?.map(d=>s.formatPhoneNumberToWhatsappPattern(d))})}};var me=class s extends Y{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
- exports.WhatsappSocket=pe;exports.WhatsappSocketGroup=me;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var be=require('stream'),Be=require('@fadzzzslebew/baileys'),oe=require('ms'),De=require('fs'),fe=require('qrcode'),mongodb=require('mongodb'),Fe=require('pino'),path=require('path'),timers=require('timers');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var be__default=/*#__PURE__*/_interopDefault(be);var Be__default=/*#__PURE__*/_interopDefault(Be);var oe__default=/*#__PURE__*/_interopDefault(oe);var De__default=/*#__PURE__*/_interopDefault(De);var fe__default=/*#__PURE__*/_interopDefault(fe);var Fe__default=/*#__PURE__*/_interopDefault(Fe);var ie={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}},Ae=async r=>{let e=(n,a)=>{let c={$set:{...JSON.parse(JSON.stringify(n,ie.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,ie.reviver)}catch{return null}},s=async n=>{try{await r.deleteOne({_id:n});}catch{}},o=await t("creds")||Be.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=Be.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")}},ge=Ae;var ce=r=>oe__default.default(r)/1e3,ne=r=>typeof r=="number"?r:oe__default.default(r),ue=async r=>Promise.resolve(r);async function w(r){let t=await(await fetch(r)).arrayBuffer();return Buffer.from(t)}async function Ce(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 Te(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 pe(r,e){return r instanceof De.ReadStream?Ce(r,e):Te(r,e)}async function q(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 V(r){let e=r?.split(".")?.pop()?.toLowerCase();return Ie[e||""]||"application/octet-stream"}var O=r=>new Promise(e=>setTimeout(e,typeof r=="number"?r:oe__default.default(r))),Ie={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"},de={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 me(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 N(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 le(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 Be.downloadMediaMessage(r,"buffer",{}),c=r.message.imageMessage.fileLength.low;e.image={mimetype:n,buffer:i,jpegThumbnail:a,fileLength:c,fileSize:N(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 Be.downloadMediaMessage(r,"buffer",{}),c=r.message.videoMessage.fileLength.low;e.video={buffer:i,jpegThumbnail:a,mimetype:n,fileLength:c,fileSize:N(c),caption:r.message.videoMessage.caption};}if(r.message?.audioMessage){let n=r.message.audioMessage.mimetype,a=await Be.downloadMediaMessage(r,"buffer",{}),i=r.message.audioMessage.fileLength.low;e.audio={buffer:a,mimetype:n,fileLength:i,fileSize:N(i),seconds:r.message.audioMessage.seconds};}if(r.message?.documentMessage){let n=r.message.documentMessage.mimetype,a=await Be.downloadMediaMessage(r,"buffer",{}),i=r.message.documentMessage.fileLength.low;e.file={buffer:a,mimetype:n,fileLength:i,fileSize:N(i),fileName:r.message.documentMessage.fileName,caption:r.message.documentMessage.caption};}if(r.message?.stickerMessage){let n=r.message.stickerMessage.mimetype,a=await Be.downloadMediaMessage(r,"buffer",{}),i=r.message.stickerMessage.fileLength.low;e.sticker={buffer:a,mimetype:n,fileLength:i,fileSize:N(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 he=Fe__default.default({level:"silent"}),R=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 fe__default.default.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...t})}static async qrToTerminalString(e,t={}){return fe__default.default.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:f,appName:M,pairingPhone:P}=e;this.appName=M,this.mongoURL=s,this.fileAuthStateDirectoryPath=t,this.mongoCollection=o,this.logger=n,this.debug=u,this.printQRInTerminal=p,this.pairingPhone=P,this.customPairingCode=d,this.onPreConnectionSendMessageFailed=f,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 mongodb.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 Be.useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:a,saveCreds:n}}let[e]=await this.getAuthCollection(),{state:t,saveCreds:s}=await ge(e);return {auth:{creds:t.creds,keys:Be.makeCacheableSignalKeyStore(t.keys,he)},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,f=await this.getLatestWhatsAppVersion(),M=async()=>new Promise(k=>{let S=Be__default.default({version:f,logger:he,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:false,shouldSyncHistoryMessage:()=>false,shouldIgnoreJid:A=>A.includes("@newsletter"),...e,printQRInTerminal:false,auth:p});S.ev.on("connection.update",async A=>{let{connection:T,lastDisconnect:I,qr:l}=A;if(l){if(d&&this.logger?.info("WHATSAPP","QR Code received",{qr:l}),this.printQRInTerminal){let x=await r.qrToTerminalString(l,{small:true}).catch(()=>null);console.log(x);}this.customPairingCode?r.randomPairingCode(this.customPairingCode):void 0;let v=g?r.formatPhoneNumber(g):null,B=v?await S.requestPairingCode(v):null;d&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:B,pairingPhone:v}),await n?.(l,B);}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=S,await s?.(),a?.("open"),k(this.socket);break}case "close":{let b=t-- >0&&I?.error?.output?.statusCode!==Be.DisconnectReason.loggedOut,v=I?.error?.output?.statusCode,B=I?.error?.message;d&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:v,errorMessage:B,shouldReconnect:b}),b&&t?(d&&this.logger?.info("WHATSAPP","Reconnecting..."),await O(r.CONNECTION_TIMEOUT),k(M())):(d&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await o?.(),this.socket=null,k(this.socket)),a?.("close");break}}}),S.ev.on("creds.update",u),S.ev.on("messages.upsert",async A=>{if(!Object.keys(this.messageReceivedCBs).length)return;this.logger?.info("WHATSAPP","Received messages",{type:A.type,totalMessages:A.messages.length});let T=A.messages,I=await Promise.allSettled(T.filter(l=>l.message).map(async l=>le(l)));I.map((l,b)=>({...l,message:T[b]})).filter(l=>l.status==="rejected").forEach(({reason:l,message:b})=>{this.logger?.error("WHATSAPP","failed to handle message",{error:l?.message,message:b});}),I.filter(l=>l.status==="fulfilled").forEach(({value:l})=>{console.log("handle message",l);let{sender:b,messageId:v,username:B,timestamp:x,fromMe:j,...h}=l;Object.keys(this.messageReceivedCBs).filter(y=>["from_any_groups","from_any_phones",b].includes(y)).forEach(async y=>{this.messageReceivedCBs[y]?.forEach(W=>{b&&W(b,v,{username:B,timestamp:x,fromMe:j,data:h});});});});});}),P=await M();return await O(r.CONNECTION_TIMEOUT),P}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&&De__default.default.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:t=true}={}){await this.clearAuthState(),t&&(await O(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 O("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 C({debug:r,logger:e,socket:t},s,o,{mentions:n,...a}){let i=o instanceof Buffer?o:await q(o),c=a.mimetype||V(a.filename),g=me(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 D({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 w(o):o,d=c||await pe(p,i).catch(()=>0);return r&&e?.debug("WHATSAPP","send audio message",{jid:s,mimetype:i,filename:n,seconds:d,replyToMessageId:a}),C({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 $=({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:f}=g;u.reminder_name=g.reminderName,u.reminder_timestamp=f?Math.floor(+new Date(f)/1e3):Math.floor(Date.now()/1e3)+ce(d??"0s");break;default:p="";break}return {name:p,buttonParamsJson:JSON.stringify(u)}}).filter(g=>g.name),c=Be.generateWAMessageFromContent(s,{viewOnceMessage:{message:{interactiveMessage:Be.WAProto.Message.InteractiveMessage.create({...n&&{body:Be.WAProto.Message.InteractiveMessage.Body.create({text:n})},...o&&{footer:Be.WAProto.Message.InteractiveMessage.Footer.create({text:o})},...!!i?.length&&{nativeFlowMessage:Be.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 ye=({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 U({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 w(o):o;return r&&e?.debug("WHATSAPP","send document message",{jid:s,mimetype:i,filename:n,caption:a}),C({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 G({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 w(o):o;return r&&e?.debug("WHATSAPP","send image message",{jid:s,caption:n,filename:a}),C({debug:r,logger:e,socket:t},s,c,{filename:a,...i?.length&&{mentions:i}})}async function F({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 w(o):o;return r&&e?.debug("WHATSAPP","send video message",{jid:s,filename:a,gifPlayback:i,mentions:c,caption:n}),C({debug:r,logger:e,socket:t},s,g,{filename:a,...n&&{caption:n},...i&&{gifPlayback:i},...c?.length&&{mentions:c}})}async function L({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 w(o):o;return r&&e?.debug("WHATSAPP","send sticker message",{jid:s}),C({debug:r,logger:e,socket:t},s,a,{mimetype:"sticker",filename:"sticker.webp",...n?.length&&{mentions:n}})}async function K({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 w(i):i instanceof be__default.default?p=await q(i):p=i;let d=typeof o=="string"?await w(o):o;if(o instanceof be__default.default);else typeof o=="string"&&(g=path.basename(o));g=g&&decodeURIComponent(g),a||=V(g),a=a?.toLowerCase(),r&&e?.debug("WHATSAPP","send file message",{jid:s,caption:n,mimetype:a,filename:g,includeJpegThumbnail:!!p});let f=true,M;if(c)switch(de[a]){case "Image":M=await G({debug:r,logger:e,socket:t},s,d,{caption:n,filename:g,mentions:u}).catch(()=>f=false);break;case "Sticker":M=await L({debug:r,logger:e,socket:t},s,d,{mentions:u}).catch(()=>f=false);break;case "Video":M=await F({debug:r,logger:e,socket:t},s,d,{caption:n,filename:g,mentions:u}).catch(()=>f=false);break;case "Audio":M=await D({debug:r,logger:e,socket:t},s,d,{mimetype:a,filename:g,mentions:u}).catch(()=>f=false);break;default:return await U({debug:r,logger:e,socket:t},s,d,{caption:n,mimetype:a,filename:g,jpegThumbnail:p,mentions:u})}if(M&&f)return M;if(!c||!f)return await U({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 Y({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 X({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=Be.generateWAMessageFromContent(s,{viewOnceMessage:{message:{interactiveMessage:Be.WAProto.Message.InteractiveMessage.create({body:Be.WAProto.Message.InteractiveMessage.Body.create({text:o}),...n&&{footer:Be.WAProto.Message.InteractiveMessage.Footer.create({text:n})},header:Be.WAProto.Message.InteractiveMessage.Header.create({title:a,hasMediaAttachment:false}),nativeFlowMessage:Be.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 Z=({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 J({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 _({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 z=({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 ee=class r extends R{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){timers.clearTimeout(t),delete this.timers[e][t];}resetTimers(e){if(e){Object.keys(this.timers[e]??{}).forEach(timers.clearTimeout),delete this.timers[e];return}Object.keys(this.timers).forEach(t=>Object.keys(this.timers[t]).forEach(timers.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 z(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 $(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 X(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 J(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 Y(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 _(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 Z(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 G(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 F(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 D(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 L(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 K(g,c,t,{autoMessageClassification:a,jpegThumbnailSrc:n,mimetype:o,filename:i,caption:s})}};var te=class r extends ee{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 se=class r extends R{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 re=class r extends se{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 z(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 Z(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 ye(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 z(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 $(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 J(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 X(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 Y(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 _(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 G(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 F(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 D(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 U(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 L(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 K(u,g,t,{caption:s,mimetype:o,jpegThumbnailSrc:n,autoMessageClassification:a,filename:i,mentions:c?.map(p=>r.formatPhoneNumberToWhatsappPattern(p))})}};var Pe=class r extends re{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 we=class{schema;phone;client;schemaRefs={};remoteFlow={};dataFlow={};timeoutFlow={};lastMessages={};constructor(e,t){this.phone=t&&te.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?ne(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&&timers.clearTimeout(s),this.timeoutFlow[e]=t;}resetTimeoutFlow(e){let t=this.timeoutFlow[e];t&&timers.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(h=true)=>{h&&await this.sendMessageList(e,n),this.resetDataFlow(e),this.resetFlow(e),this.resetTimeoutFlow(e);},f=()=>{let h=g&&ne(g);if(h&&g){let y=timers.setTimeout(async()=>{await this.sendMessageList(e,a),await d();},h);this.setTimeoutFlow(e,y);}},M=async h=>{if(!h?.length)return null;for(let y of h){if(y==null)continue;let W=false;if(typeof y=="string"?W=y===k:typeof y=="function"?W=await ue(y(e,k,!!s.fromMe)):W=y.test(k),W)return y}return null},P=this.getFlow(e),k=s?.data?.text??(typeof s=="string"?s:"");if(!P){if(o&&o===k){await d(false);return}let h=!!p?.length,y=await M(p);if(h&&!y)return;if(await this.sendMessageList(e,c?.messages)){await d();return}this.setFlow(e,c),this.resetDataFlow(e),f();return}if(f(),o&&o===k){await d();return}let S=this.getResponseId(s);if(!P.response[S]){s.data&&i&&await this.sendMessageList(e,i);return}let A=k||S,T=P.field,I=P.messages,{parseFieldData:l,validationError:b,validate:v}=u?.[T]??{};if(await this.sendMessageList(e,I)){await d();return}if(T)if(!v||v(A)){if(T){let h=l?.(k)??k;this.setDataFlow(e,T,h);}}else {let h=typeof b=="function"?b(A):b;await this.client?.sendTextMessage(e,h||"invalid input!"),await this.sendMessageList(e,P?.messages);return}await P.response[S]?.onSubmit?.({remoteJid:e,messageId:t,options:s,data:this.getDataFlow(e)});let x=P[S]?.next,j=x?.messages;if(j?.length){if(await this.sendMessageList(e,j)){await d();return}this.setFlow(e,x);}else await d();}onMessageReceived(){let e=this.onMessageReceivedCB.bind(this);this.phone?this.client?.onPhoneMessageReceived(this.phone,e):this.client?.onAnyMessageReceived(e);}};
4
+ exports.WhatsappSocket=te;exports.WhatsappSocketBot=we;exports.WhatsappSocketGroup=Pe;//# sourceMappingURL=index.cjs.map
4
5
  //# sourceMappingURL=index.cjs.map