zaileys 4.15.0 → 4.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var Ql=require('baileys'),crypto=require('node:crypto'),Y=require('node:fs/promises'),url=require('node:url'),H=require('node:path'),fs=require('node:fs'),os$1=require('node:os'),child_process=require('node:child_process'),jimp=require('jimp'),ga=require('node-webpmux'),lruCache=require('lru-cache');require('node:stream');var jc=require('qrcode-terminal'),Kc=require('pino'),events=require('node:events');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ql__default=/*#__PURE__*/_interopDefault(Ql);var Y__default=/*#__PURE__*/_interopDefault(Y);var H__default=/*#__PURE__*/_interopDefault(H);var ga__default=/*#__PURE__*/_interopDefault(ga);var jc__default=/*#__PURE__*/_interopDefault(jc);var Kc__default=/*#__PURE__*/_interopDefault(Kc);var Vo=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var p=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysBuilderError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var P={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:6,FPS:10,DEFAULT_QUALITY:60,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},Jt="ffmpeg",Or="ffprobe",Cr=false,Er=async(n,e)=>{if(n===void 0||n.length===0)return e;try{if(process.platform==="win32")return await Y__default.default.access(n),n;let t=()=>Y__default.default.access(n,fs.constants.X_OK).then(()=>!0,()=>!1);if(await t())return n;let{mode:r}=await Y__default.default.stat(n);return await Y__default.default.chmod(n,r|64),await t()?n:e}catch{return e}},Vt=async(n=false)=>{if(n||Cr)return;Cr=true;let e=process.env.FFMPEG_PATH,t=process.env.FFPROBE_PATH,r;try{r=(await import('@ffmpeg-installer/ffmpeg')).default?.path;}catch{}if(Jt=e??await Er(r,"ffmpeg"),Jt!=="ffmpeg"){let i=H__default.default.dirname(Jt),o=process.platform==="win32"?";":":",a=process.env.PATH??"";a.split(o).includes(i)||(process.env.PATH=`${i}${o}${a}`);}let s;try{s=(await import('@ffprobe-installer/ffprobe')).default?.path;}catch{}Or=t??await Er(s,"ffprobe");},Pr=12e4,kr=3e4,Yo=64*1024,Qo=3e4,Tr=64*1024*1024,ge={maxConcurrent:4,maxQueued:64,queueTimeoutMs:12e4,maxImagePixels:5e7},Rr=()=>({...ge}),_r=n=>{let e=(t,r,s)=>{if(r!==void 0&&(!Number.isFinite(r)||!Number.isInteger(r)||r<s))throw new Error(`invalid media limit ${t}: ${r}`)};e("maxConcurrent",n.maxConcurrent,1),e("maxQueued",n.maxQueued,0),e("queueTimeoutMs",n.queueTimeoutMs,1),e("maxImagePixels",n.maxImagePixels,1),Object.assign(ge,Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0)));},Nn=0,Qe=[],Zo=async()=>{if(Nn<ge.maxConcurrent)Nn+=1;else {if(Qe.length>=ge.maxQueued)throw new Error(`ffmpeg queue is full (${ge.maxQueued} jobs waiting)`);await new Promise((e,t)=>{let r={grant:()=>{clearTimeout(s),e();}},s=setTimeout(()=>{let i=Qe.indexOf(r);i>=0&&Qe.splice(i,1),t(new Error(`ffmpeg job waited more than ${ge.queueTimeoutMs}ms for a slot`));},ge.queueTimeoutMs);Qe.push(r);});}let n=false;return ()=>{if(n)return;n=true;let e=Qe.shift();e?e.grant():Nn-=1;}},Ht=()=>Date.now().toString(36)+crypto.randomBytes(4).toString("hex"),$=async n=>{let{fileTypeFromBuffer:e}=await import('file-type');return e(n)},re=class{static generateUniqueId(){return crypto.randomBytes(12).toString("hex")}static createTempPath(e,t){return H__default.default.join(os$1.tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Y__default.default.unlink(t)));}static async safeReadFile(e){try{return await Y__default.default.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Y__default.default.writeFile(e,t,{flag:"wx",mode:384});}catch{throw new Error(`Failed to write file: ${e}`)}}},R=class{static async toBuffer(e){if(Buffer.isBuffer(e))return e;if(e instanceof ArrayBuffer)return Buffer.from(e);if(typeof e=="string")return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){if(e.startsWith("http://")||e.startsWith("https://"))return this.fromUrl(e);try{if(await Y__default.default.stat(e).then(t=>t.isFile()).catch(()=>!1))return await Y__default.default.readFile(e)}catch{}return Buffer.from(e,"base64")}static async fromUrl(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Qo);try{let s=await fetch(e,{signal:t.signal});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.arrayBuffer(),o=Buffer.from(i);if(o.byteLength>Tr)throw new Error(`Fetched body exceeds ${Tr} bytes`);return o}catch(s){throw new Error(`Failed to fetch URL: ${s instanceof Error?s.message:String(s)}`)}finally{clearTimeout(r);}}static async getExtension(e){let{fileTypeFromBuffer:t}=await import('file-type'),r=await t(e);if(!r)return "tmp";let s=r.ext.toLowerCase();return ["wav","ogg","mp4","gif","jpg","webp","tmp","mp3","png"].includes(s)?s:"tmp"}},q=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(P.MIME.IMAGE)||e.startsWith(P.MIME.VIDEO)}static isAnimated(e){return e===P.MIME.GIF||e.startsWith(P.MIME.VIDEO)}},fe=class{static async process(e){await Vt();let t=await Zo();try{await new Promise((r,s)=>{let i=["-y","-i",e.input,...e.options,e.output],o=child_process.spawn(Jt,i,{stdio:"ignore"}),a=!1,d=l=>{a||(a=!0,clearTimeout(c),l());},c=setTimeout(()=>{o.kill("SIGKILL");let l=new Error(`FFmpeg timed out after ${Pr}ms`);Promise.resolve(e.onError(l)).catch(()=>{}),d(()=>s(l));},Pr);o.on("close",l=>{if(a)return;if(l===0){Promise.resolve(e.onEnd()).then(()=>d(r),f=>d(()=>s(f)));return}let u=new Error(`FFmpeg exited with code ${l}`);Promise.resolve(e.onError(u)).then(()=>d(()=>s(u)),f=>d(()=>s(f)));}),o.on("error",l=>{Promise.resolve(e.onError(l)).finally(()=>d(()=>s(l)));});});}finally{t();}}static async getDuration(e){if(await Vt(),typeof e!="string"||e.length===0||e.startsWith("-"))throw new Error("getDuration expects a local file path");if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))throw new Error("getDuration does not accept protocol inputs");let t=await Y__default.default.stat(e).catch(()=>{});if(t===void 0||!t.isFile())throw new Error(`getDuration: not a readable file: ${e}`);return new Promise((r,s)=>{let i=child_process.spawn(Or,["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",e]),o="",a=false,d=l=>{a||(a=true,clearTimeout(c),l());},c=setTimeout(()=>{i.kill("SIGKILL"),d(()=>s(new Error(`ffprobe timed out after ${kr}ms`)));},kr);i.stdout.on("data",l=>{o.length>Yo||(o+=l.toString());}),i.on("close",l=>{d(l===0?()=>r(parseFloat(o.trim())||0):()=>s(new Error(`ffprobe exited with code ${l}`)));}),i.on("error",l=>d(()=>s(l)));})}};var ra=3e4,sa=64*1024*1024,Nr="application/octet-stream",Oe=async n=>n.byteLength===0?Nr:(await $(n))?.mime??Nr,Ze=async n=>({buffer:n,mime:await Oe(n),size:n.byteLength}),ia=async(n,e,t)=>{let r=Number(n.headers?.get?.("content-length")??"0");if(Number.isFinite(r)&&r>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);let s=n.body;if(s==null||typeof s.getReader!="function"){let d=Buffer.from(await n.arrayBuffer());if(d.byteLength>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);return d}let i=[],o=0,a=s.getReader();for(;;){let{done:d,value:c}=await a.read();if(d)break;if(c!==void 0){if(o+=c.byteLength,o>t)throw await a.cancel().catch(()=>{}),new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);i.push(c);}}return Buffer.concat(i)},Dr=async(n,e,t)=>{let r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let i=await fetch(n,{signal:r.signal});if(!i.ok)throw new p("MEDIA_LOAD_FAILED",`fetch ${n} failed with status ${i.status}`,{cause:i.status});return await ia(i,n,t)}catch(i){throw i instanceof p?i:new p("MEDIA_LOAD_FAILED",`fetch ${n} failed: ${i.message}`,{cause:i})}finally{clearTimeout(s);}},Br=async(n,e)=>{try{if((await Y.stat(n)).size>e)throw new p("MEDIA_LOAD_FAILED",`${n} exceeds ${e} bytes`);return await Y.readFile(n)}catch(t){throw t instanceof p?t:new p("MEDIA_LOAD_FAILED",`read ${n} failed: ${t.message}`,{cause:t})}},oa=n=>n.startsWith("http://")||n.startsWith("https://"),aa=[".zaileys"],Fr=(n,e)=>{let t=H.resolve(n);for(let r of e){let s=H.resolve(r);if(t===s||t.startsWith(s+H.sep))throw new p("MEDIA_LOAD_FAILED",`refusing to read ${n}: it resolves inside the protected directory ${r}`)}return t},da=/^(?:0\.|10\.|127\.|169\.254\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.)/,ca=n=>{let e=n.replace(/^\[|\]$/g,"").toLowerCase();return e==="localhost"||e.endsWith(".localhost")||e.endsWith(".internal")||e==="::1"||e==="::"||e.startsWith("fc")||e.startsWith("fd")||e.startsWith("fe80:")?true:da.test(e)},Wr=(n,e)=>{let t;try{t=new URL(n);}catch{throw new p("MEDIA_LOAD_FAILED",`invalid url: ${n}`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new p("MEDIA_LOAD_FAILED",`unsupported url scheme: ${t.protocol}`);if(!e&&ca(t.hostname))throw new p("MEDIA_LOAD_FAILED",`refusing to fetch a private address: ${t.hostname}`);return n},Xe={},Ur=n=>{if(n.maxBytes!==void 0&&(!Number.isInteger(n.maxBytes)||n.maxBytes<1))throw new p("INVALID_OPTIONS",`invalid maxBytes: ${n.maxBytes}`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<1))throw new p("INVALID_OPTIONS",`invalid timeoutMs: ${n.timeoutMs}`);Xe={...Xe,...Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))};},jr=()=>({...Xe}),B=async(n,e)=>{await Vt();let t={...Xe,...e,deniedDirs:[...Xe.deniedDirs??[],...e?.deniedDirs??[]]},r=t.timeoutMs??ra,s=t.maxBytes??sa,i=t.allowPrivateNetwork===true,o=[...aa,...t.deniedDirs??[]];if(Buffer.isBuffer(n))return Ze(n);if(n instanceof URL)return n.protocol==="file:"?Ze(await Br(Fr(url.fileURLToPath(n),o),s)):Ze(await Dr(Wr(n.toString(),i),r,s));if(oa(n))return Ze(await Dr(Wr(n,i),r,s));if(t.allowLocalPaths===false)throw new p("MEDIA_LOAD_FAILED","local filesystem paths are disabled; pass a URL, a Buffer, or a file: URL");return Ze(await Br(Fr(n,o),s))};var Re=async(n,e)=>{let{buffer:t}=await B(n),r={image:t};return e?.caption!==void 0&&(r.caption=e.caption),e?.viewOnce!==void 0&&(r.viewOnce=e.viewOnce),r};var he=async(n,e)=>{let{buffer:t,mime:r}=await B(n);if(!r.startsWith("video/"))throw new p("INVALID_OPTIONS",`video() expects a video source, got mime ${r}`);let s={video:t};return e?.caption!==void 0&&(s.caption=e.caption),e?.gifPlayback!==void 0&&(s.gifPlayback=e.gifPlayback),e?.viewOnce!==void 0&&(s.viewOnce=e.viewOnce),e?.ptv===true&&(s.ptv=true),s};var qr=2,$r=30,la=async n=>{if(n.type==="image")return Re(n.src,n.caption!==void 0?{caption:n.caption}:void 0);if(n.type==="video")return he(n.src,n.caption!==void 0?{caption:n.caption}:void 0);throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(n.type)}`)},Kr=async(n,e,t,r)=>{if(!Array.isArray(t)||t.length<qr)throw new p("INVALID_OPTIONS",`album() requires a minimum of ${qr} items`);if(t.length>$r)throw new p("INVALID_OPTIONS",`album() accepts a maximum of ${$r} items`);let s=0,i=0;for(let u of t)if(u.type==="image")s+=1;else if(u.type==="video")i+=1;else throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(u.type)}`);let o={album:{expectedImageCount:s,expectedVideoCount:i}};r.mentions&&r.mentions.length>0&&(o.mentions=r.mentions),r.mentionAll&&(o.mentionAll=true);let a={};r.quoted&&(a.quoted=r.quoted),r.disappearingSeconds!==void 0&&(a.ephemeralExpiration=r.disappearingSeconds);let d;try{d=await n.sendMessage(e,o,a);}catch(u){throw new p("SEND_FAILED","album parent send rejected",{cause:u})}let c=d?.key;if(!c)throw new p("SEND_FAILED","album parent returned no message key");let l=0;for(let u of t){let f=await la(u);f.albumParentKey=c;try{await n.sendMessage(e,f);}catch(v){throw new p("SEND_FAILED","album child send rejected",{cause:{parentKey:c,index:l,error:v}})}l+=1;}return c};var Q=async(n,e,t,r,s)=>{let i=r.replace(/[^a-z0-9]+/gi,"_").toLowerCase(),o=re.createTempPath(`${i}_in`,e),a=re.createTempPath(`${i}_out`,t);await re.safeWriteFile(o,n);try{let d=typeof s=="function"?await s(o):s;return await fe.process({input:o,output:a,options:d,onEnd:async()=>{},onError:async()=>{}}),await re.safeReadFile(a)}catch(d){throw new Error(`${r} failed: ${d instanceof Error?d.message:String(d)}`)}finally{await re.cleanup([o,a]);}};var zt=64,Gr=8e3,ye=class{static async toOpus(e){return this.convert(e,"opus")}static async toMp3(e){return this.convert(e,"mp3")}static async convert(e,t="opus"){let r=await R.toBuffer(e);q.validate(await $(r),P.MIME.AUDIO);let s=await R.getExtension(r),i=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","ogg"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return Q(r,s,t==="opus"?"ogg":"mp3",`${t.toUpperCase()} conversion`,i)}static async waveform(e){let t=await R.toBuffer(e),r=await R.getExtension(t),s=await Q(t,r,"tmp","Waveform generation",["-vn","-ac","1","-ar",String(Gr),"-f","s16le"]),i=Math.floor(s.length/2);return {waveform:this.computeWaveform(s),seconds:Math.max(1,Math.round(i/Gr))}}static computeWaveform(e){let t=Math.floor(e.length/2),r=new Uint8Array(zt);if(t===0)return r;let s=Math.max(1,Math.floor(t/zt)),i=[];for(let a=0;a<zt;a++){let d=0,c=0;for(let l=0;l<s;l++){let u=(a*s+l)*2;u+1<e.length&&(d+=Math.abs(e.readInt16LE(u)),c+=1);}i.push(c>0?d/c:0);}let o=Math.max(...i)||1;for(let a=0;a<zt;a++)r[a]=Math.floor(i[a]/o*100);return r}};var ua=["-c:v","libx264","-preset","ultrafast","-crf","28","-c:a","aac","-b:a","128k","-movflags","+faststart","-vf","scale=trunc(iw/2)*2:trunc(ih/2)*2","-pix_fmt","yuv420p","-f","mp4"],Z=class{static async toMp4(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t);return Q(t,r,"mp4","Video re-encoding",ua)}static async thumbnail(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t),s=P.THUMBNAIL.SIZE;return (await Q(t,r,"jpg","Thumbnail generation",async o=>{let a=await fe.getDuration(o);return ["-ss",Math.max(0,a*.1).toString(),"-vframes","1","-s",`${s}x${s}`]})).toString("base64")}static async duration(e){return fe.getDuration(e)}};var _e=null,Jr=false;async function pa(){if(Jr)return _e;Jr=true;let n=e=>{typeof e=="function"&&(_e=e);};try{n(Vo("sharp"));}catch{_e=null;}if(!_e)try{let e=await import('sharp');n(e.default??e);}catch{_e=null;}return _e}function Hr(n,e){let t=new Uint8Array(n*n),r=n/2,s=n/2,i=n/10,o=[[i,i],[n-i,i],[i,n-i],[n-i,n-i]];for(let a=0;a<n;a++)for(let d=0;d<n;d++){let c=false;if(e==="circle"){let l=d-r,u=a-s;c=l*l+u*u<=r*r;}else if(e==="rounded"){let l=d>=i&&d<n-i&&a>=0&&a<n,u=d>=0&&d<n&&a>=i&&a<n-i,f=false;for(let v of o){let b=d-v[0],T=a-v[1];if(b*b+T*T<=i*i){f=true;break}}c=l||u||f;}else if(e==="oval"){let l=(d-r)/(n/2),u=(a-s)/(n/3);c=l*l+u*u<=1;}t[a*n+d]=c?255:0;}return t}var Vr=2e4,Fn=(n,e)=>{let t=typeof n=="number"&&Number.isFinite(n)?n:0,r=typeof e=="number"&&Number.isFinite(e)?e:0;if(!(t<=0||r<=0)&&(t>Vr||r>Vr||t*r>Rr().maxImagePixels))throw new Error(`Image too large to decode safely: ${t}x${r}`)},zr=(n,e)=>{if(!Number.isInteger(n)||!Number.isInteger(e)||n<=0||e<=0)throw new Error(`Invalid resize target: ${n}x${e}`);Fn(n,e);},ma=n=>{if(n.length>=24&&n.readUInt32BE(0)===2303741511)return {width:n.readUInt32BE(16),height:n.readUInt32BE(20)};if(n.length>=10&&n.toString("ascii",0,3)==="GIF")return {width:n.readUInt16LE(6),height:n.readUInt16LE(8)};if(n.length>=26&&n.toString("ascii",0,2)==="BM")return {width:n.readInt32LE(18),height:Math.abs(n.readInt32LE(22))};if(n.length>=30&&n.toString("ascii",0,4)==="RIFF"&&n.toString("ascii",8,12)==="WEBP"){let e=n.toString("ascii",12,16);if(e==="VP8X")return {width:1+(n.readUIntLE(24,3)&16777215),height:1+(n.readUIntLE(27,3)&16777215)};if(e==="VP8 "&&n.length>=30)return {width:n.readUInt16LE(26)&16383,height:n.readUInt16LE(28)&16383}}},se=n=>{let e=ma(n);return e!==void 0&&Fn(e.width,e.height),n},Dn=class{sharp;constructor(e){this.sharp=e;}async thumbnail(e){let t=this.sharp;se(e);let r=t(e).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE,{fit:"cover"});return (await r.metadata()).format==="gif"&&(r=t(e,{pages:1}).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE)),(await r.jpeg({quality:P.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}async resize(e,t,r){zr(t,r);let s=this.sharp(se(e)),i=await s.metadata();return Fn(i.width,i.height),s.resize(t,r,{fit:"cover"}).png().toBuffer()}async toJpeg(e){let t=this.sharp,r=se(await R.toBuffer(e)),s=await t(r).metadata();if(!s.format)throw new Error("Invalid image type: format could not be determined");return s.format==="webp"||s.format==="png"?t(r).jpeg().toBuffer():r}async resizeForSticker(e,t,r="default"){let s=this.sharp,i=P.STICKER.SIZE,o=s(se(e)).resize(i,i,{fit:"contain",background:{r:0,g:0,b:0,alpha:0}});if(r!=="default"){let a=Buffer.from(Hr(i,r)),d=s(a,{raw:{width:i,height:i,channels:1}});o=o.joinChannel(await d.png().toBuffer());}return o.webp({quality:t}).toBuffer()}},Bn=class{async thumbnail(e){let t=P.THUMBNAIL.SIZE,r=await jimp.Jimp.fromBuffer(se(e));r.cover({w:t,h:t});let s=await r.getBuffer("image/jpeg",{quality:P.THUMBNAIL.QUALITY});return Buffer.from(s).toString("base64")}async resize(e,t,r){zr(t,r);let s=await jimp.Jimp.fromBuffer(se(e));s.cover({w:t,h:r});let i=await s.getBuffer("image/png");return Buffer.from(i)}async toJpeg(e){let t=await R.toBuffer(e);try{let s=await(await jimp.Jimp.fromBuffer(se(t))).getBuffer("image/jpeg");return Buffer.from(s)}catch{return t}}async resizeForSticker(e,t,r="default"){let s=P.STICKER.SIZE,i=await jimp.Jimp.fromBuffer(se(e));if(i.contain({w:s,h:s}),r!=="default"){let d=Hr(s,r),c=new jimp.Jimp({width:s,height:s,color:255});for(let l=0;l<s;l++)for(let u=0;u<s;u++)d[l*s+u]===255&&c.setPixelColor(4294967295,u,l);i.mask(c);}let o=Buffer.from(await i.getBuffer("image/png")),a=Math.max(1,Math.min(100,t));return Q(o,"png","webp","Jimp WebP conversion",["-vcodec","libwebp","-q:v",`${a}`,"-preset","default"])}},tt=null;async function Yt(){if(tt)return tt;let n=await pa();return n?tt=new Dn(n):(console.warn("\x1B[33m%s\x1B[0m","[media-process] Jimp is slow. For faster performance, run: npm install sharp"),tt=new Bn),tt}var V=class{static async thumbnail(e){return (await Yt()).thumbnail(e)}static async resize(e,t,r){return (await Yt()).resize(e,t,r)}static async toJpeg(e){return (await Yt()).toJpeg(e)}static async resizeForSticker(e,t,r="default"){return (await Yt()).resizeForSticker(e,t,r)}};var Le=class n{static defaultMetadata={packageName:"Zaileys Library",authorName:"https://github.com/zeative/zaileys"};static setDefaultMetadata(e){e&&(n.defaultMetadata={...n.defaultMetadata,...e});}static getDefaultMetadata(){return {...n.defaultMetadata}}static async create(e,t){try{let r=await R.toBuffer(e),s=await $(r);if(!s)throw new Error("Unable to detect file type");let i=t?.quality||P.STICKER.DEFAULT_QUALITY,o=q.isAnimated(s.mime),a=t?.shape||"default",d=s.mime==="image/webp"?r:o?await this.processAnimated(r,s.mime,i):await V.resizeForSticker(r,i,a),c=this.createExifMetadata(t),l=new ga__default.default.Image;await l.load(d),l.exif=c;let u=await l.save(null);return Buffer.isBuffer(u)?u:Buffer.from(u)}catch(r){throw new Error(`Sticker creation failed: ${r instanceof Error?r.message:String(r)}`)}}static createExifMetadata(e){let t=e?.pack??e?.packageName??e?.packname??n.defaultMetadata.pack??n.defaultMetadata.packageName??n.defaultMetadata.packname??"Zaileys Library",r=e?.author??e?.authorName??e?.publisher??n.defaultMetadata.author??n.defaultMetadata.authorName??n.defaultMetadata.publisher??"https://github.com/zeative/zaileys",s={"sticker-pack-id":Ht(),"sticker-pack-name":t,"sticker-pack-publisher":r,emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},i=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(s),"utf8"),a=Buffer.concat([i,o]);return a.writeUIntLE(o.length,14,4),a}static async processAnimated(e,t,r){let s=P.STICKER.SIZE,i=P.STICKER.FPS,o=`scale=${s}:${s}:force_original_aspect_ratio=decrease,fps=${i},pad=${s}:${s}:(ow-iw)/2:(oh-ih)/2:color=0x00000000,format=rgba`,a=Math.max(1,Math.min(100,r));return Q(e,this.getExtension(t),"webp","Animated sticker processing",async d=>{let c=P.STICKER.MAX_DURATION;try{c=Math.min(await Z.duration(d),P.STICKER.MAX_DURATION);}catch{console.warn("Using default duration:",P.STICKER.MAX_DURATION);}let l=Number.isFinite(a)?Math.round(a):60,u=Number.isFinite(c)&&c>0?Math.min(c,P.STICKER.MAX_DURATION):P.STICKER.MAX_DURATION;return ["-vcodec","libwebp","-vf",o,"-q:v",String(l),"-loop","0","-preset","default","-an","-vsync","0","-t",String(u),"-compression_level",String(P.STICKER.COMPRESSION_LEVEL)]})}static getExtension(e){return e===P.MIME.GIF?"gif":e.startsWith(P.MIME.VIDEO)?"mp4":"tmp"}};var Qt=class{static async create(e){try{let t=await R.toBuffer(e),r=await $(t);if(!r)throw new Error("Unable to detect file type");let s;return r.mime.startsWith(P.MIME.VIDEO)?s=await Z.thumbnail(t):q.isMedia(r.mime)?s=await V.thumbnail(t):s="",{document:t,mimetype:r.mime,ext:r.ext,fileName:Ht(),jpegThumbnail:s}}catch(t){throw new Error(`Document creation failed: ${t instanceof Error?t.message:String(t)}`)}}};var we=class{input;constructor(e){this.input=e;}get audio(){return {toOpus:()=>ye.toOpus(this.input),toMp3:()=>ye.toMp3(this.input),convert:(e="opus")=>ye.convert(this.input,e),waveform:()=>ye.waveform(this.input)}}get video(){return {toMp4:()=>Z.toMp4(this.input),thumbnail:()=>Z.thumbnail(this.input)}}get image(){return {toJpeg:()=>V.toJpeg(this.input),thumbnail:async()=>{let e=await R.toBuffer(this.input);return V.thumbnail(e)},resize:async(e,t)=>{let r=await R.toBuffer(this.input);return V.resize(r,e,t)}}}get sticker(){return {create:e=>Le.create(this.input,e)}}get document(){return {create:()=>Qt.create(this.input)}}get thumbnail(){return {get:async()=>{let e=await R.toBuffer(this.input),t=await $(e);if(!t||!q.isMedia(t.mime))throw new Error("Invalid media type: expected image or video");return t.mime.startsWith(P.MIME.VIDEO)?Z.thumbnail(this.input):V.thumbnail(e)}}}async toBuffer(){return R.toBuffer(this.input)}};var Yr=async(n,e)=>{let{buffer:t}=await B(n),r;try{r=await new we(t).audio.toOpus();}catch(o){throw new p("MEDIA_LOAD_FAILED",`audio() transcode failed: ${o.message}`,{cause:o})}let s=e?.ptt??true,i={audio:r,ptt:s};if(s)try{let{waveform:o,seconds:a}=await new we(t).audio.waveform();i.waveform=o,e?.seconds===void 0&&(i.seconds=a);}catch{}return e?.seconds!==void 0&&(i.seconds=e.seconds),i};var Qr=10,W="__zaileysRelayMessage",Wn="__zaileysHeaderMedia",nt="__zaileysRequireGroupJid",Zt="__zaileysBypassDownload",Xt="__zaileysStatusMedia",ie=n=>typeof n=="string"&&n.length>0,fa=n=>{let e=n.text;if(!ie(e)||e.trim().length===0)throw new p("INVALID_OPTIONS","button text must be a non-empty string");return e},ha=(n,e)=>{let t=n.type??"reply";if(t==="location"){let s=n.text;return {name:"send_location",buttonParamsJson:JSON.stringify(ie(s)?{display_text:s}:{})}}let r=fa(n);if(t==="reply"){let s=n.id;if(!ie(s))throw new p("INVALID_OPTIONS","reply button requires a non-empty id");if(e.has(s))throw new p("INVALID_OPTIONS",`duplicate button id: ${s}`);return e.add(s),{name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:r,id:s})}}if(t==="url"){let s=n.url;if(!ie(s))throw new p("INVALID_OPTIONS","url button requires a non-empty url");let i=n.webview===true;return {name:"cta_url",buttonParamsJson:JSON.stringify({display_text:r,url:s,merchant_url:s,landing_page_url:s,webview_interaction:i})}}if(t==="copy"){let s=n.code;if(!ie(s))throw new p("INVALID_OPTIONS","copy button requires a non-empty code");return {name:"cta_copy",buttonParamsJson:JSON.stringify({display_text:r,id:s,copy_code:s})}}if(t==="call"){let s=n.phone;if(!ie(s))throw new p("INVALID_OPTIONS","call button requires a non-empty phone");return {name:"cta_call",buttonParamsJson:JSON.stringify({display_text:r,id:s,phone_number:s})}}if(t==="reminder"||t==="cancel-reminder"){let s=n.id;return {name:t==="reminder"?"cta_reminder":"cta_cancel_reminder",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}if(t==="address"){let s=n.id;return {name:"address_message",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}throw new p("INVALID_OPTIONS",`unknown button type: ${String(t)}`)},ya=n=>{let e={};if(n?.bottomSheet){let t=n.bottomSheet;e.bottom_sheet={...t.buttonsLimit!==void 0?{in_thread_buttons_limit:t.buttonsLimit}:{},...t.dividers!==void 0?{divider_indices:t.dividers}:{},...t.listTitle!==void 0?{list_title:t.listTitle}:{},...t.buttonTitle!==void 0?{button_title:t.buttonTitle}:{}};}if(n?.limitedTimeOffer){let t=n.limitedTimeOffer;e.limited_time_offer={...t.text!==void 0?{text:t.text}:{},...t.url!==void 0?{url:t.url}:{},...t.copyCode!==void 0?{copy_code:t.copyCode}:{},...t.expiresAt!==void 0?{expiration_time:t.expiresAt}:{}};}return Object.keys(e).length>0?JSON.stringify(e):""},Un=n=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","buttons() requires at least one button");if(n.length>Qr)throw new p("INVALID_OPTIONS",`buttons() accepts at most ${Qr} buttons`);let e=new Set;return n.map(t=>ha(t,e))},Ne=(n,e)=>{let t=Un(n),r={body:{text:e?.text&&e.text.length>0?e.text:" "},nativeFlowMessage:{buttons:t,messageParamsJson:ya(e)}};e?.footer&&e.footer.length>0&&(r.footer={text:e.footer});let s=e?.image?{kind:"image",src:e.image}:e?.video?{kind:"video",src:e.video}:void 0;return (e?.title&&e.title.length>0||e?.subtitle&&e.subtitle.length>0||s)&&(r.header={title:e?.title??"",subtitle:e?.subtitle??"",hasMediaAttachment:s!==void 0}),s!==void 0?{[W]:{interactiveMessage:r},[Wn]:s}:{[W]:{interactiveMessage:r}}};var Zr=10,jn="__zaileysCardsMedia",Xr=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","carousel() requires at least one card");if(n.length>Zr)throw new p("INVALID_OPTIONS",`carousel() accepts at most ${Zr} cards`);let t=[],r=n.map((o,a)=>{let d={body:{text:o.body&&o.body.length>0?o.body:" "}};o.buttons&&o.buttons.length>0&&(d.nativeFlowMessage={buttons:Un(o.buttons),messageParamsJson:""}),o.footer&&o.footer.length>0&&(d.footer={text:o.footer});let c=o.image?{kind:"image",src:o.image}:o.video?{kind:"video",src:o.video}:void 0;return (o.title&&o.title.length>0||o.subtitle&&o.subtitle.length>0||c)&&(d.header={title:o.title??"",subtitle:o.subtitle??"",hasMediaAttachment:c!==void 0}),c&&t.push({...c,index:a}),d}),s={body:{text:e?.text&&e.text.length>0?e.text:" "},carouselMessage:{cards:r}};return t.length>0?{[W]:{interactiveMessage:s},[jn]:t}:{[W]:{interactiveMessage:s}}};var es=(n,e,t)=>{let r=new Int32Array(n.length).fill(-1),s=[];for(let i=0;i<n.length;i+=1){if(n[i-1]==="\\")continue;let o=n[i];if(o===e)s.push(i);else if(o===t){let a=s.pop();a!==void 0&&(r[a]=i);}}return r},va=n=>{let e=[],t="",r=0,s=1,i=0,o=0,a=[],d=es(n,"(",")"),c=es(n,"<",">");for(let l=0;l<n.length;l++)if(n[l]==="["&&n[l-1]!=="\\")a.push(l);else if(n[l]==="]"&&(n[l+1]==="("||n[l+1]==="<")){let u=a.pop();if(u==null)continue;let v=n[l+1]==="<",b=(v?c:d)[l+1]??-1;if(b<0)continue;let T=b+1,O=n.slice(u+1,l).trim(),A=n.slice(l+2,T-1).trim(),S,x;if(v){let[F="",z="",Ie="",He="",xe=""]=O.split("|").map(ze=>ze.trim());S=`zaileys_LATEX_${o++}`,x=`{{${S}}}${F||"image"}{{/${S}}}`,e.push({type:"latex",ie:{key:S,text:F,url:A,width:z,height:Ie,font_height:He,padding:xe}});}else O?(S=`zaileys_HYPERLINK_${i++}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"hyperlink",ie:{key:S,text:O,url:A}})):(S=`zaileys_CITATION_${s-1}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"citation",ie:{key:S,reference_id:String(s++),url:A}}));t+=n.slice(r,u)+x,r=T,l=T-1;}return t+=n.slice(r),{text:t,ie:e}},Ma=n=>n.ie.map(({type:e,ie:t})=>e==="hyperlink"?{key:t.key,metadata:{display_name:t.text,is_trusted:true,url:t.url,__typename:"GenAIInlineLinkItem"}}:e==="latex"?{key:t.key,metadata:{latex_expression:t.text,latex_image:{url:t.url,width:Number(t.width)||100,height:Number(t.height)||100},font_height:Number(t.font_height)||83.33333333333333,padding:Number(t.padding)||15,__typename:"GenAILatexItem"}}:{key:t.key,metadata:{reference_id:Number(t.reference_id),reference_url:t.url,reference_title:t.url,reference_display_name:t.url,sources:[],__typename:"GenAISearchCitationItem"}}),ts=5e3,ns=200,rs=1e5,ba=n=>{if(!Array.isArray(n)||n.length===0||!n.every(i=>Array.isArray(i)))throw new p("INVALID_OPTIONS","table must be a non-empty array of string rows");let[e,...t]=n;if(n.length>ts)throw new p("INVALID_OPTIONS",`table exceeds ${ts} rows`);let r=e.length;for(let i of t)i.length>r&&(r=i.length);if(r>ns)throw new p("INVALID_OPTIONS",`table exceeds ${ns} columns`);if(r*n.length>rs)throw new p("INVALID_OPTIONS",`table exceeds ${rs} cells`);let s=i=>[...i,...Array(r-i.length).fill("")];return [{is_header:true,cells:s(e)},...t.map(i=>({is_header:false,cells:s(i)}))]},Sa={0:"DEFAULT",1:"KEYWORD",2:"METHOD",3:"STR",4:"NUMBER",5:"COMMENT"},en=new Set(["break","case","catch","continue","debugger","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","true","false","null","undefined","class","const","let","super","extends","export","import","from","as","default","yield","static","constructor","async","await","get","set"]),Aa={javascript:en,js:en,typescript:en,ts:en},Ca=(n,e)=>{let t=Aa[e.toLowerCase()]??new Set,r=[],s=(o,a)=>{if(!o)return;let d=r[r.length-1];d&&d.highlightType===a?d.codeContent+=o:r.push({codeContent:o,highlightType:a});},i=0;for(;i<n.length;){let o=n[i];if(/\s/.test(o)){let a=i;for(;i<n.length&&/\s/.test(n[i]);)i++;s(n.slice(a,i),0);continue}if(o==="/"&&n[i+1]==="/"){let a=i;for(i+=2;i<n.length&&n[i]!==`
1
+ 'use strict';var Ql=require('baileys'),crypto=require('node:crypto'),Y=require('node:fs/promises'),url=require('node:url'),H=require('node:path'),fs=require('node:fs'),os$1=require('node:os'),child_process=require('node:child_process'),jimp=require('jimp'),ga=require('node-webpmux'),lruCache=require('lru-cache');require('node:stream');var jc=require('qrcode-terminal'),Kc=require('pino'),events=require('node:events');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ql__default=/*#__PURE__*/_interopDefault(Ql);var Y__default=/*#__PURE__*/_interopDefault(Y);var H__default=/*#__PURE__*/_interopDefault(H);var ga__default=/*#__PURE__*/_interopDefault(ga);var jc__default=/*#__PURE__*/_interopDefault(jc);var Kc__default=/*#__PURE__*/_interopDefault(Kc);var Vo=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var p=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysBuilderError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var P={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:6,FPS:10,DEFAULT_QUALITY:60,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},Jt="ffmpeg",Or="ffprobe",Cr=false,Er=async(n,e)=>{if(n===void 0||n.length===0)return e;try{if(process.platform==="win32")return await Y__default.default.access(n),n;let t=()=>Y__default.default.access(n,fs.constants.X_OK).then(()=>!0,()=>!1);if(await t())return n;let{mode:r}=await Y__default.default.stat(n);return await Y__default.default.chmod(n,r|64),await t()?n:e}catch{return e}},Vt=async(n=false)=>{if(n||Cr)return;Cr=true;let e=process.env.FFMPEG_PATH,t=process.env.FFPROBE_PATH,r;try{r=(await import('@ffmpeg-installer/ffmpeg')).default?.path;}catch{}if(Jt=e??await Er(r,"ffmpeg"),Jt!=="ffmpeg"){let i=H__default.default.dirname(Jt),o=process.platform==="win32"?";":":",a=process.env.PATH??"";a.split(o).includes(i)||(process.env.PATH=`${i}${o}${a}`);}let s;try{s=(await import('@ffprobe-installer/ffprobe')).default?.path;}catch{}Or=t??await Er(s,"ffprobe");},Pr=12e4,kr=3e4,Yo=64*1024,Qo=3e4,Tr=64*1024*1024,ge={maxConcurrent:4,maxQueued:64,queueTimeoutMs:12e4,maxImagePixels:5e7},Rr=()=>({...ge}),_r=n=>{let e=(t,r,s)=>{if(r!==void 0&&(!Number.isFinite(r)||!Number.isInteger(r)||r<s))throw new Error(`invalid media limit ${t}: ${r}`)};e("maxConcurrent",n.maxConcurrent,1),e("maxQueued",n.maxQueued,0),e("queueTimeoutMs",n.queueTimeoutMs,1),e("maxImagePixels",n.maxImagePixels,1),Object.assign(ge,Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0)));},Nn=0,Qe=[],Zo=async()=>{if(Nn<ge.maxConcurrent)Nn+=1;else {if(Qe.length>=ge.maxQueued)throw new Error(`ffmpeg queue is full (${ge.maxQueued} jobs waiting)`);await new Promise((e,t)=>{let r={grant:()=>{clearTimeout(s),e();}},s=setTimeout(()=>{let i=Qe.indexOf(r);i>=0&&Qe.splice(i,1),t(new Error(`ffmpeg job waited more than ${ge.queueTimeoutMs}ms for a slot`));},ge.queueTimeoutMs);Qe.push(r);});}let n=false;return ()=>{if(n)return;n=true;let e=Qe.shift();e?e.grant():Nn-=1;}},Ht=()=>Date.now().toString(36)+crypto.randomBytes(4).toString("hex"),$=async n=>{let{fileTypeFromBuffer:e}=await import('file-type');return e(n)},re=class{static generateUniqueId(){return crypto.randomBytes(12).toString("hex")}static createTempPath(e,t){return H__default.default.join(os$1.tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Y__default.default.unlink(t)));}static async safeReadFile(e){try{return await Y__default.default.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Y__default.default.writeFile(e,t,{flag:"wx",mode:384});}catch{throw new Error(`Failed to write file: ${e}`)}}},R=class{static async toBuffer(e){if(Buffer.isBuffer(e))return e;if(e instanceof ArrayBuffer)return Buffer.from(e);if(typeof e=="string")return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){if(e.startsWith("http://")||e.startsWith("https://"))return this.fromUrl(e);try{if(await Y__default.default.stat(e).then(t=>t.isFile()).catch(()=>!1))return await Y__default.default.readFile(e)}catch{}return Buffer.from(e,"base64")}static async fromUrl(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Qo);try{let s=await fetch(e,{signal:t.signal});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.arrayBuffer(),o=Buffer.from(i);if(o.byteLength>Tr)throw new Error(`Fetched body exceeds ${Tr} bytes`);return o}catch(s){throw new Error(`Failed to fetch URL: ${s instanceof Error?s.message:String(s)}`)}finally{clearTimeout(r);}}static async getExtension(e){let{fileTypeFromBuffer:t}=await import('file-type'),r=await t(e);if(!r)return "tmp";let s=r.ext.toLowerCase();return ["wav","ogg","mp4","gif","jpg","webp","tmp","mp3","png"].includes(s)?s:"tmp"}},q=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(P.MIME.IMAGE)||e.startsWith(P.MIME.VIDEO)}static isAnimated(e){return e===P.MIME.GIF||e.startsWith(P.MIME.VIDEO)}},fe=class{static async process(e){await Vt();let t=await Zo();try{await new Promise((r,s)=>{let i=["-y","-i",e.input,...e.options,e.output],o=child_process.spawn(Jt,i,{stdio:"ignore"}),a=!1,d=l=>{a||(a=!0,clearTimeout(c),l());},c=setTimeout(()=>{o.kill("SIGKILL");let l=new Error(`FFmpeg timed out after ${Pr}ms`);Promise.resolve(e.onError(l)).catch(()=>{}),d(()=>s(l));},Pr);o.on("close",l=>{if(a)return;if(l===0){Promise.resolve(e.onEnd()).then(()=>d(r),f=>d(()=>s(f)));return}let u=new Error(`FFmpeg exited with code ${l}`);Promise.resolve(e.onError(u)).then(()=>d(()=>s(u)),f=>d(()=>s(f)));}),o.on("error",l=>{Promise.resolve(e.onError(l)).finally(()=>d(()=>s(l)));});});}finally{t();}}static async getDuration(e){if(await Vt(),typeof e!="string"||e.length===0||e.startsWith("-"))throw new Error("getDuration expects a local file path");if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))throw new Error("getDuration does not accept protocol inputs");let t=await Y__default.default.stat(e).catch(()=>{});if(t===void 0||!t.isFile())throw new Error(`getDuration: not a readable file: ${e}`);return new Promise((r,s)=>{let i=child_process.spawn(Or,["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",e]),o="",a=false,d=l=>{a||(a=true,clearTimeout(c),l());},c=setTimeout(()=>{i.kill("SIGKILL"),d(()=>s(new Error(`ffprobe timed out after ${kr}ms`)));},kr);i.stdout.on("data",l=>{o.length>Yo||(o+=l.toString());}),i.on("close",l=>{d(l===0?()=>r(parseFloat(o.trim())||0):()=>s(new Error(`ffprobe exited with code ${l}`)));}),i.on("error",l=>d(()=>s(l)));})}};var ra=3e4,sa=64*1024*1024,Nr="application/octet-stream",Oe=async n=>n.byteLength===0?Nr:(await $(n))?.mime??Nr,Ze=async n=>({buffer:n,mime:await Oe(n),size:n.byteLength}),ia=async(n,e,t)=>{let r=Number(n.headers?.get?.("content-length")??"0");if(Number.isFinite(r)&&r>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);let s=n.body;if(s==null||typeof s.getReader!="function"){let d=Buffer.from(await n.arrayBuffer());if(d.byteLength>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);return d}let i=[],o=0,a=s.getReader();for(;;){let{done:d,value:c}=await a.read();if(d)break;if(c!==void 0){if(o+=c.byteLength,o>t)throw await a.cancel().catch(()=>{}),new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);i.push(c);}}return Buffer.concat(i)},Dr=async(n,e,t)=>{let r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let i=await fetch(n,{signal:r.signal});if(!i.ok)throw new p("MEDIA_LOAD_FAILED",`fetch ${n} failed with status ${i.status}`,{cause:i.status});return await ia(i,n,t)}catch(i){throw i instanceof p?i:new p("MEDIA_LOAD_FAILED",`fetch ${n} failed: ${i.message}`,{cause:i})}finally{clearTimeout(s);}},Br=async(n,e)=>{try{if((await Y.stat(n)).size>e)throw new p("MEDIA_LOAD_FAILED",`${n} exceeds ${e} bytes`);return await Y.readFile(n)}catch(t){throw t instanceof p?t:new p("MEDIA_LOAD_FAILED",`read ${n} failed: ${t.message}`,{cause:t})}},oa=n=>n.startsWith("http://")||n.startsWith("https://"),aa=[".zaileys"],Fr=(n,e)=>{let t=H.resolve(n);for(let r of e){let s=H.resolve(r);if(t===s||t.startsWith(s+H.sep))throw new p("MEDIA_LOAD_FAILED",`refusing to read ${n}: it resolves inside the protected directory ${r}`)}return t},da=/^(?:0\.|10\.|127\.|169\.254\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.)/,ca=n=>{let e=n.replace(/^\[|\]$/g,"").toLowerCase();return e==="localhost"||e.endsWith(".localhost")||e.endsWith(".internal")||e==="::1"||e==="::"||e.startsWith("fc")||e.startsWith("fd")||e.startsWith("fe80:")?true:da.test(e)},Wr=(n,e)=>{let t;try{t=new URL(n);}catch{throw new p("MEDIA_LOAD_FAILED",`invalid url: ${n}`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new p("MEDIA_LOAD_FAILED",`unsupported url scheme: ${t.protocol}`);if(!e&&ca(t.hostname))throw new p("MEDIA_LOAD_FAILED",`refusing to fetch a private address: ${t.hostname}`);return n},Xe={},Ur=n=>{if(n.maxBytes!==void 0&&(!Number.isInteger(n.maxBytes)||n.maxBytes<1))throw new p("INVALID_OPTIONS",`invalid maxBytes: ${n.maxBytes}`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<1))throw new p("INVALID_OPTIONS",`invalid timeoutMs: ${n.timeoutMs}`);Xe={...Xe,...Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))};},jr=()=>({...Xe}),B=async(n,e)=>{await Vt();let t={...Xe,...e,deniedDirs:[...Xe.deniedDirs??[],...e?.deniedDirs??[]]},r=t.timeoutMs??ra,s=t.maxBytes??sa,i=t.allowPrivateNetwork===true,o=[...aa,...t.deniedDirs??[]];if(Buffer.isBuffer(n))return Ze(n);if(n instanceof URL)return n.protocol==="file:"?Ze(await Br(Fr(url.fileURLToPath(n),o),s)):Ze(await Dr(Wr(n.toString(),i),r,s));if(oa(n))return Ze(await Dr(Wr(n,i),r,s));if(t.allowLocalPaths===false)throw new p("MEDIA_LOAD_FAILED","local filesystem paths are disabled; pass a URL, a Buffer, or a file: URL");return Ze(await Br(Fr(n,o),s))};var Re=async(n,e)=>{let{buffer:t}=await B(n),r={image:t};return e?.caption!==void 0&&(r.caption=e.caption),e?.viewOnce!==void 0&&(r.viewOnce=e.viewOnce),r};var he=async(n,e)=>{let{buffer:t,mime:r}=await B(n);if(!r.startsWith("video/"))throw new p("INVALID_OPTIONS",`video() expects a video source, got mime ${r}`);let s={video:t};return e?.caption!==void 0&&(s.caption=e.caption),e?.gifPlayback!==void 0&&(s.gifPlayback=e.gifPlayback),e?.viewOnce!==void 0&&(s.viewOnce=e.viewOnce),e?.ptv===true&&(s.ptv=true),s};var qr=2,$r=30,la=async n=>{if(n.type==="image")return Re(n.src,n.caption!==void 0?{caption:n.caption}:void 0);if(n.type==="video")return he(n.src,n.caption!==void 0?{caption:n.caption}:void 0);throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(n.type)}`)},Kr=async(n,e,t,r)=>{if(!Array.isArray(t)||t.length<qr)throw new p("INVALID_OPTIONS",`album() requires a minimum of ${qr} items`);if(t.length>$r)throw new p("INVALID_OPTIONS",`album() accepts a maximum of ${$r} items`);let s=0,i=0;for(let u of t)if(u.type==="image")s+=1;else if(u.type==="video")i+=1;else throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(u.type)}`);let o={album:{expectedImageCount:s,expectedVideoCount:i}};r.mentions&&r.mentions.length>0&&(o.mentions=r.mentions),r.mentionAll&&(o.mentionAll=true);let a={};r.quoted&&(a.quoted=r.quoted),r.disappearingSeconds!==void 0&&(a.ephemeralExpiration=r.disappearingSeconds);let d;try{d=await n.sendMessage(e,o,a);}catch(u){throw new p("SEND_FAILED","album parent send rejected",{cause:u})}let c=d?.key;if(!c)throw new p("SEND_FAILED","album parent returned no message key");let l=0;for(let u of t){let f=await la(u);f.albumParentKey=c;try{await n.sendMessage(e,f);}catch(v){throw new p("SEND_FAILED","album child send rejected",{cause:{parentKey:c,index:l,error:v}})}l+=1;}return c};var Q=async(n,e,t,r,s)=>{let i=r.replace(/[^a-z0-9]+/gi,"_").toLowerCase(),o=re.createTempPath(`${i}_in`,e),a=re.createTempPath(`${i}_out`,t);await re.safeWriteFile(o,n);try{let d=typeof s=="function"?await s(o):s;return await fe.process({input:o,output:a,options:d,onEnd:async()=>{},onError:async()=>{}}),await re.safeReadFile(a)}catch(d){throw new Error(`${r} failed: ${d instanceof Error?d.message:String(d)}`)}finally{await re.cleanup([o,a]);}};var zt=64,Gr=8e3,ye=class{static async toOpus(e){return this.convert(e,"opus")}static async toMp3(e){return this.convert(e,"mp3")}static async convert(e,t="opus"){let r=await R.toBuffer(e);q.validate(await $(r),P.MIME.AUDIO);let s=await R.getExtension(r),i=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","ogg"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return Q(r,s,t==="opus"?"ogg":"mp3",`${t.toUpperCase()} conversion`,i)}static async waveform(e){let t=await R.toBuffer(e),r=await R.getExtension(t),s=await Q(t,r,"tmp","Waveform generation",["-vn","-ac","1","-ar",String(Gr),"-f","s16le"]),i=Math.floor(s.length/2);return {waveform:this.computeWaveform(s),seconds:Math.max(1,Math.round(i/Gr))}}static computeWaveform(e){let t=Math.floor(e.length/2),r=new Uint8Array(zt);if(t===0)return r;let s=Math.max(1,Math.floor(t/zt)),i=[];for(let a=0;a<zt;a++){let d=0,c=0;for(let l=0;l<s;l++){let u=(a*s+l)*2;u+1<e.length&&(d+=Math.abs(e.readInt16LE(u)),c+=1);}i.push(c>0?d/c:0);}let o=Math.max(...i)||1;for(let a=0;a<zt;a++)r[a]=Math.floor(i[a]/o*100);return r}};var ua=["-c:v","libx264","-preset","ultrafast","-crf","28","-c:a","aac","-b:a","128k","-movflags","+faststart","-vf","scale=trunc(iw/2)*2:trunc(ih/2)*2","-pix_fmt","yuv420p","-f","mp4"],Z=class{static async toMp4(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t);return Q(t,r,"mp4","Video re-encoding",ua)}static async thumbnail(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t),s=P.THUMBNAIL.SIZE;return (await Q(t,r,"jpg","Thumbnail generation",async o=>{let a=await fe.getDuration(o);return ["-ss",Math.max(0,a*.1).toString(),"-vframes","1","-s",`${s}x${s}`]})).toString("base64")}static async duration(e){return fe.getDuration(e)}};var _e=null,Jr=false;async function pa(){if(Jr)return _e;Jr=true;let n=e=>{typeof e=="function"&&(_e=e);};try{n(Vo("sharp"));}catch{_e=null;}if(!_e)try{let e=await import('sharp');n(e.default??e);}catch{_e=null;}return _e}function Hr(n,e){let t=new Uint8Array(n*n),r=n/2,s=n/2,i=n/10,o=[[i,i],[n-i,i],[i,n-i],[n-i,n-i]];for(let a=0;a<n;a++)for(let d=0;d<n;d++){let c=false;if(e==="circle"){let l=d-r,u=a-s;c=l*l+u*u<=r*r;}else if(e==="rounded"){let l=d>=i&&d<n-i&&a>=0&&a<n,u=d>=0&&d<n&&a>=i&&a<n-i,f=false;for(let v of o){let b=d-v[0],T=a-v[1];if(b*b+T*T<=i*i){f=true;break}}c=l||u||f;}else if(e==="oval"){let l=(d-r)/(n/2),u=(a-s)/(n/3);c=l*l+u*u<=1;}t[a*n+d]=c?255:0;}return t}var Vr=2e4,Fn=(n,e)=>{let t=typeof n=="number"&&Number.isFinite(n)?n:0,r=typeof e=="number"&&Number.isFinite(e)?e:0;if(!(t<=0||r<=0)&&(t>Vr||r>Vr||t*r>Rr().maxImagePixels))throw new Error(`Image too large to decode safely: ${t}x${r}`)},zr=(n,e)=>{if(!Number.isInteger(n)||!Number.isInteger(e)||n<=0||e<=0)throw new Error(`Invalid resize target: ${n}x${e}`);Fn(n,e);},ma=n=>{if(n.length>=24&&n.readUInt32BE(0)===2303741511)return {width:n.readUInt32BE(16),height:n.readUInt32BE(20)};if(n.length>=10&&n.toString("ascii",0,3)==="GIF")return {width:n.readUInt16LE(6),height:n.readUInt16LE(8)};if(n.length>=26&&n.toString("ascii",0,2)==="BM")return {width:n.readInt32LE(18),height:Math.abs(n.readInt32LE(22))};if(n.length>=30&&n.toString("ascii",0,4)==="RIFF"&&n.toString("ascii",8,12)==="WEBP"){let e=n.toString("ascii",12,16);if(e==="VP8X")return {width:1+(n.readUIntLE(24,3)&16777215),height:1+(n.readUIntLE(27,3)&16777215)};if(e==="VP8 "&&n.length>=30)return {width:n.readUInt16LE(26)&16383,height:n.readUInt16LE(28)&16383}}},se=n=>{let e=ma(n);return e!==void 0&&Fn(e.width,e.height),n},Dn=class{sharp;constructor(e){this.sharp=e;}async thumbnail(e){let t=this.sharp;se(e);let r=t(e).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE,{fit:"cover"});return (await r.metadata()).format==="gif"&&(r=t(e,{pages:1}).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE)),(await r.jpeg({quality:P.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}async resize(e,t,r){zr(t,r);let s=this.sharp(se(e)),i=await s.metadata();return Fn(i.width,i.height),s.resize(t,r,{fit:"cover"}).png().toBuffer()}async toJpeg(e){let t=this.sharp,r=se(await R.toBuffer(e)),s=await t(r).metadata();if(!s.format)throw new Error("Invalid image type: format could not be determined");return s.format==="webp"||s.format==="png"?t(r).jpeg().toBuffer():r}async resizeForSticker(e,t,r="default"){let s=this.sharp,i=P.STICKER.SIZE,o=s(se(e)).resize(i,i,{fit:"contain",background:{r:0,g:0,b:0,alpha:0}});if(r!=="default"){let a=Buffer.from(Hr(i,r)),d=s(a,{raw:{width:i,height:i,channels:1}});o=o.joinChannel(await d.png().toBuffer());}return o.webp({quality:t}).toBuffer()}},Bn=class{async thumbnail(e){let t=P.THUMBNAIL.SIZE,r=await jimp.Jimp.fromBuffer(se(e));r.cover({w:t,h:t});let s=await r.getBuffer("image/jpeg",{quality:P.THUMBNAIL.QUALITY});return Buffer.from(s).toString("base64")}async resize(e,t,r){zr(t,r);let s=await jimp.Jimp.fromBuffer(se(e));s.cover({w:t,h:r});let i=await s.getBuffer("image/png");return Buffer.from(i)}async toJpeg(e){let t=await R.toBuffer(e);try{let s=await(await jimp.Jimp.fromBuffer(se(t))).getBuffer("image/jpeg");return Buffer.from(s)}catch{return t}}async resizeForSticker(e,t,r="default"){let s=P.STICKER.SIZE,i=await jimp.Jimp.fromBuffer(se(e));if(i.contain({w:s,h:s}),r!=="default"){let d=Hr(s,r),c=new jimp.Jimp({width:s,height:s,color:255});for(let l=0;l<s;l++)for(let u=0;u<s;u++)d[l*s+u]===255&&c.setPixelColor(4294967295,u,l);i.mask(c);}let o=Buffer.from(await i.getBuffer("image/png")),a=Math.max(1,Math.min(100,t));return Q(o,"png","webp","Jimp WebP conversion",["-vcodec","libwebp","-q:v",`${a}`,"-preset","default"])}},tt=null;async function Yt(){if(tt)return tt;let n=await pa();return n?tt=new Dn(n):(console.warn("\x1B[33m%s\x1B[0m","[media-process] Jimp is slow. For faster performance, run: npm install sharp"),tt=new Bn),tt}var V=class{static async thumbnail(e){return (await Yt()).thumbnail(e)}static async resize(e,t,r){return (await Yt()).resize(e,t,r)}static async toJpeg(e){return (await Yt()).toJpeg(e)}static async resizeForSticker(e,t,r="default"){return (await Yt()).resizeForSticker(e,t,r)}};var Le=class n{static defaultMetadata={packageName:"Zaileys Library",authorName:"https://github.com/zeative/zaileys"};static setDefaultMetadata(e){e&&(n.defaultMetadata={...n.defaultMetadata,...e});}static getDefaultMetadata(){return {...n.defaultMetadata}}static async create(e,t){try{let r=await R.toBuffer(e),s=await $(r);if(!s)throw new Error("Unable to detect file type");let i=t?.quality||P.STICKER.DEFAULT_QUALITY,o=q.isAnimated(s.mime),a=t?.shape||"default",d=s.mime==="image/webp"?r:o?await this.processAnimated(r,s.mime,i):await V.resizeForSticker(r,i,a),c=this.createExifMetadata(t),l=new ga__default.default.Image;await l.load(d),l.exif=c;let u=await l.save(null);return Buffer.isBuffer(u)?u:Buffer.from(u)}catch(r){throw new Error(`Sticker creation failed: ${r instanceof Error?r.message:String(r)}`)}}static createExifMetadata(e){let t=e?.pack??e?.packageName??e?.packname??n.defaultMetadata.pack??n.defaultMetadata.packageName??n.defaultMetadata.packname??"Zaileys Library",r=e?.author??e?.authorName??e?.publisher??n.defaultMetadata.author??n.defaultMetadata.authorName??n.defaultMetadata.publisher??"https://github.com/zeative/zaileys",s={"sticker-pack-id":Ht(),"sticker-pack-name":t,"sticker-pack-publisher":r,emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},i=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(s),"utf8"),a=Buffer.concat([i,o]);return a.writeUIntLE(o.length,14,4),a}static async processAnimated(e,t,r){let s=P.STICKER.SIZE,i=P.STICKER.FPS,o=`scale=${s}:${s}:force_original_aspect_ratio=decrease,fps=${i},pad=${s}:${s}:(ow-iw)/2:(oh-ih)/2:color=0x00000000,format=rgba`,a=Math.max(1,Math.min(100,r));return Q(e,this.getExtension(t),"webp","Animated sticker processing",async d=>{let c=P.STICKER.MAX_DURATION;try{c=Math.min(await Z.duration(d),P.STICKER.MAX_DURATION);}catch{console.warn("Using default duration:",P.STICKER.MAX_DURATION);}let l=Number.isFinite(a)?Math.round(a):60,u=Number.isFinite(c)&&c>0?Math.min(c,P.STICKER.MAX_DURATION):P.STICKER.MAX_DURATION;return ["-vcodec","libwebp","-vf",o,"-q:v",String(l),"-loop","0","-preset","default","-an","-t",String(u),"-compression_level",String(P.STICKER.COMPRESSION_LEVEL)]})}static getExtension(e){return e===P.MIME.GIF?"gif":e.startsWith(P.MIME.VIDEO)?"mp4":"tmp"}};var Qt=class{static async create(e){try{let t=await R.toBuffer(e),r=await $(t);if(!r)throw new Error("Unable to detect file type");let s;return r.mime.startsWith(P.MIME.VIDEO)?s=await Z.thumbnail(t):q.isMedia(r.mime)?s=await V.thumbnail(t):s="",{document:t,mimetype:r.mime,ext:r.ext,fileName:Ht(),jpegThumbnail:s}}catch(t){throw new Error(`Document creation failed: ${t instanceof Error?t.message:String(t)}`)}}};var we=class{input;constructor(e){this.input=e;}get audio(){return {toOpus:()=>ye.toOpus(this.input),toMp3:()=>ye.toMp3(this.input),convert:(e="opus")=>ye.convert(this.input,e),waveform:()=>ye.waveform(this.input)}}get video(){return {toMp4:()=>Z.toMp4(this.input),thumbnail:()=>Z.thumbnail(this.input)}}get image(){return {toJpeg:()=>V.toJpeg(this.input),thumbnail:async()=>{let e=await R.toBuffer(this.input);return V.thumbnail(e)},resize:async(e,t)=>{let r=await R.toBuffer(this.input);return V.resize(r,e,t)}}}get sticker(){return {create:e=>Le.create(this.input,e)}}get document(){return {create:()=>Qt.create(this.input)}}get thumbnail(){return {get:async()=>{let e=await R.toBuffer(this.input),t=await $(e);if(!t||!q.isMedia(t.mime))throw new Error("Invalid media type: expected image or video");return t.mime.startsWith(P.MIME.VIDEO)?Z.thumbnail(this.input):V.thumbnail(e)}}}async toBuffer(){return R.toBuffer(this.input)}};var Yr=async(n,e)=>{let{buffer:t}=await B(n),r;try{r=await new we(t).audio.toOpus();}catch(o){throw new p("MEDIA_LOAD_FAILED",`audio() transcode failed: ${o.message}`,{cause:o})}let s=e?.ptt??true,i={audio:r,ptt:s};if(s)try{let{waveform:o,seconds:a}=await new we(t).audio.waveform();i.waveform=o,e?.seconds===void 0&&(i.seconds=a);}catch{}return e?.seconds!==void 0&&(i.seconds=e.seconds),i};var Qr=10,W="__zaileysRelayMessage",Wn="__zaileysHeaderMedia",nt="__zaileysRequireGroupJid",Zt="__zaileysBypassDownload",Xt="__zaileysStatusMedia",ie=n=>typeof n=="string"&&n.length>0,fa=n=>{let e=n.text;if(!ie(e)||e.trim().length===0)throw new p("INVALID_OPTIONS","button text must be a non-empty string");return e},ha=(n,e)=>{let t=n.type??"reply";if(t==="location"){let s=n.text;return {name:"send_location",buttonParamsJson:JSON.stringify(ie(s)?{display_text:s}:{})}}let r=fa(n);if(t==="reply"){let s=n.id;if(!ie(s))throw new p("INVALID_OPTIONS","reply button requires a non-empty id");if(e.has(s))throw new p("INVALID_OPTIONS",`duplicate button id: ${s}`);return e.add(s),{name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:r,id:s})}}if(t==="url"){let s=n.url;if(!ie(s))throw new p("INVALID_OPTIONS","url button requires a non-empty url");let i=n.webview===true;return {name:"cta_url",buttonParamsJson:JSON.stringify({display_text:r,url:s,merchant_url:s,landing_page_url:s,webview_interaction:i})}}if(t==="copy"){let s=n.code;if(!ie(s))throw new p("INVALID_OPTIONS","copy button requires a non-empty code");return {name:"cta_copy",buttonParamsJson:JSON.stringify({display_text:r,id:s,copy_code:s})}}if(t==="call"){let s=n.phone;if(!ie(s))throw new p("INVALID_OPTIONS","call button requires a non-empty phone");return {name:"cta_call",buttonParamsJson:JSON.stringify({display_text:r,id:s,phone_number:s})}}if(t==="reminder"||t==="cancel-reminder"){let s=n.id;return {name:t==="reminder"?"cta_reminder":"cta_cancel_reminder",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}if(t==="address"){let s=n.id;return {name:"address_message",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}throw new p("INVALID_OPTIONS",`unknown button type: ${String(t)}`)},ya=n=>{let e={};if(n?.bottomSheet){let t=n.bottomSheet;e.bottom_sheet={...t.buttonsLimit!==void 0?{in_thread_buttons_limit:t.buttonsLimit}:{},...t.dividers!==void 0?{divider_indices:t.dividers}:{},...t.listTitle!==void 0?{list_title:t.listTitle}:{},...t.buttonTitle!==void 0?{button_title:t.buttonTitle}:{}};}if(n?.limitedTimeOffer){let t=n.limitedTimeOffer;e.limited_time_offer={...t.text!==void 0?{text:t.text}:{},...t.url!==void 0?{url:t.url}:{},...t.copyCode!==void 0?{copy_code:t.copyCode}:{},...t.expiresAt!==void 0?{expiration_time:t.expiresAt}:{}};}return Object.keys(e).length>0?JSON.stringify(e):""},Un=n=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","buttons() requires at least one button");if(n.length>Qr)throw new p("INVALID_OPTIONS",`buttons() accepts at most ${Qr} buttons`);let e=new Set;return n.map(t=>ha(t,e))},Ne=(n,e)=>{let t=Un(n),r={body:{text:e?.text&&e.text.length>0?e.text:" "},nativeFlowMessage:{buttons:t,messageParamsJson:ya(e)}};e?.footer&&e.footer.length>0&&(r.footer={text:e.footer});let s=e?.image?{kind:"image",src:e.image}:e?.video?{kind:"video",src:e.video}:void 0;return (e?.title&&e.title.length>0||e?.subtitle&&e.subtitle.length>0||s)&&(r.header={title:e?.title??"",subtitle:e?.subtitle??"",hasMediaAttachment:s!==void 0}),s!==void 0?{[W]:{interactiveMessage:r},[Wn]:s}:{[W]:{interactiveMessage:r}}};var Zr=10,jn="__zaileysCardsMedia",Xr=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","carousel() requires at least one card");if(n.length>Zr)throw new p("INVALID_OPTIONS",`carousel() accepts at most ${Zr} cards`);let t=[],r=n.map((o,a)=>{let d={body:{text:o.body&&o.body.length>0?o.body:" "}};o.buttons&&o.buttons.length>0&&(d.nativeFlowMessage={buttons:Un(o.buttons),messageParamsJson:""}),o.footer&&o.footer.length>0&&(d.footer={text:o.footer});let c=o.image?{kind:"image",src:o.image}:o.video?{kind:"video",src:o.video}:void 0;return (o.title&&o.title.length>0||o.subtitle&&o.subtitle.length>0||c)&&(d.header={title:o.title??"",subtitle:o.subtitle??"",hasMediaAttachment:c!==void 0}),c&&t.push({...c,index:a}),d}),s={body:{text:e?.text&&e.text.length>0?e.text:" "},carouselMessage:{cards:r}};return t.length>0?{[W]:{interactiveMessage:s},[jn]:t}:{[W]:{interactiveMessage:s}}};var es=(n,e,t)=>{let r=new Int32Array(n.length).fill(-1),s=[];for(let i=0;i<n.length;i+=1){if(n[i-1]==="\\")continue;let o=n[i];if(o===e)s.push(i);else if(o===t){let a=s.pop();a!==void 0&&(r[a]=i);}}return r},va=n=>{let e=[],t="",r=0,s=1,i=0,o=0,a=[],d=es(n,"(",")"),c=es(n,"<",">");for(let l=0;l<n.length;l++)if(n[l]==="["&&n[l-1]!=="\\")a.push(l);else if(n[l]==="]"&&(n[l+1]==="("||n[l+1]==="<")){let u=a.pop();if(u==null)continue;let v=n[l+1]==="<",b=(v?c:d)[l+1]??-1;if(b<0)continue;let T=b+1,O=n.slice(u+1,l).trim(),A=n.slice(l+2,T-1).trim(),S,x;if(v){let[F="",z="",Ie="",He="",xe=""]=O.split("|").map(ze=>ze.trim());S=`zaileys_LATEX_${o++}`,x=`{{${S}}}${F||"image"}{{/${S}}}`,e.push({type:"latex",ie:{key:S,text:F,url:A,width:z,height:Ie,font_height:He,padding:xe}});}else O?(S=`zaileys_HYPERLINK_${i++}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"hyperlink",ie:{key:S,text:O,url:A}})):(S=`zaileys_CITATION_${s-1}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"citation",ie:{key:S,reference_id:String(s++),url:A}}));t+=n.slice(r,u)+x,r=T,l=T-1;}return t+=n.slice(r),{text:t,ie:e}},Ma=n=>n.ie.map(({type:e,ie:t})=>e==="hyperlink"?{key:t.key,metadata:{display_name:t.text,is_trusted:true,url:t.url,__typename:"GenAIInlineLinkItem"}}:e==="latex"?{key:t.key,metadata:{latex_expression:t.text,latex_image:{url:t.url,width:Number(t.width)||100,height:Number(t.height)||100},font_height:Number(t.font_height)||83.33333333333333,padding:Number(t.padding)||15,__typename:"GenAILatexItem"}}:{key:t.key,metadata:{reference_id:Number(t.reference_id),reference_url:t.url,reference_title:t.url,reference_display_name:t.url,sources:[],__typename:"GenAISearchCitationItem"}}),ts=5e3,ns=200,rs=1e5,ba=n=>{if(!Array.isArray(n)||n.length===0||!n.every(i=>Array.isArray(i)))throw new p("INVALID_OPTIONS","table must be a non-empty array of string rows");let[e,...t]=n;if(n.length>ts)throw new p("INVALID_OPTIONS",`table exceeds ${ts} rows`);let r=e.length;for(let i of t)i.length>r&&(r=i.length);if(r>ns)throw new p("INVALID_OPTIONS",`table exceeds ${ns} columns`);if(r*n.length>rs)throw new p("INVALID_OPTIONS",`table exceeds ${rs} cells`);let s=i=>[...i,...Array(r-i.length).fill("")];return [{is_header:true,cells:s(e)},...t.map(i=>({is_header:false,cells:s(i)}))]},Sa={0:"DEFAULT",1:"KEYWORD",2:"METHOD",3:"STR",4:"NUMBER",5:"COMMENT"},en=new Set(["break","case","catch","continue","debugger","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","true","false","null","undefined","class","const","let","super","extends","export","import","from","as","default","yield","static","constructor","async","await","get","set"]),Aa={javascript:en,js:en,typescript:en,ts:en},Ca=(n,e)=>{let t=Aa[e.toLowerCase()]??new Set,r=[],s=(o,a)=>{if(!o)return;let d=r[r.length-1];d&&d.highlightType===a?d.codeContent+=o:r.push({codeContent:o,highlightType:a});},i=0;for(;i<n.length;){let o=n[i];if(/\s/.test(o)){let a=i;for(;i<n.length&&/\s/.test(n[i]);)i++;s(n.slice(a,i),0);continue}if(o==="/"&&n[i+1]==="/"){let a=i;for(i+=2;i<n.length&&n[i]!==`
2
2
  `;)i++;s(n.slice(a,i),5);continue}if(o==='"'||o==="'"||o==="`"){let a=i,d=o;for(i++;i<n.length;)if(n[i]==="\\"&&i+1<n.length)i+=2;else if(n[i]===d){i++;break}else i++;s(n.slice(a,i),3);continue}if(/[0-9]/.test(o)){let a=i;for(;i<n.length&&/[0-9.]/.test(n[i]);)i++;s(n.slice(a,i),4);continue}if(/[a-zA-Z_$]/.test(o)){let a=i;for(;i<n.length&&/[a-zA-Z0-9_$]/.test(n[i]);)i++;let d=n.slice(a,i),c=0;if(t.has(d))c=1;else {let l=i;for(;l<n.length&&/\s/.test(n[l]);)l++;n[l]==="("&&(c=2);}s(d,c);continue}s(o,0),i++;}return r},K=(n,e)=>({view_model:{[Array.isArray(e)?"primitives":"primitive"]:e,__typename:`GenAI${n}LayoutViewModel`}}),ss="GenAIaeacdsnwHtmlPrimitive",Ea=n=>`<style>html,body{margin:0;padding:0;height:${n}px;max-height:${n}px;overflow:hidden}#__wrap{height:${n}px;overflow-y:auto;-webkit-overflow-scrolling:touch;touch-action:pan-y}</style><script>document.addEventListener("DOMContentLoaded",function(){var w=document.createElement("div");w.id="__wrap";while(document.body.firstChild)w.appendChild(document.body.firstChild);document.body.appendChild(w)});</script>`,Pa="https://github.com/zeative/zaileys",tn=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","text({ rich: true }) requires non-empty markdown content");let t=[],r=[];for(let o of n)if(o.type==="text"){let a=va(o.text),d=Ma(a);r.push({messageType:2,messageText:a.text}),t.push(K("Single",{text:a.text,...d.length>0?{inline_entities:d}:{},__typename:"GenAIMarkdownTextUXPrimitive"}));}else if(o.type==="html"){if(typeof o.html!="string"||o.html.trim().length===0)throw new p("INVALID_OPTIONS","html part requires a non-empty HTML string");t.push(K("Single",{payload:o.height===void 0?o.html:Ea(o.height)+o.html,trusted_sources:(o.trustedSources??[]).map(String),__typename:ss}));}else if(o.type==="code"){let a=o.language??"plaintext",d=Ca(o.content,a);r.push({messageType:5,codeMetadata:{codeLanguage:a,codeBlocks:d}}),t.push(K("Single",{language:a,code_blocks:d.map(c=>({content:c.codeContent,type:Sa[c.highlightType]})),__typename:"GenAICodeUXPrimitive"}));}else if(o.type==="table"){let a=ba(o.rows);r.push({messageType:4,tableMetadata:{title:"",rows:a.map(d=>({items:d.cells,...d.is_header?{isHeading:true}:{}}))}}),t.push(K("Single",{rows:a,__typename:"GenATableUXPrimitive"}));}else if(o.type==="image"){let a=Array.isArray(o.url)?o.url:[o.url];if(a.length===0)throw new p("INVALID_OPTIONS","image requires at least one url");r.push({messageType:1,gridImageMetadata:{gridImageUrl:{imagePreviewUrl:a[0]},imageUrls:a.map(d=>({imagePreviewUrl:d,imageHighResUrl:d,sourceUrl:Pa}))}});for(let d of a)t.push(K("Single",{media:{url:d,mime_type:"image/png"},imagine_type:"IMAGE",status:{status:"READY"},__typename:"GenAIImaginePrimitive"}));}else if(o.type==="video"){let a=Array.isArray(o.url)?o.url:[o.url];if(a.length===0)throw new p("INVALID_OPTIONS","video requires at least one url");r.push({messageType:2,messageText:"[ CANNOT_LOAD_VIDEO - zaileys ]"});for(let d of a)t.push(K("Single",{media:{url:d,mime_type:"video/mp4",duration:o.duration??0},imagine_type:"ANIMATE",status:{status:"READY"},__typename:"GenAIImaginePrimitive"}));}else if(o.type==="product"){let a=Array.isArray(o.products),d=a?o.products:[o.products];if(d.length===0)throw new p("INVALID_OPTIONS","product requires at least one item");r.push({messageType:2,messageText:"[ CANNOT_LOAD_PRODUCT - zaileys ]"});let c=d.map(l=>({title:l.title,brand:l.brand??"",price:l.price??"",sale_price:l.salePrice??"",product_url:l.url??"",image:{url:l.image??""},additional_images:[{url:l.icon??""}],__typename:"GenAIProductItemCardPrimitive"}));t.push(a?K("HScroll",c):K("Single",c[0]));}else if(o.type==="reels"){let a=Array.isArray(o.reels)?o.reels:[o.reels];if(a.length===0)throw new p("INVALID_OPTIONS","reels requires at least one item");r.push({messageType:9,contentItemsMetadata:{contentType:1,itemsMetadata:a.map(d=>({reelItem:{title:d.username??"",profileIconUrl:d.profileUrl??"",thumbnailUrl:d.thumbnail??"",videoUrl:d.url??""}}))}}),t.push(K("HScroll",a.map(d=>({reels_url:d.url??"",thumbnail_url:d.thumbnail??"",creator:d.username??d.title??"",avatar_url:d.profileUrl??"",reels_title:d.title??"",likes_count:d.likes??0,shares_count:d.shares??0,view_count:d.views??0,reel_source:d.source??"IG",is_verified:!!d.verified,__typename:"GenAIReelPrimitive"}))));}else if(o.type==="post"){let a=Array.isArray(o.posts)?o.posts:[o.posts];if(a.length===0)throw new p("INVALID_OPTIONS","post requires at least one item");r.push({messageType:2,messageText:"[ CANNOT_LOAD_POST - zaileys ]"}),t.push(K("HScroll",a.map(d=>({title:d.title??"",subtitle:d.subtitle??"",username:d.username??"",profile_picture_url:d.profileUrl??"",is_verified:!!d.verified,thumbnail_url:d.thumbnail??"",post_caption:d.caption??"",likes_count:d.likes??0,comments_count:d.comments??0,shares_count:d.shares??0,post_url:d.url??"",post_deeplink:d.deeplink??"",source_app:d.source??"INSTAGRAM",footer_label:d.footer??"",footer_icon:d.icon??"",is_carousel:a.length>1,orientation:d.orientation??"LANDSCAPE",post_type:d.postType??"VIDEO",__typename:"GenAIPostPrimitive"}))));}else if(o.type==="tip")r.push({messageType:2,messageText:o.text}),t.push(K("Single",{text:o.text,__typename:"GenAIMetadataTextPrimitive"}));else {let a=Array.isArray(o.prompts)?o.prompts:[o.prompts];if(a.length===0)throw new p("INVALID_OPTIONS","suggest requires at least one prompt");t.push(K("ActionRow",a.map(d=>({prompt_text:d,prompt_type:"SUGGESTED_PROMPT",__typename:"GenAIFollowUpSuggestionPillPrimitive"}))));}e?.footer&&e.footer.length>0&&t.push(K("Single",{text:e.footer,__typename:"GenAIMetadataTextPrimitive"}));let s=(e?.sources??[]).map(([o,a,d])=>({source_type:"THIRD_PARTY",source_display_name:d??"",source_subtitle:"AI",source_url:a??"",favicon:{url:o??"",mime_type:"image/jpeg",width:16,height:16}})),i={messageContextInfo:{deviceListMetadata:{},deviceListMetadataVersion:2,botMetadata:{messageDisclaimerText:e?.title??"",richResponseSourcesMetadata:{sources:s}}},botForwardedMessage:{message:{richResponseMessage:{messageType:1,submessages:r,unifiedResponse:{data:Buffer.from(JSON.stringify({response_id:crypto.randomUUID(),sections:t})).toString("base64")},contextInfo:{forwardingScore:1,isForwarded:true,forwardedAiBotMessageInfo:{botJid:"0@bot"},forwardOrigin:4}}}}};return {[W]:i}};var qn=(n,e={})=>{if(typeof n!="string"||n.trim().length===0)throw new p("INVALID_OPTIONS","htmlApp() requires a non-empty HTML string");if((e.device??"android")==="android"){let t=[];e.text!==void 0&&t.push({type:"text",text:e.text}),t.push({type:"html",html:n,...e.trustedSources===void 0?{}:{trustedSources:e.trustedSources},...e.height===void 0?{}:{height:e.height}});let r=tn(t,{...e.text===void 0?{}:{title:e.text},...e.footer===void 0?{}:{footer:e.footer}});return e.bypassDownload!==false&&(r[Zt]=true),r}if(e.fallbackUrl===void 0)throw new p("INVALID_OPTIONS",`htmlApp() cannot render inline HTML on "${e.device}"; pass fallbackUrl to send a webview button instead`);return Ne([{type:"url",text:e.fallbackButtonText??"Buka",url:e.fallbackUrl,webview:true}],{text:e.text??"",...e.footer===void 0?{}:{footer:e.footer}})};var ka=/^:::([a-zA-Z]+)\s*$/,Ta=/^:::\s*$/,is=/^```(\w*)\s*$/,os=/^!\[[^\]]*\]\(([^)]+)\)\s*$/,Ia=/^[\s|:-]*$/,xa=n=>Ia.test(n)&&n.includes("--"),nn=n=>n.split("|").map(e=>e.trim()),$n=n=>{let e={};for(let t of nn(n)){let r=t.indexOf(":");if(r===-1)continue;let s=t.slice(0,r).trim().toLowerCase(),i=t.slice(r+1).trim();s.length>0&&(e[s]=i);}return e},ve=n=>{if(n===void 0||n.trim().length===0)return;let e=Number(n);return Number.isNaN(e)?void 0:e},ds=n=>n==="true"||n==="1"||n==="yes",as=n=>{let e=n.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())},Oa=n=>{let e=$n(n),t=e.title;if(t===void 0||t.length===0)return null;let r={title:t};return e.price&&(r.price=e.price),e.sale&&(r.salePrice=e.sale),e.saleprice&&(r.salePrice=e.saleprice),e.brand&&(r.brand=e.brand),e.url&&(r.url=e.url),e.image&&(r.image=e.image),e.icon&&(r.icon=e.icon),r},Ra=n=>{let e=$n(n),t={};e.user&&(t.username=e.user),e.username&&(t.username=e.username),e.title&&(t.title=e.title),e.profile&&(t.profileUrl=e.profile),e.thumb&&(t.thumbnail=e.thumb),e.url&&(t.url=e.url);let r=ve(e.likes);r!==void 0&&(t.likes=r);let s=ve(e.shares);s!==void 0&&(t.shares=s);let i=ve(e.views);return i!==void 0&&(t.views=i),e.source&&(t.source=e.source),"verified"in e&&(t.verified=ds(e.verified)),t},_a=n=>{let e=$n(n),t={};e.user&&(t.username=e.user),e.username&&(t.username=e.username),e.title&&(t.title=e.title),e.subtitle&&(t.subtitle=e.subtitle),e.profile&&(t.profileUrl=e.profile),e.thumb&&(t.thumbnail=e.thumb),e.caption&&(t.caption=e.caption);let r=ve(e.likes);r!==void 0&&(t.likes=r);let s=ve(e.comments);s!==void 0&&(t.comments=s);let i=ve(e.shares);return i!==void 0&&(t.shares=i),e.url&&(t.url=e.url),e.source&&(t.source=e.source),e.footer&&(t.footer=e.footer),e.icon&&(t.icon=e.icon),"verified"in e&&(t.verified=ds(e.verified)),t},La=(n,e)=>{let t=e.map(r=>r.replace(/^[-*]\s*/,"").trim()).filter(r=>r.length>0);if(n==="suggest"){let r=t.flatMap(s=>nn(s)).filter(s=>s.length>0);return r.length>0?{type:"suggest",prompts:r}:null}if(n==="tip")return t.length>0?{type:"tip",text:t.join(`
3
3
  `)}:null;if(n==="image")return t.length>0?{type:"image",url:t.length===1?t[0]:t}:null;if(n==="video"){if(t.length===0)return null;let r=t.map(o=>nn(o)[0]??"").filter(o=>o.length>0);if(r.length===0)return null;let s=ve(nn(t[0])[1]),i={type:"video",url:r.length===1?r[0]:r};return s!==void 0&&(i.duration=s),i}if(n==="product"){let r=t.map(Oa).filter(s=>s!==null);return r.length>0?{type:"product",products:r.length===1?r[0]:r}:null}if(n==="reels"){let r=t.map(Ra);return r.length>0?{type:"reels",reels:r}:null}if(n==="post"){let r=t.map(_a);return r.length>0?{type:"post",posts:r}:null}return null},cs=n=>{let e=n.replace(/\r\n/g,`
4
4
  `).split(`
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import Ql,{prepareWAMessageMedia,generateWAMessageContent,normalizeMessageContent,getContentType,generateWAMessageFromContent,jidNormalizedUser,jidDecode,BufferJSON,makeCacheableSignalKeyStore,DisconnectReason,fetchLatestBaileysVersion,initAuthCreds,S_WHATSAPP_NET,isJidGroup,proto}from'baileys';export{areJidsSameUser,getDevice,isJidBroadcast,isJidGroup,isJidNewsletter,isLidUser,isPnUser,jidDecode,jidEncode,jidNormalizedUser}from'baileys';import {randomBytes,randomUUID,timingSafeEqual,createHmac,createHash}from'node:crypto';import Y,{stat,readFile}from'node:fs/promises';import {fileURLToPath,pathToFileURL}from'node:url';import H,{resolve,sep}from'node:path';import {constants,promises,watch}from'node:fs';import {tmpdir}from'node:os';import {spawn}from'node:child_process';import {Jimp}from'jimp';import ga from'node-webpmux';import {LRUCache}from'lru-cache';import'stream';import jc from'qrcode-terminal';import Kc from'pino';import {EventEmitter}from'node:events';var Vo=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var p=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysBuilderError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var P={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:6,FPS:10,DEFAULT_QUALITY:60,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},Jt="ffmpeg",Or="ffprobe",Cr=false,Er=async(n,e)=>{if(n===void 0||n.length===0)return e;try{if(process.platform==="win32")return await Y.access(n),n;let t=()=>Y.access(n,constants.X_OK).then(()=>!0,()=>!1);if(await t())return n;let{mode:r}=await Y.stat(n);return await Y.chmod(n,r|64),await t()?n:e}catch{return e}},Vt=async(n=false)=>{if(n||Cr)return;Cr=true;let e=process.env.FFMPEG_PATH,t=process.env.FFPROBE_PATH,r;try{r=(await import('@ffmpeg-installer/ffmpeg')).default?.path;}catch{}if(Jt=e??await Er(r,"ffmpeg"),Jt!=="ffmpeg"){let i=H.dirname(Jt),o=process.platform==="win32"?";":":",a=process.env.PATH??"";a.split(o).includes(i)||(process.env.PATH=`${i}${o}${a}`);}let s;try{s=(await import('@ffprobe-installer/ffprobe')).default?.path;}catch{}Or=t??await Er(s,"ffprobe");},Pr=12e4,kr=3e4,Yo=64*1024,Qo=3e4,Tr=64*1024*1024,ge={maxConcurrent:4,maxQueued:64,queueTimeoutMs:12e4,maxImagePixels:5e7},Rr=()=>({...ge}),_r=n=>{let e=(t,r,s)=>{if(r!==void 0&&(!Number.isFinite(r)||!Number.isInteger(r)||r<s))throw new Error(`invalid media limit ${t}: ${r}`)};e("maxConcurrent",n.maxConcurrent,1),e("maxQueued",n.maxQueued,0),e("queueTimeoutMs",n.queueTimeoutMs,1),e("maxImagePixels",n.maxImagePixels,1),Object.assign(ge,Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0)));},Nn=0,Qe=[],Zo=async()=>{if(Nn<ge.maxConcurrent)Nn+=1;else {if(Qe.length>=ge.maxQueued)throw new Error(`ffmpeg queue is full (${ge.maxQueued} jobs waiting)`);await new Promise((e,t)=>{let r={grant:()=>{clearTimeout(s),e();}},s=setTimeout(()=>{let i=Qe.indexOf(r);i>=0&&Qe.splice(i,1),t(new Error(`ffmpeg job waited more than ${ge.queueTimeoutMs}ms for a slot`));},ge.queueTimeoutMs);Qe.push(r);});}let n=false;return ()=>{if(n)return;n=true;let e=Qe.shift();e?e.grant():Nn-=1;}},Ht=()=>Date.now().toString(36)+randomBytes(4).toString("hex"),$=async n=>{let{fileTypeFromBuffer:e}=await import('file-type');return e(n)},re=class{static generateUniqueId(){return randomBytes(12).toString("hex")}static createTempPath(e,t){return H.join(tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Y.unlink(t)));}static async safeReadFile(e){try{return await Y.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Y.writeFile(e,t,{flag:"wx",mode:384});}catch{throw new Error(`Failed to write file: ${e}`)}}},R=class{static async toBuffer(e){if(Buffer.isBuffer(e))return e;if(e instanceof ArrayBuffer)return Buffer.from(e);if(typeof e=="string")return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){if(e.startsWith("http://")||e.startsWith("https://"))return this.fromUrl(e);try{if(await Y.stat(e).then(t=>t.isFile()).catch(()=>!1))return await Y.readFile(e)}catch{}return Buffer.from(e,"base64")}static async fromUrl(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Qo);try{let s=await fetch(e,{signal:t.signal});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.arrayBuffer(),o=Buffer.from(i);if(o.byteLength>Tr)throw new Error(`Fetched body exceeds ${Tr} bytes`);return o}catch(s){throw new Error(`Failed to fetch URL: ${s instanceof Error?s.message:String(s)}`)}finally{clearTimeout(r);}}static async getExtension(e){let{fileTypeFromBuffer:t}=await import('file-type'),r=await t(e);if(!r)return "tmp";let s=r.ext.toLowerCase();return ["wav","ogg","mp4","gif","jpg","webp","tmp","mp3","png"].includes(s)?s:"tmp"}},q=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(P.MIME.IMAGE)||e.startsWith(P.MIME.VIDEO)}static isAnimated(e){return e===P.MIME.GIF||e.startsWith(P.MIME.VIDEO)}},fe=class{static async process(e){await Vt();let t=await Zo();try{await new Promise((r,s)=>{let i=["-y","-i",e.input,...e.options,e.output],o=spawn(Jt,i,{stdio:"ignore"}),a=!1,d=l=>{a||(a=!0,clearTimeout(c),l());},c=setTimeout(()=>{o.kill("SIGKILL");let l=new Error(`FFmpeg timed out after ${Pr}ms`);Promise.resolve(e.onError(l)).catch(()=>{}),d(()=>s(l));},Pr);o.on("close",l=>{if(a)return;if(l===0){Promise.resolve(e.onEnd()).then(()=>d(r),f=>d(()=>s(f)));return}let u=new Error(`FFmpeg exited with code ${l}`);Promise.resolve(e.onError(u)).then(()=>d(()=>s(u)),f=>d(()=>s(f)));}),o.on("error",l=>{Promise.resolve(e.onError(l)).finally(()=>d(()=>s(l)));});});}finally{t();}}static async getDuration(e){if(await Vt(),typeof e!="string"||e.length===0||e.startsWith("-"))throw new Error("getDuration expects a local file path");if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))throw new Error("getDuration does not accept protocol inputs");let t=await Y.stat(e).catch(()=>{});if(t===void 0||!t.isFile())throw new Error(`getDuration: not a readable file: ${e}`);return new Promise((r,s)=>{let i=spawn(Or,["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",e]),o="",a=false,d=l=>{a||(a=true,clearTimeout(c),l());},c=setTimeout(()=>{i.kill("SIGKILL"),d(()=>s(new Error(`ffprobe timed out after ${kr}ms`)));},kr);i.stdout.on("data",l=>{o.length>Yo||(o+=l.toString());}),i.on("close",l=>{d(l===0?()=>r(parseFloat(o.trim())||0):()=>s(new Error(`ffprobe exited with code ${l}`)));}),i.on("error",l=>d(()=>s(l)));})}};var ra=3e4,sa=64*1024*1024,Nr="application/octet-stream",Oe=async n=>n.byteLength===0?Nr:(await $(n))?.mime??Nr,Ze=async n=>({buffer:n,mime:await Oe(n),size:n.byteLength}),ia=async(n,e,t)=>{let r=Number(n.headers?.get?.("content-length")??"0");if(Number.isFinite(r)&&r>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);let s=n.body;if(s==null||typeof s.getReader!="function"){let d=Buffer.from(await n.arrayBuffer());if(d.byteLength>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);return d}let i=[],o=0,a=s.getReader();for(;;){let{done:d,value:c}=await a.read();if(d)break;if(c!==void 0){if(o+=c.byteLength,o>t)throw await a.cancel().catch(()=>{}),new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);i.push(c);}}return Buffer.concat(i)},Dr=async(n,e,t)=>{let r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let i=await fetch(n,{signal:r.signal});if(!i.ok)throw new p("MEDIA_LOAD_FAILED",`fetch ${n} failed with status ${i.status}`,{cause:i.status});return await ia(i,n,t)}catch(i){throw i instanceof p?i:new p("MEDIA_LOAD_FAILED",`fetch ${n} failed: ${i.message}`,{cause:i})}finally{clearTimeout(s);}},Br=async(n,e)=>{try{if((await stat(n)).size>e)throw new p("MEDIA_LOAD_FAILED",`${n} exceeds ${e} bytes`);return await readFile(n)}catch(t){throw t instanceof p?t:new p("MEDIA_LOAD_FAILED",`read ${n} failed: ${t.message}`,{cause:t})}},oa=n=>n.startsWith("http://")||n.startsWith("https://"),aa=[".zaileys"],Fr=(n,e)=>{let t=resolve(n);for(let r of e){let s=resolve(r);if(t===s||t.startsWith(s+sep))throw new p("MEDIA_LOAD_FAILED",`refusing to read ${n}: it resolves inside the protected directory ${r}`)}return t},da=/^(?:0\.|10\.|127\.|169\.254\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.)/,ca=n=>{let e=n.replace(/^\[|\]$/g,"").toLowerCase();return e==="localhost"||e.endsWith(".localhost")||e.endsWith(".internal")||e==="::1"||e==="::"||e.startsWith("fc")||e.startsWith("fd")||e.startsWith("fe80:")?true:da.test(e)},Wr=(n,e)=>{let t;try{t=new URL(n);}catch{throw new p("MEDIA_LOAD_FAILED",`invalid url: ${n}`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new p("MEDIA_LOAD_FAILED",`unsupported url scheme: ${t.protocol}`);if(!e&&ca(t.hostname))throw new p("MEDIA_LOAD_FAILED",`refusing to fetch a private address: ${t.hostname}`);return n},Xe={},Ur=n=>{if(n.maxBytes!==void 0&&(!Number.isInteger(n.maxBytes)||n.maxBytes<1))throw new p("INVALID_OPTIONS",`invalid maxBytes: ${n.maxBytes}`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<1))throw new p("INVALID_OPTIONS",`invalid timeoutMs: ${n.timeoutMs}`);Xe={...Xe,...Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))};},jr=()=>({...Xe}),B=async(n,e)=>{await Vt();let t={...Xe,...e,deniedDirs:[...Xe.deniedDirs??[],...e?.deniedDirs??[]]},r=t.timeoutMs??ra,s=t.maxBytes??sa,i=t.allowPrivateNetwork===true,o=[...aa,...t.deniedDirs??[]];if(Buffer.isBuffer(n))return Ze(n);if(n instanceof URL)return n.protocol==="file:"?Ze(await Br(Fr(fileURLToPath(n),o),s)):Ze(await Dr(Wr(n.toString(),i),r,s));if(oa(n))return Ze(await Dr(Wr(n,i),r,s));if(t.allowLocalPaths===false)throw new p("MEDIA_LOAD_FAILED","local filesystem paths are disabled; pass a URL, a Buffer, or a file: URL");return Ze(await Br(Fr(n,o),s))};var Re=async(n,e)=>{let{buffer:t}=await B(n),r={image:t};return e?.caption!==void 0&&(r.caption=e.caption),e?.viewOnce!==void 0&&(r.viewOnce=e.viewOnce),r};var he=async(n,e)=>{let{buffer:t,mime:r}=await B(n);if(!r.startsWith("video/"))throw new p("INVALID_OPTIONS",`video() expects a video source, got mime ${r}`);let s={video:t};return e?.caption!==void 0&&(s.caption=e.caption),e?.gifPlayback!==void 0&&(s.gifPlayback=e.gifPlayback),e?.viewOnce!==void 0&&(s.viewOnce=e.viewOnce),e?.ptv===true&&(s.ptv=true),s};var qr=2,$r=30,la=async n=>{if(n.type==="image")return Re(n.src,n.caption!==void 0?{caption:n.caption}:void 0);if(n.type==="video")return he(n.src,n.caption!==void 0?{caption:n.caption}:void 0);throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(n.type)}`)},Kr=async(n,e,t,r)=>{if(!Array.isArray(t)||t.length<qr)throw new p("INVALID_OPTIONS",`album() requires a minimum of ${qr} items`);if(t.length>$r)throw new p("INVALID_OPTIONS",`album() accepts a maximum of ${$r} items`);let s=0,i=0;for(let u of t)if(u.type==="image")s+=1;else if(u.type==="video")i+=1;else throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(u.type)}`);let o={album:{expectedImageCount:s,expectedVideoCount:i}};r.mentions&&r.mentions.length>0&&(o.mentions=r.mentions),r.mentionAll&&(o.mentionAll=true);let a={};r.quoted&&(a.quoted=r.quoted),r.disappearingSeconds!==void 0&&(a.ephemeralExpiration=r.disappearingSeconds);let d;try{d=await n.sendMessage(e,o,a);}catch(u){throw new p("SEND_FAILED","album parent send rejected",{cause:u})}let c=d?.key;if(!c)throw new p("SEND_FAILED","album parent returned no message key");let l=0;for(let u of t){let f=await la(u);f.albumParentKey=c;try{await n.sendMessage(e,f);}catch(v){throw new p("SEND_FAILED","album child send rejected",{cause:{parentKey:c,index:l,error:v}})}l+=1;}return c};var Q=async(n,e,t,r,s)=>{let i=r.replace(/[^a-z0-9]+/gi,"_").toLowerCase(),o=re.createTempPath(`${i}_in`,e),a=re.createTempPath(`${i}_out`,t);await re.safeWriteFile(o,n);try{let d=typeof s=="function"?await s(o):s;return await fe.process({input:o,output:a,options:d,onEnd:async()=>{},onError:async()=>{}}),await re.safeReadFile(a)}catch(d){throw new Error(`${r} failed: ${d instanceof Error?d.message:String(d)}`)}finally{await re.cleanup([o,a]);}};var zt=64,Gr=8e3,ye=class{static async toOpus(e){return this.convert(e,"opus")}static async toMp3(e){return this.convert(e,"mp3")}static async convert(e,t="opus"){let r=await R.toBuffer(e);q.validate(await $(r),P.MIME.AUDIO);let s=await R.getExtension(r),i=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","ogg"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return Q(r,s,t==="opus"?"ogg":"mp3",`${t.toUpperCase()} conversion`,i)}static async waveform(e){let t=await R.toBuffer(e),r=await R.getExtension(t),s=await Q(t,r,"tmp","Waveform generation",["-vn","-ac","1","-ar",String(Gr),"-f","s16le"]),i=Math.floor(s.length/2);return {waveform:this.computeWaveform(s),seconds:Math.max(1,Math.round(i/Gr))}}static computeWaveform(e){let t=Math.floor(e.length/2),r=new Uint8Array(zt);if(t===0)return r;let s=Math.max(1,Math.floor(t/zt)),i=[];for(let a=0;a<zt;a++){let d=0,c=0;for(let l=0;l<s;l++){let u=(a*s+l)*2;u+1<e.length&&(d+=Math.abs(e.readInt16LE(u)),c+=1);}i.push(c>0?d/c:0);}let o=Math.max(...i)||1;for(let a=0;a<zt;a++)r[a]=Math.floor(i[a]/o*100);return r}};var ua=["-c:v","libx264","-preset","ultrafast","-crf","28","-c:a","aac","-b:a","128k","-movflags","+faststart","-vf","scale=trunc(iw/2)*2:trunc(ih/2)*2","-pix_fmt","yuv420p","-f","mp4"],Z=class{static async toMp4(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t);return Q(t,r,"mp4","Video re-encoding",ua)}static async thumbnail(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t),s=P.THUMBNAIL.SIZE;return (await Q(t,r,"jpg","Thumbnail generation",async o=>{let a=await fe.getDuration(o);return ["-ss",Math.max(0,a*.1).toString(),"-vframes","1","-s",`${s}x${s}`]})).toString("base64")}static async duration(e){return fe.getDuration(e)}};var _e=null,Jr=false;async function pa(){if(Jr)return _e;Jr=true;let n=e=>{typeof e=="function"&&(_e=e);};try{n(Vo("sharp"));}catch{_e=null;}if(!_e)try{let e=await import('sharp');n(e.default??e);}catch{_e=null;}return _e}function Hr(n,e){let t=new Uint8Array(n*n),r=n/2,s=n/2,i=n/10,o=[[i,i],[n-i,i],[i,n-i],[n-i,n-i]];for(let a=0;a<n;a++)for(let d=0;d<n;d++){let c=false;if(e==="circle"){let l=d-r,u=a-s;c=l*l+u*u<=r*r;}else if(e==="rounded"){let l=d>=i&&d<n-i&&a>=0&&a<n,u=d>=0&&d<n&&a>=i&&a<n-i,f=false;for(let v of o){let b=d-v[0],T=a-v[1];if(b*b+T*T<=i*i){f=true;break}}c=l||u||f;}else if(e==="oval"){let l=(d-r)/(n/2),u=(a-s)/(n/3);c=l*l+u*u<=1;}t[a*n+d]=c?255:0;}return t}var Vr=2e4,Fn=(n,e)=>{let t=typeof n=="number"&&Number.isFinite(n)?n:0,r=typeof e=="number"&&Number.isFinite(e)?e:0;if(!(t<=0||r<=0)&&(t>Vr||r>Vr||t*r>Rr().maxImagePixels))throw new Error(`Image too large to decode safely: ${t}x${r}`)},zr=(n,e)=>{if(!Number.isInteger(n)||!Number.isInteger(e)||n<=0||e<=0)throw new Error(`Invalid resize target: ${n}x${e}`);Fn(n,e);},ma=n=>{if(n.length>=24&&n.readUInt32BE(0)===2303741511)return {width:n.readUInt32BE(16),height:n.readUInt32BE(20)};if(n.length>=10&&n.toString("ascii",0,3)==="GIF")return {width:n.readUInt16LE(6),height:n.readUInt16LE(8)};if(n.length>=26&&n.toString("ascii",0,2)==="BM")return {width:n.readInt32LE(18),height:Math.abs(n.readInt32LE(22))};if(n.length>=30&&n.toString("ascii",0,4)==="RIFF"&&n.toString("ascii",8,12)==="WEBP"){let e=n.toString("ascii",12,16);if(e==="VP8X")return {width:1+(n.readUIntLE(24,3)&16777215),height:1+(n.readUIntLE(27,3)&16777215)};if(e==="VP8 "&&n.length>=30)return {width:n.readUInt16LE(26)&16383,height:n.readUInt16LE(28)&16383}}},se=n=>{let e=ma(n);return e!==void 0&&Fn(e.width,e.height),n},Dn=class{sharp;constructor(e){this.sharp=e;}async thumbnail(e){let t=this.sharp;se(e);let r=t(e).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE,{fit:"cover"});return (await r.metadata()).format==="gif"&&(r=t(e,{pages:1}).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE)),(await r.jpeg({quality:P.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}async resize(e,t,r){zr(t,r);let s=this.sharp(se(e)),i=await s.metadata();return Fn(i.width,i.height),s.resize(t,r,{fit:"cover"}).png().toBuffer()}async toJpeg(e){let t=this.sharp,r=se(await R.toBuffer(e)),s=await t(r).metadata();if(!s.format)throw new Error("Invalid image type: format could not be determined");return s.format==="webp"||s.format==="png"?t(r).jpeg().toBuffer():r}async resizeForSticker(e,t,r="default"){let s=this.sharp,i=P.STICKER.SIZE,o=s(se(e)).resize(i,i,{fit:"contain",background:{r:0,g:0,b:0,alpha:0}});if(r!=="default"){let a=Buffer.from(Hr(i,r)),d=s(a,{raw:{width:i,height:i,channels:1}});o=o.joinChannel(await d.png().toBuffer());}return o.webp({quality:t}).toBuffer()}},Bn=class{async thumbnail(e){let t=P.THUMBNAIL.SIZE,r=await Jimp.fromBuffer(se(e));r.cover({w:t,h:t});let s=await r.getBuffer("image/jpeg",{quality:P.THUMBNAIL.QUALITY});return Buffer.from(s).toString("base64")}async resize(e,t,r){zr(t,r);let s=await Jimp.fromBuffer(se(e));s.cover({w:t,h:r});let i=await s.getBuffer("image/png");return Buffer.from(i)}async toJpeg(e){let t=await R.toBuffer(e);try{let s=await(await Jimp.fromBuffer(se(t))).getBuffer("image/jpeg");return Buffer.from(s)}catch{return t}}async resizeForSticker(e,t,r="default"){let s=P.STICKER.SIZE,i=await Jimp.fromBuffer(se(e));if(i.contain({w:s,h:s}),r!=="default"){let d=Hr(s,r),c=new Jimp({width:s,height:s,color:255});for(let l=0;l<s;l++)for(let u=0;u<s;u++)d[l*s+u]===255&&c.setPixelColor(4294967295,u,l);i.mask(c);}let o=Buffer.from(await i.getBuffer("image/png")),a=Math.max(1,Math.min(100,t));return Q(o,"png","webp","Jimp WebP conversion",["-vcodec","libwebp","-q:v",`${a}`,"-preset","default"])}},tt=null;async function Yt(){if(tt)return tt;let n=await pa();return n?tt=new Dn(n):(console.warn("\x1B[33m%s\x1B[0m","[media-process] Jimp is slow. For faster performance, run: npm install sharp"),tt=new Bn),tt}var V=class{static async thumbnail(e){return (await Yt()).thumbnail(e)}static async resize(e,t,r){return (await Yt()).resize(e,t,r)}static async toJpeg(e){return (await Yt()).toJpeg(e)}static async resizeForSticker(e,t,r="default"){return (await Yt()).resizeForSticker(e,t,r)}};var Le=class n{static defaultMetadata={packageName:"Zaileys Library",authorName:"https://github.com/zeative/zaileys"};static setDefaultMetadata(e){e&&(n.defaultMetadata={...n.defaultMetadata,...e});}static getDefaultMetadata(){return {...n.defaultMetadata}}static async create(e,t){try{let r=await R.toBuffer(e),s=await $(r);if(!s)throw new Error("Unable to detect file type");let i=t?.quality||P.STICKER.DEFAULT_QUALITY,o=q.isAnimated(s.mime),a=t?.shape||"default",d=s.mime==="image/webp"?r:o?await this.processAnimated(r,s.mime,i):await V.resizeForSticker(r,i,a),c=this.createExifMetadata(t),l=new ga.Image;await l.load(d),l.exif=c;let u=await l.save(null);return Buffer.isBuffer(u)?u:Buffer.from(u)}catch(r){throw new Error(`Sticker creation failed: ${r instanceof Error?r.message:String(r)}`)}}static createExifMetadata(e){let t=e?.pack??e?.packageName??e?.packname??n.defaultMetadata.pack??n.defaultMetadata.packageName??n.defaultMetadata.packname??"Zaileys Library",r=e?.author??e?.authorName??e?.publisher??n.defaultMetadata.author??n.defaultMetadata.authorName??n.defaultMetadata.publisher??"https://github.com/zeative/zaileys",s={"sticker-pack-id":Ht(),"sticker-pack-name":t,"sticker-pack-publisher":r,emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},i=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(s),"utf8"),a=Buffer.concat([i,o]);return a.writeUIntLE(o.length,14,4),a}static async processAnimated(e,t,r){let s=P.STICKER.SIZE,i=P.STICKER.FPS,o=`scale=${s}:${s}:force_original_aspect_ratio=decrease,fps=${i},pad=${s}:${s}:(ow-iw)/2:(oh-ih)/2:color=0x00000000,format=rgba`,a=Math.max(1,Math.min(100,r));return Q(e,this.getExtension(t),"webp","Animated sticker processing",async d=>{let c=P.STICKER.MAX_DURATION;try{c=Math.min(await Z.duration(d),P.STICKER.MAX_DURATION);}catch{console.warn("Using default duration:",P.STICKER.MAX_DURATION);}let l=Number.isFinite(a)?Math.round(a):60,u=Number.isFinite(c)&&c>0?Math.min(c,P.STICKER.MAX_DURATION):P.STICKER.MAX_DURATION;return ["-vcodec","libwebp","-vf",o,"-q:v",String(l),"-loop","0","-preset","default","-an","-vsync","0","-t",String(u),"-compression_level",String(P.STICKER.COMPRESSION_LEVEL)]})}static getExtension(e){return e===P.MIME.GIF?"gif":e.startsWith(P.MIME.VIDEO)?"mp4":"tmp"}};var Qt=class{static async create(e){try{let t=await R.toBuffer(e),r=await $(t);if(!r)throw new Error("Unable to detect file type");let s;return r.mime.startsWith(P.MIME.VIDEO)?s=await Z.thumbnail(t):q.isMedia(r.mime)?s=await V.thumbnail(t):s="",{document:t,mimetype:r.mime,ext:r.ext,fileName:Ht(),jpegThumbnail:s}}catch(t){throw new Error(`Document creation failed: ${t instanceof Error?t.message:String(t)}`)}}};var we=class{input;constructor(e){this.input=e;}get audio(){return {toOpus:()=>ye.toOpus(this.input),toMp3:()=>ye.toMp3(this.input),convert:(e="opus")=>ye.convert(this.input,e),waveform:()=>ye.waveform(this.input)}}get video(){return {toMp4:()=>Z.toMp4(this.input),thumbnail:()=>Z.thumbnail(this.input)}}get image(){return {toJpeg:()=>V.toJpeg(this.input),thumbnail:async()=>{let e=await R.toBuffer(this.input);return V.thumbnail(e)},resize:async(e,t)=>{let r=await R.toBuffer(this.input);return V.resize(r,e,t)}}}get sticker(){return {create:e=>Le.create(this.input,e)}}get document(){return {create:()=>Qt.create(this.input)}}get thumbnail(){return {get:async()=>{let e=await R.toBuffer(this.input),t=await $(e);if(!t||!q.isMedia(t.mime))throw new Error("Invalid media type: expected image or video");return t.mime.startsWith(P.MIME.VIDEO)?Z.thumbnail(this.input):V.thumbnail(e)}}}async toBuffer(){return R.toBuffer(this.input)}};var Yr=async(n,e)=>{let{buffer:t}=await B(n),r;try{r=await new we(t).audio.toOpus();}catch(o){throw new p("MEDIA_LOAD_FAILED",`audio() transcode failed: ${o.message}`,{cause:o})}let s=e?.ptt??true,i={audio:r,ptt:s};if(s)try{let{waveform:o,seconds:a}=await new we(t).audio.waveform();i.waveform=o,e?.seconds===void 0&&(i.seconds=a);}catch{}return e?.seconds!==void 0&&(i.seconds=e.seconds),i};var Qr=10,W="__zaileysRelayMessage",Wn="__zaileysHeaderMedia",nt="__zaileysRequireGroupJid",Zt="__zaileysBypassDownload",Xt="__zaileysStatusMedia",ie=n=>typeof n=="string"&&n.length>0,fa=n=>{let e=n.text;if(!ie(e)||e.trim().length===0)throw new p("INVALID_OPTIONS","button text must be a non-empty string");return e},ha=(n,e)=>{let t=n.type??"reply";if(t==="location"){let s=n.text;return {name:"send_location",buttonParamsJson:JSON.stringify(ie(s)?{display_text:s}:{})}}let r=fa(n);if(t==="reply"){let s=n.id;if(!ie(s))throw new p("INVALID_OPTIONS","reply button requires a non-empty id");if(e.has(s))throw new p("INVALID_OPTIONS",`duplicate button id: ${s}`);return e.add(s),{name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:r,id:s})}}if(t==="url"){let s=n.url;if(!ie(s))throw new p("INVALID_OPTIONS","url button requires a non-empty url");let i=n.webview===true;return {name:"cta_url",buttonParamsJson:JSON.stringify({display_text:r,url:s,merchant_url:s,landing_page_url:s,webview_interaction:i})}}if(t==="copy"){let s=n.code;if(!ie(s))throw new p("INVALID_OPTIONS","copy button requires a non-empty code");return {name:"cta_copy",buttonParamsJson:JSON.stringify({display_text:r,id:s,copy_code:s})}}if(t==="call"){let s=n.phone;if(!ie(s))throw new p("INVALID_OPTIONS","call button requires a non-empty phone");return {name:"cta_call",buttonParamsJson:JSON.stringify({display_text:r,id:s,phone_number:s})}}if(t==="reminder"||t==="cancel-reminder"){let s=n.id;return {name:t==="reminder"?"cta_reminder":"cta_cancel_reminder",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}if(t==="address"){let s=n.id;return {name:"address_message",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}throw new p("INVALID_OPTIONS",`unknown button type: ${String(t)}`)},ya=n=>{let e={};if(n?.bottomSheet){let t=n.bottomSheet;e.bottom_sheet={...t.buttonsLimit!==void 0?{in_thread_buttons_limit:t.buttonsLimit}:{},...t.dividers!==void 0?{divider_indices:t.dividers}:{},...t.listTitle!==void 0?{list_title:t.listTitle}:{},...t.buttonTitle!==void 0?{button_title:t.buttonTitle}:{}};}if(n?.limitedTimeOffer){let t=n.limitedTimeOffer;e.limited_time_offer={...t.text!==void 0?{text:t.text}:{},...t.url!==void 0?{url:t.url}:{},...t.copyCode!==void 0?{copy_code:t.copyCode}:{},...t.expiresAt!==void 0?{expiration_time:t.expiresAt}:{}};}return Object.keys(e).length>0?JSON.stringify(e):""},Un=n=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","buttons() requires at least one button");if(n.length>Qr)throw new p("INVALID_OPTIONS",`buttons() accepts at most ${Qr} buttons`);let e=new Set;return n.map(t=>ha(t,e))},Ne=(n,e)=>{let t=Un(n),r={body:{text:e?.text&&e.text.length>0?e.text:" "},nativeFlowMessage:{buttons:t,messageParamsJson:ya(e)}};e?.footer&&e.footer.length>0&&(r.footer={text:e.footer});let s=e?.image?{kind:"image",src:e.image}:e?.video?{kind:"video",src:e.video}:void 0;return (e?.title&&e.title.length>0||e?.subtitle&&e.subtitle.length>0||s)&&(r.header={title:e?.title??"",subtitle:e?.subtitle??"",hasMediaAttachment:s!==void 0}),s!==void 0?{[W]:{interactiveMessage:r},[Wn]:s}:{[W]:{interactiveMessage:r}}};var Zr=10,jn="__zaileysCardsMedia",Xr=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","carousel() requires at least one card");if(n.length>Zr)throw new p("INVALID_OPTIONS",`carousel() accepts at most ${Zr} cards`);let t=[],r=n.map((o,a)=>{let d={body:{text:o.body&&o.body.length>0?o.body:" "}};o.buttons&&o.buttons.length>0&&(d.nativeFlowMessage={buttons:Un(o.buttons),messageParamsJson:""}),o.footer&&o.footer.length>0&&(d.footer={text:o.footer});let c=o.image?{kind:"image",src:o.image}:o.video?{kind:"video",src:o.video}:void 0;return (o.title&&o.title.length>0||o.subtitle&&o.subtitle.length>0||c)&&(d.header={title:o.title??"",subtitle:o.subtitle??"",hasMediaAttachment:c!==void 0}),c&&t.push({...c,index:a}),d}),s={body:{text:e?.text&&e.text.length>0?e.text:" "},carouselMessage:{cards:r}};return t.length>0?{[W]:{interactiveMessage:s},[jn]:t}:{[W]:{interactiveMessage:s}}};var es=(n,e,t)=>{let r=new Int32Array(n.length).fill(-1),s=[];for(let i=0;i<n.length;i+=1){if(n[i-1]==="\\")continue;let o=n[i];if(o===e)s.push(i);else if(o===t){let a=s.pop();a!==void 0&&(r[a]=i);}}return r},va=n=>{let e=[],t="",r=0,s=1,i=0,o=0,a=[],d=es(n,"(",")"),c=es(n,"<",">");for(let l=0;l<n.length;l++)if(n[l]==="["&&n[l-1]!=="\\")a.push(l);else if(n[l]==="]"&&(n[l+1]==="("||n[l+1]==="<")){let u=a.pop();if(u==null)continue;let v=n[l+1]==="<",b=(v?c:d)[l+1]??-1;if(b<0)continue;let T=b+1,O=n.slice(u+1,l).trim(),A=n.slice(l+2,T-1).trim(),S,x;if(v){let[F="",z="",Ie="",He="",xe=""]=O.split("|").map(ze=>ze.trim());S=`zaileys_LATEX_${o++}`,x=`{{${S}}}${F||"image"}{{/${S}}}`,e.push({type:"latex",ie:{key:S,text:F,url:A,width:z,height:Ie,font_height:He,padding:xe}});}else O?(S=`zaileys_HYPERLINK_${i++}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"hyperlink",ie:{key:S,text:O,url:A}})):(S=`zaileys_CITATION_${s-1}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"citation",ie:{key:S,reference_id:String(s++),url:A}}));t+=n.slice(r,u)+x,r=T,l=T-1;}return t+=n.slice(r),{text:t,ie:e}},Ma=n=>n.ie.map(({type:e,ie:t})=>e==="hyperlink"?{key:t.key,metadata:{display_name:t.text,is_trusted:true,url:t.url,__typename:"GenAIInlineLinkItem"}}:e==="latex"?{key:t.key,metadata:{latex_expression:t.text,latex_image:{url:t.url,width:Number(t.width)||100,height:Number(t.height)||100},font_height:Number(t.font_height)||83.33333333333333,padding:Number(t.padding)||15,__typename:"GenAILatexItem"}}:{key:t.key,metadata:{reference_id:Number(t.reference_id),reference_url:t.url,reference_title:t.url,reference_display_name:t.url,sources:[],__typename:"GenAISearchCitationItem"}}),ts=5e3,ns=200,rs=1e5,ba=n=>{if(!Array.isArray(n)||n.length===0||!n.every(i=>Array.isArray(i)))throw new p("INVALID_OPTIONS","table must be a non-empty array of string rows");let[e,...t]=n;if(n.length>ts)throw new p("INVALID_OPTIONS",`table exceeds ${ts} rows`);let r=e.length;for(let i of t)i.length>r&&(r=i.length);if(r>ns)throw new p("INVALID_OPTIONS",`table exceeds ${ns} columns`);if(r*n.length>rs)throw new p("INVALID_OPTIONS",`table exceeds ${rs} cells`);let s=i=>[...i,...Array(r-i.length).fill("")];return [{is_header:true,cells:s(e)},...t.map(i=>({is_header:false,cells:s(i)}))]},Sa={0:"DEFAULT",1:"KEYWORD",2:"METHOD",3:"STR",4:"NUMBER",5:"COMMENT"},en=new Set(["break","case","catch","continue","debugger","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","true","false","null","undefined","class","const","let","super","extends","export","import","from","as","default","yield","static","constructor","async","await","get","set"]),Aa={javascript:en,js:en,typescript:en,ts:en},Ca=(n,e)=>{let t=Aa[e.toLowerCase()]??new Set,r=[],s=(o,a)=>{if(!o)return;let d=r[r.length-1];d&&d.highlightType===a?d.codeContent+=o:r.push({codeContent:o,highlightType:a});},i=0;for(;i<n.length;){let o=n[i];if(/\s/.test(o)){let a=i;for(;i<n.length&&/\s/.test(n[i]);)i++;s(n.slice(a,i),0);continue}if(o==="/"&&n[i+1]==="/"){let a=i;for(i+=2;i<n.length&&n[i]!==`
1
+ import Ql,{prepareWAMessageMedia,generateWAMessageContent,normalizeMessageContent,getContentType,generateWAMessageFromContent,jidNormalizedUser,jidDecode,BufferJSON,makeCacheableSignalKeyStore,DisconnectReason,fetchLatestBaileysVersion,initAuthCreds,S_WHATSAPP_NET,isJidGroup,proto}from'baileys';export{areJidsSameUser,getDevice,isJidBroadcast,isJidGroup,isJidNewsletter,isLidUser,isPnUser,jidDecode,jidEncode,jidNormalizedUser}from'baileys';import {randomBytes,randomUUID,timingSafeEqual,createHmac,createHash}from'node:crypto';import Y,{stat,readFile}from'node:fs/promises';import {fileURLToPath,pathToFileURL}from'node:url';import H,{resolve,sep}from'node:path';import {constants,promises,watch}from'node:fs';import {tmpdir}from'node:os';import {spawn}from'node:child_process';import {Jimp}from'jimp';import ga from'node-webpmux';import {LRUCache}from'lru-cache';import'stream';import jc from'qrcode-terminal';import Kc from'pino';import {EventEmitter}from'node:events';var Vo=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var p=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysBuilderError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var P={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:6,FPS:10,DEFAULT_QUALITY:60,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},Jt="ffmpeg",Or="ffprobe",Cr=false,Er=async(n,e)=>{if(n===void 0||n.length===0)return e;try{if(process.platform==="win32")return await Y.access(n),n;let t=()=>Y.access(n,constants.X_OK).then(()=>!0,()=>!1);if(await t())return n;let{mode:r}=await Y.stat(n);return await Y.chmod(n,r|64),await t()?n:e}catch{return e}},Vt=async(n=false)=>{if(n||Cr)return;Cr=true;let e=process.env.FFMPEG_PATH,t=process.env.FFPROBE_PATH,r;try{r=(await import('@ffmpeg-installer/ffmpeg')).default?.path;}catch{}if(Jt=e??await Er(r,"ffmpeg"),Jt!=="ffmpeg"){let i=H.dirname(Jt),o=process.platform==="win32"?";":":",a=process.env.PATH??"";a.split(o).includes(i)||(process.env.PATH=`${i}${o}${a}`);}let s;try{s=(await import('@ffprobe-installer/ffprobe')).default?.path;}catch{}Or=t??await Er(s,"ffprobe");},Pr=12e4,kr=3e4,Yo=64*1024,Qo=3e4,Tr=64*1024*1024,ge={maxConcurrent:4,maxQueued:64,queueTimeoutMs:12e4,maxImagePixels:5e7},Rr=()=>({...ge}),_r=n=>{let e=(t,r,s)=>{if(r!==void 0&&(!Number.isFinite(r)||!Number.isInteger(r)||r<s))throw new Error(`invalid media limit ${t}: ${r}`)};e("maxConcurrent",n.maxConcurrent,1),e("maxQueued",n.maxQueued,0),e("queueTimeoutMs",n.queueTimeoutMs,1),e("maxImagePixels",n.maxImagePixels,1),Object.assign(ge,Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0)));},Nn=0,Qe=[],Zo=async()=>{if(Nn<ge.maxConcurrent)Nn+=1;else {if(Qe.length>=ge.maxQueued)throw new Error(`ffmpeg queue is full (${ge.maxQueued} jobs waiting)`);await new Promise((e,t)=>{let r={grant:()=>{clearTimeout(s),e();}},s=setTimeout(()=>{let i=Qe.indexOf(r);i>=0&&Qe.splice(i,1),t(new Error(`ffmpeg job waited more than ${ge.queueTimeoutMs}ms for a slot`));},ge.queueTimeoutMs);Qe.push(r);});}let n=false;return ()=>{if(n)return;n=true;let e=Qe.shift();e?e.grant():Nn-=1;}},Ht=()=>Date.now().toString(36)+randomBytes(4).toString("hex"),$=async n=>{let{fileTypeFromBuffer:e}=await import('file-type');return e(n)},re=class{static generateUniqueId(){return randomBytes(12).toString("hex")}static createTempPath(e,t){return H.join(tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Y.unlink(t)));}static async safeReadFile(e){try{return await Y.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Y.writeFile(e,t,{flag:"wx",mode:384});}catch{throw new Error(`Failed to write file: ${e}`)}}},R=class{static async toBuffer(e){if(Buffer.isBuffer(e))return e;if(e instanceof ArrayBuffer)return Buffer.from(e);if(typeof e=="string")return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){if(e.startsWith("http://")||e.startsWith("https://"))return this.fromUrl(e);try{if(await Y.stat(e).then(t=>t.isFile()).catch(()=>!1))return await Y.readFile(e)}catch{}return Buffer.from(e,"base64")}static async fromUrl(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Qo);try{let s=await fetch(e,{signal:t.signal});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.arrayBuffer(),o=Buffer.from(i);if(o.byteLength>Tr)throw new Error(`Fetched body exceeds ${Tr} bytes`);return o}catch(s){throw new Error(`Failed to fetch URL: ${s instanceof Error?s.message:String(s)}`)}finally{clearTimeout(r);}}static async getExtension(e){let{fileTypeFromBuffer:t}=await import('file-type'),r=await t(e);if(!r)return "tmp";let s=r.ext.toLowerCase();return ["wav","ogg","mp4","gif","jpg","webp","tmp","mp3","png"].includes(s)?s:"tmp"}},q=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(P.MIME.IMAGE)||e.startsWith(P.MIME.VIDEO)}static isAnimated(e){return e===P.MIME.GIF||e.startsWith(P.MIME.VIDEO)}},fe=class{static async process(e){await Vt();let t=await Zo();try{await new Promise((r,s)=>{let i=["-y","-i",e.input,...e.options,e.output],o=spawn(Jt,i,{stdio:"ignore"}),a=!1,d=l=>{a||(a=!0,clearTimeout(c),l());},c=setTimeout(()=>{o.kill("SIGKILL");let l=new Error(`FFmpeg timed out after ${Pr}ms`);Promise.resolve(e.onError(l)).catch(()=>{}),d(()=>s(l));},Pr);o.on("close",l=>{if(a)return;if(l===0){Promise.resolve(e.onEnd()).then(()=>d(r),f=>d(()=>s(f)));return}let u=new Error(`FFmpeg exited with code ${l}`);Promise.resolve(e.onError(u)).then(()=>d(()=>s(u)),f=>d(()=>s(f)));}),o.on("error",l=>{Promise.resolve(e.onError(l)).finally(()=>d(()=>s(l)));});});}finally{t();}}static async getDuration(e){if(await Vt(),typeof e!="string"||e.length===0||e.startsWith("-"))throw new Error("getDuration expects a local file path");if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e))throw new Error("getDuration does not accept protocol inputs");let t=await Y.stat(e).catch(()=>{});if(t===void 0||!t.isFile())throw new Error(`getDuration: not a readable file: ${e}`);return new Promise((r,s)=>{let i=spawn(Or,["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",e]),o="",a=false,d=l=>{a||(a=true,clearTimeout(c),l());},c=setTimeout(()=>{i.kill("SIGKILL"),d(()=>s(new Error(`ffprobe timed out after ${kr}ms`)));},kr);i.stdout.on("data",l=>{o.length>Yo||(o+=l.toString());}),i.on("close",l=>{d(l===0?()=>r(parseFloat(o.trim())||0):()=>s(new Error(`ffprobe exited with code ${l}`)));}),i.on("error",l=>d(()=>s(l)));})}};var ra=3e4,sa=64*1024*1024,Nr="application/octet-stream",Oe=async n=>n.byteLength===0?Nr:(await $(n))?.mime??Nr,Ze=async n=>({buffer:n,mime:await Oe(n),size:n.byteLength}),ia=async(n,e,t)=>{let r=Number(n.headers?.get?.("content-length")??"0");if(Number.isFinite(r)&&r>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);let s=n.body;if(s==null||typeof s.getReader!="function"){let d=Buffer.from(await n.arrayBuffer());if(d.byteLength>t)throw new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);return d}let i=[],o=0,a=s.getReader();for(;;){let{done:d,value:c}=await a.read();if(d)break;if(c!==void 0){if(o+=c.byteLength,o>t)throw await a.cancel().catch(()=>{}),new p("MEDIA_LOAD_FAILED",`${e} exceeds ${t} bytes`);i.push(c);}}return Buffer.concat(i)},Dr=async(n,e,t)=>{let r=new AbortController,s=setTimeout(()=>r.abort(),e);try{let i=await fetch(n,{signal:r.signal});if(!i.ok)throw new p("MEDIA_LOAD_FAILED",`fetch ${n} failed with status ${i.status}`,{cause:i.status});return await ia(i,n,t)}catch(i){throw i instanceof p?i:new p("MEDIA_LOAD_FAILED",`fetch ${n} failed: ${i.message}`,{cause:i})}finally{clearTimeout(s);}},Br=async(n,e)=>{try{if((await stat(n)).size>e)throw new p("MEDIA_LOAD_FAILED",`${n} exceeds ${e} bytes`);return await readFile(n)}catch(t){throw t instanceof p?t:new p("MEDIA_LOAD_FAILED",`read ${n} failed: ${t.message}`,{cause:t})}},oa=n=>n.startsWith("http://")||n.startsWith("https://"),aa=[".zaileys"],Fr=(n,e)=>{let t=resolve(n);for(let r of e){let s=resolve(r);if(t===s||t.startsWith(s+sep))throw new p("MEDIA_LOAD_FAILED",`refusing to read ${n}: it resolves inside the protected directory ${r}`)}return t},da=/^(?:0\.|10\.|127\.|169\.254\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.)/,ca=n=>{let e=n.replace(/^\[|\]$/g,"").toLowerCase();return e==="localhost"||e.endsWith(".localhost")||e.endsWith(".internal")||e==="::1"||e==="::"||e.startsWith("fc")||e.startsWith("fd")||e.startsWith("fe80:")?true:da.test(e)},Wr=(n,e)=>{let t;try{t=new URL(n);}catch{throw new p("MEDIA_LOAD_FAILED",`invalid url: ${n}`)}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new p("MEDIA_LOAD_FAILED",`unsupported url scheme: ${t.protocol}`);if(!e&&ca(t.hostname))throw new p("MEDIA_LOAD_FAILED",`refusing to fetch a private address: ${t.hostname}`);return n},Xe={},Ur=n=>{if(n.maxBytes!==void 0&&(!Number.isInteger(n.maxBytes)||n.maxBytes<1))throw new p("INVALID_OPTIONS",`invalid maxBytes: ${n.maxBytes}`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<1))throw new p("INVALID_OPTIONS",`invalid timeoutMs: ${n.timeoutMs}`);Xe={...Xe,...Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))};},jr=()=>({...Xe}),B=async(n,e)=>{await Vt();let t={...Xe,...e,deniedDirs:[...Xe.deniedDirs??[],...e?.deniedDirs??[]]},r=t.timeoutMs??ra,s=t.maxBytes??sa,i=t.allowPrivateNetwork===true,o=[...aa,...t.deniedDirs??[]];if(Buffer.isBuffer(n))return Ze(n);if(n instanceof URL)return n.protocol==="file:"?Ze(await Br(Fr(fileURLToPath(n),o),s)):Ze(await Dr(Wr(n.toString(),i),r,s));if(oa(n))return Ze(await Dr(Wr(n,i),r,s));if(t.allowLocalPaths===false)throw new p("MEDIA_LOAD_FAILED","local filesystem paths are disabled; pass a URL, a Buffer, or a file: URL");return Ze(await Br(Fr(n,o),s))};var Re=async(n,e)=>{let{buffer:t}=await B(n),r={image:t};return e?.caption!==void 0&&(r.caption=e.caption),e?.viewOnce!==void 0&&(r.viewOnce=e.viewOnce),r};var he=async(n,e)=>{let{buffer:t,mime:r}=await B(n);if(!r.startsWith("video/"))throw new p("INVALID_OPTIONS",`video() expects a video source, got mime ${r}`);let s={video:t};return e?.caption!==void 0&&(s.caption=e.caption),e?.gifPlayback!==void 0&&(s.gifPlayback=e.gifPlayback),e?.viewOnce!==void 0&&(s.viewOnce=e.viewOnce),e?.ptv===true&&(s.ptv=true),s};var qr=2,$r=30,la=async n=>{if(n.type==="image")return Re(n.src,n.caption!==void 0?{caption:n.caption}:void 0);if(n.type==="video")return he(n.src,n.caption!==void 0?{caption:n.caption}:void 0);throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(n.type)}`)},Kr=async(n,e,t,r)=>{if(!Array.isArray(t)||t.length<qr)throw new p("INVALID_OPTIONS",`album() requires a minimum of ${qr} items`);if(t.length>$r)throw new p("INVALID_OPTIONS",`album() accepts a maximum of ${$r} items`);let s=0,i=0;for(let u of t)if(u.type==="image")s+=1;else if(u.type==="video")i+=1;else throw new p("INVALID_OPTIONS",`album() item type must be 'image' or 'video', got ${String(u.type)}`);let o={album:{expectedImageCount:s,expectedVideoCount:i}};r.mentions&&r.mentions.length>0&&(o.mentions=r.mentions),r.mentionAll&&(o.mentionAll=true);let a={};r.quoted&&(a.quoted=r.quoted),r.disappearingSeconds!==void 0&&(a.ephemeralExpiration=r.disappearingSeconds);let d;try{d=await n.sendMessage(e,o,a);}catch(u){throw new p("SEND_FAILED","album parent send rejected",{cause:u})}let c=d?.key;if(!c)throw new p("SEND_FAILED","album parent returned no message key");let l=0;for(let u of t){let f=await la(u);f.albumParentKey=c;try{await n.sendMessage(e,f);}catch(v){throw new p("SEND_FAILED","album child send rejected",{cause:{parentKey:c,index:l,error:v}})}l+=1;}return c};var Q=async(n,e,t,r,s)=>{let i=r.replace(/[^a-z0-9]+/gi,"_").toLowerCase(),o=re.createTempPath(`${i}_in`,e),a=re.createTempPath(`${i}_out`,t);await re.safeWriteFile(o,n);try{let d=typeof s=="function"?await s(o):s;return await fe.process({input:o,output:a,options:d,onEnd:async()=>{},onError:async()=>{}}),await re.safeReadFile(a)}catch(d){throw new Error(`${r} failed: ${d instanceof Error?d.message:String(d)}`)}finally{await re.cleanup([o,a]);}};var zt=64,Gr=8e3,ye=class{static async toOpus(e){return this.convert(e,"opus")}static async toMp3(e){return this.convert(e,"mp3")}static async convert(e,t="opus"){let r=await R.toBuffer(e);q.validate(await $(r),P.MIME.AUDIO);let s=await R.getExtension(r),i=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","ogg"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return Q(r,s,t==="opus"?"ogg":"mp3",`${t.toUpperCase()} conversion`,i)}static async waveform(e){let t=await R.toBuffer(e),r=await R.getExtension(t),s=await Q(t,r,"tmp","Waveform generation",["-vn","-ac","1","-ar",String(Gr),"-f","s16le"]),i=Math.floor(s.length/2);return {waveform:this.computeWaveform(s),seconds:Math.max(1,Math.round(i/Gr))}}static computeWaveform(e){let t=Math.floor(e.length/2),r=new Uint8Array(zt);if(t===0)return r;let s=Math.max(1,Math.floor(t/zt)),i=[];for(let a=0;a<zt;a++){let d=0,c=0;for(let l=0;l<s;l++){let u=(a*s+l)*2;u+1<e.length&&(d+=Math.abs(e.readInt16LE(u)),c+=1);}i.push(c>0?d/c:0);}let o=Math.max(...i)||1;for(let a=0;a<zt;a++)r[a]=Math.floor(i[a]/o*100);return r}};var ua=["-c:v","libx264","-preset","ultrafast","-crf","28","-c:a","aac","-b:a","128k","-movflags","+faststart","-vf","scale=trunc(iw/2)*2:trunc(ih/2)*2","-pix_fmt","yuv420p","-f","mp4"],Z=class{static async toMp4(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t);return Q(t,r,"mp4","Video re-encoding",ua)}static async thumbnail(e){let t=await R.toBuffer(e);q.validate(await $(t),P.MIME.VIDEO);let r=await R.getExtension(t),s=P.THUMBNAIL.SIZE;return (await Q(t,r,"jpg","Thumbnail generation",async o=>{let a=await fe.getDuration(o);return ["-ss",Math.max(0,a*.1).toString(),"-vframes","1","-s",`${s}x${s}`]})).toString("base64")}static async duration(e){return fe.getDuration(e)}};var _e=null,Jr=false;async function pa(){if(Jr)return _e;Jr=true;let n=e=>{typeof e=="function"&&(_e=e);};try{n(Vo("sharp"));}catch{_e=null;}if(!_e)try{let e=await import('sharp');n(e.default??e);}catch{_e=null;}return _e}function Hr(n,e){let t=new Uint8Array(n*n),r=n/2,s=n/2,i=n/10,o=[[i,i],[n-i,i],[i,n-i],[n-i,n-i]];for(let a=0;a<n;a++)for(let d=0;d<n;d++){let c=false;if(e==="circle"){let l=d-r,u=a-s;c=l*l+u*u<=r*r;}else if(e==="rounded"){let l=d>=i&&d<n-i&&a>=0&&a<n,u=d>=0&&d<n&&a>=i&&a<n-i,f=false;for(let v of o){let b=d-v[0],T=a-v[1];if(b*b+T*T<=i*i){f=true;break}}c=l||u||f;}else if(e==="oval"){let l=(d-r)/(n/2),u=(a-s)/(n/3);c=l*l+u*u<=1;}t[a*n+d]=c?255:0;}return t}var Vr=2e4,Fn=(n,e)=>{let t=typeof n=="number"&&Number.isFinite(n)?n:0,r=typeof e=="number"&&Number.isFinite(e)?e:0;if(!(t<=0||r<=0)&&(t>Vr||r>Vr||t*r>Rr().maxImagePixels))throw new Error(`Image too large to decode safely: ${t}x${r}`)},zr=(n,e)=>{if(!Number.isInteger(n)||!Number.isInteger(e)||n<=0||e<=0)throw new Error(`Invalid resize target: ${n}x${e}`);Fn(n,e);},ma=n=>{if(n.length>=24&&n.readUInt32BE(0)===2303741511)return {width:n.readUInt32BE(16),height:n.readUInt32BE(20)};if(n.length>=10&&n.toString("ascii",0,3)==="GIF")return {width:n.readUInt16LE(6),height:n.readUInt16LE(8)};if(n.length>=26&&n.toString("ascii",0,2)==="BM")return {width:n.readInt32LE(18),height:Math.abs(n.readInt32LE(22))};if(n.length>=30&&n.toString("ascii",0,4)==="RIFF"&&n.toString("ascii",8,12)==="WEBP"){let e=n.toString("ascii",12,16);if(e==="VP8X")return {width:1+(n.readUIntLE(24,3)&16777215),height:1+(n.readUIntLE(27,3)&16777215)};if(e==="VP8 "&&n.length>=30)return {width:n.readUInt16LE(26)&16383,height:n.readUInt16LE(28)&16383}}},se=n=>{let e=ma(n);return e!==void 0&&Fn(e.width,e.height),n},Dn=class{sharp;constructor(e){this.sharp=e;}async thumbnail(e){let t=this.sharp;se(e);let r=t(e).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE,{fit:"cover"});return (await r.metadata()).format==="gif"&&(r=t(e,{pages:1}).resize(P.THUMBNAIL.SIZE,P.THUMBNAIL.SIZE)),(await r.jpeg({quality:P.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}async resize(e,t,r){zr(t,r);let s=this.sharp(se(e)),i=await s.metadata();return Fn(i.width,i.height),s.resize(t,r,{fit:"cover"}).png().toBuffer()}async toJpeg(e){let t=this.sharp,r=se(await R.toBuffer(e)),s=await t(r).metadata();if(!s.format)throw new Error("Invalid image type: format could not be determined");return s.format==="webp"||s.format==="png"?t(r).jpeg().toBuffer():r}async resizeForSticker(e,t,r="default"){let s=this.sharp,i=P.STICKER.SIZE,o=s(se(e)).resize(i,i,{fit:"contain",background:{r:0,g:0,b:0,alpha:0}});if(r!=="default"){let a=Buffer.from(Hr(i,r)),d=s(a,{raw:{width:i,height:i,channels:1}});o=o.joinChannel(await d.png().toBuffer());}return o.webp({quality:t}).toBuffer()}},Bn=class{async thumbnail(e){let t=P.THUMBNAIL.SIZE,r=await Jimp.fromBuffer(se(e));r.cover({w:t,h:t});let s=await r.getBuffer("image/jpeg",{quality:P.THUMBNAIL.QUALITY});return Buffer.from(s).toString("base64")}async resize(e,t,r){zr(t,r);let s=await Jimp.fromBuffer(se(e));s.cover({w:t,h:r});let i=await s.getBuffer("image/png");return Buffer.from(i)}async toJpeg(e){let t=await R.toBuffer(e);try{let s=await(await Jimp.fromBuffer(se(t))).getBuffer("image/jpeg");return Buffer.from(s)}catch{return t}}async resizeForSticker(e,t,r="default"){let s=P.STICKER.SIZE,i=await Jimp.fromBuffer(se(e));if(i.contain({w:s,h:s}),r!=="default"){let d=Hr(s,r),c=new Jimp({width:s,height:s,color:255});for(let l=0;l<s;l++)for(let u=0;u<s;u++)d[l*s+u]===255&&c.setPixelColor(4294967295,u,l);i.mask(c);}let o=Buffer.from(await i.getBuffer("image/png")),a=Math.max(1,Math.min(100,t));return Q(o,"png","webp","Jimp WebP conversion",["-vcodec","libwebp","-q:v",`${a}`,"-preset","default"])}},tt=null;async function Yt(){if(tt)return tt;let n=await pa();return n?tt=new Dn(n):(console.warn("\x1B[33m%s\x1B[0m","[media-process] Jimp is slow. For faster performance, run: npm install sharp"),tt=new Bn),tt}var V=class{static async thumbnail(e){return (await Yt()).thumbnail(e)}static async resize(e,t,r){return (await Yt()).resize(e,t,r)}static async toJpeg(e){return (await Yt()).toJpeg(e)}static async resizeForSticker(e,t,r="default"){return (await Yt()).resizeForSticker(e,t,r)}};var Le=class n{static defaultMetadata={packageName:"Zaileys Library",authorName:"https://github.com/zeative/zaileys"};static setDefaultMetadata(e){e&&(n.defaultMetadata={...n.defaultMetadata,...e});}static getDefaultMetadata(){return {...n.defaultMetadata}}static async create(e,t){try{let r=await R.toBuffer(e),s=await $(r);if(!s)throw new Error("Unable to detect file type");let i=t?.quality||P.STICKER.DEFAULT_QUALITY,o=q.isAnimated(s.mime),a=t?.shape||"default",d=s.mime==="image/webp"?r:o?await this.processAnimated(r,s.mime,i):await V.resizeForSticker(r,i,a),c=this.createExifMetadata(t),l=new ga.Image;await l.load(d),l.exif=c;let u=await l.save(null);return Buffer.isBuffer(u)?u:Buffer.from(u)}catch(r){throw new Error(`Sticker creation failed: ${r instanceof Error?r.message:String(r)}`)}}static createExifMetadata(e){let t=e?.pack??e?.packageName??e?.packname??n.defaultMetadata.pack??n.defaultMetadata.packageName??n.defaultMetadata.packname??"Zaileys Library",r=e?.author??e?.authorName??e?.publisher??n.defaultMetadata.author??n.defaultMetadata.authorName??n.defaultMetadata.publisher??"https://github.com/zeative/zaileys",s={"sticker-pack-id":Ht(),"sticker-pack-name":t,"sticker-pack-publisher":r,emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},i=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(s),"utf8"),a=Buffer.concat([i,o]);return a.writeUIntLE(o.length,14,4),a}static async processAnimated(e,t,r){let s=P.STICKER.SIZE,i=P.STICKER.FPS,o=`scale=${s}:${s}:force_original_aspect_ratio=decrease,fps=${i},pad=${s}:${s}:(ow-iw)/2:(oh-ih)/2:color=0x00000000,format=rgba`,a=Math.max(1,Math.min(100,r));return Q(e,this.getExtension(t),"webp","Animated sticker processing",async d=>{let c=P.STICKER.MAX_DURATION;try{c=Math.min(await Z.duration(d),P.STICKER.MAX_DURATION);}catch{console.warn("Using default duration:",P.STICKER.MAX_DURATION);}let l=Number.isFinite(a)?Math.round(a):60,u=Number.isFinite(c)&&c>0?Math.min(c,P.STICKER.MAX_DURATION):P.STICKER.MAX_DURATION;return ["-vcodec","libwebp","-vf",o,"-q:v",String(l),"-loop","0","-preset","default","-an","-t",String(u),"-compression_level",String(P.STICKER.COMPRESSION_LEVEL)]})}static getExtension(e){return e===P.MIME.GIF?"gif":e.startsWith(P.MIME.VIDEO)?"mp4":"tmp"}};var Qt=class{static async create(e){try{let t=await R.toBuffer(e),r=await $(t);if(!r)throw new Error("Unable to detect file type");let s;return r.mime.startsWith(P.MIME.VIDEO)?s=await Z.thumbnail(t):q.isMedia(r.mime)?s=await V.thumbnail(t):s="",{document:t,mimetype:r.mime,ext:r.ext,fileName:Ht(),jpegThumbnail:s}}catch(t){throw new Error(`Document creation failed: ${t instanceof Error?t.message:String(t)}`)}}};var we=class{input;constructor(e){this.input=e;}get audio(){return {toOpus:()=>ye.toOpus(this.input),toMp3:()=>ye.toMp3(this.input),convert:(e="opus")=>ye.convert(this.input,e),waveform:()=>ye.waveform(this.input)}}get video(){return {toMp4:()=>Z.toMp4(this.input),thumbnail:()=>Z.thumbnail(this.input)}}get image(){return {toJpeg:()=>V.toJpeg(this.input),thumbnail:async()=>{let e=await R.toBuffer(this.input);return V.thumbnail(e)},resize:async(e,t)=>{let r=await R.toBuffer(this.input);return V.resize(r,e,t)}}}get sticker(){return {create:e=>Le.create(this.input,e)}}get document(){return {create:()=>Qt.create(this.input)}}get thumbnail(){return {get:async()=>{let e=await R.toBuffer(this.input),t=await $(e);if(!t||!q.isMedia(t.mime))throw new Error("Invalid media type: expected image or video");return t.mime.startsWith(P.MIME.VIDEO)?Z.thumbnail(this.input):V.thumbnail(e)}}}async toBuffer(){return R.toBuffer(this.input)}};var Yr=async(n,e)=>{let{buffer:t}=await B(n),r;try{r=await new we(t).audio.toOpus();}catch(o){throw new p("MEDIA_LOAD_FAILED",`audio() transcode failed: ${o.message}`,{cause:o})}let s=e?.ptt??true,i={audio:r,ptt:s};if(s)try{let{waveform:o,seconds:a}=await new we(t).audio.waveform();i.waveform=o,e?.seconds===void 0&&(i.seconds=a);}catch{}return e?.seconds!==void 0&&(i.seconds=e.seconds),i};var Qr=10,W="__zaileysRelayMessage",Wn="__zaileysHeaderMedia",nt="__zaileysRequireGroupJid",Zt="__zaileysBypassDownload",Xt="__zaileysStatusMedia",ie=n=>typeof n=="string"&&n.length>0,fa=n=>{let e=n.text;if(!ie(e)||e.trim().length===0)throw new p("INVALID_OPTIONS","button text must be a non-empty string");return e},ha=(n,e)=>{let t=n.type??"reply";if(t==="location"){let s=n.text;return {name:"send_location",buttonParamsJson:JSON.stringify(ie(s)?{display_text:s}:{})}}let r=fa(n);if(t==="reply"){let s=n.id;if(!ie(s))throw new p("INVALID_OPTIONS","reply button requires a non-empty id");if(e.has(s))throw new p("INVALID_OPTIONS",`duplicate button id: ${s}`);return e.add(s),{name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:r,id:s})}}if(t==="url"){let s=n.url;if(!ie(s))throw new p("INVALID_OPTIONS","url button requires a non-empty url");let i=n.webview===true;return {name:"cta_url",buttonParamsJson:JSON.stringify({display_text:r,url:s,merchant_url:s,landing_page_url:s,webview_interaction:i})}}if(t==="copy"){let s=n.code;if(!ie(s))throw new p("INVALID_OPTIONS","copy button requires a non-empty code");return {name:"cta_copy",buttonParamsJson:JSON.stringify({display_text:r,id:s,copy_code:s})}}if(t==="call"){let s=n.phone;if(!ie(s))throw new p("INVALID_OPTIONS","call button requires a non-empty phone");return {name:"cta_call",buttonParamsJson:JSON.stringify({display_text:r,id:s,phone_number:s})}}if(t==="reminder"||t==="cancel-reminder"){let s=n.id;return {name:t==="reminder"?"cta_reminder":"cta_cancel_reminder",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}if(t==="address"){let s=n.id;return {name:"address_message",buttonParamsJson:JSON.stringify({display_text:r,id:ie(s)?s:r})}}throw new p("INVALID_OPTIONS",`unknown button type: ${String(t)}`)},ya=n=>{let e={};if(n?.bottomSheet){let t=n.bottomSheet;e.bottom_sheet={...t.buttonsLimit!==void 0?{in_thread_buttons_limit:t.buttonsLimit}:{},...t.dividers!==void 0?{divider_indices:t.dividers}:{},...t.listTitle!==void 0?{list_title:t.listTitle}:{},...t.buttonTitle!==void 0?{button_title:t.buttonTitle}:{}};}if(n?.limitedTimeOffer){let t=n.limitedTimeOffer;e.limited_time_offer={...t.text!==void 0?{text:t.text}:{},...t.url!==void 0?{url:t.url}:{},...t.copyCode!==void 0?{copy_code:t.copyCode}:{},...t.expiresAt!==void 0?{expiration_time:t.expiresAt}:{}};}return Object.keys(e).length>0?JSON.stringify(e):""},Un=n=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","buttons() requires at least one button");if(n.length>Qr)throw new p("INVALID_OPTIONS",`buttons() accepts at most ${Qr} buttons`);let e=new Set;return n.map(t=>ha(t,e))},Ne=(n,e)=>{let t=Un(n),r={body:{text:e?.text&&e.text.length>0?e.text:" "},nativeFlowMessage:{buttons:t,messageParamsJson:ya(e)}};e?.footer&&e.footer.length>0&&(r.footer={text:e.footer});let s=e?.image?{kind:"image",src:e.image}:e?.video?{kind:"video",src:e.video}:void 0;return (e?.title&&e.title.length>0||e?.subtitle&&e.subtitle.length>0||s)&&(r.header={title:e?.title??"",subtitle:e?.subtitle??"",hasMediaAttachment:s!==void 0}),s!==void 0?{[W]:{interactiveMessage:r},[Wn]:s}:{[W]:{interactiveMessage:r}}};var Zr=10,jn="__zaileysCardsMedia",Xr=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","carousel() requires at least one card");if(n.length>Zr)throw new p("INVALID_OPTIONS",`carousel() accepts at most ${Zr} cards`);let t=[],r=n.map((o,a)=>{let d={body:{text:o.body&&o.body.length>0?o.body:" "}};o.buttons&&o.buttons.length>0&&(d.nativeFlowMessage={buttons:Un(o.buttons),messageParamsJson:""}),o.footer&&o.footer.length>0&&(d.footer={text:o.footer});let c=o.image?{kind:"image",src:o.image}:o.video?{kind:"video",src:o.video}:void 0;return (o.title&&o.title.length>0||o.subtitle&&o.subtitle.length>0||c)&&(d.header={title:o.title??"",subtitle:o.subtitle??"",hasMediaAttachment:c!==void 0}),c&&t.push({...c,index:a}),d}),s={body:{text:e?.text&&e.text.length>0?e.text:" "},carouselMessage:{cards:r}};return t.length>0?{[W]:{interactiveMessage:s},[jn]:t}:{[W]:{interactiveMessage:s}}};var es=(n,e,t)=>{let r=new Int32Array(n.length).fill(-1),s=[];for(let i=0;i<n.length;i+=1){if(n[i-1]==="\\")continue;let o=n[i];if(o===e)s.push(i);else if(o===t){let a=s.pop();a!==void 0&&(r[a]=i);}}return r},va=n=>{let e=[],t="",r=0,s=1,i=0,o=0,a=[],d=es(n,"(",")"),c=es(n,"<",">");for(let l=0;l<n.length;l++)if(n[l]==="["&&n[l-1]!=="\\")a.push(l);else if(n[l]==="]"&&(n[l+1]==="("||n[l+1]==="<")){let u=a.pop();if(u==null)continue;let v=n[l+1]==="<",b=(v?c:d)[l+1]??-1;if(b<0)continue;let T=b+1,O=n.slice(u+1,l).trim(),A=n.slice(l+2,T-1).trim(),S,x;if(v){let[F="",z="",Ie="",He="",xe=""]=O.split("|").map(ze=>ze.trim());S=`zaileys_LATEX_${o++}`,x=`{{${S}}}${F||"image"}{{/${S}}}`,e.push({type:"latex",ie:{key:S,text:F,url:A,width:z,height:Ie,font_height:He,padding:xe}});}else O?(S=`zaileys_HYPERLINK_${i++}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"hyperlink",ie:{key:S,text:O,url:A}})):(S=`zaileys_CITATION_${s-1}`,x=`{{${S}}}${A}{{/${S}}}`,e.push({type:"citation",ie:{key:S,reference_id:String(s++),url:A}}));t+=n.slice(r,u)+x,r=T,l=T-1;}return t+=n.slice(r),{text:t,ie:e}},Ma=n=>n.ie.map(({type:e,ie:t})=>e==="hyperlink"?{key:t.key,metadata:{display_name:t.text,is_trusted:true,url:t.url,__typename:"GenAIInlineLinkItem"}}:e==="latex"?{key:t.key,metadata:{latex_expression:t.text,latex_image:{url:t.url,width:Number(t.width)||100,height:Number(t.height)||100},font_height:Number(t.font_height)||83.33333333333333,padding:Number(t.padding)||15,__typename:"GenAILatexItem"}}:{key:t.key,metadata:{reference_id:Number(t.reference_id),reference_url:t.url,reference_title:t.url,reference_display_name:t.url,sources:[],__typename:"GenAISearchCitationItem"}}),ts=5e3,ns=200,rs=1e5,ba=n=>{if(!Array.isArray(n)||n.length===0||!n.every(i=>Array.isArray(i)))throw new p("INVALID_OPTIONS","table must be a non-empty array of string rows");let[e,...t]=n;if(n.length>ts)throw new p("INVALID_OPTIONS",`table exceeds ${ts} rows`);let r=e.length;for(let i of t)i.length>r&&(r=i.length);if(r>ns)throw new p("INVALID_OPTIONS",`table exceeds ${ns} columns`);if(r*n.length>rs)throw new p("INVALID_OPTIONS",`table exceeds ${rs} cells`);let s=i=>[...i,...Array(r-i.length).fill("")];return [{is_header:true,cells:s(e)},...t.map(i=>({is_header:false,cells:s(i)}))]},Sa={0:"DEFAULT",1:"KEYWORD",2:"METHOD",3:"STR",4:"NUMBER",5:"COMMENT"},en=new Set(["break","case","catch","continue","debugger","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","true","false","null","undefined","class","const","let","super","extends","export","import","from","as","default","yield","static","constructor","async","await","get","set"]),Aa={javascript:en,js:en,typescript:en,ts:en},Ca=(n,e)=>{let t=Aa[e.toLowerCase()]??new Set,r=[],s=(o,a)=>{if(!o)return;let d=r[r.length-1];d&&d.highlightType===a?d.codeContent+=o:r.push({codeContent:o,highlightType:a});},i=0;for(;i<n.length;){let o=n[i];if(/\s/.test(o)){let a=i;for(;i<n.length&&/\s/.test(n[i]);)i++;s(n.slice(a,i),0);continue}if(o==="/"&&n[i+1]==="/"){let a=i;for(i+=2;i<n.length&&n[i]!==`
2
2
  `;)i++;s(n.slice(a,i),5);continue}if(o==='"'||o==="'"||o==="`"){let a=i,d=o;for(i++;i<n.length;)if(n[i]==="\\"&&i+1<n.length)i+=2;else if(n[i]===d){i++;break}else i++;s(n.slice(a,i),3);continue}if(/[0-9]/.test(o)){let a=i;for(;i<n.length&&/[0-9.]/.test(n[i]);)i++;s(n.slice(a,i),4);continue}if(/[a-zA-Z_$]/.test(o)){let a=i;for(;i<n.length&&/[a-zA-Z0-9_$]/.test(n[i]);)i++;let d=n.slice(a,i),c=0;if(t.has(d))c=1;else {let l=i;for(;l<n.length&&/\s/.test(n[l]);)l++;n[l]==="("&&(c=2);}s(d,c);continue}s(o,0),i++;}return r},K=(n,e)=>({view_model:{[Array.isArray(e)?"primitives":"primitive"]:e,__typename:`GenAI${n}LayoutViewModel`}}),ss="GenAIaeacdsnwHtmlPrimitive",Ea=n=>`<style>html,body{margin:0;padding:0;height:${n}px;max-height:${n}px;overflow:hidden}#__wrap{height:${n}px;overflow-y:auto;-webkit-overflow-scrolling:touch;touch-action:pan-y}</style><script>document.addEventListener("DOMContentLoaded",function(){var w=document.createElement("div");w.id="__wrap";while(document.body.firstChild)w.appendChild(document.body.firstChild);document.body.appendChild(w)});</script>`,Pa="https://github.com/zeative/zaileys",tn=(n,e)=>{if(!Array.isArray(n)||n.length===0)throw new p("INVALID_OPTIONS","text({ rich: true }) requires non-empty markdown content");let t=[],r=[];for(let o of n)if(o.type==="text"){let a=va(o.text),d=Ma(a);r.push({messageType:2,messageText:a.text}),t.push(K("Single",{text:a.text,...d.length>0?{inline_entities:d}:{},__typename:"GenAIMarkdownTextUXPrimitive"}));}else if(o.type==="html"){if(typeof o.html!="string"||o.html.trim().length===0)throw new p("INVALID_OPTIONS","html part requires a non-empty HTML string");t.push(K("Single",{payload:o.height===void 0?o.html:Ea(o.height)+o.html,trusted_sources:(o.trustedSources??[]).map(String),__typename:ss}));}else if(o.type==="code"){let a=o.language??"plaintext",d=Ca(o.content,a);r.push({messageType:5,codeMetadata:{codeLanguage:a,codeBlocks:d}}),t.push(K("Single",{language:a,code_blocks:d.map(c=>({content:c.codeContent,type:Sa[c.highlightType]})),__typename:"GenAICodeUXPrimitive"}));}else if(o.type==="table"){let a=ba(o.rows);r.push({messageType:4,tableMetadata:{title:"",rows:a.map(d=>({items:d.cells,...d.is_header?{isHeading:true}:{}}))}}),t.push(K("Single",{rows:a,__typename:"GenATableUXPrimitive"}));}else if(o.type==="image"){let a=Array.isArray(o.url)?o.url:[o.url];if(a.length===0)throw new p("INVALID_OPTIONS","image requires at least one url");r.push({messageType:1,gridImageMetadata:{gridImageUrl:{imagePreviewUrl:a[0]},imageUrls:a.map(d=>({imagePreviewUrl:d,imageHighResUrl:d,sourceUrl:Pa}))}});for(let d of a)t.push(K("Single",{media:{url:d,mime_type:"image/png"},imagine_type:"IMAGE",status:{status:"READY"},__typename:"GenAIImaginePrimitive"}));}else if(o.type==="video"){let a=Array.isArray(o.url)?o.url:[o.url];if(a.length===0)throw new p("INVALID_OPTIONS","video requires at least one url");r.push({messageType:2,messageText:"[ CANNOT_LOAD_VIDEO - zaileys ]"});for(let d of a)t.push(K("Single",{media:{url:d,mime_type:"video/mp4",duration:o.duration??0},imagine_type:"ANIMATE",status:{status:"READY"},__typename:"GenAIImaginePrimitive"}));}else if(o.type==="product"){let a=Array.isArray(o.products),d=a?o.products:[o.products];if(d.length===0)throw new p("INVALID_OPTIONS","product requires at least one item");r.push({messageType:2,messageText:"[ CANNOT_LOAD_PRODUCT - zaileys ]"});let c=d.map(l=>({title:l.title,brand:l.brand??"",price:l.price??"",sale_price:l.salePrice??"",product_url:l.url??"",image:{url:l.image??""},additional_images:[{url:l.icon??""}],__typename:"GenAIProductItemCardPrimitive"}));t.push(a?K("HScroll",c):K("Single",c[0]));}else if(o.type==="reels"){let a=Array.isArray(o.reels)?o.reels:[o.reels];if(a.length===0)throw new p("INVALID_OPTIONS","reels requires at least one item");r.push({messageType:9,contentItemsMetadata:{contentType:1,itemsMetadata:a.map(d=>({reelItem:{title:d.username??"",profileIconUrl:d.profileUrl??"",thumbnailUrl:d.thumbnail??"",videoUrl:d.url??""}}))}}),t.push(K("HScroll",a.map(d=>({reels_url:d.url??"",thumbnail_url:d.thumbnail??"",creator:d.username??d.title??"",avatar_url:d.profileUrl??"",reels_title:d.title??"",likes_count:d.likes??0,shares_count:d.shares??0,view_count:d.views??0,reel_source:d.source??"IG",is_verified:!!d.verified,__typename:"GenAIReelPrimitive"}))));}else if(o.type==="post"){let a=Array.isArray(o.posts)?o.posts:[o.posts];if(a.length===0)throw new p("INVALID_OPTIONS","post requires at least one item");r.push({messageType:2,messageText:"[ CANNOT_LOAD_POST - zaileys ]"}),t.push(K("HScroll",a.map(d=>({title:d.title??"",subtitle:d.subtitle??"",username:d.username??"",profile_picture_url:d.profileUrl??"",is_verified:!!d.verified,thumbnail_url:d.thumbnail??"",post_caption:d.caption??"",likes_count:d.likes??0,comments_count:d.comments??0,shares_count:d.shares??0,post_url:d.url??"",post_deeplink:d.deeplink??"",source_app:d.source??"INSTAGRAM",footer_label:d.footer??"",footer_icon:d.icon??"",is_carousel:a.length>1,orientation:d.orientation??"LANDSCAPE",post_type:d.postType??"VIDEO",__typename:"GenAIPostPrimitive"}))));}else if(o.type==="tip")r.push({messageType:2,messageText:o.text}),t.push(K("Single",{text:o.text,__typename:"GenAIMetadataTextPrimitive"}));else {let a=Array.isArray(o.prompts)?o.prompts:[o.prompts];if(a.length===0)throw new p("INVALID_OPTIONS","suggest requires at least one prompt");t.push(K("ActionRow",a.map(d=>({prompt_text:d,prompt_type:"SUGGESTED_PROMPT",__typename:"GenAIFollowUpSuggestionPillPrimitive"}))));}e?.footer&&e.footer.length>0&&t.push(K("Single",{text:e.footer,__typename:"GenAIMetadataTextPrimitive"}));let s=(e?.sources??[]).map(([o,a,d])=>({source_type:"THIRD_PARTY",source_display_name:d??"",source_subtitle:"AI",source_url:a??"",favicon:{url:o??"",mime_type:"image/jpeg",width:16,height:16}})),i={messageContextInfo:{deviceListMetadata:{},deviceListMetadataVersion:2,botMetadata:{messageDisclaimerText:e?.title??"",richResponseSourcesMetadata:{sources:s}}},botForwardedMessage:{message:{richResponseMessage:{messageType:1,submessages:r,unifiedResponse:{data:Buffer.from(JSON.stringify({response_id:randomUUID(),sections:t})).toString("base64")},contextInfo:{forwardingScore:1,isForwarded:true,forwardedAiBotMessageInfo:{botJid:"0@bot"},forwardOrigin:4}}}}};return {[W]:i}};var qn=(n,e={})=>{if(typeof n!="string"||n.trim().length===0)throw new p("INVALID_OPTIONS","htmlApp() requires a non-empty HTML string");if((e.device??"android")==="android"){let t=[];e.text!==void 0&&t.push({type:"text",text:e.text}),t.push({type:"html",html:n,...e.trustedSources===void 0?{}:{trustedSources:e.trustedSources},...e.height===void 0?{}:{height:e.height}});let r=tn(t,{...e.text===void 0?{}:{title:e.text},...e.footer===void 0?{}:{footer:e.footer}});return e.bypassDownload!==false&&(r[Zt]=true),r}if(e.fallbackUrl===void 0)throw new p("INVALID_OPTIONS",`htmlApp() cannot render inline HTML on "${e.device}"; pass fallbackUrl to send a webview button instead`);return Ne([{type:"url",text:e.fallbackButtonText??"Buka",url:e.fallbackUrl,webview:true}],{text:e.text??"",...e.footer===void 0?{}:{footer:e.footer}})};var ka=/^:::([a-zA-Z]+)\s*$/,Ta=/^:::\s*$/,is=/^```(\w*)\s*$/,os=/^!\[[^\]]*\]\(([^)]+)\)\s*$/,Ia=/^[\s|:-]*$/,xa=n=>Ia.test(n)&&n.includes("--"),nn=n=>n.split("|").map(e=>e.trim()),$n=n=>{let e={};for(let t of nn(n)){let r=t.indexOf(":");if(r===-1)continue;let s=t.slice(0,r).trim().toLowerCase(),i=t.slice(r+1).trim();s.length>0&&(e[s]=i);}return e},ve=n=>{if(n===void 0||n.trim().length===0)return;let e=Number(n);return Number.isNaN(e)?void 0:e},ds=n=>n==="true"||n==="1"||n==="yes",as=n=>{let e=n.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())},Oa=n=>{let e=$n(n),t=e.title;if(t===void 0||t.length===0)return null;let r={title:t};return e.price&&(r.price=e.price),e.sale&&(r.salePrice=e.sale),e.saleprice&&(r.salePrice=e.saleprice),e.brand&&(r.brand=e.brand),e.url&&(r.url=e.url),e.image&&(r.image=e.image),e.icon&&(r.icon=e.icon),r},Ra=n=>{let e=$n(n),t={};e.user&&(t.username=e.user),e.username&&(t.username=e.username),e.title&&(t.title=e.title),e.profile&&(t.profileUrl=e.profile),e.thumb&&(t.thumbnail=e.thumb),e.url&&(t.url=e.url);let r=ve(e.likes);r!==void 0&&(t.likes=r);let s=ve(e.shares);s!==void 0&&(t.shares=s);let i=ve(e.views);return i!==void 0&&(t.views=i),e.source&&(t.source=e.source),"verified"in e&&(t.verified=ds(e.verified)),t},_a=n=>{let e=$n(n),t={};e.user&&(t.username=e.user),e.username&&(t.username=e.username),e.title&&(t.title=e.title),e.subtitle&&(t.subtitle=e.subtitle),e.profile&&(t.profileUrl=e.profile),e.thumb&&(t.thumbnail=e.thumb),e.caption&&(t.caption=e.caption);let r=ve(e.likes);r!==void 0&&(t.likes=r);let s=ve(e.comments);s!==void 0&&(t.comments=s);let i=ve(e.shares);return i!==void 0&&(t.shares=i),e.url&&(t.url=e.url),e.source&&(t.source=e.source),e.footer&&(t.footer=e.footer),e.icon&&(t.icon=e.icon),"verified"in e&&(t.verified=ds(e.verified)),t},La=(n,e)=>{let t=e.map(r=>r.replace(/^[-*]\s*/,"").trim()).filter(r=>r.length>0);if(n==="suggest"){let r=t.flatMap(s=>nn(s)).filter(s=>s.length>0);return r.length>0?{type:"suggest",prompts:r}:null}if(n==="tip")return t.length>0?{type:"tip",text:t.join(`
3
3
  `)}:null;if(n==="image")return t.length>0?{type:"image",url:t.length===1?t[0]:t}:null;if(n==="video"){if(t.length===0)return null;let r=t.map(o=>nn(o)[0]??"").filter(o=>o.length>0);if(r.length===0)return null;let s=ve(nn(t[0])[1]),i={type:"video",url:r.length===1?r[0]:r};return s!==void 0&&(i.duration=s),i}if(n==="product"){let r=t.map(Oa).filter(s=>s!==null);return r.length>0?{type:"product",products:r.length===1?r[0]:r}:null}if(n==="reels"){let r=t.map(Ra);return r.length>0?{type:"reels",reels:r}:null}if(n==="post"){let r=t.map(_a);return r.length>0?{type:"post",posts:r}:null}return null},cs=n=>{let e=n.replace(/\r\n/g,`
4
4
  `).split(`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zaileys",
3
3
  "description": "Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API",
4
- "version": "4.15.0",
4
+ "version": "4.15.1",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "./dist/index.cjs",