balda 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import wt from'path';import vo from'pino';import {Ajv,ValidationError}from'ajv';export{ValidationError}from'ajv';import xo from'fast-json-stringify';import {execSync}from'child_process';import*as rs from'readline';import {createRequire}from'module';import nn,{createHmac,timingSafeEqual,createHash}from'crypto';import {promisify}from'util';import {gzip,gunzip}from'zlib';import ct from'fs';import {Readable}from'stream';import {AsyncLocalStorage}from'async_hooks';import {createServer}from'http';import {createServer as createServer$1,createSecureServer}from'http2';import {createServer as createServer$2}from'https';import {pipeline}from'stream/promises';var ao=Object.create;var vt=Object.defineProperty;var es=Object.getOwnPropertyDescriptor;var co=Object.getOwnPropertyNames;var lo=Object.getPrototypeOf,po=Object.prototype.hasOwnProperty;var tr=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var uo=(o,e)=>()=>(o&&(e=o(o=0)),e);var mo=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),ho=(o,e)=>{for(var t in e)vt(o,t,{get:e[t],enumerable:true});},fo=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of co(e))!po.call(o,s)&&s!==t&&vt(o,s,{get:()=>e[s],enumerable:!(r=es(e,s))||r.enumerable});return o};var go=(o,e,t)=>(t=o!=null?ao(lo(o)):{},fo(vt(t,"default",{value:o,enumerable:true}),o));var T=(o,e,t,r)=>{for(var s=void 0,n=o.length-1,i;n>=0;n--)(i=o[n])&&(s=(i(e,t,s))||s);return s&&vt(e,t,s),s};var ts={};ho(ts,{runtime:()=>E});var rr,E,J=uo(()=>{rr=class{type;constructor(){this.type=this.getRunTime();}getRunTime(){if(typeof Bun<"u")return "bun";if(typeof Deno<"u")return "deno";if(typeof process<"u")return "node";throw new Error("No environment detected")}},E=new rr;});var bs=mo((Et,hr)=>{(function(e,t){typeof Et=="object"&&typeof hr=="object"?hr.exports=t():typeof define=="function"&&define.amd?define("cronstrue",[],t):typeof Et=="object"?Et.cronstrue=t():e.cronstrue=t();})(globalThis,()=>(()=>{var o={949:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.CronParser=void 0;var a=i(515),c=(function(){function p(l,d,u){d===void 0&&(d=true),u===void 0&&(u=false),this.expression=l,this.dayOfWeekStartIndexZero=d,this.monthStartIndexZero=u;}return p.prototype.parse=function(){var l,d,u=(l=this.expression)!==null&&l!==void 0?l:"";if(u==="@reboot")return d=["@reboot","","","","","",""],d;if(u.startsWith("@")){var m=this.parseSpecial(this.expression);d=this.extractParts(m);}else d=this.extractParts(this.expression);return this.normalize(d),this.validate(d),d},p.prototype.parseSpecial=function(l){var d={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *","@reboot":"@reboot"},u=d[l];if(!u)throw new Error("Unknown special expression.");return u},p.prototype.extractParts=function(l){if(!this.expression)throw new Error("cron expression is empty");for(var d=l.trim().split(/[ ]+/),u=0;u<d.length;u++)if(d[u].includes(",")){var m=d[u].split(",").map(function(f){return f.trim()}).filter(function(f){return f!==""}).map(function(f){return isNaN(Number(f))?f:Number(f)}).filter(function(f){return f!==null&&f!==""});m.length===0&&m.push("*"),m.sort(function(f,g){return f!==null&&g!==null?f-g:0}),d[u]=m.map(function(f){return f!==null?f.toString():""}).join(",");}if(d.length<5)throw new Error("Expression has only ".concat(d.length," part").concat(d.length==1?"":"s",". At least 5 parts are required."));if(d.length==5)d.unshift(""),d.push("");else if(d.length==6){var h=/\d{4}$/.test(d[5])||d[4]=="?"||d[2]=="?";h?d.unshift(""):d.push("");}else if(d.length>7)throw new Error("Expression has ".concat(d.length," parts; too many!"));return d},p.prototype.normalize=function(l){var d=this;if(l[3]=l[3].replace("?","*"),l[5]=l[5].replace("?","*"),l[2]=l[2].replace("?","*"),l[0].indexOf("0/")==0&&(l[0]=l[0].replace("0/","*/")),l[1].indexOf("0/")==0&&(l[1]=l[1].replace("0/","*/")),l[2].indexOf("0/")==0&&(l[2]=l[2].replace("0/","*/")),l[3].indexOf("1/")==0&&(l[3]=l[3].replace("1/","*/")),l[4].indexOf("1/")==0&&(l[4]=l[4].replace("1/","*/")),l[6].indexOf("1/")==0&&(l[6]=l[6].replace("1/","*/")),l[5]=l[5].replace(/(^\d)|([^#/\s]\d)/g,function(x){var w=x.replace(/\D/,""),b=w;return d.dayOfWeekStartIndexZero?w=="7"&&(b="0"):b=(parseInt(w)-1).toString(),x.replace(w,b)}),l[5]=="L"&&(l[5]="6"),l[3]=="?"&&(l[3]="*"),l[3].indexOf("W")>-1&&(l[3].indexOf(",")>-1||l[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var u={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var m in u)l[5]=l[5].replace(new RegExp(m,"gi"),u[m].toString());l[4]=l[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g,function(x){var w=x.replace(/\D/,""),b=w;return d.monthStartIndexZero&&(b=(parseInt(w)+1).toString()),x.replace(w,b)});var h={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var f in h)l[4]=l[4].replace(new RegExp(f,"gi"),h[f].toString());l[0]=="0"&&(l[0]=""),!/\*|\-|\,|\//.test(l[2])&&(/\*|\//.test(l[1])||/\*|\//.test(l[0]))&&(l[2]+="-".concat(l[2]));for(var g=0;g<l.length;g++)if(l[g].indexOf(",")!=-1&&(l[g]=l[g].split(",").filter(function(x){return x!==""}).join(",")||"*"),l[g]=="*/1"&&(l[g]="*"),l[g].indexOf("/")>-1&&!/^\*|\-|\,/.test(l[g])){var y=null;switch(g){case 4:y="12";break;case 5:y="6";break;case 6:y="9999";break;default:y=null;break}if(y!==null){var P=l[g].split("/");l[g]="".concat(P[0],"-").concat(y,"/").concat(P[1]);}}},p.prototype.validate=function(l){var d="0-9,\\-*/";this.validateOnlyExpectedCharactersFound(l[0],d),this.validateOnlyExpectedCharactersFound(l[1],d),this.validateOnlyExpectedCharactersFound(l[2],d),this.validateOnlyExpectedCharactersFound(l[3],"0-9,\\-*/LW"),this.validateOnlyExpectedCharactersFound(l[4],d),this.validateOnlyExpectedCharactersFound(l[5],"0-9,\\-*/L#"),this.validateOnlyExpectedCharactersFound(l[6],d),this.validateAnyRanges(l);},p.prototype.validateAnyRanges=function(l){a.default.secondRange(l[0]),a.default.minuteRange(l[1]),a.default.hourRange(l[2]),a.default.dayOfMonthRange(l[3]),a.default.monthRange(l[4],this.monthStartIndexZero),a.default.dayOfWeekRange(l[5],this.dayOfWeekStartIndexZero);},p.prototype.validateOnlyExpectedCharactersFound=function(l,d){var u=l.match(new RegExp("[^".concat(d,"]+"),"gi"));if(u&&u.length)throw new Error("Expression contains invalid values: '".concat(u.toString(),"'"))},p})();n.CronParser=c;}),333:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.ExpressionDescriptor=void 0;var a=i(823),c=i(949),p=(function(){function l(d,u){if(this.expression=d,this.options=u,this.expressionParts=new Array(5),!this.options.locale&&l.defaultLocale&&(this.options.locale=l.defaultLocale),!l.locales[this.options.locale]){var m=Object.keys(l.locales)[0];console.warn("Locale '".concat(this.options.locale,"' could not be found; falling back to '").concat(m,"'.")),this.options.locale=m;}this.i18n=l.locales[this.options.locale],u.use24HourTimeFormat===void 0&&(u.use24HourTimeFormat=this.i18n.use24HourTimeFormatByDefault());}return l.toString=function(d,u){var m=u===void 0?{}:u,h=m.throwExceptionOnParseError,f=h===void 0?true:h,g=m.verbose,y=g===void 0?false:g,P=m.dayOfWeekStartIndexZero,x=P===void 0?true:P,w=m.monthStartIndexZero,b=w===void 0?false:w,q=m.use24HourTimeFormat,A=m.locale,B=A===void 0?null:A,I=m.logicalAndDayFields,G=I===void 0?false:I,te={throwExceptionOnParseError:f,verbose:y,dayOfWeekStartIndexZero:x,monthStartIndexZero:b,use24HourTimeFormat:q,locale:B,logicalAndDayFields:G};te.tzOffset&&console.warn("'tzOffset' option has been deprecated and is no longer supported.");var Ie=new l(d,te);return Ie.getFullDescription()},l.initialize=function(d,u){u===void 0&&(u="en"),l.specialCharacters=["/","-",",","*"],l.defaultLocale=u,d.load(l.locales);},l.prototype.getFullDescription=function(){var d,u,m="";try{var h=new c.CronParser(this.expression,this.options.dayOfWeekStartIndexZero,this.options.monthStartIndexZero);if(this.expressionParts=h.parse(),this.expressionParts[0]==="@reboot")return ((u=(d=this.i18n).atReboot)===null||u===void 0?void 0:u.call(d))||"Run once, at startup";var f=this.getTimeOfDayDescription(),g=this.getDayOfMonthDescription(),y=this.getMonthDescription(),P=this.getDayOfWeekDescription(),x=this.getYearDescription();m+=f+g+P+y+x,m=this.transformVerbosity(m,!!this.options.verbose),m=m.charAt(0).toLocaleUpperCase()+m.substr(1);}catch(w){if(!this.options.throwExceptionOnParseError)m=this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();else throw "".concat(w)}return m},l.prototype.getTimeOfDayDescription=function(){var d=this.expressionParts[0],u=this.expressionParts[1],m=this.expressionParts[2],h="";if(!a.StringUtilities.containsAny(u,l.specialCharacters)&&!a.StringUtilities.containsAny(m,l.specialCharacters)&&!a.StringUtilities.containsAny(d,l.specialCharacters))h+=this.i18n.atSpace()+this.formatTime(m,u,d);else if(!d&&u.indexOf("-")>-1&&!(u.indexOf(",")>-1)&&!(u.indexOf("/")>-1)&&!a.StringUtilities.containsAny(m,l.specialCharacters)){var f=u.split("-");h+=a.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(),this.formatTime(m,f[0],""),this.formatTime(m,f[1],""));}else if(!d&&m.indexOf(",")>-1&&m.indexOf("-")==-1&&m.indexOf("/")==-1&&!a.StringUtilities.containsAny(u,l.specialCharacters)){var g=m.split(",");h+=this.i18n.at();for(var y=0;y<g.length;y++)h+=" ",h+=this.formatTime(g[y],u,""),y<g.length-2&&(h+=","),y==g.length-2&&(h+=this.i18n.spaceAnd());}else {var P=this.getSecondsDescription(),x=this.getMinutesDescription(),w=this.getHoursDescription();if(h+=P,h&&x&&(h+=", "),h+=x,x===w)return h;h&&w&&(h+=", "),h+=w;}return h},l.prototype.getSecondsDescription=function(){var d=this,u=this.getSegmentDescription(this.expressionParts[0],this.i18n.everySecond(),function(m){return m},function(m){return a.StringUtilities.format(d.i18n.everyX0Seconds(m),m)},function(m){return d.i18n.secondsX0ThroughX1PastTheMinute()},function(m){return m=="0"?"":parseInt(m)<20?d.i18n.atX0SecondsPastTheMinute(m):d.i18n.atX0SecondsPastTheMinuteGt20()||d.i18n.atX0SecondsPastTheMinute(m)});return u},l.prototype.getMinutesDescription=function(){var d=this,u=this.expressionParts[0],m=this.expressionParts[2],h=this.getSegmentDescription(this.expressionParts[1],this.i18n.everyMinute(),function(f){return f},function(f){return a.StringUtilities.format(d.i18n.everyX0Minutes(f),f)},function(f){return d.i18n.minutesX0ThroughX1PastTheHour()},function(f){try{return f=="0"&&m.indexOf("/")==-1&&u==""?d.i18n.everyHour():parseInt(f)<20?d.i18n.atX0MinutesPastTheHour(f):d.i18n.atX0MinutesPastTheHourGt20()||d.i18n.atX0MinutesPastTheHour(f)}catch{return d.i18n.atX0MinutesPastTheHour(f)}});return h},l.prototype.getHoursDescription=function(){var d=this,u=this.expressionParts[2],m=0,h=[];u.split("/")[0].split(",").forEach(function(y){var P=y.split("-");P.length===2&&h.push({value:P[1],index:m+1}),m+=P.length;});var f=0,g=this.getSegmentDescription(u,this.i18n.everyHour(),function(y){var P=h.find(function(w){return w.value===y&&w.index===f}),x=P&&d.expressionParts[1]!=="0";return f++,x?d.formatTime(y,"59",""):d.formatTime(y,"0","")},function(y){return a.StringUtilities.format(d.i18n.everyX0Hours(y),y)},function(y){return d.i18n.betweenX0AndX1()},function(y){return d.i18n.atX0()});return g},l.prototype.getDayOfWeekDescription=function(){var d=this,u=this.i18n.daysOfTheWeek(),m=null;return this.expressionParts[5]=="*"?m="":m=this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),function(h,f){var g=h;h.indexOf("#")>-1?g=h.substring(0,h.indexOf("#")):h.indexOf("L")>-1&&(g=g.replace("L",""));var y=parseInt(g),P=d.i18n.daysOfTheWeekInCase?d.i18n.daysOfTheWeekInCase(f)[y]:u[y];if(h.indexOf("#")>-1){var x=null,w=h.substring(h.indexOf("#")+1),b=h.substring(0,h.indexOf("#"));switch(w){case "1":x=d.i18n.first(b);break;case "2":x=d.i18n.second(b);break;case "3":x=d.i18n.third(b);break;case "4":x=d.i18n.fourth(b);break;case "5":x=d.i18n.fifth(b);break}P=x+" "+P;}return P},function(h){return parseInt(h)==1?"":a.StringUtilities.format(d.i18n.commaEveryX0DaysOfTheWeek(h),h)},function(h){var f=h.substring(0,h.indexOf("-")),g=d.expressionParts[3]!="*";return g?d.i18n.commaAndX0ThroughX1(f):d.i18n.commaX0ThroughX1(f)},function(h){var f=null;if(h.indexOf("#")>-1){var g=h.substring(h.indexOf("#")+1),y=h.substring(0,h.indexOf("#"));f=d.i18n.commaOnThe(g,y).trim()+d.i18n.spaceX0OfTheMonth();}else if(h.indexOf("L")>-1)f=d.i18n.commaOnTheLastX0OfTheMonth(h.replace("L",""));else {var P=d.expressionParts[3]!="*";P?d.options.logicalAndDayFields?f=d.i18n.commaOnlyOnX0(h):f=d.i18n.commaAndOnX0():f=d.i18n.commaOnlyOnX0(h);}return f}),m},l.prototype.getMonthDescription=function(){var d=this,u=this.i18n.monthsOfTheYear(),m=this.getSegmentDescription(this.expressionParts[4],"",function(h,f){return f&&d.i18n.monthsOfTheYearInCase?d.i18n.monthsOfTheYearInCase(f)[parseInt(h)-1]:u[parseInt(h)-1]},function(h){return parseInt(h)==1?"":a.StringUtilities.format(d.i18n.commaEveryX0Months(h),h)},function(h){return d.i18n.commaMonthX0ThroughMonthX1()||d.i18n.commaX0ThroughX1()},function(h){return d.i18n.commaOnlyInMonthX0?d.i18n.commaOnlyInMonthX0():d.i18n.commaOnlyInX0()});return m},l.prototype.getDayOfMonthDescription=function(){var d=this,u=null,m=this.expressionParts[3];switch(m){case "L":u=this.i18n.commaOnTheLastDayOfTheMonth();break;case "WL":case "LW":u=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var h=m.match(/(\d{1,2}W)|(W\d{1,2})/);if(h){var f=parseInt(h[0].replace("W","")),g=f==1?this.i18n.firstWeekday():a.StringUtilities.format(this.i18n.weekdayNearestDayX0(),f.toString());u=a.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),g);break}else {var y=m.match(/L-(\d{1,2})/);if(y){var P=y[1];u=a.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(P),P);break}else {if(m=="*"&&this.expressionParts[5]!="*")return "";u=this.getSegmentDescription(m,this.i18n.commaEveryDay(),function(x){return x=="L"?d.i18n.lastDay():d.i18n.dayX0?a.StringUtilities.format(d.i18n.dayX0(),x):x},function(x){return x=="1"?d.i18n.commaEveryDay():d.i18n.commaEveryX0Days(x)},function(x){return d.i18n.commaBetweenDayX0AndX1OfTheMonth(x)},function(x){return d.i18n.commaOnDayX0OfTheMonth(x)});}break}}return u},l.prototype.getYearDescription=function(){var d=this,u=this.getSegmentDescription(this.expressionParts[6],"",function(m){return /^\d+$/.test(m)?new Date(parseInt(m),1).getFullYear().toString():m},function(m){return a.StringUtilities.format(d.i18n.commaEveryX0Years(m),m)},function(m){return d.i18n.commaYearX0ThroughYearX1()||d.i18n.commaX0ThroughX1()},function(m){return d.i18n.commaOnlyInYearX0?d.i18n.commaOnlyInYearX0():d.i18n.commaOnlyInX0()});return u},l.prototype.getSegmentDescription=function(d,u,m,h,f,g){var y=null,P=d.indexOf("/")>-1,x=d.indexOf("-")>-1,w=d.indexOf(",")>-1;if(!d)y="";else if(d==="*")y=u;else if(!P&&!x&&!w)y=a.StringUtilities.format(g(d),m(d));else if(w){for(var b=d.split(","),q="",A=0;A<b.length;A++)if(A>0&&b.length>2&&(q+=",",A<b.length-1&&(q+=" ")),A>0&&b.length>1&&(A==b.length-1||b.length==2)&&(q+="".concat(this.i18n.spaceAnd()," ")),b[A].indexOf("/")>-1||b[A].indexOf("-")>-1){var B=b[A].indexOf("-")>-1&&b[A].indexOf("/")==-1,I=this.getSegmentDescription(b[A],u,m,h,B?this.i18n.commaX0ThroughX1:f,g);B&&(I=I.replace(", ","")),q+=I;}else P?q+=this.getSegmentDescription(b[A],u,m,h,f,g):q+=m(b[A]);P?y=q:y=a.StringUtilities.format(g(d),q);}else if(P){var b=d.split("/");if(y=a.StringUtilities.format(h(b[1]),b[1]),b[0].indexOf("-")>-1){var G=this.generateRangeSegmentDescription(b[0],f,m);G.indexOf(", ")!=0&&(y+=", "),y+=G;}else if(b[0].indexOf("*")==-1){var te=a.StringUtilities.format(g(b[0]),m(b[0]));te=te.replace(", ",""),y+=a.StringUtilities.format(this.i18n.commaStartingX0(),te);}}else x&&(y=this.generateRangeSegmentDescription(d,f,m));return y},l.prototype.generateRangeSegmentDescription=function(d,u,m){var h="",f=d.split("-"),g=m(f[0],1),y=m(f[1],2),P=u(d);return h+=a.StringUtilities.format(P,g,y),h},l.prototype.formatTime=function(d,u,m){var h=0,f=0,g=parseInt(d)+h,y=parseInt(u)+f;y>=60?(y-=60,g+=1):y<0&&(y+=60,g-=1),g>=24?g=g-24:g<0&&(g=24+g);var P="",x=false;this.options.use24HourTimeFormat||(x=!!(this.i18n.setPeriodBeforeTime&&this.i18n.setPeriodBeforeTime()),P=x?"".concat(this.getPeriod(g)," "):" ".concat(this.getPeriod(g)),g>12&&(g-=12),g===0&&(g=12));var w="";return m&&(w=":".concat(("00"+m).substring(m.length))),"".concat(x?P:"").concat(("00"+g.toString()).substring(g.toString().length),":").concat(("00"+y.toString()).substring(y.toString().length)).concat(w).concat(x?"":P)},l.prototype.transformVerbosity=function(d,u){if(!u&&(d=d.replace(new RegExp(", ".concat(this.i18n.everyMinute()),"g"),""),d=d.replace(new RegExp(", ".concat(this.i18n.everyHour()),"g"),""),d=d.replace(new RegExp(this.i18n.commaEveryDay(),"g"),""),d=d.replace(/\, ?$/,""),this.i18n.conciseVerbosityReplacements))for(var m=0,h=Object.entries(this.i18n.conciseVerbosityReplacements());m<h.length;m++){var f=h[m],g=f[0],y=f[1];d=d.replace(new RegExp(g,"g"),y);}return d},l.prototype.getPeriod=function(d){return d>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},l.locales={},l})();n.ExpressionDescriptor=p;}),747:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.enLocaleLoader=void 0;var a=i(486),c=(function(){function p(){}return p.prototype.load=function(l){l.en=new a.en;},p})();n.enLocaleLoader=c;}),486:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true}),n.en=void 0;var i=(function(){function a(){}return a.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},a.prototype.atX0MinutesPastTheHourGt20=function(){return null},a.prototype.commaMonthX0ThroughMonthX1=function(){return null},a.prototype.commaYearX0ThroughYearX1=function(){return null},a.prototype.use24HourTimeFormatByDefault=function(){return false},a.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return "An error occurred when generating the expression description. Check the cron expression syntax."},a.prototype.everyMinute=function(){return "every minute"},a.prototype.everyHour=function(){return "every hour"},a.prototype.atSpace=function(){return "At "},a.prototype.everyMinuteBetweenX0AndX1=function(){return "Every minute between %s and %s"},a.prototype.at=function(){return "At"},a.prototype.spaceAnd=function(){return " and"},a.prototype.everySecond=function(){return "every second"},a.prototype.everyX0Seconds=function(){return "every %s seconds"},a.prototype.secondsX0ThroughX1PastTheMinute=function(){return "seconds %s through %s past the minute"},a.prototype.atX0SecondsPastTheMinute=function(){return "at %s seconds past the minute"},a.prototype.everyX0Minutes=function(){return "every %s minutes"},a.prototype.minutesX0ThroughX1PastTheHour=function(){return "minutes %s through %s past the hour"},a.prototype.atX0MinutesPastTheHour=function(){return "at %s minutes past the hour"},a.prototype.everyX0Hours=function(){return "every %s hours"},a.prototype.betweenX0AndX1=function(){return "between %s and %s"},a.prototype.atX0=function(){return "at %s"},a.prototype.commaEveryDay=function(){return ", every day"},a.prototype.commaEveryX0DaysOfTheWeek=function(){return ", every %s days of the week"},a.prototype.commaX0ThroughX1=function(){return ", %s through %s"},a.prototype.commaAndX0ThroughX1=function(){return ", %s through %s"},a.prototype.first=function(){return "first"},a.prototype.second=function(){return "second"},a.prototype.third=function(){return "third"},a.prototype.fourth=function(){return "fourth"},a.prototype.fifth=function(){return "fifth"},a.prototype.commaOnThe=function(){return ", on the "},a.prototype.spaceX0OfTheMonth=function(){return " %s of the month"},a.prototype.lastDay=function(){return "the last day"},a.prototype.commaOnTheLastX0OfTheMonth=function(){return ", on the last %s of the month"},a.prototype.commaOnlyOnX0=function(){return ", only on %s"},a.prototype.commaAndOnX0=function(){return ", and on %s"},a.prototype.commaEveryX0Months=function(){return ", every %s months"},a.prototype.commaOnlyInX0=function(){return ", only in %s"},a.prototype.commaOnTheLastDayOfTheMonth=function(){return ", on the last day of the month"},a.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return ", on the last weekday of the month"},a.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return ", %s days before the last day of the month"},a.prototype.firstWeekday=function(){return "first weekday"},a.prototype.weekdayNearestDayX0=function(){return "weekday nearest day %s"},a.prototype.commaOnTheX0OfTheMonth=function(){return ", on the %s of the month"},a.prototype.commaEveryX0Days=function(){return ", every %s days"},a.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return ", between day %s and %s of the month"},a.prototype.commaOnDayX0OfTheMonth=function(){return ", on day %s of the month"},a.prototype.commaEveryHour=function(){return ", every hour"},a.prototype.commaEveryX0Years=function(){return ", every %s years"},a.prototype.commaStartingX0=function(){return ", starting %s"},a.prototype.daysOfTheWeek=function(){return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},a.prototype.monthsOfTheYear=function(){return ["January","February","March","April","May","June","July","August","September","October","November","December"]},a.prototype.atReboot=function(){return "Run once, at startup"},a})();n.en=i;}),515:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true});function i(c,p){if(!c)throw new Error(p)}var a=(function(){function c(){}return c.secondRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=59,"seconds part must be >= 0 and <= 59");}},c.minuteRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=59,"minutes part must be >= 0 and <= 59");}},c.hourRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=23,"hours part must be >= 0 and <= 23");}},c.dayOfMonthRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=1&&u<=31,"DOM part must be >= 1 and <= 31");}},c.monthRange=function(p,l){for(var d=p.split(","),u=0;u<d.length;u++)if(!isNaN(parseInt(d[u],10))){var m=parseInt(d[u],10);i(m>=1&&m<=12,l?"month part must be >= 0 and <= 11":"month part must be >= 1 and <= 12");}},c.dayOfWeekRange=function(p,l){for(var d=p.split(","),u=0;u<d.length;u++)if(!isNaN(parseInt(d[u],10))){var m=parseInt(d[u],10);i(m>=0&&m<=6,l?"DOW part must be >= 0 and <= 6":"DOW part must be >= 1 and <= 7");}},c})();n.default=a;}),823:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true}),n.StringUtilities=void 0;var i=(function(){function a(){}return a.format=function(c){for(var p=[],l=1;l<arguments.length;l++)p[l-1]=arguments[l];return c.replace(/%s/g,function(d){for(var u=[],m=1;m<arguments.length;m++)u[m-1]=arguments[m];return p.shift()})},a.containsAny=function(c,p){return p.some(function(l){return c.indexOf(l)>-1})},a})();n.StringUtilities=i;})},e={};function t(s){var n=e[s];if(n!==void 0)return n.exports;var i=e[s]={exports:{}};return o[s](i,i.exports,t),i.exports}var r={};return (()=>{var s=r;Object.defineProperty(s,"__esModule",{value:true}),s.toString=void 0;var n=t(333),i=t(747);n.ExpressionDescriptor.initialize(new i.enLocaleLoader),s.default=n.ExpressionDescriptor;var a=n.ExpressionDescriptor.toString;s.toString=a;})(),r})());});var O=class{static metadata=new WeakMap;static set(e,t,r){this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e).set(t,r);}static get(e,t){return this.metadata.get(e)?.get(t)}static getAll(e){return this.metadata.get(e)}static getOrCreateAll(e){return this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e)}static delete(e,t){this.metadata.get(e)?.delete(t);}static clear(e){this.metadata.delete(e);}};var yo=o=>(e,t,r)=>{let s=O.get(e,t);return s||(s={middlewares:[]}),s.cacheConfig=o,O.set(e,t,s),r};J();J();var sr=class{getCwd(){switch(E.type){case "node":case "bun":return process.cwd();case "deno":return Deno.cwd();default:throw new Error("Unsupported runtime")}}},L=new sr;J();var or=class{basename(e){switch(E.type){case "node":case "bun":case "deno":return wt.basename(e);default:throw new Error("Unsupported runtime")}}join(...e){switch(E.type){case "node":case "bun":case "deno":return wt.join(...e);default:throw new Error("Unsupported runtime")}}extName(e){switch(E.type){case "bun":case "node":case "deno":return wt.extname(e);default:throw new Error("Unsupported runtime")}}resolve(...e){switch(E.type){case "bun":case "node":case "deno":return wt.resolve(...e);default:throw new Error("Unsupported runtime")}}},S=new or;var nr=class{async glob(...e){let t=await import('fs/promises'),r=L.getCwd(),s=S.resolve(r,e[1]?.cwd??""),n=[];for await(let i of t.glob(...e)){if(typeof i=="string"){n.push(S.resolve(s,i));continue}i.isFile()&&n.push(S.resolve(s,i.name));}return n}async mkdir(e,t){switch(E.type){case "bun":case "node":await(await import('fs/promises')).mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break;case "deno":typeof t?.mode=="string"&&(t.mode=Number.parseInt(t.mode)),await Deno.mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break}}async exists(e){switch(E.type){case "node":return (await import('fs')).existsSync(e);case "bun":return (await import('fs')).existsSync(e);case "deno":return Deno.stat(e).then(()=>true).catch(()=>false);default:throw new Error("Unsupported runtime")}}async readFile(e,t){switch(E.type){case "node":let s=await(await import('fs/promises')).readFile(e,{encoding:t?.encoding??null});return t?.encoding==="utf8"?s:new Uint8Array(s);case "bun":let n=Bun.file(e);return t?.encoding==="utf8"?n.text():new Uint8Array(await n.arrayBuffer());case "deno":let i=await Deno.readFile(e);return t?.encoding==="utf8"?new TextDecoder().decode(i):new Uint8Array(i)}}async writeFile(e,t){switch(E.type){case "node":await(await import('fs/promises')).writeFile(e,t);break;case "bun":await Bun.write(e,t);break;case "deno":await Deno.writeFile(e,t);break}}async stat(e){switch(E.type){case "node":let r=await(await import('fs/promises')).stat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).stat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.stat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:false,size:i.size}}}async lstat(e){switch(E.type){case "node":let r=await(await import('fs/promises')).lstat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).lstat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.lstat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:i.isSymlink,size:i.size}}}async unlink(e){switch(E.type){case "node":await(await import('fs/promises')).unlink(e);break;case "bun":await Bun.file(e).delete();break;case "deno":await Deno.remove(e);break;default:throw new Error("Unsupported runtime")}}async streamFile(e){switch(E.type){case "node":let t=await import('fs'),{Readable:r}=await import('stream'),s=t.createReadStream(e);return r.toWeb(s);case "bun":return Bun.file(e).stream();case "deno":return (await Deno.open(e)).readable;default:throw new Error("Unsupported runtime")}}async readdir(e){switch(E.type){case "bun":case "node":return (await import('fs/promises')).readdir(e);case "deno":let r=[];for await(let s of Deno.readDir(e))r.push(s.name);return r;default:throw new Error("Unsupported runtime")}}},v=new nr;var R=class extends Error{constructor(e){super(e);}};var wo=()=>vo({level:"info",formatters:{level:e=>({level:e})}}),M=wo();var bt=class extends R{constructor(e){super(`Failed to convert Zod schema to JSON Schema. This usually happens when using Zod v3 schemas with Zod v4. Make sure you're importing from 'zod' (v4) and not 'zod/v3'. Original error: ${e.message}`);}};var Le=class extends R{constructor(){super("Zod v4 is required with the toJSONSchema() method. Install it with: npm install zod@^4.0.0");}};var St=typeof import.meta<"u"?createRequire(import.meta.url):tr("module").createRequire?.(import.meta?.url??__filename)??tr,de=async o=>{let e=S.join(process.cwd(),"node_modules");if(!await v.exists(e))return o;let r=[];for(let s of o){let n=S.join(e,s);await v.exists(n)||r.push(s);}return r},V=async()=>await v.exists(S.join(process.cwd(),"yarn.lock"))?["yarn","add","-D"]:await v.exists(S.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add","-D"]:await v.exists(S.join(process.cwd(),"package-lock.json"))?["npm","install","-D"]:await v.exists(S.join(process.cwd(),"bun.lockb"))||await v.exists(S.join(process.cwd(),"bun.lock"))?["bun","add","-D"]:await v.exists(S.join(process.cwd(),"deno.lock"))?["deno","add","-D"]:["npm","install","-D"],Q=async(o,e,t,r,s=true)=>{let n=rs.createInterface({input:process.stdin,output:process.stdout}),i=t.join(", "),a=`Do you want to install the following ${s?"dev":""} dependencies using ${e}?
1
+ import wt from'path';import vo from'pino';import {Ajv,ValidationError}from'ajv';export{ValidationError}from'ajv';import To from'fast-json-stringify';import {execSync}from'child_process';import*as rs from'readline';import {createRequire}from'module';import an,{createHmac,timingSafeEqual,createHash}from'crypto';import {promisify}from'util';import {gzip,gunzip}from'zlib';import ct from'fs';import {Readable}from'stream';import {AsyncLocalStorage}from'async_hooks';import {createServer}from'http';import {createServer as createServer$1,createSecureServer}from'http2';import {createServer as createServer$2}from'https';import {pipeline}from'stream/promises';var ao=Object.create;var vt=Object.defineProperty;var es=Object.getOwnPropertyDescriptor;var co=Object.getOwnPropertyNames;var lo=Object.getPrototypeOf,po=Object.prototype.hasOwnProperty;var tr=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var uo=(o,e)=>()=>(o&&(e=o(o=0)),e);var mo=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),ho=(o,e)=>{for(var t in e)vt(o,t,{get:e[t],enumerable:true});},fo=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of co(e))!po.call(o,s)&&s!==t&&vt(o,s,{get:()=>e[s],enumerable:!(r=es(e,s))||r.enumerable});return o};var go=(o,e,t)=>(t=o!=null?ao(lo(o)):{},fo(vt(t,"default",{value:o,enumerable:true}),o));var T=(o,e,t,r)=>{for(var s=void 0,n=o.length-1,i;n>=0;n--)(i=o[n])&&(s=(i(e,t,s))||s);return s&&vt(e,t,s),s};var ts={};ho(ts,{runtime:()=>E});var rr,E,J=uo(()=>{rr=class{type;constructor(){this.type=this.getRunTime();}getRunTime(){if(typeof Bun<"u")return "bun";if(typeof Deno<"u")return "deno";if(typeof process<"u")return "node";throw new Error("No environment detected")}},E=new rr;});var bs=mo((Et,hr)=>{(function(e,t){typeof Et=="object"&&typeof hr=="object"?hr.exports=t():typeof define=="function"&&define.amd?define("cronstrue",[],t):typeof Et=="object"?Et.cronstrue=t():e.cronstrue=t();})(globalThis,()=>(()=>{var o={949:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.CronParser=void 0;var a=i(515),c=(function(){function p(l,d,u){d===void 0&&(d=true),u===void 0&&(u=false),this.expression=l,this.dayOfWeekStartIndexZero=d,this.monthStartIndexZero=u;}return p.prototype.parse=function(){var l,d,u=(l=this.expression)!==null&&l!==void 0?l:"";if(u==="@reboot")return d=["@reboot","","","","","",""],d;if(u.startsWith("@")){var m=this.parseSpecial(this.expression);d=this.extractParts(m);}else d=this.extractParts(this.expression);return this.normalize(d),this.validate(d),d},p.prototype.parseSpecial=function(l){var d={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *","@reboot":"@reboot"},u=d[l];if(!u)throw new Error("Unknown special expression.");return u},p.prototype.extractParts=function(l){if(!this.expression)throw new Error("cron expression is empty");for(var d=l.trim().split(/[ ]+/),u=0;u<d.length;u++)if(d[u].includes(",")){var m=d[u].split(",").map(function(f){return f.trim()}).filter(function(f){return f!==""}).map(function(f){return isNaN(Number(f))?f:Number(f)}).filter(function(f){return f!==null&&f!==""});m.length===0&&m.push("*"),m.sort(function(f,g){return f!==null&&g!==null?f-g:0}),d[u]=m.map(function(f){return f!==null?f.toString():""}).join(",");}if(d.length<5)throw new Error("Expression has only ".concat(d.length," part").concat(d.length==1?"":"s",". At least 5 parts are required."));if(d.length==5)d.unshift(""),d.push("");else if(d.length==6){var h=/\d{4}$/.test(d[5])||d[4]=="?"||d[2]=="?";h?d.unshift(""):d.push("");}else if(d.length>7)throw new Error("Expression has ".concat(d.length," parts; too many!"));return d},p.prototype.normalize=function(l){var d=this;if(l[3]=l[3].replace("?","*"),l[5]=l[5].replace("?","*"),l[2]=l[2].replace("?","*"),l[0].indexOf("0/")==0&&(l[0]=l[0].replace("0/","*/")),l[1].indexOf("0/")==0&&(l[1]=l[1].replace("0/","*/")),l[2].indexOf("0/")==0&&(l[2]=l[2].replace("0/","*/")),l[3].indexOf("1/")==0&&(l[3]=l[3].replace("1/","*/")),l[4].indexOf("1/")==0&&(l[4]=l[4].replace("1/","*/")),l[6].indexOf("1/")==0&&(l[6]=l[6].replace("1/","*/")),l[5]=l[5].replace(/(^\d)|([^#/\s]\d)/g,function(x){var w=x.replace(/\D/,""),b=w;return d.dayOfWeekStartIndexZero?w=="7"&&(b="0"):b=(parseInt(w)-1).toString(),x.replace(w,b)}),l[5]=="L"&&(l[5]="6"),l[3]=="?"&&(l[3]="*"),l[3].indexOf("W")>-1&&(l[3].indexOf(",")>-1||l[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var u={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var m in u)l[5]=l[5].replace(new RegExp(m,"gi"),u[m].toString());l[4]=l[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g,function(x){var w=x.replace(/\D/,""),b=w;return d.monthStartIndexZero&&(b=(parseInt(w)+1).toString()),x.replace(w,b)});var h={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var f in h)l[4]=l[4].replace(new RegExp(f,"gi"),h[f].toString());l[0]=="0"&&(l[0]=""),!/\*|\-|\,|\//.test(l[2])&&(/\*|\//.test(l[1])||/\*|\//.test(l[0]))&&(l[2]+="-".concat(l[2]));for(var g=0;g<l.length;g++)if(l[g].indexOf(",")!=-1&&(l[g]=l[g].split(",").filter(function(x){return x!==""}).join(",")||"*"),l[g]=="*/1"&&(l[g]="*"),l[g].indexOf("/")>-1&&!/^\*|\-|\,/.test(l[g])){var y=null;switch(g){case 4:y="12";break;case 5:y="6";break;case 6:y="9999";break;default:y=null;break}if(y!==null){var P=l[g].split("/");l[g]="".concat(P[0],"-").concat(y,"/").concat(P[1]);}}},p.prototype.validate=function(l){var d="0-9,\\-*/";this.validateOnlyExpectedCharactersFound(l[0],d),this.validateOnlyExpectedCharactersFound(l[1],d),this.validateOnlyExpectedCharactersFound(l[2],d),this.validateOnlyExpectedCharactersFound(l[3],"0-9,\\-*/LW"),this.validateOnlyExpectedCharactersFound(l[4],d),this.validateOnlyExpectedCharactersFound(l[5],"0-9,\\-*/L#"),this.validateOnlyExpectedCharactersFound(l[6],d),this.validateAnyRanges(l);},p.prototype.validateAnyRanges=function(l){a.default.secondRange(l[0]),a.default.minuteRange(l[1]),a.default.hourRange(l[2]),a.default.dayOfMonthRange(l[3]),a.default.monthRange(l[4],this.monthStartIndexZero),a.default.dayOfWeekRange(l[5],this.dayOfWeekStartIndexZero);},p.prototype.validateOnlyExpectedCharactersFound=function(l,d){var u=l.match(new RegExp("[^".concat(d,"]+"),"gi"));if(u&&u.length)throw new Error("Expression contains invalid values: '".concat(u.toString(),"'"))},p})();n.CronParser=c;}),333:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.ExpressionDescriptor=void 0;var a=i(823),c=i(949),p=(function(){function l(d,u){if(this.expression=d,this.options=u,this.expressionParts=new Array(5),!this.options.locale&&l.defaultLocale&&(this.options.locale=l.defaultLocale),!l.locales[this.options.locale]){var m=Object.keys(l.locales)[0];console.warn("Locale '".concat(this.options.locale,"' could not be found; falling back to '").concat(m,"'.")),this.options.locale=m;}this.i18n=l.locales[this.options.locale],u.use24HourTimeFormat===void 0&&(u.use24HourTimeFormat=this.i18n.use24HourTimeFormatByDefault());}return l.toString=function(d,u){var m=u===void 0?{}:u,h=m.throwExceptionOnParseError,f=h===void 0?true:h,g=m.verbose,y=g===void 0?false:g,P=m.dayOfWeekStartIndexZero,x=P===void 0?true:P,w=m.monthStartIndexZero,b=w===void 0?false:w,q=m.use24HourTimeFormat,A=m.locale,B=A===void 0?null:A,I=m.logicalAndDayFields,G=I===void 0?false:I,te={throwExceptionOnParseError:f,verbose:y,dayOfWeekStartIndexZero:x,monthStartIndexZero:b,use24HourTimeFormat:q,locale:B,logicalAndDayFields:G};te.tzOffset&&console.warn("'tzOffset' option has been deprecated and is no longer supported.");var Ie=new l(d,te);return Ie.getFullDescription()},l.initialize=function(d,u){u===void 0&&(u="en"),l.specialCharacters=["/","-",",","*"],l.defaultLocale=u,d.load(l.locales);},l.prototype.getFullDescription=function(){var d,u,m="";try{var h=new c.CronParser(this.expression,this.options.dayOfWeekStartIndexZero,this.options.monthStartIndexZero);if(this.expressionParts=h.parse(),this.expressionParts[0]==="@reboot")return ((u=(d=this.i18n).atReboot)===null||u===void 0?void 0:u.call(d))||"Run once, at startup";var f=this.getTimeOfDayDescription(),g=this.getDayOfMonthDescription(),y=this.getMonthDescription(),P=this.getDayOfWeekDescription(),x=this.getYearDescription();m+=f+g+P+y+x,m=this.transformVerbosity(m,!!this.options.verbose),m=m.charAt(0).toLocaleUpperCase()+m.substr(1);}catch(w){if(!this.options.throwExceptionOnParseError)m=this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();else throw "".concat(w)}return m},l.prototype.getTimeOfDayDescription=function(){var d=this.expressionParts[0],u=this.expressionParts[1],m=this.expressionParts[2],h="";if(!a.StringUtilities.containsAny(u,l.specialCharacters)&&!a.StringUtilities.containsAny(m,l.specialCharacters)&&!a.StringUtilities.containsAny(d,l.specialCharacters))h+=this.i18n.atSpace()+this.formatTime(m,u,d);else if(!d&&u.indexOf("-")>-1&&!(u.indexOf(",")>-1)&&!(u.indexOf("/")>-1)&&!a.StringUtilities.containsAny(m,l.specialCharacters)){var f=u.split("-");h+=a.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(),this.formatTime(m,f[0],""),this.formatTime(m,f[1],""));}else if(!d&&m.indexOf(",")>-1&&m.indexOf("-")==-1&&m.indexOf("/")==-1&&!a.StringUtilities.containsAny(u,l.specialCharacters)){var g=m.split(",");h+=this.i18n.at();for(var y=0;y<g.length;y++)h+=" ",h+=this.formatTime(g[y],u,""),y<g.length-2&&(h+=","),y==g.length-2&&(h+=this.i18n.spaceAnd());}else {var P=this.getSecondsDescription(),x=this.getMinutesDescription(),w=this.getHoursDescription();if(h+=P,h&&x&&(h+=", "),h+=x,x===w)return h;h&&w&&(h+=", "),h+=w;}return h},l.prototype.getSecondsDescription=function(){var d=this,u=this.getSegmentDescription(this.expressionParts[0],this.i18n.everySecond(),function(m){return m},function(m){return a.StringUtilities.format(d.i18n.everyX0Seconds(m),m)},function(m){return d.i18n.secondsX0ThroughX1PastTheMinute()},function(m){return m=="0"?"":parseInt(m)<20?d.i18n.atX0SecondsPastTheMinute(m):d.i18n.atX0SecondsPastTheMinuteGt20()||d.i18n.atX0SecondsPastTheMinute(m)});return u},l.prototype.getMinutesDescription=function(){var d=this,u=this.expressionParts[0],m=this.expressionParts[2],h=this.getSegmentDescription(this.expressionParts[1],this.i18n.everyMinute(),function(f){return f},function(f){return a.StringUtilities.format(d.i18n.everyX0Minutes(f),f)},function(f){return d.i18n.minutesX0ThroughX1PastTheHour()},function(f){try{return f=="0"&&m.indexOf("/")==-1&&u==""?d.i18n.everyHour():parseInt(f)<20?d.i18n.atX0MinutesPastTheHour(f):d.i18n.atX0MinutesPastTheHourGt20()||d.i18n.atX0MinutesPastTheHour(f)}catch{return d.i18n.atX0MinutesPastTheHour(f)}});return h},l.prototype.getHoursDescription=function(){var d=this,u=this.expressionParts[2],m=0,h=[];u.split("/")[0].split(",").forEach(function(y){var P=y.split("-");P.length===2&&h.push({value:P[1],index:m+1}),m+=P.length;});var f=0,g=this.getSegmentDescription(u,this.i18n.everyHour(),function(y){var P=h.find(function(w){return w.value===y&&w.index===f}),x=P&&d.expressionParts[1]!=="0";return f++,x?d.formatTime(y,"59",""):d.formatTime(y,"0","")},function(y){return a.StringUtilities.format(d.i18n.everyX0Hours(y),y)},function(y){return d.i18n.betweenX0AndX1()},function(y){return d.i18n.atX0()});return g},l.prototype.getDayOfWeekDescription=function(){var d=this,u=this.i18n.daysOfTheWeek(),m=null;return this.expressionParts[5]=="*"?m="":m=this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),function(h,f){var g=h;h.indexOf("#")>-1?g=h.substring(0,h.indexOf("#")):h.indexOf("L")>-1&&(g=g.replace("L",""));var y=parseInt(g),P=d.i18n.daysOfTheWeekInCase?d.i18n.daysOfTheWeekInCase(f)[y]:u[y];if(h.indexOf("#")>-1){var x=null,w=h.substring(h.indexOf("#")+1),b=h.substring(0,h.indexOf("#"));switch(w){case "1":x=d.i18n.first(b);break;case "2":x=d.i18n.second(b);break;case "3":x=d.i18n.third(b);break;case "4":x=d.i18n.fourth(b);break;case "5":x=d.i18n.fifth(b);break}P=x+" "+P;}return P},function(h){return parseInt(h)==1?"":a.StringUtilities.format(d.i18n.commaEveryX0DaysOfTheWeek(h),h)},function(h){var f=h.substring(0,h.indexOf("-")),g=d.expressionParts[3]!="*";return g?d.i18n.commaAndX0ThroughX1(f):d.i18n.commaX0ThroughX1(f)},function(h){var f=null;if(h.indexOf("#")>-1){var g=h.substring(h.indexOf("#")+1),y=h.substring(0,h.indexOf("#"));f=d.i18n.commaOnThe(g,y).trim()+d.i18n.spaceX0OfTheMonth();}else if(h.indexOf("L")>-1)f=d.i18n.commaOnTheLastX0OfTheMonth(h.replace("L",""));else {var P=d.expressionParts[3]!="*";P?d.options.logicalAndDayFields?f=d.i18n.commaOnlyOnX0(h):f=d.i18n.commaAndOnX0():f=d.i18n.commaOnlyOnX0(h);}return f}),m},l.prototype.getMonthDescription=function(){var d=this,u=this.i18n.monthsOfTheYear(),m=this.getSegmentDescription(this.expressionParts[4],"",function(h,f){return f&&d.i18n.monthsOfTheYearInCase?d.i18n.monthsOfTheYearInCase(f)[parseInt(h)-1]:u[parseInt(h)-1]},function(h){return parseInt(h)==1?"":a.StringUtilities.format(d.i18n.commaEveryX0Months(h),h)},function(h){return d.i18n.commaMonthX0ThroughMonthX1()||d.i18n.commaX0ThroughX1()},function(h){return d.i18n.commaOnlyInMonthX0?d.i18n.commaOnlyInMonthX0():d.i18n.commaOnlyInX0()});return m},l.prototype.getDayOfMonthDescription=function(){var d=this,u=null,m=this.expressionParts[3];switch(m){case "L":u=this.i18n.commaOnTheLastDayOfTheMonth();break;case "WL":case "LW":u=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var h=m.match(/(\d{1,2}W)|(W\d{1,2})/);if(h){var f=parseInt(h[0].replace("W","")),g=f==1?this.i18n.firstWeekday():a.StringUtilities.format(this.i18n.weekdayNearestDayX0(),f.toString());u=a.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),g);break}else {var y=m.match(/L-(\d{1,2})/);if(y){var P=y[1];u=a.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(P),P);break}else {if(m=="*"&&this.expressionParts[5]!="*")return "";u=this.getSegmentDescription(m,this.i18n.commaEveryDay(),function(x){return x=="L"?d.i18n.lastDay():d.i18n.dayX0?a.StringUtilities.format(d.i18n.dayX0(),x):x},function(x){return x=="1"?d.i18n.commaEveryDay():d.i18n.commaEveryX0Days(x)},function(x){return d.i18n.commaBetweenDayX0AndX1OfTheMonth(x)},function(x){return d.i18n.commaOnDayX0OfTheMonth(x)});}break}}return u},l.prototype.getYearDescription=function(){var d=this,u=this.getSegmentDescription(this.expressionParts[6],"",function(m){return /^\d+$/.test(m)?new Date(parseInt(m),1).getFullYear().toString():m},function(m){return a.StringUtilities.format(d.i18n.commaEveryX0Years(m),m)},function(m){return d.i18n.commaYearX0ThroughYearX1()||d.i18n.commaX0ThroughX1()},function(m){return d.i18n.commaOnlyInYearX0?d.i18n.commaOnlyInYearX0():d.i18n.commaOnlyInX0()});return u},l.prototype.getSegmentDescription=function(d,u,m,h,f,g){var y=null,P=d.indexOf("/")>-1,x=d.indexOf("-")>-1,w=d.indexOf(",")>-1;if(!d)y="";else if(d==="*")y=u;else if(!P&&!x&&!w)y=a.StringUtilities.format(g(d),m(d));else if(w){for(var b=d.split(","),q="",A=0;A<b.length;A++)if(A>0&&b.length>2&&(q+=",",A<b.length-1&&(q+=" ")),A>0&&b.length>1&&(A==b.length-1||b.length==2)&&(q+="".concat(this.i18n.spaceAnd()," ")),b[A].indexOf("/")>-1||b[A].indexOf("-")>-1){var B=b[A].indexOf("-")>-1&&b[A].indexOf("/")==-1,I=this.getSegmentDescription(b[A],u,m,h,B?this.i18n.commaX0ThroughX1:f,g);B&&(I=I.replace(", ","")),q+=I;}else P?q+=this.getSegmentDescription(b[A],u,m,h,f,g):q+=m(b[A]);P?y=q:y=a.StringUtilities.format(g(d),q);}else if(P){var b=d.split("/");if(y=a.StringUtilities.format(h(b[1]),b[1]),b[0].indexOf("-")>-1){var G=this.generateRangeSegmentDescription(b[0],f,m);G.indexOf(", ")!=0&&(y+=", "),y+=G;}else if(b[0].indexOf("*")==-1){var te=a.StringUtilities.format(g(b[0]),m(b[0]));te=te.replace(", ",""),y+=a.StringUtilities.format(this.i18n.commaStartingX0(),te);}}else x&&(y=this.generateRangeSegmentDescription(d,f,m));return y},l.prototype.generateRangeSegmentDescription=function(d,u,m){var h="",f=d.split("-"),g=m(f[0],1),y=m(f[1],2),P=u(d);return h+=a.StringUtilities.format(P,g,y),h},l.prototype.formatTime=function(d,u,m){var h=0,f=0,g=parseInt(d)+h,y=parseInt(u)+f;y>=60?(y-=60,g+=1):y<0&&(y+=60,g-=1),g>=24?g=g-24:g<0&&(g=24+g);var P="",x=false;this.options.use24HourTimeFormat||(x=!!(this.i18n.setPeriodBeforeTime&&this.i18n.setPeriodBeforeTime()),P=x?"".concat(this.getPeriod(g)," "):" ".concat(this.getPeriod(g)),g>12&&(g-=12),g===0&&(g=12));var w="";return m&&(w=":".concat(("00"+m).substring(m.length))),"".concat(x?P:"").concat(("00"+g.toString()).substring(g.toString().length),":").concat(("00"+y.toString()).substring(y.toString().length)).concat(w).concat(x?"":P)},l.prototype.transformVerbosity=function(d,u){if(!u&&(d=d.replace(new RegExp(", ".concat(this.i18n.everyMinute()),"g"),""),d=d.replace(new RegExp(", ".concat(this.i18n.everyHour()),"g"),""),d=d.replace(new RegExp(this.i18n.commaEveryDay(),"g"),""),d=d.replace(/\, ?$/,""),this.i18n.conciseVerbosityReplacements))for(var m=0,h=Object.entries(this.i18n.conciseVerbosityReplacements());m<h.length;m++){var f=h[m],g=f[0],y=f[1];d=d.replace(new RegExp(g,"g"),y);}return d},l.prototype.getPeriod=function(d){return d>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},l.locales={},l})();n.ExpressionDescriptor=p;}),747:((s,n,i)=>{Object.defineProperty(n,"__esModule",{value:true}),n.enLocaleLoader=void 0;var a=i(486),c=(function(){function p(){}return p.prototype.load=function(l){l.en=new a.en;},p})();n.enLocaleLoader=c;}),486:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true}),n.en=void 0;var i=(function(){function a(){}return a.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},a.prototype.atX0MinutesPastTheHourGt20=function(){return null},a.prototype.commaMonthX0ThroughMonthX1=function(){return null},a.prototype.commaYearX0ThroughYearX1=function(){return null},a.prototype.use24HourTimeFormatByDefault=function(){return false},a.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return "An error occurred when generating the expression description. Check the cron expression syntax."},a.prototype.everyMinute=function(){return "every minute"},a.prototype.everyHour=function(){return "every hour"},a.prototype.atSpace=function(){return "At "},a.prototype.everyMinuteBetweenX0AndX1=function(){return "Every minute between %s and %s"},a.prototype.at=function(){return "At"},a.prototype.spaceAnd=function(){return " and"},a.prototype.everySecond=function(){return "every second"},a.prototype.everyX0Seconds=function(){return "every %s seconds"},a.prototype.secondsX0ThroughX1PastTheMinute=function(){return "seconds %s through %s past the minute"},a.prototype.atX0SecondsPastTheMinute=function(){return "at %s seconds past the minute"},a.prototype.everyX0Minutes=function(){return "every %s minutes"},a.prototype.minutesX0ThroughX1PastTheHour=function(){return "minutes %s through %s past the hour"},a.prototype.atX0MinutesPastTheHour=function(){return "at %s minutes past the hour"},a.prototype.everyX0Hours=function(){return "every %s hours"},a.prototype.betweenX0AndX1=function(){return "between %s and %s"},a.prototype.atX0=function(){return "at %s"},a.prototype.commaEveryDay=function(){return ", every day"},a.prototype.commaEveryX0DaysOfTheWeek=function(){return ", every %s days of the week"},a.prototype.commaX0ThroughX1=function(){return ", %s through %s"},a.prototype.commaAndX0ThroughX1=function(){return ", %s through %s"},a.prototype.first=function(){return "first"},a.prototype.second=function(){return "second"},a.prototype.third=function(){return "third"},a.prototype.fourth=function(){return "fourth"},a.prototype.fifth=function(){return "fifth"},a.prototype.commaOnThe=function(){return ", on the "},a.prototype.spaceX0OfTheMonth=function(){return " %s of the month"},a.prototype.lastDay=function(){return "the last day"},a.prototype.commaOnTheLastX0OfTheMonth=function(){return ", on the last %s of the month"},a.prototype.commaOnlyOnX0=function(){return ", only on %s"},a.prototype.commaAndOnX0=function(){return ", and on %s"},a.prototype.commaEveryX0Months=function(){return ", every %s months"},a.prototype.commaOnlyInX0=function(){return ", only in %s"},a.prototype.commaOnTheLastDayOfTheMonth=function(){return ", on the last day of the month"},a.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return ", on the last weekday of the month"},a.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return ", %s days before the last day of the month"},a.prototype.firstWeekday=function(){return "first weekday"},a.prototype.weekdayNearestDayX0=function(){return "weekday nearest day %s"},a.prototype.commaOnTheX0OfTheMonth=function(){return ", on the %s of the month"},a.prototype.commaEveryX0Days=function(){return ", every %s days"},a.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return ", between day %s and %s of the month"},a.prototype.commaOnDayX0OfTheMonth=function(){return ", on day %s of the month"},a.prototype.commaEveryHour=function(){return ", every hour"},a.prototype.commaEveryX0Years=function(){return ", every %s years"},a.prototype.commaStartingX0=function(){return ", starting %s"},a.prototype.daysOfTheWeek=function(){return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},a.prototype.monthsOfTheYear=function(){return ["January","February","March","April","May","June","July","August","September","October","November","December"]},a.prototype.atReboot=function(){return "Run once, at startup"},a})();n.en=i;}),515:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true});function i(c,p){if(!c)throw new Error(p)}var a=(function(){function c(){}return c.secondRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=59,"seconds part must be >= 0 and <= 59");}},c.minuteRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=59,"minutes part must be >= 0 and <= 59");}},c.hourRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=0&&u<=23,"hours part must be >= 0 and <= 23");}},c.dayOfMonthRange=function(p){for(var l=p.split(","),d=0;d<l.length;d++)if(!isNaN(parseInt(l[d],10))){var u=parseInt(l[d],10);i(u>=1&&u<=31,"DOM part must be >= 1 and <= 31");}},c.monthRange=function(p,l){for(var d=p.split(","),u=0;u<d.length;u++)if(!isNaN(parseInt(d[u],10))){var m=parseInt(d[u],10);i(m>=1&&m<=12,l?"month part must be >= 0 and <= 11":"month part must be >= 1 and <= 12");}},c.dayOfWeekRange=function(p,l){for(var d=p.split(","),u=0;u<d.length;u++)if(!isNaN(parseInt(d[u],10))){var m=parseInt(d[u],10);i(m>=0&&m<=6,l?"DOW part must be >= 0 and <= 6":"DOW part must be >= 1 and <= 7");}},c})();n.default=a;}),823:((s,n)=>{Object.defineProperty(n,"__esModule",{value:true}),n.StringUtilities=void 0;var i=(function(){function a(){}return a.format=function(c){for(var p=[],l=1;l<arguments.length;l++)p[l-1]=arguments[l];return c.replace(/%s/g,function(d){for(var u=[],m=1;m<arguments.length;m++)u[m-1]=arguments[m];return p.shift()})},a.containsAny=function(c,p){return p.some(function(l){return c.indexOf(l)>-1})},a})();n.StringUtilities=i;})},e={};function t(s){var n=e[s];if(n!==void 0)return n.exports;var i=e[s]={exports:{}};return o[s](i,i.exports,t),i.exports}var r={};return (()=>{var s=r;Object.defineProperty(s,"__esModule",{value:true}),s.toString=void 0;var n=t(333),i=t(747);n.ExpressionDescriptor.initialize(new i.enLocaleLoader),s.default=n.ExpressionDescriptor;var a=n.ExpressionDescriptor.toString;s.toString=a;})(),r})());});var O=class{static metadata=new WeakMap;static set(e,t,r){this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e).set(t,r);}static get(e,t){return this.metadata.get(e)?.get(t)}static getAll(e){return this.metadata.get(e)}static getOrCreateAll(e){return this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e)}static delete(e,t){this.metadata.get(e)?.delete(t);}static clear(e){this.metadata.delete(e);}};var yo=o=>(e,t,r)=>{let s=O.get(e,t);return s||(s={middlewares:[]}),s.cacheConfig=o,O.set(e,t,s),r};J();J();var sr=class{getCwd(){switch(E.type){case "node":case "bun":return process.cwd();case "deno":return Deno.cwd();default:throw new Error("Unsupported runtime")}}},L=new sr;J();var or=class{basename(e){switch(E.type){case "node":case "bun":case "deno":return wt.basename(e);default:throw new Error("Unsupported runtime")}}join(...e){switch(E.type){case "node":case "bun":case "deno":return wt.join(...e);default:throw new Error("Unsupported runtime")}}extName(e){switch(E.type){case "bun":case "node":case "deno":return wt.extname(e);default:throw new Error("Unsupported runtime")}}resolve(...e){switch(E.type){case "bun":case "node":case "deno":return wt.resolve(...e);default:throw new Error("Unsupported runtime")}}},S=new or;var nr=class{async glob(...e){let t=await import('fs/promises'),r=L.getCwd(),s=S.resolve(r,e[1]?.cwd??""),n=[];for await(let i of t.glob(...e)){if(typeof i=="string"){n.push(S.resolve(s,i));continue}i.isFile()&&n.push(S.resolve(s,i.name));}return n}async mkdir(e,t){switch(E.type){case "bun":case "node":await(await import('fs/promises')).mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break;case "deno":typeof t?.mode=="string"&&(t.mode=Number.parseInt(t.mode)),await Deno.mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break}}async exists(e){switch(E.type){case "node":return (await import('fs')).existsSync(e);case "bun":return (await import('fs')).existsSync(e);case "deno":return Deno.stat(e).then(()=>true).catch(()=>false);default:throw new Error("Unsupported runtime")}}async readFile(e,t){switch(E.type){case "node":let s=await(await import('fs/promises')).readFile(e,{encoding:t?.encoding??null});return t?.encoding==="utf8"?s:new Uint8Array(s);case "bun":let n=Bun.file(e);return t?.encoding==="utf8"?n.text():new Uint8Array(await n.arrayBuffer());case "deno":let i=await Deno.readFile(e);return t?.encoding==="utf8"?new TextDecoder().decode(i):new Uint8Array(i)}}async writeFile(e,t){switch(E.type){case "node":await(await import('fs/promises')).writeFile(e,t);break;case "bun":await Bun.write(e,t);break;case "deno":await Deno.writeFile(e,t);break}}async stat(e){switch(E.type){case "node":let r=await(await import('fs/promises')).stat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).stat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.stat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:false,size:i.size}}}async lstat(e){switch(E.type){case "node":let r=await(await import('fs/promises')).lstat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).lstat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.lstat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:i.isSymlink,size:i.size}}}async unlink(e){switch(E.type){case "node":await(await import('fs/promises')).unlink(e);break;case "bun":await Bun.file(e).delete();break;case "deno":await Deno.remove(e);break;default:throw new Error("Unsupported runtime")}}async streamFile(e){switch(E.type){case "node":let t=await import('fs'),{Readable:r}=await import('stream'),s=t.createReadStream(e);return r.toWeb(s);case "bun":return Bun.file(e).stream();case "deno":return (await Deno.open(e)).readable;default:throw new Error("Unsupported runtime")}}async readdir(e){switch(E.type){case "bun":case "node":return (await import('fs/promises')).readdir(e);case "deno":let r=[];for await(let s of Deno.readDir(e))r.push(s.name);return r;default:throw new Error("Unsupported runtime")}}},v=new nr;var R=class extends Error{constructor(e){super(e);}};var wo=()=>vo({level:"info",formatters:{level:e=>({level:e})}}),M=wo();var bt=class extends R{constructor(e){super(`Failed to convert Zod schema to JSON Schema. This usually happens when using Zod v3 schemas with Zod v4. Make sure you're importing from 'zod' (v4) and not 'zod/v3'. Original error: ${e.message}`);}};var Le=class extends R{constructor(){super("Zod v4 is required with the toJSONSchema() method. Install it with: npm install zod@^4.0.0");}};var St=typeof import.meta<"u"?createRequire(import.meta.url):tr("module").createRequire?.(import.meta?.url??__filename)??tr,de=async o=>{let e=S.join(process.cwd(),"node_modules");if(!await v.exists(e))return o;let r=[];for(let s of o){let n=S.join(e,s);await v.exists(n)||r.push(s);}return r},V=async()=>await v.exists(S.join(process.cwd(),"yarn.lock"))?["yarn","add","-D"]:await v.exists(S.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add","-D"]:await v.exists(S.join(process.cwd(),"package-lock.json"))?["npm","install","-D"]:await v.exists(S.join(process.cwd(),"bun.lockb"))||await v.exists(S.join(process.cwd(),"bun.lock"))?["bun","add","-D"]:await v.exists(S.join(process.cwd(),"deno.lock"))?["deno","add","-D"]:["npm","install","-D"],Q=async(o,e,t,r,s=true)=>{let n=rs.createInterface({input:process.stdin,output:process.stdout}),i=t.join(", "),a=`Do you want to install the following ${s?"dev":""} dependencies using ${e}?
2
2
  ${i}
3
- (y/n): `;return new Promise(c=>{n.question(a,p=>{if(n.close(),p.toLowerCase()==="y"||p.toLowerCase()==="yes"){execSync(o,r),c(true);return}c(false);});})};var H=class{static zodModule=null;static zodSchemaCache=new WeakSet;static load(){if(this.zodModule)return this.zodModule;try{return this.zodModule=St("zod"),this.ensureZodV4(),this.zodModule}catch{throw new Error(`Zod is not installed. Install it with: npm install zod
4
- Zod is a peer dependency required when using Zod schemas for validation.`)}}static get(){return this.load()}static isZodSchema(e){try{this.load();}catch{return false}if(typeof e!="object"||e===null)return false;if(this.zodSchemaCache.has(e))return true;let t="_def"in e&&typeof e.parse=="function"&&typeof e.safeParse=="function";return t&&this.zodSchemaCache.add(e),t}static ensureZodV4(){let e=this.zodModule?.z;if(!e)throw new Le;if(!("toJSONSchema"in e))throw new Le}static toJSONSchema(e){this.load(),this.ensureZodV4();let t=this.zodModule?.z;if(!t?.toJSONSchema)throw new Le;if(!e||typeof e!="object"||!("_def"in e))throw new Error(`Invalid Zod schema provided. Make sure you're using Zod v4 schemas. If you're importing from 'zod/v3', change to 'zod' or '{ z } from "zod"'.`);try{return t.toJSONSchema(e)}catch(r){throw r instanceof Error&&r.message.includes("Cannot read properties of undefined")?new bt(r):r}}};var xt=class extends R{constructor(){super("TypeBox is not installed. Install it with: npm install @sinclair/typebox");}};var D=class{static typeboxModule=null;static typeboxSchemaCache=new WeakSet;static load(){if(this.typeboxModule)return this.typeboxModule;try{return this.typeboxModule=St("@sinclair/typebox"),this.typeboxModule}catch{throw new xt}}static get(){return this.load()}static isTypeBoxSchema(e){try{this.load();}catch{return false}if(typeof e!="object"||e===null)return false;if(this.typeboxSchemaCache.has(e))return true;let t="type"in e&&Object.getOwnPropertySymbols(e).some(r=>r.toString()==="Symbol(TypeBox.Kind)");return t&&this.typeboxSchemaCache.add(e),t}};function Ze(o){if(!o||typeof o!="object")return o;let e;if(o.properties&&typeof o.properties=="object"){e={...o,additionalProperties:false};let t=o.properties,r={},s=false;for(let n in t){let i=t[n];if(i&&typeof i=="object"&&!("$ref"in i)){let a=Ze(i);a!==i&&(s=true),r[n]=a;}else r[n]=i;}s&&(e.properties=r);}if(o.items&&typeof o.items=="object"&&!("$ref"in o.items)){let t=Ze(o.items);t!==o.items&&(e=e??{...o},e.items=t);}for(let t of ["oneOf","anyOf","allOf"]){let r=o[t];if(Array.isArray(r)){let s=[],n=false;for(let i of r)if(i&&typeof i=="object"&&!("$ref"in i)){let a=Ze(i);a!==i&&(n=true),s.push(a);}else s.push(i);n&&(e=e??{...o},e[t]=s);}}for(let t of ["$defs","definitions"]){let r=o[t];if(r&&typeof r=="object"){let s={},n=false;for(let i in r){let a=r[i];if(a&&typeof a=="object"){let c=Ze(a);c!==a&&(n=true),s[i]=c;}else s[i]=a;}n&&(e=e??{...o},e[t]=s);}}return e??o}var j=class{static ajv=new Ajv({validateSchema:false,strict:false,removeAdditional:"all",validateFormats:false});static serializerCache=new WeakMap;static responseSerializersCache=new WeakMap;static refCounter=0;static schemaKeyCache=new WeakMap;static setGlobalInstance(e){this.ajv=e,this.ajv.opts.strict=false,this.ajv.opts.validateSchema=false;}static getSchemaKey(e,t){let r=this.schemaKeyCache.get(e);r||(r=new Map,this.schemaKeyCache.set(e,r));let s=r.get(t);return s||(s=`${t}_${++this.refCounter}`,r.set(t,s)),s}static getOrCompileValidator(e,t){let r=this.getSchemaKey(e,t),s=this.ajv.getSchema(r);if(s)return s;this.ajv.addSchema(e,r);let n=this.ajv.getSchema(r);if(!n)throw new Error(`Failed to compile schema with key: ${r}`);return n}static getOrCreateSerializer(e,t){if(!e||typeof e!="object")return null;let r=this.serializerCache.get(e);r||(r=new Map,this.serializerCache.set(e,r));let s=r.get(t);if(s)return s;try{let n=Ze(e),i=xo(n,{ajv:this.ajv.opts});return r.set(t,i),i}catch{return null}}static getOrCreateResponseSerializers(e){if(!e)return null;let t=this.responseSerializersCache.get(e);if(t)return t;let r=new Map;for(let[s,n]of Object.entries(e)){let i=Number(s),a=null;if(H.isZodSchema(n)){let c=H.toJSONSchema(n);a=this.getOrCreateSerializer(c,"fast_stringify_zod");}else D.isTypeBoxSchema(n)?a=this.getOrCreateSerializer(n,"fast_stringify_typebox"):typeof n=="object"&&n!==null&&(a=this.getOrCreateSerializer(n,"fast_stringify_json"));a&&r.set(i,a);}return this.responseSerializersCache.set(e,r),r}static storeJsonSchema(e,t){let r=this.getSchemaKey(e,t);this.ajv.getSchema(r)||this.ajv.addSchema(e,r);}static getJsonSchema(e,t){let r=this.schemaKeyCache.get(e);if(!r)return;let s=r.get(t);return s?this.ajv.getSchema(s)?.schema:void 0}static clearAllCaches(){this.ajv=new Ajv({validateSchema:false,strict:false,removeAdditional:"all"}),this.serializerCache=new WeakMap,this.schemaKeyCache=new WeakMap,this.refCounter=0;}static getSchemaCount(){return Object.keys(this.ajv.schemas).length}static getCacheStats(){return {schemaCount:this.getSchemaCount(),totalRefsCreated:this.refCounter}}};var os=new Set,ue=(o,e)=>{let t=o.err,r=t instanceof Error?t.message:t==null?"":String(t),s=`${o.context}:${o.schemaType}:${o.cacheKey??""}:${r}`;os.has(s)||(os.add(s),M.debug(o,e));},ir=o=>{if(H.isZodSchema(o)){try{let t=H.toJSONSchema(o);j.storeJsonSchema(t,"serialize_zod"),j.getOrCompileValidator(t,"serialize_zod");}catch(t){ue({err:t,schemaType:"zod",context:"serialize_decorator"},"Failed to compile Zod schema for validation. Schema may contain unsupported types (e.g., z.instanceof). Runtime validation will still work, but Swagger documentation may be incomplete.");return}return}if(D.isTypeBoxSchema(o)){try{j.storeJsonSchema(o,"serialize_typebox"),j.getOrCompileValidator(o,"serialize_typebox");}catch(t){ue({err:t,schemaType:"typebox",context:"serialize_decorator"},"Failed to compile TypeBox schema for validation. Schema may be invalid or use unsupported features.");return}return}if(typeof o=="object"&&o!==null){try{j.storeJsonSchema(o,"serialize_json"),j.getOrCompileValidator(o,"serialize_json");}catch(t){ue({err:t,schemaType:"json",context:"serialize_decorator"},"Failed to compile JSON schema for validation. Schema may be invalid or malformed.");return}return}let e=JSON.stringify(o);try{let t={type:typeof o};j.storeJsonSchema(t,`serialize_primitive_${e}`),j.getOrCompileValidator(t,`serialize_primitive_${e}`);}catch(t){ue({err:t,schemaType:"primitive",cacheKey:e,context:"serialize_decorator"},"Failed to compile schema for validation. Schema format may be unsupported.");}},ns=o=>{if(H.isZodSchema(o)){try{let t=H.toJSONSchema(o);j.storeJsonSchema(t,"zod_schema"),j.getOrCompileValidator(t,"zod_schema");}catch(t){ue({err:t,schemaType:"zod",context:"request_validation"},"Failed to compile Zod schema for request validation. Schema may contain unsupported types (e.g., z.instanceof). Swagger documentation may be incomplete.");return}return}if(D.isTypeBoxSchema(o)){try{j.storeJsonSchema(o,"typebox_schema"),j.getOrCompileValidator(o,"typebox_schema");}catch(t){ue({err:t,schemaType:"typebox",context:"request_validation"},"Failed to compile TypeBox schema for request validation. Schema may be invalid or use unsupported features.");return}return}if(typeof o=="object"&&o!==null){try{j.storeJsonSchema(o,"json_schema"),j.getOrCompileValidator(o,"json_schema");}catch(t){ue({err:t,schemaType:"json",context:"request_validation"},"Failed to compile JSON schema for request validation. Schema may be invalid or malformed.");return}return}let e=JSON.stringify(o);try{let t={type:typeof o};j.storeJsonSchema(t,`primitive_${e}`),j.getOrCompileValidator(t,`primitive_${e}`);}catch(t){ue({err:t,schemaType:"primitive",cacheKey:e,context:"request_validation"},"Failed to compile schema for request validation. Schema format may be unsupported.");}},is=(o,e)=>{o&&ns(o),e&&ns(e);},as=o=>{if(!o||Object.keys(o).length===0)return;let e={};for(let[t,r]of Object.entries(o)){let s=Number(t);if(e[s]=r,ir(r),H.isZodSchema(r))try{let n=H.toJSONSchema(r);j.getOrCreateSerializer(n,"fast_stringify_zod");}catch{}else D.isTypeBoxSchema(r)?j.getOrCreateSerializer(r,"fast_stringify_typebox"):typeof r=="object"&&r!==null&&j.getOrCreateSerializer(r,"fast_stringify_json");}return e};var cs=null;function ls(o){if(o.schema&&!o.map)throw new Error("setValidationErrorHandler: 'map' function is required when 'schema' is provided. The schema defines the response shape, so 'map' must transform AJV errors to match it.");cs=o;}function De(){return cs}var ds=(o,e)=>async function(t,r,...s){try{if(e.headers){let n=t.validateHeaders(e.headers,!0);t.headers=n;}if(e.body){let n=t.validate(e.body,!0);t.body=n;}if(e.query){let n=t.validateQuery(e.query,!0);t.query=n;}if(e.all){let n=t.validateAll(e.all,!0);t.body=n;}return o(t,r,...s)}catch(n){let i=De();if(n instanceof ValidationError){let c=n,p={message:c.message,errors:c.errors,ajv:true,validation:true};if(i){let l=i.status??422,d=i.map?await i.map(p,t):p;return r.status(l).json(d)}return r.unprocessableEntity(p)}let a={message:n instanceof Error?n.message:String(n),errors:[],ajv:true,validation:true};if(i){let c=i.status??422,p=i.map?await i.map(a,t):a;return r.status(c).json(p)}return r.unprocessableEntity(n)}};var Oo=promisify(gzip),Eo=promisify(gunzip);function us(o){let{prefix:e,method:t,route:r,routeParams:s,body:n,bodyKeys:i,includeBody:a=true,query:c,queryKeys:p,includeQuery:l=false,headers:d,headerKeys:u,includeHeaders:m=false,fromRequestValue:h}=o,f=[e,"global"];if(f.push(t.toUpperCase(),Mo(r)),s&&Object.keys(s).length>0&&f.push(Ye(s)),l&&c){let g=ar(c,p);Object.keys(g).length>0&&f.push("q:"+Ye(g));}if(a&&n!=null){let g=ar(n,i);f.push("b:"+Ye(g));}if(m&&d){let g=ar(d,u);Object.keys(g).length>0&&f.push("h:"+Ye(g));}return h!=null&&f.push("c:"+Ye(h)),f.join(":")}function ar(o,e){if(!e||e.length===0)return o;let t={};for(let r of e)r in o&&(t[r]=o[r]);return t}function Ye(o){let e=et(o);return createHash("sha256").update(e).digest("hex").substring(0,32)}function et(o){return o===null?"null":o===void 0?"":typeof o!="object"?JSON.stringify(o):Array.isArray(o)?"["+o.map(r=>et(r)||"null").join(",")+"]":"{"+Object.keys(o).filter(r=>o[r]!==void 0).sort().map(r=>JSON.stringify(r)+":"+et(o[r])).join(",")+"}"}function Mo(o){return o.toLowerCase().replace(/\/+/g,"/").replace(/\/$/,"")}function cr(o){return `lock:${o}`}function lr(o,e){return `${o}:tag:${e}`}async function ms(o){return Oo(Buffer.from(o,"utf-8"))}async function hs(o){return (await Eo(o)).toString("utf-8")}function Tt(o){let e=o.include,t=true,r=false,s=false,n,i,a;return e&&(e.body===false?t=false:Array.isArray(e.body)?(t=true,n=e.body):e.body===true&&(t=true),e.body===void 0&&(t=false),e.query===true?r=true:Array.isArray(e.query)&&(r=true,i=e.query),e.headers===true?s=true:Array.isArray(e.headers)&&(s=true,a=e.headers)),{ttl:o.ttl,useCompression:o.useCompression,tags:o.tags,lockBehavior:o.lockBehavior,includeBody:t,includeQuery:r,includeHeaders:s,bodyKeys:n,queryKeys:i,headerKeys:a,fromRequest:e?.fromRequest}}var Fe={defaultTtl:300,compressionThreshold:1024,keyPrefix:"cache",enableStats:true,lockTimeout:5e3,lockBehavior:"wait"};var fs=50,me="x-cache",dr=(s=>(s.Hit="HIT",s.Miss="MISS",s.Wait="WAIT",s.Bypass="BYPASS",s))(dr||{});var tt=class{log=M.child({scope:"CacheService"});provider;options;stats={hits:0,misses:0,hitRate:0,invalidations:0};constructor(e,t){this.provider=e,this.options=t;}async get(e){try{let t=await this.provider.get(e);if(!t)return this.options.enableStats&&(this.stats.misses++,this.updateHitRate()),null;this.options.enableStats&&(this.stats.hits++,this.updateHitRate());let r=JSON.parse(t),s=r.data;return r.compressed&&(s=await hs(Buffer.from(r.data,"base64"))),JSON.parse(s)}catch(t){return this.log.error({error:t,key:e},"Cache get failed"),null}}async set(e,t,r,s){try{let n=et(t),i=s?.compressed&&n.length>this.options.compressionThreshold,a=n;i&&(a=(await ms(n)).toString("base64"));let c={data:a,compressed:i??!1,createdAt:Date.now(),ttl:r};if(await this.provider.set(e,JSON.stringify(c),r),s?.tags?.length)for(let p of s.tags){let l=lr(this.options.keyPrefix,p);await this.provider.addToSet(l,[e],r+60);}}catch(n){this.log.error({error:n,key:e},"Cache set failed");}}async invalidate(e){if(!e.length)return 0;let t=0;try{for(let r of e){let s=lr(this.options.keyPrefix,r),n=await this.provider.getSetMembers(s);if(n.length>0){let i=await this.provider.delMany([...n,s]);t+=i-1;}}this.options.enableStats&&(this.stats.invalidations+=t);}catch(r){this.log.error({error:r,tags:e},"Cache invalidate failed");}return t}async invalidateKey(e){try{if(await this.provider.del(e))return this.options.enableStats&&this.stats.invalidations++,!0}catch(t){this.log.error({error:t,key:e},"Cache invalidateKey failed");}return false}async invalidatePattern(e){let t=0;try{for await(let r of this.provider.scan(e))r.length>0&&(t+=await this.provider.delMany(r));this.options.enableStats&&(this.stats.invalidations+=t);}catch(r){this.log.error({error:r,pattern:e},"Cache invalidatePattern failed");}return t}async acquireLock(e){try{let t=cr(e);return await this.provider.acquireLock(t,this.options.lockTimeout)}catch(t){return this.log.error({error:t,key:e},"Cache acquireLock failed"),true}}async releaseLock(e){try{let t=cr(e);await this.provider.releaseLock(t);}catch(t){this.log.warn({error:t,key:e},"Cache releaseLock failed");}}async waitForCache(e,t){let r=Date.now();for(;Date.now()-r<t;){let s=await this.get(e);if(s!==null)return s;await new Promise(n=>setTimeout(n,fs));}return null}getStats(){return {...this.stats}}getProvider(){return this.provider}async disconnect(){await this.provider.disconnect();}updateHitRate(){let e=this.stats.hits+this.stats.misses;this.stats.hitRate=e>0?this.stats.hits/e:0;}};var Rt=null,pr={...Fe};function ur(o,e){return Rt=new tt(o,e),pr=e,Rt}function rt(){return Rt}function Pt(){return pr}function jo(){Rt=null,pr={...Fe};}function Ct(o,e,t){let r=M.child({scope:"CacheMiddleware"});return async(s,n,i)=>{try{let a={};if(e.includeHeaders&&s.rawHeaders)if(e.headerKeys)for(let h of e.headerKeys){let f=s.rawHeaders.get(h);f&&(a[h]=f);}else s.rawHeaders.forEach((h,f)=>{a[f]=h;});let c=s.url,p=c.startsWith("http")?new URL(c).pathname:c.split("?")[0],l=e.fromRequest?await e.fromRequest(s):void 0,d=us({prefix:t.keyPrefix,method:s.method,route:p,routeParams:s.params,body:s.body,bodyKeys:e.bodyKeys,includeBody:e.includeBody,query:s.query,queryKeys:e.queryKeys,includeQuery:e.includeQuery,headers:a,headerKeys:e.headerKeys,includeHeaders:e.includeHeaders,fromRequestValue:l});r.debug({key:d},"Generated cache key");let u=await o.get(d);if(u!==null){n.setHeader(me,"HIT"),n.json(u);return}let m=await o.acquireLock(d);if(!m){let h=e.lockBehavior??t.lockBehavior;if(!(await ko(h,o,d,t.lockTimeout,n)).continueToHandler)return}n.setHeader(me,"MISS"),await i();try{if(n.responseStatus>=200&&n.responseStatus<300){let h=n.getBody(),f=typeof h=="string"?JSON.parse(h):h;await o.set(d,f,e.ttl,{compressed:e.useCompression,tags:e.tags}),r.debug({key:d,ttl:e.ttl},"Cached response");}}catch(h){r.error({error:h,key:d},"Failed to cache response");}finally{m&&await o.releaseLock(d);}}catch(a){return r.error({error:a},"Cache middleware error"),n.setHeader(me,"BYPASS"),i()}}}async function ko(o,e,t,r,s){switch(o){case "bypass":return s.setHeader(me,"BYPASS"),{continueToHandler:true};case "fail":return s.setHeader(me,"BYPASS"),s.setHeader("Retry-After",String(Math.ceil(r/1e3))),s.status(503).json({error:"Service Unavailable",message:"Cache computation in progress"}),{continueToHandler:false};default:{s.setHeader(me,"WAIT");let n=await e.waitForCache(t,r);return n!==null?(s.json(n),{continueToHandler:false}):{continueToHandler:true}}}}var gs=null;function ys(o){if(o.schema&&!o.map)throw new Error("setPolicyErrorHandler: 'map' function is required when 'schema' is provided. The schema defines the response shape, so 'map' must return data matching it.");gs=o;}function vs(){return gs}var Ot=o=>async(e,t,r)=>{for(let s of o)if(!await s.manager.canAccess(s.scope,s.handler,e)){let i=vs();if(i){let a=i.status??401,c=i.map?await i.map(e):{error:"Unauthorized"};return t.status(a).json(c)}return t.unauthorized({error:"Unauthorized"})}return r()};var Qe=class{staticChildren;paramChild;wildcardChild;middleware;handler;paramName;constructor(){this.staticChildren=new Map,this.paramChild=null,this.wildcardChild=null,this.middleware=null,this.handler=null,this.paramName=null;}},mr=class o{trees;routes;middlewares;basePath;staticRouteCache;handlerResponseSchemas;constructor(e="",t=[]){this.trees=new Map,this.routes=[],this.middlewares=t,this.basePath=this.normalizeBasePath(e),this.staticRouteCache=new Map,this.handlerResponseSchemas=new Map;}getRoutes(){return this.routes.slice()}addOrUpdate(e,t,r,s,n,i,a,c=false){e=e.toUpperCase();let p=t.split("?")[0];is(n?.body,n?.query);let l=as(a),d=n&&(n.body||n.query||n.headers||n.all),u=d?ds(s,n):s,m=d?n:void 0,h=this.trees.get(e);h||(h=new Qe,this.trees.set(e,h));let f=p.replace(/^\/+|\/+$/g,""),g=f.length===0?[]:f.split("/"),y=true,P=[],x=h;for(let b of g){if(b==="*"){y=false,x.wildcardChild||(x.wildcardChild=new Qe),x=x.wildcardChild;break}if(b.startsWith(":")){y=false;let q=b.slice(1);P.push(q),x.paramChild||(x.paramChild={node:new Qe,name:q}),x=x.paramChild.node;continue}x.staticChildren.has(b)||x.staticChildren.set(b,new Qe),x=x.staticChildren.get(b);}if(x.middleware=r,x.handler=u,P.length>0&&(x.paramName=P.join(",")),l&&this.handlerResponseSchemas.set(s,l),y){let b="/"+f,q=`${e}:${b}`;this.staticRouteCache.set(q,{middleware:r,handler:u,params:{},responseSchemas:l});}else {let b="/"+f.replace(/:[^/]+/g,"").replace(/\/+/g,"/"),q=`${e}:${b}`;this.staticRouteCache.delete(q);}let w=this.routes.findIndex(b=>b.method===e&&b.path===t);if(w!==-1){if(!c)throw new Error(`Duplicate route detected: ${e} ${t} is already registered. Each route must be unique.`);this.routes[w].middleware=r,this.routes[w].handler=u,this.routes[w].swaggerOptions=i,this.routes[w].responses=a,this.routes[w].responseSchemas=l,this.routes[w].validationSchemas=m;return}this.routes.push({method:e,path:t,middleware:r,handler:u,swaggerOptions:i,responses:a,responseSchemas:l,validationSchemas:m});}find(e,t){e=e.toUpperCase();let r=t,s=t.indexOf("?");s!==-1&&(r=t.substring(0,s));let n=`${e}:${r}`,i=this.staticRouteCache.get(n);if(i)return i;let a=this.trees.get(e);if(!a)return null;let c=r.replace(/^\/+|\/+$/g,""),p=c.length===0?[]:c.split("/"),l={},d=a;for(let m=0;m<p.length;m++){let h=p[m];if(d.staticChildren.has(h)){d=d.staticChildren.get(h);continue}if(d.paramChild){l[d.paramChild.name]=ws(h),d=d.paramChild.node;continue}if(d.wildcardChild){l["*"]=ws(p.slice(m).join("/")),d=d.wildcardChild;break}return null}if(!d.handler||!d.middleware)return null;let u=this.handlerResponseSchemas.get(d.handler);return {middleware:d.middleware,handler:d.handler,params:l,responseSchemas:u}}extractOptionsAndHandler(e,t){if(typeof e=="function")return {middlewares:[],handler:e,swaggerOptions:void 0};let r=e,s=Array.isArray(r.middlewares)?r.middlewares:r.middlewares?[r.middlewares]:[];if(r.policy){let i=(Array.isArray(r.policy)?r.policy:[r.policy]).map(a=>({scope:a.scope,handler:a.handler,manager:a.manager}));s.unshift(Ot(i));}if(r.cache){let n=rt();if(n){let i=Tt(r.cache),a=Ct(n,i,Pt());s.push(a);}}return {middlewares:s,handler:t,body:r.body,query:r.query,headers:r.headers,all:r.all,responses:r.responses,swaggerOptions:r.swagger}}get(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,query:a,headers:c,responses:p,swaggerOptions:l}=this.extractOptionsAndHandler(t,r);if("body"in t||"all"in t)throw new Error(`Invalid route configuration for GET ${s}: body/all validation is not allowed. HTTP specification does not support request body for GET method. Use query or headers validation instead.`);let d=[...this.middlewares,...n],u={query:a,headers:c};this.addOrUpdate("GET",s,d,i,u,l,p);}post(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("POST",s,m,i,h,u,d);}patch(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("PATCH",s,m,i,h,u,d);}put(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("PUT",s,m,i,h,u,d);}delete(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,query:a,headers:c,responses:p,swaggerOptions:l}=this.extractOptionsAndHandler(t,r);if("body"in t||"all"in t)throw new Error(`Invalid route configuration for DELETE ${s}: body/all validation is not allowed. HTTP specification does not support request body for DELETE method. Use query or headers validation instead.`);let d=[...this.middlewares,...n],u={query:a,headers:c};this.addOrUpdate("DELETE",s,d,i,u,l,p);}options(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("OPTIONS",s,m,i,h,u,d);}head(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("HEAD",s,m,i,h,u,d);}group(e,t,r){let s=Array.isArray(t)?t:typeof t=="function"?[]:t?[t]:[],n=Array.isArray(t)?r:typeof t=="function"?t:void 0,i=this.joinPath(e),a=new o(i,[...this.middlewares,...s]);n?.(a);for(let c of a.getRoutes())this.addOrUpdate(c.method,c.path,c.middleware,c.handler,c.validationSchemas,c.swaggerOptions,c.responses);}applyGlobalMiddlewaresToAllRoutes(e){for(let t of this.routes){let r=[...e,...t.middleware||[]];this.addOrUpdate(t.method,t.path,r,t.handler,void 0,void 0,void 0,true);}}normalizeBasePath(e){if(!e)return "";let t=e.replace(/\s+/g,"");return t=t.replace(/\/+/g,"/"),t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/g,"")),t}joinPath(e){let r=[this.basePath,e].filter(s=>typeof s=="string"&&s.length>0).join("/");return r=r.replace(/\/+/g,"/"),r.startsWith("/")||(r="/"+r),r.length>1&&(r=r.replace(/\/+$/g,"")),r}clearRoutes(){this.routes=[],this.staticRouteCache.clear(),this.handlerResponseSchemas.clear(),this.trees.clear();}},_=new mr;function ws(o){if(o.includes("\0"))throw Object.assign(new Error("NUL byte in route parameter"),{status:400});try{let e=decodeURIComponent(o);if(e.includes("\0"))throw Object.assign(new Error("NUL byte in route parameter"),{status:400});return e}catch(e){if(e.status===400)throw e;return o}}var fr=class o{static cronstrue=null;static async getCronstrue(){return this.cronstrue||(this.cronstrue=await Promise.resolve().then(()=>go(bs())).catch(()=>{throw new R("cronstrue not installed as a dependency, it is required in order to consult cron jobs in UI")})),this.cronstrue}async generate(){let e=await o.getCronstrue(),t=W.scheduledJobs,r=new Set,s=new Set,i=t.map(l=>{let d=e.default.toString(l.args[0])||"-",u=l.args[2]?.timezone||"System Default";return r.add(d),s.add(u),{name:l.name,schedule:l.args[0],frequency:d,timezone:u}}).map(l=>`
3
+ (y/n): `;return new Promise(c=>{n.question(a,p=>{if(n.close(),p.toLowerCase()==="y"||p.toLowerCase()==="yes"){execSync(o,r),c(true);return}c(false);});})};function xo(o){return e=>{let t=e.zodSchema?._zod?.def;t?.type==="date"&&o==="output"&&(e.jsonSchema.type="string",e.jsonSchema.format="date-time"),t?.type==="undefined"&&o==="output"&&(e.jsonSchema.type="null"),t?.type==="union"&&(e.jsonSchema.anyOf=e.jsonSchema.anyOf?.filter(r=>Object.keys(r).length>0));}}var H=class{static zodModule=null;static zodSchemaCache=new WeakSet;static load(){if(this.zodModule)return this.zodModule;try{return this.zodModule=St("zod"),this.ensureZodV4(),this.zodModule}catch{throw new Error(`Zod is not installed. Install it with: npm install zod
4
+ Zod is a peer dependency required when using Zod schemas for validation.`)}}static get(){return this.load()}static isZodSchema(e){try{this.load();}catch{return false}if(typeof e!="object"||e===null)return false;if(this.zodSchemaCache.has(e))return true;let t="_def"in e&&typeof e.parse=="function"&&typeof e.safeParse=="function";return t&&this.zodSchemaCache.add(e),t}static ensureZodV4(){let e=this.zodModule?.z;if(!e)throw new Le;if(!("toJSONSchema"in e))throw new Le}static toJSONSchema(e,t){this.load(),this.ensureZodV4();let r=this.zodModule?.z;if(!r?.toJSONSchema)throw new Le;if(!e||typeof e!="object"||!("_def"in e))throw new Error(`Invalid Zod schema provided. Make sure you're using Zod v4 schemas. If you're importing from 'zod/v3', change to 'zod' or '{ z } from "zod"'.`);let s=t?.io??"output";try{return r.toJSONSchema(e,{io:s,target:"openapi-3.0",unrepresentable:"any",override:xo(s)})}catch(n){throw n instanceof Error&&n.message.includes("Cannot read properties of undefined")?new bt(n):n}}};var xt=class extends R{constructor(){super("TypeBox is not installed. Install it with: npm install @sinclair/typebox");}};var D=class{static typeboxModule=null;static typeboxSchemaCache=new WeakSet;static load(){if(this.typeboxModule)return this.typeboxModule;try{return this.typeboxModule=St("@sinclair/typebox"),this.typeboxModule}catch{throw new xt}}static get(){return this.load()}static isTypeBoxSchema(e){try{this.load();}catch{return false}if(typeof e!="object"||e===null)return false;if(this.typeboxSchemaCache.has(e))return true;let t="type"in e&&Object.getOwnPropertySymbols(e).some(r=>r.toString()==="Symbol(TypeBox.Kind)");return t&&this.typeboxSchemaCache.add(e),t}};function Ze(o){if(!o||typeof o!="object")return o;let e;if(o.properties&&typeof o.properties=="object"){e={...o,additionalProperties:false};let t=o.properties,r={},s=false;for(let n in t){let i=t[n];if(i&&typeof i=="object"&&!("$ref"in i)){let a=Ze(i);a!==i&&(s=true),r[n]=a;}else r[n]=i;}s&&(e.properties=r);}if(o.items&&typeof o.items=="object"&&!("$ref"in o.items)){let t=Ze(o.items);t!==o.items&&(e=e??{...o},e.items=t);}for(let t of ["oneOf","anyOf","allOf"]){let r=o[t];if(Array.isArray(r)){let s=[],n=false;for(let i of r)if(i&&typeof i=="object"&&!("$ref"in i)){let a=Ze(i);a!==i&&(n=true),s.push(a);}else s.push(i);n&&(e=e??{...o},e[t]=s);}}for(let t of ["$defs","definitions"]){let r=o[t];if(r&&typeof r=="object"){let s={},n=false;for(let i in r){let a=r[i];if(a&&typeof a=="object"){let c=Ze(a);c!==a&&(n=true),s[i]=c;}else s[i]=a;}n&&(e=e??{...o},e[t]=s);}}return e??o}var j=class{static ajv=new Ajv({validateSchema:false,strict:false,removeAdditional:"all",validateFormats:false});static serializerCache=new WeakMap;static responseSerializersCache=new WeakMap;static refCounter=0;static schemaKeyCache=new WeakMap;static setGlobalInstance(e){this.ajv=e,this.ajv.opts.strict=false,this.ajv.opts.validateSchema=false;}static getSchemaKey(e,t){let r=this.schemaKeyCache.get(e);r||(r=new Map,this.schemaKeyCache.set(e,r));let s=r.get(t);return s||(s=`${t}_${++this.refCounter}`,r.set(t,s)),s}static getOrCompileValidator(e,t){let r=this.getSchemaKey(e,t),s=this.ajv.getSchema(r);if(s)return s;this.ajv.addSchema(e,r);let n=this.ajv.getSchema(r);if(!n)throw new Error(`Failed to compile schema with key: ${r}`);return n}static getOrCreateSerializer(e,t){if(!e||typeof e!="object")return null;let r=this.serializerCache.get(e);r||(r=new Map,this.serializerCache.set(e,r));let s=r.get(t);if(s)return s;try{let n=Ze(e),i=To(n,{ajv:this.ajv.opts});return r.set(t,i),i}catch{return null}}static getOrCreateResponseSerializers(e){if(!e)return null;let t=this.responseSerializersCache.get(e);if(t)return t;let r=new Map;for(let[s,n]of Object.entries(e)){let i=Number(s),a=null;if(H.isZodSchema(n)){let c=H.toJSONSchema(n);a=this.getOrCreateSerializer(c,"fast_stringify_zod");}else D.isTypeBoxSchema(n)?a=this.getOrCreateSerializer(n,"fast_stringify_typebox"):typeof n=="object"&&n!==null&&(a=this.getOrCreateSerializer(n,"fast_stringify_json"));a&&r.set(i,a);}return this.responseSerializersCache.set(e,r),r}static storeJsonSchema(e,t){let r=this.getSchemaKey(e,t);this.ajv.getSchema(r)||this.ajv.addSchema(e,r);}static getJsonSchema(e,t){let r=this.schemaKeyCache.get(e);if(!r)return;let s=r.get(t);return s?this.ajv.getSchema(s)?.schema:void 0}static clearAllCaches(){this.ajv=new Ajv({validateSchema:false,strict:false,removeAdditional:"all"}),this.serializerCache=new WeakMap,this.schemaKeyCache=new WeakMap,this.refCounter=0;}static getSchemaCount(){return Object.keys(this.ajv.schemas).length}static getCacheStats(){return {schemaCount:this.getSchemaCount(),totalRefsCreated:this.refCounter}}};var os=new Set,ue=(o,e)=>{let t=o.err,r=t instanceof Error?t.message:t==null?"":String(t),s=`${o.context}:${o.schemaType}:${o.cacheKey??""}:${r}`;os.has(s)||(os.add(s),M.debug(o,e));},ir=o=>{if(H.isZodSchema(o)){try{let t=H.toJSONSchema(o);j.storeJsonSchema(t,"serialize_zod"),j.getOrCompileValidator(t,"serialize_zod");}catch(t){ue({err:t,schemaType:"zod",context:"serialize_decorator"},"Failed to compile Zod schema for validation. Schema may contain unsupported types (e.g., z.instanceof). Runtime validation will still work, but Swagger documentation may be incomplete.");return}return}if(D.isTypeBoxSchema(o)){try{j.storeJsonSchema(o,"serialize_typebox"),j.getOrCompileValidator(o,"serialize_typebox");}catch(t){ue({err:t,schemaType:"typebox",context:"serialize_decorator"},"Failed to compile TypeBox schema for validation. Schema may be invalid or use unsupported features.");return}return}if(typeof o=="object"&&o!==null){try{j.storeJsonSchema(o,"serialize_json"),j.getOrCompileValidator(o,"serialize_json");}catch(t){ue({err:t,schemaType:"json",context:"serialize_decorator"},"Failed to compile JSON schema for validation. Schema may be invalid or malformed.");return}return}let e=JSON.stringify(o);try{let t={type:typeof o};j.storeJsonSchema(t,`serialize_primitive_${e}`),j.getOrCompileValidator(t,`serialize_primitive_${e}`);}catch(t){ue({err:t,schemaType:"primitive",cacheKey:e,context:"serialize_decorator"},"Failed to compile schema for validation. Schema format may be unsupported.");}},ns=o=>{if(H.isZodSchema(o)){try{let t=H.toJSONSchema(o,{io:"input"});j.storeJsonSchema(t,"zod_schema"),j.getOrCompileValidator(t,"zod_schema");}catch(t){ue({err:t,schemaType:"zod",context:"request_validation"},"Failed to compile Zod schema for request validation. Schema may contain unsupported types (e.g., z.instanceof). Swagger documentation may be incomplete.");return}return}if(D.isTypeBoxSchema(o)){try{j.storeJsonSchema(o,"typebox_schema"),j.getOrCompileValidator(o,"typebox_schema");}catch(t){ue({err:t,schemaType:"typebox",context:"request_validation"},"Failed to compile TypeBox schema for request validation. Schema may be invalid or use unsupported features.");return}return}if(typeof o=="object"&&o!==null){try{j.storeJsonSchema(o,"json_schema"),j.getOrCompileValidator(o,"json_schema");}catch(t){ue({err:t,schemaType:"json",context:"request_validation"},"Failed to compile JSON schema for request validation. Schema may be invalid or malformed.");return}return}let e=JSON.stringify(o);try{let t={type:typeof o};j.storeJsonSchema(t,`primitive_${e}`),j.getOrCompileValidator(t,`primitive_${e}`);}catch(t){ue({err:t,schemaType:"primitive",cacheKey:e,context:"request_validation"},"Failed to compile schema for request validation. Schema format may be unsupported.");}},is=(o,e)=>{o&&ns(o),e&&ns(e);},as=o=>{if(!o||Object.keys(o).length===0)return;let e={};for(let[t,r]of Object.entries(o)){let s=Number(t);if(e[s]=r,ir(r),H.isZodSchema(r))try{let n=H.toJSONSchema(r);j.getOrCreateSerializer(n,"fast_stringify_zod");}catch{}else D.isTypeBoxSchema(r)?j.getOrCreateSerializer(r,"fast_stringify_typebox"):typeof r=="object"&&r!==null&&j.getOrCreateSerializer(r,"fast_stringify_json");}return e};var cs=null;function ls(o){if(o.schema&&!o.map)throw new Error("setValidationErrorHandler: 'map' function is required when 'schema' is provided. The schema defines the response shape, so 'map' must transform AJV errors to match it.");cs=o;}function De(){return cs}var ds=(o,e)=>async function(t,r,...s){try{if(e.headers){let n=t.validateHeaders(e.headers,!0);t.headers=n;}if(e.body){let n=t.validate(e.body,!0);t.body=n;}if(e.query){let n=t.validateQuery(e.query,!0);t.query=n;}if(e.all){let n=t.validateAll(e.all,!0);t.body=n;}return o(t,r,...s)}catch(n){let i=De();if(n instanceof ValidationError){let c=n,p={message:c.message,errors:c.errors,ajv:true,validation:true};if(i){let l=i.status??422,d=i.map?await i.map(p,t):p;return r.status(l).json(d)}return r.unprocessableEntity(p)}let a={message:n instanceof Error?n.message:String(n),errors:[],ajv:true,validation:true};if(i){let c=i.status??422,p=i.map?await i.map(a,t):a;return r.status(c).json(p)}return r.unprocessableEntity(a)}};var Eo=promisify(gzip),Mo=promisify(gunzip);function us(o){let{prefix:e,method:t,route:r,routeParams:s,body:n,bodyKeys:i,includeBody:a=true,query:c,queryKeys:p,includeQuery:l=false,headers:d,headerKeys:u,includeHeaders:m=false,fromRequestValue:h}=o,f=[e,"global"];if(f.push(t.toUpperCase(),jo(r)),s&&Object.keys(s).length>0&&f.push(Ye(s)),l&&c){let g=ar(c,p);Object.keys(g).length>0&&f.push("q:"+Ye(g));}if(a&&n!=null){let g=ar(n,i);f.push("b:"+Ye(g));}if(m&&d){let g=ar(d,u);Object.keys(g).length>0&&f.push("h:"+Ye(g));}return h!=null&&f.push("c:"+Ye(h)),f.join(":")}function ar(o,e){if(!e||e.length===0)return o;let t={};for(let r of e)r in o&&(t[r]=o[r]);return t}function Ye(o){let e=et(o);return createHash("sha256").update(e).digest("hex").substring(0,32)}function et(o){return o===null?"null":o===void 0?"":typeof o!="object"?JSON.stringify(o):Array.isArray(o)?"["+o.map(r=>et(r)||"null").join(",")+"]":"{"+Object.keys(o).filter(r=>o[r]!==void 0).sort().map(r=>JSON.stringify(r)+":"+et(o[r])).join(",")+"}"}function jo(o){return o.toLowerCase().replace(/\/+/g,"/").replace(/\/$/,"")}function cr(o){return `lock:${o}`}function lr(o,e){return `${o}:tag:${e}`}async function ms(o){return Eo(Buffer.from(o,"utf-8"))}async function hs(o){return (await Mo(o)).toString("utf-8")}function Tt(o){let e=o.include,t=true,r=false,s=false,n,i,a;return e&&(e.body===false?t=false:Array.isArray(e.body)?(t=true,n=e.body):e.body===true&&(t=true),e.body===void 0&&(t=false),e.query===true?r=true:Array.isArray(e.query)&&(r=true,i=e.query),e.headers===true?s=true:Array.isArray(e.headers)&&(s=true,a=e.headers)),{ttl:o.ttl,useCompression:o.useCompression,tags:o.tags,lockBehavior:o.lockBehavior,includeBody:t,includeQuery:r,includeHeaders:s,bodyKeys:n,queryKeys:i,headerKeys:a,fromRequest:e?.fromRequest}}var Fe={defaultTtl:300,compressionThreshold:1024,keyPrefix:"cache",enableStats:true,lockTimeout:5e3,lockBehavior:"wait"};var fs=50,me="x-cache",dr=(s=>(s.Hit="HIT",s.Miss="MISS",s.Wait="WAIT",s.Bypass="BYPASS",s))(dr||{});var tt=class{log=M.child({scope:"CacheService"});provider;options;stats={hits:0,misses:0,hitRate:0,invalidations:0};constructor(e,t){this.provider=e,this.options=t;}async get(e){try{let t=await this.provider.get(e);if(!t)return this.options.enableStats&&(this.stats.misses++,this.updateHitRate()),null;this.options.enableStats&&(this.stats.hits++,this.updateHitRate());let r=JSON.parse(t),s=r.data;return r.compressed&&(s=await hs(Buffer.from(r.data,"base64"))),JSON.parse(s)}catch(t){return this.log.error({error:t,key:e},"Cache get failed"),null}}async set(e,t,r,s){try{let n=et(t),i=s?.compressed&&n.length>this.options.compressionThreshold,a=n;i&&(a=(await ms(n)).toString("base64"));let c={data:a,compressed:i??!1,createdAt:Date.now(),ttl:r};if(await this.provider.set(e,JSON.stringify(c),r),s?.tags?.length)for(let p of s.tags){let l=lr(this.options.keyPrefix,p);await this.provider.addToSet(l,[e],r+60);}}catch(n){this.log.error({error:n,key:e},"Cache set failed");}}async invalidate(e){if(!e.length)return 0;let t=0;try{for(let r of e){let s=lr(this.options.keyPrefix,r),n=await this.provider.getSetMembers(s);if(n.length>0){let i=await this.provider.delMany([...n,s]);t+=i-1;}}this.options.enableStats&&(this.stats.invalidations+=t);}catch(r){this.log.error({error:r,tags:e},"Cache invalidate failed");}return t}async invalidateKey(e){try{if(await this.provider.del(e))return this.options.enableStats&&this.stats.invalidations++,!0}catch(t){this.log.error({error:t,key:e},"Cache invalidateKey failed");}return false}async invalidatePattern(e){let t=0;try{for await(let r of this.provider.scan(e))r.length>0&&(t+=await this.provider.delMany(r));this.options.enableStats&&(this.stats.invalidations+=t);}catch(r){this.log.error({error:r,pattern:e},"Cache invalidatePattern failed");}return t}async acquireLock(e){try{let t=cr(e);return await this.provider.acquireLock(t,this.options.lockTimeout)}catch(t){return this.log.error({error:t,key:e},"Cache acquireLock failed"),true}}async releaseLock(e){try{let t=cr(e);await this.provider.releaseLock(t);}catch(t){this.log.warn({error:t,key:e},"Cache releaseLock failed");}}async waitForCache(e,t){let r=Date.now();for(;Date.now()-r<t;){let s=await this.get(e);if(s!==null)return s;await new Promise(n=>setTimeout(n,fs));}return null}getStats(){return {...this.stats}}getProvider(){return this.provider}async disconnect(){await this.provider.disconnect();}updateHitRate(){let e=this.stats.hits+this.stats.misses;this.stats.hitRate=e>0?this.stats.hits/e:0;}};var Rt=null,pr={...Fe};function ur(o,e){return Rt=new tt(o,e),pr=e,Rt}function rt(){return Rt}function Pt(){return pr}function ko(){Rt=null,pr={...Fe};}function Ct(o,e,t){let r=M.child({scope:"CacheMiddleware"});return async(s,n,i)=>{try{let a={};if(e.includeHeaders&&s.rawHeaders)if(e.headerKeys)for(let h of e.headerKeys){let f=s.rawHeaders.get(h);f&&(a[h]=f);}else s.rawHeaders.forEach((h,f)=>{a[f]=h;});let c=s.url,p=c.startsWith("http")?new URL(c).pathname:c.split("?")[0],l=e.fromRequest?await e.fromRequest(s):void 0,d=us({prefix:t.keyPrefix,method:s.method,route:p,routeParams:s.params,body:s.body,bodyKeys:e.bodyKeys,includeBody:e.includeBody,query:s.query,queryKeys:e.queryKeys,includeQuery:e.includeQuery,headers:a,headerKeys:e.headerKeys,includeHeaders:e.includeHeaders,fromRequestValue:l});r.debug({key:d},"Generated cache key");let u=await o.get(d);if(u!==null){n.setHeader(me,"HIT"),n.json(u);return}let m=await o.acquireLock(d);if(!m){let h=e.lockBehavior??t.lockBehavior;if(!(await qo(h,o,d,t.lockTimeout,n)).continueToHandler)return}n.setHeader(me,"MISS"),await i();try{if(n.responseStatus>=200&&n.responseStatus<300){let h=n.getBody(),f=typeof h=="string"?JSON.parse(h):h;await o.set(d,f,e.ttl,{compressed:e.useCompression,tags:e.tags}),r.debug({key:d,ttl:e.ttl},"Cached response");}}catch(h){r.error({error:h,key:d},"Failed to cache response");}finally{m&&await o.releaseLock(d);}}catch(a){return r.error({error:a},"Cache middleware error"),n.setHeader(me,"BYPASS"),i()}}}async function qo(o,e,t,r,s){switch(o){case "bypass":return s.setHeader(me,"BYPASS"),{continueToHandler:true};case "fail":return s.setHeader(me,"BYPASS"),s.setHeader("Retry-After",String(Math.ceil(r/1e3))),s.status(503).json({error:"Service Unavailable",message:"Cache computation in progress"}),{continueToHandler:false};default:{s.setHeader(me,"WAIT");let n=await e.waitForCache(t,r);return n!==null?(s.json(n),{continueToHandler:false}):{continueToHandler:true}}}}var gs=null;function ys(o){if(o.schema&&!o.map)throw new Error("setPolicyErrorHandler: 'map' function is required when 'schema' is provided. The schema defines the response shape, so 'map' must return data matching it.");gs=o;}function vs(){return gs}var Ot=o=>async(e,t,r)=>{for(let s of o)if(!await s.manager.canAccess(s.scope,s.handler,e)){let i=vs();if(i){let a=i.status??401,c=i.map?await i.map(e):{error:"Unauthorized"};return t.status(a).json(c)}return t.unauthorized({error:"Unauthorized"})}return r()};var Qe=class{staticChildren;paramChild;wildcardChild;middleware;handler;paramName;constructor(){this.staticChildren=new Map,this.paramChild=null,this.wildcardChild=null,this.middleware=null,this.handler=null,this.paramName=null;}},mr=class o{trees;routes;middlewares;basePath;staticRouteCache;handlerResponseSchemas;constructor(e="",t=[]){this.trees=new Map,this.routes=[],this.middlewares=t,this.basePath=this.normalizeBasePath(e),this.staticRouteCache=new Map,this.handlerResponseSchemas=new Map;}getRoutes(){return this.routes.slice()}addOrUpdate(e,t,r,s,n,i,a,c=false){e=e.toUpperCase();let p=t.split("?")[0];is(n?.body,n?.query);let l=as(a),d=n&&(n.body||n.query||n.headers||n.all),u=d?ds(s,n):s,m=d?n:void 0,h=this.trees.get(e);h||(h=new Qe,this.trees.set(e,h));let f=p.replace(/^\/+|\/+$/g,""),g=f.length===0?[]:f.split("/"),y=true,P=[],x=h;for(let b of g){if(b==="*"){y=false,x.wildcardChild||(x.wildcardChild=new Qe),x=x.wildcardChild;break}if(b.startsWith(":")){y=false;let q=b.slice(1);P.push(q),x.paramChild||(x.paramChild={node:new Qe,name:q}),x=x.paramChild.node;continue}x.staticChildren.has(b)||x.staticChildren.set(b,new Qe),x=x.staticChildren.get(b);}if(x.middleware=r,x.handler=u,P.length>0&&(x.paramName=P.join(",")),l&&this.handlerResponseSchemas.set(s,l),y){let b="/"+f,q=`${e}:${b}`;this.staticRouteCache.set(q,{middleware:r,handler:u,params:{},responseSchemas:l});}else {let b="/"+f.replace(/:[^/]+/g,"").replace(/\/+/g,"/"),q=`${e}:${b}`;this.staticRouteCache.delete(q);}let w=this.routes.findIndex(b=>b.method===e&&b.path===t);if(w!==-1){if(!c)throw new Error(`Duplicate route detected: ${e} ${t} is already registered. Each route must be unique.`);this.routes[w].middleware=r,this.routes[w].handler=u,this.routes[w].swaggerOptions=i,this.routes[w].responses=a,this.routes[w].responseSchemas=l,this.routes[w].validationSchemas=m;return}this.routes.push({method:e,path:t,middleware:r,handler:u,swaggerOptions:i,responses:a,responseSchemas:l,validationSchemas:m});}find(e,t){e=e.toUpperCase();let r=t,s=t.indexOf("?");s!==-1&&(r=t.substring(0,s));let n=`${e}:${r}`,i=this.staticRouteCache.get(n);if(i)return i;let a=this.trees.get(e);if(!a)return null;let c=r.replace(/^\/+|\/+$/g,""),p=c.length===0?[]:c.split("/"),l={},d=a;for(let m=0;m<p.length;m++){let h=p[m];if(d.staticChildren.has(h)){d=d.staticChildren.get(h);continue}if(d.paramChild){l[d.paramChild.name]=ws(h),d=d.paramChild.node;continue}if(d.wildcardChild){l["*"]=ws(p.slice(m).join("/")),d=d.wildcardChild;break}return null}if(!d.handler||!d.middleware)return null;let u=this.handlerResponseSchemas.get(d.handler);return {middleware:d.middleware,handler:d.handler,params:l,responseSchemas:u}}extractOptionsAndHandler(e,t){if(typeof e=="function")return {middlewares:[],handler:e,swaggerOptions:void 0};let r=e,s=Array.isArray(r.middlewares)?r.middlewares:r.middlewares?[r.middlewares]:[];if(r.policy){let i=(Array.isArray(r.policy)?r.policy:[r.policy]).map(a=>({scope:a.scope,handler:a.handler,manager:a.manager}));s.unshift(Ot(i));}if(r.cache){let n=rt();if(n){let i=Tt(r.cache),a=Ct(n,i,Pt());s.push(a);}}return {middlewares:s,handler:t,body:r.body,query:r.query,headers:r.headers,all:r.all,responses:r.responses,swaggerOptions:r.swagger}}get(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,query:a,headers:c,responses:p,swaggerOptions:l}=this.extractOptionsAndHandler(t,r);if("body"in t||"all"in t)throw new Error(`Invalid route configuration for GET ${s}: body/all validation is not allowed. HTTP specification does not support request body for GET method. Use query or headers validation instead.`);let d=[...this.middlewares,...n],u={query:a,headers:c};this.addOrUpdate("GET",s,d,i,u,l,p);}post(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("POST",s,m,i,h,u,d);}patch(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("PATCH",s,m,i,h,u,d);}put(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("PUT",s,m,i,h,u,d);}delete(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,query:a,headers:c,responses:p,swaggerOptions:l}=this.extractOptionsAndHandler(t,r);if("body"in t||"all"in t)throw new Error(`Invalid route configuration for DELETE ${s}: body/all validation is not allowed. HTTP specification does not support request body for DELETE method. Use query or headers validation instead.`);let d=[...this.middlewares,...n],u={query:a,headers:c};this.addOrUpdate("DELETE",s,d,i,u,l,p);}options(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("OPTIONS",s,m,i,h,u,d);}head(e,t,r){let s=this.joinPath(e),{middlewares:n,handler:i,body:a,query:c,headers:p,all:l,responses:d,swaggerOptions:u}=this.extractOptionsAndHandler(t,r),m=[...this.middlewares,...n],h={body:a,query:c,headers:p,all:l};this.addOrUpdate("HEAD",s,m,i,h,u,d);}group(e,t,r){let s=Array.isArray(t)?t:typeof t=="function"?[]:t?[t]:[],n=Array.isArray(t)?r:typeof t=="function"?t:void 0,i=this.joinPath(e),a=new o(i,[...this.middlewares,...s]);n?.(a);for(let c of a.getRoutes())this.addOrUpdate(c.method,c.path,c.middleware,c.handler,c.validationSchemas,c.swaggerOptions,c.responses);}applyGlobalMiddlewaresToAllRoutes(e){for(let t of this.routes){let r=[...e,...t.middleware||[]];this.addOrUpdate(t.method,t.path,r,t.handler,void 0,void 0,void 0,true);}}normalizeBasePath(e){if(!e)return "";let t=e.replace(/\s+/g,"");return t=t.replace(/\/+/g,"/"),t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/g,"")),t}joinPath(e){let r=[this.basePath,e].filter(s=>typeof s=="string"&&s.length>0).join("/");return r=r.replace(/\/+/g,"/"),r.startsWith("/")||(r="/"+r),r.length>1&&(r=r.replace(/\/+$/g,"")),r}clearRoutes(){this.routes=[],this.staticRouteCache.clear(),this.handlerResponseSchemas.clear(),this.trees.clear();}},_=new mr;function ws(o){if(o.includes("\0"))throw Object.assign(new Error("NUL byte in route parameter"),{status:400});try{let e=decodeURIComponent(o);if(e.includes("\0"))throw Object.assign(new Error("NUL byte in route parameter"),{status:400});return e}catch(e){if(e.status===400)throw e;return o}}var fr=class o{static cronstrue=null;static async getCronstrue(){return this.cronstrue||(this.cronstrue=await Promise.resolve().then(()=>go(bs())).catch(()=>{throw new R("cronstrue not installed as a dependency, it is required in order to consult cron jobs in UI")})),this.cronstrue}async generate(){let e=await o.getCronstrue(),t=W.scheduledJobs,r=new Set,s=new Set,i=t.map(l=>{let d=e.default.toString(l.args[0])||"-",u=l.args[2]?.timezone||"System Default";return r.add(d),s.add(u),{name:l.name,schedule:l.args[0],frequency:d,timezone:u}}).map(l=>`
5
5
  <tr data-name="${this.escapeHtml(l.name.toLowerCase())}" data-frequency="${this.escapeHtml(l.frequency)}" data-timezone="${this.escapeHtml(l.timezone)}">
6
6
  <td class="name">${this.escapeHtml(l.name)}</td>
7
7
  <td class="schedule"><code>${this.escapeHtml(l.schedule)}</code></td>
@@ -490,9 +490,9 @@ Zod is a peer dependency required when using Zod schemas for validation.`)}}stat
490
490
  })();
491
491
  </script>
492
492
  </body>
493
- </html>`}escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}},gr=new fr;var W=class{static scheduledJobs=[];static logger=M.child({scope:"CronService"});static register(e,...t){t[2]={name:e,...t[2]},this.scheduledJobs.push({name:e,args:t});}static async run(){let e=(await import('node-cron').catch(()=>{throw new R("node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator")})).default;if(this.logger.info("Scheduling cron jobs"),!this.scheduledJobs.length){this.logger.info("No cron jobs to schedule");return}for(let{name:t,args:r}of this.scheduledJobs)this.logger.info(`Scheduling cron job: ${t}`),e.schedule(...r).on("execution:failed",n=>this.globalErrorHandler(n));this.logger.info("Cron jobs scheduled");}static globalErrorHandler(e){this.logger.error(e.execution?.error);}static async massiveImportCronJobs(e){let t=[];for(let r of e){let s=await v.glob(r,{cwd:L.getCwd()});t.push(...s);}await Promise.all(t.map(async r=>{await import(r).catch(s=>{this.logger.error(`Error importing cron job: ${r}`),M.error(s);});}));}},qo=o=>{W.globalErrorHandler=o.bind(W);},Ao=async o=>{if(!o||o.path.length===0)throw new R("Cron UI path is required");let e=await gr.generate();_.addOrUpdate("GET",o.path,[],(t,r)=>{r.html(e);},void 0,void 0,void 0,true);};var _o=(o,e)=>function(t,r,s){let n=s.value,i=async(...a)=>{let c=new t.constructor;return await n.apply(c,a)};return W.register(`${t.constructor.name}.${r}`,o,i,e),s};J();var yr=class{getCliArgs(){switch(E.type){case "bun":return this.getBunArgs();case "node":return this.getNodeArgs();case "deno":return Deno.args;default:throw new Error("Unsupported runtime")}}getCliCaller(){switch(E.type){case "bun":return "bun";case "node":return process.argv[0];case "deno":return "deno";default:throw new Error("Unsupported runtime")}}getBunArgs(){let e=Bun.argv,t=this.findScriptIndex(e);return e.slice(t+1)}getNodeArgs(){let e=process.argv,t=this.findScriptIndex(e);return e.slice(t+1)}findScriptIndex(e){if(e.length>=3&&e[1].includes(".bin/"))return 1;for(let t=0;t<e.length;t++){let r=e[t],s=r.split("/").pop()||r;if(!r.startsWith("-")){if(s==="yarn"&&t+1<e.length&&e[t+1]==="run"||s==="npx"&&t+1<e.length)return t+1;if(s==="yarn"||s==="pnpm")return t;if(s==="npm"&&t+1<e.length&&e[t+1]==="run"||s==="bun"&&t+1<e.length&&e[t+1]==="run")return t+1;if(/\.(js|ts|mjs|cjs)$/.test(r))return t;if(/^(tsx|ts-node|node|bun)$/.test(s)){for(let n=t+1;n<e.length;n++)if(!e[n].startsWith("-")&&/\.(js|ts|mjs|cjs)$/.test(e[n]))return n;return t}}}for(let t=e.length-1;t>=0;t--)if(!e[t].startsWith("-"))return t;return 1}},vr=new yr;var Mt=o=>o.toLowerCase().replace(/[-_.]/g,"_").replace(/([A-Z])/g,"_$1").replace(/^_+/,"").replace(/_+$/,"").toLowerCase(),jt=o=>o.split(/[-_.]/g).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(""),Ss=o=>o.split(/[-_.]/g).map(e=>e.toLowerCase()).join("-");var be=(o,e)=>{if(!o||typeof o!="string")return e;let t=o.toLowerCase().trim(),r=t.match(/^(\d+(?:\.\d+)?)kb$/),s=t.match(/^(\d+(?:\.\d+)?)mb$/);if(r){let n=Number.parseFloat(r[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024)}if(s){let n=Number.parseFloat(s[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024*1024)}return e};var Ho=o=>{if(!o||o==="-"||o==="--")return null;let e=o.indexOf("=");if(e>0){let t=o.substring(0,e),r=o.substring(e+1);return {name:t,value:xs(r)}}return {name:o,value:true}},xs=o=>{if(o.toLowerCase()==="true")return true;if(o.toLowerCase()==="false")return false;let e=Number(o);return !Number.isNaN(e)&&Number.isFinite(e)?e:o},Se=()=>{let o=vr.getCliArgs(),e=[],t={};if(!o||!o.length)return {args:e,flags:t};for(let r=0;r<o.length;r++){let s=o[r];if(!(!s||typeof s!="string")){if(s.startsWith("-")){let n=Ho(s);if(n){if(n.value===true&&r+1<o.length){let i=o[r+1];i&&typeof i=="string"&&!i.startsWith("-")&&(n.value=xs(i),r++);}if(n.name in t){let i=t[n.name];Array.isArray(i)?i.push(n.value):t[n.name]=[i,n.value];}else t[n.name]=n.value;}continue}e.push(s);}}return {args:e,flags:t}};var kt=()=>vr.getCliArgs()[0]||null;var xe="VALIDATION_ERROR";var Ts=Se().args.slice(1),N=o=>(e,t)=>{let r=kt();if(!r||r!==e.commandName)return;let s=t;O.set(e,t,{type:"arg",name:s,description:o.description});let n=Ts.length?Ts.shift():o.defaultValue;if(o.required&&!n){let i=O.get(e,xe);O.set(e,xe,[...i||[],{type:"arg",name:s,message:"Required argument not provided"}]);return}o.parse&&n&&(n=o.parse(n)),Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true});};var re=o=>(e,t)=>{let r=kt();if(!r||r!==e.commandName)return;let s=o.name||t,n=Se().flags,i=o.aliases?Array.isArray(o.aliases)?o.aliases:[o.aliases]:[],a=[s,...i],c=o.defaultValue;for(let p of a){let l=[p,`-${p}`,`--${p}`];for(let d of l)if(d in n){let u=n[d];o.type==="list"?c=(Array.isArray(u)?u:[u]).map(h=>{let f=String(h);return o.parse?o.parse(f):f}):(c=u,o.type==="boolean"?c=!!c:o.type==="number"?c=Number(c):o.type==="string"&&(c=String(c)),o.parse&&(c=o.parse(c)));break}if(c!==o.defaultValue)break}if(O.set(e,t,{type:"flag",name:s,aliases:i||[],description:o.description}),o.required&&(o.type==="list"?!c||Array.isArray(c)&&c.length===0:!c)){let l=O.get(e,xe);O.set(e,xe,[...l||[],{type:"flag",name:s,message:"Required flag not provided"}]);return}Object.defineProperty(e,t,{value:c,enumerable:true,configurable:true,writable:true});};re.boolean=o=>re({...o,type:"boolean"});re.string=o=>re({...o,type:"string"});re.number=o=>re({...o,type:"number"});re.list=o=>re({...o,type:"list"});re.array=o=>re({...o,type:"list"});var C=re;var $o=(o,e)=>t=>{let r=O.get(t.prototype,"__class__"),s=r?.middlewares||[],n=r?.policies||[],i=O.getAll(t.prototype),a=new t;if(i){for(let[c,p]of i.entries()){if(!p.route)continue;let l=t.prototype[c].bind(a),d=o?S.join(o,p.route.path):p.route.path,u=[...n,...p.policies||[]],m=u.length>0?[Ot(u)]:[],h=[...s,...m,...p.middlewares||[]];if(p.cacheConfig){let f=rt();if(f){let g=Tt(p.cacheConfig),y=Ct(f,g,Pt());h.push(y);}}_.addOrUpdate(p.route.method,d,h,l,{service:t.name.replace(/Controller$/,""),...e,...p.documentation});}O.clear(t.prototype);}};var Bo=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"DELETE"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"DELETE"},O.set(t,r,n),s};var No=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"GET"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"GET"},O.set(t,r,n),s};var Io=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"PATCH"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"PATCH"},O.set(t,r,n),s};var Lo=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"POST"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"POST"},O.set(t,r,n),s};var Do=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"PUT"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"PUT"},O.set(t,r,n),s};var Fo=o=>(e,t,r)=>{if(typeof t>"u"){let n=O.get(e.prototype,"__class__");if(n||(n={middlewares:[]}),n.middlewares||(n.middlewares=[]),!o)throw new Error(`Middleware ${String(o)} not found, are you sure you defined it before using it?`);return Array.isArray(o)||(o=[o]),n.middlewares.push(...o),O.set(e.prototype,"__class__",n),e}let s=O.get(e,t);return s||(s={middlewares:[]}),s.middlewares||(s.middlewares=[]),Array.isArray(o)||(o=[o]),s.middlewares.push(...o),O.set(e,t,s),r};var Ue=(o,e,t=true)=>{if(!o(e)){if(t)throw new ValidationError(o.errors||[]);return e}return e};var st=new WeakMap,Rs=new WeakSet,Uo=o=>{let{jsonSchema:e,prefix:t}=Ps(o);try{return j.getOrCompileValidator(e,t)}catch{return null}},Ps=o=>H.isZodSchema(o)?{jsonSchema:H.toJSONSchema(o),prefix:"serialize_zod"}:D.isTypeBoxSchema(o)?{jsonSchema:o,prefix:"serialize_typebox"}:typeof o=="object"&&o!==null?{jsonSchema:o,prefix:"serialize_json"}:{jsonSchema:{type:typeof o},prefix:`serialize_primitive_${JSON.stringify(o)}`},zo=(o,e)=>(t,r,s)=>{let n=O.get(t,r)||{middlewares:[],route:{}};n.documentation||(n.documentation={}),n.documentation.responses||(n.documentation.responses={}),n.serializeOptions||(n.serializeOptions={});let i=Number(e?.status??200);n.documentation.responses[i]=o,n.serializeOptions[i]=e?.throwErrorOnValidationFail??false,O.set(t,r,n),ir(o);let{jsonSchema:a,prefix:c}=Ps(o);j.getOrCreateSerializer(a,c);let p=st.get(s.value)||{};if(p[i]={name:r,schema:o,throwErrorOnValidationFail:e?.throwErrorOnValidationFail??false},st.set(s.value,p),!Rs.has(s.value)){let l=s.value,d=async function(...m){let h=m[1];await l.apply(this,m);let f=h.responseStatus,g=st.get(d),y=g?.[f]?.schema,P=g?.[f]?.throwErrorOnValidationFail??false;if(!y)return;let x=h.getBody();if(P){let w=Uo(y);if(w)try{await Ue(w,x,P);}catch(b){return M.error({error:b,body:x,statusCode:f,schemaDescription:typeof y=="object"&&y!==null?Object.keys(y).slice(0,5).join(", "):"unknown"},"Response validation failed in @serialize decorator"),h.status(500).json({error:"Internal Server Error",message:"Response validation failed"})}}h.json(x,y);};Rs.add(d);let u=st.get(l);u&&st.set(d,u),s.value=d;}};var Te=o=>(e,t,r)=>{let s=r.value,n=O.get(e,t);return n||(n={middlewares:[],route:{}}),n.documentation||(n.documentation={}),o.body&&(n.documentation.requestBody=o.body),o.query&&(n.documentation.query=o.query),o.all&&(n.documentation.requestBody=o.all,n.documentation.query=o.all),O.set(e,t,n),r.value=async function(...i){let a=i[0],c=i[1];try{let p,l,d,u=o.throwOnValidationFail??!0;o.body&&(p=a.validate(o.body,u)),o.query&&(l=a.validateQuery(o.query,u)),o.all&&(d=a.validateAll(o.all,u));let m=[...i];return p!==void 0&&m.push(p),l!==void 0&&m.push(l),d!==void 0&&m.push(d),s.apply(this,m)}catch(p){if(o.customError)return c.status(o.customError.status||400).json({received:a.body,schema:o.body,error:p});let l=De();if(p instanceof ValidationError){let u=p,m={message:u.message,errors:u.errors,ajv:true,validation:true};if(l){let h=l.status??422,f=l.map?l.map(m,a):m;return c.status(h).json(f)}return c.unprocessableEntity(m)}let d={message:p instanceof Error?p.message:String(p),errors:[],ajv:true,validation:true};if(l){let u=l.status??422,m=l.map?l.map(d,a):d;return c.status(u).json(m)}return c.unprocessableEntity(p)}},r};Te.query=(o,e)=>Te({query:o,...e});Te.body=(o,e)=>Te({body:o,...e});Te.all=(o,e)=>Te({all:o,...e});var Vo=Te;var wr=class o{constructor(e=new Map){this.variants=e;}defineVariant(...e){let[t,r,s]=e,n=new Map(this.variants);if(s)typeof r=="function"&&typeof s!="function"?n.set(t,{handler:r,schema:s}):n.set(t,{handler:s,schema:r});else {let i=typeof r=="function"?r:void 0,a=typeof r=="function"?void 0:r;n.set(t,{handler:i,schema:a});}return new o(n)}async useVariant(e,t,r){let s=this.variants.get(e);if(!s){let c=Array.from(this.variants.keys()).join(", ")||"(none)";throw new Error(`Serializer variant "${e}" is not defined. Defined variants: ${c}`)}let n=r?.ctx,i=r?.validate??false,a=await s.handler(t,n);return i&&s.schema?Jo(s.schema,a):a}},Jo=async(o,e)=>{if(H.isZodSchema(o))return o.parse(e);if(D.isTypeBoxSchema(o)){let{Value:r}=await import('@sinclair/typebox/value');if(!r.Check(o,e)){let s=Array.from(r.Errors(o,e));throw new Error(`Serializer validation failed:
493
+ </html>`}escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}},gr=new fr;var W=class{static scheduledJobs=[];static logger=M.child({scope:"CronService"});static register(e,...t){t[2]={name:e,...t[2]},this.scheduledJobs.push({name:e,args:t});}static async run(){let e=(await import('node-cron').catch(()=>{throw new R("node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator")})).default;if(this.logger.info("Scheduling cron jobs"),!this.scheduledJobs.length){this.logger.info("No cron jobs to schedule");return}for(let{name:t,args:r}of this.scheduledJobs)this.logger.info(`Scheduling cron job: ${t}`),e.schedule(...r).on("execution:failed",n=>this.globalErrorHandler(n));this.logger.info("Cron jobs scheduled");}static globalErrorHandler(e){this.logger.error(e.execution?.error);}static async massiveImportCronJobs(e){let t=[];for(let r of e){let s=await v.glob(r,{cwd:L.getCwd()});t.push(...s);}await Promise.all(t.map(async r=>{await import(r).catch(s=>{this.logger.error(`Error importing cron job: ${r}`),M.error(s);});}));}},Ao=o=>{W.globalErrorHandler=o.bind(W);},_o=async o=>{if(!o||o.path.length===0)throw new R("Cron UI path is required");let e=await gr.generate();_.addOrUpdate("GET",o.path,[],(t,r)=>{r.html(e);},void 0,void 0,void 0,true);};var Ho=(o,e)=>function(t,r,s){let n=s.value,i=async(...a)=>{let c=new t.constructor;return await n.apply(c,a)};return W.register(`${t.constructor.name}.${r}`,o,i,e),s};J();var yr=class{getCliArgs(){switch(E.type){case "bun":return this.getBunArgs();case "node":return this.getNodeArgs();case "deno":return Deno.args;default:throw new Error("Unsupported runtime")}}getCliCaller(){switch(E.type){case "bun":return "bun";case "node":return process.argv[0];case "deno":return "deno";default:throw new Error("Unsupported runtime")}}getBunArgs(){let e=Bun.argv,t=this.findScriptIndex(e);return e.slice(t+1)}getNodeArgs(){let e=process.argv,t=this.findScriptIndex(e);return e.slice(t+1)}findScriptIndex(e){if(e.length>=3&&e[1].includes(".bin/"))return 1;for(let t=0;t<e.length;t++){let r=e[t],s=r.split("/").pop()||r;if(!r.startsWith("-")){if(s==="yarn"&&t+1<e.length&&e[t+1]==="run"||s==="npx"&&t+1<e.length)return t+1;if(s==="yarn"||s==="pnpm")return t;if(s==="npm"&&t+1<e.length&&e[t+1]==="run"||s==="bun"&&t+1<e.length&&e[t+1]==="run")return t+1;if(/\.(js|ts|mjs|cjs)$/.test(r))return t;if(/^(tsx|ts-node|node|bun)$/.test(s)){for(let n=t+1;n<e.length;n++)if(!e[n].startsWith("-")&&/\.(js|ts|mjs|cjs)$/.test(e[n]))return n;return t}}}for(let t=e.length-1;t>=0;t--)if(!e[t].startsWith("-"))return t;return 1}},vr=new yr;var Mt=o=>o.toLowerCase().replace(/[-_.]/g,"_").replace(/([A-Z])/g,"_$1").replace(/^_+/,"").replace(/_+$/,"").toLowerCase(),jt=o=>o.split(/[-_.]/g).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(""),Ss=o=>o.split(/[-_.]/g).map(e=>e.toLowerCase()).join("-");var be=(o,e)=>{if(!o||typeof o!="string")return e;let t=o.toLowerCase().trim(),r=t.match(/^(\d+(?:\.\d+)?)kb$/),s=t.match(/^(\d+(?:\.\d+)?)mb$/);if(r){let n=Number.parseFloat(r[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024)}if(s){let n=Number.parseFloat(s[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024*1024)}return e};var $o=o=>{if(!o||o==="-"||o==="--")return null;let e=o.indexOf("=");if(e>0){let t=o.substring(0,e),r=o.substring(e+1);return {name:t,value:xs(r)}}return {name:o,value:true}},xs=o=>{if(o.toLowerCase()==="true")return true;if(o.toLowerCase()==="false")return false;let e=Number(o);return !Number.isNaN(e)&&Number.isFinite(e)?e:o},Se=()=>{let o=vr.getCliArgs(),e=[],t={};if(!o||!o.length)return {args:e,flags:t};for(let r=0;r<o.length;r++){let s=o[r];if(!(!s||typeof s!="string")){if(s.startsWith("-")){let n=$o(s);if(n){if(n.value===true&&r+1<o.length){let i=o[r+1];i&&typeof i=="string"&&!i.startsWith("-")&&(n.value=xs(i),r++);}if(n.name in t){let i=t[n.name];Array.isArray(i)?i.push(n.value):t[n.name]=[i,n.value];}else t[n.name]=n.value;}continue}e.push(s);}}return {args:e,flags:t}};var kt=()=>vr.getCliArgs()[0]||null;var xe="VALIDATION_ERROR";var Ts=Se().args.slice(1),N=o=>(e,t)=>{let r=kt();if(!r||r!==e.commandName)return;let s=t;O.set(e,t,{type:"arg",name:s,description:o.description});let n=Ts.length?Ts.shift():o.defaultValue;if(o.required&&!n){let i=O.get(e,xe);O.set(e,xe,[...i||[],{type:"arg",name:s,message:"Required argument not provided"}]);return}o.parse&&n&&(n=o.parse(n)),Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true});};var re=o=>(e,t)=>{let r=kt();if(!r||r!==e.commandName)return;let s=o.name||t,n=Se().flags,i=o.aliases?Array.isArray(o.aliases)?o.aliases:[o.aliases]:[],a=[s,...i],c=o.defaultValue;for(let p of a){let l=[p,`-${p}`,`--${p}`];for(let d of l)if(d in n){let u=n[d];o.type==="list"?c=(Array.isArray(u)?u:[u]).map(h=>{let f=String(h);return o.parse?o.parse(f):f}):(c=u,o.type==="boolean"?c=!!c:o.type==="number"?c=Number(c):o.type==="string"&&(c=String(c)),o.parse&&(c=o.parse(c)));break}if(c!==o.defaultValue)break}if(O.set(e,t,{type:"flag",name:s,aliases:i||[],description:o.description}),o.required&&(o.type==="list"?!c||Array.isArray(c)&&c.length===0:!c)){let l=O.get(e,xe);O.set(e,xe,[...l||[],{type:"flag",name:s,message:"Required flag not provided"}]);return}Object.defineProperty(e,t,{value:c,enumerable:true,configurable:true,writable:true});};re.boolean=o=>re({...o,type:"boolean"});re.string=o=>re({...o,type:"string"});re.number=o=>re({...o,type:"number"});re.list=o=>re({...o,type:"list"});re.array=o=>re({...o,type:"list"});var C=re;var Bo=(o,e)=>t=>{let r=O.get(t.prototype,"__class__"),s=r?.middlewares||[],n=r?.policies||[],i=O.getAll(t.prototype),a=new t;if(i){for(let[c,p]of i.entries()){if(!p.route)continue;let l=t.prototype[c].bind(a),d=o?S.join(o,p.route.path):p.route.path,u=[...n,...p.policies||[]],m=u.length>0?[Ot(u)]:[],h=[...s,...m,...p.middlewares||[]];if(p.cacheConfig){let f=rt();if(f){let g=Tt(p.cacheConfig),y=Ct(f,g,Pt());h.push(y);}}_.addOrUpdate(p.route.method,d,h,l,{service:t.name.replace(/Controller$/,""),...e,...p.documentation});}O.clear(t.prototype);}};var No=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"DELETE"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"DELETE"},O.set(t,r,n),s};var Io=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"GET"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"GET"},O.set(t,r,n),s};var Lo=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"PATCH"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"PATCH"},O.set(t,r,n),s};var Do=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"POST"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"POST"},O.set(t,r,n),s};var Fo=(o,e)=>(t,r,s)=>{let n=O.get(t,r);return n||(n={middlewares:[],route:{path:o,method:"PUT"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:o,method:"PUT"},O.set(t,r,n),s};var Qo=o=>(e,t,r)=>{if(typeof t>"u"){let n=O.get(e.prototype,"__class__");if(n||(n={middlewares:[]}),n.middlewares||(n.middlewares=[]),!o)throw new Error(`Middleware ${String(o)} not found, are you sure you defined it before using it?`);return Array.isArray(o)||(o=[o]),n.middlewares.push(...o),O.set(e.prototype,"__class__",n),e}let s=O.get(e,t);return s||(s={middlewares:[]}),s.middlewares||(s.middlewares=[]),Array.isArray(o)||(o=[o]),s.middlewares.push(...o),O.set(e,t,s),r};var Ue=(o,e,t=true)=>{if(!o(e)){if(t)throw new ValidationError(o.errors||[]);return e}return e};var st=new WeakMap,Rs=new WeakSet,zo=o=>{let{jsonSchema:e,prefix:t}=Ps(o);try{return j.getOrCompileValidator(e,t)}catch{return null}},Ps=o=>H.isZodSchema(o)?{jsonSchema:H.toJSONSchema(o),prefix:"serialize_zod"}:D.isTypeBoxSchema(o)?{jsonSchema:o,prefix:"serialize_typebox"}:typeof o=="object"&&o!==null?{jsonSchema:o,prefix:"serialize_json"}:{jsonSchema:{type:typeof o},prefix:`serialize_primitive_${JSON.stringify(o)}`},Go=(o,e)=>(t,r,s)=>{let n=O.get(t,r)||{middlewares:[],route:{}};n.documentation||(n.documentation={}),n.documentation.responses||(n.documentation.responses={}),n.serializeOptions||(n.serializeOptions={});let i=Number(e?.status??200);n.documentation.responses[i]=o,n.serializeOptions[i]=e?.throwErrorOnValidationFail??false,O.set(t,r,n),ir(o);let{jsonSchema:a,prefix:c}=Ps(o);j.getOrCreateSerializer(a,c);let p=st.get(s.value)||{};if(p[i]={name:r,schema:o,throwErrorOnValidationFail:e?.throwErrorOnValidationFail??false},st.set(s.value,p),!Rs.has(s.value)){let l=s.value,d=async function(...m){let h=m[1];await l.apply(this,m);let f=h.responseStatus,g=st.get(d),y=g?.[f]?.schema,P=g?.[f]?.throwErrorOnValidationFail??false;if(!y)return;let x=h.getBody();if(P){let w=zo(y);if(w)try{await Ue(w,x,P);}catch(b){return M.error({error:b,body:x,statusCode:f,schemaDescription:typeof y=="object"&&y!==null?Object.keys(y).slice(0,5).join(", "):"unknown"},"Response validation failed in @serialize decorator"),h.status(500).json({error:"Internal Server Error",message:"Response validation failed"})}}h.json(x,y);};Rs.add(d);let u=st.get(l);u&&st.set(d,u),s.value=d;}};var Te=o=>(e,t,r)=>{let s=r.value,n=O.get(e,t);return n||(n={middlewares:[],route:{}}),n.documentation||(n.documentation={}),o.body&&(n.documentation.requestBody=o.body),o.query&&(n.documentation.query=o.query),o.all&&(n.documentation.requestBody=o.all,n.documentation.query=o.all),O.set(e,t,n),r.value=async function(...i){let a=i[0],c=i[1];try{let p,l,d,u=o.throwOnValidationFail??!0;o.body&&(p=a.validate(o.body,u)),o.query&&(l=a.validateQuery(o.query,u)),o.all&&(d=a.validateAll(o.all,u));let m=[...i];return p!==void 0&&m.push(p),l!==void 0&&m.push(l),d!==void 0&&m.push(d),s.apply(this,m)}catch(p){if(o.customError)return c.status(o.customError.status||400).json({received:a.body,schema:o.body,error:p});let l=De();if(p instanceof ValidationError){let u=p,m={message:u.message,errors:u.errors,ajv:true,validation:true};if(l){let h=l.status??422,f=l.map?l.map(m,a):m;return c.status(h).json(f)}return c.unprocessableEntity(m)}let d={message:p instanceof Error?p.message:String(p),errors:[],ajv:true,validation:true};if(l){let u=l.status??422,m=l.map?l.map(d,a):d;return c.status(u).json(m)}return c.unprocessableEntity(d)}},r};Te.query=(o,e)=>Te({query:o,...e});Te.body=(o,e)=>Te({body:o,...e});Te.all=(o,e)=>Te({all:o,...e});var Jo=Te;var wr=class o{constructor(e=new Map){this.variants=e;}defineVariant(...e){let[t,r,s]=e,n=new Map(this.variants);if(s)typeof r=="function"&&typeof s!="function"?n.set(t,{handler:r,schema:s}):n.set(t,{handler:s,schema:r});else {let i=typeof r=="function"?r:void 0,a=typeof r=="function"?void 0:r;n.set(t,{handler:i,schema:a});}return new o(n)}async useVariant(e,t,r){let s=this.variants.get(e);if(!s){let c=Array.from(this.variants.keys()).join(", ")||"(none)";throw new Error(`Serializer variant "${e}" is not defined. Defined variants: ${c}`)}let n=r?.ctx,i=r?.validate??false,a=await s.handler(t,n);return i&&s.schema?Wo(s.schema,a):a}},Wo=async(o,e)=>{if(H.isZodSchema(o))return o.parse(e);if(D.isTypeBoxSchema(o)){let{Value:r}=await import('@sinclair/typebox/value');if(!r.Check(o,e)){let s=Array.from(r.Errors(o,e));throw new Error(`Serializer validation failed:
494
494
  ${s.map(n=>` - ${n.message} at ${n.path}`).join(`
495
- `)}`)}return r.Cast(o,e)}let t=j.getOrCompileValidator(o,"serializer_json");return Ue(t,e,true)};function Wo(o,e){return new wr}var br=class{logger=M.child({scope:this.constructor.name})};var Ko=o=>{if(!Buffer.isBuffer(o))return o;let e=o.toString();if(!e.length)return e;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:e}catch{return e}},ze=class o{static subscriptions=[];static client=null;static connectionOptions={};static logger=M.child({scope:"MqttService"});static register(e,t,r,s){this.subscriptions.push({name:e,topic:t,handler:r,options:s});}static async connect(e={}){let t=await import('mqtt').catch(()=>{throw new R("mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator")});this.connectionOptions=e,this.logger.info("Starting MQTT client"),this.subscriptions.length||this.logger.info("No MQTT subscriptions to register");let{host:r=process.env.MQTT_HOST||"localhost",port:s=Number(process.env.MQTT_PORT)||1883,protocol:n="mqtt",...i}=e,a=`${n}://${r}:${s}`;this.client=await t.connectAsync(a,i),this.logger.info("MQTT client connected"),this.client.on("error",async c=>{await this.globalErrorHandler(c);}),this.client.on("message",(c,p)=>{this.handleMessage(c,p);}),this.client.on("disconnect",()=>{this.logger.info("MQTT client disconnected");}),this.client.on("reconnect",async()=>{await this.globalErrorHandler(new Error("MQTT client reconnecting"));}),this.subscribeToTopics();}static subscribeToTopics(){if(this.client)for(let{name:e,topic:t,options:r}of this.subscriptions)this.logger.info(`Subscribing to MQTT topic: ${t} (${e})`),this.client.subscribe(t,r||{},s=>{if(s){this.logger.error(`Failed to subscribe to topic ${t}: ${s.message}`);return}this.logger.info(`Successfully subscribed to topic: ${t}`);});}static async handleMessage(e,t){let r=this.subscriptions.filter(s=>{if(s.topic===e)return true;if(!e||typeof e!="string")return false;let n=s.topic.replace(/\+/g,"[^/]+").replace(/#$/,".*");return new RegExp(`^${n}$`).test(e)});for(let s of r)try{await s.handler(e,t);}catch(n){this.logger.error(`Error handling MQTT message for topic ${e} in ${s.name}`),this.globalErrorHandler(n);}}static globalErrorHandler(e){this.logger.error(e);}static setOnDisconnectHandler(e){this.client?.on("disconnect",e);}static setOnReconnectHandler(e){this.client?.on("reconnect",e);}static async massiveImportMqttHandlers(e){let t=[];for(let r of e){let s=await v.glob(r,{cwd:L.getCwd()});t.push(...s);}await Promise.all(t.map(async r=>{await import(r).catch(s=>{this.logger.error(`Error importing MQTT handler: ${r}`),this.logger.error(s);});}));}subscribe(e,t){return function(r,s,n){let i=n.value;if(!i)return n;let a=async(c,p)=>{let l=new r.constructor,d=Ko(p);if(i.length===1){await i.call(l,d);return}await i.call(l,c,d);};return o.register(`${r.constructor.name}.${s}`,e,a,t),n}}async unsubscribe(e){if(!o.client)throw new R("MQTT client is not connected. Call MqttService.connect() first.");if(!o.client.connected)throw new R("MQTT client is not connected. Call MqttService.connect() first.");try{await o.client.unsubscribeAsync(e),o.subscriptions=o.subscriptions.filter(t=>t.topic!==e),o.logger.debug(`Unsubscribed from topic: ${String(e)}`);}catch(t){throw o.logger.error(`Failed to unsubscribe from topic ${String(e)}: ${t.message}`),t}}async publish(e,t,r){if(!o.client)throw new R("MQTT client is not connected. Call MqttService.connect() first.");if(!o.client.connected)throw new R("MQTT client is not connected. Call MqttService.connect() first.");let s;Buffer.isBuffer(t)?s=t:typeof t=="object"?s=JSON.stringify(t):s=String(t);try{await o.client.publishAsync(e,s,r||{}),M.debug(`Published message to topic: ${String(e)}`);}catch(n){throw M.error(`Failed to publish to topic ${String(e)}: ${n.message}`),n}}static async disconnect(){if(this.client)return new Promise(e=>{let t=this.client;t?.end(false,{},()=>{M.info("MQTT client disconnected gracefully"),t?.emit("disconnect",{cmd:"disconnect"}),this.client=null,e();});})}},Xo=o=>{ze.globalErrorHandler=o.bind(ze);},Zo=new ze;var Y=class extends R{constructor(...e){super(`Library not installed: ${e.join(", ")}, try run npm install ${e.join(" ")}`);}};var Sr=class{randomUUID(){return crypto.randomUUID()}},ee=new Sr;var ae=class{static options={connection:{}}},Cs=o=>{ae.options=o??{connection:{}};};var ot=class{queues=new Map;workers=new Map;async publish(e,t,r){let s=await this.getQueue(e),n=ee.randomUUID();return await s.add(e,t,{jobId:n,...ae.options?.defaultJobOptions,...r}),{id:n}}async subscribe(e,t){if(this.workers.has(e))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let{errorHandler:r,...s}=ae.options??{},n=await this.getBullMQClient(),i=new n.Worker(e,async a=>{try{await t(a.data);}catch(c){await r?.(a,c)??Promise.reject(c);}},{...s});this.workers.set(e,i);}async unsubscribe(e){let t=this.workers.get(e);t&&(await t.close(),this.workers.delete(e));}async getQueue(e){if(!this.queues.has(e)){let t=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")}),r=new t.Queue(e,{...ae.options||{connection:{}}});this.queues.set(e,r);}return this.queues.get(e)}async getBullMQClient(){return this.bullmqClient||(this.bullmqClient=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")})),this.bullmqClient}async publishWithConfig(e,t,r,s){let n=await this.getQueueWithConfig(e,s),i=ee.randomUUID(),a={jobId:i,...ae.options?.defaultJobOptions,...s?.defaultJobOptions,...r};return await n.add(e,t,a),{id:i}}async subscribeWithConfig(e,t,r){let s=this.getWorkerKey(e,r);if(this.workers.has(s))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let n=ae.options??{},{errorHandler:i}=n,a=await this.getBullMQClient(),c={...n,...r};delete c.errorHandler,delete c.defaultJobOptions;let p=new a.Worker(e,async l=>{try{await t(l.data);}catch(d){await i?.(l,d)??Promise.reject(d);}},c);this.workers.set(s,p);}async getQueueWithConfig(e,t){let r=this.getQueueKey(e,t);if(!this.queues.has(r)){let s=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")}),n={...ae.options||{connection:{}},...t},i=new s.Queue(e,n);this.queues.set(r,i);}return this.queues.get(r)}getQueueKey(e,t){return t?.connection?`${e}:${JSON.stringify(t.connection)}`:e}getWorkerKey(e,t){return this.getQueueKey(e,t)}};var nt=class{subscribers=new Map;messageQueue=[];maxQueueSize;processingPromise=null;constructor(e=1e4){this.maxQueueSize=e;}clear(){this.subscribers.clear(),this.messageQueue=[],this.processingPromise=null;}async publish(e,t,r){if(this.messageQueue.length>=this.maxQueueSize)throw new Error(`Queue full: ${this.maxQueueSize} messages pending`);let s=ee.randomUUID();return this.messageQueue.push({topic:e,payload:t}),this.processingPromise||(this.processingPromise=this.processQueue().catch(n=>{console.error("[MemoryPubSub] Fatal queue processing error:",n);}).finally(()=>{this.processingPromise=null;})),{id:s}}async subscribe(e,t){this.subscribers.has(e)||this.subscribers.set(e,new Set);let r=t;this.subscribers.get(e).add(r);}async unsubscribe(e){this.subscribers.delete(e);}async processQueue(){for(;this.messageQueue.length>0;){let e=this.messageQueue.shift();if(!e)break;let t=this.subscribers.get(e.topic);t&&t.size>0&&await Promise.allSettled(Array.from(t).map(r=>r(e.payload).catch(s=>{console.error(`[MemoryPubSub] Handler error for topic "${e.topic}":`,s);})));}}};var se=class{static options={}},Os=o=>{se.options=o??{};};var it=class{createdQueues=new Set;workers=new Map;async publish(e,t,r){let s=await this.getBoss();await this.ensureQueue(e);let n=r||{},i=await s.send(e,t,n);return {id:String(i??"")}}async subscribe(e,t){let r=await this.getBoss();await this.ensureQueue(e);let s=se.options;s.errorHandler&&r.on("error",s.errorHandler);let n=await r.work(e,async i=>{let a=Array.isArray(i)?i:[i];for(let c of a)await t(c.data);});this.workers.set(e,n);}async unsubscribe(e){let t=await this.getBoss(),r=this.workers.get(e);r&&(await t.offWork(r),this.workers.delete(e));}async getBoss(){if(this.boss)return this.boss;let e=await import('pg-boss').catch(()=>{throw new Y("pg-boss","pg")}),r=e.PgBoss.default??e.PgBoss,{connectionString:s,boss:n}=se.options,i=s??n,a=new r(i);return se.options?.errorHandler&&a.on("error",se.options.errorHandler),await a.start(),this.boss=a,this.boss}async ensureQueue(e){if(this.createdQueues.has(e))return;let t=await this.getBoss();typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e);}async publishWithConfig(e,t,r,s){let n=await this.getBossWithConfig(s);await this.ensureQueueWithBoss(e,n);let i=r||{},a=await n.send(e,t,i);return {id:String(a??"")}}async subscribeWithConfig(e,t,r){let s=await this.getBossWithConfig(r);await this.ensureQueueWithBoss(e,s);let n=se.options;n.errorHandler&&s.on("error",n.errorHandler);let i=`${e}:${r?.connectionString??"default"}`,a=await s.work(e,async c=>{let p=Array.isArray(c)?c:[c];for(let l of p)await t(l.data);});this.workers.set(i,a);}bossInstances=new Map;async getBossWithConfig(e){if(!e?.connectionString)return this.getBoss();let t=e.connectionString;if(this.bossInstances.has(t))return this.bossInstances.get(t);let r=await import('pg-boss').catch(()=>{throw new Y("pg-boss","pg")}),n=r.PgBoss.default??r.PgBoss,i=new n(e.connectionString);return se.options?.errorHandler&&i.on("error",se.options.errorHandler),await i.start(),this.bossInstances.set(t,i),i}async ensureQueueWithBoss(e,t){this.createdQueues.has(e)||(typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e));}};var he=class{static options={}},Es=o=>{he.options=o??{};};var at=class{consumers=new Map;client;async publish(e,t,r){let s=await this.getClient(),{SendMessageCommand:n}=await this.getSqsLib(),i=await this.resolveQueueUrl(e);if(!i)throw new Error(`[SQS] Queue url not configured for topic "${e}"`);let a=new n({MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:e}},QueueUrl:i,...r??{}});return {id:(await s.send(a)).MessageId??""}}async subscribe(e,t){if(this.consumers.has(e))throw new Error(`[SQS] Already subscribed to topic "${e}"`);let r=he.options,s=await this.getSqsConsumerLib(),n={...r.consumer||{},sqs:await this.getClient(),queueUrl:await this.resolveQueueUrl(e),handleMessage:async c=>{let p=JSON.parse(c.Body||"{}");await t(p);}},i=s.Consumer.create(n),a=r.errorHandler;a&&(i.on("error",a),i.on("processing_error",a)),i.start(),this.consumers.set(e,i);}async unsubscribe(e){let t=this.consumers.get(e);t&&(t.stop(),this.consumers.delete(e));}async getClient(){if(this.client)return this.client;let{SQSClient:e}=await this.getSqsLib(),t=he.options.client;return this.client=new e(t??{}),this.client}async getSqsLib(){return this.sqsLib||(this.sqsLib=await import('@aws-sdk/client-sqs').catch(()=>{throw new Y("@aws-sdk/client-sqs","sqs-consumer")})),this.sqsLib}async getSqsConsumerLib(){return this.sqsConsumerLib||(this.sqsConsumerLib=await import('sqs-consumer').catch(()=>{throw new Y("sqs-consumer")})),this.sqsConsumerLib}async resolveQueueUrl(e){let r=he.options.consumer?.queueUrlMap;if(!r?.[e])throw new Error(`[SQS] Queue url not configured for topic "${e}"`);return r[e]}async publishWithConfig(e,t,r,s){let{...n}=r??{},i=await this.getClientWithConfig(s?.client),{SendMessageCommand:a}=await this.getSqsLib(),c=s?.queueUrl??await this.resolveQueueUrl(e),p=new a({...n,MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:e}},QueueUrl:c});return {id:(await i.send(p)).MessageId??""}}async subscribeWithConfig(e,t,r){if(this.consumers.has(e))throw new Error(`[SQS] Already subscribed to topic "${e}"`);let s=he.options,n=await this.getSqsConsumerLib(),i=r?.queueUrl??await this.resolveQueueUrl(e),a={...s.consumer||{},sqs:await this.getClientWithConfig(r?.client),queueUrl:i,handleMessage:async l=>{let d=JSON.parse(l.Body||"{}");await t(d);}},c=n.Consumer.create(a),p=s.errorHandler;p&&(c.on("error",p),c.on("processing_error",p)),c.start(),this.consumers.set(e,c);}async getClientWithConfig(e){if(e){let{SQSClient:t}=await this.getSqsLib();return new t(e)}return this.getClient()}};var oe=class{static map=new Map;static{this.map.set("bullmq",new ot),this.map.set("sqs",new at),this.map.set("pgboss",new it),this.map.set("memory",new nt);}static getProvider(e){if(!this.map.has(e))throw new Error(`[QueueSubscriber] Provider ${e} not found`);return this.map.get(e)}static setProvider(e,t){this.map.set(e,t);}static clearMemoryProvider(){let e=this.map.get("memory");e&&"clear"in e&&e.clear();}};var K=class{static typedQueueSubscribers=new Map;static customQueueSubscribers=new Map;static logger=M.child({scope:"QueueService"});static instanceFactory=e=>new e;static registerTypedQueue(e,t,r,s,n){let i=`${s}:${t}:${e}`;this.typedQueueSubscribers.has(i)&&this.logger.warn(`Queue handler for ${i} already registered, overwriting previous handler`),this.typedQueueSubscribers.set(i,{name:e,topic:t,handler:r,provider:s,queueOptions:n});}static registerCustomQueue(e,t,r,s){let n=`${s.constructor.name}:${t}:${e}`;this.customQueueSubscribers.has(n)&&this.logger.warn(`Custom queue handler for ${n} already registered, overwriting previous handler`),this.customQueueSubscribers.set(n,{name:e,topic:t,handler:r,pubsub:s});}static async run(){this.logger.info("Subscribing queue handlers");let e=this.typedQueueSubscribers.size>0,t=this.customQueueSubscribers.size>0;if(!e&&!t){this.logger.info("No queue handlers to subscribe");return}for(let r of this.typedQueueSubscribers.values()){let{topic:s,handler:n,provider:i,queueOptions:a}=r;this.logger.info(`Subscribing to queue: ${s}`);let c=oe.getProvider(i);a&&"subscribeWithConfig"in c&&typeof c.subscribeWithConfig=="function"?await c.subscribeWithConfig(s,n,a):await c.subscribe(s,n);}for(let{topic:r,handler:s,pubsub:n}of this.customQueueSubscribers.values())this.logger.info(`Subscribing to custom queue: ${r}`),await n.subscribe(r,s);this.logger.info("Queue handlers subscribed");}static async massiveImportQueues(e,t={}){let r=[];for(let s of e){let n=await v.glob(s,{cwd:L.getCwd()});this.logger.info(`Pattern "${s}" matched ${n.length} file(s)`),r.push(...n);}if(r.length===0){this.logger.warn("No files matched the provided patterns");return}this.logger.info(`Importing ${r.length} queue handler file(s)`),await Promise.all(r.map(async s=>{this.logger.debug(`Importing: ${s}`),await import(s).catch(n=>{if(this.logger.error(`Error importing queue handler: ${s}`),this.logger.error(n),t.throwOnError)throw n});})),this.logger.info(`Successfully imported ${r.length} file(s)`);}};var qt=new WeakMap,Re=class{constructor(e,t,r){this.topic=e;this.provider=t;this.queueOptions=r;}async publish(e,t){let r=oe.getProvider(this.provider);return this.queueOptions?r.publishWithConfig(this.topic,e,t,this.queueOptions):r.publish(this.topic,e,t??{})}subscribe(e){return e?this.subscribeWithCallback(e):this.createSubscribeDecorator()}async unsubscribe(){await oe.getProvider(this.provider).unsubscribe(this.topic);}createSubscribeDecorator(){let e=this.topic,t=this.provider,r=this.queueOptions;return function(s,n,i){let a=i.value,c=async p=>{let l=qt.get(s.constructor);return l||(l=K.instanceFactory(s.constructor),qt.set(s.constructor,l)),a.apply(l,[p])};return K.registerTypedQueue(`${s.constructor.name}.${String(n)}`,e,c,t,r),i}}async subscribeWithCallback(e){let t=oe.getProvider(this.provider);if(this.queueOptions){await t.subscribeWithConfig(this.topic,e,this.queueOptions);return}await t.subscribe(this.topic,e);}},At=class{constructor(e,t){this.topic=e;this.pubsub=t;}async publish(e,t){return this.pubsub.publish(this.topic,e,t)}subscribe(e){return e?this.pubsub.subscribe(this.topic,e):this.createSubscribeDecorator()}async unsubscribe(){await this.pubsub.unsubscribe(this.topic);}createSubscribeDecorator(){let e=this.topic,t=this.pubsub;return function(r,s,n){let i=n.value,a=async c=>{let p=qt.get(r.constructor);return p||(p=K.instanceFactory(r.constructor),qt.set(r.constructor,p)),i.apply(p,[c])};return K.registerCustomQueue(`${r.constructor.name}.${String(s)}`,e,a,t),n}}};function Yo(o,e){return new Re(o,"sqs",e)}function en(o,e){return new Re(o,"bullmq",e)}function tn(o,e){return new Re(o,"pgboss",e)}function xr(o){return new Re(o,"memory")}function rn(o,e){return new At(o,e)}var sn=o=>{let e=["bullmq","pgboss","sqs"];o.bullmq&&Cs(o.bullmq),o.pgboss&&Os(o.pgboss),o.sqs&&Es(o.sqs);for(let t of Object.keys(o)){let r=t;e.includes(r)||oe.setProvider(r,o[r]);}};J();var Tr=class{exit(e){switch(E.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error(`Unsupported runtime: ${E.type}`)}}},Ge=new Tr;var k=class{static flagsAndArgs={flags:Se().flags,args:Se().args.slice(1)};static commandName=this.name;static calledBy=this.name;static description="";static help=[];static options={keepAlive:false,loggerPath:"src/logger.ts",allowUnknownFlags:true};static args=this.flagsAndArgs.args;static flags=this.flagsAndArgs.flags;static logger=M.child({scope:this.constructor.name});static handle(){throw new Error(`Handle method not implemented in command class ${this.name}`)}static handleHelpFlag(e){let t=["-h","--help"];if(!Object.keys(e).some(p=>t.includes(p)))return;let s=this.commandName,n=this.description||"No description available",i=this.help||[],a=this.options,c=this.generateHelpOutput({name:s,description:n,helpText:i,options:a,args:this.args,flags:this.flags},this);console.log(c),Ge.exit(0);}static generateHelpOutput=(e,t)=>{let{name:r,description:s,helpText:n,options:i,args:a,flags:c}=e,p={title:"\x1B[1;36m",subtitle:"\x1B[1;33m",description:"\x1B[0;37m",code:"\x1B[0;32m",flag:"\x1B[0;35m",reset:"\x1B[0m",error:"\x1B[0;31m",success:"\x1B[0;32m",info:"\x1B[0;34m"},l=[`${p.title}${r}${p.reset}`,`${p.description}${s}${p.reset}`,"",`${p.subtitle}Usage:${p.reset}`,` ${p.code}${r}${p.reset} [options] [arguments]`,"",`${p.subtitle}Options:${p.reset}`,` ${p.flag}-h, --help${p.reset} Show this help message`,"",`${p.subtitle}Command Options:${p.reset}`,` ${p.flag}keepAlive${p.reset} ${i?.keepAlive??false?p.success+"Enabled"+p.reset:p.error+"Disabled"+p.reset}`,` ${p.flag}loggerPath${p.reset} ${i?.loggerPath??"src/logger.ts"}`,` ${p.flag}allowUnknownFlags${p.reset} ${i?.allowUnknownFlags??true?p.success+"Enabled"+p.reset:p.error+"Disabled"+p.reset}`,""];if(n){let h=Array.isArray(n)?n:[n];l.push(`${p.subtitle}Help:${p.reset}`),h.forEach(f=>{l.push(` ${p.description}${f}${p.reset}`);}),l.push("");}let d=O.getAll(t),u=d?Array.from(d.values()).filter(h=>h.type==="arg"):[],m=d?Array.from(d.values()).filter(h=>h.type==="flag"):[];return u.length&&(l.push(`${p.subtitle}Available Arguments:${p.reset}`),u.forEach(h=>{let f=h.required?` ${p.error}(required)${p.reset}`:"",g=h.description?` ${p.description}${h.description}${p.reset}`:"";l.push(` ${p.code}${h.name}${p.reset}${f}${g}`);}),l.push("")),m.length&&(l.push(`${p.subtitle}Available Flags:${p.reset}`),m.forEach(h=>{h.aliases&&!Array.isArray(h.aliases)&&(h.aliases=[h.aliases]);let f=h.aliases.length?` ${p.flag}(${h.aliases.join(", ")})${p.reset}`:"",g=h.required?` ${p.error}(required)${p.reset}`:"",y=h.description?` ${p.description}${h.description}${p.reset}`:"";l.push(` ${p.flag}--${h.name}${f}${p.reset}${g}${y}`);}),l.push("")),((a?.length??0)>0||c&&Object.keys(c).length>0)&&(l.push(`${p.subtitle}Current Context:${p.reset}`),a?.length&&l.push(` ${p.info}Provided Arguments:${p.reset} ${p.code}${a.join(" ")}${p.reset}`),c&&Object.keys(c).length>0&&(l.push(` ${p.info}Provided Flags:${p.reset}`),Object.keys(c).forEach(h=>{let f=c[h],g=f!=null?` = ${p.code}${f}${p.reset}`:"";l.push(` ${p.flag}${h}${p.reset}${g}`);})),l.push("")),n&&(Array.isArray(n)?n.some(h=>h.includes("example")):n.includes("example"))&&(l.push(`${p.subtitle}Examples:${p.reset}`),(Array.isArray(n)?n.filter(f=>f.includes("example")):[n.split("example")[1].trim()]).forEach(f=>{l.push(` ${p.code}${f}${p.reset}`);}),l.push("")),l.join(`
495
+ `)}`)}return r.Cast(o,e)}let t=j.getOrCompileValidator(o,"serializer_json");return Ue(t,e,true)};function Ko(o,e){return new wr}var br=class{logger=M.child({scope:this.constructor.name})};var Xo=o=>{if(!Buffer.isBuffer(o))return o;let e=o.toString();if(!e.length)return e;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:e}catch{return e}},ze=class o{static subscriptions=[];static client=null;static connectionOptions={};static logger=M.child({scope:"MqttService"});static register(e,t,r,s){this.subscriptions.push({name:e,topic:t,handler:r,options:s});}static async connect(e={}){let t=await import('mqtt').catch(()=>{throw new R("mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator")});this.connectionOptions=e,this.logger.info("Starting MQTT client"),this.subscriptions.length||this.logger.info("No MQTT subscriptions to register");let{host:r=process.env.MQTT_HOST||"localhost",port:s=Number(process.env.MQTT_PORT)||1883,protocol:n="mqtt",...i}=e,a=`${n}://${r}:${s}`;this.client=await t.connectAsync(a,i),this.logger.info("MQTT client connected"),this.client.on("error",async c=>{await this.globalErrorHandler(c);}),this.client.on("message",(c,p)=>{this.handleMessage(c,p);}),this.client.on("disconnect",()=>{this.logger.info("MQTT client disconnected");}),this.client.on("reconnect",async()=>{await this.globalErrorHandler(new Error("MQTT client reconnecting"));}),this.subscribeToTopics();}static subscribeToTopics(){if(this.client)for(let{name:e,topic:t,options:r}of this.subscriptions)this.logger.info(`Subscribing to MQTT topic: ${t} (${e})`),this.client.subscribe(t,r||{},s=>{if(s){this.logger.error(`Failed to subscribe to topic ${t}: ${s.message}`);return}this.logger.info(`Successfully subscribed to topic: ${t}`);});}static async handleMessage(e,t){let r=this.subscriptions.filter(s=>{if(s.topic===e)return true;if(!e||typeof e!="string")return false;let n=s.topic.replace(/\+/g,"[^/]+").replace(/#$/,".*");return new RegExp(`^${n}$`).test(e)});for(let s of r)try{await s.handler(e,t);}catch(n){this.logger.error(`Error handling MQTT message for topic ${e} in ${s.name}`),this.globalErrorHandler(n);}}static globalErrorHandler(e){this.logger.error(e);}static setOnDisconnectHandler(e){this.client?.on("disconnect",e);}static setOnReconnectHandler(e){this.client?.on("reconnect",e);}static async massiveImportMqttHandlers(e){let t=[];for(let r of e){let s=await v.glob(r,{cwd:L.getCwd()});t.push(...s);}await Promise.all(t.map(async r=>{await import(r).catch(s=>{this.logger.error(`Error importing MQTT handler: ${r}`),this.logger.error(s);});}));}subscribe(e,t){return function(r,s,n){let i=n.value;if(!i)return n;let a=async(c,p)=>{let l=new r.constructor,d=Xo(p);if(i.length===1){await i.call(l,d);return}await i.call(l,c,d);};return o.register(`${r.constructor.name}.${s}`,e,a,t),n}}async unsubscribe(e){if(!o.client)throw new R("MQTT client is not connected. Call MqttService.connect() first.");if(!o.client.connected)throw new R("MQTT client is not connected. Call MqttService.connect() first.");try{await o.client.unsubscribeAsync(e),o.subscriptions=o.subscriptions.filter(t=>t.topic!==e),o.logger.debug(`Unsubscribed from topic: ${String(e)}`);}catch(t){throw o.logger.error(`Failed to unsubscribe from topic ${String(e)}: ${t.message}`),t}}async publish(e,t,r){if(!o.client)throw new R("MQTT client is not connected. Call MqttService.connect() first.");if(!o.client.connected)throw new R("MQTT client is not connected. Call MqttService.connect() first.");let s;Buffer.isBuffer(t)?s=t:typeof t=="object"?s=JSON.stringify(t):s=String(t);try{await o.client.publishAsync(e,s,r||{}),M.debug(`Published message to topic: ${String(e)}`);}catch(n){throw M.error(`Failed to publish to topic ${String(e)}: ${n.message}`),n}}static async disconnect(){if(this.client)return new Promise(e=>{let t=this.client;t?.end(false,{},()=>{M.info("MQTT client disconnected gracefully"),t?.emit("disconnect",{cmd:"disconnect"}),this.client=null,e();});})}},Zo=o=>{ze.globalErrorHandler=o.bind(ze);},Yo=new ze;var Y=class extends R{constructor(...e){super(`Library not installed: ${e.join(", ")}, try run npm install ${e.join(" ")}`);}};var Sr=class{randomUUID(){return crypto.randomUUID()}},ee=new Sr;var ae=class{static options={connection:{}}},Cs=o=>{ae.options=o??{connection:{}};};var ot=class{queues=new Map;workers=new Map;async publish(e,t,r){let s=await this.getQueue(e),n=ee.randomUUID();return await s.add(e,t,{jobId:n,...ae.options?.defaultJobOptions,...r}),{id:n}}async subscribe(e,t){if(this.workers.has(e))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let{errorHandler:r,...s}=ae.options??{},n=await this.getBullMQClient(),i=new n.Worker(e,async a=>{try{await t(a.data);}catch(c){await r?.(a,c)??Promise.reject(c);}},{...s});this.workers.set(e,i);}async unsubscribe(e){let t=this.workers.get(e);t&&(await t.close(),this.workers.delete(e));}async getQueue(e){if(!this.queues.has(e)){let t=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")}),r=new t.Queue(e,{...ae.options||{connection:{}}});this.queues.set(e,r);}return this.queues.get(e)}async getBullMQClient(){return this.bullmqClient||(this.bullmqClient=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")})),this.bullmqClient}async publishWithConfig(e,t,r,s){let n=await this.getQueueWithConfig(e,s),i=ee.randomUUID(),a={jobId:i,...ae.options?.defaultJobOptions,...s?.defaultJobOptions,...r};return await n.add(e,t,a),{id:i}}async subscribeWithConfig(e,t,r){let s=this.getWorkerKey(e,r);if(this.workers.has(s))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let n=ae.options??{},{errorHandler:i}=n,a=await this.getBullMQClient(),c={...n,...r};delete c.errorHandler,delete c.defaultJobOptions;let p=new a.Worker(e,async l=>{try{await t(l.data);}catch(d){await i?.(l,d)??Promise.reject(d);}},c);this.workers.set(s,p);}async getQueueWithConfig(e,t){let r=this.getQueueKey(e,t);if(!this.queues.has(r)){let s=await import('bullmq').catch(()=>{throw new Y("bullmq","ioredis")}),n={...ae.options||{connection:{}},...t},i=new s.Queue(e,n);this.queues.set(r,i);}return this.queues.get(r)}getQueueKey(e,t){return t?.connection?`${e}:${JSON.stringify(t.connection)}`:e}getWorkerKey(e,t){return this.getQueueKey(e,t)}};var nt=class{subscribers=new Map;messageQueue=[];maxQueueSize;processingPromise=null;constructor(e=1e4){this.maxQueueSize=e;}clear(){this.subscribers.clear(),this.messageQueue=[],this.processingPromise=null;}async publish(e,t,r){if(this.messageQueue.length>=this.maxQueueSize)throw new Error(`Queue full: ${this.maxQueueSize} messages pending`);let s=ee.randomUUID();return this.messageQueue.push({topic:e,payload:t}),this.processingPromise||(this.processingPromise=this.processQueue().catch(n=>{console.error("[MemoryPubSub] Fatal queue processing error:",n);}).finally(()=>{this.processingPromise=null;})),{id:s}}async subscribe(e,t){this.subscribers.has(e)||this.subscribers.set(e,new Set);let r=t;this.subscribers.get(e).add(r);}async unsubscribe(e){this.subscribers.delete(e);}async processQueue(){for(;this.messageQueue.length>0;){let e=this.messageQueue.shift();if(!e)break;let t=this.subscribers.get(e.topic);t&&t.size>0&&await Promise.allSettled(Array.from(t).map(r=>r(e.payload).catch(s=>{console.error(`[MemoryPubSub] Handler error for topic "${e.topic}":`,s);})));}}};var se=class{static options={}},Os=o=>{se.options=o??{};};var it=class{createdQueues=new Set;workers=new Map;async publish(e,t,r){let s=await this.getBoss();await this.ensureQueue(e);let n=r||{},i=await s.send(e,t,n);return {id:String(i??"")}}async subscribe(e,t){let r=await this.getBoss();await this.ensureQueue(e);let s=se.options;s.errorHandler&&r.on("error",s.errorHandler);let n=await r.work(e,async i=>{let a=Array.isArray(i)?i:[i];for(let c of a)await t(c.data);});this.workers.set(e,n);}async unsubscribe(e){let t=await this.getBoss(),r=this.workers.get(e);r&&(await t.offWork(r),this.workers.delete(e));}async getBoss(){if(this.boss)return this.boss;let e=await import('pg-boss').catch(()=>{throw new Y("pg-boss","pg")}),r=e.PgBoss.default??e.PgBoss,{connectionString:s,boss:n}=se.options,i=s??n,a=new r(i);return se.options?.errorHandler&&a.on("error",se.options.errorHandler),await a.start(),this.boss=a,this.boss}async ensureQueue(e){if(this.createdQueues.has(e))return;let t=await this.getBoss();typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e);}async publishWithConfig(e,t,r,s){let n=await this.getBossWithConfig(s);await this.ensureQueueWithBoss(e,n);let i=r||{},a=await n.send(e,t,i);return {id:String(a??"")}}async subscribeWithConfig(e,t,r){let s=await this.getBossWithConfig(r);await this.ensureQueueWithBoss(e,s);let n=se.options;n.errorHandler&&s.on("error",n.errorHandler);let i=`${e}:${r?.connectionString??"default"}`,a=await s.work(e,async c=>{let p=Array.isArray(c)?c:[c];for(let l of p)await t(l.data);});this.workers.set(i,a);}bossInstances=new Map;async getBossWithConfig(e){if(!e?.connectionString)return this.getBoss();let t=e.connectionString;if(this.bossInstances.has(t))return this.bossInstances.get(t);let r=await import('pg-boss').catch(()=>{throw new Y("pg-boss","pg")}),n=r.PgBoss.default??r.PgBoss,i=new n(e.connectionString);return se.options?.errorHandler&&i.on("error",se.options.errorHandler),await i.start(),this.bossInstances.set(t,i),i}async ensureQueueWithBoss(e,t){this.createdQueues.has(e)||(typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e));}};var he=class{static options={}},Es=o=>{he.options=o??{};};var at=class{consumers=new Map;client;async publish(e,t,r){let s=await this.getClient(),{SendMessageCommand:n}=await this.getSqsLib(),i=await this.resolveQueueUrl(e);if(!i)throw new Error(`[SQS] Queue url not configured for topic "${e}"`);let a=new n({MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:e}},QueueUrl:i,...r??{}});return {id:(await s.send(a)).MessageId??""}}async subscribe(e,t){if(this.consumers.has(e))throw new Error(`[SQS] Already subscribed to topic "${e}"`);let r=he.options,s=await this.getSqsConsumerLib(),n={...r.consumer||{},sqs:await this.getClient(),queueUrl:await this.resolveQueueUrl(e),handleMessage:async c=>{let p=JSON.parse(c.Body||"{}");await t(p);}},i=s.Consumer.create(n),a=r.errorHandler;a&&(i.on("error",a),i.on("processing_error",a)),i.start(),this.consumers.set(e,i);}async unsubscribe(e){let t=this.consumers.get(e);t&&(t.stop(),this.consumers.delete(e));}async getClient(){if(this.client)return this.client;let{SQSClient:e}=await this.getSqsLib(),t=he.options.client;return this.client=new e(t??{}),this.client}async getSqsLib(){return this.sqsLib||(this.sqsLib=await import('@aws-sdk/client-sqs').catch(()=>{throw new Y("@aws-sdk/client-sqs","sqs-consumer")})),this.sqsLib}async getSqsConsumerLib(){return this.sqsConsumerLib||(this.sqsConsumerLib=await import('sqs-consumer').catch(()=>{throw new Y("sqs-consumer")})),this.sqsConsumerLib}async resolveQueueUrl(e){let r=he.options.consumer?.queueUrlMap;if(!r?.[e])throw new Error(`[SQS] Queue url not configured for topic "${e}"`);return r[e]}async publishWithConfig(e,t,r,s){let{...n}=r??{},i=await this.getClientWithConfig(s?.client),{SendMessageCommand:a}=await this.getSqsLib(),c=s?.queueUrl??await this.resolveQueueUrl(e),p=new a({...n,MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:e}},QueueUrl:c});return {id:(await i.send(p)).MessageId??""}}async subscribeWithConfig(e,t,r){if(this.consumers.has(e))throw new Error(`[SQS] Already subscribed to topic "${e}"`);let s=he.options,n=await this.getSqsConsumerLib(),i=r?.queueUrl??await this.resolveQueueUrl(e),a={...s.consumer||{},sqs:await this.getClientWithConfig(r?.client),queueUrl:i,handleMessage:async l=>{let d=JSON.parse(l.Body||"{}");await t(d);}},c=n.Consumer.create(a),p=s.errorHandler;p&&(c.on("error",p),c.on("processing_error",p)),c.start(),this.consumers.set(e,c);}async getClientWithConfig(e){if(e){let{SQSClient:t}=await this.getSqsLib();return new t(e)}return this.getClient()}};var oe=class{static map=new Map;static{this.map.set("bullmq",new ot),this.map.set("sqs",new at),this.map.set("pgboss",new it),this.map.set("memory",new nt);}static getProvider(e){if(!this.map.has(e))throw new Error(`[QueueSubscriber] Provider ${e} not found`);return this.map.get(e)}static setProvider(e,t){this.map.set(e,t);}static clearMemoryProvider(){let e=this.map.get("memory");e&&"clear"in e&&e.clear();}};var K=class{static typedQueueSubscribers=new Map;static customQueueSubscribers=new Map;static logger=M.child({scope:"QueueService"});static instanceFactory=e=>new e;static registerTypedQueue(e,t,r,s,n){let i=`${s}:${t}:${e}`;this.typedQueueSubscribers.has(i)&&this.logger.warn(`Queue handler for ${i} already registered, overwriting previous handler`),this.typedQueueSubscribers.set(i,{name:e,topic:t,handler:r,provider:s,queueOptions:n});}static registerCustomQueue(e,t,r,s){let n=`${s.constructor.name}:${t}:${e}`;this.customQueueSubscribers.has(n)&&this.logger.warn(`Custom queue handler for ${n} already registered, overwriting previous handler`),this.customQueueSubscribers.set(n,{name:e,topic:t,handler:r,pubsub:s});}static async run(){this.logger.info("Subscribing queue handlers");let e=this.typedQueueSubscribers.size>0,t=this.customQueueSubscribers.size>0;if(!e&&!t){this.logger.info("No queue handlers to subscribe");return}for(let r of this.typedQueueSubscribers.values()){let{topic:s,handler:n,provider:i,queueOptions:a}=r;this.logger.info(`Subscribing to queue: ${s}`);let c=oe.getProvider(i);a&&"subscribeWithConfig"in c&&typeof c.subscribeWithConfig=="function"?await c.subscribeWithConfig(s,n,a):await c.subscribe(s,n);}for(let{topic:r,handler:s,pubsub:n}of this.customQueueSubscribers.values())this.logger.info(`Subscribing to custom queue: ${r}`),await n.subscribe(r,s);this.logger.info("Queue handlers subscribed");}static async massiveImportQueues(e,t={}){let r=[];for(let s of e){let n=await v.glob(s,{cwd:L.getCwd()});this.logger.info(`Pattern "${s}" matched ${n.length} file(s)`),r.push(...n);}if(r.length===0){this.logger.warn("No files matched the provided patterns");return}this.logger.info(`Importing ${r.length} queue handler file(s)`),await Promise.all(r.map(async s=>{this.logger.debug(`Importing: ${s}`),await import(s).catch(n=>{if(this.logger.error(`Error importing queue handler: ${s}`),this.logger.error(n),t.throwOnError)throw n});})),this.logger.info(`Successfully imported ${r.length} file(s)`);}};var qt=new WeakMap,Re=class{constructor(e,t,r){this.topic=e;this.provider=t;this.queueOptions=r;}async publish(e,t){let r=oe.getProvider(this.provider);return this.queueOptions?r.publishWithConfig(this.topic,e,t,this.queueOptions):r.publish(this.topic,e,t??{})}subscribe(e){return e?this.subscribeWithCallback(e):this.createSubscribeDecorator()}async unsubscribe(){await oe.getProvider(this.provider).unsubscribe(this.topic);}createSubscribeDecorator(){let e=this.topic,t=this.provider,r=this.queueOptions;return function(s,n,i){let a=i.value,c=async p=>{let l=qt.get(s.constructor);return l||(l=K.instanceFactory(s.constructor),qt.set(s.constructor,l)),a.apply(l,[p])};return K.registerTypedQueue(`${s.constructor.name}.${String(n)}`,e,c,t,r),i}}async subscribeWithCallback(e){let t=oe.getProvider(this.provider);if(this.queueOptions){await t.subscribeWithConfig(this.topic,e,this.queueOptions);return}await t.subscribe(this.topic,e);}},At=class{constructor(e,t){this.topic=e;this.pubsub=t;}async publish(e,t){return this.pubsub.publish(this.topic,e,t)}subscribe(e){return e?this.pubsub.subscribe(this.topic,e):this.createSubscribeDecorator()}async unsubscribe(){await this.pubsub.unsubscribe(this.topic);}createSubscribeDecorator(){let e=this.topic,t=this.pubsub;return function(r,s,n){let i=n.value,a=async c=>{let p=qt.get(r.constructor);return p||(p=K.instanceFactory(r.constructor),qt.set(r.constructor,p)),i.apply(p,[c])};return K.registerCustomQueue(`${r.constructor.name}.${String(s)}`,e,a,t),n}}};function en(o,e){return new Re(o,"sqs",e)}function tn(o,e){return new Re(o,"bullmq",e)}function rn(o,e){return new Re(o,"pgboss",e)}function xr(o){return new Re(o,"memory")}function sn(o,e){return new At(o,e)}var on=o=>{let e=["bullmq","pgboss","sqs"];o.bullmq&&Cs(o.bullmq),o.pgboss&&Os(o.pgboss),o.sqs&&Es(o.sqs);for(let t of Object.keys(o)){let r=t;e.includes(r)||oe.setProvider(r,o[r]);}};J();var Tr=class{exit(e){switch(E.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error(`Unsupported runtime: ${E.type}`)}}},Ge=new Tr;var k=class{static flagsAndArgs={flags:Se().flags,args:Se().args.slice(1)};static commandName=this.name;static calledBy=this.name;static description="";static help=[];static options={keepAlive:false,loggerPath:"src/logger.ts",allowUnknownFlags:true};static args=this.flagsAndArgs.args;static flags=this.flagsAndArgs.flags;static logger=M.child({scope:this.constructor.name});static handle(){throw new Error(`Handle method not implemented in command class ${this.name}`)}static handleHelpFlag(e){let t=["-h","--help"];if(!Object.keys(e).some(p=>t.includes(p)))return;let s=this.commandName,n=this.description||"No description available",i=this.help||[],a=this.options,c=this.generateHelpOutput({name:s,description:n,helpText:i,options:a,args:this.args,flags:this.flags},this);console.log(c),Ge.exit(0);}static generateHelpOutput=(e,t)=>{let{name:r,description:s,helpText:n,options:i,args:a,flags:c}=e,p={title:"\x1B[1;36m",subtitle:"\x1B[1;33m",description:"\x1B[0;37m",code:"\x1B[0;32m",flag:"\x1B[0;35m",reset:"\x1B[0m",error:"\x1B[0;31m",success:"\x1B[0;32m",info:"\x1B[0;34m"},l=[`${p.title}${r}${p.reset}`,`${p.description}${s}${p.reset}`,"",`${p.subtitle}Usage:${p.reset}`,` ${p.code}${r}${p.reset} [options] [arguments]`,"",`${p.subtitle}Options:${p.reset}`,` ${p.flag}-h, --help${p.reset} Show this help message`,"",`${p.subtitle}Command Options:${p.reset}`,` ${p.flag}keepAlive${p.reset} ${i?.keepAlive??false?p.success+"Enabled"+p.reset:p.error+"Disabled"+p.reset}`,` ${p.flag}loggerPath${p.reset} ${i?.loggerPath??"src/logger.ts"}`,` ${p.flag}allowUnknownFlags${p.reset} ${i?.allowUnknownFlags??true?p.success+"Enabled"+p.reset:p.error+"Disabled"+p.reset}`,""];if(n){let h=Array.isArray(n)?n:[n];l.push(`${p.subtitle}Help:${p.reset}`),h.forEach(f=>{l.push(` ${p.description}${f}${p.reset}`);}),l.push("");}let d=O.getAll(t),u=d?Array.from(d.values()).filter(h=>h.type==="arg"):[],m=d?Array.from(d.values()).filter(h=>h.type==="flag"):[];return u.length&&(l.push(`${p.subtitle}Available Arguments:${p.reset}`),u.forEach(h=>{let f=h.required?` ${p.error}(required)${p.reset}`:"",g=h.description?` ${p.description}${h.description}${p.reset}`:"";l.push(` ${p.code}${h.name}${p.reset}${f}${g}`);}),l.push("")),m.length&&(l.push(`${p.subtitle}Available Flags:${p.reset}`),m.forEach(h=>{h.aliases&&!Array.isArray(h.aliases)&&(h.aliases=[h.aliases]);let f=h.aliases.length?` ${p.flag}(${h.aliases.join(", ")})${p.reset}`:"",g=h.required?` ${p.error}(required)${p.reset}`:"",y=h.description?` ${p.description}${h.description}${p.reset}`:"";l.push(` ${p.flag}--${h.name}${f}${p.reset}${g}${y}`);}),l.push("")),((a?.length??0)>0||c&&Object.keys(c).length>0)&&(l.push(`${p.subtitle}Current Context:${p.reset}`),a?.length&&l.push(` ${p.info}Provided Arguments:${p.reset} ${p.code}${a.join(" ")}${p.reset}`),c&&Object.keys(c).length>0&&(l.push(` ${p.info}Provided Flags:${p.reset}`),Object.keys(c).forEach(h=>{let f=c[h],g=f!=null?` = ${p.code}${f}${p.reset}`:"";l.push(` ${p.flag}${h}${p.reset}${g}`);})),l.push("")),n&&(Array.isArray(n)?n.some(h=>h.includes("example")):n.includes("example"))&&(l.push(`${p.subtitle}Examples:${p.reset}`),(Array.isArray(n)?n.filter(f=>f.includes("example")):[n.split("example")[1].trim()]).forEach(f=>{l.push(` ${p.code}${f}${p.reset}`);}),l.push("")),l.join(`
496
496
  `)};static validateUnknownFlags=e=>{if(e.options?.allowUnknownFlags!==false)return;let t=new Set(["-h","--help"]),r=new Set,s=O.getAll(e);if(s){for(let i of s.values())if(i.type==="flag"&&(r.add(`--${i.name}`),r.add(`-${i.name}`),r.add(i.name),i.aliases)){let a=Array.isArray(i.aliases)?i.aliases:[i.aliases];for(let c of a)r.add(`--${c}`),r.add(`-${c}`),r.add(c);}}let n=Object.keys(e.flags).filter(i=>!t.has(i)&&!r.has(i));if(n.length){let i={error:"\x1B[0;31m",title:"\x1B[1;31m",reset:"\x1B[0m",info:"\x1B[0;34m",flag:"\x1B[0;35m"};console.error(`${i.title}\u274C Unknown Flags:${i.reset}`),console.error(""),n.forEach(a=>{console.error(` ${i.error}\u2022${i.reset} ${i.flag}${a}${i.reset}`);}),console.error(""),console.error(`${i.info}\u{1F4A1} Tip: Use --help for available flags${i.reset}`),Ge.exit(1);}};static validateContext=e=>{let t=Array.from(O.get(e,xe)||[]);if(t.length){let r={error:"\x1B[0;31m",title:"\x1B[1;31m",reset:"\x1B[0m",info:"\x1B[0;34m",code:"\x1B[0;32m"};console.error(`${r.title}\u274C Validation Errors:${r.reset}`),console.error(""),t.forEach((s,n)=>{let i=`${r.info}${n+1}.${r.reset}`,a=`${r.error}${s.type.toUpperCase()}${r.reset}`,c=`${r.code}${s.name}${r.reset}`;console.error(` ${i} ${a} ${c}: ${r.error}${s.message}${r.reset}`);}),console.error(""),console.error(`${r.info}\u{1F4A1} Tip: Use --help for usage information${r.reset}`),Ge.exit(1);}}};var X=class extends k{static commandName="build";static description="Build the project for production, node.js only";static help=["Build the project for production, node.js only","It will create a production build of the project in the dist directory","Must have a tsconfig.json file in the root of the project","Must have esbuild installed as a dependency while running the command","Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory","Example: npx balda build -t ./tsconfig.json -a ./assets"];static clearDist;static entry;static output;static tsconfig;static assets;static format;static packages;static sourcemap;static async handle(){if(typeof process===void 0&&(this.logger.error("Build command is only supported in node.js"),process.exit(1)),["esm","cjs"].includes(this.format)||(this.logger.error("Invalid format, must be 'esm' or 'cjs'"),process.exit(1)),["bundle","external"].includes(this.packages)||(this.logger.error("Invalid packages, must be 'bundle' or 'external'"),process.exit(1)),!await import('esbuild').then(a=>true).catch(()=>false)){let[a,c,p]=await V();await Q(`${a} ${c} esbuild ${p}`,a,["esbuild"],{stdio:"inherit"})||(this.logger.warn("User chose to not continue with the installation of esbuild, exiting..."),process.exit(0));}let t=await import('esbuild').catch(a=>{throw this.logger.error("esbuild is not installed, please install it with `npm install -D esbuild` to use the build command"),new Error("esbuild is not installed")}),r=wt.join(this.output,"assets"),s=[];if(this.assets){let{copy:a}=await import('esbuild-plugin-copy').catch(c=>{throw this.logger.error("esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command"),new Error("esbuild-plugin-copy is not installed")});ct.existsSync(r)||ct.mkdirSync(r,{recursive:true}),s.push(a({assets:{from:this.assets,to:r}}));}this.clearDist&&ct.existsSync(this.output)&&(this.logger.info("Clearing dist directory..."),ct.rmSync(this.output,{recursive:true})),this.logger.info("Building project...");let n=wt.join(this.output,"server.js"),i=await t.build({tsconfig:this.tsconfig,entryPoints:[this.entry],bundle:true,platform:"node",outfile:n,minify:true,sourcemap:this.sourcemap,plugins:s,format:this.format,packages:this.packages});i.errors.length&&(this.logger.error(JSON.stringify({message:"Failed to build the project",errors:i.errors},null,2)),process.exit(1)),i.warnings.length&&this.logger.warn(JSON.stringify({message:"Failed to build the project",warnings:i.warnings},null,2)),this.logger.info(JSON.stringify({message:`Project built successfully in ${n}`,output:n,assets:!!this.assets},null,2)),process.exit(0);}};T([C({type:"boolean",aliases:["c"],name:"clear-dist",required:false,defaultValue:false,description:"Whether to clear the dist directory before building the project"})],X,"clearDist"),T([C({type:"string",aliases:["e"],name:"entry",required:false,defaultValue:"./src/index.ts",description:"The entry point of the project, default is ./src/index.ts"})],X,"entry"),T([C({type:"string",aliases:["o"],name:"output",required:false,defaultValue:"./dist",description:"The path to the output directory, default is ./dist"})],X,"output"),T([C({type:"string",aliases:["t"],name:"tsconfig",required:false,defaultValue:"./tsconfig.json",description:"The path to the tsconfig.json file, default is ./tsconfig.json"})],X,"tsconfig"),T([C({type:"string",aliases:["a"],name:"assets",required:false,description:"The path to the assets directory that will be loaded in the production build"})],X,"assets"),T([C({type:"string",aliases:["f"],name:"format",required:false,defaultValue:"esm",description:"The format to build the project, default is esm, can be 'esm' or 'cjs'"})],X,"format"),T([C({type:"string",aliases:["p"],name:"packages",required:false,defaultValue:"external",description:"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'"})],X,"packages"),T([C({type:"boolean",aliases:["s"],name:"sourcemap",required:false,defaultValue:true,description:"Whether to generate sourcemaps or not, default is true"})],X,"sourcemap");var Pe=class extends k{static commandName="cron-start";static description="Start cron job scheduler";static help=["Start the cron job scheduler to run scheduled tasks","Loads cron jobs from specified patterns and starts scheduling","Example: npx balda cron-start","Example: npx balda cron-start src/crons/**/*.ts --patterns src/schedules/**/*.ts"];static options={keepAlive:true};static pattern;static additionalPatterns;static async handle(){this.logger.info("Starting cron scheduler...");let e=[this.pattern];this.additionalPatterns&&this.additionalPatterns.length>0&&e.push(...this.additionalPatterns),this.logger.info(`Loading cron jobs from patterns: ${e.join(", ")}`),await W.massiveImportCronJobs(e);let t=W.scheduledJobs.length;if(t===0){this.logger.warn("No cron jobs found. Make sure your cron jobs are decorated with @cron decorator");return}this.logger.info(`Found ${t} cron job(s)`),W.run().then(()=>{this.logger.info("Cron scheduler started successfully. Press Ctrl+C to stop.");}).catch(r=>{this.logger.error("Error starting cron scheduler",r);});}};T([N({required:false,defaultValue:"src/crons/**/*.{ts,js}",description:"Primary glob pattern for cron jobs (default: src/crons/**/*.{ts,js})"})],Pe,"pattern"),T([C.array({aliases:["p"],name:"patterns",required:false,description:"Additional glob patterns for cron jobs"})],Pe,"additionalPatterns");var Ve=class extends k{static commandName="generate-command";static description="Generate a new command in the specified path";static help=["Generate a new cli command in the specified path","Example: npx balda generate-command my-command -p src/commands"];static path="src/commands";static name;static async handle(){if(Ce.getCommand(this.name)){let s=Ce.isBuiltInCommand(this.name)?"built-in":"user-defined";this.logger.error({commandName:this.name,type:s},`Command "${this.name}" already exists as a ${s} command. Cannot override existing commands.`);return}let t=this.getCommandTemplate();this.path=S.join(this.path,`${this.name}.ts`),await v.exists(S.join(process.cwd(),this.path))||await v.mkdir(S.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await v.writeFile(this.path,new TextEncoder().encode(t)),this.logger.info(`Command ${this.name} created successfully at ${this.path}`);}static getCommandTemplate(){return `import { Command, CommandOptions } from "balda";
497
497
 
498
498
  export default class extends Command {
@@ -988,7 +988,7 @@ definePGBossConfiguration({
988
988
  * console.log("Processing:", payload);
989
989
  * });
990
990
  */
991
- `}};T([C.string({description:"Queue provider type (bullmq, sqs, pgboss) - required",aliases:"t",name:"type",required:true})],Ae,"queueType"),T([C.string({description:"Output directory for queue configuration, default is src/queue",aliases:"o",name:"output",required:false,defaultValue:"src/queue"})],Ae,"outputPath");var Je=class extends k{static commandName="key-generate";static description="Generate application encryption key pairs";static help=["Generate secure RSA public/private key pairs for application encryption","Keys are automatically saved to .env file","Example: npx balda key-generate","Example: npx balda key-generate --type async"];static type;static async handle(){let e=this.type??"sync";if(!["sync","async"].includes(e)){this.logger.error(`Invalid key type: ${e}. Must be sync or async`);return}let{publicKey:t,privateKey:r}=nn.generateKeyPairSync("rsa",{modulusLength:2048,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}}),s=e==="sync"?"APP_PUBLIC_KEY":"APP_PUBLIC_KEY_ASYNC",n=e==="sync"?"APP_PRIVATE_KEY":"APP_PRIVATE_KEY_ASYNC";console.log(`
991
+ `}};T([C.string({description:"Queue provider type (bullmq, sqs, pgboss) - required",aliases:"t",name:"type",required:true})],Ae,"queueType"),T([C.string({description:"Output directory for queue configuration, default is src/queue",aliases:"o",name:"output",required:false,defaultValue:"src/queue"})],Ae,"outputPath");var Je=class extends k{static commandName="key-generate";static description="Generate application encryption key pairs";static help=["Generate secure RSA public/private key pairs for application encryption","Keys are automatically saved to .env file","Example: npx balda key-generate","Example: npx balda key-generate --type async"];static type;static async handle(){let e=this.type??"sync";if(!["sync","async"].includes(e)){this.logger.error(`Invalid key type: ${e}. Must be sync or async`);return}let{publicKey:t,privateKey:r}=an.generateKeyPairSync("rsa",{modulusLength:2048,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}}),s=e==="sync"?"APP_PUBLIC_KEY":"APP_PUBLIC_KEY_ASYNC",n=e==="sync"?"APP_PRIVATE_KEY":"APP_PRIVATE_KEY_ASYNC";console.log(`
992
992
  \u2728 Generated ${e==="sync"?"Sync":"Async"} Key Pair:
993
993
  `),console.log(`\x1B[33mPublic Key (${s}):\x1B[0m`),console.log(`\x1B[32m${t}\x1B[0m`),console.log(`\x1B[33mPrivate Key (${n}):\x1B[0m`),console.log(`\x1B[32m${r}\x1B[0m`),await this.saveKeyToEnvFile(s,t),await this.saveKeyToEnvFile(n,r),console.log(`\x1B[90m\u{1F4A1} Keys saved to .env file as ${s} and ${n}\x1B[0m
994
994
  `);}static async saveKeyToEnvFile(e,t){let r=wt.join(L.getCwd(),".env"),s=`${e}="${t}"`;if(ct.existsSync(r)){let n=ct.readFileSync(r,"utf-8"),i=new RegExp(`^${e}=.*$`,"m");if(i.test(n)){let a=n.replace(i,s);ct.writeFileSync(r,a),this.logger.info(`Updated ${e} in .env file`);return}ct.appendFileSync(r,`
@@ -1089,7 +1089,7 @@ export const storage = new Storage(
1089
1089
  defaultProvider: "local",
1090
1090
  },
1091
1091
  );
1092
- `}[e]||""}};T([C({description:"Storage provider type (s3, azure, local)",type:"string",aliases:["t"],name:"type",required:true})],$e,"storageType"),T([C({description:"Output directory for storage setup",type:"string",aliases:["o"],name:"output",required:false,defaultValue:"src/storage/"})],$e,"outputPath");var ln=[ke,Ve,Ee,je,fe,Oe,Me,z,ce,qe,Ae,lt,X,He,$e,Je,_e,Pe],$t=class o{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static loggerPath="src/logger.ts";static logger=M.child({scope:"CommandRegistry"});static setLogger(e){o.logger=e.child({scope:"CommandRegistry"}),k.logger=e.child({scope:"Command"});}static async loadLogger(e){let t=e||o.loggerPath;try{let r=await import(S.join(L.getCwd(),t));r.logger&&o.setLogger(r.logger);}catch{o.logger.debug(`Could not load logger from ${t}, using default logger`);}}constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new o}static setCommandsPattern(e){this.commandsPattern=e;}getLogger(){return o.logger}setLogger(e){o.logger=e.child({scope:"CommandRegistry"}),k.logger=e.child({scope:"Command"});}getCommand(e){return this.commands.get(e)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(e=>this.builtInCommands.has(e.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(e=>!this.builtInCommands.has(e.commandName))}isBuiltInCommand(e){return this.builtInCommands.has(e)}async loadCommands(e){o.logger.info(`Loading commands from ${e}`);let t=await v.glob(e,{cwd:L.getCwd()});if(t.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{o.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of t){let s=await import(r).then(n=>n.default?n.default:n).catch(n=>(o.logger.error(`Error loading command ${r}: ${n}`),null));s&&this.commands.set(s.commandName,s);}for(let r of ln)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},Ce=$t.getInstance();function dn(o){return o}function Rr(o,e){let t={...Fe,...e?.defaultTtl!==void 0&&{defaultTtl:e.defaultTtl},...e?.compressionThreshold!==void 0&&{compressionThreshold:e.compressionThreshold},...e?.keyPrefix!==void 0&&{keyPrefix:e.keyPrefix},...e?.enableStats!==void 0&&{enableStats:e.enableStats},...e?.lockTimeout!==void 0&&{lockTimeout:e.lockTimeout},...e?.lockBehavior!==void 0&&{lockBehavior:e.lockBehavior}};return ur(o,t),async(r,s,n)=>{await n();}}var dt=class{store=new Map;sets=new Map;locks=new Map;async get(e){let t=this.store.get(e);return t?Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,r){this.store.set(e,{value:t,expiresAt:Date.now()+r*1e3});}async del(e){return this.store.delete(e)||this.sets.delete(e)}async delMany(e){let t=0;for(let r of e)(this.store.delete(r)||this.sets.delete(r))&&t++;return t}async addToSet(e,t,r){let s=this.sets.get(e);(!s||Date.now()>s.expiresAt)&&(s={members:new Set,expiresAt:r?Date.now()+r*1e3:Number.MAX_SAFE_INTEGER},this.sets.set(e,s));for(let n of t)s.members.add(n);r&&(s.expiresAt=Date.now()+r*1e3);}async getSetMembers(e){let t=this.sets.get(e);return t?Date.now()>t.expiresAt?(this.sets.delete(e),[]):Array.from(t.members):[]}async acquireLock(e,t){let r=this.locks.get(e);return r&&Date.now()<r?false:(this.locks.set(e,Date.now()+t),true)}async releaseLock(e){this.locks.delete(e);}async*scan(e){let t=pn(e),r=[];for(let s of this.store.keys())if(t.test(s)){let n=this.store.get(s);Date.now()<=n.expiresAt&&(r.push(s),r.length>=100&&(yield [...r],r.length=0));}r.length>0&&(yield r);}async disconnect(){this.store.clear(),this.sets.clear(),this.locks.clear();}};function pn(o){let e=o.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp("^"+e+"$")}var pt=class{redis=null;options;constructor(e={}){this.options=e;}async getClient(){if(this.redis)return this.redis;let e;try{let{default:t}=await import('ioredis');e=t;}catch{throw new Error("ioredis is required for RedisCacheProvider. Install it with: npm install ioredis")}return this.options.url?this.redis=new e(this.options.url):this.redis=new e({host:this.options.host??"localhost",port:this.options.port??6379,password:this.options.password,db:this.options.db??0,keyPrefix:this.options.keyPrefix}),this.redis}async get(e){return (await this.getClient()).get(e)}async set(e,t,r){await(await this.getClient()).set(e,t,"EX",r);}async del(e){return await(await this.getClient()).del(e)>0}async delMany(e){return e.length===0?0:(await this.getClient()).del(...e)}async addToSet(e,t,r){if(t.length===0)return;let n=(await this.getClient()).pipeline();n.sadd(e,...t),r&&n.expire(e,r),await n.exec();}async getSetMembers(e){return (await this.getClient()).smembers(e)}async acquireLock(e,t){return await(await this.getClient()).set(e,"1","PX",t,"NX")==="OK"}async releaseLock(e){await(await this.getClient()).del(e);}async*scan(e){let t=await this.getClient(),r=this.options.keyPrefix||"",s=r+e,n="0";do{let[i,a]=await t.scan(n,"MATCH",s,"COUNT",100);n=i,a.length>0&&(yield r?a.map(c=>c.startsWith(r)?c.slice(r.length):c):a);}while(n!=="0")}async disconnect(){this.redis&&(await this.redis.quit(),this.redis=null);}};J();var We=class{get(e){switch(E.type){case "node":case "bun":case "deno":return process.env[e];default:throw new Error(`Unsupported runtime: ${E.type}`)}}getEnvironment(){switch(E.type){case "node":case "deno":case "bun":return Object.fromEntries(Object.entries(process.env).filter(([e,t])=>t!==void 0))}}};var un=new We,$=o=>{let e=un.get("NODE_ENV")==="development";return {code:o.name||"INTERNAL_ERROR",message:o.message,...e&&{stack:o.stack,cause:o.cause}}};var Ke=class extends R{constructor(e,t){super(`METHOD_NOT_ALLOWED: Cannot ${t} ${e}`);}};var U=class extends R{constructor(e,t){super(`ROUTE_NOT_FOUND: Cannot ${t} ${e}`);}};var ne=class{schemaOptions;apolloOptions;isEnabled;constructor(e){let t=this.initializeConfiguration(e);this.schemaOptions=t.schemaOptions,this.apolloOptions=t.apolloOptions,this.isEnabled=t.isEnabled;}getSchemaOptions(){return this.schemaOptions}getApolloOptions(){return this.apolloOptions}addTypeDef(e){if(typeof e=="function"){this.addTypeDef(e());return}if(Array.isArray(e)){this.addTypeDefArray(e);return}this.ensureTypeDefsArray(),this.schemaOptions.typeDefs.push(e);}addResolver(e,t){if(typeof e=="string"&&t){this.addResolverByType(e,t);return}this.addFullResolver(e);}initializeConfiguration(e){return e?this.createEnabledConfiguration(e):this.createDisabledConfiguration()}createDisabledConfiguration(){return {schemaOptions:{typeDefs:"",resolvers:{}},apolloOptions:{},isEnabled:false}}createEnabledConfiguration(e){return {schemaOptions:this.resolveSchemaOptions(e.schema),apolloOptions:this.resolveApolloOptions(e.apolloOptions),isEnabled:true}}resolveSchemaOptions(e){return e!==void 0?e:{typeDefs:"",resolvers:{}}}resolveApolloOptions(e){return e!==void 0?e:{}}addResolverByType(e,t){if(this.ensureResolversInitialized(),Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers.push({[e]:t});return}this.mergeResolverIntoObject(e,t);}ensureResolversInitialized(){!this.schemaOptions.resolvers&&(this.schemaOptions.resolvers={});}mergeResolverIntoObject(e,t){let r=this.schemaOptions.resolvers,s=r[e];if(s&&typeof s=="object"){r[e]={...s,...t};return}r[e]=t;}addFullResolver(e){if(this.ensureResolversInitialized(),Array.isArray(e)){this.addResolverArray(e);return}if(typeof e=="object"&&e!==null){this.addResolverObject(e);return}this.schemaOptions.resolvers=e;}addResolverArray(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,...e];return}this.schemaOptions.resolvers=[this.schemaOptions.resolvers,...e];}addResolverObject(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,e];return}this.schemaOptions.resolvers={...this.schemaOptions.resolvers,...e};}addTypeDefArray(e){for(let t of e)this.addTypeDef(t);}ensureTypeDefsArray(){if(Array.isArray(this.schemaOptions.typeDefs))return;if(this.schemaOptions.typeDefs!==void 0){this.schemaOptions.typeDefs=[this.schemaOptions.typeDefs];return}this.schemaOptions.typeDefs=[];}};var ge=(o,e,t,r)=>{let s=o.length;if(s===0){let a=e(t,r);return a&&typeof a.then=="function"?a.then(c=>(c&&r.send(c),r)):(a&&r.send(a),r)}let n=0,i=async()=>{if(n>=s){let p=await e(t,r);return p&&r.send(p),r}let a=n++,c=o[a];await c(t,r,i);};return i().then(()=>r)},mn=new Set(["post","put","patch"]),le=o=>o?mn.has(o.toLowerCase()):true,Bt=async(o,e,t,r,s)=>{try{let{HeaderMap:n}=await import('@apollo/server'),i=new n;e.headers.forEach((h,f)=>{i.set(f,h);});let c=(e.headers.get("content-type")??"").includes("application/json"),p="";if(t!=="GET"){let h=await e.text();p=c&&h?JSON.parse(h):h;}let l={method:t.toUpperCase(),headers:i,body:p,search:r?`?${r}`:""},d=await o.executeHTTPGraphQLRequest({httpGraphQLRequest:l,context:async()=>s}),u={};for(let[h,f]of d.headers)u[h]=f;if(d.body.kind==="complete")return new globalThis.Response(d.body.string,{status:d.status??200,headers:u});let m=new ReadableStream({async start(h){if(d.body.kind==="chunked")for await(let f of d.body.asyncIterator)h.enqueue(new TextEncoder().encode(f));h.close();}});return new globalThis.Response(m,{status:d.status??200,headers:u})}catch{return new globalThis.Response(JSON.stringify({errors:[{message:"Internal server error"}]}),{status:500,headers:{"Content-Type":"application/json"}})}},js=async(o,e,t,r,s,n,i)=>{try{let{HeaderMap:a}=await import('@apollo/server'),c=new a;for(let[f,g]of Object.entries(e))g!==void 0&&c.set(f,Array.isArray(g)?g.join(", "):g);let d=(c.get("content-type")??"").includes("application/json")&&r?JSON.parse(r):r,u={method:t?.toUpperCase()??"POST",headers:c,body:d,search:s?`?${s}`:""},m=await o.executeHTTPGraphQLRequest({httpGraphQLRequest:u,context:async()=>n}),h=m.status??200;m.body.kind==="complete"?await i(m.headers,h,m.body.string):await i(m.headers,h,m.body.asyncIterator);}catch{await i(new Map([["Content-Type","application/json"]]),500,JSON.stringify({errors:[{message:"Internal server error"}]}));}},ye=o=>{let e=null,t=false,r=async()=>{for(;t;)await new Promise(n=>setTimeout(n,10));},s=async()=>{try{let{ApolloServer:n}=await import('@apollo/server'),{makeExecutableSchema:i}=await import('@graphql-tools/schema'),a=o.getSchemaOptions(),c=o.getApolloOptions(),p=i({typeDefs:a.typeDefs,resolvers:a.resolvers}),l=new n({schema:p,...c});return await l.start(),{server:l,url:"/graphql"}}catch(n){throw n instanceof Error&&(n.message.includes("Cannot find module")||n.message.includes("Cannot find package"))?new Error("GraphQL is enabled but '@apollo/server' is not installed. Install it with: npm install @apollo/server @graphql-tools/schema graphql"):n}};return async()=>{if(!o.isEnabled)return null;if(e!==null)return e;if(t)return await r(),e;t=true;try{return e=s(),await e}catch(c){throw e=null,c}finally{t=false;}}};var ie=class o{static fromRequest(e){let t=Object.assign(new o,{url:e.url,method:e.method,signal:e.signal,referrer:e.referrer,referrerPolicy:e.referrerPolicy,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,integrity:e.integrity,keepalive:e.keepalive});return t.#o=e.headers,t.#n=true,t.#e=e,t}toWebApi(){if(this.#e)return this.#e;let e=this.method==="POST"||this.method==="PUT"||this.method==="PATCH";if(this.#r&&e){let t=Readable.toWeb(this.#r);return this.#e=new globalThis.Request(this.url,{method:this.method,body:t,headers:this.rawHeaders,signal:this.signal,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,duplex:"half"}),this.#e}return new globalThis.Request(this.url,{method:this.method,...e&&this.body?{body:this.body,duplex:"half"}:{},headers:this.rawHeaders,signal:this.signal,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive})}static toJSONSchemaWithPrefix(e){return H.isZodSchema(e)?{jsonSchema:H.toJSONSchema(e),prefix:"zod_schema"}:D.isTypeBoxSchema(e)?{jsonSchema:e,prefix:"typebox_schema"}:typeof e=="object"&&e!==null?{jsonSchema:e,prefix:"json_schema"}:{jsonSchema:{type:typeof e},prefix:`primitive_${JSON.stringify(e)}`}}static getOrCompileSchema(e){let{jsonSchema:t,prefix:r}=this.toJSONSchemaWithPrefix(e);return j.storeJsonSchema(t,r),j.getOrCompileValidator(t,r)}static compileAndValidate(e,t,r){let s=this.getOrCompileSchema(e);return Ue(s,t,r)}#e;#r;#t;#a=false;#o;#n=false;#d;#p=false;url="";method="GET";get rawHeaders(){if(this.#n)return this.#o;if(this.#t){let e=this.#t,t={};if(this.#a)for(let r in e){if(r.charCodeAt(0)===58)continue;let s=e[r];s!==void 0&&(t[r]=Array.isArray(s)?s.join(", "):s);}else for(let r in e){let s=e[r];s!==void 0&&(t[r]=Array.isArray(s)?s.join(", "):s);}this.#o=new Headers(t);}else this.#o=new Headers;return this.#n=true,this.#o}get headers(){return this.#p?this.#d:{}}set headers(e){this.#d=e,this.#p=true;}signal;referrer;referrerPolicy;mode;credentials;cache;redirect;integrity;keepalive;body=void 0;bodyUsed=false;ctx={};file(e){return this.files.find(t=>t.formName===e)??null}#u;#c=false;get cookies(){if(!this.#c)throw new Error("Cookie middleware is required. Register the cookie plugin to access request cookies.");return this.#u}set cookies(e){this.#u=e,this.#c=true;}#y;#v=false;get signedCookies(){if(!this.#v)throw new Error("Cookie middleware is required. Register the cookie plugin to access signed cookies.");return this.#y}set signedCookies(e){this.#y=e,this.#v=true;}getOptionalCookies(){if(this.#c)return this.#u}cookie(e){if(this.#v){let t=this.#y[e];if(t!==void 0)return t}return this.cookies[e]}timeout;#w;#b=false;_sessionDirty=false;_sessionId;_sessionTtl;_sessionStore;_sessionCookieName;_sessionCookieDefaults;get session(){if(!this.#b)throw new Error("Session middleware is required. Register the session plugin to access request session.");return this.#w}set session(e){this.#w=e,this.#b=true;}getOptionalSession(){if(this.#b)return this.#w}static _throwSaveSession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use saveSession.")};static _throwDestroySession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use destroySession.")};static _throwRegenerateSession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use regenerateSession.")};saveSession=o._throwSaveSession;destroySession=o._throwDestroySession;regenerateSession=o._throwRegenerateSession;#h;#m=false;#l;get ip(){return this.#m?this.#h:(this.#m=true,this.#l&&(this.#h=this.#l(),this.#l=void 0),this.#h)}set ip(e){this.#h=e,this.#m=true,this.#l=void 0;}files=[];params={};#i;#s;#f=false;get query(){if(this.#f)return this.#i;if(!this.#s||this.#s==="")this.#i={};else if(this.#s.length<50&&!this.#s.includes("&")){let e=this.#s.indexOf("=");if(e===-1)this.#i={[this.#s]:""};else {let t=this.#s.slice(0,e),r=decodeURIComponent(this.#s.slice(e+1));this.#i={[t]:r};}}else this.#i=Object.fromEntries(new URLSearchParams(this.#s));return this.#f=true,this.#i}set query(e){this.#i=e,this.#f=true;}setQueryString(e){this.#s=e,this.#f=false,this.#i=void 0;}#g;get id(){return this.#g||(this.#g=ee.randomUUID()),this.#g}set id(e){this.#g=e;}validate(e,t=false){return o.compileAndValidate(e,this.body||{},t)}validateQuery(e,t=false){return o.compileAndValidate(e,this.query||{},t)}validateAll(e,t=false){return o.compileAndValidate(e,{...this.body??{},...this.query??{}},t)}validateHeaders(e,t=false){let r=this.#p?this.#d:this.#S();return o.compileAndValidate(e,r,t)}#S(){let e={},t=new Map;this.rawHeaders.forEach((r,s)=>{let n=s.toLowerCase(),i=t.get(n);i?i.push(r):t.set(n,[r]);});for(let[r,s]of t)e[r]=s.length===1?s[0]:s;return e}setIpExtractor(e){this.#m=false,this.#l=()=>e.socket.remoteAddress;}setBunIpExtractor(e,t){this.#m=false,this.#l=()=>t.requestIP(e)?.address;}setDenoIpExtractor(e,t){this.#m=false,this.#l=()=>t.remoteAddr?.hostname;}setRawHeaders(e,t){this.#t=e,this.#a=t,this.#n=false,this.#o=void 0;}setNodeRequest(e){this.#r=e;}};J();var Pr=class{file(e,t){switch(E.type){case "bun":case "node":return ct.readFileSync(e,t);case "deno":return Deno.readFileSync(e);default:throw new Error("Unsupported runtime")}}},Nt=new Pr;var ks=new Map([[".html","text/html"],[".htm","text/html"],[".css","text/css"],[".js","application/javascript"],[".mjs","application/javascript"],[".cjs","application/javascript"],[".ts","application/typescript"],[".jsx","text/jsx"],[".tsx","text/tsx"],[".json","application/json"],[".xml","application/xml"],[".yaml","application/yaml"],[".yml","application/yaml"],[".csv","text/csv"],[".txt","text/plain"],[".md","text/markdown"],[".markdown","text/markdown"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".gif","image/gif"],[".svg","image/svg+xml"],[".ico","image/x-icon"],[".webp","image/webp"],[".avif","image/avif"],[".bmp","image/bmp"],[".tiff","image/tiff"],[".tif","image/tiff"],[".heic","image/heic"],[".heif","image/heif"],[".mp4","video/mp4"],[".webm","video/webm"],[".avi","video/x-msvideo"],[".mov","video/quicktime"],[".mkv","video/x-matroska"],[".wmv","video/x-ms-wmv"],[".flv","video/x-flv"],[".m4v","video/x-m4v"],[".mpeg","video/mpeg"],[".mpg","video/mpeg"],[".3gp","video/3gpp"],[".mp3","audio/mpeg"],[".wav","audio/wav"],[".ogg","audio/ogg"],[".flac","audio/flac"],[".aac","audio/aac"],[".m4a","audio/mp4"],[".wma","audio/x-ms-wma"],[".opus","audio/opus"],[".mid","audio/midi"],[".midi","audio/midi"],[".woff","font/woff"],[".woff2","font/woff2"],[".ttf","font/ttf"],[".otf","font/otf"],[".eot","application/vnd.ms-fontobject"],[".pdf","application/pdf"],[".doc","application/msword"],[".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],[".xls","application/vnd.ms-excel"],[".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],[".ppt","application/vnd.ms-powerpoint"],[".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],[".odt","application/vnd.oasis.opendocument.text"],[".ods","application/vnd.oasis.opendocument.spreadsheet"],[".odp","application/vnd.oasis.opendocument.presentation"],[".rtf","application/rtf"],[".epub","application/epub+zip"],[".zip","application/zip"],[".tar","application/x-tar"],[".gz","application/gzip"],[".gzip","application/gzip"],[".bz2","application/x-bzip2"],[".xz","application/x-xz"],[".rar","application/vnd.rar"],[".7z","application/x-7z-compressed"],[".wasm","application/wasm"],[".map","application/json"],[".webmanifest","application/manifest+json"],[".ics","text/calendar"],[".vcf","text/vcard"],[".sql","application/sql"],[".sh","application/x-sh"],[".bat","application/x-msdos-program"],[".exe","application/x-msdownload"],[".dll","application/x-msdownload"],[".bin","application/octet-stream"],[".iso","application/x-iso9660-image"],[".dmg","application/x-apple-diskimage"],[".apk","application/vnd.android.package-archive"],[".jar","application/java-archive"],[".swf","application/x-shockwave-flash"]]);var Cr=(o,e)=>{let{source:t,path:r}=o,s=o.dotfiles??"ignore",n=o.followSymlinks??false,i=r;return i.startsWith("/")||(i="/"+i),i!=="/"&&i.endsWith("/")&&(i=i.slice(0,-1)),_.addOrUpdate("GET",`${i}/*`,[],async(a,c)=>gn(a,c,t,s,n),{},{service:"StaticFiles",...e},void 0,true),async(a,c,p)=>p()};async function gn(o,e,t,r,s){if(o.method!=="GET"&&o.method!=="HEAD")return e.status(405).json({...$(new Ke(o.url,o.method))});let n=o.params["*"]||"";if(n.includes("\0"))return e.notFound({...$(new U(o.url,o.method))});let i=S.join(t,n),a=S.resolve(L.getCwd(),i),c=S.resolve(L.getCwd(),t);if(a!==c&&!a.startsWith(c+"/")&&!a.startsWith(c+"\\"))return e.notFound({...$(new U(o.url,o.method))});if(S.basename(a).startsWith(".")){if(r==="deny")return e.status(403).json({message:"Forbidden"});if(r==="ignore")return e.notFound({...$(new U(o.url,o.method))})}try{let u=await v.lstat(a);if(u.isSymbolicLink&&!s)return e.notFound({...$(new U(o.url,o.method))});if(!u.isFile)return e.notFound({...$(new U(o.url,o.method))})}catch(u){if(u.code==="ENOENT")return e.notFound({...$(new U(o.url,o.method))});throw u}let l=Or(S.extName(a));e.setHeader("Content-Type",l);let d=Nt.file(a);e.raw(d);}function Or(o){return ks.get(o)||"application/octet-stream"}var F=class{static toWebResponse(e){let t=e.getBody(),r=e.headers["Content-Type"]?.toLowerCase(),s=new globalThis.Headers(e.headers);for(let n of e.cookieHeaders)s.append("Set-Cookie",n);return r==="application/json"?typeof t=="string"?new globalThis.Response(t,{status:e.responseStatus,headers:s}):globalThis.Response.json(t,{status:e.responseStatus,headers:s}):new globalThis.Response(t,{status:e.responseStatus,headers:s})}responseStatus;headers;cookieHeaders;body;#e;#r;#t;constructor(e=200){this.responseStatus=e,this.headers={},this.cookieHeaders=[];}setRouteResponseSchemas(e){this.#r=e,this.#t=j.getOrCreateResponseSerializers(e)??void 0;}setHeader(e,t){if(/[\r\n]/.test(e)||/[\r\n]/.test(t))throw new Error(`Invalid header: CR/LF characters are not permitted in header names or values. key=${JSON.stringify(e)}`);return e.toLowerCase()==="set-cookie"?this.cookieHeaders.push(t):this.headers[e]=t,this}status(e){return this.responseStatus=e,this}send(e){if(e==null)return this.text("");if(typeof e=="string")return this.text(e);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return this.raw(e);if(typeof Buffer<"u"&&e instanceof Buffer)return this.download(new Uint8Array(e));if(e instanceof ArrayBuffer||e instanceof Uint8Array)return this.download(new Uint8Array(e));if(typeof e=="object"&&e!==null)try{return this.json(e)}catch{return this.text(String(e))}if(typeof e=="symbol")return this.text(e.toString());this.body=e;}raw(e){this.body=e;}setBodyDirect(e){this.body=e,this.#e=void 0;}text(e){this.body=e,this.headers["Content-Type"]="text/plain";}json(e,t){if(this.body=e,this.headers["Content-Type"]="application/json",!t&&this.#t){let s=this.#t.get(this.responseStatus);if(s){this.#e=s;return}}let r=t??this.#r?.[this.responseStatus];if(r){let{jsonSchema:s,prefix:n}=this.getJsonSchemaWithPrefix(r);this.#e=j.getOrCreateSerializer(s,n)??void 0;}}html(e){this.body=e,this.headers["Content-Type"]="text/html";}xml(e){this.body=e,this.headers["Content-Type"]="application/xml";}download(e){this.body=e,this.headers["Content-Type"]="application/octet-stream";}file(e,t){let r=S.extName(e),s=Or(r);this.body=Nt.file(e,t),this.headers["Content-Type"]=s;}ok(e){if(this.responseStatus=200,e!=null&&typeof e=="object"){this.json(e);return}this.send(e);}created(e){this.status(201).send(e);}accepted(e){this.status(202).send(e);}noContent(){this.responseStatus=204,this.body="";}partialContent(e){this.status(206).send(e);}multipleChoices(e){this.status(300).setHeader("Location",e);}redirect(e){this.status(302).setHeader("Location",e);}movedPermanently(e){this.status(301).setHeader("Location",e);}found(e){this.status(302).setHeader("Location",e);}seeOther(e){this.status(303).setHeader("Location",e);}notModified(){this.responseStatus=304,this.body="";}temporaryRedirect(e){this.status(307).setHeader("Location",e);}permanentRedirect(e){this.status(308).setHeader("Location",e);}badRequest(e){this.status(400).send(e);}unauthorized(e){this.status(401).send(e);}forbidden(e){this.status(403).send(e);}notFound(e){this.status(404).send(e);}methodNotAllowed(e){this.status(405).send(e);}notAcceptable(e){this.status(406).send(e);}conflict(e){this.status(409).send(e);}gone(e){this.status(410).send(e);}payloadTooLarge(e){this.status(413).send(e);}unsupportedMediaType(e){this.status(415).send(e);}unprocessableEntity(e){this.status(422).send(e);}tooManyRequests(e){this.status(429).send(e);}internalServerError(e){this.status(500).send(e);}notImplemented(e){this.status(501).send(e);}badGateway(e){this.status(502).send(e);}serviceUnavailable(e){this.status(503).send(e);}gatewayTimeout(e){this.status(504).send(e);}httpVersionNotSupported(e){this.status(505).send(e);}stream(e,t){if(this.headers["Content-Type"]="text/event-stream",this.headers["Cache-Control"]="no-cache",this.headers.Connection="keep-alive",t?.customHeaders)for(let r in t.customHeaders)this.headers[r]=t.customHeaders[r];if(e instanceof ReadableStream){this.body=e;return}this.body=new ReadableStream({async start(r){for await(let s of e)r.enqueue(new TextEncoder().encode(s));r.close();}});}getBody(){if(this.#e&&typeof this.body=="object"&&this.body!==null)try{this.body=this.#e(this.body),this.#e=void 0;}catch(e){M.error({error:e,statusCode:this.responseStatus,contentType:this.headers["Content-Type"]},"Fast-json-stringify serialization failed, falling back to JSON.stringify"),this.#e=void 0;}return this.body}getJsonSchemaWithPrefix(e){return H.isZodSchema(e)?{jsonSchema:H.toJSONSchema(e),prefix:"fast_stringify_zod"}:D.isTypeBoxSchema(e)?{jsonSchema:e,prefix:"fast_stringify_typebox"}:typeof e=="object"&&e!==null?{jsonSchema:e,prefix:"fast_stringify_json"}:{jsonSchema:{type:typeof e},prefix:`fast_stringify_primitive_${JSON.stringify(e)}`}}};var pe=class{constructor(e){this.response=e;}body(){let e=this.response.getBody();if(typeof e=="string"&&this.response.headers["Content-Type"]?.includes("json"))try{return JSON.parse(e)}catch{return e}return e}statusCode(){return this.response.responseStatus}headers(){return this.response.headers}cookies(){let e=this.response.cookieHeaders;if(!e||e.length===0)return {};let t={};for(let r of e){let[s]=r.split(";");if(s){let n=s.indexOf("=");if(n>0)try{let i=decodeURIComponent(s.slice(0,n).trim()),a=decodeURIComponent(s.slice(n+1).trim());t[i]=a;}catch{}}}return t}rawCookieHeaders(){return this.response.cookieHeaders??[]}assertStatus(e){if(this.response.responseStatus!==e)throw new Error(`Expected status ${e}, but got ${this.response.responseStatus}`);return this}assertHeader(e,t){if(this.response.headers[e]!==t)throw new Error(`Expected header ${e} to be ${t}, but got ${this.response.headers[e]}`);return this}assertHeaderExists(e){if(!(e in this.response.headers))throw new Error(`Expected header ${e} to exist, but it was not found`);return this}assertHeaderNotExists(e){if(e in this.response.headers)throw new Error(`Expected header ${e} to not exist, but it was found with value: ${this.response.headers[e]}`);return this}assertCookie(e,t){let r=this.cookies();if(r[e]!==t)throw new Error(`Expected cookie ${e} to be ${t}, but got ${r[e]??"undefined"}`);return this}assertCookieExists(e){let t=this.cookies();if(!(e in t))throw new Error(`Expected cookie ${e} to exist, but it was not found`);return this}assertCookieNotExists(e){let t=this.cookies();if(e in t)throw new Error(`Expected cookie ${e} to not exist, but it was found with value: ${t[e]}`);return this}assertBodySubset(e){return this.assertSubset(this.body(),e,"body"),this}assertBodyDeepEqual(e){return this.assertDeepEqual(this.body(),e,"body"),this}assertBodyNotSubset(e){return this.assertNotSubset(this.body(),e,"body"),this}assertBodyNotDeepEqual(e){return this.assertNotDeepEqual(this.body(),e,"body"),this}assertCustom(e){return e(this.response),this}assertSubset(e,t,r){for(let s in t){let n=r===""?s:`${r}.${s}`,i=e[s],a=t[s];if(!(s in e))throw new Error(`Expected ${r} to have key ${s}, but it was not found`);if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertDeepEqual(e,t,r){if(this.isObject(e)&&this.isObject(t)){let s=Object.keys(e),n=Object.keys(t);if(s.length!==n.length)throw new Error(`Expected ${r} to have ${n.length} keys, but got ${s.length}`);for(let i of n){let a=r==="body"?i:`${r}.${i}`;this.assertDeepEqual(e[i],t[i],a);}}else if(Array.isArray(e)&&Array.isArray(t))this.assertArrayDeepEqual(e,t,r);else if(e!==t)throw new Error(`Expected ${r} to be ${t}, but got ${e}`)}assertNotSubset(e,t,r){try{throw this.assertSubset(e,t,r),new Error(`Expected ${r} to NOT contain the subset, but it does`)}catch(s){if(s instanceof Error&&s.message.includes("Expected"))return;throw s}}assertNotDeepEqual(e,t,r){try{throw this.assertDeepEqual(e,t,r),new Error(`Expected ${r} to NOT be deeply equal, but it is`)}catch(s){if(s instanceof Error&&s.message.includes("Expected"))return;throw s}}assertArraySubset(e,t,r){if(t.length>e.length)throw new Error(`Expected ${r} to have at least ${t.length} elements, but got ${e.length}`);for(let s=0;s<t.length;s++){let n=`${r}[${s}]`,i=e[s],a=t[s];if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertArrayDeepEqual(e,t,r){if(e.length!==t.length)throw new Error(`Expected ${r} to have ${t.length} elements, but got ${e.length}`);for(let s=0;s<t.length;s++){let n=`${r}[${s}]`;this.assertDeepEqual(e[s],t[s],n);}}isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}};var ut=class{server;logger=M.child({scope:"MockServer"});ensureGraphQLHandler;bootstrapOptions;constructor(e,t){this.server=e,this.bootstrapOptions=t,this.ensureGraphQLHandler=ye(this.server.graphql);}async request(e,t,r={}){let{headers:s={},query:n={},cookies:i,ip:a}=r;this.validateOptions(r),await this.server.ensureBootstrapped(this.bootstrapOptions);let c=this.server.graphql.isEnabled,p=t.startsWith("/graphql");if(c&&p)return this.handleGraphQLRequest(e,t,r);let l=_.find(e.toUpperCase(),t);if(!l){let g=new F(404);return g.json({caller:"MockServer",error:"Route not found",path:t,method:e}),new pe(g)}let d,u="application/json";if(r.body!==void 0&&(typeof r.body=="object"&&!(r.body instanceof Uint8Array)&&!(r.body instanceof ArrayBuffer)?d=JSON.stringify(r.body):d=r.body),r.formData){let g=`----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;u=`multipart/form-data; boundary=${g}`,d=await this.formDataToMultipart(r.formData,g);}r.urlencoded&&(u="application/x-www-form-urlencoded",d=new URLSearchParams(r.urlencoded).toString());let m=new URL(`http://${this.server.host}:${this.server.port}${t}`);m.search=new URLSearchParams(n).toString();let h=new globalThis.Request(m.toString(),{method:e.toUpperCase(),body:le(e)?d:void 0,headers:{"content-type":u,...s}}),f=ie.fromRequest(h);f.query={...Object.fromEntries(m.searchParams.entries()),...n},f.params=l.params,i!==void 0&&(f.cookies=i),f.ip=a;try{let g=await ge(l.middleware,l.handler,f,new F);return new pe(g)}catch(g){this.logger.error({error:g},`Error processing mock request ${e} ${t}:`);let y=new F(500);return y.json({error:"Internal server error",message:g instanceof Error?g.message:String(g)}),new pe(y)}}async get(e,t){return this.request("GET",e,t)}async post(e,t){return this.request("POST",e,t)}async put(e,t){return this.request("PUT",e,t)}async patch(e,t){return this.request("PATCH",e,t)}async delete(e,t){return this.request("DELETE",e,t)}async formDataToMultipart(e,t){let r=new TextEncoder,s=[];for(let[c,p]of e.entries()){s.push(r.encode(`--${t}\r
1092
+ `}[e]||""}};T([C({description:"Storage provider type (s3, azure, local)",type:"string",aliases:["t"],name:"type",required:true})],$e,"storageType"),T([C({description:"Output directory for storage setup",type:"string",aliases:["o"],name:"output",required:false,defaultValue:"src/storage/"})],$e,"outputPath");var dn=[ke,Ve,Ee,je,fe,Oe,Me,z,ce,qe,Ae,lt,X,He,$e,Je,_e,Pe],$t=class o{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static loggerPath="src/logger.ts";static logger=M.child({scope:"CommandRegistry"});static setLogger(e){o.logger=e.child({scope:"CommandRegistry"}),k.logger=e.child({scope:"Command"});}static async loadLogger(e){let t=e||o.loggerPath;try{let r=await import(S.join(L.getCwd(),t));r.logger&&o.setLogger(r.logger);}catch{o.logger.debug(`Could not load logger from ${t}, using default logger`);}}constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new o}static setCommandsPattern(e){this.commandsPattern=e;}getLogger(){return o.logger}setLogger(e){o.logger=e.child({scope:"CommandRegistry"}),k.logger=e.child({scope:"Command"});}getCommand(e){return this.commands.get(e)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(e=>this.builtInCommands.has(e.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(e=>!this.builtInCommands.has(e.commandName))}isBuiltInCommand(e){return this.builtInCommands.has(e)}async loadCommands(e){o.logger.info(`Loading commands from ${e}`);let t=await v.glob(e,{cwd:L.getCwd()});if(t.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{o.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of t){let s=await import(r).then(n=>n.default?n.default:n).catch(n=>(o.logger.error(`Error loading command ${r}: ${n}`),null));s&&this.commands.set(s.commandName,s);}for(let r of dn)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},Ce=$t.getInstance();function pn(o){return o}function Rr(o,e){let t={...Fe,...e?.defaultTtl!==void 0&&{defaultTtl:e.defaultTtl},...e?.compressionThreshold!==void 0&&{compressionThreshold:e.compressionThreshold},...e?.keyPrefix!==void 0&&{keyPrefix:e.keyPrefix},...e?.enableStats!==void 0&&{enableStats:e.enableStats},...e?.lockTimeout!==void 0&&{lockTimeout:e.lockTimeout},...e?.lockBehavior!==void 0&&{lockBehavior:e.lockBehavior}};return ur(o,t),async(r,s,n)=>{await n();}}var dt=class{store=new Map;sets=new Map;locks=new Map;async get(e){let t=this.store.get(e);return t?Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,r){this.store.set(e,{value:t,expiresAt:Date.now()+r*1e3});}async del(e){return this.store.delete(e)||this.sets.delete(e)}async delMany(e){let t=0;for(let r of e)(this.store.delete(r)||this.sets.delete(r))&&t++;return t}async addToSet(e,t,r){let s=this.sets.get(e);(!s||Date.now()>s.expiresAt)&&(s={members:new Set,expiresAt:r?Date.now()+r*1e3:Number.MAX_SAFE_INTEGER},this.sets.set(e,s));for(let n of t)s.members.add(n);r&&(s.expiresAt=Date.now()+r*1e3);}async getSetMembers(e){let t=this.sets.get(e);return t?Date.now()>t.expiresAt?(this.sets.delete(e),[]):Array.from(t.members):[]}async acquireLock(e,t){let r=this.locks.get(e);return r&&Date.now()<r?false:(this.locks.set(e,Date.now()+t),true)}async releaseLock(e){this.locks.delete(e);}async*scan(e){let t=un(e),r=[];for(let s of this.store.keys())if(t.test(s)){let n=this.store.get(s);Date.now()<=n.expiresAt&&(r.push(s),r.length>=100&&(yield [...r],r.length=0));}r.length>0&&(yield r);}async disconnect(){this.store.clear(),this.sets.clear(),this.locks.clear();}};function un(o){let e=o.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp("^"+e+"$")}var pt=class{redis=null;options;constructor(e={}){this.options=e;}async getClient(){if(this.redis)return this.redis;let e;try{let{default:t}=await import('ioredis');e=t;}catch{throw new Error("ioredis is required for RedisCacheProvider. Install it with: npm install ioredis")}return this.options.url?this.redis=new e(this.options.url):this.redis=new e({host:this.options.host??"localhost",port:this.options.port??6379,password:this.options.password,db:this.options.db??0,keyPrefix:this.options.keyPrefix}),this.redis}async get(e){return (await this.getClient()).get(e)}async set(e,t,r){await(await this.getClient()).set(e,t,"EX",r);}async del(e){return await(await this.getClient()).del(e)>0}async delMany(e){return e.length===0?0:(await this.getClient()).del(...e)}async addToSet(e,t,r){if(t.length===0)return;let n=(await this.getClient()).pipeline();n.sadd(e,...t),r&&n.expire(e,r),await n.exec();}async getSetMembers(e){return (await this.getClient()).smembers(e)}async acquireLock(e,t){return await(await this.getClient()).set(e,"1","PX",t,"NX")==="OK"}async releaseLock(e){await(await this.getClient()).del(e);}async*scan(e){let t=await this.getClient(),r=this.options.keyPrefix||"",s=r+e,n="0";do{let[i,a]=await t.scan(n,"MATCH",s,"COUNT",100);n=i,a.length>0&&(yield r?a.map(c=>c.startsWith(r)?c.slice(r.length):c):a);}while(n!=="0")}async disconnect(){this.redis&&(await this.redis.quit(),this.redis=null);}};J();var We=class{get(e){switch(E.type){case "node":case "bun":case "deno":return process.env[e];default:throw new Error(`Unsupported runtime: ${E.type}`)}}getEnvironment(){switch(E.type){case "node":case "deno":case "bun":return Object.fromEntries(Object.entries(process.env).filter(([e,t])=>t!==void 0))}}};var mn=new We,$=o=>{let e=mn.get("NODE_ENV")==="development";return {code:o.name||"INTERNAL_ERROR",message:o.message,...e&&{stack:o.stack,cause:o.cause}}};var Ke=class extends R{constructor(e,t){super(`METHOD_NOT_ALLOWED: Cannot ${t} ${e}`);}};var U=class extends R{constructor(e,t){super(`ROUTE_NOT_FOUND: Cannot ${t} ${e}`);}};var ne=class{schemaOptions;apolloOptions;isEnabled;constructor(e){let t=this.initializeConfiguration(e);this.schemaOptions=t.schemaOptions,this.apolloOptions=t.apolloOptions,this.isEnabled=t.isEnabled;}getSchemaOptions(){return this.schemaOptions}getApolloOptions(){return this.apolloOptions}addTypeDef(e){if(typeof e=="function"){this.addTypeDef(e());return}if(Array.isArray(e)){this.addTypeDefArray(e);return}this.ensureTypeDefsArray(),this.schemaOptions.typeDefs.push(e);}addResolver(e,t){if(typeof e=="string"&&t){this.addResolverByType(e,t);return}this.addFullResolver(e);}initializeConfiguration(e){return e?this.createEnabledConfiguration(e):this.createDisabledConfiguration()}createDisabledConfiguration(){return {schemaOptions:{typeDefs:"",resolvers:{}},apolloOptions:{},isEnabled:false}}createEnabledConfiguration(e){return {schemaOptions:this.resolveSchemaOptions(e.schema),apolloOptions:this.resolveApolloOptions(e.apolloOptions),isEnabled:true}}resolveSchemaOptions(e){return e!==void 0?e:{typeDefs:"",resolvers:{}}}resolveApolloOptions(e){return e!==void 0?e:{}}addResolverByType(e,t){if(this.ensureResolversInitialized(),Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers.push({[e]:t});return}this.mergeResolverIntoObject(e,t);}ensureResolversInitialized(){!this.schemaOptions.resolvers&&(this.schemaOptions.resolvers={});}mergeResolverIntoObject(e,t){let r=this.schemaOptions.resolvers,s=r[e];if(s&&typeof s=="object"){r[e]={...s,...t};return}r[e]=t;}addFullResolver(e){if(this.ensureResolversInitialized(),Array.isArray(e)){this.addResolverArray(e);return}if(typeof e=="object"&&e!==null){this.addResolverObject(e);return}this.schemaOptions.resolvers=e;}addResolverArray(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,...e];return}this.schemaOptions.resolvers=[this.schemaOptions.resolvers,...e];}addResolverObject(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,e];return}this.schemaOptions.resolvers={...this.schemaOptions.resolvers,...e};}addTypeDefArray(e){for(let t of e)this.addTypeDef(t);}ensureTypeDefsArray(){if(Array.isArray(this.schemaOptions.typeDefs))return;if(this.schemaOptions.typeDefs!==void 0){this.schemaOptions.typeDefs=[this.schemaOptions.typeDefs];return}this.schemaOptions.typeDefs=[];}};var ge=(o,e,t,r)=>{let s=o.length;if(s===0){let a=e(t,r);return a&&typeof a.then=="function"?a.then(c=>(c&&r.send(c),r)):(a&&r.send(a),r)}let n=0,i=async()=>{if(n>=s){let p=await e(t,r);return p&&r.send(p),r}let a=n++,c=o[a];await c(t,r,i);};return i().then(()=>r)},hn=new Set(["post","put","patch"]),le=o=>o?hn.has(o.toLowerCase()):true,Bt=async(o,e,t,r,s)=>{try{let{HeaderMap:n}=await import('@apollo/server'),i=new n;e.headers.forEach((h,f)=>{i.set(f,h);});let c=(e.headers.get("content-type")??"").includes("application/json"),p="";if(t!=="GET"){let h=await e.text();p=c&&h?JSON.parse(h):h;}let l={method:t.toUpperCase(),headers:i,body:p,search:r?`?${r}`:""},d=await o.executeHTTPGraphQLRequest({httpGraphQLRequest:l,context:async()=>s}),u={};for(let[h,f]of d.headers)u[h]=f;if(d.body.kind==="complete")return new globalThis.Response(d.body.string,{status:d.status??200,headers:u});let m=new ReadableStream({async start(h){if(d.body.kind==="chunked")for await(let f of d.body.asyncIterator)h.enqueue(new TextEncoder().encode(f));h.close();}});return new globalThis.Response(m,{status:d.status??200,headers:u})}catch{return new globalThis.Response(JSON.stringify({errors:[{message:"Internal server error"}]}),{status:500,headers:{"Content-Type":"application/json"}})}},js=async(o,e,t,r,s,n,i)=>{try{let{HeaderMap:a}=await import('@apollo/server'),c=new a;for(let[f,g]of Object.entries(e))g!==void 0&&c.set(f,Array.isArray(g)?g.join(", "):g);let d=(c.get("content-type")??"").includes("application/json")&&r?JSON.parse(r):r,u={method:t?.toUpperCase()??"POST",headers:c,body:d,search:s?`?${s}`:""},m=await o.executeHTTPGraphQLRequest({httpGraphQLRequest:u,context:async()=>n}),h=m.status??200;m.body.kind==="complete"?await i(m.headers,h,m.body.string):await i(m.headers,h,m.body.asyncIterator);}catch{await i(new Map([["Content-Type","application/json"]]),500,JSON.stringify({errors:[{message:"Internal server error"}]}));}},ye=o=>{let e=null,t=false,r=async()=>{for(;t;)await new Promise(n=>setTimeout(n,10));},s=async()=>{try{let{ApolloServer:n}=await import('@apollo/server'),{makeExecutableSchema:i}=await import('@graphql-tools/schema'),a=o.getSchemaOptions(),c=o.getApolloOptions(),p=i({typeDefs:a.typeDefs,resolvers:a.resolvers}),l=new n({schema:p,...c});return await l.start(),{server:l,url:"/graphql"}}catch(n){throw n instanceof Error&&(n.message.includes("Cannot find module")||n.message.includes("Cannot find package"))?new Error("GraphQL is enabled but '@apollo/server' is not installed. Install it with: npm install @apollo/server @graphql-tools/schema graphql"):n}};return async()=>{if(!o.isEnabled)return null;if(e!==null)return e;if(t)return await r(),e;t=true;try{return e=s(),await e}catch(c){throw e=null,c}finally{t=false;}}};var ie=class o{static fromRequest(e){let t=Object.assign(new o,{url:e.url,method:e.method,signal:e.signal,referrer:e.referrer,referrerPolicy:e.referrerPolicy,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,integrity:e.integrity,keepalive:e.keepalive});return t.#o=e.headers,t.#n=true,t.#e=e,t}toWebApi(){if(this.#e)return this.#e;let e=this.method==="POST"||this.method==="PUT"||this.method==="PATCH";if(this.#r&&e){let t=Readable.toWeb(this.#r);return this.#e=new globalThis.Request(this.url,{method:this.method,body:t,headers:this.rawHeaders,signal:this.signal,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,duplex:"half"}),this.#e}return new globalThis.Request(this.url,{method:this.method,...e&&this.body?{body:this.body,duplex:"half"}:{},headers:this.rawHeaders,signal:this.signal,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive})}static toJSONSchemaWithPrefix(e){return H.isZodSchema(e)?{jsonSchema:H.toJSONSchema(e,{io:"input"}),prefix:"zod_schema"}:D.isTypeBoxSchema(e)?{jsonSchema:e,prefix:"typebox_schema"}:typeof e=="object"&&e!==null?{jsonSchema:e,prefix:"json_schema"}:{jsonSchema:{type:typeof e},prefix:`primitive_${JSON.stringify(e)}`}}static getOrCompileSchema(e){let{jsonSchema:t,prefix:r}=this.toJSONSchemaWithPrefix(e);return j.storeJsonSchema(t,r),j.getOrCompileValidator(t,r)}static zodIssuesToAjvErrors(e){return e.map(t=>{let r=(t.path??[]).map(String).join("/"),{path:s,code:n,message:i,...a}=t;return {keyword:t.code??"validation",instancePath:r?`/${r}`:"",schemaPath:`#/${r}/${t.code??"validation"}`,params:a,message:t.message??"Validation failed"}})}static compileAndValidate(e,t,r){if(H.isZodSchema(e)){let n=e.safeParse(t);if(n.success)return n.data;if(!r)return t;let i=this.zodIssuesToAjvErrors(n.error.issues);throw new ValidationError(i)}let s=this.getOrCompileSchema(e);return Ue(s,t,r)}#e;#r;#t;#a=false;#o;#n=false;#d;#p=false;url="";method="GET";get rawHeaders(){if(this.#n)return this.#o;if(this.#t){let e=this.#t,t={};if(this.#a)for(let r in e){if(r.charCodeAt(0)===58)continue;let s=e[r];s!==void 0&&(t[r]=Array.isArray(s)?s.join(", "):s);}else for(let r in e){let s=e[r];s!==void 0&&(t[r]=Array.isArray(s)?s.join(", "):s);}this.#o=new Headers(t);}else this.#o=new Headers;return this.#n=true,this.#o}get headers(){return this.#p?this.#d:{}}set headers(e){this.#d=e,this.#p=true;}signal;referrer;referrerPolicy;mode;credentials;cache;redirect;integrity;keepalive;body=void 0;bodyUsed=false;ctx={};file(e){return this.files.find(t=>t.formName===e)??null}#u;#c=false;get cookies(){if(!this.#c)throw new Error("Cookie middleware is required. Register the cookie plugin to access request cookies.");return this.#u}set cookies(e){this.#u=e,this.#c=true;}#y;#v=false;get signedCookies(){if(!this.#v)throw new Error("Cookie middleware is required. Register the cookie plugin to access signed cookies.");return this.#y}set signedCookies(e){this.#y=e,this.#v=true;}getOptionalCookies(){if(this.#c)return this.#u}cookie(e){if(this.#v){let t=this.#y[e];if(t!==void 0)return t}return this.cookies[e]}timeout;#w;#b=false;_sessionDirty=false;_sessionId;_sessionTtl;_sessionStore;_sessionCookieName;_sessionCookieDefaults;get session(){if(!this.#b)throw new Error("Session middleware is required. Register the session plugin to access request session.");return this.#w}set session(e){this.#w=e,this.#b=true;}getOptionalSession(){if(this.#b)return this.#w}static _throwSaveSession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use saveSession.")};static _throwDestroySession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use destroySession.")};static _throwRegenerateSession=async()=>{throw new Error("Session middleware is required. Register the session plugin to use regenerateSession.")};saveSession=o._throwSaveSession;destroySession=o._throwDestroySession;regenerateSession=o._throwRegenerateSession;#h;#m=false;#l;get ip(){return this.#m?this.#h:(this.#m=true,this.#l&&(this.#h=this.#l(),this.#l=void 0),this.#h)}set ip(e){this.#h=e,this.#m=true,this.#l=void 0;}files=[];params={};#i;#s;#f=false;get query(){if(this.#f)return this.#i;if(!this.#s||this.#s==="")this.#i={};else if(this.#s.length<50&&!this.#s.includes("&")){let e=this.#s.indexOf("=");if(e===-1)this.#i={[this.#s]:""};else {let t=this.#s.slice(0,e),r=decodeURIComponent(this.#s.slice(e+1));this.#i={[t]:r};}}else this.#i=Object.fromEntries(new URLSearchParams(this.#s));return this.#f=true,this.#i}set query(e){this.#i=e,this.#f=true;}setQueryString(e){this.#s=e,this.#f=false,this.#i=void 0;}#g;get id(){return this.#g||(this.#g=ee.randomUUID()),this.#g}set id(e){this.#g=e;}validate(e,t=false){return o.compileAndValidate(e,this.body||{},t)}validateQuery(e,t=false){return o.compileAndValidate(e,this.query||{},t)}validateAll(e,t=false){return o.compileAndValidate(e,{...this.body??{},...this.query??{}},t)}validateHeaders(e,t=false){let r=this.#p?this.#d:this.#S();return o.compileAndValidate(e,r,t)}#S(){let e={},t=new Map;this.rawHeaders.forEach((r,s)=>{let n=s.toLowerCase(),i=t.get(n);i?i.push(r):t.set(n,[r]);});for(let[r,s]of t)e[r]=s.length===1?s[0]:s;return e}setIpExtractor(e){this.#m=false,this.#l=()=>e.socket.remoteAddress;}setBunIpExtractor(e,t){this.#m=false,this.#l=()=>t.requestIP(e)?.address;}setDenoIpExtractor(e,t){this.#m=false,this.#l=()=>t.remoteAddr?.hostname;}setRawHeaders(e,t){this.#t=e,this.#a=t,this.#n=false,this.#o=void 0;}setNodeRequest(e){this.#r=e;}};J();var Pr=class{file(e,t){switch(E.type){case "bun":case "node":return ct.readFileSync(e,t);case "deno":return Deno.readFileSync(e);default:throw new Error("Unsupported runtime")}}},Nt=new Pr;var ks=new Map([[".html","text/html"],[".htm","text/html"],[".css","text/css"],[".js","application/javascript"],[".mjs","application/javascript"],[".cjs","application/javascript"],[".ts","application/typescript"],[".jsx","text/jsx"],[".tsx","text/tsx"],[".json","application/json"],[".xml","application/xml"],[".yaml","application/yaml"],[".yml","application/yaml"],[".csv","text/csv"],[".txt","text/plain"],[".md","text/markdown"],[".markdown","text/markdown"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".gif","image/gif"],[".svg","image/svg+xml"],[".ico","image/x-icon"],[".webp","image/webp"],[".avif","image/avif"],[".bmp","image/bmp"],[".tiff","image/tiff"],[".tif","image/tiff"],[".heic","image/heic"],[".heif","image/heif"],[".mp4","video/mp4"],[".webm","video/webm"],[".avi","video/x-msvideo"],[".mov","video/quicktime"],[".mkv","video/x-matroska"],[".wmv","video/x-ms-wmv"],[".flv","video/x-flv"],[".m4v","video/x-m4v"],[".mpeg","video/mpeg"],[".mpg","video/mpeg"],[".3gp","video/3gpp"],[".mp3","audio/mpeg"],[".wav","audio/wav"],[".ogg","audio/ogg"],[".flac","audio/flac"],[".aac","audio/aac"],[".m4a","audio/mp4"],[".wma","audio/x-ms-wma"],[".opus","audio/opus"],[".mid","audio/midi"],[".midi","audio/midi"],[".woff","font/woff"],[".woff2","font/woff2"],[".ttf","font/ttf"],[".otf","font/otf"],[".eot","application/vnd.ms-fontobject"],[".pdf","application/pdf"],[".doc","application/msword"],[".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],[".xls","application/vnd.ms-excel"],[".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],[".ppt","application/vnd.ms-powerpoint"],[".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],[".odt","application/vnd.oasis.opendocument.text"],[".ods","application/vnd.oasis.opendocument.spreadsheet"],[".odp","application/vnd.oasis.opendocument.presentation"],[".rtf","application/rtf"],[".epub","application/epub+zip"],[".zip","application/zip"],[".tar","application/x-tar"],[".gz","application/gzip"],[".gzip","application/gzip"],[".bz2","application/x-bzip2"],[".xz","application/x-xz"],[".rar","application/vnd.rar"],[".7z","application/x-7z-compressed"],[".wasm","application/wasm"],[".map","application/json"],[".webmanifest","application/manifest+json"],[".ics","text/calendar"],[".vcf","text/vcard"],[".sql","application/sql"],[".sh","application/x-sh"],[".bat","application/x-msdos-program"],[".exe","application/x-msdownload"],[".dll","application/x-msdownload"],[".bin","application/octet-stream"],[".iso","application/x-iso9660-image"],[".dmg","application/x-apple-diskimage"],[".apk","application/vnd.android.package-archive"],[".jar","application/java-archive"],[".swf","application/x-shockwave-flash"]]);var Cr=(o,e)=>{let{source:t,path:r}=o,s=o.dotfiles??"ignore",n=o.followSymlinks??false,i=r;return i.startsWith("/")||(i="/"+i),i!=="/"&&i.endsWith("/")&&(i=i.slice(0,-1)),_.addOrUpdate("GET",`${i}/*`,[],async(a,c)=>vn(a,c,t,s,n),{},{service:"StaticFiles",...e},void 0,true),async(a,c,p)=>p()};async function vn(o,e,t,r,s){if(o.method!=="GET"&&o.method!=="HEAD")return e.status(405).json({...$(new Ke(o.url,o.method))});let n=o.params["*"]||"";if(n.includes("\0"))return e.notFound({...$(new U(o.url,o.method))});let i=S.join(t,n),a=S.resolve(L.getCwd(),i),c=S.resolve(L.getCwd(),t);if(a!==c&&!a.startsWith(c+"/")&&!a.startsWith(c+"\\"))return e.notFound({...$(new U(o.url,o.method))});if(S.basename(a).startsWith(".")){if(r==="deny")return e.status(403).json({message:"Forbidden"});if(r==="ignore")return e.notFound({...$(new U(o.url,o.method))})}try{let u=await v.lstat(a);if(u.isSymbolicLink&&!s)return e.notFound({...$(new U(o.url,o.method))});if(!u.isFile)return e.notFound({...$(new U(o.url,o.method))})}catch(u){if(u.code==="ENOENT")return e.notFound({...$(new U(o.url,o.method))});throw u}let l=Or(S.extName(a));e.setHeader("Content-Type",l);let d=Nt.file(a);e.raw(d);}function Or(o){return ks.get(o)||"application/octet-stream"}var F=class{static toWebResponse(e){let t=e.getBody(),r=e.headers["Content-Type"]?.toLowerCase(),s=new globalThis.Headers(e.headers);for(let n of e.cookieHeaders)s.append("Set-Cookie",n);return r==="application/json"?typeof t=="string"?new globalThis.Response(t,{status:e.responseStatus,headers:s}):globalThis.Response.json(t,{status:e.responseStatus,headers:s}):new globalThis.Response(t,{status:e.responseStatus,headers:s})}responseStatus;headers;cookieHeaders;body;#e;#r;#t;constructor(e=200){this.responseStatus=e,this.headers={},this.cookieHeaders=[];}setRouteResponseSchemas(e){this.#r=e,this.#t=j.getOrCreateResponseSerializers(e)??void 0;}setHeader(e,t){if(/[\r\n]/.test(e)||/[\r\n]/.test(t))throw new Error(`Invalid header: CR/LF characters are not permitted in header names or values. key=${JSON.stringify(e)}`);return e.toLowerCase()==="set-cookie"?this.cookieHeaders.push(t):this.headers[e]=t,this}status(e){return this.responseStatus=e,this}send(e){if(e==null)return this.text("");if(typeof e=="string")return this.text(e);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return this.raw(e);if(typeof Buffer<"u"&&e instanceof Buffer)return this.download(new Uint8Array(e));if(e instanceof ArrayBuffer||e instanceof Uint8Array)return this.download(new Uint8Array(e));if(typeof e=="object"&&e!==null)try{return this.json(e)}catch{return this.text(String(e))}if(typeof e=="symbol")return this.text(e.toString());this.body=e;}raw(e){this.body=e;}setBodyDirect(e){this.body=e,this.#e=void 0;}text(e){this.body=e,this.headers["Content-Type"]="text/plain";}json(e,t){if(this.body=e,this.headers["Content-Type"]="application/json",!t&&this.#t){let s=this.#t.get(this.responseStatus);if(s){this.#e=s;return}}let r=t??this.#r?.[this.responseStatus];if(r){let{jsonSchema:s,prefix:n}=this.getJsonSchemaWithPrefix(r);this.#e=j.getOrCreateSerializer(s,n)??void 0;}}html(e){this.body=e,this.headers["Content-Type"]="text/html";}xml(e){this.body=e,this.headers["Content-Type"]="application/xml";}download(e){this.body=e,this.headers["Content-Type"]="application/octet-stream";}file(e,t){let r=S.extName(e),s=Or(r);this.body=Nt.file(e,t),this.headers["Content-Type"]=s;}ok(e){if(this.responseStatus=200,e!=null&&typeof e=="object"){this.json(e);return}this.send(e);}created(e){this.status(201).send(e);}accepted(e){this.status(202).send(e);}noContent(){this.responseStatus=204,this.body="";}partialContent(e){this.status(206).send(e);}multipleChoices(e){this.status(300).setHeader("Location",e);}redirect(e){this.status(302).setHeader("Location",e);}movedPermanently(e){this.status(301).setHeader("Location",e);}found(e){this.status(302).setHeader("Location",e);}seeOther(e){this.status(303).setHeader("Location",e);}notModified(){this.responseStatus=304,this.body="";}temporaryRedirect(e){this.status(307).setHeader("Location",e);}permanentRedirect(e){this.status(308).setHeader("Location",e);}badRequest(e){this.status(400).send(e);}unauthorized(e){this.status(401).send(e);}forbidden(e){this.status(403).send(e);}notFound(e){this.status(404).send(e);}methodNotAllowed(e){this.status(405).send(e);}notAcceptable(e){this.status(406).send(e);}conflict(e){this.status(409).send(e);}gone(e){this.status(410).send(e);}payloadTooLarge(e){this.status(413).send(e);}unsupportedMediaType(e){this.status(415).send(e);}unprocessableEntity(e){this.status(422).send(e);}tooManyRequests(e){this.status(429).send(e);}internalServerError(e){this.status(500).send(e);}notImplemented(e){this.status(501).send(e);}badGateway(e){this.status(502).send(e);}serviceUnavailable(e){this.status(503).send(e);}gatewayTimeout(e){this.status(504).send(e);}httpVersionNotSupported(e){this.status(505).send(e);}stream(e,t){if(this.headers["Content-Type"]="text/event-stream",this.headers["Cache-Control"]="no-cache",this.headers.Connection="keep-alive",t?.customHeaders)for(let r in t.customHeaders)this.headers[r]=t.customHeaders[r];if(e instanceof ReadableStream){this.body=e;return}this.body=new ReadableStream({async start(r){for await(let s of e)r.enqueue(new TextEncoder().encode(s));r.close();}});}getBody(){if(this.#e&&typeof this.body=="object"&&this.body!==null)try{this.body=this.#e(this.body),this.#e=void 0;}catch(e){M.error({error:e,statusCode:this.responseStatus,contentType:this.headers["Content-Type"]},"Fast-json-stringify serialization failed, falling back to JSON.stringify"),this.#e=void 0;}return this.body}getJsonSchemaWithPrefix(e){return H.isZodSchema(e)?{jsonSchema:H.toJSONSchema(e),prefix:"fast_stringify_zod"}:D.isTypeBoxSchema(e)?{jsonSchema:e,prefix:"fast_stringify_typebox"}:typeof e=="object"&&e!==null?{jsonSchema:e,prefix:"fast_stringify_json"}:{jsonSchema:{type:typeof e},prefix:`fast_stringify_primitive_${JSON.stringify(e)}`}}};var pe=class{constructor(e){this.response=e;}body(){let e=this.response.getBody();if(typeof e=="string"&&this.response.headers["Content-Type"]?.includes("json"))try{return JSON.parse(e)}catch{return e}return e}statusCode(){return this.response.responseStatus}headers(){return this.response.headers}cookies(){let e=this.response.cookieHeaders;if(!e||e.length===0)return {};let t={};for(let r of e){let[s]=r.split(";");if(s){let n=s.indexOf("=");if(n>0)try{let i=decodeURIComponent(s.slice(0,n).trim()),a=decodeURIComponent(s.slice(n+1).trim());t[i]=a;}catch{}}}return t}rawCookieHeaders(){return this.response.cookieHeaders??[]}assertStatus(e){if(this.response.responseStatus!==e)throw new Error(`Expected status ${e}, but got ${this.response.responseStatus}`);return this}assertHeader(e,t){if(this.response.headers[e]!==t)throw new Error(`Expected header ${e} to be ${t}, but got ${this.response.headers[e]}`);return this}assertHeaderExists(e){if(!(e in this.response.headers))throw new Error(`Expected header ${e} to exist, but it was not found`);return this}assertHeaderNotExists(e){if(e in this.response.headers)throw new Error(`Expected header ${e} to not exist, but it was found with value: ${this.response.headers[e]}`);return this}assertCookie(e,t){let r=this.cookies();if(r[e]!==t)throw new Error(`Expected cookie ${e} to be ${t}, but got ${r[e]??"undefined"}`);return this}assertCookieExists(e){let t=this.cookies();if(!(e in t))throw new Error(`Expected cookie ${e} to exist, but it was not found`);return this}assertCookieNotExists(e){let t=this.cookies();if(e in t)throw new Error(`Expected cookie ${e} to not exist, but it was found with value: ${t[e]}`);return this}assertBodySubset(e){return this.assertSubset(this.body(),e,"body"),this}assertBodyDeepEqual(e){return this.assertDeepEqual(this.body(),e,"body"),this}assertBodyNotSubset(e){return this.assertNotSubset(this.body(),e,"body"),this}assertBodyNotDeepEqual(e){return this.assertNotDeepEqual(this.body(),e,"body"),this}assertCustom(e){return e(this.response),this}assertSubset(e,t,r){for(let s in t){let n=r===""?s:`${r}.${s}`,i=e[s],a=t[s];if(!(s in e))throw new Error(`Expected ${r} to have key ${s}, but it was not found`);if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertDeepEqual(e,t,r){if(this.isObject(e)&&this.isObject(t)){let s=Object.keys(e),n=Object.keys(t);if(s.length!==n.length)throw new Error(`Expected ${r} to have ${n.length} keys, but got ${s.length}`);for(let i of n){let a=r==="body"?i:`${r}.${i}`;this.assertDeepEqual(e[i],t[i],a);}}else if(Array.isArray(e)&&Array.isArray(t))this.assertArrayDeepEqual(e,t,r);else if(e!==t)throw new Error(`Expected ${r} to be ${t}, but got ${e}`)}assertNotSubset(e,t,r){try{throw this.assertSubset(e,t,r),new Error(`Expected ${r} to NOT contain the subset, but it does`)}catch(s){if(s instanceof Error&&s.message.includes("Expected"))return;throw s}}assertNotDeepEqual(e,t,r){try{throw this.assertDeepEqual(e,t,r),new Error(`Expected ${r} to NOT be deeply equal, but it is`)}catch(s){if(s instanceof Error&&s.message.includes("Expected"))return;throw s}}assertArraySubset(e,t,r){if(t.length>e.length)throw new Error(`Expected ${r} to have at least ${t.length} elements, but got ${e.length}`);for(let s=0;s<t.length;s++){let n=`${r}[${s}]`,i=e[s],a=t[s];if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertArrayDeepEqual(e,t,r){if(e.length!==t.length)throw new Error(`Expected ${r} to have ${t.length} elements, but got ${e.length}`);for(let s=0;s<t.length;s++){let n=`${r}[${s}]`;this.assertDeepEqual(e[s],t[s],n);}}isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}};var ut=class{server;logger=M.child({scope:"MockServer"});ensureGraphQLHandler;bootstrapOptions;constructor(e,t){this.server=e,this.bootstrapOptions=t,this.ensureGraphQLHandler=ye(this.server.graphql);}async request(e,t,r={}){let{headers:s={},query:n={},cookies:i,ip:a}=r;this.validateOptions(r),await this.server.ensureBootstrapped(this.bootstrapOptions);let c=this.server.graphql.isEnabled,p=t.startsWith("/graphql");if(c&&p)return this.handleGraphQLRequest(e,t,r);let l=_.find(e.toUpperCase(),t);if(!l){let g=new F(404);return g.json({caller:"MockServer",error:"Route not found",path:t,method:e}),new pe(g)}let d,u="application/json";if(r.body!==void 0&&(typeof r.body=="object"&&!(r.body instanceof Uint8Array)&&!(r.body instanceof ArrayBuffer)?d=JSON.stringify(r.body):d=r.body),r.formData){let g=`----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;u=`multipart/form-data; boundary=${g}`,d=await this.formDataToMultipart(r.formData,g);}r.urlencoded&&(u="application/x-www-form-urlencoded",d=new URLSearchParams(r.urlencoded).toString());let m=new URL(`http://${this.server.host}:${this.server.port}${t}`);m.search=new URLSearchParams(n).toString();let h=new globalThis.Request(m.toString(),{method:e.toUpperCase(),body:le(e)?d:void 0,headers:{"content-type":u,...s}}),f=ie.fromRequest(h);f.query={...Object.fromEntries(m.searchParams.entries()),...n},f.params=l.params,i!==void 0&&(f.cookies=i),f.ip=a;try{let g=await ge(l.middleware,l.handler,f,new F);return new pe(g)}catch(g){this.logger.error({error:g},`Error processing mock request ${e} ${t}:`);let y=new F(500);return y.json({error:"Internal server error",message:g instanceof Error?g.message:String(g)}),new pe(y)}}async get(e,t){return this.request("GET",e,t)}async post(e,t){return this.request("POST",e,t)}async put(e,t){return this.request("PUT",e,t)}async patch(e,t){return this.request("PATCH",e,t)}async delete(e,t){return this.request("DELETE",e,t)}async formDataToMultipart(e,t){let r=new TextEncoder,s=[];for(let[c,p]of e.entries()){s.push(r.encode(`--${t}\r
1093
1093
  `));let l=`Content-Disposition: form-data; name="${c}"`,d="";if(p instanceof File&&(l+=`; filename="${p.name}"`,d=`Content-Type: ${p.type||"application/octet-stream"}\r
1094
1094
  `),s.push(r.encode(`${l}\r
1095
1095
  ${d}\r
@@ -1097,8 +1097,8 @@ ${d}\r
1097
1097
  `));}else s.push(r.encode(`${String(p)}\r
1098
1098
  `));}s.push(r.encode(`--${t}--\r
1099
1099
  `));let n=s.reduce((c,p)=>c+p.byteLength,0),i=new Uint8Array(n),a=0;for(let c of s)i.set(c,a),a+=c.byteLength;return i}async handleGraphQLRequest(e,t,r={}){let s=await this.ensureGraphQLHandler();if(!s){let m=new F(500);return m.json({errors:[{message:"GraphQL handler not initialized"}]}),new pe(m)}let{headers:n={},query:i={},cookies:a,ip:c}=r,p=new URL(`http://${this.server.host}:${this.server.port}${t}`);p.search=new URLSearchParams(i).toString();let l;r.body!==void 0&&le(e)&&(typeof r.body=="object"&&!(r.body instanceof Uint8Array)&&!(r.body instanceof ArrayBuffer)?l=JSON.stringify(r.body):l=r.body);let d=new globalThis.Request(p.toString(),{method:e.toUpperCase(),body:l,headers:{"content-type":"application/json",...n}}),u=ie.fromRequest(d);u.query={...Object.fromEntries(p.searchParams.entries()),...i},a!==void 0&&(u.cookies=a),u.ip=c;try{let{HeaderMap:m}=await import('@apollo/server'),h=new m;for(let[I,G]of Object.entries(n))G!==void 0&&h.set(I,Array.isArray(G)?G.join(", "):String(G));let g=(h.get("content-type")??"").includes("application/json"),y="";typeof l=="string"?y=l:l instanceof Uint8Array?y=new TextDecoder().decode(l):l&&typeof l=="object"&&(y=new TextDecoder().decode(new Uint8Array(l)));let P=g&&y?JSON.parse(y):y,x={method:e.toUpperCase(),headers:h,body:P,search:p.search},w=this.server.graphql.getApolloOptions(),b=w.context&&typeof w.context=="function"?await w.context({req:u}):{req:u},q=await s.server.executeHTTPGraphQLRequest({httpGraphQLRequest:x,context:async()=>b}),A=q.status??200,B=new F(A);for(let[I,G]of q.headers)B.setHeader(I,G);if(q.body.kind==="complete"){let I=q.body.string;try{B.json(JSON.parse(I));}catch{B.text(I);}}else {let I="";for await(let G of q.body.asyncIterator)I+=G;try{B.json(JSON.parse(I));}catch{B.text(I);}}return new pe(B)}catch(m){this.logger.error({error:m},`Error processing GraphQL request ${e} ${t}:`);let h=new F(500);return h.json({errors:[{message:"Internal server error"}]}),new pe(h)}}validateOptions(e){let{body:t,formData:r,urlencoded:s}=e;if(t&&(r||s))throw new Error("Only one of body, formData, urlencoded can be provided");if(r&&(s||t))throw new Error("Only one of formData, urlencoded can be provided");if(s&&(t||r))throw new Error("Only one of urlencoded, body can be provided")}};var Xe=new AsyncLocalStorage,Er=o=>async(e,t,r)=>{let s={};for(let[n,i]of Object.entries(o))s[n]=await i(e);return e.ctx=new Proxy({},{get(n,i){return Xe.getStore()?.[i]},set(n,i,a){let c=Xe.getStore();return c?(c[i]=a,true):false},ownKeys(){let n=Xe.getStore();return n?Object.keys(n):[]},has(n,i){let a=Xe.getStore();return a?i in a:false}}),Xe.run(s,async()=>{await r();})};var It=class extends R{constructor(e,t,r){super(`FILE_TOO_LARGE: "${e}" is too large. Max size is ${r} bytes, but got ${t} bytes`);}};J();var Mr=class{async tmpdir(){switch(E.type){case "node":case "bun":return (await import('os')).tmpdir();case "deno":return Deno.makeTempDir();default:throw new Error("Unsupported runtime")}}},qs=new Mr;var As=1024*1024,_s=10*1024*1024,$s=o=>async(e,t,r)=>{let s=[];try{let n=e.rawHeaders.get("content-type")??e.rawHeaders.get("Content-Type");if(!n||!n.startsWith("multipart/form-data")||e.body||e.bodyUsed)return r();let i=e.rawHeaders.get("content-length"),a=be(o?.maxFileSize,_s)??_s;if(i&&parseInt(i)>a)return t.status(413).json({error:"Payload too large",message:`Total request size exceeds ${a} bytes`});let c=n.match(/boundary=(.*)(;|$)/i);if(!c)return r();let p=c[1].replace(/(^\s*"?|"?\s*$)/g,"");if(p.length>70)return t.badRequest({...$(new R("Multipart boundary exceeds 70-character RFC 2046 limit"))});let l=new Uint8Array(await e.toWebApi().arrayBuffer());if(l.length>a)return t.status(413).json({error:"Payload too large",message:`Total request size exceeds ${a} bytes`});let d=new TextEncoder().encode(`--${p}`),u=new Uint8Array([13,10,13,10]),m=[],h=(x,w,b=0)=>{e:for(let q=b;q<=x.length-w.length;q++){for(let A=0;A<w.length;A++)if(x[q+A]!==w[A])continue e;return q}return -1},f=h(l,d);for(;f!==-1&&(f+=d.length,!(l[f]===45&&l[f+1]===45));){l[f]===13&&l[f+1]===10&&(f+=2);let x=h(l,u,f);if(x===-1)break;let w=l.subarray(f,x),b=new TextDecoder().decode(w),q=x+u.length,A=h(l,d,q);if(A===-1)break;let B=A-1;l[B]===10&&B--,l[B]===13&&B--;let I=l.subarray(q,B+1);m.push({headers:b,data:I}),f=A;}let g=[],y={},P=be(o?.maxFileSize,As)??As;for(let x of m){let w=x.headers.split(`\r
1100
- `).find(te=>te.toLowerCase().startsWith("content-disposition:"));if(!w)continue;let b=w.match(/name="([^"]+)"/);if(!b)continue;let q=b[1],A=w.match(/filename="([^"]*)"/),B=A?A[1]:"";if(B&&/[/\\\0]|\.\./.test(B))return t.badRequest({...$(new R(`Unsafe filename: "${B}"`))});let I=vn(B);if(!!B){if(o?.maxFiles&&g.length>=o.maxFiles)return t.badRequest({...$(new R(`Too many files: Maximum ${o.maxFiles} files allowed`))});if(P&&x.data.length>P)return t.badRequest({...$(new It(I,x.data.length,P))});let te=x.headers.split(`\r
1101
- `).find(io=>io.toLowerCase().startsWith("content-type:")),Ie=te?te.split(":")[1].trim():"application/octet-stream";if(o?.allowedMimeTypes&&!o.allowedMimeTypes.includes(Ie))return t.badRequest({...$(new R(`Invalid file type: "${Ie}" is not allowed. Allowed types: ${o.allowedMimeTypes.join(", ")}`))});let no=wn(Ie),er=S.join(await qs.tmpdir(),`${ee.randomUUID()}${no}`);await v.writeFile(er,x.data),s.push(er),g.push({formName:q,mimeType:Ie,size:x.data.length,tmpPath:er,originalName:I});}else y[q]=new TextDecoder().decode(x.data);}e.files=g,e.body=y,e.bodyUsed=!0,await r(),await Hs(s);}catch(n){throw await Hs(s),n}},Hs=async o=>{await Promise.allSettled(o.map(e=>v.unlink(e)));},vn=o=>o.replace(/\.\./g,"").replace(/[\/\\]/g,"").replace(/\0/g,"").replace(/[\x00-\x1f\x80-\x9f]/g,"").trim(),wn=o=>({"image/jpeg":".jpg","image/png":".png","image/gif":".gif","image/webp":".webp","application/pdf":".pdf","text/plain":".txt","application/json":".json","text/csv":".csv","application/octet-stream":".bin","application/x-www-form-urlencoded":".urlencoded","application/xml":".xml","application/yaml":".yaml","application/yml":".yml","application/csv":".csv","application/txt":".txt","application/markdown":".markdown"})[o.toLowerCase()]||".bin";var mt=class extends R{constructor(e){super(`JSON_NOT_VALID: "${JSON.stringify(e)}" is not a valid JSON`);}};var Bs=100*1024,bn=32,Sn=1e4,Ns=o=>{let e=o?.maxDepth??bn,t=o?.maxKeys??Sn;return async(r,s,n)=>{if(!Tn(r)||!le(r.method)||r.bodyUsed)return n();let i=be(o?.sizeLimit,Bs)??Bs,a=r.rawHeaders.get("content-length");if(a&&Number.parseInt(a)>i){let c={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...o?.customErrorMessage};return s.status(c.status).json({error:c.message})}if(r.body||r.bodyUsed)return n();try{let c=r.toWebApi(),p=await xn(c,i);if(p===null){let d={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...o?.customErrorMessage};return s.status(d.status).json({error:d.message})}let l=JSON.parse(p);jr(l,e,t,0,{count:0}),r.body=l,r.bodyUsed=!0;}catch(c){return c instanceof SyntaxError?s.badRequest({...$(new mt("Invalid JSON syntax"))}):c instanceof RangeError?s.status(413).json({error:c.message}):s.badRequest({...$(new mt("Invalid request body encoding"))})}await n();}};async function xn(o,e){let t=o.body?.getReader();if(!t)return "";let r=[],s=0;try{for(;;){let{done:a,value:c}=await t.read();if(a)break;if(s+=c.length,s>e)return t.cancel(),null;r.push(c);}}finally{t.releaseLock();}let n=new Uint8Array(s),i=0;for(let a of r)n.set(a,i),i+=a.length;return new TextDecoder().decode(n)}function jr(o,e,t,r,s){if(r>e)throw new RangeError(`JSON depth limit (${e}) exceeded`);if(typeof o=="object"&&o!==null&&!Array.isArray(o)){let n=Object.keys(o);if(s.count+=n.length,s.count>t)throw new RangeError(`JSON key count limit (${t}) exceeded`);for(let i of n)jr(o[i],e,t,r+1,s);}else if(Array.isArray(o))for(let n of o)jr(n,e,t,r+1,s);}function Tn(o){let e=Rn(o);return e?Pn(e)==="application/json":false}function Rn(o){let e=o.rawHeaders.get("content-type")??o.rawHeaders.get("Content-Type");return e?Array.isArray(e)?e[0]||null:e:null}function Pn(o){let e=o.trim(),t=e.indexOf(";");return t===-1?e.toLowerCase():e.substring(0,t).trim().toLowerCase()}var Is=1024*1024,Ls=o=>{let t={limit:be(o?.limit,Is)??Is,extended:o?.extended??false,charset:o?.charset??"utf8",allowEmpty:o?.allowEmpty??true,parameterLimit:o?.parameterLimit??1e3};return async(r,s,n)=>{if(!(r.rawHeaders.get("content-type")||"").includes("application/x-www-form-urlencoded"))return n();let a=r.rawHeaders.get("content-length");if(a&&parseInt(a)>t.limit){s.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}try{await Cn(r,t),await n();}catch(c){if(c instanceof Error&&c.message.includes("limit")){s.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}throw c}}};async function Cn(o,e){if(o.body||o.bodyUsed)return;let r=await o.toWebApi().arrayBuffer();if(r.byteLength>e.limit)throw new Error(`Body size ${r.byteLength} exceeds limit ${e.limit}`);let n=new TextDecoder(e.charset).decode(r),i=On(n,e);o.body=i,o.bodyUsed=true;}function On(o,e){let t={},r=new URLSearchParams(o);if(r.size>e.parameterLimit)throw new Error(`Too many parameters: ${r.size} exceeds limit ${e.parameterLimit}`);for(let[s,n]of r.entries())!e.allowEmpty&&n===""||(e.extended?En(t,s,n):t[s]=n);return t}function En(o,e,t){let r=["__proto__","constructor","prototype"];if(r.includes(e))return;let s=e.match(/\[([^\]]*)\]/g);if(!s){r.includes(e)||(o[e]=t);return}let n=o,i=e.split("[")[0];if(r.includes(i))return;for(let c=0;c<s.length-1;c++){let p=s[c].slice(1,-1);if(r.includes(p))return;if(n[i]||(n[i]={}),p===""){Array.isArray(n[i])||(n[i]=[]),n=n[i];continue}n[i][p]||(n[i][p]={}),n=n[i][p];}let a=s[s.length-1].slice(1,-1);if(!r.includes(a)){if(a===""){Array.isArray(n)||(n=[]),n.push(t);return}n[a]=t;}}var Mn=o=>(o.rawHeaders.get("content-type")??o.rawHeaders.get("Content-Type"))?.split(";")[0]??null,kr=(o={})=>{let e=o.json,t=o.urlencoded,r=o.fileParser;return async(s,n,i)=>{if(!le(s.method)||s.bodyUsed)return i();let a=Mn(s);if(a==="application/json"&&e)return Ns(e)(s,n,i);if(a==="multipart/form-data"&&r)return $s(r)(s,n,i);if(a==="application/x-www-form-urlencoded"&&t)return Ls(t)(s,n,i);if(a?.includes("text/")){let c=new TextDecoder,p=s.toWebApi();s.body=c.decode(await p.arrayBuffer()),s.bodyUsed=true;}return !s.body&&!s.bodyUsed&&(s.body=await s.toWebApi().arrayBuffer(),s.bodyUsed=true),i()}};var qn=promisify(gzip),An=1024,_n=6,Hn=[/text\/.+/,/application\/json/,/application\/javascript/,/application\/xml/,/application\/.*\+json/,/application\/.*\+xml/],qr=o=>{let e=o?.threshold??An,t=Math.max(0,Math.min(9,o?.level??_n)),r=o?.filter??Hn,s=o?.skipFor;return async(n,i,a)=>{i.setHeader("Vary","Accept-Encoding");let c=n.rawHeaders.get("accept-encoding")||"";if(!$n(c))return a();if(await a(),s?.(n,i))return;let p=i.getBody();if(p==null)return;let l=i.headers["Content-Type"];if(!l||!r.some(m=>m.test(l)))return;let d=Bn(p);if(!d||d.length<e)return;let u=await qn(d,{level:t});i.setHeader("Content-Encoding","gzip"),i.setHeader("Content-Length",u.length.toString()),i.setBodyDirect(u);}};function $n(o){for(let e of o.split(",")){let[t,...r]=e.trim().split(";");if(t.trim().toLowerCase()!=="gzip")continue;let s=r.find(n=>n.trim().startsWith("q="));if(s){let n=parseFloat(s.trim().slice(2));return !Number.isNaN(n)&&n>0}return true}return false}var Bn=o=>typeof o=="string"?Buffer.from(o,"utf-8"):Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o):typeof o=="object"?Buffer.from(JSON.stringify(o),"utf-8"):null;var In=/^[!#$%&'*+\-.0-9A-Z^_`a-z|~]+$/,Ln=/^[\x20-\x7E]*$/,Dn=/[;\r\n]/,Us=new Set(["__proto__","prototype","constructor"]),Fn=8192,Qn=50,Ar=o=>{let e=Un(o?.secret);if(o?.sign&&e.length===0)throw new Error("Cookie signing requires a secret. Set `secret` when `sign` is enabled.");let t=o?.sign??false,r={path:"/",httpOnly:true,secure:true,sameSite:"Lax",...o?.defaults},s=o?.parse??true;return async(n,i,a)=>{if(n.cookies=Object.create(null),n.signedCookies=Object.create(null),s){let c=Gn(n.rawHeaders.get("cookie")||"");for(let[p,l]of Object.entries(c)){if(t&&e.length>0){let d=Jn(l,e);d!==false&&(n.signedCookies[p]=d);continue}n.cookies[p]=l;}}i.cookie=(c,p,l)=>{let d={...r,...l},u=l?.signed!==void 0?l.signed:t;Fs(i,c,p,d,u,e);},i.clearCookie=(c,p)=>{let l={...r,...p,maxAge:0,expires:new Date(0)};Fs(i,c,"",l,false,[]);},await a();}};function Un(o){return o?Array.isArray(o)?o.filter(Boolean):[o]:[]}function zn(o){if(o.includes("__proto__")||o.includes("constructor")||o.includes("prototype"))return true;if(o.startsWith("{")||o.startsWith("["))try{let e=JSON.parse(o),t=(r,s=0)=>{if(s>3||typeof r!="object"||r===null)return !1;for(let n in r)if(Us.has(n)||t(r[n],s+1))return !0;return !1};return t(e)}catch{return false}return false}function Gn(o){let e=Object.create(null);if(!o)return e;let r=o.slice(0,Fn).split(";"),s=0;for(let n of r){if(s>=Qn)break;let i=n.trim(),a=i.indexOf("=");if(a<=0)continue;let c,p;try{c=decodeURIComponent(i.slice(0,a)),p=decodeURIComponent(i.slice(a+1));}catch{continue}Us.has(c)||zn(p)||(e[c]=p,s++);}return e}function Ds(o,e){if(!Ln.test(e)||Dn.test(e))throw new Error(`Cookie ${o} contains invalid characters (CR, LF, or semicolons are not permitted): ${JSON.stringify(e)}`)}function Fs(o,e,t,r,s,n){if(!In.test(e))throw new Error(`Invalid cookie name ${JSON.stringify(e)}: must be a valid RFC 6265 token.`);if(r.sameSite==="None"&&!r.secure)throw new Error(`Cookie ${JSON.stringify(e)}: sameSite "None" requires secure: true.`);let i=s&&n.length>0?Vn(t,n[0]):t,a=`${encodeURIComponent(e)}=${encodeURIComponent(i)}`;if(r.domain&&(Ds("domain",r.domain),a+=`; Domain=${r.domain}`),r.path&&(Ds("path",r.path),a+=`; Path=${r.path}`),r.expires!==void 0){if(Number.isNaN(r.expires.getTime()))throw new Error(`Cookie ${JSON.stringify(e)}: expires is an Invalid Date.`);a+=`; Expires=${r.expires.toUTCString()}`;}if(r.maxAge!==void 0){if(!Number.isInteger(r.maxAge)||r.maxAge<0)throw new Error(`Cookie ${JSON.stringify(e)}: maxAge must be a non-negative integer, got ${r.maxAge}.`);a+=`; Max-Age=${r.maxAge}`;}if(r.secure&&(a+="; Secure"),r.httpOnly&&(a+="; HttpOnly"),r.sameSite&&(a+=`; SameSite=${r.sameSite}`),r.priority){if(!["Low","Medium","High"].includes(r.priority))throw new Error(`Cookie ${JSON.stringify(e)}: priority must be "Low", "Medium", or "High".`);a+=`; Priority=${r.priority}`;}o.setHeader("Set-Cookie",a);}function Vn(o,e){let t=createHmac("sha256",e).update(o).digest("hex");return `${o}.${t}`}function Jn(o,e){let t=o.lastIndexOf(".");if(t<=0||t===o.length-1)return false;let r=o.slice(0,t),s=o.slice(t+1),n=Buffer.from(s,"hex");for(let i of e){let a=createHmac("sha256",i).update(r).digest("hex"),c=Buffer.from(a,"hex");if(n.length===c.length&&timingSafeEqual(n,c))return r}return false}var Wn=/^[A-Za-z0-9:/.\-]+$/,Kn=["Content-Type","Accept","Authorization"],Xn=[/\(\.[^+*\[]+\)\+/,/\([+.]\*[+.]*\)/,/^(a+)+$/];function Zn(o){let e=o.source;o.flags.includes("g")&&e.includes("(?:");for(let r of Xn)if(r.test(e))throw new Error(`CORS origin regex pattern is potentially vulnerable to ReDoS: ${e}. Avoid nested quantifiers and overlapping patterns. Use explicit character classes instead.`);e.length>200&&console.warn(`CORS origin regex pattern is very long (${e.length} chars), may impact performance: ${e.slice(0,50)}...`);}var Hr=o=>{if(!o)throw new Error("cors() requires an options object with an explicit `origin`. Use cors({ origin: '*' }) for public APIs or specify allowed origins.");if(o.origin==="*"&&o.credentials===true)throw new Error("cors(): `origin: '*'` and `credentials: true` cannot be combined. This is forbidden by the Fetch spec and browsers will reject such responses. Use an explicit origin list when credentials are required.");let e=[];if(Array.isArray(o.origin))for(let r of o.origin)r instanceof RegExp&&(Zn(r),e.push(r));let t={origin:o.origin??"*",methods:o.methods??["GET","HEAD","PUT","PATCH","POST","DELETE"],allowedHeaders:o.allowedHeaders?Array.isArray(o.allowedHeaders)?o.allowedHeaders:[o.allowedHeaders]:Kn,exposedHeaders:o.exposedHeaders,credentials:o.credentials??false,maxAge:o.maxAge,preflightContinue:o.preflightContinue??false,optionsSuccessStatus:o.optionsSuccessStatus??204,allowNullOrigin:o.allowNullOrigin??false,precompiledRegex:e};return async(r,s,n)=>{let i=r.rawHeaders.get("origin")||"";if(!i){await n();return}if(r.method==="OPTIONS")return Yn(r,s,t,i,n);ei(r,s,t,i),await n();}};function Yn(o,e,t,r,s){let n=Gs(t,r);if(!n){e.forbidden("CORS origin not allowed");return}let i=o.rawHeaders.get("access-control-request-method");if(i&&!(Array.isArray(t.methods)?t.methods.map(c=>c.toUpperCase()):String(t.methods).split(",").map(c=>c.trim().toUpperCase())).includes(i.toUpperCase())){e.forbidden("CORS method not allowed");return}if(Vs(e,t,n,true),t.preflightContinue){s();return}e.status(t.optionsSuccessStatus||204),e.send("");}function ei(o,e,t,r){let s=Gs(t,r);s&&Vs(e,t,s,false);}function Gs(o,e){return e==="null"&&!o.allowNullOrigin||!Wn.test(e)?false:typeof o.origin=="string"?o.origin==="*"?"*":e===o.origin?e:false:Array.isArray(o.origin)&&o.origin.find((r,s)=>{if(typeof r=="string")return r===e;if(r instanceof RegExp&&o.precompiledRegex?.[s])try{return o.precompiledRegex[s].test(e)}catch{return false}return false})?e:false}function Vs(o,e,t,r){o.setHeader("Access-Control-Allow-Origin",t),t!=="*"&&_r(o,"Origin"),e.credentials&&o.setHeader("Access-Control-Allow-Credentials","true");let s=zs(e.exposedHeaders);s&&o.setHeader("Access-Control-Expose-Headers",s);let n=zs(e.methods);o.setHeader("Access-Control-Allow-Methods",String(n||"")),r&&(o.setHeader("Access-Control-Allow-Headers",e.allowedHeaders.join(",")),_r(o,"Access-Control-Request-Headers"),_r(o,"Access-Control-Request-Method"),typeof e.maxAge=="number"&&o.setHeader("Access-Control-Max-Age",e.maxAge.toString()));}function _r(o,e){let t=o.headers.Vary;t?t.split(",").map(r=>r.trim()).includes(e)||o.setHeader("Vary",`${t}, ${e}`):o.setHeader("Vary",e);}function zs(o){if(o!==void 0)return Array.isArray(o)?o.join(","):o}function Js(o,e=""){let t=new URL(o.url),r=Object.fromEntries(o.rawHeaders.entries()),n=o.rawHeaders.get("x-forwarded-proto")||t.protocol.replace(":","");return {body:o.body,query:o.query,params:o.params,cookies:o.cookies,session:o.session,originalUrl:t.pathname+t.search,baseUrl:e,path:t.pathname.replace(e,"")||"/",method:o.method,ip:o.ip,headers:r,url:t.pathname,get(a){return o.rawHeaders.get(a.toLowerCase())??void 0},header(a){return o.rawHeaders.get(a.toLowerCase())??void 0},app:{},res:null,route:null,protocol:n,secure:n==="https",hostname:t.hostname,host:t.host,fresh:false,stale:true,xhr:r["x-requested-with"]?.toLowerCase()==="xmlhttprequest",accepts:()=>{},acceptsCharsets:()=>{},acceptsEncodings:()=>{},acceptsLanguages:()=>{},is:()=>null,range:()=>{},param:a=>o.params[a]??o.query[a],files:o.files,file:o.file,rawBody:o.body}}function Ws(o){return {locals:{},headersSent:false,statusCode:o.responseStatus,status(t){return o.status(t),this.statusCode=t,this},sendStatus(t){return this.status(t).send(String(t)),this},send(t){if(this.headersSent=true,!!!o.headers["Content-Type"]&&typeof t=="string"){let s=t.trim();if(s.startsWith("<!DOCTYPE")||s.startsWith("<html")||s.startsWith("<HTML"))return o.html(t),this}return o.send(t),this},json(t){return this.headersSent=true,o.json(t),this},redirect(t,r){this.headersSent=true;let s=typeof t=="string"?t:r,n=typeof t=="number"?t:302;return o.status(n).setHeader("Location",s),this},setHeader(t,r){let s=Array.isArray(r)?r.join(", "):String(r);return o.setHeader(t,s),this},set(t,r){if(typeof t=="object")for(let[s,n]of Object.entries(t))o.setHeader(s,n);else r!==void 0&&o.setHeader(t,r);return this},header(t,r){return this.set(t,r)},type(t){return o.setHeader("Content-Type",t),this},contentType(t){return this.type(t)},end(t){return this.headersSent=true,o.send(t??""),this},write(t){return M.warn({method:"write"},"res.write() is not fully supported in Express compatibility layer - responses will be buffered"),true},get(t){return o.headers[t]},getHeader(t){return o.headers[t]},removeHeader(t){return delete o.headers[t],this},append(t,r){let s=o.headers[t],n=Array.isArray(r)?r.join(", "):r;return o.setHeader(t,s?`${s}, ${n}`:n),this},cookie(t,r,s){return o.cookie?.(t,r,s),this},clearCookie(t,r){return o.clearCookie?.(t,r),this},render(t,r,s){throw new Error("render() is not supported in Express compatibility layer")},format(t){throw new Error("format() is not supported in Express compatibility layer")},attachment(t){return t?o.setHeader("Content-Disposition",`attachment; filename="${t}"`):o.setHeader("Content-Disposition","attachment"),this},sendFile(t,r,s){o.file(t);},download(t,r,s,n){let i=typeof r=="string"?r:t.split("/").pop();this.attachment(i),o.file(t);},links(t){let r=Object.entries(t).map(([s,n])=>`<${n}>; rel="${s}"`).join(", ");return o.setHeader("Link",r),this},location(t){return o.setHeader("Location",t),this},vary(t){return o.setHeader("Vary",t),this},app:{},req:null}}function Be(o,e=""){return async(t,r,s)=>{let n=Js(t,e),i=Ws(r);n.res=i,i.req=n;let a=false,c=3e4;await Promise.race([new Promise((p,l)=>{let d=u=>{if(a=true,u){l(u);return}p();};try{let u=o(n,i,d);u instanceof Promise&&u.catch(l);}catch(u){l(u);}}),new Promise(p=>{setTimeout(()=>{!a&&!i.headersSent&&M.warn({basePath:e,timeout:c},"Express middleware did not call next() within timeout and did not send response"),p();},c);})]),i.headersSent||await s();}}function Ks(o,e=""){return async(t,r)=>{let s=Js(t,e),n=Ws(r);s.res=n,n.req=s;let i=()=>{};try{await o(s,n,i);}catch(a){throw M.error({error:a,basePath:e},"Express handler threw an error"),a}}}function ht(o,e){let t=$r(o),r=e.stack;if(!r){M.warn({basePath:o},"Express router has no stack - routes may not be registered");return}for(let s of r)Xs(s,t);}function Xs(o,e){if(o.route){let t=$r(e+o.route.path),r=Object.keys(o.route.methods).filter(s=>o.route.methods[s]);for(let s of r){let n=o.route.stack.map(i=>i.handle);ti(s.toUpperCase(),t,n,e);}return}if(o.handle&&typeof o.handle=="function"){let t=o.path||"",r=$r(e+t),s=o.handle.stack;if(s&&Array.isArray(s)){for(let c of s)Xs(c,r);return}let n=r==="/"?"/*":`${r}/*`,i=Be(o.handle,e),a=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let c of a)_.addOrUpdate(c,n,[i],async()=>{},{},{excludeFromSwagger:true});}}function ti(o,e,t,r){let s=t.slice(0,-1).map(a=>Be(a,r)),n=t[t.length-1],i=Ks(n,r);_.addOrUpdate(o,e,s,i,{},{excludeFromSwagger:true});}function $r(o){let e=o.replace(/\/+/g,"/");return e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function Br(o){return {use(e,t){if(typeof e=="string"){let n=e,i=t,a=i.stack;if(a&&Array.isArray(a)){ht(n,i);return}o.use(Be(i,n));return}let r=e,s=r.stack;if(s&&Array.isArray(s)){ht("/",r);return}o.use(Be(r));}}}var Nr=o=>{let e={dnsPrefetchControl:true,frameguard:{action:"SAMEORIGIN"},hsts:{maxAge:15552e3,includeSubDomains:true,preload:false},contentTypeOptions:true,ieNoOpen:true,xssLegacyHeader:false,xssFilter:void 0,referrerPolicy:"no-referrer",crossOriginResourcePolicy:"same-origin",crossOriginOpenerPolicy:"same-origin",crossOriginEmbedderPolicy:"require-corp",contentSecurityPolicy:"default-src 'self'",permissionsPolicy:"camera=(), microphone=(), geolocation=()",originAgentCluster:true,...o},t=e.xssLegacyHeader!==void 0?e.xssLegacyHeader:e.xssFilter??false;return async(r,s,n)=>{if(e.dnsPrefetchControl&&s.setHeader("X-DNS-Prefetch-Control","off"),e.frameguard){let i="SAMEORIGIN";typeof e.frameguard=="object"&&(i=e.frameguard.action),s.setHeader("X-Frame-Options",i);}if(e.hsts){let i={};typeof e.hsts=="object"&&(i=e.hsts);let a=i.maxAge!==void 0?i.maxAge:15552e3,c=i.includeSubDomains!==void 0?i.includeSubDomains:true,p=i.preload!==void 0?i.preload:false,l=`max-age=${a}`;c!==false&&(l+="; includeSubDomains"),p&&(l+="; preload"),s.setHeader("Strict-Transport-Security",l);}e.contentTypeOptions&&s.setHeader("X-Content-Type-Options","nosniff"),e.ieNoOpen&&s.setHeader("X-Download-Options","noopen"),t&&s.setHeader("X-XSS-Protection","0"),e.referrerPolicy&&s.setHeader("Referrer-Policy",e.referrerPolicy),e.crossOriginResourcePolicy&&s.setHeader("Cross-Origin-Resource-Policy",e.crossOriginResourcePolicy),e.crossOriginOpenerPolicy&&s.setHeader("Cross-Origin-Opener-Policy",e.crossOriginOpenerPolicy),e.crossOriginEmbedderPolicy&&s.setHeader("Cross-Origin-Embedder-Policy",e.crossOriginEmbedderPolicy),e.contentSecurityPolicy&&s.setHeader("Content-Security-Policy",e.contentSecurityPolicy),e.permissionsPolicy&&s.setHeader("Permissions-Policy",e.permissionsPolicy),e.originAgentCluster&&s.setHeader("Origin-Agent-Cluster","?1"),await n();}};var Ir=o=>{let e=M.child({scope:"LogMiddleware"});return async(t,r,s)=>{try{let n=t.body;(o?.logRequest??!0)&&e.info({type:"request",requestId:t.id,method:o?.requestPayload?.method??!0?t.method:void 0,url:o?.requestPayload?.url??!0?t.url:void 0,ip:o?.requestPayload?.ip??!0?t.ip:void 0,headers:o?.requestPayload?.headers??!0?t.headers:void 0,body:o?.requestPayload?.body??!1?Zs(n):void 0});let i=performance.now();await s();let c=performance.now()-i;(o?.logResponse??!0)&&e.info({type:"response",requestId:t.id,status:o?.responsePayload?.status??!0?r.responseStatus:void 0,duration:`${c.toFixed(2)}ms`,body:o?.responsePayload?.body??!1?Zs(r.getBody()):void 0,headers:o?.responsePayload?.headers??!1?r.headers:void 0});}catch(n){throw e.error(n),n}}};function Zs(o){if(typeof o=="string"||o&&typeof o=="object"&&o.constructor===Object)return o}var ri=["POST"],si="X-HTTP-Method-Override",oi=["GET","POST","PUT","PATCH","DELETE"],ni=["PUT","PATCH","DELETE"],Lr=o=>{let e=(o?.methods??ri).map(s=>s.toUpperCase()),t=o?.header??si,r=o?.disableCsrfCheck??false;return async(s,n,i)=>{let a=s.method.toUpperCase();if(!e.includes(a))return i();let c=s.rawHeaders.get(t);if(!c)return i();let p=c.toUpperCase();if(!oi.includes(p))return i();if(!r&&ni.includes(p)){let l=s.rawHeaders.get("host"),d=s.rawHeaders.get("origin"),u=s.rawHeaders.get("referer"),m=d||(u?ii(u):null);if(m&&l){let h=ai(m);if(h&&h!==l)return n.forbidden("Cross-site method override rejected")}}s.method=p,await i();}};function ii(o){try{return new URL(o).origin}catch{return null}}function ai(o){try{return new URL(o).host}catch{return null}}var Lt=class{storage=new Map;windowMs;maxKeys;constructor(e,t=1e5){this.windowMs=e,this.maxKeys=t;}async increment(e,t){let r=Date.now(),s=t||this.windowMs,n=this.storage.get(e);if(n&&n.resetAt>r)return n.count+=1,{count:n.count,resetAt:n.resetAt};if(!n&&this.storage.size>=this.maxKeys){let a=this.storage.keys().next().value;a!==void 0&&this.storage.delete(a);}else if(n)return n.count=1,n.resetAt=r+s,{count:1,resetAt:n.resetAt};let i={count:1,resetAt:r+s};return this.storage.set(e,i),{count:1,resetAt:i.resetAt}}};var Dr=(o,e)=>{let t={type:"ip",limit:100,message:"ERR_RATE_LIMIT_EXCEEDED",statusCode:429,...o},r={type:"memory",...e},s=r.type==="memory"?r.windowMs??6e4:6e4,n=t.failClosed??false,i=r.type==="memory"?new Lt(s,r.maxKeys):{increment:r.increment};return async(a,c,p)=>{let l=t.type==="ip"?a.ip:t.key(a);if(!l)return p();let d;try{d=(await i.increment(l,s)).count;}catch{return n?c.status(t.statusCode).json({message:t.message}):p()}return d>t.limit?c.status(t.statusCode).json({message:t.message}):p()}};var Dt=class{store=new Map;async get(e){let t=this.store.get(e);if(t){if(t.exp&&Date.now()>t.exp){this.store.delete(e);return}return t.value}}async set(e,t,r){let s=r?Date.now()+r*1e3:void 0;this.store.set(e,{value:t,exp:s});}async destroy(e){this.store.delete(e);}};var Fr=o=>{let e=o?.name??"sid",t=o?.ttl??3600*24,r=o?.store??new Dt,n={path:"/",httpOnly:true,secure:true,sameSite:"Lax",...!!o?.secret?{signed:true}:{},...o?.cookie??{}};return async(i,a,c)=>{let l=ci(i,e),d=l?await r.get(l):void 0;if(!l||!d){l=ee.randomUUID();let m={};await r.set(l,m,t),a.cookie?.(e,l,n),i.session={...m},i._sessionDirty=true,i._sessionId=l,i._sessionTtl=t,i._sessionStore=r,i._sessionCookieName=e,i._sessionCookieDefaults=n;}else i.session={...d},i._sessionDirty=false,i._sessionId=l,i._sessionTtl=t,i._sessionStore=r,i._sessionCookieName=e,i._sessionCookieDefaults=n;let u=false;i.saveSession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot save session: no session ID or store available");if(!i.session)throw new Error("Cannot save session: session data is undefined");await i._sessionStore.set(i._sessionId,i.session,i._sessionTtl),i._sessionDirty=false;},i.destroySession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot destroy session: no session ID or store available");u=true,await i._sessionStore.destroy(i._sessionId),a.clearCookie?.(i._sessionCookieName??"sid",i._sessionCookieDefaults),i._sessionDirty=false;},i.regenerateSession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot regenerate session: no session ID or store available");if(!i.session)throw new Error("Cannot regenerate session: session data is undefined");await i._sessionStore.destroy(i._sessionId);let m=ee.randomUUID();await i._sessionStore.set(m,i.session,i._sessionTtl),a.cookie?.(i._sessionCookieName??"sid",m,i._sessionCookieDefaults),i._sessionId=m,i._sessionDirty=true;},await c(),!u&&i._sessionDirty&&i._sessionId&&i._sessionStore&&i.session&&await i._sessionStore.set(i._sessionId,i.session,i._sessionTtl);}};function ci(o,e){try{let t=o.signedCookies[e];if(t!==void 0)return t}catch{}try{return o.cookies[e]}catch{return}}var li={json:"application/json","form-data":"multipart/form-data",urlencoded:"application/x-www-form-urlencoded",binary:"application/octet-stream",text:"text/plain","event-stream":"text/event-stream"},di={type:"object",properties:{message:{type:"string"},errors:{type:"array",items:{type:"object",properties:{instancePath:{type:"string"},schemaPath:{type:"string"},keyword:{type:"string"},params:{type:"object"},message:{type:"string"}}}},ajv:{type:"boolean"},validation:{type:"boolean"}}};function Ys(o){return o?li[o]??o:"application/json"}var to=o=>{let e={type:"standard",path:"/docs",title:"Balda API Documentation",description:"API Documentation from the Balda Framework",version:"1.0.0",servers:["http://localhost"],security:[],tags:[],components:{},securitySchemes:{},models:{}};o&&typeof o!="boolean"&&(e={...e,...o});let t=pi(e),r=`${e.path}`,s=`${r}/json`,n;e.type==="rapidoc"?n=mi(s,e):e.type==="scalar"?n=hi(s,e):e.type==="elements"?n=fi(s,e):e.type==="custom"?n=e.customUIGenerator(s,e):n=ui(s,e),_.addOrUpdate("GET",r,[],(i,a)=>{a.html(n);},void 0,void 0,void 0,true),_.addOrUpdate("GET",s,[],(i,a)=>{a.json(t);},void 0,void 0,void 0,true);},we=o=>o?o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):"";function ve(o){if(!o||typeof o!="object")return {type:"string"};let e="json_schema";H.isZodSchema(o)?e="zod_schema":D.isTypeBoxSchema(o)&&(e="typebox_schema");let t=j.getJsonSchema(o,e);if(t)return t;if(H.isZodSchema(o))try{let s=H.toJSONSchema(o);return j.storeJsonSchema(s,e),s}catch(s){return M.debug({error:s instanceof Error?s.message:String(s),schemaType:o?.constructor?.name||typeof o},"Failed to convert Zod schema to JSON Schema for Swagger documentation"),{type:"object"}}let r=o;return j.storeJsonSchema(r,e),r}function pi(o){let e=_.getRoutes(),t={},r;if(o.models)if(Array.isArray(o.models))r=o.models.reduce((n,i,a)=>{let c=ve(i),p=c.$id||c.title||`Model${a}`;return n[p]=c,n},{});else {r={};for(let[n,i]of Object.entries(o.models))r[n]=ve(i);}let s={...o.components,securitySchemes:o.securitySchemes||{},schemas:r?{...o.components?.schemas||{},...r}:o.components?.schemas?{...o.components.schemas}:void 0};for(let n of e){let i=n.swaggerOptions;if(i?.excludeFromSwagger)continue;t[n.path]||(t[n.path]={});let a=n.method.toLowerCase(),c={summary:i?.name||`${a.toUpperCase()} ${n.path}`,description:i?.description||"",tags:i?.service?[i.service]:[],deprecated:i?.deprecated||false},p=[],l=n.validationSchemas?.query;if(l){let f=l;if(f.type==="object"&&f.shape)for(let[g,y]of Object.entries(f.shape))!y||typeof y!="object"||p.push({name:g,in:"query",required:Array.isArray(f.shape[g].required)?f.shape[g].required.includes(g):false,schema:ve(y)});}i&&i.params?p=p.concat(eo(n.path,i.params)):p=p.concat(eo(n.path));let d=n.validationSchemas?.headers;if(d){let f=d;if(f.type==="object"&&f.shape)for(let[g,y]of Object.entries(f.shape))!y||typeof y!="object"||p.push({name:g,in:"header",required:Array.isArray(f.shape[g].required)?f.shape[g].required.includes(g):false,schema:ve(y)});}p.length>0&&(c.parameters=p);let u=n.validationSchemas?.body||n.validationSchemas?.all;if(u){let f=Ys(i?.bodyType);c.requestBody={content:{[f]:{schema:ve(u)}},required:true};}else if(i?.bodyType){let f=Ys(i.bodyType);c.requestBody={content:{[f]:{schema:{type:"object"}}},required:true};}c.responses={};let m=n.responses;if(m)for(let[f,g]of Object.entries(m))c.responses[f]={description:`Response for ${f}`,content:{"application/json":{schema:ve(g)}}};if(Object.keys(c.responses).length===0&&(c.responses[200]={description:"Successful response",content:{"application/json":{schema:{type:"object"}}}}),n.validationSchemas?.body||n.validationSchemas?.query||n.validationSchemas?.all){let f=De(),g={statusCode:i?.validationErrorResponse?.statusCode??o.validationErrorResponse?.statusCode??f?.status??422,description:i?.validationErrorResponse?.description??o.validationErrorResponse?.description??"Validation error",schema:i?.validationErrorResponse?.schema??o.validationErrorResponse?.schema??(f?.schema?ve(f.schema):di)},y=String(g.statusCode);c.responses[y]||(c.responses[y]={description:g.description,content:{"application/json":{schema:g.schema}}});}if(i?.security){let f=[];Array.isArray(i.security)||(i.security=[i.security]);for(let g of i.security)if(g.type==="bearer")s.securitySchemes.bearer||(s.securitySchemes.bearer={type:"http",scheme:"bearer",bearerFormat:g.bearerFormat||"JWT",description:g.description}),f.push({bearer:[]});else if(g.type==="apiKey")s.securitySchemes[g.name]||(s.securitySchemes[g.name]={type:"apiKey",name:g.name,in:g.in,description:g.description}),f.push({[g.name]:[]});else if(g.type==="oauth2"){let y=g.name||"oauth2";s.securitySchemes[y]||(s.securitySchemes[y]={type:"oauth2",flows:g.flows,description:g.description}),f.push({[y]:[]});}else if(g.type==="openIdConnect"){let y=g.name||"openIdConnect";s.securitySchemes[y]||(s.securitySchemes[y]={type:"openIdConnect",openIdConnectUrl:g.openIdConnectUrl,description:g.description}),f.push({[y]:[]});}f.length&&(c.security=f);}else o.security&&(c.security=o.security);t[n.path][a]=c;}return {openapi:"3.0.0",info:{title:o.title,description:o.description,version:o.version,...o.info},servers:o.servers?.map(n=>({url:n}))||[{url:"/"}],paths:t,components:s,security:o.security||[],tags:o.tags?Object.entries(o.tags).map(([n,i])=>({name:n,...i})):[]}}function ui(o,e){return `
1100
+ `).find(te=>te.toLowerCase().startsWith("content-disposition:"));if(!w)continue;let b=w.match(/name="([^"]+)"/);if(!b)continue;let q=b[1],A=w.match(/filename="([^"]*)"/),B=A?A[1]:"";if(B&&/[/\\\0]|\.\./.test(B))return t.badRequest({...$(new R(`Unsafe filename: "${B}"`))});let I=bn(B);if(!!B){if(o?.maxFiles&&g.length>=o.maxFiles)return t.badRequest({...$(new R(`Too many files: Maximum ${o.maxFiles} files allowed`))});if(P&&x.data.length>P)return t.badRequest({...$(new It(I,x.data.length,P))});let te=x.headers.split(`\r
1101
+ `).find(io=>io.toLowerCase().startsWith("content-type:")),Ie=te?te.split(":")[1].trim():"application/octet-stream";if(o?.allowedMimeTypes&&!o.allowedMimeTypes.includes(Ie))return t.badRequest({...$(new R(`Invalid file type: "${Ie}" is not allowed. Allowed types: ${o.allowedMimeTypes.join(", ")}`))});let no=Sn(Ie),er=S.join(await qs.tmpdir(),`${ee.randomUUID()}${no}`);await v.writeFile(er,x.data),s.push(er),g.push({formName:q,mimeType:Ie,size:x.data.length,tmpPath:er,originalName:I});}else y[q]=new TextDecoder().decode(x.data);}e.files=g,e.body=y,e.bodyUsed=!0,await r(),await Hs(s);}catch(n){throw await Hs(s),n}},Hs=async o=>{await Promise.allSettled(o.map(e=>v.unlink(e)));},bn=o=>o.replace(/\.\./g,"").replace(/[\/\\]/g,"").replace(/\0/g,"").replace(/[\x00-\x1f\x80-\x9f]/g,"").trim(),Sn=o=>({"image/jpeg":".jpg","image/png":".png","image/gif":".gif","image/webp":".webp","application/pdf":".pdf","text/plain":".txt","application/json":".json","text/csv":".csv","application/octet-stream":".bin","application/x-www-form-urlencoded":".urlencoded","application/xml":".xml","application/yaml":".yaml","application/yml":".yml","application/csv":".csv","application/txt":".txt","application/markdown":".markdown"})[o.toLowerCase()]||".bin";var mt=class extends R{constructor(e){super(`JSON_NOT_VALID: "${JSON.stringify(e)}" is not a valid JSON`);}};var Bs=100*1024,xn=32,Tn=1e4,Ns=o=>{let e=o?.maxDepth??xn,t=o?.maxKeys??Tn;return async(r,s,n)=>{if(!Pn(r)||!le(r.method)||r.bodyUsed)return n();let i=be(o?.sizeLimit,Bs)??Bs,a=r.rawHeaders.get("content-length");if(a&&Number.parseInt(a)>i){let c={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...o?.customErrorMessage};return s.status(c.status).json({error:c.message})}if(r.body||r.bodyUsed)return n();try{let c=r.toWebApi(),p=await Rn(c,i);if(p===null){let d={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...o?.customErrorMessage};return s.status(d.status).json({error:d.message})}if(p.trim()==="")return r.body=o?.parseEmptyBodyAsObject===!1?void 0:{},r.bodyUsed=!0,n();let l=JSON.parse(p);jr(l,e,t,0,{count:0}),r.body=l,r.bodyUsed=!0;}catch(c){return c instanceof SyntaxError?s.badRequest({...$(new mt("Invalid JSON syntax"))}):c instanceof RangeError?s.status(413).json({error:c.message}):s.badRequest({...$(new mt("Invalid request body encoding"))})}await n();}};async function Rn(o,e){let t=o.body?.getReader();if(!t)return "";let r=[],s=0;try{for(;;){let{done:a,value:c}=await t.read();if(a)break;if(s+=c.length,s>e)return t.cancel(),null;r.push(c);}}finally{t.releaseLock();}let n=new Uint8Array(s),i=0;for(let a of r)n.set(a,i),i+=a.length;return new TextDecoder().decode(n)}function jr(o,e,t,r,s){if(r>e)throw new RangeError(`JSON depth limit (${e}) exceeded`);if(typeof o=="object"&&o!==null&&!Array.isArray(o)){let n=Object.keys(o);if(s.count+=n.length,s.count>t)throw new RangeError(`JSON key count limit (${t}) exceeded`);for(let i of n)jr(o[i],e,t,r+1,s);}else if(Array.isArray(o))for(let n of o)jr(n,e,t,r+1,s);}function Pn(o){let e=Cn(o);return e?On(e)==="application/json":false}function Cn(o){let e=o.rawHeaders.get("content-type")??o.rawHeaders.get("Content-Type");return e?Array.isArray(e)?e[0]||null:e:null}function On(o){let e=o.trim(),t=e.indexOf(";");return t===-1?e.toLowerCase():e.substring(0,t).trim().toLowerCase()}var Is=1024*1024,Ls=o=>{let t={limit:be(o?.limit,Is)??Is,extended:o?.extended??false,charset:o?.charset??"utf8",allowEmpty:o?.allowEmpty??true,parameterLimit:o?.parameterLimit??1e3};return async(r,s,n)=>{if(!(r.rawHeaders.get("content-type")||"").includes("application/x-www-form-urlencoded"))return n();let a=r.rawHeaders.get("content-length");if(a&&parseInt(a)>t.limit){s.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}try{await En(r,t),await n();}catch(c){if(c instanceof Error&&c.message.includes("limit")){s.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}throw c}}};async function En(o,e){if(o.body||o.bodyUsed)return;let r=await o.toWebApi().arrayBuffer();if(r.byteLength>e.limit)throw new Error(`Body size ${r.byteLength} exceeds limit ${e.limit}`);let n=new TextDecoder(e.charset).decode(r),i=Mn(n,e);o.body=i,o.bodyUsed=true;}function Mn(o,e){let t={},r=new URLSearchParams(o);if(r.size>e.parameterLimit)throw new Error(`Too many parameters: ${r.size} exceeds limit ${e.parameterLimit}`);for(let[s,n]of r.entries())!e.allowEmpty&&n===""||(e.extended?jn(t,s,n):t[s]=n);return t}function jn(o,e,t){let r=["__proto__","constructor","prototype"];if(r.includes(e))return;let s=e.match(/\[([^\]]*)\]/g);if(!s){r.includes(e)||(o[e]=t);return}let n=o,i=e.split("[")[0];if(r.includes(i))return;for(let c=0;c<s.length-1;c++){let p=s[c].slice(1,-1);if(r.includes(p))return;if(n[i]||(n[i]={}),p===""){Array.isArray(n[i])||(n[i]=[]),n=n[i];continue}n[i][p]||(n[i][p]={}),n=n[i][p];}let a=s[s.length-1].slice(1,-1);if(!r.includes(a)){if(a===""){Array.isArray(n)||(n=[]),n.push(t);return}n[a]=t;}}var kn=o=>(o.rawHeaders.get("content-type")??o.rawHeaders.get("Content-Type"))?.split(";")[0]??null,kr=(o={})=>{let e=o.json,t=o.urlencoded,r=o.fileParser;return async(s,n,i)=>{if(!le(s.method)||s.bodyUsed)return i();let a=kn(s);if(a==="application/json"&&e)return Ns(e)(s,n,i);if(a==="multipart/form-data"&&r)return $s(r)(s,n,i);if(a==="application/x-www-form-urlencoded"&&t)return Ls(t)(s,n,i);if(a?.includes("text/")){let c=new TextDecoder,p=s.toWebApi();s.body=c.decode(await p.arrayBuffer()),s.bodyUsed=true;}return !s.body&&!s.bodyUsed&&(s.body=await s.toWebApi().arrayBuffer(),s.bodyUsed=true),i()}};var _n=promisify(gzip),Hn=1024,$n=6,Bn=[/text\/.+/,/application\/json/,/application\/javascript/,/application\/xml/,/application\/.*\+json/,/application\/.*\+xml/],qr=o=>{let e=o?.threshold??Hn,t=Math.max(0,Math.min(9,o?.level??$n)),r=o?.filter??Bn,s=o?.skipFor;return async(n,i,a)=>{i.setHeader("Vary","Accept-Encoding");let c=n.rawHeaders.get("accept-encoding")||"";if(!Nn(c))return a();if(await a(),s?.(n,i))return;let p=i.getBody();if(p==null)return;let l=i.headers["Content-Type"];if(!l||!r.some(m=>m.test(l)))return;let d=In(p);if(!d||d.length<e)return;let u=await _n(d,{level:t});i.setHeader("Content-Encoding","gzip"),i.setHeader("Content-Length",u.length.toString()),i.setBodyDirect(u);}};function Nn(o){for(let e of o.split(",")){let[t,...r]=e.trim().split(";");if(t.trim().toLowerCase()!=="gzip")continue;let s=r.find(n=>n.trim().startsWith("q="));if(s){let n=parseFloat(s.trim().slice(2));return !Number.isNaN(n)&&n>0}return true}return false}var In=o=>typeof o=="string"?Buffer.from(o,"utf-8"):Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o):typeof o=="object"?Buffer.from(JSON.stringify(o),"utf-8"):null;var Dn=/^[!#$%&'*+\-.0-9A-Z^_`a-z|~]+$/,Fn=/^[\x20-\x7E]*$/,Qn=/[;\r\n]/,Us=new Set(["__proto__","prototype","constructor"]),Un=8192,zn=50,Ar=o=>{let e=Gn(o?.secret);if(o?.sign&&e.length===0)throw new Error("Cookie signing requires a secret. Set `secret` when `sign` is enabled.");let t=o?.sign??false,r={path:"/",httpOnly:true,secure:true,sameSite:"Lax",...o?.defaults},s=o?.parse??true;return async(n,i,a)=>{if(n.cookies=Object.create(null),n.signedCookies=Object.create(null),s){let c=Jn(n.rawHeaders.get("cookie")||"");for(let[p,l]of Object.entries(c)){if(t&&e.length>0){let d=Kn(l,e);d!==false&&(n.signedCookies[p]=d);continue}n.cookies[p]=l;}}i.cookie=(c,p,l)=>{let d={...r,...l},u=l?.signed!==void 0?l.signed:t;Fs(i,c,p,d,u,e);},i.clearCookie=(c,p)=>{let l={...r,...p,maxAge:0,expires:new Date(0)};Fs(i,c,"",l,false,[]);},await a();}};function Gn(o){return o?Array.isArray(o)?o.filter(Boolean):[o]:[]}function Vn(o){if(o.includes("__proto__")||o.includes("constructor")||o.includes("prototype"))return true;if(o.startsWith("{")||o.startsWith("["))try{let e=JSON.parse(o),t=(r,s=0)=>{if(s>3||typeof r!="object"||r===null)return !1;for(let n in r)if(Us.has(n)||t(r[n],s+1))return !0;return !1};return t(e)}catch{return false}return false}function Jn(o){let e=Object.create(null);if(!o)return e;let r=o.slice(0,Un).split(";"),s=0;for(let n of r){if(s>=zn)break;let i=n.trim(),a=i.indexOf("=");if(a<=0)continue;let c,p;try{c=decodeURIComponent(i.slice(0,a)),p=decodeURIComponent(i.slice(a+1));}catch{continue}Us.has(c)||Vn(p)||(e[c]=p,s++);}return e}function Ds(o,e){if(!Fn.test(e)||Qn.test(e))throw new Error(`Cookie ${o} contains invalid characters (CR, LF, or semicolons are not permitted): ${JSON.stringify(e)}`)}function Fs(o,e,t,r,s,n){if(!Dn.test(e))throw new Error(`Invalid cookie name ${JSON.stringify(e)}: must be a valid RFC 6265 token.`);if(r.sameSite==="None"&&!r.secure)throw new Error(`Cookie ${JSON.stringify(e)}: sameSite "None" requires secure: true.`);let i=s&&n.length>0?Wn(t,n[0]):t,a=`${encodeURIComponent(e)}=${encodeURIComponent(i)}`;if(r.domain&&(Ds("domain",r.domain),a+=`; Domain=${r.domain}`),r.path&&(Ds("path",r.path),a+=`; Path=${r.path}`),r.expires!==void 0){if(Number.isNaN(r.expires.getTime()))throw new Error(`Cookie ${JSON.stringify(e)}: expires is an Invalid Date.`);a+=`; Expires=${r.expires.toUTCString()}`;}if(r.maxAge!==void 0){if(!Number.isInteger(r.maxAge)||r.maxAge<0)throw new Error(`Cookie ${JSON.stringify(e)}: maxAge must be a non-negative integer, got ${r.maxAge}.`);a+=`; Max-Age=${r.maxAge}`;}if(r.secure&&(a+="; Secure"),r.httpOnly&&(a+="; HttpOnly"),r.sameSite&&(a+=`; SameSite=${r.sameSite}`),r.priority){if(!["Low","Medium","High"].includes(r.priority))throw new Error(`Cookie ${JSON.stringify(e)}: priority must be "Low", "Medium", or "High".`);a+=`; Priority=${r.priority}`;}o.setHeader("Set-Cookie",a);}function Wn(o,e){let t=createHmac("sha256",e).update(o).digest("hex");return `${o}.${t}`}function Kn(o,e){let t=o.lastIndexOf(".");if(t<=0||t===o.length-1)return false;let r=o.slice(0,t),s=o.slice(t+1),n=Buffer.from(s,"hex");for(let i of e){let a=createHmac("sha256",i).update(r).digest("hex"),c=Buffer.from(a,"hex");if(n.length===c.length&&timingSafeEqual(n,c))return r}return false}var Xn=/^[A-Za-z0-9:/.\-]+$/,Zn=["Content-Type","Accept","Authorization"],Yn=[/\(\.[^+*\[]+\)\+/,/\([+.]\*[+.]*\)/,/^(a+)+$/];function ei(o){let e=o.source;o.flags.includes("g")&&e.includes("(?:");for(let r of Yn)if(r.test(e))throw new Error(`CORS origin regex pattern is potentially vulnerable to ReDoS: ${e}. Avoid nested quantifiers and overlapping patterns. Use explicit character classes instead.`);e.length>200&&console.warn(`CORS origin regex pattern is very long (${e.length} chars), may impact performance: ${e.slice(0,50)}...`);}var Hr=o=>{if(!o)throw new Error("cors() requires an options object with an explicit `origin`. Use cors({ origin: '*' }) for public APIs or specify allowed origins.");if(o.origin==="*"&&o.credentials===true)throw new Error("cors(): `origin: '*'` and `credentials: true` cannot be combined. This is forbidden by the Fetch spec and browsers will reject such responses. Use an explicit origin list when credentials are required.");let e=[];if(Array.isArray(o.origin))for(let r of o.origin)r instanceof RegExp&&(ei(r),e.push(r));let t={origin:o.origin??"*",methods:o.methods??["GET","HEAD","PUT","PATCH","POST","DELETE"],allowedHeaders:o.allowedHeaders?Array.isArray(o.allowedHeaders)?o.allowedHeaders:[o.allowedHeaders]:Zn,exposedHeaders:o.exposedHeaders,credentials:o.credentials??false,maxAge:o.maxAge,preflightContinue:o.preflightContinue??false,optionsSuccessStatus:o.optionsSuccessStatus??204,allowNullOrigin:o.allowNullOrigin??false,precompiledRegex:e};return async(r,s,n)=>{let i=r.rawHeaders.get("origin")||"";if(!i){await n();return}if(r.method==="OPTIONS")return ti(r,s,t,i,n);ri(r,s,t,i),await n();}};function ti(o,e,t,r,s){let n=Gs(t,r);if(!n){e.forbidden("CORS origin not allowed");return}let i=o.rawHeaders.get("access-control-request-method");if(i&&!(Array.isArray(t.methods)?t.methods.map(c=>c.toUpperCase()):String(t.methods).split(",").map(c=>c.trim().toUpperCase())).includes(i.toUpperCase())){e.forbidden("CORS method not allowed");return}if(Vs(e,t,n,true),t.preflightContinue){s();return}e.status(t.optionsSuccessStatus||204),e.send("");}function ri(o,e,t,r){let s=Gs(t,r);s&&Vs(e,t,s,false);}function Gs(o,e){return e==="null"&&!o.allowNullOrigin||!Xn.test(e)?false:typeof o.origin=="string"?o.origin==="*"?"*":e===o.origin?e:false:Array.isArray(o.origin)&&o.origin.find((r,s)=>{if(typeof r=="string")return r===e;if(r instanceof RegExp&&o.precompiledRegex?.[s])try{return o.precompiledRegex[s].test(e)}catch{return false}return false})?e:false}function Vs(o,e,t,r){o.setHeader("Access-Control-Allow-Origin",t),t!=="*"&&_r(o,"Origin"),e.credentials&&o.setHeader("Access-Control-Allow-Credentials","true");let s=zs(e.exposedHeaders);s&&o.setHeader("Access-Control-Expose-Headers",s);let n=zs(e.methods);o.setHeader("Access-Control-Allow-Methods",String(n||"")),r&&(o.setHeader("Access-Control-Allow-Headers",e.allowedHeaders.join(",")),_r(o,"Access-Control-Request-Headers"),_r(o,"Access-Control-Request-Method"),typeof e.maxAge=="number"&&o.setHeader("Access-Control-Max-Age",e.maxAge.toString()));}function _r(o,e){let t=o.headers.Vary;t?t.split(",").map(r=>r.trim()).includes(e)||o.setHeader("Vary",`${t}, ${e}`):o.setHeader("Vary",e);}function zs(o){if(o!==void 0)return Array.isArray(o)?o.join(","):o}function Js(o,e=""){let t=new URL(o.url),r=Object.fromEntries(o.rawHeaders.entries()),n=o.rawHeaders.get("x-forwarded-proto")||t.protocol.replace(":","");return {body:o.body,query:o.query,params:o.params,cookies:o.cookies,session:o.session,originalUrl:t.pathname+t.search,baseUrl:e,path:t.pathname.replace(e,"")||"/",method:o.method,ip:o.ip,headers:r,url:t.pathname,get(a){return o.rawHeaders.get(a.toLowerCase())??void 0},header(a){return o.rawHeaders.get(a.toLowerCase())??void 0},app:{},res:null,route:null,protocol:n,secure:n==="https",hostname:t.hostname,host:t.host,fresh:false,stale:true,xhr:r["x-requested-with"]?.toLowerCase()==="xmlhttprequest",accepts:()=>{},acceptsCharsets:()=>{},acceptsEncodings:()=>{},acceptsLanguages:()=>{},is:()=>null,range:()=>{},param:a=>o.params[a]??o.query[a],files:o.files,file:o.file,rawBody:o.body}}function Ws(o){return {locals:{},headersSent:false,statusCode:o.responseStatus,status(t){return o.status(t),this.statusCode=t,this},sendStatus(t){return this.status(t).send(String(t)),this},send(t){if(this.headersSent=true,!!!o.headers["Content-Type"]&&typeof t=="string"){let s=t.trim();if(s.startsWith("<!DOCTYPE")||s.startsWith("<html")||s.startsWith("<HTML"))return o.html(t),this}return o.send(t),this},json(t){return this.headersSent=true,o.json(t),this},redirect(t,r){this.headersSent=true;let s=typeof t=="string"?t:r,n=typeof t=="number"?t:302;return o.status(n).setHeader("Location",s),this},setHeader(t,r){let s=Array.isArray(r)?r.join(", "):String(r);return o.setHeader(t,s),this},set(t,r){if(typeof t=="object")for(let[s,n]of Object.entries(t))o.setHeader(s,n);else r!==void 0&&o.setHeader(t,r);return this},header(t,r){return this.set(t,r)},type(t){return o.setHeader("Content-Type",t),this},contentType(t){return this.type(t)},end(t){return this.headersSent=true,o.send(t??""),this},write(t){return M.warn({method:"write"},"res.write() is not fully supported in Express compatibility layer - responses will be buffered"),true},get(t){return o.headers[t]},getHeader(t){return o.headers[t]},removeHeader(t){return delete o.headers[t],this},append(t,r){let s=o.headers[t],n=Array.isArray(r)?r.join(", "):r;return o.setHeader(t,s?`${s}, ${n}`:n),this},cookie(t,r,s){return o.cookie?.(t,r,s),this},clearCookie(t,r){return o.clearCookie?.(t,r),this},render(t,r,s){throw new Error("render() is not supported in Express compatibility layer")},format(t){throw new Error("format() is not supported in Express compatibility layer")},attachment(t){return t?o.setHeader("Content-Disposition",`attachment; filename="${t}"`):o.setHeader("Content-Disposition","attachment"),this},sendFile(t,r,s){o.file(t);},download(t,r,s,n){let i=typeof r=="string"?r:t.split("/").pop();this.attachment(i),o.file(t);},links(t){let r=Object.entries(t).map(([s,n])=>`<${n}>; rel="${s}"`).join(", ");return o.setHeader("Link",r),this},location(t){return o.setHeader("Location",t),this},vary(t){return o.setHeader("Vary",t),this},app:{},req:null}}function Be(o,e=""){return async(t,r,s)=>{let n=Js(t,e),i=Ws(r);n.res=i,i.req=n;let a=false,c=3e4;await Promise.race([new Promise((p,l)=>{let d=u=>{if(a=true,u){l(u);return}p();};try{let u=o(n,i,d);u instanceof Promise&&u.catch(l);}catch(u){l(u);}}),new Promise(p=>{setTimeout(()=>{!a&&!i.headersSent&&M.warn({basePath:e,timeout:c},"Express middleware did not call next() within timeout and did not send response"),p();},c);})]),i.headersSent||await s();}}function Ks(o,e=""){return async(t,r)=>{let s=Js(t,e),n=Ws(r);s.res=n,n.req=s;let i=()=>{};try{await o(s,n,i);}catch(a){throw M.error({error:a,basePath:e},"Express handler threw an error"),a}}}function ht(o,e){let t=$r(o),r=e.stack;if(!r){M.warn({basePath:o},"Express router has no stack - routes may not be registered");return}for(let s of r)Xs(s,t);}function Xs(o,e){if(o.route){let t=$r(e+o.route.path),r=Object.keys(o.route.methods).filter(s=>o.route.methods[s]);for(let s of r){let n=o.route.stack.map(i=>i.handle);si(s.toUpperCase(),t,n,e);}return}if(o.handle&&typeof o.handle=="function"){let t=o.path||"",r=$r(e+t),s=o.handle.stack;if(s&&Array.isArray(s)){for(let c of s)Xs(c,r);return}let n=r==="/"?"/*":`${r}/*`,i=Be(o.handle,e),a=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let c of a)_.addOrUpdate(c,n,[i],async()=>{},{},{excludeFromSwagger:true});}}function si(o,e,t,r){let s=t.slice(0,-1).map(a=>Be(a,r)),n=t[t.length-1],i=Ks(n,r);_.addOrUpdate(o,e,s,i,{},{excludeFromSwagger:true});}function $r(o){let e=o.replace(/\/+/g,"/");return e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function Br(o){return {use(e,t){if(typeof e=="string"){let n=e,i=t,a=i.stack;if(a&&Array.isArray(a)){ht(n,i);return}o.use(Be(i,n));return}let r=e,s=r.stack;if(s&&Array.isArray(s)){ht("/",r);return}o.use(Be(r));}}}var Nr=o=>{let e={dnsPrefetchControl:true,frameguard:{action:"SAMEORIGIN"},hsts:{maxAge:15552e3,includeSubDomains:true,preload:false},contentTypeOptions:true,ieNoOpen:true,xssLegacyHeader:false,xssFilter:void 0,referrerPolicy:"no-referrer",crossOriginResourcePolicy:"same-origin",crossOriginOpenerPolicy:"same-origin",crossOriginEmbedderPolicy:"require-corp",contentSecurityPolicy:"default-src 'self'",permissionsPolicy:"camera=(), microphone=(), geolocation=()",originAgentCluster:true,...o},t=e.xssLegacyHeader!==void 0?e.xssLegacyHeader:e.xssFilter??false;return async(r,s,n)=>{if(e.dnsPrefetchControl&&s.setHeader("X-DNS-Prefetch-Control","off"),e.frameguard){let i="SAMEORIGIN";typeof e.frameguard=="object"&&(i=e.frameguard.action),s.setHeader("X-Frame-Options",i);}if(e.hsts){let i={};typeof e.hsts=="object"&&(i=e.hsts);let a=i.maxAge!==void 0?i.maxAge:15552e3,c=i.includeSubDomains!==void 0?i.includeSubDomains:true,p=i.preload!==void 0?i.preload:false,l=`max-age=${a}`;c!==false&&(l+="; includeSubDomains"),p&&(l+="; preload"),s.setHeader("Strict-Transport-Security",l);}e.contentTypeOptions&&s.setHeader("X-Content-Type-Options","nosniff"),e.ieNoOpen&&s.setHeader("X-Download-Options","noopen"),t&&s.setHeader("X-XSS-Protection","0"),e.referrerPolicy&&s.setHeader("Referrer-Policy",e.referrerPolicy),e.crossOriginResourcePolicy&&s.setHeader("Cross-Origin-Resource-Policy",e.crossOriginResourcePolicy),e.crossOriginOpenerPolicy&&s.setHeader("Cross-Origin-Opener-Policy",e.crossOriginOpenerPolicy),e.crossOriginEmbedderPolicy&&s.setHeader("Cross-Origin-Embedder-Policy",e.crossOriginEmbedderPolicy),e.contentSecurityPolicy&&s.setHeader("Content-Security-Policy",e.contentSecurityPolicy),e.permissionsPolicy&&s.setHeader("Permissions-Policy",e.permissionsPolicy),e.originAgentCluster&&s.setHeader("Origin-Agent-Cluster","?1"),await n();}};var Ir=o=>{let e=M.child({scope:"LogMiddleware"});return async(t,r,s)=>{try{let n=t.body;(o?.logRequest??!0)&&e.info({type:"request",requestId:t.id,method:o?.requestPayload?.method??!0?t.method:void 0,url:o?.requestPayload?.url??!0?t.url:void 0,ip:o?.requestPayload?.ip??!0?t.ip:void 0,headers:o?.requestPayload?.headers??!0?t.headers:void 0,body:o?.requestPayload?.body??!1?Zs(n):void 0});let i=performance.now();await s();let c=performance.now()-i;(o?.logResponse??!0)&&e.info({type:"response",requestId:t.id,status:o?.responsePayload?.status??!0?r.responseStatus:void 0,duration:`${c.toFixed(2)}ms`,body:o?.responsePayload?.body??!1?Zs(r.getBody()):void 0,headers:o?.responsePayload?.headers??!1?r.headers:void 0});}catch(n){throw e.error(n),n}}};function Zs(o){if(typeof o=="string"||o&&typeof o=="object"&&o.constructor===Object)return o}var oi=["POST"],ni="X-HTTP-Method-Override",ii=["GET","POST","PUT","PATCH","DELETE"],ai=["PUT","PATCH","DELETE"],Lr=o=>{let e=(o?.methods??oi).map(s=>s.toUpperCase()),t=o?.header??ni,r=o?.disableCsrfCheck??false;return async(s,n,i)=>{let a=s.method.toUpperCase();if(!e.includes(a))return i();let c=s.rawHeaders.get(t);if(!c)return i();let p=c.toUpperCase();if(!ii.includes(p))return i();if(!r&&ai.includes(p)){let l=s.rawHeaders.get("host"),d=s.rawHeaders.get("origin"),u=s.rawHeaders.get("referer"),m=d||(u?ci(u):null);if(m&&l){let h=li(m);if(h&&h!==l)return n.forbidden("Cross-site method override rejected")}}s.method=p,await i();}};function ci(o){try{return new URL(o).origin}catch{return null}}function li(o){try{return new URL(o).host}catch{return null}}var Lt=class{storage=new Map;windowMs;maxKeys;constructor(e,t=1e5){this.windowMs=e,this.maxKeys=t;}async increment(e,t){let r=Date.now(),s=t||this.windowMs,n=this.storage.get(e);if(n&&n.resetAt>r)return n.count+=1,{count:n.count,resetAt:n.resetAt};if(!n&&this.storage.size>=this.maxKeys){let a=this.storage.keys().next().value;a!==void 0&&this.storage.delete(a);}else if(n)return n.count=1,n.resetAt=r+s,{count:1,resetAt:n.resetAt};let i={count:1,resetAt:r+s};return this.storage.set(e,i),{count:1,resetAt:i.resetAt}}};var Dr=(o,e)=>{let t={type:"ip",limit:100,message:"ERR_RATE_LIMIT_EXCEEDED",statusCode:429,...o},r={type:"memory",...e},s=r.type==="memory"?r.windowMs??6e4:6e4,n=t.failClosed??false,i=r.type==="memory"?new Lt(s,r.maxKeys):{increment:r.increment};return async(a,c,p)=>{let l=t.type==="ip"?a.ip:t.key(a);if(!l)return p();let d;try{d=(await i.increment(l,s)).count;}catch{return n?c.status(t.statusCode).json({message:t.message}):p()}return d>t.limit?c.status(t.statusCode).json({message:t.message}):p()}};var Dt=class{store=new Map;async get(e){let t=this.store.get(e);if(t){if(t.exp&&Date.now()>t.exp){this.store.delete(e);return}return t.value}}async set(e,t,r){let s=r?Date.now()+r*1e3:void 0;this.store.set(e,{value:t,exp:s});}async destroy(e){this.store.delete(e);}};var Fr=o=>{let e=o?.name??"sid",t=o?.ttl??3600*24,r=o?.store??new Dt,n={path:"/",httpOnly:true,secure:true,sameSite:"Lax",...!!o?.secret?{signed:true}:{},...o?.cookie??{}};return async(i,a,c)=>{let l=di(i,e),d=l?await r.get(l):void 0;if(!l||!d){l=ee.randomUUID();let m={};await r.set(l,m,t),a.cookie?.(e,l,n),i.session={...m},i._sessionDirty=true,i._sessionId=l,i._sessionTtl=t,i._sessionStore=r,i._sessionCookieName=e,i._sessionCookieDefaults=n;}else i.session={...d},i._sessionDirty=false,i._sessionId=l,i._sessionTtl=t,i._sessionStore=r,i._sessionCookieName=e,i._sessionCookieDefaults=n;let u=false;i.saveSession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot save session: no session ID or store available");if(!i.session)throw new Error("Cannot save session: session data is undefined");await i._sessionStore.set(i._sessionId,i.session,i._sessionTtl),i._sessionDirty=false;},i.destroySession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot destroy session: no session ID or store available");u=true,await i._sessionStore.destroy(i._sessionId),a.clearCookie?.(i._sessionCookieName??"sid",i._sessionCookieDefaults),i._sessionDirty=false;},i.regenerateSession=async()=>{if(!i._sessionId||!i._sessionStore)throw new Error("Cannot regenerate session: no session ID or store available");if(!i.session)throw new Error("Cannot regenerate session: session data is undefined");await i._sessionStore.destroy(i._sessionId);let m=ee.randomUUID();await i._sessionStore.set(m,i.session,i._sessionTtl),a.cookie?.(i._sessionCookieName??"sid",m,i._sessionCookieDefaults),i._sessionId=m,i._sessionDirty=true;},await c(),!u&&i._sessionDirty&&i._sessionId&&i._sessionStore&&i.session&&await i._sessionStore.set(i._sessionId,i.session,i._sessionTtl);}};function di(o,e){try{let t=o.signedCookies[e];if(t!==void 0)return t}catch{}try{return o.cookies[e]}catch{return}}var pi={json:"application/json","form-data":"multipart/form-data",urlencoded:"application/x-www-form-urlencoded",binary:"application/octet-stream",text:"text/plain","event-stream":"text/event-stream"},ui={type:"object",properties:{message:{type:"string"},errors:{type:"array",items:{type:"object",properties:{instancePath:{type:"string"},schemaPath:{type:"string"},keyword:{type:"string"},params:{type:"object"},message:{type:"string"}}}},ajv:{type:"boolean"},validation:{type:"boolean"}}};function Ys(o){return o?pi[o]??o:"application/json"}var to=o=>{let e={type:"standard",path:"/docs",title:"Balda API Documentation",description:"API Documentation from the Balda Framework",version:"1.0.0",servers:["http://localhost"],security:[],tags:[],components:{},securitySchemes:{},models:{}};o&&typeof o!="boolean"&&(e={...e,...o});let t=mi(e),r=`${e.path}`,s=`${r}/json`,n;e.type==="rapidoc"?n=fi(s,e):e.type==="scalar"?n=gi(s,e):e.type==="elements"?n=yi(s,e):e.type==="custom"?n=e.customUIGenerator(s,e):n=hi(s,e),_.addOrUpdate("GET",r,[],(i,a)=>{a.html(n);},void 0,void 0,void 0,true),_.addOrUpdate("GET",s,[],(i,a)=>{a.json(t);},void 0,void 0,void 0,true);},we=o=>o?o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):"";function ve(o,e){if(!o||typeof o!="object")return {type:"string"};let t="json_schema";H.isZodSchema(o)?t="zod_schema":D.isTypeBoxSchema(o)&&(t="typebox_schema");let r=j.getJsonSchema(o,t);if(r)return r;if(H.isZodSchema(o))try{let n=H.toJSONSchema(o,e);return j.storeJsonSchema(n,t),n}catch(n){return M.debug({error:n instanceof Error?n.message:String(n),schemaType:o?.constructor?.name||typeof o},"Failed to convert Zod schema to JSON Schema for Swagger documentation"),{type:"object"}}let s=o;return j.storeJsonSchema(s,t),s}function mi(o){let e=_.getRoutes(),t={},r;if(o.models)if(Array.isArray(o.models))r=o.models.reduce((n,i,a)=>{let c=ve(i),p=c.$id||c.title||`Model${a}`;return n[p]=c,n},{});else {r={};for(let[n,i]of Object.entries(o.models))r[n]=ve(i);}let s={...o.components,securitySchemes:o.securitySchemes||{},schemas:r?{...o.components?.schemas||{},...r}:o.components?.schemas?{...o.components.schemas}:void 0};for(let n of e){let i=n.swaggerOptions;if(i?.excludeFromSwagger)continue;t[n.path]||(t[n.path]={});let a=n.method.toLowerCase(),c={summary:i?.name||`${a.toUpperCase()} ${n.path}`,description:i?.description||"",tags:i?.service?[i.service]:[],deprecated:i?.deprecated||false},p=[],l=n.validationSchemas?.query;if(l){let f=l;if(f.type==="object"&&f.shape)for(let[g,y]of Object.entries(f.shape))!y||typeof y!="object"||p.push({name:g,in:"query",required:Array.isArray(f.shape[g].required)?f.shape[g].required.includes(g):false,schema:ve(y,{io:"input"})});}i&&i.params?p=p.concat(eo(n.path,i.params)):p=p.concat(eo(n.path));let d=n.validationSchemas?.headers;if(d){let f=d;if(f.type==="object"&&f.shape)for(let[g,y]of Object.entries(f.shape))!y||typeof y!="object"||p.push({name:g,in:"header",required:Array.isArray(f.shape[g].required)?f.shape[g].required.includes(g):false,schema:ve(y,{io:"input"})});}p.length>0&&(c.parameters=p);let u=n.validationSchemas?.body||n.validationSchemas?.all;if(u){let f=Ys(i?.bodyType);c.requestBody={content:{[f]:{schema:ve(u,{io:"input"})}},required:true};}else if(i?.bodyType){let f=Ys(i.bodyType);c.requestBody={content:{[f]:{schema:{type:"object"}}},required:true};}c.responses={};let m=n.responses;if(m)for(let[f,g]of Object.entries(m))c.responses[f]={description:`Response for ${f}`,content:{"application/json":{schema:ve(g)}}};if(Object.keys(c.responses).length===0&&(c.responses[200]={description:"Successful response",content:{"application/json":{schema:{type:"object"}}}}),n.validationSchemas?.body||n.validationSchemas?.query||n.validationSchemas?.all){let f=De(),g={statusCode:i?.validationErrorResponse?.statusCode??o.validationErrorResponse?.statusCode??f?.status??422,description:i?.validationErrorResponse?.description??o.validationErrorResponse?.description??"Validation error",schema:i?.validationErrorResponse?.schema??o.validationErrorResponse?.schema??(f?.schema?ve(f.schema):ui)},y=String(g.statusCode);c.responses[y]||(c.responses[y]={description:g.description,content:{"application/json":{schema:g.schema}}});}if(i?.security){let f=[];Array.isArray(i.security)||(i.security=[i.security]);for(let g of i.security)if(g.type==="bearer")s.securitySchemes.bearer||(s.securitySchemes.bearer={type:"http",scheme:"bearer",bearerFormat:g.bearerFormat||"JWT",description:g.description}),f.push({bearer:[]});else if(g.type==="apiKey")s.securitySchemes[g.name]||(s.securitySchemes[g.name]={type:"apiKey",name:g.name,in:g.in,description:g.description}),f.push({[g.name]:[]});else if(g.type==="oauth2"){let y=g.name||"oauth2";s.securitySchemes[y]||(s.securitySchemes[y]={type:"oauth2",flows:g.flows,description:g.description}),f.push({[y]:[]});}else if(g.type==="openIdConnect"){let y=g.name||"openIdConnect";s.securitySchemes[y]||(s.securitySchemes[y]={type:"openIdConnect",openIdConnectUrl:g.openIdConnectUrl,description:g.description}),f.push({[y]:[]});}f.length&&(c.security=f);}else o.security&&(c.security=o.security);t[n.path][a]=c;}return {openapi:"3.0.0",info:{title:o.title,description:o.description,version:o.version,...o.info},servers:o.servers?.map(n=>({url:n}))||[{url:"/"}],paths:t,components:s,security:o.security||[],tags:o.tags?Object.entries(o.tags).map(([n,i])=>({name:n,...i})):[]}}function hi(o,e){return `
1102
1102
  <!DOCTYPE html>
1103
1103
  <html lang="en">
1104
1104
  <head>
@@ -1146,7 +1146,7 @@ ${d}\r
1146
1146
  };
1147
1147
  </script>
1148
1148
  </body>
1149
- </html>`}function mi(o,e){return `
1149
+ </html>`}function fi(o,e){return `
1150
1150
  <!DOCTYPE html>
1151
1151
  <html>
1152
1152
  <head>
@@ -1177,7 +1177,7 @@ ${d}\r
1177
1177
  <script type="module" src="https://unpkg.com/rapidoc/dist/rapidoc-min.js"></script>
1178
1178
  </body>
1179
1179
  </html>
1180
- `}function hi(o,e){return `
1180
+ `}function gi(o,e){return `
1181
1181
  <!DOCTYPE html>
1182
1182
  <html lang="en">
1183
1183
  <head>
@@ -1201,7 +1201,7 @@ ${d}\r
1201
1201
  <script src="https://unpkg.com/@scalar/api-reference@latest/dist/browser/standalone.js"></script>
1202
1202
  </body>
1203
1203
  </html>
1204
- `}function fi(o,e){return `
1204
+ `}function yi(o,e){return `
1205
1205
  <!DOCTYPE html>
1206
1206
  <html lang="en">
1207
1207
  <head>
@@ -1228,6 +1228,6 @@ ${d}\r
1228
1228
  <script src="https://unpkg.com/@stoplight/elements@7.7.9/web-components.min.js"></script>
1229
1229
  </body>
1230
1230
  </html>
1231
- `}function eo(o,e){let t=[],r=/:([a-zA-Z0-9_]+)/g,s;for(;(s=r.exec(o))!==null;){let n=s[1],i={type:"string"};e&&e.shape&&e.shape[n]&&(i=ve(e.shape[n])||{type:"string"}),t.push({name:n,in:"path",required:true,schema:i});}return t}var Qr=o=>async(e,t,r)=>{e.timeout=false;let s=setTimeout(()=>{e.timeout=true;},o.ms);try{await r();}finally{clearTimeout(s);}};var Ur=o=>{if(!o||!o.trustedProxies||o.trustedProxies.length===0)throw new Error("trustProxy() requires `trustedProxies` \u2014 an explicit allowlist of trusted proxy IPs or CIDR ranges.");let e=o.trustedProxies,t=Math.max(1,o?.hops??1),r=o?.header??"x-forwarded-for";return async(s,n,i)=>{let a=s.ip;if(!a||!gi(a,e))return i();let c=s.rawHeaders.get(r);if(!c||typeof c!="string")return i();let p=c.split(",").map(u=>u.trim()).filter(Boolean);if(p.length===0)return i();let l=p.length-t,d=p[l>=0?l:0];return s.ip=d,i()}};function gi(o,e){for(let t of e)if(t.includes("/")){if(yi(o,t))return true}else if(o===t)return true;return false}function yi(o,e){let[t,r]=e.split("/");if(!t||!r)return false;let s=Number.parseInt(r,10);if(Number.isNaN(s)||s<0||s>32)return false;let n=ro(o),i=ro(t);if(n===null||i===null)return false;let a=s===0?0:-1<<32-s>>>0;return (n&a)===(i&a)}function ro(o){let e=o.split(".");if(e.length!==4)return null;let t=0;for(let r of e){let s=Number.parseInt(r,10);if(Number.isNaN(s)||s<0||s>255)return null;t=t<<8|s;}return t>>>0}var Ft=class{port;hostname;host;routes;tapOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql);}get url(){return `http://${this.host}:${this.port}`}listen(){let e=this.tapOptions?.bun,{fetch:t,websocket:r,...s}=e??{},n=this.graphql.isEnabled,i="/graphql";this.runtimeServer=Bun.serve({port:this.port,hostname:this.hostname,fetch:async(a,c)=>{let p=a.url,l=p.indexOf("://")+3,d=p.indexOf("/",l),u=d===-1?"/":p.slice(d),m=u.indexOf("?"),h=m===-1?u:u.slice(0,m),f=m===-1?"":u.slice(m+1),g=_.find(a.method,h),y=ie.fromRequest(a);if(y.params=g?.params??{},y.setQueryString(f),y.setBunIpExtractor(a,c),await t?.call(this,y,c),n&&h.startsWith(i)){let w=await this.ensureGraphQLHandler();if(w){let b=y.toWebApi();return Bt(w.server,b,a.method,f,{req:y,server:c})}}if(r&&y.rawHeaders.get("upgrade")==="websocket"){let w=y.toWebApi();if(c.upgrade(w,{data:{}}))return}let P=new F;return g?.responseSchemas&&P.setRouteResponseSchemas(g.responseSchemas),await ge(g?.middleware??[],g?.handler??((w,b)=>{b.notFound({...$(new U(w.url,w.method))});}),y,P),F.toWebResponse(P)},...r?{websocket:r}:{},...s});}async close(){this.runtimeServer&&await this.runtimeServer.stop();}};var Qt=class{graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql);}get url(){return `http://${this.host}:${this.port}`}listen(){let e=this.tapOptions?.deno,{handler:t,...r}=e??{},s=this.graphql.isEnabled,n="/graphql";this.runtimeServer=Deno.serve({port:this.port,hostname:this.hostname,handler:async(i,a)=>{let c=i.url,p=c.indexOf("://")+3,l=c.indexOf("/",p),d=l===-1?"/":c.slice(l),u=d.indexOf("?"),m=u===-1?d:d.slice(0,u),h=u===-1?"":d.slice(u+1),f=_.find(i.method,m),g=ie.fromRequest(i);if(g.params=f?.params??{},g.setQueryString(h),g.setDenoIpExtractor(i,a),await t?.(i,a))return new globalThis.Response(null,{status:426});if(s&&m.startsWith(n)){let w=await this.ensureGraphQLHandler();if(w){let b=g.toWebApi();return Bt(w.server,b,i.method,h,{req:g,info:a})}}if(g.rawHeaders.get("upgrade")==="websocket"&&this.tapOptions?.deno?.websocket){let w=g.toWebApi(),{socket:b,response:q}=Deno.upgradeWebSocket(w);return this.tapOptions?.deno?.websocket?.open&&(b.onopen=()=>this.tapOptions?.deno?.websocket?.open?.(b)),this.tapOptions?.deno?.websocket?.message&&(b.onmessage=A=>{this.tapOptions?.deno?.websocket?.message?.(b,A.data);}),this.tapOptions?.deno?.websocket?.close&&(b.onclose=()=>this.tapOptions?.deno?.websocket?.close?.(b)),q}let P=new F;return f?.responseSchemas&&P.setRouteResponseSchemas(f.responseSchemas),await ge(f?.middleware??[],f?.handler??((w,b)=>{b.notFound({...$(new U(w.url,w.method))});}),g,P),F.toWebResponse(P)},...r});}async close(){this.runtimeServer&&await this.runtimeServer.shutdown();}};var Ri=async(o,e)=>{let t=Readable.fromWeb(o);return pipeline(t,e)};function Pi(o){return JSON.stringify(o).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026")}var Ut=class{port;host;routes;tapOptions;runtimeServer;nodeHttpClient;httpsOptions;graphql;ensureGraphQLHandler;needsHeaderFiltering;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.nodeHttpClient=e?.nodeHttpClient??"http",this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e?.httpsOptions:void 0,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql),this.needsHeaderFiltering=this.nodeHttpClient==="http2"||this.nodeHttpClient==="http2-secure",this.createServerWithHandler();}get url(){return `${this.nodeHttpClient==="https"||this.nodeHttpClient==="http2-secure"?"https":"http"}://${this.host}:${this.port}`}createServerWithHandler(){let e=this.graphql.isEnabled,t="/graphql";this.runtimeServer=this.createServer(async(r,s)=>{if(this.tapOptions&&this.tapOptions.node){let m=this.tapOptions.node;await m?.(r);}let n=r.url,i=n.indexOf("?"),a=i===-1?n:n.slice(0,i),c=i===-1?"":n.slice(i+1);if(e&&a.startsWith(t)){let m=await this.ensureGraphQLHandler();if(m){let h=le(r.method)?await this.readRequestBody(r):"";await js(m.server,r.headers,r.method??"POST",h,c,{req:r},async(f,g,y)=>{for(let[P,x]of f)s.setHeader(P,x);if(s.statusCode=g,typeof y=="string")s.end(y);else {for await(let P of y)s.write(P);s.end();}});return}}let p=_.find(r.method,a),l=new ie;l.url=`${this.url}${n}`,l.method=r.method,le(r.method)&&l.setNodeRequest(r),l.setRawHeaders(r.headers,this.needsHeaderFiltering),l.setIpExtractor(r),l.setQueryString(c),l.params=p?.params??{};let d=new F;d.nodeResponse=s,p?.responseSchemas&&d.setRouteResponseSchemas(p.responseSchemas);let u=ge(p?.middleware??[],p?.handler??((m,h)=>{h.notFound({...$(new U(m.url,m.method))});}),l,d);u instanceof F?this.writeResponse(u,s):u.then(m=>this.writeResponse(m,s));});}listen(){this.runtimeServer.listen(this.port,this.host);}writeResponse(e,t){if(t.headersSent||t.writableEnded)return;let r=e.getBody();if(r instanceof ReadableStream){t.writeHead(e.responseStatus,e.headers),Ri(r,t);return}let s={...e.headers};if(e.cookieHeaders.length>0&&(s["Set-Cookie"]=e.cookieHeaders),t.writeHead(e.responseStatus,s),r instanceof Buffer||r instanceof Uint8Array||typeof r=="string")t.end(r);else if(e.headers["Content-Type"]==="application/json"){let n=typeof r=="string"?r:Pi(r);t.end(n);}else t.end(r!=null?String(r):void 0);}async close(){return new Promise((e,t)=>{this.runtimeServer.close(r=>{r&&"code"in r&&r.code!=="ERR_SERVER_NOT_RUNNING"?t(r):e();});})}async readRequestBody(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(Buffer.from(n))),e.on("error",r),e.on("end",()=>t(Buffer.concat(s).toString()));})}createServer(e){if(this.nodeHttpClient==="http")return createServer(e);if(this.nodeHttpClient==="http2")return createServer$1(e);if(this.nodeHttpClient==="http2-secure"){if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using http2-secure client");let r={minVersion:"TLSv1.2",honorCipherOrder:true,...this.httpsOptions};return createSecureServer(r,e)}if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using https client");let t={minVersion:"TLSv1.2",honorCipherOrder:true,...this.httpsOptions};return createServer$2(t,e)}};var zt=class{routes;server;constructor(e){this.server=this.getRuntimeServer(e),this.routes=this.server.routes;}get url(){return this.server.url}get port(){return this.server.port}set port(e){this.server.port=e;}get host(){return this.server.host}getServer(e){return this.server.runtimeServer}listen(){return this.server.listen()}async close(){return this.server.close()}getRuntimeServer(e){if(e?.runtime==="bun")return new Ft(e);if(e?.runtime==="node")return new Ut(e);if(e?.runtime==="deno")return new Qt(e);throw new Error("No server implementation found for runtime: "+e?.runtime)}};J();var Ci={cookie:0,session:1};function so(o){return Ci[o]??50}var Gt=class{_brand="BaldaServer";#e=new We;serverOptions;router=_;logger;isListening;isProduction;graphql;#r;#t;#a=[];#o=["node_modules"];#n;#d;#p=[];#u=[];#c;inject;constructor(e){this.logger=(e?.logger??M).child({scope:"Balda"}),this.serverOptions={nodeHttpClient:e?.nodeHttpClient??"http",port:(e?.port??Number(this.#e.get("PORT")||"80"))||80,host:e?.host??this.#e.get("HOST")??"0.0.0.0",controllerPatterns:e?.controllerPatterns??[],plugins:e?.plugins??{},tapOptions:e?.tapOptions??{},swagger:e?.swagger??true,graphql:e?.graphql??void 0,abortSignal:e?.abortSignal},e?.ajvInstance&&j.setGlobalInstance(e.ajvInstance),this.#d=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e.httpsOptions:void 0,this.isListening=false,this.isProduction=this.#e.get("NODE_ENV")==="production",this.graphql=new ne(this.serverOptions.graphql),this.#t=new zt({routes:[],port:this.serverOptions.port,host:this.serverOptions.host,tapOptions:this.serverOptions.tapOptions,runtime:E.type,nodeHttpClient:this.serverOptions.nodeHttpClient,httpsOptions:this.#d,graphql:this.graphql}),this.setupAbortSignalHandler(),this.inject=this.createInjectFunction();}get protectedKeys(){let e=Object.getOwnPropertyNames(this),t=Object.getPrototypeOf(this),r=t?Object.getOwnPropertyNames(t):[];return Array.from(new Set([...e,...r]))}get url(){return this.#t.url}get port(){return this.#t.port}set port(e){if(this.isListening)throw new Error("Cannot change port while server is listening, please call `.close()` before changing the port");this.#t.port=e;}get host(){return this.#t.host}get routes(){return _.getRoutes()||[]}get fs(){return v}getEnvironment(){return this.#e.getEnvironment()}tmpDir(...e){return S.join("tmp",...e)}getNodeServer(){if(E.type!=="node")throw new Error("Server is not using node runtime, you can't call `.getNodeServer()`");return this.#t.getServer("node")}getBunServer(){if(E.type!=="bun")throw new Error("Server is not using bun runtime, you can't call `.getBunServer()`");return this.#t.getServer("bun")}getDenoServer(){if(E.type!=="deno")throw new Error("Server is not using deno runtime, you can't call `.getDenoServer()`");return this.#t.getServer("deno")}embed(e,t){if(typeof e!="string"||e.trim()==="")throw new Error(`Invalid key provided to embed: ${e}. Key must be a non-empty string.`);if(this.protectedKeys.includes(e)||e==="constructor")throw new Error(`Cannot embed value with key '${e}' as it conflicts with a protected server property`);Object.defineProperty(this,e,{value:t,writable:false,configurable:true,enumerable:true});}exit(e=0){Ge.exit(e);}on(e,t){switch(E.type){case "bun":case "node":process.on(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${E.type}, only node, bun and deno are supported`)}}once(e,t){switch(E.type){case "bun":case "node":process.once(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${E.type}, only node, bun and deno are supported`)}}use(...e){this.#a.push(...e);}useExpress(e,t){Br(this).use(e,t);}expressMiddleware(e){return Be(e)}mountExpressRouter(e,t){ht(e,t);}setErrorHandler(e){this.#a.unshift(async(t,r,s)=>{try{await s();}catch(n){await e?.(t,r,s,n);}});}setNotFoundHandler(e){this.#n=e?.bind(this);}setValidationErrorHandler(e){ls(e);}setPolicyErrorHandler(e){ys(e);}beforeStart(e){this.#p.push(e);}beforeClose(e){this.#u.push(e);}listen(e,t){let r=typeof e=="function"?e:t;if(typeof e=="number"&&Number.isFinite(e)&&(this.port=e),this.isListening)throw new Error("Server is already listening, you can't call `.listen()` multiple times");let s={port:this.port,host:this.host,url:this.url};this.bootstrap().then(async()=>{for(let n of this.#p)await n();this.#t.listen(),this.isListening=true,r?.({...s,error:void 0});}).catch(n=>{r?.({...s,error:n});});}async waitUntilListening(e){return e??=this.port,new Promise((t,r)=>{try{this.listen(e,()=>{t({port:this.port,host:this.host,url:this.url});});}catch(s){r(s);}})}async close(){await this.disconnect();}async disconnect(){if(!this.isListening){this.logger.warn("Trying to disconnect the server that is not listening, ignoring");return}try{for(let e of this.#u)await e();await this.#t.close();}catch(e){throw this.logger.error({error:e},"Error closing server connector"),e}finally{this.isListening=false;}}getMockServer(e){return new ut(this,e)}async ensureBootstrapped(e){await this.bootstrap(e);}createInjectFunction(){let e=()=>(this.#c||(this.#c=new ut(this)),this.#c),t=(r,s,n)=>e().request(r,s,n);return t.get=(r,s)=>e().get(r,s),t.post=(r,s)=>e().post(r,s),t.put=(r,s)=>e().put(r,s),t.patch=(r,s)=>e().patch(r,s),t.delete=(r,s)=>e().delete(r,s),t}async importControllers(e){let t=e??this.serverOptions.controllerPatterns;if(!(!t||t.length===0))try{let r=await Promise.all(t.map(async s=>v.glob(s,{cwd:L.getCwd()}))).then(s=>s.flat());r=r.flat(),r=r.filter(s=>!this.#o.some(n=>s.includes(n))),this.logger.debug(`Found ${r.length} controllers to import`),await Promise.all(r.map(async s=>{this.logger.debug(`Importing controller ${s}`),await import(s).catch(n=>{this.logger.error(`Error importing controller ${s}: ${n}`);});}));}catch(r){this.logger.warn(`Could not auto-import controllers: ${r instanceof Error?r.message:String(r)}`);}}applyPlugins(e){if(Array.isArray(e)){this.use(...e);return}Object.entries(e).sort(([r],[s])=>so(r)-so(s)).forEach(([r,s])=>{switch(r){case "bodyParser":this.use(kr(s));break;case "cors":this.use(Hr(s));break;case "static":this.use(Cr(s));break;case "helmet":this.use(Nr(s));break;case "cookie":this.use(Ar(s));break;case "methodOverride":this.use(Lr(s));break;case "compression":this.use(qr(s));break;case "log":this.use(Ir(s));break;case "rateLimiter":let{keyOptions:n,storageOptions:i}=s;this.use(Dr(n,i));break;case "trustProxy":this.use(Ur(s));break;case "timeout":this.use(Qr(s));break;case "session":this.use(Fr(s));break;case "asyncLocalStorage":this.use(Er(s));break;case "cache":{let a=s,c;a.provider&&typeof a.provider=="object"&&"get"in a.provider?c=a.provider:a.provider==="redis"?c=new pt(a.redis):c=new dt,this.use(Rr(c,a));break}default:this.logger.warn(`Unknown plugin ${r}`);break}});}bootstrap(e){return this.#r?this.#r:(this.#r=(async()=>{await this.importControllers(e?.controllerPatterns),this.applyPlugins(this.serverOptions.plugins),this.serverOptions.swagger&&to(this.serverOptions.swagger),this.registerNotFoundRoutes(),this.#a.length&&_.applyGlobalMiddlewaresToAllRoutes(this.#a);})(),this.#r)}handleNotFound=(e,t)=>{if(this.#n){this.#n(e,t);return}let r=new URL(e.url).pathname,s=["GET","POST","PUT","PATCH","DELETE"],n=[];for(let a of s){if(a===e.method.toUpperCase())continue;let c=_.find(a,r);c&&c.handler!==this.handleNotFound&&n.push(a);}if(n.length){t.setHeader("Allow",n.join(", "));let a=new Ke(r,e.method);t.methodNotAllowed({...$(a)});return}let i=new U(r,e.method);t.notFound({...$(i)});};registerNotFoundRoutes(){let e=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let t of e)_.addOrUpdate(t,"*",[],this.handleNotFound,{},{excludeFromSwagger:true},void 0,true);}setupAbortSignalHandler(){if(!this.serverOptions.abortSignal)return;let e=this.serverOptions.abortSignal;if(e.aborted){this.logger.warn("AbortSignal was already aborted, server will not start");return}e.addEventListener("abort",async()=>{this.logger.info("AbortSignal received, shutting down server gracefully");try{await this.disconnect(),this.logger.info("Server shutdown completed");}catch(t){this.logger.error({error:t},"Error during server shutdown from abort signal");}});}};var zr=class{ITERATIONS=6e5;SALT_LENGTH=16;KEY_LENGTH=256;configure(e){if(e.iterations!==void 0){if(e.iterations<1)throw new Error("Iterations must be at least 1");this.ITERATIONS=e.iterations;}if(e.saltLength!==void 0){if(e.saltLength<8)throw new Error("Salt length must be at least 8 bytes");this.SALT_LENGTH=e.saltLength;}if(e.keyLength!==void 0){if(e.keyLength<128)throw new Error("Key length must be at least 128 bits");this.KEY_LENGTH=e.keyLength;}}async hash(e){if(!e)throw new Error("Data to hash cannot be empty");let r=new TextEncoder().encode(e),s=crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH)),n=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},false,["deriveBits"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:s,iterations:this.ITERATIONS,hash:"SHA-256"},n,this.KEY_LENGTH),a=this.encodeBase64(s),c=this.encodeBase64(new Uint8Array(i));return `${a}:${c}`}async compare(e,t){if(!e||!t)return false;try{let s=new TextEncoder().encode(t),n=e.split(":");if(n.length!==2)throw new Error("Invalid hash format");let[i,a]=n,c=this.decodeBase64(i),p=this.decodeBase64(a),l=await crypto.subtle.importKey("raw",s,{name:"PBKDF2"},!1,["deriveBits"]),d=await crypto.subtle.deriveBits({name:"PBKDF2",salt:c,iterations:this.ITERATIONS,hash:"SHA-256"},l,this.KEY_LENGTH),u=new Uint8Array(d);if(u.length!==p.length)return !1;let m=0;for(let h=0;h<u.length;h++)m|=u[h]^p[h];return m===0}catch{return false}}encodeBase64(e){let t="",r=e.byteLength;for(let s=0;s<r;s++)t+=String.fromCharCode(e[s]);return btoa(t)}decodeBase64(e){let t=atob(e),r=t.length,s=new Uint8Array(r);for(let n=0;n<r;n++)s[n]=t.charCodeAt(n);return s}},Oi=new zr;var oo=()=>{let o=j.getCacheStats(),e=o.schemaCount*3,t=e,r=s=>s<1024?`~${s}KB`:`~${(s/1024).toFixed(2)}MB`;return {validators:{size:o.schemaCount,description:"Compiled schemas stored in Ajv for validation and serialization"},totalSchemaReferences:o.totalRefsCreated,memoryEstimate:{validators:r(e),total:r(t)}}},Ei=()=>{let o=oo();M.info({validators:o.validators.size,totalSchemaRefs:o.totalSchemaReferences,memoryEstimate:o.memoryEstimate.total},"Schema cache metrics");},Mi=()=>{j.clearAllCaches(),M.debug("All schema caches cleared");};var Z=class extends R{constructor(e){super(`File not found: ${e}`);}};var Gr=class{constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),s=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("r"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:s,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getUploadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),s=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("w"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:s,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getPublicUrl(e){return await this.ensureClient(),this.containerClient.getBlockBlobClient(e).url}async listObjects(e){await this.ensureClient();let t=[],r=e?e.endsWith("/")?e:`${e}/`:void 0;for await(let s of this.containerClient.listBlobsFlat({prefix:r}))t.push(s.name);return t}async getObject(e,t="raw"){await this.ensureClient();try{let s=await this.containerClient.getBlockBlobClient(e).download();if(!s.readableStreamBody)throw new Z(e);let n=t;if(n==="stream")return Readable.toWeb(s.readableStreamBody);let i=[];for await(let c of s.readableStreamBody)i.push(Buffer.isBuffer(c)?c:Buffer.from(c));let a=Buffer.concat(i);switch(n){case "raw":return new Uint8Array(a);case "text":return a.toString();default:throw new R("Invalid return type")}}catch(r){throw r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404?new Z(e):r}}async putObject(e,t,r){await this.ensureClient();let s=this.containerClient.getBlockBlobClient(e),n=t;await s.upload(n,n.length,{blobHTTPHeaders:{blobContentType:r||"application/octet-stream"}});}async deleteObject(e){await this.ensureClient();let t=this.containerClient.getBlockBlobClient(e);try{await t.delete();}catch(r){if(r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404)return;throw r}}async ensureClient(){if(this.azureBlobLib)return;this.azureBlobLib=await import('@azure/storage-blob').catch(()=>{throw new R("Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob")}),this.blobServiceClient=this.azureBlobLib.BlobServiceClient.fromConnectionString(this.options.connectionString),this.containerClient=this.blobServiceClient.getContainerClient(this.options.containerName);let e=this.blobServiceClient.credential;if(!(e instanceof this.azureBlobLib.StorageSharedKeyCredential))throw new R("BlobStorage requires a shared key credential to generate SAS URLs");this.sharedKeyCredential=e;}};var Vr=class{constructor(e){this.options=e;}wasDirectoryEnsured=false;async getDownloadUrl(e,t=3600){throw new R("LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getUploadUrl(e,t=3600){throw new R("LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getPublicUrl(e){throw new R("`getPublicUrl` is not available in local storage provider")}async listObjects(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=S.resolve(this.options.directory),r=e?S.join(t,e):t;if(!await v.exists(r))return [];let n=[];return await this.listFilesRecursively(r,t,n),n}async getObject(e,t="raw"){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let r=S.join(this.options.directory,e);if(!await v.exists(r))throw new Z(e);switch(t){case "raw":return await v.readFile(r);case "text":return await v.readFile(r,{encoding:"utf8"});case "stream":return await v.streamFile(r);default:throw new R("Invalid return type")}}async putObject(e,t,r){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let s=S.join(this.options.directory,e),n=S.join(s,"..");await v.mkdir(n,{recursive:true}),await v.writeFile(s,t);}async deleteObject(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=S.join(this.options.directory,e);await v.exists(t)&&await v.unlink(t);}async listFilesRecursively(e,t,r){let s=await v.stat(e);if(s.isFile){let i=e.replace(t,"").replace(/^\//,"");r.push(i);return}if(!s.isDirectory)return;let n=await this.readDirectory(e);for(let i of n){let a=S.join(e,i);await this.listFilesRecursively(a,t,r);}}async readDirectory(e){let{runtime:t}=await Promise.resolve().then(()=>(J(),ts));switch(t.type){case "node":return await(await import('fs/promises')).readdir(e);case "bun":return await(await import('fs/promises')).readdir(e);case "deno":{let r=[];for await(let s of Deno.readDir(e))r.push(s.name);return r}default:throw new R("Unsupported runtime")}}async ensureDirectoryExists(){if(await v.exists(this.options.directory)){this.wasDirectoryEnsured=true;return}await v.mkdir(this.options.directory,{recursive:true}),this.wasDirectoryEnsured=true;}};J();var Jr=class{isBun;clientInitialized=false;options;constructor(e){this.options=e,this.isBun=E.type==="bun";}async getDownloadUrl(e,t=3600){if(await this.ensureClient(),this.options.cloudfrontOptions){let{domainName:r,keyPairId:s,privateKey:n}=this.options.cloudfrontOptions,i=`https://${r}/${e}`,a=new Date(Date.now()+t*1e3).toISOString();return this.cloudfrontSignerLib.getSignedUrl({url:i,keyPairId:s,privateKey:n,dateLessThan:a})}if(this.isBun)return this.bunS3Client.file(e).presign({method:"GET",expiresIn:t});throw new R("getDownloadUrl requires CloudFront configuration on Node.js/Deno")}async getUploadUrl(e,t=3600){if(await this.ensureClient(),this.isBun)return this.bunS3Client.file(e).presign({method:"PUT",expiresIn:t});let r=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});return this.s3PresignerLib.getSignedUrl(this.s3Client,r,{expiresIn:t})}async getPublicUrl(e){await this.ensureClient();let{region:t,endpoint:r}=this.options.s3ClientConfig,s=this.options.s3ClientConfig.bucketName;return r?`${typeof r=="string"?r:r.toString()}/${s}/${e}`:`https://${s}.s3.${t}.amazonaws.com/${e}`}async listObjects(e){await this.ensureAwsSdk();let t=new this.s3Lib.ListObjectsV2Command({Bucket:this.options.s3ClientConfig.bucketName,Prefix:e});return (await this.s3Client.send(t)).Contents?.map(s=>s.Key).filter(Boolean)??[]}async getObject(e,t="raw"){if(await this.ensureClient(),this.isBun)try{let s=this.bunS3Client.file(e);if(!await s.exists())throw new Z(e);switch(t){case "raw":{let a=await s.arrayBuffer();return new Uint8Array(a)}case "text":return await s.text();case "stream":return s.stream();default:throw new R("Invalid return type")}}catch(s){throw s instanceof Z?s:s&&typeof s=="object"&&"code"in s&&(s.code==="NoSuchKey"||s.code==="NotFound")?new Z(e):s}let r=new this.s3Lib.GetObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});try{let s=await this.s3Client.send(r);if(!s.Body)throw new Z(e);switch(t){case "raw":return await s.Body.transformToByteArray();case "text":return await s.Body.transformToString();case "stream":return s.Body.transformToWebStream();default:throw new R("Invalid return type")}}catch(s){throw s&&typeof s=="object"&&"name"in s&&s.name==="NoSuchKey"?new Z(e):s}}async putObject(e,t,r){if(await this.ensureClient(),this.isBun){await this.bunS3Client.file(e).write(t,{type:r});return}let s=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e,Body:t,ContentType:r});await this.s3Client.send(s);}async deleteObject(e){if(await this.ensureClient(),this.isBun){await this.bunS3Client.file(e).delete();return}let t=new this.s3Lib.DeleteObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});await this.s3Client.send(t);}async ensureClient(){this.clientInitialized||(this.isBun?await this.ensureBunClient():await this.ensureAwsSdk(),this.options.cloudfrontOptions&&(this.cloudfrontSignerLib=await import('@aws-sdk/cloudfront-signer').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer")})),this.clientInitialized=true);}async ensureBunClient(){if(this.bunS3Client)return;let e=this.options.s3ClientConfig,t=typeof e.credentials=="function"?await e.credentials():e.credentials,r=typeof e.endpoint=="string"?e.endpoint:e.endpoint?.toString(),s=globalThis.Bun.S3Client;this.bunS3Client=new s({accessKeyId:t?.accessKeyId,secretAccessKey:t?.secretAccessKey,sessionToken:t?.sessionToken,region:e.region,endpoint:r,bucket:e.bucketName});}async ensureAwsSdk(){this.s3Lib||(this.s3Lib=await import('@aws-sdk/client-s3').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3")}),this.s3PresignerLib=await import('@aws-sdk/s3-request-presigner').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner")}),this.s3Client=new this.s3Lib.S3Client(this.options.s3ClientConfig??{}));}};var Wr=class{providerOptions;defaultProvider;providerMap;constructor(e,t){this.providerOptions=e,this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.entries(e).map(([r,s])=>[r,s]));}use(e){let t=this.providerMap.get(e);if(!t)throw new Error(`[Storage] Provider ${String(e)} not found`);return t}async getDownloadUrl(e,t){return this.providerOptions[this.defaultProvider].getDownloadUrl(e,t)}async getUploadUrl(e,t){return this.providerOptions[this.defaultProvider].getUploadUrl(e,t)}async getPublicUrl(e){return this.providerOptions[this.defaultProvider].getPublicUrl(e)}async listObjects(e){return this.providerOptions[this.defaultProvider].listObjects(e)}async getObject(e,t="raw"){return this.providerOptions[this.defaultProvider].getObject(e,t)}async putObject(e,t,r){return this.providerOptions[this.defaultProvider].putObject(e,t,r)}async deleteObject(e){return this.providerOptions[this.defaultProvider].deleteObject(e)}};var Vt=class{async render(e,t){return await this.ensureHandlebars(),this.handlebars.compile(e)(t)}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}async registerHelper(e,t){await this.ensureHandlebars(),this.handlebars.registerHelper(e,t);}async registerPartial(e,t){await this.ensureHandlebars(),this.handlebars.registerPartial(e,t);}async ensureHandlebars(){if(this.handlebars)return;let t=await import('handlebars').catch(()=>{throw new R("Library not installed: handlebars, try run npm install handlebars @types/handlebars")});this.handlebars=t.default?.default||t.default||t;}};var Jt=class{async render(e,t){return await this.ensureEdge(),this.edge.renderRaw(e,t)}async renderFromFile(e,t){return await this.ensureEdge(),this.edge.render(e,t)}async global(e,t){await this.ensureEdge(),this.edge.global(e,t);}async registerTag(e){await this.ensureEdge(),this.edge.registerTag(e);}async ensureEdge(){if(this.edge)return;let e=await import('edge.js').catch(()=>{throw new R("Library not installed: edge.js, try run npm install edge.js")}),{Edge:t}=e;this.edge=new t;}};var Wt=class{partials={};async render(e,t){return await this.ensureMustache(),this.mustache.render(e,t,this.partials)}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}registerPartial(e,t){this.partials[e]=t;}async ensureMustache(){if(this.mustache)return;let e=await import('mustache').catch(()=>{throw new R("Library not installed: mustache, try run npm install mustache @types/mustache")});this.mustache=e.default||e;}};var Kt=class{options;constructor(e={}){this.options=e;}async render(e,t){return await this.ensureEjs(),this.ejs.render(e,t,this.options)}async renderFromFile(e,t){return await this.ensureEjs(),this.ejs.renderFile(e,t,this.options)}async ensureEjs(){if(this.ejs)return;let e=await import('ejs').catch(()=>{throw new R("Library not installed: ejs, try run npm install ejs @types/ejs")});this.ejs=e.default||e;}};var Xt=class{helpers=new Map;render(e,t){return e.replace(/\{\{(\w+)(?::(\w+))?\}\}/g,(r,s,n)=>{let i=t[s];return i===void 0?r:n&&this.helpers.has(n)?this.helpers.get(n)(i):String(i)})}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}registerHelper(e,t){this.helpers.set(e,t);}};var Ne=class{options={};templateOptions;from(e){return this.options.from=e,this}to(e){return this.options.to=e,this}cc(e){return this.options.cc=e,this}bcc(e){return this.options.bcc=e,this}subject(e){return this.options.subject=e,this}text(e){return this.options.text=e,this}html(e){return this.options.html=e,this}template(e,t){return this.templateOptions={template:e,data:t,isFilePath:false},this}templateFile(e,t){return this.templateOptions={template:e,data:t,isFilePath:true},this}attachment(e){return this.options.attachments||(this.options.attachments=[]),this.options.attachments.push(e),this}attachments(e){return this.options.attachments||(this.options.attachments=[]),this.options.attachments.push(...e),this}hasTemplate(){return !!this.templateOptions}isTemplateFile(){return !!this.templateOptions?.isFilePath}build(){if(!this.options.to)throw new Error("[MailOptionsBuilder] 'to' field is required");if(!this.options.subject)throw new Error("[MailOptionsBuilder] 'subject' field is required");if(this.templateOptions){let{text:e,html:t,...r}=this.options;return {...r,template:this.templateOptions.template,data:this.templateOptions.data,isFilePath:this.templateOptions.isFilePath}}return this.options}};var ft=class extends R{constructor(e){super(e),this.name="MailerError";}},gt=class extends ft{constructor(e){super(`[Mailer] Provider '${e}' not found`),this.name="ProviderNotFoundError";}},Zt=class extends ft{constructor(){super("[MailProvider] Template adapter not configured for this provider"),this.name="TemplateAdapterNotConfiguredError";}},Yt=class extends ft{constructor(e){super(`[Mailer] Default provider '${e}' not found in provider options`),this.name="InvalidDefaultProviderError";}};var yt=class{transporter;templateAdapter;defaultFrom;constructor(e){this.transporter=e.transporter,this.templateAdapter=e.templateAdapter,this.defaultFrom=e.from;}async send(e){let t=new Ne,s=e(t)??t,n=s.build();return s.hasTemplate()?this.sendWithTemplate(n):this.sendDirect(n)}async sendDirect(e){let t={...e,from:e.from||this.defaultFrom};return this.transporter.sendMail(t)}async sendWithTemplate(e){if(!this.templateAdapter)throw new Zt;let t=e.isFilePath?await this.templateAdapter.renderFromFile(e.template,e.data):await this.templateAdapter.render(e.template,e.data),r={...e,html:t,from:e.from||this.defaultFrom};await this.sendDirect(r);}async verify(){return this.transporter.verify()}};var Kr=class{defaultProvider;providerMap;emailQueue=null;queueInitialized=false;constructor(e,t){if(!e[t.defaultProvider])throw new Yt(String(t.defaultProvider));this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.keys(e).map(r=>[r,new yt(e[r])]));}use(e){let t=this.providerMap.get(e);if(!t)throw new gt(String(e));return t}async send(e){return this.getDefaultProvider().send(e)}async later(e){await this.initializeQueue();let t=new Ne,s=e(t)??t,n=s.build(),i=s.hasTemplate();await this.emailQueue.publish({options:n,isTemplate:i});}async initializeQueue(){this.queueInitialized||(this.emailQueue=xr("mailer-emails"),await this.emailQueue.subscribe(async e=>{await this.processEmail(e);}),this.queueInitialized=true);}async processEmail(e){try{await this.getDefaultProvider().send(r=>{let s=e.options;if(r.to(s.to).subject(s.subject),s.from&&r.from(s.from),s.cc&&r.cc(s.cc),s.bcc&&r.bcc(s.bcc),"text"in s&&s.text&&r.text(s.text),"html"in s&&s.html&&r.html(s.html),s.attachments&&r.attachments(s.attachments),e.isTemplate){let n=s;n.isFilePath?r.templateFile(n.template,n.data):r.template(n.template,n.data);}}),await new Promise(r=>setTimeout(r,1e3));}catch(t){console.error("[Mailer] Failed to send queued email:",t);}}async verify(){return this.getDefaultProvider().verify()}getDefaultProvider(){let e=this.providerMap.get(this.defaultProvider);if(!e)throw new gt(String(this.defaultProvider));return e}};var Xr=class{};var Zr=o=>(e,t)=>(r,s,n)=>{let i={scope:e,handler:t,manager:o};if(typeof s>"u"){let c=O.get(r.prototype,"__class__");return c||(c={policies:[]}),c.policies||(c.policies=[]),c.policies.push(i),O.set(r.prototype,"__class__",c),r}let a=O.get(r,s);return a||(a={policies:[]}),a.policies||(a.policies=[]),a.policies.push(i),O.set(r,s,a),n};var Yr=class{providers;constructor(e){this.providers=e;}createDecorator(){return Zr(this)}canAccess(e,t,...r){let s=this.providers[e];if(!s)throw new R(`Policy provider for ${String(e)} not found`);return s[t](...r)}};var My=_,jy=Gt;
1232
- export{Gr as AzureBlobStorageProvider,br as BaseCron,Xr as BasePlugin,ot as BullMQPubSub,me as CACHE_STATUS_HEADER,tt as CacheService,dr as CacheStatus,k as Command,$t as CommandRegistry,W as CronService,Xt as CustomAdapter,Fe as DEFAULT_CACHE_OPTIONS,Jt as EdgeAdapter,Kt as EjsAdapter,ne as GraphQL,Vt as HandlebarsAdapter,Vr as LocalStorageProvider,Ne as MailOptionsBuilder,yt as MailProvider,Kr as Mailer,dt as MemoryCacheProvider,nt as MemoryPubSub,ze as MqttService,Wt as MustacheAdapter,it as PGBossPubSub,Yr as PolicyManager,oe as QueueManager,K as QueueService,pt as RedisCacheProvider,Jr as S3StorageProvider,at as SQSPubSub,Gt as Server,Wr as Storage,N as arg,Er as asyncLocalStorage,Xe as asyncStorage,kr as bodyParser,en as bullmqQueue,yo as cache,Rr as cacheMiddleware,Mi as clearAllSchemaCaches,Ce as commandRegistry,qr as compression,$o as controller,Ar as cookie,Hr as cors,Br as createExpressAdapter,Zr as createPolicyDecorator,rn as createQueue,_o as cron,gr as cronUIInstance,Ao as cronUi,jy as default,dn as defineMiddleware,sn as defineQueueConfiguration,Bo as del,Ks as expressHandler,Be as expressMiddleware,C as flag,No as get,rt as getCacheService,oo as getSchemaCacheMetrics,Oi as hash,Nr as helmet,ur as initCacheService,Ir as log,Ei as logSchemaCacheMetrics,M as logger,xr as memoryQueue,Lr as methodOverride,Fo as middleware,ht as mountExpressRouter,Zo as mqtt,Io as patch,tn as pgbossQueue,Lo as post,Do as put,Dr as rateLimiter,jo as resetCacheService,My as router,zo as serialize,Wo as serializer,Cr as serveStatic,Fr as session,qo as setCronGlobalErrorHandler,Xo as setMqttGlobalErrorHandler,Yo as sqsQueue,Qr as timeoutMw,Ur as trustProxy,Vo as validate};//# sourceMappingURL=index.js.map
1231
+ `}function eo(o,e){let t=[],r=/:([a-zA-Z0-9_]+)/g,s;for(;(s=r.exec(o))!==null;){let n=s[1],i={type:"string"};e&&e.shape&&e.shape[n]&&(i=ve(e.shape[n],{io:"input"})||{type:"string"}),t.push({name:n,in:"path",required:true,schema:i});}return t}var Qr=o=>async(e,t,r)=>{e.timeout=false;let s=setTimeout(()=>{e.timeout=true;},o.ms);try{await r();}finally{clearTimeout(s);}};var Ur=o=>{if(!o||!o.trustedProxies||o.trustedProxies.length===0)throw new Error("trustProxy() requires `trustedProxies` \u2014 an explicit allowlist of trusted proxy IPs or CIDR ranges.");let e=o.trustedProxies,t=Math.max(1,o?.hops??1),r=o?.header??"x-forwarded-for";return async(s,n,i)=>{let a=s.ip;if(!a||!vi(a,e))return i();let c=s.rawHeaders.get(r);if(!c||typeof c!="string")return i();let p=c.split(",").map(u=>u.trim()).filter(Boolean);if(p.length===0)return i();let l=p.length-t,d=p[l>=0?l:0];return s.ip=d,i()}};function vi(o,e){for(let t of e)if(t.includes("/")){if(wi(o,t))return true}else if(o===t)return true;return false}function wi(o,e){let[t,r]=e.split("/");if(!t||!r)return false;let s=Number.parseInt(r,10);if(Number.isNaN(s)||s<0||s>32)return false;let n=ro(o),i=ro(t);if(n===null||i===null)return false;let a=s===0?0:-1<<32-s>>>0;return (n&a)===(i&a)}function ro(o){let e=o.split(".");if(e.length!==4)return null;let t=0;for(let r of e){let s=Number.parseInt(r,10);if(Number.isNaN(s)||s<0||s>255)return null;t=t<<8|s;}return t>>>0}var Ft=class{port;hostname;host;routes;tapOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql);}get url(){return `http://${this.host}:${this.port}`}listen(){let e=this.tapOptions?.bun,{fetch:t,websocket:r,...s}=e??{},n=this.graphql.isEnabled,i="/graphql";this.runtimeServer=Bun.serve({port:this.port,hostname:this.hostname,fetch:async(a,c)=>{let p=a.url,l=p.indexOf("://")+3,d=p.indexOf("/",l),u=d===-1?"/":p.slice(d),m=u.indexOf("?"),h=m===-1?u:u.slice(0,m),f=m===-1?"":u.slice(m+1),g=_.find(a.method,h),y=ie.fromRequest(a);if(y.params=g?.params??{},y.setQueryString(f),y.setBunIpExtractor(a,c),await t?.call(this,y,c),n&&h.startsWith(i)){let w=await this.ensureGraphQLHandler();if(w){let b=y.toWebApi();return Bt(w.server,b,a.method,f,{req:y,server:c})}}if(r&&y.rawHeaders.get("upgrade")==="websocket"){let w=y.toWebApi();if(c.upgrade(w,{data:{}}))return}let P=new F;return g?.responseSchemas&&P.setRouteResponseSchemas(g.responseSchemas),await ge(g?.middleware??[],g?.handler??((w,b)=>{b.notFound({...$(new U(w.url,w.method))});}),y,P),F.toWebResponse(P)},...r?{websocket:r}:{},...s});}async close(){this.runtimeServer&&await this.runtimeServer.stop();}};var Qt=class{graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql);}get url(){return `http://${this.host}:${this.port}`}listen(){let e=this.tapOptions?.deno,{handler:t,...r}=e??{},s=this.graphql.isEnabled,n="/graphql";this.runtimeServer=Deno.serve({port:this.port,hostname:this.hostname,handler:async(i,a)=>{let c=i.url,p=c.indexOf("://")+3,l=c.indexOf("/",p),d=l===-1?"/":c.slice(l),u=d.indexOf("?"),m=u===-1?d:d.slice(0,u),h=u===-1?"":d.slice(u+1),f=_.find(i.method,m),g=ie.fromRequest(i);if(g.params=f?.params??{},g.setQueryString(h),g.setDenoIpExtractor(i,a),await t?.(i,a))return new globalThis.Response(null,{status:426});if(s&&m.startsWith(n)){let w=await this.ensureGraphQLHandler();if(w){let b=g.toWebApi();return Bt(w.server,b,i.method,h,{req:g,info:a})}}if(g.rawHeaders.get("upgrade")==="websocket"&&this.tapOptions?.deno?.websocket){let w=g.toWebApi(),{socket:b,response:q}=Deno.upgradeWebSocket(w);return this.tapOptions?.deno?.websocket?.open&&(b.onopen=()=>this.tapOptions?.deno?.websocket?.open?.(b)),this.tapOptions?.deno?.websocket?.message&&(b.onmessage=A=>{this.tapOptions?.deno?.websocket?.message?.(b,A.data);}),this.tapOptions?.deno?.websocket?.close&&(b.onclose=()=>this.tapOptions?.deno?.websocket?.close?.(b)),q}let P=new F;return f?.responseSchemas&&P.setRouteResponseSchemas(f.responseSchemas),await ge(f?.middleware??[],f?.handler??((w,b)=>{b.notFound({...$(new U(w.url,w.method))});}),g,P),F.toWebResponse(P)},...r});}async close(){this.runtimeServer&&await this.runtimeServer.shutdown();}};var Ci=async(o,e)=>{let t=Readable.fromWeb(o);return pipeline(t,e)};function Oi(o){return JSON.stringify(o).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026")}var Ut=class{port;host;routes;tapOptions;runtimeServer;nodeHttpClient;httpsOptions;graphql;ensureGraphQLHandler;needsHeaderFiltering;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.nodeHttpClient=e?.nodeHttpClient??"http",this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e?.httpsOptions:void 0,this.graphql=e?.graphql??new ne,this.ensureGraphQLHandler=ye(this.graphql),this.needsHeaderFiltering=this.nodeHttpClient==="http2"||this.nodeHttpClient==="http2-secure",this.createServerWithHandler();}get url(){return `${this.nodeHttpClient==="https"||this.nodeHttpClient==="http2-secure"?"https":"http"}://${this.host}:${this.port}`}createServerWithHandler(){let e=this.graphql.isEnabled,t="/graphql";this.runtimeServer=this.createServer(async(r,s)=>{if(this.tapOptions&&this.tapOptions.node){let m=this.tapOptions.node;await m?.(r);}let n=r.url,i=n.indexOf("?"),a=i===-1?n:n.slice(0,i),c=i===-1?"":n.slice(i+1);if(e&&a.startsWith(t)){let m=await this.ensureGraphQLHandler();if(m){let h=le(r.method)?await this.readRequestBody(r):"";await js(m.server,r.headers,r.method??"POST",h,c,{req:r},async(f,g,y)=>{for(let[P,x]of f)s.setHeader(P,x);if(s.statusCode=g,typeof y=="string")s.end(y);else {for await(let P of y)s.write(P);s.end();}});return}}let p=_.find(r.method,a),l=new ie;l.url=`${this.url}${n}`,l.method=r.method,le(r.method)&&l.setNodeRequest(r),l.setRawHeaders(r.headers,this.needsHeaderFiltering),l.setIpExtractor(r),l.setQueryString(c),l.params=p?.params??{};let d=new F;d.nodeResponse=s,p?.responseSchemas&&d.setRouteResponseSchemas(p.responseSchemas);let u=ge(p?.middleware??[],p?.handler??((m,h)=>{h.notFound({...$(new U(m.url,m.method))});}),l,d);u instanceof F?this.writeResponse(u,s):u.then(m=>this.writeResponse(m,s));});}listen(){this.runtimeServer.listen(this.port,this.host);}writeResponse(e,t){if(t.headersSent||t.writableEnded)return;let r=e.getBody();if(r instanceof ReadableStream){t.writeHead(e.responseStatus,e.headers),Ci(r,t);return}let s={...e.headers};if(e.cookieHeaders.length>0&&(s["Set-Cookie"]=e.cookieHeaders),t.writeHead(e.responseStatus,s),r instanceof Buffer||r instanceof Uint8Array||typeof r=="string")t.end(r);else if(e.headers["Content-Type"]==="application/json"){let n=typeof r=="string"?r:Oi(r);t.end(n);}else t.end(r!=null?String(r):void 0);}async close(){return new Promise((e,t)=>{this.runtimeServer.close(r=>{r&&"code"in r&&r.code!=="ERR_SERVER_NOT_RUNNING"?t(r):e();});})}async readRequestBody(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(Buffer.from(n))),e.on("error",r),e.on("end",()=>t(Buffer.concat(s).toString()));})}createServer(e){if(this.nodeHttpClient==="http")return createServer(e);if(this.nodeHttpClient==="http2")return createServer$1(e);if(this.nodeHttpClient==="http2-secure"){if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using http2-secure client");let r={minVersion:"TLSv1.2",honorCipherOrder:true,...this.httpsOptions};return createSecureServer(r,e)}if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using https client");let t={minVersion:"TLSv1.2",honorCipherOrder:true,...this.httpsOptions};return createServer$2(t,e)}};var zt=class{routes;server;constructor(e){this.server=this.getRuntimeServer(e),this.routes=this.server.routes;}get url(){return this.server.url}get port(){return this.server.port}set port(e){this.server.port=e;}get host(){return this.server.host}getServer(e){return this.server.runtimeServer}listen(){return this.server.listen()}async close(){return this.server.close()}getRuntimeServer(e){if(e?.runtime==="bun")return new Ft(e);if(e?.runtime==="node")return new Ut(e);if(e?.runtime==="deno")return new Qt(e);throw new Error("No server implementation found for runtime: "+e?.runtime)}};J();var Ei={cookie:0,session:1};function so(o){return Ei[o]??50}var Gt=class{_brand="BaldaServer";#e=new We;serverOptions;router=_;logger;isListening;isProduction;graphql;#r;#t;#a=[];#o=["node_modules"];#n;#d;#p=[];#u=[];#c;inject;constructor(e){this.logger=(e?.logger??M).child({scope:"Balda"}),this.serverOptions={nodeHttpClient:e?.nodeHttpClient??"http",port:(e?.port??Number(this.#e.get("PORT")||"80"))||80,host:e?.host??this.#e.get("HOST")??"0.0.0.0",controllerPatterns:e?.controllerPatterns??[],plugins:e?.plugins??{},tapOptions:e?.tapOptions??{},swagger:e?.swagger??true,graphql:e?.graphql??void 0,abortSignal:e?.abortSignal},e?.ajvInstance&&j.setGlobalInstance(e.ajvInstance),this.#d=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e.httpsOptions:void 0,this.isListening=false,this.isProduction=this.#e.get("NODE_ENV")==="production",this.graphql=new ne(this.serverOptions.graphql),this.#t=new zt({routes:[],port:this.serverOptions.port,host:this.serverOptions.host,tapOptions:this.serverOptions.tapOptions,runtime:E.type,nodeHttpClient:this.serverOptions.nodeHttpClient,httpsOptions:this.#d,graphql:this.graphql}),this.setupAbortSignalHandler(),this.inject=this.createInjectFunction();}get protectedKeys(){let e=Object.getOwnPropertyNames(this),t=Object.getPrototypeOf(this),r=t?Object.getOwnPropertyNames(t):[];return Array.from(new Set([...e,...r]))}get url(){return this.#t.url}get port(){return this.#t.port}set port(e){if(this.isListening)throw new Error("Cannot change port while server is listening, please call `.close()` before changing the port");this.#t.port=e;}get host(){return this.#t.host}get routes(){return _.getRoutes()||[]}get fs(){return v}getEnvironment(){return this.#e.getEnvironment()}tmpDir(...e){return S.join("tmp",...e)}getNodeServer(){if(E.type!=="node")throw new Error("Server is not using node runtime, you can't call `.getNodeServer()`");return this.#t.getServer("node")}getBunServer(){if(E.type!=="bun")throw new Error("Server is not using bun runtime, you can't call `.getBunServer()`");return this.#t.getServer("bun")}getDenoServer(){if(E.type!=="deno")throw new Error("Server is not using deno runtime, you can't call `.getDenoServer()`");return this.#t.getServer("deno")}embed(e,t){if(typeof e!="string"||e.trim()==="")throw new Error(`Invalid key provided to embed: ${e}. Key must be a non-empty string.`);if(this.protectedKeys.includes(e)||e==="constructor")throw new Error(`Cannot embed value with key '${e}' as it conflicts with a protected server property`);Object.defineProperty(this,e,{value:t,writable:false,configurable:true,enumerable:true});}exit(e=0){Ge.exit(e);}on(e,t){switch(E.type){case "bun":case "node":process.on(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${E.type}, only node, bun and deno are supported`)}}once(e,t){switch(E.type){case "bun":case "node":process.once(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${E.type}, only node, bun and deno are supported`)}}use(...e){this.#a.push(...e);}useExpress(e,t){Br(this).use(e,t);}expressMiddleware(e){return Be(e)}mountExpressRouter(e,t){ht(e,t);}setErrorHandler(e){this.#a.unshift(async(t,r,s)=>{try{await s();}catch(n){await e?.(t,r,s,n);}});}setNotFoundHandler(e){this.#n=e?.bind(this);}setValidationErrorHandler(e){ls(e);}setPolicyErrorHandler(e){ys(e);}beforeStart(e){this.#p.push(e);}beforeClose(e){this.#u.push(e);}listen(e,t){let r=typeof e=="function"?e:t;if(typeof e=="number"&&Number.isFinite(e)&&(this.port=e),this.isListening)throw new Error("Server is already listening, you can't call `.listen()` multiple times");let s={port:this.port,host:this.host,url:this.url};this.bootstrap().then(async()=>{for(let n of this.#p)await n();this.#t.listen(),this.isListening=true,r?.({...s,error:void 0});}).catch(n=>{r?.({...s,error:n});});}async waitUntilListening(e){return e??=this.port,new Promise((t,r)=>{try{this.listen(e,()=>{t({port:this.port,host:this.host,url:this.url});});}catch(s){r(s);}})}async close(){await this.disconnect();}async disconnect(){if(!this.isListening){this.logger.warn("Trying to disconnect the server that is not listening, ignoring");return}try{for(let e of this.#u)await e();await this.#t.close();}catch(e){throw this.logger.error({error:e},"Error closing server connector"),e}finally{this.isListening=false;}}getMockServer(e){return new ut(this,e)}async ensureBootstrapped(e){await this.bootstrap(e);}createInjectFunction(){let e=()=>(this.#c||(this.#c=new ut(this)),this.#c),t=(r,s,n)=>e().request(r,s,n);return t.get=(r,s)=>e().get(r,s),t.post=(r,s)=>e().post(r,s),t.put=(r,s)=>e().put(r,s),t.patch=(r,s)=>e().patch(r,s),t.delete=(r,s)=>e().delete(r,s),t}async importControllers(e){let t=e??this.serverOptions.controllerPatterns;if(!(!t||t.length===0))try{let r=await Promise.all(t.map(async s=>v.glob(s,{cwd:L.getCwd()}))).then(s=>s.flat());r=r.flat(),r=r.filter(s=>!this.#o.some(n=>s.includes(n))),this.logger.debug(`Found ${r.length} controllers to import`),await Promise.all(r.map(async s=>{this.logger.debug(`Importing controller ${s}`),await import(s).catch(n=>{this.logger.error(`Error importing controller ${s}: ${n}`);});}));}catch(r){this.logger.warn(`Could not auto-import controllers: ${r instanceof Error?r.message:String(r)}`);}}applyPlugins(e){if(Array.isArray(e)){this.use(...e);return}Object.entries(e).sort(([r],[s])=>so(r)-so(s)).forEach(([r,s])=>{switch(r){case "bodyParser":this.use(kr(s));break;case "cors":this.use(Hr(s));break;case "static":this.use(Cr(s));break;case "helmet":this.use(Nr(s));break;case "cookie":this.use(Ar(s));break;case "methodOverride":this.use(Lr(s));break;case "compression":this.use(qr(s));break;case "log":this.use(Ir(s));break;case "rateLimiter":let{keyOptions:n,storageOptions:i}=s;this.use(Dr(n,i));break;case "trustProxy":this.use(Ur(s));break;case "timeout":this.use(Qr(s));break;case "session":this.use(Fr(s));break;case "asyncLocalStorage":this.use(Er(s));break;case "cache":{let a=s,c;a.provider&&typeof a.provider=="object"&&"get"in a.provider?c=a.provider:a.provider==="redis"?c=new pt(a.redis):c=new dt,this.use(Rr(c,a));break}default:this.logger.warn(`Unknown plugin ${r}`);break}});}bootstrap(e){return this.#r?this.#r:(this.#r=(async()=>{await this.importControllers(e?.controllerPatterns),this.applyPlugins(this.serverOptions.plugins),this.serverOptions.swagger&&to(this.serverOptions.swagger),this.registerNotFoundRoutes(),this.#a.length&&_.applyGlobalMiddlewaresToAllRoutes(this.#a);})(),this.#r)}handleNotFound=(e,t)=>{if(this.#n){this.#n(e,t);return}let r=new URL(e.url).pathname,s=["GET","POST","PUT","PATCH","DELETE"],n=[];for(let a of s){if(a===e.method.toUpperCase())continue;let c=_.find(a,r);c&&c.handler!==this.handleNotFound&&n.push(a);}if(n.length){t.setHeader("Allow",n.join(", "));let a=new Ke(r,e.method);t.methodNotAllowed({...$(a)});return}let i=new U(r,e.method);t.notFound({...$(i)});};registerNotFoundRoutes(){let e=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let t of e)_.addOrUpdate(t,"*",[],this.handleNotFound,{},{excludeFromSwagger:true},void 0,true);}setupAbortSignalHandler(){if(!this.serverOptions.abortSignal)return;let e=this.serverOptions.abortSignal;if(e.aborted){this.logger.warn("AbortSignal was already aborted, server will not start");return}e.addEventListener("abort",async()=>{this.logger.info("AbortSignal received, shutting down server gracefully");try{await this.disconnect(),this.logger.info("Server shutdown completed");}catch(t){this.logger.error({error:t},"Error during server shutdown from abort signal");}});}};var zr=class{ITERATIONS=6e5;SALT_LENGTH=16;KEY_LENGTH=256;configure(e){if(e.iterations!==void 0){if(e.iterations<1)throw new Error("Iterations must be at least 1");this.ITERATIONS=e.iterations;}if(e.saltLength!==void 0){if(e.saltLength<8)throw new Error("Salt length must be at least 8 bytes");this.SALT_LENGTH=e.saltLength;}if(e.keyLength!==void 0){if(e.keyLength<128)throw new Error("Key length must be at least 128 bits");this.KEY_LENGTH=e.keyLength;}}async hash(e){if(!e)throw new Error("Data to hash cannot be empty");let r=new TextEncoder().encode(e),s=crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH)),n=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},false,["deriveBits"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:s,iterations:this.ITERATIONS,hash:"SHA-256"},n,this.KEY_LENGTH),a=this.encodeBase64(s),c=this.encodeBase64(new Uint8Array(i));return `${a}:${c}`}async compare(e,t){if(!e||!t)return false;try{let s=new TextEncoder().encode(t),n=e.split(":");if(n.length!==2)throw new Error("Invalid hash format");let[i,a]=n,c=this.decodeBase64(i),p=this.decodeBase64(a),l=await crypto.subtle.importKey("raw",s,{name:"PBKDF2"},!1,["deriveBits"]),d=await crypto.subtle.deriveBits({name:"PBKDF2",salt:c,iterations:this.ITERATIONS,hash:"SHA-256"},l,this.KEY_LENGTH),u=new Uint8Array(d);if(u.length!==p.length)return !1;let m=0;for(let h=0;h<u.length;h++)m|=u[h]^p[h];return m===0}catch{return false}}encodeBase64(e){let t="",r=e.byteLength;for(let s=0;s<r;s++)t+=String.fromCharCode(e[s]);return btoa(t)}decodeBase64(e){let t=atob(e),r=t.length,s=new Uint8Array(r);for(let n=0;n<r;n++)s[n]=t.charCodeAt(n);return s}},Mi=new zr;var oo=()=>{let o=j.getCacheStats(),e=o.schemaCount*3,t=e,r=s=>s<1024?`~${s}KB`:`~${(s/1024).toFixed(2)}MB`;return {validators:{size:o.schemaCount,description:"Compiled schemas stored in Ajv for validation and serialization"},totalSchemaReferences:o.totalRefsCreated,memoryEstimate:{validators:r(e),total:r(t)}}},ji=()=>{let o=oo();M.info({validators:o.validators.size,totalSchemaRefs:o.totalSchemaReferences,memoryEstimate:o.memoryEstimate.total},"Schema cache metrics");},ki=()=>{j.clearAllCaches(),M.debug("All schema caches cleared");};var Z=class extends R{constructor(e){super(`File not found: ${e}`);}};var Gr=class{constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),s=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("r"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:s,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getUploadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),s=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("w"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:s,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getPublicUrl(e){return await this.ensureClient(),this.containerClient.getBlockBlobClient(e).url}async listObjects(e){await this.ensureClient();let t=[],r=e?e.endsWith("/")?e:`${e}/`:void 0;for await(let s of this.containerClient.listBlobsFlat({prefix:r}))t.push(s.name);return t}async getObject(e,t="raw"){await this.ensureClient();try{let s=await this.containerClient.getBlockBlobClient(e).download();if(!s.readableStreamBody)throw new Z(e);let n=t;if(n==="stream")return Readable.toWeb(s.readableStreamBody);let i=[];for await(let c of s.readableStreamBody)i.push(Buffer.isBuffer(c)?c:Buffer.from(c));let a=Buffer.concat(i);switch(n){case "raw":return new Uint8Array(a);case "text":return a.toString();default:throw new R("Invalid return type")}}catch(r){throw r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404?new Z(e):r}}async putObject(e,t,r){await this.ensureClient();let s=this.containerClient.getBlockBlobClient(e),n=t;await s.upload(n,n.length,{blobHTTPHeaders:{blobContentType:r||"application/octet-stream"}});}async deleteObject(e){await this.ensureClient();let t=this.containerClient.getBlockBlobClient(e);try{await t.delete();}catch(r){if(r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404)return;throw r}}async ensureClient(){if(this.azureBlobLib)return;this.azureBlobLib=await import('@azure/storage-blob').catch(()=>{throw new R("Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob")}),this.blobServiceClient=this.azureBlobLib.BlobServiceClient.fromConnectionString(this.options.connectionString),this.containerClient=this.blobServiceClient.getContainerClient(this.options.containerName);let e=this.blobServiceClient.credential;if(!(e instanceof this.azureBlobLib.StorageSharedKeyCredential))throw new R("BlobStorage requires a shared key credential to generate SAS URLs");this.sharedKeyCredential=e;}};var Vr=class{constructor(e){this.options=e;}wasDirectoryEnsured=false;async getDownloadUrl(e,t=3600){throw new R("LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getUploadUrl(e,t=3600){throw new R("LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getPublicUrl(e){throw new R("`getPublicUrl` is not available in local storage provider")}async listObjects(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=S.resolve(this.options.directory),r=e?S.join(t,e):t;if(!await v.exists(r))return [];let n=[];return await this.listFilesRecursively(r,t,n),n}async getObject(e,t="raw"){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let r=S.join(this.options.directory,e);if(!await v.exists(r))throw new Z(e);switch(t){case "raw":return await v.readFile(r);case "text":return await v.readFile(r,{encoding:"utf8"});case "stream":return await v.streamFile(r);default:throw new R("Invalid return type")}}async putObject(e,t,r){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let s=S.join(this.options.directory,e),n=S.join(s,"..");await v.mkdir(n,{recursive:true}),await v.writeFile(s,t);}async deleteObject(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=S.join(this.options.directory,e);await v.exists(t)&&await v.unlink(t);}async listFilesRecursively(e,t,r){let s=await v.stat(e);if(s.isFile){let i=e.replace(t,"").replace(/^\//,"");r.push(i);return}if(!s.isDirectory)return;let n=await this.readDirectory(e);for(let i of n){let a=S.join(e,i);await this.listFilesRecursively(a,t,r);}}async readDirectory(e){let{runtime:t}=await Promise.resolve().then(()=>(J(),ts));switch(t.type){case "node":return await(await import('fs/promises')).readdir(e);case "bun":return await(await import('fs/promises')).readdir(e);case "deno":{let r=[];for await(let s of Deno.readDir(e))r.push(s.name);return r}default:throw new R("Unsupported runtime")}}async ensureDirectoryExists(){if(await v.exists(this.options.directory)){this.wasDirectoryEnsured=true;return}await v.mkdir(this.options.directory,{recursive:true}),this.wasDirectoryEnsured=true;}};J();var Jr=class{isBun;clientInitialized=false;options;constructor(e){this.options=e,this.isBun=E.type==="bun";}async getDownloadUrl(e,t=3600){if(await this.ensureClient(),this.options.cloudfrontOptions){let{domainName:r,keyPairId:s,privateKey:n}=this.options.cloudfrontOptions,i=`https://${r}/${e}`,a=new Date(Date.now()+t*1e3).toISOString();return this.cloudfrontSignerLib.getSignedUrl({url:i,keyPairId:s,privateKey:n,dateLessThan:a})}if(this.isBun)return this.bunS3Client.file(e).presign({method:"GET",expiresIn:t});throw new R("getDownloadUrl requires CloudFront configuration on Node.js/Deno")}async getUploadUrl(e,t=3600){if(await this.ensureClient(),this.isBun)return this.bunS3Client.file(e).presign({method:"PUT",expiresIn:t});let r=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});return this.s3PresignerLib.getSignedUrl(this.s3Client,r,{expiresIn:t})}async getPublicUrl(e){await this.ensureClient();let{region:t,endpoint:r}=this.options.s3ClientConfig,s=this.options.s3ClientConfig.bucketName;return r?`${typeof r=="string"?r:r.toString()}/${s}/${e}`:`https://${s}.s3.${t}.amazonaws.com/${e}`}async listObjects(e){await this.ensureAwsSdk();let t=new this.s3Lib.ListObjectsV2Command({Bucket:this.options.s3ClientConfig.bucketName,Prefix:e});return (await this.s3Client.send(t)).Contents?.map(s=>s.Key).filter(Boolean)??[]}async getObject(e,t="raw"){if(await this.ensureClient(),this.isBun)try{let s=this.bunS3Client.file(e);if(!await s.exists())throw new Z(e);switch(t){case "raw":{let a=await s.arrayBuffer();return new Uint8Array(a)}case "text":return await s.text();case "stream":return s.stream();default:throw new R("Invalid return type")}}catch(s){throw s instanceof Z?s:s&&typeof s=="object"&&"code"in s&&(s.code==="NoSuchKey"||s.code==="NotFound")?new Z(e):s}let r=new this.s3Lib.GetObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});try{let s=await this.s3Client.send(r);if(!s.Body)throw new Z(e);switch(t){case "raw":return await s.Body.transformToByteArray();case "text":return await s.Body.transformToString();case "stream":return s.Body.transformToWebStream();default:throw new R("Invalid return type")}}catch(s){throw s&&typeof s=="object"&&"name"in s&&s.name==="NoSuchKey"?new Z(e):s}}async putObject(e,t,r){if(await this.ensureClient(),this.isBun){await this.bunS3Client.file(e).write(t,{type:r});return}let s=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e,Body:t,ContentType:r});await this.s3Client.send(s);}async deleteObject(e){if(await this.ensureClient(),this.isBun){await this.bunS3Client.file(e).delete();return}let t=new this.s3Lib.DeleteObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});await this.s3Client.send(t);}async ensureClient(){this.clientInitialized||(this.isBun?await this.ensureBunClient():await this.ensureAwsSdk(),this.options.cloudfrontOptions&&(this.cloudfrontSignerLib=await import('@aws-sdk/cloudfront-signer').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer")})),this.clientInitialized=true);}async ensureBunClient(){if(this.bunS3Client)return;let e=this.options.s3ClientConfig,t=typeof e.credentials=="function"?await e.credentials():e.credentials,r=typeof e.endpoint=="string"?e.endpoint:e.endpoint?.toString(),s=globalThis.Bun.S3Client;this.bunS3Client=new s({accessKeyId:t?.accessKeyId,secretAccessKey:t?.secretAccessKey,sessionToken:t?.sessionToken,region:e.region,endpoint:r,bucket:e.bucketName});}async ensureAwsSdk(){this.s3Lib||(this.s3Lib=await import('@aws-sdk/client-s3').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3")}),this.s3PresignerLib=await import('@aws-sdk/s3-request-presigner').then(e=>e.default??e).catch(()=>{throw new R("Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner")}),this.s3Client=new this.s3Lib.S3Client(this.options.s3ClientConfig??{}));}};var Wr=class{providerOptions;defaultProvider;providerMap;constructor(e,t){this.providerOptions=e,this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.entries(e).map(([r,s])=>[r,s]));}use(e){let t=this.providerMap.get(e);if(!t)throw new Error(`[Storage] Provider ${String(e)} not found`);return t}async getDownloadUrl(e,t){return this.providerOptions[this.defaultProvider].getDownloadUrl(e,t)}async getUploadUrl(e,t){return this.providerOptions[this.defaultProvider].getUploadUrl(e,t)}async getPublicUrl(e){return this.providerOptions[this.defaultProvider].getPublicUrl(e)}async listObjects(e){return this.providerOptions[this.defaultProvider].listObjects(e)}async getObject(e,t="raw"){return this.providerOptions[this.defaultProvider].getObject(e,t)}async putObject(e,t,r){return this.providerOptions[this.defaultProvider].putObject(e,t,r)}async deleteObject(e){return this.providerOptions[this.defaultProvider].deleteObject(e)}};var Vt=class{async render(e,t){return await this.ensureHandlebars(),this.handlebars.compile(e)(t)}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}async registerHelper(e,t){await this.ensureHandlebars(),this.handlebars.registerHelper(e,t);}async registerPartial(e,t){await this.ensureHandlebars(),this.handlebars.registerPartial(e,t);}async ensureHandlebars(){if(this.handlebars)return;let t=await import('handlebars').catch(()=>{throw new R("Library not installed: handlebars, try run npm install handlebars @types/handlebars")});this.handlebars=t.default?.default||t.default||t;}};var Jt=class{async render(e,t){return await this.ensureEdge(),this.edge.renderRaw(e,t)}async renderFromFile(e,t){return await this.ensureEdge(),this.edge.render(e,t)}async global(e,t){await this.ensureEdge(),this.edge.global(e,t);}async registerTag(e){await this.ensureEdge(),this.edge.registerTag(e);}async ensureEdge(){if(this.edge)return;let e=await import('edge.js').catch(()=>{throw new R("Library not installed: edge.js, try run npm install edge.js")}),{Edge:t}=e;this.edge=new t;}};var Wt=class{partials={};async render(e,t){return await this.ensureMustache(),this.mustache.render(e,t,this.partials)}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}registerPartial(e,t){this.partials[e]=t;}async ensureMustache(){if(this.mustache)return;let e=await import('mustache').catch(()=>{throw new R("Library not installed: mustache, try run npm install mustache @types/mustache")});this.mustache=e.default||e;}};var Kt=class{options;constructor(e={}){this.options=e;}async render(e,t){return await this.ensureEjs(),this.ejs.render(e,t,this.options)}async renderFromFile(e,t){return await this.ensureEjs(),this.ejs.renderFile(e,t,this.options)}async ensureEjs(){if(this.ejs)return;let e=await import('ejs').catch(()=>{throw new R("Library not installed: ejs, try run npm install ejs @types/ejs")});this.ejs=e.default||e;}};var Xt=class{helpers=new Map;render(e,t){return e.replace(/\{\{(\w+)(?::(\w+))?\}\}/g,(r,s,n)=>{let i=t[s];return i===void 0?r:n&&this.helpers.has(n)?this.helpers.get(n)(i):String(i)})}async renderFromFile(e,t){let r=await v.readFile(e,{encoding:"utf8"});return this.render(r,t)}registerHelper(e,t){this.helpers.set(e,t);}};var Ne=class{options={};templateOptions;from(e){return this.options.from=e,this}to(e){return this.options.to=e,this}cc(e){return this.options.cc=e,this}bcc(e){return this.options.bcc=e,this}subject(e){return this.options.subject=e,this}text(e){return this.options.text=e,this}html(e){return this.options.html=e,this}template(e,t){return this.templateOptions={template:e,data:t,isFilePath:false},this}templateFile(e,t){return this.templateOptions={template:e,data:t,isFilePath:true},this}attachment(e){return this.options.attachments||(this.options.attachments=[]),this.options.attachments.push(e),this}attachments(e){return this.options.attachments||(this.options.attachments=[]),this.options.attachments.push(...e),this}hasTemplate(){return !!this.templateOptions}isTemplateFile(){return !!this.templateOptions?.isFilePath}build(){if(!this.options.to)throw new Error("[MailOptionsBuilder] 'to' field is required");if(!this.options.subject)throw new Error("[MailOptionsBuilder] 'subject' field is required");if(this.templateOptions){let{text:e,html:t,...r}=this.options;return {...r,template:this.templateOptions.template,data:this.templateOptions.data,isFilePath:this.templateOptions.isFilePath}}return this.options}};var ft=class extends R{constructor(e){super(e),this.name="MailerError";}},gt=class extends ft{constructor(e){super(`[Mailer] Provider '${e}' not found`),this.name="ProviderNotFoundError";}},Zt=class extends ft{constructor(){super("[MailProvider] Template adapter not configured for this provider"),this.name="TemplateAdapterNotConfiguredError";}},Yt=class extends ft{constructor(e){super(`[Mailer] Default provider '${e}' not found in provider options`),this.name="InvalidDefaultProviderError";}};var yt=class{transporter;templateAdapter;defaultFrom;constructor(e){this.transporter=e.transporter,this.templateAdapter=e.templateAdapter,this.defaultFrom=e.from;}async send(e){let t=new Ne,s=e(t)??t,n=s.build();return s.hasTemplate()?this.sendWithTemplate(n):this.sendDirect(n)}async sendDirect(e){let t={...e,from:e.from||this.defaultFrom};return this.transporter.sendMail(t)}async sendWithTemplate(e){if(!this.templateAdapter)throw new Zt;let t=e.isFilePath?await this.templateAdapter.renderFromFile(e.template,e.data):await this.templateAdapter.render(e.template,e.data),r={...e,html:t,from:e.from||this.defaultFrom};await this.sendDirect(r);}async verify(){return this.transporter.verify()}};var Kr=class{defaultProvider;providerMap;emailQueue=null;queueInitialized=false;constructor(e,t){if(!e[t.defaultProvider])throw new Yt(String(t.defaultProvider));this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.keys(e).map(r=>[r,new yt(e[r])]));}use(e){let t=this.providerMap.get(e);if(!t)throw new gt(String(e));return t}async send(e){return this.getDefaultProvider().send(e)}async later(e){await this.initializeQueue();let t=new Ne,s=e(t)??t,n=s.build(),i=s.hasTemplate();await this.emailQueue.publish({options:n,isTemplate:i});}async initializeQueue(){this.queueInitialized||(this.emailQueue=xr("mailer-emails"),await this.emailQueue.subscribe(async e=>{await this.processEmail(e);}),this.queueInitialized=true);}async processEmail(e){try{await this.getDefaultProvider().send(r=>{let s=e.options;if(r.to(s.to).subject(s.subject),s.from&&r.from(s.from),s.cc&&r.cc(s.cc),s.bcc&&r.bcc(s.bcc),"text"in s&&s.text&&r.text(s.text),"html"in s&&s.html&&r.html(s.html),s.attachments&&r.attachments(s.attachments),e.isTemplate){let n=s;n.isFilePath?r.templateFile(n.template,n.data):r.template(n.template,n.data);}}),await new Promise(r=>setTimeout(r,1e3));}catch(t){console.error("[Mailer] Failed to send queued email:",t);}}async verify(){return this.getDefaultProvider().verify()}getDefaultProvider(){let e=this.providerMap.get(this.defaultProvider);if(!e)throw new gt(String(this.defaultProvider));return e}};var Xr=class{};var Zr=o=>(e,t)=>(r,s,n)=>{let i={scope:e,handler:t,manager:o};if(typeof s>"u"){let c=O.get(r.prototype,"__class__");return c||(c={policies:[]}),c.policies||(c.policies=[]),c.policies.push(i),O.set(r.prototype,"__class__",c),r}let a=O.get(r,s);return a||(a={policies:[]}),a.policies||(a.policies=[]),a.policies.push(i),O.set(r,s,a),n};var Yr=class{providers;constructor(e){this.providers=e;}createDecorator(){return Zr(this)}canAccess(e,t,...r){let s=this.providers[e];if(!s)throw new R(`Policy provider for ${String(e)} not found`);return s[t](...r)}};var qy=_,Ay=Gt;
1232
+ export{Gr as AzureBlobStorageProvider,br as BaseCron,Xr as BasePlugin,ot as BullMQPubSub,me as CACHE_STATUS_HEADER,tt as CacheService,dr as CacheStatus,k as Command,$t as CommandRegistry,W as CronService,Xt as CustomAdapter,Fe as DEFAULT_CACHE_OPTIONS,Jt as EdgeAdapter,Kt as EjsAdapter,ne as GraphQL,Vt as HandlebarsAdapter,Vr as LocalStorageProvider,Ne as MailOptionsBuilder,yt as MailProvider,Kr as Mailer,dt as MemoryCacheProvider,nt as MemoryPubSub,ze as MqttService,Wt as MustacheAdapter,it as PGBossPubSub,Yr as PolicyManager,oe as QueueManager,K as QueueService,pt as RedisCacheProvider,Jr as S3StorageProvider,at as SQSPubSub,Gt as Server,Wr as Storage,N as arg,Er as asyncLocalStorage,Xe as asyncStorage,kr as bodyParser,tn as bullmqQueue,yo as cache,Rr as cacheMiddleware,ki as clearAllSchemaCaches,Ce as commandRegistry,qr as compression,Bo as controller,Ar as cookie,Hr as cors,Br as createExpressAdapter,Zr as createPolicyDecorator,sn as createQueue,Ho as cron,gr as cronUIInstance,_o as cronUi,Ay as default,pn as defineMiddleware,on as defineQueueConfiguration,No as del,Ks as expressHandler,Be as expressMiddleware,C as flag,Io as get,rt as getCacheService,oo as getSchemaCacheMetrics,Mi as hash,Nr as helmet,ur as initCacheService,Ir as log,ji as logSchemaCacheMetrics,M as logger,xr as memoryQueue,Lr as methodOverride,Qo as middleware,ht as mountExpressRouter,Yo as mqtt,Lo as patch,rn as pgbossQueue,Do as post,Fo as put,Dr as rateLimiter,ko as resetCacheService,qy as router,Go as serialize,Ko as serializer,Cr as serveStatic,Fr as session,Ao as setCronGlobalErrorHandler,Zo as setMqttGlobalErrorHandler,en as sqsQueue,Qr as timeoutMw,Ur as trustProxy,Jo as validate};//# sourceMappingURL=index.js.map
1233
1233
  //# sourceMappingURL=index.js.map