zaileys 4.2.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -1
- package/dist/index.mjs +2 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
`||n==="\r",Ws=n=>{let e=[],t="",r=null,s=false,i=false,o=true;for(let a=0;a<n.length;a+=1){let c=n[a];if(s){t+=c,s=false,i=true,o=false;continue}if(c==="\\"&&r!==null){s=true;continue}if(r!==null){c===r?r=null:t+=c,o=false;continue}if((c==='"'||c==="'")&&o){r=c,i=true,o=false;continue}if(Fs(c)){i&&(e.push(t),t="",i=false),o=true;continue}t+=c,i=true,o=false;}return i&&e.push(t),e},Us=(n,e)=>{for(let t of e)if(t.length>0&&n.startsWith(t))return t;return null},js=n=>({matched:false,args:[],flags:{},json:void 0,raw:n});function Dt(n,e){let t=Us(n,e);if(t===null)return js(n);let r=n.slice(t.length),s=Ws(r),i={matched:true,args:[],flags:{},json:void 0,raw:n};if(s.length===0)return i.name="",i;i.name=(s[0]??"").toLowerCase();let o=false;for(let a=1;a<s.length;a+=1){let c=s[a];if(c!==void 0){if(c.startsWith("--")){let d=c.slice(2);if(d.length===0){i.args.push(c);continue}let u=d.indexOf("=");if(u!==-1){let y=d.slice(0,u),p=d.slice(u+1);i.flags[y]=p;continue}let l=s[a+1];l!==void 0&&!l.startsWith("--")?(i.flags[d]=l,a+=1):i.flags[d]=true;continue}if(!o&&Ds(c)){let d=Bs(c);d.ok&&(i.json=d.value,o=true);}i.args.push(c);}}return i}var Ks=n=>{let e=n.trim().split(/\s+/).filter(t=>t.length>0).map(t=>t.toLowerCase());if(e.length===0)throw new b("INVALID_COMMAND_NAME","empty command segment in spec");return e},ze=n=>n.join(" "),Se=class{paths=new Map;defs=[];maxDepth=1;register(e,t){if(e.trim().length===0)throw new b("INVALID_COMMAND_NAME","command spec must not be empty");let r=e.split("|").map(a=>Ks(a)),s=r[0],i=r.slice(1).map(a=>ze(a)),o={name:ze(s),aliases:i,parts:s,handler:t};for(let a of r){let c=ze(a);if(this.paths.has(c))throw new b("DUPLICATE_COMMAND",`command "${c}" is already registered`)}for(let a of r)this.paths.set(ze(a),o),a.length>this.maxDepth&&(this.maxDepth=a.length);this.defs.push(o);}resolve(e){if(!e.matched||e.name===void 0||e.name.length===0)return;let t=[e.name.toLowerCase(),...e.args.map(s=>s.toLowerCase())],r=Math.min(this.maxDepth,t.length);for(let s=r;s>=1;s-=1){let i=t.slice(0,s).join(" "),o=this.paths.get(i);if(o!==void 0)return {def:o,args:e.args.slice(s-1)}}}list(){return [...this.defs]}};async function Bt(n,e,t){let r=-1,s={error:void 0,thrown:false},i=async o=>{if(o<=r)throw new b("MIDDLEWARE_ERROR","next() called multiple times");if(r=o,o===n.length){try{await t();}catch(c){throw s.error=c,s.thrown=true,c}return}let a=n[o];try{await a(e,()=>i(o+1));}catch(c){throw s.thrown||c instanceof b?c:new b("MIDDLEWARE_ERROR","middleware threw during execution",{cause:c})}};await i(0);}function Ft(n){if(n.prefixes.length===0)return {detach(){}};let e=s=>{let i=Dt(s.text,n.prefixes);if(!i.matched)return;let o=n.registry.resolve(i);if(o===void 0)return;let a={command:o.def.name,args:o.args,flags:i.flags,json:i.json,raw:i.raw},c=n.buildContext(a,s);Promise.resolve(Bt(n.middleware,c,()=>o.def.handler(c))).catch(d=>{let u=d instanceof b?d:new b("HANDLER_ERROR","command handler failed",{cause:d});n.logger.error(u,"command dispatch failed");});},t=n.onText(e),r=false;return {detach(){r||(r=true,t());}}}var E=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysAutomationError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var qs=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n)),X=class{now;sleep;perJidRatePerMs;perJidCapacity;global;perJid=new Map;constructor(e,t={}){if(!(e.perSec>0))throw new E("RATE_LIMIT_INVALID","perSec must be greater than zero");if(e.perJidPerSec!==void 0&&!(e.perJidPerSec>0))throw new E("RATE_LIMIT_INVALID","perJidPerSec must be greater than zero");if(e.burst!==void 0&&!(e.burst>0))throw new E("RATE_LIMIT_INVALID","burst must be greater than zero");this.now=t.now??Date.now,this.sleep=t.sleep??qs;let r=e.burst??e.perSec;this.global={tokens:r,capacity:r,ratePerMs:e.perSec/1e3,last:this.now()},e.perJidPerSec!==void 0&&(this.perJidRatePerMs=e.perJidPerSec/1e3,this.perJidCapacity=e.perJidPerSec);}async acquire(e){await this.consume(this.global),e!==void 0&&this.perJidRatePerMs!==void 0&&await this.consume(this.bucketFor(e));}bucketFor(e){let t=this.perJid.get(e);if(t)return t;let r=this.perJidCapacity??1,s={tokens:r,capacity:r,ratePerMs:this.perJidRatePerMs??1,last:this.now()};return this.perJid.set(e,s),s}consume(e){if(this.refill(e),e.tokens>=1)return e.tokens-=1,Promise.resolve();let t=(1-e.tokens)/e.ratePerMs;return e.tokens-=1,this.sleep(t)}refill(e){let t=this.now(),r=t-e.last;r>0&&(e.tokens=Math.min(e.capacity,e.tokens+r*e.ratePerMs),e.last=t);}};var Js={"group.create":6e4,"group.join":3e4,"group.participants":1e4,"group.update":3e3,"community.create":12e4,"community.join":3e4,"community.update":3e3,"newsletter.create":12e4,"newsletter.follow":2e3,"newsletter.update":3e3},$s=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n));function Wt(n={},e={}){let t=n.enabled??true,r=e.now??Date.now,s=e.sleep??$s,i={...Js,...n.intervalsMs??{}},o=new Map,a=new Map,c=async(d,u)=>{let l=i[d]??0,y=o.get(d);if(y!==void 0&&l>0){let p=l-(r()-y);p>0&&await s(p);}return o.set(d,r()),u()};return {run(d,u){if(!t)return u();let y=(a.get(d)??Promise.resolve()).then(()=>c(d,u),()=>c(d,u));return a.set(d,y.then(()=>{},()=>{})),y}}}var Vs={maxRetries:0,backoffMs:()=>0},Gs=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n)),Me=class{concurrency;retry;sleep;pending=[];active=0;idleWaiters=[];constructor(e={},t={}){this.concurrency=e.concurrency??1,this.retry=e.retry??Vs,this.sleep=t.sleep??Gs;}add(e){return new Promise((t,r)=>{this.pending.push({run:()=>this.execute(e).then(t,r)}),this.pump();})}onIdle(){return this.active===0&&this.pending.length===0?Promise.resolve():new Promise(e=>{this.idleWaiters.push(e);})}pump(){for(;this.active<this.concurrency&&this.pending.length>0;){let e=this.pending.shift();if(!e)break;this.active++,e.run().finally(()=>{this.active--,this.pump(),this.settleIdle();});}}settleIdle(){if(this.active===0&&this.pending.length===0&&this.idleWaiters.length>0){let e=this.idleWaiters;this.idleWaiters=[];for(let t of e)t();}}async execute(e){let t=0;for(;;)try{return await e()}catch(r){if(t>=this.retry.maxRetries)throw r;t+=1,await this.sleep(this.retry.backoffMs(t));}}};var Hs=n=>n instanceof Error?n:new Error(typeof n=="string"?n:String(n));async function Ut(n,e,t,r={}){let s={sent:[],failed:[]};if(n.length===0)return s;let i=r.rateLimitPerSec??5,o={};t.now&&(o.now=t.now),t.sleep&&(o.sleep=t.sleep);let a=t.limiter??new X({perSec:i},o),c=r.retry,d=t.sleep?{sleep:t.sleep}:{},u=c?new Me({concurrency:1,retry:c},d):void 0,l=n.length,y=0;for(let p of n){await a.acquire(p);let g=()=>e(t.sendTo(p)).then(()=>{});try{u?await u.add(g):await g(),s.sent.push(p),y+=1,r.onProgress?.(y,l,p,!0);}catch(w){s.failed.push({jid:p,error:Hs(w)}),y+=1,r.onProgress?.(y,l,p,false);}}return s}var zs=1e3,Ae=class{constructor(e,t,r){this.getSocket=e;this.throttleEnabled=t?.enabled??true,this.minIntervalMs=t?.minIntervalMs??zs,this.now=r?.now??Date.now;}throttleEnabled;minIntervalMs;now;lastSent=new Map;requireSocket(){let e=this.getSocket();if(!e)throw new E("NOT_CONNECTED","client not connected");return e}throttled(e,t){if(!this.throttleEnabled||this.minIntervalMs<=0)return false;let r=`${e}:${t??"global"}`,s=this.lastSent.get(r),i=this.now();return s!==void 0&&i-s<this.minIntervalMs?true:(this.lastSent.set(r,i),false)}async update(e,t){let r=this.requireSocket();if(!this.throttled(e,t))try{await(t===void 0?r.sendPresenceUpdate(e):r.sendPresenceUpdate(e,t));}catch(s){throw new E("PRESENCE_FAILED",`presence update '${e}' failed`,{cause:s})}}scheduleClear(e,t){let r=this.getSocket();if(!r)return;let s=setTimeout(()=>{r.sendPresenceUpdate("paused",e).catch(()=>{});},t);typeof s.unref=="function"&&s.unref();}async online(){await this.update("available");}async offline(){await this.update("unavailable");}async typing(e,t){await this.update("composing",e),t!==void 0&&this.scheduleClear(e,t);}async recording(e,t){await this.update("recording",e),t!==void 0&&this.scheduleClear(e,t);}};var Zs={set:(n,e)=>setTimeout(n,e),clear:n=>clearTimeout(n)},Xs=n=>typeof n=="object"&&n!==null&&typeof n.recipient=="string"&&typeof n.content=="object",Ce=class{store;sendSnapshot;now;timer;logger;acquire;memory=new Map;timers=new Map;constructor(e){this.store=e.store,this.sendSnapshot=e.sendSnapshot,this.now=e.now??(()=>Date.now()),this.timer=e.timer??Zs,this.logger=e.logger,this.acquire=e.acquire;}async scheduleAt(e,t){let r=e.getTime();if(Number.isNaN(r))throw new E("SCHEDULE_INVALID","scheduleAt requires a valid Date");let s=await this.evaluate(t),i=crypto.randomUUID(),o={id:i,fireAt:r,recipient:s.recipient,payload:s};return await this.persist(o),this.arm(o),{id:i,cancel:()=>{this.cancel(i);}}}async loadPending(){let e=this.store.listScheduledJobs;if(!e){for(let r of this.memory.values())this.timers.has(r.id)||this.arm(r);return}let t;try{t=await e.call(this.store);}catch(r){this.logger?.warn(r,"scheduler loadPending failed");return}for(let r of t)this.timers.has(r.id)||(this.memory.set(r.id,r),this.arm(r));}dispose(){for(let e of this.timers.values())this.timer.clear(e);this.timers.clear();}cancel(e){let t=this.timers.get(e);t!==void 0&&(this.timer.clear(t),this.timers.delete(e)),this.memory.delete(e),this.remove(e);}arm(e){let t=Math.max(0,e.fireAt-this.now()),r=this.timer.set(()=>{this.fire(e);},t);this.timers.set(e.id,r);}async fire(e){if(this.timers.delete(e.id),Xs(e.payload))try{this.acquire&&await this.acquire(),await this.sendSnapshot(e.payload);}catch(t){this.logger?.warn(t,"scheduled send failed; retaining job for retry");return}this.memory.delete(e.id),await this.remove(e.id);}async persist(e){let t=this.store.saveScheduledJob;if(t){await t.call(this.store,e);return}this.memory.set(e.id,e);}async remove(e){let t=this.store.deleteScheduledJob;if(t)try{await t.call(this.store,e);}catch(r){this.logger?.warn(r,"scheduler deleteScheduledJob failed");}this.memory.delete(e);}async evaluate(e){let t,r=0,s={sendMessage:async(o,a,c)=>{if(r+=1,r>1)throw new E("SCHEDULE_INVALID","scheduling multi-part messages (e.g. album) is not supported; schedule a single message");return t=c?{recipient:o,content:a,options:c}:{recipient:o,content:a},{key:{remoteJid:o,id:"scheduled-snapshot",fromMe:true}}},relayMessage:async()=>{throw new E("SCHEDULE_INVALID","scheduling interactive/relayed content is not supported; schedule a text or media message")}},i=$.create(s,"");try{await e(i);}catch(o){throw o instanceof E?o:new E("SCHEDULE_INVALID","scheduled builder evaluation failed",{cause:o})}if(!t)throw new E("SCHEDULE_INVALID","scheduled builder produced no content");return t}};var Q="[zaileys]",Qs="The saved session looks invalid or corrupted (connection keeps closing before it authenticates). Delete the auth folder (default: ./.zaileys) and run again to scan a fresh QR / request a new pairing code.";function Un(n){switch(n.kind){case "connecting":return `${Q} Connecting to WhatsApp (session: ${n.sessionId})...`;case "qr":return `${Q} Scan the QR code above with WhatsApp > Linked devices to authenticate.`;case "pairing-code":return `${Q} Pairing code: ${n.code} \u2014 enter it in WhatsApp > Linked devices > Link with phone number.`;case "connected":return `${Q} Connected as ${n.id}.`;case "reconnecting":{let e=(n.delayMs/1e3).toFixed(1),t=`${Q} Connection lost (${n.reason}). Reconnecting in ${e}s (attempt ${n.attempt})...`;return n.invalidCredsSuspected?`${t}
|
|
12
12
|
${Q} ${Qs}`:t}case "disconnect":return n.willReconnect?null:`${Q} Disconnected (${n.reason}).`;default:return null}}var Wn=false,ei=["Closing session:","Closing open session","Closing stale open session","Opening session:","Removing old closed session","Migrating session to:","Session already closed","Decrypted message with closed session","Failed to decrypt message with any known session","Session error:"],ti=n=>typeof n[0]=="string"&&ei.some(e=>n[0].startsWith(e));function jn(){if(Wn)return;Wn=true;let n=e=>{let t=console[e].bind(console);console[e]=(...r)=>{ti(r)||t(...r);};};n("info"),n("warn"),n("error");}var m=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysStoreError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var ri="./.zaileys/auth",si=n=>n.replace(/[^a-zA-Z0-9._-]/g,e=>`_${e.charCodeAt(0).toString(16)}`),be=n=>typeof n=="object"&&n!==null&&n.code==="ENOENT",Ze=class{basePath;closed=false;constructor(e){this.basePath=e?.basePath??ri;}signal={read:async(e,t)=>{this.assertOpen();let r={};return await Promise.all(t.map(async s=>{let i=this.signalPath(e,s);try{let o=await fs$1.promises.readFile(i,"utf8");r[s]=JSON.parse(o,lo.BufferJSON.reviver);}catch(o){if(be(o))return;throw new m("STORE_READ_FAILED",`failed to read ${i}`,{cause:o})}})),r},write:async e=>{this.assertOpen();let t=[];for(let r of Object.keys(e)){let s=e[r];if(!s)continue;let i=this.signalDir(r);await fs$1.promises.mkdir(i,{recursive:true});for(let o of Object.keys(s)){let a=s[o],c=this.signalPath(r,o);a===null?t.push(fs$1.promises.unlink(c).catch(d=>{if(!be(d))throw new m("STORE_WRITE_FAILED",`failed to unlink ${c}`,{cause:d})})):a!==void 0&&t.push(this.atomicWrite(c,JSON.stringify(a,lo.BufferJSON.replacer)));}}await Promise.all(t);},delete:async(e,t)=>{this.assertOpen(),await Promise.all(t.map(async r=>{let s=this.signalPath(e,r);try{await fs$1.promises.unlink(s);}catch(i){if(!be(i))throw new m("STORE_WRITE_FAILED",`failed to unlink ${s}`,{cause:i})}}));},clear:async()=>{this.assertOpen(),await fs$1.promises.rm(this.basePath,{recursive:true,force:true});},close:async()=>{this.closed=true;}};creds={readCreds:async()=>{this.assertOpen();try{let e=await fs$1.promises.readFile(this.credsPath(),"utf8");return JSON.parse(e,lo.BufferJSON.reviver)}catch(e){if(be(e))return;throw new m("STORE_READ_FAILED","failed to read creds.json",{cause:e})}},writeCreds:async e=>{this.assertOpen(),await fs$1.promises.mkdir(this.basePath,{recursive:true}),await this.atomicWrite(this.credsPath(),JSON.stringify(e,lo.BufferJSON.replacer));},deleteCreds:async()=>{this.assertOpen();try{await fs$1.promises.unlink(this.credsPath());}catch(e){if(!be(e))throw new m("STORE_WRITE_FAILED","failed to delete creds.json",{cause:e})}}};credsPath(){return Ee__default.default.join(this.basePath,"creds.json")}signalDir(e){return Ee__default.default.join(this.basePath,"signal",String(e))}signalPath(e,t){return Ee__default.default.join(this.signalDir(e),`${si(t)}.json`)}async atomicWrite(e,t){let r=Ee__default.default.join(Ee__default.default.dirname(e),`tmp-${crypto.randomBytes(8).toString("hex")}`);try{await fs$1.promises.writeFile(r,t,"utf8"),await fs$1.promises.rename(r,e);}catch(s){throw await fs$1.promises.unlink(r).catch(()=>{}),new m("STORE_WRITE_FAILED",`failed to write ${e}`,{cause:s})}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","FileAuthStore is closed")}};function Kn(n,e){let t=n.signal,s=lo.makeCacheableSignalKeyStore({get:(o,a)=>t.read(o,a),set:o=>t.write(o),clear:()=>t.clear()},e?.logger??void 0),i={read:async(o,a)=>await s.get(o,[...a]),write:async o=>{await s.set(o);},delete:async(o,a)=>{await t.delete(o,a);let c={},d={};for(let u of a)d[u]=null;c[o]=d,await s.set(c);},clear:async()=>{let o=s.clear;typeof o=="function"?await o.call(s):await t.clear();},close:()=>t.close()};return {creds:n.creds,signal:i}}function qn(n,e){return {get:async(t,r)=>await n.read(t,r),set:async t=>{await n.write(t);},clear:async()=>{await n.clear();}}}var oi=429;function Jn(n){if(n===oi)return "rate-limited";switch(n){case lo.DisconnectReason.loggedOut:return "logged-out";case lo.DisconnectReason.forbidden:return "forbidden";case lo.DisconnectReason.connectionLost:return "connection-lost";case lo.DisconnectReason.multideviceMismatch:return "multi-device-mismatch";case lo.DisconnectReason.connectionClosed:return "connection-closed";case lo.DisconnectReason.connectionReplaced:return "connection-replaced";case lo.DisconnectReason.badSession:return "bad-session";case lo.DisconnectReason.unavailableService:return "unavailable-service";case lo.DisconnectReason.restartRequired:return "restart-required";default:return "unknown"}}function Te(n){return n==="logged-out"||n==="connection-replaced"||n==="forbidden"}function Xe(n){return n==="rate-limited"}function $n(n){return n==="logged-out"||n==="connection-replaced"||n==="forbidden"||n==="bad-session"}function Al(n){return !Te(n)}var Qe={enabled:true,maxQrAttempts:5,maxPairingAttempts:3,pairingCooldownMs:6e4},ai=3e5;function Vn(n={}){let e=n.enabled??Qe.enabled,t=n.maxQrAttempts??Qe.maxQrAttempts,r=n.maxPairingAttempts??Qe.maxPairingAttempts,s=n.pairingCooldownMs??Qe.pairingCooldownMs,i=0,o=0,a=0,c=y=>y<=0?0:Math.min(s*y,ai);return {evaluate:(y,p)=>{if(!e)return {allowed:true,waitMs:0,attempts:y==="pairing"?o:i,max:Number.POSITIVE_INFINITY};if(y==="pairing"){if(o>=r)return {allowed:false,reason:"budget-exhausted",waitMs:0,attempts:o,max:r};let g=c(o),w=p-a;return o>0&&w<g?{allowed:false,reason:"cooldown",waitMs:g-w,attempts:o,max:r}:{allowed:true,waitMs:0,attempts:o,max:r}}return i>=t?{allowed:false,reason:"budget-exhausted",waitMs:0,attempts:i,max:t}:{allowed:true,waitMs:0,attempts:i,max:t}},record:(y,p)=>{y==="pairing"?(o+=1,a=p):i+=1;},reset:()=>{i=0,o=0,a=0;},get enabled(){return e},get qrAttempts(){return i},get pairingAttempts(){return o}}}var ci=/[\s\-()+]/g;function di(n){return typeof n!="string"?"":n.replace(ci,"")}function li(n){if(!n||typeof n!="string"||!n.trim())throw new Error("phoneNumber is required");let e=di(n);if(!/^\d+$/.test(e))throw new Error("phoneNumber must be E.164 with country code");if(e.length<8||e.length>15)throw new Error("phoneNumber must be E.164 with country code");return e}function Gn(n){let e=li(n.phoneNumber),t=n.ttlMs??6e4;return {phoneNumber:e,async requestCode(r){let s;try{s=await r.requestPairingCode(e);}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`failed to request pairing code: ${o}`)}return {code:s,expiresAt:Date.now()+t}}}}function pi(n){return !n||typeof n!="string"||!n.trim()?Promise.reject(new Error("qr string is required")):new Promise(e=>{ui__default.default.generate(n,{small:true},t=>e(t));})}async function Hn(n,e=t=>{process.stdout.write(t);}){let t=await pi(n);e(t+`
|
|
13
13
|
`);}var oe={enabled:true,maxAttempts:Number.POSITIVE_INFINITY,initialDelayMs:3e3,maxDelayMs:6e4,jitterFactor:.2,rateLimitedDelayMs:3e5};function zn(n,e){let t=n?.enabled??oe.enabled,r=n?.maxAttempts??oe.maxAttempts,s=n?.initialDelayMs??oe.initialDelayMs,i=n?.maxDelayMs??oe.maxDelayMs,o=n?.jitterFactor??oe.jitterFactor,a=n?.rateLimitedDelayMs??oe.rateLimitedDelayMs,c=e?.random??Math.random,d=0;return {next:y=>{if(!t||Te(y))return null;let p=d+1;if(p>r)return null;if(d=p,Xe(y))return {attempt:p,delayMs:a};let g=Math.pow(2,p-1),w=Math.min(i,s*g),C=1+(c()*2-1)*o,A=w*C,K=Math.min(i,Math.max(0,A));return {attempt:p,delayMs:Math.round(K)}},reset:()=>{d=0;},get attempts(){return d}}}var mi={idle:["connecting"],connecting:["qr-pending","pairing-pending","connected","reconnecting","disconnecting","disconnected"],"qr-pending":["connecting","connected","reconnecting","disconnecting","disconnected"],"pairing-pending":["connecting","connected","reconnecting","disconnecting","disconnected"],connected:["disconnecting","reconnecting","disconnected"],reconnecting:["connecting","disconnecting","disconnected"],disconnecting:["disconnected"],disconnected:["idle","connecting","reconnecting"]};function Yn(n="idle"){let e=n,t=new Set,r=s=>mi[e].includes(s);return {get state(){return e},canTransition:r,transition(s){if(!r(s))throw new Error(`invalid state transition: ${e} -> ${s}`);let i=e;e=s;for(let o of t)try{o(i,s);}catch{}},onChange(s){return t.add(s),()=>{t.delete(s);}}}}var jt=n=>`${n.remoteJid??""}|${n.id??""}|${n.fromMe?1:0}`,et=class{messages=new Map;messagesByJid=new Map;chats=new Map;contacts=new Map;presence=new Map;boundSocket;listeners=new Map;closed=false;async saveMessage(e){this.assertOpen();let t=jt(e.key);this.messages.set(t,structuredClone(e));let r=e.key.remoteJid??"",s=this.messagesByJid.get(r);s||(s=new Set,this.messagesByJid.set(r,s)),s.add(t);}async getMessage(e){this.assertOpen();let t=this.messages.get(jt(e));return t?structuredClone(t):void 0}async listMessages(e,t){this.assertOpen();let r=this.messagesByJid.get(e);if(!r)return [];let s=[];for(let o of r){let a=this.messages.get(o);a&&s.push(a);}s.sort((o,a)=>Number(a.messageTimestamp)-Number(o.messageTimestamp));let i=s;if(typeof t?.before=="number"){let o=t.before;i=i.filter(a=>Number(a.messageTimestamp)<o);}return typeof t?.limit=="number"&&(i=i.slice(0,t.limit)),i.map(o=>structuredClone(o))}async saveChat(e){this.assertOpen();let t=e.id;t&&this.chats.set(t,structuredClone(e));}async getChat(e){this.assertOpen();let t=this.chats.get(e);return t?structuredClone(t):void 0}async listChats(e){this.assertOpen();let t=[];for(let r of this.chats.values())e?.archived===true&&r.archived!==true||t.push(structuredClone(r));return t}async saveContact(e){this.assertOpen(),this.contacts.set(e.id,structuredClone(e));}async getContact(e){this.assertOpen();let t=this.contacts.get(e);return t?structuredClone(t):void 0}async listContacts(){return this.assertOpen(),Array.from(this.contacts.values(),e=>structuredClone(e))}async savePresence(e,t){this.assertOpen(),this.presence.set(e,structuredClone(t));}async getPresence(e){this.assertOpen();let t=this.presence.get(e);return t?structuredClone(t):void 0}bind(e){this.assertOpen(),this.boundSocket=e;let t=(...c)=>{let u=c[0]?.messages;if(Array.isArray(u))for(let l of u)this.saveMessage(l).catch(()=>{});},r=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d){let l=this.messages.get(jt(u.key));if(l){let y={...l,...u.update};this.saveMessage(y).catch(()=>{});}}},s=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d)this.saveChat(u).catch(()=>{});},i=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d){let y={...this.chats.get(u.id)??{},...u};this.saveChat(y).catch(()=>{});}},o=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d)this.saveContact(u).catch(()=>{});},a=(...c)=>{let d=c[0];if(d?.presences)for(let u of Object.keys(d.presences)){let l=d.presences[u];l&&this.savePresence(u,l).catch(()=>{});}};this.listeners.set("messages.upsert",t),this.listeners.set("messages.update",r),this.listeners.set("chats.upsert",s),this.listeners.set("chats.update",i),this.listeners.set("contacts.upsert",o),this.listeners.set("presence.update",a);for(let[c,d]of this.listeners)e.ev.on(c,d);}async clear(){this.assertOpen(),this.messages.clear(),this.messagesByJid.clear(),this.chats.clear(),this.contacts.clear(),this.presence.clear();}async close(){if(!this.closed){if(this.closed=true,this.boundSocket?.ev.off)for(let[e,t]of this.listeners)this.boundSocket.ev.off(e,t);return this.listeners.clear(),this.boundSocket=void 0,Promise.resolve()}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","MemoryMessageStore is closed")}};var gi=["silent","fatal","error","warn","info","debug","trace"];function hi(n){if(n)return n;let e=process.env.ZAILEYS_DEBUG;return e===void 0?"silent":e==="1"?"info":gi.includes(e)?e:"silent"}function yi(n={}){let e=hi(n.level),t=fi__default.default({level:e});return n.sessionId!==void 0?t.child({sessionId:n.sessionId}):t}var Zn=["debug","info","warn","error","fatal"];function wi(n){if(n===null||typeof n!="object")return false;for(let e of Zn)if(typeof n[e]!="function")return false;return true}function Pe(){}function vi(n){let e={debug:Pe,info:Pe,warn:Pe,error:Pe,fatal:Pe};for(let t of Zn){let r=n[t];typeof r=="function"&&(e[t]=r.bind(n));}return e}function Kt(n,e){return n===void 0?e??yi():wi(n)?n:vi(n)}var _l=Object.freeze(["HISTORY_SYNC_NOTIFICATION","APP_STATE_SYNC_KEY_SHARE","LID_MIGRATION_MAPPING_SYNC","PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE"]),Xn=n=>{let e=n.requestId!=null,t=n.messages.filter(r=>{if(e)return false;let s=r.messageStubParameters;if(Array.isArray(s)){for(let i of s)if(typeof i=="string"&&i.startsWith("requestId:"))return false}return true});return {...n,messages:t}};var Si=new Set(["offer","ringing"]),Mi=new Set(["timeout","reject","accept","terminate"]),Qn=n=>{let e=n instanceof Date?n.getTime():Date.parse(String(n));return Number.isFinite(e)?e:0},er=n=>typeof n.id!="string"||n.id.length===0||!Si.has(n.status)?null:{kind:"incoming",callId:n.id,from:n.from,isGroup:n.isGroup===true,isVideo:n.isVideo===true,timestamp:Qn(n.date),status:n.status},tr=n=>typeof n.id!="string"||n.id.length===0||!Mi.has(n.status)?null:{kind:"ended",callId:n.id,from:n.from,isGroup:n.isGroup===true,isVideo:n.isVideo===true,timestamp:Qn(n.date),status:n.status};var x=n=>typeof n=="string"&&n.length>0,Ai=n=>{let e={};return typeof n.subject=="string"&&(e.subject=n.subject),typeof n.desc=="string"&&(e.description=n.desc),typeof n.announce=="boolean"&&(e.announce=n.announce),typeof n.restrict=="boolean"&&(e.restrict=n.restrict),typeof n.ephemeralDuration=="number"&&(e.ephemeralDuration=n.ephemeralDuration),e},nr=(n,e,t)=>n.filter(r=>x(r?.id)).map(r=>{let s={jid:r.id},i=r.lid??r.pn??r.phoneNumber;return x(i)&&(s.participantAlt=i),x(e)&&(s.authorPn=e),x(t)&&(s.authorUsername=t),s.isAdmin=r.admin==="admin"||r.admin==="superadmin",s}),rr=n=>x(n?.id)?{groupId:n.id,update:Ai(n),timestamp:Date.now()}:null,sr=n=>{if(!x(n?.groupId)||!x(n?.participant))return null;let e={groupId:n.groupId,participant:n.participant,label:typeof n.label=="string"?n.label:"",timestamp:typeof n.messageTimestamp=="number"?n.messageTimestamp:Date.now()};return x(n.participantAlt)&&(e.participantAlt=n.participantAlt),e},Ci=new Set(["add","invite","invite-link"]),Ei=new Set(["remove","leave"]),ir=n=>{if(!x(n?.id)||!Ci.has(n.action)||!Array.isArray(n.participants)||n.participants.length===0)return null;let e=nr(n.participants,n.authorPn,n.authorUsername);if(e.length===0)return null;let t={groupId:n.id,participants:e,action:n.action,timestamp:Date.now()};return x(n.author)&&(t.by=n.author),t},or=n=>{if(!x(n?.id)||!Ei.has(n.action)||!Array.isArray(n.participants)||n.participants.length===0)return null;let e=nr(n.participants,n.authorPn,n.authorUsername);if(e.length===0)return null;let t={groupId:n.id,participants:e,action:n.action,timestamp:Date.now()};return x(n.author)&&(t.by=n.author),t};var ke=n=>typeof n!="string"||n.length===0?null:lo.jidNormalizedUser(n),V=n=>typeof n=="string"&&n.length>0?n:void 0,Pi=["@s.whatsapp.net","@c.us"],ki=n=>n.endsWith("@lid"),Ii=n=>Pi.some(e=>n.endsWith(e)),W=(n,e)=>{if(!n)return null;let t=V(n.participant)??n.remoteJid,r=ke(t);if(r===null)return null;let s=V(n.participantAlt)??V(n.remoteJidAlt),i=s!=null?ke(s):null,o=V(n.participantUsername)??V(n.remoteJidUsername),a={jid:r,isMe:n.fromMe===true},c=i!==null?[r,i]:[r],d=c.find(ki),u=c.find(Ii);d!==void 0&&(a.lid=d),u!==void 0&&(a.pn=u),o!==void 0&&(a.username=o);let l=V(e);return l!==void 0&&(a.pushName=l),a},ar=n=>{if(!n)return null;let e=n.stanzaId;if(typeof e!="string"||e.length===0)return null;let t=V(n.participant),r=V(n.remoteJid)??t,s={id:e};typeof r=="string"&&(s.remoteJid=r),typeof t=="string"&&(s.participant=t);let i={key:s},o=W(s);return o&&(i.sender=o),i},tt=n=>{if(!n)return {mentionedJids:[],mentionAll:false};let e=n.mentionedJid,t=Array.isArray(e)?e.filter(i=>typeof i=="string"):[],r=n.groupMentions,s=Array.isArray(r)&&r.length>0;return {mentionedJids:t,mentionAll:s}};var Ie=n=>lo.isJidGroup(n)===true,ae=n=>{if(n==null)return null;if(typeof n=="number")return Number.isFinite(n)?n:null;if(typeof n.toNumber=="function"){let e=n.toNumber();return Number.isFinite(e)?e:null}return null};var Oi=["quick_reply","cta_url","cta_call","button_click"],xi=["list_select","single_select"],j=n=>typeof n=="string"&&n.length>0,dr=n=>{let e=typeof n.pushName=="string"?n.pushName:void 0;return W(n.key,e)},lr=n=>ae(n.messageTimestamp)??0,ur=(n,e)=>{if(!j(n))return null;try{let t=JSON.parse(n);return t!==null&&typeof t=="object"?t:null}catch{return e?.debug({paramsJson:n},"interactive: failed to parse nativeFlow paramsJson"),null}},nt=(n,e)=>{for(let t of e){let r=n[t];if(j(r))return r}},pr=(n,e)=>{let t=n.message;if(!t)return null;let r=t.buttonsResponseMessage;if(r&&j(r.selectedButtonId))return qt(n,r.selectedButtonId,r.selectedDisplayText);let s=t.templateButtonReplyMessage;if(s&&j(s.selectedId))return qt(n,s.selectedId,s.selectedDisplayText);let i=t.interactiveResponseMessage?.nativeFlowResponseMessage;if(i&&j(i.name)&&Oi.includes(i.name)){let o=ur(i.paramsJson,e.logger);if(!o)return null;let a=nt(o,["id","button_id"]);return a===void 0?null:qt(n,a,nt(o,["display_text"])??null)}return null},qt=(n,e,t)=>{let r=dr(n);if(!r||!n.key)return null;let s={key:n.key,buttonId:e,sender:r,timestamp:lr(n)};return j(t)&&(s.buttonText=t),s},mr=(n,e)=>{let t=n.message;if(!t)return null;let r=t.listResponseMessage,s=r?.singleSelectReply?.selectedRowId;if(j(s))return cr(n,s,r?.title);let i=t.interactiveResponseMessage?.nativeFlowResponseMessage;if(i&&j(i.name)&&xi.includes(i.name)){let o=ur(i.paramsJson,e.logger);if(!o)return null;let a=nt(o,["row_id","id"]);return a===void 0?null:cr(n,a,nt(o,["title"])??null)}return null},cr=(n,e,t)=>{let r=dr(n);if(!r||!n.key)return null;let s={key:n.key,rowId:e,sender:r,timestamp:lr(n)};return j(t)&&(s.title=t),s};var Ri=new Set(["available","unavailable","composing","recording","paused"]),Li=n=>n instanceof Date?n.getTime():typeof n=="number"&&Number.isFinite(n)?n:0,fr=n=>n.status!=="complete"&&n.status!=="paused"?null:{syncType:String(n.syncType),status:n.status,explicit:n.explicit===true},Jt=n=>{if(n.source==="connection-update"){let t=n.reachoutTimeLock;return t.isActive!==true?null:{reason:"reachout-timelock",retryAt:Li(t.timeEnforcementEnds)}}if(n.capInfo.capping_status!=="CAPPED")return null;let e={reason:"chat-limit-reached"};return typeof n.capInfo.used_quota=="number"&&(e.usedQuota=n.capInfo.used_quota),typeof n.capInfo.total_quota=="number"&&(e.totalQuota=n.capInfo.total_quota),e},gr=n=>{if(typeof n.id!="string"||n.id.length===0)return [];let e=[];for(let[t,r]of Object.entries(n.presences??{})){let s=r?.lastKnownPresence;typeof s!="string"||!Ri.has(s)||e.push({jid:n.id,participant:t,status:s});}return e},Oe=n=>{let e=n.payload.id;if(typeof e!="string"||e.length===0)return null;let t=Date.now();switch(n.source){case "reaction":{let r={action:"reaction",newsletterId:e,timestamp:t};return typeof n.payload.server_id=="string"&&(r.serverId=n.payload.server_id),typeof n.payload.reaction?.code=="string"&&(r.emoji=n.payload.reaction.code),r}case "view":{let r={action:"view",newsletterId:e,timestamp:t};return typeof n.payload.server_id=="string"&&(r.serverId=n.payload.server_id),typeof n.payload.count=="number"&&(r.count=n.payload.count),r}case "participants":return {action:"participants",newsletterId:e,timestamp:t};case "settings":{let r={action:"settings",newsletterId:e,timestamp:t};return n.payload.update&&(r.update=n.payload.update),r}}};var _i=n=>{let e=n.match(/(https?:\/\/[^\s]+)/g);return e?e.map(t=>t.replace(/[.,;:!?]+$/,"")):[]},Di=n=>{let e=`${n.remoteJid??""}|${n.id??""}|${n.fromMe===true?"1":"0"}`,t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")},Bi=n=>{let e=lo.jidDecode(n);if(!e)return "unknown";let t=e.device;return t===void 0||t===0?"android":t===2?"ios":t===3?"web":t===4?"desktop":"unknown"},Fi=n=>n.trim().endsWith("?"),Wi=(n,e)=>e.length===0?false:e.some(t=>t.length>0&&n.startsWith(t)),Ui=(n,e)=>{if(e.length===0)return false;let t;try{t=lo.jidNormalizedUser(n);}catch{t=n;}return e.some(r=>{try{return lo.jidNormalizedUser(r)===t}catch{return r===n}})},ji=(n,e)=>{let t=async r=>r===void 0?false:Array.isArray(r)?r.includes(e):r(e);return {authors:()=>t(n?.authors),banned:()=>t(n?.banned)}},$t=n=>{let e=typeof n.key.remoteJid=="string"?n.key.remoteJid:null,t=e!==null&&Ie(e),r={uniqueId:Di(n.key),channelId:n.channelId,chatId:n.key.id??"",chatType:n.chatType,receiverId:n.receiverId,roomId:t?e:null,senderId:n.sender.pn??n.sender.jid,senderLid:n.sender.lid??null,senderName:n.sender.pushName??null,senderDevice:Bi(n.sender.jid),timestamp:typeof n.message.messageTimestamp=="number"?n.message.messageTimestamp*1e3:0,text:n.text,mentions:n.mentions,links:_i(n.text),isFromMe:n.key.fromMe===true,isGroup:t,isNewsletter:n.isNewsletter,isBroadcast:n.isBroadcast,isViewOnce:n.isViewOnce,isEphemeral:n.isEphemeral,isForwarded:n.isForwarded,isQuestion:Fi(n.text),isPrefix:Wi(n.text,n.prefixes),isTagMe:Ui(n.selfJid,n.mentions),isEdited:false,isDeleted:false,isPinned:false,isUnPinned:false,isBot:false,isSpam:false,isHideTags:false,isStatusMention:false,isGroupStatusMention:false,isStory:false,roomName:n.resolveRoomName,receiverName:n.resolveReceiverName,replied:n.resolveReplied,reply:n.reply,react:n.react,message:()=>n.message,citation:ji(n.citationConfig,n.sender.pn??n.sender.jid)};return n.media!==void 0&&(r.media=n.media),r};var Ki={image:"imageMessage",video:"videoMessage",audio:"audioMessage",document:"documentMessage",sticker:"stickerMessage"},qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[Ki[e]];if(r==null||typeof r!="object")return null;let s=r.mimetype;return typeof s=="string"&&s.length>0?s:null},yr=(n,e,t)=>async()=>{try{let{downloadMediaMessage:r}=await import('baileys'),s=await r(n,"buffer",{}),i=qi(n,e)??"application/octet-stream";return {buffer:s,mime:i,size:s.byteLength}}catch(r){throw t?.warn({error:r,kind:e,id:n.key?.id},"media download failed"),r instanceof Error?r:new Error("media download failed")}},wr=(n,e,t)=>async()=>{try{let{downloadMediaMessage:r}=await import('baileys');return await r(n,"stream",{})}catch(r){throw t?.warn({error:r,kind:e,id:n.key?.id},"media stream download failed"),r instanceof Error?r:new Error("media stream download failed")}};var it={image:"imageMessage",video:"videoMessage",audio:"audioMessage",document:"documentMessage",sticker:"stickerMessage"},vr=n=>{let e=n?.remoteJid;return typeof e=="string"&&e.length>0?e:""},h=n=>n!=null&&typeof n=="object"?n:null,v=n=>typeof n=="string"&&n.length>0?n:null,de=(...n)=>{for(let e of n){let t=v(e);if(t!=null)return t}return null},Ji=["ephemeralMessage","viewOnceMessage","viewOnceMessageV2","viewOnceMessageV2Extension","documentWithCaptionMessage","editedMessage"],Re=n=>{let e=n;for(let t=0;t<5;t++){let r=null;for(let s of Ji){let i=h(h(e[s])?.message);if(i!=null){r=i;break}}if(r==null)break;e=r;}return e},$i=n=>{let t=h(h(h(n.botForwardedMessage)?.message)?.richResponseMessage)??h(n.richResponseMessage);if(t==null)return null;let r=t.submessages;if(!Array.isArray(r))return null;let s=[];for(let o of r){let a=v(h(o)?.messageText);a!=null&&s.push(a);}let i=s.join(`
|
|
14
|
-
`).trim();return i.length>0?i:null},Vi=n=>{let e=h(n.templateMessage),t=h(e?.hydratedTemplate)??h(e?.hydratedFourRowTemplate);return v(t?.hydratedContentText)},Gi=n=>de(h(n.pollCreationMessage)?.name,h(n.pollCreationMessageV2)?.name,h(n.pollCreationMessageV3)?.name),Hi=n=>{let e=h(n.locationMessage)??h(n.liveLocationMessage);if(e==null)return null;let t=de(e.name,e.address);if(t!=null){let i=v(e.name),o=v(e.address);return i!=null&&o!=null&&i!==o?`${i} \u2014 ${o}`:t}let r=e.degreesLatitude,s=e.degreesLongitude;return typeof r=="number"&&typeof s=="number"?`${r}, ${s}`:null},zi=n=>{let e=v(h(n.contactMessage)?.displayName);if(e!=null)return e;let t=h(n.contactsArrayMessage),r=v(t?.displayName);if(r!=null)return r;let s=t?.contacts;if(Array.isArray(s)){let i=s.map(o=>v(h(o)?.displayName)).filter(o=>o!=null);if(i.length>0)return i.join(", ")}return null},Sr=n=>de(n.conversation,h(n.extendedTextMessage)?.text,$i(n),v(h(h(n.interactiveMessage)?.body)?.text),h(n.buttonsMessage)?.contentText,h(n.listMessage)?.description,Vi(n),Gi(n),Hi(n),zi(n)),Yi=n=>de(h(n.buttonsResponseMessage)?.selectedDisplayText,h(n.buttonsResponseMessage)?.selectedButtonId,h(n.templateButtonReplyMessage)?.selectedDisplayText,h(n.templateButtonReplyMessage)?.selectedId,h(n.listResponseMessage)?.title,h(h(n.listResponseMessage)?.singleSelectReply)?.selectedRowId,h(h(n.interactiveResponseMessage)?.body)?.text),Zi=n=>de(h(n.imageMessage)?.caption,h(n.videoMessage)?.caption,h(n.documentMessage)?.caption,h(n.documentMessage)?.fileName),R=n=>{if(typeof n=="number")return n;let e=ae(n);return typeof e=="number"?e:null},Xi=[["pollCreationMessage","poll"],["pollCreationMessageV2","poll"],["pollCreationMessageV3","poll"],["contactMessage","contact"],["contactsArrayMessage","contact"],["locationMessage","location"],["liveLocationMessage","live-location"],["eventMessage","event"],["buttonsMessage","buttons"],["listMessage","list"],["interactiveMessage","interactive"],["templateMessage","template"]],Vt=n=>{let e=h(n.pollCreationMessage)??h(n.pollCreationMessageV2)??h(n.pollCreationMessageV3);if(e!=null){let l=Array.isArray(e.options)?e.options:[];return {type:"poll",name:v(e.name),options:l.map(y=>v(h(y)?.optionName)).filter(y=>y!=null),selectableCount:R(e.selectableOptionsCount)??0}}let t=h(n.contactMessage);if(t!=null)return {type:"contact",displayName:v(t.displayName),vcard:v(t.vcard),contacts:[{displayName:v(t.displayName),vcard:v(t.vcard)}]};let r=h(n.contactsArrayMessage);if(r!=null){let l=Array.isArray(r.contacts)?r.contacts:[];return {type:"contact",displayName:v(r.displayName),vcard:null,contacts:l.map(y=>({displayName:v(h(y)?.displayName),vcard:v(h(y)?.vcard)}))}}let s=h(n.locationMessage);if(s!=null)return {type:"location",latitude:R(s.degreesLatitude),longitude:R(s.degreesLongitude),name:v(s.name),address:v(s.address),accuracy:R(s.accuracyInMeters),speed:R(s.speedInMps),caption:v(s.comment)};let i=h(n.liveLocationMessage);if(i!=null)return {type:"live-location",latitude:R(i.degreesLatitude),longitude:R(i.degreesLongitude),name:null,address:null,accuracy:R(i.accuracyInMeters),speed:R(i.speedInMps),caption:v(i.caption)};let o=h(n.eventMessage);if(o!=null){let l=h(o.location);return {type:"event",name:v(o.name),description:v(o.description),location:l!=null?de(l.name,l.address):null,startTime:R(o.startTime),endTime:R(o.endTime),isCanceled:o.isCanceled===true}}let a=h(n.buttonsMessage);if(a!=null){let l=Array.isArray(a.buttons)?a.buttons:[];return {type:"buttons",contentText:v(a.contentText),footerText:v(a.footerText),buttons:l.map(y=>({id:v(h(y)?.buttonId),text:v(h(h(y)?.buttonText)?.displayText)}))}}let c=h(n.listMessage);if(c!=null){let l=Array.isArray(c.sections)?c.sections:[];return {type:"list",title:v(c.title),description:v(c.description),buttonText:v(c.buttonText),sections:l.map(y=>{let p=Array.isArray(h(y)?.rows)?h(y).rows:[];return {title:v(h(y)?.title),rows:p.map(g=>({id:v(h(g)?.rowId),title:v(h(g)?.title),description:v(h(g)?.description)}))}})}}let d=h(n.interactiveMessage);if(d!=null){let l=h(d.nativeFlowMessage),y=Array.isArray(l?.buttons)?l.buttons:[];return {type:"interactive",title:v(h(d.header)?.title),body:v(h(d.body)?.text),footer:v(h(d.footer)?.text),buttons:y.map(p=>({name:v(h(p)?.name),params:v(h(p)?.buttonParamsJson)}))}}let u=h(n.templateMessage);if(u!=null){let l=h(u.hydratedTemplate)??h(u.hydratedFourRowTemplate),y=Array.isArray(l?.hydratedButtons)?l.hydratedButtons:[];return {type:"template",text:v(l?.hydratedContentText),buttons:y.map(p=>{let g=h(p),w=h(g?.quickReplyButton)??h(g?.urlButton)??h(g?.callButton);return {id:v(w?.id),text:v(w?.displayText)}})}}return null};var st=n=>{let e=h(n.message);if(e==null)return null;let t=Re(e);return Sr(t)??Yi(t)??Zi(t)},Gt=n=>{let e=n.message;if(e==null)return null;let t=e.extendedTextMessage?.contextInfo;if(t!=null)return t;for(let r of Object.values(it)){let s=e[r];if(s!=null&&typeof s=="object"){let i=s.contextInfo;if(i!=null)return i}}return null},Qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[it[e]];return r==null||typeof r!="object"?null:r},eo=n=>{let e=n.message;if(e==null)return false;if(e.viewOnceMessage!=null||e.viewOnceMessageV2!=null||e.viewOnceMessageV2Extension!=null)return true;for(let t of Object.values(it)){let r=e[t];if(r!=null&&typeof r=="object"&&r.viewOnce===true)return true}return false},to=(n,e)=>n.message?.ephemeralMessage!=null?true:typeof e?.expiration=="number"&&e.expiration>0,xe=n=>{let e=h(n);if(e==null)return "text";let t=Re(e);for(let r of Object.values(it))if(t[r]!=null)return r.replace("Message","");for(let[r,s]of Xi)if(t[r]!=null)return s;return "text"},no=async(n,e,t)=>{try{if(n==null||n.quotedMessage==null)return null;let r=n.stanzaId;if(typeof r!="string"||r.length===0)return null;if(e.resolveQuoted!=null&&t.length>0){let u=await e.resolveQuoted(r,t);if(u!=null&&u.message!=null){let l=st(u)??"",y=ce(u,e,xe(u.message),l);if(y!==null)return y}}let s=ar(n);if(s===null||typeof s.key.id!="string"||s.key.id.length===0)return null;let i=s.key.remoteJid;if(typeof i!="string"||i.length===0)return null;let o=s.key.participant;typeof o=="string"&&e.selfJid.length>0&&lo.jidNormalizedUser(o)===lo.jidNormalizedUser(e.selfJid)&&(s.key.fromMe=!0);let a=n.quotedMessage,c=Object.assign({key:s.key,message:a??null},s.sender?.pushName!=null?{pushName:s.sender.pushName}:{}),d=st(c)??"";return ce(c,e,xe(a),d)}catch{return null}},ce=(n,e,t,r,s)=>{let i=n.key;if(i==null)return null;let o=W(i,n.pushName??void 0);if(o===null)return null;let a=vr(i);if(a.length===0)return null;let c=Gt(n),d=Ie(a),u=a.endsWith("@broadcast"),l=a.endsWith("@newsletter"),y=c?.isForwarded===true||(c?.forwardingScore??0)>0,p=eo(n),g=to(n,c),w=e.channelId??"",C=e.receiverId??"",A=e.prefixes??[],K=()=>d&&e.resolveRoomName!=null?e.resolveRoomName(a):Promise.resolve(null),Fe=e.resolveReceiverName??(()=>Promise.resolve(null)),vt=()=>no(c,e,a),St=a.length>0?a:o.pn??o.jid,Mt=(Et,ts)=>e.reply==null?Promise.reject(new Error("zaileys: ctx.reply() requires a connected client")):e.reply(St,Et,ts,n),At=Et=>e.react==null?Promise.reject(new Error("zaileys: ctx.react() requires a connected client")):e.react(i,Et),{mentionedJids:Ct}=tt(c),Xt={message:n,key:i,channelId:w,receiverId:C,selfJid:e.selfJid,text:r,chatType:t,sender:o,mentions:Ct,isViewOnce:p,isEphemeral:g,isForwarded:y,isBroadcast:u,isNewsletter:l,prefixes:A,resolveRoomName:K,resolveReceiverName:Fe,resolveReplied:vt,reply:Mt,react:At},Qt=s!==void 0?{...Xt,media:s}:Xt;return $t(e.citationConfig!==void 0?{...Qt,citationConfig:e.citationConfig}:Qt)},Mr=(n,e)=>{let t=h(n.message);if(t==null)return null;let r=Re(t),s=Sr(r),i=Vt(r)??void 0;return s===null&&i===void 0?null:ce(n,e,xe(n.message),s??"",i)},Le=(n,e,t)=>{let r=Qi(e,n);if(r===null)return null;let s=typeof r.caption=="string"?r.caption:"",i=n,o=yr(e,n,t.logger),a=wr(e,n,t.logger),c={type:n,mimetype:typeof r.mimetype=="string"?r.mimetype:null,caption:typeof r.caption=="string"?r.caption:null,fileName:typeof r.fileName=="string"?r.fileName:null,fileSize:R(r.fileLength),ptt:r.ptt===true,buffer:async()=>(await o()).buffer,stream:a};return ce(e,t,i,s,c)},Ar=(n,e)=>Le("image",n,e),Cr=(n,e)=>Le("video",n,e),Er=(n,e)=>Le("audio",n,e),br=(n,e)=>Le("document",n,e),Tr=(n,e)=>Le("sticker",n,e),ro=(n,e)=>{try{return lo.jidNormalizedUser(n)===lo.jidNormalizedUser(e)}catch{return n===e}},Pr=(n,e)=>{if(n.key==null)return null;let r=Gt(n),{mentionedJids:s}=tt(r);if(s.length===0||!s.some(u=>ro(u,e.selfJid)))return null;let o=h(n.message);if(o==null)return null;let a=st(n)??"",c=Vt(Re(o))??void 0,d=ce(n,e,xe(n.message),a,c);return d===null?null:{...d,mentionedJids:s,selfJid:e.selfJid}},kr=(n,e)=>{let t=n.key;if(t==null)return null;let r=vr(t);if(r.length===0||!Ie(r))return null;let{mentionAll:s}=tt(Gt(n));if(!s)return null;let i=h(n.message);if(i==null)return null;let o=st(n)??"",a=Vt(Re(i))??void 0,c=ce(n,e,xe(n.message),o,a);return c===null?null:{...c,isMentionAll:true,selfJid:e.selfJid}};var ee=(n,e)=>{let t=ae(n);return t===null?e:t},so=n=>{if(!n)return "";if(typeof n.conversation=="string")return n.conversation;let e=n.extendedTextMessage?.text;if(typeof e=="string")return e;let t=n.imageMessage?.caption;if(typeof t=="string")return t;let r=n.videoMessage?.caption;if(typeof r=="string")return r;let s=n.documentMessage?.caption;return typeof s=="string"?s:""},io=n=>Array.isArray(n)?n.map(e=>Buffer.from(e).toString("hex")):[],Or=(n,e)=>{let t=n?.reaction,r=t?.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=t.text,o=typeof i=="string"&&i.length>0?i:null;return {key:r,emoji:o,sender:s,timestamp:ee(t.senderTimestampMs,0)}},xr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==lo.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);return s===null?null:{key:r,newContent:so(t.editedMessage),editedAt:ee(n.update.messageTimestamp,0),sender:s}},Rr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==lo.proto.Message.ProtocolMessage.Type.REVOKE)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=ke(n.key.remoteJid),o=ke(e.selfJid);return {key:r,deletedFor:i!==null&&o!==null&&i===o?"me":"everyone",sender:s,timestamp:ee(n.update.messageTimestamp,0)}},Lr=(n,e)=>{let t=n?.update?.pollUpdates?.[0],r=n?.update?.message?.pollUpdateMessage,s=W(n?.key,e.pushName);if(s===null)return null;if(t){let i=t.pollUpdateMessageKey;return i?{pollKey:i,selectedOptions:io(t.vote?.selectedOptions),voter:s,timestamp:ee(t.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}if(r){let i=r.pollCreationMessageKey;return i?{pollKey:i,selectedOptions:[],voter:s,timestamp:ee(r.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}return null};var ot=n=>Array.isArray(n)?n:[],oo=n=>{if(n==null||typeof n!="object")return null;let e=n.reachoutTimeLock;return e==null||typeof e!="object"?null:e};function Nr(n,e,t){let r=[],s=new Map,i=t.groupMetadata!=null?p=>{let g=s.get(p);if(g!==void 0)return g;let w=t.groupMetadata;if(w==null)return Promise.resolve(null);let C=w(p).then(A=>A?.subject??null).catch(()=>null);return s.set(p,C),C}:void 0,o={selfJid:t.selfJid,receiverId:t.receiverId??t.selfJid,...t.logger!=null?{logger:t.logger}:{},...t.channelId!=null?{channelId:t.channelId}:{},...t.prefixes!=null?{prefixes:t.prefixes}:{},...t.citationConfig!=null?{citationConfig:t.citationConfig}:{},...i!=null?{resolveRoomName:i}:{},...t.receiverName!=null?{resolveReceiverName:t.receiverName}:{},...t.resolveQuoted!=null?{resolveQuoted:t.resolveQuoted}:{},...t.sendReply!=null?{reply:t.sendReply}:{},...t.react!=null?{react:t.react}:{}},a=t.logger?{selfJid:t.selfJid,logger:t.logger}:{selfJid:t.selfJid},c={selfJid:t.selfJid},d=(p,g)=>{let w=(...C)=>{try{g(C[0]);}catch(A){t.logger?.warn(A,`inbound pipeline: handler for ${p} threw`);}};e.ev.on(p,w),r.push(()=>e.ev.off(p,w));},u=p=>{l(()=>Mr(p,o),g=>n.emit("text",g)),l(()=>Ar(p,o),g=>n.emit("image",g)),l(()=>Cr(p,o),g=>n.emit("video",g)),l(()=>Er(p,o),g=>n.emit("audio",g)),l(()=>br(p,o),g=>n.emit("document",g)),l(()=>Tr(p,o),g=>n.emit("sticker",g)),l(()=>Pr(p,o),g=>n.emit("mention",g)),l(()=>kr(p,o),g=>n.emit("mention-all",g)),l(()=>pr(p,a),g=>n.emit("button-click",g)),l(()=>mr(p,a),g=>n.emit("list-select",g));},l=(p,g)=>{let w;try{w=p();}catch(C){t.logger?.warn(C,"inbound pipeline: decoder threw");return}w!=null&&g(w);};d("messages.upsert",p=>{let g=Xn(p);for(let w of g.messages)t.ignoreMe===!0&&w.key?.fromMe===!0||u(w);}),d("messages.update",p=>{for(let g of ot(p))l(()=>xr(g,c),w=>n.emit("edit",w)),l(()=>Rr(g,c),w=>n.emit("delete",w)),l(()=>Lr(g,c),w=>n.emit("poll-vote",w));}),d("messages.reaction",p=>{for(let g of ot(p))l(()=>Or(g,c),w=>n.emit("reaction",w));}),d("groups.update",p=>{for(let g of ot(p))l(()=>rr(g),w=>n.emit("group-update",w));}),d("group-participants.update",p=>{let g=p;l(()=>ir(g),w=>n.emit("group-join",w)),l(()=>or(g),w=>n.emit("group-leave",w));}),d("group.member-tag.update",p=>{l(()=>sr(p),g=>n.emit("member-tag",g));}),d("call",p=>{for(let g of ot(p))l(()=>er(g),w=>n.emit("call-incoming",w)),l(()=>tr(g),w=>n.emit("call-ended",w));}),d("messaging-history.status",p=>{l(()=>fr(p),g=>n.emit("history-sync",g));}),d("presence.update",p=>{let g=(()=>{try{return gr(p)}catch(w){return t.logger?.warn(w,"inbound pipeline: decodePresence threw"),[]}})();for(let w of g)n.emit("presence",w);}),d("connection.update",p=>{let g=oo(p);g!==null&&l(()=>Jt({source:"connection-update",reachoutTimeLock:g}),w=>n.emit("limited",w));}),d("message-capping.update",p=>{l(()=>Jt({source:"message-capping",capInfo:p}),g=>n.emit("limited",g));}),d("newsletter.reaction",p=>{l(()=>Oe({source:"reaction",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter.view",p=>{l(()=>Oe({source:"view",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-participants.update",p=>{l(()=>Oe({source:"participants",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-settings.update",p=>{l(()=>Oe({source:"settings",payload:p}),g=>n.emit("newsletter",g));});let y=false;return {detach(){if(!y){y=true;for(let p of r)p();r.length=0;}}}}var at=class{inner=new events.EventEmitter;emitterLogger;constructor(e){this.emitterLogger=e?.logger,this.inner.setMaxListeners(0);}on(e,t){let r=this.wrap(e,t);this.tag(t,e,r),this.inner.on(e,r);let s=false;return ()=>{s||(s=true,this.inner.off(e,r),this.untag(t,e));}}off(e,t){let r=this.lookup(t,e);r&&(this.inner.off(e,r),this.untag(t,e));}emit(e,t){let r=this.inner.listeners(e).slice();for(let s of r)try{s(t);}catch(i){this.emitterLogger?.error(i,"listener threw");}}removeAllListeners(e){e===void 0?this.inner.removeAllListeners():this.inner.removeAllListeners(e);}listenerCount(e){return this.inner.listenerCount(e)}wrap(e,t){return r=>{try{t(r);}catch(s){this.emitterLogger?.error(s,"listener threw");}}}tag(e,t,r){this.tagMap(e).set(t,r);}untag(e,t){this.tagMap(e).delete(t);}lookup(e,t){return this.tagMap(e).get(t)}tagMap(e){let t=co,r=e,s=r[t];return s||(s=new Map,r[t]=s),s}},co=Symbol("zaileys.typed-ee.tag");var po="default",mo="qr",Dr=6e4,Br=class extends at{sessionId;auth;store;logger;authType;phoneNumber;cacheSignal;qrTerminal;statusLog;reconnectOptions;baileysExtra;machine=Yn();reconnectStrategy;authGuard;operationGuard;presenceThrottle;scheduleLimiter;authExhausted=false;_socket;reconnectTimer;listenerCleanup=[];inboundHandle;connectResolve;connectReject;pairingRequested=false;cachedSignalWrap=false;creds;credsLoadedAtConnect=false;openedThisRun=false;credsHintShown=false;disconnectEmittedFor=0;connectAttemptSeq=0;pendingDisconnectReason;usernameCache=new Map;_group;_privacy;_newsletter;_community;commandRegistry;commandMiddleware=[];commandPrefixes;citationConfig;ignoreMe;commandDispatcher;_presence;_scheduler;waVersion;versionWarming;constructor(e={}){super({logger:Kt(e.logger)}),this.sessionId=e.sessionId??po,this.logger=Kt(e.logger),this.authType=e.authType??mo,this.phoneNumber=e.phoneNumber,this.cacheSignal=e.cacheSignal??true,this.qrTerminal=e.qrTerminal??true,this.statusLog=e.statusLog??true,this.statusLog&&jn(),this.reconnectOptions=e.reconnect??{},this.baileysExtra=e.baileys??{},this.auth=e.auth??new Ze({basePath:`./.zaileys/auth/${this.sessionId}`}),this.store=e.store??new et,this.reconnectStrategy=zn(this.reconnectOptions),this.authGuard=Vn(e.authGuard),this.operationGuard=Wt(e.operationGuard),this.presenceThrottle=e.presence;let t=e.scheduleRateLimitPerSec??1;this.scheduleLimiter=t>0?new X({perSec:t}):void 0,this.commandPrefixes=fo(e.commandPrefix),this.citationConfig=e.citation,this.ignoreMe=e.ignoreMe??true,this.attachEmitterLogger(),(e.autoConnect??true)&&queueMicrotask(()=>{this.machine.state==="idle"&&this.warmVersion().finally(()=>{if(this.machine.state==="idle")try{this.connect().catch(r=>this.emitAutoConnectError(r));}catch(r){this.emitAutoConnectError(r);}});});}warmVersion(){if(this.waVersion)return Promise.resolve();if(this.versionWarming)return this.versionWarming;try{return typeof lo.fetchLatestBaileysVersion!="function"?Promise.resolve():(this.versionWarming=lo.fetchLatestBaileysVersion().then(({version:e})=>{this.waVersion=e;}).catch(e=>{this.logger.warn(e,"fetchLatestBaileysVersion failed; using bundled version");}),this.versionWarming)}catch{return Promise.resolve()}}emitAutoConnectError(e){let t=e instanceof Error?e:new Error(String(e));this.logger.error(t,"auto-connect failed"),this.listenerCount("error")>0&&this.emit("error",{sessionId:this.sessionId,error:t});}logStatus(e){if(!this.statusLog)return;let t=Un(e);t&&process.stderr.write(`${t}
|
|
14
|
+
`).trim();return i.length>0?i:null},Vi=n=>{let e=h(n.templateMessage),t=h(e?.hydratedTemplate)??h(e?.hydratedFourRowTemplate);return v(t?.hydratedContentText)},Gi=n=>de(h(n.pollCreationMessage)?.name,h(n.pollCreationMessageV2)?.name,h(n.pollCreationMessageV3)?.name),Hi=n=>{let e=h(n.locationMessage)??h(n.liveLocationMessage);if(e==null)return null;let t=de(e.name,e.address);if(t!=null){let i=v(e.name),o=v(e.address);return i!=null&&o!=null&&i!==o?`${i} \u2014 ${o}`:t}let r=e.degreesLatitude,s=e.degreesLongitude;return typeof r=="number"&&typeof s=="number"?`${r}, ${s}`:null},zi=n=>{let e=v(h(n.contactMessage)?.displayName);if(e!=null)return e;let t=h(n.contactsArrayMessage),r=v(t?.displayName);if(r!=null)return r;let s=t?.contacts;if(Array.isArray(s)){let i=s.map(o=>v(h(o)?.displayName)).filter(o=>o!=null);if(i.length>0)return i.join(", ")}return null},Sr=n=>de(n.conversation,h(n.extendedTextMessage)?.text,$i(n),v(h(h(n.interactiveMessage)?.body)?.text),h(n.buttonsMessage)?.contentText,h(n.listMessage)?.description,Vi(n),Gi(n),Hi(n),zi(n)),Yi=n=>de(h(n.buttonsResponseMessage)?.selectedDisplayText,h(n.buttonsResponseMessage)?.selectedButtonId,h(n.templateButtonReplyMessage)?.selectedDisplayText,h(n.templateButtonReplyMessage)?.selectedId,h(n.listResponseMessage)?.title,h(h(n.listResponseMessage)?.singleSelectReply)?.selectedRowId,h(h(n.interactiveResponseMessage)?.body)?.text),Zi=n=>de(h(n.imageMessage)?.caption,h(n.videoMessage)?.caption,h(n.documentMessage)?.caption,h(n.documentMessage)?.fileName),R=n=>{if(typeof n=="number")return n;let e=ae(n);return typeof e=="number"?e:null},Xi=[["pollCreationMessage","poll"],["pollCreationMessageV2","poll"],["pollCreationMessageV3","poll"],["contactMessage","contact"],["contactsArrayMessage","contact"],["locationMessage","location"],["liveLocationMessage","live-location"],["eventMessage","event"],["buttonsMessage","buttons"],["listMessage","list"],["interactiveMessage","interactive"],["templateMessage","template"]],Vt=n=>{let e=h(n.pollCreationMessage)??h(n.pollCreationMessageV2)??h(n.pollCreationMessageV3);if(e!=null){let l=Array.isArray(e.options)?e.options:[];return {type:"poll",name:v(e.name),options:l.map(y=>v(h(y)?.optionName)).filter(y=>y!=null),selectableCount:R(e.selectableOptionsCount)??0}}let t=h(n.contactMessage);if(t!=null)return {type:"contact",displayName:v(t.displayName),vcard:v(t.vcard),contacts:[{displayName:v(t.displayName),vcard:v(t.vcard)}]};let r=h(n.contactsArrayMessage);if(r!=null){let l=Array.isArray(r.contacts)?r.contacts:[];return {type:"contact",displayName:v(r.displayName),vcard:null,contacts:l.map(y=>({displayName:v(h(y)?.displayName),vcard:v(h(y)?.vcard)}))}}let s=h(n.locationMessage);if(s!=null)return {type:"location",latitude:R(s.degreesLatitude),longitude:R(s.degreesLongitude),name:v(s.name),address:v(s.address),accuracy:R(s.accuracyInMeters),speed:R(s.speedInMps),caption:v(s.comment)};let i=h(n.liveLocationMessage);if(i!=null)return {type:"live-location",latitude:R(i.degreesLatitude),longitude:R(i.degreesLongitude),name:null,address:null,accuracy:R(i.accuracyInMeters),speed:R(i.speedInMps),caption:v(i.caption)};let o=h(n.eventMessage);if(o!=null){let l=h(o.location);return {type:"event",name:v(o.name),description:v(o.description),location:l!=null?de(l.name,l.address):null,startTime:R(o.startTime),endTime:R(o.endTime),isCanceled:o.isCanceled===true}}let a=h(n.buttonsMessage);if(a!=null){let l=Array.isArray(a.buttons)?a.buttons:[];return {type:"buttons",contentText:v(a.contentText),footerText:v(a.footerText),buttons:l.map(y=>({id:v(h(y)?.buttonId),text:v(h(h(y)?.buttonText)?.displayText)}))}}let c=h(n.listMessage);if(c!=null){let l=Array.isArray(c.sections)?c.sections:[];return {type:"list",title:v(c.title),description:v(c.description),buttonText:v(c.buttonText),sections:l.map(y=>{let p=Array.isArray(h(y)?.rows)?h(y).rows:[];return {title:v(h(y)?.title),rows:p.map(g=>({id:v(h(g)?.rowId),title:v(h(g)?.title),description:v(h(g)?.description)}))}})}}let d=h(n.interactiveMessage);if(d!=null){let l=h(d.nativeFlowMessage),y=Array.isArray(l?.buttons)?l.buttons:[];return {type:"interactive",title:v(h(d.header)?.title),body:v(h(d.body)?.text),footer:v(h(d.footer)?.text),buttons:y.map(p=>({name:v(h(p)?.name),params:v(h(p)?.buttonParamsJson)}))}}let u=h(n.templateMessage);if(u!=null){let l=h(u.hydratedTemplate)??h(u.hydratedFourRowTemplate),y=Array.isArray(l?.hydratedButtons)?l.hydratedButtons:[];return {type:"template",text:v(l?.hydratedContentText),buttons:y.map(p=>{let g=h(p),w=h(g?.quickReplyButton)??h(g?.urlButton)??h(g?.callButton);return {id:v(w?.id),text:v(w?.displayText)}})}}return null};var st=n=>{let e=h(n.message);if(e==null)return null;let t=Re(e);return Sr(t)??Yi(t)??Zi(t)},Gt=n=>{let e=n.message;if(e==null)return null;let t=e.extendedTextMessage?.contextInfo;if(t!=null)return t;for(let r of Object.values(it)){let s=e[r];if(s!=null&&typeof s=="object"){let i=s.contextInfo;if(i!=null)return i}}return null},Qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[it[e]];return r==null||typeof r!="object"?null:r},eo=n=>{let e=n.message;if(e==null)return false;if(e.viewOnceMessage!=null||e.viewOnceMessageV2!=null||e.viewOnceMessageV2Extension!=null)return true;for(let t of Object.values(it)){let r=e[t];if(r!=null&&typeof r=="object"&&r.viewOnce===true)return true}return false},to=(n,e)=>n.message?.ephemeralMessage!=null?true:typeof e?.expiration=="number"&&e.expiration>0,xe=n=>{let e=h(n);if(e==null)return "text";let t=Re(e);for(let r of Object.values(it))if(t[r]!=null)return r.replace("Message","");for(let[r,s]of Xi)if(t[r]!=null)return s;return "text"},no=async(n,e,t)=>{try{if(n==null||n.quotedMessage==null)return null;let r=n.stanzaId;if(typeof r!="string"||r.length===0)return null;if(e.resolveQuoted!=null&&t.length>0){let u=await e.resolveQuoted(r,t);if(u!=null&&u.message!=null){let l=st(u)??"",y=ce(u,e,xe(u.message),l);if(y!==null)return y}}let s=ar(n);if(s===null||typeof s.key.id!="string"||s.key.id.length===0)return null;let i=s.key.remoteJid;if(typeof i!="string"||i.length===0)return null;let o=s.key.participant;typeof o=="string"&&e.selfJid.length>0&&lo.jidNormalizedUser(o)===lo.jidNormalizedUser(e.selfJid)&&(s.key.fromMe=!0);let a=n.quotedMessage,c=Object.assign({key:s.key,message:a??null},s.sender?.pushName!=null?{pushName:s.sender.pushName}:{}),d=st(c)??"";return ce(c,e,xe(a),d)}catch{return null}},ce=(n,e,t,r,s)=>{let i=n.key;if(i==null)return null;let o=W(i,n.pushName??void 0);if(o===null)return null;let a=vr(i);if(a.length===0)return null;let c=Gt(n),d=Ie(a),u=a.endsWith("@broadcast"),l=a.endsWith("@newsletter"),y=c?.isForwarded===true||(c?.forwardingScore??0)>0,p=eo(n),g=to(n,c),w=e.channelId??"",C=e.receiverId??"",A=e.prefixes??[],K=()=>d&&e.resolveRoomName!=null?e.resolveRoomName(a):Promise.resolve(null),Fe=e.resolveReceiverName??(()=>Promise.resolve(null)),vt=()=>no(c,e,a),St=a.length>0?a:o.pn??o.jid,Mt=(Et,ts)=>e.reply==null?Promise.reject(new Error("zaileys: ctx.reply() requires a connected client")):e.reply(St,Et,ts,n),At=Et=>e.react==null?Promise.reject(new Error("zaileys: ctx.react() requires a connected client")):e.react(i,Et),{mentionedJids:Ct}=tt(c),Xt={message:n,key:i,channelId:w,receiverId:C,selfJid:e.selfJid,text:r,chatType:t,sender:o,mentions:Ct,isViewOnce:p,isEphemeral:g,isForwarded:y,isBroadcast:u,isNewsletter:l,prefixes:A,resolveRoomName:K,resolveReceiverName:Fe,resolveReplied:vt,reply:Mt,react:At},Qt=s!==void 0?{...Xt,media:s}:Xt;return $t(e.citationConfig!==void 0?{...Qt,citationConfig:e.citationConfig}:Qt)},Mr=(n,e)=>{let t=h(n.message);if(t==null)return null;let r=Re(t),s=Sr(r),i=Vt(r)??void 0;return s===null&&i===void 0?null:ce(n,e,xe(n.message),s??"",i)},Le=(n,e,t)=>{let r=Qi(e,n);if(r===null)return null;let s=typeof r.caption=="string"?r.caption:"",i=n,o=yr(e,n,t.logger),a=wr(e,n,t.logger),c={type:n,mimetype:typeof r.mimetype=="string"?r.mimetype:null,caption:typeof r.caption=="string"?r.caption:null,fileName:typeof r.fileName=="string"?r.fileName:null,fileSize:R(r.fileLength),ptt:r.ptt===true,buffer:async()=>(await o()).buffer,stream:a};return ce(e,t,i,s,c)},Ar=(n,e)=>Le("image",n,e),Cr=(n,e)=>Le("video",n,e),Er=(n,e)=>Le("audio",n,e),br=(n,e)=>Le("document",n,e),Tr=(n,e)=>Le("sticker",n,e),ro=(n,e)=>{try{return lo.jidNormalizedUser(n)===lo.jidNormalizedUser(e)}catch{return n===e}},Pr=(n,e)=>{if(n.key==null)return null;let r=Gt(n),{mentionedJids:s}=tt(r);if(s.length===0||!s.some(u=>ro(u,e.selfJid)))return null;let o=h(n.message);if(o==null)return null;let a=st(n)??"",c=Vt(Re(o))??void 0,d=ce(n,e,xe(n.message),a,c);return d===null?null:{...d,mentionedJids:s,selfJid:e.selfJid}},kr=(n,e)=>{let t=n.key;if(t==null)return null;let r=vr(t);if(r.length===0||!Ie(r))return null;let{mentionAll:s}=tt(Gt(n));if(!s)return null;let i=h(n.message);if(i==null)return null;let o=st(n)??"",a=Vt(Re(i))??void 0,c=ce(n,e,xe(n.message),o,a);return c===null?null:{...c,isMentionAll:true,selfJid:e.selfJid}};var ee=(n,e)=>{let t=ae(n);return t===null?e:t},so=n=>{if(!n)return "";if(typeof n.conversation=="string")return n.conversation;let e=n.extendedTextMessage?.text;if(typeof e=="string")return e;let t=n.imageMessage?.caption;if(typeof t=="string")return t;let r=n.videoMessage?.caption;if(typeof r=="string")return r;let s=n.documentMessage?.caption;if(typeof s=="string")return s;let o=(n.botForwardedMessage?.message?.richResponseMessage??n.richResponseMessage)?.submessages;if(Array.isArray(o)){let a=o.map(c=>c?.messageText).filter(c=>typeof c=="string"&&c.length>0);if(a.length>0)return a.join(`
|
|
15
|
+
`)}return ""},io=n=>Array.isArray(n)?n.map(e=>Buffer.from(e).toString("hex")):[],Or=(n,e)=>{let t=n?.reaction,r=t?.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=t.text,o=typeof i=="string"&&i.length>0?i:null;return {key:r,emoji:o,sender:s,timestamp:ee(t.senderTimestampMs,0)}},xr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==lo.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);return s===null?null:{key:r,newContent:so(t.editedMessage),editedAt:ee(n.update.messageTimestamp,0),sender:s}},Rr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==lo.proto.Message.ProtocolMessage.Type.REVOKE)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=ke(n.key.remoteJid),o=ke(e.selfJid);return {key:r,deletedFor:i!==null&&o!==null&&i===o?"me":"everyone",sender:s,timestamp:ee(n.update.messageTimestamp,0)}},Lr=(n,e)=>{let t=n?.update?.pollUpdates?.[0],r=n?.update?.message?.pollUpdateMessage,s=W(n?.key,e.pushName);if(s===null)return null;if(t){let i=t.pollUpdateMessageKey;return i?{pollKey:i,selectedOptions:io(t.vote?.selectedOptions),voter:s,timestamp:ee(t.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}if(r){let i=r.pollCreationMessageKey;return i?{pollKey:i,selectedOptions:[],voter:s,timestamp:ee(r.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}return null};var ot=n=>Array.isArray(n)?n:[],oo=n=>{if(n==null||typeof n!="object")return null;let e=n.reachoutTimeLock;return e==null||typeof e!="object"?null:e};function Nr(n,e,t){let r=[],s=new Map,i=t.groupMetadata!=null?p=>{let g=s.get(p);if(g!==void 0)return g;let w=t.groupMetadata;if(w==null)return Promise.resolve(null);let C=w(p).then(A=>A?.subject??null).catch(()=>null);return s.set(p,C),C}:void 0,o={selfJid:t.selfJid,receiverId:t.receiverId??t.selfJid,...t.logger!=null?{logger:t.logger}:{},...t.channelId!=null?{channelId:t.channelId}:{},...t.prefixes!=null?{prefixes:t.prefixes}:{},...t.citationConfig!=null?{citationConfig:t.citationConfig}:{},...i!=null?{resolveRoomName:i}:{},...t.receiverName!=null?{resolveReceiverName:t.receiverName}:{},...t.resolveQuoted!=null?{resolveQuoted:t.resolveQuoted}:{},...t.sendReply!=null?{reply:t.sendReply}:{},...t.react!=null?{react:t.react}:{}},a=t.logger?{selfJid:t.selfJid,logger:t.logger}:{selfJid:t.selfJid},c={selfJid:t.selfJid},d=(p,g)=>{let w=(...C)=>{try{g(C[0]);}catch(A){t.logger?.warn(A,`inbound pipeline: handler for ${p} threw`);}};e.ev.on(p,w),r.push(()=>e.ev.off(p,w));},u=p=>{l(()=>Mr(p,o),g=>n.emit("text",g)),l(()=>Ar(p,o),g=>n.emit("image",g)),l(()=>Cr(p,o),g=>n.emit("video",g)),l(()=>Er(p,o),g=>n.emit("audio",g)),l(()=>br(p,o),g=>n.emit("document",g)),l(()=>Tr(p,o),g=>n.emit("sticker",g)),l(()=>Pr(p,o),g=>n.emit("mention",g)),l(()=>kr(p,o),g=>n.emit("mention-all",g)),l(()=>pr(p,a),g=>n.emit("button-click",g)),l(()=>mr(p,a),g=>n.emit("list-select",g));},l=(p,g)=>{let w;try{w=p();}catch(C){t.logger?.warn(C,"inbound pipeline: decoder threw");return}w!=null&&g(w);};d("messages.upsert",p=>{let g=Xn(p);for(let w of g.messages)t.ignoreMe===!0&&w.key?.fromMe===!0||u(w);}),d("messages.update",p=>{for(let g of ot(p))l(()=>xr(g,c),w=>n.emit("edit",w)),l(()=>Rr(g,c),w=>n.emit("delete",w)),l(()=>Lr(g,c),w=>n.emit("poll-vote",w));}),d("messages.reaction",p=>{for(let g of ot(p))l(()=>Or(g,c),w=>n.emit("reaction",w));}),d("groups.update",p=>{for(let g of ot(p))l(()=>rr(g),w=>n.emit("group-update",w));}),d("group-participants.update",p=>{let g=p;l(()=>ir(g),w=>n.emit("group-join",w)),l(()=>or(g),w=>n.emit("group-leave",w));}),d("group.member-tag.update",p=>{l(()=>sr(p),g=>n.emit("member-tag",g));}),d("call",p=>{for(let g of ot(p))l(()=>er(g),w=>n.emit("call-incoming",w)),l(()=>tr(g),w=>n.emit("call-ended",w));}),d("messaging-history.status",p=>{l(()=>fr(p),g=>n.emit("history-sync",g));}),d("presence.update",p=>{let g=(()=>{try{return gr(p)}catch(w){return t.logger?.warn(w,"inbound pipeline: decodePresence threw"),[]}})();for(let w of g)n.emit("presence",w);}),d("connection.update",p=>{let g=oo(p);g!==null&&l(()=>Jt({source:"connection-update",reachoutTimeLock:g}),w=>n.emit("limited",w));}),d("message-capping.update",p=>{l(()=>Jt({source:"message-capping",capInfo:p}),g=>n.emit("limited",g));}),d("newsletter.reaction",p=>{l(()=>Oe({source:"reaction",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter.view",p=>{l(()=>Oe({source:"view",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-participants.update",p=>{l(()=>Oe({source:"participants",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-settings.update",p=>{l(()=>Oe({source:"settings",payload:p}),g=>n.emit("newsletter",g));});let y=false;return {detach(){if(!y){y=true;for(let p of r)p();r.length=0;}}}}var at=class{inner=new events.EventEmitter;emitterLogger;constructor(e){this.emitterLogger=e?.logger,this.inner.setMaxListeners(0);}on(e,t){let r=this.wrap(e,t);this.tag(t,e,r),this.inner.on(e,r);let s=false;return ()=>{s||(s=true,this.inner.off(e,r),this.untag(t,e));}}off(e,t){let r=this.lookup(t,e);r&&(this.inner.off(e,r),this.untag(t,e));}emit(e,t){let r=this.inner.listeners(e).slice();for(let s of r)try{s(t);}catch(i){this.emitterLogger?.error(i,"listener threw");}}removeAllListeners(e){e===void 0?this.inner.removeAllListeners():this.inner.removeAllListeners(e);}listenerCount(e){return this.inner.listenerCount(e)}wrap(e,t){return r=>{try{t(r);}catch(s){this.emitterLogger?.error(s,"listener threw");}}}tag(e,t,r){this.tagMap(e).set(t,r);}untag(e,t){this.tagMap(e).delete(t);}lookup(e,t){return this.tagMap(e).get(t)}tagMap(e){let t=co,r=e,s=r[t];return s||(s=new Map,r[t]=s),s}},co=Symbol("zaileys.typed-ee.tag");var po="default",mo="qr",Dr=6e4,Br=class extends at{sessionId;auth;store;logger;authType;phoneNumber;cacheSignal;qrTerminal;statusLog;reconnectOptions;baileysExtra;machine=Yn();reconnectStrategy;authGuard;operationGuard;presenceThrottle;scheduleLimiter;authExhausted=false;_socket;reconnectTimer;listenerCleanup=[];inboundHandle;connectResolve;connectReject;pairingRequested=false;cachedSignalWrap=false;creds;credsLoadedAtConnect=false;openedThisRun=false;credsHintShown=false;disconnectEmittedFor=0;connectAttemptSeq=0;pendingDisconnectReason;usernameCache=new Map;_group;_privacy;_newsletter;_community;commandRegistry;commandMiddleware=[];commandPrefixes;citationConfig;ignoreMe;commandDispatcher;_presence;_scheduler;waVersion;versionWarming;constructor(e={}){super({logger:Kt(e.logger)}),this.sessionId=e.sessionId??po,this.logger=Kt(e.logger),this.authType=e.authType??mo,this.phoneNumber=e.phoneNumber,this.cacheSignal=e.cacheSignal??true,this.qrTerminal=e.qrTerminal??true,this.statusLog=e.statusLog??true,this.statusLog&&jn(),this.reconnectOptions=e.reconnect??{},this.baileysExtra=e.baileys??{},this.auth=e.auth??new Ze({basePath:`./.zaileys/auth/${this.sessionId}`}),this.store=e.store??new et,this.reconnectStrategy=zn(this.reconnectOptions),this.authGuard=Vn(e.authGuard),this.operationGuard=Wt(e.operationGuard),this.presenceThrottle=e.presence;let t=e.scheduleRateLimitPerSec??1;this.scheduleLimiter=t>0?new X({perSec:t}):void 0,this.commandPrefixes=fo(e.commandPrefix),this.citationConfig=e.citation,this.ignoreMe=e.ignoreMe??true,this.attachEmitterLogger(),(e.autoConnect??true)&&queueMicrotask(()=>{this.machine.state==="idle"&&this.warmVersion().finally(()=>{if(this.machine.state==="idle")try{this.connect().catch(r=>this.emitAutoConnectError(r));}catch(r){this.emitAutoConnectError(r);}});});}warmVersion(){if(this.waVersion)return Promise.resolve();if(this.versionWarming)return this.versionWarming;try{return typeof lo.fetchLatestBaileysVersion!="function"?Promise.resolve():(this.versionWarming=lo.fetchLatestBaileysVersion().then(({version:e})=>{this.waVersion=e;}).catch(e=>{this.logger.warn(e,"fetchLatestBaileysVersion failed; using bundled version");}),this.versionWarming)}catch{return Promise.resolve()}}emitAutoConnectError(e){let t=e instanceof Error?e:new Error(String(e));this.logger.error(t,"auto-connect failed"),this.listenerCount("error")>0&&this.emit("error",{sessionId:this.sessionId,error:t});}logStatus(e){if(!this.statusLog)return;let t=Un(e);t&&process.stderr.write(`${t}
|
|
15
16
|
`);}resolveMe(){let e=this._socket?.user;if(e&&typeof e.id=="string"&&e.id.length>0)return e;let t=this.creds?.me;return t&&typeof t.id=="string"&&t.id.length>0?t:{id:""}}get state(){return this.machine.state}get socket(){return this._socket}get group(){return this._group??=new he(()=>this._socket,this.operationGuard)}get privacy(){return this._privacy??=new ye(()=>this._socket)}get newsletter(){return this._newsletter??=new we(()=>this._socket,this.operationGuard)}get community(){return this._community??=new ve(()=>this._socket,this.operationGuard)}get presence(){return this._presence??=new Ae(()=>this._socket,this.presenceThrottle)}async broadcast(e,t,r){return this.requireSocket(),Ut(e,t,{sendTo:s=>this.send(s)},r)}async scheduleAt(e,t){return this.ensureScheduler().scheduleAt(e,t)}ensureScheduler(){return this._scheduler??=new Ce({store:this.store,sendSnapshot:e=>this.dispatchSnapshot(e),logger:this.logger,...this.scheduleLimiter?{acquire:()=>this.scheduleLimiter.acquire()}:{}})}async dispatchSnapshot(e){await this.requireSocket().sendMessage(e.recipient,e.content,e.options);}connect(){if(this.authType==="pairing"&&!this.phoneNumber)return Promise.reject(new Error('phoneNumber is required when authType is "pairing"'));if(this.machine.state==="connecting"||this.machine.state==="connected"||this.machine.state!=="idle"&&this.machine.state!=="disconnected"&&this.machine.state!=="reconnecting")return Promise.resolve();if(this._socket){for(let a of this.listenerCleanup)a.off();this.listenerCleanup=[],this._socket=void 0;}let e=this.machine.state==="reconnecting";e||(this.authGuard.reset(),this.authExhausted=false),this.machine.transition("connecting"),this.connectAttemptSeq+=1,this.pairingRequested=false,this.openedThisRun=false,e||this.logStatus({kind:"connecting",sessionId:this.sessionId}),this.cacheSignal&&!this.cachedSignalWrap&&(this.auth=Kn(this.auth,{logger:this.logger}),this.cachedSignalWrap=true),this.warmVersion();let t={};this.creds=t;let r=qn(this.auth.signal,this.logger),s={markOnlineOnConnect:false,syncFullHistory:false,qrTimeout:Dr,...this.waVersion?{version:this.waVersion}:{},...this.baileysExtra,auth:{creds:t,keys:r},logger:this.logger,getMessage:a=>this.resolveMessageForResend(a)},i=lo__default.default(s);this._socket=i,this.store.bind(i),this.wireSocket(i);let o=new Promise((a,c)=>{let d=this.connectResolve,u=this.connectReject;this.connectResolve=()=>{d?.(),a();},this.connectReject=l=>{u?.(l),c(l);};});return this.auth.creds.readCreds().then(a=>{this.credsLoadedAtConnect=!!a,Object.assign(t,a??lo.initAuthCreds());}).catch(a=>{this.rejectPendingConnect(a instanceof Error?a:new Error(String(a)));}),o}async disconnect(){if(!(this.machine.state==="idle"||this.machine.state==="disconnected")){this.machine.transition("disconnecting"),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.inboundHandle?.detach(),this.inboundHandle=void 0,this.detachCommands(),this._scheduler?.dispose();for(let e of this.listenerCleanup)e.off();if(this.listenerCleanup=[],this._socket){try{this._socket.end(void 0);}catch(e){this.logger.warn(e,"socket.end threw");}this._socket=void 0;}try{await this.auth.signal.close();}catch(e){this.logger.warn(e,"auth.signal.close failed");}try{await this.store.close();}catch(e){this.logger.warn(e,"store.close failed");}if(this.machine.transition("disconnected"),this.disconnectEmittedFor!==this.connectAttemptSeq){let e=this.pendingDisconnectReason??"unknown";this.pendingDisconnectReason=void 0,this.disconnectEmittedFor=this.connectAttemptSeq,this.emit("disconnect",{sessionId:this.sessionId,reason:e,willReconnect:false});}this.rejectPendingConnect(new Error("disconnected before connect resolved"));}}async logout(){if(this.pendingDisconnectReason="logged-out",this._socket)try{await this._socket.logout();}catch(e){this.logger.warn(e,"socket.logout failed");}try{await this.auth.signal.clear();}catch(e){this.logger.warn(e,"auth.signal.clear failed");}try{await this.auth.creds.deleteCreds();}catch(e){this.logger.warn(e,"auth.creds.deleteCreds failed");}if(this.machine.state==="idle"||this.machine.state==="disconnected"){this.disconnectEmittedFor!==this.connectAttemptSeq&&(this.disconnectEmittedFor=this.connectAttemptSeq,this.emit("disconnect",{sessionId:this.sessionId,reason:"logged-out",willReconnect:false})),this.pendingDisconnectReason=void 0;return}await this.disconnect();}command(e,t){return (this.commandRegistry??=new Se).register(e,t),this.attachCommandsIfReady(),this}use(e){return this.commandMiddleware.push(e),this}attachCommandsIfReady(){if(this.commandDispatcher||this.commandPrefixes.length===0||this.commandRegistry===void 0||this.commandRegistry.list().length===0||!this._socket)return;let e=this.commandRegistry;this.commandDispatcher=Ft({registry:e,middleware:this.commandMiddleware,prefixes:this.commandPrefixes,logger:this.logger,onText:t=>{let r=s=>t(s);return this.on("text",r),()=>this.off("text",r)},buildContext:(t,r)=>this.buildCommandContext(t,r)});}buildCommandContext(e,t){let r;return {...t,raw:e.raw,command:e.command,args:e.args,flags:e.flags,json:e.json,reply:async(s,i)=>{let o=t.message().key.remoteJid??t.roomId??t.senderId,a=await this.send(o).text(s,i).reply(t.message());return r=a,a},react:s=>this.react(t.message().key,s),edit:async s=>{if(r===void 0)throw new b("NO_SENT_MESSAGE","ctx.edit requires a prior ctx.reply");await this.edit(r).text(s);}}}detachCommands(){this.commandDispatcher?.detach(),this.commandDispatcher=void 0;}send(e){let t=this.requireSocket(),r=s=>{this.store.saveMessage(s).catch(i=>this.logger.warn(i,"recordSent failed"));};return He(e)?$.create(t,e,void 0,r):$.create(t,e,s=>this.resolveRecipient(s),r)}edit(e){return new ge(this.requireSocket(),e)}async delete(e,t){await Rt(this.requireSocket(),e,t);}async react(e,t){return Lt(this.requireSocket(),e,t)}async forward(e,t){let r=this.requireSocket(),s=await this.resolveRecipient(t);return Nt(r,this.store,e,s)}resolveRecipient(e){return _t(this.requireSocket(),e,this.usernameCache)}requireSocket(){if(!this._socket)throw new f("INVALID_OPTIONS","client not connected");return this._socket}attachEmitterLogger(){this.logger;}wireSocket(e){let t=s=>{this.handleConnectionUpdate(s);},r=s=>{let i=this.creds?Object.assign(this.creds,s):s;this.creds=i,this.auth.creds.writeCreds(i).catch(o=>{this.logger.warn(o,"auth.creds.writeCreds failed");});};e.ev.on("connection.update",t),e.ev.on("creds.update",r),this.listenerCleanup.push({off:()=>e.ev.off("connection.update",t)}),this.listenerCleanup.push({off:()=>e.ev.off("creds.update",r)});}async handleConnectionUpdate(e){if(e.qr&&await this.handleQrUpdate(e.qr),e.connection==="open"){this.handleOpen();return}e.connection==="close"&&await this.handleClose(e.lastDisconnect);}async handleQrUpdate(e){if(this.authExhausted)return;if(this.authType==="pairing"&&this.phoneNumber){if(this.pairingRequested)return;let s=Date.now(),i=this.authGuard.evaluate("pairing",s);if(!i.allowed){i.reason==="budget-exhausted"&&this.handleAuthExhausted("pairing",i.attempts,i.max);return}this.pairingRequested=true,this.authGuard.record("pairing",s),this.machine.canTransition("pairing-pending")&&this.machine.transition("pairing-pending");try{let o=Gn({phoneNumber:this.phoneNumber}),a=this._socket;if(!a)return;let c=await o.requestCode(a);this.logStatus({kind:"pairing-code",code:c.code}),this.emit("pairing-code",{sessionId:this.sessionId,code:c.code,expiresAt:c.expiresAt});}catch(o){this.logger.warn(o,"pairing-code request failed");}return}let t=Date.now(),r=this.authGuard.evaluate("qr",t);if(!r.allowed){this.handleAuthExhausted("qr",r.attempts,r.max);return}if(this.authGuard.record("qr",t),this.machine.canTransition("qr-pending")&&this.machine.transition("qr-pending"),this.qrTerminal)try{await Hn(e);}catch(s){this.logger.warn(s,"printQrToTerminal failed");}this.logStatus({kind:"qr"}),this.emit("qr",{sessionId:this.sessionId,qrString:e,expiresAt:t+Dr});}handleAuthExhausted(e,t,r){this.authExhausted||(this.authExhausted=true,this.logger.warn({sessionId:this.sessionId,kind:e,attempts:t,max:r},`auth attempts exhausted (${t}/${r} ${e}); stopping to avoid WhatsApp spam restriction \u2014 call connect() to retry`),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.emit("auth-exhausted",{sessionId:this.sessionId,kind:e,attempts:t,max:r}),this.disconnect());}handleOpen(){this.machine.canTransition("connected")&&this.machine.transition("connected"),this.openedThisRun=true,this.credsHintShown=false,this.authExhausted=false,this.authGuard.reset(),this.reconnectStrategy.reset();let e=this.resolveMe();this.logStatus({kind:"connected",id:typeof e.id=="string"?e.id:""}),this.emit("connect",{sessionId:this.sessionId,me:e});let t=this._socket;t&&(this.inboundHandle?.detach(),this.inboundHandle=Nr(this,t,{selfJid:typeof e.id=="string"?e.id:"",channelId:this.sessionId,receiverId:typeof e.id=="string"?e.id:"",prefixes:this.commandPrefixes,logger:this.logger,...this.citationConfig!=null?{citationConfig:this.citationConfig}:{},groupMetadata:s=>this.group.metadata(s).catch(()=>null),receiverName:()=>Promise.resolve(this.resolveMe().name??null),resolveQuoted:(s,i)=>this.lookupQuoted(s,i),sendReply:async(s,i,o,a)=>await this.send(s).text(i,o).reply(a),react:(s,i)=>this.react(s,i),ignoreMe:this.ignoreMe})),this.attachCommandsIfReady(),this.ensureScheduler().loadPending().catch(s=>this.logger.warn(s,"scheduler loadPending failed"));let r=this.connectResolve;this.connectResolve=void 0,this.connectReject=void 0,r&&r();}async resolveMessageForResend(e){try{return (await this.store.getMessage(e))?.message??void 0}catch(t){this.logger.warn(t,"getMessage resend lookup failed");return}}async lookupQuoted(e,t){for(let r of [false,true])try{let s=await this.store.getMessage({id:e,remoteJid:t,fromMe:r});if(s!=null)return s}catch{continue}return null}async handleClose(e){this.inboundHandle?.detach(),this.inboundHandle=void 0,this.detachCommands();let t=go(e?.error),r=Jn(t),s=false;if($n(r)){try{await this.auth.signal.clear();}catch(i){this.logger.warn(i,"auth.signal.clear failed (post-close)");}try{await this.auth.creds.deleteCreds();}catch(i){this.logger.warn(i,"auth.creds.deleteCreds failed (post-close)");}}if(!Te(r)&&!this.authExhausted){Xe(r)&&this.logger.warn({sessionId:this.sessionId},"WhatsApp returned rate-limited (429); backing off before reconnect to avoid restriction");let i=this.reconnectStrategy.next(r);if(i!==null){s=true,this.machine.canTransition("reconnecting")&&this.machine.transition("reconnecting");let o=this.credsLoadedAtConnect&&!this.openedThisRun&&i.attempt>=2&&!this.credsHintShown;o&&(this.credsHintShown=true),this.logStatus({kind:"reconnecting",attempt:i.attempt,delayMs:i.delayMs,reason:r,invalidCredsSuspected:o}),this.emit("reconnecting",{sessionId:this.sessionId,attempt:i.attempt,delayMs:i.delayMs,reason:r}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.connect().catch(a=>{this.logger.warn(a,"reconnect attempt failed");});},i.delayMs);}}if(this.disconnectEmittedFor=this.connectAttemptSeq,this.logStatus({kind:"disconnect",reason:r,willReconnect:s}),this.emit("disconnect",{sessionId:this.sessionId,reason:r,willReconnect:s}),!s){if(this._socket){for(let i of this.listenerCleanup)i.off();this.listenerCleanup=[],this._socket=void 0;}this.machine.canTransition("disconnected")&&this.machine.transition("disconnected"),this.rejectPendingConnect(new Error(`connection closed (${r})`));}}rejectPendingConnect(e){let t=this.connectReject;this.connectResolve=void 0,this.connectReject=void 0,t&&t(e);}};function fo(n){return n===void 0?[]:(Array.isArray(n)?n:[n]).filter(t=>t.length>0)}function go(n){if(!n||typeof n!="object")return;let e=n.output;if(!e)return;let t=e.statusCode;return typeof t=="number"?t:void 0}var Fr=class{credsBlob;signalMap=new Map;closed=false;signal={read:async(e,t)=>{this.assertOpen();let r=this.signalMap.get(e),s={};if(!r)return s;for(let i of t){let o=r.get(i);o!==void 0&&(s[i]=o);}return s},write:async e=>{this.assertOpen();for(let t of Object.keys(e)){let r=e[t];if(!r)continue;let s=this.signalMap.get(t);s||(s=new Map,this.signalMap.set(t,s));for(let i of Object.keys(r)){let o=r[i];o===null?s.delete(i):o!==void 0&&s.set(i,o);}}},delete:async(e,t)=>{this.assertOpen();let r=this.signalMap.get(e);if(r)for(let s of t)r.delete(s);},clear:async()=>{this.assertOpen(),this.signalMap.clear(),this.credsBlob=void 0;},close:async()=>{this.closed=true;}};creds={readCreds:async()=>(this.assertOpen(),this.credsBlob),writeCreds:async e=>{this.assertOpen(),this.credsBlob=structuredClone(e);},deleteCreds:async()=>{this.assertOpen(),this.credsBlob=void 0;}};assertOpen(){if(this.closed)throw new m("STORE_CLOSED","MemoryAuthStore is closed")}};var ct=null,ho=async()=>{if(ct)return ct;try{return ct=(await import('better-sqlite3')).default,ct}catch(n){throw new m("STORE_NOT_AVAILABLE","better-sqlite3 belum terpasang. Run: pnpm add better-sqlite3",{cause:n})}},Ht="default",Ur=500,jr=n=>Array.from({length:n},()=>"?").join(","),Kr=(n,e)=>{let t=[];for(let r=0;r<n.length;r+=e)t.push(n.slice(r,r+e));return t},qr=class{options;db=null;prepared=null;readyPromise=null;closed=false;constructor(e){this.options=e;}creds={readCreds:async()=>{let t=(await this.ensureReady()).readCreds.get(Ht);if(t)return this.parseBlob(t.data)},writeCreds:async e=>{let t=await this.ensureReady(),r=this.encodeBlob(e);t.writeCreds.run(Ht,r);},deleteCreds:async()=>{(await this.ensureReady()).deleteCreds.run(Ht);}};signal={read:async(e,t)=>{await this.ensureReady();let r={};if(t.length===0)return r;let s=this.db;for(let i of Kr(t,Ur)){let o=jr(i.length),c=s.prepare(`SELECT id, data FROM auth_signal WHERE type = ? AND id IN (${o})`).all(e,...i);for(let d of c)r[d.id]=this.parseBlob(d.data);}return r},write:async e=>{let t=await this.ensureReady(),r=this.db,s=[],i=[];for(let a of Object.keys(e)){let c=e[a];if(c)for(let d of Object.keys(c)){let u=c[d];u===null?i.push({type:a,id:d}):u!==void 0&&s.push({type:a,id:d,blob:this.encodeBlob(u)});}}r.transaction(()=>{for(let a of s)t.writeSignal.run(a.type,a.id,a.blob);for(let a of i)t.deleteSignal.run(a.type,a.id);})();},delete:async(e,t)=>{if(await this.ensureReady(),t.length===0)return;let r=this.db,s=r.transaction(i=>{let o=jr(i.length);r.prepare(`DELETE FROM auth_signal WHERE type = ? AND id IN (${o})`).run(e,...i);});for(let i of Kr(t,Ur))s(i);},clear:async()=>{let e=await this.ensureReady();this.db.transaction(()=>{e.clearSignal.run(),e.clearCreds.run();})();},close:async()=>{if(!this.closed){this.closed=true;try{this.db?.close();}catch(e){throw new m("STORE_WRITE_FAILED","failed to close sqlite database",{cause:e})}finally{this.db=null,this.prepared=null;}}}};async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","SqliteAuthStore is closed");return this.prepared?this.prepared:(this.readyPromise||(this.readyPromise=this.openAndMigrate().catch(e=>{throw this.readyPromise=null,e})),await this.readyPromise,this.prepared)}async openAndMigrate(){let e=await ho(),t;try{t=new e(this.options.database,{readonly:this.options.readonly??!1});}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to open sqlite database at ${String(this.options.database)}`,{cause:r})}try{t.pragma("journal_mode = WAL"),t.pragma("synchronous = NORMAL"),t.pragma("foreign_keys = ON"),t.exec(`CREATE TABLE IF NOT EXISTS auth_creds (id TEXT PRIMARY KEY, data BLOB NOT NULL) WITHOUT ROWID;
|
|
16
17
|
CREATE TABLE IF NOT EXISTS auth_signal (type TEXT NOT NULL, id TEXT NOT NULL, data BLOB NOT NULL, PRIMARY KEY(type, id)) WITHOUT ROWID;`);}catch(r){throw t.close(),new m("STORE_CONNECTION_FAILED","failed to migrate sqlite schema",{cause:r})}this.db=t,this.prepared={readCreds:t.prepare("SELECT data FROM auth_creds WHERE id = ?"),writeCreds:t.prepare("INSERT INTO auth_creds(id, data) VALUES(?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data"),deleteCreds:t.prepare("DELETE FROM auth_creds WHERE id = ?"),writeSignal:t.prepare("INSERT INTO auth_signal(type, id, data) VALUES(?, ?, ?) ON CONFLICT(type, id) DO UPDATE SET data = excluded.data"),deleteSignal:t.prepare("DELETE FROM auth_signal WHERE type = ? AND id = ?"),clearSignal:t.prepare("DELETE FROM auth_signal"),clearCreds:t.prepare("DELETE FROM auth_creds")};}encodeBlob(e){try{return Buffer.from(JSON.stringify(e,lo.BufferJSON.replacer),"utf8")}catch(t){throw new m("STORE_WRITE_FAILED","failed to serialize sqlite blob",{cause:t})}}parseBlob(e){try{let t=Buffer.isBuffer(e)?e.toString("utf8"):Buffer.from(e).toString("utf8");return JSON.parse(t,lo.BufferJSON.reviver)}catch(t){throw new m("STORE_CORRUPTED","failed to parse sqlite blob",{cause:t})}}};var lt,yo=async()=>(lt||(lt=import('pg').catch(n=>{throw lt=void 0,new m("STORE_NOT_AVAILABLE","pg is not installed. Run: pnpm add pg",{cause:n})})),lt),wo="CREATE TABLE IF NOT EXISTS zaileys_auth_creds (id text PRIMARY KEY, data jsonb NOT NULL)",vo="CREATE TABLE IF NOT EXISTS zaileys_auth_signal (type text NOT NULL, id text NOT NULL, data bytea NOT NULL, PRIMARY KEY(type, id))",Jr=class{externalPool;connectionString;poolMax;ownedPool;resolvedPool;readyPromise;closed=false;constructor(e){let t=e.pool!==void 0,r=e.connectionString!==void 0;if(t&&r)throw new m("STORE_CONNECTION_FAILED","PostgresAuthStore: provide either pool or connectionString, not both");if(!t&&!r)throw new m("STORE_CONNECTION_FAILED","PostgresAuthStore: pool or connectionString is required");this.externalPool=e.pool,this.connectionString=e.connectionString,this.poolMax=e.max;}async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","PostgresAuthStore is closed");if(this.resolvedPool)return this.resolvedPool;this.readyPromise||(this.readyPromise=(async()=>{let e;if(this.externalPool)e=this.externalPool;else {let t=await yo(),r=t.Pool??t.default?.Pool;if(!r)throw new m("STORE_NOT_AVAILABLE","pg.Pool constructor not found");e=new r({connectionString:this.connectionString,max:this.poolMax}),this.ownedPool=e;}try{await e.query(wo),await e.query(vo);}catch(t){throw new m("STORE_CONNECTION_FAILED","failed to migrate auth schema",{cause:t})}return this.resolvedPool=e,e})());try{return await this.readyPromise}catch(e){throw this.readyPromise=void 0,e}}signal={read:async(e,t)=>{let r=await this.ensureReady(),s={};if(t.length===0)return s;try{let i=t.map((a,c)=>`$${c+2}`).join(", "),o=await r.query(`SELECT id, data FROM zaileys_auth_signal WHERE type = $1 AND id IN (${i})`,[String(e),...Array.from(t)]);for(let a of o.rows){let c=Buffer.isBuffer(a.data)?a.data:Buffer.from(a.data);s[a.id]=JSON.parse(c.toString("utf8"),lo.BufferJSON.reviver);}return s}catch(i){throw i instanceof m?i:new m("STORE_READ_FAILED","failed to read signal rows",{cause:i})}},write:async e=>{let t=await this.ensureReady(),r=[];for(let i of Object.keys(e)){let o=e[i];if(o)for(let a of Object.keys(o)){let c=o[a];if(c===null)r.push({kind:"delete",type:String(i),id:a});else if(c!==void 0){let d=Buffer.from(JSON.stringify(c,lo.BufferJSON.replacer),"utf8");r.push({kind:"upsert",type:String(i),id:a,value:d});}}}if(r.length===0)return;let s;try{s=await t.connect(),await s.query("BEGIN");for(let i of r)i.kind==="delete"?await s.query("DELETE FROM zaileys_auth_signal WHERE type = $1 AND id = $2",[i.type,i.id]):await s.query("INSERT INTO zaileys_auth_signal(type, id, data) VALUES ($1, $2, $3) ON CONFLICT (type, id) DO UPDATE SET data = EXCLUDED.data",[i.type,i.id,i.value]);await s.query("COMMIT");}catch(i){if(s)try{await s.query("ROLLBACK");}catch{}throw new m("STORE_WRITE_FAILED","failed to write signal rows",{cause:i})}finally{s?.release();}},delete:async(e,t)=>{let r=await this.ensureReady();if(t.length!==0)try{let s=t.map((i,o)=>`$${o+2}`).join(", ");await r.query(`DELETE FROM zaileys_auth_signal WHERE type = $1 AND id IN (${s})`,[String(e),...Array.from(t)]);}catch(s){throw new m("STORE_WRITE_FAILED","failed to delete signal rows",{cause:s})}},clear:async()=>{let e=await this.ensureReady(),t;try{t=await e.connect(),await t.query("BEGIN"),await t.query("DELETE FROM zaileys_auth_signal"),await t.query("DELETE FROM zaileys_auth_creds"),await t.query("COMMIT");}catch(r){if(t)try{await t.query("ROLLBACK");}catch{}throw new m("STORE_WRITE_FAILED","failed to clear auth tables",{cause:r})}finally{t?.release();}},close:async()=>{if(this.closed)return;this.closed=true;let e=this.ownedPool;if(this.ownedPool=void 0,this.resolvedPool=void 0,this.readyPromise=void 0,e)try{await e.end();}catch{}}};creds={readCreds:async()=>{let e=await this.ensureReady();try{let r=(await e.query("SELECT data FROM zaileys_auth_creds WHERE id = 'default'")).rows[0];if(!r)return;let s=typeof r.data=="string"?r.data:JSON.stringify(r.data);return JSON.parse(s,lo.BufferJSON.reviver)}catch(t){throw t instanceof m?t:new m("STORE_READ_FAILED","failed to read creds",{cause:t})}},writeCreds:async e=>{let t=await this.ensureReady();try{let r=JSON.stringify(e,lo.BufferJSON.replacer);await t.query("INSERT INTO zaileys_auth_creds(id, data) VALUES ('default', $1::jsonb) ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data",[r]);}catch(r){throw new m("STORE_WRITE_FAILED","failed to write creds",{cause:r})}},deleteCreds:async()=>{let e=await this.ensureReady();try{await e.query("DELETE FROM zaileys_auth_creds WHERE id = 'default'");}catch(t){throw new m("STORE_WRITE_FAILED","failed to delete creds",{cause:t})}}}};var So="zaileys",Mo=["pre-key","session","sender-key","sender-key-memory","app-state-sync-key","app-state-sync-version","lid-mapping","device-list","tctoken","identity-key"],Ao=n=>{if(typeof n!="object"||n===null)return false;let e=n.code;return e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"},$r=class{namespace;externalClient;url;ownedClient;ready;closed=false;constructor(e){if(e.client&&e.url)throw new m("STORE_CONNECTION_FAILED","pass either client OR url, not both");if(!e.client&&!e.url)throw new m("STORE_CONNECTION_FAILED","RedisAuthStore requires either client or url");this.namespace=e.namespace??So,this.externalClient=e.client,this.url=e.url;}signal={read:async(e,t)=>{if(this.assertOpen(),t.length===0)return {};let r=await this.ensureReady(),s=t.map(a=>this.signalKey(e,a)),i=await this.runRead(()=>r.mGet(s)),o={};for(let a=0;a<t.length;a+=1){let c=i[a];c!=null&&(o[t[a]]=JSON.parse(c,lo.BufferJSON.reviver));}return o},write:async e=>{this.assertOpen();let r=(await this.ensureReady()).multi(),s=0;for(let i of Object.keys(e)){let o=e[i];if(o)for(let a of Object.keys(o)){let c=o[a],d=this.signalKey(i,a),u=this.indexKey(i);c===null?(r.del(d),r.sRem(u,a)):c!==void 0&&(r.set(d,JSON.stringify(c,lo.BufferJSON.replacer)),r.sAdd(u,a)),s+=1;}}s!==0&&await this.runWrite(()=>r.exec());},delete:async(e,t)=>{if(this.assertOpen(),t.length===0)return;let s=(await this.ensureReady()).multi();for(let i of t)s.del(this.signalKey(e,i)),s.sRem(this.indexKey(e),i);await this.runWrite(()=>s.exec());},clear:async()=>{this.assertOpen();let e=await this.ensureReady(),t=e.multi();for(let r of Mo){let s=this.indexKey(r),i=await this.runRead(()=>e.sMembers(s));for(let o of i)t.del(this.signalKey(r,o));t.del(s);}t.del(this.credsKey()),await this.runWrite(()=>t.exec());},close:async()=>{await this.shutdown();}};creds={readCreds:async()=>{this.assertOpen();let e=await this.ensureReady(),t=await this.runRead(()=>e.get(this.credsKey()));if(t!=null)return JSON.parse(t,lo.BufferJSON.reviver)},writeCreds:async e=>{this.assertOpen();let t=await this.ensureReady();await this.runWrite(()=>t.set(this.credsKey(),JSON.stringify(e,lo.BufferJSON.replacer)));},deleteCreds:async()=>{this.assertOpen();let e=await this.ensureReady();await this.runWrite(()=>e.del(this.credsKey()));}};credsKey(){return `${this.namespace}:auth:creds`}signalKey(e,t){return `${this.namespace}:auth:signal:${String(e)}:${t}`}indexKey(e){return `${this.namespace}:auth:signal-index:${String(e)}`}async ensureReady(){return this.ready||(this.ready=this.connect()),this.ready}async connect(){if(this.externalClient){if(!this.externalClient.isOpen)throw new m("STORE_CONNECTION_FAILED","provided redis client is not open (call await client.connect() first)");return this.externalClient}let e;try{e=await import('redis');}catch(r){throw Ao(r)?new m("STORE_NOT_AVAILABLE","redis peer dependency missing. Run: pnpm add redis",{cause:r}):new m("STORE_CONNECTION_FAILED","failed to load redis module",{cause:r})}let t=e.createClient({url:this.url});try{await t.connect();}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to connect to redis at ${this.url}`,{cause:r})}return this.ownedClient=t,t}async runRead(e){try{return await e()}catch(t){throw new m("STORE_READ_FAILED","redis read failed",{cause:t})}}async runWrite(e){try{return await e()}catch(t){throw new m("STORE_WRITE_FAILED","redis write failed",{cause:t})}}async shutdown(){if(!this.closed){if(this.closed=true,this.ownedClient){try{await this.ownedClient.quit();}catch{}this.ownedClient=void 0;}this.ready=void 0;}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","RedisAuthStore is closed")}};var Co="zaileys",Ne={get:"zaileys:get",set:"zaileys:set",del:"zaileys:del",clear:"zaileys:clear",list:"zaileys:list"},Eo=n=>{if(typeof n!="object"||n===null)return false;let e=n.code;return e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"},le=class{namespace;externalClient;url;client;closed=false;constructor(e){if(e.client&&e.url)throw new m("STORE_CONNECTION_FAILED","pass either client OR url, not both");if(!e.client&&!e.url)throw new m("STORE_CONNECTION_FAILED","ConvexKv requires either client or url");this.namespace=e.namespace??Co,this.externalClient=e.client,this.url=e.url;}async get(e){if(this.assertOpen(),e.length===0)return new Map;let t=await this.ensureClient(),r=await this.runRead(()=>t.query(Ne.get,{namespace:this.namespace,keys:[...e]})),s=new Map;for(let i of r??[])s.set(i.key,i.value);return s}async set(e){if(this.assertOpen(),e.length===0)return;let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.set,{namespace:this.namespace,items:[...e]}));}async del(e){if(this.assertOpen(),e.length===0)return;let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.del,{namespace:this.namespace,keys:[...e]}));}async clear(e){this.assertOpen();let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.clear,e===void 0?{namespace:this.namespace}:{namespace:this.namespace,prefix:e}));}async list(e,t){this.assertOpen();let r=await this.ensureClient(),s={namespace:this.namespace,prefix:e};return typeof t?.before=="number"&&(s.before=t.before),typeof t?.limit=="number"&&(s.limit=t.limit),await this.runRead(()=>r.query(Ne.list,s))??[]}close(){this.closed=true,this.client=void 0;}async ensureClient(){if(this.externalClient)return this.externalClient;if(this.client)return this.client;let e="convex/browser",t;try{t=await import(e);}catch(r){throw Eo(r)?new m("STORE_NOT_AVAILABLE","convex peer dependency missing. Run: pnpm add convex",{cause:r}):new m("STORE_CONNECTION_FAILED","failed to load convex module",{cause:r})}return this.client=new t.ConvexHttpClient(this.url),this.client}async runRead(e){try{return await e()}catch(t){throw new m("STORE_READ_FAILED","convex read failed",{cause:t})}}async runWrite(e){try{return await e()}catch(t){throw new m("STORE_WRITE_FAILED","convex write failed",{cause:t})}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","Convex store is closed")}};var mt="creds",bo="signal:",_e=(n,e)=>`${bo}${n}:${e}`,Vr=class{creds;signal;kv;constructor(e){this.kv=new le(e);let t=this.kv;this.creds={async readCreds(){let s=(await t.get([mt])).get(mt);return s===void 0?void 0:JSON.parse(s,lo.BufferJSON.reviver)},async writeCreds(r){await t.set([{key:mt,value:JSON.stringify(r,lo.BufferJSON.replacer)}]);},async deleteCreds(){await t.del([mt]);}},this.signal={async read(r,s){let i=s.map(c=>_e(r,c)),o=await t.get(i),a={};for(let c of s){let d=o.get(_e(r,c));a[c]=d===void 0?void 0:JSON.parse(d,lo.BufferJSON.reviver);}return a},async write(r){let s=[],i=[];for(let o of Object.keys(r)){let a=r[o];if(a)for(let c of Object.keys(a)){let d=a[c];d==null?i.push(_e(o,c)):s.push({key:_e(o,c),value:JSON.stringify(d,lo.BufferJSON.replacer)});}}s.length>0&&await t.set(s),i.length>0&&await t.del(i);},async delete(r,s){await t.del(s.map(i=>_e(r,i)));},async clear(){await t.clear();},async close(){t.close();}};}};var ft=null,To=async()=>{if(ft)return ft;try{return ft=(await import('better-sqlite3')).default,ft}catch(n){throw new m("STORE_NOT_AVAILABLE","better-sqlite3 belum terpasang. Run: pnpm add better-sqlite3",{cause:n})}},gt=n=>{try{return Buffer.from(JSON.stringify(n,lo.BufferJSON.replacer),"utf8")}catch(e){throw new m("STORE_WRITE_FAILED","failed to serialize sqlite blob",{cause:e})}},te=n=>{try{let e=Buffer.isBuffer(n)?n.toString("utf8"):Buffer.from(n).toString("utf8");return JSON.parse(e,lo.BufferJSON.reviver)}catch(e){throw new m("STORE_CORRUPTED","failed to parse sqlite blob",{cause:e})}},Gr=class{options;db=null;prepared=null;readyPromise=null;closed=false;boundSocket;listeners=new Map;constructor(e){this.options=e;}async saveMessage(e){let t=await this.ensureReady(),r=e.key.remoteJid??"",s=e.key.id??"",i=e.key.fromMe?1:0,o=Number(e.messageTimestamp??0);t.upsertMessage.run(r,s,i,o,gt(e));}async getMessage(e){let r=(await this.ensureReady()).getMessage.get(e.remoteJid??"",e.id??"",e.fromMe?1:0);return r?te(r.data):void 0}async listMessages(e,t){let r=await this.ensureReady(),s=t?.limit??100,i=t?.before;return (typeof i=="number"?r.listMessages.all(e,i,s):r.listMessages.all(e,Number.MAX_SAFE_INTEGER,s)).map(a=>te(a.data))}async saveChat(e){let t=await this.ensureReady(),r=e.id;if(!r)return;let s=e.archived?1:0;t.upsertChat.run(r,s,gt(e));}async getChat(e){let r=(await this.ensureReady()).getChat.get(e);return r?te(r.data):void 0}async listChats(e){let t=await this.ensureReady();return (e?.archived===true?t.listChatsArchived.all():t.listChats.all()).map(s=>te(s.data))}async saveContact(e){(await this.ensureReady()).upsertContact.run(e.id,gt(e));}async getContact(e){let r=(await this.ensureReady()).getContact.get(e);return r?te(r.data):void 0}async listContacts(){return (await this.ensureReady()).listContacts.all().map(r=>te(r.data))}async savePresence(e,t){(await this.ensureReady()).upsertPresence.run(e,gt(t));}async getPresence(e){let r=(await this.ensureReady()).getPresence.get(e);return r?te(r.data):void 0}bind(e){if(this.closed)throw new m("STORE_CLOSED","SqliteMessageStore is closed");this.boundSocket=e;let t=(...o)=>{let c=o[0]?.messages;if(Array.isArray(c))for(let d of c)this.saveMessage(d).catch(()=>{});},r=(...o)=>{let a=o[0];if(Array.isArray(a))for(let c of a)this.saveChat(c).catch(()=>{});},s=(...o)=>{let a=o[0];if(Array.isArray(a))for(let c of a)this.saveContact(c).catch(()=>{});},i=(...o)=>{let a=o[0];if(a?.presences)for(let c of Object.keys(a.presences)){let d=a.presences[c];d&&this.savePresence(c,d).catch(()=>{});}};this.listeners.set("messages.upsert",t),this.listeners.set("chats.upsert",r),this.listeners.set("contacts.upsert",s),this.listeners.set("presence.update",i);for(let[o,a]of this.listeners)e.ev.on(o,a);}async clear(){let e=await this.ensureReady();this.db.transaction(()=>{e.clearMessages.run(),e.clearChats.run(),e.clearContacts.run(),e.clearPresence.run();})();}async close(){if(!this.closed){if(this.closed=true,this.boundSocket?.ev.off)for(let[e,t]of this.listeners)this.boundSocket.ev.off(e,t);this.listeners.clear(),this.boundSocket=void 0;try{this.db?.close();}catch(e){throw new m("STORE_WRITE_FAILED","failed to close sqlite database",{cause:e})}finally{this.db=null,this.prepared=null;}}}async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","SqliteMessageStore is closed");return this.prepared?this.prepared:(this.readyPromise||(this.readyPromise=this.openAndMigrate().catch(e=>{throw this.readyPromise=null,e})),await this.readyPromise,this.prepared)}async openAndMigrate(){let e=await To(),t;try{t=new e(this.options.database,{readonly:this.options.readonly??!1});}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to open sqlite database at ${String(this.options.database)}`,{cause:r})}try{t.pragma("journal_mode = WAL"),t.pragma("synchronous = NORMAL"),t.pragma("foreign_keys = ON"),t.exec(`CREATE TABLE IF NOT EXISTS messages (
|
|
17
18
|
remote_jid TEXT NOT NULL,
|
package/dist/index.mjs
CHANGED
|
@@ -11,7 +11,8 @@ import lo,{prepareWAMessageMedia,generateWAMessageFromContent,BufferJSON,makeCac
|
|
|
11
11
|
`||n==="\r",Ws=n=>{let e=[],t="",r=null,s=false,i=false,o=true;for(let a=0;a<n.length;a+=1){let c=n[a];if(s){t+=c,s=false,i=true,o=false;continue}if(c==="\\"&&r!==null){s=true;continue}if(r!==null){c===r?r=null:t+=c,o=false;continue}if((c==='"'||c==="'")&&o){r=c,i=true,o=false;continue}if(Fs(c)){i&&(e.push(t),t="",i=false),o=true;continue}t+=c,i=true,o=false;}return i&&e.push(t),e},Us=(n,e)=>{for(let t of e)if(t.length>0&&n.startsWith(t))return t;return null},js=n=>({matched:false,args:[],flags:{},json:void 0,raw:n});function Dt(n,e){let t=Us(n,e);if(t===null)return js(n);let r=n.slice(t.length),s=Ws(r),i={matched:true,args:[],flags:{},json:void 0,raw:n};if(s.length===0)return i.name="",i;i.name=(s[0]??"").toLowerCase();let o=false;for(let a=1;a<s.length;a+=1){let c=s[a];if(c!==void 0){if(c.startsWith("--")){let d=c.slice(2);if(d.length===0){i.args.push(c);continue}let u=d.indexOf("=");if(u!==-1){let y=d.slice(0,u),p=d.slice(u+1);i.flags[y]=p;continue}let l=s[a+1];l!==void 0&&!l.startsWith("--")?(i.flags[d]=l,a+=1):i.flags[d]=true;continue}if(!o&&Ds(c)){let d=Bs(c);d.ok&&(i.json=d.value,o=true);}i.args.push(c);}}return i}var Ks=n=>{let e=n.trim().split(/\s+/).filter(t=>t.length>0).map(t=>t.toLowerCase());if(e.length===0)throw new b("INVALID_COMMAND_NAME","empty command segment in spec");return e},ze=n=>n.join(" "),Se=class{paths=new Map;defs=[];maxDepth=1;register(e,t){if(e.trim().length===0)throw new b("INVALID_COMMAND_NAME","command spec must not be empty");let r=e.split("|").map(a=>Ks(a)),s=r[0],i=r.slice(1).map(a=>ze(a)),o={name:ze(s),aliases:i,parts:s,handler:t};for(let a of r){let c=ze(a);if(this.paths.has(c))throw new b("DUPLICATE_COMMAND",`command "${c}" is already registered`)}for(let a of r)this.paths.set(ze(a),o),a.length>this.maxDepth&&(this.maxDepth=a.length);this.defs.push(o);}resolve(e){if(!e.matched||e.name===void 0||e.name.length===0)return;let t=[e.name.toLowerCase(),...e.args.map(s=>s.toLowerCase())],r=Math.min(this.maxDepth,t.length);for(let s=r;s>=1;s-=1){let i=t.slice(0,s).join(" "),o=this.paths.get(i);if(o!==void 0)return {def:o,args:e.args.slice(s-1)}}}list(){return [...this.defs]}};async function Bt(n,e,t){let r=-1,s={error:void 0,thrown:false},i=async o=>{if(o<=r)throw new b("MIDDLEWARE_ERROR","next() called multiple times");if(r=o,o===n.length){try{await t();}catch(c){throw s.error=c,s.thrown=true,c}return}let a=n[o];try{await a(e,()=>i(o+1));}catch(c){throw s.thrown||c instanceof b?c:new b("MIDDLEWARE_ERROR","middleware threw during execution",{cause:c})}};await i(0);}function Ft(n){if(n.prefixes.length===0)return {detach(){}};let e=s=>{let i=Dt(s.text,n.prefixes);if(!i.matched)return;let o=n.registry.resolve(i);if(o===void 0)return;let a={command:o.def.name,args:o.args,flags:i.flags,json:i.json,raw:i.raw},c=n.buildContext(a,s);Promise.resolve(Bt(n.middleware,c,()=>o.def.handler(c))).catch(d=>{let u=d instanceof b?d:new b("HANDLER_ERROR","command handler failed",{cause:d});n.logger.error(u,"command dispatch failed");});},t=n.onText(e),r=false;return {detach(){r||(r=true,t());}}}var E=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysAutomationError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var qs=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n)),X=class{now;sleep;perJidRatePerMs;perJidCapacity;global;perJid=new Map;constructor(e,t={}){if(!(e.perSec>0))throw new E("RATE_LIMIT_INVALID","perSec must be greater than zero");if(e.perJidPerSec!==void 0&&!(e.perJidPerSec>0))throw new E("RATE_LIMIT_INVALID","perJidPerSec must be greater than zero");if(e.burst!==void 0&&!(e.burst>0))throw new E("RATE_LIMIT_INVALID","burst must be greater than zero");this.now=t.now??Date.now,this.sleep=t.sleep??qs;let r=e.burst??e.perSec;this.global={tokens:r,capacity:r,ratePerMs:e.perSec/1e3,last:this.now()},e.perJidPerSec!==void 0&&(this.perJidRatePerMs=e.perJidPerSec/1e3,this.perJidCapacity=e.perJidPerSec);}async acquire(e){await this.consume(this.global),e!==void 0&&this.perJidRatePerMs!==void 0&&await this.consume(this.bucketFor(e));}bucketFor(e){let t=this.perJid.get(e);if(t)return t;let r=this.perJidCapacity??1,s={tokens:r,capacity:r,ratePerMs:this.perJidRatePerMs??1,last:this.now()};return this.perJid.set(e,s),s}consume(e){if(this.refill(e),e.tokens>=1)return e.tokens-=1,Promise.resolve();let t=(1-e.tokens)/e.ratePerMs;return e.tokens-=1,this.sleep(t)}refill(e){let t=this.now(),r=t-e.last;r>0&&(e.tokens=Math.min(e.capacity,e.tokens+r*e.ratePerMs),e.last=t);}};var Js={"group.create":6e4,"group.join":3e4,"group.participants":1e4,"group.update":3e3,"community.create":12e4,"community.join":3e4,"community.update":3e3,"newsletter.create":12e4,"newsletter.follow":2e3,"newsletter.update":3e3},$s=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n));function Wt(n={},e={}){let t=n.enabled??true,r=e.now??Date.now,s=e.sleep??$s,i={...Js,...n.intervalsMs??{}},o=new Map,a=new Map,c=async(d,u)=>{let l=i[d]??0,y=o.get(d);if(y!==void 0&&l>0){let p=l-(r()-y);p>0&&await s(p);}return o.set(d,r()),u()};return {run(d,u){if(!t)return u();let y=(a.get(d)??Promise.resolve()).then(()=>c(d,u),()=>c(d,u));return a.set(d,y.then(()=>{},()=>{})),y}}}var Vs={maxRetries:0,backoffMs:()=>0},Gs=n=>n<=0?Promise.resolve():new Promise(e=>setTimeout(e,n)),Me=class{concurrency;retry;sleep;pending=[];active=0;idleWaiters=[];constructor(e={},t={}){this.concurrency=e.concurrency??1,this.retry=e.retry??Vs,this.sleep=t.sleep??Gs;}add(e){return new Promise((t,r)=>{this.pending.push({run:()=>this.execute(e).then(t,r)}),this.pump();})}onIdle(){return this.active===0&&this.pending.length===0?Promise.resolve():new Promise(e=>{this.idleWaiters.push(e);})}pump(){for(;this.active<this.concurrency&&this.pending.length>0;){let e=this.pending.shift();if(!e)break;this.active++,e.run().finally(()=>{this.active--,this.pump(),this.settleIdle();});}}settleIdle(){if(this.active===0&&this.pending.length===0&&this.idleWaiters.length>0){let e=this.idleWaiters;this.idleWaiters=[];for(let t of e)t();}}async execute(e){let t=0;for(;;)try{return await e()}catch(r){if(t>=this.retry.maxRetries)throw r;t+=1,await this.sleep(this.retry.backoffMs(t));}}};var Hs=n=>n instanceof Error?n:new Error(typeof n=="string"?n:String(n));async function Ut(n,e,t,r={}){let s={sent:[],failed:[]};if(n.length===0)return s;let i=r.rateLimitPerSec??5,o={};t.now&&(o.now=t.now),t.sleep&&(o.sleep=t.sleep);let a=t.limiter??new X({perSec:i},o),c=r.retry,d=t.sleep?{sleep:t.sleep}:{},u=c?new Me({concurrency:1,retry:c},d):void 0,l=n.length,y=0;for(let p of n){await a.acquire(p);let g=()=>e(t.sendTo(p)).then(()=>{});try{u?await u.add(g):await g(),s.sent.push(p),y+=1,r.onProgress?.(y,l,p,!0);}catch(w){s.failed.push({jid:p,error:Hs(w)}),y+=1,r.onProgress?.(y,l,p,false);}}return s}var zs=1e3,Ae=class{constructor(e,t,r){this.getSocket=e;this.throttleEnabled=t?.enabled??true,this.minIntervalMs=t?.minIntervalMs??zs,this.now=r?.now??Date.now;}throttleEnabled;minIntervalMs;now;lastSent=new Map;requireSocket(){let e=this.getSocket();if(!e)throw new E("NOT_CONNECTED","client not connected");return e}throttled(e,t){if(!this.throttleEnabled||this.minIntervalMs<=0)return false;let r=`${e}:${t??"global"}`,s=this.lastSent.get(r),i=this.now();return s!==void 0&&i-s<this.minIntervalMs?true:(this.lastSent.set(r,i),false)}async update(e,t){let r=this.requireSocket();if(!this.throttled(e,t))try{await(t===void 0?r.sendPresenceUpdate(e):r.sendPresenceUpdate(e,t));}catch(s){throw new E("PRESENCE_FAILED",`presence update '${e}' failed`,{cause:s})}}scheduleClear(e,t){let r=this.getSocket();if(!r)return;let s=setTimeout(()=>{r.sendPresenceUpdate("paused",e).catch(()=>{});},t);typeof s.unref=="function"&&s.unref();}async online(){await this.update("available");}async offline(){await this.update("unavailable");}async typing(e,t){await this.update("composing",e),t!==void 0&&this.scheduleClear(e,t);}async recording(e,t){await this.update("recording",e),t!==void 0&&this.scheduleClear(e,t);}};var Zs={set:(n,e)=>setTimeout(n,e),clear:n=>clearTimeout(n)},Xs=n=>typeof n=="object"&&n!==null&&typeof n.recipient=="string"&&typeof n.content=="object",Ce=class{store;sendSnapshot;now;timer;logger;acquire;memory=new Map;timers=new Map;constructor(e){this.store=e.store,this.sendSnapshot=e.sendSnapshot,this.now=e.now??(()=>Date.now()),this.timer=e.timer??Zs,this.logger=e.logger,this.acquire=e.acquire;}async scheduleAt(e,t){let r=e.getTime();if(Number.isNaN(r))throw new E("SCHEDULE_INVALID","scheduleAt requires a valid Date");let s=await this.evaluate(t),i=randomUUID(),o={id:i,fireAt:r,recipient:s.recipient,payload:s};return await this.persist(o),this.arm(o),{id:i,cancel:()=>{this.cancel(i);}}}async loadPending(){let e=this.store.listScheduledJobs;if(!e){for(let r of this.memory.values())this.timers.has(r.id)||this.arm(r);return}let t;try{t=await e.call(this.store);}catch(r){this.logger?.warn(r,"scheduler loadPending failed");return}for(let r of t)this.timers.has(r.id)||(this.memory.set(r.id,r),this.arm(r));}dispose(){for(let e of this.timers.values())this.timer.clear(e);this.timers.clear();}cancel(e){let t=this.timers.get(e);t!==void 0&&(this.timer.clear(t),this.timers.delete(e)),this.memory.delete(e),this.remove(e);}arm(e){let t=Math.max(0,e.fireAt-this.now()),r=this.timer.set(()=>{this.fire(e);},t);this.timers.set(e.id,r);}async fire(e){if(this.timers.delete(e.id),Xs(e.payload))try{this.acquire&&await this.acquire(),await this.sendSnapshot(e.payload);}catch(t){this.logger?.warn(t,"scheduled send failed; retaining job for retry");return}this.memory.delete(e.id),await this.remove(e.id);}async persist(e){let t=this.store.saveScheduledJob;if(t){await t.call(this.store,e);return}this.memory.set(e.id,e);}async remove(e){let t=this.store.deleteScheduledJob;if(t)try{await t.call(this.store,e);}catch(r){this.logger?.warn(r,"scheduler deleteScheduledJob failed");}this.memory.delete(e);}async evaluate(e){let t,r=0,s={sendMessage:async(o,a,c)=>{if(r+=1,r>1)throw new E("SCHEDULE_INVALID","scheduling multi-part messages (e.g. album) is not supported; schedule a single message");return t=c?{recipient:o,content:a,options:c}:{recipient:o,content:a},{key:{remoteJid:o,id:"scheduled-snapshot",fromMe:true}}},relayMessage:async()=>{throw new E("SCHEDULE_INVALID","scheduling interactive/relayed content is not supported; schedule a text or media message")}},i=$.create(s,"");try{await e(i);}catch(o){throw o instanceof E?o:new E("SCHEDULE_INVALID","scheduled builder evaluation failed",{cause:o})}if(!t)throw new E("SCHEDULE_INVALID","scheduled builder produced no content");return t}};var Q="[zaileys]",Qs="The saved session looks invalid or corrupted (connection keeps closing before it authenticates). Delete the auth folder (default: ./.zaileys) and run again to scan a fresh QR / request a new pairing code.";function Un(n){switch(n.kind){case "connecting":return `${Q} Connecting to WhatsApp (session: ${n.sessionId})...`;case "qr":return `${Q} Scan the QR code above with WhatsApp > Linked devices to authenticate.`;case "pairing-code":return `${Q} Pairing code: ${n.code} \u2014 enter it in WhatsApp > Linked devices > Link with phone number.`;case "connected":return `${Q} Connected as ${n.id}.`;case "reconnecting":{let e=(n.delayMs/1e3).toFixed(1),t=`${Q} Connection lost (${n.reason}). Reconnecting in ${e}s (attempt ${n.attempt})...`;return n.invalidCredsSuspected?`${t}
|
|
12
12
|
${Q} ${Qs}`:t}case "disconnect":return n.willReconnect?null:`${Q} Disconnected (${n.reason}).`;default:return null}}var Wn=false,ei=["Closing session:","Closing open session","Closing stale open session","Opening session:","Removing old closed session","Migrating session to:","Session already closed","Decrypted message with closed session","Failed to decrypt message with any known session","Session error:"],ti=n=>typeof n[0]=="string"&&ei.some(e=>n[0].startsWith(e));function jn(){if(Wn)return;Wn=true;let n=e=>{let t=console[e].bind(console);console[e]=(...r)=>{ti(r)||t(...r);};};n("info"),n("warn"),n("error");}var m=class n extends Error{code;cause;constructor(e,t,r){super(t),this.name="ZaileysStoreError",this.code=e,r&&"cause"in r&&(this.cause=r.cause),typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n);}};var ri="./.zaileys/auth",si=n=>n.replace(/[^a-zA-Z0-9._-]/g,e=>`_${e.charCodeAt(0).toString(16)}`),be=n=>typeof n=="object"&&n!==null&&n.code==="ENOENT",Ze=class{basePath;closed=false;constructor(e){this.basePath=e?.basePath??ri;}signal={read:async(e,t)=>{this.assertOpen();let r={};return await Promise.all(t.map(async s=>{let i=this.signalPath(e,s);try{let o=await promises.readFile(i,"utf8");r[s]=JSON.parse(o,BufferJSON.reviver);}catch(o){if(be(o))return;throw new m("STORE_READ_FAILED",`failed to read ${i}`,{cause:o})}})),r},write:async e=>{this.assertOpen();let t=[];for(let r of Object.keys(e)){let s=e[r];if(!s)continue;let i=this.signalDir(r);await promises.mkdir(i,{recursive:true});for(let o of Object.keys(s)){let a=s[o],c=this.signalPath(r,o);a===null?t.push(promises.unlink(c).catch(d=>{if(!be(d))throw new m("STORE_WRITE_FAILED",`failed to unlink ${c}`,{cause:d})})):a!==void 0&&t.push(this.atomicWrite(c,JSON.stringify(a,BufferJSON.replacer)));}}await Promise.all(t);},delete:async(e,t)=>{this.assertOpen(),await Promise.all(t.map(async r=>{let s=this.signalPath(e,r);try{await promises.unlink(s);}catch(i){if(!be(i))throw new m("STORE_WRITE_FAILED",`failed to unlink ${s}`,{cause:i})}}));},clear:async()=>{this.assertOpen(),await promises.rm(this.basePath,{recursive:true,force:true});},close:async()=>{this.closed=true;}};creds={readCreds:async()=>{this.assertOpen();try{let e=await promises.readFile(this.credsPath(),"utf8");return JSON.parse(e,BufferJSON.reviver)}catch(e){if(be(e))return;throw new m("STORE_READ_FAILED","failed to read creds.json",{cause:e})}},writeCreds:async e=>{this.assertOpen(),await promises.mkdir(this.basePath,{recursive:true}),await this.atomicWrite(this.credsPath(),JSON.stringify(e,BufferJSON.replacer));},deleteCreds:async()=>{this.assertOpen();try{await promises.unlink(this.credsPath());}catch(e){if(!be(e))throw new m("STORE_WRITE_FAILED","failed to delete creds.json",{cause:e})}}};credsPath(){return Ee.join(this.basePath,"creds.json")}signalDir(e){return Ee.join(this.basePath,"signal",String(e))}signalPath(e,t){return Ee.join(this.signalDir(e),`${si(t)}.json`)}async atomicWrite(e,t){let r=Ee.join(Ee.dirname(e),`tmp-${randomBytes(8).toString("hex")}`);try{await promises.writeFile(r,t,"utf8"),await promises.rename(r,e);}catch(s){throw await promises.unlink(r).catch(()=>{}),new m("STORE_WRITE_FAILED",`failed to write ${e}`,{cause:s})}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","FileAuthStore is closed")}};function Kn(n,e){let t=n.signal,s=makeCacheableSignalKeyStore({get:(o,a)=>t.read(o,a),set:o=>t.write(o),clear:()=>t.clear()},e?.logger??void 0),i={read:async(o,a)=>await s.get(o,[...a]),write:async o=>{await s.set(o);},delete:async(o,a)=>{await t.delete(o,a);let c={},d={};for(let u of a)d[u]=null;c[o]=d,await s.set(c);},clear:async()=>{let o=s.clear;typeof o=="function"?await o.call(s):await t.clear();},close:()=>t.close()};return {creds:n.creds,signal:i}}function qn(n,e){return {get:async(t,r)=>await n.read(t,r),set:async t=>{await n.write(t);},clear:async()=>{await n.clear();}}}var oi=429;function Jn(n){if(n===oi)return "rate-limited";switch(n){case DisconnectReason.loggedOut:return "logged-out";case DisconnectReason.forbidden:return "forbidden";case DisconnectReason.connectionLost:return "connection-lost";case DisconnectReason.multideviceMismatch:return "multi-device-mismatch";case DisconnectReason.connectionClosed:return "connection-closed";case DisconnectReason.connectionReplaced:return "connection-replaced";case DisconnectReason.badSession:return "bad-session";case DisconnectReason.unavailableService:return "unavailable-service";case DisconnectReason.restartRequired:return "restart-required";default:return "unknown"}}function Te(n){return n==="logged-out"||n==="connection-replaced"||n==="forbidden"}function Xe(n){return n==="rate-limited"}function $n(n){return n==="logged-out"||n==="connection-replaced"||n==="forbidden"||n==="bad-session"}function Al(n){return !Te(n)}var Qe={enabled:true,maxQrAttempts:5,maxPairingAttempts:3,pairingCooldownMs:6e4},ai=3e5;function Vn(n={}){let e=n.enabled??Qe.enabled,t=n.maxQrAttempts??Qe.maxQrAttempts,r=n.maxPairingAttempts??Qe.maxPairingAttempts,s=n.pairingCooldownMs??Qe.pairingCooldownMs,i=0,o=0,a=0,c=y=>y<=0?0:Math.min(s*y,ai);return {evaluate:(y,p)=>{if(!e)return {allowed:true,waitMs:0,attempts:y==="pairing"?o:i,max:Number.POSITIVE_INFINITY};if(y==="pairing"){if(o>=r)return {allowed:false,reason:"budget-exhausted",waitMs:0,attempts:o,max:r};let g=c(o),w=p-a;return o>0&&w<g?{allowed:false,reason:"cooldown",waitMs:g-w,attempts:o,max:r}:{allowed:true,waitMs:0,attempts:o,max:r}}return i>=t?{allowed:false,reason:"budget-exhausted",waitMs:0,attempts:i,max:t}:{allowed:true,waitMs:0,attempts:i,max:t}},record:(y,p)=>{y==="pairing"?(o+=1,a=p):i+=1;},reset:()=>{i=0,o=0,a=0;},get enabled(){return e},get qrAttempts(){return i},get pairingAttempts(){return o}}}var ci=/[\s\-()+]/g;function di(n){return typeof n!="string"?"":n.replace(ci,"")}function li(n){if(!n||typeof n!="string"||!n.trim())throw new Error("phoneNumber is required");let e=di(n);if(!/^\d+$/.test(e))throw new Error("phoneNumber must be E.164 with country code");if(e.length<8||e.length>15)throw new Error("phoneNumber must be E.164 with country code");return e}function Gn(n){let e=li(n.phoneNumber),t=n.ttlMs??6e4;return {phoneNumber:e,async requestCode(r){let s;try{s=await r.requestPairingCode(e);}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`failed to request pairing code: ${o}`)}return {code:s,expiresAt:Date.now()+t}}}}function pi(n){return !n||typeof n!="string"||!n.trim()?Promise.reject(new Error("qr string is required")):new Promise(e=>{ui.generate(n,{small:true},t=>e(t));})}async function Hn(n,e=t=>{process.stdout.write(t);}){let t=await pi(n);e(t+`
|
|
13
13
|
`);}var oe={enabled:true,maxAttempts:Number.POSITIVE_INFINITY,initialDelayMs:3e3,maxDelayMs:6e4,jitterFactor:.2,rateLimitedDelayMs:3e5};function zn(n,e){let t=n?.enabled??oe.enabled,r=n?.maxAttempts??oe.maxAttempts,s=n?.initialDelayMs??oe.initialDelayMs,i=n?.maxDelayMs??oe.maxDelayMs,o=n?.jitterFactor??oe.jitterFactor,a=n?.rateLimitedDelayMs??oe.rateLimitedDelayMs,c=e?.random??Math.random,d=0;return {next:y=>{if(!t||Te(y))return null;let p=d+1;if(p>r)return null;if(d=p,Xe(y))return {attempt:p,delayMs:a};let g=Math.pow(2,p-1),w=Math.min(i,s*g),C=1+(c()*2-1)*o,A=w*C,K=Math.min(i,Math.max(0,A));return {attempt:p,delayMs:Math.round(K)}},reset:()=>{d=0;},get attempts(){return d}}}var mi={idle:["connecting"],connecting:["qr-pending","pairing-pending","connected","reconnecting","disconnecting","disconnected"],"qr-pending":["connecting","connected","reconnecting","disconnecting","disconnected"],"pairing-pending":["connecting","connected","reconnecting","disconnecting","disconnected"],connected:["disconnecting","reconnecting","disconnected"],reconnecting:["connecting","disconnecting","disconnected"],disconnecting:["disconnected"],disconnected:["idle","connecting","reconnecting"]};function Yn(n="idle"){let e=n,t=new Set,r=s=>mi[e].includes(s);return {get state(){return e},canTransition:r,transition(s){if(!r(s))throw new Error(`invalid state transition: ${e} -> ${s}`);let i=e;e=s;for(let o of t)try{o(i,s);}catch{}},onChange(s){return t.add(s),()=>{t.delete(s);}}}}var jt=n=>`${n.remoteJid??""}|${n.id??""}|${n.fromMe?1:0}`,et=class{messages=new Map;messagesByJid=new Map;chats=new Map;contacts=new Map;presence=new Map;boundSocket;listeners=new Map;closed=false;async saveMessage(e){this.assertOpen();let t=jt(e.key);this.messages.set(t,structuredClone(e));let r=e.key.remoteJid??"",s=this.messagesByJid.get(r);s||(s=new Set,this.messagesByJid.set(r,s)),s.add(t);}async getMessage(e){this.assertOpen();let t=this.messages.get(jt(e));return t?structuredClone(t):void 0}async listMessages(e,t){this.assertOpen();let r=this.messagesByJid.get(e);if(!r)return [];let s=[];for(let o of r){let a=this.messages.get(o);a&&s.push(a);}s.sort((o,a)=>Number(a.messageTimestamp)-Number(o.messageTimestamp));let i=s;if(typeof t?.before=="number"){let o=t.before;i=i.filter(a=>Number(a.messageTimestamp)<o);}return typeof t?.limit=="number"&&(i=i.slice(0,t.limit)),i.map(o=>structuredClone(o))}async saveChat(e){this.assertOpen();let t=e.id;t&&this.chats.set(t,structuredClone(e));}async getChat(e){this.assertOpen();let t=this.chats.get(e);return t?structuredClone(t):void 0}async listChats(e){this.assertOpen();let t=[];for(let r of this.chats.values())e?.archived===true&&r.archived!==true||t.push(structuredClone(r));return t}async saveContact(e){this.assertOpen(),this.contacts.set(e.id,structuredClone(e));}async getContact(e){this.assertOpen();let t=this.contacts.get(e);return t?structuredClone(t):void 0}async listContacts(){return this.assertOpen(),Array.from(this.contacts.values(),e=>structuredClone(e))}async savePresence(e,t){this.assertOpen(),this.presence.set(e,structuredClone(t));}async getPresence(e){this.assertOpen();let t=this.presence.get(e);return t?structuredClone(t):void 0}bind(e){this.assertOpen(),this.boundSocket=e;let t=(...c)=>{let u=c[0]?.messages;if(Array.isArray(u))for(let l of u)this.saveMessage(l).catch(()=>{});},r=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d){let l=this.messages.get(jt(u.key));if(l){let y={...l,...u.update};this.saveMessage(y).catch(()=>{});}}},s=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d)this.saveChat(u).catch(()=>{});},i=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d){let y={...this.chats.get(u.id)??{},...u};this.saveChat(y).catch(()=>{});}},o=(...c)=>{let d=c[0];if(Array.isArray(d))for(let u of d)this.saveContact(u).catch(()=>{});},a=(...c)=>{let d=c[0];if(d?.presences)for(let u of Object.keys(d.presences)){let l=d.presences[u];l&&this.savePresence(u,l).catch(()=>{});}};this.listeners.set("messages.upsert",t),this.listeners.set("messages.update",r),this.listeners.set("chats.upsert",s),this.listeners.set("chats.update",i),this.listeners.set("contacts.upsert",o),this.listeners.set("presence.update",a);for(let[c,d]of this.listeners)e.ev.on(c,d);}async clear(){this.assertOpen(),this.messages.clear(),this.messagesByJid.clear(),this.chats.clear(),this.contacts.clear(),this.presence.clear();}async close(){if(!this.closed){if(this.closed=true,this.boundSocket?.ev.off)for(let[e,t]of this.listeners)this.boundSocket.ev.off(e,t);return this.listeners.clear(),this.boundSocket=void 0,Promise.resolve()}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","MemoryMessageStore is closed")}};var gi=["silent","fatal","error","warn","info","debug","trace"];function hi(n){if(n)return n;let e=process.env.ZAILEYS_DEBUG;return e===void 0?"silent":e==="1"?"info":gi.includes(e)?e:"silent"}function yi(n={}){let e=hi(n.level),t=fi({level:e});return n.sessionId!==void 0?t.child({sessionId:n.sessionId}):t}var Zn=["debug","info","warn","error","fatal"];function wi(n){if(n===null||typeof n!="object")return false;for(let e of Zn)if(typeof n[e]!="function")return false;return true}function Pe(){}function vi(n){let e={debug:Pe,info:Pe,warn:Pe,error:Pe,fatal:Pe};for(let t of Zn){let r=n[t];typeof r=="function"&&(e[t]=r.bind(n));}return e}function Kt(n,e){return n===void 0?e??yi():wi(n)?n:vi(n)}var _l=Object.freeze(["HISTORY_SYNC_NOTIFICATION","APP_STATE_SYNC_KEY_SHARE","LID_MIGRATION_MAPPING_SYNC","PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE"]),Xn=n=>{let e=n.requestId!=null,t=n.messages.filter(r=>{if(e)return false;let s=r.messageStubParameters;if(Array.isArray(s)){for(let i of s)if(typeof i=="string"&&i.startsWith("requestId:"))return false}return true});return {...n,messages:t}};var Si=new Set(["offer","ringing"]),Mi=new Set(["timeout","reject","accept","terminate"]),Qn=n=>{let e=n instanceof Date?n.getTime():Date.parse(String(n));return Number.isFinite(e)?e:0},er=n=>typeof n.id!="string"||n.id.length===0||!Si.has(n.status)?null:{kind:"incoming",callId:n.id,from:n.from,isGroup:n.isGroup===true,isVideo:n.isVideo===true,timestamp:Qn(n.date),status:n.status},tr=n=>typeof n.id!="string"||n.id.length===0||!Mi.has(n.status)?null:{kind:"ended",callId:n.id,from:n.from,isGroup:n.isGroup===true,isVideo:n.isVideo===true,timestamp:Qn(n.date),status:n.status};var x=n=>typeof n=="string"&&n.length>0,Ai=n=>{let e={};return typeof n.subject=="string"&&(e.subject=n.subject),typeof n.desc=="string"&&(e.description=n.desc),typeof n.announce=="boolean"&&(e.announce=n.announce),typeof n.restrict=="boolean"&&(e.restrict=n.restrict),typeof n.ephemeralDuration=="number"&&(e.ephemeralDuration=n.ephemeralDuration),e},nr=(n,e,t)=>n.filter(r=>x(r?.id)).map(r=>{let s={jid:r.id},i=r.lid??r.pn??r.phoneNumber;return x(i)&&(s.participantAlt=i),x(e)&&(s.authorPn=e),x(t)&&(s.authorUsername=t),s.isAdmin=r.admin==="admin"||r.admin==="superadmin",s}),rr=n=>x(n?.id)?{groupId:n.id,update:Ai(n),timestamp:Date.now()}:null,sr=n=>{if(!x(n?.groupId)||!x(n?.participant))return null;let e={groupId:n.groupId,participant:n.participant,label:typeof n.label=="string"?n.label:"",timestamp:typeof n.messageTimestamp=="number"?n.messageTimestamp:Date.now()};return x(n.participantAlt)&&(e.participantAlt=n.participantAlt),e},Ci=new Set(["add","invite","invite-link"]),Ei=new Set(["remove","leave"]),ir=n=>{if(!x(n?.id)||!Ci.has(n.action)||!Array.isArray(n.participants)||n.participants.length===0)return null;let e=nr(n.participants,n.authorPn,n.authorUsername);if(e.length===0)return null;let t={groupId:n.id,participants:e,action:n.action,timestamp:Date.now()};return x(n.author)&&(t.by=n.author),t},or=n=>{if(!x(n?.id)||!Ei.has(n.action)||!Array.isArray(n.participants)||n.participants.length===0)return null;let e=nr(n.participants,n.authorPn,n.authorUsername);if(e.length===0)return null;let t={groupId:n.id,participants:e,action:n.action,timestamp:Date.now()};return x(n.author)&&(t.by=n.author),t};var ke=n=>typeof n!="string"||n.length===0?null:jidNormalizedUser(n),V=n=>typeof n=="string"&&n.length>0?n:void 0,Pi=["@s.whatsapp.net","@c.us"],ki=n=>n.endsWith("@lid"),Ii=n=>Pi.some(e=>n.endsWith(e)),W=(n,e)=>{if(!n)return null;let t=V(n.participant)??n.remoteJid,r=ke(t);if(r===null)return null;let s=V(n.participantAlt)??V(n.remoteJidAlt),i=s!=null?ke(s):null,o=V(n.participantUsername)??V(n.remoteJidUsername),a={jid:r,isMe:n.fromMe===true},c=i!==null?[r,i]:[r],d=c.find(ki),u=c.find(Ii);d!==void 0&&(a.lid=d),u!==void 0&&(a.pn=u),o!==void 0&&(a.username=o);let l=V(e);return l!==void 0&&(a.pushName=l),a},ar=n=>{if(!n)return null;let e=n.stanzaId;if(typeof e!="string"||e.length===0)return null;let t=V(n.participant),r=V(n.remoteJid)??t,s={id:e};typeof r=="string"&&(s.remoteJid=r),typeof t=="string"&&(s.participant=t);let i={key:s},o=W(s);return o&&(i.sender=o),i},tt=n=>{if(!n)return {mentionedJids:[],mentionAll:false};let e=n.mentionedJid,t=Array.isArray(e)?e.filter(i=>typeof i=="string"):[],r=n.groupMentions,s=Array.isArray(r)&&r.length>0;return {mentionedJids:t,mentionAll:s}};var Ie=n=>isJidGroup(n)===true,ae=n=>{if(n==null)return null;if(typeof n=="number")return Number.isFinite(n)?n:null;if(typeof n.toNumber=="function"){let e=n.toNumber();return Number.isFinite(e)?e:null}return null};var Oi=["quick_reply","cta_url","cta_call","button_click"],xi=["list_select","single_select"],j=n=>typeof n=="string"&&n.length>0,dr=n=>{let e=typeof n.pushName=="string"?n.pushName:void 0;return W(n.key,e)},lr=n=>ae(n.messageTimestamp)??0,ur=(n,e)=>{if(!j(n))return null;try{let t=JSON.parse(n);return t!==null&&typeof t=="object"?t:null}catch{return e?.debug({paramsJson:n},"interactive: failed to parse nativeFlow paramsJson"),null}},nt=(n,e)=>{for(let t of e){let r=n[t];if(j(r))return r}},pr=(n,e)=>{let t=n.message;if(!t)return null;let r=t.buttonsResponseMessage;if(r&&j(r.selectedButtonId))return qt(n,r.selectedButtonId,r.selectedDisplayText);let s=t.templateButtonReplyMessage;if(s&&j(s.selectedId))return qt(n,s.selectedId,s.selectedDisplayText);let i=t.interactiveResponseMessage?.nativeFlowResponseMessage;if(i&&j(i.name)&&Oi.includes(i.name)){let o=ur(i.paramsJson,e.logger);if(!o)return null;let a=nt(o,["id","button_id"]);return a===void 0?null:qt(n,a,nt(o,["display_text"])??null)}return null},qt=(n,e,t)=>{let r=dr(n);if(!r||!n.key)return null;let s={key:n.key,buttonId:e,sender:r,timestamp:lr(n)};return j(t)&&(s.buttonText=t),s},mr=(n,e)=>{let t=n.message;if(!t)return null;let r=t.listResponseMessage,s=r?.singleSelectReply?.selectedRowId;if(j(s))return cr(n,s,r?.title);let i=t.interactiveResponseMessage?.nativeFlowResponseMessage;if(i&&j(i.name)&&xi.includes(i.name)){let o=ur(i.paramsJson,e.logger);if(!o)return null;let a=nt(o,["row_id","id"]);return a===void 0?null:cr(n,a,nt(o,["title"])??null)}return null},cr=(n,e,t)=>{let r=dr(n);if(!r||!n.key)return null;let s={key:n.key,rowId:e,sender:r,timestamp:lr(n)};return j(t)&&(s.title=t),s};var Ri=new Set(["available","unavailable","composing","recording","paused"]),Li=n=>n instanceof Date?n.getTime():typeof n=="number"&&Number.isFinite(n)?n:0,fr=n=>n.status!=="complete"&&n.status!=="paused"?null:{syncType:String(n.syncType),status:n.status,explicit:n.explicit===true},Jt=n=>{if(n.source==="connection-update"){let t=n.reachoutTimeLock;return t.isActive!==true?null:{reason:"reachout-timelock",retryAt:Li(t.timeEnforcementEnds)}}if(n.capInfo.capping_status!=="CAPPED")return null;let e={reason:"chat-limit-reached"};return typeof n.capInfo.used_quota=="number"&&(e.usedQuota=n.capInfo.used_quota),typeof n.capInfo.total_quota=="number"&&(e.totalQuota=n.capInfo.total_quota),e},gr=n=>{if(typeof n.id!="string"||n.id.length===0)return [];let e=[];for(let[t,r]of Object.entries(n.presences??{})){let s=r?.lastKnownPresence;typeof s!="string"||!Ri.has(s)||e.push({jid:n.id,participant:t,status:s});}return e},Oe=n=>{let e=n.payload.id;if(typeof e!="string"||e.length===0)return null;let t=Date.now();switch(n.source){case "reaction":{let r={action:"reaction",newsletterId:e,timestamp:t};return typeof n.payload.server_id=="string"&&(r.serverId=n.payload.server_id),typeof n.payload.reaction?.code=="string"&&(r.emoji=n.payload.reaction.code),r}case "view":{let r={action:"view",newsletterId:e,timestamp:t};return typeof n.payload.server_id=="string"&&(r.serverId=n.payload.server_id),typeof n.payload.count=="number"&&(r.count=n.payload.count),r}case "participants":return {action:"participants",newsletterId:e,timestamp:t};case "settings":{let r={action:"settings",newsletterId:e,timestamp:t};return n.payload.update&&(r.update=n.payload.update),r}}};var _i=n=>{let e=n.match(/(https?:\/\/[^\s]+)/g);return e?e.map(t=>t.replace(/[.,;:!?]+$/,"")):[]},Di=n=>{let e=`${n.remoteJid??""}|${n.id??""}|${n.fromMe===true?"1":"0"}`,t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")},Bi=n=>{let e=jidDecode(n);if(!e)return "unknown";let t=e.device;return t===void 0||t===0?"android":t===2?"ios":t===3?"web":t===4?"desktop":"unknown"},Fi=n=>n.trim().endsWith("?"),Wi=(n,e)=>e.length===0?false:e.some(t=>t.length>0&&n.startsWith(t)),Ui=(n,e)=>{if(e.length===0)return false;let t;try{t=jidNormalizedUser(n);}catch{t=n;}return e.some(r=>{try{return jidNormalizedUser(r)===t}catch{return r===n}})},ji=(n,e)=>{let t=async r=>r===void 0?false:Array.isArray(r)?r.includes(e):r(e);return {authors:()=>t(n?.authors),banned:()=>t(n?.banned)}},$t=n=>{let e=typeof n.key.remoteJid=="string"?n.key.remoteJid:null,t=e!==null&&Ie(e),r={uniqueId:Di(n.key),channelId:n.channelId,chatId:n.key.id??"",chatType:n.chatType,receiverId:n.receiverId,roomId:t?e:null,senderId:n.sender.pn??n.sender.jid,senderLid:n.sender.lid??null,senderName:n.sender.pushName??null,senderDevice:Bi(n.sender.jid),timestamp:typeof n.message.messageTimestamp=="number"?n.message.messageTimestamp*1e3:0,text:n.text,mentions:n.mentions,links:_i(n.text),isFromMe:n.key.fromMe===true,isGroup:t,isNewsletter:n.isNewsletter,isBroadcast:n.isBroadcast,isViewOnce:n.isViewOnce,isEphemeral:n.isEphemeral,isForwarded:n.isForwarded,isQuestion:Fi(n.text),isPrefix:Wi(n.text,n.prefixes),isTagMe:Ui(n.selfJid,n.mentions),isEdited:false,isDeleted:false,isPinned:false,isUnPinned:false,isBot:false,isSpam:false,isHideTags:false,isStatusMention:false,isGroupStatusMention:false,isStory:false,roomName:n.resolveRoomName,receiverName:n.resolveReceiverName,replied:n.resolveReplied,reply:n.reply,react:n.react,message:()=>n.message,citation:ji(n.citationConfig,n.sender.pn??n.sender.jid)};return n.media!==void 0&&(r.media=n.media),r};var Ki={image:"imageMessage",video:"videoMessage",audio:"audioMessage",document:"documentMessage",sticker:"stickerMessage"},qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[Ki[e]];if(r==null||typeof r!="object")return null;let s=r.mimetype;return typeof s=="string"&&s.length>0?s:null},yr=(n,e,t)=>async()=>{try{let{downloadMediaMessage:r}=await import('baileys'),s=await r(n,"buffer",{}),i=qi(n,e)??"application/octet-stream";return {buffer:s,mime:i,size:s.byteLength}}catch(r){throw t?.warn({error:r,kind:e,id:n.key?.id},"media download failed"),r instanceof Error?r:new Error("media download failed")}},wr=(n,e,t)=>async()=>{try{let{downloadMediaMessage:r}=await import('baileys');return await r(n,"stream",{})}catch(r){throw t?.warn({error:r,kind:e,id:n.key?.id},"media stream download failed"),r instanceof Error?r:new Error("media stream download failed")}};var it={image:"imageMessage",video:"videoMessage",audio:"audioMessage",document:"documentMessage",sticker:"stickerMessage"},vr=n=>{let e=n?.remoteJid;return typeof e=="string"&&e.length>0?e:""},h=n=>n!=null&&typeof n=="object"?n:null,v=n=>typeof n=="string"&&n.length>0?n:null,de=(...n)=>{for(let e of n){let t=v(e);if(t!=null)return t}return null},Ji=["ephemeralMessage","viewOnceMessage","viewOnceMessageV2","viewOnceMessageV2Extension","documentWithCaptionMessage","editedMessage"],Re=n=>{let e=n;for(let t=0;t<5;t++){let r=null;for(let s of Ji){let i=h(h(e[s])?.message);if(i!=null){r=i;break}}if(r==null)break;e=r;}return e},$i=n=>{let t=h(h(h(n.botForwardedMessage)?.message)?.richResponseMessage)??h(n.richResponseMessage);if(t==null)return null;let r=t.submessages;if(!Array.isArray(r))return null;let s=[];for(let o of r){let a=v(h(o)?.messageText);a!=null&&s.push(a);}let i=s.join(`
|
|
14
|
-
`).trim();return i.length>0?i:null},Vi=n=>{let e=h(n.templateMessage),t=h(e?.hydratedTemplate)??h(e?.hydratedFourRowTemplate);return v(t?.hydratedContentText)},Gi=n=>de(h(n.pollCreationMessage)?.name,h(n.pollCreationMessageV2)?.name,h(n.pollCreationMessageV3)?.name),Hi=n=>{let e=h(n.locationMessage)??h(n.liveLocationMessage);if(e==null)return null;let t=de(e.name,e.address);if(t!=null){let i=v(e.name),o=v(e.address);return i!=null&&o!=null&&i!==o?`${i} \u2014 ${o}`:t}let r=e.degreesLatitude,s=e.degreesLongitude;return typeof r=="number"&&typeof s=="number"?`${r}, ${s}`:null},zi=n=>{let e=v(h(n.contactMessage)?.displayName);if(e!=null)return e;let t=h(n.contactsArrayMessage),r=v(t?.displayName);if(r!=null)return r;let s=t?.contacts;if(Array.isArray(s)){let i=s.map(o=>v(h(o)?.displayName)).filter(o=>o!=null);if(i.length>0)return i.join(", ")}return null},Sr=n=>de(n.conversation,h(n.extendedTextMessage)?.text,$i(n),v(h(h(n.interactiveMessage)?.body)?.text),h(n.buttonsMessage)?.contentText,h(n.listMessage)?.description,Vi(n),Gi(n),Hi(n),zi(n)),Yi=n=>de(h(n.buttonsResponseMessage)?.selectedDisplayText,h(n.buttonsResponseMessage)?.selectedButtonId,h(n.templateButtonReplyMessage)?.selectedDisplayText,h(n.templateButtonReplyMessage)?.selectedId,h(n.listResponseMessage)?.title,h(h(n.listResponseMessage)?.singleSelectReply)?.selectedRowId,h(h(n.interactiveResponseMessage)?.body)?.text),Zi=n=>de(h(n.imageMessage)?.caption,h(n.videoMessage)?.caption,h(n.documentMessage)?.caption,h(n.documentMessage)?.fileName),R=n=>{if(typeof n=="number")return n;let e=ae(n);return typeof e=="number"?e:null},Xi=[["pollCreationMessage","poll"],["pollCreationMessageV2","poll"],["pollCreationMessageV3","poll"],["contactMessage","contact"],["contactsArrayMessage","contact"],["locationMessage","location"],["liveLocationMessage","live-location"],["eventMessage","event"],["buttonsMessage","buttons"],["listMessage","list"],["interactiveMessage","interactive"],["templateMessage","template"]],Vt=n=>{let e=h(n.pollCreationMessage)??h(n.pollCreationMessageV2)??h(n.pollCreationMessageV3);if(e!=null){let l=Array.isArray(e.options)?e.options:[];return {type:"poll",name:v(e.name),options:l.map(y=>v(h(y)?.optionName)).filter(y=>y!=null),selectableCount:R(e.selectableOptionsCount)??0}}let t=h(n.contactMessage);if(t!=null)return {type:"contact",displayName:v(t.displayName),vcard:v(t.vcard),contacts:[{displayName:v(t.displayName),vcard:v(t.vcard)}]};let r=h(n.contactsArrayMessage);if(r!=null){let l=Array.isArray(r.contacts)?r.contacts:[];return {type:"contact",displayName:v(r.displayName),vcard:null,contacts:l.map(y=>({displayName:v(h(y)?.displayName),vcard:v(h(y)?.vcard)}))}}let s=h(n.locationMessage);if(s!=null)return {type:"location",latitude:R(s.degreesLatitude),longitude:R(s.degreesLongitude),name:v(s.name),address:v(s.address),accuracy:R(s.accuracyInMeters),speed:R(s.speedInMps),caption:v(s.comment)};let i=h(n.liveLocationMessage);if(i!=null)return {type:"live-location",latitude:R(i.degreesLatitude),longitude:R(i.degreesLongitude),name:null,address:null,accuracy:R(i.accuracyInMeters),speed:R(i.speedInMps),caption:v(i.caption)};let o=h(n.eventMessage);if(o!=null){let l=h(o.location);return {type:"event",name:v(o.name),description:v(o.description),location:l!=null?de(l.name,l.address):null,startTime:R(o.startTime),endTime:R(o.endTime),isCanceled:o.isCanceled===true}}let a=h(n.buttonsMessage);if(a!=null){let l=Array.isArray(a.buttons)?a.buttons:[];return {type:"buttons",contentText:v(a.contentText),footerText:v(a.footerText),buttons:l.map(y=>({id:v(h(y)?.buttonId),text:v(h(h(y)?.buttonText)?.displayText)}))}}let c=h(n.listMessage);if(c!=null){let l=Array.isArray(c.sections)?c.sections:[];return {type:"list",title:v(c.title),description:v(c.description),buttonText:v(c.buttonText),sections:l.map(y=>{let p=Array.isArray(h(y)?.rows)?h(y).rows:[];return {title:v(h(y)?.title),rows:p.map(g=>({id:v(h(g)?.rowId),title:v(h(g)?.title),description:v(h(g)?.description)}))}})}}let d=h(n.interactiveMessage);if(d!=null){let l=h(d.nativeFlowMessage),y=Array.isArray(l?.buttons)?l.buttons:[];return {type:"interactive",title:v(h(d.header)?.title),body:v(h(d.body)?.text),footer:v(h(d.footer)?.text),buttons:y.map(p=>({name:v(h(p)?.name),params:v(h(p)?.buttonParamsJson)}))}}let u=h(n.templateMessage);if(u!=null){let l=h(u.hydratedTemplate)??h(u.hydratedFourRowTemplate),y=Array.isArray(l?.hydratedButtons)?l.hydratedButtons:[];return {type:"template",text:v(l?.hydratedContentText),buttons:y.map(p=>{let g=h(p),w=h(g?.quickReplyButton)??h(g?.urlButton)??h(g?.callButton);return {id:v(w?.id),text:v(w?.displayText)}})}}return null};var st=n=>{let e=h(n.message);if(e==null)return null;let t=Re(e);return Sr(t)??Yi(t)??Zi(t)},Gt=n=>{let e=n.message;if(e==null)return null;let t=e.extendedTextMessage?.contextInfo;if(t!=null)return t;for(let r of Object.values(it)){let s=e[r];if(s!=null&&typeof s=="object"){let i=s.contextInfo;if(i!=null)return i}}return null},Qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[it[e]];return r==null||typeof r!="object"?null:r},eo=n=>{let e=n.message;if(e==null)return false;if(e.viewOnceMessage!=null||e.viewOnceMessageV2!=null||e.viewOnceMessageV2Extension!=null)return true;for(let t of Object.values(it)){let r=e[t];if(r!=null&&typeof r=="object"&&r.viewOnce===true)return true}return false},to=(n,e)=>n.message?.ephemeralMessage!=null?true:typeof e?.expiration=="number"&&e.expiration>0,xe=n=>{let e=h(n);if(e==null)return "text";let t=Re(e);for(let r of Object.values(it))if(t[r]!=null)return r.replace("Message","");for(let[r,s]of Xi)if(t[r]!=null)return s;return "text"},no=async(n,e,t)=>{try{if(n==null||n.quotedMessage==null)return null;let r=n.stanzaId;if(typeof r!="string"||r.length===0)return null;if(e.resolveQuoted!=null&&t.length>0){let u=await e.resolveQuoted(r,t);if(u!=null&&u.message!=null){let l=st(u)??"",y=ce(u,e,xe(u.message),l);if(y!==null)return y}}let s=ar(n);if(s===null||typeof s.key.id!="string"||s.key.id.length===0)return null;let i=s.key.remoteJid;if(typeof i!="string"||i.length===0)return null;let o=s.key.participant;typeof o=="string"&&e.selfJid.length>0&&jidNormalizedUser(o)===jidNormalizedUser(e.selfJid)&&(s.key.fromMe=!0);let a=n.quotedMessage,c=Object.assign({key:s.key,message:a??null},s.sender?.pushName!=null?{pushName:s.sender.pushName}:{}),d=st(c)??"";return ce(c,e,xe(a),d)}catch{return null}},ce=(n,e,t,r,s)=>{let i=n.key;if(i==null)return null;let o=W(i,n.pushName??void 0);if(o===null)return null;let a=vr(i);if(a.length===0)return null;let c=Gt(n),d=Ie(a),u=a.endsWith("@broadcast"),l=a.endsWith("@newsletter"),y=c?.isForwarded===true||(c?.forwardingScore??0)>0,p=eo(n),g=to(n,c),w=e.channelId??"",C=e.receiverId??"",A=e.prefixes??[],K=()=>d&&e.resolveRoomName!=null?e.resolveRoomName(a):Promise.resolve(null),Fe=e.resolveReceiverName??(()=>Promise.resolve(null)),vt=()=>no(c,e,a),St=a.length>0?a:o.pn??o.jid,Mt=(Et,ts)=>e.reply==null?Promise.reject(new Error("zaileys: ctx.reply() requires a connected client")):e.reply(St,Et,ts,n),At=Et=>e.react==null?Promise.reject(new Error("zaileys: ctx.react() requires a connected client")):e.react(i,Et),{mentionedJids:Ct}=tt(c),Xt={message:n,key:i,channelId:w,receiverId:C,selfJid:e.selfJid,text:r,chatType:t,sender:o,mentions:Ct,isViewOnce:p,isEphemeral:g,isForwarded:y,isBroadcast:u,isNewsletter:l,prefixes:A,resolveRoomName:K,resolveReceiverName:Fe,resolveReplied:vt,reply:Mt,react:At},Qt=s!==void 0?{...Xt,media:s}:Xt;return $t(e.citationConfig!==void 0?{...Qt,citationConfig:e.citationConfig}:Qt)},Mr=(n,e)=>{let t=h(n.message);if(t==null)return null;let r=Re(t),s=Sr(r),i=Vt(r)??void 0;return s===null&&i===void 0?null:ce(n,e,xe(n.message),s??"",i)},Le=(n,e,t)=>{let r=Qi(e,n);if(r===null)return null;let s=typeof r.caption=="string"?r.caption:"",i=n,o=yr(e,n,t.logger),a=wr(e,n,t.logger),c={type:n,mimetype:typeof r.mimetype=="string"?r.mimetype:null,caption:typeof r.caption=="string"?r.caption:null,fileName:typeof r.fileName=="string"?r.fileName:null,fileSize:R(r.fileLength),ptt:r.ptt===true,buffer:async()=>(await o()).buffer,stream:a};return ce(e,t,i,s,c)},Ar=(n,e)=>Le("image",n,e),Cr=(n,e)=>Le("video",n,e),Er=(n,e)=>Le("audio",n,e),br=(n,e)=>Le("document",n,e),Tr=(n,e)=>Le("sticker",n,e),ro=(n,e)=>{try{return jidNormalizedUser(n)===jidNormalizedUser(e)}catch{return n===e}},Pr=(n,e)=>{if(n.key==null)return null;let r=Gt(n),{mentionedJids:s}=tt(r);if(s.length===0||!s.some(u=>ro(u,e.selfJid)))return null;let o=h(n.message);if(o==null)return null;let a=st(n)??"",c=Vt(Re(o))??void 0,d=ce(n,e,xe(n.message),a,c);return d===null?null:{...d,mentionedJids:s,selfJid:e.selfJid}},kr=(n,e)=>{let t=n.key;if(t==null)return null;let r=vr(t);if(r.length===0||!Ie(r))return null;let{mentionAll:s}=tt(Gt(n));if(!s)return null;let i=h(n.message);if(i==null)return null;let o=st(n)??"",a=Vt(Re(i))??void 0,c=ce(n,e,xe(n.message),o,a);return c===null?null:{...c,isMentionAll:true,selfJid:e.selfJid}};var ee=(n,e)=>{let t=ae(n);return t===null?e:t},so=n=>{if(!n)return "";if(typeof n.conversation=="string")return n.conversation;let e=n.extendedTextMessage?.text;if(typeof e=="string")return e;let t=n.imageMessage?.caption;if(typeof t=="string")return t;let r=n.videoMessage?.caption;if(typeof r=="string")return r;let s=n.documentMessage?.caption;return typeof s=="string"?s:""},io=n=>Array.isArray(n)?n.map(e=>Buffer.from(e).toString("hex")):[],Or=(n,e)=>{let t=n?.reaction,r=t?.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=t.text,o=typeof i=="string"&&i.length>0?i:null;return {key:r,emoji:o,sender:s,timestamp:ee(t.senderTimestampMs,0)}},xr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==proto.Message.ProtocolMessage.Type.MESSAGE_EDIT)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);return s===null?null:{key:r,newContent:so(t.editedMessage),editedAt:ee(n.update.messageTimestamp,0),sender:s}},Rr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==proto.Message.ProtocolMessage.Type.REVOKE)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=ke(n.key.remoteJid),o=ke(e.selfJid);return {key:r,deletedFor:i!==null&&o!==null&&i===o?"me":"everyone",sender:s,timestamp:ee(n.update.messageTimestamp,0)}},Lr=(n,e)=>{let t=n?.update?.pollUpdates?.[0],r=n?.update?.message?.pollUpdateMessage,s=W(n?.key,e.pushName);if(s===null)return null;if(t){let i=t.pollUpdateMessageKey;return i?{pollKey:i,selectedOptions:io(t.vote?.selectedOptions),voter:s,timestamp:ee(t.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}if(r){let i=r.pollCreationMessageKey;return i?{pollKey:i,selectedOptions:[],voter:s,timestamp:ee(r.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}return null};var ot=n=>Array.isArray(n)?n:[],oo=n=>{if(n==null||typeof n!="object")return null;let e=n.reachoutTimeLock;return e==null||typeof e!="object"?null:e};function Nr(n,e,t){let r=[],s=new Map,i=t.groupMetadata!=null?p=>{let g=s.get(p);if(g!==void 0)return g;let w=t.groupMetadata;if(w==null)return Promise.resolve(null);let C=w(p).then(A=>A?.subject??null).catch(()=>null);return s.set(p,C),C}:void 0,o={selfJid:t.selfJid,receiverId:t.receiverId??t.selfJid,...t.logger!=null?{logger:t.logger}:{},...t.channelId!=null?{channelId:t.channelId}:{},...t.prefixes!=null?{prefixes:t.prefixes}:{},...t.citationConfig!=null?{citationConfig:t.citationConfig}:{},...i!=null?{resolveRoomName:i}:{},...t.receiverName!=null?{resolveReceiverName:t.receiverName}:{},...t.resolveQuoted!=null?{resolveQuoted:t.resolveQuoted}:{},...t.sendReply!=null?{reply:t.sendReply}:{},...t.react!=null?{react:t.react}:{}},a=t.logger?{selfJid:t.selfJid,logger:t.logger}:{selfJid:t.selfJid},c={selfJid:t.selfJid},d=(p,g)=>{let w=(...C)=>{try{g(C[0]);}catch(A){t.logger?.warn(A,`inbound pipeline: handler for ${p} threw`);}};e.ev.on(p,w),r.push(()=>e.ev.off(p,w));},u=p=>{l(()=>Mr(p,o),g=>n.emit("text",g)),l(()=>Ar(p,o),g=>n.emit("image",g)),l(()=>Cr(p,o),g=>n.emit("video",g)),l(()=>Er(p,o),g=>n.emit("audio",g)),l(()=>br(p,o),g=>n.emit("document",g)),l(()=>Tr(p,o),g=>n.emit("sticker",g)),l(()=>Pr(p,o),g=>n.emit("mention",g)),l(()=>kr(p,o),g=>n.emit("mention-all",g)),l(()=>pr(p,a),g=>n.emit("button-click",g)),l(()=>mr(p,a),g=>n.emit("list-select",g));},l=(p,g)=>{let w;try{w=p();}catch(C){t.logger?.warn(C,"inbound pipeline: decoder threw");return}w!=null&&g(w);};d("messages.upsert",p=>{let g=Xn(p);for(let w of g.messages)t.ignoreMe===!0&&w.key?.fromMe===!0||u(w);}),d("messages.update",p=>{for(let g of ot(p))l(()=>xr(g,c),w=>n.emit("edit",w)),l(()=>Rr(g,c),w=>n.emit("delete",w)),l(()=>Lr(g,c),w=>n.emit("poll-vote",w));}),d("messages.reaction",p=>{for(let g of ot(p))l(()=>Or(g,c),w=>n.emit("reaction",w));}),d("groups.update",p=>{for(let g of ot(p))l(()=>rr(g),w=>n.emit("group-update",w));}),d("group-participants.update",p=>{let g=p;l(()=>ir(g),w=>n.emit("group-join",w)),l(()=>or(g),w=>n.emit("group-leave",w));}),d("group.member-tag.update",p=>{l(()=>sr(p),g=>n.emit("member-tag",g));}),d("call",p=>{for(let g of ot(p))l(()=>er(g),w=>n.emit("call-incoming",w)),l(()=>tr(g),w=>n.emit("call-ended",w));}),d("messaging-history.status",p=>{l(()=>fr(p),g=>n.emit("history-sync",g));}),d("presence.update",p=>{let g=(()=>{try{return gr(p)}catch(w){return t.logger?.warn(w,"inbound pipeline: decodePresence threw"),[]}})();for(let w of g)n.emit("presence",w);}),d("connection.update",p=>{let g=oo(p);g!==null&&l(()=>Jt({source:"connection-update",reachoutTimeLock:g}),w=>n.emit("limited",w));}),d("message-capping.update",p=>{l(()=>Jt({source:"message-capping",capInfo:p}),g=>n.emit("limited",g));}),d("newsletter.reaction",p=>{l(()=>Oe({source:"reaction",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter.view",p=>{l(()=>Oe({source:"view",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-participants.update",p=>{l(()=>Oe({source:"participants",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-settings.update",p=>{l(()=>Oe({source:"settings",payload:p}),g=>n.emit("newsletter",g));});let y=false;return {detach(){if(!y){y=true;for(let p of r)p();r.length=0;}}}}var at=class{inner=new EventEmitter;emitterLogger;constructor(e){this.emitterLogger=e?.logger,this.inner.setMaxListeners(0);}on(e,t){let r=this.wrap(e,t);this.tag(t,e,r),this.inner.on(e,r);let s=false;return ()=>{s||(s=true,this.inner.off(e,r),this.untag(t,e));}}off(e,t){let r=this.lookup(t,e);r&&(this.inner.off(e,r),this.untag(t,e));}emit(e,t){let r=this.inner.listeners(e).slice();for(let s of r)try{s(t);}catch(i){this.emitterLogger?.error(i,"listener threw");}}removeAllListeners(e){e===void 0?this.inner.removeAllListeners():this.inner.removeAllListeners(e);}listenerCount(e){return this.inner.listenerCount(e)}wrap(e,t){return r=>{try{t(r);}catch(s){this.emitterLogger?.error(s,"listener threw");}}}tag(e,t,r){this.tagMap(e).set(t,r);}untag(e,t){this.tagMap(e).delete(t);}lookup(e,t){return this.tagMap(e).get(t)}tagMap(e){let t=co,r=e,s=r[t];return s||(s=new Map,r[t]=s),s}},co=Symbol("zaileys.typed-ee.tag");var po="default",mo="qr",Dr=6e4,Br=class extends at{sessionId;auth;store;logger;authType;phoneNumber;cacheSignal;qrTerminal;statusLog;reconnectOptions;baileysExtra;machine=Yn();reconnectStrategy;authGuard;operationGuard;presenceThrottle;scheduleLimiter;authExhausted=false;_socket;reconnectTimer;listenerCleanup=[];inboundHandle;connectResolve;connectReject;pairingRequested=false;cachedSignalWrap=false;creds;credsLoadedAtConnect=false;openedThisRun=false;credsHintShown=false;disconnectEmittedFor=0;connectAttemptSeq=0;pendingDisconnectReason;usernameCache=new Map;_group;_privacy;_newsletter;_community;commandRegistry;commandMiddleware=[];commandPrefixes;citationConfig;ignoreMe;commandDispatcher;_presence;_scheduler;waVersion;versionWarming;constructor(e={}){super({logger:Kt(e.logger)}),this.sessionId=e.sessionId??po,this.logger=Kt(e.logger),this.authType=e.authType??mo,this.phoneNumber=e.phoneNumber,this.cacheSignal=e.cacheSignal??true,this.qrTerminal=e.qrTerminal??true,this.statusLog=e.statusLog??true,this.statusLog&&jn(),this.reconnectOptions=e.reconnect??{},this.baileysExtra=e.baileys??{},this.auth=e.auth??new Ze({basePath:`./.zaileys/auth/${this.sessionId}`}),this.store=e.store??new et,this.reconnectStrategy=zn(this.reconnectOptions),this.authGuard=Vn(e.authGuard),this.operationGuard=Wt(e.operationGuard),this.presenceThrottle=e.presence;let t=e.scheduleRateLimitPerSec??1;this.scheduleLimiter=t>0?new X({perSec:t}):void 0,this.commandPrefixes=fo(e.commandPrefix),this.citationConfig=e.citation,this.ignoreMe=e.ignoreMe??true,this.attachEmitterLogger(),(e.autoConnect??true)&&queueMicrotask(()=>{this.machine.state==="idle"&&this.warmVersion().finally(()=>{if(this.machine.state==="idle")try{this.connect().catch(r=>this.emitAutoConnectError(r));}catch(r){this.emitAutoConnectError(r);}});});}warmVersion(){if(this.waVersion)return Promise.resolve();if(this.versionWarming)return this.versionWarming;try{return typeof fetchLatestBaileysVersion!="function"?Promise.resolve():(this.versionWarming=fetchLatestBaileysVersion().then(({version:e})=>{this.waVersion=e;}).catch(e=>{this.logger.warn(e,"fetchLatestBaileysVersion failed; using bundled version");}),this.versionWarming)}catch{return Promise.resolve()}}emitAutoConnectError(e){let t=e instanceof Error?e:new Error(String(e));this.logger.error(t,"auto-connect failed"),this.listenerCount("error")>0&&this.emit("error",{sessionId:this.sessionId,error:t});}logStatus(e){if(!this.statusLog)return;let t=Un(e);t&&process.stderr.write(`${t}
|
|
14
|
+
`).trim();return i.length>0?i:null},Vi=n=>{let e=h(n.templateMessage),t=h(e?.hydratedTemplate)??h(e?.hydratedFourRowTemplate);return v(t?.hydratedContentText)},Gi=n=>de(h(n.pollCreationMessage)?.name,h(n.pollCreationMessageV2)?.name,h(n.pollCreationMessageV3)?.name),Hi=n=>{let e=h(n.locationMessage)??h(n.liveLocationMessage);if(e==null)return null;let t=de(e.name,e.address);if(t!=null){let i=v(e.name),o=v(e.address);return i!=null&&o!=null&&i!==o?`${i} \u2014 ${o}`:t}let r=e.degreesLatitude,s=e.degreesLongitude;return typeof r=="number"&&typeof s=="number"?`${r}, ${s}`:null},zi=n=>{let e=v(h(n.contactMessage)?.displayName);if(e!=null)return e;let t=h(n.contactsArrayMessage),r=v(t?.displayName);if(r!=null)return r;let s=t?.contacts;if(Array.isArray(s)){let i=s.map(o=>v(h(o)?.displayName)).filter(o=>o!=null);if(i.length>0)return i.join(", ")}return null},Sr=n=>de(n.conversation,h(n.extendedTextMessage)?.text,$i(n),v(h(h(n.interactiveMessage)?.body)?.text),h(n.buttonsMessage)?.contentText,h(n.listMessage)?.description,Vi(n),Gi(n),Hi(n),zi(n)),Yi=n=>de(h(n.buttonsResponseMessage)?.selectedDisplayText,h(n.buttonsResponseMessage)?.selectedButtonId,h(n.templateButtonReplyMessage)?.selectedDisplayText,h(n.templateButtonReplyMessage)?.selectedId,h(n.listResponseMessage)?.title,h(h(n.listResponseMessage)?.singleSelectReply)?.selectedRowId,h(h(n.interactiveResponseMessage)?.body)?.text),Zi=n=>de(h(n.imageMessage)?.caption,h(n.videoMessage)?.caption,h(n.documentMessage)?.caption,h(n.documentMessage)?.fileName),R=n=>{if(typeof n=="number")return n;let e=ae(n);return typeof e=="number"?e:null},Xi=[["pollCreationMessage","poll"],["pollCreationMessageV2","poll"],["pollCreationMessageV3","poll"],["contactMessage","contact"],["contactsArrayMessage","contact"],["locationMessage","location"],["liveLocationMessage","live-location"],["eventMessage","event"],["buttonsMessage","buttons"],["listMessage","list"],["interactiveMessage","interactive"],["templateMessage","template"]],Vt=n=>{let e=h(n.pollCreationMessage)??h(n.pollCreationMessageV2)??h(n.pollCreationMessageV3);if(e!=null){let l=Array.isArray(e.options)?e.options:[];return {type:"poll",name:v(e.name),options:l.map(y=>v(h(y)?.optionName)).filter(y=>y!=null),selectableCount:R(e.selectableOptionsCount)??0}}let t=h(n.contactMessage);if(t!=null)return {type:"contact",displayName:v(t.displayName),vcard:v(t.vcard),contacts:[{displayName:v(t.displayName),vcard:v(t.vcard)}]};let r=h(n.contactsArrayMessage);if(r!=null){let l=Array.isArray(r.contacts)?r.contacts:[];return {type:"contact",displayName:v(r.displayName),vcard:null,contacts:l.map(y=>({displayName:v(h(y)?.displayName),vcard:v(h(y)?.vcard)}))}}let s=h(n.locationMessage);if(s!=null)return {type:"location",latitude:R(s.degreesLatitude),longitude:R(s.degreesLongitude),name:v(s.name),address:v(s.address),accuracy:R(s.accuracyInMeters),speed:R(s.speedInMps),caption:v(s.comment)};let i=h(n.liveLocationMessage);if(i!=null)return {type:"live-location",latitude:R(i.degreesLatitude),longitude:R(i.degreesLongitude),name:null,address:null,accuracy:R(i.accuracyInMeters),speed:R(i.speedInMps),caption:v(i.caption)};let o=h(n.eventMessage);if(o!=null){let l=h(o.location);return {type:"event",name:v(o.name),description:v(o.description),location:l!=null?de(l.name,l.address):null,startTime:R(o.startTime),endTime:R(o.endTime),isCanceled:o.isCanceled===true}}let a=h(n.buttonsMessage);if(a!=null){let l=Array.isArray(a.buttons)?a.buttons:[];return {type:"buttons",contentText:v(a.contentText),footerText:v(a.footerText),buttons:l.map(y=>({id:v(h(y)?.buttonId),text:v(h(h(y)?.buttonText)?.displayText)}))}}let c=h(n.listMessage);if(c!=null){let l=Array.isArray(c.sections)?c.sections:[];return {type:"list",title:v(c.title),description:v(c.description),buttonText:v(c.buttonText),sections:l.map(y=>{let p=Array.isArray(h(y)?.rows)?h(y).rows:[];return {title:v(h(y)?.title),rows:p.map(g=>({id:v(h(g)?.rowId),title:v(h(g)?.title),description:v(h(g)?.description)}))}})}}let d=h(n.interactiveMessage);if(d!=null){let l=h(d.nativeFlowMessage),y=Array.isArray(l?.buttons)?l.buttons:[];return {type:"interactive",title:v(h(d.header)?.title),body:v(h(d.body)?.text),footer:v(h(d.footer)?.text),buttons:y.map(p=>({name:v(h(p)?.name),params:v(h(p)?.buttonParamsJson)}))}}let u=h(n.templateMessage);if(u!=null){let l=h(u.hydratedTemplate)??h(u.hydratedFourRowTemplate),y=Array.isArray(l?.hydratedButtons)?l.hydratedButtons:[];return {type:"template",text:v(l?.hydratedContentText),buttons:y.map(p=>{let g=h(p),w=h(g?.quickReplyButton)??h(g?.urlButton)??h(g?.callButton);return {id:v(w?.id),text:v(w?.displayText)}})}}return null};var st=n=>{let e=h(n.message);if(e==null)return null;let t=Re(e);return Sr(t)??Yi(t)??Zi(t)},Gt=n=>{let e=n.message;if(e==null)return null;let t=e.extendedTextMessage?.contextInfo;if(t!=null)return t;for(let r of Object.values(it)){let s=e[r];if(s!=null&&typeof s=="object"){let i=s.contextInfo;if(i!=null)return i}}return null},Qi=(n,e)=>{let t=n.message;if(t==null)return null;let r=t[it[e]];return r==null||typeof r!="object"?null:r},eo=n=>{let e=n.message;if(e==null)return false;if(e.viewOnceMessage!=null||e.viewOnceMessageV2!=null||e.viewOnceMessageV2Extension!=null)return true;for(let t of Object.values(it)){let r=e[t];if(r!=null&&typeof r=="object"&&r.viewOnce===true)return true}return false},to=(n,e)=>n.message?.ephemeralMessage!=null?true:typeof e?.expiration=="number"&&e.expiration>0,xe=n=>{let e=h(n);if(e==null)return "text";let t=Re(e);for(let r of Object.values(it))if(t[r]!=null)return r.replace("Message","");for(let[r,s]of Xi)if(t[r]!=null)return s;return "text"},no=async(n,e,t)=>{try{if(n==null||n.quotedMessage==null)return null;let r=n.stanzaId;if(typeof r!="string"||r.length===0)return null;if(e.resolveQuoted!=null&&t.length>0){let u=await e.resolveQuoted(r,t);if(u!=null&&u.message!=null){let l=st(u)??"",y=ce(u,e,xe(u.message),l);if(y!==null)return y}}let s=ar(n);if(s===null||typeof s.key.id!="string"||s.key.id.length===0)return null;let i=s.key.remoteJid;if(typeof i!="string"||i.length===0)return null;let o=s.key.participant;typeof o=="string"&&e.selfJid.length>0&&jidNormalizedUser(o)===jidNormalizedUser(e.selfJid)&&(s.key.fromMe=!0);let a=n.quotedMessage,c=Object.assign({key:s.key,message:a??null},s.sender?.pushName!=null?{pushName:s.sender.pushName}:{}),d=st(c)??"";return ce(c,e,xe(a),d)}catch{return null}},ce=(n,e,t,r,s)=>{let i=n.key;if(i==null)return null;let o=W(i,n.pushName??void 0);if(o===null)return null;let a=vr(i);if(a.length===0)return null;let c=Gt(n),d=Ie(a),u=a.endsWith("@broadcast"),l=a.endsWith("@newsletter"),y=c?.isForwarded===true||(c?.forwardingScore??0)>0,p=eo(n),g=to(n,c),w=e.channelId??"",C=e.receiverId??"",A=e.prefixes??[],K=()=>d&&e.resolveRoomName!=null?e.resolveRoomName(a):Promise.resolve(null),Fe=e.resolveReceiverName??(()=>Promise.resolve(null)),vt=()=>no(c,e,a),St=a.length>0?a:o.pn??o.jid,Mt=(Et,ts)=>e.reply==null?Promise.reject(new Error("zaileys: ctx.reply() requires a connected client")):e.reply(St,Et,ts,n),At=Et=>e.react==null?Promise.reject(new Error("zaileys: ctx.react() requires a connected client")):e.react(i,Et),{mentionedJids:Ct}=tt(c),Xt={message:n,key:i,channelId:w,receiverId:C,selfJid:e.selfJid,text:r,chatType:t,sender:o,mentions:Ct,isViewOnce:p,isEphemeral:g,isForwarded:y,isBroadcast:u,isNewsletter:l,prefixes:A,resolveRoomName:K,resolveReceiverName:Fe,resolveReplied:vt,reply:Mt,react:At},Qt=s!==void 0?{...Xt,media:s}:Xt;return $t(e.citationConfig!==void 0?{...Qt,citationConfig:e.citationConfig}:Qt)},Mr=(n,e)=>{let t=h(n.message);if(t==null)return null;let r=Re(t),s=Sr(r),i=Vt(r)??void 0;return s===null&&i===void 0?null:ce(n,e,xe(n.message),s??"",i)},Le=(n,e,t)=>{let r=Qi(e,n);if(r===null)return null;let s=typeof r.caption=="string"?r.caption:"",i=n,o=yr(e,n,t.logger),a=wr(e,n,t.logger),c={type:n,mimetype:typeof r.mimetype=="string"?r.mimetype:null,caption:typeof r.caption=="string"?r.caption:null,fileName:typeof r.fileName=="string"?r.fileName:null,fileSize:R(r.fileLength),ptt:r.ptt===true,buffer:async()=>(await o()).buffer,stream:a};return ce(e,t,i,s,c)},Ar=(n,e)=>Le("image",n,e),Cr=(n,e)=>Le("video",n,e),Er=(n,e)=>Le("audio",n,e),br=(n,e)=>Le("document",n,e),Tr=(n,e)=>Le("sticker",n,e),ro=(n,e)=>{try{return jidNormalizedUser(n)===jidNormalizedUser(e)}catch{return n===e}},Pr=(n,e)=>{if(n.key==null)return null;let r=Gt(n),{mentionedJids:s}=tt(r);if(s.length===0||!s.some(u=>ro(u,e.selfJid)))return null;let o=h(n.message);if(o==null)return null;let a=st(n)??"",c=Vt(Re(o))??void 0,d=ce(n,e,xe(n.message),a,c);return d===null?null:{...d,mentionedJids:s,selfJid:e.selfJid}},kr=(n,e)=>{let t=n.key;if(t==null)return null;let r=vr(t);if(r.length===0||!Ie(r))return null;let{mentionAll:s}=tt(Gt(n));if(!s)return null;let i=h(n.message);if(i==null)return null;let o=st(n)??"",a=Vt(Re(i))??void 0,c=ce(n,e,xe(n.message),o,a);return c===null?null:{...c,isMentionAll:true,selfJid:e.selfJid}};var ee=(n,e)=>{let t=ae(n);return t===null?e:t},so=n=>{if(!n)return "";if(typeof n.conversation=="string")return n.conversation;let e=n.extendedTextMessage?.text;if(typeof e=="string")return e;let t=n.imageMessage?.caption;if(typeof t=="string")return t;let r=n.videoMessage?.caption;if(typeof r=="string")return r;let s=n.documentMessage?.caption;if(typeof s=="string")return s;let o=(n.botForwardedMessage?.message?.richResponseMessage??n.richResponseMessage)?.submessages;if(Array.isArray(o)){let a=o.map(c=>c?.messageText).filter(c=>typeof c=="string"&&c.length>0);if(a.length>0)return a.join(`
|
|
15
|
+
`)}return ""},io=n=>Array.isArray(n)?n.map(e=>Buffer.from(e).toString("hex")):[],Or=(n,e)=>{let t=n?.reaction,r=t?.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=t.text,o=typeof i=="string"&&i.length>0?i:null;return {key:r,emoji:o,sender:s,timestamp:ee(t.senderTimestampMs,0)}},xr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==proto.Message.ProtocolMessage.Type.MESSAGE_EDIT)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);return s===null?null:{key:r,newContent:so(t.editedMessage),editedAt:ee(n.update.messageTimestamp,0),sender:s}},Rr=(n,e)=>{let t=n?.update?.message?.protocolMessage;if(!t||t.type!==proto.Message.ProtocolMessage.Type.REVOKE)return null;let r=t.key;if(!r)return null;let s=W(n.key,e.pushName);if(s===null)return null;let i=ke(n.key.remoteJid),o=ke(e.selfJid);return {key:r,deletedFor:i!==null&&o!==null&&i===o?"me":"everyone",sender:s,timestamp:ee(n.update.messageTimestamp,0)}},Lr=(n,e)=>{let t=n?.update?.pollUpdates?.[0],r=n?.update?.message?.pollUpdateMessage,s=W(n?.key,e.pushName);if(s===null)return null;if(t){let i=t.pollUpdateMessageKey;return i?{pollKey:i,selectedOptions:io(t.vote?.selectedOptions),voter:s,timestamp:ee(t.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}if(r){let i=r.pollCreationMessageKey;return i?{pollKey:i,selectedOptions:[],voter:s,timestamp:ee(r.senderTimestampMs,ee(n.update.messageTimestamp,0))}:null}return null};var ot=n=>Array.isArray(n)?n:[],oo=n=>{if(n==null||typeof n!="object")return null;let e=n.reachoutTimeLock;return e==null||typeof e!="object"?null:e};function Nr(n,e,t){let r=[],s=new Map,i=t.groupMetadata!=null?p=>{let g=s.get(p);if(g!==void 0)return g;let w=t.groupMetadata;if(w==null)return Promise.resolve(null);let C=w(p).then(A=>A?.subject??null).catch(()=>null);return s.set(p,C),C}:void 0,o={selfJid:t.selfJid,receiverId:t.receiverId??t.selfJid,...t.logger!=null?{logger:t.logger}:{},...t.channelId!=null?{channelId:t.channelId}:{},...t.prefixes!=null?{prefixes:t.prefixes}:{},...t.citationConfig!=null?{citationConfig:t.citationConfig}:{},...i!=null?{resolveRoomName:i}:{},...t.receiverName!=null?{resolveReceiverName:t.receiverName}:{},...t.resolveQuoted!=null?{resolveQuoted:t.resolveQuoted}:{},...t.sendReply!=null?{reply:t.sendReply}:{},...t.react!=null?{react:t.react}:{}},a=t.logger?{selfJid:t.selfJid,logger:t.logger}:{selfJid:t.selfJid},c={selfJid:t.selfJid},d=(p,g)=>{let w=(...C)=>{try{g(C[0]);}catch(A){t.logger?.warn(A,`inbound pipeline: handler for ${p} threw`);}};e.ev.on(p,w),r.push(()=>e.ev.off(p,w));},u=p=>{l(()=>Mr(p,o),g=>n.emit("text",g)),l(()=>Ar(p,o),g=>n.emit("image",g)),l(()=>Cr(p,o),g=>n.emit("video",g)),l(()=>Er(p,o),g=>n.emit("audio",g)),l(()=>br(p,o),g=>n.emit("document",g)),l(()=>Tr(p,o),g=>n.emit("sticker",g)),l(()=>Pr(p,o),g=>n.emit("mention",g)),l(()=>kr(p,o),g=>n.emit("mention-all",g)),l(()=>pr(p,a),g=>n.emit("button-click",g)),l(()=>mr(p,a),g=>n.emit("list-select",g));},l=(p,g)=>{let w;try{w=p();}catch(C){t.logger?.warn(C,"inbound pipeline: decoder threw");return}w!=null&&g(w);};d("messages.upsert",p=>{let g=Xn(p);for(let w of g.messages)t.ignoreMe===!0&&w.key?.fromMe===!0||u(w);}),d("messages.update",p=>{for(let g of ot(p))l(()=>xr(g,c),w=>n.emit("edit",w)),l(()=>Rr(g,c),w=>n.emit("delete",w)),l(()=>Lr(g,c),w=>n.emit("poll-vote",w));}),d("messages.reaction",p=>{for(let g of ot(p))l(()=>Or(g,c),w=>n.emit("reaction",w));}),d("groups.update",p=>{for(let g of ot(p))l(()=>rr(g),w=>n.emit("group-update",w));}),d("group-participants.update",p=>{let g=p;l(()=>ir(g),w=>n.emit("group-join",w)),l(()=>or(g),w=>n.emit("group-leave",w));}),d("group.member-tag.update",p=>{l(()=>sr(p),g=>n.emit("member-tag",g));}),d("call",p=>{for(let g of ot(p))l(()=>er(g),w=>n.emit("call-incoming",w)),l(()=>tr(g),w=>n.emit("call-ended",w));}),d("messaging-history.status",p=>{l(()=>fr(p),g=>n.emit("history-sync",g));}),d("presence.update",p=>{let g=(()=>{try{return gr(p)}catch(w){return t.logger?.warn(w,"inbound pipeline: decodePresence threw"),[]}})();for(let w of g)n.emit("presence",w);}),d("connection.update",p=>{let g=oo(p);g!==null&&l(()=>Jt({source:"connection-update",reachoutTimeLock:g}),w=>n.emit("limited",w));}),d("message-capping.update",p=>{l(()=>Jt({source:"message-capping",capInfo:p}),g=>n.emit("limited",g));}),d("newsletter.reaction",p=>{l(()=>Oe({source:"reaction",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter.view",p=>{l(()=>Oe({source:"view",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-participants.update",p=>{l(()=>Oe({source:"participants",payload:p}),g=>n.emit("newsletter",g));}),d("newsletter-settings.update",p=>{l(()=>Oe({source:"settings",payload:p}),g=>n.emit("newsletter",g));});let y=false;return {detach(){if(!y){y=true;for(let p of r)p();r.length=0;}}}}var at=class{inner=new EventEmitter;emitterLogger;constructor(e){this.emitterLogger=e?.logger,this.inner.setMaxListeners(0);}on(e,t){let r=this.wrap(e,t);this.tag(t,e,r),this.inner.on(e,r);let s=false;return ()=>{s||(s=true,this.inner.off(e,r),this.untag(t,e));}}off(e,t){let r=this.lookup(t,e);r&&(this.inner.off(e,r),this.untag(t,e));}emit(e,t){let r=this.inner.listeners(e).slice();for(let s of r)try{s(t);}catch(i){this.emitterLogger?.error(i,"listener threw");}}removeAllListeners(e){e===void 0?this.inner.removeAllListeners():this.inner.removeAllListeners(e);}listenerCount(e){return this.inner.listenerCount(e)}wrap(e,t){return r=>{try{t(r);}catch(s){this.emitterLogger?.error(s,"listener threw");}}}tag(e,t,r){this.tagMap(e).set(t,r);}untag(e,t){this.tagMap(e).delete(t);}lookup(e,t){return this.tagMap(e).get(t)}tagMap(e){let t=co,r=e,s=r[t];return s||(s=new Map,r[t]=s),s}},co=Symbol("zaileys.typed-ee.tag");var po="default",mo="qr",Dr=6e4,Br=class extends at{sessionId;auth;store;logger;authType;phoneNumber;cacheSignal;qrTerminal;statusLog;reconnectOptions;baileysExtra;machine=Yn();reconnectStrategy;authGuard;operationGuard;presenceThrottle;scheduleLimiter;authExhausted=false;_socket;reconnectTimer;listenerCleanup=[];inboundHandle;connectResolve;connectReject;pairingRequested=false;cachedSignalWrap=false;creds;credsLoadedAtConnect=false;openedThisRun=false;credsHintShown=false;disconnectEmittedFor=0;connectAttemptSeq=0;pendingDisconnectReason;usernameCache=new Map;_group;_privacy;_newsletter;_community;commandRegistry;commandMiddleware=[];commandPrefixes;citationConfig;ignoreMe;commandDispatcher;_presence;_scheduler;waVersion;versionWarming;constructor(e={}){super({logger:Kt(e.logger)}),this.sessionId=e.sessionId??po,this.logger=Kt(e.logger),this.authType=e.authType??mo,this.phoneNumber=e.phoneNumber,this.cacheSignal=e.cacheSignal??true,this.qrTerminal=e.qrTerminal??true,this.statusLog=e.statusLog??true,this.statusLog&&jn(),this.reconnectOptions=e.reconnect??{},this.baileysExtra=e.baileys??{},this.auth=e.auth??new Ze({basePath:`./.zaileys/auth/${this.sessionId}`}),this.store=e.store??new et,this.reconnectStrategy=zn(this.reconnectOptions),this.authGuard=Vn(e.authGuard),this.operationGuard=Wt(e.operationGuard),this.presenceThrottle=e.presence;let t=e.scheduleRateLimitPerSec??1;this.scheduleLimiter=t>0?new X({perSec:t}):void 0,this.commandPrefixes=fo(e.commandPrefix),this.citationConfig=e.citation,this.ignoreMe=e.ignoreMe??true,this.attachEmitterLogger(),(e.autoConnect??true)&&queueMicrotask(()=>{this.machine.state==="idle"&&this.warmVersion().finally(()=>{if(this.machine.state==="idle")try{this.connect().catch(r=>this.emitAutoConnectError(r));}catch(r){this.emitAutoConnectError(r);}});});}warmVersion(){if(this.waVersion)return Promise.resolve();if(this.versionWarming)return this.versionWarming;try{return typeof fetchLatestBaileysVersion!="function"?Promise.resolve():(this.versionWarming=fetchLatestBaileysVersion().then(({version:e})=>{this.waVersion=e;}).catch(e=>{this.logger.warn(e,"fetchLatestBaileysVersion failed; using bundled version");}),this.versionWarming)}catch{return Promise.resolve()}}emitAutoConnectError(e){let t=e instanceof Error?e:new Error(String(e));this.logger.error(t,"auto-connect failed"),this.listenerCount("error")>0&&this.emit("error",{sessionId:this.sessionId,error:t});}logStatus(e){if(!this.statusLog)return;let t=Un(e);t&&process.stderr.write(`${t}
|
|
15
16
|
`);}resolveMe(){let e=this._socket?.user;if(e&&typeof e.id=="string"&&e.id.length>0)return e;let t=this.creds?.me;return t&&typeof t.id=="string"&&t.id.length>0?t:{id:""}}get state(){return this.machine.state}get socket(){return this._socket}get group(){return this._group??=new he(()=>this._socket,this.operationGuard)}get privacy(){return this._privacy??=new ye(()=>this._socket)}get newsletter(){return this._newsletter??=new we(()=>this._socket,this.operationGuard)}get community(){return this._community??=new ve(()=>this._socket,this.operationGuard)}get presence(){return this._presence??=new Ae(()=>this._socket,this.presenceThrottle)}async broadcast(e,t,r){return this.requireSocket(),Ut(e,t,{sendTo:s=>this.send(s)},r)}async scheduleAt(e,t){return this.ensureScheduler().scheduleAt(e,t)}ensureScheduler(){return this._scheduler??=new Ce({store:this.store,sendSnapshot:e=>this.dispatchSnapshot(e),logger:this.logger,...this.scheduleLimiter?{acquire:()=>this.scheduleLimiter.acquire()}:{}})}async dispatchSnapshot(e){await this.requireSocket().sendMessage(e.recipient,e.content,e.options);}connect(){if(this.authType==="pairing"&&!this.phoneNumber)return Promise.reject(new Error('phoneNumber is required when authType is "pairing"'));if(this.machine.state==="connecting"||this.machine.state==="connected"||this.machine.state!=="idle"&&this.machine.state!=="disconnected"&&this.machine.state!=="reconnecting")return Promise.resolve();if(this._socket){for(let a of this.listenerCleanup)a.off();this.listenerCleanup=[],this._socket=void 0;}let e=this.machine.state==="reconnecting";e||(this.authGuard.reset(),this.authExhausted=false),this.machine.transition("connecting"),this.connectAttemptSeq+=1,this.pairingRequested=false,this.openedThisRun=false,e||this.logStatus({kind:"connecting",sessionId:this.sessionId}),this.cacheSignal&&!this.cachedSignalWrap&&(this.auth=Kn(this.auth,{logger:this.logger}),this.cachedSignalWrap=true),this.warmVersion();let t={};this.creds=t;let r=qn(this.auth.signal,this.logger),s={markOnlineOnConnect:false,syncFullHistory:false,qrTimeout:Dr,...this.waVersion?{version:this.waVersion}:{},...this.baileysExtra,auth:{creds:t,keys:r},logger:this.logger,getMessage:a=>this.resolveMessageForResend(a)},i=lo(s);this._socket=i,this.store.bind(i),this.wireSocket(i);let o=new Promise((a,c)=>{let d=this.connectResolve,u=this.connectReject;this.connectResolve=()=>{d?.(),a();},this.connectReject=l=>{u?.(l),c(l);};});return this.auth.creds.readCreds().then(a=>{this.credsLoadedAtConnect=!!a,Object.assign(t,a??initAuthCreds());}).catch(a=>{this.rejectPendingConnect(a instanceof Error?a:new Error(String(a)));}),o}async disconnect(){if(!(this.machine.state==="idle"||this.machine.state==="disconnected")){this.machine.transition("disconnecting"),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.inboundHandle?.detach(),this.inboundHandle=void 0,this.detachCommands(),this._scheduler?.dispose();for(let e of this.listenerCleanup)e.off();if(this.listenerCleanup=[],this._socket){try{this._socket.end(void 0);}catch(e){this.logger.warn(e,"socket.end threw");}this._socket=void 0;}try{await this.auth.signal.close();}catch(e){this.logger.warn(e,"auth.signal.close failed");}try{await this.store.close();}catch(e){this.logger.warn(e,"store.close failed");}if(this.machine.transition("disconnected"),this.disconnectEmittedFor!==this.connectAttemptSeq){let e=this.pendingDisconnectReason??"unknown";this.pendingDisconnectReason=void 0,this.disconnectEmittedFor=this.connectAttemptSeq,this.emit("disconnect",{sessionId:this.sessionId,reason:e,willReconnect:false});}this.rejectPendingConnect(new Error("disconnected before connect resolved"));}}async logout(){if(this.pendingDisconnectReason="logged-out",this._socket)try{await this._socket.logout();}catch(e){this.logger.warn(e,"socket.logout failed");}try{await this.auth.signal.clear();}catch(e){this.logger.warn(e,"auth.signal.clear failed");}try{await this.auth.creds.deleteCreds();}catch(e){this.logger.warn(e,"auth.creds.deleteCreds failed");}if(this.machine.state==="idle"||this.machine.state==="disconnected"){this.disconnectEmittedFor!==this.connectAttemptSeq&&(this.disconnectEmittedFor=this.connectAttemptSeq,this.emit("disconnect",{sessionId:this.sessionId,reason:"logged-out",willReconnect:false})),this.pendingDisconnectReason=void 0;return}await this.disconnect();}command(e,t){return (this.commandRegistry??=new Se).register(e,t),this.attachCommandsIfReady(),this}use(e){return this.commandMiddleware.push(e),this}attachCommandsIfReady(){if(this.commandDispatcher||this.commandPrefixes.length===0||this.commandRegistry===void 0||this.commandRegistry.list().length===0||!this._socket)return;let e=this.commandRegistry;this.commandDispatcher=Ft({registry:e,middleware:this.commandMiddleware,prefixes:this.commandPrefixes,logger:this.logger,onText:t=>{let r=s=>t(s);return this.on("text",r),()=>this.off("text",r)},buildContext:(t,r)=>this.buildCommandContext(t,r)});}buildCommandContext(e,t){let r;return {...t,raw:e.raw,command:e.command,args:e.args,flags:e.flags,json:e.json,reply:async(s,i)=>{let o=t.message().key.remoteJid??t.roomId??t.senderId,a=await this.send(o).text(s,i).reply(t.message());return r=a,a},react:s=>this.react(t.message().key,s),edit:async s=>{if(r===void 0)throw new b("NO_SENT_MESSAGE","ctx.edit requires a prior ctx.reply");await this.edit(r).text(s);}}}detachCommands(){this.commandDispatcher?.detach(),this.commandDispatcher=void 0;}send(e){let t=this.requireSocket(),r=s=>{this.store.saveMessage(s).catch(i=>this.logger.warn(i,"recordSent failed"));};return He(e)?$.create(t,e,void 0,r):$.create(t,e,s=>this.resolveRecipient(s),r)}edit(e){return new ge(this.requireSocket(),e)}async delete(e,t){await Rt(this.requireSocket(),e,t);}async react(e,t){return Lt(this.requireSocket(),e,t)}async forward(e,t){let r=this.requireSocket(),s=await this.resolveRecipient(t);return Nt(r,this.store,e,s)}resolveRecipient(e){return _t(this.requireSocket(),e,this.usernameCache)}requireSocket(){if(!this._socket)throw new f("INVALID_OPTIONS","client not connected");return this._socket}attachEmitterLogger(){this.logger;}wireSocket(e){let t=s=>{this.handleConnectionUpdate(s);},r=s=>{let i=this.creds?Object.assign(this.creds,s):s;this.creds=i,this.auth.creds.writeCreds(i).catch(o=>{this.logger.warn(o,"auth.creds.writeCreds failed");});};e.ev.on("connection.update",t),e.ev.on("creds.update",r),this.listenerCleanup.push({off:()=>e.ev.off("connection.update",t)}),this.listenerCleanup.push({off:()=>e.ev.off("creds.update",r)});}async handleConnectionUpdate(e){if(e.qr&&await this.handleQrUpdate(e.qr),e.connection==="open"){this.handleOpen();return}e.connection==="close"&&await this.handleClose(e.lastDisconnect);}async handleQrUpdate(e){if(this.authExhausted)return;if(this.authType==="pairing"&&this.phoneNumber){if(this.pairingRequested)return;let s=Date.now(),i=this.authGuard.evaluate("pairing",s);if(!i.allowed){i.reason==="budget-exhausted"&&this.handleAuthExhausted("pairing",i.attempts,i.max);return}this.pairingRequested=true,this.authGuard.record("pairing",s),this.machine.canTransition("pairing-pending")&&this.machine.transition("pairing-pending");try{let o=Gn({phoneNumber:this.phoneNumber}),a=this._socket;if(!a)return;let c=await o.requestCode(a);this.logStatus({kind:"pairing-code",code:c.code}),this.emit("pairing-code",{sessionId:this.sessionId,code:c.code,expiresAt:c.expiresAt});}catch(o){this.logger.warn(o,"pairing-code request failed");}return}let t=Date.now(),r=this.authGuard.evaluate("qr",t);if(!r.allowed){this.handleAuthExhausted("qr",r.attempts,r.max);return}if(this.authGuard.record("qr",t),this.machine.canTransition("qr-pending")&&this.machine.transition("qr-pending"),this.qrTerminal)try{await Hn(e);}catch(s){this.logger.warn(s,"printQrToTerminal failed");}this.logStatus({kind:"qr"}),this.emit("qr",{sessionId:this.sessionId,qrString:e,expiresAt:t+Dr});}handleAuthExhausted(e,t,r){this.authExhausted||(this.authExhausted=true,this.logger.warn({sessionId:this.sessionId,kind:e,attempts:t,max:r},`auth attempts exhausted (${t}/${r} ${e}); stopping to avoid WhatsApp spam restriction \u2014 call connect() to retry`),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.emit("auth-exhausted",{sessionId:this.sessionId,kind:e,attempts:t,max:r}),this.disconnect());}handleOpen(){this.machine.canTransition("connected")&&this.machine.transition("connected"),this.openedThisRun=true,this.credsHintShown=false,this.authExhausted=false,this.authGuard.reset(),this.reconnectStrategy.reset();let e=this.resolveMe();this.logStatus({kind:"connected",id:typeof e.id=="string"?e.id:""}),this.emit("connect",{sessionId:this.sessionId,me:e});let t=this._socket;t&&(this.inboundHandle?.detach(),this.inboundHandle=Nr(this,t,{selfJid:typeof e.id=="string"?e.id:"",channelId:this.sessionId,receiverId:typeof e.id=="string"?e.id:"",prefixes:this.commandPrefixes,logger:this.logger,...this.citationConfig!=null?{citationConfig:this.citationConfig}:{},groupMetadata:s=>this.group.metadata(s).catch(()=>null),receiverName:()=>Promise.resolve(this.resolveMe().name??null),resolveQuoted:(s,i)=>this.lookupQuoted(s,i),sendReply:async(s,i,o,a)=>await this.send(s).text(i,o).reply(a),react:(s,i)=>this.react(s,i),ignoreMe:this.ignoreMe})),this.attachCommandsIfReady(),this.ensureScheduler().loadPending().catch(s=>this.logger.warn(s,"scheduler loadPending failed"));let r=this.connectResolve;this.connectResolve=void 0,this.connectReject=void 0,r&&r();}async resolveMessageForResend(e){try{return (await this.store.getMessage(e))?.message??void 0}catch(t){this.logger.warn(t,"getMessage resend lookup failed");return}}async lookupQuoted(e,t){for(let r of [false,true])try{let s=await this.store.getMessage({id:e,remoteJid:t,fromMe:r});if(s!=null)return s}catch{continue}return null}async handleClose(e){this.inboundHandle?.detach(),this.inboundHandle=void 0,this.detachCommands();let t=go(e?.error),r=Jn(t),s=false;if($n(r)){try{await this.auth.signal.clear();}catch(i){this.logger.warn(i,"auth.signal.clear failed (post-close)");}try{await this.auth.creds.deleteCreds();}catch(i){this.logger.warn(i,"auth.creds.deleteCreds failed (post-close)");}}if(!Te(r)&&!this.authExhausted){Xe(r)&&this.logger.warn({sessionId:this.sessionId},"WhatsApp returned rate-limited (429); backing off before reconnect to avoid restriction");let i=this.reconnectStrategy.next(r);if(i!==null){s=true,this.machine.canTransition("reconnecting")&&this.machine.transition("reconnecting");let o=this.credsLoadedAtConnect&&!this.openedThisRun&&i.attempt>=2&&!this.credsHintShown;o&&(this.credsHintShown=true),this.logStatus({kind:"reconnecting",attempt:i.attempt,delayMs:i.delayMs,reason:r,invalidCredsSuspected:o}),this.emit("reconnecting",{sessionId:this.sessionId,attempt:i.attempt,delayMs:i.delayMs,reason:r}),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.connect().catch(a=>{this.logger.warn(a,"reconnect attempt failed");});},i.delayMs);}}if(this.disconnectEmittedFor=this.connectAttemptSeq,this.logStatus({kind:"disconnect",reason:r,willReconnect:s}),this.emit("disconnect",{sessionId:this.sessionId,reason:r,willReconnect:s}),!s){if(this._socket){for(let i of this.listenerCleanup)i.off();this.listenerCleanup=[],this._socket=void 0;}this.machine.canTransition("disconnected")&&this.machine.transition("disconnected"),this.rejectPendingConnect(new Error(`connection closed (${r})`));}}rejectPendingConnect(e){let t=this.connectReject;this.connectResolve=void 0,this.connectReject=void 0,t&&t(e);}};function fo(n){return n===void 0?[]:(Array.isArray(n)?n:[n]).filter(t=>t.length>0)}function go(n){if(!n||typeof n!="object")return;let e=n.output;if(!e)return;let t=e.statusCode;return typeof t=="number"?t:void 0}var Fr=class{credsBlob;signalMap=new Map;closed=false;signal={read:async(e,t)=>{this.assertOpen();let r=this.signalMap.get(e),s={};if(!r)return s;for(let i of t){let o=r.get(i);o!==void 0&&(s[i]=o);}return s},write:async e=>{this.assertOpen();for(let t of Object.keys(e)){let r=e[t];if(!r)continue;let s=this.signalMap.get(t);s||(s=new Map,this.signalMap.set(t,s));for(let i of Object.keys(r)){let o=r[i];o===null?s.delete(i):o!==void 0&&s.set(i,o);}}},delete:async(e,t)=>{this.assertOpen();let r=this.signalMap.get(e);if(r)for(let s of t)r.delete(s);},clear:async()=>{this.assertOpen(),this.signalMap.clear(),this.credsBlob=void 0;},close:async()=>{this.closed=true;}};creds={readCreds:async()=>(this.assertOpen(),this.credsBlob),writeCreds:async e=>{this.assertOpen(),this.credsBlob=structuredClone(e);},deleteCreds:async()=>{this.assertOpen(),this.credsBlob=void 0;}};assertOpen(){if(this.closed)throw new m("STORE_CLOSED","MemoryAuthStore is closed")}};var ct=null,ho=async()=>{if(ct)return ct;try{return ct=(await import('better-sqlite3')).default,ct}catch(n){throw new m("STORE_NOT_AVAILABLE","better-sqlite3 belum terpasang. Run: pnpm add better-sqlite3",{cause:n})}},Ht="default",Ur=500,jr=n=>Array.from({length:n},()=>"?").join(","),Kr=(n,e)=>{let t=[];for(let r=0;r<n.length;r+=e)t.push(n.slice(r,r+e));return t},qr=class{options;db=null;prepared=null;readyPromise=null;closed=false;constructor(e){this.options=e;}creds={readCreds:async()=>{let t=(await this.ensureReady()).readCreds.get(Ht);if(t)return this.parseBlob(t.data)},writeCreds:async e=>{let t=await this.ensureReady(),r=this.encodeBlob(e);t.writeCreds.run(Ht,r);},deleteCreds:async()=>{(await this.ensureReady()).deleteCreds.run(Ht);}};signal={read:async(e,t)=>{await this.ensureReady();let r={};if(t.length===0)return r;let s=this.db;for(let i of Kr(t,Ur)){let o=jr(i.length),c=s.prepare(`SELECT id, data FROM auth_signal WHERE type = ? AND id IN (${o})`).all(e,...i);for(let d of c)r[d.id]=this.parseBlob(d.data);}return r},write:async e=>{let t=await this.ensureReady(),r=this.db,s=[],i=[];for(let a of Object.keys(e)){let c=e[a];if(c)for(let d of Object.keys(c)){let u=c[d];u===null?i.push({type:a,id:d}):u!==void 0&&s.push({type:a,id:d,blob:this.encodeBlob(u)});}}r.transaction(()=>{for(let a of s)t.writeSignal.run(a.type,a.id,a.blob);for(let a of i)t.deleteSignal.run(a.type,a.id);})();},delete:async(e,t)=>{if(await this.ensureReady(),t.length===0)return;let r=this.db,s=r.transaction(i=>{let o=jr(i.length);r.prepare(`DELETE FROM auth_signal WHERE type = ? AND id IN (${o})`).run(e,...i);});for(let i of Kr(t,Ur))s(i);},clear:async()=>{let e=await this.ensureReady();this.db.transaction(()=>{e.clearSignal.run(),e.clearCreds.run();})();},close:async()=>{if(!this.closed){this.closed=true;try{this.db?.close();}catch(e){throw new m("STORE_WRITE_FAILED","failed to close sqlite database",{cause:e})}finally{this.db=null,this.prepared=null;}}}};async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","SqliteAuthStore is closed");return this.prepared?this.prepared:(this.readyPromise||(this.readyPromise=this.openAndMigrate().catch(e=>{throw this.readyPromise=null,e})),await this.readyPromise,this.prepared)}async openAndMigrate(){let e=await ho(),t;try{t=new e(this.options.database,{readonly:this.options.readonly??!1});}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to open sqlite database at ${String(this.options.database)}`,{cause:r})}try{t.pragma("journal_mode = WAL"),t.pragma("synchronous = NORMAL"),t.pragma("foreign_keys = ON"),t.exec(`CREATE TABLE IF NOT EXISTS auth_creds (id TEXT PRIMARY KEY, data BLOB NOT NULL) WITHOUT ROWID;
|
|
16
17
|
CREATE TABLE IF NOT EXISTS auth_signal (type TEXT NOT NULL, id TEXT NOT NULL, data BLOB NOT NULL, PRIMARY KEY(type, id)) WITHOUT ROWID;`);}catch(r){throw t.close(),new m("STORE_CONNECTION_FAILED","failed to migrate sqlite schema",{cause:r})}this.db=t,this.prepared={readCreds:t.prepare("SELECT data FROM auth_creds WHERE id = ?"),writeCreds:t.prepare("INSERT INTO auth_creds(id, data) VALUES(?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data"),deleteCreds:t.prepare("DELETE FROM auth_creds WHERE id = ?"),writeSignal:t.prepare("INSERT INTO auth_signal(type, id, data) VALUES(?, ?, ?) ON CONFLICT(type, id) DO UPDATE SET data = excluded.data"),deleteSignal:t.prepare("DELETE FROM auth_signal WHERE type = ? AND id = ?"),clearSignal:t.prepare("DELETE FROM auth_signal"),clearCreds:t.prepare("DELETE FROM auth_creds")};}encodeBlob(e){try{return Buffer.from(JSON.stringify(e,BufferJSON.replacer),"utf8")}catch(t){throw new m("STORE_WRITE_FAILED","failed to serialize sqlite blob",{cause:t})}}parseBlob(e){try{let t=Buffer.isBuffer(e)?e.toString("utf8"):Buffer.from(e).toString("utf8");return JSON.parse(t,BufferJSON.reviver)}catch(t){throw new m("STORE_CORRUPTED","failed to parse sqlite blob",{cause:t})}}};var lt,yo=async()=>(lt||(lt=import('pg').catch(n=>{throw lt=void 0,new m("STORE_NOT_AVAILABLE","pg is not installed. Run: pnpm add pg",{cause:n})})),lt),wo="CREATE TABLE IF NOT EXISTS zaileys_auth_creds (id text PRIMARY KEY, data jsonb NOT NULL)",vo="CREATE TABLE IF NOT EXISTS zaileys_auth_signal (type text NOT NULL, id text NOT NULL, data bytea NOT NULL, PRIMARY KEY(type, id))",Jr=class{externalPool;connectionString;poolMax;ownedPool;resolvedPool;readyPromise;closed=false;constructor(e){let t=e.pool!==void 0,r=e.connectionString!==void 0;if(t&&r)throw new m("STORE_CONNECTION_FAILED","PostgresAuthStore: provide either pool or connectionString, not both");if(!t&&!r)throw new m("STORE_CONNECTION_FAILED","PostgresAuthStore: pool or connectionString is required");this.externalPool=e.pool,this.connectionString=e.connectionString,this.poolMax=e.max;}async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","PostgresAuthStore is closed");if(this.resolvedPool)return this.resolvedPool;this.readyPromise||(this.readyPromise=(async()=>{let e;if(this.externalPool)e=this.externalPool;else {let t=await yo(),r=t.Pool??t.default?.Pool;if(!r)throw new m("STORE_NOT_AVAILABLE","pg.Pool constructor not found");e=new r({connectionString:this.connectionString,max:this.poolMax}),this.ownedPool=e;}try{await e.query(wo),await e.query(vo);}catch(t){throw new m("STORE_CONNECTION_FAILED","failed to migrate auth schema",{cause:t})}return this.resolvedPool=e,e})());try{return await this.readyPromise}catch(e){throw this.readyPromise=void 0,e}}signal={read:async(e,t)=>{let r=await this.ensureReady(),s={};if(t.length===0)return s;try{let i=t.map((a,c)=>`$${c+2}`).join(", "),o=await r.query(`SELECT id, data FROM zaileys_auth_signal WHERE type = $1 AND id IN (${i})`,[String(e),...Array.from(t)]);for(let a of o.rows){let c=Buffer.isBuffer(a.data)?a.data:Buffer.from(a.data);s[a.id]=JSON.parse(c.toString("utf8"),BufferJSON.reviver);}return s}catch(i){throw i instanceof m?i:new m("STORE_READ_FAILED","failed to read signal rows",{cause:i})}},write:async e=>{let t=await this.ensureReady(),r=[];for(let i of Object.keys(e)){let o=e[i];if(o)for(let a of Object.keys(o)){let c=o[a];if(c===null)r.push({kind:"delete",type:String(i),id:a});else if(c!==void 0){let d=Buffer.from(JSON.stringify(c,BufferJSON.replacer),"utf8");r.push({kind:"upsert",type:String(i),id:a,value:d});}}}if(r.length===0)return;let s;try{s=await t.connect(),await s.query("BEGIN");for(let i of r)i.kind==="delete"?await s.query("DELETE FROM zaileys_auth_signal WHERE type = $1 AND id = $2",[i.type,i.id]):await s.query("INSERT INTO zaileys_auth_signal(type, id, data) VALUES ($1, $2, $3) ON CONFLICT (type, id) DO UPDATE SET data = EXCLUDED.data",[i.type,i.id,i.value]);await s.query("COMMIT");}catch(i){if(s)try{await s.query("ROLLBACK");}catch{}throw new m("STORE_WRITE_FAILED","failed to write signal rows",{cause:i})}finally{s?.release();}},delete:async(e,t)=>{let r=await this.ensureReady();if(t.length!==0)try{let s=t.map((i,o)=>`$${o+2}`).join(", ");await r.query(`DELETE FROM zaileys_auth_signal WHERE type = $1 AND id IN (${s})`,[String(e),...Array.from(t)]);}catch(s){throw new m("STORE_WRITE_FAILED","failed to delete signal rows",{cause:s})}},clear:async()=>{let e=await this.ensureReady(),t;try{t=await e.connect(),await t.query("BEGIN"),await t.query("DELETE FROM zaileys_auth_signal"),await t.query("DELETE FROM zaileys_auth_creds"),await t.query("COMMIT");}catch(r){if(t)try{await t.query("ROLLBACK");}catch{}throw new m("STORE_WRITE_FAILED","failed to clear auth tables",{cause:r})}finally{t?.release();}},close:async()=>{if(this.closed)return;this.closed=true;let e=this.ownedPool;if(this.ownedPool=void 0,this.resolvedPool=void 0,this.readyPromise=void 0,e)try{await e.end();}catch{}}};creds={readCreds:async()=>{let e=await this.ensureReady();try{let r=(await e.query("SELECT data FROM zaileys_auth_creds WHERE id = 'default'")).rows[0];if(!r)return;let s=typeof r.data=="string"?r.data:JSON.stringify(r.data);return JSON.parse(s,BufferJSON.reviver)}catch(t){throw t instanceof m?t:new m("STORE_READ_FAILED","failed to read creds",{cause:t})}},writeCreds:async e=>{let t=await this.ensureReady();try{let r=JSON.stringify(e,BufferJSON.replacer);await t.query("INSERT INTO zaileys_auth_creds(id, data) VALUES ('default', $1::jsonb) ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data",[r]);}catch(r){throw new m("STORE_WRITE_FAILED","failed to write creds",{cause:r})}},deleteCreds:async()=>{let e=await this.ensureReady();try{await e.query("DELETE FROM zaileys_auth_creds WHERE id = 'default'");}catch(t){throw new m("STORE_WRITE_FAILED","failed to delete creds",{cause:t})}}}};var So="zaileys",Mo=["pre-key","session","sender-key","sender-key-memory","app-state-sync-key","app-state-sync-version","lid-mapping","device-list","tctoken","identity-key"],Ao=n=>{if(typeof n!="object"||n===null)return false;let e=n.code;return e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"},$r=class{namespace;externalClient;url;ownedClient;ready;closed=false;constructor(e){if(e.client&&e.url)throw new m("STORE_CONNECTION_FAILED","pass either client OR url, not both");if(!e.client&&!e.url)throw new m("STORE_CONNECTION_FAILED","RedisAuthStore requires either client or url");this.namespace=e.namespace??So,this.externalClient=e.client,this.url=e.url;}signal={read:async(e,t)=>{if(this.assertOpen(),t.length===0)return {};let r=await this.ensureReady(),s=t.map(a=>this.signalKey(e,a)),i=await this.runRead(()=>r.mGet(s)),o={};for(let a=0;a<t.length;a+=1){let c=i[a];c!=null&&(o[t[a]]=JSON.parse(c,BufferJSON.reviver));}return o},write:async e=>{this.assertOpen();let r=(await this.ensureReady()).multi(),s=0;for(let i of Object.keys(e)){let o=e[i];if(o)for(let a of Object.keys(o)){let c=o[a],d=this.signalKey(i,a),u=this.indexKey(i);c===null?(r.del(d),r.sRem(u,a)):c!==void 0&&(r.set(d,JSON.stringify(c,BufferJSON.replacer)),r.sAdd(u,a)),s+=1;}}s!==0&&await this.runWrite(()=>r.exec());},delete:async(e,t)=>{if(this.assertOpen(),t.length===0)return;let s=(await this.ensureReady()).multi();for(let i of t)s.del(this.signalKey(e,i)),s.sRem(this.indexKey(e),i);await this.runWrite(()=>s.exec());},clear:async()=>{this.assertOpen();let e=await this.ensureReady(),t=e.multi();for(let r of Mo){let s=this.indexKey(r),i=await this.runRead(()=>e.sMembers(s));for(let o of i)t.del(this.signalKey(r,o));t.del(s);}t.del(this.credsKey()),await this.runWrite(()=>t.exec());},close:async()=>{await this.shutdown();}};creds={readCreds:async()=>{this.assertOpen();let e=await this.ensureReady(),t=await this.runRead(()=>e.get(this.credsKey()));if(t!=null)return JSON.parse(t,BufferJSON.reviver)},writeCreds:async e=>{this.assertOpen();let t=await this.ensureReady();await this.runWrite(()=>t.set(this.credsKey(),JSON.stringify(e,BufferJSON.replacer)));},deleteCreds:async()=>{this.assertOpen();let e=await this.ensureReady();await this.runWrite(()=>e.del(this.credsKey()));}};credsKey(){return `${this.namespace}:auth:creds`}signalKey(e,t){return `${this.namespace}:auth:signal:${String(e)}:${t}`}indexKey(e){return `${this.namespace}:auth:signal-index:${String(e)}`}async ensureReady(){return this.ready||(this.ready=this.connect()),this.ready}async connect(){if(this.externalClient){if(!this.externalClient.isOpen)throw new m("STORE_CONNECTION_FAILED","provided redis client is not open (call await client.connect() first)");return this.externalClient}let e;try{e=await import('redis');}catch(r){throw Ao(r)?new m("STORE_NOT_AVAILABLE","redis peer dependency missing. Run: pnpm add redis",{cause:r}):new m("STORE_CONNECTION_FAILED","failed to load redis module",{cause:r})}let t=e.createClient({url:this.url});try{await t.connect();}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to connect to redis at ${this.url}`,{cause:r})}return this.ownedClient=t,t}async runRead(e){try{return await e()}catch(t){throw new m("STORE_READ_FAILED","redis read failed",{cause:t})}}async runWrite(e){try{return await e()}catch(t){throw new m("STORE_WRITE_FAILED","redis write failed",{cause:t})}}async shutdown(){if(!this.closed){if(this.closed=true,this.ownedClient){try{await this.ownedClient.quit();}catch{}this.ownedClient=void 0;}this.ready=void 0;}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","RedisAuthStore is closed")}};var Co="zaileys",Ne={get:"zaileys:get",set:"zaileys:set",del:"zaileys:del",clear:"zaileys:clear",list:"zaileys:list"},Eo=n=>{if(typeof n!="object"||n===null)return false;let e=n.code;return e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"},le=class{namespace;externalClient;url;client;closed=false;constructor(e){if(e.client&&e.url)throw new m("STORE_CONNECTION_FAILED","pass either client OR url, not both");if(!e.client&&!e.url)throw new m("STORE_CONNECTION_FAILED","ConvexKv requires either client or url");this.namespace=e.namespace??Co,this.externalClient=e.client,this.url=e.url;}async get(e){if(this.assertOpen(),e.length===0)return new Map;let t=await this.ensureClient(),r=await this.runRead(()=>t.query(Ne.get,{namespace:this.namespace,keys:[...e]})),s=new Map;for(let i of r??[])s.set(i.key,i.value);return s}async set(e){if(this.assertOpen(),e.length===0)return;let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.set,{namespace:this.namespace,items:[...e]}));}async del(e){if(this.assertOpen(),e.length===0)return;let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.del,{namespace:this.namespace,keys:[...e]}));}async clear(e){this.assertOpen();let t=await this.ensureClient();await this.runWrite(()=>t.mutation(Ne.clear,e===void 0?{namespace:this.namespace}:{namespace:this.namespace,prefix:e}));}async list(e,t){this.assertOpen();let r=await this.ensureClient(),s={namespace:this.namespace,prefix:e};return typeof t?.before=="number"&&(s.before=t.before),typeof t?.limit=="number"&&(s.limit=t.limit),await this.runRead(()=>r.query(Ne.list,s))??[]}close(){this.closed=true,this.client=void 0;}async ensureClient(){if(this.externalClient)return this.externalClient;if(this.client)return this.client;let e="convex/browser",t;try{t=await import(e);}catch(r){throw Eo(r)?new m("STORE_NOT_AVAILABLE","convex peer dependency missing. Run: pnpm add convex",{cause:r}):new m("STORE_CONNECTION_FAILED","failed to load convex module",{cause:r})}return this.client=new t.ConvexHttpClient(this.url),this.client}async runRead(e){try{return await e()}catch(t){throw new m("STORE_READ_FAILED","convex read failed",{cause:t})}}async runWrite(e){try{return await e()}catch(t){throw new m("STORE_WRITE_FAILED","convex write failed",{cause:t})}}assertOpen(){if(this.closed)throw new m("STORE_CLOSED","Convex store is closed")}};var mt="creds",bo="signal:",_e=(n,e)=>`${bo}${n}:${e}`,Vr=class{creds;signal;kv;constructor(e){this.kv=new le(e);let t=this.kv;this.creds={async readCreds(){let s=(await t.get([mt])).get(mt);return s===void 0?void 0:JSON.parse(s,BufferJSON.reviver)},async writeCreds(r){await t.set([{key:mt,value:JSON.stringify(r,BufferJSON.replacer)}]);},async deleteCreds(){await t.del([mt]);}},this.signal={async read(r,s){let i=s.map(c=>_e(r,c)),o=await t.get(i),a={};for(let c of s){let d=o.get(_e(r,c));a[c]=d===void 0?void 0:JSON.parse(d,BufferJSON.reviver);}return a},async write(r){let s=[],i=[];for(let o of Object.keys(r)){let a=r[o];if(a)for(let c of Object.keys(a)){let d=a[c];d==null?i.push(_e(o,c)):s.push({key:_e(o,c),value:JSON.stringify(d,BufferJSON.replacer)});}}s.length>0&&await t.set(s),i.length>0&&await t.del(i);},async delete(r,s){await t.del(s.map(i=>_e(r,i)));},async clear(){await t.clear();},async close(){t.close();}};}};var ft=null,To=async()=>{if(ft)return ft;try{return ft=(await import('better-sqlite3')).default,ft}catch(n){throw new m("STORE_NOT_AVAILABLE","better-sqlite3 belum terpasang. Run: pnpm add better-sqlite3",{cause:n})}},gt=n=>{try{return Buffer.from(JSON.stringify(n,BufferJSON.replacer),"utf8")}catch(e){throw new m("STORE_WRITE_FAILED","failed to serialize sqlite blob",{cause:e})}},te=n=>{try{let e=Buffer.isBuffer(n)?n.toString("utf8"):Buffer.from(n).toString("utf8");return JSON.parse(e,BufferJSON.reviver)}catch(e){throw new m("STORE_CORRUPTED","failed to parse sqlite blob",{cause:e})}},Gr=class{options;db=null;prepared=null;readyPromise=null;closed=false;boundSocket;listeners=new Map;constructor(e){this.options=e;}async saveMessage(e){let t=await this.ensureReady(),r=e.key.remoteJid??"",s=e.key.id??"",i=e.key.fromMe?1:0,o=Number(e.messageTimestamp??0);t.upsertMessage.run(r,s,i,o,gt(e));}async getMessage(e){let r=(await this.ensureReady()).getMessage.get(e.remoteJid??"",e.id??"",e.fromMe?1:0);return r?te(r.data):void 0}async listMessages(e,t){let r=await this.ensureReady(),s=t?.limit??100,i=t?.before;return (typeof i=="number"?r.listMessages.all(e,i,s):r.listMessages.all(e,Number.MAX_SAFE_INTEGER,s)).map(a=>te(a.data))}async saveChat(e){let t=await this.ensureReady(),r=e.id;if(!r)return;let s=e.archived?1:0;t.upsertChat.run(r,s,gt(e));}async getChat(e){let r=(await this.ensureReady()).getChat.get(e);return r?te(r.data):void 0}async listChats(e){let t=await this.ensureReady();return (e?.archived===true?t.listChatsArchived.all():t.listChats.all()).map(s=>te(s.data))}async saveContact(e){(await this.ensureReady()).upsertContact.run(e.id,gt(e));}async getContact(e){let r=(await this.ensureReady()).getContact.get(e);return r?te(r.data):void 0}async listContacts(){return (await this.ensureReady()).listContacts.all().map(r=>te(r.data))}async savePresence(e,t){(await this.ensureReady()).upsertPresence.run(e,gt(t));}async getPresence(e){let r=(await this.ensureReady()).getPresence.get(e);return r?te(r.data):void 0}bind(e){if(this.closed)throw new m("STORE_CLOSED","SqliteMessageStore is closed");this.boundSocket=e;let t=(...o)=>{let c=o[0]?.messages;if(Array.isArray(c))for(let d of c)this.saveMessage(d).catch(()=>{});},r=(...o)=>{let a=o[0];if(Array.isArray(a))for(let c of a)this.saveChat(c).catch(()=>{});},s=(...o)=>{let a=o[0];if(Array.isArray(a))for(let c of a)this.saveContact(c).catch(()=>{});},i=(...o)=>{let a=o[0];if(a?.presences)for(let c of Object.keys(a.presences)){let d=a.presences[c];d&&this.savePresence(c,d).catch(()=>{});}};this.listeners.set("messages.upsert",t),this.listeners.set("chats.upsert",r),this.listeners.set("contacts.upsert",s),this.listeners.set("presence.update",i);for(let[o,a]of this.listeners)e.ev.on(o,a);}async clear(){let e=await this.ensureReady();this.db.transaction(()=>{e.clearMessages.run(),e.clearChats.run(),e.clearContacts.run(),e.clearPresence.run();})();}async close(){if(!this.closed){if(this.closed=true,this.boundSocket?.ev.off)for(let[e,t]of this.listeners)this.boundSocket.ev.off(e,t);this.listeners.clear(),this.boundSocket=void 0;try{this.db?.close();}catch(e){throw new m("STORE_WRITE_FAILED","failed to close sqlite database",{cause:e})}finally{this.db=null,this.prepared=null;}}}async ensureReady(){if(this.closed)throw new m("STORE_CLOSED","SqliteMessageStore is closed");return this.prepared?this.prepared:(this.readyPromise||(this.readyPromise=this.openAndMigrate().catch(e=>{throw this.readyPromise=null,e})),await this.readyPromise,this.prepared)}async openAndMigrate(){let e=await To(),t;try{t=new e(this.options.database,{readonly:this.options.readonly??!1});}catch(r){throw new m("STORE_CONNECTION_FAILED",`failed to open sqlite database at ${String(this.options.database)}`,{cause:r})}try{t.pragma("journal_mode = WAL"),t.pragma("synchronous = NORMAL"),t.pragma("foreign_keys = ON"),t.exec(`CREATE TABLE IF NOT EXISTS messages (
|
|
17
18
|
remote_jid TEXT NOT NULL,
|