gramstax 0.5.4 → 0.5.6

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.
@@ -1,11 +1,11 @@
1
- "use strict";var gt=Object.create;var D=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var ft=Object.getPrototypeOf,Ct=Object.prototype.hasOwnProperty;var p=(g,t)=>D(g,"name",{value:t,configurable:!0});var St=(g,t)=>{for(var e in t)D(g,e,{get:t[e],enumerable:!0})},Z=(g,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of yt(t))!Ct.call(g,n)&&n!==e&&D(g,n,{get:()=>t[n],enumerable:!(s=ut(t,n))||s.enumerable});return g};var tt=(g,t,e)=>(e=g!=null?gt(ft(g)):{},Z(t||!g||!g.__esModule?D(e,"default",{value:g,enumerable:!0}):e,g)),bt=g=>Z(D({},"__esModule",{value:!0}),g);var vt={};St(vt,{BlockKeyboard:()=>J,CacheExternal:()=>O,Ctx:()=>V,Gramstax:()=>U,LabelKeyboard:()=>Q,LoggingUtils:()=>L,TemplateEngine:()=>k,TemplateManager:()=>B,WorkerThreadExport:()=>H,WorkerThreadGatewayClient:()=>K,WorkerThreadGatewayServer:()=>E,WorkerThreadInit:()=>z,WorkerThreadLaunch:()=>$,WorkerThreadPool:()=>X,WorkerThreadRpc:()=>T,log:()=>q});module.exports=bt(vt);var Pt=p(()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,"getImportMetaUrl"),S=Pt();var et=require("logging-pretty");var L=class extends et.LoggingPretty{static{p(this,"LoggingUtils")}constructor(t){super(t)}errorMake(t,e,s){this.error(`[${e?`${e}:${s}`:s}] ${this._formatErrorObj(t)}`)}_formatErrorObj(t){return JSON.stringify(t instanceof Error?{message:t.message,stack:t.stack,name:t.name}:t,null,2)}},q=new L;var st=require("keyv"),nt=tt(require("@keyv/redis"),1);var O=class extends st.Keyv{constructor(e="memory",s,n,o){let a;e.startsWith("redis")&&(a=new nt.default(e)),e==="memory"&&(a=new Map),o?.forceStore&&(a=o.forceStore);super({store:a,namespace:n,ttl:s});this.url=e}static{p(this,"CacheExternal")}refreshLruCache(e){let s=this.store,n=this.opts.namespace?this.opts.namespace?.length+1:null,o=s.keys().toArray();for(let a=0;a<o.length;a++){let i=o[a];if(a==e)return;this.get(n?i.slice(n):i)}}};var it=require("timers/promises"),R=require("grammy");var V=class{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get userIsPremium(){return this.ct.from?.is_premium??!1}get userIsBot(){return this.ct.from?.is_bot??!1}get userId(){return this.ct.from?.id}get userName(){return this.ct.from?.username}get userFullName(){return`${this.ct.from?.first_name} ${this.ct.from?.last_name||""}`}get userFirstName(){return this.ct.from?.first_name}get userLastName(){return this.ct.from?.last_name}get userLanguage(){return this.ct.from?.language_code}set userLanguage(t){this.ct.from.language_code=t}get msgText(){return this.ct.message?.text}get msgTextPayloads(){return this.getPayloads(this.msgText,"space",this.data?._positionPayloadText||this.temp?.data?._positionPayloadText)}get msgTextPayload(){return this.msgTextPayloads[0]}get msgTextCommandPayloads(){return this.getPayloads(this.msgText,"space")}get msgTextCommandPayload(){return this.msgTextCommandPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionPayload(){return this.msgCaptionPayloads[0]}get msgCaptionCommandPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionCommandPayload(){return this.msgCaptionCommandPayloads[0]}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get msgDocument(){return this.ct.message?.document}get msgAnimation(){return this.ct.message?.animation}get msgVoice(){return this.ct.message?.voice}get msgVideoNote(){return this.ct.message?.video_note}get msgSticker(){return this.ct.message?.sticker}get msgLocation(){return this.ct.message?.location}get msgContact(){return this.ct.message?.contact}get msgWebAppData(){return this.ct.message?.web_app_data}get msgGift(){return this.ct.message?.gift}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataPayloads(){return this.getPayloads(this.callbackData,"colon")}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}set session(t){this.temp.session=t}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(t){this.ct=t.ct,this.cacheSession=t.cacheSession,this.cacheKeyboard=t.cacheKeyboard,this.templateManager=t.templateManager,this.temp=t.temp}async broadcast(t,e,s,n,o,a,i=!1){try{this.temp.isAnswer=!0;let r=30,c=e.map(l=>this.templateManager.getMessage(this.data.name,o,l,n));for(let l=0;l<t.length;l++){let d=t[l],h=c[l];await this.ct.api.sendMessage(d,h,{parse_mode:"HTML",reply_markup:s,...a}),l+1==r&&await(0,it.setTimeout)(1200)}}catch(r){if(i)throw r}}async reply(t,e,s,n){this.temp.isAnswer=!0;let o=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:t,...n})}async replyMedia(t,e,s,n,o){this.temp.isAnswer=!0;let a=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s),i={parse_mode:"HTML",reply_markup:e,...o};if(t=="photo")return await this.ct.replyWithPhoto(a.src,{caption:a.caption,...i});if(t=="video")return await this.ct.replyWithVideo(a.src,{caption:a.caption,...i});if(t=="audio")return await this.ct.replyWithAudio(a.src,{caption:a.caption,...i});if(t=="document")return await this.ct.replyWithDocument(a.src,{caption:a.caption,...i});if(t=="animation")return await this.ct.replyWithAnimation(a.src,{caption:a.caption,...i});if(t=="voice")return await this.ct.replyWithVoice(a.src,i);if(t=="video_note")return await this.ct.replyWithVideoNote(a.src,i);if(t=="sticker")return await this.ct.replyWithSticker(a.src,i);if(t=="location")return await this.ct.replyWithLocation(parseInt(a.latitude),parseInt(a.longitude),i);if(t=="contact")return await this.ct.replyWithContact(a.phone,a.first_name,{vcard:a.vcard,...i})}async replyPhoto(t,e,s,n){return this.replyMedia("photo",t,e,s,n)}async replyVideo(t,e,s,n){return this.replyMedia("video",t,e,s,n)}async replyAudio(t,e,s,n){return this.replyMedia("audio",t,e,s,n)}async replyDocument(t,e,s,n){return this.replyMedia("document",t,e,s,n)}async replyAnimation(t,e,s,n){return this.replyMedia("animation",t,e,s,n)}async replyVoice(t,e,s,n){return this.replyMedia("voice",t,e,s,n)}async replyVideoNote(t,e,s,n){return this.replyMedia("video_note",t,e,s,n)}async replySticker(t,e,s,n){return this.replyMedia("sticker",t,e,s,n)}async replyLocation(t,e,s,n){return this.replyMedia("location",t,e,s,n)}async replyContact(t,e,s,n){return this.replyMedia("contact",t,e,s,n)}async replyAction(t){return await this.ct.replyWithChatAction(t)}async edit(t,e,s,n,o=!0){try{this.temp.isAnswer=!0;let a=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.editMessageText(a,{parse_mode:"HTML",reply_markup:t,...n})}catch(a){if(o)await this.reply(t,e,s,n);else throw a}}async editMedia(t,e,s,n,o,a,i=!0){try{this.temp.isAnswer=!0;let{src:r,caption:c}=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s);return t=="voice"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="video_note"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="sticker"?(await this.delete(),await this.replySticker(e,s,n,o)):t=="location"?(await this.delete(),await this.replyLocation(e,s,n,o)):t=="contact"?(await this.delete(),await this.replyContact(e,s,n,o)):await this.ct.editMessageMedia({media:r,caption:c,type:t,parse_mode:"HTML",...o},{reply_markup:e,...a})}catch(r){if(i===!0)await this.reply(e,s,n,a);else throw r}}async editPhoto(t,e,s,n,o){return await this.editMedia("photo",t,e,s,n,o)}async editVideo(t,e,s,n,o){return await this.editMedia("video",t,e,s,n,o)}async editAudio(t,e,s,n,o){return await this.editMedia("audio",t,e,s,n,o)}async editDocument(t,e,s,n,o){return await this.editMedia("document",t,e,s,n,o)}async editAnimation(t,e,s,n,o){return await this.editMedia("animation",t,e,s,n,o)}async editVoice(t,e,s,n){return await this.editMedia("voice",t,e,s,n)}async editVideoNote(t,e,s,n){return await this.editMedia("video_note",t,e,s,n)}async editSticker(t,e,s,n){return await this.editMedia("sticker",t,e,s,n)}async editLocation(t,e,s,n){return await this.editMedia("location",t,e,s,n)}async editContact(t,e,s,n){return await this.editMedia("contact",t,e,s,n)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(t){try{return this.temp.isAnswer=!0,await this.ct.answerCallbackQuery(t)}catch{return null}}async sessionSet(t,e,s){try{let n={method:t,params:e,...s},o=await this.cacheSession.set(`${this.userId}`,n);return o&&(this.session=n),o}catch{return null}}async sessionGet(){try{let t=await this.cacheSession.get(`${this.userId}`);return t&&(this.session=t),t||null}catch{return null}}async sessionClear(){try{let t=await this.cacheSession.delete(`${this.userId}`);return t&&(this.session={}),t}catch{return null}}static buildData(t){let s=typeof t=="function"?{callback:t}:t||{},n=s.callback,o=this.prototype.addPayloads.bind(this.prototype);return{name:"",intentText:s.intentText||"",intentTextCommand:s.intentTextCommand||"",callback:n?function(...i){return o(this.intentCallback,"colon",n(...i))}:function(){return this?.intentCallback},intentCallback:"",_positionPayloadText:s.intentText?s.intentText.split(this.prototype.getSeperatorTag("space")).length:void 0}}keyboardCols(t,e,s,n){let[o,a]=s.split("-"),i=parseInt(o),r=a?parseInt(a):null,c=e.length,l=t;for(let d=0;d<c;d++){let h=e[d];if(n(h,d),r===null)(d+1)%i===0&&d<c-1&&l.row();else{let m=c-(d+1);(m===r||m>r&&(d+1)%i===0)&&l.row()}}return t}bottomKeyboardT(t="1",e,s){return this.bottomKeyboard((n,o)=>this.keyboardCols(n,o,t,a=>n.text(a)),{baseId:e??void 0,data:s})}inlineKeyboardT(t,e="1",s,n){return this.inlineKeyboard((o,a)=>this.keyboardCols(o,a,e,(i,r)=>{let c=t[r],l=typeof c=="string"?c:c.data.callback();o.text(i,l)}),{baseId:s??void 0,data:n})}inlineKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:i`,r=this.cacheKeyboard.get(i);if(!r){let c=new R.InlineKeyboard,l=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data),d=t(c,l);return this.cacheKeyboard.set(i,d),d}return r}let n=new R.InlineKeyboard,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data);return t(n,o)}bottomKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:b`,r=this.cacheKeyboard.get(i);if(!r){let c=new R.Keyboard,l=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),d=t(c,l);return d.resized(!0),this.cacheKeyboard.set(i,d),d}return r}let n=new R.Keyboard,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),a=t(n,o);return a.resized(),a}getSeperatorTag(t="space"){return t=="space"?" ":":"}havePayloads(t="",e){return t.includes(this.getSeperatorTag(e))}addPayloads(t="",e,s){let n=this.getSeperatorTag(e),o="";for(let a=0;a<s.length;a++){let i=s[a];i!=null&&i!==""&&(o+=n+i)}return t+o}getPayloads(t="",e,s=1){if(!t)return[];let n=this.getSeperatorTag(e);return t.split(n).slice(s)}getIntent(t="",e,s=1){if(!t)return"";let n=this.getSeperatorTag(e),o=t.split(n);return s==1?o[0]:o.slice(0,s).join(n)}validateSessionCallback(t,e){return(t??this.session.method)===this.methodSessionCallback(e)}validateSessionCallbackPayload(t,e){return(t??this.session.method)===this.methodSessionCallbackPayload(e)}validateSessionText(t,e){return(t??this.session.method)===this.methodSessionText(e)}validateSessionTextPayload(t,e){return(t??this.session.method)===this.methodSessionTextPayload(e)}validateSessionTextCommand(t,e){return(t??this.session.method)===this.methodSessionTextCommand(e)}validateSessionTextCommandPayload(t,e){return(t??this.session.method)===this.methodSessionTextCommandPayload(e)}validateSessionTextFree(t,e){return(t??this.session.method)===this.methodSessionTextFree(e)}validateSessionPhotoCaption(t,e){return(t??this.session.method)===this.methodSessionPhotoCaption(e)}validateSessionPhotoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(t,e){return(t??this.session.method)===this.methodSessionPhotoFree(e)}validateSessionVideoCaption(t,e){return(t??this.session.method)===this.methodSessionVideoCaption(e)}validateSessionVideoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommandPayload(e)}validateSessionVideoFree(t,e){return(t??this.session.method)===this.methodSessionVideoFree(e)}validateSessionAudioCaption(t,e){return(t??this.session.method)===this.methodSessionAudioCaption(e)}validateSessionAudioCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommandPayload(e)}validateSessionAudioFree(t,e){return(t??this.session.method)===this.methodSessionAudioFree(e)}validateSessionDocumentCaption(t,e){return(t??this.session.method)===this.methodSessionDocumentCaption(e)}validateSessionDocumentCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(t,e){return(t??this.session.method)===this.methodSessionDocumentFree(e)}validateSessionAnimationCaption(t,e){return(t??this.session.method)===this.methodSessionAnimationCaption(e)}validateSessionAnimationCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(t,e){return(t??this.session.method)===this.methodSessionAnimationFree(e)}validateSessionVoiceCaption(t,e){return(t??this.session.method)===this.methodSessionVoiceCaption(e)}validateSessionVoiceCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(t,e){return(t??this.session.method)===this.methodSessionVoiceFree(e)}validateSessionVideoNoteFree(t,e){return(t??this.session.method)===this.methodSessionVideoNoteFree(e)}validateSessionStickerFree(t,e){return(t??this.session.method)===this.methodSessionStickerFree(e)}validateSessionLocationFree(t,e){return(t??this.session.method)===this.methodSessionLocationFree(e)}validateSessionContactFree(t,e){return(t??this.session.method)===this.methodSessionContactFree(e)}sessionCallback(t,e){return this.sessionSet(this.methodSessionCallback(e),t)}sessionCallbackPayload(t,e){return this.sessionSet(this.methodSessionCallbackPayload(e),t)}sessionText(t,e){return this.sessionSet(this.methodSessionText(e),t)}sessionTextPayload(t,e){return this.sessionSet(this.methodSessionTextPayload(e),t)}sessionTextCommand(t,e){return this.sessionSet(this.methodSessionTextCommand(e),t)}sessionTextCommandPayload(t,e){return this.sessionSet(this.methodSessionTextCommandPayload(e),t)}sessionTextFree(t,e){return this.sessionSet(this.methodSessionTextFree(e),t)}sessionPhotoCaption(t,e){return this.sessionSet(this.methodSessionPhotoCaption(e),t)}sessionPhotoCaptionPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionPayload(e),t)}sessionPhotoCaptionCommand(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommand(e),t)}sessionPhotoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommandPayload(e),t)}sessionPhotoFree(t,e){return this.sessionSet(this.methodSessionPhotoFree(e),t)}sessionVideoCaption(t,e){return this.sessionSet(this.methodSessionVideoCaption(e),t)}sessionVideoCaptionPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionPayload(e),t)}sessionVideoCaptionCommand(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommand(e),t)}sessionVideoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommandPayload(e),t)}sessionVideoFree(t,e){return this.sessionSet(this.methodSessionVideoFree(e),t)}sessionAudioCaption(t,e){return this.sessionSet(this.methodSessionAudioCaption(e),t)}sessionAudioCaptionPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionPayload(e),t)}sessionAudioCaptionCommand(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommand(e),t)}sessionAudioCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommandPayload(e),t)}sessionAudioFree(t,e){return this.sessionSet(this.methodSessionAudioFree(e),t)}sessionDocumentCaption(t,e){return this.sessionSet(this.methodSessionDocumentCaption(e),t)}sessionDocumentCaptionPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionPayload(e),t)}sessionDocumentCaptionCommand(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommand(e),t)}sessionDocumentCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommandPayload(e),t)}sessionDocumentFree(t,e){return this.sessionSet(this.methodSessionDocumentFree(e),t)}sessionAnimationCaption(t,e){return this.sessionSet(this.methodSessionAnimationCaption(e),t)}sessionAnimationCaptionPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionPayload(e),t)}sessionAnimationCaptionCommand(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommand(e),t)}sessionAnimationCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommandPayload(e),t)}sessionAnimationFree(t,e){return this.sessionSet(this.methodSessionAnimationFree(e),t)}sessionVoiceCaption(t,e){return this.sessionSet(this.methodSessionVoiceCaption(e),t)}sessionVoiceCaptionPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionPayload(e),t)}sessionVoiceCaptionCommand(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommand(e),t)}sessionVoiceCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommandPayload(e),t)}sessionVoiceFree(t,e){return this.sessionSet(this.methodSessionVoiceFree(e),t)}sessionVideoNoteFree(t,e){return this.sessionSet(this.methodSessionVideoNoteFree(e),t)}sessionStickerFree(t,e){return this.sessionSet(this.methodSessionStickerFree(e),t)}sessionLocationFree(t,e){return this.sessionSet(this.methodSessionLocationFree(e),t)}sessionContactFree(t,e){return this.sessionSet(this.methodSessionContactFree(e),t)}sessionToCallback(t,e){return this.sessionCallback({...this.session.params,...t},e)}sessionToCallbackPayload(t,e){return this.sessionCallbackPayload({...this.session.params,...t},e)}sessionToText(t,e){return this.sessionText({...this.session.params,...t},e)}sessionToTextPayload(t,e){return this.sessionTextPayload({...this.session.params,...t},e)}sessionToTextCommand(t,e){return this.sessionTextCommand({...this.session.params,...t},e)}sessionToTextCommandPayload(t,e){return this.sessionTextCommandPayload({...this.session.params,...t},e)}sessionToTextFree(t,e){return this.sessionTextFree({...this.session.params,...t},e)}sessionToPhotoCaption(t,e){return this.sessionPhotoCaption({...this.session.params,...t},e)}sessionToPhotoCaptionPayload(t,e){return this.sessionPhotoCaptionPayload({...this.session.params,...t},e)}sessionToPhotoCaptionCommand(t,e){return this.sessionPhotoCaptionCommand({...this.session.params,...t},e)}sessionToPhotoCaptionCommandPayload(t,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...t},e)}sessionToPhotoFree(t,e){return this.sessionPhotoFree({...this.session.params,...t},e)}sessionToVideoCaption(t,e){return this.sessionVideoCaption({...this.session.params,...t},e)}sessionToVideoCaptionPayload(t,e){return this.sessionVideoCaptionPayload({...this.session.params,...t},e)}sessionToVideoCaptionCommand(t,e){return this.sessionVideoCaptionCommand({...this.session.params,...t},e)}sessionToVideoCaptionCommandPayload(t,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...t},e)}sessionToVideoFree(t,e){return this.sessionVideoFree({...this.session.params,...t},e)}sessionToAudioCaption(t,e){return this.sessionAudioCaption({...this.session.params,...t},e)}sessionToAudioCaptionPayload(t,e){return this.sessionAudioCaptionPayload({...this.session.params,...t},e)}sessionToAudioCaptionCommand(t,e){return this.sessionAudioCaptionCommand({...this.session.params,...t},e)}sessionToAudioCaptionCommandPayload(t,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...t},e)}sessionToAudioFree(t,e){return this.sessionAudioFree({...this.session.params,...t},e)}sessionToDocumentCaption(t,e){return this.sessionDocumentCaption({...this.session.params,...t},e)}sessionToDocumentCaptionPayload(t,e){return this.sessionDocumentCaptionPayload({...this.session.params,...t},e)}sessionToDocumentCaptionCommand(t,e){return this.sessionDocumentCaptionCommand({...this.session.params,...t},e)}sessionToDocumentCaptionCommandPayload(t,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...t},e)}sessionToDocumentFree(t,e){return this.sessionDocumentFree({...this.session.params,...t},e)}sessionToAnimationCaption(t,e){return this.sessionAnimationCaption({...this.session.params,...t},e)}sessionToAnimationCaptionPayload(t,e){return this.sessionAnimationCaptionPayload({...this.session.params,...t},e)}sessionToAnimationCaptionCommand(t,e){return this.sessionAnimationCaptionCommand({...this.session.params,...t},e)}sessionToAnimationCaptionCommandPayload(t,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...t},e)}sessionToAnimationFree(t,e){return this.sessionAnimationFree({...this.session.params,...t},e)}sessionToVoiceCaption(t,e){return this.sessionVoiceCaption({...this.session.params,...t},e)}sessionToVoiceCaptionPayload(t,e){return this.sessionVoiceCaptionPayload({...this.session.params,...t},e)}sessionToVoiceCaptionCommand(t,e){return this.sessionVoiceCaptionCommand({...this.session.params,...t},e)}sessionToVoiceCaptionCommandPayload(t,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...t},e)}sessionToVoiceFree(t,e){return this.sessionVoiceFree({...this.session.params,...t},e)}sessionToVideoNoteFree(t,e){return this.sessionVideoNoteFree({...this.session.params,...t},e)}sessionToStickerFree(t,e){return this.sessionStickerFree({...this.session.params,...t},e)}sessionToLocationFree(t,e){return this.sessionLocationFree({...this.session.params,...t},e)}sessionToContactFree(t,e){return this.sessionContactFree({...this.session.params,...t},e)}methodSession(t,e){return`${t}-${e||this.data.name}`}methodSessionCallback(t){return this.methodSession("1",t)}methodSessionCallbackPayload(t){return this.methodSession("2",t)}methodSessionText(t){return this.methodSession("3",t)}methodSessionTextPayload(t){return this.methodSession("4",t)}methodSessionTextCommand(t){return this.methodSession("5",t)}methodSessionTextCommandPayload(t){return this.methodSession("6",t)}methodSessionTextFree(t){return this.methodSession("7",t)}methodSessionPhotoCaption(t){return this.methodSession("8",t)}methodSessionPhotoCaptionPayload(t){return this.methodSession("9",t)}methodSessionPhotoCaptionCommand(t){return this.methodSession("10",t)}methodSessionPhotoCaptionCommandPayload(t){return this.methodSession("11",t)}methodSessionPhotoFree(t){return this.methodSession("12",t)}methodSessionVideoCaption(t){return this.methodSession("13",t)}methodSessionVideoCaptionPayload(t){return this.methodSession("14",t)}methodSessionVideoCaptionCommand(t){return this.methodSession("15",t)}methodSessionVideoCaptionCommandPayload(t){return this.methodSession("16",t)}methodSessionVideoFree(t){return this.methodSession("17",t)}methodSessionAudioCaption(t){return this.methodSession("18",t)}methodSessionAudioCaptionPayload(t){return this.methodSession("19",t)}methodSessionAudioCaptionCommand(t){return this.methodSession("20",t)}methodSessionAudioCaptionCommandPayload(t){return this.methodSession("21",t)}methodSessionAudioFree(t){return this.methodSession("22",t)}methodSessionDocumentCaption(t){return this.methodSession("23",t)}methodSessionDocumentCaptionPayload(t){return this.methodSession("24",t)}methodSessionDocumentCaptionCommand(t){return this.methodSession("25",t)}methodSessionDocumentCaptionCommandPayload(t){return this.methodSession("26",t)}methodSessionDocumentFree(t){return this.methodSession("27",t)}methodSessionAnimationCaption(t){return this.methodSession("28",t)}methodSessionAnimationCaptionPayload(t){return this.methodSession("29",t)}methodSessionAnimationCaptionCommand(t){return this.methodSession("30",t)}methodSessionAnimationCaptionCommandPayload(t){return this.methodSession("31",t)}methodSessionAnimationFree(t){return this.methodSession("32",t)}methodSessionVoiceCaption(t){return this.methodSession("33",t)}methodSessionVoiceCaptionPayload(t){return this.methodSession("34",t)}methodSessionVoiceCaptionCommand(t){return this.methodSession("35",t)}methodSessionVoiceCaptionCommandPayload(t){return this.methodSession("36",t)}methodSessionVoiceFree(t){return this.methodSession("37",t)}methodSessionVideoNoteFree(t){return this.methodSession("38",t)}methodSessionStickerFree(t){return this.methodSession("39",t)}methodSessionLocationFree(t){return this.methodSession("40",t)}methodSessionContactFree(t){return this.methodSession("41",t)}};var I=require("path"),rt=require("fs"),ct=require("url");var N=require("path"),F=require("fs"),ot=require("module");var P=class{static{p(this,"PageManager")}static _getFile(t,e,s=0){let o=Object.values(t)[s];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return o}static getFilePath(){return(0,N.join)(process.cwd(),"src","pages")}static getFileSync(t,e=0){t||(t=this.getFilePath());let n=(0,ot.createRequire)(t)(t);return this._getFile(n,t,e)}static async getFile(t,e=0){t||(t=this.getFilePath());let s=await import(`${t}?t=${Date.now()}`);return this._getFile(s,t,e)}static getFileManySync(t,e=0){if(t||(t=this.getFilePath()),!(0,F.existsSync)(t))throw new Error(`Directory ${t} is not found, please make it manually`);return(0,F.readdirSync)(t).map(n=>{let o=(0,N.join)(t,n);return{path:o,page:this.getFileSync(o,e)}})}static clearCacheRequire(t){if(t||(t=this.getFilePath()),!(0,F.existsSync)(t))throw new Error(`Directory ${t} is not found, please make it manually`);return(0,F.readdirSync)(t).forEach(s=>{let n=(0,N.join)(t,s);delete require.cache[require.resolve(n)]}),!0}};var b=require("path"),f=require("fs"),at=require("chokidar");var k=class{static{p(this,"TemplateEngine")}static _escape(t){return t.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(t){return t.replace(/\{\{(\w+)\}\}/g,(e,s)=>`\${(data && data["${s}"]) ?? ""}`)}static _processBaseBlocks(t){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,s={};for(let n of t.matchAll(e)){let o=n[2]??"default",i=(n[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[o]=i}return s}static _processScriptBlocks(t){return t.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,s)=>{let n=s.trim();return n?`\${(() => { if (!data) return ''; try { with(data) { ${n} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(t){return t.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(t){return t.replace(/<div>([\s\S]*?)<\/div>/gi,(e,s)=>s.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processSwitchBlocks(t){let e=/<switch\b(?:\s+value="([^"]+)")?>([\s\S]*?)<\/switch>/gi;return t.replace(e,(s,n,o)=>{if(!n)return"";let a="",i=/<case\b(?:\s+is="([^"]+)")?>([\s\S]*?)<\/case>/gi,r=/<default>([\s\S]*?)<\/default>/gi,c;for(;(c=i.exec(o))!==null;){let d=(c[1]||"").split(",").map(m=>m.trim()),h=(c[2]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");d.forEach(m=>{a+=`case "${m}": `}),a+=`return \`${h}\`; `}let l=r.exec(o);if(l){let d=(l[1]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");a+=`default: return \`${d}\`; `}else a+="default: return ''; ";return`\${(() => { switch((data && data["${n}"])) { ${a} } })()}`})}static _processExec(t){return t.replace(/{~\s*([\s\S]*?)\s*~}/g,(e,s)=>`\${(() => { try { return ${s} } catch(e) { try { with(data || {}) { return ${s} } } catch(ee) { return '' } } })()}`)}static _processMapBlocks(t){let e=/<map(?:\s+([^>]*))?>([\s\S]*?)<\/map>/gi;return t.replace(e,(s,n,o)=>{let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let h of n.matchAll(i))a[h[1]]=h[2];let r=a.src;if(!r)return"";let c=a.join??"\\n",l=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").replace(/`/g,"\\`");l=l.replace(/\{\{([\w.]+)\}\}/g,(h,m)=>m==="e"||m.startsWith("e.")?`\${${m}}`:m==="i"?"${i}":h);let d=c.replace(/"/g,'\\"');return`\${(data && data["${r}"] || []).map((e, i) => \`${l}\`).join("${d}")}`})}static _processMediaBlocks(t){let e=/<media(?:\s+([^>]*))?>([\s\S]*?)<\/media>/gi,s={};for(let n of t.matchAll(e)){let o=n[1],a=n[2],i={},r=/(\w+)="([^"]*)"/g;if(o)for(let m of o.matchAll(r))i[m[1]]=m[2];let c=i.lang||"default",l=i.type,d=a.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),h={type:l};i.src&&(h.src=i.src),d&&l!=="video_note"&&l!=="sticker"&&(h.caption=d),l==="location"&&(i.latitude&&(h.latitude=i.latitude),i.longitude&&(h.longitude=i.longitude),d&&(h.caption=d)),l==="contact"&&(i.phone&&(h.phone=i.phone),i.first_name&&(h.first_name=i.first_name),i.last_name&&(h.last_name=i.last_name),i.vcard&&(h.vcard=i.vcard),d&&(h.caption=d)),s[c]=h}return s}static _processMessageBlocks(t){let e=/<message(?:\s+([^>]*))?>([\s\S]*?)<\/message>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let l of n.matchAll(i))a[l[1]]=l[2];let r=a.lang||"default",c=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]=c}return s}static _processDescriptionBlocks(t){let e=/<description(?:\s+([^>]*))?>([\s\S]*?)<\/description>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.scope||"default",l=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]||(s[r]={}),s[r][c]=l}return s}static _processKeyboardBlocks(t){let e=/<keyboard(?:\s+([^>]*))?>([\s\S]*?)<\/keyboard>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.type==="bottom"?"bottom":"inline",l=o.trim();s[r]||(s[r]={}),s[r][c]=l}return s}static _compileToFunction(t,e){let s;e?s=t.map(a=>`\`${a}\``).join(","):s=`\`${t}\``;let n=s;if(n=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(n))),e){let o=`return [${n}]`;return new Function("data",o)}else{let o=`return ${n}`;return new Function("data",o)}}static compileMedia(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMediaBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let l={};for(let[d,h]of Object.entries(c)){if(d==="type"||typeof h!="string")continue;let m=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(h)))));l[d]=this._compileToFunction(m,!1)}n[o][r]=d=>{let h={...c};for(let[m,y]of Object.entries(l))h[m]=y(d);return h}}}return n}static compileMessages(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMessageBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let l=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(c)))));n[o][r]=this._compileToFunction(l,!1)}}return n}static compileDescription(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processDescriptionBlocks(a);n[o]={};for(let[r,c]of Object.entries(i))for(let[l,d]of Object.entries(c)){n[o][l]||(n[o][l]={});let h=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(d)))));n[o][l][r]=this._compileToFunction(h,!1)}}return n}static compileKeyboards(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processKeyboardBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){n[o][r]={};for(let[l,d]of Object.entries(c)){let m=d.split(/(?<!\\),\s*/).map(y=>y.replace(/\\,/g,",").trim()).map(y=>this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(y))))));n[o][r][l]=this._compileToFunction(m,!0)}}}return n}static _extractBlock(t,e,s="default",n="all",o){let a=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,i=t,r=!1;for(let c of t.matchAll(a))if((c[2]??"default")===s){i=c[3]??"",r=!0;break}if(!r){let c=/<base\b/.test(t);if(!(s==="default"&&!c))return""}if(e){if(e==="all")return i;let c=Array.isArray(e)?e:[e],l=[];for(let h of c){let m=new RegExp(`([ \\t]*)<${h}(?:\\s+([^>]*))?>([\\s\\S]*?)<\\/${h}>`,"gi");for(let y of i.matchAll(m)){let C=y[2];if(o){let u=/lang="([^"]*)"/i,w=C?.match(u);if(((w?w[1]:void 0)||"default")!==o)continue}l.push({start:y.index,content:y[0],innerContent:y[3]??""})}}l.sort((h,m)=>h.start-m.start);let d=p(h=>{let m=h.split(`
2
- `);if(m.length<=1)return h.trim();let y=m.filter(u=>u.trim().length>0);if(y.length===0)return"";let C=y.reduce((u,w)=>{let v=w.match(/^([ \t]*)/),x=v?v[1].length:0;return x<u?x:u},1/0);return m.map(u=>u.length>=C?u.slice(C):u.trimStart()).join(`
3
- `).trim()},"processResult");return n==="all"?l.map(m=>d(m.content)).join(`
4
- `):l.map(m=>d(m.innerContent)).join(`
5
- `)}return i}static _processImportBlocks(t){let e=/([ \t]*)<import(?:\s+([^>]*))?\/?>/gi,s=[];return{processed:t.replace(e,(o,a,i)=>{let r={},c=/(\w+)="([^"]*)"/g;if(i)for(let m of i.matchAll(c))r[m[1]]=m[2];let l=r.src;if(!l)return"";let d;r.block&&(r.block==="all"?d="all":r.block.includes(",")?d=r.block.split(",").map(m=>m.trim()).filter(m=>m):d=r.block);let h={src:l,blocks:d,base:r.base||"default",lang:r.lang,section:r.section||"all",indent:a||""};return s.push(h),`${a}__IMPORT_${s.length-1}__`}),imports:s}}static processImportBlocks(t,e,s=0,n){if(s>10)return"";let{processed:o,imports:a}=this._processImportBlocks(t),i=o;for(let r=0;r<a.length;r++){let c=a[r],l=`${c.src}|${c.base}|${c.lang||""}|${c.section}|${Array.isArray(c.blocks)?c.blocks.join(","):c.blocks||""}`,d;if(n&&n.has(l))d=n.get(l);else{let m=e(c.src);d=m?this._extractBlock(m,c.blocks,c.base,c.section,c.lang):"",d&&d.includes("<import")&&(d=this.processImportBlocks(d,e,s+1,n)),n&&n.set(l,d)}let h=d.split(`
1
+ "use strict";var gt=Object.create;var D=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var ft=Object.getPrototypeOf,Ct=Object.prototype.hasOwnProperty;var p=(g,t)=>D(g,"name",{value:t,configurable:!0});var St=(g,t)=>{for(var e in t)D(g,e,{get:t[e],enumerable:!0})},Z=(g,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of yt(t))!Ct.call(g,s)&&s!==e&&D(g,s,{get:()=>t[s],enumerable:!(n=ut(t,s))||n.enumerable});return g};var tt=(g,t,e)=>(e=g!=null?gt(ft(g)):{},Z(t||!g||!g.__esModule?D(e,"default",{value:g,enumerable:!0}):e,g)),bt=g=>Z(D({},"__esModule",{value:!0}),g);var wt={};St(wt,{BlockKeyboard:()=>J,CacheExternal:()=>O,Ctx:()=>V,Gramstax:()=>U,LabelKeyboard:()=>Q,LoggingUtil:()=>E,TemplateEngine:()=>k,TemplateManager:()=>B,WorkerThreadExport:()=>H,WorkerThreadGatewayClient:()=>K,WorkerThreadGatewayServer:()=>L,WorkerThreadInit:()=>z,WorkerThreadLaunch:()=>$,WorkerThreadPool:()=>X,WorkerThreadRpc:()=>T,log:()=>q});module.exports=bt(wt);var Pt=p(()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,"getImportMetaUrl"),S=Pt();var et=require("logging-pretty");var E=class extends et.LoggingPretty{static{p(this,"LoggingUtil")}constructor(t){super(t)}errorMake(t,e,n){this.error(`[${e?`${e}:${n}`:n}] ${this._formatErrorObj(t)}`)}_formatErrorObj(t){return JSON.stringify(t instanceof Error?{message:t.message,stack:t.stack,name:t.name}:t,null,2)}},q=new E;var st=require("keyv"),nt=tt(require("@keyv/redis"),1);var O=class extends st.Keyv{constructor(e="memory",n,s,o){let a;e.startsWith("redis")&&(a=new nt.default(e)),e==="memory"&&(a=new Map),o?.forceStore&&(a=o.forceStore);super({store:a,namespace:s,ttl:n});this.url=e}static{p(this,"CacheExternal")}refreshLruCache(e){let n=this.store,s=this.opts.namespace?this.opts.namespace?.length+1:null,o=n.keys().toArray();for(let a=0;a<o.length;a++){let i=o[a];if(a==e)return;this.get(s?i.slice(s):i)}}};var it=require("timers/promises"),R=require("grammy");var V=class{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get userIsPremium(){return this.ct.from?.is_premium??!1}get userIsBot(){return this.ct.from?.is_bot??!1}get userId(){return this.ct.from?.id}get userName(){return this.ct.from?.username}get userFullName(){return`${this.ct.from?.first_name} ${this.ct.from?.last_name||""}`}get userFirstName(){return this.ct.from?.first_name}get userLastName(){return this.ct.from?.last_name}get userLanguage(){return this.ct.from?.language_code}set userLanguage(t){this.ct.from.language_code=t}get msgText(){return this.ct.message?.text}get msgTextPayloads(){return this.getPayloads(this.msgText,"space",this.data?._positionPayloadText||this.temp?.data?._positionPayloadText)}get msgTextPayload(){return this.msgTextPayloads[0]}get msgTextCommandPayloads(){return this.getPayloads(this.msgText,"space")}get msgTextCommandPayload(){return this.msgTextCommandPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionPayload(){return this.msgCaptionPayloads[0]}get msgCaptionCommandPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionCommandPayload(){return this.msgCaptionCommandPayloads[0]}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get msgDocument(){return this.ct.message?.document}get msgAnimation(){return this.ct.message?.animation}get msgVoice(){return this.ct.message?.voice}get msgVideoNote(){return this.ct.message?.video_note}get msgSticker(){return this.ct.message?.sticker}get msgLocation(){return this.ct.message?.location}get msgContact(){return this.ct.message?.contact}get msgWebAppData(){return this.ct.message?.web_app_data}get msgGift(){return this.ct.message?.gift}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataPayloads(){return this.getPayloads(this.callbackData,"colon")}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}set session(t){this.temp.session=t}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(t){this.ct=t.ct,this.cacheSession=t.cacheSession,this.cacheKeyboard=t.cacheKeyboard,this.templateManager=t.templateManager,this.temp=t.temp}async broadcast(t,e,n,s,o,a,i=!1){try{this.temp.isAnswer=!0;let r=30,c=e.map(h=>this.templateManager.getMessage(this.data.name,o,h,s));for(let h=0;h<t.length;h++){let d=t[h],l=c[h];await this.ct.api.sendMessage(d,l,{parse_mode:"HTML",reply_markup:n,...a}),h+1==r&&await(0,it.setTimeout)(1200)}}catch(r){if(i)throw r}}async reply(t,e,n,s){this.temp.isAnswer=!0;let o=this.templateManager.getMessage(this.data.name,n,this.userLanguage,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:t,...s})}async replyMedia(t,e,n,s,o){this.temp.isAnswer=!0;let a=this.templateManager.getMedia(this.data.name,s,this.userLanguage,n),i={parse_mode:"HTML",reply_markup:e,...o};if(t=="photo")return await this.ct.replyWithPhoto(a.src,{caption:a.caption,...i});if(t=="video")return await this.ct.replyWithVideo(a.src,{caption:a.caption,...i});if(t=="audio")return await this.ct.replyWithAudio(a.src,{caption:a.caption,...i});if(t=="document")return await this.ct.replyWithDocument(a.src,{caption:a.caption,...i});if(t=="animation")return await this.ct.replyWithAnimation(a.src,{caption:a.caption,...i});if(t=="voice")return await this.ct.replyWithVoice(a.src,i);if(t=="video_note")return await this.ct.replyWithVideoNote(a.src,i);if(t=="sticker")return await this.ct.replyWithSticker(a.src,i);if(t=="location")return await this.ct.replyWithLocation(parseInt(a.latitude),parseInt(a.longitude),i);if(t=="contact")return await this.ct.replyWithContact(a.phone,a.first_name,{vcard:a.vcard,...i})}async replyPhoto(t,e,n,s){return this.replyMedia("photo",t,e,n,s)}async replyVideo(t,e,n,s){return this.replyMedia("video",t,e,n,s)}async replyAudio(t,e,n,s){return this.replyMedia("audio",t,e,n,s)}async replyDocument(t,e,n,s){return this.replyMedia("document",t,e,n,s)}async replyAnimation(t,e,n,s){return this.replyMedia("animation",t,e,n,s)}async replyVoice(t,e,n,s){return this.replyMedia("voice",t,e,n,s)}async replyVideoNote(t,e,n,s){return this.replyMedia("video_note",t,e,n,s)}async replySticker(t,e,n,s){return this.replyMedia("sticker",t,e,n,s)}async replyLocation(t,e,n,s){return this.replyMedia("location",t,e,n,s)}async replyContact(t,e,n,s){return this.replyMedia("contact",t,e,n,s)}async replyAction(t){return await this.ct.replyWithChatAction(t)}async edit(t,e,n,s,o=!0){try{this.temp.isAnswer=!0;let a=this.templateManager.getMessage(this.data.name,n,this.userLanguage,e);return await this.ct.editMessageText(a,{parse_mode:"HTML",reply_markup:t,...s})}catch(a){if(o)await this.reply(t,e,n,s);else throw a}}async editMedia(t,e,n,s,o,a,i=!0){try{this.temp.isAnswer=!0;let{src:r,caption:c}=this.templateManager.getMedia(this.data.name,s,this.userLanguage,n);return t=="voice"?(await this.delete(),await this.replyVoice(e,n,s,o)):t=="video_note"?(await this.delete(),await this.replyVoice(e,n,s,o)):t=="sticker"?(await this.delete(),await this.replySticker(e,n,s,o)):t=="location"?(await this.delete(),await this.replyLocation(e,n,s,o)):t=="contact"?(await this.delete(),await this.replyContact(e,n,s,o)):await this.ct.editMessageMedia({media:r,caption:c,type:t,parse_mode:"HTML",...o},{reply_markup:e,...a})}catch(r){if(i===!0)await this.reply(e,n,s,a);else throw r}}async editPhoto(t,e,n,s,o){return await this.editMedia("photo",t,e,n,s,o)}async editVideo(t,e,n,s,o){return await this.editMedia("video",t,e,n,s,o)}async editAudio(t,e,n,s,o){return await this.editMedia("audio",t,e,n,s,o)}async editDocument(t,e,n,s,o){return await this.editMedia("document",t,e,n,s,o)}async editAnimation(t,e,n,s,o){return await this.editMedia("animation",t,e,n,s,o)}async editVoice(t,e,n,s){return await this.editMedia("voice",t,e,n,s)}async editVideoNote(t,e,n,s){return await this.editMedia("video_note",t,e,n,s)}async editSticker(t,e,n,s){return await this.editMedia("sticker",t,e,n,s)}async editLocation(t,e,n,s){return await this.editMedia("location",t,e,n,s)}async editContact(t,e,n,s){return await this.editMedia("contact",t,e,n,s)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(t){try{return this.temp.isAnswer=!0,await this.ct.answerCallbackQuery(t)}catch{return null}}async sessionSet(t,e,n){try{let s={method:t,params:e,...n},o=await this.cacheSession.set(`${this.userId}`,s);return o&&(this.session=s),o}catch{return null}}async sessionGet(){try{let t=await this.cacheSession.get(`${this.userId}`);return t&&(this.session=t),t||null}catch{return null}}async sessionClear(){try{let t=await this.cacheSession.delete(`${this.userId}`);return t&&(this.session={}),t}catch{return null}}static buildData(t){let n=typeof t=="function"?{callback:t}:t||{},s=n.callback,o=this.prototype.addPayloads.bind(this.prototype),a=n.name||"";return{name:a,intentText:n.intentText||a,intentTextCommand:n.intentTextCommand||a,intentCallback:a,callback:s?function(...r){return o(this.intentCallback,"colon",s(...r))}:function(){return this?.intentCallback},_positionPayloadText:n.intentText?n.intentText.split(this.prototype.getSeperatorTag("space")).length:void 0}}keyboardCols(t,e,n,s){let[o,a]=n.split("-"),i=parseInt(o),r=a?parseInt(a):null,c=e.length,h=t;for(let d=0;d<c;d++){let l=e[d];if(s(l,d),r===null)(d+1)%i===0&&d<c-1&&h.row();else{let m=c-(d+1);(m===r||m>r&&(d+1)%i===0)&&h.row()}}return t}bottomKeyboardT(t="1",e,n){return this.bottomKeyboard((s,o)=>this.keyboardCols(s,o,t,a=>s.text(a)),{baseId:e??void 0,data:n})}inlineKeyboardT(t,e="1",n,s){return this.inlineKeyboard((o,a)=>this.keyboardCols(o,a,e,(i,r)=>{let c=t[r],h=typeof c=="string"?c:c.data.callback();o.text(i,h)}),{baseId:n??void 0,data:s})}inlineKeyboard(t,e){let n=this.data.name;if(e?.cache===!0){let i=`${n}:${this.userLanguage}:i`,r=this.cacheKeyboard.get(i);if(!r){let c=new R.InlineKeyboard,h=this.templateManager.getKeyboard(n,e?.baseId,this.userLanguage,"inline",e?.data),d=t(c,h);return this.cacheKeyboard.set(i,d),d}return r}let s=new R.InlineKeyboard,o=this.templateManager.getKeyboard(n,e?.baseId,this.userLanguage,"inline",e?.data);return t(s,o)}bottomKeyboard(t,e){let n=this.data.name;if(e?.cache===!0){let i=`${n}:${this.userLanguage}:b`,r=this.cacheKeyboard.get(i);if(!r){let c=new R.Keyboard,h=this.templateManager.getKeyboard(n,e?.baseId,this.userLanguage,"bottom",e?.data),d=t(c,h);return d.resized(!0),this.cacheKeyboard.set(i,d),d}return r}let s=new R.Keyboard,o=this.templateManager.getKeyboard(n,e?.baseId,this.userLanguage,"bottom",e?.data),a=t(s,o);return a.resized(),a}getSeperatorTag(t="space"){return t=="space"?" ":":"}havePayloads(t="",e){return t.includes(this.getSeperatorTag(e))}addPayloads(t="",e,n){let s=this.getSeperatorTag(e),o="";for(let a=0;a<n.length;a++){let i=n[a];i!=null&&i!==""&&(o+=s+i)}return t+o}getPayloads(t="",e,n=1){if(!t)return[];let s=this.getSeperatorTag(e);return t.split(s).slice(n)}getIntent(t="",e,n=1){if(!t)return"";let s=this.getSeperatorTag(e),o=t.split(s);return n==1?o[0]:o.slice(0,n).join(s)}validateSessionCallback(t,e){return(t??this.session.method)===this.methodSessionCallback(e)}validateSessionCallbackPayload(t,e){return(t??this.session.method)===this.methodSessionCallbackPayload(e)}validateSessionText(t,e){return(t??this.session.method)===this.methodSessionText(e)}validateSessionTextPayload(t,e){return(t??this.session.method)===this.methodSessionTextPayload(e)}validateSessionTextCommand(t,e){return(t??this.session.method)===this.methodSessionTextCommand(e)}validateSessionTextCommandPayload(t,e){return(t??this.session.method)===this.methodSessionTextCommandPayload(e)}validateSessionTextFree(t,e){return(t??this.session.method)===this.methodSessionTextFree(e)}validateSessionPhotoCaption(t,e){return(t??this.session.method)===this.methodSessionPhotoCaption(e)}validateSessionPhotoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(t,e){return(t??this.session.method)===this.methodSessionPhotoFree(e)}validateSessionVideoCaption(t,e){return(t??this.session.method)===this.methodSessionVideoCaption(e)}validateSessionVideoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommandPayload(e)}validateSessionVideoFree(t,e){return(t??this.session.method)===this.methodSessionVideoFree(e)}validateSessionAudioCaption(t,e){return(t??this.session.method)===this.methodSessionAudioCaption(e)}validateSessionAudioCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommandPayload(e)}validateSessionAudioFree(t,e){return(t??this.session.method)===this.methodSessionAudioFree(e)}validateSessionDocumentCaption(t,e){return(t??this.session.method)===this.methodSessionDocumentCaption(e)}validateSessionDocumentCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(t,e){return(t??this.session.method)===this.methodSessionDocumentFree(e)}validateSessionAnimationCaption(t,e){return(t??this.session.method)===this.methodSessionAnimationCaption(e)}validateSessionAnimationCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(t,e){return(t??this.session.method)===this.methodSessionAnimationFree(e)}validateSessionVoiceCaption(t,e){return(t??this.session.method)===this.methodSessionVoiceCaption(e)}validateSessionVoiceCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(t,e){return(t??this.session.method)===this.methodSessionVoiceFree(e)}validateSessionVideoNoteFree(t,e){return(t??this.session.method)===this.methodSessionVideoNoteFree(e)}validateSessionStickerFree(t,e){return(t??this.session.method)===this.methodSessionStickerFree(e)}validateSessionLocationFree(t,e){return(t??this.session.method)===this.methodSessionLocationFree(e)}validateSessionContactFree(t,e){return(t??this.session.method)===this.methodSessionContactFree(e)}sessionCallback(t,e){return this.sessionSet(this.methodSessionCallback(e),t)}sessionCallbackPayload(t,e){return this.sessionSet(this.methodSessionCallbackPayload(e),t)}sessionText(t,e){return this.sessionSet(this.methodSessionText(e),t)}sessionTextPayload(t,e){return this.sessionSet(this.methodSessionTextPayload(e),t)}sessionTextCommand(t,e){return this.sessionSet(this.methodSessionTextCommand(e),t)}sessionTextCommandPayload(t,e){return this.sessionSet(this.methodSessionTextCommandPayload(e),t)}sessionTextFree(t,e){return this.sessionSet(this.methodSessionTextFree(e),t)}sessionPhotoCaption(t,e){return this.sessionSet(this.methodSessionPhotoCaption(e),t)}sessionPhotoCaptionPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionPayload(e),t)}sessionPhotoCaptionCommand(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommand(e),t)}sessionPhotoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommandPayload(e),t)}sessionPhotoFree(t,e){return this.sessionSet(this.methodSessionPhotoFree(e),t)}sessionVideoCaption(t,e){return this.sessionSet(this.methodSessionVideoCaption(e),t)}sessionVideoCaptionPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionPayload(e),t)}sessionVideoCaptionCommand(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommand(e),t)}sessionVideoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommandPayload(e),t)}sessionVideoFree(t,e){return this.sessionSet(this.methodSessionVideoFree(e),t)}sessionAudioCaption(t,e){return this.sessionSet(this.methodSessionAudioCaption(e),t)}sessionAudioCaptionPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionPayload(e),t)}sessionAudioCaptionCommand(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommand(e),t)}sessionAudioCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommandPayload(e),t)}sessionAudioFree(t,e){return this.sessionSet(this.methodSessionAudioFree(e),t)}sessionDocumentCaption(t,e){return this.sessionSet(this.methodSessionDocumentCaption(e),t)}sessionDocumentCaptionPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionPayload(e),t)}sessionDocumentCaptionCommand(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommand(e),t)}sessionDocumentCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommandPayload(e),t)}sessionDocumentFree(t,e){return this.sessionSet(this.methodSessionDocumentFree(e),t)}sessionAnimationCaption(t,e){return this.sessionSet(this.methodSessionAnimationCaption(e),t)}sessionAnimationCaptionPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionPayload(e),t)}sessionAnimationCaptionCommand(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommand(e),t)}sessionAnimationCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommandPayload(e),t)}sessionAnimationFree(t,e){return this.sessionSet(this.methodSessionAnimationFree(e),t)}sessionVoiceCaption(t,e){return this.sessionSet(this.methodSessionVoiceCaption(e),t)}sessionVoiceCaptionPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionPayload(e),t)}sessionVoiceCaptionCommand(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommand(e),t)}sessionVoiceCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommandPayload(e),t)}sessionVoiceFree(t,e){return this.sessionSet(this.methodSessionVoiceFree(e),t)}sessionVideoNoteFree(t,e){return this.sessionSet(this.methodSessionVideoNoteFree(e),t)}sessionStickerFree(t,e){return this.sessionSet(this.methodSessionStickerFree(e),t)}sessionLocationFree(t,e){return this.sessionSet(this.methodSessionLocationFree(e),t)}sessionContactFree(t,e){return this.sessionSet(this.methodSessionContactFree(e),t)}sessionToCallback(t,e){return this.sessionCallback({...this.session.params,...t},e)}sessionToCallbackPayload(t,e){return this.sessionCallbackPayload({...this.session.params,...t},e)}sessionToText(t,e){return this.sessionText({...this.session.params,...t},e)}sessionToTextPayload(t,e){return this.sessionTextPayload({...this.session.params,...t},e)}sessionToTextCommand(t,e){return this.sessionTextCommand({...this.session.params,...t},e)}sessionToTextCommandPayload(t,e){return this.sessionTextCommandPayload({...this.session.params,...t},e)}sessionToTextFree(t,e){return this.sessionTextFree({...this.session.params,...t},e)}sessionToPhotoCaption(t,e){return this.sessionPhotoCaption({...this.session.params,...t},e)}sessionToPhotoCaptionPayload(t,e){return this.sessionPhotoCaptionPayload({...this.session.params,...t},e)}sessionToPhotoCaptionCommand(t,e){return this.sessionPhotoCaptionCommand({...this.session.params,...t},e)}sessionToPhotoCaptionCommandPayload(t,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...t},e)}sessionToPhotoFree(t,e){return this.sessionPhotoFree({...this.session.params,...t},e)}sessionToVideoCaption(t,e){return this.sessionVideoCaption({...this.session.params,...t},e)}sessionToVideoCaptionPayload(t,e){return this.sessionVideoCaptionPayload({...this.session.params,...t},e)}sessionToVideoCaptionCommand(t,e){return this.sessionVideoCaptionCommand({...this.session.params,...t},e)}sessionToVideoCaptionCommandPayload(t,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...t},e)}sessionToVideoFree(t,e){return this.sessionVideoFree({...this.session.params,...t},e)}sessionToAudioCaption(t,e){return this.sessionAudioCaption({...this.session.params,...t},e)}sessionToAudioCaptionPayload(t,e){return this.sessionAudioCaptionPayload({...this.session.params,...t},e)}sessionToAudioCaptionCommand(t,e){return this.sessionAudioCaptionCommand({...this.session.params,...t},e)}sessionToAudioCaptionCommandPayload(t,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...t},e)}sessionToAudioFree(t,e){return this.sessionAudioFree({...this.session.params,...t},e)}sessionToDocumentCaption(t,e){return this.sessionDocumentCaption({...this.session.params,...t},e)}sessionToDocumentCaptionPayload(t,e){return this.sessionDocumentCaptionPayload({...this.session.params,...t},e)}sessionToDocumentCaptionCommand(t,e){return this.sessionDocumentCaptionCommand({...this.session.params,...t},e)}sessionToDocumentCaptionCommandPayload(t,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...t},e)}sessionToDocumentFree(t,e){return this.sessionDocumentFree({...this.session.params,...t},e)}sessionToAnimationCaption(t,e){return this.sessionAnimationCaption({...this.session.params,...t},e)}sessionToAnimationCaptionPayload(t,e){return this.sessionAnimationCaptionPayload({...this.session.params,...t},e)}sessionToAnimationCaptionCommand(t,e){return this.sessionAnimationCaptionCommand({...this.session.params,...t},e)}sessionToAnimationCaptionCommandPayload(t,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...t},e)}sessionToAnimationFree(t,e){return this.sessionAnimationFree({...this.session.params,...t},e)}sessionToVoiceCaption(t,e){return this.sessionVoiceCaption({...this.session.params,...t},e)}sessionToVoiceCaptionPayload(t,e){return this.sessionVoiceCaptionPayload({...this.session.params,...t},e)}sessionToVoiceCaptionCommand(t,e){return this.sessionVoiceCaptionCommand({...this.session.params,...t},e)}sessionToVoiceCaptionCommandPayload(t,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...t},e)}sessionToVoiceFree(t,e){return this.sessionVoiceFree({...this.session.params,...t},e)}sessionToVideoNoteFree(t,e){return this.sessionVideoNoteFree({...this.session.params,...t},e)}sessionToStickerFree(t,e){return this.sessionStickerFree({...this.session.params,...t},e)}sessionToLocationFree(t,e){return this.sessionLocationFree({...this.session.params,...t},e)}sessionToContactFree(t,e){return this.sessionContactFree({...this.session.params,...t},e)}methodSession(t,e){return`${t}-${e||this.data.name}`}methodSessionCallback(t){return this.methodSession("1",t)}methodSessionCallbackPayload(t){return this.methodSession("2",t)}methodSessionText(t){return this.methodSession("3",t)}methodSessionTextPayload(t){return this.methodSession("4",t)}methodSessionTextCommand(t){return this.methodSession("5",t)}methodSessionTextCommandPayload(t){return this.methodSession("6",t)}methodSessionTextFree(t){return this.methodSession("7",t)}methodSessionPhotoCaption(t){return this.methodSession("8",t)}methodSessionPhotoCaptionPayload(t){return this.methodSession("9",t)}methodSessionPhotoCaptionCommand(t){return this.methodSession("10",t)}methodSessionPhotoCaptionCommandPayload(t){return this.methodSession("11",t)}methodSessionPhotoFree(t){return this.methodSession("12",t)}methodSessionVideoCaption(t){return this.methodSession("13",t)}methodSessionVideoCaptionPayload(t){return this.methodSession("14",t)}methodSessionVideoCaptionCommand(t){return this.methodSession("15",t)}methodSessionVideoCaptionCommandPayload(t){return this.methodSession("16",t)}methodSessionVideoFree(t){return this.methodSession("17",t)}methodSessionAudioCaption(t){return this.methodSession("18",t)}methodSessionAudioCaptionPayload(t){return this.methodSession("19",t)}methodSessionAudioCaptionCommand(t){return this.methodSession("20",t)}methodSessionAudioCaptionCommandPayload(t){return this.methodSession("21",t)}methodSessionAudioFree(t){return this.methodSession("22",t)}methodSessionDocumentCaption(t){return this.methodSession("23",t)}methodSessionDocumentCaptionPayload(t){return this.methodSession("24",t)}methodSessionDocumentCaptionCommand(t){return this.methodSession("25",t)}methodSessionDocumentCaptionCommandPayload(t){return this.methodSession("26",t)}methodSessionDocumentFree(t){return this.methodSession("27",t)}methodSessionAnimationCaption(t){return this.methodSession("28",t)}methodSessionAnimationCaptionPayload(t){return this.methodSession("29",t)}methodSessionAnimationCaptionCommand(t){return this.methodSession("30",t)}methodSessionAnimationCaptionCommandPayload(t){return this.methodSession("31",t)}methodSessionAnimationFree(t){return this.methodSession("32",t)}methodSessionVoiceCaption(t){return this.methodSession("33",t)}methodSessionVoiceCaptionPayload(t){return this.methodSession("34",t)}methodSessionVoiceCaptionCommand(t){return this.methodSession("35",t)}methodSessionVoiceCaptionCommandPayload(t){return this.methodSession("36",t)}methodSessionVoiceFree(t){return this.methodSession("37",t)}methodSessionVideoNoteFree(t){return this.methodSession("38",t)}methodSessionStickerFree(t){return this.methodSession("39",t)}methodSessionLocationFree(t){return this.methodSession("40",t)}methodSessionContactFree(t){return this.methodSession("41",t)}};var N=require("path"),F=require("fs"),ot=require("module");var P=class{static{p(this,"PageManager")}static _getFile(t,e,n=0){let o=Object.values(t)[n];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return o}static getFilePath(){return(0,N.join)(process.cwd(),"src","pages")}static getFileSync(t,e=0){t||(t=this.getFilePath());let s=(0,ot.createRequire)(t)(t);return this._getFile(s,t,e)}static async getFile(t,e=0){t||(t=this.getFilePath());let n=await import(`${t}?t=${Date.now()}`);return this._getFile(n,t,e)}static getFileManySync(t,e=0){if(t||(t=this.getFilePath()),!(0,F.existsSync)(t))throw new Error(`Directory ${t} is not found, please make it manually`);return(0,F.readdirSync)(t).map(s=>{let o=(0,N.join)(t,s);return{path:o,page:this.getFileSync(o,e)}})}static clearCacheRequire(t){if(t||(t=this.getFilePath()),!(0,F.existsSync)(t))throw new Error(`Directory ${t} is not found, please make it manually`);return(0,F.readdirSync)(t).forEach(n=>{let s=(0,N.join)(t,n);delete require.cache[require.resolve(s)]}),!0}};var rt=require("fs"),ct=require("url"),M=require("path");var b=require("path"),f=require("fs"),at=require("chokidar");var k=class{static{p(this,"TemplateEngine")}static _escape(t){return t.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(t){return t.replace(/\{\{(\w+)\}\}/g,(e,n)=>`\${(data && data["${n}"]) ?? ""}`)}static _processBaseBlocks(t){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,n={};for(let s of t.matchAll(e)){let o=s[2]??"default",i=(s[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();n[o]=i}return n}static _processScriptBlocks(t){return t.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,n)=>{let s=n.trim();return s?`\${(() => { if (!data) return ''; try { with(data) { ${s} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(t){return t.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(t){return t.replace(/<div>([\s\S]*?)<\/div>/gi,(e,n)=>n.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processSwitchBlocks(t){let e=/<switch\b(?:\s+value="([^"]+)")?>([\s\S]*?)<\/switch>/gi;return t.replace(e,(n,s,o)=>{if(!s)return"";let a="",i=/<case\b(?:\s+is="([^"]+)")?>([\s\S]*?)<\/case>/gi,r=/<default>([\s\S]*?)<\/default>/gi,c;for(;(c=i.exec(o))!==null;){let d=(c[1]||"").split(",").map(m=>m.trim()),l=(c[2]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");d.forEach(m=>{a+=`case "${m}": `}),a+=`return \`${l}\`; `}let h=r.exec(o);if(h){let d=(h[1]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");a+=`default: return \`${d}\`; `}else a+="default: return ''; ";return`\${(() => { switch((data && data["${s}"])) { ${a} } })()}`})}static _processExec(t){return t.replace(/{~\s*([\s\S]*?)\s*~}/g,(e,n)=>`\${(() => { try { return ${n} } catch(e) { try { with(data || {}) { return ${n} } } catch(ee) { return '' } } })()}`)}static _processMapBlocks(t){let e=/<map(?:\s+([^>]*))?>([\s\S]*?)<\/map>/gi;return t.replace(e,(n,s,o)=>{let a={},i=/(\w+)="([^"]*)"/g;if(s)for(let l of s.matchAll(i))a[l[1]]=l[2];let r=a.src;if(!r)return"";let c=a.join??"\\n",h=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").replace(/`/g,"\\`");h=h.replace(/\{\{([\w.]+)\}\}/g,(l,m)=>m==="e"||m.startsWith("e.")?`\${${m}}`:m==="i"?"${i}":l);let d=c.replace(/"/g,'\\"');return`\${(data && data["${r}"] || []).map((e, i) => \`${h}\`).join("${d}")}`})}static _processMediaBlocks(t){let e=/<media(?:\s+([^>]*))?>([\s\S]*?)<\/media>/gi,n={};for(let s of t.matchAll(e)){let o=s[1],a=s[2],i={},r=/(\w+)="([^"]*)"/g;if(o)for(let m of o.matchAll(r))i[m[1]]=m[2];let c=i.lang||"default",h=i.type,d=a.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),l={type:h};i.src&&(l.src=i.src),d&&h!=="video_note"&&h!=="sticker"&&(l.caption=d),h==="location"&&(i.latitude&&(l.latitude=i.latitude),i.longitude&&(l.longitude=i.longitude),d&&(l.caption=d)),h==="contact"&&(i.phone&&(l.phone=i.phone),i.first_name&&(l.first_name=i.first_name),i.last_name&&(l.last_name=i.last_name),i.vcard&&(l.vcard=i.vcard),d&&(l.caption=d)),n[c]=l}return n}static _processMessageBlocks(t){let e=/<message(?:\s+([^>]*))?>([\s\S]*?)<\/message>/gi,n={};for(let[,s,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(s)for(let h of s.matchAll(i))a[h[1]]=h[2];let r=a.lang||"default",c=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();n[r]=c}return n}static _processDescriptionBlocks(t){let e=/<description(?:\s+([^>]*))?>([\s\S]*?)<\/description>/gi,n={};for(let[,s,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(s)for(let d of s.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.scope||"default",h=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();n[r]||(n[r]={}),n[r][c]=h}return n}static _processKeyboardBlocks(t){let e=/<keyboard(?:\s+([^>]*))?>([\s\S]*?)<\/keyboard>/gi,n={};for(let[,s,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(s)for(let d of s.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.type==="bottom"?"bottom":"inline",h=o.trim();n[r]||(n[r]={}),n[r][c]=h}return n}static _compileToFunction(t,e){let n;e?n=t.map(a=>`\`${a}\``).join(","):n=`\`${t}\``;let s=n;if(s=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(s))),e){let o=`return [${s}]`;return new Function("data",o)}else{let o=`return ${s}`;return new Function("data",o)}}static compileMedia(t,e){let n=e||this._processBaseBlocks(t),s={};for(let[o,a]of Object.entries(n)){let i=this._processMediaBlocks(a);s[o]={};for(let[r,c]of Object.entries(i)){let h={};for(let[d,l]of Object.entries(c)){if(d==="type"||typeof l!="string")continue;let m=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(l)))));h[d]=this._compileToFunction(m,!1)}s[o][r]=d=>{let l={...c};for(let[m,y]of Object.entries(h))l[m]=y(d);return l}}}return s}static compileMessages(t,e){let n=e||this._processBaseBlocks(t),s={};for(let[o,a]of Object.entries(n)){let i=this._processMessageBlocks(a);s[o]={};for(let[r,c]of Object.entries(i)){let h=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(c)))));s[o][r]=this._compileToFunction(h,!1)}}return s}static compileDescription(t,e){let n=e||this._processBaseBlocks(t),s={};for(let[o,a]of Object.entries(n)){let i=this._processDescriptionBlocks(a);s[o]={};for(let[r,c]of Object.entries(i))for(let[h,d]of Object.entries(c)){s[o][h]||(s[o][h]={});let l=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(d)))));s[o][h][r]=this._compileToFunction(l,!1)}}return s}static compileKeyboards(t,e){let n=e||this._processBaseBlocks(t),s={};for(let[o,a]of Object.entries(n)){let i=this._processKeyboardBlocks(a);s[o]={};for(let[r,c]of Object.entries(i)){s[o][r]={};for(let[h,d]of Object.entries(c)){let m=d.split(/(?<!\\),\s*/).map(y=>y.replace(/\\,/g,",").trim()).map(y=>this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(y))))));s[o][r][h]=this._compileToFunction(m,!0)}}}return s}static _extractBlock(t,e,n="default",s="all",o){let a=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,i=t,r=!1;for(let c of t.matchAll(a))if((c[2]??"default")===n){i=c[3]??"",r=!0;break}if(!r){let c=/<base\b/.test(t);if(!(n==="default"&&!c))return""}if(e){if(e==="all")return i;let c=Array.isArray(e)?e:[e],h=[];for(let l of c){let m=new RegExp(`([ \\t]*)<${l}(?:\\s+([^>]*))?>([\\s\\S]*?)<\\/${l}>`,"gi");for(let y of i.matchAll(m)){let C=y[2];if(o){let u=/lang="([^"]*)"/i,w=C?.match(u);if(((w?w[1]:void 0)||"default")!==o)continue}h.push({start:y.index,content:y[0],innerContent:y[3]??""})}}h.sort((l,m)=>l.start-m.start);let d=p(l=>{let m=l.split(`
2
+ `);if(m.length<=1)return l.trim();let y=m.filter(u=>u.trim().length>0);if(y.length===0)return"";let C=y.reduce((u,w)=>{let I=w.match(/^([ \t]*)/),x=I?I[1].length:0;return x<u?x:u},1/0);return m.map(u=>u.length>=C?u.slice(C):u.trimStart()).join(`
3
+ `).trim()},"processResult");return s==="all"?h.map(m=>d(m.content)).join(`
4
+ `):h.map(m=>d(m.innerContent)).join(`
5
+ `)}return i}static _processImportBlocks(t){let e=/([ \t]*)<import(?:\s+([^>]*))?\/?>/gi,n=[];return{processed:t.replace(e,(o,a,i)=>{let r={},c=/(\w+)="([^"]*)"/g;if(i)for(let m of i.matchAll(c))r[m[1]]=m[2];let h=r.src;if(!h)return"";let d;r.block&&(r.block==="all"?d="all":r.block.includes(",")?d=r.block.split(",").map(m=>m.trim()).filter(m=>m):d=r.block);let l={src:h,blocks:d,base:r.base||"default",lang:r.lang,section:r.section||"all",indent:a||""};return n.push(l),`${a}__IMPORT_${n.length-1}__`}),imports:n}}static processImportBlocks(t,e,n=0,s){if(n>10)return"";let{processed:o,imports:a}=this._processImportBlocks(t),i=o;for(let r=0;r<a.length;r++){let c=a[r],h=`${c.src}|${c.base}|${c.lang||""}|${c.section}|${Array.isArray(c.blocks)?c.blocks.join(","):c.blocks||""}`,d;if(s&&s.has(h))d=s.get(h);else{let m=e(c.src);d=m?this._extractBlock(m,c.blocks,c.base,c.section,c.lang):"",d&&d.includes("<import")&&(d=this.processImportBlocks(d,e,n+1,s)),s&&s.set(h,d)}let l=d.split(`
6
6
  `).map((m,y)=>y===0?m:c.indent+m).join(`
7
- `);i=i.replace(`__IMPORT_${r}__`,h)}return i}};var B=class{static{p(this,"TemplateManager")}_map=new Map;_engine=k;_watcher=[];_pageManager=P;_supportedExtensions=new Set([".html",".ts",".js"]);_path;_isWatchEnabled;constructor(t){let{path:e,enableWatch:s=!1}=t;this._path=e,this._isWatchEnabled=s,this._validatePath(),this._initializeWatcher(t.watchOptions),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let t=0;t<this._path.length;t++){let e=this._path[t];if(!(0,f.existsSync)(e))throw new Error(`Template base path is not exists: ${e}`);if(!(0,f.statSync)(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(t){throw new Error(`Failed to validate Template base path: ${String(t)}`)}}_initializeWatcher(t){if(this._isWatchEnabled){if(this._watcher.length>0)throw new Error("Watcher already enabled");for(let e=0;e<this._path.length;e++){let s=this._path[e],n=(0,at.watch)(s,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},...t});this._watcher[e]=n,n.on("change",this._handleFileChange.bind(this)),n.on("add",this._handleFileAdd.bind(this)),n.on("unlink",this._handleFileDelete.bind(this)),n.on("error",this._handleWatchError.bind(this))}}}_handleFileChange(t){let e=(0,b.basename)(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileAdd(t){let e=(0,b.basename)(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileDelete(t){let e=(0,b.basename)(t),s=this._getKey(e);this._map.has(s)&&this._map.delete(s)}_handleWatchError(t){}_loadAllFiles(){let t=new Map,e=[];for(let n=0;n<this._path.length;n++){let o=this._path[n],i=(0,f.readdirSync)(o,"utf8").filter(r=>this._isValidFile(r));for(let r of i){let c=(0,b.join)(o,r),l=this._getExtension(r),d=this._getKey(r);if(l===".html")t.set(d,(0,f.readFileSync)(c,"utf8"));else if(l===".ts"||l===".js"){let h=P.getFileSync(c);h?.template!==void 0&&(t.set(d,h.template),e.push(h))}}}let s=new Map;for(let[n,o]of t.entries())this._compile(n,o,void 0,s,t);t.clear(),s.clear();for(let n of e)n.template=void 0}_loadFile(t){for(let e=0;e<this._path.length;e++){let s=this._path[e],n=(0,b.join)(s,t),o=this._getExtension(t),a=this._getKey(t);if(o==".html"){let i=(0,f.readFileSync)(n,"utf8");this._compile(a,i)}else if(o==".ts"||o==".js"){let i=P.getFileSync(n);i?.template!==void 0&&(this._compile(a,i.template),i.template=void 0)}else throw new Error(`File ${t} is not support`)}}_getExtension(t){return(0,b.extname)(t).toLowerCase()}_readTemplateFile(t){for(let e of this._path){let s=(0,b.extname)(t).toLowerCase();if(s){let i=(0,b.join)(e,t);if((0,f.existsSync)(i)&&(0,f.statSync)(i).isFile()){if(s===".html")return(0,f.readFileSync)(i,"utf8");if(s===".ts"||s===".js")try{return P.getFileSync(i)?.template??null}catch{return null}}continue}let n=(0,b.join)(e,`${t}.ts`),o=(0,b.join)(e,`${t}.js`);if((0,f.existsSync)(n)&&(0,f.statSync)(n).isFile())try{return P.getFileSync(n)?.template??null}catch{}else if((0,f.existsSync)(o)&&(0,f.statSync)(o).isFile())try{return P.getFileSync(n)?.template??null}catch{}let a=(0,b.join)(e,`${t}.html`);if((0,f.existsSync)(a)&&(0,f.statSync)(a).isFile())return(0,f.readFileSync)(a,"utf8")}return null}_isValidFile(t){return this._supportedExtensions.has(this._getExtension(t))}_getKey(t){return t.replace(/\.[^/.]+$/,"")}_compile(t,e,s,n,o){let a=this._map.get(t),i=a||{},r=!1,c=k.processImportBlocks(e,d=>o&&o.has(d)?o.get(d):this._readTemplateFile(d),0,n),l=k._processBaseBlocks(c);(s===void 0||s?.media===!1||a?.media===void 0)&&(i.media=k.compileMedia(c,l),r=!0),(s===void 0||s?.message===!1||a?.message===void 0)&&(i.message=k.compileMessages(c,l),r=!0),(s===void 0||s?.keyboard===!1||a?.keyboard===void 0)&&(i.keyboard=k.compileKeyboards(c,l),r=!0),(s===void 0||s?.description===!1||a?.description===void 0)&&(i.description=k.compileDescription(c,l),r=!0),r&&this._map.set(t,i)}getMedia(t,e="default",s="default",n){let a=this._map.get(t)?.media?.[e],i=a?.[s]||a?.default;try{if(!i)throw new Error("Media function not found, please check your template");return i(n)}catch{return{}}}getMessage(t,e="default",s="default",n){try{let a=this._map.get(t)?.message?.[e],i=a?.[s]||a?.default;if(!i)throw"";return i(n)}catch{return""}}getDescription(t,e="default",s="default",n="default",o){try{let i=this._map.get(t)?.description?.[e]?.[n],r=i?.[s]||i?.default;if(!r)throw"";return r(o)}catch{return""}}getDescriptionLanguage(t,e="default",s="default"){try{let o=this._map.get(t)?.description?.[e]?.[s];return o?Object.keys(o):[]}catch{return[]}}getDescriptionScopes(t,e="default"){try{let n=this._map.get(t)?.description?.[e];return n?Object.keys(n):[]}catch{return[]}}getKeyboard(t,e="default",s="default",n="inline",o){try{let i=this._map.get(t)?.keyboard?.[e],r=i?.[s]?.[n]||i?.default?.[n];if(!r)throw[];return r(o)}catch{return[]}}async write(t,e){if(this._getExtension(t)!=".html")return null;for(let s=0;s<this._path.length;s++){let n=(0,b.join)(this._path[s],t);if((0,f.existsSync)(n))return(0,f.writeFileSync)(n,e,"utf8"),this._loadFile(t),!0}return null}has(t){return this._map.has(t)}async destroy(){if(this._watcher)for(let t of this._watcher)await t.close();this._map.clear()}};var W=require("grammy");var kt=(()=>{try{return __filename}catch{return(0,ct.fileURLToPath)(S)}})(),Tt=(0,I.dirname)(kt),wt=JSON.parse((0,rt.readFileSync)((0,I.join)(Tt,"../../package.json"),"utf-8")).version,U=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;optionsPage={shortCallbackData:!1};log;bot;handlerBotUpdate;constructor(t){if(!t?.token||t?.token?.length==0)throw new Error("Token is not valid or empty");if(typeof t.optionsPage?.shortCallbackData=="boolean"&&(this.optionsPage.shortCallbackData=t.optionsPage.shortCallbackData),this.log=t.log===!0?q:t.log?t.log:void 0,this.log?.info?.(`Gramstax v${wt}`),this.cacheSession=t.cacheSession||new O("memory"),this.cacheKeyboard=t.cacheKeyboard||new Map,this.templateManager=t.templateManager||new B({path:[(0,I.join)(process.cwd(),"src","pages")]}),this.bot=this.createBot(t.token),this.bot.catch(this.onCatch),this.registerOnCallbackQueryData(),this.registerOnMessageText(),this.registerOnMessagePhoto(),this.registerOnMessageVideo(),this.registerOnMessageAudio(),this.registerOnMessageDocument(),this.registerOnMessageAnimation(),this.registerOnMessageVoice(),this.registerOnMessageVideoNote(),this.registerOnMessageSticker(),this.registerOnMessageLocation(),this.registerOnMessageContact(),this.handlerBotUpdate=this.bot.handleUpdate,this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),this.hookBeforeStart(),t.deploy.startsWith("polling"))this.runPolling();else if(t.deploy.startsWith("webhook:"))this.runWebhook(t.deploy.split("webhook:")[1]);else if(t.deploy.startsWith("serverless:"))this.runServerless(t.deploy.split("serverless:")[1]);else if(!t.deploy.startsWith("test"))throw new Error("Params deploy is not valid, expected: polling, webhook:<public-url>, serverless:<your-adapter>")}onCatch(t){if(this.log?.errorMake)this.log?.errorMake(t,"Bot","catch");else{let e=JSON.stringify(t,null,2);this.log?.error?.(`[Bot.catch]: ${e}`)}}hookBeforeStart(){}hookAfterStart(){}async onStart(t,e,s){await this.executeSyncBlocksDescription(this.pages);let{username:n}=t;this.log?.success?.(`Telegram bot polling started: ${n} ${e=="webhook"||e=="serverless"?`(${s})`:""}`),this.hookAfterStart()}createBot(t){return new W.Bot(t)}createCtx(t){return new V({ct:t,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{isAnswer:!1,session:{},data:{}}})}runPolling(){this.bot.start({onStart:p(t=>{this.onStart(t,"polling",null)},"onStart")})}async runWebhook(t){let{serve:e}=await import("bun"),s=(0,W.webhookCallback)(this.bot,"bun");this.handlerBotUpdate=s;let n=new URL(t).pathname;e({fetch(i){let{pathname:r}=new URL(i.url);if(i.method=="POST"&&r==n)return s(i);if(i.method=="GET"&&r=="/"){let c=new Date().toISOString();return new Response(JSON.stringify({status:"OK",timestamp:c}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}}),(await this.bot.api.getWebhookInfo()).url!=t&&await this.bot.api.setWebhook(t);let a=await this.bot.api.getMe();await this.onStart(a,"webhook",t)}async runServerless(t){this.handlerBotUpdate=(0,W.webhookCallback)(this.bot,t);let e=await this.bot.api.getMe();await this.onStart(e,"serverless",t)}pageBuildData(t,e){t?.data===void 0&&(t.data=t.buildData());let s=(0,I.parse)(e).name;t.data.name=s,t.data.intentText||(t.data.intentText=s),t.data.intentTextCommand||(t.data.intentTextCommand=s),t.data.intentCallback||(t.data.intentCallback=s)}pageSorts(t,e,s){let n=t.data.name,o=t.prototype,a="Payload",i="Command",r="Caption",c="Free",l=e.routeDynamic,d=e.routeDynamicSpesific,h=p(C=>C.charAt(0).toUpperCase()+C.slice(1),"upFirst"),m=p(C=>C.replace(a,"").replace(i,"").replace(r,"").replace(c,""),"getPureRouteName"),y=p((C,u)=>o[`methodSession${h(C)}`]?.(u),"methodSession");e.all[n]=t;for(let C=0;C<e.lenListRouteStaticSession;C++){let u=e.listRouteStaticSession[C];if(typeof o[u]!="function")continue;let w=e.routeStatic[u],v=e.routeStaticIntent[u],x=e.routeStaticSession[u],G={name:n,routeName:u},Y=w||v;if(Y!==void 0){let ht=u.includes(i),mt=u.includes("callback"),pt=u.startsWith("text"),M;if(ht){let _=t.data.intentTextCommand;M=_?`/${_}`:void 0}else if(mt){let _=t.data.intentCallback;this.optionsPage.shortCallbackData===!0&&(_=String(s),t.data.intentCallback=_),M=_}else pt?M=t.data.intentText:M=t.data.name;M&&(Y[M]=G)}x!==void 0&&(x[y(u,n)]=G),u.toLowerCase().endsWith("free")&&d[m(u)].push(G)}o.free&&l.push(n)}async executeSyncBlocksDescription(t){let e=new Map,s=t.routeStatic.textCommand;for(let[,n]of Object.entries(s)){let o=n.name,a=this.templateManager.getDescriptionScopes(o);for(let i of a){e.has(i)||e.set(i,new Set);let r=this.templateManager.getDescriptionLanguage(o,"default",i);for(let c of r)e.get(i).add(c)}}for(let[n,o]of e)for(let a of o){let i=[];for(let[,l]of Object.entries(s)){let d=l.name,h=this.templateManager.getDescription(d,"default",a,n);h&&i.push({command:d,description:h})}if(i.length===0)continue;let r={type:n},c=a==="default"?void 0:a;try{let l=await this.bot.api.getMyCommands({scope:r,language_code:c}),d=JSON.stringify(l.map(m=>({command:m.command,description:m.description})).sort((m,y)=>m.command.localeCompare(y.command))),h=JSON.stringify(i.sort((m,y)=>m.command.localeCompare(y.command)));d!==h&&(await this.bot.api.setMyCommands(i,{scope:r,language_code:c}),this.log?.info?.(`Synced descriptions for scope: ${n},${c?` lang: ${c},`:""} total (${i.length})`))}catch(l){this.log?.error?.(`Failed to sync descriptions for scope: ${n},${c?` lang: ${c},`:""} error: ${String(l)}`)}}}pageLoads(){this.log?.info?.("Load pages..");let t=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand"],e=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload"],s=[...t,...e,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],n=p((i,r)=>Object.fromEntries(i.map(c=>[c,r()])),"makeObject"),o=p(()=>[],"initDynamicSpesific"),a={all:{},routeDynamic:[],routeDynamicSpesific:{text:o(),photo:o(),video:o(),audio:o(),document:o(),animation:o(),voice:o(),videoNote:o(),sticker:o(),location:o(),contact:o()},routeStatic:n(t,()=>({})),routeStaticIntent:n(e,()=>({})),routeStaticSession:n(s,()=>({})),listRouteStatic:t,listRouteStaticIntent:e,listRouteStaticSession:s,lenListRouteStatic:t.length,lenListRouteStaticIntent:e.length,lenListRouteStaticSession:s.length};return P.getFileManySync(void 0).forEach(({path:i,page:r},c)=>{this.pageBuildData(r,i),this.pageSorts(r,a,c),r.template=void 0}),this.log?.info?.(`Finish load pages with total (${Object.keys(a.all).length})`),a}async pageRoutes(t,e){let s,n;if(s===void 0){let a=await t.sessionGet();if(a){let i=a.method,r=this.pages.routeStaticSession,c=t.callbackData,l=t.msgText,d=t.msgCaption,h=c||l||d,m=e==="callback",y=m?"colon":"space",C=h&&t.havePayloads(h,y)?t.getIntent(h,y,1):void 0,u=!m&&h?t.getIntent(h,"space",2):void 0;for(let w=0;w<this.pages.lenListRouteStaticSession;w++){let v=this.pages.listRouteStaticSession[w];if(v.startsWith(e)){if(h){if(this.pages.routeStatic[v]?.[h])continue;let x=this.pages.routeStaticIntent[v];if(x&&(C&&x[C]||u&&x[u]))continue}n=r[v][i]}if(n)break}n!==void 0&&(s=this.pages.all[n.name])}}if(s===void 0){let a=t.callbackData,i=t.msgText,r=t.msgCaption,c=this.pages.routeStatic;for(let l=0;l<this.pages.lenListRouteStatic;l++){let d=this.pages.listRouteStatic[l];if(d.startsWith(e)&&(n=c[d][a||i||r]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s===void 0){let a=this.pages.routeStaticIntent,i=e==="callback",r=i?"colon":"space",c=i?t.callbackData:t.msgText||t.msgCaption,l=t.havePayloads(c,r);if(c&&l)for(let d=0;d<this.pages.lenListRouteStaticIntent;d++){let h=this.pages.listRouteStaticIntent[d];if(!h.startsWith(e))continue;let m=a[h];if(n=m[t.getIntent(c,r,1)],!n&&!i&&(n=m[t.getIntent(c,"space",2)]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s!==void 0&&n!==void 0){if(!s.prototype[n.routeName])return;let i=await new s(t)[n.routeName]?.();return t.temp.isAnswer===!0?i:null}let o=this.pages.routeDynamicSpesific[e]||[];for(let a=0;a<o.length;a++){let i=o[a];if(i===void 0)continue;let r=this.pages.all[i.name];r!==void 0&&typeof r.prototype[i.routeName]=="function"&&await new r(t)[i.routeName]()}for(let a=0;a<this.pages.routeDynamic.length;a++){let i=this.pages.routeDynamic[a];if(i===void 0)continue;let r=this.pages.all[i];r!==void 0&&typeof r.prototype.free=="function"&&await new r(t).free()}if(t.temp.isAnswer===!1)return null}async hookBeforeRoute(t,e){return!!(t||e)}async hookErrorPage(t,e,s,n){}async hookErrorInputNotFoundPage(t){}async onMessage(t,e){let s=this.createCtx(t);try{if(await this.hookBeforeRoute(s,e)===!1)return;await this.pageRoutes(s,e)===null&&await this.hookErrorInputNotFoundPage(s)}catch(n){await this.hookErrorPage(s,e,n,!1)}}async onCallbackQueryData(t){let e=this.createCtx(t);try{if(await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(s){await this.hookErrorPage(e,"onCallbackQueryData",s,!0)}}async onMessageText(t){await this.onMessage(t,"text")}async onMessagePhoto(t){await this.onMessage(t,"photo")}async onMessageVideo(t){await this.onMessage(t,"video")}async onMessageAudio(t){await this.onMessage(t,"audio")}async onMessageDocument(t){await this.onMessage(t,"document")}async onMessageAnimation(t){await this.onMessage(t,"animation")}async onMessageVoice(t){await this.onMessage(t,"voice")}async onMessageVideoNote(t){await this.onMessage(t,"videoNote")}async onMessageSticker(t){await this.onMessage(t,"sticker")}async onMessageLocation(t){await this.onMessage(t,"location")}async onMessageContact(t){await this.onMessage(t,"contact")}registerOnCallbackQueryData(){this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this))}registerOnMessageText(){this.bot.on("message:text",this.onMessageText.bind(this))}registerOnMessagePhoto(){this.bot.on("message:photo",this.onMessagePhoto.bind(this))}registerOnMessageVideo(){this.bot.on("message:video",this.onMessageVideo.bind(this))}registerOnMessageAudio(){this.bot.on("message:audio",this.onMessageAudio.bind(this))}registerOnMessageDocument(){this.bot.on("message:document",this.onMessageDocument.bind(this))}registerOnMessageAnimation(){this.bot.on("message:animation",this.onMessageAnimation.bind(this))}registerOnMessageVoice(){this.bot.on("message:voice",this.onMessageVoice.bind(this))}registerOnMessageVideoNote(){this.bot.on("message:video_note",this.onMessageVideoNote.bind(this))}registerOnMessageSticker(){this.bot.on("message:sticker",this.onMessageSticker.bind(this))}registerOnMessageLocation(){this.bot.on("message:location",this.onMessageLocation.bind(this))}registerOnMessageContact(){this.bot.on("message:contact",this.onMessageContact.bind(this))}};var J=class{static{p(this,"BlockKeyboard")}static label;static _process(t,e){if(e.type||(e.type="inline"),e.lang){let s=t[e.lang];return`
8
- <keyboard type="${e.type}" lang="${e.lang}">${e.reverse?this.label._reverse(s):s}</keyboard>
9
- `}return Object.keys(t).map(s=>{let n=t[s];return`
10
- <keyboard type="${e.type}" lang="${s}">${e.reverse?this.label._reverse(n):n}</keyboard>
11
- `}).join(" ")}static _build(t,e,s){if(!this.label)throw new Error("Label not found, make sure set this.label from class extends LabelKeyboard");let n=this.label[t];if(!n)throw new Error(`Function ${t} not found`);return this._process(n.call(this.label,void 0),{type:s,lang:e})}};var Q=class{static{p(this,"LabelKeyboard")}static _reverse(t){return t.split(/(?<!\\), */).reverse().join(", ")}static _reverseObj(t){return Object.keys(t).reduce((e,s)=>(e[s]=this._reverse(t[s]),e),{})}static _build(t,e,s){if(t){let n=s[t||""];return e?this._reverse(n):n}return e?this._reverseObj(s):s}};var j=require("worker_threads");var T=class{constructor(t,e){this.send=t;this.register=e}static{p(this,"WorkerThreadRpc")}map=new Map;async make(t){let e=this.map,s=this.send,{id:n,method:o,params:a,result:i,error:r}=t;if(o!==void 0)try{let c=this.register[o];if(typeof c!="function")throw new Error(`Method ${o} not found or not function`);let l=await c.apply(this.register,a);s({id:n,result:l})}catch(c){s({id:n,error:c instanceof Error?{message:c.message,stack:c.stack,name:c.name}:c})}else if(i!==void 0){let c=e.get(n);c&&(c.resolve(i),e.delete(n))}else if(r!==void 0){let c=e.get(n);c&&(c.reject(r),e.delete(n))}}makeId(){return Math.random()}makeRequest(t,e,s=!0,n){let o=this.makeId(),a={id:o,method:t,params:e,...n};return s?new Promise((i,r)=>{this.map.set(o,{resolve:i,reject:r}),this.send(a)}):this.send(a)}};var $=class{constructor(t,e){this.path=t;this.argv=e;this.init(),this.rpc=new T(this.send.bind(this),this)}static{p(this,"WorkerThreadLaunch")}static isMainThread=j.isMainThread;_readyResolve;_readyPromise=new Promise(t=>this._readyResolve=t);pid=process.pid;thread={};threadId={};rpc={};ready(){return this._readyPromise}mtdReady(){this._readyResolve?.()}init(){this.thread=new j.Worker(this.path,{argv:this.argv.length==0&&this.argv[0]===void 0?void 0:this.argv}),this.threadId=this.thread.threadId,this.thread.on("message",t=>this.handleOnMessage(t)),this.thread.on("exit",()=>this.kill()),process.once("SIGINT",()=>this.kill()),process.once("SIGTERM",()=>this.kill())}async handleOnMessage(t){this.rpc.make(t)}kill(){this.thread.terminate()}send(t){this.thread.postMessage(t)}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};var H=class g{static{p(this,"WorkerThreadExport")}static launchGatewayClient(t){let e=new Proxy({},{get(n,o){if(!(typeof o!="string"||o==="then"))return async(a,...i)=>{let r=a.gatewayClients.get(t);return r||(r=await a.createGatewayClient(t)),r.request(o,i)}}}),s=p(function(n){return new Proxy({},{get(o,a){if(!(typeof a!="string"||a==="then"))return async(...i)=>{let r=n.gatewayClients.get(t);return r||(r=await n.createGatewayClient(t)),r.request(a,i)}}})},"ctor");return Object.setPrototypeOf(s,e),s}static init(t){let{WTInit:e,WTLaunch:s=$,path:n,wrap:o}=t,a=`for-${n}`;if(process.argv[2]===a)return new e,{launchGatewayClient:p(d=>g.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};let i,r=new Proxy({},{get(d,h){if(h!=="then")return h==="sendRequest"||h==="request"||h==="kill"||h==="send"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i[h](...m)}:(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(h,m)}}}),l={...o?o(r):{},launchWorker:p(async(d=[])=>(i=new s(n,[a,...d]),await i.ready(),i),"launchWorker"),launchGatewayClient:p(d=>g.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};return new Proxy(l,{get(d,h){if(h!=="then")return h==="launchGatewayClient"?d.launchGatewayClient:h==="launchWorker"?d.launchWorker:h in d?d[h]:typeof h=="string"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(h,m)}:d[h]}})}};var dt=require("net-ipc");var K=class{static{p(this,"WorkerThreadGatewayClient")}client=new dt.Client;rpc;constructor(){this.rpc=new T(t=>this.client.send(t),{}),this.client.on("message",t=>{this.rpc.make(t)})}async connect(t){this.client.options.path=t;let e=new Promise(s=>{this.client.once("ready",()=>s(this))});return await this.client.connect(),e}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};var lt=require("net-ipc");var E=class{static{p(this,"WorkerThreadGatewayServer")}server=new lt.Server;rpc=new Map;methods={};constructor(){this.server.on("connect",t=>{let e=new T(s=>t.send(s),this.methods);this.rpc.set(t.id,e)}),this.server.on("disconnect",t=>{this.rpc.delete(t.id)}),this.server.on("message",(t,e)=>{let s=this.rpc.get(e.id);s&&s.make(t)}),this.server.on("error",t=>{console.error(t)})}async start(t,e={}){this.methods=e,this.server.options.path=t;let s=new Promise(n=>{this.server.once("ready",()=>n(this))});return await this.server.start(),s}};var A=require("worker_threads");var z=class{static{p(this,"WorkerThreadInit")}argv=process.argv;id=A.threadId;pid=process.pid;rpc={};parentPort=A.parentPort;gatewayServer;gatewayClients=new Map;gatewayClientLatest;static gatewayServerPath;gatewayServerPath=this.constructor.gatewayServerPath;get gatewayClient(){return this.gatewayClientLatest}static isMainThread=A.isMainThread;constructor(){this.init(),this.rpc=new T(this.send.bind(this),this),this.send({method:"mtdReady"})}init(){this.parentPort?.on("message",t=>this.handleOnMessage(t))}handleOnMessage(t){this.rpc.make(t)}send(t){this.parentPort?.postMessage(t)}request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}async createGatewayServer(t,e){return t||(t=this),e||(e=this.constructor.gatewayServerPath),this.gatewayServer=new E,await this.gatewayServer.start(e,t),this.constructor.gatewayServerPath=e,!0}async createGatewayClient(t){let e=new K;return await e.connect(t),this.gatewayClients.set(t,e),this.gatewayClientLatest=e,e}};var X=class{static{p(this,"WorkerThreadPool")}thread=new Map;threadCount=0;constructor(t){this.addMany(t)}add(t){this.thread.set(t.threadId,t),this.threadCount+=1}addMany(t){t.forEach(e=>this.add(e))}getInstance(t){return this.thread.get(t)}kill(t){let e=this.thread.get(t);return e?.kill(),this.thread.delete(t),this.threadCount-=1,e?.threadId}killAll(){this.thread.values().forEach(({threadId:t})=>this.kill(t))}async broadcastRequest(t,e){return await Promise.all(Object.values(this.thread).map(s=>s.request(t,e,!0)))}async request(t,e,s,n=!0,o){return await this.thread.get(t)?.request(e,s,n,o)}};0&&(module.exports={BlockKeyboard,CacheExternal,Ctx,Gramstax,LabelKeyboard,LoggingUtils,TemplateEngine,TemplateManager,WorkerThreadExport,WorkerThreadGatewayClient,WorkerThreadGatewayServer,WorkerThreadInit,WorkerThreadLaunch,WorkerThreadPool,WorkerThreadRpc,log});
7
+ `);i=i.replace(`__IMPORT_${r}__`,l)}return i}};var B=class{static{p(this,"TemplateManager")}_map=new Map;_engine=k;_watcher=[];_pageManager=P;_supportedExtensions=new Set([".html",".ts",".js"]);_path;_isWatchEnabled;constructor(t){let{path:e,enableWatch:n=!1}=t;this._path=e,this._isWatchEnabled=n,this._validatePath(),this._initializeWatcher(t.watchOptions),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let t=0;t<this._path.length;t++){let e=this._path[t];if(!(0,f.existsSync)(e))throw new Error(`Template base path is not exists: ${e}`);if(!(0,f.statSync)(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(t){throw new Error(`Failed to validate Template base path: ${String(t)}`)}}_initializeWatcher(t){if(this._isWatchEnabled){if(this._watcher.length>0)throw new Error("Watcher already enabled");for(let e=0;e<this._path.length;e++){let n=this._path[e],s=(0,at.watch)(n,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},...t});this._watcher[e]=s,s.on("change",this._handleFileChange.bind(this)),s.on("add",this._handleFileAdd.bind(this)),s.on("unlink",this._handleFileDelete.bind(this)),s.on("error",this._handleWatchError.bind(this))}}}_handleFileChange(t){let e=(0,b.basename)(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileAdd(t){let e=(0,b.basename)(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileDelete(t){let e=(0,b.basename)(t),n=this._getKey(e);this._map.has(n)&&this._map.delete(n)}_handleWatchError(t){}_loadAllFiles(){let t=new Map,e=[];for(let s=0;s<this._path.length;s++){let o=this._path[s],i=(0,f.readdirSync)(o,"utf8").filter(r=>this._isValidFile(r));for(let r of i){let c=(0,b.join)(o,r),h=this._getExtension(r),d=this._getKey(r);if(h===".html")t.set(d,(0,f.readFileSync)(c,"utf8"));else if(h===".ts"||h===".js"){let l=P.getFileSync(c);l?.template!==void 0&&(t.set(d,l.template),e.push(l))}}}let n=new Map;for(let[s,o]of t.entries())this._compile(s,o,void 0,n,t);t.clear(),n.clear();for(let s of e)s.template=void 0}_loadFile(t){for(let e=0;e<this._path.length;e++){let n=this._path[e],s=(0,b.join)(n,t),o=this._getExtension(t),a=this._getKey(t);if(o==".html"){let i=(0,f.readFileSync)(s,"utf8");this._compile(a,i)}else if(o==".ts"||o==".js"){let i=P.getFileSync(s);i?.template!==void 0&&(this._compile(a,i.template),i.template=void 0)}else throw new Error(`File ${t} is not support`)}}_getExtension(t){return(0,b.extname)(t).toLowerCase()}_readTemplateFile(t){for(let e of this._path){let n=(0,b.extname)(t).toLowerCase();if(n){let i=(0,b.join)(e,t);if((0,f.existsSync)(i)&&(0,f.statSync)(i).isFile()){if(n===".html")return(0,f.readFileSync)(i,"utf8");if(n===".ts"||n===".js")try{return P.getFileSync(i)?.template??null}catch{return null}}continue}let s=(0,b.join)(e,`${t}.ts`),o=(0,b.join)(e,`${t}.js`);if((0,f.existsSync)(s)&&(0,f.statSync)(s).isFile())try{return P.getFileSync(s)?.template??null}catch{}else if((0,f.existsSync)(o)&&(0,f.statSync)(o).isFile())try{return P.getFileSync(s)?.template??null}catch{}let a=(0,b.join)(e,`${t}.html`);if((0,f.existsSync)(a)&&(0,f.statSync)(a).isFile())return(0,f.readFileSync)(a,"utf8")}return null}_isValidFile(t){return this._supportedExtensions.has(this._getExtension(t))}_getKey(t){return t.replace(/\.[^/.]+$/,"")}_compile(t,e,n,s,o){let a=this._map.get(t),i=a||{},r=!1,c=k.processImportBlocks(e,d=>o&&o.has(d)?o.get(d):this._readTemplateFile(d),0,s),h=k._processBaseBlocks(c);(n===void 0||n?.media===!1||a?.media===void 0)&&(i.media=k.compileMedia(c,h),r=!0),(n===void 0||n?.message===!1||a?.message===void 0)&&(i.message=k.compileMessages(c,h),r=!0),(n===void 0||n?.keyboard===!1||a?.keyboard===void 0)&&(i.keyboard=k.compileKeyboards(c,h),r=!0),(n===void 0||n?.description===!1||a?.description===void 0)&&(i.description=k.compileDescription(c,h),r=!0),r&&this._map.set(t,i)}getMedia(t,e="default",n="default",s){let a=this._map.get(t)?.media?.[e],i=a?.[n]||a?.default;try{if(!i)throw new Error("Media function not found, please check your template");return i(s)}catch{return{}}}getMessage(t,e="default",n="default",s){try{let a=this._map.get(t)?.message?.[e],i=a?.[n]||a?.default;if(!i)throw"";return i(s)}catch{return""}}getDescription(t,e="default",n="default",s="default",o){try{let i=this._map.get(t)?.description?.[e]?.[s],r=i?.[n]||i?.default;if(!r)throw"";return r(o)}catch{return""}}getDescriptionLanguage(t,e="default",n="default"){try{let o=this._map.get(t)?.description?.[e]?.[n];return o?Object.keys(o):[]}catch{return[]}}getDescriptionScopes(t,e="default"){try{let s=this._map.get(t)?.description?.[e];return s?Object.keys(s):[]}catch{return[]}}getKeyboard(t,e="default",n="default",s="inline",o){try{let i=this._map.get(t)?.keyboard?.[e],r=i?.[n]?.[s]||i?.default?.[s];if(!r)throw[];return r(o)}catch{return[]}}async write(t,e){if(this._getExtension(t)!=".html")return null;for(let n=0;n<this._path.length;n++){let s=(0,b.join)(this._path[n],t);if((0,f.existsSync)(s))return(0,f.writeFileSync)(s,e,"utf8"),this._loadFile(t),!0}return null}has(t){return this._map.has(t)}async destroy(){if(this._watcher)for(let t of this._watcher)await t.close();this._map.clear()}};var W=require("grammy");var kt=(0,M.dirname)((()=>{try{return __filename}catch{return(0,ct.fileURLToPath)(S)}})()),Tt=JSON.parse((0,rt.readFileSync)((0,M.join)(kt,"../../package.json"),"utf-8")).version,U=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;optionsPage={shortCallbackData:!1};log;bot;handlerBotUpdate;constructor(t){if(!t?.token||t?.token?.length==0)throw new Error("Token is not valid or empty");if(typeof t.optionsPage?.shortCallbackData=="boolean"&&(this.optionsPage.shortCallbackData=t.optionsPage.shortCallbackData),this.log=t.log===!0?q:t.log?t.log:void 0,this.log?.info?.(`Gramstax v${Tt}`),this.cacheSession=t.cacheSession||new O("memory"),this.cacheKeyboard=t.cacheKeyboard||new Map,this.templateManager=t.templateManager||new B({path:[(0,M.join)(process.cwd(),"src","pages")]}),this.bot=this.createBot(t.token),this.bot.catch(this.onCatch),this.registerOnCallbackQueryData(),this.registerOnMessageText(),this.registerOnMessagePhoto(),this.registerOnMessageVideo(),this.registerOnMessageAudio(),this.registerOnMessageDocument(),this.registerOnMessageAnimation(),this.registerOnMessageVoice(),this.registerOnMessageVideoNote(),this.registerOnMessageSticker(),this.registerOnMessageLocation(),this.registerOnMessageContact(),this.handlerBotUpdate=this.bot.handleUpdate,this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),this.hookBeforeStart(),t.deploy.startsWith("polling"))this.runPolling();else if(t.deploy.startsWith("webhook:"))this.runWebhook(t.deploy.split("webhook:")[1]);else if(t.deploy.startsWith("serverless:"))this.runServerless(t.deploy.split("serverless:")[1]);else if(!t.deploy.startsWith("test"))throw new Error("Params deploy is not valid, expected: polling, webhook:<public-url>, serverless:<your-adapter>")}onCatch(t){if(this.log?.errorMake)this.log?.errorMake(t,"Bot","catch");else{let e=JSON.stringify(t,null,2);this.log?.error?.(`[Bot.catch]: ${e}`)}}hookBeforeStart(){}hookAfterStart(){}async onStart(t,e,n){await this.executeSyncBlocksDescription(this.pages);let{username:s}=t;this.log?.success?.(`Telegram bot polling started: ${s} ${e=="webhook"||e=="serverless"?`(${n})`:""}`),this.hookAfterStart()}createBot(t){return new W.Bot(t)}createCtx(t){return new V({ct:t,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{isAnswer:!1,session:{},data:{}}})}runPolling(){this.bot.start({onStart:p(t=>{this.onStart(t,"polling",null)},"onStart")})}async runWebhook(t){let{serve:e}=await import("bun"),n=(0,W.webhookCallback)(this.bot,"bun");this.handlerBotUpdate=n;let s=new URL(t).pathname;e({fetch(i){let{pathname:r}=new URL(i.url);if(i.method=="POST"&&r==s)return n(i);if(i.method=="GET"&&r=="/"){let c=new Date().toISOString();return new Response(JSON.stringify({status:"OK",timestamp:c}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}}),(await this.bot.api.getWebhookInfo()).url!=t&&await this.bot.api.setWebhook(t);let a=await this.bot.api.getMe();await this.onStart(a,"webhook",t)}async runServerless(t){this.handlerBotUpdate=(0,W.webhookCallback)(this.bot,t);let e=await this.bot.api.getMe();await this.onStart(e,"serverless",t)}pageBuildData(t,e){t?.data===void 0&&(t.data=t.buildData());let{name:n}=(0,M.parse)(e);t.data.name||(t.data.name=n),t.data.intentText||(t.data.intentText=t.data.name),t.data.intentTextCommand||(t.data.intentTextCommand=t.data.name),t.data.intentCallback||(t.data.intentCallback=t.data.name)}pageSorts(t,e,n){let s=t.data.name,o=t.prototype,a="Payload",i="Command",r="Caption",c="Free",h=e.routeDynamic,d=e.routeDynamicSpesific,l=p(C=>C.charAt(0).toUpperCase()+C.slice(1),"upFirst"),m=p(C=>C.replace(a,"").replace(i,"").replace(r,"").replace(c,""),"getPureRouteName"),y=p((C,u)=>o[`methodSession${l(C)}`]?.(u),"methodSession");e.all[s]=t;for(let C=0;C<e.lenListRouteStaticSession;C++){let u=e.listRouteStaticSession[C];if(typeof o[u]!="function")continue;let w=e.routeStatic[u],I=e.routeStaticIntent[u],x=e.routeStaticSession[u],G={name:s,routeName:u},Y=w||I;if(Y!==void 0){let lt=u.includes(i),mt=u.includes("callback"),pt=u.startsWith("text"),v;if(lt){let _=t.data.intentTextCommand;v=_?`/${_}`:void 0}else if(mt){let _=t.data.intentCallback;this.optionsPage.shortCallbackData===!0&&(_=String(n),t.data.intentCallback=_),v=_}else pt?v=t.data.intentText:v=t.data.name;v&&(Y[v]=G)}x!==void 0&&(x[y(u,s)]=G),u.toLowerCase().endsWith("free")&&d[m(u)].push(G)}o.free&&h.push(s)}async executeSyncBlocksDescription(t){let e=new Map,n=t.routeStatic.textCommand;for(let[,s]of Object.entries(n)){let o=s.name,a=this.templateManager.getDescriptionScopes(o);for(let i of a){e.has(i)||e.set(i,new Set);let r=this.templateManager.getDescriptionLanguage(o,"default",i);for(let c of r)e.get(i).add(c)}}for(let[s,o]of e)for(let a of o){let i=[];for(let[,h]of Object.entries(n)){let d=h.name,l=this.templateManager.getDescription(d,"default",a,s);l&&i.push({command:d,description:l})}if(i.length===0)continue;let r={type:s},c=a==="default"?void 0:a;try{let h=await this.bot.api.getMyCommands({scope:r,language_code:c}),d=JSON.stringify(h.map(m=>({command:m.command,description:m.description})).sort((m,y)=>m.command.localeCompare(y.command))),l=JSON.stringify(i.sort((m,y)=>m.command.localeCompare(y.command)));d!==l&&(await this.bot.api.setMyCommands(i,{scope:r,language_code:c}),this.log?.info?.(`Synced descriptions for scope: ${s},${c?` lang: ${c},`:""} total (${i.length})`))}catch(h){this.log?.error?.(`Failed to sync descriptions for scope: ${s},${c?` lang: ${c},`:""} error: ${String(h)}`)}}}pageLoads(){this.log?.info?.("Load pages..");let t=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand"],e=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload"],n=[...t,...e,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],s=p((i,r)=>Object.fromEntries(i.map(c=>[c,r()])),"makeObject"),o=p(()=>[],"initDynamicSpesific"),a={all:{},routeDynamic:[],routeDynamicSpesific:{text:o(),photo:o(),video:o(),audio:o(),document:o(),animation:o(),voice:o(),videoNote:o(),sticker:o(),location:o(),contact:o()},routeStatic:s(t,()=>({})),routeStaticIntent:s(e,()=>({})),routeStaticSession:s(n,()=>({})),listRouteStatic:t,listRouteStaticIntent:e,listRouteStaticSession:n,lenListRouteStatic:t.length,lenListRouteStaticIntent:e.length,lenListRouteStaticSession:n.length};return P.getFileManySync(void 0).forEach(({path:i,page:r},c)=>{this.pageBuildData(r,i),this.pageSorts(r,a,c),r.template=void 0}),this.log?.info?.(`Finish load pages with total (${Object.keys(a.all).length})`),a}async pageRoutes(t,e){let n,s;if(n===void 0){let a=await t.sessionGet();if(a){let i=a.method,r=this.pages.routeStaticSession,c=t.callbackData,h=t.msgText,d=t.msgCaption,l=c||h||d,m=e==="callback",y=m?"colon":"space",C=l&&t.havePayloads(l,y)?t.getIntent(l,y,1):void 0,u=!m&&l?t.getIntent(l,"space",2):void 0;for(let w=0;w<this.pages.lenListRouteStaticSession;w++){let I=this.pages.listRouteStaticSession[w];if(I.startsWith(e)){if(l){if(this.pages.routeStatic[I]?.[l])continue;let x=this.pages.routeStaticIntent[I];if(x&&(C&&x[C]||u&&x[u]))continue}s=r[I][i]}if(s)break}s!==void 0&&(n=this.pages.all[s.name])}}if(n===void 0){let a=t.callbackData,i=t.msgText,r=t.msgCaption,c=this.pages.routeStatic;for(let h=0;h<this.pages.lenListRouteStatic;h++){let d=this.pages.listRouteStatic[h];if(d.startsWith(e)&&(s=c[d][a||i||r]),s)break}s!==void 0&&(n=this.pages.all[s.name])}if(n===void 0){let a=this.pages.routeStaticIntent,i=e==="callback",r=i?"colon":"space",c=i?t.callbackData:t.msgText||t.msgCaption,h=t.havePayloads(c,r);if(c&&h)for(let d=0;d<this.pages.lenListRouteStaticIntent;d++){let l=this.pages.listRouteStaticIntent[d];if(!l.startsWith(e))continue;let m=a[l];if(s=m[t.getIntent(c,r,1)],!s&&!i&&(s=m[t.getIntent(c,"space",2)]),s)break}s!==void 0&&(n=this.pages.all[s.name])}if(n!==void 0&&s!==void 0){if(!n.prototype[s.routeName])return;let i=await new n(t)[s.routeName]?.();return t.temp.isAnswer===!0?i:null}let o=this.pages.routeDynamicSpesific[e]||[];for(let a=0;a<o.length;a++){let i=o[a];if(i===void 0)continue;let r=this.pages.all[i.name];r!==void 0&&typeof r.prototype[i.routeName]=="function"&&await new r(t)[i.routeName]()}for(let a=0;a<this.pages.routeDynamic.length;a++){let i=this.pages.routeDynamic[a];if(i===void 0)continue;let r=this.pages.all[i];r!==void 0&&typeof r.prototype.free=="function"&&await new r(t).free()}if(t.temp.isAnswer===!1)return null}async hookBeforeRoute(t,e){return!!(t||e)}async hookErrorPage(t,e,n,s){}async hookErrorInputNotFoundPage(t){}async onMessage(t,e){let n=this.createCtx(t);try{if(await this.hookBeforeRoute(n,e)===!1)return;await this.pageRoutes(n,e)===null&&await this.hookErrorInputNotFoundPage(n)}catch(s){await this.hookErrorPage(n,e,s,!1)}}async onCallbackQueryData(t){let e=this.createCtx(t);try{if(await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(n){await this.hookErrorPage(e,"onCallbackQueryData",n,!0)}}async onMessageText(t){await this.onMessage(t,"text")}async onMessagePhoto(t){await this.onMessage(t,"photo")}async onMessageVideo(t){await this.onMessage(t,"video")}async onMessageAudio(t){await this.onMessage(t,"audio")}async onMessageDocument(t){await this.onMessage(t,"document")}async onMessageAnimation(t){await this.onMessage(t,"animation")}async onMessageVoice(t){await this.onMessage(t,"voice")}async onMessageVideoNote(t){await this.onMessage(t,"videoNote")}async onMessageSticker(t){await this.onMessage(t,"sticker")}async onMessageLocation(t){await this.onMessage(t,"location")}async onMessageContact(t){await this.onMessage(t,"contact")}registerOnCallbackQueryData(){this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this))}registerOnMessageText(){this.bot.on("message:text",this.onMessageText.bind(this))}registerOnMessagePhoto(){this.bot.on("message:photo",this.onMessagePhoto.bind(this))}registerOnMessageVideo(){this.bot.on("message:video",this.onMessageVideo.bind(this))}registerOnMessageAudio(){this.bot.on("message:audio",this.onMessageAudio.bind(this))}registerOnMessageDocument(){this.bot.on("message:document",this.onMessageDocument.bind(this))}registerOnMessageAnimation(){this.bot.on("message:animation",this.onMessageAnimation.bind(this))}registerOnMessageVoice(){this.bot.on("message:voice",this.onMessageVoice.bind(this))}registerOnMessageVideoNote(){this.bot.on("message:video_note",this.onMessageVideoNote.bind(this))}registerOnMessageSticker(){this.bot.on("message:sticker",this.onMessageSticker.bind(this))}registerOnMessageLocation(){this.bot.on("message:location",this.onMessageLocation.bind(this))}registerOnMessageContact(){this.bot.on("message:contact",this.onMessageContact.bind(this))}};var J=class{static{p(this,"BlockKeyboard")}static label;static _process(t,e){if(e.type||(e.type="inline"),e.lang){let n=t[e.lang];return`
8
+ <keyboard type="${e.type}" lang="${e.lang}">${e.reverse?this.label._reverse(n):n}</keyboard>
9
+ `}return Object.keys(t).map(n=>{let s=t[n];return`
10
+ <keyboard type="${e.type}" lang="${n}">${e.reverse?this.label._reverse(s):s}</keyboard>
11
+ `}).join(" ")}static _build(t,e,n){if(!this.label)throw new Error("Label not found, make sure set this.label from class extends LabelKeyboard");let s=this.label[t];if(!s)throw new Error(`Function ${t} not found`);return this._process(s.call(this.label,void 0),{type:n,lang:e})}};var Q=class{static{p(this,"LabelKeyboard")}static _reverse(t){return t.split(/(?<!\\), */).reverse().join(", ")}static _reverseObj(t){return Object.keys(t).reduce((e,n)=>(e[n]=this._reverse(t[n]),e),{})}static _build(t,e,n){if(t){let s=n[t||""];return e?this._reverse(s):s}return e?this._reverseObj(n):n}};var j=require("worker_threads");var T=class{constructor(t,e){this.send=t;this.register=e}static{p(this,"WorkerThreadRpc")}map=new Map;async make(t){let e=this.map,n=this.send,{id:s,method:o,params:a,result:i,error:r}=t;if(o!==void 0)try{let c=this.register[o];if(typeof c!="function")throw new Error(`Method ${o} not found or not function`);let h=await c.apply(this.register,a);n({id:s,result:h})}catch(c){n({id:s,error:c instanceof Error?{message:c.message,stack:c.stack,name:c.name}:c})}else if(i!==void 0){let c=e.get(s);c&&(c.resolve(i),e.delete(s))}else if(r!==void 0){let c=e.get(s);c&&(c.reject(r),e.delete(s))}}makeId(){return Math.random()}makeRequest(t,e,n=!0,s){let o=this.makeId(),a={id:o,method:t,params:e,...s};return n?new Promise((i,r)=>{this.map.set(o,{resolve:i,reject:r}),this.send(a)}):this.send(a)}};var $=class{constructor(t,e){this.path=t;this.argv=e;this.init(),this.rpc=new T(this.send.bind(this),this)}static{p(this,"WorkerThreadLaunch")}static isMainThread=j.isMainThread;_readyResolve;_readyPromise=new Promise(t=>this._readyResolve=t);pid=process.pid;thread={};threadId={};rpc={};ready(){return this._readyPromise}mtdReady(){this._readyResolve?.()}init(){this.thread=new j.Worker(this.path,{argv:this.argv.length==0&&this.argv[0]===void 0?void 0:this.argv}),this.threadId=this.thread.threadId,this.thread.on("message",t=>this.handleOnMessage(t)),this.thread.on("exit",()=>this.kill()),process.once("SIGINT",()=>this.kill()),process.once("SIGTERM",()=>this.kill())}async handleOnMessage(t){this.rpc.make(t)}kill(){this.thread.terminate()}send(t){this.thread.postMessage(t)}async request(t,e,n=!0,s){return this.rpc.makeRequest(t,e,n,s)}};var H=class g{static{p(this,"WorkerThreadExport")}static launchGatewayClient(t){let e=new Proxy({},{get(s,o){if(!(typeof o!="string"||o==="then"))return async(a,...i)=>{let r=a.gatewayClients.get(t);return r||(r=await a.createGatewayClient(t)),r.request(o,i)}}}),n=p(function(s){return new Proxy({},{get(o,a){if(!(typeof a!="string"||a==="then"))return async(...i)=>{let r=s.gatewayClients.get(t);return r||(r=await s.createGatewayClient(t)),r.request(a,i)}}})},"ctor");return Object.setPrototypeOf(n,e),n}static init(t){let{WTInit:e,WTLaunch:n=$,path:s,wrap:o}=t,a=`for-${s}`;if(process.argv[2]===a)return new e,{launchGatewayClient:p(d=>g.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};let i,r=new Proxy({},{get(d,l){if(l!=="then")return l==="sendRequest"||l==="request"||l==="kill"||l==="send"?(...m)=>{if(!i)throw new Error(`Thread at ${s} not launched yet.`);return i[l](...m)}:(...m)=>{if(!i)throw new Error(`Thread at ${s} not launched yet.`);return i.request(l,m)}}}),h={...o?o(r):{},launchWorker:p(async(d=[])=>(i=new n(s,[a,...d]),await i.ready(),i),"launchWorker"),launchGatewayClient:p(d=>g.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};return new Proxy(h,{get(d,l){if(l!=="then")return l==="launchGatewayClient"?d.launchGatewayClient:l==="launchWorker"?d.launchWorker:l in d?d[l]:typeof l=="string"?(...m)=>{if(!i)throw new Error(`Thread at ${s} not launched yet.`);return i.request(l,m)}:d[l]}})}};var dt=require("net-ipc");var K=class{static{p(this,"WorkerThreadGatewayClient")}client=new dt.Client;rpc;constructor(){this.rpc=new T(t=>this.client.send(t),{}),this.client.on("message",t=>{this.rpc.make(t)})}async connect(t){this.client.options.path=t;let e=new Promise(n=>{this.client.once("ready",()=>n(this))});return await this.client.connect(),e}async request(t,e,n=!0,s){return this.rpc.makeRequest(t,e,n,s)}};var ht=require("net-ipc");var L=class{static{p(this,"WorkerThreadGatewayServer")}server=new ht.Server;rpc=new Map;methods={};constructor(){this.server.on("connect",t=>{let e=new T(n=>t.send(n),this.methods);this.rpc.set(t.id,e)}),this.server.on("disconnect",t=>{this.rpc.delete(t.id)}),this.server.on("message",(t,e)=>{let n=this.rpc.get(e.id);n&&n.make(t)}),this.server.on("error",t=>{console.error(t)})}async start(t,e={}){this.methods=e,this.server.options.path=t;let n=new Promise(s=>{this.server.once("ready",()=>s(this))});return await this.server.start(),n}};var A=require("worker_threads");var z=class{static{p(this,"WorkerThreadInit")}argv=process.argv;id=A.threadId;pid=process.pid;rpc={};parentPort=A.parentPort;gatewayServer;gatewayClients=new Map;gatewayClientLatest;static gatewayServerPath;gatewayServerPath=this.constructor.gatewayServerPath;get gatewayClient(){return this.gatewayClientLatest}static isMainThread=A.isMainThread;constructor(){this.init(),this.rpc=new T(this.send.bind(this),this),this.send({method:"mtdReady"})}init(){this.parentPort?.on("message",t=>this.handleOnMessage(t))}handleOnMessage(t){this.rpc.make(t)}send(t){this.parentPort?.postMessage(t)}request(t,e,n=!0,s){return this.rpc.makeRequest(t,e,n,s)}async createGatewayServer(t,e){return t||(t=this),e||(e=this.constructor.gatewayServerPath),this.gatewayServer=new L,await this.gatewayServer.start(e,t),this.constructor.gatewayServerPath=e,!0}async createGatewayClient(t){let e=new K;return await e.connect(t),this.gatewayClients.set(t,e),this.gatewayClientLatest=e,e}};var X=class{static{p(this,"WorkerThreadPool")}thread=new Map;threadCount=0;constructor(t){this.addMany(t)}add(t){this.thread.set(t.threadId,t),this.threadCount+=1}addMany(t){t.forEach(e=>this.add(e))}getInstance(t){return this.thread.get(t)}kill(t){let e=this.thread.get(t);return e?.kill(),this.thread.delete(t),this.threadCount-=1,e?.threadId}killAll(){this.thread.values().forEach(({threadId:t})=>this.kill(t))}async broadcastRequest(t,e){return await Promise.all(Object.values(this.thread).map(n=>n.request(t,e,!0)))}async request(t,e,n,s=!0,o){return await this.thread.get(t)?.request(e,n,s,o)}};0&&(module.exports={BlockKeyboard,CacheExternal,Ctx,Gramstax,LabelKeyboard,LoggingUtil,TemplateEngine,TemplateManager,WorkerThreadExport,WorkerThreadGatewayClient,WorkerThreadGatewayServer,WorkerThreadInit,WorkerThreadLaunch,WorkerThreadPool,WorkerThreadRpc,log});
@@ -9,17 +9,22 @@ import { Worker } from 'node:worker_threads';
9
9
  import * as worker_threads from 'worker_threads';
10
10
  import { Server, Client } from 'net-ipc';
11
11
 
12
- declare class LoggingUtils extends LoggingPretty {
12
+ declare class LoggingUtil extends LoggingPretty {
13
13
  constructor(options?: ConstructorParameters<typeof LoggingPretty>[0]);
14
14
  errorMake(pureError: any, constructorName?: any, funcName?: string): void;
15
15
  _formatErrorObj(pureError: any): string;
16
16
  }
17
- declare const log: LoggingUtils;
17
+ declare const log: LoggingUtil;
18
18
 
19
19
  type IMore = Omit<Required<ConstructorParameters<typeof Keyv>>[0], `store` | `namespace` | `ttl`> & {
20
20
  forceStore?: any;
21
21
  };
22
- declare class CacheExternal extends Keyv {
22
+ type ICacheRpc = {
23
+ method: string;
24
+ params: any;
25
+ [moreRoot: string]: any;
26
+ };
27
+ declare class CacheExternal<V = any> extends Keyv<V> {
23
28
  url: string;
24
29
  constructor(url?: string, ttl?: number, namespace?: string, more?: IMore);
25
30
  refreshLruCache(maxLength?: number): void;
@@ -256,10 +261,7 @@ type IPageData<T extends any[] = any[]> = {
256
261
  };
257
262
  type ITemp = {
258
263
  isAnswer: boolean;
259
- session: {
260
- method?: string;
261
- params?: any;
262
- };
264
+ session: Partial<ICacheRpc>;
263
265
  data: Partial<IPageData<any>>;
264
266
  [key: string]: any;
265
267
  };
@@ -306,7 +308,7 @@ declare class Ctx {
306
308
  set session(v: ITemp[`session`]);
307
309
  get session(): ITemp[`session`];
308
310
  ct: ICt;
309
- cacheSession: CacheExternal;
311
+ cacheSession: CacheExternal<ICacheRpc>;
310
312
  cacheKeyboard: Map<any, any>;
311
313
  templateManager: TemplateManager;
312
314
  temp: ITemp;
@@ -350,19 +352,17 @@ declare class Ctx {
350
352
  delete(): Promise<true>;
351
353
  callbackQueryAnswer(options?: Parameters<typeof this$1.ct.answerCallbackQuery>[0]): Promise<true | null>;
352
354
  sessionSet(method: string, params: any, moreRoot?: Record<any, any>): Promise<boolean | null>;
353
- sessionGet(): Promise<{
354
- method: string;
355
- params: any;
356
- [moreRoot: string]: any;
357
- } | null>;
355
+ sessionGet(): Promise<ICacheRpc | null>;
358
356
  sessionClear(): Promise<boolean | null>;
359
357
  static buildData<C extends (...args: any[]) => any>(callback: C): IPageData<Parameters<C>>;
360
358
  static buildData<C extends (...args: any[]) => any>(options: {
359
+ name?: string;
361
360
  callback?: C;
362
361
  intentText?: string;
363
362
  intentTextCommand?: string;
364
363
  }): IPageData<Parameters<C>>;
365
364
  static buildData(options: {
365
+ name?: string;
366
366
  callback?: any;
367
367
  intentText?: string;
368
368
  intentTextCommand?: string;
@@ -395,52 +395,52 @@ declare class Ctx {
395
395
  getIntent(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionEnd?: number): string;
396
396
  /**
397
397
  * Must be overrides if need this is just placeholder type
398
- * @for Only for transition page from other page
398
+ * @for Only for transition page to other page
399
399
  * @param args Params
400
400
  */
401
401
  transition?(...args: any): Promise<any>;
402
- callback?(): Promise<void | null>;
403
- callbackPayload?(): Promise<void | null>;
404
- text?(): Promise<void | null>;
405
- textPayload?(): Promise<void | null>;
406
- textCommand?(): Promise<void | null>;
407
- textCommandPayload?(): Promise<void | null>;
408
- textFree?(): Promise<void | null>;
409
- photoCaption?(): Promise<void | null>;
410
- photoCaptionPayload?(): Promise<void | null>;
411
- photoCaptionCommand?(): Promise<void | null>;
412
- photoCaptionCommandPayload?(): Promise<void | null>;
413
- photoFree?(): Promise<void | null>;
414
- videoCaption?(): Promise<void | null>;
415
- videoCaptionPayload?(): Promise<void | null>;
416
- videoCaptionCommand?(): Promise<void | null>;
417
- videoCaptionCommandPayload?(): Promise<void | null>;
418
- videoFree?(): Promise<void | null>;
419
- audioCaption?(): Promise<void | null>;
420
- audioCaptionPayload?(): Promise<void | null>;
421
- audioCaptionCommand?(): Promise<void | null>;
422
- audioCaptionCommandPayload?(): Promise<void | null>;
423
- audioFree?(): Promise<void | null>;
424
- documentCaption?(): Promise<void | null>;
425
- documentCaptionPayload?(): Promise<void | null>;
426
- documentCaptionCommand?(): Promise<void | null>;
427
- documentCaptionCommandPayload?(): Promise<void | null>;
428
- documentFree?(): Promise<void | null>;
429
- animationCaption?(): Promise<void | null>;
430
- animationCaptionPayload?(): Promise<void | null>;
431
- animationCaptionCommand?(): Promise<void | null>;
432
- animationCaptionCommandPayload?(): Promise<void | null>;
433
- animationFree?(): Promise<void | null>;
434
- voiceCaption?(): Promise<void | null>;
435
- voiceCaptionPayload?(): Promise<void | null>;
436
- voiceCaptionCommand?(): Promise<void | null>;
437
- voiceCaptionCommandPayload?(): Promise<void | null>;
438
- voiceFree?(): Promise<void | null>;
439
- videoNoteFree?(): Promise<void | null>;
440
- stickerFree?(): Promise<void | null>;
441
- locationFree?(): Promise<void | null>;
442
- contactFree?(): Promise<void | null>;
443
- free?(): Promise<void | null>;
402
+ callback?(): Promise<any>;
403
+ callbackPayload?(): Promise<any>;
404
+ text?(): Promise<any>;
405
+ textPayload?(): Promise<any>;
406
+ textCommand?(): Promise<any>;
407
+ textCommandPayload?(): Promise<any>;
408
+ textFree?(): Promise<any>;
409
+ photoCaption?(): Promise<any>;
410
+ photoCaptionPayload?(): Promise<any>;
411
+ photoCaptionCommand?(): Promise<any>;
412
+ photoCaptionCommandPayload?(): Promise<any>;
413
+ photoFree?(): Promise<any>;
414
+ videoCaption?(): Promise<any>;
415
+ videoCaptionPayload?(): Promise<any>;
416
+ videoCaptionCommand?(): Promise<any>;
417
+ videoCaptionCommandPayload?(): Promise<any>;
418
+ videoFree?(): Promise<any>;
419
+ audioCaption?(): Promise<any>;
420
+ audioCaptionPayload?(): Promise<any>;
421
+ audioCaptionCommand?(): Promise<any>;
422
+ audioCaptionCommandPayload?(): Promise<any>;
423
+ audioFree?(): Promise<any>;
424
+ documentCaption?(): Promise<any>;
425
+ documentCaptionPayload?(): Promise<any>;
426
+ documentCaptionCommand?(): Promise<any>;
427
+ documentCaptionCommandPayload?(): Promise<any>;
428
+ documentFree?(): Promise<any>;
429
+ animationCaption?(): Promise<any>;
430
+ animationCaptionPayload?(): Promise<any>;
431
+ animationCaptionCommand?(): Promise<any>;
432
+ animationCaptionCommandPayload?(): Promise<any>;
433
+ animationFree?(): Promise<any>;
434
+ voiceCaption?(): Promise<any>;
435
+ voiceCaptionPayload?(): Promise<any>;
436
+ voiceCaptionCommand?(): Promise<any>;
437
+ voiceCaptionCommandPayload?(): Promise<any>;
438
+ voiceFree?(): Promise<any>;
439
+ videoNoteFree?(): Promise<any>;
440
+ stickerFree?(): Promise<any>;
441
+ locationFree?(): Promise<any>;
442
+ contactFree?(): Promise<any>;
443
+ free?(): Promise<any>;
444
444
  validateSessionCallback(method?: string, name?: string): boolean;
445
445
  validateSessionCallbackPayload(method?: string, name?: string): boolean;
446
446
  validateSessionText(method?: string, name?: string): boolean;
@@ -611,7 +611,7 @@ declare class Ctx {
611
611
  declare class Gramstax<ICtx extends Ctx = Ctx> {
612
612
  templateManager: TemplateManager;
613
613
  cacheKeyboard: Map<any, any>;
614
- cacheSession: CacheExternal;
614
+ cacheSession: CacheExternal<ICacheRpc>;
615
615
  pages: ReturnType<typeof this.pageLoads>;
616
616
  optionsPage: {
617
617
  shortCallbackData: boolean;
@@ -623,7 +623,6 @@ declare class Gramstax<ICtx extends Ctx = Ctx> {
623
623
  token: string;
624
624
  deploy: string;
625
625
  log?: LoggingPretty | boolean | null;
626
- cacheData?: CacheExternal;
627
626
  cacheSession?: CacheExternal;
628
627
  cacheKeyboard?: Map<any, any>;
629
628
  templateManager?: TemplateManager;
@@ -1145,4 +1144,4 @@ declare class WorkerThreadPool {
1145
1144
  request(threadId: number, method: string, params: any, _wait?: boolean, _others?: any): Promise<any>;
1146
1145
  }
1147
1146
 
1148
- export { BlockKeyboard, CacheExternal, Ctx, Gramstax, type IMapRpc, type IMediaBlock, LabelKeyboard, LoggingUtils, TemplateEngine, TemplateManager, type WorkerThreadAsyncMethods, WorkerThreadExport, type WorkerThreadExportOpt, WorkerThreadGatewayClient, type WorkerThreadGatewayProxy, WorkerThreadGatewayServer, WorkerThreadInit, WorkerThreadLaunch, WorkerThreadPool, WorkerThreadRpc, log };
1147
+ export { BlockKeyboard, CacheExternal, Ctx, Gramstax, type ICacheRpc, type IMapRpc, type IMediaBlock, LabelKeyboard, LoggingUtil, TemplateEngine, TemplateManager, type WorkerThreadAsyncMethods, WorkerThreadExport, type WorkerThreadExportOpt, WorkerThreadGatewayClient, type WorkerThreadGatewayProxy, WorkerThreadGatewayServer, WorkerThreadInit, WorkerThreadLaunch, WorkerThreadPool, WorkerThreadRpc, log };
@@ -9,17 +9,22 @@ import { Worker } from 'node:worker_threads';
9
9
  import * as worker_threads from 'worker_threads';
10
10
  import { Server, Client } from 'net-ipc';
11
11
 
12
- declare class LoggingUtils extends LoggingPretty {
12
+ declare class LoggingUtil extends LoggingPretty {
13
13
  constructor(options?: ConstructorParameters<typeof LoggingPretty>[0]);
14
14
  errorMake(pureError: any, constructorName?: any, funcName?: string): void;
15
15
  _formatErrorObj(pureError: any): string;
16
16
  }
17
- declare const log: LoggingUtils;
17
+ declare const log: LoggingUtil;
18
18
 
19
19
  type IMore = Omit<Required<ConstructorParameters<typeof Keyv>>[0], `store` | `namespace` | `ttl`> & {
20
20
  forceStore?: any;
21
21
  };
22
- declare class CacheExternal extends Keyv {
22
+ type ICacheRpc = {
23
+ method: string;
24
+ params: any;
25
+ [moreRoot: string]: any;
26
+ };
27
+ declare class CacheExternal<V = any> extends Keyv<V> {
23
28
  url: string;
24
29
  constructor(url?: string, ttl?: number, namespace?: string, more?: IMore);
25
30
  refreshLruCache(maxLength?: number): void;
@@ -256,10 +261,7 @@ type IPageData<T extends any[] = any[]> = {
256
261
  };
257
262
  type ITemp = {
258
263
  isAnswer: boolean;
259
- session: {
260
- method?: string;
261
- params?: any;
262
- };
264
+ session: Partial<ICacheRpc>;
263
265
  data: Partial<IPageData<any>>;
264
266
  [key: string]: any;
265
267
  };
@@ -306,7 +308,7 @@ declare class Ctx {
306
308
  set session(v: ITemp[`session`]);
307
309
  get session(): ITemp[`session`];
308
310
  ct: ICt;
309
- cacheSession: CacheExternal;
311
+ cacheSession: CacheExternal<ICacheRpc>;
310
312
  cacheKeyboard: Map<any, any>;
311
313
  templateManager: TemplateManager;
312
314
  temp: ITemp;
@@ -350,19 +352,17 @@ declare class Ctx {
350
352
  delete(): Promise<true>;
351
353
  callbackQueryAnswer(options?: Parameters<typeof this$1.ct.answerCallbackQuery>[0]): Promise<true | null>;
352
354
  sessionSet(method: string, params: any, moreRoot?: Record<any, any>): Promise<boolean | null>;
353
- sessionGet(): Promise<{
354
- method: string;
355
- params: any;
356
- [moreRoot: string]: any;
357
- } | null>;
355
+ sessionGet(): Promise<ICacheRpc | null>;
358
356
  sessionClear(): Promise<boolean | null>;
359
357
  static buildData<C extends (...args: any[]) => any>(callback: C): IPageData<Parameters<C>>;
360
358
  static buildData<C extends (...args: any[]) => any>(options: {
359
+ name?: string;
361
360
  callback?: C;
362
361
  intentText?: string;
363
362
  intentTextCommand?: string;
364
363
  }): IPageData<Parameters<C>>;
365
364
  static buildData(options: {
365
+ name?: string;
366
366
  callback?: any;
367
367
  intentText?: string;
368
368
  intentTextCommand?: string;
@@ -395,52 +395,52 @@ declare class Ctx {
395
395
  getIntent(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionEnd?: number): string;
396
396
  /**
397
397
  * Must be overrides if need this is just placeholder type
398
- * @for Only for transition page from other page
398
+ * @for Only for transition page to other page
399
399
  * @param args Params
400
400
  */
401
401
  transition?(...args: any): Promise<any>;
402
- callback?(): Promise<void | null>;
403
- callbackPayload?(): Promise<void | null>;
404
- text?(): Promise<void | null>;
405
- textPayload?(): Promise<void | null>;
406
- textCommand?(): Promise<void | null>;
407
- textCommandPayload?(): Promise<void | null>;
408
- textFree?(): Promise<void | null>;
409
- photoCaption?(): Promise<void | null>;
410
- photoCaptionPayload?(): Promise<void | null>;
411
- photoCaptionCommand?(): Promise<void | null>;
412
- photoCaptionCommandPayload?(): Promise<void | null>;
413
- photoFree?(): Promise<void | null>;
414
- videoCaption?(): Promise<void | null>;
415
- videoCaptionPayload?(): Promise<void | null>;
416
- videoCaptionCommand?(): Promise<void | null>;
417
- videoCaptionCommandPayload?(): Promise<void | null>;
418
- videoFree?(): Promise<void | null>;
419
- audioCaption?(): Promise<void | null>;
420
- audioCaptionPayload?(): Promise<void | null>;
421
- audioCaptionCommand?(): Promise<void | null>;
422
- audioCaptionCommandPayload?(): Promise<void | null>;
423
- audioFree?(): Promise<void | null>;
424
- documentCaption?(): Promise<void | null>;
425
- documentCaptionPayload?(): Promise<void | null>;
426
- documentCaptionCommand?(): Promise<void | null>;
427
- documentCaptionCommandPayload?(): Promise<void | null>;
428
- documentFree?(): Promise<void | null>;
429
- animationCaption?(): Promise<void | null>;
430
- animationCaptionPayload?(): Promise<void | null>;
431
- animationCaptionCommand?(): Promise<void | null>;
432
- animationCaptionCommandPayload?(): Promise<void | null>;
433
- animationFree?(): Promise<void | null>;
434
- voiceCaption?(): Promise<void | null>;
435
- voiceCaptionPayload?(): Promise<void | null>;
436
- voiceCaptionCommand?(): Promise<void | null>;
437
- voiceCaptionCommandPayload?(): Promise<void | null>;
438
- voiceFree?(): Promise<void | null>;
439
- videoNoteFree?(): Promise<void | null>;
440
- stickerFree?(): Promise<void | null>;
441
- locationFree?(): Promise<void | null>;
442
- contactFree?(): Promise<void | null>;
443
- free?(): Promise<void | null>;
402
+ callback?(): Promise<any>;
403
+ callbackPayload?(): Promise<any>;
404
+ text?(): Promise<any>;
405
+ textPayload?(): Promise<any>;
406
+ textCommand?(): Promise<any>;
407
+ textCommandPayload?(): Promise<any>;
408
+ textFree?(): Promise<any>;
409
+ photoCaption?(): Promise<any>;
410
+ photoCaptionPayload?(): Promise<any>;
411
+ photoCaptionCommand?(): Promise<any>;
412
+ photoCaptionCommandPayload?(): Promise<any>;
413
+ photoFree?(): Promise<any>;
414
+ videoCaption?(): Promise<any>;
415
+ videoCaptionPayload?(): Promise<any>;
416
+ videoCaptionCommand?(): Promise<any>;
417
+ videoCaptionCommandPayload?(): Promise<any>;
418
+ videoFree?(): Promise<any>;
419
+ audioCaption?(): Promise<any>;
420
+ audioCaptionPayload?(): Promise<any>;
421
+ audioCaptionCommand?(): Promise<any>;
422
+ audioCaptionCommandPayload?(): Promise<any>;
423
+ audioFree?(): Promise<any>;
424
+ documentCaption?(): Promise<any>;
425
+ documentCaptionPayload?(): Promise<any>;
426
+ documentCaptionCommand?(): Promise<any>;
427
+ documentCaptionCommandPayload?(): Promise<any>;
428
+ documentFree?(): Promise<any>;
429
+ animationCaption?(): Promise<any>;
430
+ animationCaptionPayload?(): Promise<any>;
431
+ animationCaptionCommand?(): Promise<any>;
432
+ animationCaptionCommandPayload?(): Promise<any>;
433
+ animationFree?(): Promise<any>;
434
+ voiceCaption?(): Promise<any>;
435
+ voiceCaptionPayload?(): Promise<any>;
436
+ voiceCaptionCommand?(): Promise<any>;
437
+ voiceCaptionCommandPayload?(): Promise<any>;
438
+ voiceFree?(): Promise<any>;
439
+ videoNoteFree?(): Promise<any>;
440
+ stickerFree?(): Promise<any>;
441
+ locationFree?(): Promise<any>;
442
+ contactFree?(): Promise<any>;
443
+ free?(): Promise<any>;
444
444
  validateSessionCallback(method?: string, name?: string): boolean;
445
445
  validateSessionCallbackPayload(method?: string, name?: string): boolean;
446
446
  validateSessionText(method?: string, name?: string): boolean;
@@ -611,7 +611,7 @@ declare class Ctx {
611
611
  declare class Gramstax<ICtx extends Ctx = Ctx> {
612
612
  templateManager: TemplateManager;
613
613
  cacheKeyboard: Map<any, any>;
614
- cacheSession: CacheExternal;
614
+ cacheSession: CacheExternal<ICacheRpc>;
615
615
  pages: ReturnType<typeof this.pageLoads>;
616
616
  optionsPage: {
617
617
  shortCallbackData: boolean;
@@ -623,7 +623,6 @@ declare class Gramstax<ICtx extends Ctx = Ctx> {
623
623
  token: string;
624
624
  deploy: string;
625
625
  log?: LoggingPretty | boolean | null;
626
- cacheData?: CacheExternal;
627
626
  cacheSession?: CacheExternal;
628
627
  cacheKeyboard?: Map<any, any>;
629
628
  templateManager?: TemplateManager;
@@ -1145,4 +1144,4 @@ declare class WorkerThreadPool {
1145
1144
  request(threadId: number, method: string, params: any, _wait?: boolean, _others?: any): Promise<any>;
1146
1145
  }
1147
1146
 
1148
- export { BlockKeyboard, CacheExternal, Ctx, Gramstax, type IMapRpc, type IMediaBlock, LabelKeyboard, LoggingUtils, TemplateEngine, TemplateManager, type WorkerThreadAsyncMethods, WorkerThreadExport, type WorkerThreadExportOpt, WorkerThreadGatewayClient, type WorkerThreadGatewayProxy, WorkerThreadGatewayServer, WorkerThreadInit, WorkerThreadLaunch, WorkerThreadPool, WorkerThreadRpc, log };
1147
+ export { BlockKeyboard, CacheExternal, Ctx, Gramstax, type ICacheRpc, type IMapRpc, type IMediaBlock, LabelKeyboard, LoggingUtil, TemplateEngine, TemplateManager, type WorkerThreadAsyncMethods, WorkerThreadExport, type WorkerThreadExportOpt, WorkerThreadGatewayClient, type WorkerThreadGatewayProxy, WorkerThreadGatewayServer, WorkerThreadInit, WorkerThreadLaunch, WorkerThreadPool, WorkerThreadRpc, log };
package/dist/src/index.js CHANGED
@@ -1,11 +1,11 @@
1
- var rt=Object.defineProperty;var p=(u,t)=>rt(u,"name",{value:t,configurable:!0}),K=(u=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(u,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):u)(function(u){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+u+'" is not supported')});import Vt from"path";import{fileURLToPath as ct}from"url";var dt=p(()=>ct(import.meta.url),"getFilename");var C=dt();import{LoggingPretty as lt}from"logging-pretty";var E=class extends lt{static{p(this,"LoggingUtils")}constructor(t){super(t)}errorMake(t,e,s){this.error(`[${e?`${e}:${s}`:s}] ${this._formatErrorObj(t)}`)}_formatErrorObj(t){return JSON.stringify(t instanceof Error?{message:t.message,stack:t.stack,name:t.name}:t,null,2)}},G=new E;import{Keyv as ht}from"keyv";import mt from"@keyv/redis";var R=class extends ht{constructor(e="memory",s,n,o){let a;e.startsWith("redis")&&(a=new mt(e)),e==="memory"&&(a=new Map),o?.forceStore&&(a=o.forceStore);super({store:a,namespace:n,ttl:s});this.url=e}static{p(this,"CacheExternal")}refreshLruCache(e){let s=this.store,n=this.opts.namespace?this.opts.namespace?.length+1:null,o=s.keys().toArray();for(let a=0;a<o.length;a++){let i=o[a];if(a==e)return;this.get(n?i.slice(n):i)}}};import{setTimeout as pt}from"timers/promises";import{InlineKeyboard as q,Keyboard as J}from"grammy";var A=class{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get userIsPremium(){return this.ct.from?.is_premium??!1}get userIsBot(){return this.ct.from?.is_bot??!1}get userId(){return this.ct.from?.id}get userName(){return this.ct.from?.username}get userFullName(){return`${this.ct.from?.first_name} ${this.ct.from?.last_name||""}`}get userFirstName(){return this.ct.from?.first_name}get userLastName(){return this.ct.from?.last_name}get userLanguage(){return this.ct.from?.language_code}set userLanguage(t){this.ct.from.language_code=t}get msgText(){return this.ct.message?.text}get msgTextPayloads(){return this.getPayloads(this.msgText,"space",this.data?._positionPayloadText||this.temp?.data?._positionPayloadText)}get msgTextPayload(){return this.msgTextPayloads[0]}get msgTextCommandPayloads(){return this.getPayloads(this.msgText,"space")}get msgTextCommandPayload(){return this.msgTextCommandPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionPayload(){return this.msgCaptionPayloads[0]}get msgCaptionCommandPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionCommandPayload(){return this.msgCaptionCommandPayloads[0]}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get msgDocument(){return this.ct.message?.document}get msgAnimation(){return this.ct.message?.animation}get msgVoice(){return this.ct.message?.voice}get msgVideoNote(){return this.ct.message?.video_note}get msgSticker(){return this.ct.message?.sticker}get msgLocation(){return this.ct.message?.location}get msgContact(){return this.ct.message?.contact}get msgWebAppData(){return this.ct.message?.web_app_data}get msgGift(){return this.ct.message?.gift}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataPayloads(){return this.getPayloads(this.callbackData,"colon")}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}set session(t){this.temp.session=t}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(t){this.ct=t.ct,this.cacheSession=t.cacheSession,this.cacheKeyboard=t.cacheKeyboard,this.templateManager=t.templateManager,this.temp=t.temp}async broadcast(t,e,s,n,o,a,i=!1){try{this.temp.isAnswer=!0;let r=30,c=e.map(l=>this.templateManager.getMessage(this.data.name,o,l,n));for(let l=0;l<t.length;l++){let d=t[l],h=c[l];await this.ct.api.sendMessage(d,h,{parse_mode:"HTML",reply_markup:s,...a}),l+1==r&&await pt(1200)}}catch(r){if(i)throw r}}async reply(t,e,s,n){this.temp.isAnswer=!0;let o=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:t,...n})}async replyMedia(t,e,s,n,o){this.temp.isAnswer=!0;let a=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s),i={parse_mode:"HTML",reply_markup:e,...o};if(t=="photo")return await this.ct.replyWithPhoto(a.src,{caption:a.caption,...i});if(t=="video")return await this.ct.replyWithVideo(a.src,{caption:a.caption,...i});if(t=="audio")return await this.ct.replyWithAudio(a.src,{caption:a.caption,...i});if(t=="document")return await this.ct.replyWithDocument(a.src,{caption:a.caption,...i});if(t=="animation")return await this.ct.replyWithAnimation(a.src,{caption:a.caption,...i});if(t=="voice")return await this.ct.replyWithVoice(a.src,i);if(t=="video_note")return await this.ct.replyWithVideoNote(a.src,i);if(t=="sticker")return await this.ct.replyWithSticker(a.src,i);if(t=="location")return await this.ct.replyWithLocation(parseInt(a.latitude),parseInt(a.longitude),i);if(t=="contact")return await this.ct.replyWithContact(a.phone,a.first_name,{vcard:a.vcard,...i})}async replyPhoto(t,e,s,n){return this.replyMedia("photo",t,e,s,n)}async replyVideo(t,e,s,n){return this.replyMedia("video",t,e,s,n)}async replyAudio(t,e,s,n){return this.replyMedia("audio",t,e,s,n)}async replyDocument(t,e,s,n){return this.replyMedia("document",t,e,s,n)}async replyAnimation(t,e,s,n){return this.replyMedia("animation",t,e,s,n)}async replyVoice(t,e,s,n){return this.replyMedia("voice",t,e,s,n)}async replyVideoNote(t,e,s,n){return this.replyMedia("video_note",t,e,s,n)}async replySticker(t,e,s,n){return this.replyMedia("sticker",t,e,s,n)}async replyLocation(t,e,s,n){return this.replyMedia("location",t,e,s,n)}async replyContact(t,e,s,n){return this.replyMedia("contact",t,e,s,n)}async replyAction(t){return await this.ct.replyWithChatAction(t)}async edit(t,e,s,n,o=!0){try{this.temp.isAnswer=!0;let a=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.editMessageText(a,{parse_mode:"HTML",reply_markup:t,...n})}catch(a){if(o)await this.reply(t,e,s,n);else throw a}}async editMedia(t,e,s,n,o,a,i=!0){try{this.temp.isAnswer=!0;let{src:r,caption:c}=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s);return t=="voice"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="video_note"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="sticker"?(await this.delete(),await this.replySticker(e,s,n,o)):t=="location"?(await this.delete(),await this.replyLocation(e,s,n,o)):t=="contact"?(await this.delete(),await this.replyContact(e,s,n,o)):await this.ct.editMessageMedia({media:r,caption:c,type:t,parse_mode:"HTML",...o},{reply_markup:e,...a})}catch(r){if(i===!0)await this.reply(e,s,n,a);else throw r}}async editPhoto(t,e,s,n,o){return await this.editMedia("photo",t,e,s,n,o)}async editVideo(t,e,s,n,o){return await this.editMedia("video",t,e,s,n,o)}async editAudio(t,e,s,n,o){return await this.editMedia("audio",t,e,s,n,o)}async editDocument(t,e,s,n,o){return await this.editMedia("document",t,e,s,n,o)}async editAnimation(t,e,s,n,o){return await this.editMedia("animation",t,e,s,n,o)}async editVoice(t,e,s,n){return await this.editMedia("voice",t,e,s,n)}async editVideoNote(t,e,s,n){return await this.editMedia("video_note",t,e,s,n)}async editSticker(t,e,s,n){return await this.editMedia("sticker",t,e,s,n)}async editLocation(t,e,s,n){return await this.editMedia("location",t,e,s,n)}async editContact(t,e,s,n){return await this.editMedia("contact",t,e,s,n)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(t){try{return this.temp.isAnswer=!0,await this.ct.answerCallbackQuery(t)}catch{return null}}async sessionSet(t,e,s){try{let n={method:t,params:e,...s},o=await this.cacheSession.set(`${this.userId}`,n);return o&&(this.session=n),o}catch{return null}}async sessionGet(){try{let t=await this.cacheSession.get(`${this.userId}`);return t&&(this.session=t),t||null}catch{return null}}async sessionClear(){try{let t=await this.cacheSession.delete(`${this.userId}`);return t&&(this.session={}),t}catch{return null}}static buildData(t){let s=typeof t=="function"?{callback:t}:t||{},n=s.callback,o=this.prototype.addPayloads.bind(this.prototype);return{name:"",intentText:s.intentText||"",intentTextCommand:s.intentTextCommand||"",callback:n?function(...i){return o(this.intentCallback,"colon",n(...i))}:function(){return this?.intentCallback},intentCallback:"",_positionPayloadText:s.intentText?s.intentText.split(this.prototype.getSeperatorTag("space")).length:void 0}}keyboardCols(t,e,s,n){let[o,a]=s.split("-"),i=parseInt(o),r=a?parseInt(a):null,c=e.length,l=t;for(let d=0;d<c;d++){let h=e[d];if(n(h,d),r===null)(d+1)%i===0&&d<c-1&&l.row();else{let m=c-(d+1);(m===r||m>r&&(d+1)%i===0)&&l.row()}}return t}bottomKeyboardT(t="1",e,s){return this.bottomKeyboard((n,o)=>this.keyboardCols(n,o,t,a=>n.text(a)),{baseId:e??void 0,data:s})}inlineKeyboardT(t,e="1",s,n){return this.inlineKeyboard((o,a)=>this.keyboardCols(o,a,e,(i,r)=>{let c=t[r],l=typeof c=="string"?c:c.data.callback();o.text(i,l)}),{baseId:s??void 0,data:n})}inlineKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:i`,r=this.cacheKeyboard.get(i);if(!r){let c=new q,l=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data),d=t(c,l);return this.cacheKeyboard.set(i,d),d}return r}let n=new q,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data);return t(n,o)}bottomKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:b`,r=this.cacheKeyboard.get(i);if(!r){let c=new J,l=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),d=t(c,l);return d.resized(!0),this.cacheKeyboard.set(i,d),d}return r}let n=new J,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),a=t(n,o);return a.resized(),a}getSeperatorTag(t="space"){return t=="space"?" ":":"}havePayloads(t="",e){return t.includes(this.getSeperatorTag(e))}addPayloads(t="",e,s){let n=this.getSeperatorTag(e),o="";for(let a=0;a<s.length;a++){let i=s[a];i!=null&&i!==""&&(o+=n+i)}return t+o}getPayloads(t="",e,s=1){if(!t)return[];let n=this.getSeperatorTag(e);return t.split(n).slice(s)}getIntent(t="",e,s=1){if(!t)return"";let n=this.getSeperatorTag(e),o=t.split(n);return s==1?o[0]:o.slice(0,s).join(n)}validateSessionCallback(t,e){return(t??this.session.method)===this.methodSessionCallback(e)}validateSessionCallbackPayload(t,e){return(t??this.session.method)===this.methodSessionCallbackPayload(e)}validateSessionText(t,e){return(t??this.session.method)===this.methodSessionText(e)}validateSessionTextPayload(t,e){return(t??this.session.method)===this.methodSessionTextPayload(e)}validateSessionTextCommand(t,e){return(t??this.session.method)===this.methodSessionTextCommand(e)}validateSessionTextCommandPayload(t,e){return(t??this.session.method)===this.methodSessionTextCommandPayload(e)}validateSessionTextFree(t,e){return(t??this.session.method)===this.methodSessionTextFree(e)}validateSessionPhotoCaption(t,e){return(t??this.session.method)===this.methodSessionPhotoCaption(e)}validateSessionPhotoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(t,e){return(t??this.session.method)===this.methodSessionPhotoFree(e)}validateSessionVideoCaption(t,e){return(t??this.session.method)===this.methodSessionVideoCaption(e)}validateSessionVideoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommandPayload(e)}validateSessionVideoFree(t,e){return(t??this.session.method)===this.methodSessionVideoFree(e)}validateSessionAudioCaption(t,e){return(t??this.session.method)===this.methodSessionAudioCaption(e)}validateSessionAudioCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommandPayload(e)}validateSessionAudioFree(t,e){return(t??this.session.method)===this.methodSessionAudioFree(e)}validateSessionDocumentCaption(t,e){return(t??this.session.method)===this.methodSessionDocumentCaption(e)}validateSessionDocumentCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(t,e){return(t??this.session.method)===this.methodSessionDocumentFree(e)}validateSessionAnimationCaption(t,e){return(t??this.session.method)===this.methodSessionAnimationCaption(e)}validateSessionAnimationCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(t,e){return(t??this.session.method)===this.methodSessionAnimationFree(e)}validateSessionVoiceCaption(t,e){return(t??this.session.method)===this.methodSessionVoiceCaption(e)}validateSessionVoiceCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(t,e){return(t??this.session.method)===this.methodSessionVoiceFree(e)}validateSessionVideoNoteFree(t,e){return(t??this.session.method)===this.methodSessionVideoNoteFree(e)}validateSessionStickerFree(t,e){return(t??this.session.method)===this.methodSessionStickerFree(e)}validateSessionLocationFree(t,e){return(t??this.session.method)===this.methodSessionLocationFree(e)}validateSessionContactFree(t,e){return(t??this.session.method)===this.methodSessionContactFree(e)}sessionCallback(t,e){return this.sessionSet(this.methodSessionCallback(e),t)}sessionCallbackPayload(t,e){return this.sessionSet(this.methodSessionCallbackPayload(e),t)}sessionText(t,e){return this.sessionSet(this.methodSessionText(e),t)}sessionTextPayload(t,e){return this.sessionSet(this.methodSessionTextPayload(e),t)}sessionTextCommand(t,e){return this.sessionSet(this.methodSessionTextCommand(e),t)}sessionTextCommandPayload(t,e){return this.sessionSet(this.methodSessionTextCommandPayload(e),t)}sessionTextFree(t,e){return this.sessionSet(this.methodSessionTextFree(e),t)}sessionPhotoCaption(t,e){return this.sessionSet(this.methodSessionPhotoCaption(e),t)}sessionPhotoCaptionPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionPayload(e),t)}sessionPhotoCaptionCommand(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommand(e),t)}sessionPhotoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommandPayload(e),t)}sessionPhotoFree(t,e){return this.sessionSet(this.methodSessionPhotoFree(e),t)}sessionVideoCaption(t,e){return this.sessionSet(this.methodSessionVideoCaption(e),t)}sessionVideoCaptionPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionPayload(e),t)}sessionVideoCaptionCommand(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommand(e),t)}sessionVideoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommandPayload(e),t)}sessionVideoFree(t,e){return this.sessionSet(this.methodSessionVideoFree(e),t)}sessionAudioCaption(t,e){return this.sessionSet(this.methodSessionAudioCaption(e),t)}sessionAudioCaptionPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionPayload(e),t)}sessionAudioCaptionCommand(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommand(e),t)}sessionAudioCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommandPayload(e),t)}sessionAudioFree(t,e){return this.sessionSet(this.methodSessionAudioFree(e),t)}sessionDocumentCaption(t,e){return this.sessionSet(this.methodSessionDocumentCaption(e),t)}sessionDocumentCaptionPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionPayload(e),t)}sessionDocumentCaptionCommand(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommand(e),t)}sessionDocumentCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommandPayload(e),t)}sessionDocumentFree(t,e){return this.sessionSet(this.methodSessionDocumentFree(e),t)}sessionAnimationCaption(t,e){return this.sessionSet(this.methodSessionAnimationCaption(e),t)}sessionAnimationCaptionPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionPayload(e),t)}sessionAnimationCaptionCommand(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommand(e),t)}sessionAnimationCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommandPayload(e),t)}sessionAnimationFree(t,e){return this.sessionSet(this.methodSessionAnimationFree(e),t)}sessionVoiceCaption(t,e){return this.sessionSet(this.methodSessionVoiceCaption(e),t)}sessionVoiceCaptionPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionPayload(e),t)}sessionVoiceCaptionCommand(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommand(e),t)}sessionVoiceCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommandPayload(e),t)}sessionVoiceFree(t,e){return this.sessionSet(this.methodSessionVoiceFree(e),t)}sessionVideoNoteFree(t,e){return this.sessionSet(this.methodSessionVideoNoteFree(e),t)}sessionStickerFree(t,e){return this.sessionSet(this.methodSessionStickerFree(e),t)}sessionLocationFree(t,e){return this.sessionSet(this.methodSessionLocationFree(e),t)}sessionContactFree(t,e){return this.sessionSet(this.methodSessionContactFree(e),t)}sessionToCallback(t,e){return this.sessionCallback({...this.session.params,...t},e)}sessionToCallbackPayload(t,e){return this.sessionCallbackPayload({...this.session.params,...t},e)}sessionToText(t,e){return this.sessionText({...this.session.params,...t},e)}sessionToTextPayload(t,e){return this.sessionTextPayload({...this.session.params,...t},e)}sessionToTextCommand(t,e){return this.sessionTextCommand({...this.session.params,...t},e)}sessionToTextCommandPayload(t,e){return this.sessionTextCommandPayload({...this.session.params,...t},e)}sessionToTextFree(t,e){return this.sessionTextFree({...this.session.params,...t},e)}sessionToPhotoCaption(t,e){return this.sessionPhotoCaption({...this.session.params,...t},e)}sessionToPhotoCaptionPayload(t,e){return this.sessionPhotoCaptionPayload({...this.session.params,...t},e)}sessionToPhotoCaptionCommand(t,e){return this.sessionPhotoCaptionCommand({...this.session.params,...t},e)}sessionToPhotoCaptionCommandPayload(t,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...t},e)}sessionToPhotoFree(t,e){return this.sessionPhotoFree({...this.session.params,...t},e)}sessionToVideoCaption(t,e){return this.sessionVideoCaption({...this.session.params,...t},e)}sessionToVideoCaptionPayload(t,e){return this.sessionVideoCaptionPayload({...this.session.params,...t},e)}sessionToVideoCaptionCommand(t,e){return this.sessionVideoCaptionCommand({...this.session.params,...t},e)}sessionToVideoCaptionCommandPayload(t,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...t},e)}sessionToVideoFree(t,e){return this.sessionVideoFree({...this.session.params,...t},e)}sessionToAudioCaption(t,e){return this.sessionAudioCaption({...this.session.params,...t},e)}sessionToAudioCaptionPayload(t,e){return this.sessionAudioCaptionPayload({...this.session.params,...t},e)}sessionToAudioCaptionCommand(t,e){return this.sessionAudioCaptionCommand({...this.session.params,...t},e)}sessionToAudioCaptionCommandPayload(t,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...t},e)}sessionToAudioFree(t,e){return this.sessionAudioFree({...this.session.params,...t},e)}sessionToDocumentCaption(t,e){return this.sessionDocumentCaption({...this.session.params,...t},e)}sessionToDocumentCaptionPayload(t,e){return this.sessionDocumentCaptionPayload({...this.session.params,...t},e)}sessionToDocumentCaptionCommand(t,e){return this.sessionDocumentCaptionCommand({...this.session.params,...t},e)}sessionToDocumentCaptionCommandPayload(t,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...t},e)}sessionToDocumentFree(t,e){return this.sessionDocumentFree({...this.session.params,...t},e)}sessionToAnimationCaption(t,e){return this.sessionAnimationCaption({...this.session.params,...t},e)}sessionToAnimationCaptionPayload(t,e){return this.sessionAnimationCaptionPayload({...this.session.params,...t},e)}sessionToAnimationCaptionCommand(t,e){return this.sessionAnimationCaptionCommand({...this.session.params,...t},e)}sessionToAnimationCaptionCommandPayload(t,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...t},e)}sessionToAnimationFree(t,e){return this.sessionAnimationFree({...this.session.params,...t},e)}sessionToVoiceCaption(t,e){return this.sessionVoiceCaption({...this.session.params,...t},e)}sessionToVoiceCaptionPayload(t,e){return this.sessionVoiceCaptionPayload({...this.session.params,...t},e)}sessionToVoiceCaptionCommand(t,e){return this.sessionVoiceCaptionCommand({...this.session.params,...t},e)}sessionToVoiceCaptionCommandPayload(t,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...t},e)}sessionToVoiceFree(t,e){return this.sessionVoiceFree({...this.session.params,...t},e)}sessionToVideoNoteFree(t,e){return this.sessionVideoNoteFree({...this.session.params,...t},e)}sessionToStickerFree(t,e){return this.sessionStickerFree({...this.session.params,...t},e)}sessionToLocationFree(t,e){return this.sessionLocationFree({...this.session.params,...t},e)}sessionToContactFree(t,e){return this.sessionContactFree({...this.session.params,...t},e)}methodSession(t,e){return`${t}-${e||this.data.name}`}methodSessionCallback(t){return this.methodSession("1",t)}methodSessionCallbackPayload(t){return this.methodSession("2",t)}methodSessionText(t){return this.methodSession("3",t)}methodSessionTextPayload(t){return this.methodSession("4",t)}methodSessionTextCommand(t){return this.methodSession("5",t)}methodSessionTextCommandPayload(t){return this.methodSession("6",t)}methodSessionTextFree(t){return this.methodSession("7",t)}methodSessionPhotoCaption(t){return this.methodSession("8",t)}methodSessionPhotoCaptionPayload(t){return this.methodSession("9",t)}methodSessionPhotoCaptionCommand(t){return this.methodSession("10",t)}methodSessionPhotoCaptionCommandPayload(t){return this.methodSession("11",t)}methodSessionPhotoFree(t){return this.methodSession("12",t)}methodSessionVideoCaption(t){return this.methodSession("13",t)}methodSessionVideoCaptionPayload(t){return this.methodSession("14",t)}methodSessionVideoCaptionCommand(t){return this.methodSession("15",t)}methodSessionVideoCaptionCommandPayload(t){return this.methodSession("16",t)}methodSessionVideoFree(t){return this.methodSession("17",t)}methodSessionAudioCaption(t){return this.methodSession("18",t)}methodSessionAudioCaptionPayload(t){return this.methodSession("19",t)}methodSessionAudioCaptionCommand(t){return this.methodSession("20",t)}methodSessionAudioCaptionCommandPayload(t){return this.methodSession("21",t)}methodSessionAudioFree(t){return this.methodSession("22",t)}methodSessionDocumentCaption(t){return this.methodSession("23",t)}methodSessionDocumentCaptionPayload(t){return this.methodSession("24",t)}methodSessionDocumentCaptionCommand(t){return this.methodSession("25",t)}methodSessionDocumentCaptionCommandPayload(t){return this.methodSession("26",t)}methodSessionDocumentFree(t){return this.methodSession("27",t)}methodSessionAnimationCaption(t){return this.methodSession("28",t)}methodSessionAnimationCaptionPayload(t){return this.methodSession("29",t)}methodSessionAnimationCaptionCommand(t){return this.methodSession("30",t)}methodSessionAnimationCaptionCommandPayload(t){return this.methodSession("31",t)}methodSessionAnimationFree(t){return this.methodSession("32",t)}methodSessionVoiceCaption(t){return this.methodSession("33",t)}methodSessionVoiceCaptionPayload(t){return this.methodSession("34",t)}methodSessionVoiceCaptionCommand(t){return this.methodSession("35",t)}methodSessionVoiceCaptionCommandPayload(t){return this.methodSession("36",t)}methodSessionVoiceFree(t){return this.methodSession("37",t)}methodSessionVideoNoteFree(t){return this.methodSession("38",t)}methodSessionStickerFree(t){return this.methodSession("39",t)}methodSessionLocationFree(t){return this.methodSession("40",t)}methodSessionContactFree(t){return this.methodSession("41",t)}};import{join as Y,dirname as Ct,parse as St}from"path";import{readFileSync as bt}from"fs";import{fileURLToPath as Pt}from"url";import{join as L}from"path";import{existsSync as Q,readdirSync as U}from"fs";import{createRequire as gt}from"module";var b=class{static{p(this,"PageManager")}static _getFile(t,e,s=0){let o=Object.values(t)[s];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return o}static getFilePath(){return L(process.cwd(),"src","pages")}static getFileSync(t,e=0){t||(t=this.getFilePath());let n=gt(t)(t);return this._getFile(n,t,e)}static async getFile(t,e=0){t||(t=this.getFilePath());let s=await import(`${t}?t=${Date.now()}`);return this._getFile(s,t,e)}static getFileManySync(t,e=0){if(t||(t=this.getFilePath()),!Q(t))throw new Error(`Directory ${t} is not found, please make it manually`);return U(t).map(n=>{let o=L(t,n);return{path:o,page:this.getFileSync(o,e)}})}static clearCacheRequire(t){if(t||(t=this.getFilePath()),!Q(t))throw new Error(`Directory ${t} is not found, please make it manually`);return U(t).forEach(s=>{let n=L(t,s);delete K.cache[K.resolve(n)]}),!0}};import{basename as N,join as x,extname as H}from"path";import{readdirSync as ut,readFileSync as D,existsSync as _,statSync as F,writeFileSync as yt}from"fs";import{watch as ft}from"chokidar";var w=class{static{p(this,"TemplateEngine")}static _escape(t){return t.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(t){return t.replace(/\{\{(\w+)\}\}/g,(e,s)=>`\${(data && data["${s}"]) ?? ""}`)}static _processBaseBlocks(t){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,s={};for(let n of t.matchAll(e)){let o=n[2]??"default",i=(n[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[o]=i}return s}static _processScriptBlocks(t){return t.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,s)=>{let n=s.trim();return n?`\${(() => { if (!data) return ''; try { with(data) { ${n} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(t){return t.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(t){return t.replace(/<div>([\s\S]*?)<\/div>/gi,(e,s)=>s.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processSwitchBlocks(t){let e=/<switch\b(?:\s+value="([^"]+)")?>([\s\S]*?)<\/switch>/gi;return t.replace(e,(s,n,o)=>{if(!n)return"";let a="",i=/<case\b(?:\s+is="([^"]+)")?>([\s\S]*?)<\/case>/gi,r=/<default>([\s\S]*?)<\/default>/gi,c;for(;(c=i.exec(o))!==null;){let d=(c[1]||"").split(",").map(m=>m.trim()),h=(c[2]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");d.forEach(m=>{a+=`case "${m}": `}),a+=`return \`${h}\`; `}let l=r.exec(o);if(l){let d=(l[1]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");a+=`default: return \`${d}\`; `}else a+="default: return ''; ";return`\${(() => { switch((data && data["${n}"])) { ${a} } })()}`})}static _processExec(t){return t.replace(/{~\s*([\s\S]*?)\s*~}/g,(e,s)=>`\${(() => { try { return ${s} } catch(e) { try { with(data || {}) { return ${s} } } catch(ee) { return '' } } })()}`)}static _processMapBlocks(t){let e=/<map(?:\s+([^>]*))?>([\s\S]*?)<\/map>/gi;return t.replace(e,(s,n,o)=>{let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let h of n.matchAll(i))a[h[1]]=h[2];let r=a.src;if(!r)return"";let c=a.join??"\\n",l=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").replace(/`/g,"\\`");l=l.replace(/\{\{([\w.]+)\}\}/g,(h,m)=>m==="e"||m.startsWith("e.")?`\${${m}}`:m==="i"?"${i}":h);let d=c.replace(/"/g,'\\"');return`\${(data && data["${r}"] || []).map((e, i) => \`${l}\`).join("${d}")}`})}static _processMediaBlocks(t){let e=/<media(?:\s+([^>]*))?>([\s\S]*?)<\/media>/gi,s={};for(let n of t.matchAll(e)){let o=n[1],a=n[2],i={},r=/(\w+)="([^"]*)"/g;if(o)for(let m of o.matchAll(r))i[m[1]]=m[2];let c=i.lang||"default",l=i.type,d=a.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),h={type:l};i.src&&(h.src=i.src),d&&l!=="video_note"&&l!=="sticker"&&(h.caption=d),l==="location"&&(i.latitude&&(h.latitude=i.latitude),i.longitude&&(h.longitude=i.longitude),d&&(h.caption=d)),l==="contact"&&(i.phone&&(h.phone=i.phone),i.first_name&&(h.first_name=i.first_name),i.last_name&&(h.last_name=i.last_name),i.vcard&&(h.vcard=i.vcard),d&&(h.caption=d)),s[c]=h}return s}static _processMessageBlocks(t){let e=/<message(?:\s+([^>]*))?>([\s\S]*?)<\/message>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let l of n.matchAll(i))a[l[1]]=l[2];let r=a.lang||"default",c=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]=c}return s}static _processDescriptionBlocks(t){let e=/<description(?:\s+([^>]*))?>([\s\S]*?)<\/description>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.scope||"default",l=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]||(s[r]={}),s[r][c]=l}return s}static _processKeyboardBlocks(t){let e=/<keyboard(?:\s+([^>]*))?>([\s\S]*?)<\/keyboard>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.type==="bottom"?"bottom":"inline",l=o.trim();s[r]||(s[r]={}),s[r][c]=l}return s}static _compileToFunction(t,e){let s;e?s=t.map(a=>`\`${a}\``).join(","):s=`\`${t}\``;let n=s;if(n=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(n))),e){let o=`return [${n}]`;return new Function("data",o)}else{let o=`return ${n}`;return new Function("data",o)}}static compileMedia(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMediaBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let l={};for(let[d,h]of Object.entries(c)){if(d==="type"||typeof h!="string")continue;let m=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(h)))));l[d]=this._compileToFunction(m,!1)}n[o][r]=d=>{let h={...c};for(let[m,y]of Object.entries(l))h[m]=y(d);return h}}}return n}static compileMessages(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMessageBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let l=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(c)))));n[o][r]=this._compileToFunction(l,!1)}}return n}static compileDescription(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processDescriptionBlocks(a);n[o]={};for(let[r,c]of Object.entries(i))for(let[l,d]of Object.entries(c)){n[o][l]||(n[o][l]={});let h=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(d)))));n[o][l][r]=this._compileToFunction(h,!1)}}return n}static compileKeyboards(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processKeyboardBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){n[o][r]={};for(let[l,d]of Object.entries(c)){let m=d.split(/(?<!\\),\s*/).map(y=>y.replace(/\\,/g,",").trim()).map(y=>this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(y))))));n[o][r][l]=this._compileToFunction(m,!0)}}}return n}static _extractBlock(t,e,s="default",n="all",o){let a=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,i=t,r=!1;for(let c of t.matchAll(a))if((c[2]??"default")===s){i=c[3]??"",r=!0;break}if(!r){let c=/<base\b/.test(t);if(!(s==="default"&&!c))return""}if(e){if(e==="all")return i;let c=Array.isArray(e)?e:[e],l=[];for(let h of c){let m=new RegExp(`([ \\t]*)<${h}(?:\\s+([^>]*))?>([\\s\\S]*?)<\\/${h}>`,"gi");for(let y of i.matchAll(m)){let f=y[2];if(o){let g=/lang="([^"]*)"/i,P=f?.match(g);if(((P?P[1]:void 0)||"default")!==o)continue}l.push({start:y.index,content:y[0],innerContent:y[3]??""})}}l.sort((h,m)=>h.start-m.start);let d=p(h=>{let m=h.split(`
2
- `);if(m.length<=1)return h.trim();let y=m.filter(g=>g.trim().length>0);if(y.length===0)return"";let f=y.reduce((g,P)=>{let k=P.match(/^([ \t]*)/),T=k?k[1].length:0;return T<g?T:g},1/0);return m.map(g=>g.length>=f?g.slice(f):g.trimStart()).join(`
3
- `).trim()},"processResult");return n==="all"?l.map(m=>d(m.content)).join(`
4
- `):l.map(m=>d(m.innerContent)).join(`
5
- `)}return i}static _processImportBlocks(t){let e=/([ \t]*)<import(?:\s+([^>]*))?\/?>/gi,s=[];return{processed:t.replace(e,(o,a,i)=>{let r={},c=/(\w+)="([^"]*)"/g;if(i)for(let m of i.matchAll(c))r[m[1]]=m[2];let l=r.src;if(!l)return"";let d;r.block&&(r.block==="all"?d="all":r.block.includes(",")?d=r.block.split(",").map(m=>m.trim()).filter(m=>m):d=r.block);let h={src:l,blocks:d,base:r.base||"default",lang:r.lang,section:r.section||"all",indent:a||""};return s.push(h),`${a}__IMPORT_${s.length-1}__`}),imports:s}}static processImportBlocks(t,e,s=0,n){if(s>10)return"";let{processed:o,imports:a}=this._processImportBlocks(t),i=o;for(let r=0;r<a.length;r++){let c=a[r],l=`${c.src}|${c.base}|${c.lang||""}|${c.section}|${Array.isArray(c.blocks)?c.blocks.join(","):c.blocks||""}`,d;if(n&&n.has(l))d=n.get(l);else{let m=e(c.src);d=m?this._extractBlock(m,c.blocks,c.base,c.section,c.lang):"",d&&d.includes("<import")&&(d=this.processImportBlocks(d,e,s+1,n)),n&&n.set(l,d)}let h=d.split(`
1
+ var rt=Object.defineProperty;var p=(u,t)=>rt(u,"name",{value:t,configurable:!0}),K=(u=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(u,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):u)(function(u){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+u+'" is not supported')});import Ot from"path";import{fileURLToPath as ct}from"url";var dt=p(()=>ct(import.meta.url),"getFilename");var C=dt();import{LoggingPretty as ht}from"logging-pretty";var E=class extends ht{static{p(this,"LoggingUtil")}constructor(t){super(t)}errorMake(t,e,s){this.error(`[${e?`${e}:${s}`:s}] ${this._formatErrorObj(t)}`)}_formatErrorObj(t){return JSON.stringify(t instanceof Error?{message:t.message,stack:t.stack,name:t.name}:t,null,2)}},G=new E;import{Keyv as lt}from"keyv";import mt from"@keyv/redis";var F=class extends lt{constructor(e="memory",s,n,o){let a;e.startsWith("redis")&&(a=new mt(e)),e==="memory"&&(a=new Map),o?.forceStore&&(a=o.forceStore);super({store:a,namespace:n,ttl:s});this.url=e}static{p(this,"CacheExternal")}refreshLruCache(e){let s=this.store,n=this.opts.namespace?this.opts.namespace?.length+1:null,o=s.keys().toArray();for(let a=0;a<o.length;a++){let i=o[a];if(a==e)return;this.get(n?i.slice(n):i)}}};import{setTimeout as pt}from"timers/promises";import{InlineKeyboard as q,Keyboard as J}from"grammy";var A=class{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get userIsPremium(){return this.ct.from?.is_premium??!1}get userIsBot(){return this.ct.from?.is_bot??!1}get userId(){return this.ct.from?.id}get userName(){return this.ct.from?.username}get userFullName(){return`${this.ct.from?.first_name} ${this.ct.from?.last_name||""}`}get userFirstName(){return this.ct.from?.first_name}get userLastName(){return this.ct.from?.last_name}get userLanguage(){return this.ct.from?.language_code}set userLanguage(t){this.ct.from.language_code=t}get msgText(){return this.ct.message?.text}get msgTextPayloads(){return this.getPayloads(this.msgText,"space",this.data?._positionPayloadText||this.temp?.data?._positionPayloadText)}get msgTextPayload(){return this.msgTextPayloads[0]}get msgTextCommandPayloads(){return this.getPayloads(this.msgText,"space")}get msgTextCommandPayload(){return this.msgTextCommandPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionPayload(){return this.msgCaptionPayloads[0]}get msgCaptionCommandPayloads(){return this.getPayloads(this.msgCaption,"space")}get msgCaptionCommandPayload(){return this.msgCaptionCommandPayloads[0]}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get msgDocument(){return this.ct.message?.document}get msgAnimation(){return this.ct.message?.animation}get msgVoice(){return this.ct.message?.voice}get msgVideoNote(){return this.ct.message?.video_note}get msgSticker(){return this.ct.message?.sticker}get msgLocation(){return this.ct.message?.location}get msgContact(){return this.ct.message?.contact}get msgWebAppData(){return this.ct.message?.web_app_data}get msgGift(){return this.ct.message?.gift}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataPayloads(){return this.getPayloads(this.callbackData,"colon")}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}set session(t){this.temp.session=t}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(t){this.ct=t.ct,this.cacheSession=t.cacheSession,this.cacheKeyboard=t.cacheKeyboard,this.templateManager=t.templateManager,this.temp=t.temp}async broadcast(t,e,s,n,o,a,i=!1){try{this.temp.isAnswer=!0;let r=30,c=e.map(h=>this.templateManager.getMessage(this.data.name,o,h,n));for(let h=0;h<t.length;h++){let d=t[h],l=c[h];await this.ct.api.sendMessage(d,l,{parse_mode:"HTML",reply_markup:s,...a}),h+1==r&&await pt(1200)}}catch(r){if(i)throw r}}async reply(t,e,s,n){this.temp.isAnswer=!0;let o=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:t,...n})}async replyMedia(t,e,s,n,o){this.temp.isAnswer=!0;let a=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s),i={parse_mode:"HTML",reply_markup:e,...o};if(t=="photo")return await this.ct.replyWithPhoto(a.src,{caption:a.caption,...i});if(t=="video")return await this.ct.replyWithVideo(a.src,{caption:a.caption,...i});if(t=="audio")return await this.ct.replyWithAudio(a.src,{caption:a.caption,...i});if(t=="document")return await this.ct.replyWithDocument(a.src,{caption:a.caption,...i});if(t=="animation")return await this.ct.replyWithAnimation(a.src,{caption:a.caption,...i});if(t=="voice")return await this.ct.replyWithVoice(a.src,i);if(t=="video_note")return await this.ct.replyWithVideoNote(a.src,i);if(t=="sticker")return await this.ct.replyWithSticker(a.src,i);if(t=="location")return await this.ct.replyWithLocation(parseInt(a.latitude),parseInt(a.longitude),i);if(t=="contact")return await this.ct.replyWithContact(a.phone,a.first_name,{vcard:a.vcard,...i})}async replyPhoto(t,e,s,n){return this.replyMedia("photo",t,e,s,n)}async replyVideo(t,e,s,n){return this.replyMedia("video",t,e,s,n)}async replyAudio(t,e,s,n){return this.replyMedia("audio",t,e,s,n)}async replyDocument(t,e,s,n){return this.replyMedia("document",t,e,s,n)}async replyAnimation(t,e,s,n){return this.replyMedia("animation",t,e,s,n)}async replyVoice(t,e,s,n){return this.replyMedia("voice",t,e,s,n)}async replyVideoNote(t,e,s,n){return this.replyMedia("video_note",t,e,s,n)}async replySticker(t,e,s,n){return this.replyMedia("sticker",t,e,s,n)}async replyLocation(t,e,s,n){return this.replyMedia("location",t,e,s,n)}async replyContact(t,e,s,n){return this.replyMedia("contact",t,e,s,n)}async replyAction(t){return await this.ct.replyWithChatAction(t)}async edit(t,e,s,n,o=!0){try{this.temp.isAnswer=!0;let a=this.templateManager.getMessage(this.data.name,s,this.userLanguage,e);return await this.ct.editMessageText(a,{parse_mode:"HTML",reply_markup:t,...n})}catch(a){if(o)await this.reply(t,e,s,n);else throw a}}async editMedia(t,e,s,n,o,a,i=!0){try{this.temp.isAnswer=!0;let{src:r,caption:c}=this.templateManager.getMedia(this.data.name,n,this.userLanguage,s);return t=="voice"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="video_note"?(await this.delete(),await this.replyVoice(e,s,n,o)):t=="sticker"?(await this.delete(),await this.replySticker(e,s,n,o)):t=="location"?(await this.delete(),await this.replyLocation(e,s,n,o)):t=="contact"?(await this.delete(),await this.replyContact(e,s,n,o)):await this.ct.editMessageMedia({media:r,caption:c,type:t,parse_mode:"HTML",...o},{reply_markup:e,...a})}catch(r){if(i===!0)await this.reply(e,s,n,a);else throw r}}async editPhoto(t,e,s,n,o){return await this.editMedia("photo",t,e,s,n,o)}async editVideo(t,e,s,n,o){return await this.editMedia("video",t,e,s,n,o)}async editAudio(t,e,s,n,o){return await this.editMedia("audio",t,e,s,n,o)}async editDocument(t,e,s,n,o){return await this.editMedia("document",t,e,s,n,o)}async editAnimation(t,e,s,n,o){return await this.editMedia("animation",t,e,s,n,o)}async editVoice(t,e,s,n){return await this.editMedia("voice",t,e,s,n)}async editVideoNote(t,e,s,n){return await this.editMedia("video_note",t,e,s,n)}async editSticker(t,e,s,n){return await this.editMedia("sticker",t,e,s,n)}async editLocation(t,e,s,n){return await this.editMedia("location",t,e,s,n)}async editContact(t,e,s,n){return await this.editMedia("contact",t,e,s,n)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(t){try{return this.temp.isAnswer=!0,await this.ct.answerCallbackQuery(t)}catch{return null}}async sessionSet(t,e,s){try{let n={method:t,params:e,...s},o=await this.cacheSession.set(`${this.userId}`,n);return o&&(this.session=n),o}catch{return null}}async sessionGet(){try{let t=await this.cacheSession.get(`${this.userId}`);return t&&(this.session=t),t||null}catch{return null}}async sessionClear(){try{let t=await this.cacheSession.delete(`${this.userId}`);return t&&(this.session={}),t}catch{return null}}static buildData(t){let s=typeof t=="function"?{callback:t}:t||{},n=s.callback,o=this.prototype.addPayloads.bind(this.prototype),a=s.name||"";return{name:a,intentText:s.intentText||a,intentTextCommand:s.intentTextCommand||a,intentCallback:a,callback:n?function(...r){return o(this.intentCallback,"colon",n(...r))}:function(){return this?.intentCallback},_positionPayloadText:s.intentText?s.intentText.split(this.prototype.getSeperatorTag("space")).length:void 0}}keyboardCols(t,e,s,n){let[o,a]=s.split("-"),i=parseInt(o),r=a?parseInt(a):null,c=e.length,h=t;for(let d=0;d<c;d++){let l=e[d];if(n(l,d),r===null)(d+1)%i===0&&d<c-1&&h.row();else{let m=c-(d+1);(m===r||m>r&&(d+1)%i===0)&&h.row()}}return t}bottomKeyboardT(t="1",e,s){return this.bottomKeyboard((n,o)=>this.keyboardCols(n,o,t,a=>n.text(a)),{baseId:e??void 0,data:s})}inlineKeyboardT(t,e="1",s,n){return this.inlineKeyboard((o,a)=>this.keyboardCols(o,a,e,(i,r)=>{let c=t[r],h=typeof c=="string"?c:c.data.callback();o.text(i,h)}),{baseId:s??void 0,data:n})}inlineKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:i`,r=this.cacheKeyboard.get(i);if(!r){let c=new q,h=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data),d=t(c,h);return this.cacheKeyboard.set(i,d),d}return r}let n=new q,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"inline",e?.data);return t(n,o)}bottomKeyboard(t,e){let s=this.data.name;if(e?.cache===!0){let i=`${s}:${this.userLanguage}:b`,r=this.cacheKeyboard.get(i);if(!r){let c=new J,h=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),d=t(c,h);return d.resized(!0),this.cacheKeyboard.set(i,d),d}return r}let n=new J,o=this.templateManager.getKeyboard(s,e?.baseId,this.userLanguage,"bottom",e?.data),a=t(n,o);return a.resized(),a}getSeperatorTag(t="space"){return t=="space"?" ":":"}havePayloads(t="",e){return t.includes(this.getSeperatorTag(e))}addPayloads(t="",e,s){let n=this.getSeperatorTag(e),o="";for(let a=0;a<s.length;a++){let i=s[a];i!=null&&i!==""&&(o+=n+i)}return t+o}getPayloads(t="",e,s=1){if(!t)return[];let n=this.getSeperatorTag(e);return t.split(n).slice(s)}getIntent(t="",e,s=1){if(!t)return"";let n=this.getSeperatorTag(e),o=t.split(n);return s==1?o[0]:o.slice(0,s).join(n)}validateSessionCallback(t,e){return(t??this.session.method)===this.methodSessionCallback(e)}validateSessionCallbackPayload(t,e){return(t??this.session.method)===this.methodSessionCallbackPayload(e)}validateSessionText(t,e){return(t??this.session.method)===this.methodSessionText(e)}validateSessionTextPayload(t,e){return(t??this.session.method)===this.methodSessionTextPayload(e)}validateSessionTextCommand(t,e){return(t??this.session.method)===this.methodSessionTextCommand(e)}validateSessionTextCommandPayload(t,e){return(t??this.session.method)===this.methodSessionTextCommandPayload(e)}validateSessionTextFree(t,e){return(t??this.session.method)===this.methodSessionTextFree(e)}validateSessionPhotoCaption(t,e){return(t??this.session.method)===this.methodSessionPhotoCaption(e)}validateSessionPhotoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(t,e){return(t??this.session.method)===this.methodSessionPhotoFree(e)}validateSessionVideoCaption(t,e){return(t??this.session.method)===this.methodSessionVideoCaption(e)}validateSessionVideoCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVideoCaptionCommandPayload(e)}validateSessionVideoFree(t,e){return(t??this.session.method)===this.methodSessionVideoFree(e)}validateSessionAudioCaption(t,e){return(t??this.session.method)===this.methodSessionAudioCaption(e)}validateSessionAudioCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAudioCaptionCommandPayload(e)}validateSessionAudioFree(t,e){return(t??this.session.method)===this.methodSessionAudioFree(e)}validateSessionDocumentCaption(t,e){return(t??this.session.method)===this.methodSessionDocumentCaption(e)}validateSessionDocumentCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(t,e){return(t??this.session.method)===this.methodSessionDocumentFree(e)}validateSessionAnimationCaption(t,e){return(t??this.session.method)===this.methodSessionAnimationCaption(e)}validateSessionAnimationCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(t,e){return(t??this.session.method)===this.methodSessionAnimationFree(e)}validateSessionVoiceCaption(t,e){return(t??this.session.method)===this.methodSessionVoiceCaption(e)}validateSessionVoiceCaptionPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(t,e){return(t??this.session.method)===this.methodSessionVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(t,e){return(t??this.session.method)===this.methodSessionVoiceFree(e)}validateSessionVideoNoteFree(t,e){return(t??this.session.method)===this.methodSessionVideoNoteFree(e)}validateSessionStickerFree(t,e){return(t??this.session.method)===this.methodSessionStickerFree(e)}validateSessionLocationFree(t,e){return(t??this.session.method)===this.methodSessionLocationFree(e)}validateSessionContactFree(t,e){return(t??this.session.method)===this.methodSessionContactFree(e)}sessionCallback(t,e){return this.sessionSet(this.methodSessionCallback(e),t)}sessionCallbackPayload(t,e){return this.sessionSet(this.methodSessionCallbackPayload(e),t)}sessionText(t,e){return this.sessionSet(this.methodSessionText(e),t)}sessionTextPayload(t,e){return this.sessionSet(this.methodSessionTextPayload(e),t)}sessionTextCommand(t,e){return this.sessionSet(this.methodSessionTextCommand(e),t)}sessionTextCommandPayload(t,e){return this.sessionSet(this.methodSessionTextCommandPayload(e),t)}sessionTextFree(t,e){return this.sessionSet(this.methodSessionTextFree(e),t)}sessionPhotoCaption(t,e){return this.sessionSet(this.methodSessionPhotoCaption(e),t)}sessionPhotoCaptionPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionPayload(e),t)}sessionPhotoCaptionCommand(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommand(e),t)}sessionPhotoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionPhotoCaptionCommandPayload(e),t)}sessionPhotoFree(t,e){return this.sessionSet(this.methodSessionPhotoFree(e),t)}sessionVideoCaption(t,e){return this.sessionSet(this.methodSessionVideoCaption(e),t)}sessionVideoCaptionPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionPayload(e),t)}sessionVideoCaptionCommand(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommand(e),t)}sessionVideoCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVideoCaptionCommandPayload(e),t)}sessionVideoFree(t,e){return this.sessionSet(this.methodSessionVideoFree(e),t)}sessionAudioCaption(t,e){return this.sessionSet(this.methodSessionAudioCaption(e),t)}sessionAudioCaptionPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionPayload(e),t)}sessionAudioCaptionCommand(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommand(e),t)}sessionAudioCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAudioCaptionCommandPayload(e),t)}sessionAudioFree(t,e){return this.sessionSet(this.methodSessionAudioFree(e),t)}sessionDocumentCaption(t,e){return this.sessionSet(this.methodSessionDocumentCaption(e),t)}sessionDocumentCaptionPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionPayload(e),t)}sessionDocumentCaptionCommand(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommand(e),t)}sessionDocumentCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionDocumentCaptionCommandPayload(e),t)}sessionDocumentFree(t,e){return this.sessionSet(this.methodSessionDocumentFree(e),t)}sessionAnimationCaption(t,e){return this.sessionSet(this.methodSessionAnimationCaption(e),t)}sessionAnimationCaptionPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionPayload(e),t)}sessionAnimationCaptionCommand(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommand(e),t)}sessionAnimationCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionAnimationCaptionCommandPayload(e),t)}sessionAnimationFree(t,e){return this.sessionSet(this.methodSessionAnimationFree(e),t)}sessionVoiceCaption(t,e){return this.sessionSet(this.methodSessionVoiceCaption(e),t)}sessionVoiceCaptionPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionPayload(e),t)}sessionVoiceCaptionCommand(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommand(e),t)}sessionVoiceCaptionCommandPayload(t,e){return this.sessionSet(this.methodSessionVoiceCaptionCommandPayload(e),t)}sessionVoiceFree(t,e){return this.sessionSet(this.methodSessionVoiceFree(e),t)}sessionVideoNoteFree(t,e){return this.sessionSet(this.methodSessionVideoNoteFree(e),t)}sessionStickerFree(t,e){return this.sessionSet(this.methodSessionStickerFree(e),t)}sessionLocationFree(t,e){return this.sessionSet(this.methodSessionLocationFree(e),t)}sessionContactFree(t,e){return this.sessionSet(this.methodSessionContactFree(e),t)}sessionToCallback(t,e){return this.sessionCallback({...this.session.params,...t},e)}sessionToCallbackPayload(t,e){return this.sessionCallbackPayload({...this.session.params,...t},e)}sessionToText(t,e){return this.sessionText({...this.session.params,...t},e)}sessionToTextPayload(t,e){return this.sessionTextPayload({...this.session.params,...t},e)}sessionToTextCommand(t,e){return this.sessionTextCommand({...this.session.params,...t},e)}sessionToTextCommandPayload(t,e){return this.sessionTextCommandPayload({...this.session.params,...t},e)}sessionToTextFree(t,e){return this.sessionTextFree({...this.session.params,...t},e)}sessionToPhotoCaption(t,e){return this.sessionPhotoCaption({...this.session.params,...t},e)}sessionToPhotoCaptionPayload(t,e){return this.sessionPhotoCaptionPayload({...this.session.params,...t},e)}sessionToPhotoCaptionCommand(t,e){return this.sessionPhotoCaptionCommand({...this.session.params,...t},e)}sessionToPhotoCaptionCommandPayload(t,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...t},e)}sessionToPhotoFree(t,e){return this.sessionPhotoFree({...this.session.params,...t},e)}sessionToVideoCaption(t,e){return this.sessionVideoCaption({...this.session.params,...t},e)}sessionToVideoCaptionPayload(t,e){return this.sessionVideoCaptionPayload({...this.session.params,...t},e)}sessionToVideoCaptionCommand(t,e){return this.sessionVideoCaptionCommand({...this.session.params,...t},e)}sessionToVideoCaptionCommandPayload(t,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...t},e)}sessionToVideoFree(t,e){return this.sessionVideoFree({...this.session.params,...t},e)}sessionToAudioCaption(t,e){return this.sessionAudioCaption({...this.session.params,...t},e)}sessionToAudioCaptionPayload(t,e){return this.sessionAudioCaptionPayload({...this.session.params,...t},e)}sessionToAudioCaptionCommand(t,e){return this.sessionAudioCaptionCommand({...this.session.params,...t},e)}sessionToAudioCaptionCommandPayload(t,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...t},e)}sessionToAudioFree(t,e){return this.sessionAudioFree({...this.session.params,...t},e)}sessionToDocumentCaption(t,e){return this.sessionDocumentCaption({...this.session.params,...t},e)}sessionToDocumentCaptionPayload(t,e){return this.sessionDocumentCaptionPayload({...this.session.params,...t},e)}sessionToDocumentCaptionCommand(t,e){return this.sessionDocumentCaptionCommand({...this.session.params,...t},e)}sessionToDocumentCaptionCommandPayload(t,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...t},e)}sessionToDocumentFree(t,e){return this.sessionDocumentFree({...this.session.params,...t},e)}sessionToAnimationCaption(t,e){return this.sessionAnimationCaption({...this.session.params,...t},e)}sessionToAnimationCaptionPayload(t,e){return this.sessionAnimationCaptionPayload({...this.session.params,...t},e)}sessionToAnimationCaptionCommand(t,e){return this.sessionAnimationCaptionCommand({...this.session.params,...t},e)}sessionToAnimationCaptionCommandPayload(t,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...t},e)}sessionToAnimationFree(t,e){return this.sessionAnimationFree({...this.session.params,...t},e)}sessionToVoiceCaption(t,e){return this.sessionVoiceCaption({...this.session.params,...t},e)}sessionToVoiceCaptionPayload(t,e){return this.sessionVoiceCaptionPayload({...this.session.params,...t},e)}sessionToVoiceCaptionCommand(t,e){return this.sessionVoiceCaptionCommand({...this.session.params,...t},e)}sessionToVoiceCaptionCommandPayload(t,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...t},e)}sessionToVoiceFree(t,e){return this.sessionVoiceFree({...this.session.params,...t},e)}sessionToVideoNoteFree(t,e){return this.sessionVideoNoteFree({...this.session.params,...t},e)}sessionToStickerFree(t,e){return this.sessionStickerFree({...this.session.params,...t},e)}sessionToLocationFree(t,e){return this.sessionLocationFree({...this.session.params,...t},e)}sessionToContactFree(t,e){return this.sessionContactFree({...this.session.params,...t},e)}methodSession(t,e){return`${t}-${e||this.data.name}`}methodSessionCallback(t){return this.methodSession("1",t)}methodSessionCallbackPayload(t){return this.methodSession("2",t)}methodSessionText(t){return this.methodSession("3",t)}methodSessionTextPayload(t){return this.methodSession("4",t)}methodSessionTextCommand(t){return this.methodSession("5",t)}methodSessionTextCommandPayload(t){return this.methodSession("6",t)}methodSessionTextFree(t){return this.methodSession("7",t)}methodSessionPhotoCaption(t){return this.methodSession("8",t)}methodSessionPhotoCaptionPayload(t){return this.methodSession("9",t)}methodSessionPhotoCaptionCommand(t){return this.methodSession("10",t)}methodSessionPhotoCaptionCommandPayload(t){return this.methodSession("11",t)}methodSessionPhotoFree(t){return this.methodSession("12",t)}methodSessionVideoCaption(t){return this.methodSession("13",t)}methodSessionVideoCaptionPayload(t){return this.methodSession("14",t)}methodSessionVideoCaptionCommand(t){return this.methodSession("15",t)}methodSessionVideoCaptionCommandPayload(t){return this.methodSession("16",t)}methodSessionVideoFree(t){return this.methodSession("17",t)}methodSessionAudioCaption(t){return this.methodSession("18",t)}methodSessionAudioCaptionPayload(t){return this.methodSession("19",t)}methodSessionAudioCaptionCommand(t){return this.methodSession("20",t)}methodSessionAudioCaptionCommandPayload(t){return this.methodSession("21",t)}methodSessionAudioFree(t){return this.methodSession("22",t)}methodSessionDocumentCaption(t){return this.methodSession("23",t)}methodSessionDocumentCaptionPayload(t){return this.methodSession("24",t)}methodSessionDocumentCaptionCommand(t){return this.methodSession("25",t)}methodSessionDocumentCaptionCommandPayload(t){return this.methodSession("26",t)}methodSessionDocumentFree(t){return this.methodSession("27",t)}methodSessionAnimationCaption(t){return this.methodSession("28",t)}methodSessionAnimationCaptionPayload(t){return this.methodSession("29",t)}methodSessionAnimationCaptionCommand(t){return this.methodSession("30",t)}methodSessionAnimationCaptionCommandPayload(t){return this.methodSession("31",t)}methodSessionAnimationFree(t){return this.methodSession("32",t)}methodSessionVoiceCaption(t){return this.methodSession("33",t)}methodSessionVoiceCaptionPayload(t){return this.methodSession("34",t)}methodSessionVoiceCaptionCommand(t){return this.methodSession("35",t)}methodSessionVoiceCaptionCommandPayload(t){return this.methodSession("36",t)}methodSessionVoiceFree(t){return this.methodSession("37",t)}methodSessionVideoNoteFree(t){return this.methodSession("38",t)}methodSessionStickerFree(t){return this.methodSession("39",t)}methodSessionLocationFree(t){return this.methodSession("40",t)}methodSessionContactFree(t){return this.methodSession("41",t)}};import{join as L}from"path";import{existsSync as Q,readdirSync as U}from"fs";import{createRequire as gt}from"module";var b=class{static{p(this,"PageManager")}static _getFile(t,e,s=0){let o=Object.values(t)[s];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return o}static getFilePath(){return L(process.cwd(),"src","pages")}static getFileSync(t,e=0){t||(t=this.getFilePath());let n=gt(t)(t);return this._getFile(n,t,e)}static async getFile(t,e=0){t||(t=this.getFilePath());let s=await import(`${t}?t=${Date.now()}`);return this._getFile(s,t,e)}static getFileManySync(t,e=0){if(t||(t=this.getFilePath()),!Q(t))throw new Error(`Directory ${t} is not found, please make it manually`);return U(t).map(n=>{let o=L(t,n);return{path:o,page:this.getFileSync(o,e)}})}static clearCacheRequire(t){if(t||(t=this.getFilePath()),!Q(t))throw new Error(`Directory ${t} is not found, please make it manually`);return U(t).forEach(s=>{let n=L(t,s);delete K.cache[K.resolve(n)]}),!0}};import{readFileSync as Ct}from"fs";import{fileURLToPath as St}from"url";import{dirname as bt,join as Y,parse as Pt}from"path";import{basename as N,join as x,extname as H}from"path";import{readdirSync as ut,readFileSync as D,existsSync as _,statSync as R,writeFileSync as yt}from"fs";import{watch as ft}from"chokidar";var w=class{static{p(this,"TemplateEngine")}static _escape(t){return t.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(t){return t.replace(/\{\{(\w+)\}\}/g,(e,s)=>`\${(data && data["${s}"]) ?? ""}`)}static _processBaseBlocks(t){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,s={};for(let n of t.matchAll(e)){let o=n[2]??"default",i=(n[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[o]=i}return s}static _processScriptBlocks(t){return t.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,s)=>{let n=s.trim();return n?`\${(() => { if (!data) return ''; try { with(data) { ${n} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(t){return t.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(t){return t.replace(/<div>([\s\S]*?)<\/div>/gi,(e,s)=>s.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processSwitchBlocks(t){let e=/<switch\b(?:\s+value="([^"]+)")?>([\s\S]*?)<\/switch>/gi;return t.replace(e,(s,n,o)=>{if(!n)return"";let a="",i=/<case\b(?:\s+is="([^"]+)")?>([\s\S]*?)<\/case>/gi,r=/<default>([\s\S]*?)<\/default>/gi,c;for(;(c=i.exec(o))!==null;){let d=(c[1]||"").split(",").map(m=>m.trim()),l=(c[2]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");d.forEach(m=>{a+=`case "${m}": `}),a+=`return \`${l}\`; `}let h=r.exec(o);if(h){let d=(h[1]||"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim().replace(/`/g,"\\`");a+=`default: return \`${d}\`; `}else a+="default: return ''; ";return`\${(() => { switch((data && data["${n}"])) { ${a} } })()}`})}static _processExec(t){return t.replace(/{~\s*([\s\S]*?)\s*~}/g,(e,s)=>`\${(() => { try { return ${s} } catch(e) { try { with(data || {}) { return ${s} } } catch(ee) { return '' } } })()}`)}static _processMapBlocks(t){let e=/<map(?:\s+([^>]*))?>([\s\S]*?)<\/map>/gi;return t.replace(e,(s,n,o)=>{let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let l of n.matchAll(i))a[l[1]]=l[2];let r=a.src;if(!r)return"";let c=a.join??"\\n",h=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").replace(/`/g,"\\`");h=h.replace(/\{\{([\w.]+)\}\}/g,(l,m)=>m==="e"||m.startsWith("e.")?`\${${m}}`:m==="i"?"${i}":l);let d=c.replace(/"/g,'\\"');return`\${(data && data["${r}"] || []).map((e, i) => \`${h}\`).join("${d}")}`})}static _processMediaBlocks(t){let e=/<media(?:\s+([^>]*))?>([\s\S]*?)<\/media>/gi,s={};for(let n of t.matchAll(e)){let o=n[1],a=n[2],i={},r=/(\w+)="([^"]*)"/g;if(o)for(let m of o.matchAll(r))i[m[1]]=m[2];let c=i.lang||"default",h=i.type,d=a.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),l={type:h};i.src&&(l.src=i.src),d&&h!=="video_note"&&h!=="sticker"&&(l.caption=d),h==="location"&&(i.latitude&&(l.latitude=i.latitude),i.longitude&&(l.longitude=i.longitude),d&&(l.caption=d)),h==="contact"&&(i.phone&&(l.phone=i.phone),i.first_name&&(l.first_name=i.first_name),i.last_name&&(l.last_name=i.last_name),i.vcard&&(l.vcard=i.vcard),d&&(l.caption=d)),s[c]=l}return s}static _processMessageBlocks(t){let e=/<message(?:\s+([^>]*))?>([\s\S]*?)<\/message>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let h of n.matchAll(i))a[h[1]]=h[2];let r=a.lang||"default",c=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]=c}return s}static _processDescriptionBlocks(t){let e=/<description(?:\s+([^>]*))?>([\s\S]*?)<\/description>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.scope||"default",h=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();s[r]||(s[r]={}),s[r][c]=h}return s}static _processKeyboardBlocks(t){let e=/<keyboard(?:\s+([^>]*))?>([\s\S]*?)<\/keyboard>/gi,s={};for(let[,n,o]of t.matchAll(e)){let a={},i=/(\w+)="([^"]*)"/g;if(n)for(let d of n.matchAll(i))a[d[1]]=d[2];let r=a.lang||"default",c=a.type==="bottom"?"bottom":"inline",h=o.trim();s[r]||(s[r]={}),s[r][c]=h}return s}static _compileToFunction(t,e){let s;e?s=t.map(a=>`\`${a}\``).join(","):s=`\`${t}\``;let n=s;if(n=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(n))),e){let o=`return [${n}]`;return new Function("data",o)}else{let o=`return ${n}`;return new Function("data",o)}}static compileMedia(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMediaBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let h={};for(let[d,l]of Object.entries(c)){if(d==="type"||typeof l!="string")continue;let m=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(l)))));h[d]=this._compileToFunction(m,!1)}n[o][r]=d=>{let l={...c};for(let[m,y]of Object.entries(h))l[m]=y(d);return l}}}return n}static compileMessages(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processMessageBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){let h=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(c)))));n[o][r]=this._compileToFunction(h,!1)}}return n}static compileDescription(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processDescriptionBlocks(a);n[o]={};for(let[r,c]of Object.entries(i))for(let[h,d]of Object.entries(c)){n[o][h]||(n[o][h]={});let l=this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(d)))));n[o][h][r]=this._compileToFunction(l,!1)}}return n}static compileKeyboards(t,e){let s=e||this._processBaseBlocks(t),n={};for(let[o,a]of Object.entries(s)){let i=this._processKeyboardBlocks(a);n[o]={};for(let[r,c]of Object.entries(i)){n[o][r]={};for(let[h,d]of Object.entries(c)){let m=d.split(/(?<!\\),\s*/).map(y=>y.replace(/\\,/g,",").trim()).map(y=>this._processVariables(this._processExec(this._processSwitchBlocks(this._processMapBlocks(this._processScriptBlocks(y))))));n[o][r][h]=this._compileToFunction(m,!0)}}}return n}static _extractBlock(t,e,s="default",n="all",o){let a=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,i=t,r=!1;for(let c of t.matchAll(a))if((c[2]??"default")===s){i=c[3]??"",r=!0;break}if(!r){let c=/<base\b/.test(t);if(!(s==="default"&&!c))return""}if(e){if(e==="all")return i;let c=Array.isArray(e)?e:[e],h=[];for(let l of c){let m=new RegExp(`([ \\t]*)<${l}(?:\\s+([^>]*))?>([\\s\\S]*?)<\\/${l}>`,"gi");for(let y of i.matchAll(m)){let f=y[2];if(o){let g=/lang="([^"]*)"/i,P=f?.match(g);if(((P?P[1]:void 0)||"default")!==o)continue}h.push({start:y.index,content:y[0],innerContent:y[3]??""})}}h.sort((l,m)=>l.start-m.start);let d=p(l=>{let m=l.split(`
2
+ `);if(m.length<=1)return l.trim();let y=m.filter(g=>g.trim().length>0);if(y.length===0)return"";let f=y.reduce((g,P)=>{let k=P.match(/^([ \t]*)/),T=k?k[1].length:0;return T<g?T:g},1/0);return m.map(g=>g.length>=f?g.slice(f):g.trimStart()).join(`
3
+ `).trim()},"processResult");return n==="all"?h.map(m=>d(m.content)).join(`
4
+ `):h.map(m=>d(m.innerContent)).join(`
5
+ `)}return i}static _processImportBlocks(t){let e=/([ \t]*)<import(?:\s+([^>]*))?\/?>/gi,s=[];return{processed:t.replace(e,(o,a,i)=>{let r={},c=/(\w+)="([^"]*)"/g;if(i)for(let m of i.matchAll(c))r[m[1]]=m[2];let h=r.src;if(!h)return"";let d;r.block&&(r.block==="all"?d="all":r.block.includes(",")?d=r.block.split(",").map(m=>m.trim()).filter(m=>m):d=r.block);let l={src:h,blocks:d,base:r.base||"default",lang:r.lang,section:r.section||"all",indent:a||""};return s.push(l),`${a}__IMPORT_${s.length-1}__`}),imports:s}}static processImportBlocks(t,e,s=0,n){if(s>10)return"";let{processed:o,imports:a}=this._processImportBlocks(t),i=o;for(let r=0;r<a.length;r++){let c=a[r],h=`${c.src}|${c.base}|${c.lang||""}|${c.section}|${Array.isArray(c.blocks)?c.blocks.join(","):c.blocks||""}`,d;if(n&&n.has(h))d=n.get(h);else{let m=e(c.src);d=m?this._extractBlock(m,c.blocks,c.base,c.section,c.lang):"",d&&d.includes("<import")&&(d=this.processImportBlocks(d,e,s+1,n)),n&&n.set(h,d)}let l=d.split(`
6
6
  `).map((m,y)=>y===0?m:c.indent+m).join(`
7
- `);i=i.replace(`__IMPORT_${r}__`,h)}return i}};var O=class{static{p(this,"TemplateManager")}_map=new Map;_engine=w;_watcher=[];_pageManager=b;_supportedExtensions=new Set([".html",".ts",".js"]);_path;_isWatchEnabled;constructor(t){let{path:e,enableWatch:s=!1}=t;this._path=e,this._isWatchEnabled=s,this._validatePath(),this._initializeWatcher(t.watchOptions),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let t=0;t<this._path.length;t++){let e=this._path[t];if(!_(e))throw new Error(`Template base path is not exists: ${e}`);if(!F(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(t){throw new Error(`Failed to validate Template base path: ${String(t)}`)}}_initializeWatcher(t){if(this._isWatchEnabled){if(this._watcher.length>0)throw new Error("Watcher already enabled");for(let e=0;e<this._path.length;e++){let s=this._path[e],n=ft(s,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},...t});this._watcher[e]=n,n.on("change",this._handleFileChange.bind(this)),n.on("add",this._handleFileAdd.bind(this)),n.on("unlink",this._handleFileDelete.bind(this)),n.on("error",this._handleWatchError.bind(this))}}}_handleFileChange(t){let e=N(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileAdd(t){let e=N(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileDelete(t){let e=N(t),s=this._getKey(e);this._map.has(s)&&this._map.delete(s)}_handleWatchError(t){}_loadAllFiles(){let t=new Map,e=[];for(let n=0;n<this._path.length;n++){let o=this._path[n],i=ut(o,"utf8").filter(r=>this._isValidFile(r));for(let r of i){let c=x(o,r),l=this._getExtension(r),d=this._getKey(r);if(l===".html")t.set(d,D(c,"utf8"));else if(l===".ts"||l===".js"){let h=b.getFileSync(c);h?.template!==void 0&&(t.set(d,h.template),e.push(h))}}}let s=new Map;for(let[n,o]of t.entries())this._compile(n,o,void 0,s,t);t.clear(),s.clear();for(let n of e)n.template=void 0}_loadFile(t){for(let e=0;e<this._path.length;e++){let s=this._path[e],n=x(s,t),o=this._getExtension(t),a=this._getKey(t);if(o==".html"){let i=D(n,"utf8");this._compile(a,i)}else if(o==".ts"||o==".js"){let i=b.getFileSync(n);i?.template!==void 0&&(this._compile(a,i.template),i.template=void 0)}else throw new Error(`File ${t} is not support`)}}_getExtension(t){return H(t).toLowerCase()}_readTemplateFile(t){for(let e of this._path){let s=H(t).toLowerCase();if(s){let i=x(e,t);if(_(i)&&F(i).isFile()){if(s===".html")return D(i,"utf8");if(s===".ts"||s===".js")try{return b.getFileSync(i)?.template??null}catch{return null}}continue}let n=x(e,`${t}.ts`),o=x(e,`${t}.js`);if(_(n)&&F(n).isFile())try{return b.getFileSync(n)?.template??null}catch{}else if(_(o)&&F(o).isFile())try{return b.getFileSync(n)?.template??null}catch{}let a=x(e,`${t}.html`);if(_(a)&&F(a).isFile())return D(a,"utf8")}return null}_isValidFile(t){return this._supportedExtensions.has(this._getExtension(t))}_getKey(t){return t.replace(/\.[^/.]+$/,"")}_compile(t,e,s,n,o){let a=this._map.get(t),i=a||{},r=!1,c=w.processImportBlocks(e,d=>o&&o.has(d)?o.get(d):this._readTemplateFile(d),0,n),l=w._processBaseBlocks(c);(s===void 0||s?.media===!1||a?.media===void 0)&&(i.media=w.compileMedia(c,l),r=!0),(s===void 0||s?.message===!1||a?.message===void 0)&&(i.message=w.compileMessages(c,l),r=!0),(s===void 0||s?.keyboard===!1||a?.keyboard===void 0)&&(i.keyboard=w.compileKeyboards(c,l),r=!0),(s===void 0||s?.description===!1||a?.description===void 0)&&(i.description=w.compileDescription(c,l),r=!0),r&&this._map.set(t,i)}getMedia(t,e="default",s="default",n){let a=this._map.get(t)?.media?.[e],i=a?.[s]||a?.default;try{if(!i)throw new Error("Media function not found, please check your template");return i(n)}catch{return{}}}getMessage(t,e="default",s="default",n){try{let a=this._map.get(t)?.message?.[e],i=a?.[s]||a?.default;if(!i)throw"";return i(n)}catch{return""}}getDescription(t,e="default",s="default",n="default",o){try{let i=this._map.get(t)?.description?.[e]?.[n],r=i?.[s]||i?.default;if(!r)throw"";return r(o)}catch{return""}}getDescriptionLanguage(t,e="default",s="default"){try{let o=this._map.get(t)?.description?.[e]?.[s];return o?Object.keys(o):[]}catch{return[]}}getDescriptionScopes(t,e="default"){try{let n=this._map.get(t)?.description?.[e];return n?Object.keys(n):[]}catch{return[]}}getKeyboard(t,e="default",s="default",n="inline",o){try{let i=this._map.get(t)?.keyboard?.[e],r=i?.[s]?.[n]||i?.default?.[n];if(!r)throw[];return r(o)}catch{return[]}}async write(t,e){if(this._getExtension(t)!=".html")return null;for(let s=0;s<this._path.length;s++){let n=x(this._path[s],t);if(_(n))return yt(n,e,"utf8"),this._loadFile(t),!0}return null}has(t){return this._map.has(t)}async destroy(){if(this._watcher)for(let t of this._watcher)await t.close();this._map.clear()}};import{Bot as kt,webhookCallback as z}from"grammy";var Tt=(()=>{try{return C}catch{return Pt(import.meta.url)}})(),wt=Ct(Tt),vt=JSON.parse(bt(Y(wt,"../../package.json"),"utf-8")).version,X=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;optionsPage={shortCallbackData:!1};log;bot;handlerBotUpdate;constructor(t){if(!t?.token||t?.token?.length==0)throw new Error("Token is not valid or empty");if(typeof t.optionsPage?.shortCallbackData=="boolean"&&(this.optionsPage.shortCallbackData=t.optionsPage.shortCallbackData),this.log=t.log===!0?G:t.log?t.log:void 0,this.log?.info?.(`Gramstax v${vt}`),this.cacheSession=t.cacheSession||new R("memory"),this.cacheKeyboard=t.cacheKeyboard||new Map,this.templateManager=t.templateManager||new O({path:[Y(process.cwd(),"src","pages")]}),this.bot=this.createBot(t.token),this.bot.catch(this.onCatch),this.registerOnCallbackQueryData(),this.registerOnMessageText(),this.registerOnMessagePhoto(),this.registerOnMessageVideo(),this.registerOnMessageAudio(),this.registerOnMessageDocument(),this.registerOnMessageAnimation(),this.registerOnMessageVoice(),this.registerOnMessageVideoNote(),this.registerOnMessageSticker(),this.registerOnMessageLocation(),this.registerOnMessageContact(),this.handlerBotUpdate=this.bot.handleUpdate,this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),this.hookBeforeStart(),t.deploy.startsWith("polling"))this.runPolling();else if(t.deploy.startsWith("webhook:"))this.runWebhook(t.deploy.split("webhook:")[1]);else if(t.deploy.startsWith("serverless:"))this.runServerless(t.deploy.split("serverless:")[1]);else if(!t.deploy.startsWith("test"))throw new Error("Params deploy is not valid, expected: polling, webhook:<public-url>, serverless:<your-adapter>")}onCatch(t){if(this.log?.errorMake)this.log?.errorMake(t,"Bot","catch");else{let e=JSON.stringify(t,null,2);this.log?.error?.(`[Bot.catch]: ${e}`)}}hookBeforeStart(){}hookAfterStart(){}async onStart(t,e,s){await this.executeSyncBlocksDescription(this.pages);let{username:n}=t;this.log?.success?.(`Telegram bot polling started: ${n} ${e=="webhook"||e=="serverless"?`(${s})`:""}`),this.hookAfterStart()}createBot(t){return new kt(t)}createCtx(t){return new A({ct:t,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{isAnswer:!1,session:{},data:{}}})}runPolling(){this.bot.start({onStart:p(t=>{this.onStart(t,"polling",null)},"onStart")})}async runWebhook(t){let{serve:e}=await import("bun"),s=z(this.bot,"bun");this.handlerBotUpdate=s;let n=new URL(t).pathname;e({fetch(i){let{pathname:r}=new URL(i.url);if(i.method=="POST"&&r==n)return s(i);if(i.method=="GET"&&r=="/"){let c=new Date().toISOString();return new Response(JSON.stringify({status:"OK",timestamp:c}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}}),(await this.bot.api.getWebhookInfo()).url!=t&&await this.bot.api.setWebhook(t);let a=await this.bot.api.getMe();await this.onStart(a,"webhook",t)}async runServerless(t){this.handlerBotUpdate=z(this.bot,t);let e=await this.bot.api.getMe();await this.onStart(e,"serverless",t)}pageBuildData(t,e){t?.data===void 0&&(t.data=t.buildData());let s=St(e).name;t.data.name=s,t.data.intentText||(t.data.intentText=s),t.data.intentTextCommand||(t.data.intentTextCommand=s),t.data.intentCallback||(t.data.intentCallback=s)}pageSorts(t,e,s){let n=t.data.name,o=t.prototype,a="Payload",i="Command",r="Caption",c="Free",l=e.routeDynamic,d=e.routeDynamicSpesific,h=p(f=>f.charAt(0).toUpperCase()+f.slice(1),"upFirst"),m=p(f=>f.replace(a,"").replace(i,"").replace(r,"").replace(c,""),"getPureRouteName"),y=p((f,g)=>o[`methodSession${h(f)}`]?.(g),"methodSession");e.all[n]=t;for(let f=0;f<e.lenListRouteStaticSession;f++){let g=e.listRouteStaticSession[f];if(typeof o[g]!="function")continue;let P=e.routeStatic[g],k=e.routeStaticIntent[g],T=e.routeStaticSession[g],$={name:n,routeName:g},j=P||k;if(j!==void 0){let it=g.includes(i),ot=g.includes("callback"),at=g.startsWith("text"),I;if(it){let M=t.data.intentTextCommand;I=M?`/${M}`:void 0}else if(ot){let M=t.data.intentCallback;this.optionsPage.shortCallbackData===!0&&(M=String(s),t.data.intentCallback=M),I=M}else at?I=t.data.intentText:I=t.data.name;I&&(j[I]=$)}T!==void 0&&(T[y(g,n)]=$),g.toLowerCase().endsWith("free")&&d[m(g)].push($)}o.free&&l.push(n)}async executeSyncBlocksDescription(t){let e=new Map,s=t.routeStatic.textCommand;for(let[,n]of Object.entries(s)){let o=n.name,a=this.templateManager.getDescriptionScopes(o);for(let i of a){e.has(i)||e.set(i,new Set);let r=this.templateManager.getDescriptionLanguage(o,"default",i);for(let c of r)e.get(i).add(c)}}for(let[n,o]of e)for(let a of o){let i=[];for(let[,l]of Object.entries(s)){let d=l.name,h=this.templateManager.getDescription(d,"default",a,n);h&&i.push({command:d,description:h})}if(i.length===0)continue;let r={type:n},c=a==="default"?void 0:a;try{let l=await this.bot.api.getMyCommands({scope:r,language_code:c}),d=JSON.stringify(l.map(m=>({command:m.command,description:m.description})).sort((m,y)=>m.command.localeCompare(y.command))),h=JSON.stringify(i.sort((m,y)=>m.command.localeCompare(y.command)));d!==h&&(await this.bot.api.setMyCommands(i,{scope:r,language_code:c}),this.log?.info?.(`Synced descriptions for scope: ${n},${c?` lang: ${c},`:""} total (${i.length})`))}catch(l){this.log?.error?.(`Failed to sync descriptions for scope: ${n},${c?` lang: ${c},`:""} error: ${String(l)}`)}}}pageLoads(){this.log?.info?.("Load pages..");let t=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand"],e=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload"],s=[...t,...e,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],n=p((i,r)=>Object.fromEntries(i.map(c=>[c,r()])),"makeObject"),o=p(()=>[],"initDynamicSpesific"),a={all:{},routeDynamic:[],routeDynamicSpesific:{text:o(),photo:o(),video:o(),audio:o(),document:o(),animation:o(),voice:o(),videoNote:o(),sticker:o(),location:o(),contact:o()},routeStatic:n(t,()=>({})),routeStaticIntent:n(e,()=>({})),routeStaticSession:n(s,()=>({})),listRouteStatic:t,listRouteStaticIntent:e,listRouteStaticSession:s,lenListRouteStatic:t.length,lenListRouteStaticIntent:e.length,lenListRouteStaticSession:s.length};return b.getFileManySync(void 0).forEach(({path:i,page:r},c)=>{this.pageBuildData(r,i),this.pageSorts(r,a,c),r.template=void 0}),this.log?.info?.(`Finish load pages with total (${Object.keys(a.all).length})`),a}async pageRoutes(t,e){let s,n;if(s===void 0){let a=await t.sessionGet();if(a){let i=a.method,r=this.pages.routeStaticSession,c=t.callbackData,l=t.msgText,d=t.msgCaption,h=c||l||d,m=e==="callback",y=m?"colon":"space",f=h&&t.havePayloads(h,y)?t.getIntent(h,y,1):void 0,g=!m&&h?t.getIntent(h,"space",2):void 0;for(let P=0;P<this.pages.lenListRouteStaticSession;P++){let k=this.pages.listRouteStaticSession[P];if(k.startsWith(e)){if(h){if(this.pages.routeStatic[k]?.[h])continue;let T=this.pages.routeStaticIntent[k];if(T&&(f&&T[f]||g&&T[g]))continue}n=r[k][i]}if(n)break}n!==void 0&&(s=this.pages.all[n.name])}}if(s===void 0){let a=t.callbackData,i=t.msgText,r=t.msgCaption,c=this.pages.routeStatic;for(let l=0;l<this.pages.lenListRouteStatic;l++){let d=this.pages.listRouteStatic[l];if(d.startsWith(e)&&(n=c[d][a||i||r]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s===void 0){let a=this.pages.routeStaticIntent,i=e==="callback",r=i?"colon":"space",c=i?t.callbackData:t.msgText||t.msgCaption,l=t.havePayloads(c,r);if(c&&l)for(let d=0;d<this.pages.lenListRouteStaticIntent;d++){let h=this.pages.listRouteStaticIntent[d];if(!h.startsWith(e))continue;let m=a[h];if(n=m[t.getIntent(c,r,1)],!n&&!i&&(n=m[t.getIntent(c,"space",2)]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s!==void 0&&n!==void 0){if(!s.prototype[n.routeName])return;let i=await new s(t)[n.routeName]?.();return t.temp.isAnswer===!0?i:null}let o=this.pages.routeDynamicSpesific[e]||[];for(let a=0;a<o.length;a++){let i=o[a];if(i===void 0)continue;let r=this.pages.all[i.name];r!==void 0&&typeof r.prototype[i.routeName]=="function"&&await new r(t)[i.routeName]()}for(let a=0;a<this.pages.routeDynamic.length;a++){let i=this.pages.routeDynamic[a];if(i===void 0)continue;let r=this.pages.all[i];r!==void 0&&typeof r.prototype.free=="function"&&await new r(t).free()}if(t.temp.isAnswer===!1)return null}async hookBeforeRoute(t,e){return!!(t||e)}async hookErrorPage(t,e,s,n){}async hookErrorInputNotFoundPage(t){}async onMessage(t,e){let s=this.createCtx(t);try{if(await this.hookBeforeRoute(s,e)===!1)return;await this.pageRoutes(s,e)===null&&await this.hookErrorInputNotFoundPage(s)}catch(n){await this.hookErrorPage(s,e,n,!1)}}async onCallbackQueryData(t){let e=this.createCtx(t);try{if(await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(s){await this.hookErrorPage(e,"onCallbackQueryData",s,!0)}}async onMessageText(t){await this.onMessage(t,"text")}async onMessagePhoto(t){await this.onMessage(t,"photo")}async onMessageVideo(t){await this.onMessage(t,"video")}async onMessageAudio(t){await this.onMessage(t,"audio")}async onMessageDocument(t){await this.onMessage(t,"document")}async onMessageAnimation(t){await this.onMessage(t,"animation")}async onMessageVoice(t){await this.onMessage(t,"voice")}async onMessageVideoNote(t){await this.onMessage(t,"videoNote")}async onMessageSticker(t){await this.onMessage(t,"sticker")}async onMessageLocation(t){await this.onMessage(t,"location")}async onMessageContact(t){await this.onMessage(t,"contact")}registerOnCallbackQueryData(){this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this))}registerOnMessageText(){this.bot.on("message:text",this.onMessageText.bind(this))}registerOnMessagePhoto(){this.bot.on("message:photo",this.onMessagePhoto.bind(this))}registerOnMessageVideo(){this.bot.on("message:video",this.onMessageVideo.bind(this))}registerOnMessageAudio(){this.bot.on("message:audio",this.onMessageAudio.bind(this))}registerOnMessageDocument(){this.bot.on("message:document",this.onMessageDocument.bind(this))}registerOnMessageAnimation(){this.bot.on("message:animation",this.onMessageAnimation.bind(this))}registerOnMessageVoice(){this.bot.on("message:voice",this.onMessageVoice.bind(this))}registerOnMessageVideoNote(){this.bot.on("message:video_note",this.onMessageVideoNote.bind(this))}registerOnMessageSticker(){this.bot.on("message:sticker",this.onMessageSticker.bind(this))}registerOnMessageLocation(){this.bot.on("message:location",this.onMessageLocation.bind(this))}registerOnMessageContact(){this.bot.on("message:contact",this.onMessageContact.bind(this))}};var Z=class{static{p(this,"BlockKeyboard")}static label;static _process(t,e){if(e.type||(e.type="inline"),e.lang){let s=t[e.lang];return`
7
+ `);i=i.replace(`__IMPORT_${r}__`,l)}return i}};var O=class{static{p(this,"TemplateManager")}_map=new Map;_engine=w;_watcher=[];_pageManager=b;_supportedExtensions=new Set([".html",".ts",".js"]);_path;_isWatchEnabled;constructor(t){let{path:e,enableWatch:s=!1}=t;this._path=e,this._isWatchEnabled=s,this._validatePath(),this._initializeWatcher(t.watchOptions),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let t=0;t<this._path.length;t++){let e=this._path[t];if(!_(e))throw new Error(`Template base path is not exists: ${e}`);if(!R(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(t){throw new Error(`Failed to validate Template base path: ${String(t)}`)}}_initializeWatcher(t){if(this._isWatchEnabled){if(this._watcher.length>0)throw new Error("Watcher already enabled");for(let e=0;e<this._path.length;e++){let s=this._path[e],n=ft(s,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},...t});this._watcher[e]=n,n.on("change",this._handleFileChange.bind(this)),n.on("add",this._handleFileAdd.bind(this)),n.on("unlink",this._handleFileDelete.bind(this)),n.on("error",this._handleWatchError.bind(this))}}}_handleFileChange(t){let e=N(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileAdd(t){let e=N(t);this._isValidFile(e)&&this._loadFile(e)}_handleFileDelete(t){let e=N(t),s=this._getKey(e);this._map.has(s)&&this._map.delete(s)}_handleWatchError(t){}_loadAllFiles(){let t=new Map,e=[];for(let n=0;n<this._path.length;n++){let o=this._path[n],i=ut(o,"utf8").filter(r=>this._isValidFile(r));for(let r of i){let c=x(o,r),h=this._getExtension(r),d=this._getKey(r);if(h===".html")t.set(d,D(c,"utf8"));else if(h===".ts"||h===".js"){let l=b.getFileSync(c);l?.template!==void 0&&(t.set(d,l.template),e.push(l))}}}let s=new Map;for(let[n,o]of t.entries())this._compile(n,o,void 0,s,t);t.clear(),s.clear();for(let n of e)n.template=void 0}_loadFile(t){for(let e=0;e<this._path.length;e++){let s=this._path[e],n=x(s,t),o=this._getExtension(t),a=this._getKey(t);if(o==".html"){let i=D(n,"utf8");this._compile(a,i)}else if(o==".ts"||o==".js"){let i=b.getFileSync(n);i?.template!==void 0&&(this._compile(a,i.template),i.template=void 0)}else throw new Error(`File ${t} is not support`)}}_getExtension(t){return H(t).toLowerCase()}_readTemplateFile(t){for(let e of this._path){let s=H(t).toLowerCase();if(s){let i=x(e,t);if(_(i)&&R(i).isFile()){if(s===".html")return D(i,"utf8");if(s===".ts"||s===".js")try{return b.getFileSync(i)?.template??null}catch{return null}}continue}let n=x(e,`${t}.ts`),o=x(e,`${t}.js`);if(_(n)&&R(n).isFile())try{return b.getFileSync(n)?.template??null}catch{}else if(_(o)&&R(o).isFile())try{return b.getFileSync(n)?.template??null}catch{}let a=x(e,`${t}.html`);if(_(a)&&R(a).isFile())return D(a,"utf8")}return null}_isValidFile(t){return this._supportedExtensions.has(this._getExtension(t))}_getKey(t){return t.replace(/\.[^/.]+$/,"")}_compile(t,e,s,n,o){let a=this._map.get(t),i=a||{},r=!1,c=w.processImportBlocks(e,d=>o&&o.has(d)?o.get(d):this._readTemplateFile(d),0,n),h=w._processBaseBlocks(c);(s===void 0||s?.media===!1||a?.media===void 0)&&(i.media=w.compileMedia(c,h),r=!0),(s===void 0||s?.message===!1||a?.message===void 0)&&(i.message=w.compileMessages(c,h),r=!0),(s===void 0||s?.keyboard===!1||a?.keyboard===void 0)&&(i.keyboard=w.compileKeyboards(c,h),r=!0),(s===void 0||s?.description===!1||a?.description===void 0)&&(i.description=w.compileDescription(c,h),r=!0),r&&this._map.set(t,i)}getMedia(t,e="default",s="default",n){let a=this._map.get(t)?.media?.[e],i=a?.[s]||a?.default;try{if(!i)throw new Error("Media function not found, please check your template");return i(n)}catch{return{}}}getMessage(t,e="default",s="default",n){try{let a=this._map.get(t)?.message?.[e],i=a?.[s]||a?.default;if(!i)throw"";return i(n)}catch{return""}}getDescription(t,e="default",s="default",n="default",o){try{let i=this._map.get(t)?.description?.[e]?.[n],r=i?.[s]||i?.default;if(!r)throw"";return r(o)}catch{return""}}getDescriptionLanguage(t,e="default",s="default"){try{let o=this._map.get(t)?.description?.[e]?.[s];return o?Object.keys(o):[]}catch{return[]}}getDescriptionScopes(t,e="default"){try{let n=this._map.get(t)?.description?.[e];return n?Object.keys(n):[]}catch{return[]}}getKeyboard(t,e="default",s="default",n="inline",o){try{let i=this._map.get(t)?.keyboard?.[e],r=i?.[s]?.[n]||i?.default?.[n];if(!r)throw[];return r(o)}catch{return[]}}async write(t,e){if(this._getExtension(t)!=".html")return null;for(let s=0;s<this._path.length;s++){let n=x(this._path[s],t);if(_(n))return yt(n,e,"utf8"),this._loadFile(t),!0}return null}has(t){return this._map.has(t)}async destroy(){if(this._watcher)for(let t of this._watcher)await t.close();this._map.clear()}};import{Bot as kt,webhookCallback as z}from"grammy";var Tt=bt((()=>{try{return C}catch{return St(import.meta.url)}})()),wt=JSON.parse(Ct(Y(Tt,"../../package.json"),"utf-8")).version,X=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;optionsPage={shortCallbackData:!1};log;bot;handlerBotUpdate;constructor(t){if(!t?.token||t?.token?.length==0)throw new Error("Token is not valid or empty");if(typeof t.optionsPage?.shortCallbackData=="boolean"&&(this.optionsPage.shortCallbackData=t.optionsPage.shortCallbackData),this.log=t.log===!0?G:t.log?t.log:void 0,this.log?.info?.(`Gramstax v${wt}`),this.cacheSession=t.cacheSession||new F("memory"),this.cacheKeyboard=t.cacheKeyboard||new Map,this.templateManager=t.templateManager||new O({path:[Y(process.cwd(),"src","pages")]}),this.bot=this.createBot(t.token),this.bot.catch(this.onCatch),this.registerOnCallbackQueryData(),this.registerOnMessageText(),this.registerOnMessagePhoto(),this.registerOnMessageVideo(),this.registerOnMessageAudio(),this.registerOnMessageDocument(),this.registerOnMessageAnimation(),this.registerOnMessageVoice(),this.registerOnMessageVideoNote(),this.registerOnMessageSticker(),this.registerOnMessageLocation(),this.registerOnMessageContact(),this.handlerBotUpdate=this.bot.handleUpdate,this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),this.hookBeforeStart(),t.deploy.startsWith("polling"))this.runPolling();else if(t.deploy.startsWith("webhook:"))this.runWebhook(t.deploy.split("webhook:")[1]);else if(t.deploy.startsWith("serverless:"))this.runServerless(t.deploy.split("serverless:")[1]);else if(!t.deploy.startsWith("test"))throw new Error("Params deploy is not valid, expected: polling, webhook:<public-url>, serverless:<your-adapter>")}onCatch(t){if(this.log?.errorMake)this.log?.errorMake(t,"Bot","catch");else{let e=JSON.stringify(t,null,2);this.log?.error?.(`[Bot.catch]: ${e}`)}}hookBeforeStart(){}hookAfterStart(){}async onStart(t,e,s){await this.executeSyncBlocksDescription(this.pages);let{username:n}=t;this.log?.success?.(`Telegram bot polling started: ${n} ${e=="webhook"||e=="serverless"?`(${s})`:""}`),this.hookAfterStart()}createBot(t){return new kt(t)}createCtx(t){return new A({ct:t,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{isAnswer:!1,session:{},data:{}}})}runPolling(){this.bot.start({onStart:p(t=>{this.onStart(t,"polling",null)},"onStart")})}async runWebhook(t){let{serve:e}=await import("bun"),s=z(this.bot,"bun");this.handlerBotUpdate=s;let n=new URL(t).pathname;e({fetch(i){let{pathname:r}=new URL(i.url);if(i.method=="POST"&&r==n)return s(i);if(i.method=="GET"&&r=="/"){let c=new Date().toISOString();return new Response(JSON.stringify({status:"OK",timestamp:c}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}}),(await this.bot.api.getWebhookInfo()).url!=t&&await this.bot.api.setWebhook(t);let a=await this.bot.api.getMe();await this.onStart(a,"webhook",t)}async runServerless(t){this.handlerBotUpdate=z(this.bot,t);let e=await this.bot.api.getMe();await this.onStart(e,"serverless",t)}pageBuildData(t,e){t?.data===void 0&&(t.data=t.buildData());let{name:s}=Pt(e);t.data.name||(t.data.name=s),t.data.intentText||(t.data.intentText=t.data.name),t.data.intentTextCommand||(t.data.intentTextCommand=t.data.name),t.data.intentCallback||(t.data.intentCallback=t.data.name)}pageSorts(t,e,s){let n=t.data.name,o=t.prototype,a="Payload",i="Command",r="Caption",c="Free",h=e.routeDynamic,d=e.routeDynamicSpesific,l=p(f=>f.charAt(0).toUpperCase()+f.slice(1),"upFirst"),m=p(f=>f.replace(a,"").replace(i,"").replace(r,"").replace(c,""),"getPureRouteName"),y=p((f,g)=>o[`methodSession${l(f)}`]?.(g),"methodSession");e.all[n]=t;for(let f=0;f<e.lenListRouteStaticSession;f++){let g=e.listRouteStaticSession[f];if(typeof o[g]!="function")continue;let P=e.routeStatic[g],k=e.routeStaticIntent[g],T=e.routeStaticSession[g],$={name:n,routeName:g},j=P||k;if(j!==void 0){let it=g.includes(i),ot=g.includes("callback"),at=g.startsWith("text"),M;if(it){let v=t.data.intentTextCommand;M=v?`/${v}`:void 0}else if(ot){let v=t.data.intentCallback;this.optionsPage.shortCallbackData===!0&&(v=String(s),t.data.intentCallback=v),M=v}else at?M=t.data.intentText:M=t.data.name;M&&(j[M]=$)}T!==void 0&&(T[y(g,n)]=$),g.toLowerCase().endsWith("free")&&d[m(g)].push($)}o.free&&h.push(n)}async executeSyncBlocksDescription(t){let e=new Map,s=t.routeStatic.textCommand;for(let[,n]of Object.entries(s)){let o=n.name,a=this.templateManager.getDescriptionScopes(o);for(let i of a){e.has(i)||e.set(i,new Set);let r=this.templateManager.getDescriptionLanguage(o,"default",i);for(let c of r)e.get(i).add(c)}}for(let[n,o]of e)for(let a of o){let i=[];for(let[,h]of Object.entries(s)){let d=h.name,l=this.templateManager.getDescription(d,"default",a,n);l&&i.push({command:d,description:l})}if(i.length===0)continue;let r={type:n},c=a==="default"?void 0:a;try{let h=await this.bot.api.getMyCommands({scope:r,language_code:c}),d=JSON.stringify(h.map(m=>({command:m.command,description:m.description})).sort((m,y)=>m.command.localeCompare(y.command))),l=JSON.stringify(i.sort((m,y)=>m.command.localeCompare(y.command)));d!==l&&(await this.bot.api.setMyCommands(i,{scope:r,language_code:c}),this.log?.info?.(`Synced descriptions for scope: ${n},${c?` lang: ${c},`:""} total (${i.length})`))}catch(h){this.log?.error?.(`Failed to sync descriptions for scope: ${n},${c?` lang: ${c},`:""} error: ${String(h)}`)}}}pageLoads(){this.log?.info?.("Load pages..");let t=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand"],e=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload"],s=[...t,...e,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],n=p((i,r)=>Object.fromEntries(i.map(c=>[c,r()])),"makeObject"),o=p(()=>[],"initDynamicSpesific"),a={all:{},routeDynamic:[],routeDynamicSpesific:{text:o(),photo:o(),video:o(),audio:o(),document:o(),animation:o(),voice:o(),videoNote:o(),sticker:o(),location:o(),contact:o()},routeStatic:n(t,()=>({})),routeStaticIntent:n(e,()=>({})),routeStaticSession:n(s,()=>({})),listRouteStatic:t,listRouteStaticIntent:e,listRouteStaticSession:s,lenListRouteStatic:t.length,lenListRouteStaticIntent:e.length,lenListRouteStaticSession:s.length};return b.getFileManySync(void 0).forEach(({path:i,page:r},c)=>{this.pageBuildData(r,i),this.pageSorts(r,a,c),r.template=void 0}),this.log?.info?.(`Finish load pages with total (${Object.keys(a.all).length})`),a}async pageRoutes(t,e){let s,n;if(s===void 0){let a=await t.sessionGet();if(a){let i=a.method,r=this.pages.routeStaticSession,c=t.callbackData,h=t.msgText,d=t.msgCaption,l=c||h||d,m=e==="callback",y=m?"colon":"space",f=l&&t.havePayloads(l,y)?t.getIntent(l,y,1):void 0,g=!m&&l?t.getIntent(l,"space",2):void 0;for(let P=0;P<this.pages.lenListRouteStaticSession;P++){let k=this.pages.listRouteStaticSession[P];if(k.startsWith(e)){if(l){if(this.pages.routeStatic[k]?.[l])continue;let T=this.pages.routeStaticIntent[k];if(T&&(f&&T[f]||g&&T[g]))continue}n=r[k][i]}if(n)break}n!==void 0&&(s=this.pages.all[n.name])}}if(s===void 0){let a=t.callbackData,i=t.msgText,r=t.msgCaption,c=this.pages.routeStatic;for(let h=0;h<this.pages.lenListRouteStatic;h++){let d=this.pages.listRouteStatic[h];if(d.startsWith(e)&&(n=c[d][a||i||r]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s===void 0){let a=this.pages.routeStaticIntent,i=e==="callback",r=i?"colon":"space",c=i?t.callbackData:t.msgText||t.msgCaption,h=t.havePayloads(c,r);if(c&&h)for(let d=0;d<this.pages.lenListRouteStaticIntent;d++){let l=this.pages.listRouteStaticIntent[d];if(!l.startsWith(e))continue;let m=a[l];if(n=m[t.getIntent(c,r,1)],!n&&!i&&(n=m[t.getIntent(c,"space",2)]),n)break}n!==void 0&&(s=this.pages.all[n.name])}if(s!==void 0&&n!==void 0){if(!s.prototype[n.routeName])return;let i=await new s(t)[n.routeName]?.();return t.temp.isAnswer===!0?i:null}let o=this.pages.routeDynamicSpesific[e]||[];for(let a=0;a<o.length;a++){let i=o[a];if(i===void 0)continue;let r=this.pages.all[i.name];r!==void 0&&typeof r.prototype[i.routeName]=="function"&&await new r(t)[i.routeName]()}for(let a=0;a<this.pages.routeDynamic.length;a++){let i=this.pages.routeDynamic[a];if(i===void 0)continue;let r=this.pages.all[i];r!==void 0&&typeof r.prototype.free=="function"&&await new r(t).free()}if(t.temp.isAnswer===!1)return null}async hookBeforeRoute(t,e){return!!(t||e)}async hookErrorPage(t,e,s,n){}async hookErrorInputNotFoundPage(t){}async onMessage(t,e){let s=this.createCtx(t);try{if(await this.hookBeforeRoute(s,e)===!1)return;await this.pageRoutes(s,e)===null&&await this.hookErrorInputNotFoundPage(s)}catch(n){await this.hookErrorPage(s,e,n,!1)}}async onCallbackQueryData(t){let e=this.createCtx(t);try{if(await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(s){await this.hookErrorPage(e,"onCallbackQueryData",s,!0)}}async onMessageText(t){await this.onMessage(t,"text")}async onMessagePhoto(t){await this.onMessage(t,"photo")}async onMessageVideo(t){await this.onMessage(t,"video")}async onMessageAudio(t){await this.onMessage(t,"audio")}async onMessageDocument(t){await this.onMessage(t,"document")}async onMessageAnimation(t){await this.onMessage(t,"animation")}async onMessageVoice(t){await this.onMessage(t,"voice")}async onMessageVideoNote(t){await this.onMessage(t,"videoNote")}async onMessageSticker(t){await this.onMessage(t,"sticker")}async onMessageLocation(t){await this.onMessage(t,"location")}async onMessageContact(t){await this.onMessage(t,"contact")}registerOnCallbackQueryData(){this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this))}registerOnMessageText(){this.bot.on("message:text",this.onMessageText.bind(this))}registerOnMessagePhoto(){this.bot.on("message:photo",this.onMessagePhoto.bind(this))}registerOnMessageVideo(){this.bot.on("message:video",this.onMessageVideo.bind(this))}registerOnMessageAudio(){this.bot.on("message:audio",this.onMessageAudio.bind(this))}registerOnMessageDocument(){this.bot.on("message:document",this.onMessageDocument.bind(this))}registerOnMessageAnimation(){this.bot.on("message:animation",this.onMessageAnimation.bind(this))}registerOnMessageVoice(){this.bot.on("message:voice",this.onMessageVoice.bind(this))}registerOnMessageVideoNote(){this.bot.on("message:video_note",this.onMessageVideoNote.bind(this))}registerOnMessageSticker(){this.bot.on("message:sticker",this.onMessageSticker.bind(this))}registerOnMessageLocation(){this.bot.on("message:location",this.onMessageLocation.bind(this))}registerOnMessageContact(){this.bot.on("message:contact",this.onMessageContact.bind(this))}};var Z=class{static{p(this,"BlockKeyboard")}static label;static _process(t,e){if(e.type||(e.type="inline"),e.lang){let s=t[e.lang];return`
8
8
  <keyboard type="${e.type}" lang="${e.lang}">${e.reverse?this.label._reverse(s):s}</keyboard>
9
9
  `}return Object.keys(t).map(s=>{let n=t[s];return`
10
10
  <keyboard type="${e.type}" lang="${s}">${e.reverse?this.label._reverse(n):n}</keyboard>
11
- `}).join(" ")}static _build(t,e,s){if(!this.label)throw new Error("Label not found, make sure set this.label from class extends LabelKeyboard");let n=this.label[t];if(!n)throw new Error(`Function ${t} not found`);return this._process(n.call(this.label,void 0),{type:s,lang:e})}};var tt=class{static{p(this,"LabelKeyboard")}static _reverse(t){return t.split(/(?<!\\), */).reverse().join(", ")}static _reverseObj(t){return Object.keys(t).reduce((e,s)=>(e[s]=this._reverse(t[s]),e),{})}static _build(t,e,s){if(t){let n=s[t||""];return e?this._reverse(n):n}return e?this._reverseObj(s):s}};import{isMainThread as xt,Worker as It}from"worker_threads";var v=class{constructor(t,e){this.send=t;this.register=e}static{p(this,"WorkerThreadRpc")}map=new Map;async make(t){let e=this.map,s=this.send,{id:n,method:o,params:a,result:i,error:r}=t;if(o!==void 0)try{let c=this.register[o];if(typeof c!="function")throw new Error(`Method ${o} not found or not function`);let l=await c.apply(this.register,a);s({id:n,result:l})}catch(c){s({id:n,error:c instanceof Error?{message:c.message,stack:c.stack,name:c.name}:c})}else if(i!==void 0){let c=e.get(n);c&&(c.resolve(i),e.delete(n))}else if(r!==void 0){let c=e.get(n);c&&(c.reject(r),e.delete(n))}}makeId(){return Math.random()}makeRequest(t,e,s=!0,n){let o=this.makeId(),a={id:o,method:t,params:e,...n};return s?new Promise((i,r)=>{this.map.set(o,{resolve:i,reject:r}),this.send(a)}):this.send(a)}};var V=class{constructor(t,e){this.path=t;this.argv=e;this.init(),this.rpc=new v(this.send.bind(this),this)}static{p(this,"WorkerThreadLaunch")}static isMainThread=xt;_readyResolve;_readyPromise=new Promise(t=>this._readyResolve=t);pid=process.pid;thread={};threadId={};rpc={};ready(){return this._readyPromise}mtdReady(){this._readyResolve?.()}init(){this.thread=new It(this.path,{argv:this.argv.length==0&&this.argv[0]===void 0?void 0:this.argv}),this.threadId=this.thread.threadId,this.thread.on("message",t=>this.handleOnMessage(t)),this.thread.on("exit",()=>this.kill()),process.once("SIGINT",()=>this.kill()),process.once("SIGTERM",()=>this.kill())}async handleOnMessage(t){this.rpc.make(t)}kill(){this.thread.terminate()}send(t){this.thread.postMessage(t)}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};var et=class u{static{p(this,"WorkerThreadExport")}static launchGatewayClient(t){let e=new Proxy({},{get(n,o){if(!(typeof o!="string"||o==="then"))return async(a,...i)=>{let r=a.gatewayClients.get(t);return r||(r=await a.createGatewayClient(t)),r.request(o,i)}}}),s=p(function(n){return new Proxy({},{get(o,a){if(!(typeof a!="string"||a==="then"))return async(...i)=>{let r=n.gatewayClients.get(t);return r||(r=await n.createGatewayClient(t)),r.request(a,i)}}})},"ctor");return Object.setPrototypeOf(s,e),s}static init(t){let{WTInit:e,WTLaunch:s=V,path:n,wrap:o}=t,a=`for-${n}`;if(process.argv[2]===a)return new e,{launchGatewayClient:p(d=>u.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};let i,r=new Proxy({},{get(d,h){if(h!=="then")return h==="sendRequest"||h==="request"||h==="kill"||h==="send"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i[h](...m)}:(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(h,m)}}}),l={...o?o(r):{},launchWorker:p(async(d=[])=>(i=new s(n,[a,...d]),await i.ready(),i),"launchWorker"),launchGatewayClient:p(d=>u.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};return new Proxy(l,{get(d,h){if(h!=="then")return h==="launchGatewayClient"?d.launchGatewayClient:h==="launchWorker"?d.launchWorker:h in d?d[h]:typeof h=="string"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(h,m)}:d[h]}})}};import{Client as Mt}from"net-ipc";var B=class{static{p(this,"WorkerThreadGatewayClient")}client=new Mt;rpc;constructor(){this.rpc=new v(t=>this.client.send(t),{}),this.client.on("message",t=>{this.rpc.make(t)})}async connect(t){this.client.options.path=t;let e=new Promise(s=>{this.client.once("ready",()=>s(this))});return await this.client.connect(),e}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};import{Server as _t}from"net-ipc";var W=class{static{p(this,"WorkerThreadGatewayServer")}server=new _t;rpc=new Map;methods={};constructor(){this.server.on("connect",t=>{let e=new v(s=>t.send(s),this.methods);this.rpc.set(t.id,e)}),this.server.on("disconnect",t=>{this.rpc.delete(t.id)}),this.server.on("message",(t,e)=>{let s=this.rpc.get(e.id);s&&s.make(t)}),this.server.on("error",t=>{console.error(t)})}async start(t,e={}){this.methods=e,this.server.options.path=t;let s=new Promise(n=>{this.server.once("ready",()=>n(this))});return await this.server.start(),s}};import{parentPort as Ft,threadId as Rt,isMainThread as At}from"worker_threads";var st=class{static{p(this,"WorkerThreadInit")}argv=process.argv;id=Rt;pid=process.pid;rpc={};parentPort=Ft;gatewayServer;gatewayClients=new Map;gatewayClientLatest;static gatewayServerPath;gatewayServerPath=this.constructor.gatewayServerPath;get gatewayClient(){return this.gatewayClientLatest}static isMainThread=At;constructor(){this.init(),this.rpc=new v(this.send.bind(this),this),this.send({method:"mtdReady"})}init(){this.parentPort?.on("message",t=>this.handleOnMessage(t))}handleOnMessage(t){this.rpc.make(t)}send(t){this.parentPort?.postMessage(t)}request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}async createGatewayServer(t,e){return t||(t=this),e||(e=this.constructor.gatewayServerPath),this.gatewayServer=new W,await this.gatewayServer.start(e,t),this.constructor.gatewayServerPath=e,!0}async createGatewayClient(t){let e=new B;return await e.connect(t),this.gatewayClients.set(t,e),this.gatewayClientLatest=e,e}};var nt=class{static{p(this,"WorkerThreadPool")}thread=new Map;threadCount=0;constructor(t){this.addMany(t)}add(t){this.thread.set(t.threadId,t),this.threadCount+=1}addMany(t){t.forEach(e=>this.add(e))}getInstance(t){return this.thread.get(t)}kill(t){let e=this.thread.get(t);return e?.kill(),this.thread.delete(t),this.threadCount-=1,e?.threadId}killAll(){this.thread.values().forEach(({threadId:t})=>this.kill(t))}async broadcastRequest(t,e){return await Promise.all(Object.values(this.thread).map(s=>s.request(t,e,!0)))}async request(t,e,s,n=!0,o){return await this.thread.get(t)?.request(e,s,n,o)}};export{Z as BlockKeyboard,R as CacheExternal,A as Ctx,X as Gramstax,tt as LabelKeyboard,E as LoggingUtils,w as TemplateEngine,O as TemplateManager,et as WorkerThreadExport,B as WorkerThreadGatewayClient,W as WorkerThreadGatewayServer,st as WorkerThreadInit,V as WorkerThreadLaunch,nt as WorkerThreadPool,v as WorkerThreadRpc,G as log};
11
+ `}).join(" ")}static _build(t,e,s){if(!this.label)throw new Error("Label not found, make sure set this.label from class extends LabelKeyboard");let n=this.label[t];if(!n)throw new Error(`Function ${t} not found`);return this._process(n.call(this.label,void 0),{type:s,lang:e})}};var tt=class{static{p(this,"LabelKeyboard")}static _reverse(t){return t.split(/(?<!\\), */).reverse().join(", ")}static _reverseObj(t){return Object.keys(t).reduce((e,s)=>(e[s]=this._reverse(t[s]),e),{})}static _build(t,e,s){if(t){let n=s[t||""];return e?this._reverse(n):n}return e?this._reverseObj(s):s}};import{isMainThread as It,Worker as xt}from"worker_threads";var I=class{constructor(t,e){this.send=t;this.register=e}static{p(this,"WorkerThreadRpc")}map=new Map;async make(t){let e=this.map,s=this.send,{id:n,method:o,params:a,result:i,error:r}=t;if(o!==void 0)try{let c=this.register[o];if(typeof c!="function")throw new Error(`Method ${o} not found or not function`);let h=await c.apply(this.register,a);s({id:n,result:h})}catch(c){s({id:n,error:c instanceof Error?{message:c.message,stack:c.stack,name:c.name}:c})}else if(i!==void 0){let c=e.get(n);c&&(c.resolve(i),e.delete(n))}else if(r!==void 0){let c=e.get(n);c&&(c.reject(r),e.delete(n))}}makeId(){return Math.random()}makeRequest(t,e,s=!0,n){let o=this.makeId(),a={id:o,method:t,params:e,...n};return s?new Promise((i,r)=>{this.map.set(o,{resolve:i,reject:r}),this.send(a)}):this.send(a)}};var V=class{constructor(t,e){this.path=t;this.argv=e;this.init(),this.rpc=new I(this.send.bind(this),this)}static{p(this,"WorkerThreadLaunch")}static isMainThread=It;_readyResolve;_readyPromise=new Promise(t=>this._readyResolve=t);pid=process.pid;thread={};threadId={};rpc={};ready(){return this._readyPromise}mtdReady(){this._readyResolve?.()}init(){this.thread=new xt(this.path,{argv:this.argv.length==0&&this.argv[0]===void 0?void 0:this.argv}),this.threadId=this.thread.threadId,this.thread.on("message",t=>this.handleOnMessage(t)),this.thread.on("exit",()=>this.kill()),process.once("SIGINT",()=>this.kill()),process.once("SIGTERM",()=>this.kill())}async handleOnMessage(t){this.rpc.make(t)}kill(){this.thread.terminate()}send(t){this.thread.postMessage(t)}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};var et=class u{static{p(this,"WorkerThreadExport")}static launchGatewayClient(t){let e=new Proxy({},{get(n,o){if(!(typeof o!="string"||o==="then"))return async(a,...i)=>{let r=a.gatewayClients.get(t);return r||(r=await a.createGatewayClient(t)),r.request(o,i)}}}),s=p(function(n){return new Proxy({},{get(o,a){if(!(typeof a!="string"||a==="then"))return async(...i)=>{let r=n.gatewayClients.get(t);return r||(r=await n.createGatewayClient(t)),r.request(a,i)}}})},"ctor");return Object.setPrototypeOf(s,e),s}static init(t){let{WTInit:e,WTLaunch:s=V,path:n,wrap:o}=t,a=`for-${n}`;if(process.argv[2]===a)return new e,{launchGatewayClient:p(d=>u.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};let i,r=new Proxy({},{get(d,l){if(l!=="then")return l==="sendRequest"||l==="request"||l==="kill"||l==="send"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i[l](...m)}:(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(l,m)}}}),h={...o?o(r):{},launchWorker:p(async(d=[])=>(i=new s(n,[a,...d]),await i.ready(),i),"launchWorker"),launchGatewayClient:p(d=>u.launchGatewayClient(d||e.gatewayServerPath),"launchGatewayClient")};return new Proxy(h,{get(d,l){if(l!=="then")return l==="launchGatewayClient"?d.launchGatewayClient:l==="launchWorker"?d.launchWorker:l in d?d[l]:typeof l=="string"?(...m)=>{if(!i)throw new Error(`Thread at ${n} not launched yet.`);return i.request(l,m)}:d[l]}})}};import{Client as Mt}from"net-ipc";var B=class{static{p(this,"WorkerThreadGatewayClient")}client=new Mt;rpc;constructor(){this.rpc=new I(t=>this.client.send(t),{}),this.client.on("message",t=>{this.rpc.make(t)})}async connect(t){this.client.options.path=t;let e=new Promise(s=>{this.client.once("ready",()=>s(this))});return await this.client.connect(),e}async request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}};import{Server as vt}from"net-ipc";var W=class{static{p(this,"WorkerThreadGatewayServer")}server=new vt;rpc=new Map;methods={};constructor(){this.server.on("connect",t=>{let e=new I(s=>t.send(s),this.methods);this.rpc.set(t.id,e)}),this.server.on("disconnect",t=>{this.rpc.delete(t.id)}),this.server.on("message",(t,e)=>{let s=this.rpc.get(e.id);s&&s.make(t)}),this.server.on("error",t=>{console.error(t)})}async start(t,e={}){this.methods=e,this.server.options.path=t;let s=new Promise(n=>{this.server.once("ready",()=>n(this))});return await this.server.start(),s}};import{parentPort as _t,threadId as Rt,isMainThread as Ft}from"worker_threads";var st=class{static{p(this,"WorkerThreadInit")}argv=process.argv;id=Rt;pid=process.pid;rpc={};parentPort=_t;gatewayServer;gatewayClients=new Map;gatewayClientLatest;static gatewayServerPath;gatewayServerPath=this.constructor.gatewayServerPath;get gatewayClient(){return this.gatewayClientLatest}static isMainThread=Ft;constructor(){this.init(),this.rpc=new I(this.send.bind(this),this),this.send({method:"mtdReady"})}init(){this.parentPort?.on("message",t=>this.handleOnMessage(t))}handleOnMessage(t){this.rpc.make(t)}send(t){this.parentPort?.postMessage(t)}request(t,e,s=!0,n){return this.rpc.makeRequest(t,e,s,n)}async createGatewayServer(t,e){return t||(t=this),e||(e=this.constructor.gatewayServerPath),this.gatewayServer=new W,await this.gatewayServer.start(e,t),this.constructor.gatewayServerPath=e,!0}async createGatewayClient(t){let e=new B;return await e.connect(t),this.gatewayClients.set(t,e),this.gatewayClientLatest=e,e}};var nt=class{static{p(this,"WorkerThreadPool")}thread=new Map;threadCount=0;constructor(t){this.addMany(t)}add(t){this.thread.set(t.threadId,t),this.threadCount+=1}addMany(t){t.forEach(e=>this.add(e))}getInstance(t){return this.thread.get(t)}kill(t){let e=this.thread.get(t);return e?.kill(),this.thread.delete(t),this.threadCount-=1,e?.threadId}killAll(){this.thread.values().forEach(({threadId:t})=>this.kill(t))}async broadcastRequest(t,e){return await Promise.all(Object.values(this.thread).map(s=>s.request(t,e,!0)))}async request(t,e,s,n=!0,o){return await this.thread.get(t)?.request(e,s,n,o)}};export{Z as BlockKeyboard,F as CacheExternal,A as Ctx,X as Gramstax,tt as LabelKeyboard,E as LoggingUtil,w as TemplateEngine,O as TemplateManager,et as WorkerThreadExport,B as WorkerThreadGatewayClient,W as WorkerThreadGatewayServer,st as WorkerThreadInit,V as WorkerThreadLaunch,nt as WorkerThreadPool,I as WorkerThreadRpc,G as log};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gramstax",
3
- "version": "0.5.4",
3
+ "version": "0.5.6",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",