@hdriel/whatsapp-socket 1.2.7 → 1.2.8
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 +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +86 -124
- package/dist/index.d.ts +86 -124
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var ne=require('@fadzzzslebew/baileys'),q=require('ms'),ce=require('fs'),V=require('qrcode'),mongodb=require('mongodb'),de=require('pino'),path=require('path'),b=require('stream');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ne__default=/*#__PURE__*/_interopDefault(ne);var q__default=/*#__PURE__*/_interopDefault(q);var ce__default=/*#__PURE__*/_interopDefault(ce);var V__default=/*#__PURE__*/_interopDefault(V);var de__default=/*#__PURE__*/_interopDefault(de);var b__default=/*#__PURE__*/_interopDefault(b);var U={replacer:(a,e)=>Buffer.isBuffer(e)||e instanceof Uint8Array||e?.type==="Buffer"?{type:"Buffer",data:Buffer.from(e?.data||e).toString("base64")}:e,reviver:(a,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}},te=async a=>{let e=(o,n)=>{let i={$set:{...JSON.parse(JSON.stringify(o,U.replacer))}};return a.updateOne({_id:n},i,{upsert:true})},t=async o=>{try{let n=JSON.stringify(await a.findOne({_id:o}));return JSON.parse(n,U.reviver)}catch{return null}},s=async o=>{try{await a.deleteOne({_id:o});}catch{}},r=await t("creds")||ne.initAuthCreds();return {state:{creds:r,keys:{get:async(o,n)=>{let c={};return await Promise.all(n.map(async i=>{let u=await t(`${o}-${i}`);o==="app-state-sync-key"&&u&&(u=ne.WAProto.Message.AppStateSyncKeyData.fromObject(u)),c[i]=u;})),c},set:async o=>{let n=[];for(let c of Object.keys(o))for(let i of Object.keys(o[c])){let u=o[c][i],g=`${c}-${i}`;n.push(u?e(u,g):s(g));}await Promise.all(n);}}},saveCreds:()=>e(r,"creds")}},L=te;var j=a=>q__default.default(a)/1e3;async function h(a){let t=await(await fetch(a)).arrayBuffer();return Buffer.from(t)}async function re(a,e){try{let{parseStream:t}=await import('music-metadata'),s=await t(a,{mimeType:e||"audio/mpeg"});return Math.floor(s.format.duration||0)}catch(t){throw console.error("Error parsing stream:",t),t}finally{a.destroyed||a.destroy();}}async function oe(a,e){try{let{parseBuffer:t}=await import('music-metadata'),s=await t(a,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 B(a,e){return a instanceof ce.ReadStream?re(a,e):oe(a,e)}async function y(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}var C=a=>new Promise(e=>setTimeout(e,typeof a=="number"?a:q__default.default(a))),J={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",svg:"image/svg+xml",mp4:"video/mp4",avi:"video/x-msvideo",mov:"video/quicktime",mkv:"video/x-matroska",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",opus:"audio/opus",aac:"audio/aac",m4a:"audio/mp4",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"application/vnd.ms-powerpoint",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",txt:"text/plain",zip:"application/zip",rar:"application/x-rar-compressed","7z":"application/x-7z-compressed"},D={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"};var Q=de__default.default({level:"silent"}),S=class a{fileAuthStateDirectoryPath;mongoURL;mongoCollection="whatsapp-auth";logger;debug;printQRInTerminal;pairingPhone;customPairingCode;appName;onPreConnectionSendMessageFailed;onOpen;onClose;onQR;onConnectionStatusChange;onReceiveMessages;static DEFAULT_COUNTRY_CODE="972";static CONNECTION_TIMEOUT="2s";static formatPhoneNumber(e,t=a.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=a.DEFAULT_COUNTRY_CODE){if(e.endsWith("@s.whatsapp.net"))return e.replace(/:\d+@/,"@");let s=a.formatPhoneNumber(e,t);return s=`${s}@s.whatsapp.net`,s=s.replace(/:\d+@/,"@"),s}static getWhatsappPhoneLink({phone:e,message:t,countryCode:s=a.DEFAULT_COUNTRY_CODE}){let r=this.formatPhoneNumber(e,s),o=t?`?text=${encodeURI(t)}`:"";return `https://wa.me/${r}${o}`}static async qrToImage(e,t={}){return V__default.default.toDataURL(e,{errorCorrectionLevel:"H",width:400,margin:2,...t})}static async qrToTerminalString(e,t={}){return V__default.default.toString(e,{type:"terminal",small:true,...t})}static randomPairingCode(e,t=8){if(!e.includes("[")&&e.length===t)return e;let s="",r=[],o=c=>{let i=[];for(let u=0;u<c.length;u++)if(c[u+1]==="-"&&c[u+2]){let g=c.charCodeAt(u),p=c.charCodeAt(u+2);for(let d=g;d<=p;d++)i.push(String.fromCharCode(d));u+=2;}else i.push(c[u]);return i};for(let c=0;c<e.length&&s.length<t;c++){let i=e[c];if(i==="["){let u=e.indexOf("]",c),g=e.slice(c+1,u);r=o(g),c=u;}else s+=i;}for(;s.length<t&&r.length;)s+=r[Math.floor(Math.random()*r.length)];let n=s.toUpperCase();return n.padEnd(t,n)}static instances=new Map;static getInstance(e){let t=a.buildSocketKey(e);return a.instances.has(t)||new a(e),a.instances.get(t)}static clearInstance(e){e?a.instances.delete(e):a.instances.clear();}constructor(e){let{fileAuthStateDirectoryPath:t,mongoURL:s,mongoCollection:r="whatsapp-auth",logger:o,onOpen:n,onClose:c,onQR:i,onReceiveMessages:u,onConnectionStatusChange:g,debug:p,printQRInTerminal:d,customPairingCode:m,onPreConnectionSendMessageFailed:l,appName:k,pairingPhone:A}=e;this.appName=k,this.mongoURL=s,this.fileAuthStateDirectoryPath=t,this.mongoCollection=r,this.logger=o,this.debug=p,this.printQRInTerminal=d,this.pairingPhone=A,this.customPairingCode=m,this.onPreConnectionSendMessageFailed=l,this.onConnectionStatusChange=g,this.onReceiveMessages=u,this.onOpen=n,this.onClose=c,this.onQR=i,a.instances.has(this.socketKey)&&(this.socket=a.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(){if(!this.mongoURL)return [];let e=new mongodb.MongoClient(this.mongoURL);return await e.connect(),[e.db().collection(this.mongoCollection),e]}async authenticate(){if(!this.mongoURL&&!this.fileAuthStateDirectoryPath)throw new Error("fileAuthStateDirectoryPath/MongoURL is missing");if(!this.mongoURL){let{saveCreds:o,state:n}=await ne.useMultiFileAuthState(this.fileAuthStateDirectoryPath);return {auth:n,saveCreds:o}}let[e]=await this.getAuthCollection(),{state:t,saveCreds:s}=await L(e);return {auth:{creds:t.creds,keys:ne.makeCacheableSignalKeyStore(t.keys,Q)},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 a.instances.get(this.socketKey)??null}set socket(e){a.instances.set(this.socketKey,e);}async startConnection({options:e,connectionAttempts:t=3,onOpen:s=this.onOpen,onClose:r=this.onClose,onQR:o=this.onQR,onConnectionStatusChange:n=this.onConnectionStatusChange,pairingPhone:c,debug:i}={}){let u=c??this.pairingPhone,{saveCreds:g,auth:p}=await this.authenticate(),d=i===void 0?this.debug:i,m=await this.getLatestWhatsAppVersion(),l=async()=>new Promise(A=>{let I=ne__default.default({version:m,logger:Q,browser:[this.appName||"baileys","1.0.0",""],syncFullHistory:true,shouldIgnoreJid:M=>M.includes("@newsletter"),...e,printQRInTerminal:false,auth:p});I.ev.on("connection.update",async M=>{let{connection:T,lastDisconnect:O,qr:W}=M;if(W){if(d&&this.logger?.info("WHATSAPP","QR Code received",{qr:W}),this.printQRInTerminal){let Z=await a.qrToTerminalString(W,{small:true}).catch(()=>null);console.log(Z);}this.customPairingCode?a.randomPairingCode(this.customPairingCode):void 0;let v=u?a.formatPhoneNumber(u):null,G=v?await I.requestPairingCode(v):null;d&&this.printQRInTerminal&&this.logger?.info("WHATSAPP","QR Pairing Code",{code:G,pairingPhone:v}),await o?.(W,G);}switch(T){case "connecting":{d&&this.logger?.debug("WHATSAPP","Connecting..."),n?.("connecting");break}case "open":{d&&this.logger?.info("WHATSAPP","Connection opened successfully!"),this.socket=I,await s?.(),n?.("open"),A(this.socket);break}case "close":{let H=t-- >0&&O?.error?.output?.statusCode!==ne.DisconnectReason.loggedOut,v=O?.error?.output?.statusCode,G=O?.error?.message;d&&this.logger?.info("WHATSAPP","Connection closed",{statusCode:v,errorMessage:G,shouldReconnect:H}),H&&t?(d&&this.logger?.info("WHATSAPP","Reconnecting..."),await C(a.CONNECTION_TIMEOUT),A(l())):(d&&this.logger?.warn("WHATSAPP","Logged out, clearing auth state"),await r?.(),this.socket=null,A(this.socket)),n?.("close");break}}}),I.ev.on("creds.update",g),this.onReceiveMessages&&typeof this.onReceiveMessages=="function"&&I.ev.on("messages.upsert",async({messages:M,type:T})=>{this.logger?.info("WHATSAPP","Received messages",{type:T,totalMessages:M.length}),this.onReceiveMessages?.(M,T);});}),k=await l();return await C(a.CONNECTION_TIMEOUT),k}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&&ce__default.default.rmSync(this.fileAuthStateDirectoryPath,{recursive:true,force:true});}async resetConnection({pairingPhone:e,autoConnect:t=true}={}){await this.clearAuthState(),t&&(await C(a.CONNECTION_TIMEOUT),await this.startConnection({pairingPhone:e}));}isConnected(){return !!this.socket?.user}getMimetypeFromFilename(e){let t=e?.split(".")?.pop()?.toLowerCase();return J[t||""]||"application/octet-stream"}async deleteMessage(e,t,s=true){if(await this.ensureSocketConnected(),!this.socket)throw new Error("Socket not connected");let r=a.formatPhoneNumberToWhatsappPattern(t);try{if(s){let o=await this.socket.sendMessage(r,{delete:{remoteJid:r,fromMe:!0,id:e,participant:void 0}});return this.debug&&this.logger?.info("WHATSAPP","Message deleted for everyone",{messageId:e,chatJid:r}),o}else throw this.debug&&this.logger?.warn("WHATSAPP","Delete for me is not supported via API",{messageId:e,chatJid:r,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(o){throw this.debug&&this.logger?.error("WHATSAPP","Failed to delete message",{messageId:e,chatJid:r,error:o.message}),o}}async deleteMessages(e,t=true){await this.ensureSocketConnected();let s=[];for(let{messageId:r,chatJid:o}of e)try{let n=await this.deleteMessage(r,o,t);s.push({success:!0,messageId:r,result:n}),await C("500ms");}catch(n){s.push({success:false,messageId:r,error:n.message});}return s}async loadRecentMessages(e,t){await this.ensureSocketConnected();let s=a.formatPhoneNumberToWhatsappPattern(e);try{return await this.socket?.waitForMessage(t,3e3)||null}catch(r){return this.debug&&this.logger?.error("WHATSAPP","Failed to load message history",{chatJid:s,error:r.message}),null}}};var x=class a extends S{constructor(e){super(e);}async deleteMessageById(e,t){return this.deleteMessage(e,t,true)}async sendTextMessage(e,t){await this.ensureSocketConnected();let s=a.formatPhoneNumberToWhatsappPattern(e);return this.socket?.sendMessage(s,{text:t})}async sendButtonsMessage(e,{subtitle:t,title:s,buttons:r}){if(!s||!r.length)throw new Error("sendButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let o=a.formatPhoneNumberToWhatsappPattern(e),n=r?.map(i=>{let u={display_text:i.label},g;switch(true){case !!i.url:g="cta_url",u.url=i.url,u.url=u.url.startsWith("http")?u.url:`https://${u.url}`;break;case !!i.copy:g="cta_copy",u.copy_code=i.copy;break;case !!i.tel:g="cta_call",u.phone_number=i.tel;break;case !!i.email:g="cta_email",u.email=i.email;break;case !!(i.reminderOn||i.reminderDate):g="cta_reminder";let{reminderOn:p,reminderDate:d}=i;u.reminder_name=i.reminderName,u.reminder_timestamp=d?Math.floor(+new Date(d)/1e3):Math.floor(Date.now()/1e3)+j(p??"0s");break;default:g="";break}return {name:g,buttonParamsJson:JSON.stringify(u)}}).filter(i=>i.name),c=ne.generateWAMessageFromContent(o,{viewOnceMessage:{message:{interactiveMessage:ne.WAProto.Message.InteractiveMessage.create({...s&&{body:ne.WAProto.Message.InteractiveMessage.Body.create({text:s})},...t&&{footer:ne.WAProto.Message.InteractiveMessage.Footer.create({text:t})},...!!n?.length&&{nativeFlowMessage:ne.WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:n})}})}}},{userJid:o});return this.debug&&this.logger?.debug("WHATSAPP","send buttons message",{jid:o,footer:t,body:s,buttons:n}),this.socket?.relayMessage(o,c.message,{messageId:c.key.id})}async sendListMessage(e,{title:t,subtitle:s,buttonText:r,sections:o}){if(!t||!r||!o||o.length===0)throw new Error("sendListMessage: title, buttonText, and sections are required.");await this.ensureSocketConnected();let n=a.formatPhoneNumberToWhatsappPattern(e),c=ne.generateWAMessageFromContent(n,{viewOnceMessage:{message:{interactiveMessage:ne.WAProto.Message.InteractiveMessage.create({body:ne.WAProto.Message.InteractiveMessage.Body.create({text:t}),...s&&{footer:ne.WAProto.Message.InteractiveMessage.Footer.create({text:s})},header:ne.WAProto.Message.InteractiveMessage.Header.create({title:r,hasMediaAttachment:false}),nativeFlowMessage:ne.WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:[{name:"single_select",buttonParamsJson:JSON.stringify({title:r,sections:o.map(i=>({title:i.title,rows:i.rows.map(u=>({header:u.title,title:u.title,description:u.description||"",id:u.id}))}))})}]})})}}},{userJid:n});return this.debug&&this.logger?.debug("WHATSAPP","send list message",{jid:n,title:t,buttonText:r,sectionsCount:o.length,totalRows:o.reduce((i,u)=>i+u.rows.length,0)}),this.socket?.relayMessage(n,c.message,{messageId:c.key.id})}async sendReplyButtonsMessage(e,{title:t,subtitle:s,buttons:r}){if(!t||!r.length)throw new Error("sendReplyButtonsMessage: No title or buttons required field found.");await this.ensureSocketConnected();let o=a.formatPhoneNumberToWhatsappPattern(e),n=r.filter(c=>c).map((c,i)=>typeof c=="string"?{buttonId:`id-${i}`,buttonText:{displayText:c},type:1}:{buttonId:`${c.id}`,buttonText:{displayText:c.label},type:1});return this.debug&&this.logger?.debug("WHATSAPP","send reply buttons message",{jid:o,text:t,footer:s,buttons:n}),this.socket?.sendMessage(o,{text:t,...s&&{footer:s},buttons:n})}async sendLocation(e,{latitude:t,longitude:s,name:r,address:o}){if(t===void 0||s===void 0)throw new Error("sendLocation: latitude and longitude are required fields.");if(t<-90||t>90)throw new Error("sendLocation: latitude must be between -90 and 90.");if(s<-180||s>180)throw new Error("sendLocation: longitude must be between -180 and 180.");await this.ensureSocketConnected();let n=a.formatPhoneNumberToWhatsappPattern(e);return this.debug&&this.logger?.debug("WHATSAPP","send location message",{jid:n,latitude:t,longitude:s,name:r,address:o}),this.socket?.sendMessage(n,{location:{degreesLatitude:t,degreesLongitude:s,...r&&{name:r},...o&&{address:o}}})}async sendLocationMessage(e,t,s,r){let{longitude:o,latitude:n}=t;if(!e||n===void 0||o===void 0)throw new Error("sendLocation: phoneTo, latitude, and longitude are required.");await this.ensureSocketConnected();let c=a.formatPhoneNumberToWhatsappPattern(e);return this.debug&&this.logger?.debug("WHATSAPP","Sending location",{jid:c,...t}),this.socket?.sendMessage(c,{location:{degreesLatitude:n,degreesLongitude:o,...s&&{name:s},...r&&{address:r}}})}async sendSurveyMessage(e,t,s,r=false){if(!t||!s||s.length<2)throw new Error("sendSurveyMessage: question and at least 2 options are required.");if(s.length>12)throw new Error("sendSurveyMessage: maximum 12 options allowed.");await this.ensureSocketConnected();let o=a.formatPhoneNumberToWhatsappPattern(e),n=s;return this.debug&&this.logger?.debug("WHATSAPP","send survey message",{jid:o,question:t,options:n,allowMultipleAnswers:r}),this.socket?.sendMessage(o,{poll:{name:t,values:n,selectableCount:r?s.length:1}})}};var R=class a extends x{constructor(e){super(e);}async sendFileFromStream(e,t,s){await this.ensureSocketConnected();let r=a.formatPhoneNumberToWhatsappPattern(e),o=t instanceof Buffer?t:await this.streamToBuffer(t),n=s.mimetype||this.getMimetypeFromFilename(s.filename),c=await this.createFileMessage(o,n,s),i={...s.replyToMessageId&&{quoted:{key:{id:s.replyToMessageId}}}};return this.socket?.sendMessage(r,c,i)}async streamToBuffer(e){return new Promise((t,s)=>{let r=[];e.on("data",o=>r.push(Buffer.from(o))),e.on("error",o=>s(o)),e.on("end",()=>t(Buffer.concat(r)));})}async createFileMessage(e,t,s){let[r]=t.split("/");switch(r){case "image":return {image:e,caption:s.caption,mimetype:t,fileName:s.filename};case "video":return {video:e,caption:s.caption,mimetype:t,fileName:s.filename,gifPlayback:s.gifPlayback||false,jpegThumbnail:s.jpegThumbnail,...s.seconds&&{seconds:s.seconds}};case "audio":return s.ptt?{audio:e,mimetype:"audio/ogg; codecs=opus",ptt:true,...s.seconds&&{seconds:s.seconds}}:{audio:e,mimetype:t,fileName:s.filename,...s.seconds&&{seconds:s.seconds}};default:return {document:e,mimetype:t,fileName:s.filename,caption:s.caption,jpegThumbnail:s.jpegThumbnail}}}async sendImage(e,t,s={}){return this.sendFileFromStream(e,t,{filename:s.filename||"image.jpg",caption:s.caption,replyToMessageId:s.replyToMessageId})}async sendVideo(e,t,s={}){return this.sendFileFromStream(e,t,{filename:s.filename||"video.mp4",caption:s.caption,gifPlayback:s.gifPlayback,replyToMessageId:s.replyToMessageId,jpegThumbnail:s.jpegThumbnail})}async sendAudio(e,t,s={}){return this.sendFileFromStream(e,t,{filename:s.filename||"audio.mp3",mimetype:s.ptt?"audio/ogg; codecs=opus":"",ptt:s.ptt,seconds:s.seconds,replyToMessageId:s.replyToMessageId})}async sendDocument(e,t,s){return this.sendFileFromStream(e,t,{filename:s.filename,mimetype:s.mimetype,caption:s.caption,replyToMessageId:s.replyToMessageId,jpegThumbnail:s.jpegThumbnail})}async sendVoiceNote(e,t,s={}){return this.sendAudio(e,t,{ptt:true,seconds:s.seconds,replyToMessageId:s.replyToMessageId})}async sendSticker(e,t,s={}){await this.ensureSocketConnected();let r=a.formatPhoneNumberToWhatsappPattern(e),o=t instanceof Buffer?t:await this.streamToBuffer(t),n={...s.replyToMessageId&&{quoted:{key:{id:s.replyToMessageId}}}};return this.socket?.sendMessage(r,{sticker:o},n)}};var E=class a extends R{constructor(e){super(e);}async sendImageMessage(e,t,{caption:s="",filename:r}={}){await this.ensureSocketConnected();let o=a.formatPhoneNumberToWhatsappPattern(e),n=typeof t=="string"?await h(t):t;return r=r&&decodeURIComponent(r),this.debug&&this.logger?.debug("WHATSAPP","send image message",{jid:o,caption:s,filename:r}),await this.sendImage(o,n,{caption:s,...r&&{filename:r}})}async sendVideoMessage(e,t,{caption:s="",filename:r,sendAsGifPlayback:o=false}={}){await this.ensureSocketConnected();let n=a.formatPhoneNumberToWhatsappPattern(e),c=typeof t=="string"?await h(t):t;return r=r&&decodeURIComponent(r),this.debug&&this.logger?.debug("WHATSAPP","send video message",{jid:n,caption:s,filename:r,gifPlayback:o}),await this.sendVideo(n,c,{caption:s,gifPlayback:o,...r&&{filename:r}})}async sendAudioMessage(e,t,{filename:s,replyToMessageId:r,mimetype:o,seconds:n}={}){await this.ensureSocketConnected();let c=a.formatPhoneNumberToWhatsappPattern(e),i=typeof t=="string"?await h(t):t,u=n||await B(i,o).catch(()=>0);return s=s&&decodeURIComponent(s),this.debug&&this.logger?.debug("WHATSAPP","send audio message",{jid:c,mimetype:o,filename:s,seconds:u,replyToMessageId:r}),await this.sendAudio(c,i,{...s&&{filename:s},...o&&{mimetype:o},...u&&{seconds:u},...r&&{replyToMessageId:r}})}async sendStickerMessage(e,t){await this.ensureSocketConnected();let s=a.formatPhoneNumberToWhatsappPattern(e),r=typeof t=="string"?await h(t):t;return this.debug&&this.logger?.debug("WHATSAPP","send sticker message",{jid:s}),await this.sendSticker(s,r)}async sendFileMessage(e,t,{caption:s="",mimetype:r,replyToMessageId:o,jpegThumbnailSrc:n,autoMessageClassification:c=true,filename:i}){await this.ensureSocketConnected();let u=a.formatPhoneNumberToWhatsappPattern(e),g;typeof n=="string"?g=await h(n):n instanceof b__default.default?g=await y(n):g=n;let p=typeof t=="string"?await h(t):t;if(t instanceof b__default.default);else typeof t=="string"&&(i=path.basename(t));i=i&&decodeURIComponent(i),r||=this.getMimetypeFromFilename(i),r=r?.toLowerCase(),this.debug&&this.logger?.debug("WHATSAPP","send file message",{jid:u,caption:s,mimetype:r,filename:i,replyToMessageId:o,includeJpegThumbnail:!!g});let d=true,m;if(c)switch(D[r]){case "Image":m=await this.sendImageMessage(u,p,{caption:s,filename:i}).catch(()=>d=false);break;case "Sticker":m=await this.sendStickerMessage(u,p).catch(()=>d=false);break;case "Video":m=await this.sendVideoMessage(u,p,{caption:s,filename:i}).catch(()=>d=false);break;case "Audio":m=await this.sendAudioMessage(u,p,{mimetype:r,filename:i,replyToMessageId:o}).catch(()=>d=false);break;default:return await this.sendDocument(u,p,{caption:s,mimetype:r,filename:i,replyToMessageId:o,jpegThumbnail:g})}if(m&&d)return m;if(!c||!d)return await this.sendDocument(u,p,{caption:s,mimetype:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",filename:i,replyToMessageId:o,jpegThumbnail:g})}};var K=class extends E{constructor(e){super(e);}};var N=class a extends S{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 r=(t??[]).map(n=>a.formatPhoneNumberToWhatsappPattern(n));if(r.length===0){let n=this.socket?.user?.id;if(!n)throw new Error("createGroup: Could not get bot user ID. Make sure socket is connected.");let c=a.formatPhoneNumberToWhatsappPattern(n);r.push(c),this.debug&&this.logger?.debug("WHATSAPP","No participants provided, creating group with self only",{selfJid:n});}this.debug&&this.logger?.debug("WHATSAPP","Creating group",{name:e,description:s,participants:r});let o=await this.socket?.groupCreate(e,r);if(s&&o?.id){let n=a.formatGroupId(o.id);await this.updateGroupDescription(n,s);}return o}async updateGroupName(e,t){if(!e||!t)throw new Error("updateGroupName: Group ID and new name are required.");await this.ensureSocketConnected();let s=a.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 r=a.formatGroupId(e);return s&&await this.socket?.groupMetadata(r).then(o=>{this.debug&&this.logger?.debug("WHATSAPP","Fetch group description metadata",o);}).catch(o=>{this.debug&&this.logger?.warn("WHATSAPP","Failed to update group description metadata",{error:o});}),this.debug&&this.logger?.debug("WHATSAPP","Updating group description",{groupId:r}),this.socket?.groupUpdateDescription(r,t||"")}async updateGroupSettings(e,t){if(!e||!t)throw new Error("updateGroupSettings: Group ID and setting are required.");await this.ensureSocketConnected();let s=a.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 r=[].concat(t).filter(c=>c);if(!r?.length)return;await this.ensureSocketConnected();let o=a.formatGroupId(e),n=r.map(c=>a.formatPhoneNumberToWhatsappPattern(c));return this.debug&&this.logger?.debug("WHATSAPP",`${s} participants to group`,{groupId:o,participantsCount:n.length}),this.socket?.groupParticipantsUpdate(o,n,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=a.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=a.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=a.formatGroupId(e);this.debug&&this.logger?.debug("WHATSAPP","Fetching group invite code",{groupId:s});let r=await this.socket?.groupInviteCode(s);return t&&r?`https://chat.whatsapp.com/${r}`:r}async revokeGroupInviteCode(e){if(!e)throw new Error("revokeGroupInviteCode: Group ID is required.");await this.ensureSocketConnected();let t=a.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=a.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=a.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=a.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(r=>{if(r.message==="item-not-found")return null;throw r})}};var F=class a extends N{constructor(e){super(e);}async sendTextMessage(e,t,s){if(!e||!t)throw new Error("sendTextMessage: Group ID and text are required.");await this.ensureSocketConnected();let r=a.formatGroupId(e),o={};return s?.replyToMessageId&&(o.quoted={key:{id:s.replyToMessageId}}),this.debug&&this.logger?.debug("WHATSAPP","Sending text message to group",{groupId:r,textLength:t.length,hasMentions:!!s?.mentions?.length}),this.socket?.sendMessage(r,{text:t},o)}async sendButtonsMessage(e,{title:t,subtitle:s,buttons:r}){if(!e||!t||!r?.length)throw new Error("sendButtonsMessage: Group ID, title, and buttons are required.");await this.ensureSocketConnected();let o=a.formatGroupId(e),n=r?.map(i=>{let u={display_text:i.label},g;switch(true){case !!i.url:g="cta_url",u.url=i.url,u.url=u.url.startsWith("http")?u.url:`https://${u.url}`;break;case !!i.copy:g="cta_copy",u.copy_code=i.copy;break;case !!i.tel:g="cta_call",u.phone_number=i.tel;break;default:g="";break}return {name:g,buttonParamsJson:JSON.stringify(u)}}).filter(i=>i.name),c=ne.generateWAMessageFromContent(o,{viewOnceMessage:{message:{interactiveMessage:ne.WAProto.Message.InteractiveMessage.create({body:ne.WAProto.Message.InteractiveMessage.Body.create({text:t}),...s&&{footer:ne.WAProto.Message.InteractiveMessage.Footer.create({text:s})},nativeFlowMessage:ne.WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:n})})}}},{userJid:o});return this.debug&&this.logger?.debug("WHATSAPP","Sending buttons message to group",{groupId:o,title:t,buttonsCount:n.length}),this.socket?.relayMessage(o,c.message,{messageId:c.key.id})}async sendReplyButtonsMessage(e,{title:t,subtitle:s,buttons:r,mentions:o}){if(!e||!t||!r?.length)throw new Error("sendReplyButtonsMessage: Group ID, title, and buttons are required.");await this.ensureSocketConnected();let n=a.formatGroupId(e),c=r.filter(u=>u).map((u,g)=>typeof u=="string"?{buttonId:`id-${g}`,buttonText:{displayText:u},type:1}:{buttonId:`${u.id}`,buttonText:{displayText:u.label},type:1}),i={text:t,buttons:c,...s&&{footer:s}};return o?.length&&(i.mentions=o.map(u=>a.formatPhoneNumberToWhatsappPattern(u))),this.debug&&this.logger?.debug("WHATSAPP","Sending reply buttons message to group",{groupId:n,title:t,buttonsCount:c.length}),this.socket?.sendMessage(n,i)}async sendListMessage(e,{title:t,subtitle:s,buttonText:r,sections:o}){if(!t||!r||!o||o.length===0)throw new Error("sendListMessage: title, buttonText, and sections are required.");await this.ensureSocketConnected();let n=a.formatGroupId(e),c=ne.generateWAMessageFromContent(n,{viewOnceMessage:{message:{interactiveMessage:ne.WAProto.Message.InteractiveMessage.create({body:ne.WAProto.Message.InteractiveMessage.Body.create({text:t}),...s&&{footer:ne.WAProto.Message.InteractiveMessage.Footer.create({text:s})},header:ne.WAProto.Message.InteractiveMessage.Header.create({title:r,hasMediaAttachment:false}),nativeFlowMessage:ne.WAProto.Message.InteractiveMessage.NativeFlowMessage.create({buttons:[{name:"single_select",buttonParamsJson:JSON.stringify({title:r,sections:o.map(i=>({title:i.title,rows:i.rows.map(u=>({header:u.title,title:u.title,description:u.description||"",id:u.id}))}))})}]})})}}},{userJid:n});return this.debug&&this.logger?.debug("WHATSAPP","send list message",{groupId:n,title:t,buttonText:r,sectionsCount:o.length,totalRows:o.reduce((i,u)=>i+u.rows.length,0)}),this.socket?.relayMessage(n,c.message,{messageId:c.key.id})}async sendImageMessage(e,t,{caption:s="",filename:r,mentions:o}={}){if(!e||!t)throw new Error("sendImageMessage: Group ID and image source are required.");await this.ensureSocketConnected();let n=a.formatGroupId(e),c=typeof t=="string"?await h(t):t instanceof b__default.default?await y(t):t,i=r&&decodeURIComponent(r),u={image:c,...s&&{caption:s},...i&&{filename:i}};return o?.length&&(u.mentions=o.map(g=>a.formatPhoneNumberToWhatsappPattern(g))),this.debug&&this.logger?.debug("WHATSAPP","Sending image to group",{groupId:n,hasCaption:!!s,filename:i}),this.socket?.sendMessage(n,u)}async sendVideoMessage(e,t,{caption:s="",filename:r,sendAsGifPlayback:o=false,mentions:n}={}){if(!e||!t)throw new Error("sendVideoMessage: Group ID and video source are required.");await this.ensureSocketConnected();let c=a.formatGroupId(e),i=typeof t=="string"?await h(t):t instanceof b__default.default?await y(t):t,u=r&&decodeURIComponent(r),g={video:i,...s&&{caption:s},gifPlayback:o,...u&&{filename:u}};return n?.length&&(g.mentions=n.map(p=>a.formatPhoneNumberToWhatsappPattern(p))),this.debug&&this.logger?.debug("WHATSAPP","Sending video to group",{groupId:c,hasCaption:!!s,filename:u,gifPlayback:o}),this.socket?.sendMessage(c,g)}async sendAudioMessage(e,t,{filename:s,replyToMessageId:r,mimetype:o,seconds:n,ptt:c=false,mentions:i}={}){if(!e||!t)throw new Error("sendAudioMessage: Group ID and audio source are required.");await this.ensureSocketConnected();let u=a.formatGroupId(e),g=typeof t=="string"?await h(t):t instanceof b__default.default?await y(t):t,p=n||await B(g,o).catch(()=>0),d=s&&decodeURIComponent(s),m={audio:g,ptt:c,...d&&{filename:d},...o&&{mimetype:o},...p&&{seconds:p}};i?.length&&(m.mentions=i.map(k=>a.formatPhoneNumberToWhatsappPattern(k)));let l={};return r&&(l.quoted={key:{id:r}}),this.debug&&this.logger?.debug("WHATSAPP","Sending audio to group",{groupId:u,isPTT:c,mimetype:o,filename:d,seconds:p,replyToMessageId:r}),this.socket?.sendMessage(u,m,l)}async sendDocumentMessage(e,t,{fileName:s,caption:r,mimetype:o,replyToMessageId:n,jpegThumbnail:c,mentions:i}){if(!e||!t||!s)throw new Error("sendDocumentMessage: Group ID, document source, and fileName are required.");await this.ensureSocketConnected();let u=a.formatGroupId(e),g=typeof t=="string"?await h(t):t instanceof b__default.default?await y(t):t,p=s&&decodeURIComponent(s),d={document:g,fileName:p,...r&&{caption:r},...o&&{mimetype:o},...c&&{jpegThumbnail:c}};i?.length&&(d.mentions=i.map(l=>a.formatPhoneNumberToWhatsappPattern(l)));let m={};return n&&(m.quoted={key:{id:n}}),this.debug&&this.logger?.debug("WHATSAPP","Sending document to group",{groupId:u,fileName:p,mimetype:o,hasCaption:!!r,hasThumbnail:!!c}),this.socket?.sendMessage(u,d,m)}async sendLocationMessage(e,t,s,r){let{longitude:o,latitude:n}=t;if(!e||n===void 0||o===void 0)throw new Error("sendLocationMessage: Group ID, latitude, and longitude are required.");await this.ensureSocketConnected();let c=a.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Sending location to group",{groupId:c,latitude:n,longitude:o}),this.socket?.sendMessage(c,{location:{degreesLatitude:n,degreesLongitude:o,...s&&{name:s},...r&&{address:r}}})}async sendMentionAll(e,t){if(!e||!t)throw new Error("sendMentionAll: Group ID and text are required.");await this.ensureSocketConnected();let s=a.formatGroupId(e),r=await this.getGroupMetadata(s);if(!r)throw new Error("Could not fetch group metadata");let o=r.participants.map(n=>n.id);return this.debug&&this.logger?.debug("WHATSAPP","Sending mention all message to group",{groupId:s,participantsCount:o.length}),this.socket?.sendMessage(s,{text:t,mentions:o})}async sendReactionMessage(e,t,s){if(!e||!t||!s)throw new Error("sendReactionMessage: Group ID, message ID, and emoji are required.");await this.ensureSocketConnected();let r=a.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Sending reaction to group message",{groupId:r,messageId:t,emoji:s}),this.socket?.sendMessage(r,{react:{text:s,key:{id:t,remoteJid:r}}})}async deleteGroupMessage(e,t){if(!e||!t)throw new Error("deleteGroupMessage: Group ID and message ID are required.");await this.ensureSocketConnected();let s=a.formatGroupId(e);return this.debug&&this.logger?.debug("WHATSAPP","Deleting message in group",{groupId:s,messageId:t}),this.socket?.sendMessage(s,{delete:{id:t,remoteJid:s,fromMe:true}})}async sendSurveyMessage(e,t,s,r=false){if(!e||!t||!s||s.length<2)throw new Error("sendSurveyMessage: question and at least 2 options are required.");if(s.length>12)throw new Error("sendSurveyMessage: maximum 12 options allowed.");await this.ensureSocketConnected();let o=a.formatGroupId(e),n=s;return this.debug&&this.logger?.debug("WHATSAPP","send survey message",{groupId:o,question:t,options:n,allowMultipleAnswers:r}),this.socket?.sendMessage(o,{poll:{name:t,values:n,selectableCount:r?s.length:1}})}async sendStickerMessage(e,t){if(!e||!t)throw new Error("sendStickerMessage: Group ID and image source are required.");await this.ensureSocketConnected();let s=a.formatGroupId(e),r=typeof t=="string"?await h(t):t instanceof b__default.default?await y(t):t;return this.debug&&this.logger?.debug("WHATSAPP","send sticker message",{groupId:s}),this.socket?.sendMessage(s,{sticker:r})}async sendFileMessage(e,t,{caption:s="",mimetype:r,replyToMessageId:o,jpegThumbnailSrc:n,autoMessageClassification:c=true,filename:i}){await this.ensureSocketConnected();let u=a.formatGroupId(e),g;typeof n=="string"?g=await h(n):n instanceof b__default.default?g=await y(n):g=n;let p;if(typeof t=="string")p=await h(t),i=i||path.basename(t);else if(t instanceof b__default.default){p=await y(t);}else p=t;i=i&&decodeURIComponent(i),r||=this.getMimetypeFromFilename(i),r=r?.toLowerCase(),this.debug&&this.logger?.debug("WHATSAPP","send file message",{groupId:u,caption:s,mimetype:r,filename:i,replyToMessageId:o,includeJpegThumbnail:!!g});let d=true,m;if(c)switch(D[r]){case "Image":m=await this.sendImageMessage(u,p,{caption:s,filename:i}).catch(()=>d=false);break;case "Sticker":m=await this.sendStickerMessage(u,p).catch(()=>d=false);break;case "Video":m=await this.sendVideoMessage(u,p,{caption:s,filename:i}).catch(()=>d=false);break;case "Audio":m=await this.sendAudioMessage(u,p,{mimetype:r,filename:i,replyToMessageId:o}).catch(()=>d=false);break;default:return await this.sendDocumentMessage(u,p,{fileName:i,caption:s,mimetype:r,replyToMessageId:o,jpegThumbnail:g})}if(m&&d)return m;if(!c||!d)return await this.sendDocumentMessage(u,p,{fileName:i,caption:s,mimetype:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",replyToMessageId:o,jpegThumbnail:g})}};var X=class extends F{constructor(e){super(e);}};
|
|
3
|
-
exports.WhatsappSocket=
|
|
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
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|