@softtynet/zplus-worker 1.0.15 → 1.0.17
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/cli.js +3 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -224,7 +224,7 @@ ${S}`),M.pop(),`{${P}}`}case"number":return isFinite(m)?String(m):t?t(m):"null";
|
|
|
224
224
|
`:`
|
|
225
225
|
`),H=eFn.bind(null,{[i_t]:"",[r_t]:i,[a_t]:K,[o_t]:vbe,[Ibe]:N,[s_t]:W}),ee="";h!==null&&(y===void 0?ee=H(h):ee=H(Object.assign({},h,{name:y})));let Ae=s instanceof Function?s:s?d_t:_Fn,ue=Ae().indexOf(":")+1;if(S&&!m)throw Error("customLevels is required if useOnlyCustomLevels is set true");if(_&&typeof _!="function")throw Error(`Unknown mixin type "${typeof _}" - expected "function"`);if(R&&typeof R!="string")throw Error(`Unknown msgPrefix type "${typeof R}" - expected "string"`);$Wn(b,m,S);let se=p_t(m,S);typeof o.emit=="function"&&o.emit("message",{code:"PINO_CONFIG",config:{levels:se,messageKey:c,errorKey:l}}),YWn(M);let de=XWn(M);return Object.assign(t,{levels:se,[yFn]:de,[bFn]:S,[sFn]:o,[oFn]:Ae,[aFn]:ue,[o_t]:vbe,[Ibe]:N,[a_t]:K,[lFn]:q,[uFn]:U,[pFn]:c,[fFn]:l,[dFn]:p,[gFn]:p?`,${JSON.stringify(p)}:{`:"",[r_t]:i,[hFn]:_,[OFn]:O,[i_t]:ee,[s_t]:W,[mFn]:T,silent:nFn,onChild:C,[MFn]:R}),Object.setPrototypeOf(t,HWn()),JWn(t),t[cFn](b),t}fp.exports=wbe;fp.exports.destination=(e=process.stdout.fd)=>typeof e=="object"?(e.dest=n_t(e.dest||process.stdout.fd),t_t(e)):t_t({dest:n_t(e),minLength:0});fp.exports.transport=lbe();fp.exports.multistream=e_t();fp.exports.levels=p_t();fp.exports.stdSerializers=IFn;fp.exports.stdTimeFunctions=Object.assign({},l_t);fp.exports.symbols=u_t;fp.exports.version=iFn;fp.exports.default=wbe;fp.exports.pino=wbe});var y_t,QN,Pbe=me(()=>{y_t=ke(h_t(),1),QN=(0,y_t.default)({timestamp:()=>`,"time":"${new Date().toJSON()}"`})});var wFn,xN,aI,b_t,CN,f2t,PFn,F2,m_t,Jgt,d2t,g_t,O_t,rye,Fgt,Xgt,IH,M_t,tm,Wc=me(()=>{ao();mOt();jh();Pbe();rde();({version:wFn}=W9),xN="https://web.whatsapp.com",aI="CB:",b_t="TAG:",CN=10080*60,f2t="Noise_XX_25519_AESGCM_SHA256\0\0\0\0",PFn=3,F2=Buffer.from([5]),m_t=Buffer.from([87,65,6,PFn]),Jgt=/https:\/\/(?![^:@\/\s]+:[^:@\/\s]+@)[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/[^\s]*)?/g,d2t={SERIAL:0},g_t=[Je.Message.HistorySyncNotification.HistorySyncType.INITIAL_BOOTSTRAP,Je.Message.HistorySyncNotification.HistorySyncType.PUSH_NAME,Je.Message.HistorySyncNotification.HistorySyncType.RECENT,Je.Message.HistorySyncNotification.HistorySyncType.FULL,Je.Message.HistorySyncNotification.HistorySyncType.ON_DEMAND],O_t={version:wFn,browser:mft.ubuntu("Chrome"),waWebSocketUrl:"wss://web.whatsapp.com/ws/chat",connectTimeoutMs:2e4,keepAliveIntervalMs:3e4,logger:QN.child({class:"baileys"}),emitOwnEvents:!0,defaultQueryTimeoutMs:6e4,customUploadHosts:[],retryRequestDelayMs:250,maxMsgRetryCount:5,fireInitQueries:!0,auth:void 0,markOnlineOnConnect:!0,syncFullHistory:!1,patchMessageBeforeSending:e=>e,shouldSyncHistoryMessage:()=>!0,shouldIgnoreJid:()=>!1,linkPreviewImageThumbnailWidth:192,transactionOpts:{maxCommitRetries:10,delayBetweenTriesMs:3e3},generateHighQualityLinkPreview:!1,options:{},appStateMacVerification:{patch:!1,snapshot:!1},countryCode:"US",getMessage:async()=>{},cachedGroupMetadata:async()=>{},makeSignalRepository:bOt},rye={image:"/mms/image",video:"/mms/video",document:"/mms/document",audio:"/mms/audio",sticker:"/mms/image","thumbnail-link":"/mms/image","product-catalog-image":"/product/image","md-app-state":"","md-msg-hist":"/mms/md-app-state"},Fgt={audio:"Audio",document:"Document",gif:"Video",image:"Image",ppic:"",product:"Image",ptt:"Audio",sticker:"Image",video:"Video","thumbnail-document":"Document Thumbnail","thumbnail-image":"Image Thumbnail","thumbnail-video":"Video Thumbnail","thumbnail-link":"Link Thumbnail","md-msg-hist":"History","md-app-state":"App State","product-catalog-image":"","payment-bg-image":"Payment Background",ptv:"Video"},Xgt=Object.keys(rye),IH=5,M_t=30,tm={SIGNAL_STORE:300,MSG_RETRY:3600,CALL_OFFER:300,USER_DEVICES:300}});async function Rbe(e,t,r=3e4){return e={...e,images:e.images?await zFn(e.images,t,r):e.images},e}var __t,A_t,wH,S_t,E_t,T_t,v_t,I_t,zbe,ZN,zFn,RFn,xFn,w_t=me(()=>{__t=ke(sc(),1),A_t=require("crypto"),wH=require("fs"),S_t=require("os"),E_t=require("path");Cr();Fc();lO();T_t=e=>{let t=et(e,"product_catalog"),r=Yn(t,"product").map(ZN),o=et(t,"paging");return{products:r,nextPageCursor:o?ri(o,"after"):void 0}},v_t=e=>{let t=et(e,"collections");return{collections:Yn(t,"collection").map(o=>{let n=ri(o,"id"),a=ri(o,"name"),i=Yn(o,"product").map(ZN);return{id:n,name:a,products:i,status:xFn(o)}})}},I_t=e=>{let t=et(e,"order"),r=Yn(t,"product").map(a=>{let i=et(a,"image");return{id:ri(a,"id"),name:ri(a,"name"),imageUrl:ri(i,"url"),price:+ri(a,"price"),currency:ri(a,"currency"),quantity:+ri(a,"quantity")}}),o=et(t,"price");return{price:{total:+ri(o,"total"),currency:ri(o,"currency")},products:r}},zbe=(e,t)=>{let r={},o=[];return typeof e<"u"&&o.push({tag:"id",attrs:{},content:Buffer.from(e)}),typeof t.name<"u"&&o.push({tag:"name",attrs:{},content:Buffer.from(t.name)}),typeof t.description<"u"&&o.push({tag:"description",attrs:{},content:Buffer.from(t.description)}),typeof t.retailerId<"u"&&o.push({tag:"retailer_id",attrs:{},content:Buffer.from(t.retailerId)}),t.images.length&&o.push({tag:"media",attrs:{},content:t.images.map(a=>{if(!("url"in a))throw new __t.Boom("Expected img for product to already be uploaded",{statusCode:400});return{tag:"image",attrs:{},content:[{tag:"url",attrs:{},content:Buffer.from(a.url.toString())}]}})}),typeof t.price<"u"&&o.push({tag:"price",attrs:{},content:Buffer.from(t.price.toString())}),typeof t.currency<"u"&&o.push({tag:"currency",attrs:{},content:Buffer.from(t.currency)}),"originCountryCode"in t&&(typeof t.originCountryCode>"u"?r.compliance_category="COUNTRY_ORIGIN_EXEMPT":o.push({tag:"compliance_info",attrs:{},content:[{tag:"country_code_origin",attrs:{},content:Buffer.from(t.originCountryCode)}]})),typeof t.isHidden<"u"&&(r.is_hidden=t.isHidden.toString()),{tag:"product",attrs:r,content:o}},ZN=e=>{let t=e.attrs.is_hidden==="true",r=ri(e,"id"),o=et(e,"media"),n=et(e,"status_info");return{id:r,imageUrls:RFn(o),reviewStatus:{whatsapp:ri(n,"status")},availability:"in stock",name:ri(e,"name"),retailerId:ri(e,"retailer_id"),url:ri(e,"url"),description:ri(e,"description"),price:+ri(e,"price"),currency:ri(e,"currency"),isHidden:t}};zFn=async(e,t,r=3e4)=>await Promise.all(e.map(async n=>{if("url"in n){let h=n.url.toString();if(h.includes(".whatsapp.net"))return{url:h}}let{stream:a}=await PN(n),i=(0,A_t.createHash)("sha256"),s=(0,E_t.join)((0,S_t.tmpdir)(),"img"+ks()),c=(0,wH.createWriteStream)(s);for await(let h of a)i.update(h),c.write(h);let l=i.digest("base64"),{directPath:p}=await t(s,{mediaType:"product-catalog-image",fileEncSha256B64:l,timeoutMs:r});return await wH.promises.unlink(s).catch(h=>console.log("Error deleting temp file ",h)),{url:zN(p)}})),RFn=e=>{let t=et(e,"image");return{requested:ri(t,"request_image_url"),original:ri(t,"original_image_url")}},xFn=e=>{let t=et(e,"status_info");return{status:ri(t,"status"),canAppeal:ri(t,"can_appeal")==="true"}}});var PH,P_t=me(()=>{Cr();PH=class{constructor(){this.name="devices"}getQueryElement(){return{tag:"devices",attrs:{version:"2"}}}getUserElement(){return null}parser(t){let r=[],o;if(t.tag==="devices"){tp(t);let n=et(t,"device-list"),a=et(t,"key-index-list");if(Array.isArray(n?.content))for(let{tag:i,attrs:s}of n.content){let c=+s.id,l=+s["key-index"];i==="device"&&r.push({id:c,keyIndex:l,isHosted:!!(s.is_hosted&&s.is_hosted==="true")})}a?.tag==="key-index-list"&&(o={timestamp:+a.attrs.ts,signedKeyIndex:a?.content,expectedTimestamp:a.attrs.expected_ts?+a.attrs.expected_ts:void 0})}return{deviceList:r,keyIndex:o}}}});var fO,e6=me(()=>{fO=class{withId(t){return this.id=t,this}withLid(t){return this.lid=t,this}withPhone(t){return this.phone=t,this}withType(t){return this.type=t,this}withPersonaId(t){return this.personaId=t,this}}});var zH,z_t=me(()=>{Cr();e6();zH=class{constructor(){this.name="contact"}getQueryElement(){return{tag:"contact",attrs:{}}}getUserElement(t){return{tag:"contact",attrs:{},content:t.phone}}parser(t){return t.tag==="contact"?(tp(t),t?.attrs?.type==="in"):!1}}});var RH,R_t=me(()=>{Cr();RH=class{constructor(){this.name="status"}getQueryElement(){return{tag:"status",attrs:{}}}getUserElement(){return null}parser(t){if(t.tag==="status"){tp(t);let r=t?.content?.toString()??null,o=new Date(+(t?.attrs.t||0)*1e3);return r?typeof r=="string"&&r.length===0&&(r=null):t.attrs?.code&&+t.attrs.code==401?r="":r=null,{status:r,setAt:o}}}}});var xH,x_t=me(()=>{Cr();xH=class{constructor(){this.name="disappearing_mode"}getQueryElement(){return{tag:"disappearing_mode",attrs:{}}}getUserElement(){return null}parser(t){if(t.tag==="disappearing_mode"){tp(t);let r=+t?.attrs.duration,o=new Date(+(t?.attrs.t||0)*1e3);return{duration:r,setAt:o}}}}});var xbe=me(()=>{P_t();z_t();R_t();x_t()});var kH,k_t=me(()=>{Cr();e6();kH=class{constructor(){this.name="bot"}getQueryElement(){return{tag:"bot",attrs:{},content:[{tag:"profile",attrs:{v:"1"}}]}}getUserElement(t){return{tag:"bot",attrs:{},content:[{tag:"profile",attrs:{persona_id:t.personaId}}]}}parser(t){let r=et(t,"bot"),o=et(r,"profile"),n=et(o,"commands"),a=et(o,"prompts"),i=[],s=[];for(let c of Yn(n,"command"))i.push({name:ri(c,"name"),description:ri(c,"description")});for(let c of Yn(a,"prompt"))s.push(`${ri(c,"emoji")} ${ri(c,"text")}`);return{isDefault:!!et(o,"default"),jid:t.attrs.jid,name:ri(o,"name"),attributes:ri(o,"attributes"),description:ri(o,"description"),category:ri(o,"category"),personaId:o.attrs.persona_id,commandsDescription:ri(n,"description"),commands:i,prompts:s}}}});var CH,C_t=me(()=>{CH=class{constructor(){this.name="lid"}getQueryElement(){return{tag:"lid",attrs:{}}}getUserElement(){return null}parser(t){return t.tag==="lid"?t.attrs.val:null}}});var dO,N_t=me(()=>{Cr();k_t();C_t();xbe();e6();dO=class{constructor(){this.protocols=[],this.users=[],this.context="interactive",this.mode="query"}withMode(t){return this.mode=t,this}withContext(t){return this.context=t,this}withUser(t){return this.users.push(t),this}parseUSyncQueryResult(t){if(t.attrs.type!=="result")return;let r=Object.fromEntries(this.protocols.map(i=>[i.name,i.parser])),o={list:[],sideList:[]},n=et(t,"usync"),a=et(n,"list");return Array.isArray(a?.content)&&typeof a<"u"&&(o.list=a.content.map(i=>{let s=i?.attrs.jid;return{...Array.isArray(i?.content)?Object.fromEntries(i.content.map(l=>{let p=l.tag,h=r[p];return h?[p,h(l)]:[p,null]}).filter(([,l])=>l!==null)):{},id:s}})),o}withDeviceProtocol(){return this.protocols.push(new PH),this}withContactProtocol(){return this.protocols.push(new zH),this}withStatusProtocol(){return this.protocols.push(new RH),this}withDisappearingModeProtocol(){return this.protocols.push(new xH),this}withBotProfileProtocol(){return this.protocols.push(new kH),this}withLIDProtocol(){return this.protocols.push(new CH),this}}});var t6=me(()=>{xbe();N_t();e6()});var D_t,NH,kbe=me(()=>{D_t=require("events"),NH=class extends D_t.EventEmitter{constructor(t,r){super(),this.url=t,this.config=r,this.setMaxListeners(0)}}});var DH,L_t=me(()=>{Uw();Wc();kbe();DH=class extends NH{constructor(){super(...arguments),this.socket=null}get isOpen(){return this.socket?.readyState===el.OPEN}get isClosed(){return this.socket===null||this.socket?.readyState===el.CLOSED}get isClosing(){return this.socket===null||this.socket?.readyState===el.CLOSING}get isConnecting(){return this.socket?.readyState===el.CONNECTING}async connect(){if(this.socket)return;this.socket=new el(this.url,{origin:xN,headers:this.config.options?.headers,handshakeTimeout:this.config.connectTimeoutMs,timeout:this.config.connectTimeoutMs,agent:this.config.agent}),this.socket.setMaxListeners(0);let t=["close","error","upgrade","message","open","ping","pong","unexpected-response"];for(let r of t)this.socket?.on(r,(...o)=>this.emit(r,...o))}async close(){this.socket&&(this.socket.close(),this.socket=null)}send(t,r){return this.socket?.send(t,r),!!this.socket}}});var q_t=me(()=>{kbe();L_t()});function Cbe(e){return t=>{e(new Ll.Boom(`WebSocket Error (${t?.message})`,{statusCode:wft(t),data:t}))}}var Ll,LH,B_t,U_t,W_t,F_t=me(()=>{Ll=ke(sc(),1),LH=require("crypto"),B_t=require("url"),U_t=require("util");ao();Wc();k0();jh();Cr();q_t();W_t=e=>{let{waWebSocketUrl:t,connectTimeoutMs:r,logger:o,keepAliveIntervalMs:n,browser:a,auth:i,printQRInTerminal:s,defaultQueryTimeoutMs:c,transactionOpts:l,qrTimeout:p,makeSignalRepository:h}=e;s&&console.warn("\u26A0\uFE0F The printQRInTerminal option has been deprecated. You will no longer receive QR codes in the terminal automatically. Please listen to the connection.update event yourself and handle the QR your way. You can remove this message by removing this opttion. This message will be removed in a future version.");let y=typeof t=="string"?new B_t.URL(t):t;if(e.mobile||y.protocol==="tcp:")throw new Ll.Boom("Mobile API is not supported anymore",{statusCode:ba.loggedOut});y.protocol==="wss"&&i?.creds?.routingInfo&&y.searchParams.append("ED",i.creds.routingInfo.toString("base64url"));let b=new DH(y,e);b.connect();let m=tOt(o),M=Va.generateKeyPair(),_=u2t({keyPair:M,NOISE_HEADER:m_t,logger:o,routingInfo:i?.creds?.routingInfo}),{creds:O}=i,S=F2t(i.keys,o,l),v=h({creds:O,keys:S}),T,w=1,P,C,R=!1,N=Eft(),W=()=>`${N}${w++}`,k=(0,U_t.promisify)(b.send),K=async F=>{if(!b.isOpen)throw new Ll.Boom("Connection Closed",{statusCode:ba.connectionClosed});let X=_.encodeFrame(F);await BC(r,async(ie,J)=>{try{await k.call(b,X),ie()}catch(Y){J(Y)}})},U=F=>{o.level==="trace"&&o.trace({xml:qC(F),msg:"xml send"});let X=aft(F);return K(X)},q=(F,X)=>{o.error({err:F},`unexpected error in '${X}'`)},H=async F=>{if(!b.isOpen)throw new Ll.Boom("Connection Closed",{statusCode:ba.connectionClosed});let X,ie,J=BC(r,(Y,le)=>{X=Y,ie=Cbe(le),b.on("frame",X),b.on("close",ie),b.on("error",ie)}).finally(()=>{b.off("frame",X),b.off("close",ie),b.off("error",ie)});return F&&K(F).catch(ie),J},ee=async(F,X=c)=>{let ie,J;try{return await BC(X,(le,ye)=>{ie=le,J=fe=>{ye(fe||new Ll.Boom("Connection Closed",{statusCode:ba.connectionClosed}))},b.on(`TAG:${F}`,ie),b.on("close",J),b.off("error",J)})}finally{b.off(`TAG:${F}`,ie),b.off("close",J),b.off("error",J)}},Ae=async(F,X)=>{F.attrs.id||(F.attrs.id=W());let ie=F.attrs.id,[J]=await Promise.all([ee(ie,X),U(F)]);return"tag"in J&&tp(J),J},ue=async()=>{let F={clientHello:{ephemeral:M.public}};F=Je.HandshakeMessage.fromObject(F),o.info({browser:a,helloMsg:F},"connected to WA");let X=Je.HandshakeMessage.encode(F).finish(),ie=await H(X),J=Je.HandshakeMessage.decode(ie);o.trace({handshake:J},"handshake recv from WA");let Y=await _.processHandshake(J,O.noiseKey),le;O.me?(le=r2t(O.me.id,e),o.info({node:le},"logging in...")):(le=o2t(O,e),o.info({node:le},"not logged in, attempting registration..."));let ye=_.encrypt(Je.ClientPayload.encode(le).finish());await K(Je.HandshakeMessage.encode({clientFinish:{static:Y,payload:ye}}).finish()),_.finishInit(),je()},se=async()=>{let F=await Ae({tag:"iq",attrs:{id:W(),xmlns:"encrypt",type:"get",to:Jn},content:[{tag:"count",attrs:{}}]});return+et(F,"count").attrs.value},de=async(F=M_t)=>{await S.transaction(async()=>{o.info({count:F},"uploading pre-keys");let{update:X,node:ie}=await e2t({creds:O,keys:S},F);await Ae(ie),m.emit("creds.update",X),o.info({count:F},"uploaded pre-keys")})},Oe=async()=>{let F=await se();o.info(`${F} pre-keys found on server`),F<=IH&&await de()},Te=F=>{_.decodeFrame(F,X=>{T=new Date;let ie=!1;if(ie=b.emit("frame",X),!(X instanceof Uint8Array)){let J=X.attrs.id;o.level==="trace"&&o.trace({xml:qC(X),msg:"recv xml"}),ie=b.emit(`${b_t}${J}`,X)||ie;let Y=X.tag,le=X.attrs||{},ye=Array.isArray(X.content)?X.content[0]?.tag:"";for(let fe of Object.keys(le))ie=b.emit(`${aI}${Y},${fe}:${le[fe]},${ye}`,X)||ie,ie=b.emit(`${aI}${Y},${fe}:${le[fe]}`,X)||ie,ie=b.emit(`${aI}${Y},${fe}`,X)||ie;ie=b.emit(`${aI}${Y},,${ye}`,X)||ie,ie=b.emit(`${aI}${Y}`,X)||ie,!ie&&o.level==="debug"&&o.debug({unhandled:!0,msgId:J,fromMe:!1,frame:X},"communication recv")}})},_e=F=>{if(R){o.trace({trace:F?.stack},"connection already closed");return}if(R=!0,o.info({trace:F?.stack},F?"connection errored":"connection closed"),clearInterval(P),clearTimeout(C),b.removeAllListeners("close"),b.removeAllListeners("open"),b.removeAllListeners("message"),!b.isClosed&&!b.isClosing)try{b.close()}catch{}m.emit("connection.update",{connection:"close",lastDisconnect:{error:F,date:new Date}}),m.removeAllListeners("connection.update")},xe=async()=>{if(b.isOpen)return;if(b.isClosed||b.isClosing)throw new Ll.Boom("Connection Closed",{statusCode:ba.connectionClosed});let F,X;await new Promise((ie,J)=>{F=()=>ie(void 0),X=Cbe(J),b.on("open",F),b.on("close",X),b.on("error",X)}).finally(()=>{b.off("open",F),b.off("close",X),b.off("error",X)})},je=()=>P=setInterval(()=>{T||(T=new Date),Date.now()-T.getTime()>n+5e3?_e(new Ll.Boom("Connection was lost",{statusCode:ba.connectionLost})):b.isOpen?Ae({tag:"iq",attrs:{id:W(),to:Jn,type:"get",xmlns:"w:p"},content:[{tag:"ping",attrs:{}}]}).catch(X=>{o.error({trace:X.stack},"error in sending keep alive")}):o.warn("keep alive called when WS not open")},n),Z=F=>Ae({tag:"iq",attrs:{to:Jn,xmlns:"passive",type:"set"},content:[{tag:F,attrs:{}}]}),pe=async F=>{let X=i.creds.me?.id;X&&await U({tag:"iq",attrs:{to:Jn,type:"set",id:W(),xmlns:"md"},content:[{tag:"remove-companion-device",attrs:{jid:X,reason:"user_initiated"}}]}),_e(new Ll.Boom(F||"Intentional Logout",{statusCode:ba.loggedOut}))},he=async(F,X)=>{let ie=X??Pft((0,LH.randomBytes)(5));if(X&&X?.length!==8)throw new Error("Custom pairing code must be exactly 8 chars");return i.creds.pairingCode=ie,i.creds.me={id:C0(F,"s.whatsapp.net"),name:"~"},m.emit("creds.update",i.creds),await U({tag:"iq",attrs:{to:Jn,type:"set",id:W(),xmlns:"md"},content:[{tag:"link_code_companion_reg",attrs:{jid:i.creds.me.id,stage:"companion_hello",should_show_push_notification:"true"},content:[{tag:"link_code_pairing_wrapped_companion_ephemeral_pub",attrs:{},content:await V()},{tag:"companion_server_auth_key_pub",attrs:{},content:i.creds.noiseKey.public},{tag:"companion_platform_id",attrs:{},content:gft(a[1])},{tag:"companion_platform_display",attrs:{},content:`${a[1]} (${a[0]})`},{tag:"link_code_pairing_nonce",attrs:{},content:"0"}]}]}),i.creds.pairingCode};async function V(){let F=(0,LH.randomBytes)(32),X=(0,LH.randomBytes)(16),ie=await Q9(i.creds.pairingCode,F),J=Lft(i.creds.pairingEphemeralKeyPair.public,ie,X);return Buffer.concat([F,X,J])}let re=F=>Ae({tag:"iq",attrs:{to:Jn,id:W(),xmlns:"w:stats"},content:[{tag:"add",attrs:{},content:F}]});b.on("message",Te),b.on("open",async()=>{try{await ue()}catch(F){o.error({err:F},"error in validating connection"),_e(F)}}),b.on("error",Cbe(_e)),b.on("close",()=>_e(new Ll.Boom("Connection Terminated",{statusCode:ba.connectionClosed}))),b.on("CB:xmlstreamend",()=>_e(new Ll.Boom("Connection Terminated by Server",{statusCode:ba.connectionClosed}))),b.on("CB:iq,type:set,pair-device",async F=>{let X={tag:"iq",attrs:{to:Jn,type:"result",id:F.attrs.id}};await U(X);let ie=et(F,"pair-device"),J=Yn(ie,"ref"),Y=Buffer.from(O.noiseKey.public).toString("base64"),le=Buffer.from(O.signedIdentityKey.public).toString("base64"),ye=O.advSecretKey,fe=p||6e4,ze=()=>{if(!b.isOpen)return;let Ue=J.shift();if(!Ue){_e(new Ll.Boom("QR refs attempts ended",{statusCode:ba.timedOut}));return}let De=[Ue.content.toString("utf-8"),Y,le,ye].join(",");m.emit("connection.update",{qr:De}),C=setTimeout(ze,fe),fe=p||2e4};ze()}),b.on("CB:iq,,pair-success",async F=>{o.debug("pair success recv");try{let{reply:X,creds:ie}=a2t(F,O);o.info({me:ie.me,platform:ie.platform},"pairing configured successfully, expect to restart the connection..."),m.emit("creds.update",ie),m.emit("connection.update",{isNewLogin:!0,qr:void 0}),await U(X)}catch(X){o.info({trace:X.stack},"error in pairing"),_e(X)}}),b.on("CB:success",async F=>{await Oe(),await Z("active"),o.info("opened connection to WA"),clearTimeout(C),m.emit("creds.update",{me:{...i.creds.me,lid:F.attrs.lid}}),m.emit("connection.update",{connection:"open"})}),b.on("CB:stream:error",F=>{o.error({node:F},"stream errored out");let{reason:X,statusCode:ie}=vft(F);_e(new Ll.Boom(`Stream Errored (${X})`,{statusCode:ie,data:F}))}),b.on("CB:failure",F=>{let X=+(F.attrs.reason||500);_e(new Ll.Boom("Connection Failure",{statusCode:X,data:F.attrs}))}),b.on("CB:ib,,downgrade_webclient",()=>{_e(new Ll.Boom("Multi-device beta not joined",{statusCode:ba.multideviceMismatch}))}),b.on("CB:ib,,offline_preview",F=>{o.info("offline preview received",JSON.stringify(F)),U({tag:"ib",attrs:{},content:[{tag:"offline_batch",attrs:{count:"100"}}]})}),b.on("CB:ib,,edge_routing",F=>{let X=et(F,"edge_routing"),ie=et(X,"routing_info");ie?.content&&(i.creds.routingInfo=Buffer.from(ie?.content),m.emit("creds.update",i.creds))});let ae=!1;return process.nextTick(()=>{O.me?.id&&(m.buffer(),ae=!0),m.emit("connection.update",{connection:"connecting",receivedPendingNotifications:!1,qr:void 0})}),b.on("CB:ib,,offline",F=>{let ie=+(et(F,"offline")?.attrs.count||0);o.info(`handled ${ie} offline messages/notifications`),ae&&(m.flush(),o.trace("flushed events for initial buffer")),m.emit("connection.update",{receivedPendingNotifications:!0})}),m.on("creds.update",F=>{let X=F.me?.name;O.me?.name!==X&&(o.debug({name:X},"updated pushName"),U({tag:"presence",attrs:{name:X}}).catch(ie=>{o.warn({trace:ie.stack},"error in sending presence update on name change")})),Object.assign(O,F)}),{type:"md",ws:b,ev:m,authState:{creds:O,keys:S},signalRepository:v,get user(){return i.creds.me},generateMessageTag:W,query:Ae,waitForMessage:ee,waitForSocketOpen:xe,sendRawMessage:K,sendNode:U,logout:pe,end:_e,onUnexpectedError:q,uploadPreKeys:de,uploadPreKeysToServerIfRequired:Oe,requestPairingCode:he,waitForConnectionUpdate:Aft(m),sendWAMBuffer:re}}});var j_t,G_t,K_t=me(()=>{j_t=ke(sc(),1);Cr();t6();F_t();G_t=e=>{let t=W_t(e),{generateMessageTag:r,query:o}=t;return{...t,executeUSyncQuery:async a=>{if(a.protocols.length===0)throw new j_t.Boom("USyncQuery must have at least one protocol");let s=a.users.map(y=>({tag:"user",attrs:{jid:y.phone?void 0:y.id},content:a.protocols.map(b=>b.getUserElement(y)).filter(b=>b!==null)})),c={tag:"list",attrs:{},content:s},l={tag:"query",attrs:{},content:a.protocols.map(y=>y.getQueryElement())},p={tag:"iq",attrs:{to:Jn,type:"get",xmlns:"usync"},content:[{tag:"usync",attrs:{context:a.context,mode:a.mode,sid:r(),last:"true",index:"0"},content:[l,c]}]},h=await o(p);return a.parseUSyncQueryResult(h)}}}});var qH,kFn,H_t,V_t=me(()=>{BN();qH=ke(sc(),1);ao();Wc();k0();ode();jh();VK();XK();Cr();t6();K_t();kFn=2,H_t=e=>{let{logger:t,markOnlineOnConnect:r,fireInitQueries:o,appStateMacVerification:n,shouldIgnoreJid:a,shouldSyncHistoryMessage:i}=e,s=G_t(e),{ev:c,ws:l,authState:p,generateMessageTag:h,sendNode:y,query:b,onUnexpectedError:m}=s,M,_=Il.Connecting,O=UN(),S,v=e.placeholderResendCache||new em({stdTTL:tm.MSG_RETRY,useClones:!1});e.placeholderResendCache||(e.placeholderResendCache=v);let T=async qe=>{let{[qe]:at}=await p.keys.get("app-state-sync-key",[qe]);return at},w=async(qe=!1)=>{if(!M||qe){let{content:at}=await b({tag:"iq",attrs:{xmlns:"privacy",to:Jn,type:"get"},content:[{tag:"privacy",attrs:{}}]});M=ude(at?.[0],"category")}return M},P=async(qe,at)=>{await b({tag:"iq",attrs:{xmlns:"privacy",to:Jn,type:"set"},content:[{tag:"privacy",attrs:{},content:[{tag:"category",attrs:{name:qe,value:at}}]}]})},C=async qe=>{await P("messages",qe)},R=async qe=>{await P("calladd",qe)},N=async qe=>{await P("last",qe)},W=async qe=>{await P("online",qe)},k=async qe=>{await P("profile",qe)},K=async qe=>{await P("status",qe)},U=async qe=>{await P("readreceipts",qe)},q=async qe=>{await P("groupadd",qe)},H=async qe=>{await b({tag:"iq",attrs:{xmlns:"disappearing_mode",to:Jn,type:"set"},content:[{tag:"disappearing_mode",attrs:{duration:qe.toString()}}]})},ee=async()=>{let qe=await b({tag:"iq",attrs:{xmlns:"bot",to:Jn,type:"get"},content:[{tag:"bot",attrs:{v:"2"}}]}),at=et(qe,"bot"),kt=[];for(let At of Yn(at,"section"))if(At.attrs.type==="all")for(let en of Yn(At,"bot"))kt.push({jid:en.attrs.jid,personaId:en.attrs.persona_id});return kt},Ae=async(...qe)=>{let at=new dO().withContactProtocol().withLIDProtocol();for(let At of qe){let en=`+${At.replace("+","").split("@")[0]?.split(":")[0]}`;at.withUser(new fO().withPhone(en))}let kt=await s.executeUSyncQuery(at);if(kt)return kt.list.filter(At=>!!At.contact).map(({contact:At,id:en,lid:Mn})=>({jid:en,exists:At,lid:Mn}))},ue=async(...qe)=>{let at=new dO().withStatusProtocol();for(let At of qe)at.withUser(new fO().withId(At));let kt=await s.executeUSyncQuery(at);if(kt)return kt.list},se=async(...qe)=>{let at=new dO().withDisappearingModeProtocol();for(let At of qe)at.withUser(new fO().withId(At));let kt=await s.executeUSyncQuery(at);if(kt)return kt.list},de=async(qe,at,kt)=>{let At;if(!qe)throw new qH.Boom("Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update");vi(qe)!==vi(p.creds.me.id)?At=vi(qe):At=void 0;let{img:en}=await LK(at,kt);await b({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:profile:picture",...At?{target:At}:{}},content:[{tag:"picture",attrs:{type:"image"},content:en}]})},Oe=async qe=>{let at;if(!qe)throw new qH.Boom("Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update");vi(qe)!==vi(p.creds.me.id)?at=vi(qe):at=void 0,await b({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:profile:picture",...at?{target:at}:{}}})},Te=async qe=>{await b({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"status"},content:[{tag:"status",attrs:{},content:Buffer.from(qe,"utf-8")}]})},_e=async qe=>{await Y({pushNameSetting:qe},"")},xe=async()=>{let qe=await b({tag:"iq",attrs:{xmlns:"blocklist",to:Jn,type:"get"}}),at=et(qe,"list");return Yn(at,"item").map(kt=>kt.attrs.jid)},je=async(qe,at)=>{await b({tag:"iq",attrs:{xmlns:"blocklist",to:Jn,type:"set"},content:[{tag:"item",attrs:{action:at,jid:qe}}]})},Z=async qe=>{let at=await b({tag:"iq",attrs:{to:"s.whatsapp.net",xmlns:"w:biz",type:"get"},content:[{tag:"business_profile",attrs:{v:"244"},content:[{tag:"profile",attrs:{jid:qe}}]}]}),kt=et(at,"business_profile"),At=et(kt,"profile");if(At){let en=et(At,"address"),Mn=et(At,"description"),Bn=et(At,"website"),An=et(At,"email"),Fn=et(et(At,"categories"),"category"),Ya=et(At,"business_hours"),Lo=Ya?Yn(Ya,"business_hours_config"):void 0,ar=Bn?.content?.toString();return{wid:At.attrs?.jid,address:en?.content?.toString(),description:Mn?.content?.toString()||"",website:ar?[ar]:[],email:An?.content?.toString(),category:Fn?.content?.toString(),business_hours:{timezone:Ya?.attrs?.timezone,business_config:Lo?.map(({attrs:li})=>li)}}}},pe=async(qe,at)=>{t.info({fromTimestamp:at},"clean dirty bits "+qe),await y({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"urn:xmpp:whatsapp:dirty",id:h()},content:[{tag:"clean",attrs:{type:qe,...at?{timestamp:at.toString()}:null}}]})},he=qe=>({onMutation(at){z2t(at,c,p.creds.me,qe?{accountSettings:p.creds.accountSettings}:void 0,t)}}),V=c.createBufferedFunction(async(qe,at)=>{let kt={},At={};await p.keys.transaction(async()=>{let Mn=new Set(qe),Bn={};for(;Mn.size;){let An={},Fn=[];for(let ar of Mn){let Di=(await p.keys.get("app-state-sync-version",[ar]))[ar];Di?typeof kt[ar]>"u"&&(kt[ar]=Di.version):Di=jK(),An[ar]=Di,t.info(`resyncing ${ar} from v${Di.version}`),Fn.push({tag:"collection",attrs:{name:ar,version:Di.version.toString(),return_snapshot:(!Di.version).toString()}})}let Ya=await b({tag:"iq",attrs:{to:Jn,xmlns:"w:sync:app:state",type:"set"},content:[{tag:"sync",attrs:{},content:Fn}]}),Lo=await v2t(Ya,e?.options);for(let ar in Lo){let li=ar,{patches:Di,hasMorePatches:Oa,snapshot:Nt}=Lo[li];try{if(Nt){let{state:qo,mutationMap:Bl}=await w2t(li,Nt,T,kt[li],n.snapshot);An[li]=qo,Object.assign(At,Bl),t.info(`restored state of ${li} from snapshot to v${qo.version} with mutations`),await p.keys.set({"app-state-sync-version":{[li]:qo}})}if(Di.length){let{state:qo,mutationMap:Bl}=await yye(li,Di,An[li],T,e.options,kt[li],t,n.patch);await p.keys.set({"app-state-sync-version":{[li]:qo}}),t.info(`synced ${li} to v${qo.version}`),kt[li]=qo.version,Object.assign(At,Bl)}Oa?t.info(`${li} has more patches...`):Mn.delete(li)}catch(qo){let Bl=Bn[li]>=kFn||qo.output?.statusCode===404||qo.name==="TypeError";t.info({name:li,error:qo.stack},`failed to sync state from version${Bl?"":", removing and trying from scratch"}`),await p.keys.set({"app-state-sync-version":{[li]:null}}),Bn[li]=(Bn[li]||0)+1,Bl&&Mn.delete(li)}}}});let{onMutation:en}=he(at);for(let Mn in At)en(At[Mn])}),re=async(qe,at="preview",kt)=>{qe=vi(qe);let At=await b({tag:"iq",attrs:{target:qe,to:Jn,type:"get",xmlns:"w:profile:picture"},content:[{tag:"picture",attrs:{type:at,query:"url"}}]},kt);return et(At,"picture")?.attrs?.url},ae=async(qe,at)=>{let kt=p.creds.me;if(qe==="available"||qe==="unavailable"){if(!kt.name){t.warn("no name present, ignoring presence update request...");return}c.emit("connection.update",{isOnline:qe==="available"}),await y({tag:"presence",attrs:{name:kt.name.replace(/@/g,""),type:qe}})}else{let{server:At}=Xo(at);await y({tag:"chatstate",attrs:{from:At==="lid"?kt.lid:kt.id,to:at},content:[{tag:qe==="recording"?"composing":qe,attrs:qe==="recording"?{media:"audio"}:{}}]})}},F=(qe,at)=>y({tag:"presence",attrs:{to:qe,id:h(),type:"subscribe"},content:at?[{tag:"tctoken",attrs:{},content:at}]:void 0}),X=({tag:qe,attrs:at,content:kt})=>{let At,en=at.from,Mn=at.participant||at.from;if(!(a(en)&&en!=="@s.whatsapp.net")){if(qe==="presence")At={lastKnownPresence:at.type==="unavailable"?"unavailable":"available",lastSeen:at.last&&at.last!=="deny"?+at.last:void 0};else if(Array.isArray(kt)){let[Bn]=kt,An=Bn.tag;An==="paused"&&(An="available"),Bn.attrs?.media==="audio"&&(An="recording"),At={lastKnownPresence:An}}else t.error({tag:qe,attrs:at,content:kt},"recv invalid presence node");At&&c.emit("presence.update",{id:en,presences:{[Mn]:At}})}},ie=async qe=>{let at=qe.type,kt=p.creds.myAppStateKeyId;if(!kt)throw new qH.Boom("App state key not present!",{statusCode:400});let At,en;if(await O.mutex(async()=>{await p.keys.transaction(async()=>{t.debug({patch:qe},"applying app patch"),await V([at],!1);let{[at]:Mn}=await p.keys.get("app-state-sync-version",[at]);At=Mn||jK(),en=await E2t(qe,kt,At,T);let{patch:Bn,state:An}=en,Fn={tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:sync:app:state"},content:[{tag:"sync",attrs:{},content:[{tag:"collection",attrs:{name:at,version:(An.version-1).toString(),return_snapshot:"false"},content:[{tag:"patch",attrs:{},content:Je.SyncdPatch.encode(Bn).finish()}]}]}]};await b(Fn),await p.keys.set({"app-state-sync-version":{[at]:An}})})}),e.emitOwnEvents){let{onMutation:Mn}=he(!1),{mutationMap:Bn}=await yye(at,[{...en.patch,version:{version:en.state.version}}],At,T,e.options,void 0,t);for(let An in Bn)Mn(Bn[An])}},J=async()=>{let qe=await b({tag:"iq",attrs:{to:Jn,xmlns:"w",type:"get"},content:[{tag:"props",attrs:{protocol:"2",hash:p?.creds?.lastPropHash||""}}]}),at=et(qe,"props"),kt={};return at&&(at.attrs?.hash&&(p.creds.lastPropHash=at?.attrs?.hash,c.emit("creds.update",p.creds)),kt=ude(at,"prop")),t.debug("fetched props"),kt},Y=(qe,at)=>{let kt=P2t(qe,at);return ie(kt)},le=qe=>Y({disableLinkPreviews:{isPreviewsDisabled:qe}},""),ye=(qe,at,kt)=>Y({star:{messages:at,star:kt}},qe),fe=(qe,at)=>Y({contact:at},qe),ze=qe=>Y({contact:null},qe),Ue=(qe,at)=>Y({addLabel:{...at}},qe),Ge=(qe,at)=>Y({addChatLabel:{labelId:at}},qe),De=(qe,at)=>Y({removeChatLabel:{labelId:at}},qe),tt=(qe,at,kt)=>Y({addMessageLabel:{messageId:at,labelId:kt}},qe),Mt=(qe,at,kt)=>Y({removeMessageLabel:{messageId:at,labelId:kt}},qe),Pt=async()=>{await Promise.all([J(),xe(),w()])},Zt=c.createBufferedFunction(async(qe,at)=>{if(c.emit("messages.upsert",{messages:[qe],type:at}),qe.pushName){let Mn=qe.key.fromMe?p.creds.me.id:qe.key.participant||qe.key.remoteJid;Mn=vi(Mn),qe.key.fromMe||c.emit("contacts.update",[{id:Mn,notify:qe.pushName,verifiedName:qe.verifiedBizName}]),qe.key.fromMe&&qe.pushName&&p.creds.me?.name!==qe.pushName&&c.emit("creds.update",{me:{...p.creds.me,name:qe.pushName}})}let kt=FK(qe.message),At=kt?i(kt)&&g_t.includes(kt.syncType):!1;kt&&_===Il.AwaitingInitialSync&&(S&&(clearTimeout(S),S=void 0),At?(_=Il.Syncing,t.info("Transitioned to Syncing state")):(_=Il.Online,t.info("History sync skipped, transitioning to Online state and flushing buffer"),c.flush()));let en=async()=>{if(_===Il.Syncing){t.info("Doing app state sync"),await V($pt,!0),_=Il.Online,t.info("App state sync complete, transitioning to Online state and flushing buffer"),c.flush();let Mn=(p.creds.accountSyncCounter||0)+1;c.emit("creds.update",{accountSyncCounter:Mn})}};await Promise.all([(async()=>{At&&await en()})(),Q2t(qe,{shouldProcessHistoryMsg:At,placeholderResendCache:v,ev:c,creds:p.creds,keyStore:p.keys,logger:t,options:e.options})]),qe.message?.protocolMessage?.appStateSyncKeyShare&&_===Il.Syncing&&(t.info("App state sync key arrived, triggering app state sync"),await en())});return l.on("CB:presence",X),l.on("CB:chatstate",X),l.on("CB:ib,,dirty",async qe=>{let{attrs:at}=et(qe,"dirty");switch(at.type){case"account_sync":if(at.timestamp){let{lastAccountSyncTimestamp:At}=p.creds;At&&await pe("account_sync",At),At=+at.timestamp,c.emit("creds.update",{lastAccountSyncTimestamp:At})}break;case"groups":break;default:t.info({node:qe},"received unknown sync");break}}),c.on("connection.update",({connection:qe,receivedPendingNotifications:at})=>{if(qe==="open"&&(o&&Pt().catch(At=>m(At,"init queries")),ae(r?"available":"unavailable").catch(At=>m(At,"presence update requests"))),!at||_!==Il.Connecting)return;if(_=Il.AwaitingInitialSync,t.info("Connection is now AwaitingInitialSync, buffering events"),c.buffer(),!i(Je.Message.HistorySyncNotification.fromObject({syncType:Je.HistorySync.HistorySyncType.RECENT}))){t.info("History sync is disabled by config, not waiting for notification. Transitioning to Online."),_=Il.Online,setTimeout(()=>c.flush(),0);return}t.info("History sync is enabled, awaiting notification with a 20s timeout."),S&&clearTimeout(S),S=setTimeout(()=>{_===Il.AwaitingInitialSync&&(t.warn("Timeout in AwaitingInitialSync, forcing state to Online and flushing buffer"),_=Il.Online,c.flush())},2e4)}),{...s,getBotListV2:ee,processingMutex:O,fetchPrivacySettings:w,upsertMessage:Zt,appPatch:ie,sendPresenceUpdate:ae,presenceSubscribe:F,profilePictureUrl:re,onWhatsApp:Ae,fetchBlocklist:xe,fetchStatus:ue,fetchDisappearingDuration:se,updateProfilePicture:de,removeProfilePicture:Oe,updateProfileStatus:Te,updateProfileName:_e,updateBlockStatus:je,updateDisableLinkPreviewsPrivacy:le,updateCallPrivacy:R,updateMessagesPrivacy:C,updateLastSeenPrivacy:N,updateOnlinePrivacy:W,updateProfilePicturePrivacy:k,updateStatusPrivacy:K,updateReadReceiptsPrivacy:U,updateGroupsAddPrivacy:q,updateDefaultDisappearingMode:H,getBusinessProfile:Z,resyncAppState:V,chatModify:Y,cleanDirtyBits:pe,addOrEditContact:fe,removeContact:ze,addLabel:Ue,addChatLabel:Ge,removeChatLabel:De,addMessageLabel:tt,removeMessageLabel:Mt,star:ye}}});var $_t,sI,Nbe=me(()=>{ao();k0();jh();Cr();V_t();$_t=e=>{let t=H_t(e),{authState:r,ev:o,query:n,upsertMessage:a}=t,i=async(l,p,h)=>n({tag:"iq",attrs:{type:p,xmlns:"w:g2",to:l},content:h}),s=async l=>{let p=await i(l,"get",[{tag:"query",attrs:{request:"interactive"}}]);return sI(p)},c=async()=>{let l=await n({tag:"iq",attrs:{to:"@g.us",xmlns:"w:g2",type:"get"},content:[{tag:"participating",attrs:{},content:[{tag:"participants",attrs:{}},{tag:"description",attrs:{}}]}]}),p={},h=et(l,"groups");if(h){let y=Yn(h,"group");for(let b of y){let m=sI({tag:"result",attrs:{},content:[b]});p[m.id]=m}}return t.ev.emit("groups.update",Object.values(p)),p};return t.ws.on("CB:ib,,dirty",async l=>{let{attrs:p}=et(l,"dirty");p.type==="groups"&&(await c(),await t.cleanDirtyBits("groups"))}),{...t,groupMetadata:s,groupCreate:async(l,p)=>{let h=ks(),y=await i("@g.us","set",[{tag:"create",attrs:{subject:l,key:h},content:p.map(b=>({tag:"participant",attrs:{jid:b}}))}]);return sI(y)},groupLeave:async l=>{await i("@g.us","set",[{tag:"leave",attrs:{},content:[{tag:"group",attrs:{id:l}}]}])},groupUpdateSubject:async(l,p)=>{await i(l,"set",[{tag:"subject",attrs:{},content:Buffer.from(p,"utf-8")}])},groupRequestParticipantsList:async l=>{let p=await i(l,"get",[{tag:"membership_approval_requests",attrs:{}}]),h=et(p,"membership_approval_requests");return Yn(h,"membership_approval_request").map(b=>b.attrs)},groupRequestParticipantsUpdate:async(l,p,h)=>{let y=await i(l,"set",[{tag:"membership_requests_action",attrs:{},content:[{tag:h,attrs:{},content:p.map(_=>({tag:"participant",attrs:{jid:_}}))}]}]),b=et(y,"membership_requests_action"),m=et(b,h);return Yn(m,"participant").map(_=>({status:_.attrs.error||"200",jid:_.attrs.jid}))},groupParticipantsUpdate:async(l,p,h)=>{let y=await i(l,"set",[{tag:h,attrs:{},content:p.map(M=>({tag:"participant",attrs:{jid:M}}))}]),b=et(y,h);return Yn(b,"participant").map(M=>({status:M.attrs.error||"200",jid:M.attrs.jid,content:M}))},groupUpdateDescription:async(l,p)=>{let y=(await s(l)).descId??null;await i(l,"set",[{tag:"description",attrs:{...p?{id:ks()}:{delete:"true"},...y?{prev:y}:{}},content:p?[{tag:"body",attrs:{},content:Buffer.from(p,"utf-8")}]:void 0}])},groupInviteCode:async l=>{let p=await i(l,"get",[{tag:"invite",attrs:{}}]);return et(p,"invite")?.attrs.code},groupRevokeInvite:async l=>{let p=await i(l,"set",[{tag:"invite",attrs:{}}]);return et(p,"invite")?.attrs.code},groupAcceptInvite:async l=>{let p=await i("@g.us","set",[{tag:"invite",attrs:{code:l}}]);return et(p,"group")?.attrs.jid},groupRevokeInviteV4:async(l,p)=>!!await i(l,"set",[{tag:"revoke",attrs:{},content:[{tag:"participant",attrs:{jid:p}}]}]),groupAcceptInviteV4:o.createBufferedFunction(async(l,p)=>{l=typeof l=="string"?{remoteJid:l}:l;let h=await i(p.groupJid,"set",[{tag:"accept",attrs:{code:p.inviteCode,expiration:p.inviteExpiration.toString(),admin:l.remoteJid}}]);return l.id&&(p=Je.Message.GroupInviteMessage.fromObject(p),p.inviteExpiration=0,p.inviteCode="",o.emit("messages.update",[{key:l,update:{message:{groupInviteMessage:p}}}])),await a({key:{remoteJid:p.groupJid,id:ks(t.user?.id),fromMe:!1,participant:l.remoteJid},messageStubType:Ln.GROUP_PARTICIPANT_ADD,messageStubParameters:[r.creds.me.id],participant:l.remoteJid,messageTimestamp:np()},"notify"),h.attrs.from}),groupGetInviteInfo:async l=>{let p=await i("@g.us","get",[{tag:"invite",attrs:{code:l}}]);return sI(p)},groupToggleEphemeral:async(l,p)=>{let h=p?{tag:"ephemeral",attrs:{expiration:p.toString()}}:{tag:"not_ephemeral",attrs:{}};await i(l,"set",[h])},groupSettingUpdate:async(l,p)=>{await i(l,"set",[{tag:p,attrs:{}}])},groupMemberAddMode:async(l,p)=>{await i(l,"set",[{tag:"member_add_mode",attrs:{},content:p}])},groupJoinApprovalMode:async(l,p)=>{await i(l,"set",[{tag:"membership_approval_mode",attrs:{},content:[{tag:"group_join",attrs:{state:p}}]}])},groupFetchAllParticipating:c}},sI=e=>{let t=et(e,"group"),r=et(t,"description"),o,n,a,i,s;r&&(o=ri(r,"body"),a=r.attrs.participant?vi(r.attrs.participant):void 0,i=r.attrs.participant_pn?vi(r.attrs.participant_pn):void 0,s=+r.attrs.t,n=r.attrs.id);let c=t.attrs.id.includes("@")?t.attrs.id:C0(t.attrs.id,"g.us"),l=et(t,"ephemeral")?.attrs.expiration,p=ri(t,"member_add_mode")==="all_member_add";return{id:c,addressingMode:t.attrs.addressing_mode,subject:t.attrs.subject,subjectOwner:t.attrs.s_o,subjectOwnerJid:t.attrs.s_o_pn,subjectTime:+t.attrs.s_t,size:t.attrs.size?+t.attrs.size:Yn(t,"participant").length,creation:+t.attrs.creation,owner:t.attrs.creator?vi(t.attrs.creator):void 0,ownerJid:t.attrs.creator_pn?vi(t.attrs.creator_pn):void 0,owner_country_code:t.attrs.creator_country_code,desc:o,descId:n,descOwner:a,descOwnerJid:i,descTime:s,linkedParent:et(t,"linked_parent")?.attrs.jid||void 0,restrict:!!et(t,"locked"),announce:!!et(t,"announcement"),isCommunity:!!et(t,"parent"),isCommunityAnnounce:!!et(t,"default_sub_group"),joinApprovalMode:!!et(t,"membership_approval_mode"),memberAddMode:p,participants:Yn(t,"participant").map(({attrs:y})=>({id:y.jid,jid:N0(y.jid)?y.jid:vi(y.phone_number),lid:iv(y.jid)?y.jid:y.lid,admin:y.type||null})),ephemeralDuration:l?+l:void 0}}});var Dbe,CFn,J_t,X_t=me(()=>{Dbe=ke(sc(),1);Cr();CFn=(e,t,r,o)=>r({tag:"iq",attrs:{id:o(),type:"get",to:Jn,xmlns:"w:mex"},content:[{tag:"query",attrs:{query_id:t},content:Buffer.from(JSON.stringify({variables:e}),"utf-8")}]}),J_t=async(e,t,r,o,n)=>{let a=await CFn(e,t,o,n),i=et(a,"result");if(i?.content){let c=JSON.parse(i.content.toString());if(c.errors&&c.errors.length>0){let p=c.errors.map(b=>b.message||"Unknown error").join(", "),h=c.errors[0],y=h.extensions?.error_code||400;throw new Dbe.Boom(`GraphQL server error: ${p}`,{statusCode:y,data:h})}let l=r?c?.data?.[r]:c?.data;if(typeof l<"u")return l}let s=(r||"").startsWith("xwa2_")?r.substring(5).replace(/_/g," "):r?.replace(/_/g," ");throw new Dbe.Boom(`Failed to ${s}, unexpected response structure.`,{statusCode:400,data:a})}});var NFn,DFn,Y_t,Q_t=me(()=>{k0();lO();Cr();X_t();NFn=e=>{let{id:t,thread_metadata:r,viewer_metadata:o}=e;return{id:t,owner:void 0,name:r.name.text,creation_time:parseInt(r.creation_time,10),description:r.description.text,invite:r.invite,subscribers:parseInt(r.subscribers_count,10),verification:r.verification,picture:{id:r.picture.id,directPath:r.picture.direct_path},mute_state:o.mute}},DFn=e=>typeof e!="object"||e===null?null:"id"in e&&typeof e.id=="string"?e:"result"in e&&typeof e.result=="object"&&e.result!==null&&"id"in e.result?e.result:null,Y_t=e=>{let{query:t,generateMessageTag:r}=e,o=(a,i,s)=>J_t(a,i,s,t,r),n=async(a,i)=>{let s={newsletter_id:a,updates:{...i,settings:null}};return o(s,wl.UPDATE_METADATA,"xwa2_newsletter_update")};return{...e,newsletterCreate:async(a,i)=>{let c=await o({input:{name:a,description:i??null}},wl.CREATE,Ru.xwa2_newsletter_create);return NFn(c)},newsletterUpdate:n,newsletterSubscribers:async a=>o({newsletter_id:a},wl.SUBSCRIBERS,Ru.xwa2_newsletter_subscribers),newsletterMetadata:async(a,i)=>{let s={fetch_creation_time:!0,fetch_full_image:!0,fetch_viewer_metadata:!0,input:{key:i,type:a.toUpperCase()}},c=await o(s,wl.METADATA,Ru.xwa2_newsletter_metadata);return DFn(c)},newsletterFollow:a=>o({newsletter_id:a},wl.FOLLOW,Ru.xwa2_newsletter_follow),newsletterUnfollow:a=>o({newsletter_id:a},wl.UNFOLLOW,Ru.xwa2_newsletter_unfollow),newsletterMute:a=>o({newsletter_id:a},wl.MUTE,Ru.xwa2_newsletter_mute_v2),newsletterUnmute:a=>o({newsletter_id:a},wl.UNMUTE,Ru.xwa2_newsletter_unmute_v2),newsletterUpdateName:async(a,i)=>await n(a,{name:i}),newsletterUpdateDescription:async(a,i)=>await n(a,{description:i}),newsletterUpdatePicture:async(a,i)=>{let{img:s}=await LK(i);return await n(a,{picture:s.toString("base64")})},newsletterRemovePicture:async a=>await n(a,{picture:""}),newsletterReactMessage:async(a,i,s)=>{await t({tag:"message",attrs:{to:a,...s?{}:{edit:"7"},type:"reaction",server_id:i,id:r()},content:[{tag:"reaction",attrs:s?{code:s}:{}}]})},newsletterFetchMessages:async(a,i,s,c)=>{let l={count:i.toString()};return typeof s=="number"&&(l.since=s.toString()),c&&(l.after=c.toString()),await t({tag:"iq",attrs:{id:r(),type:"get",xmlns:"newsletter",to:a},content:[{tag:"message_updates",attrs:l}]})},subscribeNewsletterUpdates:async a=>{let i=await t({tag:"iq",attrs:{id:r(),type:"set",xmlns:"newsletter",to:a},content:[{tag:"live_updates",attrs:{},content:[]}]}),c=et(i,"live_updates")?.attrs?.duration;return c?{duration:c}:null},newsletterAdminCount:async a=>(await o({newsletter_id:a},wl.ADMIN_COUNT,Ru.xwa2_newsletter_admin_count)).admin_count,newsletterChangeOwner:async(a,i)=>{await o({newsletter_id:a,user_id:i},wl.CHANGE_OWNER,Ru.xwa2_newsletter_change_owner)},newsletterDemote:async(a,i)=>{await o({newsletter_id:a,user_id:i},wl.DEMOTE,Ru.xwa2_newsletter_demote)},newsletterDelete:async a=>{await o({newsletter_id:a},wl.DELETE,Ru.xwa2_newsletter_delete_v2)}}}});var n6,Z_t,eAt=me(()=>{BN();n6=ke(sc(),1);ao();Wc();jh();wye();Cr();t6();Nbe();Q_t();Z_t=e=>{let{logger:t,linkPreviewImageThumbnailWidth:r,generateHighQualityLinkPreview:o,options:n,patchMessageBeforeSending:a,cachedGroupMetadata:i}=e,s=Y_t($_t(e)),{ev:c,authState:l,processingMutex:p,signalRepository:h,upsertMessage:y,query:b,fetchPrivacySettings:m,sendNode:M,groupMetadata:_,groupToggleEphemeral:O}=s,S=e.userDevicesCache||new em({stdTTL:tm.USER_DEVICES,useClones:!1}),v,T=async(ue=!1)=>{let se=await v;return(!se||ue||new Date().getTime()-se.fetchDate.getTime()>se.ttl*1e3)&&(v=(async()=>{let de=await b({tag:"iq",attrs:{type:"set",xmlns:"w:m",to:Jn},content:[{tag:"media_conn",attrs:{}}]}),Oe=et(de,"media_conn"),Te={hosts:Yn(Oe,"host").map(({attrs:_e})=>({hostname:_e.hostname,maxContentLengthBytes:+_e.maxContentLengthBytes})),auth:Oe.attrs.auth,ttl:+Oe.attrs.ttl,fetchDate:new Date};return t.debug("fetched media conn"),Te})()),v},w=async(ue,se,de,Oe)=>{if(!de||de.length===0)throw new n6.Boom("missing ids in receipt");let Te={tag:"receipt",attrs:{id:de[0]}};(Oe==="read"||Oe==="read-self")&&(Te.attrs.t=np().toString()),Oe==="sender"&&N0(ue)?(Te.attrs.recipient=ue,Te.attrs.to=se):(Te.attrs.to=ue,se&&(Te.attrs.participant=se)),Oe&&(Te.attrs.type=Oe);let xe=de.slice(1);xe.length&&(Te.content=[{tag:"list",attrs:{},content:xe.map(je=>({tag:"item",attrs:{id:je}}))}]),t.debug({attrs:Te.attrs,messageIds:de},"sending receipt for messages"),await M(Te)},P=async(ue,se)=>{let de=Vgt(ue);for(let{jid:Oe,participant:Te,messageIds:_e}of de)await w(Oe,Te,_e,se)},C=async ue=>{let de=(await m()).readreceipts==="all"?"read":"read-self";await P(ue,de)},R=async(ue,se,de)=>{let Oe=[];se||t.debug("not using cache for devices");let Te=[];ue=Array.from(new Set(ue));for(let je of ue){let Z=Xo(je)?.user;if(je=vi(je),se){let pe=S.get(Z);pe?(Oe.push(...pe),t.trace({user:Z},"using cache for devices")):Te.push(je)}else Te.push(je)}if(!Te.length)return Oe;let _e=new dO().withContext("message").withDeviceProtocol();for(let je of Te)_e.withUser(new fO().withId(je));let xe=await s.executeUSyncQuery(_e);if(xe){let je=Zgt(xe?.list,l.creds.me.id,de),Z={};for(let pe of je)Z[pe.user]=Z[pe.user]||[],Z[pe.user]?.push(pe),Oe.push(pe);for(let pe in Z)S.set(pe,Z[pe])}return Oe},N=async(ue,se)=>{let de=!1,Oe=[];if(se)Oe=ue;else{let Te=ue.map(xe=>h.jidToSignalProtocolAddress(xe)),_e=await l.keys.get("session",Te);for(let xe of ue){let je=h.jidToSignalProtocolAddress(xe);_e[je]||Oe.push(xe)}}if(Oe.length){t.debug({jidsRequiringFetch:Oe},"fetching sessions");let Te=await b({tag:"iq",attrs:{xmlns:"encrypt",type:"get",to:Jn},content:[{tag:"key",attrs:{},content:Oe.map(_e=>({tag:"user",attrs:{jid:_e}}))}]});await Qgt(Te,h),de=!0}return de},W=async ue=>{if(!l.creds.me?.id)throw new n6.Boom("Not authenticated");let se={protocolMessage:{peerDataOperationRequestMessage:ue,type:Je.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE}},de=vi(l.creds.me.id);return await K(de,se,{additionalAttributes:{category:"peer",push_priority:"high_force"}})},k=async(ue,se,de)=>{let Oe=await a(se,ue);Array.isArray(Oe)||(Oe=ue?ue.map(xe=>({recipientJid:xe,...Oe})):[Oe]);let Te=!1;return{nodes:await Promise.all(Oe.map(async xe=>{let{recipientJid:je,...Z}=xe;if(!je)return{};let pe=dde(Z),{type:he,ciphertext:V}=await h.encryptMessage({jid:je,data:pe});return he==="pkmsg"&&(Te=!0),{tag:"to",attrs:{jid:je},content:[{tag:"enc",attrs:{v:"2",type:he,...de||{}},content:V}]}})),shouldIncludeDeviceIdentity:Te}},K=async(ue,se,{messageId:de,participant:Oe,additionalAttributes:Te,additionalNodes:_e,useUserDevicesCache:xe,useCachedGroupMetadata:je,statusJidList:Z})=>{let pe=l.creds.me.id,he=!1,{user:V,server:re}=Xo(ue),ae="status@broadcast",F=re==="g.us",X=ue===ae,ie=re==="lid",J=re==="newsletter";de=de||ks(s.user?.id),xe=xe!==!1,je=je!==!1&&!X;let Y=[],le=X?ae:C0(V,ie?"lid":F?"g.us":"s.whatsapp.net"),ye=[],fe=[],ze={deviceSentMessage:{destinationJid:le,message:se},messageContextInfo:se.messageContextInfo},Ue={};if(Oe){!F&&!X&&(Te={...Te,device_fanout:"false"});let{user:Ge,device:De}=Xo(Oe.jid);fe.push({user:Ge,device:De})}return await l.keys.transaction(async()=>{let Ge=q(se);if(Ge&&(Ue.mediatype=Ge),J){let tt=a?await a(se,[]):se,Mt=zft(tt);ye.push({tag:"plaintext",attrs:{},content:Mt});let Pt={tag:"message",attrs:{to:ue,id:de,type:U(se),...Te||{}},content:ye};t.debug({msgId:de},`sending newsletter message to ${ue}`),await M(Pt);return}if(pp(se)?.pinInChatMessage&&(Ue["decrypt-fail"]="hide"),F||X){let[tt,Mt]=await Promise.all([(async()=>{let At=je&&i?await i(ue):void 0;return At&&Array.isArray(At?.participants)?t.trace({jid:ue,participants:At.participants.length},"using cached group metadata"):X||(At=await _(ue)),At})(),(async()=>!Oe&&!X?(await l.keys.get("sender-key-memory",[ue]))[ue]||{}:{})()]);if(!Oe){let At=tt&&!X?tt.participants.map(Mn=>Mn.id):[];X&&Z&&At.push(...Z),X||(Te={...Te,addressing_mode:tt?.addressingMode||"pn"});let en=await R(At,!!xe,!1);fe.push(...en)}let Pt=await a(se);if(Array.isArray(Pt))throw new n6.Boom("Per-jid patching is not supported in groups");let Zt=dde(Pt),{ciphertext:qe,senderKeyDistributionMessage:at}=await h.encryptGroupMessage({group:le,data:Zt,meId:pe}),kt=[];for(let{user:At,device:en}of fe){let Mn=C0(At,tt?.addressingMode==="lid"?"lid":"s.whatsapp.net",en);(!Mt[Mn]||Oe)&&(kt.push(Mn),Mt[Mn]=!0)}if(kt.length){t.debug({senderKeyJids:kt},"sending new sender key");let At={senderKeyDistributionMessage:{axolotlSenderKeyDistributionMessage:at,groupId:le}};await N(kt,!1);let en=await k(kt,At,Ue);he=he||en.shouldIncludeDeviceIdentity,Y.push(...en.nodes)}ye.push({tag:"enc",attrs:{v:"2",type:"skmsg"},content:qe}),await l.keys.set({"sender-key-memory":{[ue]:Mt}})}else{let{user:tt}=Xo(pe);if(!Oe&&(fe.push({user:V}),V!==tt&&fe.push({user:tt}),Te?.category!=="peer")){let en=await R([pe,ue],!!xe,!0);fe.push(...en)}let Mt=[],Pt=[],Zt=[];for(let{user:en,device:Mn}of fe){let Bn=en===tt,An=C0(Bn&&ie&&l.creds?.me?.lid.split(":")[0]||en,ie?"lid":"s.whatsapp.net",Mn);Bn?Pt.push(An):Zt.push(An),Mt.push(An)}await N(Mt,!1);let[{nodes:qe,shouldIncludeDeviceIdentity:at},{nodes:kt,shouldIncludeDeviceIdentity:At}]=await Promise.all([k(Pt,ze,Ue),k(Zt,se,Ue)]);Y.push(...qe),Y.push(...kt),he=he||at||At}if(Y.length)if(Te?.category==="peer"){let tt=Y[0]?.content?.[0];tt&&ye.push(tt)}else ye.push({tag:"participants",attrs:{},content:Y});let De={tag:"message",attrs:{id:de,type:U(se),...Te||{}},content:ye};Oe?zl(le)?(De.attrs.to=le,De.attrs.participant=Oe.jid):Pl(Oe.jid,pe)?(De.attrs.to=Oe.jid,De.attrs.recipient=le):De.attrs.to=Oe.jid:De.attrs.to=le,he&&(De.content.push({tag:"device-identity",attrs:{},content:NN(l.creds.account,!0)}),t.debug({jid:ue},"adding device identity")),_e&&_e.length>0&&De.content.push(..._e),t.debug({msgId:de},`sending message to ${Y.length} devices`),await M(De)}),de},U=ue=>ue.pollCreationMessage||ue.pollCreationMessageV2||ue.pollCreationMessageV3?"poll":"text",q=ue=>{if(ue.imageMessage)return"image";if(ue.videoMessage)return ue.videoMessage.gifPlayback?"gif":"video";if(ue.audioMessage)return ue.audioMessage.ptt?"ptt":"audio";if(ue.contactMessage)return"vcard";if(ue.documentMessage)return"document";if(ue.contactsArrayMessage)return"contact_array";if(ue.liveLocationMessage)return"livelocation";if(ue.stickerMessage)return"sticker";if(ue.listMessage)return"list";if(ue.listResponseMessage)return"list_response";if(ue.buttonsResponseMessage)return"buttons_response";if(ue.orderMessage)return"order";if(ue.productMessage)return"product";if(ue.interactiveResponseMessage)return"native_flow_response";if(ue.groupInviteMessage)return"url"},H=async ue=>{let se=np().toString();return await b({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"privacy"},content:[{tag:"tokens",attrs:{},content:ue.map(Oe=>({tag:"token",attrs:{jid:vi(Oe),t:se,type:"trusted_contact"}}))}]})},ee=Lgt(e,T),Ae=yde(c,"messages.media-update");return{...s,getPrivacyTokens:H,assertSessions:N,relayMessage:K,sendReceipt:w,sendReceipts:P,readMessages:C,refreshMediaConn:T,waUploadToServer:ee,fetchPrivacySettings:m,sendPeerDataOperationMessage:W,createParticipantNodes:k,getUSyncDevices:R,updateMediaMessage:async ue=>{let se=$gt(ue.message),de=se.mediaKey,Oe=l.creds.me.id,Te=await Bgt(ue.key,de,Oe),_e;if(await Promise.all([M(Te),Ae(async xe=>{let je=xe.find(Z=>Z.key.id===ue.key.id);if(je){if(je.error)_e=je.error;else try{let Z=await Wgt(je.media,de,je.key.id);if(Z.result!==Je.MediaRetryNotification.ResultType.SUCCESS){let pe=Je.MediaRetryNotification.ResultType[Z.result];throw new n6.Boom(`Media re-upload failed by device (${pe})`,{data:Z,statusCode:iye(Z.result)||404})}se.directPath=Z.directPath,se.url=zN(se.directPath),t.debug({directPath:Z.directPath,key:je.key},"media update successful")}catch(Z){_e=Z}return!0}})]),_e)throw _e;return c.emit("messages.update",[{key:ue.key,update:{message:ue.message}}]),ue},sendMessage:async(ue,se,de={})=>{let Oe=l.creds.me.id;if(typeof se=="object"&&"disappearingMessagesInChat"in se&&typeof se.disappearingMessagesInChat<"u"&&zl(ue)){let{disappearingMessagesInChat:Te}=se;await O(ue,typeof Te=="boolean"?Te?CN:0:Te)}else{let Te=await Hgt(ue,se,{logger:t,userJid:Oe,getUrlInfo:V=>X2t(V,{thumbnailWidth:r,fetchOpts:{timeout:3e3,...n||{}},logger:t,uploadImage:o?ee:void 0}),getProfilePicUrl:s.profilePictureUrl,upload:ee,mediaCache:e.mediaCache,options:e.options,messageId:ks(s.user?.id),...de}),_e="delete"in se&&!!se.delete,xe="edit"in se&&!!se.edit,je="pin"in se&&!!se.pin,Z="poll"in se&&!!se.poll,pe={},he=[];return _e?zl(se.delete?.remoteJid)&&!se.delete?.fromMe?pe.edit="8":pe.edit="7":xe?pe.edit="1":je?pe.edit="2":Z&&he.push({tag:"meta",attrs:{polltype:"creation"}}),"cachedGroupMetadata"in de&&console.warn("cachedGroupMetadata in sendMessage are deprecated, now cachedGroupMetadata is part of the socket config."),await K(ue,Te.message,{messageId:Te.key.id,useCachedGroupMetadata:de.useCachedGroupMetadata,additionalAttributes:pe,statusJidList:de.statusJidList,additionalNodes:he}),e.emitOwnEvents&&process.nextTick(()=>{p.mutex(()=>y(Te,"append"))}),Te}}}}});var i6,BH,tAt,nAt=me(()=>{BN();i6=ke(sc(),1),BH=require("crypto");Hn();ao();Wc();k0();jh();VK();Cr();Nbe();eAt();tAt=e=>{let{logger:t,retryRequestDelayMs:r,maxMsgRetryCount:o,getMessage:n,shouldIgnoreJid:a}=e,i=Z_t(e),{ev:s,authState:c,ws:l,processingMutex:p,signalRepository:h,query:y,upsertMessage:b,resyncAppState:m,onUnexpectedError:M,assertSessions:_,sendNode:O,relayMessage:S,sendReceipt:v,uploadPreKeys:T,sendPeerDataOperationMessage:w}=i,P=UN(),C=e.msgRetryCounterCache||new em({stdTTL:tm.MSG_RETRY,useClones:!1}),R=e.callOfferCache||new em({stdTTL:tm.CALL_OFFER,useClones:!1}),N=e.placeholderResendCache||new em({stdTTL:tm.MSG_RETRY,useClones:!1}),W=!1,k=async({tag:J,attrs:Y,content:le},ye)=>{let fe={tag:"ack",attrs:{id:Y.id,to:Y.from,class:J}};ye&&(fe.attrs.error=ye.toString()),Y.participant&&(fe.attrs.participant=Y.participant),Y.recipient&&(fe.attrs.recipient=Y.recipient),Y.type&&(J!=="message"||et({tag:J,attrs:Y,content:le},"unavailable")||ye!==0)&&(fe.attrs.type=Y.type),J==="message"&&et({tag:J,attrs:Y,content:le},"unavailable")&&(fe.attrs.from=c.creds.me.id),t.debug({recv:{tag:J,attrs:Y},sent:fe.attrs},"sent ack"),await O(fe)},K=async(J,Y)=>{let le={tag:"call",attrs:{from:c.creds.me.id,to:Y},content:[{tag:"reject",attrs:{"call-id":J,"call-creator":Y,count:"0"},content:void 0}]};await y(le)},U=async(J,Y=!1)=>{let{fullMessage:le}=J9(J,c.creds.me.id,c.creds.me.lid||""),{key:ye}=le,fe=ye.id,ze=`${fe}:${ye?.participant}`,Ue=C.get(ze)||0;if(Ue>=o){t.debug({retryCount:Ue,msgId:fe},"reached retry limit, clearing"),C.del(ze);return}Ue+=1,C.set(ze,Ue);let{account:Ge,signedPreKey:De,signedIdentityKey:tt}=c.creds;if(Ue===1){let Pt=await Z(ye);t.debug(`sendRetryRequest: requested placeholder resend for message ${Pt}`)}let Mt=NN(Ge,!0);await c.keys.transaction(async()=>{let Pt={tag:"receipt",attrs:{id:fe,type:"retry",to:J.attrs.from},content:[{tag:"retry",attrs:{count:Ue.toString(),id:J.attrs.id,t:J.attrs.t,v:"1"}},{tag:"registration",attrs:{},content:Wb(c.creds.registrationId)}]};if(J.attrs.recipient&&(Pt.attrs.recipient=J.attrs.recipient),J.attrs.participant&&(Pt.attrs.participant=J.attrs.participant),Ue>1||Y){let{update:Zt,preKeys:qe}=await lye(c,1),[at]=Object.keys(qe),kt=qe[+at];Pt.content.push({tag:"keys",attrs:{},content:[{tag:"type",attrs:{},content:Buffer.from(F2)},{tag:"identity",attrs:{},content:tt.public},cye(kt,+at),sye(De),{tag:"device-identity",attrs:{},content:Mt}]}),s.emit("creds.update",Zt)}await O(Pt),t.info({msgAttrs:J.attrs,retryCount:Ue},"sent retry receipt")})},q=async J=>{let Y=J.attrs.from;if(Y===Jn){let ye=+et(J,"count").attrs.value,fe=ye<IH;t.debug({count:ye,shouldUploadMorePreKeys:fe},"recv pre-key count"),fe&&await T()}else et(J,"identity")?t.info({jid:Y},"identity changed"):t.info({node:J},"unknown encrypt notification")},H=(J,Y,le)=>{let ye=et(Y,"participant")?.attrs?.jid||J;switch(Y?.tag){case"create":let fe=sI(Y);le.messageStubType=Ln.GROUP_CREATE,le.messageStubParameters=[fe.subject],le.key={participant:fe.owner},s.emit("chats.upsert",[{id:fe.id,name:fe.subject,conversationTimestamp:fe.creation}]),s.emit("groups.upsert",[{...fe,author:J}]);break;case"ephemeral":case"not_ephemeral":le.message={protocolMessage:{type:Je.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,ephemeralExpiration:+(Y.attrs.expiration||0)}};break;case"modify":let ze=Yn(Y,"participant").map(Zt=>Zt.attrs.jid);le.messageStubParameters=ze||[],le.messageStubType=Ln.GROUP_PARTICIPANT_CHANGE_NUMBER;break;case"promote":case"demote":case"remove":case"add":case"leave":let Ue=`GROUP_PARTICIPANT_${Y.tag.toUpperCase()}`;le.messageStubType=Ln[Ue];let Ge=Yn(Y,"participant").map(Zt=>Zt.attrs.jid);Ge.length===1&&Pl(Ge[0],J)&&Y.tag==="remove"&&(le.messageStubType=Ln.GROUP_PARTICIPANT_LEAVE),le.messageStubParameters=Ge;break;case"subject":le.messageStubType=Ln.GROUP_CHANGE_SUBJECT,le.messageStubParameters=[Y.attrs.subject];break;case"description":let De=et(Y,"body")?.content?.toString();le.messageStubType=Ln.GROUP_CHANGE_DESCRIPTION,le.messageStubParameters=De?[De]:void 0;break;case"announcement":case"not_announcement":le.messageStubType=Ln.GROUP_CHANGE_ANNOUNCE,le.messageStubParameters=[Y.tag==="announcement"?"on":"off"];break;case"locked":case"unlocked":le.messageStubType=Ln.GROUP_CHANGE_RESTRICT,le.messageStubParameters=[Y.tag==="locked"?"on":"off"];break;case"invite":le.messageStubType=Ln.GROUP_CHANGE_INVITE_LINK,le.messageStubParameters=[Y.attrs.code];break;case"member_add_mode":let tt=Y.content;tt&&(le.messageStubType=Ln.GROUP_MEMBER_ADD_MODE,le.messageStubParameters=[tt.toString()]);break;case"membership_approval_mode":let Mt=et(Y,"group_join");Mt&&(le.messageStubType=Ln.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE,le.messageStubParameters=[Mt.attrs.state]);break;case"created_membership_requests":le.messageStubType=Ln.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD,le.messageStubParameters=[ye,"created",Y.attrs.request_method];break;case"revoked_membership_requests":let Pt=Pl(ye,J);le.messageStubType=Ln.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD,le.messageStubParameters=[ye,Pt?"revoked":"rejected"];break}},ee=async J=>{let Y={},[le]=ov(J),ye=J.attrs.type,fe=vi(J.attrs.from);switch(ye){case"privacy_token":let ze=Yn(le,"token");for(let{attrs:Di,content:Oa}of ze){let Nt=Di.jid;s.emit("chats.update",[{id:Nt,tcToken:Oa}]),t.debug({jid:Nt},"got privacy token update")}break;case"newsletter":await X(J);break;case"mex":await ie(J);break;case"w:gp2":H(J.attrs.participant,le,Y);break;case"mediaretry":let Ue=Ugt(J);s.emit("messages.media-update",[Ue]);break;case"encrypt":await q(J);break;case"devices":let Ge=Yn(le,"device");if(Pl(le.attrs.jid,c.creds.me.id)){let Di=Ge.map(Oa=>Oa.attrs.jid);t.info({deviceJids:Di},"got my own devices")}break;case"server_sync":let De=et(J,"collection");if(De){let Di=De.attrs.name;await m([Di],!1)}break;case"picture":let tt=et(J,"set"),Mt=et(J,"delete");if(s.emit("contacts.update",[{id:vi(J?.attrs?.from)||(tt||Mt)?.attrs?.hash||"",imgUrl:tt?"changed":"removed"}]),zl(fe)){let Di=tt||Mt;Y.messageStubType=Ln.GROUP_CHANGE_ICON,tt&&(Y.messageStubParameters=[tt.attrs.id]),Y.participant=Di?.attrs.author,Y.key={...Y.key||{},participant:tt?.attrs.author}}break;case"account_sync":if(le.tag==="disappearing_mode"){let Di=+le.attrs.duration,Oa=+le.attrs.t;t.info({newDuration:Di},"updated account disappearing mode"),s.emit("creds.update",{accountSettings:{...c.creds.accountSettings,defaultDisappearingMode:{ephemeralExpiration:Di,ephemeralSettingTimestamp:Oa}}})}else if(le.tag==="blocklist"){let Di=Yn(le,"item");for(let{attrs:Oa}of Di){let Nt=[Oa.jid],qo=Oa.action==="block"?"add":"remove";s.emit("blocklist.update",{blocklist:Nt,type:qo})}}break;case"link_code_companion_reg":let Pt=et(J,"link_code_companion_reg"),Zt=ue(ep(Pt,"link_code_pairing_ref")),qe=ue(ep(Pt,"primary_identity_pub")),at=ue(ep(Pt,"link_code_pairing_wrapped_primary_ephemeral_pub")),kt=await Ae(at),At=Va.sharedKey(c.creds.pairingEphemeralKeyPair.private,kt),en=(0,BH.randomBytes)(32),Mn=(0,BH.randomBytes)(32),Bn=await L0(At,32,{salt:Mn,info:"link_code_pairing_key_bundle_encryption_key"}),An=Buffer.concat([Buffer.from(c.creds.signedIdentityKey.public),qe,en]),Fn=(0,BH.randomBytes)(12),Ya=cv(An,Bn,Fn,Buffer.alloc(0)),Lo=Buffer.concat([Mn,Fn,Ya]),ar=Va.sharedKey(c.creds.signedIdentityKey.private,qe),li=Buffer.concat([At,ar,en]);c.creds.advSecretKey=(await L0(li,32,{info:"adv_secret"})).toString("base64"),await y({tag:"iq",attrs:{to:Jn,type:"set",id:i.generateMessageTag(),xmlns:"md"},content:[{tag:"link_code_companion_reg",attrs:{jid:c.creds.me.id,stage:"companion_finish"},content:[{tag:"link_code_pairing_wrapped_key_bundle",attrs:{},content:Lo},{tag:"companion_identity_public",attrs:{},content:c.creds.signedIdentityKey.public},{tag:"link_code_pairing_ref",attrs:{},content:Zt}]}]}),c.creds.registered=!0,s.emit("creds.update",c.creds)}if(Object.keys(Y).length)return Y};async function Ae(J){let Y=ue(J),le=Y.slice(0,32),ye=await Q9(c.creds.pairingCode,le),fe=Y.slice(32,48),ze=Y.slice(48,80);return qft(ze,ye,fe)}function ue(J){if(J===void 0)throw new i6.Boom("Invalid buffer",{statusCode:400});return J instanceof Buffer?J:Buffer.from(J)}let se=(J,Y)=>{let le=`${J}:${Y}`;return(C.get(le)||0)<o},de=(J,Y)=>{let le=`${J}:${Y}`,ye=(C.get(le)||0)+1;C.set(le,ye)},Oe=async(J,Y,le)=>{let ye=await Promise.all(Y.map(Ge=>n({...J,id:Ge}))),fe=J.remoteJid,ze=J.participant||fe,Ue=!Xo(ze)?.device;await _([ze],!0),zl(fe)&&await c.keys.set({"sender-key-memory":{[fe]:null}}),t.debug({participant:ze,sendToAll:Ue},"forced new session for retry recp");for(let[Ge,De]of ye.entries())if(De){de(Y[Ge],ze);let tt={messageId:Y[Ge]};Ue?tt.useUserDevicesCache=!1:tt.participant={jid:ze,count:+le.attrs.count},await S(J.remoteJid,De,tt)}else t.debug({jid:J.remoteJid,id:Y[Ge]},"recv retry request, but message not available")},Te=async J=>{let{attrs:Y,content:le}=J,ye=Y.from.includes("lid"),fe=Pl(Y.participant||Y.from,ye?c.creds.me?.lid:c.creds.me?.id),ze=!fe||zl(Y.from)?Y.from:Y.recipient,Ue=!Y.recipient||(Y.type==="retry"||Y.type==="sender")&&fe,Ge={remoteJid:ze,id:"",fromMe:Ue,participant:Y.participant};if(a(ze)&&ze!=="@s.whatsapp.net"){t.debug({remoteJid:ze},"ignoring receipt from jid"),await k(J);return}let De=[Y.id];if(Array.isArray(le)){let tt=Yn(le[0],"item");De.push(...tt.map(Mt=>Mt.attrs.id))}try{await Promise.all([p.mutex(async()=>{let tt=Tft(Y.type);if(typeof tt<"u"&&(tt>=Je.WebMessageInfo.Status.SERVER_ACK||!fe))if(zl(ze)||U2(ze)){if(Y.participant){let Mt=tt===Je.WebMessageInfo.Status.DELIVERY_ACK?"receiptTimestamp":"readTimestamp";s.emit("message-receipt.update",De.map(Pt=>({key:{...Ge,id:Pt},receipt:{userJid:vi(Y.participant),[Mt]:+Y.t}})))}}else s.emit("messages.update",De.map(Mt=>({key:{...Ge,id:Mt},update:{status:tt}})));if(Y.type==="retry"){Ge.participant=Ge.participant||Y.from;let Mt=et(J,"retry");if(se(De[0],Ge.participant))if(Ge.fromMe)try{t.debug({attrs:Y,key:Ge},"recv retry request"),await Oe(Ge,De,Mt)}catch(Pt){t.error({key:Ge,ids:De,trace:Pt.stack},"error in sending message again")}else t.info({attrs:Y,key:Ge},"recv retry for not fromMe message");else t.info({attrs:Y,key:Ge},"will not send message again, as sent too many times")}})])}finally{await k(J)}},_e=async J=>{let Y=J.attrs.from;if(a(Y)&&Y!=="@s.whatsapp.net"){t.debug({remoteJid:Y,id:J.attrs.id},"ignored notification"),await k(J);return}try{await Promise.all([p.mutex(async()=>{let le=await ee(J);if(le){let ye=Pl(J.attrs.participant||Y,c.creds.me.id);le.key={remoteJid:Y,fromMe:ye,participant:J.attrs.participant,id:J.attrs.id,...le.key||{}},le.participant??(le.participant=J.attrs.participant),le.messageTimestamp=+J.attrs.t;let fe=Je.WebMessageInfo.fromObject(le);await b(fe,"append")}})])}finally{await k(J)}},xe=async J=>{if(a(J.attrs.from)&&J.attrs.from!=="@s.whatsapp.net"){t.debug({key:J.attrs.key},"ignored message"),await k(J);return}let Y=et(J,"enc");if(Y&&Y.attrs.type==="msmsg"){t.debug({key:J.attrs.key},"ignored msmsg"),await k(J);return}let le;if(et(J,"unavailable")&&!Y){await k(J);let{key:Ge}=J9(J,c.creds.me.id,c.creds.me.lid||"").fullMessage;if(le=await Z(Ge),le==="RESOLVED")return;t.debug("received unavailable message, acked and requested resend from phone")}else N.get(J.attrs.id)&&N.del(J.attrs.id);let{fullMessage:ye,category:fe,author:ze,decrypt:Ue}=kft(J,c.creds.me.id,c.creds.me.lid||"",h,t);le&&ye?.messageStubParameters?.[0]===$9&&(ye.messageStubParameters=[$9,le]),ye.message?.protocolMessage?.type===Je.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER&&J.attrs.sender_pn&&s.emit("chats.phoneNumberShare",{lid:J.attrs.from,jid:J.attrs.sender_pn});try{await Promise.all([p.mutex(async()=>{if(await Ue(),ye.messageStubType===Je.WebMessageInfo.StubType.CIPHERTEXT){if(ye?.messageStubParameters?.[0]===Rft)return k(J,xft.ParsingError);P.mutex(async()=>{if(l.isOpen){if(et(J,"unavailable"))return;let Ge=et(J,"enc");await U(J,!Ge),r&&await sv(r)}else t.debug({node:J},"connection closed, ignoring retry req")})}else{let Ge,De=ye.key.participant;if(fe==="peer"?Ge="peer_msg":ye.key.fromMe?(Ge="sender",N0(ye.key.remoteJid)&&(De=ze)):W||(Ge="inactive"),await v(ye.key.remoteJid,De,[ye.key.id],Ge),FK(ye.message)){let Mt=vi(ye.key.remoteJid);await v(Mt,void 0,[ye.key.id],"hist_sync")}}Y2t(ye,c.creds.me.id),await b(ye,J.attrs.offline?"append":"notify")})])}catch(Ge){t.error({error:Ge,node:J},"error in handling message")}},je=async(J,Y,le)=>{if(!c.creds.me?.id)throw new i6.Boom("Not authenticated");let ye={historySyncOnDemandRequest:{chatJid:Y.remoteJid,oldestMsgFromMe:Y.fromMe,oldestMsgId:Y.id,oldestMsgTimestampMs:le,onDemandMsgCount:J},peerDataOperationRequestType:Je.Message.PeerDataOperationRequestType.HISTORY_SYNC_ON_DEMAND};return w(ye)},Z=async J=>{if(!c.creds.me?.id)throw new i6.Boom("Not authenticated");if(N.get(J?.id)){t.debug({messageKey:J},"already requested resend");return}else N.set(J?.id,!0);if(await sv(5e3),!N.get(J?.id))return t.debug({messageKey:J},"message received while resend requested"),"RESOLVED";let Y={placeholderMessageResendRequest:[{messageKey:J}],peerDataOperationRequestType:Je.Message.PeerDataOperationRequestType.PLACEHOLDER_MESSAGE_RESEND};return setTimeout(()=>{N.get(J?.id)&&(t.debug({messageKey:J},"PDO message without response after 15 seconds. Phone possibly offline"),N.del(J?.id))},15e3),w(Y)},pe=async J=>{let Y,{attrs:le}=J,[ye]=ov(J);if(!ye)throw new i6.Boom("Missing call info in call node");let fe=ye.attrs["call-id"],ze=ye.attrs.from||ye.attrs["call-creator"];if(Y=Ift(ye),iv(ze)&&ye.tag==="relaylatency"&&!R.get(fe)){Y="offer";let tt={chatId:le.from,from:ze,id:fe,date:new Date(+le.t*1e3),offline:!!le.offline,status:Y};R.set(fe,tt)}let Ue={chatId:le.from,from:ze,id:fe,date:new Date(+le.t*1e3),offline:!!le.offline,status:Y};Y==="offer"&&(Ue.isVideo=!!et(ye,"video"),Ue.isGroup=ye.attrs.type==="group"||!!ye.attrs["group-jid"],Ue.groupJid=ye.attrs["group-jid"],R.set(Ue.id,Ue));let Ge=R.get(Ue.id);Ge&&(Ue.isVideo=Ge.isVideo,Ue.isGroup=Ge.isGroup),(Y==="reject"||Y==="accept"||Y==="timeout"||Y==="terminate")&&R.del(Ue.id),s.emit("call",[Ue]),await k(J)},he=async({attrs:J})=>{let Y={remoteJid:J.from,fromMe:!0,id:J.id};J.error&&(t.warn({attrs:J},"received error in ack"),s.emit("messages.update",[{key:Y,update:{status:nv.ERROR,messageStubParameters:[J.error]}}]))},V=async(J,Y,le)=>{s.buffer(),await ye(),s.flush();function ye(){return le(J,!1).catch(fe=>M(fe,Y))}},ae=(()=>{let J=new Map([["message",xe],["call",pe],["receipt",Te],["notification",_e]]),Y=[],le=!1;return{enqueue:(fe,ze)=>{if(Y.push({type:fe,node:ze}),le)return;le=!0,(async()=>{for(;Y.length&&l.isOpen;){let{type:Ge,node:De}=Y.shift(),tt=J.get(Ge);if(!tt){M(new Error(`unknown offline node type: ${Ge}`),"processing offline node");continue}await tt(De)}le=!1})().catch(Ge=>M(Ge,"processing offline nodes"))}}})(),F=(J,Y,le,ye)=>{!!Y.attrs.offline?ae.enqueue(J,Y):V(Y,le,ye)};async function X(J){let Y=J.attrs.from,le=ov(J)[0],ye=J.attrs.participant;switch(t.info({from:Y,child:le},"got newsletter notification"),le.tag){case"reaction":let fe={id:Y,server_id:le.attrs.message_id,reaction:{code:ri(le,"reaction"),count:1}};s.emit("newsletter.reaction",fe);break;case"view":let ze={id:Y,server_id:le.attrs.message_id,count:parseInt(le.content?.toString()||"0",10)};s.emit("newsletter.view",ze);break;case"participant":let Ue={id:Y,author:ye,user:le.attrs.jid,action:le.attrs.action,new_role:le.attrs.role};s.emit("newsletter-participants.update",Ue);break;case"update":let Ge=et(le,"settings");if(Ge){let tt={},Mt=et(Ge,"name");Mt?.content&&(tt.name=Mt.content.toString());let Pt=et(Ge,"description");Pt?.content&&(tt.description=Pt.content.toString()),s.emit("newsletter-settings.update",{id:Y,update:tt})}break;case"message":let De=et(le,"plaintext");if(De?.content)try{let tt=typeof De.content=="string"?Buffer.from(De.content,"binary"):Buffer.from(De.content),Mt=Je.Message.decode(tt),Pt=Je.WebMessageInfo.fromObject({key:{remoteJid:Y,id:le.attrs.message_id||le.attrs.server_id,fromMe:!1},message:Mt,messageTimestamp:+le.attrs.t});await b(Pt,"append"),t.info("Processed plaintext newsletter message")}catch(tt){t.error({error:tt},"Failed to decode plaintext newsletter message")}break;default:t.warn({node:J},"Unknown newsletter notification");break}}async function ie(J){let Y=et(J,"mex");if(!Y?.content){t.warn({node:J},"Invalid mex newsletter notification");return}let le;try{le=JSON.parse(Y.content.toString())}catch(ze){t.error({err:ze,node:J},"Failed to parse mex newsletter notification");return}let ye=le?.operation,fe=le?.updates;if(!fe||!ye){t.warn({data:le},"Invalid mex newsletter notification content");return}switch(t.info({operation:ye,updates:fe},"got mex newsletter notification"),ye){case"NotificationNewsletterUpdate":for(let ze of fe)ze.jid&&ze.settings&&Object.keys(ze.settings).length>0&&s.emit("newsletter-settings.update",{id:ze.jid,update:ze.settings});break;case"NotificationNewsletterAdminPromote":for(let ze of fe)ze.jid&&ze.user&&s.emit("newsletter-participants.update",{id:ze.jid,author:J.attrs.from,user:ze.user,new_role:"ADMIN",action:"promote"});break;default:t.info({operation:ye,data:le},"Unhandled mex newsletter notification");break}}return l.on("CB:message",J=>{F("message",J,"processing message",xe)}),l.on("CB:call",async J=>{F("call",J,"handling call",pe)}),l.on("CB:receipt",J=>{F("receipt",J,"handling receipt",Te)}),l.on("CB:notification",async J=>{F("notification",J,"handling notification",_e)}),l.on("CB:ack,class:message",J=>{he(J).catch(Y=>M(Y,"handling bad ack"))}),s.on("call",([J])=>{if(J&&(J.status==="timeout"||J.status==="offer"&&J.isGroup)){let Y={key:{remoteJid:J.chatId,id:J.id,fromMe:!1},messageTimestamp:np(J.date)};J.status==="timeout"?J.isGroup?Y.messageStubType=J.isVideo?Ln.CALL_MISSED_GROUP_VIDEO:Ln.CALL_MISSED_GROUP_VOICE:Y.messageStubType=J.isVideo?Ln.CALL_MISSED_VIDEO:Ln.CALL_MISSED_VOICE:Y.message={call:{callKey:Buffer.from(J.id)}};let le=Je.WebMessageInfo.fromObject(Y);b(le,J.offline?"append":"notify")}}),s.on("connection.update",({isOnline:J})=>{typeof J<"u"&&(W=J,t.trace(`sendActiveReceipts set to "${W}"`))}),{...i,sendMessageAck:k,sendRetryRequest:U,rejectCall:K,fetchMessageHistory:je,requestPlaceholderResend:Z}}});var iAt,rAt=me(()=>{w_t();Cr();pde();nAt();iAt=e=>{let t=tAt(e),{authState:r,query:o,waUploadToServer:n}=t,a=async({jid:h,limit:y,cursor:b})=>{h=h||r.creds.me?.id,h=vi(h);let m=[{tag:"limit",attrs:{},content:Buffer.from((y||10).toString())},{tag:"width",attrs:{},content:Buffer.from("100")},{tag:"height",attrs:{},content:Buffer.from("100")}];b&&m.push({tag:"after",attrs:{},content:b});let M=await o({tag:"iq",attrs:{to:Jn,type:"get",xmlns:"w:biz:catalog"},content:[{tag:"product_catalog",attrs:{jid:h,allow_shop_source:"true"},content:m}]});return T_t(M)},i=async(h,y=51)=>{h=h||r.creds.me?.id,h=vi(h);let b=await o({tag:"iq",attrs:{to:Jn,type:"get",xmlns:"w:biz:catalog",smax_id:"35"},content:[{tag:"collections",attrs:{biz_jid:h},content:[{tag:"collection_limit",attrs:{},content:Buffer.from(y.toString())},{tag:"item_limit",attrs:{},content:Buffer.from(y.toString())},{tag:"width",attrs:{},content:Buffer.from("100")},{tag:"height",attrs:{},content:Buffer.from("100")}]}]});return v_t(b)},s=async(h,y)=>{let b=await o({tag:"iq",attrs:{to:Jn,type:"get",xmlns:"fb:thrift_iq",smax_id:"5"},content:[{tag:"order",attrs:{op:"get",id:h},content:[{tag:"image_dimensions",attrs:{},content:[{tag:"width",attrs:{},content:Buffer.from("100")},{tag:"height",attrs:{},content:Buffer.from("100")}]},{tag:"token",attrs:{},content:Buffer.from(y)}]}]});return I_t(b)},c=async(h,y)=>{y=await Rbe(y,n);let b=zbe(h,y),m=await o({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:biz:catalog"},content:[{tag:"product_catalog_edit",attrs:{v:"1"},content:[b,{tag:"width",attrs:{},content:"100"},{tag:"height",attrs:{},content:"100"}]}]}),M=et(m,"product_catalog_edit"),_=et(M,"product");return ZN(_)},l=async h=>{h.isHidden=!!h.isHidden,h=await Rbe(h,n);let y=zbe(void 0,h),b=await o({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:biz:catalog"},content:[{tag:"product_catalog_add",attrs:{v:"1"},content:[y,{tag:"width",attrs:{},content:"100"},{tag:"height",attrs:{},content:"100"}]}]}),m=et(b,"product_catalog_add"),M=et(m,"product");return ZN(M)},p=async h=>{let y=await o({tag:"iq",attrs:{to:Jn,type:"set",xmlns:"w:biz:catalog"},content:[{tag:"product_catalog_delete",attrs:{v:"1"},content:h.map(m=>({tag:"product",attrs:{},content:[{tag:"id",attrs:{},content:Buffer.from(m)}]}))}]});return{deleted:+(et(y,"product_catalog_delete")?.attrs.deleted_count||0)}};return{...t,logger:e.logger,getOrderDetails:s,getCatalog:a,getCollections:i,productCreate:l,productDelete:p,productUpdate:c}}});var oAt,Lbe,aAt=me(()=>{ao();k0();jh();Pbe();Cr();rAt();oAt=e=>{let t=iAt(e),{authState:r,ev:o,query:n,upsertMessage:a}=t,i=async(h,y,b)=>n({tag:"iq",attrs:{type:y,xmlns:"w:g2",to:h},content:b}),s=async h=>{let y=await i(h,"get",[{tag:"query",attrs:{request:"interactive"}}]);return Lbe(y)},c=async()=>{let h=await n({tag:"iq",attrs:{to:"@g.us",xmlns:"w:g2",type:"get"},content:[{tag:"participating",attrs:{},content:[{tag:"participants",attrs:{}},{tag:"description",attrs:{}}]}]}),y={},b=et(h,"communities");if(b){let m=Yn(b,"community");for(let M of m){let _=Lbe({tag:"result",attrs:{},content:[M]});y[_.id]=_}}return t.ev.emit("groups.update",Object.values(y)),y};async function l(h){QN.info({node:h},"parseGroupResult");let y=et(h,"group");if(y)try{QN.info({groupNode:y},"groupNode");let b=await t.groupMetadata(`${y.attrs.id}@g.us`);return b||p.empty()}catch(b){return console.error("Error parsing group metadata:",b),p.empty()}return p.empty()}let p={empty:()=>null,of:h=>h!==null?{value:h}:null};return t.ws.on("CB:ib,,dirty",async h=>{let{attrs:y}=et(h,"dirty");y.type==="communities"&&(await c(),await t.cleanDirtyBits("groups"))}),{...t,communityMetadata:s,communityCreate:async(h,y)=>{let b=hde().substring(0,12),m=await i("@g.us","set",[{tag:"create",attrs:{subject:h},content:[{tag:"description",attrs:{id:b},content:[{tag:"body",attrs:{},content:Buffer.from(y||"","utf-8")}]},{tag:"parent",attrs:{default_membership_approval_mode:"request_required"}},{tag:"allow_non_admin_sub_group_creation",attrs:{}},{tag:"create_general_chat",attrs:{}}]}]);return await l(m)},communityLeave:async h=>{await i("@g.us","set",[{tag:"leave",attrs:{},content:[{tag:"community",attrs:{id:h}}]}])},communityUpdateSubject:async(h,y)=>{await i(h,"set",[{tag:"subject",attrs:{},content:Buffer.from(y,"utf-8")}])},communityRequestParticipantsList:async h=>{let y=await i(h,"get",[{tag:"membership_approval_requests",attrs:{}}]),b=et(y,"membership_approval_requests");return Yn(b,"membership_approval_request").map(M=>M.attrs)},communityRequestParticipantsUpdate:async(h,y,b)=>{let m=await i(h,"set",[{tag:"membership_requests_action",attrs:{},content:[{tag:b,attrs:{},content:y.map(S=>({tag:"participant",attrs:{jid:S}}))}]}]),M=et(m,"membership_requests_action"),_=et(M,b);return Yn(_,"participant").map(S=>({status:S.attrs.error||"200",jid:S.attrs.jid}))},communityParticipantsUpdate:async(h,y,b)=>{let m=await i(h,"set",[{tag:b,attrs:{},content:y.map(O=>({tag:"participant",attrs:{jid:O}}))}]),M=et(m,b);return Yn(M,"participant").map(O=>({status:O.attrs.error||"200",jid:O.attrs.jid,content:O}))},communityUpdateDescription:async(h,y)=>{let m=(await s(h)).descId??null;await i(h,"set",[{tag:"description",attrs:{...y?{id:hde()}:{delete:"true"},...m?{prev:m}:{}},content:y?[{tag:"body",attrs:{},content:Buffer.from(y,"utf-8")}]:void 0}])},communityInviteCode:async h=>{let y=await i(h,"get",[{tag:"invite",attrs:{}}]);return et(y,"invite")?.attrs.code},communityRevokeInvite:async h=>{let y=await i(h,"set",[{tag:"invite",attrs:{}}]);return et(y,"invite")?.attrs.code},communityAcceptInvite:async h=>{let y=await i("@g.us","set",[{tag:"invite",attrs:{code:h}}]);return et(y,"community")?.attrs.jid},communityRevokeInviteV4:async(h,y)=>!!await i(h,"set",[{tag:"revoke",attrs:{},content:[{tag:"participant",attrs:{jid:y}}]}]),communityAcceptInviteV4:o.createBufferedFunction(async(h,y)=>{h=typeof h=="string"?{remoteJid:h}:h;let b=await i(y.groupJid,"set",[{tag:"accept",attrs:{code:y.inviteCode,expiration:y.inviteExpiration.toString(),admin:h.remoteJid}}]);return h.id&&(y=Je.Message.GroupInviteMessage.fromObject(y),y.inviteExpiration=0,y.inviteCode="",o.emit("messages.update",[{key:h,update:{message:{groupInviteMessage:y}}}])),await a({key:{remoteJid:y.groupJid,id:ks(t.user?.id),fromMe:!1,participant:h.remoteJid},messageStubType:Ln.GROUP_PARTICIPANT_ADD,messageStubParameters:[r.creds.me.id],participant:h.remoteJid,messageTimestamp:np()},"notify"),b.attrs.from}),communityGetInviteInfo:async h=>{let y=await i("@g.us","get",[{tag:"invite",attrs:{code:h}}]);return Lbe(y)},communityToggleEphemeral:async(h,y)=>{let b=y?{tag:"ephemeral",attrs:{expiration:y.toString()}}:{tag:"not_ephemeral",attrs:{}};await i(h,"set",[b])},communitySettingUpdate:async(h,y)=>{await i(h,"set",[{tag:y,attrs:{}}])},communityMemberAddMode:async(h,y)=>{await i(h,"set",[{tag:"member_add_mode",attrs:{},content:y}])},communityJoinApprovalMode:async(h,y)=>{await i(h,"set",[{tag:"membership_approval_mode",attrs:{},content:[{tag:"community_join",attrs:{state:y}}]}])},communityFetchAllParticipating:c}},Lbe=e=>{let t=et(e,"community"),r=et(t,"description"),o,n;r&&(o=ri(r,"body"),n=r.attrs.id);let a=t.attrs.id?.includes("@")?t.attrs.id:C0(t.attrs.id||"","g.us"),i=et(t,"ephemeral")?.attrs.expiration,s=ri(t,"member_add_mode")==="all_member_add";return{id:a,subject:t.attrs.subject||"",subjectOwner:t.attrs.s_o,subjectTime:Number(t.attrs.s_t||0),size:Yn(t,"participant").length,creation:Number(t.attrs.creation||0),owner:t.attrs.creator?vi(t.attrs.creator):void 0,desc:o,descId:n,linkedParent:et(t,"linked_parent")?.attrs.jid||void 0,restrict:!!et(t,"locked"),announce:!!et(t,"announcement"),isCommunity:!!et(t,"parent"),isCommunityAnnounce:!!et(t,"default_sub_community"),joinApprovalMode:!!et(t,"membership_approval_mode"),memberAddMode:s,participants:Yn(t,"participant").map(({attrs:l})=>({id:l.jid,admin:l.type||null})),ephemeralDuration:i?+i:void 0,addressingMode:ri(t,"addressing_mode")}}});var LFn,sAt,cAt=me(()=>{Wc();aAt();LFn=e=>{let t={...O_t,...e};return e.shouldSyncHistoryMessage===void 0&&(t.shouldSyncHistoryMessage=()=>!!t.syncFullHistory),oAt(t)},sAt=LFn});var qbe=me(()=>{});var Bbe=me(()=>{});var lAt=me(()=>{Bbe();qbe()});var uAt=me(()=>{qbe();lAt();Bbe()});var pAt,fAt=me(()=>{cAt();ao();jh();k0();Wc();Cr();uAt();t6();pAt=sAt});var Ube=L((mvr,dAt)=>{"use strict";function qFn(e,t){return t}dAt.exports=function(){let t=Error.prepareStackTrace;Error.prepareStackTrace=qFn;let r=new Error().stack;if(Error.prepareStackTrace=t,!Array.isArray(r))return;let o=r.slice(2),n=[];for(let a of o)a&&n.push(a.getFileName());return n}});var cI=L((gvr,hAt)=>{"use strict";var BFn=Symbol("pino.setLevel"),UFn=Symbol("pino.getLevel"),WFn=Symbol("pino.levelVal"),FFn=Symbol("pino.levelComp"),jFn=Symbol("pino.useLevelLabels"),GFn=Symbol("pino.useOnlyCustomLevels"),KFn=Symbol("pino.mixin"),HFn=Symbol("pino.lsCache"),VFn=Symbol("pino.chindings"),$Fn=Symbol("pino.asJson"),JFn=Symbol("pino.write"),XFn=Symbol("pino.redactFmt"),YFn=Symbol("pino.time"),QFn=Symbol("pino.timeSliceIndex"),ZFn=Symbol("pino.stream"),e7n=Symbol("pino.stringify"),t7n=Symbol("pino.stringifySafe"),n7n=Symbol("pino.stringifiers"),i7n=Symbol("pino.end"),r7n=Symbol("pino.formatOpts"),o7n=Symbol("pino.messageKey"),a7n=Symbol("pino.errorKey"),s7n=Symbol("pino.nestedKey"),c7n=Symbol("pino.nestedKeyStr"),l7n=Symbol("pino.mixinMergeStrategy"),u7n=Symbol("pino.msgPrefix"),p7n=Symbol("pino.wildcardFirst"),f7n=Symbol.for("pino.serializers"),d7n=Symbol.for("pino.formatters"),h7n=Symbol.for("pino.hooks"),y7n=Symbol.for("pino.metadata");hAt.exports={setLevelSym:BFn,getLevelSym:UFn,levelValSym:WFn,levelCompSym:FFn,useLevelLabelsSym:jFn,mixinSym:KFn,lsCacheSym:HFn,chindingsSym:VFn,asJsonSym:$Fn,writeSym:JFn,serializersSym:f7n,redactFmtSym:XFn,timeSym:YFn,timeSliceIndexSym:QFn,streamSym:ZFn,stringifySym:e7n,stringifySafeSym:t7n,stringifiersSym:n7n,endSym:i7n,formatOptsSym:r7n,messageKeySym:o7n,errorKeySym:a7n,nestedKeySym:s7n,wildcardFirstSym:p7n,needsMetadataGsym:y7n,useOnlyCustomLevelsSym:GFn,formattersSym:d7n,hooksSym:h7n,nestedKeyStrSym:c7n,mixinMergeStrategySym:l7n,msgPrefixSym:u7n}});var Fbe=L((Ovr,gAt)=>{"use strict";var yAt=$ye(),{redactFmtSym:b7n,wildcardFirstSym:UH}=cI(),Wbe=/[^.[\]]+|\[([^[\]]*?)\]/g,bAt="[Redacted]",mAt=!1;function m7n(e,t){let{paths:r,censor:o,remove:n}=g7n(e),a=r.reduce((c,l)=>{Wbe.lastIndex=0;let p=Wbe.exec(l),h=Wbe.exec(l),y=p[1]!==void 0?p[1].replace(/^(?:"|'|`)(.*)(?:"|'|`)$/,"$1"):p[0];if(y==="*"&&(y=UH),h===null)return c[y]=null,c;if(c[y]===null)return c;let{index:b}=h,m=`${l.substr(b,l.length-1)}`;return c[y]=c[y]||[],y!==UH&&c[y].length===0&&c[y].push(...c[UH]||[]),y===UH&&Object.keys(c).forEach(function(M){c[M]&&c[M].push(m)}),c[y].push(m),c},{}),i={[b7n]:yAt({paths:r,censor:o,serialize:t,strict:mAt,remove:n})},s=(...c)=>t(typeof o=="function"?o(...c):o);return[...Object.keys(a),...Object.getOwnPropertySymbols(a)].reduce((c,l)=>{if(a[l]===null)c[l]=p=>s(p,[l]);else{let p=typeof o=="function"?(h,y)=>o(h,[l,...y]):o;c[l]=yAt({paths:a[l],censor:p,serialize:t,strict:mAt,remove:n})}return c},i)}function g7n(e){if(Array.isArray(e))return e={paths:e,censor:bAt},e;let{paths:t,censor:r=bAt,remove:o}=e;if(Array.isArray(t)===!1)throw Error("pino \u2013 redact must contain an array of strings");return o===!0&&(r=void 0),{paths:t,censor:r,remove:o}}gAt.exports=m7n});var _At=L((Mvr,MAt)=>{"use strict";var O7n=()=>"",M7n=()=>`,"time":${Date.now()}`,_7n=()=>`,"time":${Math.round(Date.now()/1e3)}`,A7n=()=>`,"time":"${new Date(Date.now()).toISOString()}"`,S7n=1000000n,OAt=1000000000n,E7n=BigInt(Date.now())*S7n,T7n=process.hrtime.bigint(),v7n=()=>{let e=process.hrtime.bigint()-T7n,t=E7n+e,r=t/OAt,o=t%OAt,n=Number(r*1000n+o/1000000n),a=new Date(n),i=a.getUTCFullYear(),s=(a.getUTCMonth()+1).toString().padStart(2,"0"),c=a.getUTCDate().toString().padStart(2,"0"),l=a.getUTCHours().toString().padStart(2,"0"),p=a.getUTCMinutes().toString().padStart(2,"0"),h=a.getUTCSeconds().toString().padStart(2,"0");return`,"time":"${i}-${s}-${c}T${l}:${p}:${h}.${o.toString().padStart(9,"0")}Z"`};MAt.exports={nullTime:O7n,epochTime:M7n,unixTime:_7n,isoTime:A7n,isoTimeNano:v7n}});var AAt=L((_vr,I7n)=>{I7n.exports={name:"thread-stream",version:"3.1.0",description:"A streaming way to send data to a Node.js Worker Thread",main:"index.js",types:"index.d.ts",dependencies:{"real-require":"^0.2.0"},devDependencies:{"@types/node":"^20.1.0","@types/tap":"^15.0.0","@yao-pkg/pkg":"^5.11.5",desm:"^1.3.0",fastbench:"^1.0.1",husky:"^9.0.6","pino-elasticsearch":"^8.0.0","sonic-boom":"^4.0.1",standard:"^17.0.0",tap:"^16.2.0","ts-node":"^10.8.0",typescript:"^5.3.2","why-is-node-running":"^2.2.2"},scripts:{build:"tsc --noEmit",test:'standard && npm run build && npm run transpile && tap "test/**/*.test.*js" && tap --ts test/*.test.*ts',"test:ci":"standard && npm run transpile && npm run test:ci:js && npm run test:ci:ts","test:ci:js":'tap --no-check-coverage --timeout=120 --coverage-report=lcovonly "test/**/*.test.*js"',"test:ci:ts":'tap --ts --no-check-coverage --coverage-report=lcovonly "test/**/*.test.*ts"',"test:yarn":'npm run transpile && tap "test/**/*.test.js" --no-check-coverage',transpile:"sh ./test/ts/transpile.sh",prepare:"husky install"},standard:{ignore:["test/ts/**/*","test/syntax-error.mjs"]},repository:{type:"git",url:"git+https://github.com/mcollina/thread-stream.git"},keywords:["worker","thread","threads","stream"],author:"Matteo Collina <hello@matteocollina.com>",license:"MIT",bugs:{url:"https://github.com/mcollina/thread-stream/issues"},homepage:"https://github.com/mcollina/thread-stream#readme"}});var EAt=L((Avr,SAt)=>{"use strict";function w7n(e,t,r,o,n){let a=Date.now()+o,i=Atomics.load(e,t);if(i===r){n(null,"ok");return}let s=i,c=l=>{Date.now()>a?n(null,"timed-out"):setTimeout(()=>{s=i,i=Atomics.load(e,t),i===s?c(l>=1e3?1e3:l*2):i===r?n(null,"ok"):n(null,"not-equal")},l)};c(1)}function P7n(e,t,r,o,n){let a=Date.now()+o,i=Atomics.load(e,t);if(i!==r){n(null,"ok");return}let s=c=>{Date.now()>a?n(null,"timed-out"):setTimeout(()=>{i=Atomics.load(e,t),i!==r?n(null,"ok"):s(c>=1e3?1e3:c*2)},c)};s(1)}SAt.exports={wait:w7n,waitDiff:P7n}});var vAt=L((Svr,TAt)=>{"use strict";TAt.exports={WRITE_INDEX:4,READ_INDEX:8}});var RAt=L((Evr,zAt)=>{"use strict";var{version:z7n}=AAt(),{EventEmitter:R7n}=require("events"),{Worker:x7n}=require("worker_threads"),{join:k7n}=require("path"),{pathToFileURL:C7n}=require("url"),{wait:N7n}=EAt(),{WRITE_INDEX:Bu,READ_INDEX:Vh}=vAt(),D7n=require("buffer"),L7n=require("assert"),bt=Symbol("kImpl"),q7n=D7n.constants.MAX_STRING_LENGTH,r6=class{constructor(t){this._value=t}deref(){return this._value}},FH=class{register(){}unregister(){}},B7n=process.env.NODE_V8_COVERAGE?FH:global.FinalizationRegistry||FH,U7n=process.env.NODE_V8_COVERAGE?r6:global.WeakRef||r6,IAt=new B7n(e=>{e.exited||e.terminate()});function W7n(e,t){let{filename:r,workerData:o}=t,a=("__bundlerPathsOverrides"in globalThis?globalThis.__bundlerPathsOverrides:{})["thread-stream-worker"]||k7n(__dirname,"lib","worker.js"),i=new x7n(a,{...t.workerOpts,trackUnmanagedFds:!1,workerData:{filename:r.indexOf("file://")===0?r:C7n(r).href,dataBuf:e[bt].dataBuf,stateBuf:e[bt].stateBuf,workerData:{$context:{threadStreamVersion:z7n},...o}}});return i.stream=new r6(e),i.on("message",F7n),i.on("exit",PAt),IAt.register(e,i),i}function wAt(e){L7n(!e[bt].sync),e[bt].needDrain&&(e[bt].needDrain=!1,e.emit("drain"))}function WH(e){let t=Atomics.load(e[bt].state,Bu),r=e[bt].data.length-t;if(r>0){if(e[bt].buf.length===0){e[bt].flushing=!1,e[bt].ending?Vbe(e):e[bt].needDrain&&process.nextTick(wAt,e);return}let o=e[bt].buf.slice(0,r),n=Buffer.byteLength(o);n<=r?(e[bt].buf=e[bt].buf.slice(r),jH(e,o,WH.bind(null,e))):e.flush(()=>{if(!e.destroyed){for(Atomics.store(e[bt].state,Vh,0),Atomics.store(e[bt].state,Bu,0);n>e[bt].data.length;)r=r/2,o=e[bt].buf.slice(0,r),n=Buffer.byteLength(o);e[bt].buf=e[bt].buf.slice(r),jH(e,o,WH.bind(null,e))}})}else if(r===0){if(t===0&&e[bt].buf.length===0)return;e.flush(()=>{Atomics.store(e[bt].state,Vh,0),Atomics.store(e[bt].state,Bu,0),WH(e)})}else $h(e,new Error("overwritten"))}function F7n(e){let t=this.stream.deref();if(t===void 0){this.exited=!0,this.terminate();return}switch(e.code){case"READY":this.stream=new U7n(t),t.flush(()=>{t[bt].ready=!0,t.emit("ready")});break;case"ERROR":$h(t,e.err);break;case"EVENT":Array.isArray(e.args)?t.emit(e.name,...e.args):t.emit(e.name,e.args);break;case"WARNING":process.emitWarning(e.err);break;default:$h(t,new Error("this should not happen: "+e.code))}}function PAt(e){let t=this.stream.deref();t!==void 0&&(IAt.unregister(t),t.worker.exited=!0,t.worker.off("exit",PAt),$h(t,e!==0?new Error("the worker thread exited"):null))}var Gbe=class extends R7n{constructor(t={}){if(super(),t.bufferSize<4)throw new Error("bufferSize must at least fit a 4-byte utf-8 char");this[bt]={},this[bt].stateBuf=new SharedArrayBuffer(128),this[bt].state=new Int32Array(this[bt].stateBuf),this[bt].dataBuf=new SharedArrayBuffer(t.bufferSize||4*1024*1024),this[bt].data=Buffer.from(this[bt].dataBuf),this[bt].sync=t.sync||!1,this[bt].ending=!1,this[bt].ended=!1,this[bt].needDrain=!1,this[bt].destroyed=!1,this[bt].flushing=!1,this[bt].ready=!1,this[bt].finished=!1,this[bt].errored=null,this[bt].closed=!1,this[bt].buf="",this.worker=W7n(this,t),this.on("message",(r,o)=>{this.worker.postMessage(r,o)})}write(t){if(this[bt].destroyed)return Kbe(this,new Error("the worker has exited")),!1;if(this[bt].ending)return Kbe(this,new Error("the worker is ending")),!1;if(this[bt].flushing&&this[bt].buf.length+t.length>=q7n)try{jbe(this),this[bt].flushing=!0}catch(r){return $h(this,r),!1}if(this[bt].buf+=t,this[bt].sync)try{return jbe(this),!0}catch(r){return $h(this,r),!1}return this[bt].flushing||(this[bt].flushing=!0,setImmediate(WH,this)),this[bt].needDrain=this[bt].data.length-this[bt].buf.length-Atomics.load(this[bt].state,Bu)<=0,!this[bt].needDrain}end(){this[bt].destroyed||(this[bt].ending=!0,Vbe(this))}flush(t){if(this[bt].destroyed){typeof t=="function"&&process.nextTick(t,new Error("the worker has exited"));return}let r=Atomics.load(this[bt].state,Bu);N7n(this[bt].state,Vh,r,1/0,(o,n)=>{if(o){$h(this,o),process.nextTick(t,o);return}if(n==="not-equal"){this.flush(t);return}process.nextTick(t)})}flushSync(){this[bt].destroyed||(jbe(this),Hbe(this))}unref(){this.worker.unref()}ref(){this.worker.ref()}get ready(){return this[bt].ready}get destroyed(){return this[bt].destroyed}get closed(){return this[bt].closed}get writable(){return!this[bt].destroyed&&!this[bt].ending}get writableEnded(){return this[bt].ending}get writableFinished(){return this[bt].finished}get writableNeedDrain(){return this[bt].needDrain}get writableObjectMode(){return!1}get writableErrored(){return this[bt].errored}};function Kbe(e,t){setImmediate(()=>{e.emit("error",t)})}function $h(e,t){e[bt].destroyed||(e[bt].destroyed=!0,t&&(e[bt].errored=t,Kbe(e,t)),e.worker.exited?setImmediate(()=>{e[bt].closed=!0,e.emit("close")}):e.worker.terminate().catch(()=>{}).then(()=>{e[bt].closed=!0,e.emit("close")}))}function jH(e,t,r){let o=Atomics.load(e[bt].state,Bu),n=Buffer.byteLength(t);return e[bt].data.write(t,o),Atomics.store(e[bt].state,Bu,o+n),Atomics.notify(e[bt].state,Bu),r(),!0}function Vbe(e){if(!(e[bt].ended||!e[bt].ending||e[bt].flushing)){e[bt].ended=!0;try{e.flushSync();let t=Atomics.load(e[bt].state,Vh);Atomics.store(e[bt].state,Bu,-1),Atomics.notify(e[bt].state,Bu);let r=0;for(;t!==-1;){if(Atomics.wait(e[bt].state,Vh,t,1e3),t=Atomics.load(e[bt].state,Vh),t===-2){$h(e,new Error("end() failed"));return}if(++r===10){$h(e,new Error("end() took too long (10s)"));return}}process.nextTick(()=>{e[bt].finished=!0,e.emit("finish")})}catch(t){$h(e,t)}}}function jbe(e){let t=()=>{e[bt].ending?Vbe(e):e[bt].needDrain&&process.nextTick(wAt,e)};for(e[bt].flushing=!1;e[bt].buf.length!==0;){let r=Atomics.load(e[bt].state,Bu),o=e[bt].data.length-r;if(o===0){Hbe(e),Atomics.store(e[bt].state,Vh,0),Atomics.store(e[bt].state,Bu,0);continue}else if(o<0)throw new Error("overwritten");let n=e[bt].buf.slice(0,o),a=Buffer.byteLength(n);if(a<=o)e[bt].buf=e[bt].buf.slice(o),jH(e,n,t);else{for(Hbe(e),Atomics.store(e[bt].state,Vh,0),Atomics.store(e[bt].state,Bu,0);a>e[bt].buf.length;)o=o/2,n=e[bt].buf.slice(0,o),a=Buffer.byteLength(n);e[bt].buf=e[bt].buf.slice(o),jH(e,n,t)}}}function Hbe(e){if(e[bt].flushing)throw new Error("unable to flush while flushing");let t=Atomics.load(e[bt].state,Bu),r=0;for(;;){let o=Atomics.load(e[bt].state,Vh);if(o===-2)throw Error("_flushSync failed");if(o!==t)Atomics.wait(e[bt].state,Vh,o,1e3);else break;if(++r===10)throw new Error("_flushSync took too long (10s)")}}zAt.exports=Gbe});var Xbe=L((Tvr,xAt)=>{"use strict";var{createRequire:j7n}=require("module"),G7n=Ube(),{join:$be,isAbsolute:K7n,sep:H7n}=require("node:path"),V7n=fH(),Jbe=$N(),$7n=RAt();function J7n(e){Jbe.register(e,Y7n),Jbe.registerBeforeExit(e,Q7n),e.on("close",function(){Jbe.unregister(e)})}function X7n(e,t,r,o){let n=new $7n({filename:e,workerData:t,workerOpts:r,sync:o});n.on("ready",a),n.on("close",function(){process.removeListener("exit",i)}),process.on("exit",i);function a(){process.removeListener("exit",i),n.unref(),r.autoEnd!==!1&&J7n(n)}function i(){n.closed||(n.flushSync(),V7n(100),n.end())}return n}function Y7n(e){e.ref(),e.flushSync(),e.end(),e.once("close",function(){e.unref()})}function Q7n(e){e.flushSync()}function Z7n(e){let{pipeline:t,targets:r,levels:o,dedupe:n,worker:a={},caller:i=G7n(),sync:s=!1}=e,c={...e.options},l=typeof i=="string"?[i]:i,p="__bundlerPathsOverrides"in globalThis?globalThis.__bundlerPathsOverrides:{},h=e.target;if(h&&r)throw new Error("only one of target or targets can be specified");return r?(h=p["pino-worker"]||$be(__dirname,"worker.js"),c.targets=r.filter(b=>b.target).map(b=>({...b,target:y(b.target)})),c.pipelines=r.filter(b=>b.pipeline).map(b=>b.pipeline.map(m=>({...m,level:b.level,target:y(m.target)})))):t&&(h=p["pino-worker"]||$be(__dirname,"worker.js"),c.pipelines=[t.map(b=>({...b,target:y(b.target)}))]),o&&(c.levels=o),n&&(c.dedupe=n),c.pinoWillSendConfig=!0,X7n(y(h),c,a,s);function y(b){if(b=p[b]||b,K7n(b)||b.indexOf("file://")===0)return b;if(b==="pino/file")return $be(__dirname,"..","file.js");let m;for(let M of l)try{let _=M==="node:repl"?process.cwd()+H7n:M;m=j7n(_).resolve(b);break}catch{continue}if(!m)throw new Error(`unable to determine transport target for "${b}"`);return m}}xAt.exports=Z7n});var VH=L((vvr,KAt)=>{"use strict";var kAt=require("node:diagnostics_channel"),CAt=Yye(),{mapHttpRequest:ejn,mapHttpResponse:tjn}=VN(),Qbe=tbe(),NAt=$N(),{lsCacheSym:njn,chindingsSym:BAt,writeSym:DAt,serializersSym:UAt,formatOptsSym:LAt,endSym:ijn,stringifiersSym:WAt,stringifySym:FAt,stringifySafeSym:Zbe,wildcardFirstSym:jAt,nestedKeySym:rjn,formattersSym:GAt,messageKeySym:ojn,errorKeySym:ajn,nestedKeyStrSym:sjn,msgPrefixSym:GH}=cI(),{isMainThread:cjn}=require("worker_threads"),ljn=Xbe(),HH;typeof kAt.tracingChannel=="function"?HH=kAt.tracingChannel("pino_asJson"):HH={hasSubscribers:!1,traceSync(e,t,r,...o){return e.call(r,...o)}};function lI(){}function ujn(e,t){if(!t)return r;return function(...n){t.call(this,n,r,e)};function r(o,...n){if(typeof o=="object"){let a=o;o!==null&&(o.method&&o.headers&&o.socket?o=ejn(o):typeof o.setHeader=="function"&&(o=tjn(o)));let i;a===null&&n.length===0?i=[null]:(a=n.shift(),i=n),typeof this[GH]=="string"&&a!==void 0&&a!==null&&(a=this[GH]+a),this[DAt](o,CAt(a,i,this[LAt]),e)}else{let a=o===void 0?n.shift():o;typeof this[GH]=="string"&&a!==void 0&&a!==null&&(a=this[GH]+a),this[DAt](null,CAt(a,n,this[LAt]),e)}}}function Ybe(e){let t="",r=0,o=!1,n=255,a=e.length;if(a>100)return JSON.stringify(e);for(var i=0;i<a&&n>=32;i++)n=e.charCodeAt(i),(n===34||n===92)&&(t+=e.slice(r,i)+"\\",r=i,o=!0);return o?t+=e.slice(r):t=e,n<32?JSON.stringify(e):'"'+t+'"'}function pjn(e,t,r,o){if(HH.hasSubscribers===!1)return qAt.call(this,e,t,r,o);let n={instance:this,arguments};return HH.traceSync(qAt,n,this,e,t,r,o)}function qAt(e,t,r,o){let n=this[FAt],a=this[Zbe],i=this[WAt],s=this[ijn],c=this[BAt],l=this[UAt],p=this[GAt],h=this[ojn],y=this[ajn],b=this[njn][r]+o;b=b+c;let m;p.log&&(e=p.log(e));let M=i[jAt],_="";for(let S in e)if(m=e[S],Object.prototype.hasOwnProperty.call(e,S)&&m!==void 0){l[S]?m=l[S](m):S===y&&l.err&&(m=l.err(m));let v=i[S]||M;switch(typeof m){case"undefined":case"function":continue;case"number":Number.isFinite(m)===!1&&(m=null);case"boolean":v&&(m=v(m));break;case"string":m=(v||Ybe)(m);break;default:m=(v||n)(m,a)}if(m===void 0)continue;let T=Ybe(S);_+=","+T+":"+m}let O="";if(t!==void 0){m=l[h]?l[h](t):t;let S=i[h]||M;switch(typeof m){case"function":break;case"number":Number.isFinite(m)===!1&&(m=null);case"boolean":S&&(m=S(m)),O=',"'+h+'":'+m;break;case"string":m=(S||Ybe)(m),O=',"'+h+'":'+m;break;default:m=(S||n)(m,a),O=',"'+h+'":'+m}}return this[rjn]&&_?b+this[sjn]+_.slice(1)+"}"+O+s:b+_+O+s}function fjn(e,t){let r,o=e[BAt],n=e[FAt],a=e[Zbe],i=e[WAt],s=i[jAt],c=e[UAt],l=e[GAt].bindings;t=l(t);for(let p in t)if(r=t[p],((p.length<5||p!=="level"&&p!=="serializers"&&p!=="formatters"&&p!=="customLevels")&&t.hasOwnProperty(p)&&r!==void 0)===!0){if(r=c[p]?c[p](r):r,r=(i[p]||s||n)(r,a),r===void 0)continue;o+=',"'+p+'":'+r}return o}function djn(e){return e.write!==e.constructor.prototype.write}function KH(e){let t=new Qbe(e);return t.on("error",r),!e.sync&&cjn&&(NAt.register(t,hjn),t.on("close",function(){NAt.unregister(t)})),t;function r(o){if(o.code==="EPIPE"){t.write=lI,t.end=lI,t.flushSync=lI,t.destroy=lI;return}t.removeListener("error",r),t.emit("error",o)}}function hjn(e,t){e.destroyed||(t==="beforeExit"?(e.flush(),e.on("drain",function(){e.end()})):e.flushSync())}function yjn(e){return function(r,o,n={},a){if(typeof n=="string")a=KH({dest:n}),n={};else if(typeof a=="string"){if(n&&n.transport)throw Error("only one of option.transport or stream can be specified");a=KH({dest:a})}else if(n instanceof Qbe||n.writable||n._writableState)a=n,n={};else if(n.transport){if(n.transport instanceof Qbe||n.transport.writable||n.transport._writableState)throw Error("option.transport do not allow stream, please pass to option directly. e.g. pino(transport)");if(n.transport.targets&&n.transport.targets.length&&n.formatters&&typeof n.formatters.level=="function")throw Error("option.transport.targets do not allow custom level formatters");let c;n.customLevels&&(c=n.useOnlyCustomLevels?n.customLevels:Object.assign({},n.levels,n.customLevels)),a=ljn({caller:o,...n.transport,levels:c})}if(n=Object.assign({},e,n),n.serializers=Object.assign({},e.serializers,n.serializers),n.formatters=Object.assign({},e.formatters,n.formatters),n.prettyPrint)throw new Error("prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)");let{enabled:i,onChild:s}=n;return i===!1&&(n.level="silent"),s||(n.onChild=lI),a||(djn(process.stdout)?a=process.stdout:a=KH({fd:process.stdout.fd||1})),{opts:n,stream:a}}}function bjn(e,t){try{return JSON.stringify(e)}catch{try{return(t||this[Zbe])(e)}catch{return'"[unable to serialize, circular reference is too complex to analyze]"'}}}function mjn(e,t,r){return{level:e,bindings:t,log:r}}function gjn(e){let t=Number(e);return typeof e=="string"&&Number.isFinite(t)?t:e===void 0?1:e}KAt.exports={noop:lI,buildSafeSonicBoom:KH,asChindings:fjn,asJson:pjn,genLog:ujn,createArgsNormalizer:yjn,stringify:bjn,buildFormatters:mjn,normalizeDestFileDescriptor:gjn}});var $H=L((Ivr,HAt)=>{var Ojn={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},Mjn={ASC:"ASC",DESC:"DESC"};HAt.exports={DEFAULT_LEVELS:Ojn,SORTING_ORDER:Mjn}});var nme=L((wvr,XAt)=>{"use strict";var{lsCacheSym:_jn,levelValSym:eme,useOnlyCustomLevelsSym:Ajn,streamSym:Sjn,formattersSym:Ejn,hooksSym:Tjn,levelCompSym:VAt}=cI(),{noop:vjn,genLog:UA}=VH(),{DEFAULT_LEVELS:Jh,SORTING_ORDER:$At}=$H(),JAt={fatal:e=>{let t=UA(Jh.fatal,e);return function(...r){let o=this[Sjn];if(t.call(this,...r),typeof o.flushSync=="function")try{o.flushSync()}catch{}}},error:e=>UA(Jh.error,e),warn:e=>UA(Jh.warn,e),info:e=>UA(Jh.info,e),debug:e=>UA(Jh.debug,e),trace:e=>UA(Jh.trace,e)},tme=Object.keys(Jh).reduce((e,t)=>(e[Jh[t]]=t,e),{}),Ijn=Object.keys(tme).reduce((e,t)=>(e[t]='{"level":'+Number(t),e),{});function wjn(e){let t=e[Ejn].level,{labels:r}=e.levels,o={};for(let n in r){let a=t(r[n],Number(n));o[n]=JSON.stringify(a).slice(0,-1)}return e[_jn]=o,e}function Pjn(e,t){if(t)return!1;switch(e){case"fatal":case"error":case"warn":case"info":case"debug":case"trace":return!0;default:return!1}}function zjn(e){let{labels:t,values:r}=this.levels;if(typeof e=="number"){if(t[e]===void 0)throw Error("unknown level value"+e);e=t[e]}if(r[e]===void 0)throw Error("unknown level "+e);let o=this[eme],n=this[eme]=r[e],a=this[Ajn],i=this[VAt],s=this[Tjn].logMethod;for(let c in r){if(i(r[c],n)===!1){this[c]=vjn;continue}this[c]=Pjn(c,a)?JAt[c](s):UA(r[c],s)}this.emit("level-change",e,n,t[o],o,this)}function Rjn(e){let{levels:t,levelVal:r}=this;return t&&t.labels?t.labels[r]:""}function xjn(e){let{values:t}=this.levels,r=t[e];return r!==void 0&&this[VAt](r,this[eme])}function kjn(e,t,r){return e===$At.DESC?t<=r:t>=r}function Cjn(e){return typeof e=="string"?kjn.bind(null,e):e}function Njn(e=null,t=!1){let r=e?Object.keys(e).reduce((a,i)=>(a[e[i]]=i,a),{}):null,o=Object.assign(Object.create(Object.prototype,{Infinity:{value:"silent"}}),t?null:tme,r),n=Object.assign(Object.create(Object.prototype,{silent:{value:1/0}}),t?null:Jh,e);return{labels:o,values:n}}function Djn(e,t,r){if(typeof e=="number"){if(![].concat(Object.keys(t||{}).map(a=>t[a]),r?[]:Object.keys(tme).map(a=>+a),1/0).includes(e))throw Error(`default level:${e} must be included in custom levels`);return}let o=Object.assign(Object.create(Object.prototype,{silent:{value:1/0}}),r?null:Jh,t);if(!(e in o))throw Error(`default level:${e} must be included in custom levels`)}function Ljn(e,t){let{labels:r,values:o}=e;for(let n in t){if(n in o)throw Error("levels cannot be overridden");if(t[n]in r)throw Error("pre-existing level values cannot be used for new levels")}}function qjn(e){if(typeof e!="function"&&!(typeof e=="string"&&Object.values($At).includes(e)))throw new Error('Levels comparison should be one of "ASC", "DESC" or "function" type')}XAt.exports={initialLsCache:Ijn,genLsCache:wjn,levelMethods:JAt,getLevel:Rjn,setLevel:zjn,isLevelEnabled:xjn,mappings:Njn,assertNoLevelCollisions:Ljn,assertDefaultLevelFound:Djn,genLevelComparison:Cjn,assertLevelComparison:qjn}});var ime=L((Pvr,YAt)=>{"use strict";YAt.exports={version:"9.14.0"}});var oSt=L((Rvr,rSt)=>{"use strict";var{EventEmitter:Bjn}=require("node:events"),{lsCacheSym:Ujn,levelValSym:Wjn,setLevelSym:XH,getLevelSym:QAt,chindingsSym:YH,parsedChindingsSym:Fjn,mixinSym:jjn,asJsonSym:eSt,writeSym:Gjn,mixinMergeStrategySym:Kjn,timeSym:Hjn,timeSliceIndexSym:Vjn,streamSym:tSt,serializersSym:WA,formattersSym:o6,errorKeySym:$jn,messageKeySym:Jjn,useOnlyCustomLevelsSym:Xjn,needsMetadataGsym:Yjn,redactFmtSym:Qjn,stringifySym:Zjn,formatOptsSym:e9n,stringifiersSym:t9n,msgPrefixSym:ome,hooksSym:n9n}=cI(),{getLevel:i9n,setLevel:r9n,isLevelEnabled:o9n,mappings:a9n,initialLsCache:s9n,genLsCache:c9n,assertNoLevelCollisions:l9n}=nme(),{asChindings:ame,asJson:u9n,buildFormatters:rme,stringify:ZAt,noop:nSt}=VH(),{version:p9n}=ime(),f9n=Fbe(),d9n=class{},iSt={constructor:d9n,child:h9n,bindings:y9n,setBindings:b9n,flush:O9n,isLevelEnabled:o9n,version:p9n,get level(){return this[QAt]()},set level(e){this[XH](e)},get levelVal(){return this[Wjn]},set levelVal(e){throw Error("levelVal is read-only")},get msgPrefix(){return this[ome]},get[Symbol.toStringTag](){return"Pino"},[Ujn]:s9n,[Gjn]:g9n,[eSt]:u9n,[QAt]:i9n,[XH]:r9n};Object.setPrototypeOf(iSt,Bjn.prototype);rSt.exports=function(){return Object.create(iSt)};var JH=e=>e;function h9n(e,t){if(!e)throw Error("missing bindings for child Pino");let r=this[WA],o=this[o6],n=Object.create(this);if(t==null)return n[o6].bindings!==JH&&(n[o6]=rme(o.level,JH,o.log)),n[YH]=ame(n,e),n[XH](this.level),this.onChild!==nSt&&this.onChild(n),n;if(t.hasOwnProperty("serializers")===!0){n[WA]=Object.create(null);for(let p in r)n[WA][p]=r[p];let c=Object.getOwnPropertySymbols(r);for(var a=0;a<c.length;a++){let p=c[a];n[WA][p]=r[p]}for(let p in t.serializers)n[WA][p]=t.serializers[p];let l=Object.getOwnPropertySymbols(t.serializers);for(var i=0;i<l.length;i++){let p=l[i];n[WA][p]=t.serializers[p]}}else n[WA]=r;if(t.hasOwnProperty("formatters")){let{level:c,bindings:l,log:p}=t.formatters;n[o6]=rme(c||o.level,l||JH,p||o.log)}else n[o6]=rme(o.level,JH,o.log);if(t.hasOwnProperty("customLevels")===!0&&(l9n(this.levels,t.customLevels),n.levels=a9n(t.customLevels,n[Xjn]),c9n(n)),typeof t.redact=="object"&&t.redact!==null||Array.isArray(t.redact)){n.redact=t.redact;let c=f9n(n.redact,ZAt),l={stringify:c[Qjn]};n[Zjn]=ZAt,n[t9n]=c,n[e9n]=l}typeof t.msgPrefix=="string"&&(n[ome]=(this[ome]||"")+t.msgPrefix),n[YH]=ame(n,e);let s=t.level||this.level;return n[XH](s),this.onChild(n),n}function y9n(){let t=`{${this[YH].substr(1)}}`,r=JSON.parse(t);return delete r.pid,delete r.hostname,r}function b9n(e){let t=ame(this,e);this[YH]=t,delete this[Fjn]}function m9n(e,t){return Object.assign(t,e)}function g9n(e,t,r){let o=this[Hjn](),n=this[jjn],a=this[$jn],i=this[Jjn],s=this[Kjn]||m9n,c,l=this[n9n].streamWrite;e==null?c={}:e instanceof Error?(c={[a]:e},t===void 0&&(t=e.message)):(c=e,t===void 0&&e[i]===void 0&&e[a]&&(t=e[a].message)),n&&(c=s(c,n(c,r,this)));let p=this[eSt](c,t,r,o),h=this[tSt];h[Yjn]===!0&&(h.lastLevel=r,h.lastObj=c,h.lastMsg=t,h.lastTime=o.slice(this[Vjn]),h.lastLogger=this),h.write(l?l(p):p)}function O9n(e){if(e!=null&&typeof e!="function")throw Error("callback must be a function");let t=this[tSt];typeof t.flush=="function"?t.flush(e||nSt):e&&e()}});var lSt=L((xvr,cSt)=>{"use strict";var sme=Symbol.for("pino.metadata"),{DEFAULT_LEVELS:sSt}=$H(),M9n=sSt.info;function _9n(e,t){e=e||[],t=t||{dedupe:!1};let r=Object.create(sSt);r.silent=1/0,t.levels&&typeof t.levels=="object"&&Object.keys(t.levels).forEach(h=>{r[h]=t.levels[h]});let o={write:n,add:s,remove:c,emit:a,flushSync:i,end:l,minLevel:0,lastId:0,streams:[],clone:p,[sme]:!0,streamLevels:r};return Array.isArray(e)?e.forEach(s,o):s.call(o,e),e=null,o;function n(h){let y,b=this.lastLevel,{streams:m}=this,M=0,_;for(let O=A9n(m.length,t.dedupe);E9n(O,m.length,t.dedupe);O=S9n(O,t.dedupe))if(y=m[O],y.level<=b){if(M!==0&&M!==y.level)break;if(_=y.stream,_[sme]){let{lastTime:S,lastMsg:v,lastObj:T,lastLogger:w}=this;_.lastLevel=b,_.lastTime=S,_.lastMsg=v,_.lastObj=T,_.lastLogger=w}_.write(h),t.dedupe&&(M=y.level)}else if(!t.dedupe)break}function a(...h){for(let{stream:y}of this.streams)typeof y.emit=="function"&&y.emit(...h)}function i(){for(let{stream:h}of this.streams)typeof h.flushSync=="function"&&h.flushSync()}function s(h){if(!h)return o;let y=typeof h.write=="function"||h.stream,b=h.write?h:h.stream;if(!y)throw Error("stream object needs to implement either StreamEntry or DestinationStream interface");let{streams:m,streamLevels:M}=this,_;typeof h.levelVal=="number"?_=h.levelVal:typeof h.level=="string"?_=M[h.level]:typeof h.level=="number"?_=h.level:_=M9n;let O={stream:b,level:_,levelVal:void 0,id:++o.lastId};return m.unshift(O),m.sort(aSt),this.minLevel=m[0].level,o}function c(h){let{streams:y}=this,b=y.findIndex(m=>m.id===h);return b>=0&&(y.splice(b,1),y.sort(aSt),this.minLevel=y.length>0?y[0].level:-1),o}function l(){for(let{stream:h}of this.streams)typeof h.flushSync=="function"&&h.flushSync(),h.end()}function p(h){let y=new Array(this.streams.length);for(let b=0;b<y.length;b++)y[b]={level:h,stream:this.streams[b].stream};return{write:n,add:s,remove:c,minLevel:h,streams:y,clone:p,emit:a,flushSync:i,[sme]:!0}}}function aSt(e,t){return e.level-t.level}function A9n(e,t){return t?e-1:0}function S9n(e,t){return t?e-1:e+1}function E9n(e,t,r){return r?e>=0:e<t}cSt.exports=_9n});var SSt=L((kvr,dp)=>{"use strict";var T9n=require("node:os"),mSt=VN(),v9n=Ube(),I9n=Fbe(),gSt=_At(),w9n=oSt(),OSt=cI(),{configure:P9n}=Ebe(),{assertDefaultLevelFound:z9n,mappings:MSt,genLsCache:R9n,genLevelComparison:x9n,assertLevelComparison:k9n}=nme(),{DEFAULT_LEVELS:_St,SORTING_ORDER:C9n}=$H(),{createArgsNormalizer:N9n,asChindings:D9n,buildSafeSonicBoom:uSt,buildFormatters:L9n,stringify:cme,normalizeDestFileDescriptor:pSt,noop:q9n}=VH(),{version:B9n}=ime(),{chindingsSym:fSt,redactFmtSym:U9n,serializersSym:dSt,timeSym:W9n,timeSliceIndexSym:F9n,streamSym:j9n,stringifySym:hSt,stringifySafeSym:lme,stringifiersSym:ySt,setLevelSym:G9n,endSym:K9n,formatOptsSym:H9n,messageKeySym:V9n,errorKeySym:$9n,nestedKeySym:J9n,mixinSym:X9n,levelCompSym:Y9n,useOnlyCustomLevelsSym:Q9n,formattersSym:bSt,hooksSym:Z9n,nestedKeyStrSym:eGn,mixinMergeStrategySym:tGn,msgPrefixSym:nGn}=OSt,{epochTime:ASt,nullTime:iGn}=gSt,{pid:rGn}=process,oGn=T9n.hostname(),aGn=mSt.err,sGn={level:"info",levelComparison:C9n.ASC,levels:_St,messageKey:"msg",errorKey:"err",nestedKey:null,enabled:!0,base:{pid:rGn,hostname:oGn},serializers:Object.assign(Object.create(null),{err:aGn}),formatters:Object.assign(Object.create(null),{bindings(e){return e},level(e,t){return{level:t}}}),hooks:{logMethod:void 0,streamWrite:void 0},timestamp:ASt,name:void 0,redact:null,customLevels:null,useOnlyCustomLevels:!1,depthLimit:5,edgeLimit:100},cGn=N9n(sGn),lGn=Object.assign(Object.create(null),mSt);function ume(...e){let t={},{opts:r,stream:o}=cGn(t,v9n(),...e);r.level&&typeof r.level=="string"&&_St[r.level.toLowerCase()]!==void 0&&(r.level=r.level.toLowerCase());let{redact:n,crlf:a,serializers:i,timestamp:s,messageKey:c,errorKey:l,nestedKey:p,base:h,name:y,level:b,customLevels:m,levelComparison:M,mixin:_,mixinMergeStrategy:O,useOnlyCustomLevels:S,formatters:v,hooks:T,depthLimit:w,edgeLimit:P,onChild:C,msgPrefix:R}=r,N=P9n({maximumDepth:w,maximumBreadth:P}),W=L9n(v.level,v.bindings,v.log),k=cme.bind({[lme]:N}),K=n?I9n(n,k):{},U=n?{stringify:K[U9n]}:{stringify:k},q="}"+(a?`\r
|
|
226
226
|
`:`
|
|
227
|
-
`),H=D9n.bind(null,{[fSt]:"",[dSt]:i,[ySt]:K,[hSt]:cme,[lme]:N,[bSt]:W}),ee="";h!==null&&(y===void 0?ee=H(h):ee=H(Object.assign({},h,{name:y})));let Ae=s instanceof Function?s:s?ASt:iGn,ue=Ae().indexOf(":")+1;if(S&&!m)throw Error("customLevels is required if useOnlyCustomLevels is set true");if(_&&typeof _!="function")throw Error(`Unknown mixin type "${typeof _}" - expected "function"`);if(R&&typeof R!="string")throw Error(`Unknown msgPrefix type "${typeof R}" - expected "string"`);z9n(b,m,S);let se=MSt(m,S);typeof o.emit=="function"&&o.emit("message",{code:"PINO_CONFIG",config:{levels:se,messageKey:c,errorKey:l}}),k9n(M);let de=x9n(M);return Object.assign(t,{levels:se,[Y9n]:de,[Q9n]:S,[j9n]:o,[W9n]:Ae,[F9n]:ue,[hSt]:cme,[lme]:N,[ySt]:K,[K9n]:q,[H9n]:U,[V9n]:c,[$9n]:l,[J9n]:p,[eGn]:p?`,${JSON.stringify(p)}:{`:"",[dSt]:i,[X9n]:_,[tGn]:O,[fSt]:ee,[bSt]:W,[Z9n]:T,silent:q9n,onChild:C,[nGn]:R}),Object.setPrototypeOf(t,w9n()),R9n(t),t[G9n](b),t}dp.exports=ume;dp.exports.destination=(e=process.stdout.fd)=>typeof e=="object"?(e.dest=pSt(e.dest||process.stdout.fd),uSt(e)):uSt({dest:pSt(e),minLength:0});dp.exports.transport=Xbe();dp.exports.multistream=lSt();dp.exports.levels=MSt();dp.exports.stdSerializers=lGn;dp.exports.stdTimeFunctions=Object.assign({},gSt);dp.exports.symbols=OSt;dp.exports.version=B9n;dp.exports.default=ume;dp.exports.pino=ume});function QH(e,t){let r=e.key,o=e.message,n=r.remoteJid||"",a="";r.fromMe?a=t:a=r.participant||r.remoteJid||"";let i="",s="text",c="";o?o.conversation?(i=o.conversation,s="text"):o.extendedTextMessage?(i=o.extendedTextMessage.text||"",s="text"):o.imageMessage?(i=o.imageMessage.caption||"",s="image",c=o.imageMessage.url||""):o.videoMessage?(i=o.videoMessage.caption||"",s="video",c=o.videoMessage.url||""):o.audioMessage?(s="audio",c=o.audioMessage.url||""):o.documentMessage?(i=o.documentMessage.title||o.documentMessage.fileName||"",s="file",c=o.documentMessage.url||""):o.stickerMessage?(s="sticker",c=o.stickerMessage.url||""):o.protocolMessage||o.senderKeyDistributionMessage?(s="system",i="System message"):(s="other",i="[Tin nh\u1EAFn kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3]"):(s="other",i="");let l={rawMsg:uGn(e)};if(e.pushName&&(l.pushName=e.pushName),o?.extendedTextMessage?.contextInfo?.quotedMessage){let h=o.extendedTextMessage.contextInfo;l.quotedMessage={participant:h.participant,stanzaId:h.stanzaId,text:h.quotedMessage?.conversation||h.quotedMessage?.extendedTextMessage?.text||""}}let p=e.messageTimestamp?Number(e.messageTimestamp)*1e3:Date.now();return{id:r.id||"",conversationId:n,senderId:a,senderName:e.pushName||void 0,text:i,type:s,mediaUrl:c,timestamp:p,platform:"whatsapp",isFromMe:!!r.fromMe,metadata:l}}function uGn(e){if(!e||typeof e!="object")return e;let t={};if(e.key&&(t.key={remoteJid:e.key.remoteJid,fromMe:e.key.fromMe,id:e.key.id,participant:e.key.participant}),e.pushName&&(t.pushName=e.pushName),e.messageTimestamp&&(t.messageTimestamp=e.messageTimestamp),e.status&&(t.status=e.status),e.message){let r=e.message;t.message={},r.conversation&&(t.message.conversation=r.conversation),r.extendedTextMessage&&(t.message.extendedTextMessage={text:r.extendedTextMessage.text},r.extendedTextMessage.contextInfo&&(t.message.extendedTextMessage.contextInfo={stanzaId:r.extendedTextMessage.contextInfo.stanzaId,participant:r.extendedTextMessage.contextInfo.participant})),r.imageMessage&&(t.message.imageMessage={caption:r.imageMessage.caption,mimetype:r.imageMessage.mimetype}),r.videoMessage&&(t.message.videoMessage={caption:r.videoMessage.caption,mimetype:r.videoMessage.mimetype}),r.audioMessage&&(t.message.audioMessage={mimetype:r.audioMessage.mimetype,seconds:r.audioMessage.seconds}),r.documentMessage&&(t.message.documentMessage={title:r.documentMessage.title,fileName:r.documentMessage.fileName,mimetype:r.documentMessage.mimetype}),r.stickerMessage&&(t.message.stickerMessage={mimetype:r.stickerMessage.mimetype})}return t}var ESt=me(()=>{"use strict"});function a6(e,t){let r=String(e.id||e.jid||""),o=String(e.name||e.verifiedName||e.notify||"WhatsApp User"),n=String(e.imgUrl||e.avatar||"");return{id:r,name:o,avatarUrl:n||void 0,platform:"whatsapp",phoneNumber:t||e.phoneNumber||void 0,rawContact:e}}function TSt(e){let t=String(e.id||e.jid||""),r=String(e.name||e.displayName||"WhatsApp Chat"),o=String(e.imgUrl||e.avatar||""),n="direct";return(t.endsWith("@g.us")||e.isGroup)&&(n="group"),{id:t,name:r,avatarUrl:o||void 0,type:n,unreadCount:Number(e.unreadCount||0),platform:"whatsapp",rawConversation:e}}var vSt=me(()=>{"use strict"});var RSt={};Zi(RSt,{WhatsAppAdapter:()=>pme});var ISt,wSt,PSt,zSt,pme,xSt=me(()=>{"use strict";fAt();ISt=ke(SSt()),wSt=ke(hL()),PSt=ke(bL()),zSt=ke(ML());sP();ESt();vSt();pme=class{accountId;platform="whatsapp";eventBus=new vd;status="disconnected";socket=null;session=null;isReconnecting=!1;chatsMap=new Map;contactsMap=new Map;constructor(t){this.accountId=t}async initialize(t){this.session=t,this.status="connecting",this.eventBus.emit("session:status_changed","connecting");let r=t.authData.sessionPath||`./sessions/whatsapp_${this.accountId}`;try{let{state:o,saveCreds:n}=await $2t(r),a=(0,ISt.default)({level:"silent"}),i=[2,3e3,1023223821];try{let c=await Sft();c&&c.version&&(i=c.version)}catch{}let s={version:i,auth:o,logger:a,printQRInTerminal:!1,defaultQueryTimeoutMs:3e4,connectTimeoutMs:3e4};if(t.proxy){let c=this.createProxyAgent(t.proxy);c&&(s.agent=c)}this.socket=pAt(s),this.socket.ev.on("creds.update",n),this.setupListeners()}catch(o){throw this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",o.message||String(o)),o}}async disconnect(){if(this.isReconnecting=!1,this.socket){try{this.socket.end(void 0)}catch{}this.socket=null}this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected")}async sendMessage(t,r){if(!this.socket)throw new Error("WhatsApp adapter not initialized");await this.sendTyping(t,!0);let o=Math.floor(Math.random()*2e3)+1500;await new Promise(i=>setTimeout(i,o)),await this.sendTyping(t,!1);let n={};if(r.type==="text")n={text:r.text};else if(r.type==="image")n={image:{url:r.url||r.filePath},caption:r.caption||""};else if(r.type==="sticker")n={sticker:{url:r.url||r.filePath||r.stickerId}};else if(r.type==="file")n={document:{url:r.url||r.filePath},fileName:r.filename||"file"};else throw new Error(`Unsupported message payload type: ${r.type}`);r.quoteId&&(n.contextInfo={stanzaId:r.quoteId,participant:t.endsWith("@g.us")?void 0:t,quotedMessage:{conversation:"[Tr\xEDch d\u1EABn tin nh\u1EAFn]"}});let a=await this.socket.sendMessage(t,n);if(!a)throw new Error("Failed to send WhatsApp message");return QH(a,this.accountId)}async getConversations(t=20){let r=Array.from(this.chatsMap.values());return r.sort((o,n)=>Number(n.conversationTimestamp||0)-Number(o.conversationTimestamp||0)),r.slice(0,t).map(TSt)}async getMessageHistory(t,r=50,o){return[]}async getCurrentUser(){if(!this.socket)return null;let t=this.socket.authState?.creds?.me||this.socket.user;if(!t)return null;let r=t.id;r.includes(":")&&(r=r.split(":")[0]+"@s.whatsapp.net");let o=t.name||this.socket.user?.name||"WhatsApp User",n="";try{n=await this.socket.profilePictureUrl(r,"image")||""}catch{}return a6({id:r,name:o,imgUrl:n},this.accountId)}async getContactInfo(t){if(this.contactsMap.has(t))return a6(this.contactsMap.get(t));if(!this.socket)throw new Error("WhatsApp adapter not initialized");try{let r=await this.socket.profilePictureUrl(t,"image");return a6({id:t,name:"WhatsApp User",imgUrl:r})}catch{return a6({id:t,name:"WhatsApp User"})}}async markAsRead(t){if(this.socket)try{await this.socket.sendPresenceUpdate("paused",t)}catch{}}async sendTyping(t,r){if(this.socket)try{await this.socket.sendPresenceUpdate(r?"composing":"paused",t)}catch{}}getUnderlyingClient(){return this.socket}setupListeners(){this.socket&&(this.socket.ev.on("connection.update",t=>{let{connection:r,lastDisconnect:o,qr:n}=t;n&&this.eventBus.emit("auth:qr_received",n),r==="connecting"&&(this.status="connecting",this.eventBus.emit("session:status_changed","connecting")),r==="open"&&(this.status="connected",this.eventBus.emit("session:status_changed","connected")),r==="close"&&(o?.error?.output?.statusCode!==ba.loggedOut&&this.session?(this.isReconnecting=!0,this.initialize(this.session)):(this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected","Session logged out or expired")))}),this.socket.ev.on("messages.upsert",t=>{if(t.type==="notify"){for(let r of t.messages)if(r.message)try{let o=QH(r,this.accountId);this.eventBus.emit("message:received",o)}catch{}}}),this.socket.ev.on("presence.update",t=>{try{let r=t.id,o=Object.keys(t.presences);if(o.length>0){let n=o[0],a=t.presences[n];a&&this.eventBus.emit("chat:typing",{conversationId:r,senderId:n,isTyping:a.lastKnownPresence==="composing"})}}catch{}}),this.socket.ev.on("messaging-history.set",t=>{let{chats:r,contacts:o,messages:n}=t;if(r)for(let a of r)a.id&&this.chatsMap.set(a.id,a);if(o)for(let a of o)a.id&&this.contactsMap.set(a.id,a);if(n){for(let a of n)if(a.message)try{let i=QH(a,this.accountId);this.eventBus.emit("message:received",i)}catch{}}}),this.socket.ev.on("chats.upsert",t=>{for(let r of t)r.id&&this.chatsMap.set(r.id,r)}),this.socket.ev.on("chats.update",t=>{for(let r of t)if(r.id&&this.chatsMap.has(r.id)){let o=this.chatsMap.get(r.id);this.chatsMap.set(r.id,{...o,...r})}}),this.socket.ev.on("contacts.upsert",t=>{for(let r of t)r.id&&this.contactsMap.set(r.id,r)}),this.socket.ev.on("contacts.update",t=>{for(let r of t)if(r.id&&this.contactsMap.has(r.id)){let o=this.contactsMap.get(r.id);this.contactsMap.set(r.id,{...o,...r})}}))}createProxyAgent(t){try{return t.startsWith("socks")?new wSt.SocksProxyAgent(t):t.startsWith("https")?new zSt.HttpsProxyAgent(t):new PSt.HttpProxyAgent(t)}catch{return}}}});var ql=ke(require("fs")),dI=ke(require("path")),Xh=ke(require("os")),fc=require("child_process");var Ty=ke(require("os")),qm=ke(require("fs")),$I=ke(require("path")),Cge=ke(require("crypto"));function QIt(){return"1.0.15"}var Lp=QIt();function D6(){return{totalMemMb:Math.round(Ty.default.totalmem()/(1024*1024)),freeMemMb:Math.round(Ty.default.freemem()/(1024*1024)),cpuCount:Ty.default.cpus()?.length||1,platform:Ty.default.platform()}}function ZIt(e){try{let t=$I.default.join(Ty.default.homedir(),".zplus");qm.default.existsSync(t)||qm.default.mkdirSync(t,{recursive:!0});let r=e?`_slot_${e.replace(/[^a-zA-Z0-9_-]/g,"")}`:"",o=$I.default.join(t,`worker_identity${r}.json`);if(qm.default.existsSync(o)){let h=JSON.parse(qm.default.readFileSync(o,"utf-8"));if(h&&h.workerId)return{workerId:h.workerId,workerName:h.workerName||h.workerId}}let a=(Ty.default.hostname()||"node").replace(/[^a-zA-Z0-9_-]/g,"_").toLowerCase().slice(0,14),i=Cge.default.randomBytes(2).toString("hex"),s=`worker_${a}${r}_${i}`,c=e?` #${e}`:"",l=`Worker ${a.toUpperCase()}${c}`,p={workerId:s,workerName:l,slot:e||"default",createdAt:new Date().toISOString()};return qm.default.writeFileSync(o,JSON.stringify(p,null,2),"utf-8"),p}catch{let t=e?`_slot_${e}`:"",r=`worker_${Ty.default.hostname().replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,14)||"node"}${t}`;return{workerId:r,workerName:r}}}var N6=class{static loadFromEnv(t=process.argv.slice(2)){let r=C=>{for(let R of t){if(R.startsWith(`--${C}=`))return R.split("=").slice(1).join("=");if(R===`--${C}`&&t[t.indexOf(R)+1])return t[t.indexOf(R)+1]}},o=r("cloud-provider")||process.env.CLOUD_PROVIDER||"appwrite",n=r("token")||process.env.CLOUD_AUTH_TOKEN||process.env.APPWRITE_SESSION_TOKEN||process.env.WORKER_TOKEN||process.env.SESSION_TOKEN,a=r("jwt")||process.env.CLOUD_JWT||process.env.APPWRITE_JWT||process.env.JWT,i=r("api-key")||process.env.CLOUD_API_KEY||process.env.APPWRITE_API_KEY,s=r("secret")||process.env.DESKTOP_SECRET,c=r("team-id")||process.env.TEAM_ID||"default",l=t.includes("--enable-http")||r("enable-http")==="true"||process.env.ENABLE_HTTP==="true"||!1,p=r("port")||process.env.PORT,h=p?Number(p):l?8080:void 0,y=r("endpoint")||process.env.CLOUD_ENDPOINT||process.env.CLOUD_API_ENDPOINT||process.env.APPWRITE_ENDPOINT||process.env.VITE_APPWRITE_ENDPOINT||"https://api.softty.net/v1",b=r("project-id")||process.env.CLOUD_PROJECT_ID||process.env.CLOUD_TENANT_ID||process.env.APPWRITE_PROJECT_ID||process.env.VITE_APPWRITE_PROJECT_ID||"699cfc3100136099c1c1",m=r("database-id")||process.env.CLOUD_DATABASE_ID||process.env.APPWRITE_DATABASE_ID||process.env.VITE_APPWRITE_DATABASE_ID||"zplus_app",M=Math.max(1,Math.round(Ty.default.totalmem()/(1024*1024*1024))),_=Math.min(200,Math.max(20,M*25)),O=r("max-capacity")||process.env.MAX_CAPACITY,S=Number(O||_),v=r("slot")||process.env.WORKER_SLOT||process.env.pm_id||process.env.NODE_APP_INSTANCE,T=ZIt(v),w=r("worker-id")||process.env.WORKER_ID||T.workerId,P=r("worker-name")||process.env.WORKER_NAME||process.env.HOSTNAME||T.workerName;return{workerId:w,version:Lp,enableHttp:l,port:h,teamId:c,workerName:P,maxCapacity:S,recommendedCapacity:_,clusterPollIntervalMs:Number(r("poll-interval")||process.env.CLUSTER_POLL_INTERVAL_MS||5e3),cloudProvider:o,cloudEndpoint:y,cloudProjectId:b,cloudSessionToken:n,cloudJwt:a,cloudApiKey:i,cloudDatabaseId:m,appwriteEndpoint:y,appwriteProjectId:b,appwriteSessionToken:n,appwriteJwt:a,appwriteApiKey:i,desktopSecret:s,databaseId:m,heartbeatIntervalMs:Number(r("heartbeat-interval")||process.env.HEARTBEAT_INTERVAL_MS||3e4),geminiApiKey:r("gemini-api-key")||process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY,openaiApiKey:r("openai-api-key")||process.env.OPENAI_API_KEY,deepseekApiKey:r("deepseek-api-key")||process.env.DEEPSEEK_API_KEY,anthropicApiKey:r("anthropic-api-key")||process.env.ANTHROPIC_API_KEY,customAiApiKey:r("custom-ai-api-key")||process.env.CUSTOM_AI_API_KEY,aiBaseUrl:r("ai-base-url")||process.env.AI_BASE_URL,aiProvider:r("ai-provider")||process.env.AI_PROVIDER,aiModel:r("ai-model")||process.env.AI_MODEL,nightSystemPrompt:r("night-system-prompt")||process.env.NIGHT_SYSTEM_PROMPT,nightFallbackReply:r("night-fallback-reply")||process.env.NIGHT_FALLBACK_REPLY,logLevel:r("log-level")||process.env.LOG_LEVEL||"info"}}};var fI=ke(require("fs")),fme=ke(require("os")),FA=ke(require("path")),KSt=ke(require("crypto")),HSt=ke(go());var jge=ke(go()),U6=class{runners=new Map;logger;constructor(t){this.logger=t||(0,jge.createLogger)("ChannelRunnerRegistry")}register(t){let r=`${t.platform}:${t.accountId}`;this.runners.has(r)&&this.logger.warn(`Overwriting existing runner for ${r}`),this.runners.set(r,t),this.logger.info(`Registered runner for ${r}`)}unregister(t,r){let o=`${t}:${r}`,n=this.runners.get(o);return n?(n.stop().catch(a=>{this.logger.error(`Error stopping runner ${o} during unregister`,a)}),this.runners.delete(o),this.logger.info(`Unregistered runner for ${o}`),!0):!1}get(t,r){return this.runners.get(`${t}:${r}`)}getAll(){return Array.from(this.runners.values())}getCount(){return this.runners.size}async startAll(){this.logger.info(`Starting all ${this.runners.size} registered channel runners...`);for(let[t,r]of this.runners.entries())try{await r.start()}catch(o){this.logger.error(`Failed to start runner ${t}:`,o)}}async stopAll(){this.logger.info(`Stopping all ${this.runners.size} channel runners...`);for(let[t,r]of this.runners.entries())try{await r.stop()}catch(o){this.logger.error(`Failed to stop runner ${t}:`,o)}this.runners.clear()}};var Gge=ke(go()),W6=class{constructor(t=6e4,r,o){this.defaultTtlMs=t;this.logger=r||(0,Gge.createLogger)("DistributedLockManager"),this.storageProvider=o}logger;locks=new Map;preemptCallbacks=[];storageProvider;setStorageProvider(t){this.storageProvider=t}getStorageProvider(){return this.storageProvider}onPreempt(t){this.preemptCallbacks.push(t)}async acquireLockRemote(t,r,o=this.defaultTtlMs){return this.storageProvider&&!await this.storageProvider.acquireLock(t,r,o)?!1:this.acquireLock(t,r,o)}async releaseLockRemote(t,r){return this.storageProvider&&await this.storageProvider.releaseLock(t,r),this.releaseLock(t,r)}async renewLockRemote(t,r,o=this.defaultTtlMs){return this.storageProvider&&await this.storageProvider.renewLock(t,r,o),this.acquireLock(t,r,o)}acquireLock(t,r,o=this.defaultTtlMs){let n=Date.now(),a=this.locks.get(t);return a&&a.expiresAt>n&&a.ownerId!==r?(this.logger.warn(`Lock denied for account ${t}: currently held by ${a.ownerId} (expires in ${a.expiresAt-n}ms)`),!1):(this.locks.set(t,{accountId:t,ownerId:r,acquiredAt:n,expiresAt:n+o}),this.logger.info(`\u2705 Lock granted: account=${t}, owner=${r}, ttl=${o}ms`),!0)}async preemptLock(t,r){let o=this.locks.get(t);this.logger.info(`\u26A1 Preemption triggered for account ${t} by master ${r} (previous owner: ${o?.ownerId||"none"})`);let n=this.preemptCallbacks.map(i=>{try{return Promise.resolve(i(t,r))}catch(s){return this.logger.error(`Error in preempt callback for ${t}:`,s),Promise.resolve()}});await Promise.race([Promise.all(n),new Promise(i=>setTimeout(i,1e3))]);let a=Date.now();return this.locks.set(t,{accountId:t,ownerId:r,acquiredAt:a,expiresAt:a+this.defaultTtlMs}),this.logger.info(`\u2705 Account ${t} preempted successfully by ${r}.`),!0}releaseLock(t,r){let o=this.locks.get(t);return o?r&&o.ownerId!==r?(this.logger.warn(`Attempted unauthorized lock release for ${t} by ${r} (real owner: ${o.ownerId})`),!1):(this.locks.delete(t),this.logger.info(`\u{1F513} Lock released for account ${t}.`),!0):!0}releaseAllForOwner(t){let r=0;for(let[o,n]of this.locks.entries())n.ownerId===t&&(this.locks.delete(o),r++);return r}isLocked(t){let r=this.locks.get(t);return r?r.expiresAt>Date.now():!1}getLockOwner(t){let r=this.locks.get(t);return!r||r.expiresAt<=Date.now()?null:r.ownerId}};var zS=ke(require("fs")),Kge=ke(require("path")),Hge=ke(go()),F6=class{logger;queue=[];maxCapacity;persistenceFilePath;constructor(t=1e4,r,o){this.maxCapacity=t,this.logger=r||(0,Hge.createLogger)("CloudPendingMessageQueue"),this.persistenceFilePath=o,this.loadFromDisk()}loadFromDisk(){if(this.persistenceFilePath)try{if(zS.default.existsSync(this.persistenceFilePath)){let t=zS.default.readFileSync(this.persistenceFilePath,"utf8");if(t&&t.trim()){let r=JSON.parse(t);Array.isArray(r)&&(this.queue.push(...r),this.logger.info(`\u{1F4E6} Restored ${r.length} pending delta messages from disk: ${this.persistenceFilePath}`))}}}catch(t){this.logger.warn(`Failed to restore pending messages from disk (${this.persistenceFilePath}): ${t?.message}`)}}saveToDisk(){if(this.persistenceFilePath)try{let t=Kge.default.dirname(this.persistenceFilePath);zS.default.existsSync(t)||zS.default.mkdirSync(t,{recursive:!0}),zS.default.writeFileSync(this.persistenceFilePath,JSON.stringify(this.queue),"utf8")}catch(t){this.logger.warn(`Failed to save pending messages to disk (${this.persistenceFilePath}): ${t?.message}`)}}enqueue(t){if(this.queue.length>=this.maxCapacity){let r=this.queue.shift();this.logger.warn(`Queue capacity reached (${this.maxCapacity}). Dropped oldest message: ${r?.id}`)}this.queue.push(t),this.saveToDisk(),this.logger.debug(`Enqueued pending message ${t.id} for account ${t.accountId} (Total pending: ${this.queue.length})`)}getDeltas(t,r=0){return this.queue.filter(o=>{let n=!t||o.accountId===t,a=o.timestamp>=r;return n&&a})}purgeSynced(t,r){let o=this.queue.length,n=[];for(let i=0;i<this.queue.length;i++){let s=this.queue[i];s.timestamp<=t&&(!r||s.accountId===r)&&n.push(i)}for(let i=n.length-1;i>=0;i--)this.queue.splice(n[i],1);let a=o-this.queue.length;return a>0&&(this.saveToDisk(),this.logger.info(`Purged ${a} synced delta messages from queue.`)),a}getCount(){return this.queue.length}clear(){this.queue.length=0,this.saveToDisk()}};var Vge=ke(go()),j6=class{logger;campaigns=new Map;rules=new Map;threadHistory=new Map;lastReplyTimes=new Map;aiConfig={enabled:!1};constructor(t,r){this.logger=t||(0,Vge.createLogger)("HeadlessAutomationEngine"),r&&this.configure(r)}configure(t){this.aiConfig={...this.aiConfig,...t},this.logger.info(`[HeadlessAutomation] Configured AI provider: ${this.aiConfig.provider||"none"} (model: ${this.aiConfig.model||"none"}, enabled: ${this.aiConfig.enabled===!0})`)}getAiConfig(){return{...this.aiConfig}}registerCampaign(t){this.campaigns.set(t.id,t),this.logger.info(`Loaded campaign ${t.id} (${t.name})`)}registerRule(t){this.rules.set(t.id,t),this.logger.info(`Loaded automation rule ${t.id} (${t.name})`)}async evaluateIncomingMessage(t){if(t.isSelf||t.senderType&&t.senderType!=="customer"||!t.content||typeof t.content!="string"||!t.content.trim())return null;let r=t.threadId||t.conversationId||t.senderId,o=Date.now(),n=this.lastReplyTimes.get(r)||0;if(o-n<3e3)return this.logger.debug(`[HeadlessAutomation] Rate limit hit for thread ${r}. Skipping reply.`),null;let a=t.content.trim(),i=this.getThreadHistory(r);if(i.push({role:"user",content:a,timestamp:o}),i.length>6&&i.splice(0,i.length-6),!this.aiConfig||this.aiConfig.enabled!==!0||!this.aiConfig.provider)return this.logger.debug(`[HeadlessAutomation] Bot AI is disabled or unconfigured. Message saved, no auto-reply sent for thread ${r}.`),null;let s=t.accountId,c=this.aiConfig.accountBotConfigs,l=s&&c?c[s]:void 0;if(!l||!l.isBotEnabled)return this.logger.debug(`[HeadlessAutomation] Account [${s||"unknown"}] has not been configured or enabled for Bot AI by user in Chatbot settings. Message saved, no auto-reply sent.`),null;let p=t,h=!!p.isGroup||!!p.groupId||typeof t.threadId=="string"&&t.threadId.startsWith("g")||typeof t.conversationId=="string"&&t.conversationId.startsWith("g"),y=l.replyTarget||"all";if(y==="individual"&&h)return this.logger.debug(`[HeadlessAutomation] Account [${s}] configured for individual chat only. Skipping group message ${r}.`),null;if(y==="group"&&!h)return this.logger.debug(`[HeadlessAutomation] Account [${s}] configured for group chat only. Skipping direct message ${r}.`),null;let b=l.systemPrompt&&l.systemPrompt.trim()?l.systemPrompt:this.aiConfig.systemPrompt;if(this.aiConfig.provider==="rule_based")return this.aiConfig.fallbackMessage&&this.aiConfig.fallbackMessage.trim().length>0?(this.lastReplyTimes.set(r,o),this.aiConfig.fallbackMessage.trim()):null;let m=this.aiConfig.provider,M=this.aiConfig.apiKey;if(M||(m==="openai"?M=process.env.OPENAI_API_KEY:m==="deepseek"?M=process.env.DEEPSEEK_API_KEY:m==="anthropic"?M=process.env.ANTHROPIC_API_KEY:m==="custom"?M=process.env.CUSTOM_AI_API_KEY:m==="gemini"&&(M=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)),!M&&m!=="custom")return this.logger.debug(`[HeadlessAutomation] No API key found for provider [${m}]. No auto-reply sent.`),null;try{let _=null;if(m==="openai"||m==="custom"||m==="deepseek")_=await this.callOpenAiCompatible(a,i,M||"",b);else if(m==="anthropic")_=await this.callAnthropic(a,i,M||"",b);else if(m==="gemini")_=await this.callGemini(a,i,M||"",b);else return this.logger.warn(`[HeadlessAutomation] Unsupported AI provider [${m}]. No reply generated.`),null;if(_&&_.trim().length>0){let O=_.trim();return i.push({role:"model",content:O,timestamp:Date.now()}),this.lastReplyTimes.set(r,Date.now()),O}}catch(_){this.logger.warn(`[HeadlessAutomation] AI generation error with provider [${m}] (${_?.message}).`)}return this.aiConfig.fallbackMessage&&this.aiConfig.fallbackMessage.trim().length>0?(this.lastReplyTimes.set(r,Date.now()),this.aiConfig.fallbackMessage.trim()):null}getThreadHistory(t){let r=this.threadHistory.get(t);return r||(r=[],this.threadHistory.set(t,r)),r}async callGemini(t,r,o,n){let i=`https://generativelanguage.googleapis.com/v1beta/models/${this.aiConfig.model||"gemini-2.0-flash"}:generateContent?key=${o}`,s=r.map(y=>({role:y.role==="model"?"model":"user",parts:[{text:y.content}]}));(s.length===0||s[s.length-1].parts[0]?.text!==t)&&s.push({role:"user",parts:[{text:t}]});let c={contents:s,generationConfig:{temperature:this.aiConfig.temperature??.7,maxOutputTokens:this.aiConfig.maxTokens??300}},l=n||this.aiConfig.systemPrompt;l&&l.trim()&&(c.systemInstruction={parts:[{text:l.trim()}]});let p=new AbortController,h=setTimeout(()=>p.abort(),7e3);try{let y=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c),signal:p.signal});if(!y.ok){let M=await y.text();return this.logger.warn(`[HeadlessAutomation] Gemini API returned status ${y.status}: ${M.slice(0,200)}`),null}return(await y.json())?.candidates?.[0]?.content?.parts?.[0]?.text||null}finally{clearTimeout(h)}}async callOpenAiCompatible(t,r,o,n){let a=(this.aiConfig.baseUrl||(this.aiConfig.provider==="deepseek"?"https://api.deepseek.com/v1":"https://api.openai.com/v1")).replace(/\/+$/,"");a.includes("api.deepseek.com")&&!a.endsWith("/v1")?a+="/v1":(a.includes("11434")||a.includes("ollama"))&&(a=a.replace(/\/api$/,"").replace(/\/+$/,""),a.endsWith("/v1")||(a+="/v1"));let i=`${a}/chat/completions`,s=this.aiConfig.model||(this.aiConfig.provider==="deepseek"?"deepseek-chat":this.aiConfig.provider==="openai"?"gpt-4o-mini":"deepseek-chat"),c=n||this.aiConfig.systemPrompt,l=[...c&&c.trim()?[{role:"system",content:c.trim()}]:[],...r.map(b=>({role:b.role==="model"?"assistant":"user",content:b.content}))],p={"Content-Type":"application/json"};o&&(p.Authorization=`Bearer ${o}`);let h=new AbortController,y=setTimeout(()=>h.abort(),8e3);try{let b=await fetch(i,{method:"POST",headers:p,body:JSON.stringify({model:s,messages:l,temperature:this.aiConfig.temperature??.7,max_tokens:this.aiConfig.maxTokens??300}),signal:h.signal});if(!b.ok){let M=await b.text();return this.logger.warn(`[HeadlessAutomation] OpenAI-compatible API returned status ${b.status}: ${M.slice(0,200)}`),null}return(await b.json())?.choices?.[0]?.message?.content||null}finally{clearTimeout(y)}}async callAnthropic(t,r,o,n){let a="https://api.anthropic.com/v1/messages",i=this.aiConfig.model||"claude-3-5-haiku-20241022",s=r.map(p=>({role:p.role==="model"?"assistant":"user",content:p.content}));(s.length===0||s[s.length-1].content!==t)&&s.push({role:"user",content:t});let c=new AbortController,l=setTimeout(()=>c.abort(),8e3);try{let p=n||this.aiConfig.systemPrompt,h={model:i,messages:s,max_tokens:this.aiConfig.maxTokens??300,temperature:this.aiConfig.temperature??.7};p&&p.trim()&&(h.system=p.trim());let y=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":o,"anthropic-version":"2023-06-01"},body:JSON.stringify(h),signal:c.signal});if(!y.ok){let m=await y.text();return this.logger.warn(`[HeadlessAutomation] Anthropic API returned status ${y.status}: ${m.slice(0,200)}`),null}return(await y.json())?.content?.[0]?.text||null}finally{clearTimeout(l)}}clear(){this.campaigns.clear(),this.rules.clear(),this.threadHistory.clear(),this.lastReplyTimes.clear()}};var $ge=ke(go()),G6=class{logger;constructor(t){this.logger=t||(0,$ge.createLogger)("PushNotificationDispatcher")}async dispatchMessageAlert(t,r){let o=`${r.senderName} (${r.platform.toUpperCase()})`,n=r.content||"New multimedia message received";return this.sendNotification({recipientToken:t,title:o,body:n,data:{messageId:r.id,threadId:r.threadId,platform:r.platform,accountId:r.accountId}})}async sendNotification(t){return this.logger.debug(`Dispatching push notification to device token: ${t.recipientToken.slice(0,8)}...`),!0}};var kSt=ke(require("http")),CSt=require("url"),NSt=ke(go());var cP=ke(go());var ce=class extends Error{constructor(t,r){super(t),this.name="ZcaApiError",this.code=r||null}};var XI=class extends ce{constructor(){super("Missing `imageMetadataGetter`. Please provide it in the Zalo object options."),this.name="ZaloApiMissingImageMetadataGetter"}};var K6=class extends ce{constructor(t="Operation aborted"){super(t),this.name="ZaloApiLoginQRAborted"}};var H6=class extends ce{constructor(t="Login QR request declined"){super(t),this.name="ZaloApiLoginQRDeclined"}};var Jge;(function(e){e[e.Everyone=0]="Everyone",e[e.Stranger=1]="Stranger",e[e.SpecificFriends=2]="SpecificFriends",e[e.FriendsExcept=3]="FriendsExcept"})(Jge||(Jge={}));var V6;(function(e){e[e.Note=1]="Note",e[e.PinnedMessage=2]="PinnedMessage",e[e.Poll=3]="Poll"})(V6||(V6={}));var Xe;(function(e){e[e.User=0]="User",e[e.Group=1]="Group"})(Xe||(Xe={}));var $6;(function(e){e[e.Group=1]="Group",e[e.User=3]="User",e[e.Page=5]="Page"})($6||($6={}));var Xge;(function(e){e[e.Male=0]="Male",e[e.Female=1]="Female"})(Xge||(Xge={}));var Yl;(function(e){e[e.Small=120]="Small",e[e.Large=240]="Large"})(Yl||(Yl={}));var Yge;(function(e){e[e.ABBank=970425]="ABBank",e[e.ACB=970416]="ACB",e[e.Agribank=970405]="Agribank",e[e.BIDV=970418]="BIDV",e[e.BVBank=970454]="BVBank",e[e.BacA_Bank=970409]="BacA_Bank",e[e.BaoViet_Bank=970438]="BaoViet_Bank",e[e.CAKE=546034]="CAKE",e[e.CB_Bank=970444]="CB_Bank",e[e.CIMB_Bank=422589]="CIMB_Bank",e[e.Coop_Bank=970446]="Coop_Bank",e[e.DBS_Bank=796500]="DBS_Bank",e[e.DongA_Bank=970406]="DongA_Bank",e[e.Eximbank=970431]="Eximbank",e[e.GPBank=970408]="GPBank",e[e.HDBank=970437]="HDBank",e[e.HSBC=458761]="HSBC",e[e.HongLeong_Bank=970442]="HongLeong_Bank",e[e.IBK_HCM=970456]="IBK_HCM",e[e.IBK_HN=970455]="IBK_HN",e[e.Indovina_Bank=970434]="Indovina_Bank",e[e.KBank=668888]="KBank",e[e.KienlongBank=970452]="KienlongBank",e[e.Kookmin_Bank_HCM=970463]="Kookmin_Bank_HCM",e[e.Kookmin_Bank_HN=970462]="Kookmin_Bank_HN",e[e.LPBank=970449]="LPBank",e[e.MB_Bank=970422]="MB_Bank",e[e.MSB=970426]="MSB",e[e.NCB=970419]="NCB",e[e.Nam_A_Bank=970428]="Nam_A_Bank",e[e.NongHyup_Bank=801011]="NongHyup_Bank",e[e.OCB=970448]="OCB",e[e.Ocean_Bank=970414]="Ocean_Bank",e[e.PGBank=970430]="PGBank",e[e.PVcomBank=970412]="PVcomBank",e[e.Public_Bank_Vietnam=970439]="Public_Bank_Vietnam",e[e.SCB=970429]="SCB",e[e.SHB=970443]="SHB",e[e.Sacombank=970403]="Sacombank",e[e.Saigon_Bank=970400]="Saigon_Bank",e[e.SeABank=970440]="SeABank",e[e.Shinhan_Bank=970424]="Shinhan_Bank",e[e.Standard_Chartered_Vietnam=970410]="Standard_Chartered_Vietnam",e[e.TNEX=9704261]="TNEX",e[e.TPBank=970423]="TPBank",e[e.Techcombank=970407]="Techcombank",e[e.Timo=963388]="Timo",e[e.UBank=546035]="UBank",e[e.United_Overseas_Bank_Vietnam=970458]="United_Overseas_Bank_Vietnam",e[e.VIB=970441]="VIB",e[e.VPBank=970432]="VPBank",e[e.VRB=970421]="VRB",e[e.VietABank=970427]="VietABank",e[e.VietBank=970433]="VietBank",e[e.Vietcombank=970436]="Vietcombank",e[e.VietinBank=970415]="VietinBank",e[e.Woori_Bank=970457]="Woori_Bank"})(Yge||(Yge={}));var J6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.deliveredUids[0],this.isSelf=!1}},X6=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.groupId,this.isSelf=r.deliveredUids.includes(t)}};var Er;(function(e){e[e.ADD=0]="ADD",e[e.REMOVE=1]="REMOVE",e[e.REQUEST=2]="REQUEST",e[e.UNDO_REQUEST=3]="UNDO_REQUEST",e[e.REJECT_REQUEST=4]="REJECT_REQUEST",e[e.SEEN_FRIEND_REQUEST=5]="SEEN_FRIEND_REQUEST",e[e.BLOCK=6]="BLOCK",e[e.UNBLOCK=7]="UNBLOCK",e[e.BLOCK_CALL=8]="BLOCK_CALL",e[e.UNBLOCK_CALL=9]="UNBLOCK_CALL",e[e.PIN_UNPIN=10]="PIN_UNPIN",e[e.PIN_CREATE=11]="PIN_CREATE",e[e.UNKNOWN=12]="UNKNOWN"})(Er||(Er={}));function Qge(e,t,r){if(r==Er.ADD||r==Er.REMOVE||r==Er.BLOCK||r==Er.UNBLOCK||r==Er.BLOCK_CALL||r==Er.UNBLOCK_CALL)return{type:r,data:t,threadId:t,isSelf:![Er.ADD,Er.REMOVE].includes(r)};if(r==Er.REJECT_REQUEST||r==Er.UNDO_REQUEST){let o=t.toUid;return{type:r,data:t,threadId:o,isSelf:t.fromUid==e}}else if(r==Er.REQUEST){let o=t.toUid;return{type:r,data:t,threadId:o,isSelf:t.fromUid==e}}else{if(r==Er.SEEN_FRIEND_REQUEST)return{type:r,data:t,threadId:e,isSelf:!0};if(r==Er.PIN_CREATE){let o=t.conversationId;return{type:r,data:t,threadId:o,isSelf:t.actorId==e}}else if(r==Er.PIN_UNPIN){let o=t.conversationId;return{type:r,data:t,threadId:o,isSelf:t.actorId==e}}else return{type:Er.UNKNOWN,data:JSON.stringify(t),threadId:"",isSelf:!1}}}var Zge;(function(e){e[e.Note=0]="Note",e[e.Message=2]="Message",e[e.Poll=3]="Poll"})(Zge||(Zge={}));var e2e;(function(e){e[e.Group=1]="Group",e[e.Community=2]="Community"})(e2e||(e2e={}));var Gi;(function(e){e.JOIN_REQUEST="join_request",e.JOIN="join",e.LEAVE="leave",e.REMOVE_MEMBER="remove_member",e.BLOCK_MEMBER="block_member",e.UPDATE_SETTING="update_setting",e.UPDATE="update",e.NEW_LINK="new_link",e.ADD_ADMIN="add_admin",e.REMOVE_ADMIN="remove_admin",e.NEW_PIN_TOPIC="new_pin_topic",e.UPDATE_PIN_TOPIC="update_pin_topic",e.REORDER_PIN_TOPIC="reorder_pin_topic",e.UPDATE_BOARD="update_board",e.REMOVE_BOARD="remove_board",e.UPDATE_TOPIC="update_topic",e.UNPIN_TOPIC="unpin_topic",e.REMOVE_TOPIC="remove_topic",e.ACCEPT_REMIND="accept_remind",e.REJECT_REMIND="reject_remind",e.REMIND_TOPIC="remind_topic",e.UPDATE_AVATAR="update_avatar",e.UNKNOWN="unknown"})(Gi||(Gi={}));function t2e(e,t,r,o){var n;let a="group_id"in t?t.group_id:t.groupId;if(r==Gi.JOIN_REQUEST)return{type:r,act:o,data:t,threadId:a,isSelf:!1};if(r==Gi.NEW_PIN_TOPIC||r==Gi.UNPIN_TOPIC||r==Gi.UPDATE_PIN_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.actorId==e};if(r==Gi.REORDER_PIN_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.actorId==e};if(r==Gi.UPDATE_BOARD||r==Gi.REMOVE_BOARD)return{type:r,act:o,data:t,threadId:a,isSelf:t.sourceId==e};if(r==Gi.ACCEPT_REMIND||r==Gi.REJECT_REMIND)return{type:r,act:o,data:t,threadId:a,isSelf:t.updateMembers.some(i=>i==e)};if(r==Gi.REMIND_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.creatorId==e};{let i=t;return{type:r,act:o,data:i,threadId:a,isSelf:((n=i.updateMembers)===null||n===void 0?void 0:n.some(s=>s.id==e))||i.sourceId==e}}}var YI=class{constructor(t,r){this.type=Xe.User,this.data=r,this.threadId=r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t),r.quote&&(r.quote.ownerId=String(r.quote.ownerId))}},UO=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.idTo,this.isSelf=r.uidFrom=="0",r.uidFrom=="0"&&(r.uidFrom=t),r.quote&&(r.quote.ownerId=String(r.quote.ownerId))}};var gn;(function(e){e.HEART="/-heart",e.LIKE="/-strong",e.HAHA=":>",e.WOW=":o",e.CRY=":-((",e.ANGRY=":-h",e.KISS=":-*",e.TEARS_OF_JOY=":')",e.SHIT="/-shit",e.ROSE="/-rose",e.BROKEN_HEART="/-break",e.DISLIKE="/-weak",e.LOVE=";xx",e.CONFUSED=";-/",e.WINK=";-)",e.FADE="/-fade",e.SUN="/-li",e.BIRTHDAY="/-bd",e.BOMB="/-bome",e.OK="/-ok",e.PEACE="/-v",e.THANKS="/-thanks",e.PUNCH="/-punch",e.SHARE="/-share",e.PRAY="_()_",e.NO="/-no",e.BAD="/-bad",e.LOVE_YOU="/-loveu",e.SAD="--b",e.VERY_SAD=":((",e.COOL="x-)",e.NERD="8-)",e.BIG_SMILE=";-d",e.SUNGLASSES="b-)",e.NEUTRAL=":--|",e.SAD_FACE="p-(",e.BYE=":-bye",e.SLEEPY="|-)",e.WIPE=":wipe",e.DIG=":-dig",e.ANGUISH="&-(",e.HANDCLAP=":handclap",e.ANGRY_FACE=">-|",e.F_CHAIR=":-f",e.L_CHAIR=":-l",e.R_CHAIR=":-r",e.SILENT=";-x",e.SURPRISE=":-o",e.EMBARRASSED=";-s",e.AFRAID=";-a",e.SAD2=":-<",e.BIG_LAUGH=":))",e.RICH="$-)",e.BEER="/-beer",e.NONE=""})(gn||(gn={}));var RS=class{constructor(t,r,o){this.data=r,this.threadId=o||r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",this.isGroup=o,r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t)}};var QI;(function(e){e[e.None=0]="None",e[e.Daily=1]="Daily",e[e.Weekly=2]="Weekly",e[e.Monthly=3]="Monthly"})(QI||(QI={}));var Y6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.idTo,this.isSelf=!1}},Q6=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.groupId,this.isSelf=r.seenUids.includes(t)}};var Z6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.uid,this.isSelf=!1}},e5=class{constructor(t){this.type=Xe.Group,this.data=t,this.threadId=t.gid,this.isSelf=!1}};var ZI=class{constructor(t,r,o){this.data=r,this.threadId=o||r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",this.isGroup=o,r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t)}};var Fs;(function(e){e[e.Other=0]="Other",e[e.RealEstate=1]="RealEstate",e[e.TechnologyAndDevices=2]="TechnologyAndDevices",e[e.TravelAndHospitality=3]="TravelAndHospitality",e[e.EducationAndTraining=4]="EducationAndTraining",e[e.ShoppingAndRetail=5]="ShoppingAndRetail",e[e.CosmeticsAndBeauty=6]="CosmeticsAndBeauty",e[e.RestaurantAndCafe=7]="RestaurantAndCafe",e[e.AutoAndMotorbike=8]="AutoAndMotorbike",e[e.FashionAndApparel=9]="FashionAndApparel",e[e.FoodAndBeverage=10]="FoodAndBeverage",e[e.MediaAndEntertainment=11]="MediaAndEntertainment",e[e.InternalCommunications=12]="InternalCommunications",e[e.Transportation=13]="Transportation",e[e.Telecommunications=14]="Telecommunications"})(Fs||(Fs={}));var cKn={[Fs.Other]:"D\u1ECBch v\u1EE5 kh\xE1c (Kh\xF4ng hi\u1EC3n th\u1ECB)",[Fs.RealEstate]:"B\u1EA5t \u0111\u1ED9ng s\u1EA3n",[Fs.TechnologyAndDevices]:"C\xF4ng ngh\u1EC7 & Thi\u1EBFt b\u1ECB",[Fs.TravelAndHospitality]:"Du l\u1ECBch & L\u01B0u tr\xFA",[Fs.EducationAndTraining]:"Gi\xE1o d\u1EE5c & \u0110\xE0o t\u1EA1o",[Fs.ShoppingAndRetail]:"Mua s\u1EAFm & B\xE1n l\u1EBB",[Fs.CosmeticsAndBeauty]:"M\u1EF9 ph\u1EA9m & L\xE0m \u0111\u1EB9p",[Fs.RestaurantAndCafe]:"Nh\xE0 h\xE0ng & Qu\xE1n",[Fs.AutoAndMotorbike]:"\xD4 t\xF4 & Xe m\xE1y",[Fs.FashionAndApparel]:"Th\u1EDDi trang & May m\u1EB7c",[Fs.FoodAndBeverage]:"Th\u1EF1c ph\u1EA9m & \u0110\u1ED3 u\u1ED1ng",[Fs.MediaAndEntertainment]:"Truy\u1EC1n th\xF4ng & Gi\u1EA3i tr\xED",[Fs.InternalCommunications]:"Truy\u1EC1n th\xF4ng n\u1ED9i b\u1ED9",[Fs.Transportation]:"V\u1EADn t\u1EA3i",[Fs.Telecommunications]:"Vi\u1EC5n th\xF4ng"};var C_e=ke(CS(),1),N_e=require("node:fs/promises");var qr=ke(BOe(),1),Ew=ke(require("node:crypto"),1),kJ=ke(require("node:fs"),1),dD=ke(require("node:path"),1);function US(e){let t=e.length;for(;--t>=0;)e[t]=0}var KPt=0,EMe=1,HPt=2,VPt=3,$Pt=258,AJ=29,Mw=256,fw=Mw+1+AJ,LS=30,SJ=19,TMe=2*fw+1,KO=15,Z$=16,JPt=7,EJ=256,vMe=16,IMe=17,wMe=18,dJ=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),eD=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),XPt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),PMe=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),YPt=512,zy=new Array((fw+2)*2);US(zy);var lw=new Array(LS*2);US(lw);var dw=new Array(YPt);US(dw);var hw=new Array($Pt-VPt+1);US(hw);var TJ=new Array(AJ);US(TJ);var tD=new Array(LS);US(tD);function eJ(e,t,r,o,n){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=o,this.max_length=n,this.has_stree=e&&e.length}var zMe,RMe,xMe;function tJ(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}var kMe=e=>e<256?dw[e]:dw[256+(e>>>7)],yw=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},Ql=(e,t,r)=>{e.bi_valid>Z$-r?(e.bi_buf|=t<<e.bi_valid&65535,yw(e,e.bi_buf),e.bi_buf=t>>Z$-e.bi_valid,e.bi_valid+=r-Z$):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)},ud=(e,t,r)=>{Ql(e,r[t*2],r[t*2+1])},CMe=(e,t)=>{let r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1},QPt=e=>{e.bi_valid===16?(yw(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},ZPt=(e,t)=>{let r=t.dyn_tree,o=t.max_code,n=t.stat_desc.static_tree,a=t.stat_desc.has_stree,i=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,p,h,y,b,m,M=0;for(y=0;y<=KO;y++)e.bl_count[y]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<TMe;l++)p=e.heap[l],y=r[r[p*2+1]*2+1]+1,y>c&&(y=c,M++),r[p*2+1]=y,!(p>o)&&(e.bl_count[y]++,b=0,p>=s&&(b=i[p-s]),m=r[p*2],e.opt_len+=m*(y+b),a&&(e.static_len+=m*(n[p*2+1]+b)));if(M!==0){do{for(y=c-1;e.bl_count[y]===0;)y--;e.bl_count[y]--,e.bl_count[y+1]+=2,e.bl_count[c]--,M-=2}while(M>0);for(y=c;y!==0;y--)for(p=e.bl_count[y];p!==0;)h=e.heap[--l],!(h>o)&&(r[h*2+1]!==y&&(e.opt_len+=(y-r[h*2+1])*r[h*2],r[h*2+1]=y),p--)}},NMe=(e,t,r)=>{let o=new Array(KO+1),n=0,a,i;for(a=1;a<=KO;a++)n=n+r[a-1]<<1,o[a]=n;for(i=0;i<=t;i++){let s=e[i*2+1];s!==0&&(e[i*2]=CMe(o[s]++,s))}},ezt=()=>{let e,t,r,o,n,a=new Array(KO+1);for(r=0,o=0;o<AJ-1;o++)for(TJ[o]=r,e=0;e<1<<dJ[o];e++)hw[r++]=o;for(hw[r-1]=o,n=0,o=0;o<16;o++)for(tD[o]=n,e=0;e<1<<eD[o];e++)dw[n++]=o;for(n>>=7;o<LS;o++)for(tD[o]=n<<7,e=0;e<1<<eD[o]-7;e++)dw[256+n++]=o;for(t=0;t<=KO;t++)a[t]=0;for(e=0;e<=143;)zy[e*2+1]=8,e++,a[8]++;for(;e<=255;)zy[e*2+1]=9,e++,a[9]++;for(;e<=279;)zy[e*2+1]=7,e++,a[7]++;for(;e<=287;)zy[e*2+1]=8,e++,a[8]++;for(NMe(zy,fw+1,a),e=0;e<LS;e++)lw[e*2+1]=5,lw[e*2]=CMe(e,5);zMe=new eJ(zy,dJ,Mw+1,fw,KO),RMe=new eJ(lw,eD,0,LS,KO),xMe=new eJ(new Array(0),XPt,0,SJ,JPt)},DMe=e=>{let t;for(t=0;t<fw;t++)e.dyn_ltree[t*2]=0;for(t=0;t<LS;t++)e.dyn_dtree[t*2]=0;for(t=0;t<SJ;t++)e.bl_tree[t*2]=0;e.dyn_ltree[EJ*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},LMe=e=>{e.bi_valid>8?yw(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},UOe=(e,t,r,o)=>{let n=t*2,a=r*2;return e[n]<e[a]||e[n]===e[a]&&o[t]<=o[r]},nJ=(e,t,r)=>{let o=e.heap[r],n=r<<1;for(;n<=e.heap_len&&(n<e.heap_len&&UOe(t,e.heap[n+1],e.heap[n],e.depth)&&n++,!UOe(t,o,e.heap[n],e.depth));)e.heap[r]=e.heap[n],r=n,n<<=1;e.heap[r]=o},WOe=(e,t,r)=>{let o,n,a=0,i,s;if(e.sym_next!==0)do o=e.pending_buf[e.sym_buf+a++]&255,o+=(e.pending_buf[e.sym_buf+a++]&255)<<8,n=e.pending_buf[e.sym_buf+a++],o===0?ud(e,n,t):(i=hw[n],ud(e,i+Mw+1,t),s=dJ[i],s!==0&&(n-=TJ[i],Ql(e,n,s)),o--,i=kMe(o),ud(e,i,r),s=eD[i],s!==0&&(o-=tD[i],Ql(e,o,s)));while(a<e.sym_next);ud(e,EJ,t)},hJ=(e,t)=>{let r=t.dyn_tree,o=t.stat_desc.static_tree,n=t.stat_desc.has_stree,a=t.stat_desc.elems,i,s,c=-1,l;for(e.heap_len=0,e.heap_max=TMe,i=0;i<a;i++)r[i*2]!==0?(e.heap[++e.heap_len]=c=i,e.depth[i]=0):r[i*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,n&&(e.static_len-=o[l*2+1]);for(t.max_code=c,i=e.heap_len>>1;i>=1;i--)nJ(e,r,i);l=a;do i=e.heap[1],e.heap[1]=e.heap[e.heap_len--],nJ(e,r,1),s=e.heap[1],e.heap[--e.heap_max]=i,e.heap[--e.heap_max]=s,r[l*2]=r[i*2]+r[s*2],e.depth[l]=(e.depth[i]>=e.depth[s]?e.depth[i]:e.depth[s])+1,r[i*2+1]=r[s*2+1]=l,e.heap[1]=l++,nJ(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],ZPt(e,t),NMe(r,c,e.bl_count)},FOe=(e,t,r)=>{let o,n=-1,a,i=t[1],s=0,c=7,l=4;for(i===0&&(c=138,l=3),t[(r+1)*2+1]=65535,o=0;o<=r;o++)a=i,i=t[(o+1)*2+1],!(++s<c&&a===i)&&(s<l?e.bl_tree[a*2]+=s:a!==0?(a!==n&&e.bl_tree[a*2]++,e.bl_tree[vMe*2]++):s<=10?e.bl_tree[IMe*2]++:e.bl_tree[wMe*2]++,s=0,n=a,i===0?(c=138,l=3):a===i?(c=6,l=3):(c=7,l=4))},jOe=(e,t,r)=>{let o,n=-1,a,i=t[1],s=0,c=7,l=4;for(i===0&&(c=138,l=3),o=0;o<=r;o++)if(a=i,i=t[(o+1)*2+1],!(++s<c&&a===i)){if(s<l)do ud(e,a,e.bl_tree);while(--s!==0);else a!==0?(a!==n&&(ud(e,a,e.bl_tree),s--),ud(e,vMe,e.bl_tree),Ql(e,s-3,2)):s<=10?(ud(e,IMe,e.bl_tree),Ql(e,s-3,3)):(ud(e,wMe,e.bl_tree),Ql(e,s-11,7));s=0,n=a,i===0?(c=138,l=3):a===i?(c=6,l=3):(c=7,l=4)}},tzt=e=>{let t;for(FOe(e,e.dyn_ltree,e.l_desc.max_code),FOe(e,e.dyn_dtree,e.d_desc.max_code),hJ(e,e.bl_desc),t=SJ-1;t>=3&&e.bl_tree[PMe[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},nzt=(e,t,r,o)=>{let n;for(Ql(e,t-257,5),Ql(e,r-1,5),Ql(e,o-4,4),n=0;n<o;n++)Ql(e,e.bl_tree[PMe[n]*2+1],3);jOe(e,e.dyn_ltree,t-1),jOe(e,e.dyn_dtree,r-1)},izt=e=>{let t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(r=32;r<Mw;r++)if(e.dyn_ltree[r*2]!==0)return 1;return 0},GOe=!1,rzt=e=>{GOe||(ezt(),GOe=!0),e.l_desc=new tJ(e.dyn_ltree,zMe),e.d_desc=new tJ(e.dyn_dtree,RMe),e.bl_desc=new tJ(e.bl_tree,xMe),e.bi_buf=0,e.bi_valid=0,DMe(e)},qMe=(e,t,r,o)=>{Ql(e,(KPt<<1)+(o?1:0),3),LMe(e),yw(e,r),yw(e,~r),r&&e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r},ozt=e=>{Ql(e,EMe<<1,3),ud(e,EJ,zy),QPt(e)},azt=(e,t,r,o)=>{let n,a,i=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=izt(e)),hJ(e,e.l_desc),hJ(e,e.d_desc),i=tzt(e),n=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&t!==-1?qMe(e,t,r,o):e.strategy===4||a===n?(Ql(e,(EMe<<1)+(o?1:0),3),WOe(e,zy,lw)):(Ql(e,(HPt<<1)+(o?1:0),3),nzt(e,e.l_desc.max_code+1,e.d_desc.max_code+1,i+1),WOe(e,e.dyn_ltree,e.dyn_dtree)),DMe(e),o&&LMe(e)},szt=(e,t,r)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=r,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(hw[r]+Mw+1)*2]++,e.dyn_dtree[kMe(t)*2]++),e.sym_next===e.sym_end),czt=rzt,lzt=qMe,uzt=azt,pzt=szt,fzt=ozt,dzt={_tr_init:czt,_tr_stored_block:lzt,_tr_flush_block:uzt,_tr_tally:pzt,_tr_align:fzt},hzt=(e,t,r,o)=>{let n=e&65535|0,a=e>>>16&65535|0,i=0;for(;r!==0;){i=r>2e3?2e3:r,r-=i;do n=n+t[o++]|0,a=a+n|0;while(--i);n%=65521,a%=65521}return n|a<<16|0},bw=hzt,yzt=()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t},bzt=new Uint32Array(yzt()),mzt=(e,t,r,o)=>{let n=bzt,a=o+r;e^=-1;for(let i=o;i<a;i++)e=e>>>8^n[(e^t[i])&255];return e^-1},ys=mzt,$O={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},YO={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:gzt,_tr_stored_block:yJ,_tr_flush_block:Ozt,_tr_tally:Gm,_tr_align:Mzt}=dzt,{Z_NO_FLUSH:Km,Z_PARTIAL_FLUSH:_zt,Z_FULL_FLUSH:Azt,Z_FINISH:c1,Z_BLOCK:KOe,Z_OK:Gs,Z_STREAM_END:HOe,Z_STREAM_ERROR:pd,Z_DATA_ERROR:Szt,Z_BUF_ERROR:iJ,Z_DEFAULT_COMPRESSION:Ezt,Z_FILTERED:Tzt,Z_HUFFMAN_ONLY:J5,Z_RLE:vzt,Z_FIXED:Izt,Z_DEFAULT_STRATEGY:wzt,Z_UNKNOWN:Pzt,Z_DEFLATED:rD}=YO,zzt=9,Rzt=15,xzt=8,kzt=29,Czt=256,bJ=Czt+1+kzt,Nzt=30,Dzt=19,Lzt=2*bJ+1,qzt=15,er=3,jm=258,fd=jm+er+1,Bzt=32,qS=42,vJ=57,mJ=69,gJ=73,OJ=91,MJ=103,HO=113,sw=666,Yc=1,WS=2,JO=3,FS=4,Uzt=3,VO=(e,t)=>(e.msg=$O[t],t),VOe=e=>e*2-(e>4?9:0),Fm=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Wzt=e=>{let t,r,o,n=e.w_size;t=e.hash_size,o=t;do r=e.head[--o],e.head[o]=r>=n?r-n:0;while(--t);t=n,o=t;do r=e.prev[--o],e.prev[o]=r>=n?r-n:0;while(--t)},Fzt=(e,t,r)=>(t<<e.hash_shift^r)&e.hash_mask,Hm=Fzt,a0=e=>{let t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))},s0=(e,t)=>{Ozt(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,a0(e.strm)},Tr=(e,t)=>{e.pending_buf[e.pending++]=t},aw=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},_J=(e,t,r,o)=>{let n=e.avail_in;return n>o&&(n=o),n===0?0:(e.avail_in-=n,t.set(e.input.subarray(e.next_in,e.next_in+n),r),e.state.wrap===1?e.adler=bw(e.adler,t,n,r):e.state.wrap===2&&(e.adler=ys(e.adler,t,n,r)),e.next_in+=n,e.total_in+=n,n)},BMe=(e,t)=>{let r=e.max_chain_length,o=e.strstart,n,a,i=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-fd?e.strstart-(e.w_size-fd):0,l=e.window,p=e.w_mask,h=e.prev,y=e.strstart+jm,b=l[o+i-1],m=l[o+i];e.prev_length>=e.good_match&&(r>>=2),s>e.lookahead&&(s=e.lookahead);do if(n=t,!(l[n+i]!==m||l[n+i-1]!==b||l[n]!==l[o]||l[++n]!==l[o+1])){o+=2,n++;do;while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&o<y);if(a=jm-(y-o),o=y-jm,a>i){if(e.match_start=t,i=a,a>=s)break;b=l[o+i-1],m=l[o+i]}}while((t=h[t&p])>c&&--r!==0);return i<=e.lookahead?i:e.lookahead},BS=e=>{let t=e.w_size,r,o,n;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-fd)&&(e.window.set(e.window.subarray(t,t+t-o),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Wzt(e),o+=t),e.strm.avail_in===0)break;if(r=_J(e.strm,e.window,e.strstart+e.lookahead,o),e.lookahead+=r,e.lookahead+e.insert>=er)for(n=e.strstart-e.insert,e.ins_h=e.window[n],e.ins_h=Hm(e,e.ins_h,e.window[n+1]);e.insert&&(e.ins_h=Hm(e,e.ins_h,e.window[n+er-1]),e.prev[n&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=n,n++,e.insert--,!(e.lookahead+e.insert<er)););}while(e.lookahead<fd&&e.strm.avail_in!==0)},UMe=(e,t)=>{let r=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o,n,a,i=0,s=e.strm.avail_in;do{if(o=65535,a=e.bi_valid+42>>3,e.strm.avail_out<a||(a=e.strm.avail_out-a,n=e.strstart-e.block_start,o>n+e.strm.avail_in&&(o=n+e.strm.avail_in),o>a&&(o=a),o<r&&(o===0&&t!==c1||t===Km||o!==n+e.strm.avail_in)))break;i=t===c1&&o===n+e.strm.avail_in?1:0,yJ(e,0,0,i),e.pending_buf[e.pending-4]=o,e.pending_buf[e.pending-3]=o>>8,e.pending_buf[e.pending-2]=~o,e.pending_buf[e.pending-1]=~o>>8,a0(e.strm),n&&(n>o&&(n=o),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+n),e.strm.next_out),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n,e.block_start+=n,o-=n),o&&(_J(e.strm,e.strm.output,e.strm.next_out,o),e.strm.next_out+=o,e.strm.avail_out-=o,e.strm.total_out+=o)}while(i===0);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),i?FS:t!==Km&&t!==c1&&e.strm.avail_in===0&&e.strstart===e.block_start?WS:(a=e.window_size-e.strstart,e.strm.avail_in>a&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,a+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),a>e.strm.avail_in&&(a=e.strm.avail_in),a&&(_J(e.strm,e.window,e.strstart,a),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.high_water<e.strstart&&(e.high_water=e.strstart),a=e.bi_valid+42>>3,a=e.pending_buf_size-a>65535?65535:e.pending_buf_size-a,r=a>e.w_size?e.w_size:a,n=e.strstart-e.block_start,(n>=r||(n||t===c1)&&t!==Km&&e.strm.avail_in===0&&n<=a)&&(o=n>a?a:n,i=t===c1&&e.strm.avail_in===0&&o===n?1:0,yJ(e,e.block_start,o,i),e.block_start+=o,a0(e.strm)),i?JO:Yc)},rJ=(e,t)=>{let r,o;for(;;){if(e.lookahead<fd){if(BS(e),e.lookahead<fd&&t===Km)return Yc;if(e.lookahead===0)break}if(r=0,e.lookahead>=er&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-fd&&(e.match_length=BMe(e,r)),e.match_length>=er)if(o=Gm(e,e.strstart-e.match_start,e.match_length-er),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=er){e.match_length--;do e.strstart++,e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+1]);else o=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(o&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=e.strstart<er-1?e.strstart:er-1,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},NS=(e,t)=>{let r,o,n;for(;;){if(e.lookahead<fd){if(BS(e),e.lookahead<fd&&t===Km)return Yc;if(e.lookahead===0)break}if(r=0,e.lookahead>=er&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=er-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-fd&&(e.match_length=BMe(e,r),e.match_length<=5&&(e.strategy===Tzt||e.match_length===er&&e.strstart-e.match_start>4096)&&(e.match_length=er-1)),e.prev_length>=er&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-er,o=Gm(e,e.strstart-1-e.prev_match,e.prev_length-er),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=n&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=er-1,e.strstart++,o&&(s0(e,!1),e.strm.avail_out===0))return Yc}else if(e.match_available){if(o=Gm(e,0,e.window[e.strstart-1]),o&&s0(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return Yc}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(o=Gm(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<er-1?e.strstart:er-1,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},jzt=(e,t)=>{let r,o,n,a,i=e.window;for(;;){if(e.lookahead<=jm){if(BS(e),e.lookahead<=jm&&t===Km)return Yc;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=er&&e.strstart>0&&(n=e.strstart-1,o=i[n],o===i[++n]&&o===i[++n]&&o===i[++n])){a=e.strstart+jm;do;while(o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&n<a);e.match_length=jm-(a-n),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=er?(r=Gm(e,1,e.match_length-er),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=0,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},Gzt=(e,t)=>{let r;for(;;){if(e.lookahead===0&&(BS(e),e.lookahead===0)){if(t===Km)return Yc;break}if(e.match_length=0,r=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=0,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS};function ld(e,t,r,o,n){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=o,this.func=n}var cw=[new ld(0,0,0,0,UMe),new ld(4,4,8,4,rJ),new ld(4,5,16,8,rJ),new ld(4,6,32,32,rJ),new ld(4,4,16,16,NS),new ld(8,16,32,32,NS),new ld(8,16,128,128,NS),new ld(8,32,128,256,NS),new ld(32,128,258,1024,NS),new ld(32,258,258,4096,NS)],Kzt=e=>{e.window_size=2*e.w_size,Fm(e.head),e.max_lazy_match=cw[e.level].max_lazy,e.good_match=cw[e.level].good_length,e.nice_match=cw[e.level].nice_length,e.max_chain_length=cw[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=er-1,e.match_available=0,e.ins_h=0};function Hzt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=rD,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(Lzt*2),this.dyn_dtree=new Uint16Array((2*Nzt+1)*2),this.bl_tree=new Uint16Array((2*Dzt+1)*2),Fm(this.dyn_ltree),Fm(this.dyn_dtree),Fm(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(qzt+1),this.heap=new Uint16Array(2*bJ+1),Fm(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*bJ+1),Fm(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var _w=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.status!==qS&&t.status!==vJ&&t.status!==mJ&&t.status!==gJ&&t.status!==OJ&&t.status!==MJ&&t.status!==HO&&t.status!==sw?1:0},WMe=e=>{if(_w(e))return VO(e,pd);e.total_in=e.total_out=0,e.data_type=Pzt;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?vJ:t.wrap?qS:HO,e.adler=t.wrap===2?0:1,t.last_flush=-2,gzt(t),Gs},FMe=e=>{let t=WMe(e);return t===Gs&&Kzt(e.state),t},Vzt=(e,t)=>_w(e)||e.state.wrap!==2?pd:(e.state.gzhead=t,Gs),jMe=(e,t,r,o,n,a)=>{if(!e)return pd;let i=1;if(t===Ezt&&(t=6),o<0?(i=0,o=-o):o>15&&(i=2,o-=16),n<1||n>zzt||r!==rD||o<8||o>15||t<0||t>9||a<0||a>Izt||o===8&&i!==1)return VO(e,pd);o===8&&(o=9);let s=new Hzt;return e.state=s,s.strm=e,s.status=qS,s.wrap=i,s.gzhead=null,s.w_bits=o,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=n+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+er-1)/er),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<n+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=t,s.strategy=a,s.method=r,FMe(e)},$zt=(e,t)=>jMe(e,t,rD,Rzt,xzt,wzt),Jzt=(e,t)=>{if(_w(e)||t>KOe||t<0)return e?VO(e,pd):pd;let r=e.state;if(!e.output||e.avail_in!==0&&!e.input||r.status===sw&&t!==c1)return VO(e,e.avail_out===0?iJ:pd);let o=r.last_flush;if(r.last_flush=t,r.pending!==0){if(a0(e),e.avail_out===0)return r.last_flush=-1,Gs}else if(e.avail_in===0&&VOe(t)<=VOe(o)&&t!==c1)return VO(e,iJ);if(r.status===sw&&e.avail_in!==0)return VO(e,iJ);if(r.status===qS&&r.wrap===0&&(r.status=HO),r.status===qS){let n=rD+(r.w_bits-8<<4)<<8,a=-1;if(r.strategy>=J5||r.level<2?a=0:r.level<6?a=1:r.level===6?a=2:a=3,n|=a<<6,r.strstart!==0&&(n|=Bzt),n+=31-n%31,aw(r,n),r.strstart!==0&&(aw(r,e.adler>>>16),aw(r,e.adler&65535)),e.adler=1,r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(r.status===vJ){if(e.adler=0,Tr(r,31),Tr(r,139),Tr(r,8),r.gzhead)Tr(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Tr(r,r.gzhead.time&255),Tr(r,r.gzhead.time>>8&255),Tr(r,r.gzhead.time>>16&255),Tr(r,r.gzhead.time>>24&255),Tr(r,r.level===9?2:r.strategy>=J5||r.level<2?4:0),Tr(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(Tr(r,r.gzhead.extra.length&255),Tr(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=ys(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=mJ;else if(Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,r.level===9?2:r.strategy>=J5||r.level<2?4:0),Tr(r,Uzt),r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(r.status===mJ){if(r.gzhead.extra){let n=r.pending,a=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+a>r.pending_buf_size;){let s=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex+=s,a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0,a-=s}let i=new Uint8Array(r.gzhead.extra);r.pending_buf.set(i.subarray(r.gzindex,r.gzindex+a),r.pending),r.pending+=a,r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex=0}r.status=gJ}if(r.status===gJ){if(r.gzhead.name){let n=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0}r.gzindex<r.gzhead.name.length?a=r.gzhead.name.charCodeAt(r.gzindex++)&255:a=0,Tr(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex=0}r.status=OJ}if(r.status===OJ){if(r.gzhead.comment){let n=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0}r.gzindex<r.gzhead.comment.length?a=r.gzhead.comment.charCodeAt(r.gzindex++)&255:a=0,Tr(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n))}r.status=MJ}if(r.status===MJ){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(a0(e),r.pending!==0))return r.last_flush=-1,Gs;Tr(r,e.adler&255),Tr(r,e.adler>>8&255),e.adler=0}if(r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(e.avail_in!==0||r.lookahead!==0||t!==Km&&r.status!==sw){let n=r.level===0?UMe(r,t):r.strategy===J5?Gzt(r,t):r.strategy===vzt?jzt(r,t):cw[r.level].func(r,t);if((n===JO||n===FS)&&(r.status=sw),n===Yc||n===JO)return e.avail_out===0&&(r.last_flush=-1),Gs;if(n===WS&&(t===_zt?Mzt(r):t!==KOe&&(yJ(r,0,0,!1),t===Azt&&(Fm(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),a0(e),e.avail_out===0))return r.last_flush=-1,Gs}return t!==c1?Gs:r.wrap<=0?HOe:(r.wrap===2?(Tr(r,e.adler&255),Tr(r,e.adler>>8&255),Tr(r,e.adler>>16&255),Tr(r,e.adler>>24&255),Tr(r,e.total_in&255),Tr(r,e.total_in>>8&255),Tr(r,e.total_in>>16&255),Tr(r,e.total_in>>24&255)):(aw(r,e.adler>>>16),aw(r,e.adler&65535)),a0(e),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?Gs:HOe)},Xzt=e=>{if(_w(e))return pd;let t=e.state.status;return e.state=null,t===HO?VO(e,Szt):Gs},Yzt=(e,t)=>{let r=t.length;if(_w(e))return pd;let o=e.state,n=o.wrap;if(n===2||n===1&&o.status!==qS||o.lookahead)return pd;if(n===1&&(e.adler=bw(e.adler,t,r,0)),o.wrap=0,r>=o.w_size){n===0&&(Fm(o.head),o.strstart=0,o.block_start=0,o.insert=0);let c=new Uint8Array(o.w_size);c.set(t.subarray(r-o.w_size,r),0),t=c,r=o.w_size}let a=e.avail_in,i=e.next_in,s=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,BS(o);o.lookahead>=er;){let c=o.strstart,l=o.lookahead-(er-1);do o.ins_h=Hm(o,o.ins_h,o.window[c+er-1]),o.prev[c&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=c,c++;while(--l);o.strstart=c,o.lookahead=er-1,BS(o)}return o.strstart+=o.lookahead,o.block_start=o.strstart,o.insert=o.lookahead,o.lookahead=0,o.match_length=o.prev_length=er-1,o.match_available=0,e.next_in=i,e.input=s,e.avail_in=a,o.wrap=n,Gs},Qzt=$zt,Zzt=jMe,eRt=FMe,tRt=WMe,nRt=Vzt,iRt=Jzt,rRt=Xzt,oRt=Yzt,aRt="pako deflate (from Nodeca project)",uw={deflateInit:Qzt,deflateInit2:Zzt,deflateReset:eRt,deflateResetKeep:tRt,deflateSetHeader:nRt,deflate:iRt,deflateEnd:rRt,deflateSetDictionary:oRt,deflateInfo:aRt},sRt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cRt=function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let r=t.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let o in r)sRt(r,o)&&(e[o]=r[o])}}return e},lRt=e=>{let t=0;for(let o=0,n=e.length;o<n;o++)t+=e[o].length;let r=new Uint8Array(t);for(let o=0,n=0,a=e.length;o<a;o++){let i=e[o];r.set(i,n),n+=i.length}return r},oD={assign:cRt,flattenChunks:lRt},GMe=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{GMe=!1}var mw=new Uint8Array(256);for(let e=0;e<256;e++)mw[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;mw[254]=mw[254]=1;var uRt=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,r,o,n,a,i=e.length,s=0;for(n=0;n<i;n++)r=e.charCodeAt(n),(r&64512)===55296&&n+1<i&&(o=e.charCodeAt(n+1),(o&64512)===56320&&(r=65536+(r-55296<<10)+(o-56320),n++)),s+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Uint8Array(s),a=0,n=0;a<s;n++)r=e.charCodeAt(n),(r&64512)===55296&&n+1<i&&(o=e.charCodeAt(n+1),(o&64512)===56320&&(r=65536+(r-55296<<10)+(o-56320),n++)),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|r&63):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|r&63):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|r&63);return t},pRt=(e,t)=>{if(t<65534&&e.subarray&&GMe)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let o=0;o<t;o++)r+=String.fromCharCode(e[o]);return r},fRt=(e,t)=>{let r=t||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let o,n,a=new Array(r*2);for(n=0,o=0;o<r;){let i=e[o++];if(i<128){a[n++]=i;continue}let s=mw[i];if(s>4){a[n++]=65533,o+=s-1;continue}for(i&=s===2?31:s===3?15:7;s>1&&o<r;)i=i<<6|e[o++]&63,s--;if(s>1){a[n++]=65533;continue}i<65536?a[n++]=i:(i-=65536,a[n++]=55296|i>>10&1023,a[n++]=56320|i&1023)}return pRt(a,n)},dRt=(e,t)=>{t=t||e.length,t>e.length&&(t=e.length);let r=t-1;for(;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+mw[e[r]]>t?r:t},gw={string2buf:uRt,buf2string:fRt,utf8border:dRt};function hRt(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var KMe=hRt,HMe=Object.prototype.toString,{Z_NO_FLUSH:yRt,Z_SYNC_FLUSH:bRt,Z_FULL_FLUSH:mRt,Z_FINISH:gRt,Z_OK:nD,Z_STREAM_END:ORt,Z_DEFAULT_COMPRESSION:MRt,Z_DEFAULT_STRATEGY:_Rt,Z_DEFLATED:ARt}=YO;function Aw(e){this.options=oD.assign({level:MRt,method:ARt,chunkSize:16384,windowBits:15,memLevel:8,strategy:_Rt},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new KMe,this.strm.avail_out=0;let r=uw.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==nD)throw new Error($O[r]);if(t.header&&uw.deflateSetHeader(this.strm,t.header),t.dictionary){let o;if(typeof t.dictionary=="string"?o=gw.string2buf(t.dictionary):HMe.call(t.dictionary)==="[object ArrayBuffer]"?o=new Uint8Array(t.dictionary):o=t.dictionary,r=uw.deflateSetDictionary(this.strm,o),r!==nD)throw new Error($O[r]);this._dict_set=!0}}Aw.prototype.push=function(e,t){let r=this.strm,o=this.options.chunkSize,n,a;if(this.ended)return!1;for(t===~~t?a=t:a=t===!0?gRt:yRt,typeof e=="string"?r.input=gw.string2buf(e):HMe.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(o),r.next_out=0,r.avail_out=o),(a===bRt||a===mRt)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(n=uw.deflate(r,a),n===ORt)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),n=uw.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===nD;if(r.avail_out===0){this.onData(r.output);continue}if(a>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};Aw.prototype.onData=function(e){this.chunks.push(e)};Aw.prototype.onEnd=function(e){e===nD&&(this.result=oD.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function IJ(e,t){let r=new Aw(t);if(r.push(e,!0),r.err)throw r.msg||$O[r.err];return r.result}function SRt(e,t){return t=t||{},t.raw=!0,IJ(e,t)}function ERt(e,t){return t=t||{},t.gzip=!0,IJ(e,t)}var TRt=Aw,vRt=IJ,IRt=SRt,wRt=ERt,PRt=YO,zRt={Deflate:TRt,deflate:vRt,deflateRaw:IRt,gzip:wRt,constants:PRt},X5=16209,RRt=16191,xRt=function(t,r){let o,n,a,i,s,c,l,p,h,y,b,m,M,_,O,S,v,T,w,P,C,R,N,W,k=t.state;o=t.next_in,N=t.input,n=o+(t.avail_in-5),a=t.next_out,W=t.output,i=a-(r-t.avail_out),s=a+(t.avail_out-257),c=k.dmax,l=k.wsize,p=k.whave,h=k.wnext,y=k.window,b=k.hold,m=k.bits,M=k.lencode,_=k.distcode,O=(1<<k.lenbits)-1,S=(1<<k.distbits)-1;e:do{m<15&&(b+=N[o++]<<m,m+=8,b+=N[o++]<<m,m+=8),v=M[b&O];t:for(;;){if(T=v>>>24,b>>>=T,m-=T,T=v>>>16&255,T===0)W[a++]=v&65535;else if(T&16){w=v&65535,T&=15,T&&(m<T&&(b+=N[o++]<<m,m+=8),w+=b&(1<<T)-1,b>>>=T,m-=T),m<15&&(b+=N[o++]<<m,m+=8,b+=N[o++]<<m,m+=8),v=_[b&S];n:for(;;){if(T=v>>>24,b>>>=T,m-=T,T=v>>>16&255,T&16){if(P=v&65535,T&=15,m<T&&(b+=N[o++]<<m,m+=8,m<T&&(b+=N[o++]<<m,m+=8)),P+=b&(1<<T)-1,P>c){t.msg="invalid distance too far back",k.mode=X5;break e}if(b>>>=T,m-=T,T=a-i,P>T){if(T=P-T,T>p&&k.sane){t.msg="invalid distance too far back",k.mode=X5;break e}if(C=0,R=y,h===0){if(C+=l-T,T<w){w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}}else if(h<T){if(C+=l+h-T,T-=h,T<w){w-=T;do W[a++]=y[C++];while(--T);if(C=0,h<w){T=h,w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}}}else if(C+=h-T,T<w){w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}for(;w>2;)W[a++]=R[C++],W[a++]=R[C++],W[a++]=R[C++],w-=3;w&&(W[a++]=R[C++],w>1&&(W[a++]=R[C++]))}else{C=a-P;do W[a++]=W[C++],W[a++]=W[C++],W[a++]=W[C++],w-=3;while(w>2);w&&(W[a++]=W[C++],w>1&&(W[a++]=W[C++]))}}else if((T&64)===0){v=_[(v&65535)+(b&(1<<T)-1)];continue n}else{t.msg="invalid distance code",k.mode=X5;break e}break}}else if((T&64)===0){v=M[(v&65535)+(b&(1<<T)-1)];continue t}else if(T&32){k.mode=RRt;break e}else{t.msg="invalid literal/length code",k.mode=X5;break e}break}}while(o<n&&a<s);w=m>>3,o-=w,m-=w<<3,b&=(1<<m)-1,t.next_in=o,t.next_out=a,t.avail_in=o<n?5+(n-o):5-(o-n),t.avail_out=a<s?257+(s-a):257-(a-s),k.hold=b,k.bits=m},DS=15,$Oe=852,JOe=592,XOe=0,oJ=1,YOe=2,kRt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),CRt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),NRt=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),DRt=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),LRt=(e,t,r,o,n,a,i,s)=>{let c=s.bits,l=0,p=0,h=0,y=0,b=0,m=0,M=0,_=0,O=0,S=0,v,T,w,P,C,R=null,N,W=new Uint16Array(DS+1),k=new Uint16Array(DS+1),K=null,U,q,H;for(l=0;l<=DS;l++)W[l]=0;for(p=0;p<o;p++)W[t[r+p]]++;for(b=c,y=DS;y>=1&&W[y]===0;y--);if(b>y&&(b=y),y===0)return n[a++]=1<<24|64<<16|0,n[a++]=1<<24|64<<16|0,s.bits=1,0;for(h=1;h<y&&W[h]===0;h++);for(b<h&&(b=h),_=1,l=1;l<=DS;l++)if(_<<=1,_-=W[l],_<0)return-1;if(_>0&&(e===XOe||y!==1))return-1;for(k[1]=0,l=1;l<DS;l++)k[l+1]=k[l]+W[l];for(p=0;p<o;p++)t[r+p]!==0&&(i[k[t[r+p]]++]=p);if(e===XOe?(R=K=i,N=20):e===oJ?(R=kRt,K=CRt,N=257):(R=NRt,K=DRt,N=0),S=0,p=0,l=h,C=a,m=b,M=0,w=-1,O=1<<b,P=O-1,e===oJ&&O>$Oe||e===YOe&&O>JOe)return 1;for(;;){U=l-M,i[p]+1<N?(q=0,H=i[p]):i[p]>=N?(q=K[i[p]-N],H=R[i[p]-N]):(q=96,H=0),v=1<<l-M,T=1<<m,h=T;do T-=v,n[C+(S>>M)+T]=U<<24|q<<16|H|0;while(T!==0);for(v=1<<l-1;S&v;)v>>=1;if(v!==0?(S&=v-1,S+=v):S=0,p++,--W[l]===0){if(l===y)break;l=t[r+i[p]]}if(l>b&&(S&P)!==w){for(M===0&&(M=b),C+=h,m=l-M,_=1<<m;m+M<y&&(_-=W[m+M],!(_<=0));)m++,_<<=1;if(O+=1<<m,e===oJ&&O>$Oe||e===YOe&&O>JOe)return 1;w=S&P,n[w]=b<<24|m<<16|C-a|0}}return S!==0&&(n[C+S]=l-M<<24|64<<16|0),s.bits=b,0},pw=LRt,qRt=0,VMe=1,$Me=2,{Z_FINISH:QOe,Z_BLOCK:BRt,Z_TREES:Y5,Z_OK:XO,Z_STREAM_END:URt,Z_NEED_DICT:WRt,Z_STREAM_ERROR:l1,Z_DATA_ERROR:JMe,Z_MEM_ERROR:XMe,Z_BUF_ERROR:FRt,Z_DEFLATED:ZOe}=YO,aD=16180,eMe=16181,tMe=16182,nMe=16183,iMe=16184,rMe=16185,oMe=16186,aMe=16187,sMe=16188,cMe=16189,iD=16190,Py=16191,aJ=16192,lMe=16193,sJ=16194,uMe=16195,pMe=16196,fMe=16197,dMe=16198,Q5=16199,Z5=16200,hMe=16201,yMe=16202,bMe=16203,mMe=16204,gMe=16205,cJ=16206,OMe=16207,MMe=16208,To=16209,YMe=16210,QMe=16211,jRt=852,GRt=592,KRt=15,HRt=KRt,_Me=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function VRt(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var QO=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.mode<aD||t.mode>QMe?1:0},ZMe=e=>{if(QO(e))return l1;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=aD,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(jRt),t.distcode=t.distdyn=new Int32Array(GRt),t.sane=1,t.back=-1,XO},e_e=e=>{if(QO(e))return l1;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,ZMe(e)},t_e=(e,t)=>{let r;if(QO(e))return l1;let o=e.state;return t<0?(r=0,t=-t):(r=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?l1:(o.window!==null&&o.wbits!==t&&(o.window=null),o.wrap=r,o.wbits=t,e_e(e))},n_e=(e,t)=>{if(!e)return l1;let r=new VRt;e.state=r,r.strm=e,r.window=null,r.mode=aD;let o=t_e(e,t);return o!==XO&&(e.state=null),o},$Rt=e=>n_e(e,HRt),AMe=!0,lJ,uJ,JRt=e=>{if(AMe){lJ=new Int32Array(512),uJ=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(pw(VMe,e.lens,0,288,lJ,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;pw($Me,e.lens,0,32,uJ,0,e.work,{bits:5}),AMe=!1}e.lencode=lJ,e.lenbits=9,e.distcode=uJ,e.distbits=5},i_e=(e,t,r,o)=>{let n,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),o>=a.wsize?(a.window.set(t.subarray(r-a.wsize,r),0),a.wnext=0,a.whave=a.wsize):(n=a.wsize-a.wnext,n>o&&(n=o),a.window.set(t.subarray(r-o,r-o+n),a.wnext),o-=n,o?(a.window.set(t.subarray(r-o,r),0),a.wnext=o,a.whave=a.wsize):(a.wnext+=n,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=n))),0},XRt=(e,t)=>{let r,o,n,a,i,s,c,l,p,h,y,b,m,M,_=0,O,S,v,T,w,P,C,R,N=new Uint8Array(4),W,k,K=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(QO(e)||!e.output||!e.input&&e.avail_in!==0)return l1;r=e.state,r.mode===Py&&(r.mode=aJ),i=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,o=e.input,s=e.avail_in,l=r.hold,p=r.bits,h=s,y=c,R=XO;e:for(;;)switch(r.mode){case aD:if(r.wrap===0){r.mode=aJ;break}for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0),l=0,p=0,r.mode=eMe;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=To;break}if((l&15)!==ZOe){e.msg="unknown compression method",r.mode=To;break}if(l>>>=4,p-=4,C=(l&15)+8,r.wbits===0&&(r.wbits=C),C>15||C>r.wbits){e.msg="invalid window size",r.mode=To;break}r.dmax=1<<r.wbits,r.flags=0,e.adler=r.check=1,r.mode=l&512?cMe:Py,l=0,p=0;break;case eMe:for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.flags=l,(r.flags&255)!==ZOe){e.msg="unknown compression method",r.mode=To;break}if(r.flags&57344){e.msg="unknown header flags set",r.mode=To;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0,r.mode=tMe;case tMe:for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,N[2]=l>>>16&255,N[3]=l>>>24&255,r.check=ys(r.check,N,4,0)),l=0,p=0,r.mode=nMe;case nMe:for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0,r.mode=iMe;case iMe:if(r.flags&1024){for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0}else r.head&&(r.head.extra=null);r.mode=rMe;case rMe:if(r.flags&1024&&(b=r.length,b>s&&(b=s),b&&(r.head&&(C=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(o.subarray(a,a+b),C)),r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,r.length-=b),r.length))break e;r.length=0,r.mode=oMe;case oMe:if(r.flags&2048){if(s===0)break e;b=0;do C=o[a+b++],r.head&&C&&r.length<65536&&(r.head.name+=String.fromCharCode(C));while(C&&b<s);if(r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,C)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=aMe;case aMe:if(r.flags&4096){if(s===0)break e;b=0;do C=o[a+b++],r.head&&C&&r.length<65536&&(r.head.comment+=String.fromCharCode(C));while(C&&b<s);if(r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,C)break e}else r.head&&(r.head.comment=null);r.mode=sMe;case sMe:if(r.flags&512){for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&4&&l!==(r.check&65535)){e.msg="header crc mismatch",r.mode=To;break}l=0,p=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Py;break;case cMe:for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}e.adler=r.check=_Me(l),l=0,p=0,r.mode=iD;case iD:if(r.havedict===0)return e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,WRt;e.adler=r.check=1,r.mode=Py;case Py:if(t===BRt||t===Y5)break e;case aJ:if(r.last){l>>>=p&7,p-=p&7,r.mode=cJ;break}for(;p<3;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}switch(r.last=l&1,l>>>=1,p-=1,l&3){case 0:r.mode=lMe;break;case 1:if(JRt(r),r.mode=Q5,t===Y5){l>>>=2,p-=2;break e}break;case 2:r.mode=pMe;break;case 3:e.msg="invalid block type",r.mode=To}l>>>=2,p-=2;break;case lMe:for(l>>>=p&7,p-=p&7;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=To;break}if(r.length=l&65535,l=0,p=0,r.mode=sJ,t===Y5)break e;case sJ:r.mode=uMe;case uMe:if(b=r.length,b){if(b>s&&(b=s),b>c&&(b=c),b===0)break e;n.set(o.subarray(a,a+b),i),s-=b,a+=b,c-=b,i+=b,r.length-=b;break}r.mode=Py;break;case pMe:for(;p<14;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.nlen=(l&31)+257,l>>>=5,p-=5,r.ndist=(l&31)+1,l>>>=5,p-=5,r.ncode=(l&15)+4,l>>>=4,p-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=To;break}r.have=0,r.mode=fMe;case fMe:for(;r.have<r.ncode;){for(;p<3;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.lens[K[r.have++]]=l&7,l>>>=3,p-=3}for(;r.have<19;)r.lens[K[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,W={bits:r.lenbits},R=pw(qRt,r.lens,0,19,r.lencode,0,r.work,W),r.lenbits=W.bits,R){e.msg="invalid code lengths set",r.mode=To;break}r.have=0,r.mode=dMe;case dMe:for(;r.have<r.nlen+r.ndist;){for(;_=r.lencode[l&(1<<r.lenbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(v<16)l>>>=O,p-=O,r.lens[r.have++]=v;else{if(v===16){for(k=O+2;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(l>>>=O,p-=O,r.have===0){e.msg="invalid bit length repeat",r.mode=To;break}C=r.lens[r.have-1],b=3+(l&3),l>>>=2,p-=2}else if(v===17){for(k=O+3;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=O,p-=O,C=0,b=3+(l&7),l>>>=3,p-=3}else{for(k=O+7;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=O,p-=O,C=0,b=11+(l&127),l>>>=7,p-=7}if(r.have+b>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=To;break}for(;b--;)r.lens[r.have++]=C}}if(r.mode===To)break;if(r.lens[256]===0){e.msg="invalid code -- missing end-of-block",r.mode=To;break}if(r.lenbits=9,W={bits:r.lenbits},R=pw(VMe,r.lens,0,r.nlen,r.lencode,0,r.work,W),r.lenbits=W.bits,R){e.msg="invalid literal/lengths set",r.mode=To;break}if(r.distbits=6,r.distcode=r.distdyn,W={bits:r.distbits},R=pw($Me,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,W),r.distbits=W.bits,R){e.msg="invalid distances set",r.mode=To;break}if(r.mode=Q5,t===Y5)break e;case Q5:r.mode=Z5;case Z5:if(s>=6&&c>=258){e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,xRt(e,y),i=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,o=e.input,s=e.avail_in,l=r.hold,p=r.bits,r.mode===Py&&(r.back=-1);break}for(r.back=0;_=r.lencode[l&(1<<r.lenbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(S&&(S&240)===0){for(T=O,w=S,P=v;_=r.lencode[P+((l&(1<<T+w)-1)>>T)],O=_>>>24,S=_>>>16&255,v=_&65535,!(T+O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=T,p-=T,r.back+=T}if(l>>>=O,p-=O,r.back+=O,r.length=v,S===0){r.mode=gMe;break}if(S&32){r.back=-1,r.mode=Py;break}if(S&64){e.msg="invalid literal/length code",r.mode=To;break}r.extra=S&15,r.mode=hMe;case hMe:if(r.extra){for(k=r.extra;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,p-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=yMe;case yMe:for(;_=r.distcode[l&(1<<r.distbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if((S&240)===0){for(T=O,w=S,P=v;_=r.distcode[P+((l&(1<<T+w)-1)>>T)],O=_>>>24,S=_>>>16&255,v=_&65535,!(T+O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=T,p-=T,r.back+=T}if(l>>>=O,p-=O,r.back+=O,S&64){e.msg="invalid distance code",r.mode=To;break}r.offset=v,r.extra=S&15,r.mode=bMe;case bMe:if(r.extra){for(k=r.extra;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,p-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=To;break}r.mode=mMe;case mMe:if(c===0)break e;if(b=y-c,r.offset>b){if(b=r.offset-b,b>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=To;break}b>r.wnext?(b-=r.wnext,m=r.wsize-b):m=r.wnext-b,b>r.length&&(b=r.length),M=r.window}else M=n,m=i-r.offset,b=r.length;b>c&&(b=c),c-=b,r.length-=b;do n[i++]=M[m++];while(--b);r.length===0&&(r.mode=Z5);break;case gMe:if(c===0)break e;n[i++]=r.length,c--,r.mode=Z5;break;case cJ:if(r.wrap){for(;p<32;){if(s===0)break e;s--,l|=o[a++]<<p,p+=8}if(y-=c,e.total_out+=y,r.total+=y,r.wrap&4&&y&&(e.adler=r.check=r.flags?ys(r.check,n,y,i-y):bw(r.check,n,y,i-y)),y=c,r.wrap&4&&(r.flags?l:_Me(l))!==r.check){e.msg="incorrect data check",r.mode=To;break}l=0,p=0}r.mode=OMe;case OMe:if(r.wrap&&r.flags){for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&4&&l!==(r.total&4294967295)){e.msg="incorrect length check",r.mode=To;break}l=0,p=0}r.mode=MMe;case MMe:R=URt;break e;case To:R=JMe;break e;case YMe:return XMe;case QMe:default:return l1}return e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,(r.wsize||y!==e.avail_out&&r.mode<To&&(r.mode<cJ||t!==QOe))&&i_e(e,e.output,e.next_out,y-e.avail_out),h-=e.avail_in,y-=e.avail_out,e.total_in+=h,e.total_out+=y,r.total+=y,r.wrap&4&&y&&(e.adler=r.check=r.flags?ys(r.check,n,y,e.next_out-y):bw(r.check,n,y,e.next_out-y)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Py?128:0)+(r.mode===Q5||r.mode===sJ?256:0),(h===0&&y===0||t===QOe)&&R===XO&&(R=FRt),R},YRt=e=>{if(QO(e))return l1;let t=e.state;return t.window&&(t.window=null),e.state=null,XO},QRt=(e,t)=>{if(QO(e))return l1;let r=e.state;return(r.wrap&2)===0?l1:(r.head=t,t.done=!1,XO)},ZRt=(e,t)=>{let r=t.length,o,n,a;return QO(e)||(o=e.state,o.wrap!==0&&o.mode!==iD)?l1:o.mode===iD&&(n=1,n=bw(n,t,r,0),n!==o.check)?JMe:(a=i_e(e,t,r,r),a?(o.mode=YMe,XMe):(o.havedict=1,XO))},e4t=e_e,t4t=t_e,n4t=ZMe,i4t=$Rt,r4t=n_e,o4t=XRt,a4t=YRt,s4t=QRt,c4t=ZRt,l4t="pako inflate (from Nodeca project)",Ry={inflateReset:e4t,inflateReset2:t4t,inflateResetKeep:n4t,inflateInit:i4t,inflateInit2:r4t,inflate:o4t,inflateEnd:a4t,inflateGetHeader:s4t,inflateSetDictionary:c4t,inflateInfo:l4t};function u4t(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var p4t=u4t,r_e=Object.prototype.toString,{Z_NO_FLUSH:f4t,Z_FINISH:d4t,Z_OK:Ow,Z_STREAM_END:pJ,Z_NEED_DICT:fJ,Z_STREAM_ERROR:h4t,Z_DATA_ERROR:SMe,Z_MEM_ERROR:y4t}=YO;function Sw(e){this.options=oD.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new KMe,this.strm.avail_out=0;let r=Ry.inflateInit2(this.strm,t.windowBits);if(r!==Ow)throw new Error($O[r]);if(this.header=new p4t,Ry.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=gw.string2buf(t.dictionary):r_e.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=Ry.inflateSetDictionary(this.strm,t.dictionary),r!==Ow)))throw new Error($O[r])}Sw.prototype.push=function(e,t){let r=this.strm,o=this.options.chunkSize,n=this.options.dictionary,a,i,s;if(this.ended)return!1;for(t===~~t?i=t:i=t===!0?d4t:f4t,r_e.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(o),r.next_out=0,r.avail_out=o),a=Ry.inflate(r,i),a===fJ&&n&&(a=Ry.inflateSetDictionary(r,n),a===Ow?a=Ry.inflate(r,i):a===SMe&&(a=fJ));r.avail_in>0&&a===pJ&&r.state.wrap>0&&e[r.next_in]!==0;)Ry.inflateReset(r),a=Ry.inflate(r,i);switch(a){case h4t:case SMe:case fJ:case y4t:return this.onEnd(a),this.ended=!0,!1}if(s=r.avail_out,r.next_out&&(r.avail_out===0||a===pJ))if(this.options.to==="string"){let c=gw.utf8border(r.output,r.next_out),l=r.next_out-c,p=gw.buf2string(r.output,c);r.next_out=l,r.avail_out=o-l,l&&r.output.set(r.output.subarray(c,c+l),0),this.onData(p)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(a===Ow&&s===0)){if(a===pJ)return a=Ry.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Sw.prototype.onData=function(e){this.chunks.push(e)};Sw.prototype.onEnd=function(e){e===Ow&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=oD.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function wJ(e,t){let r=new Sw(t);if(r.push(e),r.err)throw r.msg||$O[r.err];return r.result}function b4t(e,t){return t=t||{},t.raw=!0,wJ(e,t)}var m4t=Sw,g4t=wJ,O4t=b4t,M4t=wJ,_4t=YO,A4t={Inflate:m4t,inflate:g4t,inflateRaw:O4t,ungzip:M4t,constants:_4t},{Deflate:S4t,deflate:E4t,deflateRaw:T4t,gzip:v4t}=zRt,{Inflate:I4t,inflate:w4t,inflateRaw:P4t,ungzip:z4t}=A4t,R4t=S4t,x4t=E4t,k4t=T4t,C4t=v4t,N4t=I4t,D4t=w4t,L4t=P4t,q4t=z4t,B4t=YO,o_e={Deflate:R4t,deflate:x4t,deflateRaw:k4t,gzip:C4t,Inflate:N4t,inflate:D4t,inflateRaw:L4t,ungzip:q4t,constants:B4t};var M_e=ke(c_e(),1),xJ=ke(CS(),1),__e=ke(g_e(),1);var zJ=class extends Map{set(t,r,o=3e5){return setTimeout(()=>{this.delete(t)},o),super.set(t,r)}},RJ=(e=30,t=689)=>({API_TYPE:e,API_VERSION:t,uploadCallbacks:new zJ,options:{selfListen:!1,checkUpdate:!0,logging:!0,polyfill:global.fetch},secretKey:null});function uD(e){return!!e.secretKey}var pD=50;var CJ=typeof Bun<"u";function jS(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function NJ(e,t){let r=[];for(let n in t)jS(t,n)&&r.push(n);r.sort();let o="zsecure"+e;for(let n=0;n<r.length;n++)o+=t[r[n]];return qr.default.MD5(o).toString()}function Vm(e,t,r={},o=!0){let n=new URL(t);for(let a in r)jS(r,a)&&n.searchParams.append(a,r[a].toString());return o&&(n.searchParams.has("zpw_ver")||n.searchParams.set("zpw_ver",e.API_VERSION.toString()),n.searchParams.has("zpw_type")||n.searchParams.set("zpw_type",e.API_TYPE.toString())),n.toString()}var Tw=class e{constructor({type:t,imei:r,firstLaunchTime:o}){this.zcid=null,this.enc_ver="v2",this.zcid=null,this.encryptKey=null,this.createZcid(t,r,o),this.zcid_ext=e.randomString(),this.createEncryptKey()}getEncryptKey(){if(!this.encryptKey)throw new ce("getEncryptKey: didn't create encryptKey yet");return this.encryptKey}createZcid(t,r,o){if(!t||!r||!o)throw new ce("createZcid: missing params");let n=`${t},${r},${o}`,a=e.encodeAES("3FC4F0D2AB50057BCE0D90D9187A22B1",n,"hex",!0);this.zcid=a}createEncryptKey(t=0){let r=(o,n)=>{let{even:a}=e.processStr(o),{even:i,odd:s}=e.processStr(n);if(!a||!i||!s)return!1;let c=a.slice(0,8).join("")+i.slice(0,12).join("")+s.reverse().slice(0,12).join("");return this.encryptKey=c,!0};if(!this.zcid||!this.zcid_ext)throw new ce("createEncryptKey: zcid or zcid_ext is null");try{let o=qr.default.MD5(this.zcid_ext).toString().toUpperCase();if(r(o,this.zcid)||!(t<3))return!1;this.createEncryptKey(t+1)}catch{t<3&&this.createEncryptKey(t+1)}return!0}getParams(){return this.zcid?{zcid:this.zcid,zcid_ext:this.zcid_ext,enc_ver:this.enc_ver}:null}static processStr(t){if(!t||typeof t!="string")return{even:null,odd:null};let[r,o]=[...t].reduce((n,a,i)=>(n[i%2].push(a),n),[[],[]]);return{even:r,odd:o}}static randomString(t,r){let o=t||6,n=r&&t&&r>t?r:12,a=Math.floor(Math.random()*(n-o+1))+o;if(a>12){let i="";for(;a>0;)i+=Math.random().toString(16).substr(2,a>12?12:a),a-=12;return i}return Math.random().toString(16).substr(2,a)}static encodeAES(t,r,o,n,a=0){if(!r)return null;try{{let i=o=="hex"?qr.default.enc.Hex:qr.default.enc.Base64,s=qr.default.enc.Utf8.parse(t),c={words:[0,0,0,0],sigBytes:16},l=qr.default.AES.encrypt(r,s,{iv:c,mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).ciphertext.toString(i);return n?l.toUpperCase():l}}catch{return a<3?e.encodeAES(t,r,o,n,a+1):null}}};function A_e(e,t){let r=null;try{return r=j4t(e,t),JSON.parse(r)}catch{return r}}function j4t(e,t){t=decodeURIComponent(t);let r=qr.default.enc.Utf8.parse(e),o={words:[0,0,0,0],sigBytes:16};return qr.default.AES.decrypt({ciphertext:qr.default.enc.Base64.parse(t)},r,{iv:o,mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).toString(qr.default.enc.Utf8)}function O_e(e){return Buffer.from(e,"base64")}function G4t(e){try{return new TextDecoder().decode(e)}catch{return null}}function S_e(e,t,r=0){try{let o=qr.default.enc.Base64.parse(e);return qr.default.AES.encrypt(t,o,{iv:qr.default.enc.Hex.parse("00000000000000000000000000000000"),mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).ciphertext.toString(qr.default.enc.Base64)}catch{return r<3?S_e(e,t,r+1):null}}function E_e(e,t,r=0){try{t=decodeURIComponent(t);let o=qr.default.enc.Base64.parse(e);return qr.default.AES.decrypt({ciphertext:qr.default.enc.Base64.parse(t)},o,{iv:qr.default.enc.Hex.parse("00000000000000000000000000000000"),mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).toString(qr.default.enc.Utf8)}catch{return r<3?E_e(e,t,r+1):null}}function K4t(e){return!e||/Windows/i.test(e)?"Windows":/Macintosh|Mac OS X/i.test(e)?"macOS":/Linux|X11/i.test(e)?"Linux":"Windows"}function H4t(e){if(!e)return"133";let t=e.match(/Chrome\/(\d+)/);return t?t[1]:"133"}function vw(e){return e==="en"?"en-US,en;q=0.9,vi;q=0.8":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7"}function DJ(e){if(!e||!/Chrome\//i.test(e))return{};let t=K4t(e),r=H4t(e);return{"sec-ch-ua":`"Not=A?Brand";v="99", "Google Chrome";v="${r}", "Chromium";v="${r}"`,"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":`"${t}"`}}async function V4t(e,t="https://chat.zalo.me"){if(!e.cookie)throw new ce("Cookie is not available");if(!e.userAgent)throw new ce("User agent is not available");let r=DJ(e.userAgent);return Object.assign({accept:"*/*","accept-encoding":"gzip, deflate, br, zstd","accept-language":vw(e.language),"content-type":"application/x-www-form-urlencoded",cookie:await e.cookie.getCookieString(t),origin:t,priority:"u=1, i",referer:`${t}/`,"user-agent":e.userAgent,"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":t==="https://id.zalo.me"?"same-origin":"same-site"},r)}async function Zl(e,t,r,o=!1){var n,a;e.cookie||(e.cookie=new xJ.default.CookieJar);let i=new URL(t).origin,s=await V4t(e,i);if(!o)if(r&&r.headers){let y=Object.assign({},s),b=r.headers;for(let[m,M]of Object.entries(b)){let _=m.toLowerCase();for(let O of Object.keys(y))O.toLowerCase()===_&&O!==m&&delete y[O];y[m]=M}r.headers=y}else r=Object.assign(Object.assign({},r||{}),{headers:s});let c=Object.assign(Object.assign({},r??{}),CJ?{proxy:(a=(n=e.options.agent)===null||n===void 0?void 0:n.proxy)===null||a===void 0?void 0:a.href}:{agent:e.options.agent,dispatcher:e.options.agent}),l=await e.options.polyfill(t,c),p=l.headers.get("set-cookie");if(p&&!o){let y=[],b=l.headers;if(typeof b.raw=="function"){let m=b.raw();m&&m["set-cookie"]&&(y=m["set-cookie"])}else typeof b.getSetCookie=="function"?y=b.getSetCookie():y=p.split(/,\s*(?=[a-zA-Z0-9_-]+\s*=)/);for(let m of y){let M=xJ.default.Cookie.parse(m);try{M&&await e.cookie.setCookie(M,M.domain!="zalo.me"?`https://${M.domain}`:i)}catch(_){ir(e).error(_)}}}let h=l.headers.get("location");if(h){let y=Object.assign({},r);return y.method="GET",o||(y.headers=new Headers(y.headers),y.headers.set("Referer","https://id.zalo.me/")),await Zl(e,h,y)}return l}async function $m(e,t){if(!e.options.imageMetadataGetter)throw new XI;let r=await e.options.imageMetadataGetter(t);if(!r)throw new ce("Failed to get image metadata");return{fileName:t.split("/").pop(),totalSize:r.size,width:r.width,height:r.height}}async function LJ(e){return kJ.default.promises.stat(e).then(t=>t.size)}async function T_e(e,t){if(!e.options.imageMetadataGetter)throw new XI;let r=await e.options.imageMetadataGetter(t);if(!r)throw new ce("Failed to get gif metadata");return{fileName:dD.default.basename(t),totalSize:r.size,width:r.width,height:r.height}}async function Wp(e,t){if(typeof e.data!="string")throw new ce(`Invalid data, expected string but got ${typeof e.data}`);if(typeof e.encrypt!="number")throw new ce(`Invalid encrypt type, expected number but got ${typeof e.encrypt}`);if(e.encrypt<0||e.encrypt>3)throw new ce(`Invalid encrypt type, expected 0-3 but got ${e.encrypt}`);let r=e.data,o=e.encrypt;if(o===0)return JSON.parse(r);let n=O_e(o===1?r:decodeURIComponent(r)),a=n;if(o!==1)if(t&&n.length>=48){let c={name:"AES-GCM",iv:n.subarray(0,16),tagLength:128,additionalData:n.subarray(16,32)},l=n.subarray(32),p=await Ew.default.subtle.importKey("raw",O_e(t),c,!1,["decrypt"]);a=await Ew.default.subtle.decrypt(c,p,l)}else throw new ce("Invalid data length or missing cipher key");let i=o===3?new Uint8Array(a):o_e.inflate(a),s=G4t(i);if(s)return __e.default.parse(s)}async function hD(e,t){let r=typeof e=="string"?await kJ.default.promises.readFile(e):e.data;return new Promise(o=>{let n=0,a=2097152,i=Math.ceil(t/a),s=new M_e.default.ArrayBuffer;function c(){let l=n*a,p=l+a>=t?t:l+a;s.append(new Uint8Array(r.subarray(l,p)).buffer),n++,n<i?c():o({currentChunk:n,data:s.end()})}c()})}var ir=e=>({verbose:(...t)=>{e.options.logging&&console.log("\x1B[35m\u{1F680} VERBOSE\x1B[0m",...t)},info:(...t)=>{e.options.logging&&console.log("\x1B[34mINFO\x1B[0m",...t)},warn:(...t)=>{e.options.logging&&console.log("\x1B[33mWARN\x1B[0m",...t)},error:(...t)=>{e.options.logging&&console.log("\x1B[31mERROR\x1B[0m",...t)},success:(...t)=>{e.options.logging&&console.log("\x1B[32mSUCCESS\x1B[0m",...t)},timestamp:(...t)=>{let r=new Date().toISOString();e.options.logging&&console.log(`\x1B[90m[${r}]\x1B[0m`,...t)}});function v_e(e){return e==="webchat"?1:e==="chat.voice"?31:e==="chat.photo"?32:e==="chat.sticker"?36:e==="chat.doodle"?37:e==="chat.recommended"||e==="chat.link"?38:e==="chat.video.msg"?44:e==="share.file"?46:e==="chat.gif"?49:e==="chat.location.new"?43:1}function fD(e,t,r){let o=(e=""+e).length;return o===r?e:o>r?e.slice(-r):t.repeat(r-o)+e}function I_e(e,t=Date.now()){let r=new Date(t),o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"},n=new Intl.DateTimeFormat("vi-VN",o).format(r);return e.includes("%H")||e.includes("%d")?e.replace("%H",r.getHours().toString().padStart(2,"0")).replace("%M",r.getMinutes().toString().padStart(2,"0")).replace("%S",r.getSeconds().toString().padStart(2,"0")).replace("%d",r.getDate().toString().padStart(2,"0")).replace("%m",(r.getMonth()+1).toString().padStart(2,"0")).replace("%Y",r.getFullYear().toString()):n}function w_e(e){let t=new Date(e);return fD(t.getHours(),"0",2)+":"+fD(t.getMinutes(),"0",2)+" "+fD(t.getDate(),"0",2)+"/"+fD(t.getMonth()+1,"0",2)+"/"+t.getFullYear()}function xy(e){return dD.default.extname(e).slice(1)}function Iw(e){return dD.default.basename(e)}function ky(e){for(let t in e)e[t]===void 0&&delete e[t];return e}function P_e(e){return e=="join_request"?Gi.JOIN_REQUEST:e=="join"?Gi.JOIN:e=="leave"?Gi.LEAVE:e=="remove_member"?Gi.REMOVE_MEMBER:e=="block_member"?Gi.BLOCK_MEMBER:e=="update_setting"?Gi.UPDATE_SETTING:e=="update_avatar"?Gi.UPDATE_AVATAR:e=="update"?Gi.UPDATE:e=="new_link"?Gi.NEW_LINK:e=="add_admin"?Gi.ADD_ADMIN:e=="remove_admin"?Gi.REMOVE_ADMIN:e=="new_pin_topic"?Gi.NEW_PIN_TOPIC:e=="update_pin_topic"?Gi.UPDATE_PIN_TOPIC:e=="update_topic"?Gi.UPDATE_TOPIC:e=="update_board"?Gi.UPDATE_BOARD:e=="remove_board"?Gi.REMOVE_BOARD:e=="reorder_pin_topic"?Gi.REORDER_PIN_TOPIC:e=="unpin_topic"?Gi.UNPIN_TOPIC:e=="remove_topic"?Gi.REMOVE_TOPIC:e=="accept_remind"?Gi.ACCEPT_REMIND:e=="reject_remind"?Gi.REJECT_REMIND:e=="remind_topic"?Gi.REMIND_TOPIC:Gi.UNKNOWN}function z_e(e){return e=="add"?Er.ADD:e=="remove"?Er.REMOVE:e=="block"?Er.BLOCK:e=="unblock"?Er.UNBLOCK:e=="block_call"?Er.BLOCK_CALL:e=="unblock_call"?Er.UNBLOCK_CALL:e=="req_v2"?Er.REQUEST:e=="reject"?Er.REJECT_REQUEST:e=="undo_req"?Er.UNDO_REQUEST:e=="seen_fr_req"?Er.SEEN_FRIEND_REQUEST:e=="pin_unpin"?Er.PIN_UNPIN:e=="pin_create"?Er.PIN_CREATE:Er.UNKNOWN}async function $4t(e,t,r=!0){let o={data:null,error:null};if(!t.ok)return o.error={message:"Request failed with status code "+t.status},o;try{let n=await t.json();if(n.error_code!=0)return o.error={message:n.error_message,code:n.error_code},o;let a=r?JSON.parse(E_e(e.secretKey,n.data)):n;if(a.error_code!=0)return o.error={message:a.error_message,code:a.error_code},o;o.data=a.data}catch(n){ir(e).error("Failed to parse response data:",n),o.error={message:"Failed to parse response data"}}return o}async function Jm(e,t,r,o){let n=await $4t(e,t,o);if(n.error)throw new ce(n.error.message,n.error.code);return r?r(n):n.data}function Ie(){return e=>(t,r)=>{if(!uD(t))throw new ce("Invalid context "+JSON.stringify(t,null,2));let o={makeURL(n,a,i){return Vm(t,n,a,i)},encodeAES(n,a){return S_e(t.secretKey,n,a)},request(n,a,i){return Zl(t,n,a,i)},logger:ir(t),resolve:(n,a,i)=>Jm(t,n,a,i)};return e(r,t,o)}}function R_e(e){return Ew.default.randomUUID()+"-"+qr.default.MD5(e).toString()}function x_e(e){return Ew.default.createHash("md5").update(e).digest("hex")}function Xm(e,t){return Object.assign(Object.assign({"accept-language":vw(e.language)},DJ(e.userAgent)),t)}var dd;(function(e){e[e.QRCodeGenerated=0]="QRCodeGenerated",e[e.QRCodeExpired=1]="QRCodeExpired",e[e.QRCodeScanned=2]="QRCodeScanned",e[e.QRCodeDeclined=3]="QRCodeDeclined",e[e.GotLoginInfo=4]="GotLoginInfo"})(dd||(dd={}));async function J4t(e){let r=await(await Zl(e,"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F",{headers:Object.assign({accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","cache-control":"max-age=0",priority:"u=0, i"},Xm(e,{"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"same-site","sec-fetch-user":"?1","upgrade-insecure-requests":"1",Referer:"https://chat.zalo.me/","Referrer-Policy":"strict-origin-when-cross-origin"})),method:"GET"})).text(),o=/https:\/\/stc-zlogin\.zdn\.vn\/main-([\d.]+)\.js/,n=r.match(o);return n?.[1]}async function X4t(e,t){let r=new URLSearchParams;return r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/logininfo",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function Y4t(e,t){let r=new URLSearchParams;return r.append("type","device"),r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/verify-client",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function Q4t(e,t){let r=new URLSearchParams;return r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/authen/qr/generate",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function k_e(e,t){await(0,N_e.writeFile)(e,t,"base64")}async function D_e(e,t,r,o){let n=new URLSearchParams;return n.append("code",r),n.append("continue","https://chat.zalo.me/"),n.append("v",t),await Zl(e,"https://id.zalo.me/account/authen/qr/waiting-scan",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),body:n,method:"POST",signal:o}).then(a=>a.json()).then(a=>a.error_code==8?D_e(e,t,r,o):a).catch(a=>{o.aborted||ir(e).error(a)})}async function L_e(e,t,r,o){let n=new URLSearchParams;return n.append("code",r),n.append("gToken",""),n.append("gAction","CONFIRM_QR"),n.append("continue","https://chat.zalo.me/"),n.append("v",t),ir(e).info("Please confirm on your phone"),await Zl(e,"https://id.zalo.me/account/authen/qr/waiting-confirm",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),body:n,method:"POST",signal:o}).then(a=>a.json()).then(a=>a.error_code==8?L_e(e,t,r,o):a).catch(a=>{o.aborted||ir(e).error(a)})}async function Z4t(e){return await Zl(e,"https://id.zalo.me/account/checksession?continue=https%3A%2F%2Fchat.zalo.me%2Findex.html",{headers:Object.assign({accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",priority:"u=0, i"},Xm(e,{"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"same-origin","upgrade-insecure-requests":"1",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),redirect:"manual",method:"GET"}).catch(ir(e).error)}async function ext(e){return await Zl(e,"https://jr.chat.zalo.me/jr/userinfo",{headers:Object.assign({accept:"*/*",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-site",Referer:"https://chat.zalo.me/","Referrer-Policy":"strict-origin-when-cross-origin"})),method:"GET"}).then(t=>t.json()).catch(ir(e).error)}async function qJ(e,t,r){return e.cookie=new C_e.CookieJar,e.userAgent=t.userAgent,new Promise(async(o,n)=>{var a;let i=new AbortController,s=null;function c(){i.abort(),s&&(clearTimeout(s),s=null)}try{let l=function(){return c(),o(qJ(e,t,r))},p=function(){return c(),n(new K6)};e.options.logging&&console.log();let h=await J4t(e);if(!h)throw new ce("Cannot get API login version");ir(e).info("Got login version:",h),await X4t(e,h),await Y4t(e,h);let y=await Q4t(e,h);if(!y||!y.data)throw new ce(`Unable to generate QRCode
|
|
227
|
+
`),H=D9n.bind(null,{[fSt]:"",[dSt]:i,[ySt]:K,[hSt]:cme,[lme]:N,[bSt]:W}),ee="";h!==null&&(y===void 0?ee=H(h):ee=H(Object.assign({},h,{name:y})));let Ae=s instanceof Function?s:s?ASt:iGn,ue=Ae().indexOf(":")+1;if(S&&!m)throw Error("customLevels is required if useOnlyCustomLevels is set true");if(_&&typeof _!="function")throw Error(`Unknown mixin type "${typeof _}" - expected "function"`);if(R&&typeof R!="string")throw Error(`Unknown msgPrefix type "${typeof R}" - expected "string"`);z9n(b,m,S);let se=MSt(m,S);typeof o.emit=="function"&&o.emit("message",{code:"PINO_CONFIG",config:{levels:se,messageKey:c,errorKey:l}}),k9n(M);let de=x9n(M);return Object.assign(t,{levels:se,[Y9n]:de,[Q9n]:S,[j9n]:o,[W9n]:Ae,[F9n]:ue,[hSt]:cme,[lme]:N,[ySt]:K,[K9n]:q,[H9n]:U,[V9n]:c,[$9n]:l,[J9n]:p,[eGn]:p?`,${JSON.stringify(p)}:{`:"",[dSt]:i,[X9n]:_,[tGn]:O,[fSt]:ee,[bSt]:W,[Z9n]:T,silent:q9n,onChild:C,[nGn]:R}),Object.setPrototypeOf(t,w9n()),R9n(t),t[G9n](b),t}dp.exports=ume;dp.exports.destination=(e=process.stdout.fd)=>typeof e=="object"?(e.dest=pSt(e.dest||process.stdout.fd),uSt(e)):uSt({dest:pSt(e),minLength:0});dp.exports.transport=Xbe();dp.exports.multistream=lSt();dp.exports.levels=MSt();dp.exports.stdSerializers=lGn;dp.exports.stdTimeFunctions=Object.assign({},gSt);dp.exports.symbols=OSt;dp.exports.version=B9n;dp.exports.default=ume;dp.exports.pino=ume});function QH(e,t){let r=e.key,o=e.message,n=r.remoteJid||"",a="";r.fromMe?a=t:a=r.participant||r.remoteJid||"";let i="",s="text",c="";o?o.conversation?(i=o.conversation,s="text"):o.extendedTextMessage?(i=o.extendedTextMessage.text||"",s="text"):o.imageMessage?(i=o.imageMessage.caption||"",s="image",c=o.imageMessage.url||""):o.videoMessage?(i=o.videoMessage.caption||"",s="video",c=o.videoMessage.url||""):o.audioMessage?(s="audio",c=o.audioMessage.url||""):o.documentMessage?(i=o.documentMessage.title||o.documentMessage.fileName||"",s="file",c=o.documentMessage.url||""):o.stickerMessage?(s="sticker",c=o.stickerMessage.url||""):o.protocolMessage||o.senderKeyDistributionMessage?(s="system",i="System message"):(s="other",i="[Tin nh\u1EAFn kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3]"):(s="other",i="");let l={rawMsg:uGn(e)};if(e.pushName&&(l.pushName=e.pushName),o?.extendedTextMessage?.contextInfo?.quotedMessage){let h=o.extendedTextMessage.contextInfo;l.quotedMessage={participant:h.participant,stanzaId:h.stanzaId,text:h.quotedMessage?.conversation||h.quotedMessage?.extendedTextMessage?.text||""}}let p=e.messageTimestamp?Number(e.messageTimestamp)*1e3:Date.now();return{id:r.id||"",conversationId:n,senderId:a,senderName:e.pushName||void 0,text:i,type:s,mediaUrl:c,timestamp:p,platform:"whatsapp",isFromMe:!!r.fromMe,metadata:l}}function uGn(e){if(!e||typeof e!="object")return e;let t={};if(e.key&&(t.key={remoteJid:e.key.remoteJid,fromMe:e.key.fromMe,id:e.key.id,participant:e.key.participant}),e.pushName&&(t.pushName=e.pushName),e.messageTimestamp&&(t.messageTimestamp=e.messageTimestamp),e.status&&(t.status=e.status),e.message){let r=e.message;t.message={},r.conversation&&(t.message.conversation=r.conversation),r.extendedTextMessage&&(t.message.extendedTextMessage={text:r.extendedTextMessage.text},r.extendedTextMessage.contextInfo&&(t.message.extendedTextMessage.contextInfo={stanzaId:r.extendedTextMessage.contextInfo.stanzaId,participant:r.extendedTextMessage.contextInfo.participant})),r.imageMessage&&(t.message.imageMessage={caption:r.imageMessage.caption,mimetype:r.imageMessage.mimetype}),r.videoMessage&&(t.message.videoMessage={caption:r.videoMessage.caption,mimetype:r.videoMessage.mimetype}),r.audioMessage&&(t.message.audioMessage={mimetype:r.audioMessage.mimetype,seconds:r.audioMessage.seconds}),r.documentMessage&&(t.message.documentMessage={title:r.documentMessage.title,fileName:r.documentMessage.fileName,mimetype:r.documentMessage.mimetype}),r.stickerMessage&&(t.message.stickerMessage={mimetype:r.stickerMessage.mimetype})}return t}var ESt=me(()=>{"use strict"});function a6(e,t){let r=String(e.id||e.jid||""),o=String(e.name||e.verifiedName||e.notify||"WhatsApp User"),n=String(e.imgUrl||e.avatar||"");return{id:r,name:o,avatarUrl:n||void 0,platform:"whatsapp",phoneNumber:t||e.phoneNumber||void 0,rawContact:e}}function TSt(e){let t=String(e.id||e.jid||""),r=String(e.name||e.displayName||"WhatsApp Chat"),o=String(e.imgUrl||e.avatar||""),n="direct";return(t.endsWith("@g.us")||e.isGroup)&&(n="group"),{id:t,name:r,avatarUrl:o||void 0,type:n,unreadCount:Number(e.unreadCount||0),platform:"whatsapp",rawConversation:e}}var vSt=me(()=>{"use strict"});var RSt={};Zi(RSt,{WhatsAppAdapter:()=>pme});var ISt,wSt,PSt,zSt,pme,xSt=me(()=>{"use strict";fAt();ISt=ke(SSt()),wSt=ke(hL()),PSt=ke(bL()),zSt=ke(ML());sP();ESt();vSt();pme=class{accountId;platform="whatsapp";eventBus=new vd;status="disconnected";socket=null;session=null;isReconnecting=!1;chatsMap=new Map;contactsMap=new Map;constructor(t){this.accountId=t}async initialize(t){this.session=t,this.status="connecting",this.eventBus.emit("session:status_changed","connecting");let r=t.authData.sessionPath||`./sessions/whatsapp_${this.accountId}`;try{let{state:o,saveCreds:n}=await $2t(r),a=(0,ISt.default)({level:"silent"}),i=[2,3e3,1023223821];try{let c=await Sft();c&&c.version&&(i=c.version)}catch{}let s={version:i,auth:o,logger:a,printQRInTerminal:!1,defaultQueryTimeoutMs:3e4,connectTimeoutMs:3e4};if(t.proxy){let c=this.createProxyAgent(t.proxy);c&&(s.agent=c)}this.socket=pAt(s),this.socket.ev.on("creds.update",n),this.setupListeners()}catch(o){throw this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",o.message||String(o)),o}}async disconnect(){if(this.isReconnecting=!1,this.socket){try{this.socket.end(void 0)}catch{}this.socket=null}this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected")}async sendMessage(t,r){if(!this.socket)throw new Error("WhatsApp adapter not initialized");await this.sendTyping(t,!0);let o=Math.floor(Math.random()*2e3)+1500;await new Promise(i=>setTimeout(i,o)),await this.sendTyping(t,!1);let n={};if(r.type==="text")n={text:r.text};else if(r.type==="image")n={image:{url:r.url||r.filePath},caption:r.caption||""};else if(r.type==="sticker")n={sticker:{url:r.url||r.filePath||r.stickerId}};else if(r.type==="file")n={document:{url:r.url||r.filePath},fileName:r.filename||"file"};else throw new Error(`Unsupported message payload type: ${r.type}`);r.quoteId&&(n.contextInfo={stanzaId:r.quoteId,participant:t.endsWith("@g.us")?void 0:t,quotedMessage:{conversation:"[Tr\xEDch d\u1EABn tin nh\u1EAFn]"}});let a=await this.socket.sendMessage(t,n);if(!a)throw new Error("Failed to send WhatsApp message");return QH(a,this.accountId)}async getConversations(t=20){let r=Array.from(this.chatsMap.values());return r.sort((o,n)=>Number(n.conversationTimestamp||0)-Number(o.conversationTimestamp||0)),r.slice(0,t).map(TSt)}async getMessageHistory(t,r=50,o){return[]}async getCurrentUser(){if(!this.socket)return null;let t=this.socket.authState?.creds?.me||this.socket.user;if(!t)return null;let r=t.id;r.includes(":")&&(r=r.split(":")[0]+"@s.whatsapp.net");let o=t.name||this.socket.user?.name||"WhatsApp User",n="";try{n=await this.socket.profilePictureUrl(r,"image")||""}catch{}return a6({id:r,name:o,imgUrl:n},this.accountId)}async getContactInfo(t){if(this.contactsMap.has(t))return a6(this.contactsMap.get(t));if(!this.socket)throw new Error("WhatsApp adapter not initialized");try{let r=await this.socket.profilePictureUrl(t,"image");return a6({id:t,name:"WhatsApp User",imgUrl:r})}catch{return a6({id:t,name:"WhatsApp User"})}}async markAsRead(t){if(this.socket)try{await this.socket.sendPresenceUpdate("paused",t)}catch{}}async sendTyping(t,r){if(this.socket)try{await this.socket.sendPresenceUpdate(r?"composing":"paused",t)}catch{}}getUnderlyingClient(){return this.socket}setupListeners(){this.socket&&(this.socket.ev.on("connection.update",t=>{let{connection:r,lastDisconnect:o,qr:n}=t;n&&this.eventBus.emit("auth:qr_received",n),r==="connecting"&&(this.status="connecting",this.eventBus.emit("session:status_changed","connecting")),r==="open"&&(this.status="connected",this.eventBus.emit("session:status_changed","connected")),r==="close"&&(o?.error?.output?.statusCode!==ba.loggedOut&&this.session?(this.isReconnecting=!0,this.initialize(this.session)):(this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected","Session logged out or expired")))}),this.socket.ev.on("messages.upsert",t=>{if(t.type==="notify"){for(let r of t.messages)if(r.message)try{let o=QH(r,this.accountId);this.eventBus.emit("message:received",o)}catch{}}}),this.socket.ev.on("presence.update",t=>{try{let r=t.id,o=Object.keys(t.presences);if(o.length>0){let n=o[0],a=t.presences[n];a&&this.eventBus.emit("chat:typing",{conversationId:r,senderId:n,isTyping:a.lastKnownPresence==="composing"})}}catch{}}),this.socket.ev.on("messaging-history.set",t=>{let{chats:r,contacts:o,messages:n}=t;if(r)for(let a of r)a.id&&this.chatsMap.set(a.id,a);if(o)for(let a of o)a.id&&this.contactsMap.set(a.id,a);if(n){for(let a of n)if(a.message)try{let i=QH(a,this.accountId);this.eventBus.emit("message:received",i)}catch{}}}),this.socket.ev.on("chats.upsert",t=>{for(let r of t)r.id&&this.chatsMap.set(r.id,r)}),this.socket.ev.on("chats.update",t=>{for(let r of t)if(r.id&&this.chatsMap.has(r.id)){let o=this.chatsMap.get(r.id);this.chatsMap.set(r.id,{...o,...r})}}),this.socket.ev.on("contacts.upsert",t=>{for(let r of t)r.id&&this.contactsMap.set(r.id,r)}),this.socket.ev.on("contacts.update",t=>{for(let r of t)if(r.id&&this.contactsMap.has(r.id)){let o=this.contactsMap.get(r.id);this.contactsMap.set(r.id,{...o,...r})}}))}createProxyAgent(t){try{return t.startsWith("socks")?new wSt.SocksProxyAgent(t):t.startsWith("https")?new zSt.HttpsProxyAgent(t):new PSt.HttpProxyAgent(t)}catch{return}}}});var ql=ke(require("fs")),dI=ke(require("path")),Xh=ke(require("os")),fc=require("child_process");var Ty=ke(require("os")),qm=ke(require("fs")),$I=ke(require("path")),Cge=ke(require("crypto"));function QIt(){return"1.0.17"}var Lp=QIt();function D6(){return{totalMemMb:Math.round(Ty.default.totalmem()/(1024*1024)),freeMemMb:Math.round(Ty.default.freemem()/(1024*1024)),cpuCount:Ty.default.cpus()?.length||1,platform:Ty.default.platform()}}function ZIt(e){try{let t=$I.default.join(Ty.default.homedir(),".zplus");qm.default.existsSync(t)||qm.default.mkdirSync(t,{recursive:!0});let r=e?`_slot_${e.replace(/[^a-zA-Z0-9_-]/g,"")}`:"",o=$I.default.join(t,`worker_identity${r}.json`);if(qm.default.existsSync(o)){let h=JSON.parse(qm.default.readFileSync(o,"utf-8"));if(h&&h.workerId)return{workerId:h.workerId,workerName:h.workerName||h.workerId}}let a=(Ty.default.hostname()||"node").replace(/[^a-zA-Z0-9_-]/g,"_").toLowerCase().slice(0,14),i=Cge.default.randomBytes(2).toString("hex"),s=`worker_${a}${r}_${i}`,c=e?` #${e}`:"",l=`Worker ${a.toUpperCase()}${c}`,p={workerId:s,workerName:l,slot:e||"default",createdAt:new Date().toISOString()};return qm.default.writeFileSync(o,JSON.stringify(p,null,2),"utf-8"),p}catch{let t=e?`_slot_${e}`:"",r=`worker_${Ty.default.hostname().replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,14)||"node"}${t}`;return{workerId:r,workerName:r}}}var N6=class{static loadFromEnv(t=process.argv.slice(2)){let r=R=>{for(let N of t){if(N.startsWith(`--${R}=`))return N.split("=").slice(1).join("=");if(N===`--${R}`&&t[t.indexOf(N)+1])return t[t.indexOf(N)+1]}},o=r("cloud-provider")||process.env.CLOUD_PROVIDER||"appwrite",n=r("token")||process.env.CLOUD_AUTH_TOKEN||process.env.APPWRITE_SESSION_TOKEN||process.env.WORKER_TOKEN||process.env.SESSION_TOKEN,a=r("jwt")||process.env.CLOUD_JWT||process.env.APPWRITE_JWT||process.env.JWT,i=r("api-key")||process.env.CLOUD_API_KEY||process.env.APPWRITE_API_KEY,s=r("secret")||process.env.DESKTOP_SECRET,c=r("team-id")||process.env.TEAM_ID||"default",l=t.includes("--enable-http")||r("enable-http")==="true"||process.env.ENABLE_HTTP==="true"||!1,p=r("port")||process.env.PORT,h=p?Number(p):l?8080:void 0,y=r("endpoint")||process.env.CLOUD_ENDPOINT||process.env.CLOUD_API_ENDPOINT||process.env.APPWRITE_ENDPOINT||process.env.VITE_APPWRITE_ENDPOINT||"https://api.softty.net/v1",b=r("project-id")||process.env.CLOUD_PROJECT_ID||process.env.CLOUD_TENANT_ID||process.env.APPWRITE_PROJECT_ID||process.env.VITE_APPWRITE_PROJECT_ID||"699cfc3100136099c1c1",m=r("database-id")||process.env.CLOUD_DATABASE_ID||process.env.APPWRITE_DATABASE_ID||process.env.VITE_APPWRITE_DATABASE_ID||"zplus_app",M=Math.max(1,Math.round(Ty.default.totalmem()/(1024*1024*1024))),_=Math.min(200,Math.max(20,M*25)),O=r("max-capacity")||process.env.MAX_CAPACITY,S=Number(O||_),v=r("slot")||process.env.WORKER_SLOT||process.env.pm_id||process.env.NODE_APP_INSTANCE,T=ZIt(v),w=r("worker-id")||process.env.WORKER_ID||T.workerId,P=r("worker-name")||process.env.WORKER_NAME||process.env.HOSTNAME||T.workerName,C=r("user-id")||process.env.USER_ID||process.env.SOFTTY_USER_ID;return{workerId:w,version:Lp,enableHttp:l,port:h,userId:C,teamId:c,workerName:P,maxCapacity:S,recommendedCapacity:_,clusterPollIntervalMs:Number(r("poll-interval")||process.env.CLUSTER_POLL_INTERVAL_MS||5e3),cloudProvider:o,cloudEndpoint:y,cloudProjectId:b,cloudSessionToken:n,cloudJwt:a,cloudApiKey:i,cloudDatabaseId:m,appwriteEndpoint:y,appwriteProjectId:b,appwriteSessionToken:n,appwriteJwt:a,appwriteApiKey:i,desktopSecret:s,databaseId:m,heartbeatIntervalMs:Number(r("heartbeat-interval")||process.env.HEARTBEAT_INTERVAL_MS||3e4),geminiApiKey:r("gemini-api-key")||process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY,openaiApiKey:r("openai-api-key")||process.env.OPENAI_API_KEY,deepseekApiKey:r("deepseek-api-key")||process.env.DEEPSEEK_API_KEY,anthropicApiKey:r("anthropic-api-key")||process.env.ANTHROPIC_API_KEY,customAiApiKey:r("custom-ai-api-key")||process.env.CUSTOM_AI_API_KEY,aiBaseUrl:r("ai-base-url")||process.env.AI_BASE_URL,aiProvider:r("ai-provider")||process.env.AI_PROVIDER,aiModel:r("ai-model")||process.env.AI_MODEL,nightSystemPrompt:r("night-system-prompt")||process.env.NIGHT_SYSTEM_PROMPT,nightFallbackReply:r("night-fallback-reply")||process.env.NIGHT_FALLBACK_REPLY,logLevel:r("log-level")||process.env.LOG_LEVEL||"info"}}};var fI=ke(require("fs")),fme=ke(require("os")),FA=ke(require("path")),KSt=ke(require("crypto")),HSt=ke(go());var jge=ke(go()),U6=class{runners=new Map;logger;constructor(t){this.logger=t||(0,jge.createLogger)("ChannelRunnerRegistry")}register(t){let r=`${t.platform}:${t.accountId}`;this.runners.has(r)&&this.logger.warn(`Overwriting existing runner for ${r}`),this.runners.set(r,t),this.logger.info(`Registered runner for ${r}`)}unregister(t,r){let o=`${t}:${r}`,n=this.runners.get(o);return n?(n.stop().catch(a=>{this.logger.error(`Error stopping runner ${o} during unregister`,a)}),this.runners.delete(o),this.logger.info(`Unregistered runner for ${o}`),!0):!1}get(t,r){return this.runners.get(`${t}:${r}`)}getAll(){return Array.from(this.runners.values())}getCount(){return this.runners.size}async startAll(){this.logger.info(`Starting all ${this.runners.size} registered channel runners...`);for(let[t,r]of this.runners.entries())try{await r.start()}catch(o){this.logger.error(`Failed to start runner ${t}:`,o)}}async stopAll(){this.logger.info(`Stopping all ${this.runners.size} channel runners...`);for(let[t,r]of this.runners.entries())try{await r.stop()}catch(o){this.logger.error(`Failed to stop runner ${t}:`,o)}this.runners.clear()}};var Gge=ke(go()),W6=class{constructor(t=6e4,r,o){this.defaultTtlMs=t;this.logger=r||(0,Gge.createLogger)("DistributedLockManager"),this.storageProvider=o}logger;locks=new Map;preemptCallbacks=[];storageProvider;setStorageProvider(t){this.storageProvider=t}getStorageProvider(){return this.storageProvider}onPreempt(t){this.preemptCallbacks.push(t)}async acquireLockRemote(t,r,o=this.defaultTtlMs){return this.storageProvider&&!await this.storageProvider.acquireLock(t,r,o)?!1:this.acquireLock(t,r,o)}async releaseLockRemote(t,r){return this.storageProvider&&await this.storageProvider.releaseLock(t,r),this.releaseLock(t,r)}async renewLockRemote(t,r,o=this.defaultTtlMs){return this.storageProvider&&await this.storageProvider.renewLock(t,r,o),this.acquireLock(t,r,o)}acquireLock(t,r,o=this.defaultTtlMs){let n=Date.now(),a=this.locks.get(t);return a&&a.expiresAt>n&&a.ownerId!==r?(this.logger.warn(`Lock denied for account ${t}: currently held by ${a.ownerId} (expires in ${a.expiresAt-n}ms)`),!1):(this.locks.set(t,{accountId:t,ownerId:r,acquiredAt:n,expiresAt:n+o}),this.logger.info(`\u2705 Lock granted: account=${t}, owner=${r}, ttl=${o}ms`),!0)}async preemptLock(t,r){let o=this.locks.get(t);this.logger.info(`\u26A1 Preemption triggered for account ${t} by master ${r} (previous owner: ${o?.ownerId||"none"})`);let n=this.preemptCallbacks.map(i=>{try{return Promise.resolve(i(t,r))}catch(s){return this.logger.error(`Error in preempt callback for ${t}:`,s),Promise.resolve()}});await Promise.race([Promise.all(n),new Promise(i=>setTimeout(i,1e3))]);let a=Date.now();return this.locks.set(t,{accountId:t,ownerId:r,acquiredAt:a,expiresAt:a+this.defaultTtlMs}),this.logger.info(`\u2705 Account ${t} preempted successfully by ${r}.`),!0}releaseLock(t,r){let o=this.locks.get(t);return o?r&&o.ownerId!==r?(this.logger.warn(`Attempted unauthorized lock release for ${t} by ${r} (real owner: ${o.ownerId})`),!1):(this.locks.delete(t),this.logger.info(`\u{1F513} Lock released for account ${t}.`),!0):!0}releaseAllForOwner(t){let r=0;for(let[o,n]of this.locks.entries())n.ownerId===t&&(this.locks.delete(o),r++);return r}isLocked(t){let r=this.locks.get(t);return r?r.expiresAt>Date.now():!1}getLockOwner(t){let r=this.locks.get(t);return!r||r.expiresAt<=Date.now()?null:r.ownerId}};var zS=ke(require("fs")),Kge=ke(require("path")),Hge=ke(go()),F6=class{logger;queue=[];maxCapacity;persistenceFilePath;constructor(t=1e4,r,o){this.maxCapacity=t,this.logger=r||(0,Hge.createLogger)("CloudPendingMessageQueue"),this.persistenceFilePath=o,this.loadFromDisk()}loadFromDisk(){if(this.persistenceFilePath)try{if(zS.default.existsSync(this.persistenceFilePath)){let t=zS.default.readFileSync(this.persistenceFilePath,"utf8");if(t&&t.trim()){let r=JSON.parse(t);Array.isArray(r)&&(this.queue.push(...r),this.logger.info(`\u{1F4E6} Restored ${r.length} pending delta messages from disk: ${this.persistenceFilePath}`))}}}catch(t){this.logger.warn(`Failed to restore pending messages from disk (${this.persistenceFilePath}): ${t?.message}`)}}saveToDisk(){if(this.persistenceFilePath)try{let t=Kge.default.dirname(this.persistenceFilePath);zS.default.existsSync(t)||zS.default.mkdirSync(t,{recursive:!0}),zS.default.writeFileSync(this.persistenceFilePath,JSON.stringify(this.queue),"utf8")}catch(t){this.logger.warn(`Failed to save pending messages to disk (${this.persistenceFilePath}): ${t?.message}`)}}enqueue(t){if(this.queue.length>=this.maxCapacity){let r=this.queue.shift();this.logger.warn(`Queue capacity reached (${this.maxCapacity}). Dropped oldest message: ${r?.id}`)}this.queue.push(t),this.saveToDisk(),this.logger.debug(`Enqueued pending message ${t.id} for account ${t.accountId} (Total pending: ${this.queue.length})`)}getDeltas(t,r=0){return this.queue.filter(o=>{let n=!t||o.accountId===t,a=o.timestamp>=r;return n&&a})}purgeSynced(t,r){let o=this.queue.length,n=[];for(let i=0;i<this.queue.length;i++){let s=this.queue[i];s.timestamp<=t&&(!r||s.accountId===r)&&n.push(i)}for(let i=n.length-1;i>=0;i--)this.queue.splice(n[i],1);let a=o-this.queue.length;return a>0&&(this.saveToDisk(),this.logger.info(`Purged ${a} synced delta messages from queue.`)),a}getCount(){return this.queue.length}clear(){this.queue.length=0,this.saveToDisk()}};var Vge=ke(go()),j6=class{logger;campaigns=new Map;rules=new Map;threadHistory=new Map;lastReplyTimes=new Map;aiConfig={enabled:!1};constructor(t,r){this.logger=t||(0,Vge.createLogger)("HeadlessAutomationEngine"),r&&this.configure(r)}configure(t){this.aiConfig={...this.aiConfig,...t},this.logger.info(`[HeadlessAutomation] Configured AI provider: ${this.aiConfig.provider||"none"} (model: ${this.aiConfig.model||"none"}, enabled: ${this.aiConfig.enabled===!0})`)}getAiConfig(){return{...this.aiConfig}}registerCampaign(t){this.campaigns.set(t.id,t),this.logger.info(`Loaded campaign ${t.id} (${t.name})`)}registerRule(t){this.rules.set(t.id,t),this.logger.info(`Loaded automation rule ${t.id} (${t.name})`)}async evaluateIncomingMessage(t){if(t.isSelf||t.senderType&&t.senderType!=="customer"||!t.content||typeof t.content!="string"||!t.content.trim())return null;let r=t.threadId||t.conversationId||t.senderId,o=Date.now(),n=this.lastReplyTimes.get(r)||0;if(o-n<3e3)return this.logger.debug(`[HeadlessAutomation] Rate limit hit for thread ${r}. Skipping reply.`),null;let a=t.content.trim(),i=this.getThreadHistory(r);if(i.push({role:"user",content:a,timestamp:o}),i.length>6&&i.splice(0,i.length-6),!this.aiConfig||this.aiConfig.enabled!==!0||!this.aiConfig.provider)return this.logger.debug(`[HeadlessAutomation] Bot AI is disabled or unconfigured. Message saved, no auto-reply sent for thread ${r}.`),null;let s=t.accountId,c=this.aiConfig.accountBotConfigs,l=s&&c?c[s]:void 0;if(!l||!l.isBotEnabled)return this.logger.debug(`[HeadlessAutomation] Account [${s||"unknown"}] has not been configured or enabled for Bot AI by user in Chatbot settings. Message saved, no auto-reply sent.`),null;let p=t,h=!!p.isGroup||!!p.groupId||typeof t.threadId=="string"&&t.threadId.startsWith("g")||typeof t.conversationId=="string"&&t.conversationId.startsWith("g"),y=l.replyTarget||"all";if(y==="individual"&&h)return this.logger.debug(`[HeadlessAutomation] Account [${s}] configured for individual chat only. Skipping group message ${r}.`),null;if(y==="group"&&!h)return this.logger.debug(`[HeadlessAutomation] Account [${s}] configured for group chat only. Skipping direct message ${r}.`),null;let b=l.systemPrompt&&l.systemPrompt.trim()?l.systemPrompt:this.aiConfig.systemPrompt;if(this.aiConfig.provider==="rule_based")return this.aiConfig.fallbackMessage&&this.aiConfig.fallbackMessage.trim().length>0?(this.lastReplyTimes.set(r,o),this.aiConfig.fallbackMessage.trim()):null;let m=this.aiConfig.provider,M=this.aiConfig.apiKey;if(M||(m==="openai"?M=process.env.OPENAI_API_KEY:m==="deepseek"?M=process.env.DEEPSEEK_API_KEY:m==="anthropic"?M=process.env.ANTHROPIC_API_KEY:m==="custom"?M=process.env.CUSTOM_AI_API_KEY:m==="gemini"&&(M=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)),!M&&m!=="custom")return this.logger.debug(`[HeadlessAutomation] No API key found for provider [${m}]. No auto-reply sent.`),null;try{let _=null;if(m==="openai"||m==="custom"||m==="deepseek")_=await this.callOpenAiCompatible(a,i,M||"",b);else if(m==="anthropic")_=await this.callAnthropic(a,i,M||"",b);else if(m==="gemini")_=await this.callGemini(a,i,M||"",b);else return this.logger.warn(`[HeadlessAutomation] Unsupported AI provider [${m}]. No reply generated.`),null;if(_&&_.trim().length>0){let O=_.trim();return i.push({role:"model",content:O,timestamp:Date.now()}),this.lastReplyTimes.set(r,Date.now()),O}}catch(_){this.logger.warn(`[HeadlessAutomation] AI generation error with provider [${m}] (${_?.message}).`)}return this.aiConfig.fallbackMessage&&this.aiConfig.fallbackMessage.trim().length>0?(this.lastReplyTimes.set(r,Date.now()),this.aiConfig.fallbackMessage.trim()):null}getThreadHistory(t){let r=this.threadHistory.get(t);return r||(r=[],this.threadHistory.set(t,r)),r}async callGemini(t,r,o,n){let i=`https://generativelanguage.googleapis.com/v1beta/models/${this.aiConfig.model||"gemini-2.0-flash"}:generateContent?key=${o}`,s=r.map(y=>({role:y.role==="model"?"model":"user",parts:[{text:y.content}]}));(s.length===0||s[s.length-1].parts[0]?.text!==t)&&s.push({role:"user",parts:[{text:t}]});let c={contents:s,generationConfig:{temperature:this.aiConfig.temperature??.7,maxOutputTokens:this.aiConfig.maxTokens??300}},l=n||this.aiConfig.systemPrompt;l&&l.trim()&&(c.systemInstruction={parts:[{text:l.trim()}]});let p=new AbortController,h=setTimeout(()=>p.abort(),7e3);try{let y=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c),signal:p.signal});if(!y.ok){let M=await y.text();return this.logger.warn(`[HeadlessAutomation] Gemini API returned status ${y.status}: ${M.slice(0,200)}`),null}return(await y.json())?.candidates?.[0]?.content?.parts?.[0]?.text||null}finally{clearTimeout(h)}}async callOpenAiCompatible(t,r,o,n){let a=(this.aiConfig.baseUrl||(this.aiConfig.provider==="deepseek"?"https://api.deepseek.com/v1":"https://api.openai.com/v1")).replace(/\/+$/,"");a.includes("api.deepseek.com")&&!a.endsWith("/v1")?a+="/v1":(a.includes("11434")||a.includes("ollama"))&&(a=a.replace(/\/api$/,"").replace(/\/+$/,""),a.endsWith("/v1")||(a+="/v1"));let i=`${a}/chat/completions`,s=this.aiConfig.model||(this.aiConfig.provider==="deepseek"?"deepseek-chat":this.aiConfig.provider==="openai"?"gpt-4o-mini":"deepseek-chat"),c=n||this.aiConfig.systemPrompt,l=[...c&&c.trim()?[{role:"system",content:c.trim()}]:[],...r.map(b=>({role:b.role==="model"?"assistant":"user",content:b.content}))],p={"Content-Type":"application/json"};o&&(p.Authorization=`Bearer ${o}`);let h=new AbortController,y=setTimeout(()=>h.abort(),8e3);try{let b=await fetch(i,{method:"POST",headers:p,body:JSON.stringify({model:s,messages:l,temperature:this.aiConfig.temperature??.7,max_tokens:this.aiConfig.maxTokens??300}),signal:h.signal});if(!b.ok){let M=await b.text();return this.logger.warn(`[HeadlessAutomation] OpenAI-compatible API returned status ${b.status}: ${M.slice(0,200)}`),null}return(await b.json())?.choices?.[0]?.message?.content||null}finally{clearTimeout(y)}}async callAnthropic(t,r,o,n){let a="https://api.anthropic.com/v1/messages",i=this.aiConfig.model||"claude-3-5-haiku-20241022",s=r.map(p=>({role:p.role==="model"?"assistant":"user",content:p.content}));(s.length===0||s[s.length-1].content!==t)&&s.push({role:"user",content:t});let c=new AbortController,l=setTimeout(()=>c.abort(),8e3);try{let p=n||this.aiConfig.systemPrompt,h={model:i,messages:s,max_tokens:this.aiConfig.maxTokens??300,temperature:this.aiConfig.temperature??.7};p&&p.trim()&&(h.system=p.trim());let y=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":o,"anthropic-version":"2023-06-01"},body:JSON.stringify(h),signal:c.signal});if(!y.ok){let m=await y.text();return this.logger.warn(`[HeadlessAutomation] Anthropic API returned status ${y.status}: ${m.slice(0,200)}`),null}return(await y.json())?.content?.[0]?.text||null}finally{clearTimeout(l)}}clear(){this.campaigns.clear(),this.rules.clear(),this.threadHistory.clear(),this.lastReplyTimes.clear()}};var $ge=ke(go()),G6=class{logger;constructor(t){this.logger=t||(0,$ge.createLogger)("PushNotificationDispatcher")}async dispatchMessageAlert(t,r){let o=`${r.senderName} (${r.platform.toUpperCase()})`,n=r.content||"New multimedia message received";return this.sendNotification({recipientToken:t,title:o,body:n,data:{messageId:r.id,threadId:r.threadId,platform:r.platform,accountId:r.accountId}})}async sendNotification(t){return this.logger.debug(`Dispatching push notification to device token: ${t.recipientToken.slice(0,8)}...`),!0}};var kSt=ke(require("http")),CSt=require("url"),NSt=ke(go());var cP=ke(go());var ce=class extends Error{constructor(t,r){super(t),this.name="ZcaApiError",this.code=r||null}};var XI=class extends ce{constructor(){super("Missing `imageMetadataGetter`. Please provide it in the Zalo object options."),this.name="ZaloApiMissingImageMetadataGetter"}};var K6=class extends ce{constructor(t="Operation aborted"){super(t),this.name="ZaloApiLoginQRAborted"}};var H6=class extends ce{constructor(t="Login QR request declined"){super(t),this.name="ZaloApiLoginQRDeclined"}};var Jge;(function(e){e[e.Everyone=0]="Everyone",e[e.Stranger=1]="Stranger",e[e.SpecificFriends=2]="SpecificFriends",e[e.FriendsExcept=3]="FriendsExcept"})(Jge||(Jge={}));var V6;(function(e){e[e.Note=1]="Note",e[e.PinnedMessage=2]="PinnedMessage",e[e.Poll=3]="Poll"})(V6||(V6={}));var Xe;(function(e){e[e.User=0]="User",e[e.Group=1]="Group"})(Xe||(Xe={}));var $6;(function(e){e[e.Group=1]="Group",e[e.User=3]="User",e[e.Page=5]="Page"})($6||($6={}));var Xge;(function(e){e[e.Male=0]="Male",e[e.Female=1]="Female"})(Xge||(Xge={}));var Yl;(function(e){e[e.Small=120]="Small",e[e.Large=240]="Large"})(Yl||(Yl={}));var Yge;(function(e){e[e.ABBank=970425]="ABBank",e[e.ACB=970416]="ACB",e[e.Agribank=970405]="Agribank",e[e.BIDV=970418]="BIDV",e[e.BVBank=970454]="BVBank",e[e.BacA_Bank=970409]="BacA_Bank",e[e.BaoViet_Bank=970438]="BaoViet_Bank",e[e.CAKE=546034]="CAKE",e[e.CB_Bank=970444]="CB_Bank",e[e.CIMB_Bank=422589]="CIMB_Bank",e[e.Coop_Bank=970446]="Coop_Bank",e[e.DBS_Bank=796500]="DBS_Bank",e[e.DongA_Bank=970406]="DongA_Bank",e[e.Eximbank=970431]="Eximbank",e[e.GPBank=970408]="GPBank",e[e.HDBank=970437]="HDBank",e[e.HSBC=458761]="HSBC",e[e.HongLeong_Bank=970442]="HongLeong_Bank",e[e.IBK_HCM=970456]="IBK_HCM",e[e.IBK_HN=970455]="IBK_HN",e[e.Indovina_Bank=970434]="Indovina_Bank",e[e.KBank=668888]="KBank",e[e.KienlongBank=970452]="KienlongBank",e[e.Kookmin_Bank_HCM=970463]="Kookmin_Bank_HCM",e[e.Kookmin_Bank_HN=970462]="Kookmin_Bank_HN",e[e.LPBank=970449]="LPBank",e[e.MB_Bank=970422]="MB_Bank",e[e.MSB=970426]="MSB",e[e.NCB=970419]="NCB",e[e.Nam_A_Bank=970428]="Nam_A_Bank",e[e.NongHyup_Bank=801011]="NongHyup_Bank",e[e.OCB=970448]="OCB",e[e.Ocean_Bank=970414]="Ocean_Bank",e[e.PGBank=970430]="PGBank",e[e.PVcomBank=970412]="PVcomBank",e[e.Public_Bank_Vietnam=970439]="Public_Bank_Vietnam",e[e.SCB=970429]="SCB",e[e.SHB=970443]="SHB",e[e.Sacombank=970403]="Sacombank",e[e.Saigon_Bank=970400]="Saigon_Bank",e[e.SeABank=970440]="SeABank",e[e.Shinhan_Bank=970424]="Shinhan_Bank",e[e.Standard_Chartered_Vietnam=970410]="Standard_Chartered_Vietnam",e[e.TNEX=9704261]="TNEX",e[e.TPBank=970423]="TPBank",e[e.Techcombank=970407]="Techcombank",e[e.Timo=963388]="Timo",e[e.UBank=546035]="UBank",e[e.United_Overseas_Bank_Vietnam=970458]="United_Overseas_Bank_Vietnam",e[e.VIB=970441]="VIB",e[e.VPBank=970432]="VPBank",e[e.VRB=970421]="VRB",e[e.VietABank=970427]="VietABank",e[e.VietBank=970433]="VietBank",e[e.Vietcombank=970436]="Vietcombank",e[e.VietinBank=970415]="VietinBank",e[e.Woori_Bank=970457]="Woori_Bank"})(Yge||(Yge={}));var J6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.deliveredUids[0],this.isSelf=!1}},X6=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.groupId,this.isSelf=r.deliveredUids.includes(t)}};var Er;(function(e){e[e.ADD=0]="ADD",e[e.REMOVE=1]="REMOVE",e[e.REQUEST=2]="REQUEST",e[e.UNDO_REQUEST=3]="UNDO_REQUEST",e[e.REJECT_REQUEST=4]="REJECT_REQUEST",e[e.SEEN_FRIEND_REQUEST=5]="SEEN_FRIEND_REQUEST",e[e.BLOCK=6]="BLOCK",e[e.UNBLOCK=7]="UNBLOCK",e[e.BLOCK_CALL=8]="BLOCK_CALL",e[e.UNBLOCK_CALL=9]="UNBLOCK_CALL",e[e.PIN_UNPIN=10]="PIN_UNPIN",e[e.PIN_CREATE=11]="PIN_CREATE",e[e.UNKNOWN=12]="UNKNOWN"})(Er||(Er={}));function Qge(e,t,r){if(r==Er.ADD||r==Er.REMOVE||r==Er.BLOCK||r==Er.UNBLOCK||r==Er.BLOCK_CALL||r==Er.UNBLOCK_CALL)return{type:r,data:t,threadId:t,isSelf:![Er.ADD,Er.REMOVE].includes(r)};if(r==Er.REJECT_REQUEST||r==Er.UNDO_REQUEST){let o=t.toUid;return{type:r,data:t,threadId:o,isSelf:t.fromUid==e}}else if(r==Er.REQUEST){let o=t.toUid;return{type:r,data:t,threadId:o,isSelf:t.fromUid==e}}else{if(r==Er.SEEN_FRIEND_REQUEST)return{type:r,data:t,threadId:e,isSelf:!0};if(r==Er.PIN_CREATE){let o=t.conversationId;return{type:r,data:t,threadId:o,isSelf:t.actorId==e}}else if(r==Er.PIN_UNPIN){let o=t.conversationId;return{type:r,data:t,threadId:o,isSelf:t.actorId==e}}else return{type:Er.UNKNOWN,data:JSON.stringify(t),threadId:"",isSelf:!1}}}var Zge;(function(e){e[e.Note=0]="Note",e[e.Message=2]="Message",e[e.Poll=3]="Poll"})(Zge||(Zge={}));var e2e;(function(e){e[e.Group=1]="Group",e[e.Community=2]="Community"})(e2e||(e2e={}));var Gi;(function(e){e.JOIN_REQUEST="join_request",e.JOIN="join",e.LEAVE="leave",e.REMOVE_MEMBER="remove_member",e.BLOCK_MEMBER="block_member",e.UPDATE_SETTING="update_setting",e.UPDATE="update",e.NEW_LINK="new_link",e.ADD_ADMIN="add_admin",e.REMOVE_ADMIN="remove_admin",e.NEW_PIN_TOPIC="new_pin_topic",e.UPDATE_PIN_TOPIC="update_pin_topic",e.REORDER_PIN_TOPIC="reorder_pin_topic",e.UPDATE_BOARD="update_board",e.REMOVE_BOARD="remove_board",e.UPDATE_TOPIC="update_topic",e.UNPIN_TOPIC="unpin_topic",e.REMOVE_TOPIC="remove_topic",e.ACCEPT_REMIND="accept_remind",e.REJECT_REMIND="reject_remind",e.REMIND_TOPIC="remind_topic",e.UPDATE_AVATAR="update_avatar",e.UNKNOWN="unknown"})(Gi||(Gi={}));function t2e(e,t,r,o){var n;let a="group_id"in t?t.group_id:t.groupId;if(r==Gi.JOIN_REQUEST)return{type:r,act:o,data:t,threadId:a,isSelf:!1};if(r==Gi.NEW_PIN_TOPIC||r==Gi.UNPIN_TOPIC||r==Gi.UPDATE_PIN_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.actorId==e};if(r==Gi.REORDER_PIN_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.actorId==e};if(r==Gi.UPDATE_BOARD||r==Gi.REMOVE_BOARD)return{type:r,act:o,data:t,threadId:a,isSelf:t.sourceId==e};if(r==Gi.ACCEPT_REMIND||r==Gi.REJECT_REMIND)return{type:r,act:o,data:t,threadId:a,isSelf:t.updateMembers.some(i=>i==e)};if(r==Gi.REMIND_TOPIC)return{type:r,act:o,data:t,threadId:a,isSelf:t.creatorId==e};{let i=t;return{type:r,act:o,data:i,threadId:a,isSelf:((n=i.updateMembers)===null||n===void 0?void 0:n.some(s=>s.id==e))||i.sourceId==e}}}var YI=class{constructor(t,r){this.type=Xe.User,this.data=r,this.threadId=r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t),r.quote&&(r.quote.ownerId=String(r.quote.ownerId))}},UO=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.idTo,this.isSelf=r.uidFrom=="0",r.uidFrom=="0"&&(r.uidFrom=t),r.quote&&(r.quote.ownerId=String(r.quote.ownerId))}};var gn;(function(e){e.HEART="/-heart",e.LIKE="/-strong",e.HAHA=":>",e.WOW=":o",e.CRY=":-((",e.ANGRY=":-h",e.KISS=":-*",e.TEARS_OF_JOY=":')",e.SHIT="/-shit",e.ROSE="/-rose",e.BROKEN_HEART="/-break",e.DISLIKE="/-weak",e.LOVE=";xx",e.CONFUSED=";-/",e.WINK=";-)",e.FADE="/-fade",e.SUN="/-li",e.BIRTHDAY="/-bd",e.BOMB="/-bome",e.OK="/-ok",e.PEACE="/-v",e.THANKS="/-thanks",e.PUNCH="/-punch",e.SHARE="/-share",e.PRAY="_()_",e.NO="/-no",e.BAD="/-bad",e.LOVE_YOU="/-loveu",e.SAD="--b",e.VERY_SAD=":((",e.COOL="x-)",e.NERD="8-)",e.BIG_SMILE=";-d",e.SUNGLASSES="b-)",e.NEUTRAL=":--|",e.SAD_FACE="p-(",e.BYE=":-bye",e.SLEEPY="|-)",e.WIPE=":wipe",e.DIG=":-dig",e.ANGUISH="&-(",e.HANDCLAP=":handclap",e.ANGRY_FACE=">-|",e.F_CHAIR=":-f",e.L_CHAIR=":-l",e.R_CHAIR=":-r",e.SILENT=";-x",e.SURPRISE=":-o",e.EMBARRASSED=";-s",e.AFRAID=";-a",e.SAD2=":-<",e.BIG_LAUGH=":))",e.RICH="$-)",e.BEER="/-beer",e.NONE=""})(gn||(gn={}));var RS=class{constructor(t,r,o){this.data=r,this.threadId=o||r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",this.isGroup=o,r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t)}};var QI;(function(e){e[e.None=0]="None",e[e.Daily=1]="Daily",e[e.Weekly=2]="Weekly",e[e.Monthly=3]="Monthly"})(QI||(QI={}));var Y6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.idTo,this.isSelf=!1}},Q6=class{constructor(t,r){this.type=Xe.Group,this.data=r,this.threadId=r.groupId,this.isSelf=r.seenUids.includes(t)}};var Z6=class{constructor(t){this.type=Xe.User,this.data=t,this.threadId=t.uid,this.isSelf=!1}},e5=class{constructor(t){this.type=Xe.Group,this.data=t,this.threadId=t.gid,this.isSelf=!1}};var ZI=class{constructor(t,r,o){this.data=r,this.threadId=o||r.uidFrom=="0"?r.idTo:r.uidFrom,this.isSelf=r.uidFrom=="0",this.isGroup=o,r.idTo=="0"&&(r.idTo=t),r.uidFrom=="0"&&(r.uidFrom=t)}};var Fs;(function(e){e[e.Other=0]="Other",e[e.RealEstate=1]="RealEstate",e[e.TechnologyAndDevices=2]="TechnologyAndDevices",e[e.TravelAndHospitality=3]="TravelAndHospitality",e[e.EducationAndTraining=4]="EducationAndTraining",e[e.ShoppingAndRetail=5]="ShoppingAndRetail",e[e.CosmeticsAndBeauty=6]="CosmeticsAndBeauty",e[e.RestaurantAndCafe=7]="RestaurantAndCafe",e[e.AutoAndMotorbike=8]="AutoAndMotorbike",e[e.FashionAndApparel=9]="FashionAndApparel",e[e.FoodAndBeverage=10]="FoodAndBeverage",e[e.MediaAndEntertainment=11]="MediaAndEntertainment",e[e.InternalCommunications=12]="InternalCommunications",e[e.Transportation=13]="Transportation",e[e.Telecommunications=14]="Telecommunications"})(Fs||(Fs={}));var cKn={[Fs.Other]:"D\u1ECBch v\u1EE5 kh\xE1c (Kh\xF4ng hi\u1EC3n th\u1ECB)",[Fs.RealEstate]:"B\u1EA5t \u0111\u1ED9ng s\u1EA3n",[Fs.TechnologyAndDevices]:"C\xF4ng ngh\u1EC7 & Thi\u1EBFt b\u1ECB",[Fs.TravelAndHospitality]:"Du l\u1ECBch & L\u01B0u tr\xFA",[Fs.EducationAndTraining]:"Gi\xE1o d\u1EE5c & \u0110\xE0o t\u1EA1o",[Fs.ShoppingAndRetail]:"Mua s\u1EAFm & B\xE1n l\u1EBB",[Fs.CosmeticsAndBeauty]:"M\u1EF9 ph\u1EA9m & L\xE0m \u0111\u1EB9p",[Fs.RestaurantAndCafe]:"Nh\xE0 h\xE0ng & Qu\xE1n",[Fs.AutoAndMotorbike]:"\xD4 t\xF4 & Xe m\xE1y",[Fs.FashionAndApparel]:"Th\u1EDDi trang & May m\u1EB7c",[Fs.FoodAndBeverage]:"Th\u1EF1c ph\u1EA9m & \u0110\u1ED3 u\u1ED1ng",[Fs.MediaAndEntertainment]:"Truy\u1EC1n th\xF4ng & Gi\u1EA3i tr\xED",[Fs.InternalCommunications]:"Truy\u1EC1n th\xF4ng n\u1ED9i b\u1ED9",[Fs.Transportation]:"V\u1EADn t\u1EA3i",[Fs.Telecommunications]:"Vi\u1EC5n th\xF4ng"};var C_e=ke(CS(),1),N_e=require("node:fs/promises");var qr=ke(BOe(),1),Ew=ke(require("node:crypto"),1),kJ=ke(require("node:fs"),1),dD=ke(require("node:path"),1);function US(e){let t=e.length;for(;--t>=0;)e[t]=0}var KPt=0,EMe=1,HPt=2,VPt=3,$Pt=258,AJ=29,Mw=256,fw=Mw+1+AJ,LS=30,SJ=19,TMe=2*fw+1,KO=15,Z$=16,JPt=7,EJ=256,vMe=16,IMe=17,wMe=18,dJ=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),eD=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),XPt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),PMe=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),YPt=512,zy=new Array((fw+2)*2);US(zy);var lw=new Array(LS*2);US(lw);var dw=new Array(YPt);US(dw);var hw=new Array($Pt-VPt+1);US(hw);var TJ=new Array(AJ);US(TJ);var tD=new Array(LS);US(tD);function eJ(e,t,r,o,n){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=o,this.max_length=n,this.has_stree=e&&e.length}var zMe,RMe,xMe;function tJ(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}var kMe=e=>e<256?dw[e]:dw[256+(e>>>7)],yw=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},Ql=(e,t,r)=>{e.bi_valid>Z$-r?(e.bi_buf|=t<<e.bi_valid&65535,yw(e,e.bi_buf),e.bi_buf=t>>Z$-e.bi_valid,e.bi_valid+=r-Z$):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)},ud=(e,t,r)=>{Ql(e,r[t*2],r[t*2+1])},CMe=(e,t)=>{let r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1},QPt=e=>{e.bi_valid===16?(yw(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},ZPt=(e,t)=>{let r=t.dyn_tree,o=t.max_code,n=t.stat_desc.static_tree,a=t.stat_desc.has_stree,i=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,p,h,y,b,m,M=0;for(y=0;y<=KO;y++)e.bl_count[y]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<TMe;l++)p=e.heap[l],y=r[r[p*2+1]*2+1]+1,y>c&&(y=c,M++),r[p*2+1]=y,!(p>o)&&(e.bl_count[y]++,b=0,p>=s&&(b=i[p-s]),m=r[p*2],e.opt_len+=m*(y+b),a&&(e.static_len+=m*(n[p*2+1]+b)));if(M!==0){do{for(y=c-1;e.bl_count[y]===0;)y--;e.bl_count[y]--,e.bl_count[y+1]+=2,e.bl_count[c]--,M-=2}while(M>0);for(y=c;y!==0;y--)for(p=e.bl_count[y];p!==0;)h=e.heap[--l],!(h>o)&&(r[h*2+1]!==y&&(e.opt_len+=(y-r[h*2+1])*r[h*2],r[h*2+1]=y),p--)}},NMe=(e,t,r)=>{let o=new Array(KO+1),n=0,a,i;for(a=1;a<=KO;a++)n=n+r[a-1]<<1,o[a]=n;for(i=0;i<=t;i++){let s=e[i*2+1];s!==0&&(e[i*2]=CMe(o[s]++,s))}},ezt=()=>{let e,t,r,o,n,a=new Array(KO+1);for(r=0,o=0;o<AJ-1;o++)for(TJ[o]=r,e=0;e<1<<dJ[o];e++)hw[r++]=o;for(hw[r-1]=o,n=0,o=0;o<16;o++)for(tD[o]=n,e=0;e<1<<eD[o];e++)dw[n++]=o;for(n>>=7;o<LS;o++)for(tD[o]=n<<7,e=0;e<1<<eD[o]-7;e++)dw[256+n++]=o;for(t=0;t<=KO;t++)a[t]=0;for(e=0;e<=143;)zy[e*2+1]=8,e++,a[8]++;for(;e<=255;)zy[e*2+1]=9,e++,a[9]++;for(;e<=279;)zy[e*2+1]=7,e++,a[7]++;for(;e<=287;)zy[e*2+1]=8,e++,a[8]++;for(NMe(zy,fw+1,a),e=0;e<LS;e++)lw[e*2+1]=5,lw[e*2]=CMe(e,5);zMe=new eJ(zy,dJ,Mw+1,fw,KO),RMe=new eJ(lw,eD,0,LS,KO),xMe=new eJ(new Array(0),XPt,0,SJ,JPt)},DMe=e=>{let t;for(t=0;t<fw;t++)e.dyn_ltree[t*2]=0;for(t=0;t<LS;t++)e.dyn_dtree[t*2]=0;for(t=0;t<SJ;t++)e.bl_tree[t*2]=0;e.dyn_ltree[EJ*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},LMe=e=>{e.bi_valid>8?yw(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},UOe=(e,t,r,o)=>{let n=t*2,a=r*2;return e[n]<e[a]||e[n]===e[a]&&o[t]<=o[r]},nJ=(e,t,r)=>{let o=e.heap[r],n=r<<1;for(;n<=e.heap_len&&(n<e.heap_len&&UOe(t,e.heap[n+1],e.heap[n],e.depth)&&n++,!UOe(t,o,e.heap[n],e.depth));)e.heap[r]=e.heap[n],r=n,n<<=1;e.heap[r]=o},WOe=(e,t,r)=>{let o,n,a=0,i,s;if(e.sym_next!==0)do o=e.pending_buf[e.sym_buf+a++]&255,o+=(e.pending_buf[e.sym_buf+a++]&255)<<8,n=e.pending_buf[e.sym_buf+a++],o===0?ud(e,n,t):(i=hw[n],ud(e,i+Mw+1,t),s=dJ[i],s!==0&&(n-=TJ[i],Ql(e,n,s)),o--,i=kMe(o),ud(e,i,r),s=eD[i],s!==0&&(o-=tD[i],Ql(e,o,s)));while(a<e.sym_next);ud(e,EJ,t)},hJ=(e,t)=>{let r=t.dyn_tree,o=t.stat_desc.static_tree,n=t.stat_desc.has_stree,a=t.stat_desc.elems,i,s,c=-1,l;for(e.heap_len=0,e.heap_max=TMe,i=0;i<a;i++)r[i*2]!==0?(e.heap[++e.heap_len]=c=i,e.depth[i]=0):r[i*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,n&&(e.static_len-=o[l*2+1]);for(t.max_code=c,i=e.heap_len>>1;i>=1;i--)nJ(e,r,i);l=a;do i=e.heap[1],e.heap[1]=e.heap[e.heap_len--],nJ(e,r,1),s=e.heap[1],e.heap[--e.heap_max]=i,e.heap[--e.heap_max]=s,r[l*2]=r[i*2]+r[s*2],e.depth[l]=(e.depth[i]>=e.depth[s]?e.depth[i]:e.depth[s])+1,r[i*2+1]=r[s*2+1]=l,e.heap[1]=l++,nJ(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],ZPt(e,t),NMe(r,c,e.bl_count)},FOe=(e,t,r)=>{let o,n=-1,a,i=t[1],s=0,c=7,l=4;for(i===0&&(c=138,l=3),t[(r+1)*2+1]=65535,o=0;o<=r;o++)a=i,i=t[(o+1)*2+1],!(++s<c&&a===i)&&(s<l?e.bl_tree[a*2]+=s:a!==0?(a!==n&&e.bl_tree[a*2]++,e.bl_tree[vMe*2]++):s<=10?e.bl_tree[IMe*2]++:e.bl_tree[wMe*2]++,s=0,n=a,i===0?(c=138,l=3):a===i?(c=6,l=3):(c=7,l=4))},jOe=(e,t,r)=>{let o,n=-1,a,i=t[1],s=0,c=7,l=4;for(i===0&&(c=138,l=3),o=0;o<=r;o++)if(a=i,i=t[(o+1)*2+1],!(++s<c&&a===i)){if(s<l)do ud(e,a,e.bl_tree);while(--s!==0);else a!==0?(a!==n&&(ud(e,a,e.bl_tree),s--),ud(e,vMe,e.bl_tree),Ql(e,s-3,2)):s<=10?(ud(e,IMe,e.bl_tree),Ql(e,s-3,3)):(ud(e,wMe,e.bl_tree),Ql(e,s-11,7));s=0,n=a,i===0?(c=138,l=3):a===i?(c=6,l=3):(c=7,l=4)}},tzt=e=>{let t;for(FOe(e,e.dyn_ltree,e.l_desc.max_code),FOe(e,e.dyn_dtree,e.d_desc.max_code),hJ(e,e.bl_desc),t=SJ-1;t>=3&&e.bl_tree[PMe[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},nzt=(e,t,r,o)=>{let n;for(Ql(e,t-257,5),Ql(e,r-1,5),Ql(e,o-4,4),n=0;n<o;n++)Ql(e,e.bl_tree[PMe[n]*2+1],3);jOe(e,e.dyn_ltree,t-1),jOe(e,e.dyn_dtree,r-1)},izt=e=>{let t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(r=32;r<Mw;r++)if(e.dyn_ltree[r*2]!==0)return 1;return 0},GOe=!1,rzt=e=>{GOe||(ezt(),GOe=!0),e.l_desc=new tJ(e.dyn_ltree,zMe),e.d_desc=new tJ(e.dyn_dtree,RMe),e.bl_desc=new tJ(e.bl_tree,xMe),e.bi_buf=0,e.bi_valid=0,DMe(e)},qMe=(e,t,r,o)=>{Ql(e,(KPt<<1)+(o?1:0),3),LMe(e),yw(e,r),yw(e,~r),r&&e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r},ozt=e=>{Ql(e,EMe<<1,3),ud(e,EJ,zy),QPt(e)},azt=(e,t,r,o)=>{let n,a,i=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=izt(e)),hJ(e,e.l_desc),hJ(e,e.d_desc),i=tzt(e),n=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&t!==-1?qMe(e,t,r,o):e.strategy===4||a===n?(Ql(e,(EMe<<1)+(o?1:0),3),WOe(e,zy,lw)):(Ql(e,(HPt<<1)+(o?1:0),3),nzt(e,e.l_desc.max_code+1,e.d_desc.max_code+1,i+1),WOe(e,e.dyn_ltree,e.dyn_dtree)),DMe(e),o&&LMe(e)},szt=(e,t,r)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=r,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(hw[r]+Mw+1)*2]++,e.dyn_dtree[kMe(t)*2]++),e.sym_next===e.sym_end),czt=rzt,lzt=qMe,uzt=azt,pzt=szt,fzt=ozt,dzt={_tr_init:czt,_tr_stored_block:lzt,_tr_flush_block:uzt,_tr_tally:pzt,_tr_align:fzt},hzt=(e,t,r,o)=>{let n=e&65535|0,a=e>>>16&65535|0,i=0;for(;r!==0;){i=r>2e3?2e3:r,r-=i;do n=n+t[o++]|0,a=a+n|0;while(--i);n%=65521,a%=65521}return n|a<<16|0},bw=hzt,yzt=()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t},bzt=new Uint32Array(yzt()),mzt=(e,t,r,o)=>{let n=bzt,a=o+r;e^=-1;for(let i=o;i<a;i++)e=e>>>8^n[(e^t[i])&255];return e^-1},ys=mzt,$O={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},YO={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:gzt,_tr_stored_block:yJ,_tr_flush_block:Ozt,_tr_tally:Gm,_tr_align:Mzt}=dzt,{Z_NO_FLUSH:Km,Z_PARTIAL_FLUSH:_zt,Z_FULL_FLUSH:Azt,Z_FINISH:c1,Z_BLOCK:KOe,Z_OK:Gs,Z_STREAM_END:HOe,Z_STREAM_ERROR:pd,Z_DATA_ERROR:Szt,Z_BUF_ERROR:iJ,Z_DEFAULT_COMPRESSION:Ezt,Z_FILTERED:Tzt,Z_HUFFMAN_ONLY:J5,Z_RLE:vzt,Z_FIXED:Izt,Z_DEFAULT_STRATEGY:wzt,Z_UNKNOWN:Pzt,Z_DEFLATED:rD}=YO,zzt=9,Rzt=15,xzt=8,kzt=29,Czt=256,bJ=Czt+1+kzt,Nzt=30,Dzt=19,Lzt=2*bJ+1,qzt=15,er=3,jm=258,fd=jm+er+1,Bzt=32,qS=42,vJ=57,mJ=69,gJ=73,OJ=91,MJ=103,HO=113,sw=666,Yc=1,WS=2,JO=3,FS=4,Uzt=3,VO=(e,t)=>(e.msg=$O[t],t),VOe=e=>e*2-(e>4?9:0),Fm=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Wzt=e=>{let t,r,o,n=e.w_size;t=e.hash_size,o=t;do r=e.head[--o],e.head[o]=r>=n?r-n:0;while(--t);t=n,o=t;do r=e.prev[--o],e.prev[o]=r>=n?r-n:0;while(--t)},Fzt=(e,t,r)=>(t<<e.hash_shift^r)&e.hash_mask,Hm=Fzt,a0=e=>{let t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,t.pending===0&&(t.pending_out=0))},s0=(e,t)=>{Ozt(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,a0(e.strm)},Tr=(e,t)=>{e.pending_buf[e.pending++]=t},aw=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},_J=(e,t,r,o)=>{let n=e.avail_in;return n>o&&(n=o),n===0?0:(e.avail_in-=n,t.set(e.input.subarray(e.next_in,e.next_in+n),r),e.state.wrap===1?e.adler=bw(e.adler,t,n,r):e.state.wrap===2&&(e.adler=ys(e.adler,t,n,r)),e.next_in+=n,e.total_in+=n,n)},BMe=(e,t)=>{let r=e.max_chain_length,o=e.strstart,n,a,i=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-fd?e.strstart-(e.w_size-fd):0,l=e.window,p=e.w_mask,h=e.prev,y=e.strstart+jm,b=l[o+i-1],m=l[o+i];e.prev_length>=e.good_match&&(r>>=2),s>e.lookahead&&(s=e.lookahead);do if(n=t,!(l[n+i]!==m||l[n+i-1]!==b||l[n]!==l[o]||l[++n]!==l[o+1])){o+=2,n++;do;while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&o<y);if(a=jm-(y-o),o=y-jm,a>i){if(e.match_start=t,i=a,a>=s)break;b=l[o+i-1],m=l[o+i]}}while((t=h[t&p])>c&&--r!==0);return i<=e.lookahead?i:e.lookahead},BS=e=>{let t=e.w_size,r,o,n;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-fd)&&(e.window.set(e.window.subarray(t,t+t-o),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Wzt(e),o+=t),e.strm.avail_in===0)break;if(r=_J(e.strm,e.window,e.strstart+e.lookahead,o),e.lookahead+=r,e.lookahead+e.insert>=er)for(n=e.strstart-e.insert,e.ins_h=e.window[n],e.ins_h=Hm(e,e.ins_h,e.window[n+1]);e.insert&&(e.ins_h=Hm(e,e.ins_h,e.window[n+er-1]),e.prev[n&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=n,n++,e.insert--,!(e.lookahead+e.insert<er)););}while(e.lookahead<fd&&e.strm.avail_in!==0)},UMe=(e,t)=>{let r=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o,n,a,i=0,s=e.strm.avail_in;do{if(o=65535,a=e.bi_valid+42>>3,e.strm.avail_out<a||(a=e.strm.avail_out-a,n=e.strstart-e.block_start,o>n+e.strm.avail_in&&(o=n+e.strm.avail_in),o>a&&(o=a),o<r&&(o===0&&t!==c1||t===Km||o!==n+e.strm.avail_in)))break;i=t===c1&&o===n+e.strm.avail_in?1:0,yJ(e,0,0,i),e.pending_buf[e.pending-4]=o,e.pending_buf[e.pending-3]=o>>8,e.pending_buf[e.pending-2]=~o,e.pending_buf[e.pending-1]=~o>>8,a0(e.strm),n&&(n>o&&(n=o),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+n),e.strm.next_out),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n,e.block_start+=n,o-=n),o&&(_J(e.strm,e.strm.output,e.strm.next_out,o),e.strm.next_out+=o,e.strm.avail_out-=o,e.strm.total_out+=o)}while(i===0);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),i?FS:t!==Km&&t!==c1&&e.strm.avail_in===0&&e.strstart===e.block_start?WS:(a=e.window_size-e.strstart,e.strm.avail_in>a&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,a+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),a>e.strm.avail_in&&(a=e.strm.avail_in),a&&(_J(e.strm,e.window,e.strstart,a),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.high_water<e.strstart&&(e.high_water=e.strstart),a=e.bi_valid+42>>3,a=e.pending_buf_size-a>65535?65535:e.pending_buf_size-a,r=a>e.w_size?e.w_size:a,n=e.strstart-e.block_start,(n>=r||(n||t===c1)&&t!==Km&&e.strm.avail_in===0&&n<=a)&&(o=n>a?a:n,i=t===c1&&e.strm.avail_in===0&&o===n?1:0,yJ(e,e.block_start,o,i),e.block_start+=o,a0(e.strm)),i?JO:Yc)},rJ=(e,t)=>{let r,o;for(;;){if(e.lookahead<fd){if(BS(e),e.lookahead<fd&&t===Km)return Yc;if(e.lookahead===0)break}if(r=0,e.lookahead>=er&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-fd&&(e.match_length=BMe(e,r)),e.match_length>=er)if(o=Gm(e,e.strstart-e.match_start,e.match_length-er),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=er){e.match_length--;do e.strstart++,e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+1]);else o=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(o&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=e.strstart<er-1?e.strstart:er-1,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},NS=(e,t)=>{let r,o,n;for(;;){if(e.lookahead<fd){if(BS(e),e.lookahead<fd&&t===Km)return Yc;if(e.lookahead===0)break}if(r=0,e.lookahead>=er&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=er-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-fd&&(e.match_length=BMe(e,r),e.match_length<=5&&(e.strategy===Tzt||e.match_length===er&&e.strstart-e.match_start>4096)&&(e.match_length=er-1)),e.prev_length>=er&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-er,o=Gm(e,e.strstart-1-e.prev_match,e.prev_length-er),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=n&&(e.ins_h=Hm(e,e.ins_h,e.window[e.strstart+er-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=er-1,e.strstart++,o&&(s0(e,!1),e.strm.avail_out===0))return Yc}else if(e.match_available){if(o=Gm(e,0,e.window[e.strstart-1]),o&&s0(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return Yc}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(o=Gm(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<er-1?e.strstart:er-1,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},jzt=(e,t)=>{let r,o,n,a,i=e.window;for(;;){if(e.lookahead<=jm){if(BS(e),e.lookahead<=jm&&t===Km)return Yc;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=er&&e.strstart>0&&(n=e.strstart-1,o=i[n],o===i[++n]&&o===i[++n]&&o===i[++n])){a=e.strstart+jm;do;while(o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&o===i[++n]&&n<a);e.match_length=jm-(a-n),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=er?(r=Gm(e,1,e.match_length-er),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=0,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS},Gzt=(e,t)=>{let r;for(;;){if(e.lookahead===0&&(BS(e),e.lookahead===0)){if(t===Km)return Yc;break}if(e.match_length=0,r=Gm(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(s0(e,!1),e.strm.avail_out===0))return Yc}return e.insert=0,t===c1?(s0(e,!0),e.strm.avail_out===0?JO:FS):e.sym_next&&(s0(e,!1),e.strm.avail_out===0)?Yc:WS};function ld(e,t,r,o,n){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=o,this.func=n}var cw=[new ld(0,0,0,0,UMe),new ld(4,4,8,4,rJ),new ld(4,5,16,8,rJ),new ld(4,6,32,32,rJ),new ld(4,4,16,16,NS),new ld(8,16,32,32,NS),new ld(8,16,128,128,NS),new ld(8,32,128,256,NS),new ld(32,128,258,1024,NS),new ld(32,258,258,4096,NS)],Kzt=e=>{e.window_size=2*e.w_size,Fm(e.head),e.max_lazy_match=cw[e.level].max_lazy,e.good_match=cw[e.level].good_length,e.nice_match=cw[e.level].nice_length,e.max_chain_length=cw[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=er-1,e.match_available=0,e.ins_h=0};function Hzt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=rD,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(Lzt*2),this.dyn_dtree=new Uint16Array((2*Nzt+1)*2),this.bl_tree=new Uint16Array((2*Dzt+1)*2),Fm(this.dyn_ltree),Fm(this.dyn_dtree),Fm(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(qzt+1),this.heap=new Uint16Array(2*bJ+1),Fm(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*bJ+1),Fm(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var _w=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.status!==qS&&t.status!==vJ&&t.status!==mJ&&t.status!==gJ&&t.status!==OJ&&t.status!==MJ&&t.status!==HO&&t.status!==sw?1:0},WMe=e=>{if(_w(e))return VO(e,pd);e.total_in=e.total_out=0,e.data_type=Pzt;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?vJ:t.wrap?qS:HO,e.adler=t.wrap===2?0:1,t.last_flush=-2,gzt(t),Gs},FMe=e=>{let t=WMe(e);return t===Gs&&Kzt(e.state),t},Vzt=(e,t)=>_w(e)||e.state.wrap!==2?pd:(e.state.gzhead=t,Gs),jMe=(e,t,r,o,n,a)=>{if(!e)return pd;let i=1;if(t===Ezt&&(t=6),o<0?(i=0,o=-o):o>15&&(i=2,o-=16),n<1||n>zzt||r!==rD||o<8||o>15||t<0||t>9||a<0||a>Izt||o===8&&i!==1)return VO(e,pd);o===8&&(o=9);let s=new Hzt;return e.state=s,s.strm=e,s.status=qS,s.wrap=i,s.gzhead=null,s.w_bits=o,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=n+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+er-1)/er),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<n+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=t,s.strategy=a,s.method=r,FMe(e)},$zt=(e,t)=>jMe(e,t,rD,Rzt,xzt,wzt),Jzt=(e,t)=>{if(_w(e)||t>KOe||t<0)return e?VO(e,pd):pd;let r=e.state;if(!e.output||e.avail_in!==0&&!e.input||r.status===sw&&t!==c1)return VO(e,e.avail_out===0?iJ:pd);let o=r.last_flush;if(r.last_flush=t,r.pending!==0){if(a0(e),e.avail_out===0)return r.last_flush=-1,Gs}else if(e.avail_in===0&&VOe(t)<=VOe(o)&&t!==c1)return VO(e,iJ);if(r.status===sw&&e.avail_in!==0)return VO(e,iJ);if(r.status===qS&&r.wrap===0&&(r.status=HO),r.status===qS){let n=rD+(r.w_bits-8<<4)<<8,a=-1;if(r.strategy>=J5||r.level<2?a=0:r.level<6?a=1:r.level===6?a=2:a=3,n|=a<<6,r.strstart!==0&&(n|=Bzt),n+=31-n%31,aw(r,n),r.strstart!==0&&(aw(r,e.adler>>>16),aw(r,e.adler&65535)),e.adler=1,r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(r.status===vJ){if(e.adler=0,Tr(r,31),Tr(r,139),Tr(r,8),r.gzhead)Tr(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Tr(r,r.gzhead.time&255),Tr(r,r.gzhead.time>>8&255),Tr(r,r.gzhead.time>>16&255),Tr(r,r.gzhead.time>>24&255),Tr(r,r.level===9?2:r.strategy>=J5||r.level<2?4:0),Tr(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(Tr(r,r.gzhead.extra.length&255),Tr(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=ys(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=mJ;else if(Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,0),Tr(r,r.level===9?2:r.strategy>=J5||r.level<2?4:0),Tr(r,Uzt),r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(r.status===mJ){if(r.gzhead.extra){let n=r.pending,a=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+a>r.pending_buf_size;){let s=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex+=s,a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0,a-=s}let i=new Uint8Array(r.gzhead.extra);r.pending_buf.set(i.subarray(r.gzindex,r.gzindex+a),r.pending),r.pending+=a,r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex=0}r.status=gJ}if(r.status===gJ){if(r.gzhead.name){let n=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0}r.gzindex<r.gzhead.name.length?a=r.gzhead.name.charCodeAt(r.gzindex++)&255:a=0,Tr(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),r.gzindex=0}r.status=OJ}if(r.status===OJ){if(r.gzhead.comment){let n=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n)),a0(e),r.pending!==0)return r.last_flush=-1,Gs;n=0}r.gzindex<r.gzhead.comment.length?a=r.gzhead.comment.charCodeAt(r.gzindex++)&255:a=0,Tr(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>n&&(e.adler=ys(e.adler,r.pending_buf,r.pending-n,n))}r.status=MJ}if(r.status===MJ){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(a0(e),r.pending!==0))return r.last_flush=-1,Gs;Tr(r,e.adler&255),Tr(r,e.adler>>8&255),e.adler=0}if(r.status=HO,a0(e),r.pending!==0)return r.last_flush=-1,Gs}if(e.avail_in!==0||r.lookahead!==0||t!==Km&&r.status!==sw){let n=r.level===0?UMe(r,t):r.strategy===J5?Gzt(r,t):r.strategy===vzt?jzt(r,t):cw[r.level].func(r,t);if((n===JO||n===FS)&&(r.status=sw),n===Yc||n===JO)return e.avail_out===0&&(r.last_flush=-1),Gs;if(n===WS&&(t===_zt?Mzt(r):t!==KOe&&(yJ(r,0,0,!1),t===Azt&&(Fm(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),a0(e),e.avail_out===0))return r.last_flush=-1,Gs}return t!==c1?Gs:r.wrap<=0?HOe:(r.wrap===2?(Tr(r,e.adler&255),Tr(r,e.adler>>8&255),Tr(r,e.adler>>16&255),Tr(r,e.adler>>24&255),Tr(r,e.total_in&255),Tr(r,e.total_in>>8&255),Tr(r,e.total_in>>16&255),Tr(r,e.total_in>>24&255)):(aw(r,e.adler>>>16),aw(r,e.adler&65535)),a0(e),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?Gs:HOe)},Xzt=e=>{if(_w(e))return pd;let t=e.state.status;return e.state=null,t===HO?VO(e,Szt):Gs},Yzt=(e,t)=>{let r=t.length;if(_w(e))return pd;let o=e.state,n=o.wrap;if(n===2||n===1&&o.status!==qS||o.lookahead)return pd;if(n===1&&(e.adler=bw(e.adler,t,r,0)),o.wrap=0,r>=o.w_size){n===0&&(Fm(o.head),o.strstart=0,o.block_start=0,o.insert=0);let c=new Uint8Array(o.w_size);c.set(t.subarray(r-o.w_size,r),0),t=c,r=o.w_size}let a=e.avail_in,i=e.next_in,s=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,BS(o);o.lookahead>=er;){let c=o.strstart,l=o.lookahead-(er-1);do o.ins_h=Hm(o,o.ins_h,o.window[c+er-1]),o.prev[c&o.w_mask]=o.head[o.ins_h],o.head[o.ins_h]=c,c++;while(--l);o.strstart=c,o.lookahead=er-1,BS(o)}return o.strstart+=o.lookahead,o.block_start=o.strstart,o.insert=o.lookahead,o.lookahead=0,o.match_length=o.prev_length=er-1,o.match_available=0,e.next_in=i,e.input=s,e.avail_in=a,o.wrap=n,Gs},Qzt=$zt,Zzt=jMe,eRt=FMe,tRt=WMe,nRt=Vzt,iRt=Jzt,rRt=Xzt,oRt=Yzt,aRt="pako deflate (from Nodeca project)",uw={deflateInit:Qzt,deflateInit2:Zzt,deflateReset:eRt,deflateResetKeep:tRt,deflateSetHeader:nRt,deflate:iRt,deflateEnd:rRt,deflateSetDictionary:oRt,deflateInfo:aRt},sRt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cRt=function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let r=t.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let o in r)sRt(r,o)&&(e[o]=r[o])}}return e},lRt=e=>{let t=0;for(let o=0,n=e.length;o<n;o++)t+=e[o].length;let r=new Uint8Array(t);for(let o=0,n=0,a=e.length;o<a;o++){let i=e[o];r.set(i,n),n+=i.length}return r},oD={assign:cRt,flattenChunks:lRt},GMe=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{GMe=!1}var mw=new Uint8Array(256);for(let e=0;e<256;e++)mw[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;mw[254]=mw[254]=1;var uRt=e=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,r,o,n,a,i=e.length,s=0;for(n=0;n<i;n++)r=e.charCodeAt(n),(r&64512)===55296&&n+1<i&&(o=e.charCodeAt(n+1),(o&64512)===56320&&(r=65536+(r-55296<<10)+(o-56320),n++)),s+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Uint8Array(s),a=0,n=0;a<s;n++)r=e.charCodeAt(n),(r&64512)===55296&&n+1<i&&(o=e.charCodeAt(n+1),(o&64512)===56320&&(r=65536+(r-55296<<10)+(o-56320),n++)),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|r&63):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|r&63):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|r&63);return t},pRt=(e,t)=>{if(t<65534&&e.subarray&&GMe)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let o=0;o<t;o++)r+=String.fromCharCode(e[o]);return r},fRt=(e,t)=>{let r=t||e.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let o,n,a=new Array(r*2);for(n=0,o=0;o<r;){let i=e[o++];if(i<128){a[n++]=i;continue}let s=mw[i];if(s>4){a[n++]=65533,o+=s-1;continue}for(i&=s===2?31:s===3?15:7;s>1&&o<r;)i=i<<6|e[o++]&63,s--;if(s>1){a[n++]=65533;continue}i<65536?a[n++]=i:(i-=65536,a[n++]=55296|i>>10&1023,a[n++]=56320|i&1023)}return pRt(a,n)},dRt=(e,t)=>{t=t||e.length,t>e.length&&(t=e.length);let r=t-1;for(;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+mw[e[r]]>t?r:t},gw={string2buf:uRt,buf2string:fRt,utf8border:dRt};function hRt(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var KMe=hRt,HMe=Object.prototype.toString,{Z_NO_FLUSH:yRt,Z_SYNC_FLUSH:bRt,Z_FULL_FLUSH:mRt,Z_FINISH:gRt,Z_OK:nD,Z_STREAM_END:ORt,Z_DEFAULT_COMPRESSION:MRt,Z_DEFAULT_STRATEGY:_Rt,Z_DEFLATED:ARt}=YO;function Aw(e){this.options=oD.assign({level:MRt,method:ARt,chunkSize:16384,windowBits:15,memLevel:8,strategy:_Rt},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new KMe,this.strm.avail_out=0;let r=uw.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==nD)throw new Error($O[r]);if(t.header&&uw.deflateSetHeader(this.strm,t.header),t.dictionary){let o;if(typeof t.dictionary=="string"?o=gw.string2buf(t.dictionary):HMe.call(t.dictionary)==="[object ArrayBuffer]"?o=new Uint8Array(t.dictionary):o=t.dictionary,r=uw.deflateSetDictionary(this.strm,o),r!==nD)throw new Error($O[r]);this._dict_set=!0}}Aw.prototype.push=function(e,t){let r=this.strm,o=this.options.chunkSize,n,a;if(this.ended)return!1;for(t===~~t?a=t:a=t===!0?gRt:yRt,typeof e=="string"?r.input=gw.string2buf(e):HMe.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(o),r.next_out=0,r.avail_out=o),(a===bRt||a===mRt)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(n=uw.deflate(r,a),n===ORt)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),n=uw.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===nD;if(r.avail_out===0){this.onData(r.output);continue}if(a>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};Aw.prototype.onData=function(e){this.chunks.push(e)};Aw.prototype.onEnd=function(e){e===nD&&(this.result=oD.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function IJ(e,t){let r=new Aw(t);if(r.push(e,!0),r.err)throw r.msg||$O[r.err];return r.result}function SRt(e,t){return t=t||{},t.raw=!0,IJ(e,t)}function ERt(e,t){return t=t||{},t.gzip=!0,IJ(e,t)}var TRt=Aw,vRt=IJ,IRt=SRt,wRt=ERt,PRt=YO,zRt={Deflate:TRt,deflate:vRt,deflateRaw:IRt,gzip:wRt,constants:PRt},X5=16209,RRt=16191,xRt=function(t,r){let o,n,a,i,s,c,l,p,h,y,b,m,M,_,O,S,v,T,w,P,C,R,N,W,k=t.state;o=t.next_in,N=t.input,n=o+(t.avail_in-5),a=t.next_out,W=t.output,i=a-(r-t.avail_out),s=a+(t.avail_out-257),c=k.dmax,l=k.wsize,p=k.whave,h=k.wnext,y=k.window,b=k.hold,m=k.bits,M=k.lencode,_=k.distcode,O=(1<<k.lenbits)-1,S=(1<<k.distbits)-1;e:do{m<15&&(b+=N[o++]<<m,m+=8,b+=N[o++]<<m,m+=8),v=M[b&O];t:for(;;){if(T=v>>>24,b>>>=T,m-=T,T=v>>>16&255,T===0)W[a++]=v&65535;else if(T&16){w=v&65535,T&=15,T&&(m<T&&(b+=N[o++]<<m,m+=8),w+=b&(1<<T)-1,b>>>=T,m-=T),m<15&&(b+=N[o++]<<m,m+=8,b+=N[o++]<<m,m+=8),v=_[b&S];n:for(;;){if(T=v>>>24,b>>>=T,m-=T,T=v>>>16&255,T&16){if(P=v&65535,T&=15,m<T&&(b+=N[o++]<<m,m+=8,m<T&&(b+=N[o++]<<m,m+=8)),P+=b&(1<<T)-1,P>c){t.msg="invalid distance too far back",k.mode=X5;break e}if(b>>>=T,m-=T,T=a-i,P>T){if(T=P-T,T>p&&k.sane){t.msg="invalid distance too far back",k.mode=X5;break e}if(C=0,R=y,h===0){if(C+=l-T,T<w){w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}}else if(h<T){if(C+=l+h-T,T-=h,T<w){w-=T;do W[a++]=y[C++];while(--T);if(C=0,h<w){T=h,w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}}}else if(C+=h-T,T<w){w-=T;do W[a++]=y[C++];while(--T);C=a-P,R=W}for(;w>2;)W[a++]=R[C++],W[a++]=R[C++],W[a++]=R[C++],w-=3;w&&(W[a++]=R[C++],w>1&&(W[a++]=R[C++]))}else{C=a-P;do W[a++]=W[C++],W[a++]=W[C++],W[a++]=W[C++],w-=3;while(w>2);w&&(W[a++]=W[C++],w>1&&(W[a++]=W[C++]))}}else if((T&64)===0){v=_[(v&65535)+(b&(1<<T)-1)];continue n}else{t.msg="invalid distance code",k.mode=X5;break e}break}}else if((T&64)===0){v=M[(v&65535)+(b&(1<<T)-1)];continue t}else if(T&32){k.mode=RRt;break e}else{t.msg="invalid literal/length code",k.mode=X5;break e}break}}while(o<n&&a<s);w=m>>3,o-=w,m-=w<<3,b&=(1<<m)-1,t.next_in=o,t.next_out=a,t.avail_in=o<n?5+(n-o):5-(o-n),t.avail_out=a<s?257+(s-a):257-(a-s),k.hold=b,k.bits=m},DS=15,$Oe=852,JOe=592,XOe=0,oJ=1,YOe=2,kRt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),CRt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),NRt=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),DRt=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),LRt=(e,t,r,o,n,a,i,s)=>{let c=s.bits,l=0,p=0,h=0,y=0,b=0,m=0,M=0,_=0,O=0,S=0,v,T,w,P,C,R=null,N,W=new Uint16Array(DS+1),k=new Uint16Array(DS+1),K=null,U,q,H;for(l=0;l<=DS;l++)W[l]=0;for(p=0;p<o;p++)W[t[r+p]]++;for(b=c,y=DS;y>=1&&W[y]===0;y--);if(b>y&&(b=y),y===0)return n[a++]=1<<24|64<<16|0,n[a++]=1<<24|64<<16|0,s.bits=1,0;for(h=1;h<y&&W[h]===0;h++);for(b<h&&(b=h),_=1,l=1;l<=DS;l++)if(_<<=1,_-=W[l],_<0)return-1;if(_>0&&(e===XOe||y!==1))return-1;for(k[1]=0,l=1;l<DS;l++)k[l+1]=k[l]+W[l];for(p=0;p<o;p++)t[r+p]!==0&&(i[k[t[r+p]]++]=p);if(e===XOe?(R=K=i,N=20):e===oJ?(R=kRt,K=CRt,N=257):(R=NRt,K=DRt,N=0),S=0,p=0,l=h,C=a,m=b,M=0,w=-1,O=1<<b,P=O-1,e===oJ&&O>$Oe||e===YOe&&O>JOe)return 1;for(;;){U=l-M,i[p]+1<N?(q=0,H=i[p]):i[p]>=N?(q=K[i[p]-N],H=R[i[p]-N]):(q=96,H=0),v=1<<l-M,T=1<<m,h=T;do T-=v,n[C+(S>>M)+T]=U<<24|q<<16|H|0;while(T!==0);for(v=1<<l-1;S&v;)v>>=1;if(v!==0?(S&=v-1,S+=v):S=0,p++,--W[l]===0){if(l===y)break;l=t[r+i[p]]}if(l>b&&(S&P)!==w){for(M===0&&(M=b),C+=h,m=l-M,_=1<<m;m+M<y&&(_-=W[m+M],!(_<=0));)m++,_<<=1;if(O+=1<<m,e===oJ&&O>$Oe||e===YOe&&O>JOe)return 1;w=S&P,n[w]=b<<24|m<<16|C-a|0}}return S!==0&&(n[C+S]=l-M<<24|64<<16|0),s.bits=b,0},pw=LRt,qRt=0,VMe=1,$Me=2,{Z_FINISH:QOe,Z_BLOCK:BRt,Z_TREES:Y5,Z_OK:XO,Z_STREAM_END:URt,Z_NEED_DICT:WRt,Z_STREAM_ERROR:l1,Z_DATA_ERROR:JMe,Z_MEM_ERROR:XMe,Z_BUF_ERROR:FRt,Z_DEFLATED:ZOe}=YO,aD=16180,eMe=16181,tMe=16182,nMe=16183,iMe=16184,rMe=16185,oMe=16186,aMe=16187,sMe=16188,cMe=16189,iD=16190,Py=16191,aJ=16192,lMe=16193,sJ=16194,uMe=16195,pMe=16196,fMe=16197,dMe=16198,Q5=16199,Z5=16200,hMe=16201,yMe=16202,bMe=16203,mMe=16204,gMe=16205,cJ=16206,OMe=16207,MMe=16208,To=16209,YMe=16210,QMe=16211,jRt=852,GRt=592,KRt=15,HRt=KRt,_Me=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function VRt(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var QO=e=>{if(!e)return 1;let t=e.state;return!t||t.strm!==e||t.mode<aD||t.mode>QMe?1:0},ZMe=e=>{if(QO(e))return l1;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=aD,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(jRt),t.distcode=t.distdyn=new Int32Array(GRt),t.sane=1,t.back=-1,XO},e_e=e=>{if(QO(e))return l1;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,ZMe(e)},t_e=(e,t)=>{let r;if(QO(e))return l1;let o=e.state;return t<0?(r=0,t=-t):(r=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?l1:(o.window!==null&&o.wbits!==t&&(o.window=null),o.wrap=r,o.wbits=t,e_e(e))},n_e=(e,t)=>{if(!e)return l1;let r=new VRt;e.state=r,r.strm=e,r.window=null,r.mode=aD;let o=t_e(e,t);return o!==XO&&(e.state=null),o},$Rt=e=>n_e(e,HRt),AMe=!0,lJ,uJ,JRt=e=>{if(AMe){lJ=new Int32Array(512),uJ=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(pw(VMe,e.lens,0,288,lJ,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;pw($Me,e.lens,0,32,uJ,0,e.work,{bits:5}),AMe=!1}e.lencode=lJ,e.lenbits=9,e.distcode=uJ,e.distbits=5},i_e=(e,t,r,o)=>{let n,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),o>=a.wsize?(a.window.set(t.subarray(r-a.wsize,r),0),a.wnext=0,a.whave=a.wsize):(n=a.wsize-a.wnext,n>o&&(n=o),a.window.set(t.subarray(r-o,r-o+n),a.wnext),o-=n,o?(a.window.set(t.subarray(r-o,r),0),a.wnext=o,a.whave=a.wsize):(a.wnext+=n,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=n))),0},XRt=(e,t)=>{let r,o,n,a,i,s,c,l,p,h,y,b,m,M,_=0,O,S,v,T,w,P,C,R,N=new Uint8Array(4),W,k,K=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(QO(e)||!e.output||!e.input&&e.avail_in!==0)return l1;r=e.state,r.mode===Py&&(r.mode=aJ),i=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,o=e.input,s=e.avail_in,l=r.hold,p=r.bits,h=s,y=c,R=XO;e:for(;;)switch(r.mode){case aD:if(r.wrap===0){r.mode=aJ;break}for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0),l=0,p=0,r.mode=eMe;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=To;break}if((l&15)!==ZOe){e.msg="unknown compression method",r.mode=To;break}if(l>>>=4,p-=4,C=(l&15)+8,r.wbits===0&&(r.wbits=C),C>15||C>r.wbits){e.msg="invalid window size",r.mode=To;break}r.dmax=1<<r.wbits,r.flags=0,e.adler=r.check=1,r.mode=l&512?cMe:Py,l=0,p=0;break;case eMe:for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.flags=l,(r.flags&255)!==ZOe){e.msg="unknown compression method",r.mode=To;break}if(r.flags&57344){e.msg="unknown header flags set",r.mode=To;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0,r.mode=tMe;case tMe:for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,N[2]=l>>>16&255,N[3]=l>>>24&255,r.check=ys(r.check,N,4,0)),l=0,p=0,r.mode=nMe;case nMe:for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0,r.mode=iMe;case iMe:if(r.flags&1024){for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(N[0]=l&255,N[1]=l>>>8&255,r.check=ys(r.check,N,2,0)),l=0,p=0}else r.head&&(r.head.extra=null);r.mode=rMe;case rMe:if(r.flags&1024&&(b=r.length,b>s&&(b=s),b&&(r.head&&(C=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(o.subarray(a,a+b),C)),r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,r.length-=b),r.length))break e;r.length=0,r.mode=oMe;case oMe:if(r.flags&2048){if(s===0)break e;b=0;do C=o[a+b++],r.head&&C&&r.length<65536&&(r.head.name+=String.fromCharCode(C));while(C&&b<s);if(r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,C)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=aMe;case aMe:if(r.flags&4096){if(s===0)break e;b=0;do C=o[a+b++],r.head&&C&&r.length<65536&&(r.head.comment+=String.fromCharCode(C));while(C&&b<s);if(r.flags&512&&r.wrap&4&&(r.check=ys(r.check,o,b,a)),s-=b,a+=b,C)break e}else r.head&&(r.head.comment=null);r.mode=sMe;case sMe:if(r.flags&512){for(;p<16;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&4&&l!==(r.check&65535)){e.msg="header crc mismatch",r.mode=To;break}l=0,p=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Py;break;case cMe:for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}e.adler=r.check=_Me(l),l=0,p=0,r.mode=iD;case iD:if(r.havedict===0)return e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,WRt;e.adler=r.check=1,r.mode=Py;case Py:if(t===BRt||t===Y5)break e;case aJ:if(r.last){l>>>=p&7,p-=p&7,r.mode=cJ;break}for(;p<3;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}switch(r.last=l&1,l>>>=1,p-=1,l&3){case 0:r.mode=lMe;break;case 1:if(JRt(r),r.mode=Q5,t===Y5){l>>>=2,p-=2;break e}break;case 2:r.mode=pMe;break;case 3:e.msg="invalid block type",r.mode=To}l>>>=2,p-=2;break;case lMe:for(l>>>=p&7,p-=p&7;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=To;break}if(r.length=l&65535,l=0,p=0,r.mode=sJ,t===Y5)break e;case sJ:r.mode=uMe;case uMe:if(b=r.length,b){if(b>s&&(b=s),b>c&&(b=c),b===0)break e;n.set(o.subarray(a,a+b),i),s-=b,a+=b,c-=b,i+=b,r.length-=b;break}r.mode=Py;break;case pMe:for(;p<14;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.nlen=(l&31)+257,l>>>=5,p-=5,r.ndist=(l&31)+1,l>>>=5,p-=5,r.ncode=(l&15)+4,l>>>=4,p-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=To;break}r.have=0,r.mode=fMe;case fMe:for(;r.have<r.ncode;){for(;p<3;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.lens[K[r.have++]]=l&7,l>>>=3,p-=3}for(;r.have<19;)r.lens[K[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,W={bits:r.lenbits},R=pw(qRt,r.lens,0,19,r.lencode,0,r.work,W),r.lenbits=W.bits,R){e.msg="invalid code lengths set",r.mode=To;break}r.have=0,r.mode=dMe;case dMe:for(;r.have<r.nlen+r.ndist;){for(;_=r.lencode[l&(1<<r.lenbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(v<16)l>>>=O,p-=O,r.lens[r.have++]=v;else{if(v===16){for(k=O+2;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(l>>>=O,p-=O,r.have===0){e.msg="invalid bit length repeat",r.mode=To;break}C=r.lens[r.have-1],b=3+(l&3),l>>>=2,p-=2}else if(v===17){for(k=O+3;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=O,p-=O,C=0,b=3+(l&7),l>>>=3,p-=3}else{for(k=O+7;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=O,p-=O,C=0,b=11+(l&127),l>>>=7,p-=7}if(r.have+b>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=To;break}for(;b--;)r.lens[r.have++]=C}}if(r.mode===To)break;if(r.lens[256]===0){e.msg="invalid code -- missing end-of-block",r.mode=To;break}if(r.lenbits=9,W={bits:r.lenbits},R=pw(VMe,r.lens,0,r.nlen,r.lencode,0,r.work,W),r.lenbits=W.bits,R){e.msg="invalid literal/lengths set",r.mode=To;break}if(r.distbits=6,r.distcode=r.distdyn,W={bits:r.distbits},R=pw($Me,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,W),r.distbits=W.bits,R){e.msg="invalid distances set",r.mode=To;break}if(r.mode=Q5,t===Y5)break e;case Q5:r.mode=Z5;case Z5:if(s>=6&&c>=258){e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,xRt(e,y),i=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,o=e.input,s=e.avail_in,l=r.hold,p=r.bits,r.mode===Py&&(r.back=-1);break}for(r.back=0;_=r.lencode[l&(1<<r.lenbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(S&&(S&240)===0){for(T=O,w=S,P=v;_=r.lencode[P+((l&(1<<T+w)-1)>>T)],O=_>>>24,S=_>>>16&255,v=_&65535,!(T+O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=T,p-=T,r.back+=T}if(l>>>=O,p-=O,r.back+=O,r.length=v,S===0){r.mode=gMe;break}if(S&32){r.back=-1,r.mode=Py;break}if(S&64){e.msg="invalid literal/length code",r.mode=To;break}r.extra=S&15,r.mode=hMe;case hMe:if(r.extra){for(k=r.extra;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,p-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=yMe;case yMe:for(;_=r.distcode[l&(1<<r.distbits)-1],O=_>>>24,S=_>>>16&255,v=_&65535,!(O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if((S&240)===0){for(T=O,w=S,P=v;_=r.distcode[P+((l&(1<<T+w)-1)>>T)],O=_>>>24,S=_>>>16&255,v=_&65535,!(T+O<=p);){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}l>>>=T,p-=T,r.back+=T}if(l>>>=O,p-=O,r.back+=O,S&64){e.msg="invalid distance code",r.mode=To;break}r.offset=v,r.extra=S&15,r.mode=bMe;case bMe:if(r.extra){for(k=r.extra;p<k;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,p-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=To;break}r.mode=mMe;case mMe:if(c===0)break e;if(b=y-c,r.offset>b){if(b=r.offset-b,b>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=To;break}b>r.wnext?(b-=r.wnext,m=r.wsize-b):m=r.wnext-b,b>r.length&&(b=r.length),M=r.window}else M=n,m=i-r.offset,b=r.length;b>c&&(b=c),c-=b,r.length-=b;do n[i++]=M[m++];while(--b);r.length===0&&(r.mode=Z5);break;case gMe:if(c===0)break e;n[i++]=r.length,c--,r.mode=Z5;break;case cJ:if(r.wrap){for(;p<32;){if(s===0)break e;s--,l|=o[a++]<<p,p+=8}if(y-=c,e.total_out+=y,r.total+=y,r.wrap&4&&y&&(e.adler=r.check=r.flags?ys(r.check,n,y,i-y):bw(r.check,n,y,i-y)),y=c,r.wrap&4&&(r.flags?l:_Me(l))!==r.check){e.msg="incorrect data check",r.mode=To;break}l=0,p=0}r.mode=OMe;case OMe:if(r.wrap&&r.flags){for(;p<32;){if(s===0)break e;s--,l+=o[a++]<<p,p+=8}if(r.wrap&4&&l!==(r.total&4294967295)){e.msg="incorrect length check",r.mode=To;break}l=0,p=0}r.mode=MMe;case MMe:R=URt;break e;case To:R=JMe;break e;case YMe:return XMe;case QMe:default:return l1}return e.next_out=i,e.avail_out=c,e.next_in=a,e.avail_in=s,r.hold=l,r.bits=p,(r.wsize||y!==e.avail_out&&r.mode<To&&(r.mode<cJ||t!==QOe))&&i_e(e,e.output,e.next_out,y-e.avail_out),h-=e.avail_in,y-=e.avail_out,e.total_in+=h,e.total_out+=y,r.total+=y,r.wrap&4&&y&&(e.adler=r.check=r.flags?ys(r.check,n,y,e.next_out-y):bw(r.check,n,y,e.next_out-y)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Py?128:0)+(r.mode===Q5||r.mode===sJ?256:0),(h===0&&y===0||t===QOe)&&R===XO&&(R=FRt),R},YRt=e=>{if(QO(e))return l1;let t=e.state;return t.window&&(t.window=null),e.state=null,XO},QRt=(e,t)=>{if(QO(e))return l1;let r=e.state;return(r.wrap&2)===0?l1:(r.head=t,t.done=!1,XO)},ZRt=(e,t)=>{let r=t.length,o,n,a;return QO(e)||(o=e.state,o.wrap!==0&&o.mode!==iD)?l1:o.mode===iD&&(n=1,n=bw(n,t,r,0),n!==o.check)?JMe:(a=i_e(e,t,r,r),a?(o.mode=YMe,XMe):(o.havedict=1,XO))},e4t=e_e,t4t=t_e,n4t=ZMe,i4t=$Rt,r4t=n_e,o4t=XRt,a4t=YRt,s4t=QRt,c4t=ZRt,l4t="pako inflate (from Nodeca project)",Ry={inflateReset:e4t,inflateReset2:t4t,inflateResetKeep:n4t,inflateInit:i4t,inflateInit2:r4t,inflate:o4t,inflateEnd:a4t,inflateGetHeader:s4t,inflateSetDictionary:c4t,inflateInfo:l4t};function u4t(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var p4t=u4t,r_e=Object.prototype.toString,{Z_NO_FLUSH:f4t,Z_FINISH:d4t,Z_OK:Ow,Z_STREAM_END:pJ,Z_NEED_DICT:fJ,Z_STREAM_ERROR:h4t,Z_DATA_ERROR:SMe,Z_MEM_ERROR:y4t}=YO;function Sw(e){this.options=oD.assign({chunkSize:1024*64,windowBits:15,to:""},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new KMe,this.strm.avail_out=0;let r=Ry.inflateInit2(this.strm,t.windowBits);if(r!==Ow)throw new Error($O[r]);if(this.header=new p4t,Ry.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=gw.string2buf(t.dictionary):r_e.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=Ry.inflateSetDictionary(this.strm,t.dictionary),r!==Ow)))throw new Error($O[r])}Sw.prototype.push=function(e,t){let r=this.strm,o=this.options.chunkSize,n=this.options.dictionary,a,i,s;if(this.ended)return!1;for(t===~~t?i=t:i=t===!0?d4t:f4t,r_e.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(o),r.next_out=0,r.avail_out=o),a=Ry.inflate(r,i),a===fJ&&n&&(a=Ry.inflateSetDictionary(r,n),a===Ow?a=Ry.inflate(r,i):a===SMe&&(a=fJ));r.avail_in>0&&a===pJ&&r.state.wrap>0&&e[r.next_in]!==0;)Ry.inflateReset(r),a=Ry.inflate(r,i);switch(a){case h4t:case SMe:case fJ:case y4t:return this.onEnd(a),this.ended=!0,!1}if(s=r.avail_out,r.next_out&&(r.avail_out===0||a===pJ))if(this.options.to==="string"){let c=gw.utf8border(r.output,r.next_out),l=r.next_out-c,p=gw.buf2string(r.output,c);r.next_out=l,r.avail_out=o-l,l&&r.output.set(r.output.subarray(c,c+l),0),this.onData(p)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(a===Ow&&s===0)){if(a===pJ)return a=Ry.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Sw.prototype.onData=function(e){this.chunks.push(e)};Sw.prototype.onEnd=function(e){e===Ow&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=oD.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function wJ(e,t){let r=new Sw(t);if(r.push(e),r.err)throw r.msg||$O[r.err];return r.result}function b4t(e,t){return t=t||{},t.raw=!0,wJ(e,t)}var m4t=Sw,g4t=wJ,O4t=b4t,M4t=wJ,_4t=YO,A4t={Inflate:m4t,inflate:g4t,inflateRaw:O4t,ungzip:M4t,constants:_4t},{Deflate:S4t,deflate:E4t,deflateRaw:T4t,gzip:v4t}=zRt,{Inflate:I4t,inflate:w4t,inflateRaw:P4t,ungzip:z4t}=A4t,R4t=S4t,x4t=E4t,k4t=T4t,C4t=v4t,N4t=I4t,D4t=w4t,L4t=P4t,q4t=z4t,B4t=YO,o_e={Deflate:R4t,deflate:x4t,deflateRaw:k4t,gzip:C4t,Inflate:N4t,inflate:D4t,inflateRaw:L4t,ungzip:q4t,constants:B4t};var M_e=ke(c_e(),1),xJ=ke(CS(),1),__e=ke(g_e(),1);var zJ=class extends Map{set(t,r,o=3e5){return setTimeout(()=>{this.delete(t)},o),super.set(t,r)}},RJ=(e=30,t=689)=>({API_TYPE:e,API_VERSION:t,uploadCallbacks:new zJ,options:{selfListen:!1,checkUpdate:!0,logging:!0,polyfill:global.fetch},secretKey:null});function uD(e){return!!e.secretKey}var pD=50;var CJ=typeof Bun<"u";function jS(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function NJ(e,t){let r=[];for(let n in t)jS(t,n)&&r.push(n);r.sort();let o="zsecure"+e;for(let n=0;n<r.length;n++)o+=t[r[n]];return qr.default.MD5(o).toString()}function Vm(e,t,r={},o=!0){let n=new URL(t);for(let a in r)jS(r,a)&&n.searchParams.append(a,r[a].toString());return o&&(n.searchParams.has("zpw_ver")||n.searchParams.set("zpw_ver",e.API_VERSION.toString()),n.searchParams.has("zpw_type")||n.searchParams.set("zpw_type",e.API_TYPE.toString())),n.toString()}var Tw=class e{constructor({type:t,imei:r,firstLaunchTime:o}){this.zcid=null,this.enc_ver="v2",this.zcid=null,this.encryptKey=null,this.createZcid(t,r,o),this.zcid_ext=e.randomString(),this.createEncryptKey()}getEncryptKey(){if(!this.encryptKey)throw new ce("getEncryptKey: didn't create encryptKey yet");return this.encryptKey}createZcid(t,r,o){if(!t||!r||!o)throw new ce("createZcid: missing params");let n=`${t},${r},${o}`,a=e.encodeAES("3FC4F0D2AB50057BCE0D90D9187A22B1",n,"hex",!0);this.zcid=a}createEncryptKey(t=0){let r=(o,n)=>{let{even:a}=e.processStr(o),{even:i,odd:s}=e.processStr(n);if(!a||!i||!s)return!1;let c=a.slice(0,8).join("")+i.slice(0,12).join("")+s.reverse().slice(0,12).join("");return this.encryptKey=c,!0};if(!this.zcid||!this.zcid_ext)throw new ce("createEncryptKey: zcid or zcid_ext is null");try{let o=qr.default.MD5(this.zcid_ext).toString().toUpperCase();if(r(o,this.zcid)||!(t<3))return!1;this.createEncryptKey(t+1)}catch{t<3&&this.createEncryptKey(t+1)}return!0}getParams(){return this.zcid?{zcid:this.zcid,zcid_ext:this.zcid_ext,enc_ver:this.enc_ver}:null}static processStr(t){if(!t||typeof t!="string")return{even:null,odd:null};let[r,o]=[...t].reduce((n,a,i)=>(n[i%2].push(a),n),[[],[]]);return{even:r,odd:o}}static randomString(t,r){let o=t||6,n=r&&t&&r>t?r:12,a=Math.floor(Math.random()*(n-o+1))+o;if(a>12){let i="";for(;a>0;)i+=Math.random().toString(16).substr(2,a>12?12:a),a-=12;return i}return Math.random().toString(16).substr(2,a)}static encodeAES(t,r,o,n,a=0){if(!r)return null;try{{let i=o=="hex"?qr.default.enc.Hex:qr.default.enc.Base64,s=qr.default.enc.Utf8.parse(t),c={words:[0,0,0,0],sigBytes:16},l=qr.default.AES.encrypt(r,s,{iv:c,mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).ciphertext.toString(i);return n?l.toUpperCase():l}}catch{return a<3?e.encodeAES(t,r,o,n,a+1):null}}};function A_e(e,t){let r=null;try{return r=j4t(e,t),JSON.parse(r)}catch{return r}}function j4t(e,t){t=decodeURIComponent(t);let r=qr.default.enc.Utf8.parse(e),o={words:[0,0,0,0],sigBytes:16};return qr.default.AES.decrypt({ciphertext:qr.default.enc.Base64.parse(t)},r,{iv:o,mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).toString(qr.default.enc.Utf8)}function O_e(e){return Buffer.from(e,"base64")}function G4t(e){try{return new TextDecoder().decode(e)}catch{return null}}function S_e(e,t,r=0){try{let o=qr.default.enc.Base64.parse(e);return qr.default.AES.encrypt(t,o,{iv:qr.default.enc.Hex.parse("00000000000000000000000000000000"),mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).ciphertext.toString(qr.default.enc.Base64)}catch{return r<3?S_e(e,t,r+1):null}}function E_e(e,t,r=0){try{t=decodeURIComponent(t);let o=qr.default.enc.Base64.parse(e);return qr.default.AES.decrypt({ciphertext:qr.default.enc.Base64.parse(t)},o,{iv:qr.default.enc.Hex.parse("00000000000000000000000000000000"),mode:qr.default.mode.CBC,padding:qr.default.pad.Pkcs7}).toString(qr.default.enc.Utf8)}catch{return r<3?E_e(e,t,r+1):null}}function K4t(e){return!e||/Windows/i.test(e)?"Windows":/Macintosh|Mac OS X/i.test(e)?"macOS":/Linux|X11/i.test(e)?"Linux":"Windows"}function H4t(e){if(!e)return"133";let t=e.match(/Chrome\/(\d+)/);return t?t[1]:"133"}function vw(e){return e==="en"?"en-US,en;q=0.9,vi;q=0.8":"vi-VN,vi;q=0.9,en-US;q=0.8,en;q=0.7"}function DJ(e){if(!e||!/Chrome\//i.test(e))return{};let t=K4t(e),r=H4t(e);return{"sec-ch-ua":`"Not=A?Brand";v="99", "Google Chrome";v="${r}", "Chromium";v="${r}"`,"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":`"${t}"`}}async function V4t(e,t="https://chat.zalo.me"){if(!e.cookie)throw new ce("Cookie is not available");if(!e.userAgent)throw new ce("User agent is not available");let r=DJ(e.userAgent);return Object.assign({accept:"*/*","accept-encoding":"gzip, deflate, br, zstd","accept-language":vw(e.language),"content-type":"application/x-www-form-urlencoded",cookie:await e.cookie.getCookieString(t),origin:t,priority:"u=1, i",referer:`${t}/`,"user-agent":e.userAgent,"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":t==="https://id.zalo.me"?"same-origin":"same-site"},r)}async function Zl(e,t,r,o=!1){var n,a;e.cookie||(e.cookie=new xJ.default.CookieJar);let i=new URL(t).origin,s=await V4t(e,i);if(!o)if(r&&r.headers){let y=Object.assign({},s),b=r.headers;for(let[m,M]of Object.entries(b)){let _=m.toLowerCase();for(let O of Object.keys(y))O.toLowerCase()===_&&O!==m&&delete y[O];y[m]=M}r.headers=y}else r=Object.assign(Object.assign({},r||{}),{headers:s});let c=Object.assign(Object.assign({},r??{}),CJ?{proxy:(a=(n=e.options.agent)===null||n===void 0?void 0:n.proxy)===null||a===void 0?void 0:a.href}:{agent:e.options.agent,dispatcher:e.options.agent}),l=await e.options.polyfill(t,c),p=l.headers.get("set-cookie");if(p&&!o){let y=[],b=l.headers;if(typeof b.raw=="function"){let m=b.raw();m&&m["set-cookie"]&&(y=m["set-cookie"])}else typeof b.getSetCookie=="function"?y=b.getSetCookie():y=p.split(/,\s*(?=[a-zA-Z0-9_-]+\s*=)/);for(let m of y){let M=xJ.default.Cookie.parse(m);try{M&&await e.cookie.setCookie(M,M.domain!="zalo.me"?`https://${M.domain}`:i)}catch(_){ir(e).error(_)}}}let h=l.headers.get("location");if(h){let y=Object.assign({},r);return y.method="GET",o||(y.headers=new Headers(y.headers),y.headers.set("Referer","https://id.zalo.me/")),await Zl(e,h,y)}return l}async function $m(e,t){if(!e.options.imageMetadataGetter)throw new XI;let r=await e.options.imageMetadataGetter(t);if(!r)throw new ce("Failed to get image metadata");return{fileName:t.split("/").pop(),totalSize:r.size,width:r.width,height:r.height}}async function LJ(e){return kJ.default.promises.stat(e).then(t=>t.size)}async function T_e(e,t){if(!e.options.imageMetadataGetter)throw new XI;let r=await e.options.imageMetadataGetter(t);if(!r)throw new ce("Failed to get gif metadata");return{fileName:dD.default.basename(t),totalSize:r.size,width:r.width,height:r.height}}async function Wp(e,t){if(typeof e.data!="string")throw new ce(`Invalid data, expected string but got ${typeof e.data}`);if(typeof e.encrypt!="number")throw new ce(`Invalid encrypt type, expected number but got ${typeof e.encrypt}`);if(e.encrypt<0||e.encrypt>3)throw new ce(`Invalid encrypt type, expected 0-3 but got ${e.encrypt}`);let r=e.data,o=e.encrypt;if(o===0)return JSON.parse(r);let n=O_e(o===1?r:decodeURIComponent(r)),a=n;if(o!==1)if(t&&n.length>=48){let c={name:"AES-GCM",iv:n.subarray(0,16),tagLength:128,additionalData:n.subarray(16,32)},l=n.subarray(32),p=await Ew.default.subtle.importKey("raw",O_e(t),c,!1,["decrypt"]);a=await Ew.default.subtle.decrypt(c,p,l)}else throw new ce("Invalid data length or missing cipher key");let i=o===3?new Uint8Array(a):o_e.inflate(a),s=G4t(i);if(s)return __e.default.parse(s)}async function hD(e,t){let r=typeof e=="string"?await kJ.default.promises.readFile(e):e.data;return new Promise(o=>{let n=0,a=2097152,i=Math.ceil(t/a),s=new M_e.default.ArrayBuffer;function c(){let l=n*a,p=l+a>=t?t:l+a;s.append(new Uint8Array(r.subarray(l,p)).buffer),n++,n<i?c():o({currentChunk:n,data:s.end()})}c()})}var ir=e=>({verbose:(...t)=>{e.options.logging&&console.log("\x1B[35m\u{1F680} VERBOSE\x1B[0m",...t)},info:(...t)=>{e.options.logging&&console.log("\x1B[34mINFO\x1B[0m",...t)},warn:(...t)=>{e.options.logging&&console.log("\x1B[33mWARN\x1B[0m",...t)},error:(...t)=>{e.options.logging&&console.log("\x1B[31mERROR\x1B[0m",...t)},success:(...t)=>{e.options.logging&&console.log("\x1B[32mSUCCESS\x1B[0m",...t)},timestamp:(...t)=>{let r=new Date().toISOString();e.options.logging&&console.log(`\x1B[90m[${r}]\x1B[0m`,...t)}});function v_e(e){return e==="webchat"?1:e==="chat.voice"?31:e==="chat.photo"?32:e==="chat.sticker"?36:e==="chat.doodle"?37:e==="chat.recommended"||e==="chat.link"?38:e==="chat.video.msg"?44:e==="share.file"?46:e==="chat.gif"?49:e==="chat.location.new"?43:1}function fD(e,t,r){let o=(e=""+e).length;return o===r?e:o>r?e.slice(-r):t.repeat(r-o)+e}function I_e(e,t=Date.now()){let r=new Date(t),o={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"},n=new Intl.DateTimeFormat("vi-VN",o).format(r);return e.includes("%H")||e.includes("%d")?e.replace("%H",r.getHours().toString().padStart(2,"0")).replace("%M",r.getMinutes().toString().padStart(2,"0")).replace("%S",r.getSeconds().toString().padStart(2,"0")).replace("%d",r.getDate().toString().padStart(2,"0")).replace("%m",(r.getMonth()+1).toString().padStart(2,"0")).replace("%Y",r.getFullYear().toString()):n}function w_e(e){let t=new Date(e);return fD(t.getHours(),"0",2)+":"+fD(t.getMinutes(),"0",2)+" "+fD(t.getDate(),"0",2)+"/"+fD(t.getMonth()+1,"0",2)+"/"+t.getFullYear()}function xy(e){return dD.default.extname(e).slice(1)}function Iw(e){return dD.default.basename(e)}function ky(e){for(let t in e)e[t]===void 0&&delete e[t];return e}function P_e(e){return e=="join_request"?Gi.JOIN_REQUEST:e=="join"?Gi.JOIN:e=="leave"?Gi.LEAVE:e=="remove_member"?Gi.REMOVE_MEMBER:e=="block_member"?Gi.BLOCK_MEMBER:e=="update_setting"?Gi.UPDATE_SETTING:e=="update_avatar"?Gi.UPDATE_AVATAR:e=="update"?Gi.UPDATE:e=="new_link"?Gi.NEW_LINK:e=="add_admin"?Gi.ADD_ADMIN:e=="remove_admin"?Gi.REMOVE_ADMIN:e=="new_pin_topic"?Gi.NEW_PIN_TOPIC:e=="update_pin_topic"?Gi.UPDATE_PIN_TOPIC:e=="update_topic"?Gi.UPDATE_TOPIC:e=="update_board"?Gi.UPDATE_BOARD:e=="remove_board"?Gi.REMOVE_BOARD:e=="reorder_pin_topic"?Gi.REORDER_PIN_TOPIC:e=="unpin_topic"?Gi.UNPIN_TOPIC:e=="remove_topic"?Gi.REMOVE_TOPIC:e=="accept_remind"?Gi.ACCEPT_REMIND:e=="reject_remind"?Gi.REJECT_REMIND:e=="remind_topic"?Gi.REMIND_TOPIC:Gi.UNKNOWN}function z_e(e){return e=="add"?Er.ADD:e=="remove"?Er.REMOVE:e=="block"?Er.BLOCK:e=="unblock"?Er.UNBLOCK:e=="block_call"?Er.BLOCK_CALL:e=="unblock_call"?Er.UNBLOCK_CALL:e=="req_v2"?Er.REQUEST:e=="reject"?Er.REJECT_REQUEST:e=="undo_req"?Er.UNDO_REQUEST:e=="seen_fr_req"?Er.SEEN_FRIEND_REQUEST:e=="pin_unpin"?Er.PIN_UNPIN:e=="pin_create"?Er.PIN_CREATE:Er.UNKNOWN}async function $4t(e,t,r=!0){let o={data:null,error:null};if(!t.ok)return o.error={message:"Request failed with status code "+t.status},o;try{let n=await t.json();if(n.error_code!=0)return o.error={message:n.error_message,code:n.error_code},o;let a=r?JSON.parse(E_e(e.secretKey,n.data)):n;if(a.error_code!=0)return o.error={message:a.error_message,code:a.error_code},o;o.data=a.data}catch(n){ir(e).error("Failed to parse response data:",n),o.error={message:"Failed to parse response data"}}return o}async function Jm(e,t,r,o){let n=await $4t(e,t,o);if(n.error)throw new ce(n.error.message,n.error.code);return r?r(n):n.data}function Ie(){return e=>(t,r)=>{if(!uD(t))throw new ce("Invalid context "+JSON.stringify(t,null,2));let o={makeURL(n,a,i){return Vm(t,n,a,i)},encodeAES(n,a){return S_e(t.secretKey,n,a)},request(n,a,i){return Zl(t,n,a,i)},logger:ir(t),resolve:(n,a,i)=>Jm(t,n,a,i)};return e(r,t,o)}}function R_e(e){return Ew.default.randomUUID()+"-"+qr.default.MD5(e).toString()}function x_e(e){return Ew.default.createHash("md5").update(e).digest("hex")}function Xm(e,t){return Object.assign(Object.assign({"accept-language":vw(e.language)},DJ(e.userAgent)),t)}var dd;(function(e){e[e.QRCodeGenerated=0]="QRCodeGenerated",e[e.QRCodeExpired=1]="QRCodeExpired",e[e.QRCodeScanned=2]="QRCodeScanned",e[e.QRCodeDeclined=3]="QRCodeDeclined",e[e.GotLoginInfo=4]="GotLoginInfo"})(dd||(dd={}));async function J4t(e){let r=await(await Zl(e,"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F",{headers:Object.assign({accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","cache-control":"max-age=0",priority:"u=0, i"},Xm(e,{"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"same-site","sec-fetch-user":"?1","upgrade-insecure-requests":"1",Referer:"https://chat.zalo.me/","Referrer-Policy":"strict-origin-when-cross-origin"})),method:"GET"})).text(),o=/https:\/\/stc-zlogin\.zdn\.vn\/main-([\d.]+)\.js/,n=r.match(o);return n?.[1]}async function X4t(e,t){let r=new URLSearchParams;return r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/logininfo",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function Y4t(e,t){let r=new URLSearchParams;return r.append("type","device"),r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/verify-client",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function Q4t(e,t){let r=new URLSearchParams;return r.append("continue","https://zalo.me/pc"),r.append("v",t),await Zl(e,"https://id.zalo.me/account/authen/qr/generate",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc","Referrer-Policy":"strict-origin-when-cross-origin"})),body:r,method:"POST"}).then(o=>o.json()).catch(ir(e).error)}async function k_e(e,t){await(0,N_e.writeFile)(e,t,"base64")}async function D_e(e,t,r,o){let n=new URLSearchParams;return n.append("code",r),n.append("continue","https://chat.zalo.me/"),n.append("v",t),await Zl(e,"https://id.zalo.me/account/authen/qr/waiting-scan",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),body:n,method:"POST",signal:o}).then(a=>a.json()).then(a=>a.error_code==8?D_e(e,t,r,o):a).catch(a=>{o.aborted||ir(e).error(a)})}async function L_e(e,t,r,o){let n=new URLSearchParams;return n.append("code",r),n.append("gToken",""),n.append("gAction","CONFIRM_QR"),n.append("continue","https://chat.zalo.me/"),n.append("v",t),ir(e).info("Please confirm on your phone"),await Zl(e,"https://id.zalo.me/account/authen/qr/waiting-confirm",{headers:Object.assign({accept:"*/*","content-type":"application/x-www-form-urlencoded",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-origin",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),body:n,method:"POST",signal:o}).then(a=>a.json()).then(a=>a.error_code==8?L_e(e,t,r,o):a).catch(a=>{o.aborted||ir(e).error(a)})}async function Z4t(e){return await Zl(e,"https://id.zalo.me/account/checksession?continue=https%3A%2F%2Fchat.zalo.me%2Findex.html",{headers:Object.assign({accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",priority:"u=0, i"},Xm(e,{"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"same-origin","upgrade-insecure-requests":"1",Referer:"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F","Referrer-Policy":"strict-origin-when-cross-origin"})),redirect:"manual",method:"GET"}).catch(ir(e).error)}async function ext(e){return await Zl(e,"https://jr.chat.zalo.me/jr/userinfo",{headers:Object.assign({accept:"*/*",priority:"u=1, i"},Xm(e,{"sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"same-site",Referer:"https://chat.zalo.me/","Referrer-Policy":"strict-origin-when-cross-origin"})),method:"GET"}).then(t=>t.json()).catch(ir(e).error)}async function qJ(e,t,r){return e.cookie=new C_e.CookieJar,e.userAgent=t.userAgent,new Promise(async(o,n)=>{var a;let i=new AbortController,s=null;function c(){i.abort(),s&&(clearTimeout(s),s=null)}try{let l=function(){return c(),o(qJ(e,t,r))},p=function(){return c(),n(new K6)};e.options.logging&&console.log();let h=await J4t(e);if(!h)throw new ce("Cannot get API login version");ir(e).info("Got login version:",h),await X4t(e,h),await Y4t(e,h);let y=await Q4t(e,h);if(!y||!y.data)throw new ce(`Unable to generate QRCode
|
|
228
228
|
Response: ${JSON.stringify(y,null,2)}`);let b=y.data;if(r)r({type:dd.QRCodeGenerated,data:Object.assign(Object.assign({},y.data),{image:y.data.image.replace(/^data:image\/png;base64,/,"")}),actions:{async saveToFile(S){var v;S===void 0&&(S=(v=t.qrPath)!==null&&v!==void 0?v:"qr.png"),await k_e(S,b.image.replace(/^data:image\/png;base64,/,"")),ir(e).info("Scan the QR code at",`'${S}'`,"to proceed with login")},retry:l,abort:p}});else{let S=(a=t.qrPath)!==null&&a!==void 0?a:"qr.png";await k_e(S,b.image.replace(/^data:image\/png;base64,/,"")),ir(e).info("Scan the QR code at",`'${S}'`,"to proceed with login")}s=setTimeout(()=>{c(),ir(e).info("QR expired!"),r?r({type:dd.QRCodeExpired,data:null,actions:{retry:l,abort:p}}):l()},1e5);let m=await D_e(e,h,y.data.code,i.signal);if(!m||!m.data)throw new ce("Cannot get scan result");r&&r({type:dd.QRCodeScanned,data:m.data,actions:{retry:l,abort:p}});let M=await L_e(e,h,y.data.code,i.signal);if(!M)throw new ce("Cannot get confirm result");if(clearTimeout(s),M.error_code==-13){if(r)r({type:dd.QRCodeDeclined,data:{code:b.code},actions:{retry:l,abort:p}});else throw ir(e).error("QRCode login declined"),new H6;return}else if(M.error_code!=0)throw new ce(`An error has occurred.
|
|
229
229
|
Response: ${JSON.stringify(M,null,2)}`);if(!await Z4t(e))throw new ce("Cannot get session, login failed");ir(e).info("Successfully logged into the account",m.data.display_name);let O=await ext(e);if(!O||!O.data)throw new ce("Can't get account info");if(!O.data.logged)throw new ce("Can't login");o({cookies:e.cookie.toJSON().cookies,userInfo:O.data.info})}catch(l){c(),n(l)}})}async function q_e(e,t){let r=await U_e(e,t,"getlogininfo");try{let o=await Zl(e,Vm(e,"https://wpa.chat.zalo.me/api/login/getLoginInfo",Object.assign(Object.assign({},r.params),{nretry:0}),!1));if(!o.ok)throw new ce("Failed to fetch login info: "+o.statusText);let n=await o.json();if(r.enk){let a=A_e(r.enk,n.data);return a!=null&&typeof a!="string"?a:null}return null}catch(o){throw ir(e).error("Login failed:",o),o}}async function B_e(e,t){let r=await U_e(e,t,"getserverinfo");if(!r.params.signkey||typeof r.params.signkey!="string")throw new ce("Missing signkey");let o=await Zl(e,Vm(e,"https://wpa.chat.zalo.me/api/login/getServerInfo",{imei:e.imei,type:e.API_TYPE,client_version:e.API_VERSION,computer_name:"Web",signkey:r.params.signkey},!1));if(!o.ok)throw new ce("Failed to fetch server info: "+o.statusText);let n=await o.json();if(n.data==null)throw new ce("Failed to fetch server info: "+n.error_message);return n.data}async function U_e(e,t,r){let o={},n={computer_name:"Web",imei:e.imei,language:e.language,ts:Date.now()},a=await txt(e,n,t);if(a==null)Object.assign(o,n);else{let{encrypted_params:i,encrypted_data:s}=a;Object.assign(o,i),o.params=s}return o.type=e.API_TYPE,o.client_version=e.API_VERSION,o.signkey=r=="getserverinfo"?NJ(r,{imei:e.imei,type:e.API_TYPE,client_version:e.API_VERSION,computer_name:"Web"}):NJ(r,o),{params:o,enk:a?a.enk:null}}async function txt(e,t,r){if(r){let o=new Tw({type:e.API_TYPE,imei:t.imei,firstLaunchTime:Date.now()});try{let n=JSON.stringify(t),a=o.getEncryptKey(),i=Tw.encodeAES(a,n,"base64",!1),s=o.getParams();return s?{encrypted_data:i,encrypted_params:s,enk:a}:null}catch(n){throw new ce("Failed to encrypt params: "+n)}}return null}var ZX=ke(CS(),1);var zSe=ke(Qm(),1);var sNt="2.1.2",cNt="https://registry.npmjs.org/zca-js";async function RSe(e){var t,r;if(!e.options.checkUpdate)return;let o=Object.assign({},CJ?{proxy:(r=(t=e.options.agent)===null||t===void 0?void 0:t.proxy)===null||r===void 0?void 0:r.href}:{agent:e.options.agent}),n=await e.options.polyfill(cNt,o).catch(()=>null);if(!n||!n.ok)return;let a=await n.json().catch(()=>null);if(!a)return;let i=a["dist-tags"].latest;(0,zSe.compare)(sNt,i)===-1?ir(e).info(`A new version of zca-js is available: ${i}`):ir(e).info("zca-js is up to date")}var D3e=ke(require("events"),1);Uw();var tg;(function(e){e[e.ManualClosure=1e3]="ManualClosure",e[e.AbnormalClosure=1006]="AbnormalClosure",e[e.DuplicateConnection=3e3]="DuplicateConnection",e[e.KickConnection=3003]="KickConnection"})(tg||(tg={}));var UD=class extends D3e.default{constructor(t,r){if(super(),this.ctx=t,this.urls=r,this.consecutive1006Count=0,this.id=0,!t.cookie)throw new ce("Cookie is not available");if(!t.userAgent)throw new ce("User agent is not available");this.wsURL=Vm(this.ctx,this.urls[0],{t:Date.now()}),this.retryCount={},this.rotateCount=0;for(let o in t.settings.features.socket.retries){let{times:n,max:a}=t.settings.features.socket.retries[o];this.retryCount[o]={count:0,max:a||0,times:typeof n=="number"?[n]:n}}this.cookie=t.cookie.getCookieStringSync("https://chat.zalo.me"),this.userAgent=t.userAgent,this.selfListen=t.options.selfListen,this.ws=null,this.onConnectedCallback=()=>{},this.onClosedCallback=()=>{},this.onErrorCallback=()=>{},this.onMessageCallback=()=>{}}onConnected(t){this.onConnectedCallback=t}onClosed(t){this.onClosedCallback=t}onError(t){this.onErrorCallback=t}onMessage(t){this.onMessageCallback=t}isRetryable(t){return t===tg.AbnormalClosure||this.ctx.settings.features.socket.close_and_retry_codes.includes(t)}canRetry(t){var r;if(!this.isRetryable(t))return!1;let o=(r=this.retryCount[t.toString()])!==null&&r!==void 0?r:this.retryCount.internal;if(!o||o.count>=o.max)return!1;o.count++;let{count:n,max:a,times:i}=o,s;if(n-1<i.length)s=i[n-1];else{let c=i[i.length-1]||1e3,l=Math.min(Math.pow(1.5,n-i.length),10),p=Math.floor(Math.random()*1e3);s=Math.min(Math.floor(c*l)+p,3e4)}return ir(this.ctx).verbose(`Retry for code ${t} in ${s}ms (${n}/${a})`),s}resetRetryCount(){for(let t of Object.values(this.retryCount))t.count=0}resetWatchdog(){this.watchdogTimeout&&clearTimeout(this.watchdogTimeout),this.watchdogTimeout=setTimeout(()=>{if(ir(this.ctx).verbose("Watchdog timeout: no packet/pong received from Zalo WebSocket in 50s. Forcing reconnect..."),this.ws)try{typeof this.ws.terminate=="function"?this.ws.terminate():typeof this.ws.close=="function"&&this.ws.close(tg.AbnormalClosure)}catch{}},5e4)}shouldRotate(t){return t===tg.AbnormalClosure?(this.consecutive1006Count++,this.consecutive1006Count>=2?(this.consecutive1006Count=0,!0):!1):(this.consecutive1006Count=0,this.ctx.settings.features.socket.rotate_error_codes.includes(t))}rotateEndpoint(){this.rotateCount=(this.rotateCount+1)%this.urls.length,this.wsURL=Vm(this.ctx,this.urls[this.rotateCount],{t:Date.now()}),ir(this.ctx).verbose(`Rotating endpoint to ${this.wsURL}`)}start({retryOnClose:t=!1}={}){if(this.ws)throw new ce("Already started");this.wsURL=Vm(this.ctx,this.urls[this.rotateCount],{t:Date.now()});let r=this.ctx.cookie.getCookieStringSync("https://chat.zalo.me"),o=new el(this.wsURL,{headers:{"accept-language":vw(this.ctx.language),"cache-control":"no-cache",connection:"Upgrade",host:new URL(this.wsURL).host,origin:"https://chat.zalo.me",pragma:"no-cache","sec-websocket-extensions":"permessage-deflate; client_max_window_bits","sec-websocket-version":"13",upgrade:"websocket","user-agent":this.userAgent,cookie:r},agent:this.ctx.options.agent});this.ws=o,o.onopen=()=>{this.consecutive1006Count=0,this.resetRetryCount(),this.resetWatchdog(),this.onConnectedCallback(),this.emit("connected")},o.onclose=n=>{this.reset(),this.emit("disconnected",n.code,n.reason);let a=t&&this.isRetryable(n.code)&&this.canRetry(n.code);a&&t?(this.shouldRotate(n.code)&&this.rotateEndpoint(),this.emit("reconnecting",n.code),this.retryTimeout=setTimeout(()=>{this.start({retryOnClose:!0})},a)):(this.onClosedCallback(n.code,n.reason),this.emit("closed",n.code,n.reason))},o.onerror=n=>{this.onErrorCallback(n),this.emit("error",n)},o.onmessage=async n=>{var a,i,s;this.resetWatchdog(),this.emit("pong");let{data:c}=n;if(!(c instanceof Buffer))return;let l=c.subarray(0,4),[p,h,y]=D6t(l);try{let b=c.subarray(4),m=new TextDecoder("utf-8").decode(b);if(m.length==0)return;let M=JSON.parse(m);if(p==1&&h==1&&y==1&&jS(M,"key")){this.cipherKey=M.key,this.emit("cipher_key",M.key),this.pingInterval&&clearInterval(this.pingInterval);let _=()=>{let S={version:1,cmd:2,subCmd:1,data:{eventId:Date.now()}};this.sendWs(S,!1),this.emit("ping")},O=Math.min(Math.max(((s=(i=(a=this.ctx.settings)===null||a===void 0?void 0:a.features)===null||i===void 0?void 0:i.socket)===null||s===void 0?void 0:s.ping_interval)||25e3,1e4),25e3);this.pingInterval=setInterval(()=>{_()},O)}if(p==1&&h==501&&y==0){let _=(await Wp(M,this.cipherKey)).data,{msgs:O}=_;for(let S of O)if(typeof S.content=="object"&&jS(S.content,"deleteMsg")){let v=new ZI(this.ctx.uid,S,!1);if(v.isSelf&&!this.selfListen)continue;this.emit("undo",v)}else{let v=new YI(this.ctx.uid,S);if(v.isSelf&&!this.selfListen)continue;this.onMessageCallback(v),this.emit("message",v)}}if(p==1&&h==521&&y==0){let _=(await Wp(M,this.cipherKey)).data,{groupMsgs:O}=_;for(let S of O)if(typeof S.content=="object"&&jS(S.content,"deleteMsg")){let v=new ZI(this.ctx.uid,S,!0);if(v.isSelf&&!this.selfListen)continue;this.emit("undo",v)}else{let v=new UO(this.ctx.uid,S);if(v.isSelf&&!this.selfListen)continue;this.onMessageCallback(v),this.emit("message",v)}}if(p==1&&h==601&&y==0){let _=(await Wp(M,this.cipherKey)).data,{controls:O}=_;for(let S of O)if(S.content.act_type=="file_done"){let v={fileUrl:S.content.data.url,fileId:S.content.fileId},T=this.ctx.uploadCallbacks.get(String(S.content.fileId));T&&T(v),this.ctx.uploadCallbacks.delete(String(S.content.fileId)),this.emit("upload_attachment",v)}else if(S.content.act_type=="group"){if(S.content.act=="join_reject")continue;let v=typeof S.content.data=="string"?JSON.parse(S.content.data):S.content.data,T=t2e(this.ctx.uid,v,P_e(S.content.act),S.content.act);if(T.isSelf&&!this.selfListen)continue;this.emit("group_event",T)}else if(S.content.act_type=="fr"){if(S.content.act=="req")continue;let v=typeof S.content.data=="string"?JSON.parse(S.content.data):S.content.data;typeof v=="object"&&"topic"in v&&typeof v.topic=="object"&&"params"in v.topic&&(v.topic.params=JSON.parse(`${v.topic.params}`));let T=Qge(this.ctx.uid,typeof v=="number"?S.content.data:v,z_e(S.content.act));if(T.isSelf&&!this.selfListen)continue;this.emit("friend_event",T)}}if(h==612){let _=(await Wp(M,this.cipherKey)).data,{reacts:O,reactGroups:S}=_;for(let v of O){v.content=JSON.parse(v.content);let T=new RS(this.ctx.uid,v,!1);T.isSelf&&!this.selfListen||this.emit("reaction",T)}for(let v of S){v.content=JSON.parse(v.content);let T=new RS(this.ctx.uid,v,!0);T.isSelf&&!this.selfListen||this.emit("reaction",T)}}if(h==610||h==611){let _=(await Wp(M,this.cipherKey)).data,O=h==611,v=_[O?"reactGroups":"reacts"].map(T=>new RS(this.ctx.uid,T,O));this.emit("old_reactions",v,O)}if(h==510&&y==1){let S=(await Wp(M,this.cipherKey)).data.msgs.map(v=>new YI(this.ctx.uid,v));this.emit("old_messages",S,Xe.User)}if(h==511&&y==1){let S=(await Wp(M,this.cipherKey)).data.groupMsgs.map(v=>new UO(this.ctx.uid,v));this.emit("old_messages",S,Xe.Group)}if(h==602&&y==0){let _=(await Wp(M,this.cipherKey)).data,{actions:O}=_;for(let S of O)if(S.act_type=="typing"){let v=JSON.parse(`{${S.data}}`);if(S.act=="typing"){let T=new Z6(v);this.emit("typing",T)}else if(S.act=="gtyping"){let T=new e5(v);this.emit("typing",T)}}}if(h==502&&y==0){let _=(await Wp(M,this.cipherKey)).data,{delivereds:O,seens:S}=_;if(Array.isArray(O)&&O.length>0){let v=O.map(T=>new J6(T));this.emit("delivered_messages",v)}if(Array.isArray(S)&&S.length>0){let v=S.map(T=>new Y6(T));this.emit("seen_messages",v)}}if(h==522&&y==0){let _=(await Wp(M,this.cipherKey)).data,{delivereds:O,groupSeens:S}=_;if(Array.isArray(O)&&O.length>0){let v=O.map(T=>new X6(this.ctx.uid,T));this.selfListen||(v=v.filter(T=>!T.isSelf)),this.emit("delivered_messages",v)}if(Array.isArray(S)&&S.length>0){let v=S.map(T=>new Q6(this.ctx.uid,T));this.selfListen||(v=v.filter(T=>!T.isSelf)),this.emit("seen_messages",v)}}p==1&&h==3e3&&y==0&&(ir(this.ctx).error(),ir(this.ctx).error("Another connection is opened, closing this one"),ir(this.ctx).error(),o.readyState!==el.CLOSED&&o.close(tg.DuplicateConnection))}catch(b){if(b instanceof ce&&b.message.includes("Invalid data length or missing cipher key")){ir(this.ctx).verbose("Ignored undecryptable Zalo packet. This is normal for some reaction/system events.");return}this.onErrorCallback(b),this.emit("error",b)}}}stop(){this.retryTimeout&&clearTimeout(this.retryTimeout),this.watchdogTimeout&&clearTimeout(this.watchdogTimeout),this.ws&&this.ws.readyState!==el.CLOSED&&this.ws.close(tg.ManualClosure),this.reset()}sendWs(t,r=!0){if(this.ws){r&&(t.data.req_id=`req_${this.id++}`);let o=new TextEncoder().encode(JSON.stringify(t.data)),n=o.length,a=new DataView(Buffer.alloc(4+n).buffer);a.setUint8(0,t.version),a.setInt32(1,t.cmd,!0),a.setInt8(3,t.subCmd),o.forEach((i,s)=>{a.setUint8(4+s,i)}),this.ws.send(a)}}requestOldMessages(t,r=null){let o={version:1,cmd:t===Xe.User?510:511,subCmd:1,data:{first:!0,lastId:r,preIds:[]}};this.sendWs(o)}requestOldReactions(t,r=null){let o={version:1,cmd:t===Xe.User?610:611,subCmd:1,data:{first:!0,lastId:r,preIds:[]}};this.sendWs(o)}reset(){this.ws=null,this.cipherKey=void 0,this.pingInterval&&clearInterval(this.pingInterval),this.watchdogTimeout&&clearTimeout(this.watchdogTimeout)}};function D6t(e){if(e.byteLength<4)throw new ce("Invalid header");return[e[0],e.readUInt16LE(1),e[3]]}var L3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/accept`);return async function(a){let i={fid:a,language:t.language},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var q3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/blockedmems/add`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var B3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/admins/add`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var U3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/option/add`);return async function(a){let i={poll_id:a.pollId,new_options:JSON.stringify(a.options),voted_option_ids:a.votedOptionIds},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var W3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.quick_message[0]}/api/quickmessage/create`);return async function(a){let i=a.media?1:0,s={keyword:a.keyword,message:{title:a.title,params:""},type:i,imei:t.imei};if(i===1){if(!a.media)throw new ce("Media is required");let p=await e.uploadProductPhoto({file:a.media}),h=p.photoId,y=p.thumbUrl,b=p.normalUrl,m=p.hdUrl;s.media={items:[{type:0,photoId:h,title:"",width:"",height:"",previewThumb:y,rawUrl:b||m,thumbUrl:y,normalUrl:b||m,hdUrl:m||b}]}}let c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var F3e=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.reaction[0]}/api/message/reaction`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.reaction[0]}/api/group/reaction`)};return async function(a,i){let s=o[i.type],c,l;if(typeof a=="object")c=a.rType,l=a.source;else switch(a){case gn.HAHA:c=0,l=6;break;case gn.LIKE:c=3,l=6;break;case gn.HEART:c=5,l=6;break;case gn.WOW:c=32,l=6;break;case gn.CRY:c=2,l=6;break;case gn.ANGRY:c=20,l=6;break;case gn.KISS:c=8,l=6;break;case gn.TEARS_OF_JOY:c=7,l=6;break;case gn.SHIT:c=66,l=6;break;case gn.ROSE:c=120,l=6;break;case gn.BROKEN_HEART:c=65,l=6;break;case gn.DISLIKE:c=4,l=6;break;case gn.LOVE:c=29,l=6;break;case gn.CONFUSED:c=51,l=6;break;case gn.WINK:c=45,l=6;break;case gn.FADE:c=121,l=6;break;case gn.SUN:c=67,l=6;break;case gn.BIRTHDAY:c=126,l=6;break;case gn.BOMB:c=127,l=6;break;case gn.OK:c=68,l=6;break;case gn.PEACE:c=69,l=6;break;case gn.THANKS:c=70,l=6;break;case gn.PUNCH:c=71,l=6;break;case gn.SHARE:c=72,l=6;break;case gn.PRAY:c=73,l=6;break;case gn.NO:c=131,l=6;break;case gn.BAD:c=132,l=6;break;case gn.LOVE_YOU:c=133,l=6;break;case gn.SAD:c=1,l=6;break;case gn.VERY_SAD:c=16,l=6;break;case gn.COOL:c=21,l=6;break;case gn.NERD:c=22,l=6;break;case gn.BIG_SMILE:c=23,l=6;break;case gn.SUNGLASSES:c=26,l=6;break;case gn.NEUTRAL:c=30,l=6;break;case gn.SAD_FACE:c=35,l=6;break;case gn.BYE:c=36,l=6;break;case gn.SLEEPY:c=38,l=6;break;case gn.WIPE:c=39,l=6;break;case gn.DIG:c=42,l=6;break;case gn.ANGUISH:c=44,l=6;break;case gn.HANDCLAP:c=46,l=6;break;case gn.ANGRY_FACE:c=47,l=6;break;case gn.F_CHAIR:c=48,l=6;break;case gn.L_CHAIR:c=49,l=6;break;case gn.R_CHAIR:c=50,l=6;break;case gn.SILENT:c=52,l=6;break;case gn.SURPRISE:c=53,l=6;break;case gn.EMBARRASSED:c=54,l=6;break;case gn.AFRAID:c=60,l=6;break;case gn.SAD2:c=61,l=6;break;case gn.BIG_LAUGH:c=62,l=6;break;case gn.RICH:c=63,l=6;break;case gn.BEER:c=99,l=6;break;default:c=-1,l=6}let p=typeof a=="object"?a.icon:a;if(c==null||l==null||p==null)throw new ce("Invalid reaction");let h={react_list:[{message:JSON.stringify({rMsg:[{gMsgID:parseInt(i.data.msgId),cMsgID:parseInt(i.data.cliMsgId),msgType:1}],rIcon:p,rType:c,source:l}),clientId:Date.now()}]};i.type==Xe.User?h.toid=i.threadId:(h.grid=i.threadId,h.imei=t.imei);let y=r.encodeAES(JSON.stringify(h));if(!y)throw new ce("Failed to encrypt message");let b=await r.request(s,{method:"POST",body:new URLSearchParams({params:y})});return r.resolve(b,m=>typeof m.data.msgIds=="string"?{msgIds:JSON.parse(m.data.msgIds)}:m.data)}});var j3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/conv/addUnreadMark`);return async function(a,i=Xe.User){let s=Date.now(),c=s.toString(),l=i===Xe.Group,p={param:JSON.stringify({[l?"convsGroup":"convsUser"]:[{id:a,cliMsgId:c,fromUid:"0",ts:s}],[l?"convsUser":"convsGroup"]:[],imei:t.imei})},h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(o,{method:"POST",body:new URLSearchParams({params:h})});return r.resolve(y,b=>{let m=b.data;return typeof m.data=="string"?{data:JSON.parse(m.data),status:m.status}:b.data})}});var G3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/invite/v2`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a,memberTypes:a.map(()=>-1),imei:t.imei,clientLang:t.language},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var K3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/block`);return async function(a){let i={fid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var H3e=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/feed/block`);return async function(a,i){let s={fid:i,isBlockFeed:a?1:0,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var XTe=ke(oM(),1),YTe=ke(require("node:fs"),1);var QTe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.file[0]}/api/profile/upavatar`);return async function(a){let i=typeof a=="string",s=i?await $m(t,a):a.metadata,c=s.totalSize||0,l={avatarSize:120,clientId:String(t.uid+I_e("%H:%M %d/%m/%Y")),language:t.language,metaData:JSON.stringify({origin:{width:s.width||1080,height:s.height||1080},processed:{width:s.width||1080,height:s.height||1080,size:c}})},p=i?YTe.default.readFileSync(a):a.data,h=new XTe.default;h.append("fileContent",p,{filename:"blob",contentType:"image/jpeg"});let y=r.encodeAES(JSON.stringify(l));if(!y)throw new ce("Failed to encrypt params");let b=await r.request(r.makeURL(o,{params:y}),{method:"POST",headers:h.getHeaders(),body:h.getBuffer()});return r.resolve(b)}});var ZTe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.alias[0]}/api/alias/update`);return async function(a,i){let s={friendId:i,alias:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var eve=ke(oM(),1),tve=ke(require("node:fs"),1);var nve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.file[0]}/api/group/upavatar`);return async function(a,i){let s={grid:i,avatarSize:120,clientId:`g${i}${w_e(new Date().getTime())}`,imei:t.imei},c=typeof a=="string",l=c?await $m(t,a):a.metadata;s.originWidth=l.width||1080,s.originHeight=l.height||1080;let p=c?tve.default.readFileSync(a):a.data,h=new eve.default;h.append("fileContent",p,{filename:"blob",contentType:"image/jpeg"});let y=r.encodeAES(JSON.stringify(s));if(!y)throw new ce("Failed to encrypt params");let b=await r.request(r.makeURL(o,{params:y}),{method:"POST",headers:h.getHeaders(),body:h.getBuffer()});return r.resolve(b)}});var ive=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/updateinfo`);return async function(a,i){a.length==0&&(a=Date.now().toString());let s={grid:i,gname:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var rve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/change-owner`);return async function(a,i){let s={grid:i,newAdminId:a,imei:t.imei,language:t.language},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var ove=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.auto_reply[0]}/api/autoreply/create`);return async function(a){let i=Array.isArray(a.uids)?a.uids:[a.uids],s=a.scope===2||a.scope===3?i:[],c={cliLang:t.language,enable:a.isEnable,content:a.content,startTime:a.startTime,endTime:a.endTime,recurrence:["RRULE:FREQ=DAILY;"],scope:a.scope,uids:s},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o,{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var ave=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/create`);return async function(a){let i={catalog_name:a,catalog_photo:""},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var sve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/create/v2`);return async function(a){if(a.members.length==0)throw new ce("Group must have at least one member");let i={clientId:Date.now(),gname:String(Date.now()),gdesc:null,members:a.members,membersTypes:a.members.map(()=>-1),nameChanged:0,createLink:1,clientLang:t.language,imei:t.imei,zsource:601};a.name&&a.name.length>0&&(i.gname=a.name,i.nameChanged=1);let s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(r.makeURL(o,{params:s}),{method:"POST"}),l=await r.resolve(c);return a.avatarSource=a.avatarSource||a.avatarPath,a.avatarSource&&await e.changeGroupAvatar(a.avatarSource,l.groupId).catch(r.logger.error),l}});var cve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/createv2`);return async function(a,i){let s={grid:i,type:0,color:-16777216,emoji:"",startTime:-1,duration:-1,params:JSON.stringify({title:a.title}),repeat:0,src:1,imei:t.imei,pinAct:a.pinAct?1:0},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l,p=>(typeof p.data.params=="string"&&(p.data.params=JSON.parse(p.data.params)),p.data))}});var lve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/create`);return async function(a,i){var s;let c={group_id:i,question:a.question,options:a.options,expired_time:(s=a.expiredTime)!==null&&s!==void 0?s:0,pinAct:!1,allow_multi_choices:!!a.allowMultiChoices,allow_add_new_option:!!a.allowAddNewOption,is_hide_vote_preview:!!a.hideVotePreview,is_anonymous:!!a.isAnonymous,poll_type:0,src:1,imei:t.imei},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o,{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var uve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/product/create`);return async function(a){let i=a.product_photos||[];if(a.files&&a.files.length==0){if(a.files.length>5)throw new ce("Maximum 5 media files are allowed");for(let p of a.files){let h=await e.uploadProductPhoto({file:p}),y=h.normalUrl||h.hdUrl;i.push(y)}}if(i.length>5)throw new ce("Maximum 5 media files are allowed");let s={product_name:a.productName,price:a.price,description:a.description,product_photos:i,catalog_id:a.catalogId,currency_unit:"\u20AB",create_time:Date.now()},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var pve=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/oneone/create`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/createv2`)};return async function(a,i,s=Xe.User){var c,l,p,h,y,b;let m=s===Xe.User?{objectData:JSON.stringify({toUid:i,type:0,color:-16245706,emoji:(c=a.emoji)!==null&&c!==void 0?c:"\u23F0",startTime:(l=a.startTime)!==null&&l!==void 0?l:Date.now(),duration:-1,params:{title:a.title},needPin:!1,repeat:(p=a.repeat)!==null&&p!==void 0?p:QI.None,creatorUid:t.uid,src:1}),imei:t.imei}:{grid:i,type:0,color:-16245706,emoji:(h=a.emoji)!==null&&h!==void 0?h:"\u23F0",startTime:(y=a.startTime)!==null&&y!==void 0?y:Date.now(),duration:-1,params:JSON.stringify({title:a.title}),repeat:(b=a.repeat)!==null&&b!==void 0?b:QI.None,src:1,imei:t.imei,pinAct:0},M=r.encodeAES(JSON.stringify(m));if(!M)throw new ce("Failed to encrypt params");let _=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:M})});return r.resolve(_)}});var fve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/gid/decrypt`);return async function(a){if(!a)throw new ce("Missing gids");Array.isArray(a)||(a=[a]);let i={gids:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var dve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.auto_reply[0]}/api/autoreply/delete`);return async function(a){let i={cliLang:t.language,id:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var hve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/del-avatars`);return async function(a){let s=(Array.isArray(a)?a:[a]).map(h=>({photoId:h})),c={delPhotos:JSON.stringify(s),imei:t.imei},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p)}});var yve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/delete`);return async function(a){let i={catalog_id:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var bve=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/deleteconver`,{nretry:0}),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/deleteconver`,{nretry:0})};return async function(a,i,s=Xe.User){let c=Date.now().toString(),l=s===Xe.User?{toid:i,cliMsgId:c,conver:a,onlyMe:1,imei:t.imei}:{grid:i,cliMsgId:c,conver:a,onlyMe:1,imei:t.imei},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h)}});var mve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/inv-box/mdel-inv`);return async function(a,i=!1){let s=Array.isArray(a)?a:[a],c={invitations:JSON.stringify(s.map(h=>({grid:h}))),block:i?1:0},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p)}});var gve=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/delete`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/deletemsg`)};return async function(a,i=!1){let{threadId:s,type:c=Xe.User,data:l}=a,p=c===Xe.Group;if(t.uid==l.uidFrom&&i===!1)throw new ce("To delete your message for everyone, use undo api instead");if(!p&&i===!1)throw new ce("Can't delete message for everyone in a private chat");let y={[p?"grid":"toid"]:s,cliMsgId:Date.now(),msgs:[{cliMsgId:l.cliMsgId,globalMsgId:l.msgId,ownerId:l.uidFrom,destId:s}],onlyMe:i?1:0};p||(y.imei=t.imei);let b=r.encodeAES(JSON.stringify(y));if(!b)throw new ce("Failed to encrypt message");let m=await r.request(o[c],{method:"POST",body:new URLSearchParams({params:b})});return r.resolve(m)}});var Ove=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/product/mdelete`);return async function(a){Array.isArray(a.productIds)||(a.productIds=[a.productIds]);let i={product_ids:a.productIds,catalog_id:a.catalogId},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var Mve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/link/disable`);return async function(a){let i={grid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var _ve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/disperse`);return async function(a){let i={grid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var Ave=Ie()((e,t,r)=>async function(n){let a="";if(typeof n=="string")a=n;else{if(!n.key||!n.exp||!n.sig)throw new ce("Missing key, exp or sig in options");a=`https://transfersync.zaloapp.com/api/transfer-sync-v2/download?key=${n.key}&exp=${n.exp}&sig=${n.sig}`}let i=await r.request(a,{method:"GET"});if(!i.ok)throw new ce(`Failed to download transfer snapshot: ${i.statusText} (${i.status})`);let s=await i.arrayBuffer();return Buffer.from(s)});var Sve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/updatev2`);return async function(a,i){let s={grid:i,type:0,color:-16777216,emoji:"",startTime:-1,duration:-1,params:JSON.stringify({title:a.title}),topicId:a.topicId,repeat:0,imei:t.imei,pinAct:a.pinAct?1:2},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l,p=>{let h=p.data;return typeof h.params=="string"&&(h.params=JSON.parse(h.params)),h})}});var Eve=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/oneone/update`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/updatev2`)};return async function(a,i,s=Xe.User){var c,l,p,h,y,b;let m=s===Xe.User?{objectData:JSON.stringify({toUid:i,type:0,color:-16777216,emoji:(c=a.emoji)!==null&&c!==void 0?c:"",startTime:(l=a.startTime)!==null&&l!==void 0?l:Date.now(),duration:-1,params:{title:a.title},needPin:!1,reminderId:a.topicId,repeat:(p=a.repeat)!==null&&p!==void 0?p:0})}:{grid:i,type:0,color:-16777216,emoji:(h=a.emoji)!==null&&h!==void 0?h:"",startTime:(y=a.startTime)!==null&&y!==void 0?y:Date.now(),duration:-1,params:JSON.stringify({title:a.title}),topicId:a.topicId,repeat:(b=a.repeat)!==null&&b!==void 0?b:0,imei:t.imei,pinAct:2},M=r.encodeAES(JSON.stringify(m));if(!M)throw new ce("Failed to encrypt params");let _=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:M})});return r.resolve(_)}});var Tve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/link/new`);return async function(a){let i={grid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var vve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/me-v2`);return async function(){let a=await r.request(o,{method:"GET"});return r.resolve(a)}});var Ive=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/profile/get`);return async function(a,i=Yl.Large){if(!a)throw new ce("Missing phoneNumber");a.startsWith("0")&&t.language=="vi"&&(a="84"+a.slice(1));let s={phone:a,avatar_size:i,language:t.language,imei:t.imei,reqSrc:40},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt message");let l=new URL(o);l.searchParams.append("params",c);let p=await r.request(r.makeURL(l.toString(),{params:c}));return r.resolve(p,h=>{if(h.error&&h.error.code!=216)throw new ce(h.error.message,h.error.code);return h.data})}});var wve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/search/by-user-name`);return async function(a,i=Yl.Large){let s={user_name:a,avatar_size:i},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Pve=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/message/mforward`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/group/mforward`)};return async function(a,i,s=Xe.User){var c,l;if(!a.message)throw new ce("Missing message content");if(!i||i.length===0)throw new ce("Missing thread IDs");let h=Date.now().toString(),y={message:a.message,reference:a.reference?JSON.stringify({type:3,data:JSON.stringify(a.reference)}):void 0},b=a.reference?{fw:{pmsg:{st:1,ts:a.reference.ts,id:a.reference.id},rmsg:{st:1,ts:a.reference.ts,id:a.reference.id},fwLvl:a.reference.fwLvl}}:null,m;s===Xe.User?m={toIds:i.map(O=>{var S;return{clientId:h,toUid:O,ttl:(S=a.ttl)!==null&&S!==void 0?S:0}}),imei:t.imei,ttl:(c=a.ttl)!==null&&c!==void 0?c:0,msgType:"1",totalIds:i.length,msgInfo:JSON.stringify(y),decorLog:JSON.stringify(b)}:m={grids:i.map(O=>{var S;return{clientId:h,grid:O,ttl:(S=a.ttl)!==null&&S!==void 0?S:0}}),ttl:(l=a.ttl)!==null&&l!==void 0?l:0,msgType:"1",totalIds:i.length,msgInfo:JSON.stringify(y),decorLog:JSON.stringify(b)};let M=r.encodeAES(JSON.stringify(m));if(!M)throw new ce("Failed to encrypt params");let _=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:M})});return r.resolve(_)}});var zve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.alias[0]}/api/alias/list`);return async function(a=100,i=1){let s={page:i,count:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Rve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/friend/getfriends`);return async function(a=2e4,i=1,s=Yl.Small){let c={incInvalid:1,page:i,count:a,avatar_size:s,actiontime:0,imei:t.imei},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt message");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p)}});var xve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_poll[0]}/api/group/getlg/v4`);return async function(){let a=await r.request(o,{method:"GET"});return r.resolve(a)}});var kve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.label[0]}/api/archivedchat/list`);return async function(){let a={version:1,imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var Cve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/conv/autodelete/getConvers`);return async function(){let a={},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var Nve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.auto_reply[0]}/api/autoreply/list`);return async function(){let a={version:0,cliLang:t.language},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var Dve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/avatar-list`);return async function(a=50,i=1){let s={page:i,albumId:"0",count:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Lve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/avatar-url`);return async function(a,i=Yl.Large){Array.isArray(a)||(a=[a]);let s={friend_ids:a,avatar_size:i,srcReq:-1},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var qve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/friend/get-bizacc`);return async function(a){let i={fid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var Bve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/list`);return async function(a){var i,s,c;let l={version_list_catalog:0,limit:(i=a?.limit)!==null&&i!==void 0?i:20,last_product_id:(s=a?.lastProductId)!==null&&s!==void 0?s:-1,page:(c=a?.page)!==null&&c!==void 0?c:0},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(o,{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h)}});var Uve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/friend/getclosedfriends`);return async function(){let a={},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var Wve=Ie()((e,t)=>()=>t);var Fve=Ie()((e,t)=>function(){return t.cookie});var jve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend_board[0]}/api/friendboard/list`);return async function(a){let i={conversationId:a,version:0,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var Gve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/friend/onlines`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s,c=>{let l=c.data;if(Array.isArray(l.onlines)){for(let p of l.onlines)if(typeof p.status=="string"){let h=JSON.parse(p.status);h&&typeof h.status=="string"&&(p.status=h.status)}}return l})}});var HX;(function(e){e[e.RecommendedFriend=1]="RecommendedFriend",e[e.ReceivedFriendRequest=2]="ReceivedFriendRequest"})(HX||(HX={}));var Kve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/recommendsv2/list`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var Hve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/reqstatus`);return async function(a){let i={fid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var Vve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/avatar`);return async function(a){let i={fid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var $ve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/blockedmems/list`);return async function(a,i){var s,c;let l={grid:i,page:(s=a.page)!==null&&s!==void 0?s:1,count:(c=a.count)!==null&&c!==void 0?c:50,imei:t.imei},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(r.makeURL(o,{params:p}),{method:"GET"});return r.resolve(h)}});var Jve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_cloud_message[0]}/api/cm/getrecentv2`);return async function(a,i=50){if(!a)throw new ce("Missing groupId");a.startsWith("g")&&(a=a.slice(1));let s=Math.min(Math.max(i,1),200),c=[],l=0,p=null,h=0;for(;c.length<s&&h<10;){h++;let b={groupId:a,globalMsgId:l,count:Math.min(50,s-c.length),msgIds:[],imei:t.imei,src:3},m=r.encodeAES(JSON.stringify(b));if(!m)throw new ce("Failed to encrypt params");let M=await r.request(r.makeURL(o,{params:m,nretry:0}),{method:"GET"});if(p=await r.resolve(M,O=>{let S=O.data;return typeof S=="string"&&(S=JSON.parse(S)),S}),!p||!Array.isArray(p.groupMsgs))break;for(let O of p.groupMsgs){if(c.length>=s)break;c.some(S=>S.msgId===O.msgId)||c.push(O)}let _=Number(p.lastMsgId);if(!p.hasMore||!_||_===l)break;l=_}let y=c.map(b=>new UO(t.uid,b));return Object.assign({},p||{},{groupMsgs:y})}});var Xve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/getmg-v2`);return async function(a){Array.isArray(a)||(a=[a]);let i={gridVerMap:JSON.stringify(a.reduce((l,p)=>(l[p]=0,l),{}))},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var Yve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/inv-box/inv-info`);return async function(a){var i,s;let c={grId:a.groupId,mcount:(i=a.mcount)!==null&&i!==void 0?i:10,mpage:(s=a.mpage)!==null&&s!==void 0?s:1},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p,h=>{let y=h.data,b=y.groupInfo.topic;if(typeof b.params=="string"){let m=JSON.parse(b.params);typeof m.extra=="string"&&(m.extra=JSON.parse(m.extra)),b.params=m}return y})}});var Qve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/inv-box/list`);return async function(a){var i,s,c,l;let p={mpage:(i=a?.mpage)!==null&&i!==void 0?i:1,page:(s=a?.page)!==null&&s!==void 0?s:0,invPerPage:(c=a?.invPerPage)!==null&&c!==void 0?c:12,mcount:(l=a?.mcount)!==null&&l!==void 0?l:10,lastGroupId:null,avatar_size:120,member_avatar_size:120},h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(r.makeURL(o,{params:h}),{method:"GET"});return r.resolve(y)}});var Zve=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/link/detail`);return async function(a){let i={grid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var eIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/link/ginfo`);return async function(a){var i;let s={link:a.link,avatar_size:120,member_avatar_size:120,mpage:(i=a.memberPage)!==null&&i!==void 0?i:1},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var tIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/group/members`);return async function(a){Array.isArray(a)||(a=[a]);let i={friend_pversion_map:a.map(l=>l.endsWith("_0")?l:`${l}_0`)},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(r.makeURL(o,{params:s}));return r.resolve(c)}});var nIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/hiddenconvers/get-all`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var iIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.label[0]}/api/convlabel/get`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt message");let s=await r.request(r.makeURL(o,{params:i}));return r.resolve(s,c=>{let l=c.data;return{labelData:JSON.parse(l.labelData),version:l.version,lastUpdateTime:l.lastUpdateTime}})}});var rIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/list`);return async function(a,i){var s,c;let l={group_id:i,board_type:0,page:(s=a.page)!==null&&s!==void 0?s:1,count:(c=a.count)!==null&&c!==void 0?c:20,last_id:0,last_type:0,imei:t.imei},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(r.makeURL(o,{params:p}),{method:"GET"});return r.resolve(h,y=>{let b=y.data;return b.items.forEach(m=>{if(m.boardType!=V6.Poll){let M=m.data;typeof M.params=="string"&&(M.params=JSON.parse(M.params))}}),b})}});var oIe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/oneone/list`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/listReminder`)};return async function(a,i,s=Xe.User){var c,l,p,h;let y=Object.assign({objectData:JSON.stringify(s===Xe.User?{uid:i,board_type:1,page:(c=a.page)!==null&&c!==void 0?c:1,count:(l=a.count)!==null&&l!==void 0?l:20,last_id:0,last_type:0}:{group_id:i,board_type:1,page:(p=a.page)!==null&&p!==void 0?p:1,count:(h=a.count)!==null&&h!==void 0?h:20,last_id:0,last_type:0})},s===Xe.Group&&{imei:t.imei}),b=r.encodeAES(JSON.stringify(y));if(!b)throw new ce("Failed to encrypt params");let m=await r.request(r.makeURL(o[s],{params:b}),{method:"GET"});return r.resolve(m,M=>JSON.parse(M.data))}});var aIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/profile/multiget`);return async function(a,i=Yl.Large){if(!a)throw new ce("Missing phoneNumbers");Array.isArray(a)||(a=[a]),a=a.map(p=>(p.startsWith("0")&&t.language=="vi"&&(p="84"+p.slice(1)),p));let s={phones:a,avatar_size:i,language:t.language},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var sIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/getmute`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var cIe=Ie()((e,t)=>()=>t.uid);var lIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/pending-mems/list`);return async function(a){let i={grid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var uIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/pinconvers/list`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var pIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/detail`);return async function(a){if(!a)throw new ce("Missing poll id");let i={poll_id:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var fIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/product/list`);return async function(a){var i,s,c,l;let p={catalog_id:a.catalogId,limit:(i=a.limit)!==null&&i!==void 0?i:100,version_catalog:(s=a.versionCatalog)!==null&&s!==void 0?s:0,last_product_id:(c=a.lastProductId)!==null&&c!==void 0?c:-1,page:(l=a.page)!==null&&l!==void 0?l:0},h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(o,{method:"POST",body:new URLSearchParams({params:h})});return r.resolve(y)}});var dIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/mget-qr`);return async function(a){typeof a=="string"&&(a=[a]);let i={fids:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var hIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.quick_message[0]}/api/quickmessage/list`);return async function(){let a={version:0,lang:0,imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var yIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/group/related`);return async function(a){let i=Array.isArray(a)?a:[a],s={friend_ids:JSON.stringify(i),imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var bIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/getReminder`);return async function(a){let i={eventId:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var mIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/listResponseEvent`);return async function(a){let i={eventId:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var gIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/requested/list`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var OIe=Ie()((e,t,r)=>{let o=r.makeURL("https://wpa.chat.zalo.me/api/setting/me");return async function(){let a={},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var MIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.sticker[0]}/api/message/sticker/category/sticker_detail`);return async function(a){let i={cid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var _Ie=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.sticker}/api/message/sticker`);return async function(a){if(!a)throw new ce("Missing keyword");let i={keyword:a,gif:1,guggy:0,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=new URL(o);c.pathname=c.pathname+"/suggest/stickers";let l=await r.request(r.makeURL(c.toString(),{params:s}));return r.resolve(l,p=>{let h=p.data,y=[];return h.sugg_sticker&&h.sugg_sticker.forEach(b=>y.push(b.sticker_id)),y})}});var AIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.sticker}/api/message/sticker/sticker_detail`);return async function(i){if(!i)throw new ce("Missing sticker id");if(Array.isArray(i)||(i=[i]),i.length==0)throw new ce("Missing sticker id");let s=[],c=i.map(p=>n(p));return(await Promise.allSettled(c)).forEach(p=>{p.status==="fulfilled"&&s.push(p.value)}),s};async function n(a){let i={sid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(r.makeURL(o,{params:s}));return Jm(t,c)}});var SIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/conv/getUnreadMark`);return async function(){let a={},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s,c=>{let l=c.data;return typeof l.data=="string"?{data:JSON.parse(l.data),status:l.status}:l})}});var EIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/friend/getprofiles/v2`);return async function(a,i=Yl.Small){if(!a)throw new ce("Missing user id");Array.isArray(a)||(a=[a]),a=a.map(p=>p.split("_").length>1?p:`${p}_0`);let s={phonebook_version:t.extraVer.phonebook,friend_pversion_map:a,avatar_size:i,language:t.language,show_online_status:1,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var TIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/invite/multi`);return async function(a,i){let s={grids:Array.isArray(i)?i:[i],member:a,memberType:-1,srcInteraction:2,clientLang:t.language},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var vIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/inv-box/join`);return async function(a){let i={grid:a,lang:t.language},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var IIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/link/join`);return async function(a){let i={link:a,clientLang:t.language},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var wIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.chat[0]}/keepalive`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s,void 0,!1)}});var PIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/lastOnline`);return async function(a){let i={uid:a,conv_type:1,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var zIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/leave`);return async function(a,i=!1){let s={grids:[a],imei:t.imei,silent:i?1:0,language:t.language},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var RIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/end`);return async function(a){let i={poll_id:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var xIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.file[0]}/api/message/parselink`);return async function(a){let i={link:a,version:1,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var kIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/preloadconvers/get-last-msgs`);return async function(){let a={imei:t.imei},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var CIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/reject`);return async function(a){let i={fid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var NIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/remove`);return async function(a){let i={fid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var DIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.alias[0]}/api/alias/remove`);return async function(a){let i={friendId:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var LIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/blockedmems/remove`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var qIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/admins/remove`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var BIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.quick_message[0]}/api/quickmessage/delete`);return async function(a){let s={itemIds:Array.isArray(a)?a:[a]},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var UIe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/oneone/remove`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group_board[0]}/api/board/topic/remove`)};return async function(a,i,s=Xe.User){let c=s===Xe.User?{uid:i,reminderId:a}:{grid:i,topicId:a,imei:t.imei},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var WIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/conv/removeUnreadMark`);return async function(a,i=Xe.User){let s=Date.now(),c=i===Xe.Group,l={param:JSON.stringify({[c?"convsGroup":"convsUser"]:[a],[c?"convsUser":"convsGroup"]:[],[c?"convsGroupData":"convsUserData"]:[{id:a,ts:s}],[c?"convsUserData":"convsGroupData"]:[]})},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(o,{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h,y=>{let b=y.data;return typeof b.data=="string"?{data:JSON.parse(b.data),status:b.status}:y.data})}});var FIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/kickout`);return async function(a,i){Array.isArray(a)||(a=[a]);let s={grid:i,members:a,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var jIe=Ie()((e,t)=>async function(){if(!e.listener)throw new ce("WebSocket listener is not initialized. Please call api.listener.start() first.");let o={version:1,cmd:510,subCmd:0,data:{act:"sync_request",imei:t.imei,ts:Date.now()}};return e.listener.sendWs(o,!0),{success:!0}});var GIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/hiddenconvers/reset`);return async function(){let a={},i=r.encodeAES(JSON.stringify(a));if(!i)throw new ce("Failed to encrypt params");let s=await r.request(r.makeURL(o,{params:i}),{method:"GET"});return r.resolve(s)}});var KIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/reuse-avatar`);return async function(a){let i={photoId:a,isPostSocial:0,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var VX;(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.NOT_IN_PENDING_LIST=170]="NOT_IN_PENDING_LIST",e[e.ALREADY_IN_GROUP=178]="ALREADY_IN_GROUP",e[e.INSUFFICIENT_PERMISSION=166]="INSUFFICIENT_PERMISSION"})(VX||(VX={}));var HIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/pending-mems/review`);return async function(a,i){Array.isArray(a.members)||(a.members=[a.members]);let s={grid:i,members:a.members,isApprove:a.isApprove?1:0},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var VIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.sticker[0]}/api/message/sticker/search`);return async function(a,i=50){let s={keyword:a,limit:i,srcType:0,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var $Ie=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.zimsg[0]}/api/transfer/card`);return async function(a,i,s=Xe.User){var c;let l={binBank:a.binBank,numAccBank:a.numAccBank,nameAccBank:((c=a.nameAccBank)===null||c===void 0?void 0:c.toUpperCase())||"---",cliMsgId:Date.now().toString(),tsMsg:Date.now(),destUid:i,destType:s===Xe.Group?1:0},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(o,{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h)}});var JIe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/message/forward`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/group/forward`)};return async function(a,i,s=Xe.User){var c;let p=(await e.getQR(a.userId))[a.userId],h=Date.now().toString(),y={ttl:(c=a.ttl)!==null&&c!==void 0?c:0,msgType:6,clientId:h,msgInfo:{contactUid:a.userId,qrCodeUrl:p}};a.phoneNumber&&(y.msgInfo.phone=a.phoneNumber),s==Xe.Group?(y.visibility=0,y.grid=i):(y.toId=i,y.imei=t.imei);let b=JSON.stringify(y.msgInfo);y.msgInfo=b;let m=r.encodeAES(JSON.stringify(y));if(!m)throw new ce("Failed to encrypt params");let M=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:m})});return r.resolve(M)}});var XIe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/deliveredv2`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/deliveredv2`)};return async function(a,i,s=Xe.User){if(!i)throw new ce("messages are missing or not in a valid array format.");if(Array.isArray(i)||(i=[i]),i.length===0||i.length>pD)throw new ce("messages must contain between 1 and 50 messages.");let c=i[0].idTo;if(s===Xe.Group&&!i.every(b=>b.idTo===c))throw new ce("All messages must have the same idTo for Group thread");let l=Object.assign({seen:a?1:0,data:i.map(b=>({cmi:b.cliMsgId,gmi:b.msgId,si:b.uidFrom,di:b.idTo===t.uid?"0":b.idTo,mt:b.msgType,st:b.st||b.st===0?0:-1,at:b.at||b.at===0?0:-1,cmd:b.cmd||b.cmd===0?0:-1,ts:parseInt(`${b.ts}`)||parseInt(`${b.ts}`)===0?0:-1}))},s===Xe.User?{}:{grid:c}),p=Object.assign({msgInfos:JSON.stringify(l)},s===Xe.User?{}:{imei:t.imei}),h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:h})});return r.resolve(y)}});var YIe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/sendreq`);return async function(a,i){let s={toid:i,msg:a,reqsrc:30,imei:t.imei,language:t.language,srcParams:JSON.stringify({uidTo:i})},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var QIe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/link`,{nretry:0}),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/sendlink`,{nretry:0})};return async function(a,i,s=Xe.User){var c;let l=await e.parseLink(a.link),p={msg:a.msg&&a.msg.trim()?a.msg.includes(a.link)?a.msg:a.msg+" "+a.link:a.link,href:l.data.href,src:l.data.src,title:l.data.title,desc:l.data.desc,thumb:l.data.thumb,type:2,media:JSON.stringify(l.data.media),ttl:(c=a.ttl)!==null&&c!==void 0?c:0,clientId:Date.now()};s==Xe.Group?(p.grid=i,p.imei=t.imei):(p.toId=i,p.mentionInfo="");let h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:h})});return r.resolve(y)}});var $X=ke(oM(),1),JX=ke(require("node:fs/promises"),1);var _Dt={image:"photo_original/send?",gif:"gif?",video:"asyncfile/msg?",others:"asyncfile/msg?"};function ADt(e){let t=e;return typeof t.content=="string"?t.propertyExt:t.msgType=="chat.todo"?{properties:{color:0,size:0,type:0,subType:0,ext:'{"shouldParseLinkOrContact":0}'}}:Object.assign(Object.assign({},t.content),{thumbUrl:t.content.thumb,oriUrl:t.content.href,normalUrl:t.content.href})}function SDt(e){let t=e;return t.msgType=="chat.todo"&&typeof t.content=="object"&&typeof t.content.params=="string"?JSON.parse(t.content.params).item.content:""}var o3;(function(e){e.Bold="b",e.Italic="i",e.Underline="u",e.StrikeThrough="s",e.Red="c_db342e",e.Orange="c_f27806",e.Yellow="c_f7b503",e.Green="c_15a85f",e.Small="f_13",e.Big="f_18",e.UnorderedList="lst_1",e.OrderedList="lst_2",e.Indent="ind_$"})(o3||(o3={}));var a3;(function(e){e[e.Default=0]="Default",e[e.Important=1]="Important",e[e.Urgent=2]="Urgent"})(a3||(a3={}));var ZIe=Ie()((e,t,r)=>{let o={message:{[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message`,{nretry:0}),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group`,{nretry:0})},attachment:{[Xe.User]:`${e.zpwServiceMap.file[0]}/api/message/`,[Xe.Group]:`${e.zpwServiceMap.file[0]}/api/group/`}},{sharefile:n}=t.settings.features;function a(M){return M>n.max_file}function i(M){return M>n.max_size_share_file_v3*1024*1024}function s(){return Date.now()}async function c(M){Array.isArray(M)||(M=[M]);let _=[];for(let O of M)_.push((async()=>{let S=await r.request(O.url,{method:"POST",body:O.body,headers:O.headers});return await Jm(t,S)})());return await Promise.all(_)}async function l(M,_){let O=new $X.default,S=typeof M=="string"?await JX.default.readFile(M):M.data;O.append("fileContent",S,{filename:"blob",contentType:"image/png"});let v={clientId:Date.now(),imei:t.imei},T=r.encodeAES(JSON.stringify(v));if(!T)throw new ce("Failed to encrypt message");let w=await r.request(r.makeURL(_+"upthumb?",{params:T}),{method:"POST",headers:O.getHeaders(),body:O.getBuffer()});return await Jm(t,w)}function p(M,_,O){let S=0,v=Array.isArray(O)&&M==Xe.Group?O.filter(T=>T.pos>=0&&T.uid&&T.len>0).map(T=>(S+=T.len,{pos:T.pos,uid:T.uid,len:T.len,type:T.uid=="-1"?1:0})):[];if(S>_.length)throw new ce("Invalid mentions: total mention characters exceed message length");return{mentionsFinal:v,msgFinal:_}}function h(M,_){_&&Object.assign(M,{textProperties:JSON.stringify({styles:_.map(O=>{var S;let v=Object.assign(Object.assign({},O),{indentSize:void 0,st:O.st==o3.Indent?o3.Indent.replace(/\$/g,`${(S=O.indentSize)!==null&&S!==void 0?S:1}0`):O.st});return ky(v),v}),ver:0})})}function y(M,_){(_==a3.Important||_==a3.Urgent)&&Object.assign(M,{metaData:{urgency:_}})}async function b({msg:M,styles:_,urgency:O,mentions:S,quote:v,ttl:T},w,P){if(!M||M.length==0)throw new ce("Missing message content");let C=P==Xe.Group,{mentionsFinal:R,msgFinal:N}=p(P,M,S);if(M=N,v){if(typeof v.content!="string"&&v.msgType=="webchat")throw new ce("This kind of `webchat` quote type is not available");if(v.msgType=="group.poll")throw new ce("The `group.poll` quote type is not available")}let W=R.length>0&&C,k=v?{toid:C?void 0:w,grid:C?w:void 0,message:M,clientId:Date.now(),mentionInfo:W?JSON.stringify(R):void 0,qmsgOwner:v.uidFrom,qmsgId:v.msgId,qmsgCliId:v.cliMsgId,qmsgType:v_e(v.msgType),qmsgTs:v.ts,qmsg:typeof v.content=="string"?v.content:SDt(v),imei:C?void 0:t.imei,visibility:C?0:void 0,qmsgAttach:C?JSON.stringify(ADt(v)):void 0,qmsgTTL:v.ttl,ttl:T??0}:{message:M,clientId:Date.now(),mentionInfo:W?JSON.stringify(R):void 0,imei:C?void 0:t.imei,ttl:T??0,visibility:C?0:void 0,toid:C?void 0:w,grid:C?w:void 0};h(k,_),y(k,O),ky(k);let K=r.encodeAES(JSON.stringify(k));if(!K)throw new ce("Failed to encrypt message");let U=new URL(o.message[P]);return v?U.pathname=U.pathname+"/quote":U.pathname=U.pathname+"/"+(C?k.mentionInfo?"mention":"sendmsg":"sms"),{url:U.toString(),body:new URLSearchParams({params:K})}}async function m({msg:M,attachments:_,mentions:O,quote:S,ttl:v,urgency:T},w,P){if(!_)throw new ce("Missing attachments");if(Array.isArray(_)||(_=[_]),_.length==0)throw new ce("Missing attachments");let C=_[0],N=xy(typeof C=="string"?C:C.filename),W=_.length==1,k=P==Xe.Group,K=W&&["jpg","jpeg","png","webp"].includes(N),U=_.filter(xe=>xy(typeof xe=="string"?xe:xe.filename)=="gif");_=_.filter(xe=>xy(typeof xe=="string"?xe:xe.filename)!="gif");let q=_.length==0?[]:await e.uploadAttachment(_,w,P),H=[],ee=0,Ae=s().toString(),{mentionsFinal:ue,msgFinal:se}=p(P,M,O);M=se;let de=ue.length>0&&k&&_.length==1,Oe=_.length>1,Te=Date.now();for(let xe of q){let je;switch(xe.fileType){case"image":{je={fileType:xe.fileType,params:{photoId:xe.photoId,clientId:(Te++).toString(),desc:M,width:xe.width,height:xe.height,toid:k?void 0:String(w),grid:k?String(w):void 0,rawUrl:xe.normalUrl,hdUrl:xe.hdUrl,thumbUrl:xe.thumbUrl,oriUrl:k?xe.normalUrl:void 0,normalUrl:k?void 0:xe.normalUrl,hdSize:String(xe.totalSize),zsource:-1,ttl:v??0,jcp:'{"convertible":"jxl"}',groupLayoutId:Oe?Ae:void 0,isGroupLayout:Oe?1:void 0,idInGroup:Oe?ee++:void 0,totalItemInGroup:Oe?q.length:void 0,extMsgProp:Oe?`{"groupMediaMsg":{"groupLayoutId":"${Ae}"}}`:void 0,mentionInfo:de&&K&&!S?JSON.stringify(ue):void 0},body:new URLSearchParams};break}case"video":{je={fileType:xe.fileType,params:{fileId:xe.fileId,checksum:xe.checksum,checksumSha:"",extention:xy(xe.fileName),totalSize:xe.totalSize,fileName:xe.fileName,clientId:xe.clientFileId,fType:1,fileCount:0,fdata:"{}",toid:k?void 0:String(w),grid:k?String(w):void 0,fileUrl:xe.fileUrl,zsource:-1,ttl:v??0},body:new URLSearchParams};break}case"others":{je={fileType:xe.fileType,params:{fileId:xe.fileId,checksum:xe.checksum,checksumSha:"",extention:xy(xe.fileName),totalSize:xe.totalSize,fileName:xe.fileName,clientId:xe.clientFileId,fType:1,fileCount:0,fdata:"{}",toid:k?void 0:String(w),grid:k?String(w):void 0,fileUrl:xe.fileUrl,zsource:-1,ttl:v??0},body:new URLSearchParams};break}}y(je.params,T),ky(je.params);let Z=r.encodeAES(JSON.stringify(je.params));if(!Z)throw new ce("Failed to encrypt message");je.body.append("params",Z),H.push(je)}for(let xe of U){let je=typeof xe=="string",Z=je?await T_e(t,xe):Object.assign(Object.assign({},xe.metadata),{fileName:xe.filename});if(i(Z.totalSize))throw new ce(`File ${je?Iw(xe):xe.filename} size exceed maximum size of ${n.max_size_share_file_v3}MB`);let pe=await l(xe,o.attachment[Xe.User]),he=new $X.default;he.append("chunkContent",je?await JX.default.readFile(xe):xe.data,{filename:je?Iw(xe):xe.filename,contentType:"application/octet-stream"});let V={clientId:Date.now().toString(),fileName:Z.fileName,totalSize:Z.totalSize,width:Z.width,height:Z.height,msg:M,type:1,ttl:v??0,visibility:k?0:void 0,toid:k?void 0:w,grid:k?w:void 0,thumb:pe.url,checksum:(await hD(xe,Z.totalSize)).data,totalChunk:1,chunkId:1};y(V,T),ky(V);let re=r.encodeAES(JSON.stringify(V));if(!re)throw new ce("Failed to encrypt message");H.push({query:{params:re,type:"1"},body:he.getBuffer(),headers:he.getHeaders(),fileType:"gif"})}let _e=[];for(let xe of H)_e.push({url:r.makeURL(o.attachment[P]+_Dt[xe.fileType],Object.assign({nretry:"0"},xe.query||{})),body:xe.body,headers:xe.fileType=="gif"?xe.headers:{}});return _e}return async function(_,O,S=Xe.User){if(!_)throw new ce("Missing message content");if(!O)throw new ce("Missing threadId");typeof _=="string"&&(_={msg:_});let{msg:v,attachments:T,mentions:w}=_,{quote:P,ttl:C,styles:R,urgency:N}=_;if(T&&!Array.isArray(T)&&(T=[T]),!v&&(!T||T&&T.length==0))throw new ce("Missing message content");if(T&&a(T.length))throw new ce("Exceed maximum file of "+n.max_file);let W={message:null,attachment:[]};if(T&&T.length>0){let k=xy(typeof T[0]=="string"?T[0]:T[0].filename);(!(T.length==1&&["jpg","jpeg","png","webp"].includes(k))&&v.length>0||v.length>0&&P)&&(await b(_,O,S).then(async H=>{W.message=(await c(H))[0]}),v="",w=void 0);let q=await m({msg:v,mentions:w,attachments:T,quote:P,ttl:C,styles:R,urgency:N},O,S);W.attachment=await c(q),v=""}if(v.length>0){let k=await b(_,O,S);W.message=(await c(k))[0]}return W}});var Kw;(function(e){e[e.Sensitive=1]="Sensitive",e[e.Annoy=2]="Annoy",e[e.Fraud=3]="Fraud",e[e.Other=0]="Other"})(Kw||(Kw={}));var ewe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.profile[0]}/api/report/abuse-v2`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/reportabuse`)};return async function(a,i,s=Xe.User){let c=s==Xe.User?{idTo:i,objId:"person.profile",reason:a.reason.toString(),content:a.reason==Kw.Other?a.content:void 0}:{uidTo:i,type:14,reason:a.reason,content:a.reason==Kw.Other?a.content:"",imei:t.imei};ky(c);let l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var twe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/seenv2`,{nretry:0}),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/seenv2`,{nretry:0})};return async function(a,i=Xe.User){if(!a)throw new ce("messages are missing or not in a valid array format.");if(Array.isArray(a)||(a=[a]),a.length===0||a.length>pD)throw new ce("messages must contain between 1 and 50 messages.");let s=i===Xe.Group,c=s?a[0].idTo:a[0].uidFrom,l={data:a.map(b=>{if((s?b.idTo:b.uidFrom)!==c)throw new ce("All messages must belong to the same thread.");return{cmi:b.cliMsgId,gmi:b.msgId,si:b.uidFrom,di:b.idTo===t.uid?"0":b.idTo,mt:b.msgType,st:b.st||b.st===0?0:-1,at:b.at||b.at===0?0:-1,cmd:b.cmd||b.cmd===0?0:-1,ts:parseInt(`${b.ts}`)||parseInt(`${b.ts}`)===0?0:-1}}),[s?"grid":"senderId"]:c},p=Object.assign({msgInfos:JSON.stringify(l)},s?{imei:t.imei}:{}),h=r.encodeAES(JSON.stringify(p));if(!h)throw new ce("Failed to encrypt params");let y=await r.request(o[i],{method:"POST",body:new URLSearchParams({params:h})});return r.resolve(y)}});var nwe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/sticker`,{nretry:"0"}),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/sticker`,{nretry:"0"})};return async function(a,i,s=Xe.User){if(!a)throw new ce("Missing sticker");if(!i)throw new ce("Missing threadId");if(!a.id)throw new ce("Missing sticker id");if(a.cateId===void 0||a.cateId===null)throw new ce("Missing sticker cateId");if(!a.type)throw new ce("Missing sticker type");let c=s===Xe.Group,l={stickerId:a.id,cateId:a.cateId,type:a.type,clientId:Date.now(),imei:t.imei,zsource:101,toid:c?void 0:i,grid:c?i:void 0};ky(l);let p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt message");let h=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h)}});var iwe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/typing`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/typing`)};return async function(a,i=Xe.User,s=$6.User){if(!a)throw new ce("Missing threadId");let c=Object.assign(Object.assign({[i===Xe.User?"toid":"grid"]:a},i===Xe.User?{destType:s}:{}),{imei:t.imei}),l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o[i],{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var rwe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/message/forward`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/group/forward`)};return async function(a,i,s=Xe.User){var c,l,p,h,y,b,m,M,_,O;let S=0,v=Date.now();try{let C=await r.request(a.videoUrl,{method:"HEAD"},!0);C.ok&&(S=parseInt(C.headers.get("content-length")||"0"))}catch(C){throw new ce(`Unable to get video content: ${C instanceof Error?C.message:String(C)}`)}let T=s===Xe.User?{toId:i,clientId:String(v),ttl:(c=a.ttl)!==null&&c!==void 0?c:0,zsource:704,msgType:5,msgInfo:JSON.stringify({videoUrl:a.videoUrl,thumbUrl:a.thumbnailUrl,duration:(l=a.duration)!==null&&l!==void 0?l:0,width:(p=a.width)!==null&&p!==void 0?p:1280,height:(h=a.height)!==null&&h!==void 0?h:720,fileSize:S,properties:{color:-1,size:-1,type:1003,subType:0,ext:{sSrcType:-1,sSrcStr:"",msg_warning_type:0}},title:(y=a.msg)!==null&&y!==void 0?y:""}),imei:t.imei}:{grid:i,visibility:0,clientId:String(v),ttl:(b=a.ttl)!==null&&b!==void 0?b:0,zsource:704,msgType:5,msgInfo:JSON.stringify({videoUrl:a.videoUrl,thumbUrl:a.thumbnailUrl,duration:(m=a.duration)!==null&&m!==void 0?m:0,width:(M=a.width)!==null&&M!==void 0?M:1280,height:(_=a.height)!==null&&_!==void 0?_:720,fileSize:S,properties:{color:-1,size:-1,type:1003,subType:0,ext:{sSrcType:-1,sSrcStr:"",msg_warning_type:0}},title:(O=a.msg)!==null&&O!==void 0?O:""}),imei:t.imei};if(s!==Xe.User&&s!==Xe.Group)throw new ce("Thread type is invalid");let w=r.encodeAES(JSON.stringify(T));if(!w)throw new ce("Failed to encrypt params");let P=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:w})});return r.resolve(P)}});var owe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/message/forward`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.file[0]}/api/group/forward`)};return async function(a,i,s=Xe.User){var c,l;let p=null,h=Date.now().toString();try{let M=await r.request(a.voiceUrl,{method:"HEAD"},!0);M.ok&&(p=parseInt(M.headers.get("content-length")||"0"))}catch(M){throw new ce(`Unable to get voice content: ${M instanceof Error?M.message:String(M)}`)}let y=s===Xe.User?{toId:i,ttl:(c=a.ttl)!==null&&c!==void 0?c:0,zsource:-1,msgType:3,clientId:h,msgInfo:JSON.stringify({voiceUrl:a.voiceUrl,m4aUrl:a.voiceUrl,fileSize:p??0}),imei:t.imei}:{grid:i,visibility:0,ttl:(l=a.ttl)!==null&&l!==void 0?l:0,zsource:-1,msgType:3,clientId:h,msgInfo:JSON.stringify({voiceUrl:a.voiceUrl,m4aUrl:a.voiceUrl,fileSize:p??0}),imei:t.imei};if(s!==Xe.User&&s!==Xe.Group)throw new ce("Thread type is invalid");let b=r.encodeAES(JSON.stringify(y));if(!b)throw new ce("Failed to encrypt params");let m=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:b})});return r.resolve(m)}});var awe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/hiddenconvers/add-remove`);return async function(a,i,s=Xe.User){if(i=Array.isArray(i)?i:[i],i.length===0)throw new ce("threadId is required");let c=s===Xe.Group?1:0,l={[a?"add_threads":"del_threads"]:JSON.stringify(i.map(y=>({thread_id:y,is_group:c}))),[a?"del_threads":"add_threads"]:"[]",imei:t.imei},p=r.encodeAES(JSON.stringify(l));if(!p)throw new ce("Failed to encrypt params");let h=await r.request(o,{method:"POST",body:new URLSearchParams({params:p})});return r.resolve(h)}});var s3;(function(e){e[e.ONE_HOUR=3600]="ONE_HOUR",e[e.FOUR_HOURS=14400]="FOUR_HOURS",e[e.FOREVER=-1]="FOREVER",e.UNTIL_8AM="until8AM"})(s3||(s3={}));var Hw;(function(e){e[e.MUTE=1]="MUTE",e[e.UNMUTE=3]="UNMUTE"})(Hw||(Hw={}));var swe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/setmute`);return async function(a={},i,s=Xe.User){let{duration:c=s3.FOREVER,action:l=Hw.MUTE}=a,p;if(l===Hw.UNMUTE)p=-1;else if(c===s3.FOREVER)p=-1;else if(c===s3.UNTIL_8AM){let m=new Date,M=new Date(m);M.setHours(8,0,0,0),m.getHours()>=8&&M.setDate(M.getDate()+1),p=Math.floor((M.getTime()-m.getTime())/1e3)}else p=c;let h={toid:i,duration:p,action:l,startTime:Math.floor(Date.now()/1e3),muteType:s===Xe.User?1:2,imei:t.imei},y=r.encodeAES(JSON.stringify(h));if(!y)throw new ce("Failed to encrypt params");let b=await r.request(o,{method:"POST",body:new URLSearchParams({params:y})});return r.resolve(b)}});var cwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/pinconvers/updatev2`);return async function(a,i,s=Xe.User){typeof i=="string"&&(i=[i]);let c={actionType:a?1:2,conversations:s==Xe.Group?i.map(h=>`g${h}`):i.map(h=>`u${h}`)},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o,{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var lwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/share`);return async function(a){let i={poll_id:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var uwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/unblock`);return async function(a){let i={fid:a,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var pwe=Ie()((e,t,r)=>{let o={[Xe.User]:r.makeURL(`${e.zpwServiceMap.chat[0]}/api/message/undo`),[Xe.Group]:r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/undomsg`)};return async function(a,i,s=Xe.User){let c={msgId:a.msgId,clientId:Date.now(),cliMsgIdUndo:a.cliMsgId};s==Xe.Group?(c.grid=i,c.visibility=0,c.imei=t.imei):c.toid=i;let l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt message");let p=await r.request(o[s],{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var fwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.friend[0]}/api/friend/undo`);return async function(a){let i={fid:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var dwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/ping`),n=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/deactive`);return async function(i){let s={status:i?1:0,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=i?o:n,p=await r.request(r.makeURL(l,{params:c}),{method:"GET"});return r.resolve(p)}});var hwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.label[0]}/api/archivedchat/update`);return async function(a,i){Array.isArray(i)||(i=[i]);let s={actionType:a?0:1,ids:i,imei:t.imei,version:Date.now()},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt message");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var XX;(function(e){e[e.NO_DELETE=0]="NO_DELETE",e[e.ONE_DAY=864e5]="ONE_DAY",e[e.SEVEN_DAYS=6048e5]="SEVEN_DAYS",e[e.FOURTEEN_DAYS=12096e5]="FOURTEEN_DAYS"})(XX||(XX={}));var ywe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/conv/autodelete/updateConvers`);return async function(a,i,s=Xe.User){let c={threadId:i,isGroup:s===Xe.Group?1:0,ttl:a,clientLang:t.language},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o,{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var bwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.auto_reply[0]}/api/autoreply/update`);return async function(a){let i=Array.isArray(a.uids)?a.uids:[a.uids],s=a.scope===2||a.scope===3?i:[],c={cliLang:t.language,id:a.id,enable:a.isEnable,content:a.content,startTime:a.startTime,endTime:a.endTime,recurrence:["RRULE:FREQ=DAILY;"],scope:a.scope,uids:s},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(o,{method:"POST",body:new URLSearchParams({params:l})});return r.resolve(p)}});var mwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/update`);return async function(a){let i={catalog_id:a.catalogId,catalog_name:a.catalogName,catalog_photo:""},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var gwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/setting/update`);return async function(a,i){let s={blockName:a.blockName?1:0,signAdminMsg:a.signAdminMsg?1:0,setTopicOnly:a.setTopicOnly?1:0,enableMsgHistory:a.enableMsgHistory?1:0,joinAppr:a.joinAppr?1:0,lockCreatePost:a.lockCreatePost?1:0,lockCreatePoll:a.lockCreatePoll?1:0,lockSendMsg:a.lockSendMsg?1:0,lockViewMember:a.lockViewMember?1:0,bannFeature:0,dirtyMedia:0,banDuration:0,blocked_members:[],grid:i,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Owe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.conversation[0]}/api/hiddenconvers/update-pin`),n=/^\d{4}$/;return async function(i){if(!n.test(i))throw new ce("Pin must be a 4-digit number between 0000-9999");let c={new_pin:x_e(i),imei:t.imei},l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p)}});var Mwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.label[0]}/api/convlabel/update`);return async function(a){let i={labelData:JSON.stringify(a.labelData),version:a.version,imei:t.imei},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt message");let c=await r.request(o,{method:"POST",body:new URLSearchParams({params:s})}),l=await r.resolve(c);return{labelData:JSON.parse(l.labelData),version:l.version,lastUpdateTime:l.lastUpdateTime}}});var YD;(function(e){e.VI="VI",e.EN="EN"})(YD||(YD={}));var _we=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/updatelang`);return async function(a=YD.VI){let i={language:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var Awe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.catalog[0]}/api/prodcatalog/product/update`);return async function(a){let i=a.product_photos||[];if(a.files&&a.files.length==0){if(a.files.length>5)throw new ce("Maximum 5 media files are allowed");for(let p of a.files){let h=await e.uploadProductPhoto({file:p}),y=h.normalUrl||h.hdUrl;i.push(y)}}if(i.length>5)throw new ce("Maximum 5 media files are allowed");let s={product_id:a.productId,product_name:a.productName,price:a.price,description:a.description,product_photos:i,catalog_id:a.catalogId,currency_unit:"\u20AB",create_time:a.createTime},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(o,{method:"POST",body:new URLSearchParams({params:c})});return r.resolve(l)}});var Swe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/update`);return async function(a){var i,s,c,l,p;let h={profile:JSON.stringify({name:a.profile.name,dob:a.profile.dob,gender:a.profile.gender}),biz:JSON.stringify({desc:(i=a.biz)===null||i===void 0?void 0:i.description,cate:(s=a.biz)===null||s===void 0?void 0:s.cate,addr:(c=a.biz)===null||c===void 0?void 0:c.address,website:(l=a.biz)===null||l===void 0?void 0:l.website,email:(p=a.biz)===null||p===void 0?void 0:p.email}),language:t.language},y=r.encodeAES(JSON.stringify(h));if(!y)throw new ce("Failed to encrypt params");let b=await r.request(o,{method:"POST",body:new URLSearchParams({params:y})});return r.resolve(b)}});var Ewe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.profile[0]}/api/social/profile/status`);return async function(a){let i={status:a},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"POST",body:new URLSearchParams({params:s})});return r.resolve(c)}});var Twe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.quick_message[0]}/api/quickmessage/update`);return async function(a,i){let s=a.media?1:0,c={itemId:i,keyword:a.keyword,message:{title:a.title,params:""},type:s};if(s===1){if(!a.media)throw new ce("Media is required");let h=await e.uploadProductPhoto({file:a.media}),y=h.photoId,b=h.thumbUrl,m=h.normalUrl,M=h.hdUrl;c.media={items:[{type:0,photoId:y,title:"",width:"",height:"",previewThumb:b,rawUrl:m||M,thumbUrl:b,normalUrl:m||M,hdUrl:M||m}]}}let l=r.encodeAES(JSON.stringify(c));if(!l)throw new ce("Failed to encrypt params");let p=await r.request(r.makeURL(o,{params:l}),{method:"GET"});return r.resolve(p)}});var YX;(function(e){e.ViewBirthday="view_birthday",e.ShowOnlineStatus="show_online_status",e.DisplaySeenStatus="display_seen_status",e.ReceiveMessage="receive_message",e.AcceptCall="accept_stranger_call",e.AddFriendViaPhone="add_friend_via_phone",e.AddFriendViaQR="add_friend_via_qr",e.AddFriendViaGroup="add_friend_via_group",e.AddFriendViaContact="add_friend_via_contact",e.DisplayOnRecommendFriend="display_on_recommend_friend",e.ArchivedChat="archivedChatStatus",e.QuickMessage="quickMessageStatus"})(YX||(YX={}));var vwe=Ie()((e,t,r)=>{let o=r.makeURL("https://wpa.chat.zalo.me/api/setting/update");return async function(a,i){let s={[a]:i},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Iwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/group/upgrade/community`);return async function(a){let i={grId:a,language:t.language},s=r.encodeAES(JSON.stringify(i));if(!s)throw new ce("Failed to encrypt params");let c=await r.request(r.makeURL(o,{params:s}),{method:"GET"});return r.resolve(c)}});var wwe=ke(oM(),1),QX=ke(require("node:fs"),1);var EDt={image:"photo_original/upload",video:"asyncfile/upload",others:"asyncfile/upload"},Pwe=Ie()((e,t,r)=>{let o=`${e.zpwServiceMap.file[0]}/api`,{sharefile:n}=t.settings.features;function a(c){return c>n.max_file}function i(c){return c>n.max_size_share_file_v3*1024*1024}function s(c){return n.restricted_ext_file.indexOf(c)==-1}return async function(l,p,h=Xe.User){if(!l)throw new ce("Missing sources");if(Array.isArray(l)||(l=[l]),l.length==0)throw new ce("Missing sources");if(a(l.length))throw new ce("Exceed maximum file of "+n.max_file);if(!p)throw new ce("Missing threadId");let y=t.settings.features.sharefile.chunk_size_file,b=h==Xe.Group,m=[],M=`${o}/${b?"group":"message"}/`,_=b?"11":"2",O=Date.now();for(let T of l){let w=typeof T=="string",P=typeof T=="object"&&T.data instanceof Buffer;if(!w&&!P)throw new ce("Invalid source type");if(!w&&!T.filename)throw new ce("Missing filename");if(w&&!QX.default.existsSync(T))throw new ce("File not found");let C=xy(w?T:T.filename).toLowerCase(),R=w?Iw(T):T.filename;if(s(C)==!1)throw new ce(`File extension "${C}" is not allowed`);let N={filePath:w?T:T.filename,chunkContent:[],params:{},source:T};switch(b?N.params.grid=p:N.params.toid=p,C){case"jpg":case"jpeg":case"png":case"webp":{let k=w?await $m(t,T):Object.assign(Object.assign({},T.metadata),{fileName:R});if(i(k.totalSize))throw new ce(`File ${R} size exceed maximum size of ${n.max_size_share_file_v3}MB`);N.fileData=k,N.fileType="image",N.params.totalChunk=Math.ceil(N.fileData.totalSize/y),N.params.fileName=R,N.params.clientId=O++,N.params.totalSize=k.totalSize,N.params.imei=t.imei,N.params.isE2EE=0,N.params.jxl=0,N.params.chunkId=1;break}case"mp4":{let k=w?await LJ(T):T.metadata.totalSize;if(i(k))throw new ce(`File ${R} size exceed maximum size of ${n.max_size_share_file_v3}MB`);N.fileType="video",N.fileData={fileName:R,totalSize:k},N.params.totalChunk=Math.ceil(N.fileData.totalSize/y),N.params.fileName=R,N.params.clientId=O++,N.params.totalSize=k,N.params.imei=t.imei,N.params.isE2EE=0,N.params.jxl=0,N.params.chunkId=1;break}default:{let k=w?await LJ(T):T.metadata.totalSize;if(i(k))throw new ce(`File ${R} size exceed maximum size of ${n.max_size_share_file_v3}MB`);N.fileType="others",N.fileData={fileName:R,totalSize:k},N.params.totalChunk=Math.ceil(N.fileData.totalSize/y),N.params.fileName=R,N.params.clientId=O++,N.params.totalSize=k,N.params.imei=t.imei,N.params.isE2EE=0,N.params.jxl=0,N.params.chunkId=1;break}}let W=w?await QX.default.promises.readFile(T):T.data;for(let k=0;k<N.params.totalChunk;k++){let K=new wwe.default,U=W.subarray(k*y,(k+1)*y);K.append("chunkContent",U,{filename:R,contentType:"application/octet-stream"}),N.chunkContent[k]=K}m.push(N)}let S=[],v=[];for(let T=0;T<m.length;T++){let w=m[T];for(let P=0;P<w.params.totalChunk;P++){let C=r.encodeAES(JSON.stringify(w.params));if(!C)throw new ce("Failed to encrypt message");S.push(r.request(r.makeURL(M+EDt[w.fileType],{type:_,params:C}),{method:"POST",headers:w.chunkContent[P].getHeaders(),body:w.chunkContent[P].getBuffer()}).then(async R=>{let N=await Jm(t,R);N&&N.fileId!="-1"&&N.photoId!="-1"&&await new Promise(W=>{if(w.fileType=="video"||w.fileType=="others"){let k=async K=>{let U=Object.assign(Object.assign(Object.assign({fileType:w.fileType},N),K),{totalSize:w.fileData.totalSize,fileName:w.fileData.fileName,checksum:(await hD(w.source,w.fileData.totalSize)).data});v[T]=U,W()};t.uploadCallbacks.set(N.fileId.toString(),k)}if(w.fileType=="image"){let k={fileType:"image",width:w.fileData.width,height:w.fileData.height,totalSize:w.fileData.totalSize,hdSize:w.fileData.totalSize,finished:N.finished,normalUrl:N.normalUrl,hdUrl:N.hdUrl,thumbUrl:N.thumbUrl,chunkId:N.chunkId,photoId:N.photoId,clientFileId:N.clientFileId};v[T]=k,W()}})})),w.params.chunkId++}}return await Promise.all(S),v}});var zwe=ke(require("node:fs"),1),Rwe=ke(oM(),1);var xwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.file[0]}/api/product/upload/photo`);return async function(a){let i=typeof a.file=="string",c=(i?await $m(t,a.file):a.file.metadata).totalSize||0,l=i?await zwe.default.promises.readFile(a.file):a.file.data,p=new Rwe.default;p.append("chunkContent",l,{filename:"undefined",contentType:"application/octet-stream"});let h={totalChunk:1,fileName:`Base64_Img_Picker_${Date.now()}.jpg`,clientId:Date.now(),totalSize:c,imei:t.imei,chunkId:1,toid:t.loginInfo.send2me_id,featureId:1},y=r.encodeAES(JSON.stringify(h));if(!y)throw new ce("Failed to encrypt params");let b=await r.request(r.makeURL(o,{params:y}),{method:"POST",headers:p.getHeaders(),body:p.getBuffer()});return r.resolve(b)}});var kwe=Ie()((e,t,r)=>{let o=r.makeURL(`${e.zpwServiceMap.group[0]}/api/poll/vote`);return async function(a,i){Array.isArray(i)||(i=[i]);let s={poll_id:a,option_ids:i,imei:t.imei},c=r.encodeAES(JSON.stringify(s));if(!c)throw new ce("Failed to encrypt params");let l=await r.request(r.makeURL(o,{params:c}),{method:"GET"});return r.resolve(l)}});var Cwe=Ie()((e,t,r)=>function(n,a){Object.defineProperty(e,n,{value:function(i){return a({ctx:t,utils:r,props:i})},writable:!1,enumerable:!1,configurable:!1})});var Vw=class{constructor(t,r,o){this.zpwServiceMap=r,this.listener=new UD(t,o),this.acceptFriendRequest=L3e(t,this),this.addGroupBlockedMember=q3e(t,this),this.addGroupDeputy=B3e(t,this),this.addPollOptions=U3e(t,this),this.addQuickMessage=W3e(t,this),this.addReaction=F3e(t,this),this.addUnreadMark=j3e(t,this),this.addUserToGroup=G3e(t,this),this.blockUser=K3e(t,this),this.blockViewFeed=H3e(t,this),this.changeAccountAvatar=QTe(t,this),this.changeFriendAlias=ZTe(t,this),this.changeGroupAvatar=nve(t,this),this.changeGroupName=ive(t,this),this.changeGroupOwner=rve(t,this),this.createAutoReply=ove(t,this),this.createCatalog=ave(t,this),this.createGroup=sve(t,this),this.createNote=cve(t,this),this.createPoll=lve(t,this),this.createProductCatalog=uve(t,this),this.createReminder=pve(t,this),this.decryptGids=fve(t,this),this.deleteAutoReply=dve(t,this),this.deleteAvatar=hve(t,this),this.deleteCatalog=yve(t,this),this.deleteChat=bve(t,this),this.deleteGroupInviteBox=mve(t,this),this.deleteMessage=gve(t,this),this.deleteProductCatalog=Ove(t,this),this.disableGroupLink=Mve(t,this),this.disperseGroup=_ve(t,this),this.downloadTransferSync=Ave(t,this),this.editNote=Sve(t,this),this.editReminder=Eve(t,this),this.enableGroupLink=Tve(t,this),this.fetchAccountInfo=vve(t,this),this.findUser=Ive(t,this),this.findUserByUsername=wve(t,this),this.forwardMessage=Pve(t,this),this.getAliasList=zve(t,this),this.getAllFriends=Rve(t,this),this.getAllGroups=xve(t,this),this.getArchivedChatList=kve(t,this),this.getAutoDeleteChat=Cve(t,this),this.getAutoReplyList=Nve(t,this),this.getAvatarList=Dve(t,this),this.getAvatarUrlProfile=Lve(t,this),this.getBizAccount=qve(t,this),this.getCatalogList=Bve(t,this),this.getCloseFriends=Uve(t,this),this.getContext=Wve(t,this),this.getCookie=Fve(t,this),this.getFriendBoardList=jve(t,this),this.getFriendOnlines=Gve(t,this),this.getFriendRecommendations=Kve(t,this),this.getFriendRequestStatus=Hve(t,this),this.getFullAvatar=Vve(t,this),this.getGroupBlockedMember=$ve(t,this),this.getGroupChatHistory=Jve(t,this),this.getGroupInfo=Xve(t,this),this.getGroupInviteBoxInfo=Yve(t,this),this.getGroupInviteBoxList=Qve(t,this),this.getGroupLinkDetail=Zve(t,this),this.getGroupLinkInfo=eIe(t,this),this.getGroupMembersInfo=tIe(t,this),this.getHiddenConversations=nIe(t,this),this.getLabels=iIe(t,this),this.getListBoard=rIe(t,this),this.getListReminder=oIe(t,this),this.getMultiUsersByPhones=aIe(t,this),this.getMute=sIe(t,this),this.getOwnId=cIe(t,this),this.getPendingGroupMembers=lIe(t,this),this.getPinConversations=uIe(t,this),this.getPollDetail=pIe(t,this),this.getProductCatalogList=fIe(t,this),this.getQR=dIe(t,this),this.getQuickMessageList=hIe(t,this),this.getRelatedFriendGroup=yIe(t,this),this.getReminder=bIe(t,this),this.getReminderResponses=mIe(t,this),this.getSentFriendRequest=gIe(t,this),this.getSettings=OIe(t,this),this.getStickerCategoryDetail=MIe(t,this),this.getStickers=_Ie(t,this),this.getStickersDetail=AIe(t,this),this.getUnreadMark=SIe(t,this),this.getUserInfo=EIe(t,this),this.inviteUserToGroups=TIe(t,this),this.joinGroupInviteBox=vIe(t,this),this.joinGroupLink=IIe(t,this),this.keepAlive=wIe(t,this),this.lastOnline=PIe(t,this),this.leaveGroup=zIe(t,this),this.lockPoll=RIe(t,this),this.parseLink=xIe(t,this),this.preloadConversations=kIe(t,this),this.rejectFriendRequest=CIe(t,this),this.removeFriend=NIe(t,this),this.removeFriendAlias=DIe(t,this),this.removeGroupBlockedMember=LIe(t,this),this.removeGroupDeputy=qIe(t,this),this.removeQuickMessage=BIe(t,this),this.removeReminder=UIe(t,this),this.removeUnreadMark=WIe(t,this),this.removeUserFromGroup=FIe(t,this),this.requestSyncFromPhone=jIe(t,this),this.resetHiddenConversPin=GIe(t,this),this.reuseAvatar=KIe(t,this),this.reviewPendingMemberRequest=HIe(t,this),this.searchSticker=VIe(t,this),this.sendBankCard=$Ie(t,this),this.sendCard=JIe(t,this),this.sendDeliveredEvent=XIe(t,this),this.sendFriendRequest=YIe(t,this),this.sendLink=QIe(t,this),this.sendMessage=ZIe(t,this),this.sendReport=ewe(t,this),this.sendSeenEvent=twe(t,this),this.sendSticker=nwe(t,this),this.sendTypingEvent=iwe(t,this),this.sendVideo=rwe(t,this),this.sendVoice=owe(t,this),this.setHiddenConversations=awe(t,this),this.setMute=swe(t,this),this.setPinnedConversations=cwe(t,this),this.sharePoll=lwe(t,this),this.unblockUser=uwe(t,this),this.undo=pwe(t,this),this.undoFriendRequest=fwe(t,this),this.updateActiveStatus=dwe(t,this),this.updateArchivedChatList=hwe(t,this),this.updateAutoDeleteChat=ywe(t,this),this.updateAutoReply=bwe(t,this),this.updateCatalog=mwe(t,this),this.updateGroupSettings=gwe(t,this),this.updateHiddenConversPin=Owe(t,this),this.updateLabels=Mwe(t,this),this.updateLang=_we(t,this),this.updateProductCatalog=Awe(t,this),this.updateProfile=Swe(t,this),this.updateProfileBio=Ewe(t,this),this.updateQuickMessage=Twe(t,this),this.updateSettings=vwe(t,this),this.upgradeGroupToCommunity=Iwe(t,this),this.uploadAttachment=Pwe(t,this),this.uploadProductPhoto=xwe(t,this),this.votePoll=kwe(t,this),this.custom=Cwe(t,this)}};var $w=class{constructor(t={}){this.options=t,this.enableEncryptParam=!0}parseCookies(t){let r=Array.isArray(t)?t:t.cookies;r.forEach((n,a)=>{typeof n.domain=="string"&&n.domain.startsWith(".")&&(r[a].domain=n.domain.slice(1))});let o=new ZX.default.CookieJar;for(let n of r)try{let a=ZX.default.Cookie.fromJSON(Object.assign(Object.assign({},n),{key:n.key||n.name}));if(a){let i=a.domain||"chat.zalo.me",s=`https://${i.startsWith(".")?i.slice(1):i}`;o.setCookieSync(a,s)}}catch(a){ir({options:{logging:this.options.logging}}).error("Failed to set cookie:",a)}return o}validateParams(t){if(!t.imei||!t.cookie||!t.userAgent)throw new ce("Missing required params")}async login(t){let r=RJ(this.options.apiType,this.options.apiVersion);return Object.assign(r.options,this.options),this.loginCookie(r,t)}async loginCookie(t,r){await RSe(t),this.validateParams(r),t.imei=r.imei,t.cookie=this.parseCookies(r.cookie),t.userAgent=r.userAgent,t.language=r.language||"vi";let o=await q_e(t,this.enableEncryptParam),n=await B_e(t,this.enableEncryptParam),a=o?.data;if(!o||!a||!n)throw new ce("\u0110\u0103ng nh\u1EADp th\u1EA5t b\u1EA1i");if(t.secretKey=a.zpw_enk,t.uid=a.uid,t.settings=n.setttings||n.settings,t.extraVer=n.extra_ver,t.loginInfo=a,!uD(t))throw new ce("Kh\u1EDFi t\u1EA1o ng\u1EEF c\u1EA3nh th\u1EA5t b\u1EA1i.");return ir(t).info("Logged in as",a.uid),new Vw(t,a.zpw_service_map_v3,a.zpw_ws)}async loginQR(t,r){t||(t={}),t.userAgent||(t.userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"),t.language||(t.language="vi");let o=RJ(this.options.apiType,this.options.apiVersion);Object.assign(o.options,this.options);let n=await qJ(o,t,r);if(!n)throw new ce("Unable to login with QRCode");let a=R_e(t.userAgent);return r&&r({type:dd.GotLoginInfo,data:{cookie:n.cookies,imei:a,userAgent:t.userAgent},actions:null}),this.loginCookie(o,{cookie:n.cookies,imei:a,userAgent:t.userAgent,language:t.language})}};var Sze=ke(hL()),Eze=ke(bL()),Tze=ke(ML());var hze=ke(require("node:http"),1),yze=ke(require("node:https"),1),mM=ke(require("node:zlib"),1),d0=ke(require("node:stream"),1),rP=require("node:buffer");function Xqt(e){if(!/^data:/i.test(e))throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');e=e.replace(/\r?\n/g,"");let t=e.indexOf(",");if(t===-1||t<=4)throw new TypeError("malformed data: URI");let r=e.substring(5,t).split(";"),o="",n=!1,a=r[0]||"text/plain",i=a;for(let p=1;p<r.length;p++)r[p]==="base64"?n=!0:r[p]&&(i+=`;${r[p]}`,r[p].indexOf("charset=")===0&&(o=r[p].substring(8)));!r[0]&&!o.length&&(i+=";charset=US-ASCII",o="US-ASCII");let s=n?"base64":"ascii",c=unescape(e.substring(t+1)),l=Buffer.from(c,s);return l.type=a,l.typeFull=i,l.charset=o,l}var LPe=Xqt;var M1=ke(require("node:stream"),1),Fy=require("node:util"),p0=require("node:buffer");Qw();AL();var Wy=class extends Error{constructor(t,r){super(t),Error.captureStackTrace(this,this.constructor),this.type=r}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}};var ou=class extends Wy{constructor(t,r,o){super(t,r),o&&(this.code=this.errno=o.code,this.erroredSysCall=o.syscall)}};var SL=Symbol.toStringTag,IY=e=>typeof e=="object"&&typeof e.append=="function"&&typeof e.delete=="function"&&typeof e.get=="function"&&typeof e.getAll=="function"&&typeof e.has=="function"&&typeof e.set=="function"&&typeof e.sort=="function"&&e[SL]==="URLSearchParams",eP=e=>e&&typeof e=="object"&&typeof e.arrayBuffer=="function"&&typeof e.type=="string"&&typeof e.stream=="function"&&typeof e.constructor=="function"&&/^(Blob|File)$/.test(e[SL]),HPe=e=>typeof e=="object"&&(e[SL]==="AbortSignal"||e[SL]==="EventTarget"),VPe=(e,t)=>{let r=new URL(t).hostname,o=new URL(e).hostname;return r===o||r.endsWith(`.${o}`)},$Pe=(e,t)=>{let r=new URL(t).protocol,o=new URL(e).protocol;return r===o};var p8t=(0,Fy.promisify)(M1.default.pipeline),au=Symbol("Body internals"),Td=class{constructor(t,{size:r=0}={}){let o=null;t===null?t=null:IY(t)?t=p0.Buffer.from(t.toString()):eP(t)||p0.Buffer.isBuffer(t)||(Fy.types.isAnyArrayBuffer(t)?t=p0.Buffer.from(t):ArrayBuffer.isView(t)?t=p0.Buffer.from(t.buffer,t.byteOffset,t.byteLength):t instanceof M1.default||(t instanceof hM?(t=KPe(t),o=t.type.split("=")[1]):t=p0.Buffer.from(String(t))));let n=t;p0.Buffer.isBuffer(t)?n=M1.default.Readable.from(t):eP(t)&&(n=M1.default.Readable.from(t.stream())),this[au]={body:t,stream:n,boundary:o,disturbed:!1,error:null},this.size=r,t instanceof M1.default&&t.on("error",a=>{let i=a instanceof Wy?a:new ou(`Invalid response body while trying to fetch ${this.url}: ${a.message}`,"system",a);this[au].error=i})}get body(){return this[au].stream}get bodyUsed(){return this[au].disturbed}async arrayBuffer(){let{buffer:t,byteOffset:r,byteLength:o}=await zY(this);return t.slice(r,r+o)}async formData(){let t=this.headers.get("content-type");if(t.startsWith("application/x-www-form-urlencoded")){let o=new hM,n=new URLSearchParams(await this.text());for(let[a,i]of n)o.append(a,i);return o}let{toFormData:r}=await Promise.resolve().then(()=>(ZPe(),QPe));return r(this.body,t)}async blob(){let t=this.headers&&this.headers.get("content-type")||this[au].body&&this[au].body.type||"",r=await this.arrayBuffer();return new Uy([r],{type:t})}async json(){let t=await this.text();return JSON.parse(t)}async text(){let t=await zY(this);return new TextDecoder().decode(t)}buffer(){return zY(this)}};Td.prototype.buffer=(0,Fy.deprecate)(Td.prototype.buffer,"Please use 'response.arrayBuffer()' instead of 'response.buffer()'","node-fetch#buffer");Object.defineProperties(Td.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0},data:{get:(0,Fy.deprecate)(()=>{},"data doesn't exist, use json(), text(), arrayBuffer(), or body instead","https://github.com/node-fetch/node-fetch/issues/1000 (response)")}});async function zY(e){if(e[au].disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e[au].disturbed=!0,e[au].error)throw e[au].error;let{body:t}=e;if(t===null)return p0.Buffer.alloc(0);if(!(t instanceof M1.default))return p0.Buffer.alloc(0);let r=[],o=0;try{for await(let n of t){if(e.size>0&&o+n.length>e.size){let a=new ou(`content size at ${e.url} over limit: ${e.size}`,"max-size");throw t.destroy(a),a}o+=n.length,r.push(n)}}catch(n){throw n instanceof Wy?n:new ou(`Invalid response body while trying to fetch ${e.url}: ${n.message}`,"system",n)}if(t.readableEnded===!0||t._readableState.ended===!0)try{return r.every(n=>typeof n=="string")?p0.Buffer.from(r.join("")):p0.Buffer.concat(r,o)}catch(n){throw new ou(`Could not create Buffer from response body for ${e.url}: ${n.message}`,"system",n)}else throw new ou(`Premature close of server response while trying to fetch ${e.url}`)}var m3=(e,t)=>{let r,o,{body:n}=e[au];if(e.bodyUsed)throw new Error("cannot clone body after it is used");return n instanceof M1.default&&typeof n.getBoundary!="function"&&(r=new M1.PassThrough({highWaterMark:t}),o=new M1.PassThrough({highWaterMark:t}),n.pipe(r),n.pipe(o),e[au].stream=r,n=o),n},f8t=(0,Fy.deprecate)(e=>e.getBoundary(),"form-data doesn't follow the spec and requires special treatment. Use alternative package","https://github.com/node-fetch/node-fetch/issues/1167"),IL=(e,t)=>e===null?null:typeof e=="string"?"text/plain;charset=UTF-8":IY(e)?"application/x-www-form-urlencoded;charset=UTF-8":eP(e)?e.type||null:p0.Buffer.isBuffer(e)||Fy.types.isAnyArrayBuffer(e)||ArrayBuffer.isView(e)?null:e instanceof hM?`multipart/form-data; boundary=${t[au].boundary}`:e&&typeof e.getBoundary=="function"?`multipart/form-data;boundary=${f8t(e)}`:e instanceof M1.default?null:"text/plain;charset=UTF-8",eze=e=>{let{body:t}=e[au];return t===null?0:eP(t)?t.size:p0.Buffer.isBuffer(t)?t.length:t&&typeof t.getLengthSync=="function"&&t.hasKnownLength&&t.hasKnownLength()?t.getLengthSync():null},tze=async(e,{body:t})=>{t===null?e.end():await p8t(t,e)};var RY=require("node:util"),nP=ke(require("node:http"),1),wL=typeof nP.default.validateHeaderName=="function"?nP.default.validateHeaderName:e=>{if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(e)){let t=new TypeError(`Header name must be a valid HTTP token [${e}]`);throw Object.defineProperty(t,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),t}},xY=typeof nP.default.validateHeaderValue=="function"?nP.default.validateHeaderValue:(e,t)=>{if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(t)){let r=new TypeError(`Invalid character in header content ["${e}"]`);throw Object.defineProperty(r,"code",{value:"ERR_INVALID_CHAR"}),r}},f0=class e extends URLSearchParams{constructor(t){let r=[];if(t instanceof e){let o=t.raw();for(let[n,a]of Object.entries(o))r.push(...a.map(i=>[n,i]))}else if(t!=null)if(typeof t=="object"&&!RY.types.isBoxedPrimitive(t)){let o=t[Symbol.iterator];if(o==null)r.push(...Object.entries(t));else{if(typeof o!="function")throw new TypeError("Header pairs must be iterable");r=[...t].map(n=>{if(typeof n!="object"||RY.types.isBoxedPrimitive(n))throw new TypeError("Each header pair must be an iterable object");return[...n]}).map(n=>{if(n.length!==2)throw new TypeError("Each header pair must be a name/value tuple");return[...n]})}}else throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");return r=r.length>0?r.map(([o,n])=>(wL(o),xY(o,String(n)),[String(o).toLowerCase(),String(n)])):void 0,super(r),new Proxy(this,{get(o,n,a){switch(n){case"append":case"set":return(i,s)=>(wL(i),xY(i,String(s)),URLSearchParams.prototype[n].call(o,String(i).toLowerCase(),String(s)));case"delete":case"has":case"getAll":return i=>(wL(i),URLSearchParams.prototype[n].call(o,String(i).toLowerCase()));case"keys":return()=>(o.sort(),new Set(URLSearchParams.prototype.keys.call(o)).keys());default:return Reflect.get(o,n,a)}}})}get[Symbol.toStringTag](){return this.constructor.name}toString(){return Object.prototype.toString.call(this)}get(t){let r=this.getAll(t);if(r.length===0)return null;let o=r.join(", ");return/^content-encoding$/i.test(t)&&(o=o.toLowerCase()),o}forEach(t,r=void 0){for(let o of this.keys())Reflect.apply(t,r,[this.get(o),o,this])}*values(){for(let t of this.keys())yield this.get(t)}*entries(){for(let t of this.keys())yield[t,this.get(t)]}[Symbol.iterator](){return this.entries()}raw(){return[...this.keys()].reduce((t,r)=>(t[r]=this.getAll(r),t),{})}[Symbol.for("nodejs.util.inspect.custom")](){return[...this.keys()].reduce((t,r)=>{let o=this.getAll(r);return r==="host"?t[r]=o[0]:t[r]=o.length>1?o:o[0],t},{})}};Object.defineProperties(f0.prototype,["get","entries","forEach","values"].reduce((e,t)=>(e[t]={enumerable:!0},e),{}));function nze(e=[]){return new f0(e.reduce((t,r,o,n)=>(o%2===0&&t.push(n.slice(o,o+2)),t),[]).filter(([t,r])=>{try{return wL(t),xY(t,String(r)),!0}catch{return!1}}))}var d8t=new Set([301,302,303,307,308]),PL=e=>d8t.has(e);var Gp=Symbol("Response internals"),_1=class e extends Td{constructor(t=null,r={}){super(t,r);let o=r.status!=null?r.status:200,n=new f0(r.headers);if(t!==null&&!n.has("Content-Type")){let a=IL(t,this);a&&n.append("Content-Type",a)}this[Gp]={type:"default",url:r.url,status:o,statusText:r.statusText||"",headers:n,counter:r.counter,highWaterMark:r.highWaterMark}}get type(){return this[Gp].type}get url(){return this[Gp].url||""}get status(){return this[Gp].status}get ok(){return this[Gp].status>=200&&this[Gp].status<300}get redirected(){return this[Gp].counter>0}get statusText(){return this[Gp].statusText}get headers(){return this[Gp].headers}get highWaterMark(){return this[Gp].highWaterMark}clone(){return new e(m3(this,this.highWaterMark),{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size,highWaterMark:this.highWaterMark})}static redirect(t,r=302){if(!PL(r))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');return new e(null,{headers:{location:new URL(t).toString()},status:r})}static error(){let t=new e(null,{status:0,statusText:""});return t[Gp].type="error",t}static json(t=void 0,r={}){let o=JSON.stringify(t);if(o===void 0)throw new TypeError("data is not JSON serializable");let n=new f0(r&&r.headers);return n.has("content-type")||n.set("content-type","application/json"),new e(o,{...r,headers:n})}get[Symbol.toStringTag](){return"Response"}};Object.defineProperties(_1.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var pze=require("node:url"),fze=require("node:util");var ize=e=>{if(e.search)return e.search;let t=e.href.length-1,r=e.hash||(e.href[t]==="#"?"#":"");return e.href[t-r.length]==="?"?"?":""};var oze=require("node:net");function rze(e,t=!1){return e==null||(e=new URL(e),/^(about|blob|data):$/.test(e.protocol))?"no-referrer":(e.username="",e.password="",e.hash="",t&&(e.pathname="",e.search=""),e)}var aze=new Set(["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"]),sze="strict-origin-when-cross-origin";function cze(e){if(!aze.has(e))throw new TypeError(`Invalid referrerPolicy: ${e}`);return e}function h8t(e){if(/^(http|ws)s:$/.test(e.protocol))return!0;let t=e.host.replace(/(^\[)|(]$)/g,""),r=(0,oze.isIP)(t);return r===4&&/^127\./.test(t)||r===6&&/^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(t)?!0:e.host==="localhost"||e.host.endsWith(".localhost")?!1:e.protocol==="file:"}function g3(e){return/^about:(blank|srcdoc)$/.test(e)||e.protocol==="data:"||/^(blob|filesystem):$/.test(e.protocol)?!0:h8t(e)}function lze(e,{referrerURLCallback:t,referrerOriginCallback:r}={}){if(e.referrer==="no-referrer"||e.referrerPolicy==="")return null;let o=e.referrerPolicy;if(e.referrer==="about:client")return"no-referrer";let n=e.referrer,a=rze(n),i=rze(n,!0);a.toString().length>4096&&(a=i),t&&(a=t(a)),r&&(i=r(i));let s=new URL(e.url);switch(o){case"no-referrer":return"no-referrer";case"origin":return i;case"unsafe-url":return a;case"strict-origin":return g3(a)&&!g3(s)?"no-referrer":i.toString();case"strict-origin-when-cross-origin":return a.origin===s.origin?a:g3(a)&&!g3(s)?"no-referrer":i;case"same-origin":return a.origin===s.origin?a:"no-referrer";case"origin-when-cross-origin":return a.origin===s.origin?a:i;case"no-referrer-when-downgrade":return g3(a)&&!g3(s)?"no-referrer":a;default:throw new TypeError(`Invalid referrerPolicy: ${o}`)}}function uze(e){let t=(e.get("referrer-policy")||"").split(/[,\s]+/),r="";for(let o of t)o&&aze.has(o)&&(r=o);return r}var As=Symbol("Request internals"),iP=e=>typeof e=="object"&&typeof e[As]=="object",y8t=(0,fze.deprecate)(()=>{},".data is not a valid RequestInit property, use .body instead","https://github.com/node-fetch/node-fetch/issues/1000 (request)"),bM=class e extends Td{constructor(t,r={}){let o;if(iP(t)?o=new URL(t.url):(o=new URL(t),t={}),o.username!==""||o.password!=="")throw new TypeError(`${o} is an url with embedded credentials.`);let n=r.method||t.method||"GET";if(/^(delete|get|head|options|post|put)$/i.test(n)&&(n=n.toUpperCase()),!iP(r)&&"data"in r&&y8t(),(r.body!=null||iP(t)&&t.body!==null)&&(n==="GET"||n==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let a=r.body?r.body:iP(t)&&t.body!==null?m3(t):null;super(a,{size:r.size||t.size||0});let i=new f0(r.headers||t.headers||{});if(a!==null&&!i.has("Content-Type")){let l=IL(a,this);l&&i.set("Content-Type",l)}let s=iP(t)?t.signal:null;if("signal"in r&&(s=r.signal),s!=null&&!HPe(s))throw new TypeError("Expected signal to be an instanceof AbortSignal or EventTarget");let c=r.referrer==null?t.referrer:r.referrer;if(c==="")c="no-referrer";else if(c){let l=new URL(c);c=/^about:(\/\/)?client$/.test(l)?"client":l}else c=void 0;this[As]={method:n,redirect:r.redirect||t.redirect||"follow",headers:i,parsedURL:o,signal:s,referrer:c},this.follow=r.follow===void 0?t.follow===void 0?20:t.follow:r.follow,this.compress=r.compress===void 0?t.compress===void 0?!0:t.compress:r.compress,this.counter=r.counter||t.counter||0,this.agent=r.agent||t.agent,this.highWaterMark=r.highWaterMark||t.highWaterMark||16384,this.insecureHTTPParser=r.insecureHTTPParser||t.insecureHTTPParser||!1,this.referrerPolicy=r.referrerPolicy||t.referrerPolicy||""}get method(){return this[As].method}get url(){return(0,pze.format)(this[As].parsedURL)}get headers(){return this[As].headers}get redirect(){return this[As].redirect}get signal(){return this[As].signal}get referrer(){if(this[As].referrer==="no-referrer")return"";if(this[As].referrer==="client")return"about:client";if(this[As].referrer)return this[As].referrer.toString()}get referrerPolicy(){return this[As].referrerPolicy}set referrerPolicy(t){this[As].referrerPolicy=cze(t)}clone(){return new e(this)}get[Symbol.toStringTag](){return"Request"}};Object.defineProperties(bM.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0},referrer:{enumerable:!0},referrerPolicy:{enumerable:!0}});var dze=e=>{let{parsedURL:t}=e[As],r=new f0(e[As].headers);r.has("Accept")||r.set("Accept","*/*");let o=null;if(e.body===null&&/^(post|put)$/i.test(e.method)&&(o="0"),e.body!==null){let s=eze(e);typeof s=="number"&&!Number.isNaN(s)&&(o=String(s))}o&&r.set("Content-Length",o),e.referrerPolicy===""&&(e.referrerPolicy=sze),e.referrer&&e.referrer!=="no-referrer"?e[As].referrer=lze(e):e[As].referrer="no-referrer",e[As].referrer instanceof URL&&r.set("Referer",e.referrer),r.has("User-Agent")||r.set("User-Agent","node-fetch"),e.compress&&!r.has("Accept-Encoding")&&r.set("Accept-Encoding","gzip, deflate, br");let{agent:n}=e;typeof n=="function"&&(n=n(t));let a=ize(t),i={path:t.pathname+a,method:e.method,headers:r[Symbol.for("nodejs.util.inspect.custom")](),insecureHTTPParser:e.insecureHTTPParser,agent:n};return{parsedURL:t,options:i}};var zL=class extends Wy{constructor(t,r="aborted"){super(t,r)}};AL();wY();var b8t=new Set(["data:","http:","https:"]);async function oP(e,t){return new Promise((r,o)=>{let n=new bM(e,t),{parsedURL:a,options:i}=dze(n);if(!b8t.has(a.protocol))throw new TypeError(`node-fetch cannot load ${e}. URL scheme "${a.protocol.replace(/:$/,"")}" is not supported.`);if(a.protocol==="data:"){let m=LPe(n.url),M=new _1(m,{headers:{"Content-Type":m.typeFull}});r(M);return}let s=(a.protocol==="https:"?yze.default:hze.default).request,{signal:c}=n,l=null,p=()=>{let m=new zL("The operation was aborted.");o(m),n.body&&n.body instanceof d0.default.Readable&&n.body.destroy(m),!(!l||!l.body)&&l.body.emit("error",m)};if(c&&c.aborted){p();return}let h=()=>{p(),b()},y=s(a.toString(),i);c&&c.addEventListener("abort",h);let b=()=>{y.abort(),c&&c.removeEventListener("abort",h)};y.on("error",m=>{o(new ou(`request to ${n.url} failed, reason: ${m.message}`,"system",m)),b()}),m8t(y,m=>{l&&l.body&&l.body.destroy(m)}),process.version<"v14"&&y.on("socket",m=>{let M;m.prependListener("end",()=>{M=m._eventsCount}),m.prependListener("close",_=>{if(l&&M<m._eventsCount&&!_){let O=new Error("Premature close");O.code="ERR_STREAM_PREMATURE_CLOSE",l.body.emit("error",O)}})}),y.on("response",m=>{y.setTimeout(0);let M=nze(m.rawHeaders);if(PL(m.statusCode)){let T=M.get("Location"),w=null;try{w=T===null?null:new URL(T,n.url)}catch{if(n.redirect!=="manual"){o(new ou(`uri requested responds with an invalid redirect URL: ${T}`,"invalid-redirect")),b();return}}switch(n.redirect){case"error":o(new ou(`uri requested responds with a redirect, redirect mode is set to error: ${n.url}`,"no-redirect")),b();return;case"manual":break;case"follow":{if(w===null)break;if(n.counter>=n.follow){o(new ou(`maximum redirect reached at: ${n.url}`,"max-redirect")),b();return}let P={headers:new f0(n.headers),follow:n.follow,counter:n.counter+1,agent:n.agent,compress:n.compress,method:n.method,body:m3(n),signal:n.signal,size:n.size,referrer:n.referrer,referrerPolicy:n.referrerPolicy};if(!VPe(n.url,w)||!$Pe(n.url,w))for(let R of["authorization","www-authenticate","cookie","cookie2"])P.headers.delete(R);if(m.statusCode!==303&&n.body&&t.body instanceof d0.default.Readable){o(new ou("Cannot follow redirect with body being a readable stream","unsupported-redirect")),b();return}(m.statusCode===303||(m.statusCode===301||m.statusCode===302)&&n.method==="POST")&&(P.method="GET",P.body=void 0,P.headers.delete("content-length"));let C=uze(M);C&&(P.referrerPolicy=C),r(oP(new bM(w,P))),b();return}default:return o(new TypeError(`Redirect option '${n.redirect}' is not a valid value of RequestRedirect`))}}c&&m.once("end",()=>{c.removeEventListener("abort",h)});let _=(0,d0.pipeline)(m,new d0.PassThrough,T=>{T&&o(T)});process.version<"v12.10"&&m.on("aborted",h);let O={url:n.url,status:m.statusCode,statusText:m.statusMessage,headers:M,size:n.size,counter:n.counter,highWaterMark:n.highWaterMark},S=M.get("Content-Encoding");if(!n.compress||n.method==="HEAD"||S===null||m.statusCode===204||m.statusCode===304){l=new _1(_,O),r(l);return}let v={flush:mM.default.Z_SYNC_FLUSH,finishFlush:mM.default.Z_SYNC_FLUSH};if(S==="gzip"||S==="x-gzip"){_=(0,d0.pipeline)(_,mM.default.createGunzip(v),T=>{T&&o(T)}),l=new _1(_,O),r(l);return}if(S==="deflate"||S==="x-deflate"){let T=(0,d0.pipeline)(m,new d0.PassThrough,w=>{w&&o(w)});T.once("data",w=>{(w[0]&15)===8?_=(0,d0.pipeline)(_,mM.default.createInflate(),P=>{P&&o(P)}):_=(0,d0.pipeline)(_,mM.default.createInflateRaw(),P=>{P&&o(P)}),l=new _1(_,O),r(l)}),T.once("end",()=>{l||(l=new _1(_,O),r(l))});return}if(S==="br"){_=(0,d0.pipeline)(_,mM.default.createBrotliDecompress(),T=>{T&&o(T)}),l=new _1(_,O),r(l);return}l=new _1(_,O),r(l)}),tze(y,n).catch(o)})}function m8t(e,t){let r=rP.Buffer.from(`0\r
|
|
230
230
|
\r
|
|
@@ -276,7 +276,7 @@ create table if not exists ${Jpe} (
|
|
|
276
276
|
);
|
|
277
277
|
create index if not exists idx_message_refs_peer on message_refs (peer_id);
|
|
278
278
|
create index if not exists idx_message_refs on message_refs (chat_id, msg_id);
|
|
279
|
-
`)}),t.onLoad(()=>{this._store=this._driver.db.prepare("insert or replace into message_refs (peer_id, chat_id, msg_id) values (?, ?, ?)"),this._getByPeer=this._driver.db.prepare("select chat_id, msg_id from message_refs where peer_id = ?"),this._del=this._driver.db.prepare("delete from message_refs where chat_id = ? and msg_id = ?"),this._delByPeer=this._driver.db.prepare("delete from message_refs where peer_id = ?"),this._delAll=this._driver.db.prepare("delete from message_refs")})}_store;store(t,r,o){this._store.run(t,r,o)}_getByPeer;getByPeer(t){let r=this._getByPeer.get(t);if(!r)return null;let o=r;return[o.chat_id,o.msg_id]}_del;delete(t,r){for(let o of r)this._driver._writeLater(this._del,[t,o])}_delByPeer;deleteByPeer(t){this._delByPeer.run(t)}_delAll;deleteAll(){this._delAll.run()}};var OC=class{constructor(t){this.driver=t,this.authKeys=new Uj(this.driver),this.kv=new Wj(this.driver),this.refMessages=new jj(this.driver),this.peers=new Fj(this.driver)}authKeys;kv;refMessages;peers};async function cut(e,t,r,o){r instanceof Na&&ArrayBuffer.isView(r.location)&&await(0,sut.writeFile)(t,r.location);let n=(0,Gj.createWriteStream)(t);o?.abortSignal&&o.abortSignal.addEventListener("abort",()=>{e.log.debug("aborting file download %s - cleaning up",t),n.destroy(),(0,Gj.rmSync)(t)});for await(let a of Db(e,r,o))n.write(a);n.end()}var lut=typeof process<"u"&&"node"in process.versions?process.versions.node:null,uut=lut!=null?lut.split(".").map(Number):null;function put(e,t,r){if(!uut)return!0;let[o,n,a]=uut;return o>e?!0:o<e?!1:n>t?!0:n<t?!1:a>=r}var Kj=class{constructor(t,r={}){if(this.socket=t,t.pending)throw new Error("socket is not connected");if(t.destroyed)throw new Error("socket is destroyed");this.#t=Or.alloc(r.bufferSize),t.resume(),t.on("data",o=>{this.#t.writeSync(o.length).set(o),this.#n.notify()}),t.on("close",()=>{this.#e=new yf,this.#n.notify()}),t.on("error",o=>{this.#e=kc(o),this.#n.notify()})}#e=null;#t;#n=new uf;close(){this.socket?.destroy(),this.#e=new yf,this.#n.notify()}async read(t){if(this.#t.available>0){let o=Math.min(this.#t.available,t.length);return t.set(this.#t.readSync(o)),this.#t.reclaim(),o}if(this.#e!==null)throw this.#e;if(await this.#n.wait(),this.#e!==null)throw this.#e;let r=Math.min(this.#t.available,t.length);return t.set(this.#t.readSync(r)),this.#t.reclaim(),r}async write(t){if(this.#e)throw this.#e;return new Promise((r,o)=>{this.socket.write(t,n=>{n?o(n):r()})})}},Hj=class extends Kj{get localAddress(){return{address:Fr(this.socket.localAddress),port:Fr(this.socket.localPort)}}get remoteAddress(){return{address:Fr(this.socket.remoteAddress),port:Fr(this.socket.remotePort)}}setKeepAlive(t){this.socket.setKeepAlive(t)}setNoDelay(t){this.socket.setNoDelay(t)}},Vj=class extends Kj{get localAddress(){return{address:Fr(this.socket.localAddress),port:Fr(this.socket.localPort)}}get remoteAddress(){return{address:Fr(this.socket.remoteAddress),port:Fr(this.socket.remotePort)}}setKeepAlive(t){this.socket.setKeepAlive(t)}setNoDelay(t){this.socket.setNoDelay(t)}getAlpnProtocol(){let t=this.socket.alpnProtocol;return t===!1?null:t}};var Ype=require("node:net"),$j=require("node:tls");function fut(e){return new Promise((t,r)=>{e.on("error",r),e.once("connect",()=>{e.off("error",r),t()})})}var Z_=async({address:e,port:t})=>{let r=new Ype.Socket;return r.connect(t,e),await fut(r),new Hj(r)},Qpe=async e=>{let{address:t,port:r,sni:o,caCerts:n,alpnProtocols:a,extraOptions:i}=e,s=(0,$j.connect)({host:t,port:r,ca:n,ALPNProtocols:a,servername:o,...i});return await fut(s),new Vj(s)};function Jj(e){let t=new oc;e.on("end",()=>{for(;t.length>0;)t.popFront().resolve()}),e.on("error",o=>{for(;t.length>0;)t.popFront().reject(o)}),e.on("readable",()=>{t.popFront()?.resolve()});let r=Or.alloc();return{async read(o){if(e.readableEnded)return 0;if(r.available>0){let a=Math.min(r.available,o.length);return o.set(r.readSync(a)),a}let n=null;for(;n==null;)if(n=e.read(o.length),n===null){if(e.readableEnded)return 0;let a=new yo;t.pushBack(a),await a.promise}if(o.length<n.length){let a=n.length-o.length;r.writeSync(a).set(n.subarray(a)),n=n.subarray(0,o.length)}return o.set(n),n.length},close(){e.destroy()}}}var MC=require("node:stream");function Zpe(e){if(typeof MC.Readable.fromWeb=="function"&&put(18,13,0))return MC.Readable.fromWeb(e);let t=e.getReader(),r=!1,o=new MC.Readable({async read(){try{let{done:n,value:a}=await t.read();n?this.push(null):this.push(Buffer.from(a.buffer,a.byteOffset,a.byteLength))}catch(n){this.destroy(n)}},destroy(n,a){if(!r){t.cancel(n).catch(()=>{}).then(()=>{a(n)});return}a(n)}});return t.closed.then(()=>{r=!0}).catch(n=>{o.destroy(n)}),o}function dut(e,t,r){return Zpe(pC(e,t,r))}var $ut=ke(Vut(),1),r9=class extends gC{constructor(t=":memory:",r){super(),this.filename=t,this.params=r}_createDatabase(){let t=(0,$ut.default)(this.filename,{...this.params?.options,verbose:this._log.mgr.level>=5?this._log.verbose:void 0});return this.params?.disableWal||t.pragma("journal_mode = WAL"),t}};var AC=class extends OC{constructor(t=":memory:",r){super(new r9(t,r)),this.filename=t,this.params=r}};var _f=require("node:crypto"),t0t=require("node:fs/promises"),n0t=require("node:module"),s9=require("node:zlib");function Jut(e,t){let r=On.fromBytes(t),o=xxn(e,r),n=r/o,a,i;return o<n?(a=o,i=n):(a=n,i=o),[On.toBytes(a),On.toBytes(i)]}function xxn(e,t){if(t%2n===0n)return 2n;let r=HF(e,t-1n),o=HF(e,t-1n),n=HF(e,t-1n),a=1n,i=1n,s=1n,c,l;for(;a===1n;){l=r;for(let h=0;i>=h;h++)r=(r*r%t+o)%t;let p=0n;for(;p<i&&a===1n;){c=r;for(let h=0n;h<On.min2(n,i-p);h++)r=(r*r%t+o)%t,s=s*On.abs(l-r)%t;a=On.euclideanGcd(s,t),p=p+n}i<<=1n}if(a===t)do c=(c*c%t+o)%t,a=On.euclideanGcd(l-c,t);while(a<=1n);return a}var SC=class{factorizePQ(t){return Jut(this,t)}randomBytes(t){let r=zt.alloc(t);return this.randomFill(r),r}};var Xut=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var wu,kxn,Cxn,Nxn,ofe,afe,o9=null;function Dxn(){kxn=wu.libdeflate_alloc_compressor(6),Cxn=wu.libdeflate_alloc_decompressor(),Nxn=wu.__get_shared_out(),ofe=wu.__get_shared_key_buffer(),afe=wu.__get_shared_iv_buffer()}function Yut(){return(o9===null||o9.byteLength===0)&&(o9=new Uint8Array(wu.memory.buffer)),o9}function Qut(e){wu===void 0&&(e instanceof WebAssembly.Instance||(e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e)),e=new WebAssembly.Instance(e)),wu=e.exports,Dxn())}function Zut(e,t,r){let o=wu.__malloc(e.length+e.length),n=o,a=n+e.length,i=Yut();i.set(e,n),i.set(t,ofe),i.set(r,afe),wu.ige256_encrypt(n,e.length,a);let s=i.slice(a,a+e.length);return wu.__free(o),s}function e0t(e,t,r){let o=wu.__malloc(e.length+e.length),n=o,a=n+e.length,i=Yut();i.set(e,n),i.set(t,ofe),i.set(r,afe),wu.ige256_decrypt(n,e.length,a);let s=i.slice(a,a+e.length);return wu.__free(o),s}var Lxn={},a9=class extends SC{createAesCtr(t,r){let o=(0,_f.createCipheriv)(`aes-${t.length*8}-ctr`,t,r);return{process:a=>o.update(a)}}pbkdf2(t,r,o,n=64,a="sha512"){return new Promise((i,s)=>(0,_f.pbkdf2)(t,r,o,n,a,(c,l)=>c!==null?s(c):i(l)))}sha1(t){return(0,_f.createHash)("sha1").update(t).digest()}sha256(t){return(0,_f.createHash)("sha256").update(t).digest()}hmacSha256(t,r){return(0,_f.createHmac)("sha256",r).update(t).digest()}gzip(t,r){try{return(0,s9.deflateSync)(t,{maxOutputLength:r})}catch(o){if(o.code==="ERR_BUFFER_TOO_LARGE")return null;throw o}}gunzip(t){return(0,s9.gunzipSync)(t)}randomFill(t){(0,_f.randomFillSync)(t)}async initialize(){let t=(0,n0t.createRequire)(Lxn.url),r=Xut?"mtcute-simd.wasm":"mtcute.wasm",o=t.resolve(`@mtcute/wasm/${r}`),n=await(0,t0t.readFile)(o);Qut(n)}createAesIge(t,r){return{encrypt(o){return Zut(o,t,r)},decrypt(o){return e0t(o,t,r)}}}};var u9=ke(require("node:os"),1);var c9=require("node:fs"),i0t=require("node:fs/promises"),r0t=require("node:path"),o0t=require("node:stream");async function a0t(e){if(typeof e=="string"&&(e=(0,c9.createReadStream)(e)),e instanceof c9.ReadStream){let t=(0,r0t.basename)(e.path.toString()),r=await(0,i0t.stat)(e.path.toString()).then(o=>o.size);return{file:Jj(e),fileName:t,fileSize:r}}return e instanceof o0t.Readable?{file:Jj(e)}:null}var s0t=!1,c0t=!1,sfe=new Set,l0t=new Map;function l9(e,t,r){function o(){if(!c0t){c0t=!0;for(let n of sfe)n();for(let[n,a]of l0t)process.off(n,a);e&&process.kill(process.pid,t)}}process.on(r,o),l0t.set(r,o)}function u0t(e){return typeof process>"u"?()=>{}:(s0t||(s0t=!0,l9(!0,0,"beforeExit"),l9(!0,2,"SIGINT"),l9(!0,15,"SIGTERM"),l9(!1,15,"exit")),sfe.add(e),()=>{sfe.delete(e)})}var cfe=typeof process=="object"&&!!process.stdout?.isTTY,p0t=cfe?"%s [%s] [%s%s\x1B[0m] ":"%s [%s] [%s] ",f0t=cfe?["","\x1B[31mERR\x1B[0m","\x1B[33mWRN\x1B[0m","\x1B[34mINF\x1B[0m","\x1B[36mDBG\x1B[0m","\x1B[35mVRB\x1B[0m"]:["","ERR","WRN","INF","DBG","VRB"],qxn=[6,2,3,4,5,1].map(e=>`\x1B[3${e};1m`),d0t=cfe?(e,t,r,o,n)=>{console.log(p0t+o,new Date().toISOString(),f0t[t],qxn[e],r,...n)}:(e,t,r,o,n)=>{console.log(p0t+o,new Date().toISOString(),f0t[t],r,...n)};var nA=class{getDeviceModel(){return`Node.js/${process.version} (${u9.type()} ${u9.arch()})`}getDefaultLogLevel(){let t=Number.parseInt(process.env.MTCUTE_LOG_LEVEL??"");return Number.isNaN(t)?null:t}};nA.prototype.log=d0t;nA.prototype.beforeExit=u0t;nA.prototype.normalizeFile=a0t;var p9=class{connect(t){return Z_({address:t.ipAddress,port:t.port})}packetCodec(){return new Of}};var f9=class extends TT{constructor(t){super({crypto:new a9,transport:new p9,platform:new nA,...t,storage:typeof t.storage=="string"?new AC(t.storage):t.storage??new AC("client.session")})}},EC=class extends Me{constructor(t){if("client"in t){super(t);return}super({client:new f9(t),disableUpdates:t.disableUpdates,skipConversationUpdates:t.skipConversationUpdates,updates:t.updates})}_rl;input(t){return this._rl||(this._rl=(0,h0t.createInterface)({input:process.stdin,output:process.stdout})),new Promise(r=>this._rl?.question(t,r))}destroy(){return this._rl?.close(),super.destroy()}start(t={}){return t.botToken||(t.phone||(t.phone=()=>this.input("phone > ")),t.code||(t.code=()=>this.input("code > ")),t.password||(t.password=()=>this.input("2fa password > "))),super.start(t).then(r=>(this._rl&&(this._rl.close(),delete this._rl),r))}downloadToFile(t,r,o){return cut(this,t,r,o)}downloadAsNodeStream(t,r){return dut(this,t,r)}};var d9=class{constructor(t){this.proxy=t}async connect(t){let r;return this.proxy.tls?r=await Qpe({address:this.proxy.host,port:this.proxy.port,extraOptions:this.proxy.tlsOptions}):r=await Z_({address:this.proxy.host,port:this.proxy.port}),await s0e(r,r,this.proxy,{address:t.ipAddress,port:t.port}),r}packetCodec(){return new Of}},h9=class{constructor(t){this.proxy=t}async connect(t){let r=await Z_({address:this.proxy.host,port:this.proxy.port});return await u0e(r,r,this.proxy,{address:t.ipAddress,port:t.port}),r}packetCodec(){return new Of}},y9=class extends bC{async _connectTcp(t){return Z_(t)}},lfe=$pe({SocksProxyTcpTransport:h9,HttpProxyTcpTransport:d9,MtProxyTcpTransport:y9});var m9=class{accountId;platform="telegram";eventBus=new vd;status="disconnected";client=null;session=null;constructor(t){this.accountId=t}async initialize(t){this.session=t,this.status="connecting",this.eventBus.emit("session:status_changed","connecting");let{apiId:r,apiHash:o,phone:n,sessionString:a}=t.authData;if(!r||!o){this.status="disconnected";let i="Missing apiId or apiHash for Telegram login";throw this.eventBus.emit("session:status_changed","disconnected",i),new Error(i)}try{let i={apiId:Number(r),apiHash:String(o),storage:new mC};t.proxy&&(i.transport=lfe(t.proxy)),this.client=new EC(i),await this.client.start({session:a||void 0,phone:()=>{if(!n)throw new Error("Phone number required for Telegram login");return n},code:async()=>new Promise((c,l)=>{this.eventBus.emit("auth:otp_requested",p=>{p?c(p):l(new Error("OTP verification cancelled or empty"))})}),password:async()=>new Promise((c,l)=>{this.eventBus.emit("auth:password_requested",p=>{p?c(p):l(new Error("2FA password cancelled or empty"))})})});let s=await this.client.exportSession();t.authData.sessionString=s,this.setupListeners(),this.status="connected",this.eventBus.emit("session:status_changed","connected")}catch(i){throw this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",i.message||String(i)),i}}async disconnect(){if(this.client){try{await this.client.destroy()}catch{}this.client=null}this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected")}async sendMessage(t,r){if(!this.client)throw new Error("Telegram adapter not initialized or logged in");let o,n=r.quoteId?Number(r.quoteId):void 0,a=TC(t);try{if(r.type==="text")o=await this.client.sendText(a,r.text,{replyTo:n});else if(r.type==="image"||r.type==="file"){let i=r.type==="image"?"photo":"document",s=r.filePath?`file:${r.filePath}`:r.url||"";if(!s)throw new Error("Missing filePath or url for media attachment");o=await this.client.sendMedia(a,{type:i,file:s,caption:r.caption||""},{replyTo:n})}else throw new Error("Unsupported message payload type")}catch(i){throw this.handleApiError(i),i}return b9(o,this.accountId)}async getConversations(t=20){if(!this.client)throw new Error("Telegram adapter not initialized");try{let r=[],o=0;for await(let n of this.client.iterDialogs()){if(o>=t)break;let a;if(n.peer.photo)try{let s=await this.client.downloadAsBuffer(n.peer.photo.small);a=`data:image/jpeg;base64,${Buffer.from(s).toString("base64")}`}catch{}let i=Bxn(n.peer,a);i.unreadCount=n.unreadCount||0,n.lastMessage&&(i.lastMessage=b9(n.lastMessage,this.accountId)),r.push(i),o++}return r}catch(r){throw this.handleApiError(r),r}}async getMessageHistory(t,r=50,o){if(!this.client)throw new Error("Telegram adapter not initialized");let n=TC(t);try{let a=[],i={limit:r};o&&(i.offset={id:0,date:Math.floor(o/1e3)});let s=await this.client.getHistory(n,i);for(let c of s)a.push(b9(c,this.accountId));return a}catch(a){throw this.handleApiError(a),a}}async getCurrentUser(){if(!this.client)return null;try{let t=await this.client.getMe(),r;if(t.photo)try{let o=await this.client.downloadAsBuffer(t.photo.small);r=`data:image/jpeg;base64,${Buffer.from(o).toString("base64")}`}catch{}return y0t(t,r)}catch(t){throw this.handleApiError(t),t}}async getContactInfo(t){if(!this.client)throw new Error("Telegram adapter not initialized");let r=TC(t);try{let[o]=await this.client.getUsers(r);if(!o)return null;let n;if(o.photo)try{let a=await this.client.downloadAsBuffer(o.photo.small);n=`data:image/jpeg;base64,${Buffer.from(a).toString("base64")}`}catch{}return y0t(o,n)}catch(o){throw this.handleApiError(o),o}}async markAsRead(t){if(!this.client)throw new Error("Telegram adapter not initialized");let r=TC(t);try{await this.client.readHistory(r)}catch(o){this.handleApiError(o)}}async sendTyping(t,r){if(!this.client)throw new Error("Telegram adapter not initialized");let o=TC(t);try{r&&await this.client.sendTyping(o)}catch(n){this.handleApiError(n)}}getUnderlyingClient(){return this.client}handleApiError(t){if(!t)return;let r=String(t.message||t).toLowerCase();(r.includes("session_expired")||r.includes("user_deactivated")||r.includes("auth_key_unregistered")||r.includes("session has expired"))&&(this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",t.message||String(t)))}setupListeners(){this.client&&this.client.onNewMessage.add(t=>{try{let r=b9(t,this.accountId);this.eventBus.emit("message:received",r)}catch{}})}};function b9(e,t){let r=e.sender?String(e.sender.id):"0",o=e.sender&&(e.sender.displayName||e.sender.firstName)||"Telegram User",n="text",a;if(e.media){let s=e.media.type;s==="photo"?n="image":s==="video"?n="video":s==="audio"||s==="voice"?n="audio":s==="sticker"?n="sticker":s==="document"?n="file":n="other",t&&(a=`telegram-media://${t}/${e.chat.id}/${e.id}`)}let i=e.date instanceof Date?e.date.getTime():Number(e.date)*1e3;return{id:String(e.id),conversationId:String(e.chat.id),senderId:r,senderName:o,text:e.text||"",type:n,mediaUrl:a,timestamp:i,platform:"telegram",isFromMe:e.isOutgoing,metadata:{rawMedia:e.media}}}function Bxn(e,t){let r="direct",o=e.chatType||e.type||"";o==="group"||o==="supergroup"?r="group":o==="channel"&&(r="channel");let n=e.displayName||e.title||e.firstName||"Telegram Chat";return{id:String(e.id),name:n,type:r,avatarUrl:t,unreadCount:0,platform:"telegram",rawConversation:e}}function y0t(e,t){let r=e.displayName||e.firstName||"Telegram User";return{id:String(e.id),name:r,avatarUrl:t,platform:"telegram",phoneNumber:e.phoneNumber||void 0,rawContact:e}}function TC(e){return/^-?\d+$/.test(e)?Number(e):e}var VT=class{constructor(t,r,o,n){this.accountId=t;this.sessionData=r;this.proxyData=o;this.logger=n||(0,vC.createLogger)(`TelegramRunner:${t}`)}platform="telegram";status="offline";logger;messageHandler;adapter;onMessage(t){this.messageHandler=t}async start(){let t=this.proxyData?` via resident proxy ${this.proxyData.host||this.proxyData.ip||"configured"}`:" (direct)";this.logger.info(`Starting 24/7 headless Telegram runner for account ${this.accountId}${t}...`);let r=this.sessionData;if(this.sessionData?.encryptedSession?r=vC.CloudCrypto.parseCloudSession(this.sessionData.encryptedSession):typeof this.sessionData=="string"&&(r=vC.CloudCrypto.parseCloudSession(this.sessionData)),r?.apiId&&r?.apiHash)try{this.adapter=new m9(this.accountId),this.adapter.eventBus.on("message:received",n=>{this.receiveIncomingMessage(n)});let o;if(this.proxyData?.host&&this.proxyData?.port){let n=this.proxyData.username&&this.proxyData.password?`${this.proxyData.username}:${this.proxyData.password}@`:"";o=`${this.proxyData.protocol||"http"}://${n}${this.proxyData.host}:${this.proxyData.port}`}await this.adapter.initialize({accountId:this.accountId,platform:"telegram",status:"connecting",authData:{apiId:r.apiId,apiHash:r.apiHash,phone:r.phone,sessionString:r.sessionString},proxy:o}),this.logger.info(`Headless Telegram MTProto connected & listening for ${this.accountId}`)}catch(o){this.logger.warn(`Could not initialize live Telegram client: ${o?.message}. Runner active in standby mode.`)}else this.logger.debug("No direct Telegram credentials provided. Running in standby mode.");this.status="active"}async stop(){if(this.logger.info(`Stopping headless Telegram runner for account ${this.accountId}...`),this.adapter)try{await this.adapter.disconnect()}catch(t){this.logger.debug(`Error disconnecting Telegram adapter for ${this.accountId}:`,t?.message)}this.status="offline"}getStatus(){return this.status}async sendMessage(t){if(this.adapter)try{return await this.adapter.sendMessage(t.threadId||t.conversationId,{type:"text",text:t.content||""}),this.logger.info(`Headless Telegram runner sent message to thread ${t.threadId}`),!0}catch(r){return this.logger.warn(`Failed to send live Telegram message: ${r?.message}`),!1}return this.logger.info(`Headless Telegram runner (standby) recorded sending message ${t.id} to thread ${t.threadId}`),!0}receiveIncomingMessage(t){this.status==="active"&&(this.logger.info(`\u{1F4E9} [TelegramRunner:${this.accountId}] Received message ${t.id} from sender ${t.senderName||t.senderId}: "${(t.content||"").slice(0,60)}"`),this.messageHandler?.(t))}};var s6=ke(go()),uI=class{constructor(t,r,o,n){this.accountId=t;this.sessionData=r;this.proxyData=o;this.logger=n||(0,s6.createLogger)(`WhatsAppRunner:${t}`)}platform="whatsapp";status="offline";logger;messageHandler;adapter;onMessage(t){this.messageHandler=t}async start(){let t=this.proxyData?` via resident proxy ${this.proxyData.host||this.proxyData.ip||"configured"}`:" (direct)";this.logger.info(`Starting 24/7 headless WhatsApp runner for account ${this.accountId}${t}...`);let r=this.sessionData;if(this.sessionData?.encryptedSession?r=s6.CloudCrypto.parseCloudSession(this.sessionData.encryptedSession):typeof this.sessionData=="string"&&(r=s6.CloudCrypto.parseCloudSession(this.sessionData)),!!(r?.sessionPath||r?.creds||r?.keys||r?.authSession))try{let{WhatsAppAdapter:n}=await Promise.resolve().then(()=>(xSt(),RSt));this.adapter=new n(this.accountId),this.adapter.eventBus.on("message:received",i=>{this.receiveIncomingMessage(i)});let a;if(this.proxyData?.host&&this.proxyData?.port){let i=this.proxyData.username&&this.proxyData.password?`${this.proxyData.username}:${this.proxyData.password}@`:"";a=`${this.proxyData.protocol||"http"}://${i}${this.proxyData.host}:${this.proxyData.port}`}await this.adapter.initialize({accountId:this.accountId,platform:"whatsapp",status:"connecting",authData:{sessionPath:r.sessionPath,creds:r.creds,keys:r.keys},proxy:a}),this.logger.info(`Headless WhatsApp socket connected & listening for ${this.accountId}`)}catch(n){this.logger.warn(`Could not initialize live WhatsApp client: ${n?.message}. Runner active in standby mode.`)}else this.logger.debug("No direct WhatsApp credentials/session provided. Running in standby mode.");this.status="active"}async stop(){if(this.logger.info(`Stopping headless WhatsApp runner for account ${this.accountId}...`),this.adapter)try{await this.adapter.disconnect()}catch(t){this.logger.debug(`Error disconnecting WhatsApp adapter for ${this.accountId}:`,t?.message)}this.status="offline"}getStatus(){return this.status}async sendMessage(t){if(this.adapter&&this.status==="active")try{return await this.adapter.sendMessage(t.threadId||t.conversationId,{type:t.messageType==="image"?"image":"text",text:t.content}),!0}catch(r){return this.logger.warn(`Failed to send WhatsApp message via adapter for ${this.accountId}:`,r?.message),!1}return this.logger.info(`Headless WhatsApp runner sending message ${t.id} to thread ${t.threadId}`),!0}receiveIncomingMessage(t){this.status==="active"&&(this.logger.info(`\u{1F4E9} [WhatsAppRunner:${this.accountId}] Received message ${t.id} from sender ${t.senderName||t.senderId}: "${(t.content||"").slice(0,60)}"`),this.messageHandler?.(t))}};var ZH=class{constructor(t,r,o,n,a){this.port=t;this.engine=r;this.lockManager=o;this.deltaQueue=n;this.logger=a||(0,NSt.createLogger)("WorkerHttpServer")}logger;server=null;async start(){if(!this.server)return new Promise((t,r)=>{this.server=kSt.default.createServer((o,n)=>{this.handleRequest(o,n).catch(a=>{this.logger.error("Unhandled HTTP error:",a),n.headersSent||(n.writeHead(500,{"Content-Type":"application/json"}),n.end(JSON.stringify({error:"Internal Server Error"})))})}),this.server.listen(this.port,()=>{this.logger.info(`\u{1F680} Worker HTTP Server listening on port ${this.port}`),t()}),this.server.on("error",o=>{this.logger.error(`Worker HTTP Server error on port ${this.port}:`,o),r(o)})})}async stop(){if(this.server)return new Promise(t=>{this.server?.close(()=>{this.logger.info("Worker HTTP Server closed."),this.server=null,t()})})}async handleRequest(t,r){let o=new CSt.URL(t.url||"/",`http://${t.headers.host||"localhost"}`),n=o.pathname,a=(t.method||"GET").toUpperCase();if(r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),r.setHeader("Access-Control-Allow-Headers","Content-Type, X-Softty-User-Id, X-Desktop-Secret, Authorization"),a==="OPTIONS"){r.writeHead(204),r.end();return}if(a==="GET"&&n==="/health"){let i=this.engine.getMetrics();r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({status:"healthy",timestamp:Date.now(),pendingDeltaMessages:this.deltaQueue.getCount(),metrics:i}));return}if(n.startsWith("/api/v1/")){let i=this.engine.config.desktopSecret;if(i){let s=t.headers["x-desktop-secret"]||t.headers.authorization;if((typeof s=="string"&&s.startsWith("Bearer ")?s.slice(7):s)!==i){r.writeHead(401,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Unauthorized: Invalid or missing X-Desktop-Secret"}));return}}}if(a==="POST"&&n==="/api/v1/sentinel/handover"){let i=await this.readJsonBody(t),{deviceId:s,sessions:c,aiConfig:l}=i||{};if(l&&(this.engine.automationEngine.configure(l),this.logger.info(`[Handover] Configured 24/7 AI automation engine with provider: ${l.provider||"gemini"}, model: ${l.model||"default"}`)),!Array.isArray(c)){r.writeHead(400,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Invalid sessions array payload"}));return}this.logger.info(`[Handover] Received handover request from device ${s||"unknown"} with ${c.length} sessions.`);let p=0;for(let h of c){if(!h.id||!h.nightWorkerEnabled)continue;if(!this.lockManager.acquireLock(h.id,`worker_${h.id}`)){this.logger.warn(`Skipping account ${h.id} because lock was not acquired.`);continue}let b,m=(h.platform||"zalo").toLowerCase(),M=m==="web"||m.includes("zalo")?"zalo":m;M==="zalo"?b=new O3(h.id,h.sessionData):M==="facebook"?b=new lT(h.id,h.sessionData):M==="telegram"?b=new VT(h.id,h.sessionData):M==="whatsapp"&&(b=new uI(h.id,h.sessionData)),b&&(this.engine.registerRunner(b),await b.start(),this.engine.registerAccount({id:h.id,platform:M,accountName:h.accountName||h.id,status:"active",nightWorkerEnabled:!0}),p++)}r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,message:"Sessions handed over successfully",activatedCount:p,timestamp:Date.now()}));return}if(a==="POST"&&n==="/api/v1/sentinel/reclaim"){let i=await this.readJsonBody(t),{deviceId:s}=i||{};this.logger.info(`[Reclaim] Master device ${s||"desktop"} reclaiming all active sessions. Stopping cloud runners...`);let c=this.engine.channelRunnerRegistry.getCount();await this.engine.channelRunnerRegistry.stopAll(),this.lockManager.releaseAllForOwner("worker"),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,reclaimedCount:c,timestamp:Date.now()}));return}if(n==="/api/v1/sentinel/night-config"){if(a==="POST"){let i=await this.readJsonBody(t);i&&(this.engine.automationEngine.configure(i),this.logger.info(`[NightConfig] Updated 24/7 AI config dynamically: provider=${i.provider||"gemini"}, model=${i.model||"default"}`)),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,config:this.engine.automationEngine.getAiConfig()}));return}else if(a==="GET"){r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,config:this.engine.automationEngine.getAiConfig()}));return}}if(a==="GET"&&n==="/api/v1/sync/delta"){let i=o.searchParams.get("accountId")||void 0,s=parseInt(o.searchParams.get("since")||"0",10),c=this.deltaQueue.getDeltas(i,s);this.logger.info(`[DeltaSync] Serving ${c.length} night messages (since: ${s}, account: ${i||"all"})`),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,messages:c,count:c.length,syncedTimestamp:Date.now()}));return}r.writeHead(404,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Endpoint not found"}))}readJsonBody(t){return new Promise(r=>{let o="";t.on("data",n=>{o+=n}),t.on("end",()=>{try{r(JSON.parse(o))}catch{r({})}})})}};var nV=ke(go());var pI=require("child_process"),DSt=ke(go()),eV=class e{logger;timer;isUpdating=!1;constructor(t){this.logger=t||(0,DSt.createLogger)("WorkerAutoUpdater")}static isNewerVersion(t,r){let o=p=>p.replace(/^v/,"").trim().split(".").map(h=>parseInt(h,10)||0),[n=0,a=0,i=0]=o(t),[s=0,c=0,l=0]=o(r);return n>s||n===s&&a>c||n===s&&a===c&&i>l}async fetchLatestVersion(){let t="@softtynet/zplus-worker";try{let r=new AbortController,o=setTimeout(()=>r.abort(),5e3),n=await fetch(`https://registry.npmjs.org/${t}/latest`,{signal:r.signal,headers:{Accept:"application/json"}});if(clearTimeout(o),n.ok){let a=await n.json();if(a?.version)return String(a.version).trim()}}catch{}try{return(0,pI.execSync)(`npm view ${t} version`,{encoding:"utf-8",timeout:8e3,stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}async checkUpdate(t){let r=await this.fetchLatestVersion();return r?{hasUpdate:e.isNewerVersion(r,t),latestVersion:r}:{hasUpdate:!1,latestVersion:t}}async performUpdateAndRestart(t){if(this.isUpdating)return this.logger.warn("C\u1EADp nh\u1EADt \u0111ang di\u1EC5n ra, b\u1ECF qua y\xEAu c\u1EA7u tr\xF9ng l\u1EB7p."),!1;this.isUpdating=!0;let r=t?`@softtynet/zplus-worker@${t}`:"@softtynet/zplus-worker@latest";this.logger.info(`\u{1F680} [AutoUpdater] B\u1EAFt \u0111\u1EA7u t\u1EF1 \u0111\u1ED9ng n\xE2ng c\u1EA5p Worker l\xEAn ${r}...`);try{return(0,pI.execSync)(`npm install -g ${r}`,{stdio:"inherit",timeout:12e4}),this.logger.info(`\u2705 [AutoUpdater] \u0110\xE3 c\xE0i \u0111\u1EB7t th\xE0nh c\xF4ng ${r}!`),this.triggerRestart(),!0}catch(o){return this.isUpdating=!1,this.logger.error(`\u274C [AutoUpdater] N\xE2ng c\u1EA5p th\u1EA5t b\u1EA1i: ${o?.message||o}`),!1}}triggerRestart(){try{if((0,pI.execSync)("pm2 jlist",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:5e3}).includes("zplus-worker")){this.logger.info("\u{1F504} [AutoUpdater] \u0110ang ph\xE1t l\u1EC7nh kh\u1EDFi \u0111\u1ED9ng l\u1EA1i PM2 ti\u1EBFn tr\xECnh 'zplus-worker'..."),(0,pI.spawn)("pm2",["restart","zplus-worker"],{detached:!0,stdio:"ignore"}).unref(),setTimeout(()=>process.exit(0),1e3);return}}catch{}if(!!process.stdout.isTTY&&!process.env.PM2_HOME&&!process.env.pm_id&&!process.env.INVOCATION_ID){this.logger.warn("\u26A0\uFE0F [AutoUpdater] \u0110\xE3 t\u1EA3i phi\xEAn b\u1EA3n m\u1EDBi. V\xEC \u0111ang ch\u1EA1y Worker tr\u1EF1c ti\u1EBFp tr\xEAn Terminal (kh\xF4ng qua PM2), vui l\xF2ng nh\u1EA5n Ctrl+C v\xE0 ch\u1EA1y l\u1EA1i \u0111\u1EC3 n\u1EA1p m\xE3 m\u1EDBi."),this.isUpdating=!1;return}this.logger.info("\u{1F504} [AutoUpdater] Ti\u1EBFn tr\xECnh s\u1EBD tho\xE1t an to\xE0n (exit 0) \u0111\u1EC3 h\u1EC7 th\u1ED1ng t\u1EF1 kh\u1EDFi \u0111\u1ED9ng l\u1EA1i v\u1EDBi b\u1EA3n m\u1EDBi..."),setTimeout(()=>process.exit(0),1500)}startPeriodicAutoUpdate(t,r=3600*1e3){this.timer&&clearInterval(this.timer),setTimeout(()=>{this.runCheckCycle(t).catch(()=>{})},6e4),this.timer=setInterval(()=>{this.runCheckCycle(t).catch(()=>{})},r),this.logger.info(`\u23F0 [AutoUpdater] \u0110\xE3 k\xEDch ho\u1EA1t c\u01A1 ch\u1EBF t\u1EF1 \u0111\u1ED9ng c\u1EADp nh\u1EADt ng\u1EA7m (chu k\u1EF3: ${Math.round(r/6e4)} ph\xFAt).`)}stop(){this.timer&&(clearInterval(this.timer),this.timer=void 0)}async runCheckCycle(t){try{let{hasUpdate:r,latestVersion:o}=await this.checkUpdate(t);r&&(this.logger.info(`\u{1F514} [AutoUpdater] Ph\xE1t hi\u1EC7n phi\xEAn b\u1EA3n m\u1EDBi: v${o} (hi\u1EC7n t\u1EA1i: v${t}). \u0110ang t\u1EF1 \u0111\u1ED9ng n\xE2ng c\u1EA5p...`),await this.performUpdateAndRestart(o))}catch(r){this.logger.debug("Auto-update check cycle error:",r?.message)}}};var tV=class{constructor(t,r,o){this.config=t;this.engine=r;this.logger=o||(0,nV.createLogger)(`ClusterSentinel:${t.workerId}`),this.autoUpdater=new eV(this.logger)}logger;autoUpdater;isRunning=!1;pollTimer;heartbeatTimer;cachedPeerWorkers=[];lastPeerCheckTime=0;lastNightConfigUpdatedAt=0;lastNightConfigCheck=0;isSyncingAccounts=!1;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.appwriteProjectId||""};return this.config.appwriteSessionToken?t["X-Appwrite-Session"]=this.config.appwriteSessionToken:this.config.appwriteJwt?t["X-Appwrite-JWT"]=this.config.appwriteJwt:this.config.appwriteApiKey&&(t["X-Appwrite-Key"]=this.config.appwriteApiKey),t}isCloudConfigured(){return!!(this.config.appwriteEndpoint&&this.config.appwriteProjectId&&(this.config.appwriteApiKey||this.config.appwriteSessionToken||this.config.appwriteJwt))}async start(){if(this.isRunning)return;if(this.isRunning=!0,!this.isCloudConfigured()){this.logger.info("Appwrite Cloud credentials not fully configured. Running in standalone local mode.");return}this.logger.info(`\u{1F680} Initializing Team Cluster Sentinel for Team [${this.config.teamId}] (Worker: ${this.config.workerId}, Capacity: ${this.config.maxCapacity})`),await this.ensureTeamWorkersCollection(),await this.ensureClusterSettingsCollection(),await this.registerWorkerInstance(),this.heartbeatTimer=setInterval(()=>{this.pingWorkerHeartbeat().catch(r=>{this.logger.debug("Worker heartbeat ping error:",r?.message)})},15e3);let t=this.config.clusterPollIntervalMs||3e3;this.pollTimer=setInterval(()=>{this.syncTeamAccounts().catch(o=>{this.logger.debug("Cluster account sync error:",o?.message)});let r=Date.now();r-this.lastNightConfigCheck>3e4&&(this.lastNightConfigCheck=r,this.syncNightShiftConfig().catch(()=>{}))},t),this.syncTeamAccounts().catch(()=>{}),this.syncNightShiftConfig().catch(()=>{}),this.autoUpdater.startPeriodicAutoUpdate(this.config.version||Lp)}async stop(){this.isRunning=!1,this.autoUpdater.stop(),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=void 0),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0),this.isCloudConfigured()&&await this.markWorkerOffline(),this.logger.info("Cluster Sentinel stopped.")}async ensureTeamWorkersCollection(){if(this.config.appwriteApiKey)try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`${t}/databases/${r}/collections/team_workers`;if((await fetch(o,{method:"GET",headers:this.getHeaders()})).status===404&&(this.logger.info("Collection team_workers not found. Auto-provisioning via Admin API..."),(await fetch(`${t}/databases/${r}/collections`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({collectionId:"team_workers",name:"ZPlus Team Workers Cluster",permissions:['read("any")','create("any")','update("any")','delete("any")'],documentSecurity:!1})})).ok)){let i=[{type:"string",key:"worker_id",size:128,required:!0},{type:"string",key:"team_id",size:64,required:!0},{type:"string",key:"worker_name",size:128,required:!1,default:"Worker Node"},{type:"string",key:"status",size:32,required:!1,default:"online"},{type:"integer",key:"max_capacity",required:!1,default:50},{type:"integer",key:"current_load",required:!1,default:0},{type:"integer",key:"last_ping",required:!1,default:0}];for(let s of i){let c=`${t}/databases/${r}/collections/team_workers/attributes/${s.type}`,l={key:s.key,required:s.required};s.size&&(l.size=s.size),s.default!==void 0&&(l.default=s.default),await fetch(c,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(l)})}this.logger.info("\u2705 Auto-provisioned team_workers collection successfully.")}}catch(t){this.logger.debug("ensureTeamWorkersCollection notice:",t?.message)}}async ensureClusterSettingsCollection(){if(this.config.appwriteApiKey)try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`${t}/databases/${r}/collections/cluster_settings`;if((await fetch(o,{method:"GET",headers:this.getHeaders()})).status===404&&(this.logger.info("Collection cluster_settings not found. Auto-provisioning via Admin API..."),(await fetch(`${t}/databases/${r}/collections`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({collectionId:"cluster_settings",name:"ZPlus Cluster Settings",permissions:['read("any")','create("any")','update("any")','delete("any")'],documentSecurity:!1})})).ok)){let i=[{key:"team_id",size:64,required:!0},{key:"config_json",size:1e4,required:!0}];for(let c of i){let l=`${t}/databases/${r}/collections/cluster_settings/attributes/string`;await fetch(l,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({key:c.key,size:c.size,required:c.required})})}let s=`${t}/databases/${r}/collections/cluster_settings/attributes/integer`;await fetch(s,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({key:"updated_at",required:!1,default:0})}),this.logger.info("\u2705 Auto-provisioned cluster_settings collection successfully.")}}catch(t){this.logger.debug("ensureClusterSettingsCollection notice:",t?.message)}}async syncNightShiftConfig(){if(!(!this.isRunning||!this.isCloudConfigured()||!this.config.teamId))try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`night_cfg_${this.config.teamId}`.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/cluster_settings/documents/${o}`,a=await fetch(n,{method:"GET",headers:this.getHeaders()});if(!a.ok)return;let i=await a.json(),s=Number(i.updated_at||0);if(s>this.lastNightConfigUpdatedAt&&i.config_json)try{let c=JSON.parse(i.config_json);this.engine.automationEngine.configure(c),this.lastNightConfigUpdatedAt=s,this.logger.info(`\u{1F319} [ClusterSentinel] Synchronized latest Night AI config from Cloud DB (Provider: ${c.provider||"default"}, Enabled: ${c.enabled})`)}catch(c){this.logger.debug("Failed to parse night config JSON from Cloud DB:",c?.message)}}catch{}}async getActivePeerWorkers(){let t=Date.now();if(t-this.lastPeerCheckTime<15e3&&this.cachedPeerWorkers.length>0)return this.cachedPeerWorkers;try{let r=this.config.appwriteEndpoint,o=this.config.databaseId||"zplus_app",n=JSON.stringify({method:"equal",attribute:"team_id",values:[this.config.teamId]}),a=JSON.stringify({method:"limit",values:[25]}),i=`${r}/databases/${o}/collections/team_workers/documents?queries[]=${encodeURIComponent(n)}&queries[]=${encodeURIComponent(a)}`,s=await fetch(i,{method:"GET",headers:this.getHeaders()});if(s.ok){let c=await s.json(),l=Array.isArray(c?.documents)?c.documents:[];this.cachedPeerWorkers=l.filter(p=>p.worker_id!==this.config.workerId&&p.status==="online"&&t-Number(p.last_ping||0)<45e3).map(p=>({workerId:p.worker_id,currentLoad:Number(p.current_load||0),maxCapacity:Number(p.max_capacity||50),lastPing:Number(p.last_ping||0)})),this.lastPeerCheckTime=t}}catch{}return this.cachedPeerWorkers}async registerWorkerInstance(){try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=D6(),a=this.engine.channelRunnerRegistry.getCount(),i=a>this.config.maxCapacity,s=`${t}/databases/${r}/collections/team_workers/documents/${o}`,c={data:{worker_id:this.config.workerId,team_id:this.config.teamId,worker_name:this.config.workerName,version:this.config.version||Lp,max_capacity:this.config.maxCapacity,recommended_capacity:this.config.recommendedCapacity||this.config.maxCapacity,current_load:a,is_overloaded:i,system_specs:JSON.stringify(n),status:"online",last_ping:Date.now()}};if((await fetch(s,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify(c)})).status===404){let p=`${t}/databases/${r}/collections/team_workers/documents`,h=await fetch(p,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:o,permissions:['read("users")','update("users")','delete("users")'],...c})});if(!h.ok&&h.status===400){let y={data:{worker_id:this.config.workerId,team_id:this.config.teamId,worker_name:this.config.workerName,max_capacity:this.config.maxCapacity,current_load:a,status:"online",last_ping:Date.now()}};await fetch(p,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:o,permissions:['read("users")','update("users")','delete("users")'],...y})})}}this.logger.info(`\u2705 Worker registered in Team Cluster: ${this.config.workerId}`)}catch(t){this.logger.warn("Could not register in team_workers:",t?.message)}}async pingWorkerHeartbeat(){if(!(!this.isRunning||!this.isCloudConfigured()))try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/team_workers/documents/${o}`,a=D6(),i=this.engine.channelRunnerRegistry.getCount(),s=i>this.config.maxCapacity,c=await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_load:i,is_overloaded:s,system_specs:JSON.stringify(a),version:this.config.version||Lp,last_ping:Date.now(),status:"online"}})});if(c.ok)try{let h=await c.json()||{};h?.command==="UPGRADE"&&(this.logger.info("\u{1F4E1} [ClusterSentinel] Nh\u1EADn l\u1EC7nh UPGRADE t\u1EEB xa!"),this.autoUpdater.performUpdateAndRestart().catch(()=>{})),h?.max_capacity&&Number(h.max_capacity)!==this.config.maxCapacity&&(this.config.maxCapacity=Number(h.max_capacity),this.logger.info(`\u2699\uFE0F [ClusterSentinel] \u0110\xE3 c\u1EADp nh\u1EADt gi\u1EDBi h\u1EA1n t\u1EA3i t\u1EEB xa: ${this.config.maxCapacity}`))}catch{}c.status===404&&await this.registerWorkerInstance();let l=this.config.workerId.startsWith("worker_")?this.config.workerId:`worker_${this.config.workerId}`,p=this.engine.channelRunnerRegistry.getAll();for(let h of p)try{await this.engine.lockManager.renewLockRemote(h.accountId,l,6e4)}catch{}}catch{}}async markWorkerOffline(){try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/team_workers/documents/${o}`;await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{status:"offline",last_ping:Date.now()}})})}catch{}}async syncTeamAccounts(){if(!(!this.isRunning||!this.isCloudConfigured()||this.isSyncingAccounts)){this.isSyncingAccounts=!0;try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=Date.now(),n=this.config.maxCapacity,a=0,i=100,s=!0;for(;s&&this.isRunning;){let c=Array.from(new Set([this.config.teamId,"default"].filter(Boolean))),l=JSON.stringify({method:"equal",attribute:"team_id",values:c}),p=JSON.stringify({method:"limit",values:[i]}),h=JSON.stringify({method:"offset",values:[a]}),y=`${t}/databases/${r}/collections/channel_accounts/documents?queries[]=${encodeURIComponent(l)}&queries[]=${encodeURIComponent(p)}&queries[]=${encodeURIComponent(h)}`,b=await fetch(y,{method:"GET",headers:this.getHeaders()});if(!b.ok){let _=await b.text().catch(()=>"");this.logger.warn(`[ClusterSentinel] syncTeamAccounts error (status ${b.status}): ${_}`);break}let m=await b.json(),M=Array.isArray(m?.documents)?m.documents:[];M.length<i?s=!1:a+=i;for(let _ of M){let O=_.$id||_.id,S=(_.platform||"zalo").toLowerCase(),v=S==="web"||S.includes("zalo")?"zalo":S,T=_.owner_type,w=_.current_owner,P=_.status,C=Number(_.lock_expires_at||0),R=Number(_.last_heartbeat||0),N=!!this.engine.channelRunnerRegistry.get(v,O);if(!(_.nightWorkerEnabled===!0||_.night_worker_enabled===1||_.night_worker_enabled===!0)){N&&(this.logger.warn(`\u{1F6AB} [Unselected Account] T\xE0i kho\u1EA3n ${O} (${_.accountName||""}) kh\xF4ng \u0111\u01B0\u1EE3c ch\u1ECDn ch\u1EA1y Worker 24/7 (nightWorkerEnabled=false). Bu\u1ED9c ng\u1EAFt WSS ngay l\u1EADp t\u1EE9c...`),this.engine.channelRunnerRegistry.unregister(v,O),this.engine.unregisterAccount(O),this.engine.lockManager.releaseLock(O));continue}if(N&&(T==="desktop"||P==="active_desktop")){this.logger.info(`\u26A1 Master Preemption: Desktop reclaimed account ${O}. Stopping worker runner...`),this.engine.channelRunnerRegistry.unregister(v,O),this.engine.unregisterAccount(O),this.engine.lockManager.releaseLock(O);continue}let k=this.config.workerId.startsWith("worker_")?this.config.workerId:`worker_${this.config.workerId}`,K=T==="worker"&&w===k,U=T==="desktop"&&o-R>6e4,q=T==="worker"&&C<o;if((P==="needs_worker"||K||U&&C<o||q)&&!N){let ee=this.engine.channelRunnerRegistry.getCount(),Ae=ee>=n;if(!K&&(Ae||ee/n>.8)){let de=(await this.getActivePeerWorkers()).find(Oe=>Oe.currentLoad/Oe.maxCapacity<ee/n-.25);if(de){this.logger.debug(`[Least-Loaded Yield] Nh\u01B0\u1EDDng t\xE0i kho\u1EA3n ${O} cho worker r\u1EA3nh h\u01A1n: ${de.workerId} (T\u1EA3i peer: ${de.currentLoad}/${de.maxCapacity}, T\u1EA3i hi\u1EC7n t\u1EA1i: ${ee}/${n})`);continue}}if(Ae){let se=D6();this.logger.warn(`\u26A0\uFE0F [Server Spec Capacity Alert] Worker ${this.config.workerId} hi\u1EC7n \u0111ang m\u1EDF ${ee+1}/${n} k\u1EBFt n\u1ED1i WSS. \u0110\xE3 v\u01B0\u1EE3t ng\u01B0\u1EE1ng khuy\u1EBFn ngh\u1ECB theo c\u1EA5u h\xECnh m\xE1y ch\u1EE7 (${Math.round(se.totalMemMb/1024)}GB RAM, ${se.cpuCount} CPUs, ${se.freeMemMb}MB Free). Theo ch\xEDnh s\xE1ch trao quy\u1EC1n quy\u1EBFt \u0111\u1ECBnh cho kh\xE1ch h\xE0ng, Worker v\u1EABn ti\u1EBFp t\u1EE5c k\u1EBFt n\u1ED1i WSS cho t\xE0i kho\u1EA3n ${O}.`)}if(await this.engine.lockManager.acquireLockRemote(O,k,6e4)){let se=K?"Resumed previous session":q?"Failover takeover (previous worker died)":Ae?"Over-capacity active takeover (per customer policy)":"Active takeover";this.logger.info(`\u2705 Cluster takeover: [${se}] Claimed account ${O} for team ${this.config.teamId}`),await this.spawnRunnerForAccount(_)}}}}}catch(t){this.logger.debug("syncTeamAccounts warning:",t?.message)}finally{this.isSyncingAccounts=!1}}}async spawnRunnerForAccount(t){let r=t.$id||t.id,o=(t.platform||"zalo").toLowerCase(),n=o==="web"||o.includes("zalo")?"zalo":o;if(this.engine.channelRunnerRegistry.get(n,r))return;if(!(t.nightWorkerEnabled===!0||t.night_worker_enabled===1||t.night_worker_enabled===!0)){this.logger.warn(`\u{1F6AB} [ClusterSentinel] T\u1EEB ch\u1ED1i kh\u1EDFi ch\u1EA1y WSS cho t\xE0i kho\u1EA3n unselected: ${r}`);return}let i={};if(t.authSession){let c=Array.from(new Set([this.config.teamId,t.team_id,t.teamId,"6a842e9400304c01746a","default"].filter(Boolean)));i=nV.CloudCrypto.parseCloudSession(t.authSession,this.config.teamId,c)||{}}let s;if(n==="zalo"?s=new O3(r,i):n==="facebook"?s=new lT(r,i):n==="telegram"?s=new VT(r,i):n==="whatsapp"&&(s=new uI(r,i)),s){this.engine.registerRunner(s),await s.start();let c=s.getStatus();this.engine.registerAccount({id:r,platform:n,accountName:t.accountName||r,status:c,nightWorkerEnabled:!0}),this.logger.info(`\u2705 Runner registered for ${n} account ${r} [status: ${c}]`)}}};var WSt=ke(go());var LSt=ke(go()),iV=class{constructor(t,r){this.config=t;this.logger=r||(0,LSt.createLogger)("AppwriteDbDriver"),this.databaseId=t.databaseId||"zplus_app"}logger;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async getDocument(t,r){try{let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${r}`,n=await fetch(o,{method:"GET",headers:this.getHeaders()});if(!n.ok){if(n.status===404)return null;throw new Error(`Failed to get document: HTTP ${n.status}`)}return await n.json()}catch(o){return this.logger.debug(`getDocument error for ${t}/${r}:`,o?.message),null}}async createDocument(t,r,o){let n=r.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents`,i=await fetch(a,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:n,data:o})});if(!i.ok){let s=await i.text();throw new Error(`Failed to create document: HTTP ${i.status} - ${s}`)}return await i.json()}async updateDocument(t,r,o){let n=r.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${n}`,i=await fetch(a,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:o})});if(!i.ok){let s=await i.text();throw new Error(`Failed to update document: HTTP ${i.status} - ${s}`)}return await i.json()}async upsertDocument(t,r,o){try{return await this.updateDocument(t,r,o)}catch(n){if(String(n?.message||"").includes("404"))return await this.createDocument(t,r,o);throw n}}async queryDocuments(t,r){try{let o=[];if(r.filters&&r.filters.length>0)for(let c of r.filters)c.operator==="eq"?o.push(JSON.stringify({method:"equal",attribute:c.field,values:Array.isArray(c.value)?c.value:[c.value]})):c.operator==="neq"?o.push(JSON.stringify({method:"notEqual",attribute:c.field,values:Array.isArray(c.value)?c.value:[c.value]})):c.operator==="gt"?o.push(JSON.stringify({method:"greaterThan",attribute:c.field,values:[c.value]})):c.operator==="gte"?o.push(JSON.stringify({method:"greaterThanEqual",attribute:c.field,values:[c.value]})):c.operator==="lt"?o.push(JSON.stringify({method:"lessThan",attribute:c.field,values:[c.value]})):c.operator==="lte"?o.push(JSON.stringify({method:"lessThanEqual",attribute:c.field,values:[c.value]})):c.operator==="in"&&Array.isArray(c.value)&&o.push(JSON.stringify({method:"equal",attribute:c.field,values:c.value}));r.limit&&o.push(JSON.stringify({method:"limit",values:[r.limit]})),r.offset&&o.push(JSON.stringify({method:"offset",values:[r.offset]})),r.orderBy&&o.push(JSON.stringify({method:r.orderBy.direction==="desc"?"orderDesc":"orderAsc",attribute:r.orderBy.field}));let n=o.map(c=>`queries[]=${encodeURIComponent(c)}`).join("&"),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents${n?`?${n}`:""}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return[];let s=await i.json();return Array.isArray(s?.documents)?s.documents:[]}catch(o){return this.logger.debug(`queryDocuments error in ${t}:`,o?.message),[]}}async deleteDocument(t,r){try{let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${r}`;return(await fetch(o,{method:"DELETE",headers:this.getHeaders()})).ok}catch{return!1}}};var qSt=ke(go()),rV=class{constructor(t,r){this.config=t;this.logger=r||(0,qSt.createLogger)("AppwriteLockDriver"),this.collectionId=t.collectionId||"channel_accounts",this.databaseId=t.databaseId||"zplus_app"}logger;collectionId;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async acquireLock(t,r,o){let n=Date.now();try{let a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return!1;let s=await i.json(),c=s.current_owner,l=Number(s.lock_expires_at||0);if(c&&c!==r&&l>n)return!1;let p=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;if((await fetch(p,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_owner:r,owner_type:r.startsWith("worker")?"worker":"desktop",lock_expires_at:n+o,last_heartbeat:n,status:r.startsWith("worker")?"active_worker":"active_desktop"}})})).ok){await new Promise(b=>setTimeout(b,30+Math.floor(Math.random()*40)));let y=await fetch(a,{method:"GET",headers:this.getHeaders()});if(y.ok&&(await y.json()).current_owner===r)return!0}return!1}catch(a){return this.logger.debug("acquireLock error:",a?.message),!1}}async releaseLock(t,r){try{if(r){let a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(i.ok){let s=await i.json();if(s.current_owner&&s.current_owner!==r)return!1}}let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;return(await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_owner:null,owner_type:"none",lock_expires_at:0,status:"offline"}})})).ok}catch{return!1}}async renewLock(t,r,o){try{let n=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;return(await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{lock_expires_at:Date.now()+o,last_heartbeat:Date.now()}})})).ok}catch{return!1}}async getLock(t){try{let r=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,o=await fetch(r,{method:"GET",headers:this.getHeaders()});if(!o.ok)return null;let n=await o.json();return{resourceId:t,ownerId:n.current_owner||"",ownerType:n.owner_type,expiresAt:Number(n.lock_expires_at||0),lastHeartbeat:Number(n.last_heartbeat||0)}}catch{return null}}};var BSt=ke(go()),oV=class{constructor(t,r){this.config=t;this.logger=r||(0,BSt.createLogger)("AppwriteCoordinator"),this.databaseId=t.databaseId||"zplus_app"}logger;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async registerNode(t){try{let r=t.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${r}`,n={data:{worker_id:t.workerId,team_id:t.teamId,worker_name:t.workerName,max_capacity:t.maxCapacity,recommended_capacity:t.recommendedCapacity||t.maxCapacity,current_load:t.currentLoad,is_overloaded:t.isOverloaded??!1,system_specs:t.systemSpecs?JSON.stringify(t.systemSpecs):void 0,status:t.status,last_ping:Date.now()}};if((await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify(n)})).status===404){let i=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents`;await fetch(i,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:r,...n})})}}catch(r){this.logger.warn("registerNode warning:",r?.message)}}async pingHeartbeat(t,r){try{let o=t.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${o}`;await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_load:r.currentLoad,is_overloaded:r.isOverloaded??!1,system_specs:r.systemSpecs?JSON.stringify(r.systemSpecs):void 0,last_ping:r.lastPing,status:r.status||"online"}})})}catch{}}async fetchPendingAccounts(t,r=100,o=0){try{let n=[`queries[]=${encodeURIComponent(JSON.stringify({method:"equal",attribute:"team_id",values:[t]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"limit",values:[r]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"offset",values:[o]}))}`].join("&"),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/channel_accounts/documents?${n}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return[];let s=await i.json();return Array.isArray(s?.documents)?s.documents:[]}catch(n){return this.logger.debug("fetchPendingAccounts error:",n?.message),[]}}async fetchActiveNodes(t){try{let r=[`queries[]=${encodeURIComponent(JSON.stringify({method:"equal",attribute:"team_id",values:[t]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"limit",values:[50]}))}`].join("&"),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents?${r}`,n=await fetch(o,{method:"GET",headers:this.getHeaders()});if(!n.ok)return[];let a=await n.json();return(Array.isArray(a?.documents)?a.documents:[]).map(s=>({workerId:s.worker_id||s.$id,teamId:s.team_id,workerName:s.worker_name||"",maxCapacity:Number(s.max_capacity||50),currentLoad:Number(s.current_load||0),status:s.status||"online",lastPing:Number(s.last_ping||0),isOverloaded:!!s.is_overloaded,recommendedCapacity:Number(s.recommended_capacity||s.max_capacity||50),systemSpecs:s.system_specs?typeof s.system_specs=="string"?JSON.parse(s.system_specs):s.system_specs:void 0}))}catch(r){return this.logger.debug("fetchActiveNodes error:",r?.message),[]}}async markNodeOffline(t){try{let r=t.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${r}`;await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{status:"offline",last_ping:Date.now()}})})}catch{}}};var USt=ke(go()),aV=class{constructor(t,r){this.config=t;this.logger=r||(0,USt.createLogger)("AppwriteAuthDriver")}logger;async verifySessionToken(t){try{let r=`${this.config.endpoint}/account`,o=await fetch(r,{method:"GET",headers:{"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId,"X-Appwrite-Session":t}});if(!o.ok)return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:`Phi\xEAn \u0111\u0103ng nh\u1EADp kh\xF4ng h\u1EE3p l\u1EC7 (HTTP ${o.status}).`};let n=await o.json(),a=n.$id||n.id||"",i=n.name||"Ng\u01B0\u1EDDi d\xF9ng ZPlus",s=n.email||"",c=n.prefs||{},l=c.entitlements||{},p=!!(l.isPremium??c.isPremium??c.plan==="enterprise"),h=!!(l.isOwner??c.isOwner??!0),y=c.teamId||l.teamId||"default";return{allowed:p||h,userId:a,userName:i,email:s,teamId:y,isOwner:h,isPremium:p,reason:p||h?"H\u1EE3p l\u1EC7":"Y\xEAu c\u1EA7u quy\u1EC1n Enterprise \u0111\u1EC3 ch\u1EA1y Worker 24/7."}}catch(r){return this.logger.error("verifySessionToken error:",r),{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:r?.message||"L\u1ED7i k\u1EBFt n\u1ED1i x\xE1c th\u1EF1c."}}}async checkEntitlements(t){return this.config.sessionToken?this.verifySessionToken(this.config.sessionToken):{allowed:!0,userId:t,userName:"Worker Node",email:"",teamId:"default",isOwner:!0,isPremium:!0}}};var sV=class{constructor(t,r){this.config=t;this.logger=r||(0,WSt.createLogger)("AppwriteCloudAdapter");let o={endpoint:t.cloudEndpoint||t.appwriteEndpoint||"https://api.softty.net/v1",projectId:t.cloudProjectId||t.appwriteProjectId||"699cfc3100136099c1c1",databaseId:t.cloudDatabaseId||t.databaseId||"zplus_app",sessionToken:t.cloudSessionToken||t.appwriteSessionToken,jwt:t.cloudJwt||t.appwriteJwt,apiKey:t.cloudApiKey||t.appwriteApiKey};this.database=new iV(o,this.logger),this.lockStorage=new rV(o,this.logger),this.coordinator=new oV(o,this.logger),this.auth=new aV(o,this.logger)}providerName="appwrite";database;lockStorage;coordinator;auth;logger;async start(){this.logger.info("\u2705 Appwrite Cloud Adapter initialized.")}async stop(){this.logger.info("Appwrite Cloud Adapter stopped.")}};var FSt=ke(go()),cV=class{constructor(t,r){this.config=t;this.logger=r||(0,FSt.createLogger)("CustomApiAdapter");let o=t.cloudEndpoint||"https://api.softty.net/custom/v1",a={"Content-Type":"application/json",Authorization:`Bearer ${t.cloudSessionToken||t.cloudApiKey||""}`,"X-Tenant-ID":t.teamId||"default"};this.database={async getDocument(i,s){try{let c=await fetch(`${o}/data/${i}/${s}`,{headers:a});return c.ok?await c.json():null}catch{return null}},async createDocument(i,s,c){return await(await fetch(`${o}/data/${i}`,{method:"POST",headers:a,body:JSON.stringify({id:s,...c})})).json()},async updateDocument(i,s,c){return await(await fetch(`${o}/data/${i}/${s}`,{method:"PATCH",headers:a,body:JSON.stringify(c)})).json()},async upsertDocument(i,s,c){return await(await fetch(`${o}/data/${i}/${s}/upsert`,{method:"POST",headers:a,body:JSON.stringify(c)})).json()},async queryDocuments(i,s){try{let c=await fetch(`${o}/data/${i}/query`,{method:"POST",headers:a,body:JSON.stringify(s)});if(!c.ok)return[];let l=await c.json();return Array.isArray(l?.items)?l.items:[]}catch{return[]}},async deleteDocument(i,s){try{return(await fetch(`${o}/data/${i}/${s}`,{method:"DELETE",headers:a})).ok}catch{return!1}}},this.lockStorage={async acquireLock(i,s,c){try{let l=await fetch(`${o}/locks/acquire`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s,ttlMs:c})});return l.ok?!!(await l.json())?.acquired:!1}catch{return!1}},async releaseLock(i,s){try{return(await fetch(`${o}/locks/release`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s})})).ok}catch{return!1}},async renewLock(i,s,c){try{return(await fetch(`${o}/locks/renew`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s,ttlMs:c})})).ok}catch{return!1}},async getLock(i){try{let s=await fetch(`${o}/locks/${i}`,{headers:a});return s.ok?await s.json():null}catch{return null}}},this.coordinator={async registerNode(i){try{await fetch(`${o}/cluster/nodes/register`,{method:"POST",headers:a,body:JSON.stringify(i)})}catch{}},async pingHeartbeat(i,s){try{await fetch(`${o}/cluster/nodes/${i}/heartbeat`,{method:"POST",headers:a,body:JSON.stringify(s)})}catch{}},async fetchPendingAccounts(i,s=100,c=0){try{let l=await fetch(`${o}/cluster/accounts/pending?teamId=${i}&limit=${s}&offset=${c}`,{headers:a});if(!l.ok)return[];let p=await l.json();return Array.isArray(p?.accounts)?p.accounts:[]}catch{return[]}},async markNodeOffline(i){try{await fetch(`${o}/cluster/nodes/${i}/offline`,{method:"POST",headers:a})}catch{}}},this.auth={async verifySessionToken(i){try{let s=await fetch(`${o}/auth/verify`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}});return s.ok?await s.json():{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:"Invalid session token"}}catch(s){return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:s?.message}}},async checkEntitlements(i){return{allowed:!0,userId:i,userName:"User",email:"",teamId:"default",isOwner:!0,isPremium:!0}}}}providerName="custom-api";database;lockStorage;coordinator;auth;logger;async start(){this.logger.info("\u{1F50C} Custom API Cloud Adapter initialized.")}async stop(){this.logger.info("Custom API Cloud Adapter stopped.")}};var jSt=ke(go()),lV=class{providerName="in-memory";database;lockStorage;coordinator;auth;logger;tables=new Map;locks=new Map;nodes=new Map;constructor(t,r){this.logger=r||(0,jSt.createLogger)("InMemoryCloudAdapter");let o=n=>{let a=this.tables.get(n);return a||(a=new Map,this.tables.set(n,a)),a};this.database={async getDocument(n,a){return o(n).get(a)||null},async createDocument(n,a,i){return o(n).set(a,{$id:a,id:a,...i}),o(n).get(a)},async updateDocument(n,a,i){let c={...o(n).get(a)||{$id:a,id:a},...i};return o(n).set(a,c),c},async upsertDocument(n,a,i){return this.updateDocument(n,a,i)},async queryDocuments(n,a){let i=Array.from(o(n).values());if(a.filters)for(let s of a.filters)s.operator==="eq"&&(i=i.filter(c=>c[s.field]===s.value));return a.limit&&(i=i.slice(0,a.limit)),i},async deleteDocument(n,a){return o(n).delete(a)}},this.lockStorage={acquireLock:async(n,a,i)=>{let s=Date.now(),c=this.locks.get(n);return c&&c.expiresAt>s&&c.ownerId!==a?!1:(this.locks.set(n,{resourceId:n,ownerId:a,ownerType:a.startsWith("worker")?"worker":"desktop",expiresAt:s+i,lastHeartbeat:s}),!0)},releaseLock:async(n,a)=>{let i=this.locks.get(n);return i?a&&i.ownerId!==a?!1:(this.locks.delete(n),!0):!0},renewLock:async(n,a,i)=>this.lockStorage.acquireLock(n,a,i),getLock:async n=>this.locks.get(n)||null},this.coordinator={registerNode:async n=>{this.nodes.set(n.workerId,n)},pingHeartbeat:async(n,a)=>{let i=this.nodes.get(n);i&&(i.currentLoad=a.currentLoad,i.lastPing=a.lastPing,i.status=a.status||"online")},fetchPendingAccounts:async n=>Array.from(o("channel_accounts").values()).filter(i=>i.team_id===n||i.teamId===n),markNodeOffline:async n=>{let a=this.nodes.get(n);a&&(a.status="offline")}},this.auth={verifySessionToken:async n=>({allowed:!!n,userId:"user_test_in_memory",userName:"Test User",email:"test@softty.net",teamId:"team_test",isOwner:!0,isPremium:!0}),checkEntitlements:async n=>({allowed:!0,userId:n,userName:"Test User",email:"test@softty.net",teamId:"team_test",isOwner:!0,isPremium:!0})}}async start(){this.logger.info("\u{1F9EA} In-Memory Cloud Adapter initialized.")}async stop(){this.logger.info("In-Memory Cloud Adapter stopped.")}};var GSt=ke(go()),uV=class{static create(t,r){let o=r||(0,GSt.createLogger)("CloudAdapterFactory");switch(t.cloudProvider||"appwrite"){case"custom-api":return o.info("Creating Custom API Cloud Adapter..."),new cV(t,o);case"in-memory":return o.info("Creating In-Memory Cloud Adapter..."),new lV(t,o);case"appwrite":default:return o.info("Creating Appwrite Cloud Adapter..."),new sV(t,o)}}};var pV=class{logger;channelRunnerRegistry;lockManager;deltaQueue;automationEngine;pushDispatcher;httpServer;clusterSentinel;cloudAdapter;status="idle";startTime=0;activeAccounts=new Map;messagesProcessed=0;heartbeatTimer;config;constructor(t){this.config={enableHttp:!1,teamId:"default",workerName:`Worker_${t.workerId}`,version:t.version||Lp,maxCapacity:50,clusterPollIntervalMs:5e3,heartbeatIntervalMs:15e3,logLevel:"info",...t,workerId:t.workerId},this.logger=(0,HSt.createLogger)(`WorkerEngine:${this.config.workerId}`),this.channelRunnerRegistry=new U6(this.logger),this.lockManager=new W6(6e4,this.logger),this.cloudAdapter=uV.create(this.config,this.logger),(this.config.cloudEndpoint||this.config.appwriteEndpoint)&&this.lockManager.setStorageProvider(this.cloudAdapter.lockStorage);let r=process.env.WORKER_DATA_DIR||FA.default.join(process.cwd(),".data"),o=FA.default.join(r,`pending_messages_${this.config.workerId}.json`);this.deltaQueue=new F6(1e4,this.logger,o);let n=!!(this.config.deepseekApiKey||this.config.geminiApiKey||this.config.openaiApiKey||this.config.anthropicApiKey||this.config.customAiApiKey);this.automationEngine=new j6(this.logger,{enabled:!1,apiKey:this.config.deepseekApiKey||this.config.geminiApiKey||this.config.openaiApiKey||this.config.anthropicApiKey||this.config.customAiApiKey,baseUrl:this.config.aiBaseUrl,provider:this.config.aiProvider,model:this.config.aiModel,systemPrompt:this.config.nightSystemPrompt,fallbackMessage:this.config.nightFallbackReply}),this.pushDispatcher=new G6(this.logger),this.clusterSentinel=new tV(this.config,this,this.logger),this.httpServer=this.config.enableHttp&&this.config.port?new ZH(this.config.port,this,this.lockManager,this.deltaQueue,this.logger):null,this.lockManager.onPreempt(async a=>{this.logger.info(`Preemption callback: stopping WSS for account ${a}...`);let i=this.channelRunnerRegistry.getAll();for(let s of i)s.accountId===a&&await s.stop()})}async start(){if(this.status==="running"){this.logger.warn("Worker is already running.");return}if(this.logger.info("Starting ZPlus 24/7 Headless Worker Engine..."),this.status="initializing",this.startTime=Date.now(),this.httpServer)try{await this.httpServer.start()}catch(r){this.logger.error("Failed to start Worker HTTP Ingress Server:",r)}else this.logger.info("\u{1F6E1}\uFE0F Ch\u1EBF \u0111\u1ED9 Zero-Port (Outbound-only) \u0111ang ho\u1EA1t \u0111\u1ED9ng: Worker kh\xF4ng m\u1EDF b\u1EA5t k\u1EF3 c\u1ED5ng l\u1EAFng nghe Inbound n\xE0o.");try{await this.cloudAdapter.start()}catch(r){this.logger.error("Failed to start Cloud Adapter:",r)}if(this.config.isStandby){this.status="idle",this.logger.warn(`\u23F8\uFE0F Worker is in STANDBY mode: ${this.config.standbyReason||"Unauthorized / Free Tier / Non-owner"}. Worker will NOT process accounts.`);return}this.heartbeatTimer=setInterval(()=>{this.sendHeartbeat()},this.config.heartbeatIntervalMs);try{await this.clusterSentinel.start()}catch(r){this.logger.error("Failed to start Cluster Sentinel:",r)}this.status="running",this.writeLocalHeartbeat();let t=this.config.enableHttp?`Port: ${this.config.port}`:"Zero-Port Headless Daemon";this.logger.info(`\u2705 ZPlus Worker Engine started successfully [ID: ${this.config.workerId}, Mode: ${t}]`)}async stop(){this.logger.info("Stopping ZPlus Worker Engine..."),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0),await this.clusterSentinel.stop(),await this.cloudAdapter.stop(),this.httpServer&&await this.httpServer.stop(),this.clearLocalHeartbeat(),await this.channelRunnerRegistry.stopAll(),this.status="stopped",this.logger.info("ZPlus Worker Engine stopped.")}registerRunner(t){t.onMessage?.(r=>{this.handleIncomingMessage(r,t)}),this.channelRunnerRegistry.register(t)}registerAccount(t){this.activeAccounts.set(t.id,t),this.logger.info(`Registered active account: ${t.accountName} [${t.platform}]`),this.writeLocalHeartbeat()}unregisterAccount(t){this.activeAccounts.delete(t),this.logger.info(`Unregistered account: ${t}`),this.writeLocalHeartbeat()}recordMessageProcessed(){this.messagesProcessed++}async handleIncomingMessage(t,r){this.recordMessageProcessed(),this.deltaQueue.enqueue(t),await this.pushMessageToCloud(t);try{let o=await this.automationEngine.evaluateIncomingMessage(t);if(o&&r){this.logger.info(`[NightAutoReply] Sending automated reply to thread ${t.threadId}: "${o}"`);let n={id:`reply_${Date.now()}`,platform:t.platform,conversationId:t.conversationId,threadId:t.threadId,accountId:t.accountId,senderId:t.accountId,senderName:"ZPlus Night Assistant",senderType:"agent",messageType:"text",content:o,timestamp:Date.now(),isSelf:!0,status:"sent"};await r.sendMessage(n)?(this.deltaQueue.enqueue(n),await this.pushMessageToCloud(n)):this.logger.warn(`[NightAutoReply] Socket delivery failed for thread ${t.threadId}. Skipped cloud push to prevent ghost message.`)}}catch(o){this.logger.warn("Auto-reply evaluation notice:",o)}try{await this.pushDispatcher.dispatchMessageAlert("fcm_token_mobile_owner",t)}catch(o){this.logger.debug("Push notification dispatch notice:",o)}}async pushMessageToCloud(t){if(!(!this.config.cloudEndpoint&&!this.config.appwriteEndpoint))try{let r=t.id.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=new Date().toISOString(),n=t.threadId||t.conversationId,a={conversation_id:t.conversationId||t.threadId,thread_id:n,account_id:t.accountId,sender_id:t.senderId,sender_name:(t.senderName||"").slice(0,255),senderType:t.senderType||"customer",messageType:t.messageType||t.type||"text",content:(t.content||t.text||"").slice(0,3e3),payload:typeof t.payload=="string"?t.payload.slice(0,3e3):JSON.stringify(t.payload||{}).slice(0,3e3),timestamp:t.timestamp||Date.now(),is_self:!!t.isSelf,is_recall:0,status:t.status||"sent",team_id:this.config.teamId||"",zplus_action:"INSERT",zplus_updated_at:o};if(await this.cloudAdapter.database.upsertDocument("messages",r,a),this.logger.info(`\u2601\uFE0F [CloudSync] Pushed message ${t.id} to Cloud DB via ${this.cloudAdapter.providerName}.`),n&&t.accountId)try{let i=`${n}:${t.accountId}`,c=`z_${KSt.default.createHash("md5").update(`conversations:${i}`).digest("hex")}`,l=(t.content||t.text||"").slice(0,500),p={thread_id:n,account_id:t.accountId,name:(t.senderName||n).slice(0,255),last_message:JSON.stringify({content:l,senderId:t.senderId,timestamp:t.timestamp||Date.now(),msgType:t.msgType||t.messageType||"chat.text"}),timestamp:t.timestamp||Date.now(),unread_count:1,peerId:t.senderId,peerName:(t.senderName||"").slice(0,255),platform:t.platform||"zalo",isPinned:!1,zplus_action:"UPDATE",zplus_updated_at:o};await this.cloudAdapter.database.upsertDocument("conversations",c,p)}catch(i){this.logger.debug(`[CloudSync] Note updating conversations on cloud: ${i?.message}`)}}catch(r){this.logger.error(`\u274C [CloudSync] Failed to push message ${t.id} to Cloud DB: ${r?.message||r}`)}}getMetrics(){let t=this.startTime>0?Math.floor((Date.now()-this.startTime)/1e3):0,r=process.memoryUsage().rss/(1024*1024);return{workerId:this.config.workerId,status:this.status,uptimeSeconds:t,activeAccountsCount:this.activeAccounts.size,totalMessagesProcessed:this.messagesProcessed,memoryUsageMb:Math.round(r*100)/100,lastHeartbeat:new Date().toISOString()}}sendHeartbeat(){let t=this.getMetrics();this.writeLocalHeartbeat(),this.logger.info(`\u{1F493} Heartbeat: status=${t.status}, accounts=${t.activeAccountsCount}, msgs=${t.totalMessagesProcessed}, pendingDelta=${this.deltaQueue.getCount()}, uptime=${t.uptimeSeconds}s`)}writeLocalHeartbeat(){try{let t=process.env.ZPLUS_HOME||FA.default.join(fme.default.homedir(),".zplus");fI.default.existsSync(t)||fI.default.mkdirSync(t,{recursive:!0});let r=FA.default.join(t,"worker_heartbeat.json"),o=this.getMetrics(),n={vendor:"Softtynet Co., Ltd.",product:"Softty ZPlus Omnichannel Platform",daemonTitle:"ZPlus 24/7 Headless Worker Daemon",version:this.config.version||"1.0.10",homepage:"https://softty.net",supportEmail:"support@softty.net",processTitle:process.title||"zplus-worker (Softtynet Co., Ltd.)",status:this.status,workerId:this.config.workerId,workerName:this.config.workerName,teamId:this.config.teamId,pid:process.pid,uptimeSeconds:o.uptimeSeconds,activeAccountsCount:o.activeAccountsCount,activeRunners:this.channelRunnerRegistry.getCount(),totalMessagesProcessed:o.totalMessagesProcessed,pendingDeltaMessages:this.deltaQueue.getCount(),memoryUsageMb:o.memoryUsageMb,isZeroPort:!this.config.enableHttp,port:this.config.enableHttp?this.config.port:null,lastPing:Date.now()};fI.default.writeFileSync(r,JSON.stringify(n,null,2))}catch{}}clearLocalHeartbeat(){try{let t=process.env.ZPLUS_HOME||FA.default.join(fme.default.homedir(),".zplus"),r=FA.default.join(t,"worker_heartbeat.json");if(fI.default.existsSync(r)){let o={status:"stopped",workerId:this.config.workerId,pid:process.pid,lastPing:Date.now()};fI.default.writeFileSync(r,JSON.stringify(o,null,2))}}catch{}}};var im=ke(require("fs")),fV=ke(require("path")),VSt=ke(require("os")),$St=ke(require("readline")),JSt=ke(go()),dV=class{logger;constructor(t){this.logger=t||(0,JSt.createLogger)("WorkerAuthManager")}getAuthFilePath(){let t=process.env.DATA_DIR||fV.default.join(VSt.default.homedir(),".zplus");return fV.default.join(t,"worker_auth.json")}loadStoredAuth(){try{let t=this.getAuthFilePath();if(!im.default.existsSync(t))return null;let r=im.default.readFileSync(t,"utf-8"),o=JSON.parse(r);return!o||!o.sessionToken?null:o}catch(t){return this.logger.debug("Failed to read worker_auth.json:",t?.message),null}}saveAuth(t){try{let r=this.getAuthFilePath(),o=fV.default.dirname(r);im.default.existsSync(o)||im.default.mkdirSync(o,{recursive:!0,mode:448}),im.default.writeFileSync(r,JSON.stringify(t,null,2),{encoding:"utf-8",mode:384});try{im.default.chmodSync(r,384)}catch{}this.logger.info(`\u2705 Phi\xEAn x\xE1c th\u1EF1c \u0111\xE3 \u0111\u01B0\u1EE3c l\u01B0u an to\xE0n t\u1EA1i: ${r} (Quy\u1EC1n 0600 - Ch\u1EC9 Owner)`)}catch(r){this.logger.error("Could not save worker_auth.json:",r)}}clearAuth(){try{let t=this.getAuthFilePath();im.default.existsSync(t)&&im.default.unlinkSync(t),this.logger.info("\u0110\xE3 x\xF3a phi\xEAn \u0111\u0103ng nh\u1EADp c\u1EE7a Worker.")}catch(t){this.logger.debug("clearAuth error:",t?.message)}}async verifyEntitlements(t,r="https://api.softty.net/v1",o="699cfc3100136099c1c1",n="default"){try{let a=`${r}/account`,i=await fetch(a,{method:"GET",headers:{"Content-Type":"application/json","X-Appwrite-Project":o,"X-Appwrite-Session":t}});if(!i.ok)return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:n,isOwner:!1,isPremium:!1,reason:`Phi\xEAn \u0111\u0103ng nh\u1EADp kh\xF4ng h\u1EE3p l\u1EC7 ho\u1EB7c \u0111\xE3 h\u1EBFt h\u1EA1n (HTTP ${i.status}).`};let s=await i.json(),c=s.$id||s.id||"",l=s.name||"Ng\u01B0\u1EDDi d\xF9ng ZPlus",p=s.email||"",h=Array.isArray(s.labels)?s.labels:[],y=s.prefs||{},m=!h.some(S=>S.toLowerCase()==="member")&&y.isOwner!==!1,M=h.some(S=>S.toLowerCase()==="free")||y.tier==="free",_=!M&&(y.isPremium===!0||h.some(S=>S.toLowerCase()==="premium"||S.toLowerCase()==="enterprise")),O=y.teamId||y.storage?.teamId||s.teamId||n;if((!O||O==="default")&&y.entitlements)try{let S=typeof y.entitlements=="string"?JSON.parse(y.entitlements):y.entitlements;S?.storage?.teamId&&(O=S.storage.teamId)}catch{}if((!O||O==="default")&&s.entitlements)try{let S=typeof s.entitlements=="string"?JSON.parse(s.entitlements):s.entitlements;S?.storage?.teamId&&(O=S.storage.teamId)}catch{}return M?{allowed:!1,userId:c,userName:l,email:p,teamId:O,isOwner:m,isPremium:!1,reason:`\u26A0\uFE0F T\xE0i kho\u1EA3n [${p}] \u0111ang \u1EDF G\xF3i Mi\u1EC5n Ph\xED (Free Tier). G\xF3i n\xE0y kh\xF4ng h\u1ED7 tr\u1EE3 c\u1EE5m Worker 24/7 (Y\xEAu c\u1EA7u g\xF3i Team Enterprise).`}:m?{allowed:!0,userId:c,userName:l,email:p,teamId:O,isOwner:!0,isPremium:!0,reason:`\u2705 X\xE1c th\u1EF1c th\xE0nh c\xF4ng: Tr\u01B0\u1EDFng nh\xF3m [${l}] (${p}) - G\xF3i Doanh Nghi\u1EC7p Active.`}:{allowed:!1,userId:c,userName:l,email:p,teamId:O,isOwner:!1,isPremium:_,reason:`\u26A0\uFE0F T\xE0i kho\u1EA3n [${p}] l\xE0 Th\xE0nh vi\xEAn (Member). \u0110\u1EC3 b\u1EA3o v\u1EC7 d\u1EEF li\u1EC7u c\xF4ng ty, ch\u1EC9 Tr\u01B0\u1EDFng nh\xF3m (Team Owner) m\u1EDBi c\xF3 quy\u1EC1n k\xEDch ho\u1EA1t c\u1EE5m Worker cho Team.`}}catch(a){return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:n,isOwner:!1,isPremium:!1,reason:`L\u1ED7i k\u1EBFt n\u1ED1i ki\u1EC3m tra quy\u1EC1n h\u1EA1n: ${a?.message}`}}}async loginWithCredentials(t,r,o="https://api.softty.net/v1",n="699cfc3100136099c1c1"){let a=t?.trim(),i=r;if(!a||!i){console.log(`
|
|
279
|
+
`)}),t.onLoad(()=>{this._store=this._driver.db.prepare("insert or replace into message_refs (peer_id, chat_id, msg_id) values (?, ?, ?)"),this._getByPeer=this._driver.db.prepare("select chat_id, msg_id from message_refs where peer_id = ?"),this._del=this._driver.db.prepare("delete from message_refs where chat_id = ? and msg_id = ?"),this._delByPeer=this._driver.db.prepare("delete from message_refs where peer_id = ?"),this._delAll=this._driver.db.prepare("delete from message_refs")})}_store;store(t,r,o){this._store.run(t,r,o)}_getByPeer;getByPeer(t){let r=this._getByPeer.get(t);if(!r)return null;let o=r;return[o.chat_id,o.msg_id]}_del;delete(t,r){for(let o of r)this._driver._writeLater(this._del,[t,o])}_delByPeer;deleteByPeer(t){this._delByPeer.run(t)}_delAll;deleteAll(){this._delAll.run()}};var OC=class{constructor(t){this.driver=t,this.authKeys=new Uj(this.driver),this.kv=new Wj(this.driver),this.refMessages=new jj(this.driver),this.peers=new Fj(this.driver)}authKeys;kv;refMessages;peers};async function cut(e,t,r,o){r instanceof Na&&ArrayBuffer.isView(r.location)&&await(0,sut.writeFile)(t,r.location);let n=(0,Gj.createWriteStream)(t);o?.abortSignal&&o.abortSignal.addEventListener("abort",()=>{e.log.debug("aborting file download %s - cleaning up",t),n.destroy(),(0,Gj.rmSync)(t)});for await(let a of Db(e,r,o))n.write(a);n.end()}var lut=typeof process<"u"&&"node"in process.versions?process.versions.node:null,uut=lut!=null?lut.split(".").map(Number):null;function put(e,t,r){if(!uut)return!0;let[o,n,a]=uut;return o>e?!0:o<e?!1:n>t?!0:n<t?!1:a>=r}var Kj=class{constructor(t,r={}){if(this.socket=t,t.pending)throw new Error("socket is not connected");if(t.destroyed)throw new Error("socket is destroyed");this.#t=Or.alloc(r.bufferSize),t.resume(),t.on("data",o=>{this.#t.writeSync(o.length).set(o),this.#n.notify()}),t.on("close",()=>{this.#e=new yf,this.#n.notify()}),t.on("error",o=>{this.#e=kc(o),this.#n.notify()})}#e=null;#t;#n=new uf;close(){this.socket?.destroy(),this.#e=new yf,this.#n.notify()}async read(t){if(this.#t.available>0){let o=Math.min(this.#t.available,t.length);return t.set(this.#t.readSync(o)),this.#t.reclaim(),o}if(this.#e!==null)throw this.#e;if(await this.#n.wait(),this.#e!==null)throw this.#e;let r=Math.min(this.#t.available,t.length);return t.set(this.#t.readSync(r)),this.#t.reclaim(),r}async write(t){if(this.#e)throw this.#e;return new Promise((r,o)=>{this.socket.write(t,n=>{n?o(n):r()})})}},Hj=class extends Kj{get localAddress(){return{address:Fr(this.socket.localAddress),port:Fr(this.socket.localPort)}}get remoteAddress(){return{address:Fr(this.socket.remoteAddress),port:Fr(this.socket.remotePort)}}setKeepAlive(t){this.socket.setKeepAlive(t)}setNoDelay(t){this.socket.setNoDelay(t)}},Vj=class extends Kj{get localAddress(){return{address:Fr(this.socket.localAddress),port:Fr(this.socket.localPort)}}get remoteAddress(){return{address:Fr(this.socket.remoteAddress),port:Fr(this.socket.remotePort)}}setKeepAlive(t){this.socket.setKeepAlive(t)}setNoDelay(t){this.socket.setNoDelay(t)}getAlpnProtocol(){let t=this.socket.alpnProtocol;return t===!1?null:t}};var Ype=require("node:net"),$j=require("node:tls");function fut(e){return new Promise((t,r)=>{e.on("error",r),e.once("connect",()=>{e.off("error",r),t()})})}var Z_=async({address:e,port:t})=>{let r=new Ype.Socket;return r.connect(t,e),await fut(r),new Hj(r)},Qpe=async e=>{let{address:t,port:r,sni:o,caCerts:n,alpnProtocols:a,extraOptions:i}=e,s=(0,$j.connect)({host:t,port:r,ca:n,ALPNProtocols:a,servername:o,...i});return await fut(s),new Vj(s)};function Jj(e){let t=new oc;e.on("end",()=>{for(;t.length>0;)t.popFront().resolve()}),e.on("error",o=>{for(;t.length>0;)t.popFront().reject(o)}),e.on("readable",()=>{t.popFront()?.resolve()});let r=Or.alloc();return{async read(o){if(e.readableEnded)return 0;if(r.available>0){let a=Math.min(r.available,o.length);return o.set(r.readSync(a)),a}let n=null;for(;n==null;)if(n=e.read(o.length),n===null){if(e.readableEnded)return 0;let a=new yo;t.pushBack(a),await a.promise}if(o.length<n.length){let a=n.length-o.length;r.writeSync(a).set(n.subarray(a)),n=n.subarray(0,o.length)}return o.set(n),n.length},close(){e.destroy()}}}var MC=require("node:stream");function Zpe(e){if(typeof MC.Readable.fromWeb=="function"&&put(18,13,0))return MC.Readable.fromWeb(e);let t=e.getReader(),r=!1,o=new MC.Readable({async read(){try{let{done:n,value:a}=await t.read();n?this.push(null):this.push(Buffer.from(a.buffer,a.byteOffset,a.byteLength))}catch(n){this.destroy(n)}},destroy(n,a){if(!r){t.cancel(n).catch(()=>{}).then(()=>{a(n)});return}a(n)}});return t.closed.then(()=>{r=!0}).catch(n=>{o.destroy(n)}),o}function dut(e,t,r){return Zpe(pC(e,t,r))}var $ut=ke(Vut(),1),r9=class extends gC{constructor(t=":memory:",r){super(),this.filename=t,this.params=r}_createDatabase(){let t=(0,$ut.default)(this.filename,{...this.params?.options,verbose:this._log.mgr.level>=5?this._log.verbose:void 0});return this.params?.disableWal||t.pragma("journal_mode = WAL"),t}};var AC=class extends OC{constructor(t=":memory:",r){super(new r9(t,r)),this.filename=t,this.params=r}};var _f=require("node:crypto"),t0t=require("node:fs/promises"),n0t=require("node:module"),s9=require("node:zlib");function Jut(e,t){let r=On.fromBytes(t),o=xxn(e,r),n=r/o,a,i;return o<n?(a=o,i=n):(a=n,i=o),[On.toBytes(a),On.toBytes(i)]}function xxn(e,t){if(t%2n===0n)return 2n;let r=HF(e,t-1n),o=HF(e,t-1n),n=HF(e,t-1n),a=1n,i=1n,s=1n,c,l;for(;a===1n;){l=r;for(let h=0;i>=h;h++)r=(r*r%t+o)%t;let p=0n;for(;p<i&&a===1n;){c=r;for(let h=0n;h<On.min2(n,i-p);h++)r=(r*r%t+o)%t,s=s*On.abs(l-r)%t;a=On.euclideanGcd(s,t),p=p+n}i<<=1n}if(a===t)do c=(c*c%t+o)%t,a=On.euclideanGcd(l-c,t);while(a<=1n);return a}var SC=class{factorizePQ(t){return Jut(this,t)}randomBytes(t){let r=zt.alloc(t);return this.randomFill(r),r}};var Xut=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var wu,kxn,Cxn,Nxn,ofe,afe,o9=null;function Dxn(){kxn=wu.libdeflate_alloc_compressor(6),Cxn=wu.libdeflate_alloc_decompressor(),Nxn=wu.__get_shared_out(),ofe=wu.__get_shared_key_buffer(),afe=wu.__get_shared_iv_buffer()}function Yut(){return(o9===null||o9.byteLength===0)&&(o9=new Uint8Array(wu.memory.buffer)),o9}function Qut(e){wu===void 0&&(e instanceof WebAssembly.Instance||(e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e)),e=new WebAssembly.Instance(e)),wu=e.exports,Dxn())}function Zut(e,t,r){let o=wu.__malloc(e.length+e.length),n=o,a=n+e.length,i=Yut();i.set(e,n),i.set(t,ofe),i.set(r,afe),wu.ige256_encrypt(n,e.length,a);let s=i.slice(a,a+e.length);return wu.__free(o),s}function e0t(e,t,r){let o=wu.__malloc(e.length+e.length),n=o,a=n+e.length,i=Yut();i.set(e,n),i.set(t,ofe),i.set(r,afe),wu.ige256_decrypt(n,e.length,a);let s=i.slice(a,a+e.length);return wu.__free(o),s}var Lxn={},a9=class extends SC{createAesCtr(t,r){let o=(0,_f.createCipheriv)(`aes-${t.length*8}-ctr`,t,r);return{process:a=>o.update(a)}}pbkdf2(t,r,o,n=64,a="sha512"){return new Promise((i,s)=>(0,_f.pbkdf2)(t,r,o,n,a,(c,l)=>c!==null?s(c):i(l)))}sha1(t){return(0,_f.createHash)("sha1").update(t).digest()}sha256(t){return(0,_f.createHash)("sha256").update(t).digest()}hmacSha256(t,r){return(0,_f.createHmac)("sha256",r).update(t).digest()}gzip(t,r){try{return(0,s9.deflateSync)(t,{maxOutputLength:r})}catch(o){if(o.code==="ERR_BUFFER_TOO_LARGE")return null;throw o}}gunzip(t){return(0,s9.gunzipSync)(t)}randomFill(t){(0,_f.randomFillSync)(t)}async initialize(){let t=(0,n0t.createRequire)(Lxn.url),r=Xut?"mtcute-simd.wasm":"mtcute.wasm",o=t.resolve(`@mtcute/wasm/${r}`),n=await(0,t0t.readFile)(o);Qut(n)}createAesIge(t,r){return{encrypt(o){return Zut(o,t,r)},decrypt(o){return e0t(o,t,r)}}}};var u9=ke(require("node:os"),1);var c9=require("node:fs"),i0t=require("node:fs/promises"),r0t=require("node:path"),o0t=require("node:stream");async function a0t(e){if(typeof e=="string"&&(e=(0,c9.createReadStream)(e)),e instanceof c9.ReadStream){let t=(0,r0t.basename)(e.path.toString()),r=await(0,i0t.stat)(e.path.toString()).then(o=>o.size);return{file:Jj(e),fileName:t,fileSize:r}}return e instanceof o0t.Readable?{file:Jj(e)}:null}var s0t=!1,c0t=!1,sfe=new Set,l0t=new Map;function l9(e,t,r){function o(){if(!c0t){c0t=!0;for(let n of sfe)n();for(let[n,a]of l0t)process.off(n,a);e&&process.kill(process.pid,t)}}process.on(r,o),l0t.set(r,o)}function u0t(e){return typeof process>"u"?()=>{}:(s0t||(s0t=!0,l9(!0,0,"beforeExit"),l9(!0,2,"SIGINT"),l9(!0,15,"SIGTERM"),l9(!1,15,"exit")),sfe.add(e),()=>{sfe.delete(e)})}var cfe=typeof process=="object"&&!!process.stdout?.isTTY,p0t=cfe?"%s [%s] [%s%s\x1B[0m] ":"%s [%s] [%s] ",f0t=cfe?["","\x1B[31mERR\x1B[0m","\x1B[33mWRN\x1B[0m","\x1B[34mINF\x1B[0m","\x1B[36mDBG\x1B[0m","\x1B[35mVRB\x1B[0m"]:["","ERR","WRN","INF","DBG","VRB"],qxn=[6,2,3,4,5,1].map(e=>`\x1B[3${e};1m`),d0t=cfe?(e,t,r,o,n)=>{console.log(p0t+o,new Date().toISOString(),f0t[t],qxn[e],r,...n)}:(e,t,r,o,n)=>{console.log(p0t+o,new Date().toISOString(),f0t[t],r,...n)};var nA=class{getDeviceModel(){return`Node.js/${process.version} (${u9.type()} ${u9.arch()})`}getDefaultLogLevel(){let t=Number.parseInt(process.env.MTCUTE_LOG_LEVEL??"");return Number.isNaN(t)?null:t}};nA.prototype.log=d0t;nA.prototype.beforeExit=u0t;nA.prototype.normalizeFile=a0t;var p9=class{connect(t){return Z_({address:t.ipAddress,port:t.port})}packetCodec(){return new Of}};var f9=class extends TT{constructor(t){super({crypto:new a9,transport:new p9,platform:new nA,...t,storage:typeof t.storage=="string"?new AC(t.storage):t.storage??new AC("client.session")})}},EC=class extends Me{constructor(t){if("client"in t){super(t);return}super({client:new f9(t),disableUpdates:t.disableUpdates,skipConversationUpdates:t.skipConversationUpdates,updates:t.updates})}_rl;input(t){return this._rl||(this._rl=(0,h0t.createInterface)({input:process.stdin,output:process.stdout})),new Promise(r=>this._rl?.question(t,r))}destroy(){return this._rl?.close(),super.destroy()}start(t={}){return t.botToken||(t.phone||(t.phone=()=>this.input("phone > ")),t.code||(t.code=()=>this.input("code > ")),t.password||(t.password=()=>this.input("2fa password > "))),super.start(t).then(r=>(this._rl&&(this._rl.close(),delete this._rl),r))}downloadToFile(t,r,o){return cut(this,t,r,o)}downloadAsNodeStream(t,r){return dut(this,t,r)}};var d9=class{constructor(t){this.proxy=t}async connect(t){let r;return this.proxy.tls?r=await Qpe({address:this.proxy.host,port:this.proxy.port,extraOptions:this.proxy.tlsOptions}):r=await Z_({address:this.proxy.host,port:this.proxy.port}),await s0e(r,r,this.proxy,{address:t.ipAddress,port:t.port}),r}packetCodec(){return new Of}},h9=class{constructor(t){this.proxy=t}async connect(t){let r=await Z_({address:this.proxy.host,port:this.proxy.port});return await u0e(r,r,this.proxy,{address:t.ipAddress,port:t.port}),r}packetCodec(){return new Of}},y9=class extends bC{async _connectTcp(t){return Z_(t)}},lfe=$pe({SocksProxyTcpTransport:h9,HttpProxyTcpTransport:d9,MtProxyTcpTransport:y9});var m9=class{accountId;platform="telegram";eventBus=new vd;status="disconnected";client=null;session=null;constructor(t){this.accountId=t}async initialize(t){this.session=t,this.status="connecting",this.eventBus.emit("session:status_changed","connecting");let{apiId:r,apiHash:o,phone:n,sessionString:a}=t.authData;if(!r||!o){this.status="disconnected";let i="Missing apiId or apiHash for Telegram login";throw this.eventBus.emit("session:status_changed","disconnected",i),new Error(i)}try{let i={apiId:Number(r),apiHash:String(o),storage:new mC};t.proxy&&(i.transport=lfe(t.proxy)),this.client=new EC(i),await this.client.start({session:a||void 0,phone:()=>{if(!n)throw new Error("Phone number required for Telegram login");return n},code:async()=>new Promise((c,l)=>{this.eventBus.emit("auth:otp_requested",p=>{p?c(p):l(new Error("OTP verification cancelled or empty"))})}),password:async()=>new Promise((c,l)=>{this.eventBus.emit("auth:password_requested",p=>{p?c(p):l(new Error("2FA password cancelled or empty"))})})});let s=await this.client.exportSession();t.authData.sessionString=s,this.setupListeners(),this.status="connected",this.eventBus.emit("session:status_changed","connected")}catch(i){throw this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",i.message||String(i)),i}}async disconnect(){if(this.client){try{await this.client.destroy()}catch{}this.client=null}this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected")}async sendMessage(t,r){if(!this.client)throw new Error("Telegram adapter not initialized or logged in");let o,n=r.quoteId?Number(r.quoteId):void 0,a=TC(t);try{if(r.type==="text")o=await this.client.sendText(a,r.text,{replyTo:n});else if(r.type==="image"||r.type==="file"){let i=r.type==="image"?"photo":"document",s=r.filePath?`file:${r.filePath}`:r.url||"";if(!s)throw new Error("Missing filePath or url for media attachment");o=await this.client.sendMedia(a,{type:i,file:s,caption:r.caption||""},{replyTo:n})}else throw new Error("Unsupported message payload type")}catch(i){throw this.handleApiError(i),i}return b9(o,this.accountId)}async getConversations(t=20){if(!this.client)throw new Error("Telegram adapter not initialized");try{let r=[],o=0;for await(let n of this.client.iterDialogs()){if(o>=t)break;let a;if(n.peer.photo)try{let s=await this.client.downloadAsBuffer(n.peer.photo.small);a=`data:image/jpeg;base64,${Buffer.from(s).toString("base64")}`}catch{}let i=Bxn(n.peer,a);i.unreadCount=n.unreadCount||0,n.lastMessage&&(i.lastMessage=b9(n.lastMessage,this.accountId)),r.push(i),o++}return r}catch(r){throw this.handleApiError(r),r}}async getMessageHistory(t,r=50,o){if(!this.client)throw new Error("Telegram adapter not initialized");let n=TC(t);try{let a=[],i={limit:r};o&&(i.offset={id:0,date:Math.floor(o/1e3)});let s=await this.client.getHistory(n,i);for(let c of s)a.push(b9(c,this.accountId));return a}catch(a){throw this.handleApiError(a),a}}async getCurrentUser(){if(!this.client)return null;try{let t=await this.client.getMe(),r;if(t.photo)try{let o=await this.client.downloadAsBuffer(t.photo.small);r=`data:image/jpeg;base64,${Buffer.from(o).toString("base64")}`}catch{}return y0t(t,r)}catch(t){throw this.handleApiError(t),t}}async getContactInfo(t){if(!this.client)throw new Error("Telegram adapter not initialized");let r=TC(t);try{let[o]=await this.client.getUsers(r);if(!o)return null;let n;if(o.photo)try{let a=await this.client.downloadAsBuffer(o.photo.small);n=`data:image/jpeg;base64,${Buffer.from(a).toString("base64")}`}catch{}return y0t(o,n)}catch(o){throw this.handleApiError(o),o}}async markAsRead(t){if(!this.client)throw new Error("Telegram adapter not initialized");let r=TC(t);try{await this.client.readHistory(r)}catch(o){this.handleApiError(o)}}async sendTyping(t,r){if(!this.client)throw new Error("Telegram adapter not initialized");let o=TC(t);try{r&&await this.client.sendTyping(o)}catch(n){this.handleApiError(n)}}getUnderlyingClient(){return this.client}handleApiError(t){if(!t)return;let r=String(t.message||t).toLowerCase();(r.includes("session_expired")||r.includes("user_deactivated")||r.includes("auth_key_unregistered")||r.includes("session has expired"))&&(this.status="disconnected",this.eventBus.emit("session:status_changed","disconnected",t.message||String(t)))}setupListeners(){this.client&&this.client.onNewMessage.add(t=>{try{let r=b9(t,this.accountId);this.eventBus.emit("message:received",r)}catch{}})}};function b9(e,t){let r=e.sender?String(e.sender.id):"0",o=e.sender&&(e.sender.displayName||e.sender.firstName)||"Telegram User",n="text",a;if(e.media){let s=e.media.type;s==="photo"?n="image":s==="video"?n="video":s==="audio"||s==="voice"?n="audio":s==="sticker"?n="sticker":s==="document"?n="file":n="other",t&&(a=`telegram-media://${t}/${e.chat.id}/${e.id}`)}let i=e.date instanceof Date?e.date.getTime():Number(e.date)*1e3;return{id:String(e.id),conversationId:String(e.chat.id),senderId:r,senderName:o,text:e.text||"",type:n,mediaUrl:a,timestamp:i,platform:"telegram",isFromMe:e.isOutgoing,metadata:{rawMedia:e.media}}}function Bxn(e,t){let r="direct",o=e.chatType||e.type||"";o==="group"||o==="supergroup"?r="group":o==="channel"&&(r="channel");let n=e.displayName||e.title||e.firstName||"Telegram Chat";return{id:String(e.id),name:n,type:r,avatarUrl:t,unreadCount:0,platform:"telegram",rawConversation:e}}function y0t(e,t){let r=e.displayName||e.firstName||"Telegram User";return{id:String(e.id),name:r,avatarUrl:t,platform:"telegram",phoneNumber:e.phoneNumber||void 0,rawContact:e}}function TC(e){return/^-?\d+$/.test(e)?Number(e):e}var VT=class{constructor(t,r,o,n){this.accountId=t;this.sessionData=r;this.proxyData=o;this.logger=n||(0,vC.createLogger)(`TelegramRunner:${t}`)}platform="telegram";status="offline";logger;messageHandler;adapter;onMessage(t){this.messageHandler=t}async start(){let t=this.proxyData?` via resident proxy ${this.proxyData.host||this.proxyData.ip||"configured"}`:" (direct)";this.logger.info(`Starting 24/7 headless Telegram runner for account ${this.accountId}${t}...`);let r=this.sessionData;if(this.sessionData?.encryptedSession?r=vC.CloudCrypto.parseCloudSession(this.sessionData.encryptedSession):typeof this.sessionData=="string"&&(r=vC.CloudCrypto.parseCloudSession(this.sessionData)),r?.apiId&&r?.apiHash)try{this.adapter=new m9(this.accountId),this.adapter.eventBus.on("message:received",n=>{this.receiveIncomingMessage(n)});let o;if(this.proxyData?.host&&this.proxyData?.port){let n=this.proxyData.username&&this.proxyData.password?`${this.proxyData.username}:${this.proxyData.password}@`:"";o=`${this.proxyData.protocol||"http"}://${n}${this.proxyData.host}:${this.proxyData.port}`}await this.adapter.initialize({accountId:this.accountId,platform:"telegram",status:"connecting",authData:{apiId:r.apiId,apiHash:r.apiHash,phone:r.phone,sessionString:r.sessionString},proxy:o}),this.logger.info(`Headless Telegram MTProto connected & listening for ${this.accountId}`)}catch(o){this.logger.warn(`Could not initialize live Telegram client: ${o?.message}. Runner active in standby mode.`)}else this.logger.debug("No direct Telegram credentials provided. Running in standby mode.");this.status="active"}async stop(){if(this.logger.info(`Stopping headless Telegram runner for account ${this.accountId}...`),this.adapter)try{await this.adapter.disconnect()}catch(t){this.logger.debug(`Error disconnecting Telegram adapter for ${this.accountId}:`,t?.message)}this.status="offline"}getStatus(){return this.status}async sendMessage(t){if(this.adapter)try{return await this.adapter.sendMessage(t.threadId||t.conversationId,{type:"text",text:t.content||""}),this.logger.info(`Headless Telegram runner sent message to thread ${t.threadId}`),!0}catch(r){return this.logger.warn(`Failed to send live Telegram message: ${r?.message}`),!1}return this.logger.info(`Headless Telegram runner (standby) recorded sending message ${t.id} to thread ${t.threadId}`),!0}receiveIncomingMessage(t){this.status==="active"&&(this.logger.info(`\u{1F4E9} [TelegramRunner:${this.accountId}] Received message ${t.id} from sender ${t.senderName||t.senderId}: "${(t.content||"").slice(0,60)}"`),this.messageHandler?.(t))}};var s6=ke(go()),uI=class{constructor(t,r,o,n){this.accountId=t;this.sessionData=r;this.proxyData=o;this.logger=n||(0,s6.createLogger)(`WhatsAppRunner:${t}`)}platform="whatsapp";status="offline";logger;messageHandler;adapter;onMessage(t){this.messageHandler=t}async start(){let t=this.proxyData?` via resident proxy ${this.proxyData.host||this.proxyData.ip||"configured"}`:" (direct)";this.logger.info(`Starting 24/7 headless WhatsApp runner for account ${this.accountId}${t}...`);let r=this.sessionData;if(this.sessionData?.encryptedSession?r=s6.CloudCrypto.parseCloudSession(this.sessionData.encryptedSession):typeof this.sessionData=="string"&&(r=s6.CloudCrypto.parseCloudSession(this.sessionData)),!!(r?.sessionPath||r?.creds||r?.keys||r?.authSession))try{let{WhatsAppAdapter:n}=await Promise.resolve().then(()=>(xSt(),RSt));this.adapter=new n(this.accountId),this.adapter.eventBus.on("message:received",i=>{this.receiveIncomingMessage(i)});let a;if(this.proxyData?.host&&this.proxyData?.port){let i=this.proxyData.username&&this.proxyData.password?`${this.proxyData.username}:${this.proxyData.password}@`:"";a=`${this.proxyData.protocol||"http"}://${i}${this.proxyData.host}:${this.proxyData.port}`}await this.adapter.initialize({accountId:this.accountId,platform:"whatsapp",status:"connecting",authData:{sessionPath:r.sessionPath,creds:r.creds,keys:r.keys},proxy:a}),this.logger.info(`Headless WhatsApp socket connected & listening for ${this.accountId}`)}catch(n){this.logger.warn(`Could not initialize live WhatsApp client: ${n?.message}. Runner active in standby mode.`)}else this.logger.debug("No direct WhatsApp credentials/session provided. Running in standby mode.");this.status="active"}async stop(){if(this.logger.info(`Stopping headless WhatsApp runner for account ${this.accountId}...`),this.adapter)try{await this.adapter.disconnect()}catch(t){this.logger.debug(`Error disconnecting WhatsApp adapter for ${this.accountId}:`,t?.message)}this.status="offline"}getStatus(){return this.status}async sendMessage(t){if(this.adapter&&this.status==="active")try{return await this.adapter.sendMessage(t.threadId||t.conversationId,{type:t.messageType==="image"?"image":"text",text:t.content}),!0}catch(r){return this.logger.warn(`Failed to send WhatsApp message via adapter for ${this.accountId}:`,r?.message),!1}return this.logger.info(`Headless WhatsApp runner sending message ${t.id} to thread ${t.threadId}`),!0}receiveIncomingMessage(t){this.status==="active"&&(this.logger.info(`\u{1F4E9} [WhatsAppRunner:${this.accountId}] Received message ${t.id} from sender ${t.senderName||t.senderId}: "${(t.content||"").slice(0,60)}"`),this.messageHandler?.(t))}};var ZH=class{constructor(t,r,o,n,a){this.port=t;this.engine=r;this.lockManager=o;this.deltaQueue=n;this.logger=a||(0,NSt.createLogger)("WorkerHttpServer")}logger;server=null;async start(){if(!this.server)return new Promise((t,r)=>{this.server=kSt.default.createServer((o,n)=>{this.handleRequest(o,n).catch(a=>{this.logger.error("Unhandled HTTP error:",a),n.headersSent||(n.writeHead(500,{"Content-Type":"application/json"}),n.end(JSON.stringify({error:"Internal Server Error"})))})}),this.server.listen(this.port,()=>{this.logger.info(`\u{1F680} Worker HTTP Server listening on port ${this.port}`),t()}),this.server.on("error",o=>{this.logger.error(`Worker HTTP Server error on port ${this.port}:`,o),r(o)})})}async stop(){if(this.server)return new Promise(t=>{this.server?.close(()=>{this.logger.info("Worker HTTP Server closed."),this.server=null,t()})})}async handleRequest(t,r){let o=new CSt.URL(t.url||"/",`http://${t.headers.host||"localhost"}`),n=o.pathname,a=(t.method||"GET").toUpperCase();if(r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),r.setHeader("Access-Control-Allow-Headers","Content-Type, X-Softty-User-Id, X-Desktop-Secret, Authorization"),a==="OPTIONS"){r.writeHead(204),r.end();return}if(a==="GET"&&n==="/health"){let i=this.engine.getMetrics();r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({status:"healthy",timestamp:Date.now(),pendingDeltaMessages:this.deltaQueue.getCount(),metrics:i}));return}if(n.startsWith("/api/v1/")){let i=this.engine.config.desktopSecret;if(i){let s=t.headers["x-desktop-secret"]||t.headers.authorization;if((typeof s=="string"&&s.startsWith("Bearer ")?s.slice(7):s)!==i){r.writeHead(401,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Unauthorized: Invalid or missing X-Desktop-Secret"}));return}}}if(a==="POST"&&n==="/api/v1/sentinel/handover"){let i=await this.readJsonBody(t),{deviceId:s,sessions:c,aiConfig:l}=i||{};if(l&&(this.engine.automationEngine.configure(l),this.logger.info(`[Handover] Configured 24/7 AI automation engine with provider: ${l.provider||"gemini"}, model: ${l.model||"default"}`)),!Array.isArray(c)){r.writeHead(400,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Invalid sessions array payload"}));return}this.logger.info(`[Handover] Received handover request from device ${s||"unknown"} with ${c.length} sessions.`);let p=0;for(let h of c){if(!h.id||!h.nightWorkerEnabled)continue;if(!this.lockManager.acquireLock(h.id,`worker_${h.id}`)){this.logger.warn(`Skipping account ${h.id} because lock was not acquired.`);continue}let b,m=(h.platform||"zalo").toLowerCase(),M=m==="web"||m.includes("zalo")?"zalo":m;M==="zalo"?b=new O3(h.id,h.sessionData):M==="facebook"?b=new lT(h.id,h.sessionData):M==="telegram"?b=new VT(h.id,h.sessionData):M==="whatsapp"&&(b=new uI(h.id,h.sessionData)),b&&(this.engine.registerRunner(b),await b.start(),this.engine.registerAccount({id:h.id,platform:M,accountName:h.accountName||h.id,status:"active",nightWorkerEnabled:!0}),p++)}r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,message:"Sessions handed over successfully",activatedCount:p,timestamp:Date.now()}));return}if(a==="POST"&&n==="/api/v1/sentinel/reclaim"){let i=await this.readJsonBody(t),{deviceId:s}=i||{};this.logger.info(`[Reclaim] Master device ${s||"desktop"} reclaiming all active sessions. Stopping cloud runners...`);let c=this.engine.channelRunnerRegistry.getCount();await this.engine.channelRunnerRegistry.stopAll(),this.lockManager.releaseAllForOwner("worker"),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,reclaimedCount:c,timestamp:Date.now()}));return}if(n==="/api/v1/sentinel/night-config"){if(a==="POST"){let i=await this.readJsonBody(t);i&&(this.engine.automationEngine.configure(i),this.logger.info(`[NightConfig] Updated 24/7 AI config dynamically: provider=${i.provider||"gemini"}, model=${i.model||"default"}`)),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,config:this.engine.automationEngine.getAiConfig()}));return}else if(a==="GET"){r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,config:this.engine.automationEngine.getAiConfig()}));return}}if(a==="GET"&&n==="/api/v1/sync/delta"){let i=o.searchParams.get("accountId")||void 0,s=parseInt(o.searchParams.get("since")||"0",10),c=this.deltaQueue.getDeltas(i,s);this.logger.info(`[DeltaSync] Serving ${c.length} night messages (since: ${s}, account: ${i||"all"})`),r.writeHead(200,{"Content-Type":"application/json"}),r.end(JSON.stringify({success:!0,messages:c,count:c.length,syncedTimestamp:Date.now()}));return}r.writeHead(404,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Endpoint not found"}))}readJsonBody(t){return new Promise(r=>{let o="";t.on("data",n=>{o+=n}),t.on("end",()=>{try{r(JSON.parse(o))}catch{r({})}})})}};var nV=ke(go());var pI=require("child_process"),DSt=ke(go()),eV=class e{logger;timer;isUpdating=!1;constructor(t){this.logger=t||(0,DSt.createLogger)("WorkerAutoUpdater")}static isNewerVersion(t,r){let o=p=>p.replace(/^v/,"").trim().split(".").map(h=>parseInt(h,10)||0),[n=0,a=0,i=0]=o(t),[s=0,c=0,l=0]=o(r);return n>s||n===s&&a>c||n===s&&a===c&&i>l}async fetchLatestVersion(){let t="@softtynet/zplus-worker";try{let r=new AbortController,o=setTimeout(()=>r.abort(),5e3),n=await fetch(`https://registry.npmjs.org/${t}/latest`,{signal:r.signal,headers:{Accept:"application/json"}});if(clearTimeout(o),n.ok){let a=await n.json();if(a?.version)return String(a.version).trim()}}catch{}try{return(0,pI.execSync)(`npm view ${t} version`,{encoding:"utf-8",timeout:8e3,stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}async checkUpdate(t){let r=await this.fetchLatestVersion();return r?{hasUpdate:e.isNewerVersion(r,t),latestVersion:r}:{hasUpdate:!1,latestVersion:t}}async performUpdateAndRestart(t){if(this.isUpdating)return this.logger.warn("C\u1EADp nh\u1EADt \u0111ang di\u1EC5n ra, b\u1ECF qua y\xEAu c\u1EA7u tr\xF9ng l\u1EB7p."),!1;this.isUpdating=!0;let r=t?`@softtynet/zplus-worker@${t}`:"@softtynet/zplus-worker@latest";this.logger.info(`\u{1F680} [AutoUpdater] B\u1EAFt \u0111\u1EA7u t\u1EF1 \u0111\u1ED9ng n\xE2ng c\u1EA5p Worker l\xEAn ${r}...`);try{return(0,pI.execSync)(`npm install -g ${r}`,{stdio:"inherit",timeout:12e4}),this.logger.info(`\u2705 [AutoUpdater] \u0110\xE3 c\xE0i \u0111\u1EB7t th\xE0nh c\xF4ng ${r}!`),this.triggerRestart(),!0}catch(o){return this.isUpdating=!1,this.logger.error(`\u274C [AutoUpdater] N\xE2ng c\u1EA5p th\u1EA5t b\u1EA1i: ${o?.message||o}`),!1}}triggerRestart(){try{if((0,pI.execSync)("pm2 jlist",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:5e3}).includes("zplus-worker")){this.logger.info("\u{1F504} [AutoUpdater] \u0110ang ph\xE1t l\u1EC7nh kh\u1EDFi \u0111\u1ED9ng l\u1EA1i PM2 ti\u1EBFn tr\xECnh 'zplus-worker'..."),(0,pI.spawn)("pm2",["restart","zplus-worker"],{detached:!0,stdio:"ignore"}).unref(),setTimeout(()=>process.exit(0),1e3);return}}catch{}if(!!process.stdout.isTTY&&!process.env.PM2_HOME&&!process.env.pm_id&&!process.env.INVOCATION_ID){this.logger.warn("\u26A0\uFE0F [AutoUpdater] \u0110\xE3 t\u1EA3i phi\xEAn b\u1EA3n m\u1EDBi. V\xEC \u0111ang ch\u1EA1y Worker tr\u1EF1c ti\u1EBFp tr\xEAn Terminal (kh\xF4ng qua PM2), vui l\xF2ng nh\u1EA5n Ctrl+C v\xE0 ch\u1EA1y l\u1EA1i \u0111\u1EC3 n\u1EA1p m\xE3 m\u1EDBi."),this.isUpdating=!1;return}this.logger.info("\u{1F504} [AutoUpdater] Ti\u1EBFn tr\xECnh s\u1EBD tho\xE1t an to\xE0n (exit 0) \u0111\u1EC3 h\u1EC7 th\u1ED1ng t\u1EF1 kh\u1EDFi \u0111\u1ED9ng l\u1EA1i v\u1EDBi b\u1EA3n m\u1EDBi..."),setTimeout(()=>process.exit(0),1500)}startPeriodicAutoUpdate(t,r=3600*1e3){this.timer&&clearInterval(this.timer),setTimeout(()=>{this.runCheckCycle(t).catch(()=>{})},6e4),this.timer=setInterval(()=>{this.runCheckCycle(t).catch(()=>{})},r),this.logger.info(`\u23F0 [AutoUpdater] \u0110\xE3 k\xEDch ho\u1EA1t c\u01A1 ch\u1EBF t\u1EF1 \u0111\u1ED9ng c\u1EADp nh\u1EADt ng\u1EA7m (chu k\u1EF3: ${Math.round(r/6e4)} ph\xFAt).`)}stop(){this.timer&&(clearInterval(this.timer),this.timer=void 0)}async runCheckCycle(t){try{let{hasUpdate:r,latestVersion:o}=await this.checkUpdate(t);r&&(this.logger.info(`\u{1F514} [AutoUpdater] Ph\xE1t hi\u1EC7n phi\xEAn b\u1EA3n m\u1EDBi: v${o} (hi\u1EC7n t\u1EA1i: v${t}). \u0110ang t\u1EF1 \u0111\u1ED9ng n\xE2ng c\u1EA5p...`),await this.performUpdateAndRestart(o))}catch(r){this.logger.debug("Auto-update check cycle error:",r?.message)}}};var tV=class{constructor(t,r,o){this.config=t;this.engine=r;this.logger=o||(0,nV.createLogger)(`ClusterSentinel:${t.workerId}`),this.autoUpdater=new eV(this.logger)}logger;autoUpdater;isRunning=!1;pollTimer;heartbeatTimer;cachedPeerWorkers=[];lastPeerCheckTime=0;lastNightConfigUpdatedAt=0;lastNightConfigCheck=0;isSyncingAccounts=!1;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.appwriteProjectId||""};return this.config.appwriteSessionToken?t["X-Appwrite-Session"]=this.config.appwriteSessionToken:this.config.appwriteJwt?t["X-Appwrite-JWT"]=this.config.appwriteJwt:this.config.appwriteApiKey&&(t["X-Appwrite-Key"]=this.config.appwriteApiKey),t}isCloudConfigured(){return!!(this.config.appwriteEndpoint&&this.config.appwriteProjectId&&(this.config.appwriteApiKey||this.config.appwriteSessionToken||this.config.appwriteJwt))}async start(){if(this.isRunning)return;if(this.isRunning=!0,!this.isCloudConfigured()){this.logger.info("Appwrite Cloud credentials not fully configured. Running in standalone local mode.");return}this.logger.info(`\u{1F680} Initializing Team Cluster Sentinel for Team [${this.config.teamId}] (Worker: ${this.config.workerId}, Capacity: ${this.config.maxCapacity})`),await this.ensureTeamWorkersCollection(),await this.ensureClusterSettingsCollection(),await this.registerWorkerInstance(),this.heartbeatTimer=setInterval(()=>{this.pingWorkerHeartbeat().catch(r=>{this.logger.debug("Worker heartbeat ping error:",r?.message)})},15e3);let t=this.config.clusterPollIntervalMs||3e3;this.pollTimer=setInterval(()=>{this.syncTeamAccounts().catch(o=>{this.logger.debug("Cluster account sync error:",o?.message)});let r=Date.now();r-this.lastNightConfigCheck>3e4&&(this.lastNightConfigCheck=r,this.syncNightShiftConfig().catch(()=>{}))},t),this.syncTeamAccounts().catch(()=>{}),this.syncNightShiftConfig().catch(()=>{}),this.autoUpdater.startPeriodicAutoUpdate(this.config.version||Lp)}async stop(){this.isRunning=!1,this.autoUpdater.stop(),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=void 0),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0),this.isCloudConfigured()&&await this.markWorkerOffline(),this.logger.info("Cluster Sentinel stopped.")}async ensureTeamWorkersCollection(){if(this.config.appwriteApiKey)try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`${t}/databases/${r}/collections/team_workers`;if((await fetch(o,{method:"GET",headers:this.getHeaders()})).status===404&&(this.logger.info("Collection team_workers not found. Auto-provisioning via Admin API..."),(await fetch(`${t}/databases/${r}/collections`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({collectionId:"team_workers",name:"ZPlus Team Workers Cluster",permissions:['read("any")','create("any")','update("any")','delete("any")'],documentSecurity:!1})})).ok)){let i=[{type:"string",key:"worker_id",size:128,required:!0},{type:"string",key:"team_id",size:64,required:!0},{type:"string",key:"worker_name",size:128,required:!1,default:"Worker Node"},{type:"string",key:"status",size:32,required:!1,default:"online"},{type:"integer",key:"max_capacity",required:!1,default:50},{type:"integer",key:"current_load",required:!1,default:0},{type:"integer",key:"last_ping",required:!1,default:0}];for(let s of i){let c=`${t}/databases/${r}/collections/team_workers/attributes/${s.type}`,l={key:s.key,required:s.required};s.size&&(l.size=s.size),s.default!==void 0&&(l.default=s.default),await fetch(c,{method:"POST",headers:this.getHeaders(),body:JSON.stringify(l)})}this.logger.info("\u2705 Auto-provisioned team_workers collection successfully.")}}catch(t){this.logger.debug("ensureTeamWorkersCollection notice:",t?.message)}}async ensureClusterSettingsCollection(){if(this.config.appwriteApiKey)try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`${t}/databases/${r}/collections/cluster_settings`;if((await fetch(o,{method:"GET",headers:this.getHeaders()})).status===404&&(this.logger.info("Collection cluster_settings not found. Auto-provisioning via Admin API..."),(await fetch(`${t}/databases/${r}/collections`,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({collectionId:"cluster_settings",name:"ZPlus Cluster Settings",permissions:['read("any")','create("any")','update("any")','delete("any")'],documentSecurity:!1})})).ok)){let i=[{key:"team_id",size:64,required:!0},{key:"config_json",size:1e4,required:!0}];for(let c of i){let l=`${t}/databases/${r}/collections/cluster_settings/attributes/string`;await fetch(l,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({key:c.key,size:c.size,required:c.required})})}let s=`${t}/databases/${r}/collections/cluster_settings/attributes/integer`;await fetch(s,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({key:"updated_at",required:!1,default:0})}),this.logger.info("\u2705 Auto-provisioned cluster_settings collection successfully.")}}catch(t){this.logger.debug("ensureClusterSettingsCollection notice:",t?.message)}}async syncNightShiftConfig(){if(!(!this.isRunning||!this.isCloudConfigured()||!this.config.teamId))try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=`night_cfg_${this.config.teamId}`.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/cluster_settings/documents/${o}`,a=await fetch(n,{method:"GET",headers:this.getHeaders()});if(!a.ok)return;let i=await a.json(),s=Number(i.updated_at||0);if(s>this.lastNightConfigUpdatedAt&&i.config_json)try{let c=JSON.parse(i.config_json);this.engine.automationEngine.configure(c),this.lastNightConfigUpdatedAt=s,this.logger.info(`\u{1F319} [ClusterSentinel] Synchronized latest Night AI config from Cloud DB (Provider: ${c.provider||"default"}, Enabled: ${c.enabled})`)}catch(c){this.logger.debug("Failed to parse night config JSON from Cloud DB:",c?.message)}}catch{}}async getActivePeerWorkers(){let t=Date.now();if(t-this.lastPeerCheckTime<15e3&&this.cachedPeerWorkers.length>0)return this.cachedPeerWorkers;try{let r=this.config.appwriteEndpoint,o=this.config.databaseId||"zplus_app",n=JSON.stringify({method:"equal",attribute:"team_id",values:[this.config.teamId]}),a=JSON.stringify({method:"limit",values:[25]}),i=`${r}/databases/${o}/collections/team_workers/documents?queries[]=${encodeURIComponent(n)}&queries[]=${encodeURIComponent(a)}`,s=await fetch(i,{method:"GET",headers:this.getHeaders()});if(s.ok){let c=await s.json(),l=Array.isArray(c?.documents)?c.documents:[];this.cachedPeerWorkers=l.filter(p=>p.worker_id!==this.config.workerId&&p.status==="online"&&t-Number(p.last_ping||0)<45e3).map(p=>({workerId:p.worker_id,currentLoad:Number(p.current_load||0),maxCapacity:Number(p.max_capacity||50),lastPing:Number(p.last_ping||0)})),this.lastPeerCheckTime=t}}catch{}return this.cachedPeerWorkers}async registerWorkerInstance(){try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=D6(),a=this.engine.channelRunnerRegistry.getCount(),i=a>this.config.maxCapacity,s=`${t}/databases/${r}/collections/team_workers/documents/${o}`,c={data:{worker_id:this.config.workerId,team_id:this.config.teamId,worker_name:this.config.workerName,version:this.config.version||Lp,max_capacity:this.config.maxCapacity,recommended_capacity:this.config.recommendedCapacity||this.config.maxCapacity,current_load:a,is_overloaded:i,system_specs:JSON.stringify(n),status:"online",last_ping:Date.now()}};if((await fetch(s,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify(c)})).status===404){let p=`${t}/databases/${r}/collections/team_workers/documents`,h=await fetch(p,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:o,permissions:['read("users")','update("users")','delete("users")'],...c})});if(!h.ok&&h.status===400){let y={data:{worker_id:this.config.workerId,team_id:this.config.teamId,worker_name:this.config.workerName,max_capacity:this.config.maxCapacity,current_load:a,status:"online",last_ping:Date.now()}};await fetch(p,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:o,permissions:['read("users")','update("users")','delete("users")'],...y})})}}this.logger.info(`\u2705 Worker registered in Team Cluster: ${this.config.workerId}`)}catch(t){this.logger.warn("Could not register in team_workers:",t?.message)}}async pingWorkerHeartbeat(){if(!(!this.isRunning||!this.isCloudConfigured()))try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/team_workers/documents/${o}`,a=D6(),i=this.engine.channelRunnerRegistry.getCount(),s=i>this.config.maxCapacity,c=await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_load:i,is_overloaded:s,system_specs:JSON.stringify(a),version:this.config.version||Lp,last_ping:Date.now(),status:"online"}})});if(c.ok)try{let h=await c.json()||{};h?.command==="UPGRADE"&&(this.logger.info("\u{1F4E1} [ClusterSentinel] Nh\u1EADn l\u1EC7nh UPGRADE t\u1EEB xa!"),this.autoUpdater.performUpdateAndRestart().catch(()=>{})),h?.max_capacity&&Number(h.max_capacity)!==this.config.maxCapacity&&(this.config.maxCapacity=Number(h.max_capacity),this.logger.info(`\u2699\uFE0F [ClusterSentinel] \u0110\xE3 c\u1EADp nh\u1EADt gi\u1EDBi h\u1EA1n t\u1EA3i t\u1EEB xa: ${this.config.maxCapacity}`))}catch{}c.status===404&&await this.registerWorkerInstance();let l=this.config.workerId.startsWith("worker_")?this.config.workerId:`worker_${this.config.workerId}`,p=this.engine.channelRunnerRegistry.getAll();for(let h of p)try{await this.engine.lockManager.renewLockRemote(h.accountId,l,6e4)}catch{}}catch{}}async markWorkerOffline(){try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=this.config.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${t}/databases/${r}/collections/team_workers/documents/${o}`;await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{status:"offline",last_ping:Date.now()}})})}catch{}}async syncTeamAccounts(){if(!(!this.isRunning||!this.isCloudConfigured()||this.isSyncingAccounts)){this.isSyncingAccounts=!0;try{let t=this.config.appwriteEndpoint,r=this.config.databaseId||"zplus_app",o=Date.now(),n=this.config.maxCapacity,a=0,i=100,s=!0;for(;s&&this.isRunning;){let c=Array.from(new Set([this.config.teamId,"default"].filter(Boolean))),l=JSON.stringify({method:"equal",attribute:"team_id",values:c}),p=JSON.stringify({method:"limit",values:[i]}),h=JSON.stringify({method:"offset",values:[a]}),y=`${t}/databases/${r}/collections/channel_accounts/documents?queries[]=${encodeURIComponent(l)}&queries[]=${encodeURIComponent(p)}&queries[]=${encodeURIComponent(h)}`,b=await fetch(y,{method:"GET",headers:this.getHeaders()});if(!b.ok){let _=await b.text().catch(()=>"");this.logger.warn(`[ClusterSentinel] syncTeamAccounts error (status ${b.status}): ${_}`);break}let m=await b.json(),M=Array.isArray(m?.documents)?m.documents:[];M.length<i?s=!1:a+=i;for(let _ of M){let O=_.$id||_.id,S=(_.platform||"zalo").toLowerCase(),v=S==="web"||S.includes("zalo")?"zalo":S,T=_.owner_type,w=_.current_owner,P=_.status,C=Number(_.lock_expires_at||0),R=Number(_.last_heartbeat||0),N=!!this.engine.channelRunnerRegistry.get(v,O);if(!(_.nightWorkerEnabled===!0||_.night_worker_enabled===1||_.night_worker_enabled===!0)){N&&(this.logger.warn(`\u{1F6AB} [Unselected Account] T\xE0i kho\u1EA3n ${O} (${_.accountName||""}) kh\xF4ng \u0111\u01B0\u1EE3c ch\u1ECDn ch\u1EA1y Worker 24/7 (nightWorkerEnabled=false). Bu\u1ED9c ng\u1EAFt WSS ngay l\u1EADp t\u1EE9c...`),this.engine.channelRunnerRegistry.unregister(v,O),this.engine.unregisterAccount(O),this.engine.lockManager.releaseLock(O));continue}if(N&&(T==="desktop"||P==="active_desktop")){this.logger.info(`\u26A1 Master Preemption: Desktop reclaimed account ${O}. Stopping worker runner...`),this.engine.channelRunnerRegistry.unregister(v,O),this.engine.unregisterAccount(O),this.engine.lockManager.releaseLock(O);continue}let k=this.config.workerId.startsWith("worker_")?this.config.workerId:`worker_${this.config.workerId}`,K=T==="worker"&&w===k,U=T==="desktop"&&o-R>6e4,q=T==="worker"&&C<o;if((P==="needs_worker"||K||U&&C<o||q)&&!N){let ee=this.engine.channelRunnerRegistry.getCount(),Ae=ee>=n;if(!K&&(Ae||ee/n>.8)){let de=(await this.getActivePeerWorkers()).find(Oe=>Oe.currentLoad/Oe.maxCapacity<ee/n-.25);if(de){this.logger.debug(`[Least-Loaded Yield] Nh\u01B0\u1EDDng t\xE0i kho\u1EA3n ${O} cho worker r\u1EA3nh h\u01A1n: ${de.workerId} (T\u1EA3i peer: ${de.currentLoad}/${de.maxCapacity}, T\u1EA3i hi\u1EC7n t\u1EA1i: ${ee}/${n})`);continue}}if(Ae){let se=D6();this.logger.warn(`\u26A0\uFE0F [Server Spec Capacity Alert] Worker ${this.config.workerId} hi\u1EC7n \u0111ang m\u1EDF ${ee+1}/${n} k\u1EBFt n\u1ED1i WSS. \u0110\xE3 v\u01B0\u1EE3t ng\u01B0\u1EE1ng khuy\u1EBFn ngh\u1ECB theo c\u1EA5u h\xECnh m\xE1y ch\u1EE7 (${Math.round(se.totalMemMb/1024)}GB RAM, ${se.cpuCount} CPUs, ${se.freeMemMb}MB Free). Theo ch\xEDnh s\xE1ch trao quy\u1EC1n quy\u1EBFt \u0111\u1ECBnh cho kh\xE1ch h\xE0ng, Worker v\u1EABn ti\u1EBFp t\u1EE5c k\u1EBFt n\u1ED1i WSS cho t\xE0i kho\u1EA3n ${O}.`)}if(await this.engine.lockManager.acquireLockRemote(O,k,6e4)){let se=K?"Resumed previous session":q?"Failover takeover (previous worker died)":Ae?"Over-capacity active takeover (per customer policy)":"Active takeover";this.logger.info(`\u2705 Cluster takeover: [${se}] Claimed account ${O} for team ${this.config.teamId}`),await this.spawnRunnerForAccount(_)}}}}}catch(t){this.logger.debug("syncTeamAccounts warning:",t?.message)}finally{this.isSyncingAccounts=!1}}}async spawnRunnerForAccount(t){let r=t.$id||t.id,o=(t.platform||"zalo").toLowerCase(),n=o==="web"||o.includes("zalo")?"zalo":o;if(this.engine.channelRunnerRegistry.get(n,r))return;if(!(t.nightWorkerEnabled===!0||t.night_worker_enabled===1||t.night_worker_enabled===!0)){this.logger.warn(`\u{1F6AB} [ClusterSentinel] T\u1EEB ch\u1ED1i kh\u1EDFi ch\u1EA1y WSS cho t\xE0i kho\u1EA3n unselected: ${r}`);return}let i={};if(t.authSession){let c=[];if(Array.isArray(t.$permissions))for(let h of t.$permissions){let y=String(h).match(/user:([a-zA-Z0-9_-]+)/);y&&y[1]&&c.push(y[1])}t.user_id&&c.push(t.user_id),t.userId&&c.push(t.userId),this.config.userId&&c.push(this.config.userId);let l=Array.from(new Set([this.config.teamId,t.team_id,t.teamId,...c,"6a842e9400304c01746a","default"].filter(Boolean)));i=nV.CloudCrypto.parseCloudSession(t.authSession,this.config.teamId,l)||{},!!(i?.cookie||i?.cookies||i?.accessToken||i?.token||i?.botToken)?this.logger.info(`[ClusterSentinel] \u{1F513} Gi\u1EA3i m\xE3 th\xE0nh c\xF4ng phi\xEAn ho\u1EA1t \u0111\u1ED9ng cho ${r} qua CloudCrypto.`):this.logger.warn(`[ClusterSentinel] \u26A0\uFE0F Kh\xF4ng th\u1EC3 gi\u1EA3i m\xE3 phi\xEAn h\u1EE3p l\u1EC7 cho ${r}. Scopes \u0111\xE3 th\u1EED: [${l.join(", ")}]`)}let s;if(n==="zalo"?s=new O3(r,i):n==="facebook"?s=new lT(r,i):n==="telegram"?s=new VT(r,i):n==="whatsapp"&&(s=new uI(r,i)),s){this.engine.registerRunner(s),await s.start();let c=s.getStatus();this.engine.registerAccount({id:r,platform:n,accountName:t.accountName||r,status:c,nightWorkerEnabled:!0}),this.logger.info(`\u2705 Runner registered for ${n} account ${r} [status: ${c}]`)}}};var WSt=ke(go());var LSt=ke(go()),iV=class{constructor(t,r){this.config=t;this.logger=r||(0,LSt.createLogger)("AppwriteDbDriver"),this.databaseId=t.databaseId||"zplus_app"}logger;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async getDocument(t,r){try{let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${r}`,n=await fetch(o,{method:"GET",headers:this.getHeaders()});if(!n.ok){if(n.status===404)return null;throw new Error(`Failed to get document: HTTP ${n.status}`)}return await n.json()}catch(o){return this.logger.debug(`getDocument error for ${t}/${r}:`,o?.message),null}}async createDocument(t,r,o){let n=r.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents`,i=await fetch(a,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:n,data:o})});if(!i.ok){let s=await i.text();throw new Error(`Failed to create document: HTTP ${i.status} - ${s}`)}return await i.json()}async updateDocument(t,r,o){let n=r.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${n}`,i=await fetch(a,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:o})});if(!i.ok){let s=await i.text();throw new Error(`Failed to update document: HTTP ${i.status} - ${s}`)}return await i.json()}async upsertDocument(t,r,o){try{return await this.updateDocument(t,r,o)}catch(n){if(String(n?.message||"").includes("404"))return await this.createDocument(t,r,o);throw n}}async queryDocuments(t,r){try{let o=[];if(r.filters&&r.filters.length>0)for(let c of r.filters)c.operator==="eq"?o.push(JSON.stringify({method:"equal",attribute:c.field,values:Array.isArray(c.value)?c.value:[c.value]})):c.operator==="neq"?o.push(JSON.stringify({method:"notEqual",attribute:c.field,values:Array.isArray(c.value)?c.value:[c.value]})):c.operator==="gt"?o.push(JSON.stringify({method:"greaterThan",attribute:c.field,values:[c.value]})):c.operator==="gte"?o.push(JSON.stringify({method:"greaterThanEqual",attribute:c.field,values:[c.value]})):c.operator==="lt"?o.push(JSON.stringify({method:"lessThan",attribute:c.field,values:[c.value]})):c.operator==="lte"?o.push(JSON.stringify({method:"lessThanEqual",attribute:c.field,values:[c.value]})):c.operator==="in"&&Array.isArray(c.value)&&o.push(JSON.stringify({method:"equal",attribute:c.field,values:c.value}));r.limit&&o.push(JSON.stringify({method:"limit",values:[r.limit]})),r.offset&&o.push(JSON.stringify({method:"offset",values:[r.offset]})),r.orderBy&&o.push(JSON.stringify({method:r.orderBy.direction==="desc"?"orderDesc":"orderAsc",attribute:r.orderBy.field}));let n=o.map(c=>`queries[]=${encodeURIComponent(c)}`).join("&"),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents${n?`?${n}`:""}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return[];let s=await i.json();return Array.isArray(s?.documents)?s.documents:[]}catch(o){return this.logger.debug(`queryDocuments error in ${t}:`,o?.message),[]}}async deleteDocument(t,r){try{let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${t}/documents/${r}`;return(await fetch(o,{method:"DELETE",headers:this.getHeaders()})).ok}catch{return!1}}};var qSt=ke(go()),rV=class{constructor(t,r){this.config=t;this.logger=r||(0,qSt.createLogger)("AppwriteLockDriver"),this.collectionId=t.collectionId||"channel_accounts",this.databaseId=t.databaseId||"zplus_app"}logger;collectionId;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async acquireLock(t,r,o){let n=Date.now();try{let a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return!1;let s=await i.json(),c=s.current_owner,l=Number(s.lock_expires_at||0);if(c&&c!==r&&l>n)return!1;let p=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;if((await fetch(p,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_owner:r,owner_type:r.startsWith("worker")?"worker":"desktop",lock_expires_at:n+o,last_heartbeat:n,status:r.startsWith("worker")?"active_worker":"active_desktop"}})})).ok){await new Promise(b=>setTimeout(b,30+Math.floor(Math.random()*40)));let y=await fetch(a,{method:"GET",headers:this.getHeaders()});if(y.ok&&(await y.json()).current_owner===r)return!0}return!1}catch(a){return this.logger.debug("acquireLock error:",a?.message),!1}}async releaseLock(t,r){try{if(r){let a=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(i.ok){let s=await i.json();if(s.current_owner&&s.current_owner!==r)return!1}}let o=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;return(await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_owner:null,owner_type:"none",lock_expires_at:0,status:"offline"}})})).ok}catch{return!1}}async renewLock(t,r,o){try{let n=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`;return(await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{lock_expires_at:Date.now()+o,last_heartbeat:Date.now()}})})).ok}catch{return!1}}async getLock(t){try{let r=`${this.config.endpoint}/databases/${this.databaseId}/collections/${this.collectionId}/documents/${t}`,o=await fetch(r,{method:"GET",headers:this.getHeaders()});if(!o.ok)return null;let n=await o.json();return{resourceId:t,ownerId:n.current_owner||"",ownerType:n.owner_type,expiresAt:Number(n.lock_expires_at||0),lastHeartbeat:Number(n.last_heartbeat||0)}}catch{return null}}};var BSt=ke(go()),oV=class{constructor(t,r){this.config=t;this.logger=r||(0,BSt.createLogger)("AppwriteCoordinator"),this.databaseId=t.databaseId||"zplus_app"}logger;databaseId;getHeaders(){let t={"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId};return this.config.sessionToken?t["X-Appwrite-Session"]=this.config.sessionToken:this.config.jwt?t["X-Appwrite-JWT"]=this.config.jwt:this.config.apiKey&&(t["X-Appwrite-Key"]=this.config.apiKey),t}async registerNode(t){try{let r=t.workerId.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${r}`,n={data:{worker_id:t.workerId,team_id:t.teamId,worker_name:t.workerName,max_capacity:t.maxCapacity,recommended_capacity:t.recommendedCapacity||t.maxCapacity,current_load:t.currentLoad,is_overloaded:t.isOverloaded??!1,system_specs:t.systemSpecs?JSON.stringify(t.systemSpecs):void 0,status:t.status,last_ping:Date.now()}};if((await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify(n)})).status===404){let i=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents`;await fetch(i,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({documentId:r,...n})})}}catch(r){this.logger.warn("registerNode warning:",r?.message)}}async pingHeartbeat(t,r){try{let o=t.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),n=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${o}`;await fetch(n,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{current_load:r.currentLoad,is_overloaded:r.isOverloaded??!1,system_specs:r.systemSpecs?JSON.stringify(r.systemSpecs):void 0,last_ping:r.lastPing,status:r.status||"online"}})})}catch{}}async fetchPendingAccounts(t,r=100,o=0){try{let n=[`queries[]=${encodeURIComponent(JSON.stringify({method:"equal",attribute:"team_id",values:[t]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"limit",values:[r]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"offset",values:[o]}))}`].join("&"),a=`${this.config.endpoint}/databases/${this.databaseId}/collections/channel_accounts/documents?${n}`,i=await fetch(a,{method:"GET",headers:this.getHeaders()});if(!i.ok)return[];let s=await i.json();return Array.isArray(s?.documents)?s.documents:[]}catch(n){return this.logger.debug("fetchPendingAccounts error:",n?.message),[]}}async fetchActiveNodes(t){try{let r=[`queries[]=${encodeURIComponent(JSON.stringify({method:"equal",attribute:"team_id",values:[t]}))}`,`queries[]=${encodeURIComponent(JSON.stringify({method:"limit",values:[50]}))}`].join("&"),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents?${r}`,n=await fetch(o,{method:"GET",headers:this.getHeaders()});if(!n.ok)return[];let a=await n.json();return(Array.isArray(a?.documents)?a.documents:[]).map(s=>({workerId:s.worker_id||s.$id,teamId:s.team_id,workerName:s.worker_name||"",maxCapacity:Number(s.max_capacity||50),currentLoad:Number(s.current_load||0),status:s.status||"online",lastPing:Number(s.last_ping||0),isOverloaded:!!s.is_overloaded,recommendedCapacity:Number(s.recommended_capacity||s.max_capacity||50),systemSpecs:s.system_specs?typeof s.system_specs=="string"?JSON.parse(s.system_specs):s.system_specs:void 0}))}catch(r){return this.logger.debug("fetchActiveNodes error:",r?.message),[]}}async markNodeOffline(t){try{let r=t.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=`${this.config.endpoint}/databases/${this.databaseId}/collections/team_workers/documents/${r}`;await fetch(o,{method:"PATCH",headers:this.getHeaders(),body:JSON.stringify({data:{status:"offline",last_ping:Date.now()}})})}catch{}}};var USt=ke(go()),aV=class{constructor(t,r){this.config=t;this.logger=r||(0,USt.createLogger)("AppwriteAuthDriver")}logger;async verifySessionToken(t){try{let r=`${this.config.endpoint}/account`,o=await fetch(r,{method:"GET",headers:{"Content-Type":"application/json","X-Appwrite-Project":this.config.projectId,"X-Appwrite-Session":t}});if(!o.ok)return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:`Phi\xEAn \u0111\u0103ng nh\u1EADp kh\xF4ng h\u1EE3p l\u1EC7 (HTTP ${o.status}).`};let n=await o.json(),a=n.$id||n.id||"",i=n.name||"Ng\u01B0\u1EDDi d\xF9ng ZPlus",s=n.email||"",c=n.prefs||{},l=c.entitlements||{},p=!!(l.isPremium??c.isPremium??c.plan==="enterprise"),h=!!(l.isOwner??c.isOwner??!0),y=c.teamId||l.teamId||"default";return{allowed:p||h,userId:a,userName:i,email:s,teamId:y,isOwner:h,isPremium:p,reason:p||h?"H\u1EE3p l\u1EC7":"Y\xEAu c\u1EA7u quy\u1EC1n Enterprise \u0111\u1EC3 ch\u1EA1y Worker 24/7."}}catch(r){return this.logger.error("verifySessionToken error:",r),{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:r?.message||"L\u1ED7i k\u1EBFt n\u1ED1i x\xE1c th\u1EF1c."}}}async checkEntitlements(t){return this.config.sessionToken?this.verifySessionToken(this.config.sessionToken):{allowed:!0,userId:t,userName:"Worker Node",email:"",teamId:"default",isOwner:!0,isPremium:!0}}};var sV=class{constructor(t,r){this.config=t;this.logger=r||(0,WSt.createLogger)("AppwriteCloudAdapter");let o={endpoint:t.cloudEndpoint||t.appwriteEndpoint||"https://api.softty.net/v1",projectId:t.cloudProjectId||t.appwriteProjectId||"699cfc3100136099c1c1",databaseId:t.cloudDatabaseId||t.databaseId||"zplus_app",sessionToken:t.cloudSessionToken||t.appwriteSessionToken,jwt:t.cloudJwt||t.appwriteJwt,apiKey:t.cloudApiKey||t.appwriteApiKey};this.database=new iV(o,this.logger),this.lockStorage=new rV(o,this.logger),this.coordinator=new oV(o,this.logger),this.auth=new aV(o,this.logger)}providerName="appwrite";database;lockStorage;coordinator;auth;logger;async start(){this.logger.info("\u2705 Appwrite Cloud Adapter initialized.")}async stop(){this.logger.info("Appwrite Cloud Adapter stopped.")}};var FSt=ke(go()),cV=class{constructor(t,r){this.config=t;this.logger=r||(0,FSt.createLogger)("CustomApiAdapter");let o=t.cloudEndpoint||"https://api.softty.net/custom/v1",a={"Content-Type":"application/json",Authorization:`Bearer ${t.cloudSessionToken||t.cloudApiKey||""}`,"X-Tenant-ID":t.teamId||"default"};this.database={async getDocument(i,s){try{let c=await fetch(`${o}/data/${i}/${s}`,{headers:a});return c.ok?await c.json():null}catch{return null}},async createDocument(i,s,c){return await(await fetch(`${o}/data/${i}`,{method:"POST",headers:a,body:JSON.stringify({id:s,...c})})).json()},async updateDocument(i,s,c){return await(await fetch(`${o}/data/${i}/${s}`,{method:"PATCH",headers:a,body:JSON.stringify(c)})).json()},async upsertDocument(i,s,c){return await(await fetch(`${o}/data/${i}/${s}/upsert`,{method:"POST",headers:a,body:JSON.stringify(c)})).json()},async queryDocuments(i,s){try{let c=await fetch(`${o}/data/${i}/query`,{method:"POST",headers:a,body:JSON.stringify(s)});if(!c.ok)return[];let l=await c.json();return Array.isArray(l?.items)?l.items:[]}catch{return[]}},async deleteDocument(i,s){try{return(await fetch(`${o}/data/${i}/${s}`,{method:"DELETE",headers:a})).ok}catch{return!1}}},this.lockStorage={async acquireLock(i,s,c){try{let l=await fetch(`${o}/locks/acquire`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s,ttlMs:c})});return l.ok?!!(await l.json())?.acquired:!1}catch{return!1}},async releaseLock(i,s){try{return(await fetch(`${o}/locks/release`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s})})).ok}catch{return!1}},async renewLock(i,s,c){try{return(await fetch(`${o}/locks/renew`,{method:"POST",headers:a,body:JSON.stringify({resourceId:i,ownerId:s,ttlMs:c})})).ok}catch{return!1}},async getLock(i){try{let s=await fetch(`${o}/locks/${i}`,{headers:a});return s.ok?await s.json():null}catch{return null}}},this.coordinator={async registerNode(i){try{await fetch(`${o}/cluster/nodes/register`,{method:"POST",headers:a,body:JSON.stringify(i)})}catch{}},async pingHeartbeat(i,s){try{await fetch(`${o}/cluster/nodes/${i}/heartbeat`,{method:"POST",headers:a,body:JSON.stringify(s)})}catch{}},async fetchPendingAccounts(i,s=100,c=0){try{let l=await fetch(`${o}/cluster/accounts/pending?teamId=${i}&limit=${s}&offset=${c}`,{headers:a});if(!l.ok)return[];let p=await l.json();return Array.isArray(p?.accounts)?p.accounts:[]}catch{return[]}},async markNodeOffline(i){try{await fetch(`${o}/cluster/nodes/${i}/offline`,{method:"POST",headers:a})}catch{}}},this.auth={async verifySessionToken(i){try{let s=await fetch(`${o}/auth/verify`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}});return s.ok?await s.json():{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:"Invalid session token"}}catch(s){return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:"default",isOwner:!1,isPremium:!1,reason:s?.message}}},async checkEntitlements(i){return{allowed:!0,userId:i,userName:"User",email:"",teamId:"default",isOwner:!0,isPremium:!0}}}}providerName="custom-api";database;lockStorage;coordinator;auth;logger;async start(){this.logger.info("\u{1F50C} Custom API Cloud Adapter initialized.")}async stop(){this.logger.info("Custom API Cloud Adapter stopped.")}};var jSt=ke(go()),lV=class{providerName="in-memory";database;lockStorage;coordinator;auth;logger;tables=new Map;locks=new Map;nodes=new Map;constructor(t,r){this.logger=r||(0,jSt.createLogger)("InMemoryCloudAdapter");let o=n=>{let a=this.tables.get(n);return a||(a=new Map,this.tables.set(n,a)),a};this.database={async getDocument(n,a){return o(n).get(a)||null},async createDocument(n,a,i){return o(n).set(a,{$id:a,id:a,...i}),o(n).get(a)},async updateDocument(n,a,i){let c={...o(n).get(a)||{$id:a,id:a},...i};return o(n).set(a,c),c},async upsertDocument(n,a,i){return this.updateDocument(n,a,i)},async queryDocuments(n,a){let i=Array.from(o(n).values());if(a.filters)for(let s of a.filters)s.operator==="eq"&&(i=i.filter(c=>c[s.field]===s.value));return a.limit&&(i=i.slice(0,a.limit)),i},async deleteDocument(n,a){return o(n).delete(a)}},this.lockStorage={acquireLock:async(n,a,i)=>{let s=Date.now(),c=this.locks.get(n);return c&&c.expiresAt>s&&c.ownerId!==a?!1:(this.locks.set(n,{resourceId:n,ownerId:a,ownerType:a.startsWith("worker")?"worker":"desktop",expiresAt:s+i,lastHeartbeat:s}),!0)},releaseLock:async(n,a)=>{let i=this.locks.get(n);return i?a&&i.ownerId!==a?!1:(this.locks.delete(n),!0):!0},renewLock:async(n,a,i)=>this.lockStorage.acquireLock(n,a,i),getLock:async n=>this.locks.get(n)||null},this.coordinator={registerNode:async n=>{this.nodes.set(n.workerId,n)},pingHeartbeat:async(n,a)=>{let i=this.nodes.get(n);i&&(i.currentLoad=a.currentLoad,i.lastPing=a.lastPing,i.status=a.status||"online")},fetchPendingAccounts:async n=>Array.from(o("channel_accounts").values()).filter(i=>i.team_id===n||i.teamId===n),markNodeOffline:async n=>{let a=this.nodes.get(n);a&&(a.status="offline")}},this.auth={verifySessionToken:async n=>({allowed:!!n,userId:"user_test_in_memory",userName:"Test User",email:"test@softty.net",teamId:"team_test",isOwner:!0,isPremium:!0}),checkEntitlements:async n=>({allowed:!0,userId:n,userName:"Test User",email:"test@softty.net",teamId:"team_test",isOwner:!0,isPremium:!0})}}async start(){this.logger.info("\u{1F9EA} In-Memory Cloud Adapter initialized.")}async stop(){this.logger.info("In-Memory Cloud Adapter stopped.")}};var GSt=ke(go()),uV=class{static create(t,r){let o=r||(0,GSt.createLogger)("CloudAdapterFactory");switch(t.cloudProvider||"appwrite"){case"custom-api":return o.info("Creating Custom API Cloud Adapter..."),new cV(t,o);case"in-memory":return o.info("Creating In-Memory Cloud Adapter..."),new lV(t,o);case"appwrite":default:return o.info("Creating Appwrite Cloud Adapter..."),new sV(t,o)}}};var pV=class{logger;channelRunnerRegistry;lockManager;deltaQueue;automationEngine;pushDispatcher;httpServer;clusterSentinel;cloudAdapter;status="idle";startTime=0;activeAccounts=new Map;messagesProcessed=0;heartbeatTimer;config;constructor(t){this.config={enableHttp:!1,teamId:"default",workerName:`Worker_${t.workerId}`,version:t.version||Lp,maxCapacity:50,clusterPollIntervalMs:5e3,heartbeatIntervalMs:15e3,logLevel:"info",...t,workerId:t.workerId},this.logger=(0,HSt.createLogger)(`WorkerEngine:${this.config.workerId}`),this.channelRunnerRegistry=new U6(this.logger),this.lockManager=new W6(6e4,this.logger),this.cloudAdapter=uV.create(this.config,this.logger),(this.config.cloudEndpoint||this.config.appwriteEndpoint)&&this.lockManager.setStorageProvider(this.cloudAdapter.lockStorage);let r=process.env.WORKER_DATA_DIR||FA.default.join(process.cwd(),".data"),o=FA.default.join(r,`pending_messages_${this.config.workerId}.json`);this.deltaQueue=new F6(1e4,this.logger,o);let n=!!(this.config.deepseekApiKey||this.config.geminiApiKey||this.config.openaiApiKey||this.config.anthropicApiKey||this.config.customAiApiKey);this.automationEngine=new j6(this.logger,{enabled:!1,apiKey:this.config.deepseekApiKey||this.config.geminiApiKey||this.config.openaiApiKey||this.config.anthropicApiKey||this.config.customAiApiKey,baseUrl:this.config.aiBaseUrl,provider:this.config.aiProvider,model:this.config.aiModel,systemPrompt:this.config.nightSystemPrompt,fallbackMessage:this.config.nightFallbackReply}),this.pushDispatcher=new G6(this.logger),this.clusterSentinel=new tV(this.config,this,this.logger),this.httpServer=this.config.enableHttp&&this.config.port?new ZH(this.config.port,this,this.lockManager,this.deltaQueue,this.logger):null,this.lockManager.onPreempt(async a=>{this.logger.info(`Preemption callback: stopping WSS for account ${a}...`);let i=this.channelRunnerRegistry.getAll();for(let s of i)s.accountId===a&&await s.stop()})}async start(){if(this.status==="running"){this.logger.warn("Worker is already running.");return}if(this.logger.info("Starting ZPlus 24/7 Headless Worker Engine..."),this.status="initializing",this.startTime=Date.now(),this.httpServer)try{await this.httpServer.start()}catch(r){this.logger.error("Failed to start Worker HTTP Ingress Server:",r)}else this.logger.info("\u{1F6E1}\uFE0F Ch\u1EBF \u0111\u1ED9 Zero-Port (Outbound-only) \u0111ang ho\u1EA1t \u0111\u1ED9ng: Worker kh\xF4ng m\u1EDF b\u1EA5t k\u1EF3 c\u1ED5ng l\u1EAFng nghe Inbound n\xE0o.");try{await this.cloudAdapter.start()}catch(r){this.logger.error("Failed to start Cloud Adapter:",r)}if(this.config.isStandby){this.status="idle",this.logger.warn(`\u23F8\uFE0F Worker is in STANDBY mode: ${this.config.standbyReason||"Unauthorized / Free Tier / Non-owner"}. Worker will NOT process accounts.`);return}this.heartbeatTimer=setInterval(()=>{this.sendHeartbeat()},this.config.heartbeatIntervalMs);try{await this.clusterSentinel.start()}catch(r){this.logger.error("Failed to start Cluster Sentinel:",r)}this.status="running",this.writeLocalHeartbeat();let t=this.config.enableHttp?`Port: ${this.config.port}`:"Zero-Port Headless Daemon";this.logger.info(`\u2705 ZPlus Worker Engine started successfully [ID: ${this.config.workerId}, Mode: ${t}]`)}async stop(){this.logger.info("Stopping ZPlus Worker Engine..."),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0),await this.clusterSentinel.stop(),await this.cloudAdapter.stop(),this.httpServer&&await this.httpServer.stop(),this.clearLocalHeartbeat(),await this.channelRunnerRegistry.stopAll(),this.status="stopped",this.logger.info("ZPlus Worker Engine stopped.")}registerRunner(t){t.onMessage?.(r=>{this.handleIncomingMessage(r,t)}),this.channelRunnerRegistry.register(t)}registerAccount(t){this.activeAccounts.set(t.id,t),this.logger.info(`Registered active account: ${t.accountName} [${t.platform}]`),this.writeLocalHeartbeat()}unregisterAccount(t){this.activeAccounts.delete(t),this.logger.info(`Unregistered account: ${t}`),this.writeLocalHeartbeat()}recordMessageProcessed(){this.messagesProcessed++}async handleIncomingMessage(t,r){this.recordMessageProcessed(),this.deltaQueue.enqueue(t),await this.pushMessageToCloud(t);try{let o=await this.automationEngine.evaluateIncomingMessage(t);if(o&&r){this.logger.info(`[NightAutoReply] Sending automated reply to thread ${t.threadId}: "${o}"`);let n={id:`reply_${Date.now()}`,platform:t.platform,conversationId:t.conversationId,threadId:t.threadId,accountId:t.accountId,senderId:t.accountId,senderName:"ZPlus Night Assistant",senderType:"agent",messageType:"text",content:o,timestamp:Date.now(),isSelf:!0,status:"sent"};await r.sendMessage(n)?(this.deltaQueue.enqueue(n),await this.pushMessageToCloud(n)):this.logger.warn(`[NightAutoReply] Socket delivery failed for thread ${t.threadId}. Skipped cloud push to prevent ghost message.`)}}catch(o){this.logger.warn("Auto-reply evaluation notice:",o)}try{await this.pushDispatcher.dispatchMessageAlert("fcm_token_mobile_owner",t)}catch(o){this.logger.debug("Push notification dispatch notice:",o)}}async pushMessageToCloud(t){if(!(!this.config.cloudEndpoint&&!this.config.appwriteEndpoint))try{let r=t.id.replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,36),o=new Date().toISOString(),n=t.threadId||t.conversationId,a=t.mediaUrl||t.metadata?.mediaUrl||Array.isArray(t.attachments)&&t.attachments[0]?.url||void 0,i={...typeof t.payload=="object"?t.payload:{},mediaUrl:a,attachments:t.attachments,metadata:t.metadata},s={conversation_id:t.conversationId||t.threadId,thread_id:n,account_id:t.accountId,sender_id:t.senderId,sender_name:(t.senderName||"").slice(0,255),senderType:t.senderType||"customer",messageType:t.messageType||t.type||"text",content:(t.content||t.text||"").slice(0,3e3),payload:typeof t.payload=="string"?t.payload.slice(0,3e3):JSON.stringify(i).slice(0,3e3),timestamp:t.timestamp||Date.now(),is_self:!!t.isSelf,is_recall:0,status:t.status||"sent",team_id:this.config.teamId||"",zplus_action:"INSERT",zplus_updated_at:o};if(await this.cloudAdapter.database.upsertDocument("messages",r,s),this.logger.info(`\u2601\uFE0F [CloudSync] Pushed message ${t.id} to Cloud DB via ${this.cloudAdapter.providerName}.`),n&&t.accountId)try{let c=`${n}:${t.accountId}`,p=`z_${KSt.default.createHash("md5").update(`conversations:${c}`).digest("hex")}`,h=(t.content||t.text||"").slice(0,500),y={thread_id:n,account_id:t.accountId,name:(t.senderName||n).slice(0,255),last_message:JSON.stringify({content:h,senderId:t.senderId,timestamp:t.timestamp||Date.now(),msgType:t.msgType||t.messageType||"chat.text"}),timestamp:t.timestamp||Date.now(),unread_count:1,peerId:t.senderId,peerName:(t.senderName||"").slice(0,255),platform:t.platform||"zalo",isPinned:!1,zplus_action:"UPDATE",zplus_updated_at:o};await this.cloudAdapter.database.upsertDocument("conversations",p,y)}catch(c){this.logger.debug(`[CloudSync] Note updating conversations on cloud: ${c?.message}`)}}catch(r){this.logger.error(`\u274C [CloudSync] Failed to push message ${t.id} to Cloud DB: ${r?.message||r}`)}}getMetrics(){let t=this.startTime>0?Math.floor((Date.now()-this.startTime)/1e3):0,r=process.memoryUsage().rss/(1024*1024);return{workerId:this.config.workerId,status:this.status,uptimeSeconds:t,activeAccountsCount:this.activeAccounts.size,totalMessagesProcessed:this.messagesProcessed,memoryUsageMb:Math.round(r*100)/100,lastHeartbeat:new Date().toISOString()}}sendHeartbeat(){let t=this.getMetrics();this.writeLocalHeartbeat(),this.logger.info(`\u{1F493} Heartbeat: status=${t.status}, accounts=${t.activeAccountsCount}, msgs=${t.totalMessagesProcessed}, pendingDelta=${this.deltaQueue.getCount()}, uptime=${t.uptimeSeconds}s`)}writeLocalHeartbeat(){try{let t=process.env.ZPLUS_HOME||FA.default.join(fme.default.homedir(),".zplus");fI.default.existsSync(t)||fI.default.mkdirSync(t,{recursive:!0});let r=FA.default.join(t,"worker_heartbeat.json"),o=this.getMetrics(),n={vendor:"Softtynet Co., Ltd.",product:"Softty ZPlus Omnichannel Platform",daemonTitle:"ZPlus 24/7 Headless Worker Daemon",version:this.config.version||"1.0.10",homepage:"https://softty.net",supportEmail:"support@softty.net",processTitle:process.title||"zplus-worker (Softtynet Co., Ltd.)",status:this.status,workerId:this.config.workerId,workerName:this.config.workerName,teamId:this.config.teamId,pid:process.pid,uptimeSeconds:o.uptimeSeconds,activeAccountsCount:o.activeAccountsCount,activeRunners:this.channelRunnerRegistry.getCount(),totalMessagesProcessed:o.totalMessagesProcessed,pendingDeltaMessages:this.deltaQueue.getCount(),memoryUsageMb:o.memoryUsageMb,isZeroPort:!this.config.enableHttp,port:this.config.enableHttp?this.config.port:null,lastPing:Date.now()};fI.default.writeFileSync(r,JSON.stringify(n,null,2))}catch{}}clearLocalHeartbeat(){try{let t=process.env.ZPLUS_HOME||FA.default.join(fme.default.homedir(),".zplus"),r=FA.default.join(t,"worker_heartbeat.json");if(fI.default.existsSync(r)){let o={status:"stopped",workerId:this.config.workerId,pid:process.pid,lastPing:Date.now()};fI.default.writeFileSync(r,JSON.stringify(o,null,2))}}catch{}}};var im=ke(require("fs")),fV=ke(require("path")),VSt=ke(require("os")),$St=ke(require("readline")),JSt=ke(go()),dV=class{logger;constructor(t){this.logger=t||(0,JSt.createLogger)("WorkerAuthManager")}getAuthFilePath(){let t=process.env.DATA_DIR||fV.default.join(VSt.default.homedir(),".zplus");return fV.default.join(t,"worker_auth.json")}loadStoredAuth(){try{let t=this.getAuthFilePath();if(!im.default.existsSync(t))return null;let r=im.default.readFileSync(t,"utf-8"),o=JSON.parse(r);return!o||!o.sessionToken?null:o}catch(t){return this.logger.debug("Failed to read worker_auth.json:",t?.message),null}}saveAuth(t){try{let r=this.getAuthFilePath(),o=fV.default.dirname(r);im.default.existsSync(o)||im.default.mkdirSync(o,{recursive:!0,mode:448}),im.default.writeFileSync(r,JSON.stringify(t,null,2),{encoding:"utf-8",mode:384});try{im.default.chmodSync(r,384)}catch{}this.logger.info(`\u2705 Phi\xEAn x\xE1c th\u1EF1c \u0111\xE3 \u0111\u01B0\u1EE3c l\u01B0u an to\xE0n t\u1EA1i: ${r} (Quy\u1EC1n 0600 - Ch\u1EC9 Owner)`)}catch(r){this.logger.error("Could not save worker_auth.json:",r)}}clearAuth(){try{let t=this.getAuthFilePath();im.default.existsSync(t)&&im.default.unlinkSync(t),this.logger.info("\u0110\xE3 x\xF3a phi\xEAn \u0111\u0103ng nh\u1EADp c\u1EE7a Worker.")}catch(t){this.logger.debug("clearAuth error:",t?.message)}}async verifyEntitlements(t,r="https://api.softty.net/v1",o="699cfc3100136099c1c1",n="default"){try{let a=`${r}/account`,i=await fetch(a,{method:"GET",headers:{"Content-Type":"application/json","X-Appwrite-Project":o,...t.startsWith("eyJ")?{"X-Appwrite-JWT":t}:{"X-Appwrite-Session":t}}});if(!i.ok)return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:n,isOwner:!1,isPremium:!1,reason:`Phi\xEAn \u0111\u0103ng nh\u1EADp kh\xF4ng h\u1EE3p l\u1EC7 ho\u1EB7c \u0111\xE3 h\u1EBFt h\u1EA1n (HTTP ${i.status}).`};let s=await i.json(),c=s.$id||s.id||"",l=s.name||"Ng\u01B0\u1EDDi d\xF9ng ZPlus",p=s.email||"",h=Array.isArray(s.labels)?s.labels:[],y=s.prefs||{},m=!h.some(S=>S.toLowerCase()==="member")&&y.isOwner!==!1,M=h.some(S=>S.toLowerCase()==="free")||y.tier==="free",_=!M&&(y.isPremium===!0||h.some(S=>S.toLowerCase()==="premium"||S.toLowerCase()==="enterprise")),O=y.teamId||y.storage?.teamId||s.teamId||n;if((!O||O==="default")&&y.entitlements)try{let S=typeof y.entitlements=="string"?JSON.parse(y.entitlements):y.entitlements;S?.storage?.teamId&&(O=S.storage.teamId)}catch{}if((!O||O==="default")&&s.entitlements)try{let S=typeof s.entitlements=="string"?JSON.parse(s.entitlements):s.entitlements;S?.storage?.teamId&&(O=S.storage.teamId)}catch{}return M?{allowed:!1,userId:c,userName:l,email:p,teamId:O,isOwner:m,isPremium:!1,reason:`\u26A0\uFE0F T\xE0i kho\u1EA3n [${p}] \u0111ang \u1EDF G\xF3i Mi\u1EC5n Ph\xED (Free Tier). G\xF3i n\xE0y kh\xF4ng h\u1ED7 tr\u1EE3 c\u1EE5m Worker 24/7 (Y\xEAu c\u1EA7u g\xF3i Team Enterprise).`}:m?{allowed:!0,userId:c,userName:l,email:p,teamId:O,isOwner:!0,isPremium:!0,reason:`\u2705 X\xE1c th\u1EF1c th\xE0nh c\xF4ng: Tr\u01B0\u1EDFng nh\xF3m [${l}] (${p}) - G\xF3i Doanh Nghi\u1EC7p Active.`}:{allowed:!1,userId:c,userName:l,email:p,teamId:O,isOwner:!1,isPremium:_,reason:`\u26A0\uFE0F T\xE0i kho\u1EA3n [${p}] l\xE0 Th\xE0nh vi\xEAn (Member). \u0110\u1EC3 b\u1EA3o v\u1EC7 d\u1EEF li\u1EC7u c\xF4ng ty, ch\u1EC9 Tr\u01B0\u1EDFng nh\xF3m (Team Owner) m\u1EDBi c\xF3 quy\u1EC1n k\xEDch ho\u1EA1t c\u1EE5m Worker cho Team.`}}catch(a){return{allowed:!1,userId:"",userName:"Unknown",email:"",teamId:n,isOwner:!1,isPremium:!1,reason:`L\u1ED7i k\u1EBFt n\u1ED1i ki\u1EC3m tra quy\u1EC1n h\u1EA1n: ${a?.message}`}}}async loginWithCredentials(t,r,o="https://api.softty.net/v1",n="699cfc3100136099c1c1"){let a=t?.trim(),i=r;if(!a||!i){console.log(`
|
|
280
280
|
==================================================================`),console.log("\u{1F510} ZPLUS WORKER TERMINAL LOGIN (HEADLESS LINUX / VPS)"),console.log("=================================================================="),console.log("\u2139\uFE0F \u0110\u0103ng nh\u1EADp b\u1EB1ng t\xE0i kho\u1EA3n Tr\u01B0\u1EDFng nh\xF3m (Softty ID) \u0111\u1EC3 c\u1EA5p quy\u1EC1n Worker."),console.log("------------------------------------------------------------------");let s=$St.default.createInterface({input:process.stdin,output:process.stdout}),c=l=>new Promise(p=>s.question(l,p));a||(a=(await c("? Nh\u1EADp Email Tr\u01B0\u1EDFng nh\xF3m (Softty ID): ")).trim()),i||(i=await c("? Nh\u1EADp M\u1EADt kh\u1EA9u: ")),s.close()}if(!a||!i)return console.error("\u274C L\u1ED7i: Email v\xE0 m\u1EADt kh\u1EA9u kh\xF4ng \u0111\u01B0\u1EE3c \u0111\u1EC3 tr\u1ED1ng."),null;try{console.log(`
|
|
281
281
|
\u23F3 \u0110ang x\xE1c th\u1EF1c v\u1EDBi m\xE1y ch\u1EE7 Softty Cloud...`);let s=`${o}/account/sessions/email`,c=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json","X-Appwrite-Project":n},body:JSON.stringify({email:a,password:i})});if(!c.ok){let b=await c.json().catch(()=>({}));return console.error(`\u274C \u0110\u0103ng nh\u1EADp th\u1EA5t b\u1EA1i: ${b?.message||"Email ho\u1EB7c m\u1EADt kh\u1EA9u kh\xF4ng ch\xEDnh x\xE1c."}`),null}let l=await c.json(),p=l.secret||l.$id,h=await this.verifyEntitlements(p,o,n);console.log(`
|
|
282
282
|
`+h.reason);let y={userId:h.userId,userName:h.userName,email:h.email,teamId:h.teamId,sessionToken:p,isOwner:h.isOwner,isPremium:h.isPremium,isAllowed:h.allowed,statusMessage:h.reason,savedAt:Date.now()};return this.saveAuth(y),h.allowed?console.log(`
|
|
@@ -405,7 +405,7 @@ T\xD9Y CH\u1ECCN CHO UNINSTALL:
|
|
|
405
405
|
================================================================================`),console.log("\u{1F3E2} C\xD4NG TY TNHH SOFTTYNET (SOFTTYNET CO., LTD.)"),console.log("\u{1FA7A} CH\u1EA8N \u0110O\xC1N H\u1EC6 TH\u1ED0NG TI\u1EBEN TR\xCCNH ZPLUS WORKER (ENTERPRISE CLI DOCTOR)"),console.log("\u{1F310} B\u1EA3n quy\u1EC1n: \xA9 2026 Softtynet Co., Ltd. | H\u1ED7 tr\u1EE3: support@softty.net"),console.log("================================================================================"),console.log(`\u{1F3F7}\uFE0F \u0110\u1ECBnh danh ti\u1EBFn tr\xECnh: ${process.title} [PID: ${process.pid}]`),console.log(`\u{1F4BB} H\u1EC7 \u0111i\u1EC1u h\xE0nh: ${Xh.default.type()} ${Xh.default.release()} (${Xh.default.arch()})`),console.log(`\u{1F4E6} Node.js Engine: ${process.version}`),console.log(`\u{1F9E0} RAM kh\u1EA3 d\u1EE5ng: ${Math.round(Xh.default.freemem()/1024/1024)} MB / ${Math.round(Xh.default.totalmem()/1024/1024)} MB`),process.stdout.write(`\u{1F310} K\u1EBFt n\u1ED1i Cloud Endpoint (${o})... `);try{let _=await fetch(`${o}/health/version`,{signal:AbortSignal.timeout(5e3)});_.ok?console.log("\u2705 OK"):console.log(`\u26A0\uFE0F HTTP ${_.status}`)}catch(_){console.log(`\u274C TH\u1EA4T B\u1EA0I (${_?.message||_})`)}let l=hO.loadStoredAuth();l?(console.log(`\u{1F510} T\xE0i kho\u1EA3n: \u2705 ${l.userName} (${l.email})`),console.log(`\u{1F48E} G\xF3i d\u1ECBch v\u1EE5: ${l.isPremium?"Doanh Nghi\u1EC7p (Enterprise) \u2705":"Mi\u1EC5n Ph\xED (Free) \u26A0\uFE0F"}`),console.log(`\u{1F451} Quy\u1EC1n h\u1EA1n: ${l.isOwner?"Tr\u01B0\u1EDFng nh\xF3m (Owner) \u2705":"Th\xE0nh vi\xEAn (Member) \u26A0\uFE0F"}`),console.log(`\u{1F6A6} Quy\u1EC1n ch\u1EA1y: ${l.isAllowed?"\u0110\u01AF\u1EE2C PH\xC9P CH\u1EA0Y 24/7 \u2705":"STANDBY (Kh\xF4ng \u0111\u01B0\u1EE3c ch\u1EA1y) \u23F8\uFE0F"}`)):console.log("\u{1F510} Phi\xEAn x\xE1c th\u1EF1c: \u26A0\uFE0F CH\u01AFA \u0110\u0102NG NH\u1EACP (Ch\u1EA1y: zplus-worker login)");let p=process.env.ZPLUS_HOME||dI.default.join(Xh.default.homedir(),".zplus"),h=dI.default.join(p,"worker_heartbeat.json"),y=!1,b="";if(ql.default.existsSync(h))try{let _=JSON.parse(ql.default.readFileSync(h,"utf-8"));_.status==="running"&&Date.now()-(_.lastPing||0)<6e4&&(y=!0,b=`(PID: ${_.pid}, Uptime: ${Math.round((_.uptimeSeconds||0)/60)} ph\xFAt, WSS: ${_.activeRunners||0})`)}catch{}console.log("\u{1F6E1}\uFE0F Ch\u1EBF \u0111\u1ED9 m\u1EA1ng: Zero-Port Daemon (Outbound-only - Mi\u1EC5n nhi\u1EC5m 100% \u0111\u1EE5ng c\u1ED5ng) \u2705"),console.log(`\u26A1 Tr\u1EA1ng th\xE1i ch\u1EA1y: ${y?`\u0110ANG HO\u1EA0T \u0110\u1ED8NG \u2705 ${b}`:"\u0110ANG D\u1EEANG \u26AA (Ch\u1EA1y: zplus-worker start)"}`);let m=hO.getAuthFilePath();if(ql.default.existsSync(m))try{let O=(ql.default.statSync(m).mode&511).toString(8);console.log(`\u{1F512} Quy\u1EC1n t\u1EC7p auth (${m}): 0${O} ${O==="600"?"\u2705 (An to\xE0n t\u1ED1i \u0111a)":"\u26A0\uFE0F (Khuy\xEAn d\xF9ng 0600)"}`)}catch{}let M=c6.getStatus();console.log(`\u{1F504} T\u1EF1 b\u1EADt sau reboot: ${M.isEnabled?`\u2705 \u0110\xC3 B\u1EACT (${M.serviceType.toUpperCase()})`:"\u26A0\uFE0F CH\u01AFA B\u1EACT (Ch\u1EA1y: zplus-worker autostart enable)"}`),console.log(`================================================================================
|
|
406
406
|
`),process.exit(0)}t&&!["start","run","daemon"].includes(t)&&!t.startsWith("-")&&(console.error(`
|
|
407
407
|
\u274C L\u1EC7nh kh\xF4ng x\xE1c \u0111\u1ECBnh: "${t}"`),console.error("\u{1F449} Ch\u1EA1y 'zplus-worker help' \u0111\u1EC3 xem danh s\xE1ch l\u1EC7nh \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3."),console.error(`\u{1F449} Ch\u1EA1y 'zplus-worker start' ho\u1EB7c 'zplus-worker' \u0111\u1EC3 kh\u1EDFi ch\u1EA1y Daemon 24/7.
|
|
408
|
-
`),process.exit(1)),dc.info("================================================================================"),dc.info("\u{1F3E2} C\xD4NG TY TNHH SOFTTYNET (SOFTTYNET CO., LTD.)"),dc.info("\u{1F680} ZPlus Headless 24/7 Automation Worker Daemon (Enterprise Edition)"),dc.info(`\u{1F310} Phi\xEAn b\u1EA3n: v${Lp} | Website: https://softty.net | B\u1EA3n quy\u1EC1n \xA9 2026`),dc.info(`\u{1F6E1}\uFE0F \u0110\u1ECBnh danh OS Process: ${process.title} [PID: ${process.pid}]`),dc.info("================================================================================");let i=N6.loadFromEnv(e),s=hO.loadStoredAuth();s?s.isAllowed?(i.appwriteSessionToken=s.sessionToken,i.teamId=s.teamId||i.teamId,dc.info(`\u{1F510} \u0110\xE3 nh\u1EADn di\u1EC7n phi\xEAn SSO: ${s.userName} (${s.email}) - Team: [${i.teamId}]`)):(i.isStandby=!0,i.standbyReason=s.statusMessage,dc.warn(`[Gatekeeper] ${s.statusMessage}`),dc.warn("[Gatekeeper] Worker s\u1EBD ch\u1EA1y \u1EDF ch\u1EBF \u0111\u1ED9 STANDBY (Kh\xF4ng nh\u1EADn nick).")):!i.appwriteSessionToken&&!i.appwriteApiKey&&!i.desktopSecret&&(dc.info("\u2139\uFE0F Ch\u01B0a t\xECm th\u1EA5y phi\xEAn \u0111\u0103ng nh\u1EADp \u0111\xE3 l\u01B0u."),dc.info("\u{1F449} B\u1EA1n c\xF3 th\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng l\u1EC7nh: npx @softtynet/zplus-worker login"),dc.info("\u{1F449} Ho\u1EB7c gh\xE9p n\u1ED1i t\u1EEB ZPlus Desktop: npx @softtynet/zplus-worker login --pair=<CODE>"));let c=new pV(i);process.on("SIGINT",async()=>{dc.info("Received SIGINT, shutting down gracefully..."),await c.stop(),process.exit(0)}),process.on("SIGTERM",async()=>{dc.info("Received SIGTERM, shutting down gracefully..."),await c.stop(),process.exit(0)}),await c.start()}pGn().catch(e=>{dc.error("Worker fatal error:",e),process.exit(1)});
|
|
408
|
+
`),process.exit(1)),dc.info("================================================================================"),dc.info("\u{1F3E2} C\xD4NG TY TNHH SOFTTYNET (SOFTTYNET CO., LTD.)"),dc.info("\u{1F680} ZPlus Headless 24/7 Automation Worker Daemon (Enterprise Edition)"),dc.info(`\u{1F310} Phi\xEAn b\u1EA3n: v${Lp} | Website: https://softty.net | B\u1EA3n quy\u1EC1n \xA9 2026`),dc.info(`\u{1F6E1}\uFE0F \u0110\u1ECBnh danh OS Process: ${process.title} [PID: ${process.pid}]`),dc.info("================================================================================");let i=N6.loadFromEnv(e),s=hO.loadStoredAuth();s?s.isAllowed?(i.appwriteSessionToken=s.sessionToken,i.teamId=s.teamId||i.teamId,s.userId&&(i.userId=s.userId),dc.info(`\u{1F510} \u0110\xE3 nh\u1EADn di\u1EC7n phi\xEAn SSO: ${s.userName} (${s.email}) - Team: [${i.teamId}] - User: [${i.userId||"N/A"}]`)):(i.isStandby=!0,i.standbyReason=s.statusMessage,dc.warn(`[Gatekeeper] ${s.statusMessage}`),dc.warn("[Gatekeeper] Worker s\u1EBD ch\u1EA1y \u1EDF ch\u1EBF \u0111\u1ED9 STANDBY (Kh\xF4ng nh\u1EADn nick).")):!i.appwriteSessionToken&&!i.appwriteApiKey&&!i.desktopSecret&&(dc.info("\u2139\uFE0F Ch\u01B0a t\xECm th\u1EA5y phi\xEAn \u0111\u0103ng nh\u1EADp \u0111\xE3 l\u01B0u."),dc.info("\u{1F449} B\u1EA1n c\xF3 th\u1EC3 \u0111\u0103ng nh\u1EADp b\u1EB1ng l\u1EC7nh: npx @softtynet/zplus-worker login"),dc.info("\u{1F449} Ho\u1EB7c gh\xE9p n\u1ED1i t\u1EEB ZPlus Desktop: npx @softtynet/zplus-worker login --pair=<CODE>"));let c=new pV(i);process.on("SIGINT",async()=>{dc.info("Received SIGINT, shutting down gracefully..."),await c.stop(),process.exit(0)}),process.on("SIGTERM",async()=>{dc.info("Received SIGTERM, shutting down gracefully..."),await c.stop(),process.exit(0)}),await c.start()}pGn().catch(e=>{dc.error("Worker fatal error:",e),process.exit(1)});
|
|
409
409
|
/*! Bundled license information:
|
|
410
410
|
|
|
411
411
|
tough-cookie/dist/cookie/cookie.js:
|