gramstax 0.5.6 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,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(`
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 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,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 E;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(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(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),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 R.InlineKeyboard,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 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,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 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 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 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,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 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
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(`
3
+ `).trim()},"processResult");return n==="all"?h.map(m=>d(m.content)).join(`
4
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(`
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}__`,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});
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: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),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 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),h=k._processBaseBlocks(c);(s===void 0||s?.media===!1||a?.media===void 0)&&(i.media=k.compileMedia(c,h),r=!0),(s===void 0||s?.message===!1||a?.message===void 0)&&(i.message=k.compileMessages(c,h),r=!0),(s===void 0||s?.keyboard===!1||a?.keyboard===void 0)&&(i.keyboard=k.compileKeyboards(c,h),r=!0),(s===void 0||s?.description===!1||a?.description===void 0)&&(i.description=k.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=(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=(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,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{name:s}=(0,M.parse)(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(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[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],I=e.routeStaticIntent[u],x=e.routeStaticSession[u],G={name:n,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(s),t.data.intentCallback=_),v=_}else pt?v=t.data.intentText:v=t.data.name;v&&(Y[v]=G)}x!==void 0&&(x[y(u,n)]=G),u.toLowerCase().endsWith("free")&&d[m(u)].push(G)}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 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,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}n=r[I][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 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 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 $=class{constructor(t,e,s){this.path=t;this.argv=e;this.register=s;this.init(),s||(s=this),this.rpc=new T(this.send.bind(this),s)}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,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=>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 ${n} 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(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 ht=require("net-ipc");var L=class{static{p(this,"WorkerThreadGatewayServer")}server=new ht.Server;rpc=new Map;register={};constructor(){this.server.on("connect",t=>{let e=new T(s=>t.send(s),this.register);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.register=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 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(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,LoggingUtil,TemplateEngine,TemplateManager,WorkerThreadExport,WorkerThreadGatewayClient,WorkerThreadGatewayServer,WorkerThreadInit,WorkerThreadLaunch,WorkerThreadPool,WorkerThreadRpc,log});
@@ -123,23 +123,17 @@ declare class TemplateEngine {
123
123
  static processImportBlocks(template: string, resolver: (src: string) => string | null, depth?: number, importCache?: Map<string, string>): string;
124
124
  }
125
125
 
126
- /** Template file interface for better type safety */
127
126
  type ICompiledTemplate = {
128
127
  media: ReturnType<typeof TemplateEngine.compileMedia>;
129
128
  message: ReturnType<typeof TemplateEngine.compileMessages>;
130
129
  keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>;
131
130
  description: ReturnType<typeof TemplateEngine.compileDescription>;
132
131
  };
133
- /** Template loading options */
134
132
  type ITemplateOptions = {
135
- /** Base path for template files */
136
133
  path: string[];
137
- /** Enable file watching for hot reloading for value template only */
138
134
  enableWatch?: boolean;
139
- /** Chokidar watch options */
140
135
  watchOptions?: any;
141
136
  };
142
- /** Template management system */
143
137
  declare class TemplateManager {
144
138
  _map: Map<string, ICompiledTemplate>;
145
139
  _engine: typeof TemplateEngine;
@@ -149,21 +143,13 @@ declare class TemplateManager {
149
143
  readonly _path: ITemplateOptions[`path`];
150
144
  readonly _isWatchEnabled: ITemplateOptions[`enableWatch`];
151
145
  constructor(options: ITemplateOptions);
152
- /** Validate and ensure template directory exists. @returns Void */
153
146
  _validatePath(): boolean;
154
- /** Initialize file system watcher for hot reloading. @returns Void */
155
147
  _initializeWatcher(options?: any): void;
156
- /** Handle file change events */
157
148
  _handleFileChange(filepath: string): void;
158
- /** Handle file add events */
159
149
  _handleFileAdd(filepath: string): void;
160
- /** Handle file delete events */
161
150
  _handleFileDelete(filepath: string): void;
162
- /** Handle watcher errors */
163
151
  _handleWatchError(error: any): void;
164
- /** Load all Template files during initialization with batch optimization */
165
152
  _loadAllFiles(): void;
166
- /** Load and compile a single template file (used by watcher) */
167
153
  _loadFile(filename: string): void;
168
154
  _getExtension(filename: string): string;
169
155
  _readTemplateFile(filename: string): string | null;
@@ -172,60 +158,14 @@ declare class TemplateManager {
172
158
  _compile(key: string, template: string, keepIfExist?: Partial<{
173
159
  [K in keyof ICompiledTemplate]: boolean;
174
160
  }>, importCache?: Map<string, string>, rawCache?: Map<string, string>): void;
175
- /**
176
- * Get compiled media template
177
- * @param key Template identifier (filename without extension)
178
- * @param baseId Base id attr from block
179
- * @param language Target language code
180
- * @param data Template variables
181
- * @returns media object
182
- */
183
161
  getMedia(key: string, baseId?: string, language?: string, data?: Record<string, any>): ReturnType<ICompiledTemplate[`media`][`default`][`default`]>;
184
- /**
185
- * Get compiled message template
186
- * @param key Template identifier (filename without extension)
187
- * @param baseId Base id attr from block
188
- * @param language Target language code
189
- * @param data Template variables
190
- * @returns Rendered message string
191
- */
192
162
  getMessage(key: string, baseId?: string, language?: string, data?: Record<string, any>): string;
193
- /**
194
- * @param key Template identifier (filename without extension)
195
- * @param baseId Base id attr from block
196
- * @param language Target language code
197
- * @param scope Scope of the command
198
- * @returns Description string
199
- */
200
163
  getDescription(key: string, baseId?: string, language?: string, scope?: string, data?: Record<string, any>): string;
201
164
  getDescriptionLanguage(key: string, baseId?: string, scope?: string): string[];
202
165
  getDescriptionScopes(key: string, baseId?: string): string[];
203
- /**
204
- * Get compiled keyboard template
205
- * @param key Template identifier (filename without extension)
206
- * @param baseId Base id attr from block
207
- * @param language Target language code
208
- * @param data Template variables
209
- * @returns Array of rendered button labels
210
- */
211
166
  getKeyboard(key: string, baseId?: string, language?: string, type?: `inline` | `bottom`, data?: Record<string, any>): string[];
212
- /**
213
- * Write template to file and update cache
214
- * @param filename Target filename (with extension)
215
- * @param template string content to write
216
- * @returns Promise that resolves when file is written
217
- */
218
167
  write(filename: string, template: string): Promise<boolean | null>;
219
- /**
220
- * Check if template exists
221
- * @param key Template identifier
222
- * @returns True if template exists
223
- */
224
168
  has(key: string): boolean;
225
- /**
226
- * Cleanup resources and close watchers
227
- * @returns Promise void
228
- */
229
169
  destroy(): Promise<void>;
230
170
  }
231
171
 
@@ -385,19 +325,7 @@ declare class Ctx {
385
325
  havePayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0]): boolean;
386
326
  addPayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], pld: (string | undefined)[]): string;
387
327
  getPayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionStart?: number): string[];
388
- /**
389
- * For get intent from string, example: callbackData: "start:123:1" intent: "start"
390
- * @param str String
391
- * @param mtd Seperator
392
- * @param positionEnd Number
393
- * @returns Intent string
394
- */
395
328
  getIntent(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionEnd?: number): string;
396
- /**
397
- * Must be overrides if need this is just placeholder type
398
- * @for Only for transition page to other page
399
- * @param args Params
400
- */
401
329
  transition?(...args: any): Promise<any>;
402
330
  callback?(): Promise<any>;
403
331
  callbackPayload?(): Promise<any>;
@@ -1052,6 +980,7 @@ declare class WorkerThreadRpc {
1052
980
  declare class WorkerThreadLaunch {
1053
981
  path: string;
1054
982
  argv: any[];
983
+ register?: any | undefined;
1055
984
  static isMainThread: boolean;
1056
985
  private _readyResolve?;
1057
986
  private _readyPromise;
@@ -1059,7 +988,7 @@ declare class WorkerThreadLaunch {
1059
988
  thread: Worker;
1060
989
  threadId: number;
1061
990
  rpc: WorkerThreadRpc;
1062
- constructor(path: string, argv: any[]);
991
+ constructor(path: string, argv: any[], register?: any | undefined);
1063
992
  ready(): Promise<void>;
1064
993
  mtdReady(): void;
1065
994
  init(): void;
@@ -1072,9 +1001,9 @@ declare class WorkerThreadLaunch {
1072
1001
  declare class WorkerThreadGatewayServer {
1073
1002
  server: Server;
1074
1003
  rpc: Map<string, WorkerThreadRpc>;
1075
- methods: any;
1004
+ register: any;
1076
1005
  constructor();
1077
- start(path: string, methods?: any): Promise<unknown>;
1006
+ start(path: string, register?: any): Promise<unknown>;
1078
1007
  }
1079
1008
 
1080
1009
  declare class WorkerThreadGatewayClient {
@@ -1103,7 +1032,7 @@ declare class WorkerThreadInit {
1103
1032
  handleOnMessage(data: any): void;
1104
1033
  send(payload: any): void;
1105
1034
  request(method: string, params: any, _wait?: boolean, _others?: any): Promise<any>;
1106
- createGatewayServer(methods?: any, path?: string): Promise<boolean>;
1035
+ createGatewayServer(register?: any, path?: string): Promise<boolean>;
1107
1036
  createGatewayClient(serverPath: string): Promise<WorkerThreadGatewayClient>;
1108
1037
  }
1109
1038
 
@@ -123,23 +123,17 @@ declare class TemplateEngine {
123
123
  static processImportBlocks(template: string, resolver: (src: string) => string | null, depth?: number, importCache?: Map<string, string>): string;
124
124
  }
125
125
 
126
- /** Template file interface for better type safety */
127
126
  type ICompiledTemplate = {
128
127
  media: ReturnType<typeof TemplateEngine.compileMedia>;
129
128
  message: ReturnType<typeof TemplateEngine.compileMessages>;
130
129
  keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>;
131
130
  description: ReturnType<typeof TemplateEngine.compileDescription>;
132
131
  };
133
- /** Template loading options */
134
132
  type ITemplateOptions = {
135
- /** Base path for template files */
136
133
  path: string[];
137
- /** Enable file watching for hot reloading for value template only */
138
134
  enableWatch?: boolean;
139
- /** Chokidar watch options */
140
135
  watchOptions?: any;
141
136
  };
142
- /** Template management system */
143
137
  declare class TemplateManager {
144
138
  _map: Map<string, ICompiledTemplate>;
145
139
  _engine: typeof TemplateEngine;
@@ -149,21 +143,13 @@ declare class TemplateManager {
149
143
  readonly _path: ITemplateOptions[`path`];
150
144
  readonly _isWatchEnabled: ITemplateOptions[`enableWatch`];
151
145
  constructor(options: ITemplateOptions);
152
- /** Validate and ensure template directory exists. @returns Void */
153
146
  _validatePath(): boolean;
154
- /** Initialize file system watcher for hot reloading. @returns Void */
155
147
  _initializeWatcher(options?: any): void;
156
- /** Handle file change events */
157
148
  _handleFileChange(filepath: string): void;
158
- /** Handle file add events */
159
149
  _handleFileAdd(filepath: string): void;
160
- /** Handle file delete events */
161
150
  _handleFileDelete(filepath: string): void;
162
- /** Handle watcher errors */
163
151
  _handleWatchError(error: any): void;
164
- /** Load all Template files during initialization with batch optimization */
165
152
  _loadAllFiles(): void;
166
- /** Load and compile a single template file (used by watcher) */
167
153
  _loadFile(filename: string): void;
168
154
  _getExtension(filename: string): string;
169
155
  _readTemplateFile(filename: string): string | null;
@@ -172,60 +158,14 @@ declare class TemplateManager {
172
158
  _compile(key: string, template: string, keepIfExist?: Partial<{
173
159
  [K in keyof ICompiledTemplate]: boolean;
174
160
  }>, importCache?: Map<string, string>, rawCache?: Map<string, string>): void;
175
- /**
176
- * Get compiled media template
177
- * @param key Template identifier (filename without extension)
178
- * @param baseId Base id attr from block
179
- * @param language Target language code
180
- * @param data Template variables
181
- * @returns media object
182
- */
183
161
  getMedia(key: string, baseId?: string, language?: string, data?: Record<string, any>): ReturnType<ICompiledTemplate[`media`][`default`][`default`]>;
184
- /**
185
- * Get compiled message template
186
- * @param key Template identifier (filename without extension)
187
- * @param baseId Base id attr from block
188
- * @param language Target language code
189
- * @param data Template variables
190
- * @returns Rendered message string
191
- */
192
162
  getMessage(key: string, baseId?: string, language?: string, data?: Record<string, any>): string;
193
- /**
194
- * @param key Template identifier (filename without extension)
195
- * @param baseId Base id attr from block
196
- * @param language Target language code
197
- * @param scope Scope of the command
198
- * @returns Description string
199
- */
200
163
  getDescription(key: string, baseId?: string, language?: string, scope?: string, data?: Record<string, any>): string;
201
164
  getDescriptionLanguage(key: string, baseId?: string, scope?: string): string[];
202
165
  getDescriptionScopes(key: string, baseId?: string): string[];
203
- /**
204
- * Get compiled keyboard template
205
- * @param key Template identifier (filename without extension)
206
- * @param baseId Base id attr from block
207
- * @param language Target language code
208
- * @param data Template variables
209
- * @returns Array of rendered button labels
210
- */
211
166
  getKeyboard(key: string, baseId?: string, language?: string, type?: `inline` | `bottom`, data?: Record<string, any>): string[];
212
- /**
213
- * Write template to file and update cache
214
- * @param filename Target filename (with extension)
215
- * @param template string content to write
216
- * @returns Promise that resolves when file is written
217
- */
218
167
  write(filename: string, template: string): Promise<boolean | null>;
219
- /**
220
- * Check if template exists
221
- * @param key Template identifier
222
- * @returns True if template exists
223
- */
224
168
  has(key: string): boolean;
225
- /**
226
- * Cleanup resources and close watchers
227
- * @returns Promise void
228
- */
229
169
  destroy(): Promise<void>;
230
170
  }
231
171
 
@@ -385,19 +325,7 @@ declare class Ctx {
385
325
  havePayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0]): boolean;
386
326
  addPayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], pld: (string | undefined)[]): string;
387
327
  getPayloads(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionStart?: number): string[];
388
- /**
389
- * For get intent from string, example: callbackData: "start:123:1" intent: "start"
390
- * @param str String
391
- * @param mtd Seperator
392
- * @param positionEnd Number
393
- * @returns Intent string
394
- */
395
328
  getIntent(str: string | undefined, mtd: Parameters<typeof this.getSeperatorTag>[0], positionEnd?: number): string;
396
- /**
397
- * Must be overrides if need this is just placeholder type
398
- * @for Only for transition page to other page
399
- * @param args Params
400
- */
401
329
  transition?(...args: any): Promise<any>;
402
330
  callback?(): Promise<any>;
403
331
  callbackPayload?(): Promise<any>;
@@ -1052,6 +980,7 @@ declare class WorkerThreadRpc {
1052
980
  declare class WorkerThreadLaunch {
1053
981
  path: string;
1054
982
  argv: any[];
983
+ register?: any | undefined;
1055
984
  static isMainThread: boolean;
1056
985
  private _readyResolve?;
1057
986
  private _readyPromise;
@@ -1059,7 +988,7 @@ declare class WorkerThreadLaunch {
1059
988
  thread: Worker;
1060
989
  threadId: number;
1061
990
  rpc: WorkerThreadRpc;
1062
- constructor(path: string, argv: any[]);
991
+ constructor(path: string, argv: any[], register?: any | undefined);
1063
992
  ready(): Promise<void>;
1064
993
  mtdReady(): void;
1065
994
  init(): void;
@@ -1072,9 +1001,9 @@ declare class WorkerThreadLaunch {
1072
1001
  declare class WorkerThreadGatewayServer {
1073
1002
  server: Server;
1074
1003
  rpc: Map<string, WorkerThreadRpc>;
1075
- methods: any;
1004
+ register: any;
1076
1005
  constructor();
1077
- start(path: string, methods?: any): Promise<unknown>;
1006
+ start(path: string, register?: any): Promise<unknown>;
1078
1007
  }
1079
1008
 
1080
1009
  declare class WorkerThreadGatewayClient {
@@ -1103,7 +1032,7 @@ declare class WorkerThreadInit {
1103
1032
  handleOnMessage(data: any): void;
1104
1033
  send(payload: any): void;
1105
1034
  request(method: string, params: any, _wait?: boolean, _others?: any): Promise<any>;
1106
- createGatewayServer(methods?: any, path?: string): Promise<boolean>;
1035
+ createGatewayServer(register?: any, path?: string): Promise<boolean>;
1107
1036
  createGatewayClient(serverPath: string): Promise<WorkerThreadGatewayClient>;
1108
1037
  }
1109
1038
 
package/dist/src/index.js CHANGED
@@ -8,4 +8,4 @@ var rt=Object.defineProperty;var p=(u,t)=>rt(u,"name",{value:t,configurable:!0})
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 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};
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,s){this.path=t;this.argv=e;this.register=s;this.init(),s||(s=this),this.rpc=new I(this.send.bind(this),s)}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;register={};constructor(){this.server.on("connect",t=>{let e=new I(s=>t.send(s),this.register);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.register=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.6",
3
+ "version": "0.5.8",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",