@decocms/mesh 2.38.5 → 2.38.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1185,7 +1185,7 @@ ${Y.stack}`;return G}}catch{}if(typeof Y.toString==="function")try{let G=Y.toStr
1185
1185
  <h2>You've been invited!</h2>
1186
1186
  <p>${J} has invited you to join <strong>${Q.organization.name}</strong>.</p>
1187
1187
  <p><a href="${G}">Click here to accept the invitation</a></p>
1188
- `})}}}Gd6=[Ca({organizationCreation:{afterCreate:async(X)=>{await W$1(X.organization.id,X.member.userId)}},ac:If,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:$$1,resourceNameValidation:(X)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(X)}}},roles:{user:Yd6,admin:Qd6,owner:Jd6},sendInvitationEmail:q$1}),aa({loginPage:"/login",oidcConfig:{scopes:V$1,metadata:{scopes_supported:V$1},loginPage:"/login"}}),ia({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:(X)=>{if(X.headers?.get("X-MCP-Session-Auth")==="true")return null;let Q=X.headers?.get("Authorization");if(Q?.startsWith("Bearer "))return Q.replace("Bearer ","").trim();return null},permissions:{defaultPermissions:{self:["ORGANIZATION_LIST","ORGANIZATION_GET","ORGANIZATION_MEMBER_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","API_KEY_CREATE","API_KEY_LIST"]}},rateLimit:{enabled:!1}}),ya({defaultRole:"user",adminRoles:["admin","owner"]}),ta(),ha({jwt:{expirationTime:"5m"}}),BD0(WX.ssoConfig?K$1(WX.ssoConfig):void 0),...WX.magicLinkConfig&&WX.emailProviders&&WX.emailProviders.length>0?[sa(i41(WX.magicLinkConfig,WX.emailProviders))]:[]],Wd6=n60(),Zd6=c41(Wd6),WG=Ri({baseURL:process.env.BASE_URL||"http://localhost:3000",database:Zd6,emailAndPassword:{enabled:!0},...WX,rateLimit:{enabled:process.env.DISABLE_RATE_LIMIT!=="true",window:60,max:1e4},plugins:Gd6,databaseHooks:{user:{create:{after:async(X)=>{if(oL.autoCreateOrganizationOnSignup===!1)return;let Y=X.name?X.name.split(" ")[0]:X.email.split("@")[0],Q=3;for(let J=0;J<Q;J++){let G=`${Y} ${tl6()}`,W=sl6(G);try{await WG.api.createOrganization({body:{name:G,slug:W,userId:X.id}});return}catch(Z){if(!(Z instanceof Error&&("body"in Z)&&Z.body?.code==="ORGANIZATION_ALREADY_EXISTS")||J===Q-1){console.error("Failed to create default organization:",Z);return}}}}}}}})});async function U$1(){console.log("\uD83D\uDD10 Running Better Auth migrations...");try{let{toBeAdded:X,toBeCreated:Y,runMigrations:Q}=await KO(WG.options);if(!X.length&&!Y.length){console.log("\u2705 Better Auth schema is up to date (no migrations needed)");return}console.log("\uD83D\uDCCB Better Auth will create/update the following tables:");for(let J of[...Y,...X])console.log(` - ${J.table}`);await Q(),console.log("\u2705 Better Auth migrations completed successfully")}catch(X){console.warn("\u26A0\uFE0F Better Auth migration failed (tables may be created on first use):",X)}}var z$1=S(()=>{iZ0();uB()});var N$1={};c1(N$1,{runSeed:()=>Jx,runKyselyMigrations:()=>D$1,migrateToLatest:()=>$d6,migrateDown:()=>Kd6});import{Migrator as B$1}from"kysely";async function D$1(X){let Y=new B$1({db:X,provider:{getMigrations:()=>Promise.resolve(BA)}}),{error:Q,results:J}=await Y.migrateToLatest();if(J?.forEach((G)=>{if(G.status==="Success")console.log(`\u2705 Migration "${G.migrationName}" executed successfully`);else if(G.status==="Error")console.error(`\u274C Failed to execute migration "${G.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q}async function $d6(X){let{keepOpen:Y=!1,database:Q,skipBetterAuth:J=!1,seed:G}=X??{};if(!J&&!Q)await U$1();let W=Q??wF(),Z=async()=>{if(!Y&&!Q)console.log("\uD83D\uDD12 Closing database connection..."),await n41(W).catch(($)=>{console.warn("Warning: Error closing database:",$)})};try{console.log("\uD83D\uDCCA Running Kysely migrations..."),await D$1(W.db),console.log("\uD83C\uDF89 All Kysely migrations completed successfully");let $;if(G)$=await Jx(W.db,G);return await Z(),{seedResult:$}}catch($){throw await Z(),$}}async function Kd6(){let X=wF(),Y=new B$1({db:X.db,provider:{getMigrations:()=>Promise.resolve(BA)}}),{error:Q,results:J}=await Y.migrateDown();if(J?.forEach((G)=>{if(G.status==="Success")console.log(`\u2705 Migration "${G.migrationName}" rolled back successfully`);else if(G.status==="Error")console.error(`\u274C Failed to rollback migration "${G.migrationName}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var O$1=S(()=>{Qx();K50();z$1();tM()});var mK;var fT=S(()=>{mK=class extends Error{res;status;constructor(X=500,Y){super(Y?.message,{cause:Y?.cause});this.res=Y?.res,this.status=X}getResponse(){if(this.res)return new Response(this.res.body,{status:this.status,headers:this.res.headers});return new Response(this.message,{status:this.status})}}});var L$1,Hd6,Fd6=(X,Y)=>{if(!X)return{};let Q=new Headers(X.headers);if(Y){let J=Q.get("connection");if(J){let G=J.split(",").map((Z)=>Z.trim()),W=G.filter((Z)=>!Hd6.test(Z));if(W.length>0)throw new mK(400,{message:`Invalid Connection header value: ${W.join(", ")}`});G.forEach((Z)=>{Q.delete(Z)})}}return L$1.forEach((J)=>{Q.delete(J)}),{method:X.method,body:X.body,duplex:X.body?"half":void 0,headers:Q,signal:X.signal}},Vd6=(X)=>{if(!X.headers||Array.isArray(X.headers)||X.headers instanceof Headers)return X;let Y=new Headers;for(let[Q,J]of Object.entries(X.headers))if(J==null)Y.delete(Q);else Y.set(Q,J);return X.headers=Y,X},w$1=async(X,Y)=>{let{raw:Q,customFetch:J,strictConnectionProcessing:G=!1,...W}=Y instanceof Request?{raw:Y}:Y??{},Z=new Request(X,{...Fd6(Q,G),...Vd6(W)});Z.headers.delete("accept-encoding");let $=await(J||fetch)(Z),K=new Headers($.headers);if(L$1.forEach((H)=>{K.delete(H)}),K.has("content-encoding"))K.delete("content-encoding"),K.delete("content-length");return new Response($.body,{status:$.status,statusText:$.statusText,headers:K})};var M$1=S(()=>{fT();L$1=["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"],Hd6=/^[!#$%&'*+\-.0-9A-Z^_`a-z|~]+$/});var P$1=(X)=>(Y)=>{let Q=new URL(Y.req.raw.url),J=new URL(X);return J.pathname=Q.pathname,J.search=Q.search,w$1(J,{raw:Y.req.raw,headers:{...Y.req.raw.headers}})};var T$1=S(()=>{M$1()});import{resolve as hT,dirname as qd6,join as Ud6,extname as zd6}from"path";function Nd6(X,Y){let Q=hT(Y),J=hT(X);return J===Q||J.startsWith(Q+"/")}function Od6({requestPath:X,clientDir:Y}){let Q=X.startsWith("/")?X.slice(1):X,J=hT(Y,Q);if(!Nd6(J,Y))return null;return J}function A$1(X,Y="../client"){let Q=new URL(X),J=qd6(Q.pathname);return hT(J,Y)}function E$1(X={}){let{env:Y="production",devServerUrl:Q=Bd6,clientDir:J=Dd6,isServerPath:G=()=>!1}=X;if(Y==="development"){let W=P$1(Q);return async function($){let K=new URL($.url);if(G(K.pathname))return null;let H={req:{raw:$,url:$.url}};return W(H)}}return async function(Z){if(Z.method!=="GET")return null;let $=new URL(Z.url),K;try{K=decodeURIComponent($.pathname)}catch{return null}if(G(K))return null;let H=Od6({requestPath:K,clientDir:J});if(!H)return null;let F=Ud6(H,"index.html"),V=hT(J,"index.html"),q=Z.headers.get("accept"),D=q?.includes("text/html")||q?.includes("*/*")&&["",".html"].includes(zd6(H))?[F,V]:[];for(let N of[H,...D])try{let L=Bun.file(N);if(await L.exists())return new Response(L)}catch{}return null}}var Bd6="http://localhost:4000",Dd6="./dist/client";var j$1=S(()=>{T$1()});function I$1(X){if(!X)return!1;try{return new URL(X).host==="api.decocms.com"&&X!=="https://api.decocms.com/mcp/registry"}catch{return!1}}var C$1="https://api.decocms.com/mcp/registry";var YQ0=(X,Y,Q)=>{return(J,G)=>{let W=-1;return Z(0);async function Z($){if($<=W)throw Error("next() called multiple times");W=$;let K,H=!1,F;if(X[$])F=X[$][0][0],J.req.routeIndex=$;else F=$===X.length&&G||void 0;if(F)try{K=await F(J,()=>Z($+1))}catch(V){if(V instanceof Error&&Y)J.error=V,K=await Y(V,J),H=!0;else throw V}else if(J.finalized===!1&&Q)K=await Q(J);if(K&&(J.finalized===!1||H))J.res=K;return J}}};var R$1=()=>{};var S$1;var k$1=S(()=>{S$1=Symbol()});async function Ld6(X,Y){let Q=await X.formData();if(Q)return wd6(Q,Y);return{}}function wd6(X,Y){let Q=Object.create(null);if(X.forEach((J,G)=>{if(!(Y.all||G.endsWith("[]")))Q[G]=J;else Md6(Q,G,J)}),Y.dot)Object.entries(Q).forEach(([J,G])=>{if(J.includes("."))Pd6(Q,J,G),delete Q[J]});return Q}var v$1=async(X,Y=Object.create(null))=>{let{all:Q=!1,dot:J=!1}=Y,W=(X instanceof Rf?X.raw.headers:X.headers).get("Content-Type");if(W?.startsWith("multipart/form-data")||W?.startsWith("application/x-www-form-urlencoded"))return Ld6(X,{all:Q,dot:J});return{}},Md6=(X,Y,Q)=>{if(X[Y]!==void 0)if(Array.isArray(X[Y]))X[Y].push(Q);else X[Y]=[X[Y],Q];else if(!Y.endsWith("[]"))X[Y]=Q;else X[Y]=[Q]},Pd6=(X,Y,Q)=>{let J=X,G=Y.split(".");G.forEach((W,Z)=>{if(Z===G.length-1)J[W]=Q;else{if(!J[W]||typeof J[W]!=="object"||Array.isArray(J[W])||J[W]instanceof File)J[W]=Object.create(null);J=J[W]}})};var _$1=S(()=>{QQ0()});var GQ0=(X)=>{let Y=X.split("/");if(Y[0]==="")Y.shift();return Y},y$1=(X)=>{let{groups:Y,path:Q}=Td6(X),J=GQ0(Q);return Ad6(J,Y)},Td6=(X)=>{let Y=[];return X=X.replace(/\{[^}]+\}/g,(Q,J)=>{let G=`@${J}`;return Y.push([G,Q]),G}),{groups:Y,path:X}},Ad6=(X,Y)=>{for(let Q=Y.length-1;Q>=0;Q--){let[J]=Y[Q];for(let G=X.length-1;G>=0;G--)if(X[G].includes(J)){X[G]=X[G].replace(J,Y[Q][1]);break}}return X},Sf,b$1=(X,Y)=>{if(X==="*")return"*";let Q=X.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(Q){let J=`${X}#${Y}`;if(!Sf[J])if(Q[2])Sf[J]=Y&&Y[0]!==":"&&Y[0]!=="*"?[J,Q[1],new RegExp(`^${Q[2]}(?=/${Y})`)]:[X,Q[1],new RegExp(`^${Q[2]}$`)];else Sf[J]=[X,Q[1],!0];return Sf[J]}return null},mB=(X,Y)=>{try{return Y(X)}catch{return X.replace(/(?:%[0-9A-Fa-f]{2})+/g,(Q)=>{try{return Y(Q)}catch{return Q}})}},Ed6=(X)=>mB(X,decodeURI),WQ0=(X)=>{let Y=X.url,Q=Y.indexOf("/",Y.indexOf(":")+4),J=Q;for(;J<Y.length;J++){let G=Y.charCodeAt(J);if(G===37){let W=Y.indexOf("?",J),Z=Y.slice(Q,W===-1?void 0:W);return Ed6(Z.includes("%25")?Z.replace(/%25/g,"%2525"):Z)}else if(G===63)break}return Y.slice(Q,J)},f$1=(X)=>{let Y=WQ0(X);return Y.length>1&&Y.at(-1)==="/"?Y.slice(0,-1):Y},rF=(X,Y,...Q)=>{if(Q.length)Y=rF(Y,...Q);return`${X?.[0]==="/"?"":"/"}${X}${Y==="/"?"":`${X?.at(-1)==="/"?"":"/"}${Y?.[0]==="/"?Y.slice(1):Y}`}`},kf=(X)=>{if(X.charCodeAt(X.length-1)!==63||!X.includes(":"))return null;let Y=X.split("/"),Q=[],J="";return Y.forEach((G)=>{if(G!==""&&!/\:/.test(G))J+="/"+G;else if(/\:/.test(G))if(/\?/.test(G)){if(Q.length===0&&J==="")Q.push("/");else Q.push(J);let W=G.replace("?","");J+="/"+W,Q.push(J)}else J+="/"+G}),Q.filter((G,W,Z)=>Z.indexOf(G)===W)},JQ0=(X)=>{if(!/[%+]/.test(X))return X;if(X.indexOf("+")!==-1)X=X.replace(/\+/g," ");return X.indexOf("%")!==-1?mB(X,xT):X},h$1=(X,Y,Q)=>{let J;if(!Q&&Y&&!/[%+]/.test(Y)){let Z=X.indexOf("?",8);if(Z===-1)return;if(!X.startsWith(Y,Z+1))Z=X.indexOf(`&${Y}`,Z+1);while(Z!==-1){let $=X.charCodeAt(Z+Y.length+1);if($===61){let K=Z+Y.length+2,H=X.indexOf("&",K);return JQ0(X.slice(K,H===-1?void 0:H))}else if($==38||isNaN($))return"";Z=X.indexOf(`&${Y}`,Z+1)}if(J=/[%+]/.test(X),!J)return}let G={};J??=/[%+]/.test(X);let W=X.indexOf("?",8);while(W!==-1){let Z=X.indexOf("&",W+1),$=X.indexOf("=",W);if($>Z&&Z!==-1)$=-1;let K=X.slice(W+1,$===-1?Z===-1?void 0:Z:$);if(J)K=JQ0(K);if(W=Z,K==="")continue;let H;if($===-1)H="";else if(H=X.slice($+1,Z===-1?void 0:Z),J)H=JQ0(H);if(Q){if(!(G[K]&&Array.isArray(G[K])))G[K]=[];G[K].push(H)}else G[K]??=H}return Y?G[Y]:G},x$1,g$1=(X,Y)=>{return h$1(X,Y,!0)},xT;var oF=S(()=>{Sf={},x$1=h$1,xT=decodeURIComponent});var u$1=(X)=>mB(X,xT),Rf;var QQ0=S(()=>{fT();k$1();_$1();oF();Rf=class{raw;#X;#Y;routeIndex=0;path;bodyCache={};constructor(X,Y="/",Q=[[]]){this.raw=X,this.path=Y,this.#Y=Q,this.#X={}}param(X){return X?this.#Q(X):this.#J()}#Q(X){let Y=this.#Y[0][this.routeIndex][1][X],Q=this.#W(Y);return Q&&/\%/.test(Q)?u$1(Q):Q}#J(){let X={},Y=Object.keys(this.#Y[0][this.routeIndex][1]);for(let Q of Y){let J=this.#W(this.#Y[0][this.routeIndex][1][Q]);if(J!==void 0)X[Q]=/\%/.test(J)?u$1(J):J}return X}#W(X){return this.#Y[1]?this.#Y[1][X]:X}query(X){return x$1(this.url,X)}queries(X){return g$1(this.url,X)}header(X){if(X)return this.raw.headers.get(X)??void 0;let Y={};return this.raw.headers.forEach((Q,J)=>{Y[J]=Q}),Y}async parseBody(X){return this.bodyCache.parsedBody??=await v$1(this,X)}#G=(X)=>{let{bodyCache:Y,raw:Q}=this,J=Y[X];if(J)return J;let G=Object.keys(Y)[0];if(G)return Y[G].then((W)=>{if(G==="json")W=JSON.stringify(W);return new Response(W)[X]()});return Y[X]=Q[X]()};json(){return this.#G("text").then((X)=>JSON.parse(X))}text(){return this.#G("text")}arrayBuffer(){return this.#G("arrayBuffer")}blob(){return this.#G("blob")}formData(){return this.#G("formData")}addValidatedData(X,Y){this.#X[X]=Y}valid(X){return this.#X[X]}get url(){return this.raw.url}get method(){return this.raw.method}get[S$1](){return this.#Y}get matchedRoutes(){return this.#Y[0].map(([[,X]])=>X)}get routePath(){return this.#Y[0].map(([[,X]])=>X)[this.routeIndex].path}}});var vf,jd6=(X,Y)=>{let Q=new String(X);return Q.isEscaped=!0,Q.callbacks=Y,Q},gT=async(X,Y,Q,J,G)=>{if(typeof X==="object"&&!(X instanceof String)){if(!(X instanceof Promise))X=X.toString();if(X instanceof Promise)X=await X}let W=X.callbacks;if(!W?.length)return Promise.resolve(X);if(G)G[0]+=X;else G=[X];let Z=Promise.all(W.map(($)=>$({phase:Y,buffer:G,context:J}))).then(($)=>Promise.all($.filter(Boolean).map((K)=>gT(K,Y,!1,J,G))).then(()=>G[0]));if(Q)return jd6(await Z,W);else return Z};var ZQ0=S(()=>{vf={Stringify:1,BeforeStream:2,Stream:3}});var m$1="text/plain; charset=UTF-8",$Q0=(X,Y)=>{return{"Content-Type":X,...Y}},l$1=class{#X;#Y;env={};#Q;finalized=!1;error;#J;#W;#G;#$;#Z;#H;#K;#V;#q;constructor(X,Y){if(this.#X=X,Y)this.#W=Y.executionCtx,this.env=Y.env,this.#H=Y.notFoundHandler,this.#q=Y.path,this.#V=Y.matchResult}get req(){return this.#Y??=new Rf(this.#X,this.#q,this.#V),this.#Y}get event(){if(this.#W&&"respondWith"in this.#W)return this.#W;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#W)return this.#W;else throw Error("This context has no ExecutionContext")}get res(){return this.#G||=new Response(null,{headers:this.#K??=new Headers})}set res(X){if(this.#G&&X){X=new Response(X.body,X);for(let[Y,Q]of this.#G.headers.entries()){if(Y==="content-type")continue;if(Y==="set-cookie"){let J=this.#G.headers.getSetCookie();X.headers.delete("set-cookie");for(let G of J)X.headers.append("set-cookie",G)}else X.headers.set(Y,Q)}}this.#G=X,this.finalized=!0}render=(...X)=>{return this.#Z??=(Y)=>this.html(Y),this.#Z(...X)};setLayout=(X)=>this.#$=X;getLayout=()=>this.#$;setRenderer=(X)=>{this.#Z=X};header=(X,Y,Q)=>{if(this.finalized)this.#G=new Response(this.#G.body,this.#G);let J=this.#G?this.#G.headers:this.#K??=new Headers;if(Y===void 0)J.delete(X);else if(Q?.append)J.append(X,Y);else J.set(X,Y)};status=(X)=>{this.#J=X};set=(X,Y)=>{this.#Q??=new Map,this.#Q.set(X,Y)};get=(X)=>{return this.#Q?this.#Q.get(X):void 0};get var(){if(!this.#Q)return{};return Object.fromEntries(this.#Q)}#F(X,Y,Q){let J=this.#G?new Headers(this.#G.headers):this.#K??new Headers;if(typeof Y==="object"&&"headers"in Y){let W=Y.headers instanceof Headers?Y.headers:new Headers(Y.headers);for(let[Z,$]of W)if(Z.toLowerCase()==="set-cookie")J.append(Z,$);else J.set(Z,$)}if(Q)for(let[W,Z]of Object.entries(Q))if(typeof Z==="string")J.set(W,Z);else{J.delete(W);for(let $ of Z)J.append(W,$)}let G=typeof Y==="number"?Y:Y?.status??this.#J;return new Response(X,{status:G,headers:J})}newResponse=(...X)=>this.#F(...X);body=(X,Y,Q)=>this.#F(X,Y,Q);text=(X,Y,Q)=>{return!this.#K&&!this.#J&&!Y&&!Q&&!this.finalized?new Response(X):this.#F(X,Y,$Q0(m$1,Q))};json=(X,Y,Q)=>{return this.#F(JSON.stringify(X),Y,$Q0("application/json",Q))};html=(X,Y,Q)=>{let J=(G)=>this.#F(G,Y,$Q0("text/html; charset=UTF-8",Q));return typeof X==="object"?gT(X,vf.Stringify,!1,{}).then(J):J(X)};redirect=(X,Y)=>{let Q=String(X);return this.header("Location",!/[^\x00-\xFF]/.test(Q)?Q:encodeURI(Q)),this.newResponse(null,Y??302)};notFound=()=>{return this.#H??=()=>new Response,this.#H(this)}};var _f=S(()=>{QQ0();ZQ0()});var X8="ALL",d$1="all",p$1,yf="Can not add a route since the matcher is already built.",bf;var sF=S(()=>{p$1=["get","post","put","delete","options","patch"],bf=class extends Error{}});var c$1="__COMPOSED_HANDLER";var n$1=()=>{};var Cd6=(X)=>{return X.text("404 Not Found",404)},i$1=(X,Y)=>{if("getResponse"in X){let Q=X.getResponse();return Y.newResponse(Q.body,Q)}return console.error(X),Y.text("Internal Server Error",500)},a$1=class X{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#X="/";routes=[];constructor(Y={}){[...p$1,d$1].forEach((W)=>{this[W]=(Z,...$)=>{if(typeof Z==="string")this.#X=Z;else this.#J(W,this.#X,Z);return $.forEach((K)=>{this.#J(W,this.#X,K)}),this}}),this.on=(W,Z,...$)=>{for(let K of[Z].flat()){this.#X=K;for(let H of[W].flat())$.map((F)=>{this.#J(H.toUpperCase(),this.#X,F)})}return this},this.use=(W,...Z)=>{if(typeof W==="string")this.#X=W;else this.#X="*",Z.unshift(W);return Z.forEach(($)=>{this.#J(X8,this.#X,$)}),this};let{strict:J,...G}=Y;Object.assign(this,G),this.getPath=J??!0?Y.getPath??WQ0:f$1}#Y(){let Y=new X({router:this.router,getPath:this.getPath});return Y.errorHandler=this.errorHandler,Y.#Q=this.#Q,Y.routes=this.routes,Y}#Q=Cd6;errorHandler=i$1;route(Y,Q){let J=this.basePath(Y);return Q.routes.map((G)=>{let W;if(Q.errorHandler===i$1)W=G.handler;else W=async(Z,$)=>(await YQ0([],Q.errorHandler)(Z,()=>G.handler(Z,$))).res,W[c$1]=G.handler;J.#J(G.method,G.path,W)}),this}basePath(Y){let Q=this.#Y();return Q._basePath=rF(this._basePath,Y),Q}onError=(Y)=>{return this.errorHandler=Y,this};notFound=(Y)=>{return this.#Q=Y,this};mount(Y,Q,J){let G,W;if(J)if(typeof J==="function")W=J;else if(W=J.optionHandler,J.replaceRequest===!1)G=(K)=>K;else G=J.replaceRequest;let Z=W?(K)=>{let H=W(K);return Array.isArray(H)?H:[H]}:(K)=>{let H=void 0;try{H=K.executionCtx}catch{}return[K.env,H]};G||=(()=>{let K=rF(this._basePath,Y),H=K==="/"?0:K.length;return(F)=>{let V=new URL(F.url);return V.pathname=V.pathname.slice(H)||"/",new Request(V,F)}})();let $=async(K,H)=>{let F=await Q(G(K.req.raw),...Z(K));if(F)return F;await H()};return this.#J(X8,rF(Y,"*"),$),this}#J(Y,Q,J){Y=Y.toUpperCase(),Q=rF(this._basePath,Q);let G={basePath:this._basePath,path:Q,method:Y,handler:J};this.router.add(Y,Q,[J,G]),this.routes.push(G)}#W(Y,Q){if(Y instanceof Error)return this.errorHandler(Y,Q);throw Y}#G(Y,Q,J,G){if(G==="HEAD")return(async()=>new Response(null,await this.#G(Y,Q,J,"GET")))();let W=this.getPath(Y,{env:J}),Z=this.router.match(G,W),$=new l$1(Y,{path:W,matchResult:Z,env:J,executionCtx:Q,notFoundHandler:this.#Q});if(Z[0].length===1){let H;try{H=Z[0][0][0][0]($,async()=>{$.res=await this.#Q($)})}catch(F){return this.#W(F,$)}return H instanceof Promise?H.then((F)=>F||($.finalized?$.res:this.#Q($))).catch((F)=>this.#W(F,$)):H??this.#Q($)}let K=YQ0(Z[0],this.errorHandler,this.#Q);return(async()=>{try{let H=await K($);if(!H.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return H.res}catch(H){return this.#W(H,$)}})()}fetch=(Y,...Q)=>{return this.#G(Y,Q[1],Q[0],Y.method)};request=(Y,Q,J,G)=>{if(Y instanceof Request)return this.fetch(Q?new Request(Y,Q):Y,J,G);return Y=Y.toString(),this.fetch(new Request(/^https?:\/\//.test(Y)?Y:`http://localhost${rF("/",Y)}`,Q),J,G)};fire=()=>{addEventListener("fetch",(Y)=>{Y.respondWith(this.#G(Y.request,Y,void 0,Y.request.method))})}};var r$1=S(()=>{R$1();_f();sF();n$1();oF()});function ff(X,Y){let Q=this.buildAllMatchers(),J=(G,W)=>{let Z=Q[G]||Q[X8],$=Z[2][W];if($)return $;let K=W.match(Z[0]);if(!K)return[[],uT];let H=K.indexOf("",1);return[Z[1][H],K]};return this.match=J,J(X,Y)}var uT;var KQ0=S(()=>{sF();uT=[]});function Rd6(X,Y){if(X.length===1)return Y.length===1?X<Y?-1:1:-1;if(Y.length===1)return 1;if(X===mT||X===lT)return 1;else if(Y===mT||Y===lT)return-1;if(X===hf)return 1;else if(Y===hf)return-1;return X.length===Y.length?X<Y?-1:1:Y.length-X.length}var hf="[^/]+",mT=".*",lT="(?:|/.*)",tF,Id6,o$1=class X{#X;#Y;#Q=Object.create(null);insert(Y,Q,J,G,W){if(Y.length===0){if(this.#X!==void 0)throw tF;if(W)return;this.#X=Q;return}let[Z,...$]=Y,K=Z==="*"?$.length===0?["","",mT]:["","",hf]:Z==="/*"?["","",lT]:Z.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),H;if(K){let F=K[1],V=K[2]||hf;if(F&&K[2]){if(V===".*")throw tF;if(V=V.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(V))throw tF}if(H=this.#Q[V],!H){if(Object.keys(this.#Q).some((q)=>q!==mT&&q!==lT))throw tF;if(W)return;if(H=this.#Q[V]=new X,F!=="")H.#Y=G.varIndex++}if(!W&&F!=="")J.push([F,H.#Y])}else if(H=this.#Q[Z],!H){if(Object.keys(this.#Q).some((F)=>F.length>1&&F!==mT&&F!==lT))throw tF;if(W)return;H=this.#Q[Z]=new X}H.insert($,Q,J,G,W)}buildRegExpStr(){let Q=Object.keys(this.#Q).sort(Rd6).map((J)=>{let G=this.#Q[J];return(typeof G.#Y==="number"?`(${J})@${G.#Y}`:Id6.has(J)?`\\${J}`:J)+G.buildRegExpStr()});if(typeof this.#X==="number")Q.unshift(`#${this.#X}`);if(Q.length===0)return"";if(Q.length===1)return Q[0];return"(?:"+Q.join("|")+")"}};var HQ0=S(()=>{tF=Symbol(),Id6=new Set(".\\+*[^]$()")});var s$1=class{#X={varIndex:0};#Y=new o$1;insert(X,Y,Q){let J=[],G=[];for(let Z=0;;){let $=!1;if(X=X.replace(/\{[^}]+\}/g,(K)=>{let H=`@\\${Z}`;return G[Z]=[H,K],Z++,$=!0,H}),!$)break}let W=X.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let Z=G.length-1;Z>=0;Z--){let[$]=G[Z];for(let K=W.length-1;K>=0;K--)if(W[K].indexOf($)!==-1){W[K]=W[K].replace($,G[Z][1]);break}}return this.#Y.insert(W,Y,J,this.#X,Q),J}buildRegExp(){let X=this.#Y.buildRegExpStr();if(X==="")return[/^$/,[],[]];let Y=0,Q=[],J=[];return X=X.replace(/#(\d+)|@(\d+)|\.\*\$/g,(G,W,Z)=>{if(W!==void 0)return Q[++Y]=Number(W),"$()";if(Z!==void 0)return J[Number(Z)]=++Y,"";return""}),[new RegExp(`^${X}`),Q,J]}};var t$1=S(()=>{HQ0()});function XK1(X){return e$1[X]??=new RegExp(X==="*"?"":`^${X.replace(/\/\*$|([.\\+*[^\]$()])/g,(Y,Q)=>Q?`\\${Q}`:"(?:|/.*)")}$`)}function kd6(){e$1=Object.create(null)}function vd6(X){let Y=new s$1,Q=[];if(X.length===0)return Sd6;let J=X.map((H)=>[!/\*|\/:/.test(H[0]),...H]).sort(([H,F],[V,q])=>H?1:V?-1:F.length-q.length),G=Object.create(null);for(let H=0,F=-1,V=J.length;H<V;H++){let[q,z,D]=J[H];if(q)G[z]=[D.map(([L])=>[L,Object.create(null)]),uT];else F++;let N;try{N=Y.insert(z,F,q)}catch(L){throw L===tF?new bf(z):L}if(q)continue;Q[F]=D.map(([L,w])=>{let C=Object.create(null);w-=1;for(;w>=0;w--){let[A,T]=N[w];C[A]=T}return[L,C]})}let[W,Z,$]=Y.buildRegExp();for(let H=0,F=Q.length;H<F;H++)for(let V=0,q=Q[H].length;V<q;V++){let z=Q[H][V]?.[1];if(!z)continue;let D=Object.keys(z);for(let N=0,L=D.length;N<L;N++)z[D[N]]=$[z[D[N]]]}let K=[];for(let H in Z)K[H]=Q[Z[H]];return[W,K,G]}function lB(X,Y){if(!X)return;for(let Q of Object.keys(X).sort((J,G)=>G.length-J.length))if(XK1(Q).test(Y))return[...X[Q]];return}var Sd6,e$1,xf=class{name="RegExpRouter";#X;#Y;constructor(){this.#X={[X8]:Object.create(null)},this.#Y={[X8]:Object.create(null)}}add(X,Y,Q){let J=this.#X,G=this.#Y;if(!J||!G)throw Error(yf);if(!J[X])[J,G].forEach(($)=>{$[X]=Object.create(null),Object.keys($[X8]).forEach((K)=>{$[X][K]=[...$[X8][K]]})});if(Y==="/*")Y="*";let W=(Y.match(/\/:/g)||[]).length;if(/\*$/.test(Y)){let $=XK1(Y);if(X===X8)Object.keys(J).forEach((K)=>{J[K][Y]||=lB(J[K],Y)||lB(J[X8],Y)||[]});else J[X][Y]||=lB(J[X],Y)||lB(J[X8],Y)||[];Object.keys(J).forEach((K)=>{if(X===X8||X===K)Object.keys(J[K]).forEach((H)=>{$.test(H)&&J[K][H].push([Q,W])})}),Object.keys(G).forEach((K)=>{if(X===X8||X===K)Object.keys(G[K]).forEach((H)=>$.test(H)&&G[K][H].push([Q,W]))});return}let Z=kf(Y)||[Y];for(let $=0,K=Z.length;$<K;$++){let H=Z[$];Object.keys(G).forEach((F)=>{if(X===X8||X===F)G[F][H]||=[...lB(J[F],H)||lB(J[X8],H)||[]],G[F][H].push([Q,W-K+$+1])})}}match=ff;buildAllMatchers(){let X=Object.create(null);return Object.keys(this.#Y).concat(Object.keys(this.#X)).forEach((Y)=>{X[Y]||=this.#Q(Y)}),this.#X=this.#Y=void 0,kd6(),X}#Q(X){let Y=[],Q=X===X8;if([this.#X,this.#Y].forEach((J)=>{let G=J[X]?Object.keys(J[X]).map((W)=>[W,J[X][W]]):[];if(G.length!==0)Q||=!0,Y.push(...G);else if(X!==X8)Y.push(...Object.keys(J[X8]).map((W)=>[W,J[X8][W]]))}),!Q)return null;else return vd6(Y)}};var FQ0=S(()=>{sF();oF();KQ0();HQ0();t$1();Sd6=[/^$/,[],Object.create(null)],e$1=Object.create(null)});var _d6=class{name="PreparedRegExpRouter";#X;#Y;constructor(X,Y){this.#X=X,this.#Y=Y}#Q(X,Y){let Q=this.#X[X];Q[1].forEach((J)=>J&&J.push(Y)),Object.values(Q[2]).forEach((J)=>J[0].push(Y))}#J(X,Y,Q,J,G){let W=this.#X[X];if(!G)W[2][Y][0].push([Q,{}]);else J.forEach((Z)=>{if(typeof Z==="number")W[1][Z].push([Q,G]);else W[2][Z||Y][0].push([Q,G])})}add(X,Y,Q){if(!this.#X[X]){let G=this.#X[X8],W={};for(let Z in G[2])W[Z]=[G[2][Z][0].slice(),uT];this.#X[X]=[G[0],G[1].map((Z)=>Array.isArray(Z)?Z.slice():0),W]}if(Y==="/*"||Y==="*"){let G=[Q,{}];if(X===X8)for(let W in this.#X)this.#Q(W,G);else this.#Q(X,G);return}let J=this.#Y[Y];if(!J)throw Error(`Path ${Y} is not registered`);for(let[G,W]of J)if(X===X8)for(let Z in this.#X)this.#J(Z,Y,Q,G,W);else this.#J(X,Y,Q,G,W)}buildAllMatchers(){return this.#X}match=ff};var YK1=S(()=>{sF();KQ0();FQ0()});var QK1=S(()=>{FQ0();YK1()});var VQ0=class{name="SmartRouter";#X=[];#Y=[];constructor(X){this.#X=X.routers}add(X,Y,Q){if(!this.#Y)throw Error(yf);this.#Y.push([X,Y,Q])}match(X,Y){if(!this.#Y)throw Error("Fatal error");let Q=this.#X,J=this.#Y,G=Q.length,W=0,Z;for(;W<G;W++){let $=Q[W];try{for(let K=0,H=J.length;K<H;K++)$.add(...J[K]);Z=$.match(X,Y)}catch(K){if(K instanceof bf)continue;throw K}this.match=$.match.bind($),this.#X=[$],this.#Y=void 0;break}if(W===G)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,Z}get activeRouter(){if(this.#Y||this.#X.length!==1)throw Error("No active router has been determined yet.");return this.#X[0]}};var JK1=S(()=>{sF()});var GK1=S(()=>{JK1()});var dT,WK1=class X{#X;#Y;#Q;#J=0;#W=dT;constructor(Y,Q,J){if(this.#Y=J||Object.create(null),this.#X=[],Y&&Q){let G=Object.create(null);G[Y]={handler:Q,possibleKeys:[],score:0},this.#X=[G]}this.#Q=[]}insert(Y,Q,J){this.#J=++this.#J;let G=this,W=y$1(Q),Z=[];for(let $=0,K=W.length;$<K;$++){let H=W[$],F=W[$+1],V=b$1(H,F),q=Array.isArray(V)?V[0]:H;if(q in G.#Y){if(G=G.#Y[q],V)Z.push(V[1]);continue}if(G.#Y[q]=new X,V)G.#Q.push(V),Z.push(V[1]);G=G.#Y[q]}return G.#X.push({[Y]:{handler:J,possibleKeys:Z.filter(($,K,H)=>H.indexOf($)===K),score:this.#J}}),G}#G(Y,Q,J,G){let W=[];for(let Z=0,$=Y.#X.length;Z<$;Z++){let K=Y.#X[Z],H=K[Q]||K[X8],F={};if(H!==void 0){if(H.params=Object.create(null),W.push(H),J!==dT||G&&G!==dT)for(let V=0,q=H.possibleKeys.length;V<q;V++){let z=H.possibleKeys[V],D=F[H.score];H.params[z]=G?.[z]&&!D?G[z]:J[z]??G?.[z],F[H.score]=!0}}}return W}search(Y,Q){let J=[];this.#W=dT;let W=[this],Z=GQ0(Q),$=[];for(let K=0,H=Z.length;K<H;K++){let F=Z[K],V=K===H-1,q=[];for(let z=0,D=W.length;z<D;z++){let N=W[z],L=N.#Y[F];if(L)if(L.#W=N.#W,V){if(L.#Y["*"])J.push(...this.#G(L.#Y["*"],Y,N.#W));J.push(...this.#G(L,Y,N.#W))}else q.push(L);for(let w=0,C=N.#Q.length;w<C;w++){let A=N.#Q[w],T=N.#W===dT?{}:{...N.#W};if(A==="*"){let b=N.#Y["*"];if(b)J.push(...this.#G(b,Y,N.#W)),b.#W=T,q.push(b);continue}let[P,j,R]=A;if(!F&&!(R instanceof RegExp))continue;let v=N.#Y[P],y=Z.slice(K).join("/");if(R instanceof RegExp){let b=R.exec(y);if(b){if(T[j]=b[0],J.push(...this.#G(v,Y,N.#W,T)),Object.keys(v.#Y).length){v.#W=T;let f=b[0].match(/\//)?.length??0;($[f]||=[]).push(v)}continue}}if(R===!0||R.test(F))if(T[j]=F,V){if(J.push(...this.#G(v,Y,T,N.#W)),v.#Y["*"])J.push(...this.#G(v.#Y["*"],Y,T,N.#W))}else v.#W=T,q.push(v)}}W=q.concat($.shift()??[])}if(J.length>1)J.sort((K,H)=>{return K.score-H.score});return[J.map(({handler:K,params:H})=>[K,H])]}};var ZK1=S(()=>{sF();oF();dT=Object.create(null)});var qQ0=class{name="TrieRouter";#X;constructor(){this.#X=new WK1}add(X,Y,Q){let J=kf(Y);if(J){for(let G=0,W=J.length;G<W;G++)this.#X.insert(X,J[G],Q);return}this.#X.insert(X,Y,Q)}match(X,Y){return this.#X.search(X,Y)}};var $K1=S(()=>{oF();ZK1()});var KK1=S(()=>{$K1()});var ZX;var HK1=S(()=>{r$1();QK1();GK1();KK1();ZX=class extends a$1{constructor(X={}){super(X);this.router=X.router??new VQ0({routers:[new xf,new qQ0]})}}});var ZG=S(()=>{HK1()});var yd6,bd6,UQ0=(X,Y)=>{if(Y&&X.indexOf(Y)===-1)return{};let Q=X.trim().split(";"),J={};for(let G of Q){G=G.trim();let W=G.indexOf("=");if(W===-1)continue;let Z=G.substring(0,W).trim();if(Y&&Y!==Z||!yd6.test(Z))continue;let $=G.substring(W+1).trim();if($.startsWith('"')&&$.endsWith('"'))$=$.slice(1,-1);if(bd6.test($)){if(J[Z]=$.indexOf("%")!==-1?mB($,xT):$,Y)break}}return J};var FK1=S(()=>{oF();yd6=/^[\w!#$%&'*.^`|~+-]+$/,bd6=/^[ !#-:<-[\]-~]*$/});var VK1=(X,Y,Q)=>{let J=X.req.raw.headers.get("Cookie");if(typeof Y==="string"){if(!J)return;let W=Y;if(Q==="secure")W="__Secure-"+Y;else if(Q==="host")W="__Host-"+Y;return UQ0(J,W)[W]}if(!J)return{};return UQ0(J)};var qK1=S(()=>{FK1()});var UK1=(X)=>{let Q={...{origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[]},...X},J=((W)=>{if(typeof W==="string")if(W==="*")return()=>W;else return(Z)=>W===Z?Z:null;else if(typeof W==="function")return W;else return(Z)=>W.includes(Z)?Z:null})(Q.origin),G=((W)=>{if(typeof W==="function")return W;else if(Array.isArray(W))return()=>W;else return()=>[]})(Q.allowMethods);return async function(Z,$){function K(F,V){Z.res.headers.set(F,V)}let H=await J(Z.req.header("origin")||"",Z);if(H)K("Access-Control-Allow-Origin",H);if(Q.credentials)K("Access-Control-Allow-Credentials","true");if(Q.exposeHeaders?.length)K("Access-Control-Expose-Headers",Q.exposeHeaders.join(","));if(Z.req.method==="OPTIONS"){if(Q.origin!=="*")K("Vary","Origin");if(Q.maxAge!=null)K("Access-Control-Max-Age",Q.maxAge.toString());let F=await G(Z.req.header("origin")||"",Z);if(F.length)K("Access-Control-Allow-Methods",F.join(","));let V=Q.allowHeaders;if(!V?.length){let q=Z.req.header("Access-Control-Request-Headers");if(q)V=q.split(/\s*,\s*/)}if(V?.length)K("Access-Control-Allow-Headers",V.join(",")),Z.res.headers.append("Vary","Access-Control-Request-Headers");return Z.res.headers.delete("Content-Length"),Z.res.headers.delete("Content-Type"),new Response(null,{headers:Z.res.headers,status:204,statusText:"No Content"})}if(await $(),Q.origin!=="*")Z.header("Vary","Origin",{append:!0})}};var zK1=()=>{};function fd6(){let{process:X,Deno:Y}=globalThis;return!(typeof Y?.noColor==="boolean"?Y.noColor:X!==void 0?"NO_COLOR"in X?.env:!1)}async function BK1(){let{navigator:X}=globalThis,Y="cloudflare:workers";return!(X!==void 0&&X.userAgent==="Cloudflare-Workers"?await(async()=>{try{return"NO_COLOR"in((await import("cloudflare:workers")).env??{})}catch{return!1}})():!fd6())}var DK1=()=>{};async function NK1(X,Y,Q,J,G=0,W){let Z=Y==="<--"?`${Y} ${Q} ${J}`:`${Y} ${Q} ${J} ${await gd6(G)} ${W}`;X(Z)}var hd6=(X)=>{let[Y,Q]=[",","."];return X.map((G)=>G.replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+Y)).join(Q)},xd6=(X)=>{let Y=Date.now()-X;return hd6([Y<1000?Y+"ms":Math.round(Y/1000)+"s"])},gd6=async(X)=>{if(await BK1())switch(X/100|0){case 5:return`\x1B[31m${X}\x1B[0m`;case 4:return`\x1B[33m${X}\x1B[0m`;case 3:return`\x1B[36m${X}\x1B[0m`;case 2:return`\x1B[32m${X}\x1B[0m`}return`${X}`},OK1=(X=console.log)=>{return async function(Q,J){let{method:G,url:W}=Q.req,Z=W.slice(W.indexOf("/",8));await NK1(X,"<--",G,Z);let $=Date.now();await J(),await NK1(X,"-->",G,Z,Q.res.status,xd6($))}};var LK1=S(()=>{DK1()});var wK1=()=>{try{return performance.now()}catch{}return Date.now()},zQ0=(X)=>{let Y={total:!0,enabled:!0,totalDescription:"Total Response Time",autoEnd:!0,crossOrigin:!1,...X};return async function(J,G){let W=[],Z=new Map;if(J.get("metric"))return await G();if(J.set("metric",{headers:W,timers:Z}),Y.total)dB(J,"total",Y.totalDescription);if(await G(),Y.total)eF(J,"total");if(Y.autoEnd)Z.forEach((K,H)=>eF(J,H));if(typeof Y.enabled==="function"?Y.enabled(J):Y.enabled){J.res.headers.append("Server-Timing",W.join(","));let K=typeof Y.crossOrigin==="function"?Y.crossOrigin(J):Y.crossOrigin;if(K)J.res.headers.append("Timing-Allow-Origin",typeof K==="string"?K:"*")}}},MK1=(X,Y,Q,J,G)=>{let W=X.get("metric");if(!W){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}if(typeof Q==="number"){let Z=Q.toFixed(G||1),$=J?`${Y};dur=${Z};desc="${J}"`:`${Y};dur=${Z}`;W.headers.push($)}else{let Z=Q?`${Y};desc="${Q}"`:`${Y}`;W.headers.push(Z)}},dB=(X,Y,Q)=>{let J=X.get("metric");if(!J){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}J.timers.set(Y,{description:Q,start:wK1()})},eF=(X,Y,Q)=>{let J=X.get("metric");if(!J){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}let G=J.timers.get(Y);if(!G){console.warn(`Timer "${Y}" does not exist!`);return}let{description:W,start:Z}=G,$=wK1()-Z;MK1(X,Y,$,W,Q),J.timers.delete(Y)};var PK1=S(()=>{_f()});var TK1=S(()=>{PK1()});import{randomBytes as ud6}from"crypto";function AK1(){if(pT)return pT;let X=process.env.MESH_JWT_SECRET??WX.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(X)pT=new TextEncoder().encode(X);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),pT=new Uint8Array(ud6(32));return pT}async function EK1(X,Y="5m"){let Q=AK1();return await new n9(X).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Y).sign(Q)}async function jK1(X){try{let Y=AK1(),{payload:Q}=await $8(X,Y);return Q}catch{return}}var pT=null;var BQ0=S(()=>{SQ();uB()});class DQ0{db;constructor(X){this.db=X}async create(X,Y,Q){let J=GX("vir"),G=new Date().toISOString();if(await this.db.insertInto("connections").values({id:J,organization_id:X,created_by:Y,title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${J}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata?JSON.stringify(Q.metadata):null,tools:null,bindings:null,status:Q.status??"active",created_at:G,updated_at:G}).execute(),Q.connections.length>0)await this.db.insertInto("connection_aggregations").values(Q.connections.map((Z)=>({id:GX("agg"),parent_connection_id:J,child_connection_id:Z.connection_id,selected_tools:Z.selected_tools?JSON.stringify(Z.selected_tools):null,selected_resources:Z.selected_resources?JSON.stringify(Z.selected_resources):null,selected_prompts:Z.selected_prompts?JSON.stringify(Z.selected_prompts):null,created_at:G}))).execute();let W=await this.findById(J);if(!W)throw Error(`Failed to create virtual MCP with id: ${J}`);return W}async findById(X){return this.findByIdInternal(this.db,X)}async findByIdInternal(X,Y){let Q=await X.selectFrom("connections").selectAll().where("id","=",Y).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!Q)return null;let J=await X.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Y).execute();return this.deserializeVirtualMCPEntity(Q,J)}async list(X){let Y=await this.db.selectFrom("connections").selectAll().where("organization_id","=",X).where("connection_type","=","VIRTUAL").execute(),Q=Y.map((W)=>W.id);if(Q.length===0)return[];let J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).execute(),G=new Map;for(let W of J){let Z=G.get(W.parent_connection_id)??[];Z.push(W),G.set(W.parent_connection_id,Z)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,G.get(W.id)??[]))}async listByConnectionId(X,Y){let J=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Y).execute()).map((K)=>K.parent_connection_id);if(J.length===0)return[];let G=await this.db.selectFrom("connections").selectAll().where("id","in",J).where("organization_id","=",X).where("connection_type","=","VIRTUAL").execute();if(G.length===0)return[];let W=G.map((K)=>K.id),Z=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",W).execute(),$=new Map;for(let K of Z){let H=$.get(K.parent_connection_id)??[];H.push(K),$.set(K.parent_connection_id,H)}return G.map((K)=>this.deserializeVirtualMCPEntity(K,$.get(K.id)??[]))}async update(X,Y,Q){let J=new Date().toISOString(),G={updated_at:J};if(Q.title!==void 0)G.title=Q.title;if(Q.description!==void 0)G.description=Q.description;if(Q.icon!==void 0)G.icon=Q.icon;if(Q.status!==void 0)G.status=Q.status;if(Q.metadata!==void 0)G.metadata=Q.metadata?JSON.stringify(Q.metadata):null;if(await this.db.updateTable("connections").set(G).where("id","=",X).where("connection_type","=","VIRTUAL").execute(),Q.connections!==void 0){if(await this.db.deleteFrom("connection_aggregations").where("parent_connection_id","=",X).execute(),Q.connections.length>0)await this.db.insertInto("connection_aggregations").values(Q.connections.map((Z)=>({id:GX("agg"),parent_connection_id:X,child_connection_id:Z.connection_id,selected_tools:Z.selected_tools?JSON.stringify(Z.selected_tools):null,selected_resources:Z.selected_resources?JSON.stringify(Z.selected_resources):null,selected_prompts:Z.selected_prompts?JSON.stringify(Z.selected_prompts):null,created_at:J}))).execute()}let W=await this.findById(X);if(!W)throw Error("Virtual MCP not found after update");return W}async delete(X){await this.db.deleteFrom("connection_aggregations").where("parent_connection_id","=",X).execute(),await this.db.deleteFrom("connections").where("id","=",X).where("connection_type","=","VIRTUAL").execute()}deserializeVirtualMCPEntity(X,Y){let Q=X.created_at instanceof Date?X.created_at.toISOString():X.created_at,J=X.updated_at instanceof Date?X.updated_at.toISOString():X.updated_at,G=X.status==="active"?"active":"inactive";return{id:X.id,organization_id:X.organization_id,title:X.title,description:X.description,tool_selection_mode:"inclusion",icon:X.icon,status:G,created_at:Q,updated_at:J,created_by:X.created_by,updated_by:void 0,metadata:this.parseJson(X.metadata),connections:Y.map((W)=>({connection_id:W.child_connection_id,selected_tools:this.parseJson(W.selected_tools),selected_resources:this.parseJson(W.selected_resources),selected_prompts:this.parseJson(W.selected_prompts)}))}}parseJson(X){if(X===null)return null;if(typeof X==="string")try{return JSON.parse(X)}catch{return null}return X}}var CK1=S(()=>{LZ()});class NQ0{patterns=[{type:"email",regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g},{type:"api_key",regex:/(?:api[_-]?key|token|secret|password|bearer)\s*[:=]\s*['"]?[\w-]{16,}['"]?/gi},{type:"jwt",regex:/eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/=]*/g},{type:"credit_card",regex:/\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g},{type:"ssn",regex:/\b\d{3}-\d{2}-\d{4}\b/g}];redact(X){return oM.startActiveSpan("redactor.redact",(Y)=>{try{if(X===null||X===void 0)return X;if(typeof X==="string")return Y.setAttribute("data.type","string"),this.redactString(X);if(Array.isArray(X))return Y.setAttribute("data.type","array"),Y.setAttribute("data.length",X.length),X.map((Q)=>this.redact(Q));if(typeof X==="object"){Y.setAttribute("data.type","object");let Q={};for(let[J,G]of Object.entries(X)){let W=this.redactString(J);Q[W]=this.redact(G)}return Q}return Y.setAttribute("data.type",typeof X),X}finally{Y.end()}})}redactString(X){return oM.startActiveSpan("redactor.redactString",(Y)=>{try{Y.setAttribute("text.length",X.length);let Q=X,J=0;for(let G of this.patterns){let W=X.match(G.regex);if(W)J+=W.length,Y.setAttribute(`redaction.${G.type}.count`,W.length);Q=Q.replace(G.regex,`[REDACTED:${G.type}]`)}return Y.setAttribute("redaction.total_count",J),Q}finally{Y.end()}})}}var IK1=S(()=>{sM()});import{sql as gf}from"kysely";class OQ0{db;redactor;databaseType;constructor(X,Y="sqlite"){this.db=X;this.redactor=new NQ0,this.databaseType=Y}jsonExtract(X,Y){if(this.databaseType==="postgres")return gf`(${gf.ref(X)}::jsonb)->>${Y}`;let Q=`$.${Y}`;return gf`json_extract(${gf.ref(X)}, ${Q})`}async log(X){await this.logBatch([X])}async logBatch(X){if(X.length===0)return;let Y=X.map((Q)=>({...Q,input:this.redactor.redact(Q.input),output:this.redactor.redact(Q.output)}));await this.db.transaction().execute(async(Q)=>{await Q.insertInto("monitoring_logs").values(Y.map((J)=>this.toDbRow(J))).execute()})}async query(X){let Y=this.db.selectFrom("monitoring_logs").selectAll(),Q=this.db.selectFrom("monitoring_logs").select(($)=>$.fn.count("id").as("count"));if(X.organizationId)Y=Y.where("organization_id","=",X.organizationId),Q=Q.where("organization_id","=",X.organizationId);if(X.connectionId)Y=Y.where("connection_id","=",X.connectionId),Q=Q.where("connection_id","=",X.connectionId);if(X.virtualMcpId)Y=Y.where("virtual_mcp_id","=",X.virtualMcpId),Q=Q.where("virtual_mcp_id","=",X.virtualMcpId);if(X.toolName)Y=Y.where("tool_name","=",X.toolName),Q=Q.where("tool_name","=",X.toolName);if(X.isError!==void 0)Y=Y.where("is_error","=",X.isError?1:0),Q=Q.where("is_error","=",X.isError?1:0);if(X.startDate)Y=Y.where("timestamp",">=",X.startDate.toISOString()),Q=Q.where("timestamp",">=",X.startDate.toISOString());if(X.endDate)Y=Y.where("timestamp","<=",X.endDate.toISOString()),Q=Q.where("timestamp","<=",X.endDate.toISOString());if(X.propertyFilters){let{properties:$,propertyKeys:K,propertyPatterns:H}=X.propertyFilters;if($)for(let[F,V]of Object.entries($)){let q=this.jsonExtract("properties",F);Y=Y.where(q,"=",V),Q=Q.where(q,"=",V)}if(K&&K.length>0)for(let F of K){let V=this.jsonExtract("properties",F);Y=Y.where(V,"is not",null),Q=Q.where(V,"is not",null)}if(H)for(let[F,V]of Object.entries(H)){let q=this.jsonExtract("properties",F),z=this.databaseType==="postgres"?"ilike":"like";Y=Y.where(q,z,V),Q=Q.where(q,z,V)}}if(Y=Y.orderBy("timestamp","desc"),X.limit)Y=Y.limit(X.limit);if(X.offset)Y=Y.offset(X.offset);let[J,G]=await Promise.all([Y.execute(),Q.executeTakeFirst()]),W=Number(G?.count||0);return{logs:J.map(($)=>this.fromDbRow($)),total:W}}async getStats(X){let Y=this.db.selectFrom("monitoring_logs").where("organization_id","=",X.organizationId);if(X.startDate)Y=Y.where("timestamp",">=",X.startDate.toISOString());if(X.endDate)Y=Y.where("timestamp","<=",X.endDate.toISOString());let Q=await Y.select([(Z)=>Z.fn.count("id").as("total_count"),(Z)=>Z.fn.sum(Z.ref("is_error")).as("error_count"),(Z)=>Z.fn.avg("duration_ms").as("avg_duration")]).executeTakeFirst(),J=Number(Q?.total_count||0),G=Number(Q?.error_count||0),W=Number(Q?.avg_duration||0);return{totalCalls:J,errorRate:J>0?G/J:0,avgDurationMs:W}}toDbRow(X){return{id:X.id||GX("log"),organization_id:X.organizationId,connection_id:X.connectionId,connection_title:X.connectionTitle,tool_name:X.toolName,input:JSON.stringify(X.input),output:JSON.stringify(X.output),is_error:X.isError?1:0,error_message:X.errorMessage||null,duration_ms:X.durationMs,timestamp:X.timestamp instanceof Date?X.timestamp.toISOString():X.timestamp,user_id:X.userId||null,request_id:X.requestId,user_agent:X.userAgent||null,virtual_mcp_id:X.virtualMcpId||null,properties:X.properties?JSON.stringify(X.properties):null}}fromDbRow(X){let Y=typeof X.input==="string"?JSON.parse(X.input):X.input,Q=typeof X.output==="string"?JSON.parse(X.output):X.output,J=typeof X.timestamp==="string"?new Date(X.timestamp):X.timestamp,G=X.properties?typeof X.properties==="string"?JSON.parse(X.properties):X.properties:null;return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,connectionTitle:X.connection_title,toolName:X.tool_name,input:Y,output:Q,isError:X.is_error===1,errorMessage:X.error_message,durationMs:X.duration_ms,timestamp:J,userId:X.user_id,requestId:X.request_id,userAgent:X.user_agent,virtualMcpId:X.virtual_mcp_id,properties:G}}}var RK1=S(()=>{IK1();LZ()});class LQ0{db;constructor(X){this.db=X}async get(X){let Y=await this.db.selectFrom("organization_settings").selectAll().where("organizationId","=",X).executeTakeFirst();if(!Y)return null;return{organizationId:Y.organizationId,sidebar_items:Y.sidebar_items?typeof Y.sidebar_items==="string"?JSON.parse(Y.sidebar_items):Y.sidebar_items:null,enabled_plugins:Y.enabled_plugins?typeof Y.enabled_plugins==="string"?JSON.parse(Y.enabled_plugins):Y.enabled_plugins:null,createdAt:Y.createdAt,updatedAt:Y.updatedAt}}async upsert(X,Y){let Q=new Date().toISOString(),J=Y?.sidebar_items?JSON.stringify(Y.sidebar_items):null,G=Y?.enabled_plugins?JSON.stringify(Y.enabled_plugins):null;await this.db.insertInto("organization_settings").values({organizationId:X,sidebar_items:J,enabled_plugins:G,createdAt:Q,updatedAt:Q}).onConflict((Z)=>Z.column("organizationId").doUpdateSet({sidebar_items:J?J:void 0,enabled_plugins:G?G:void 0,updatedAt:Q})).execute();let W=await this.get(X);if(!W)return{organizationId:X,sidebar_items:Y?.sidebar_items??null,enabled_plugins:Y?.enabled_plugins??null,createdAt:Q,updatedAt:Q};return W}}class wQ0{db;constructor(X){this.db=X}async findById(X,Y){let Q=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",X).where((J)=>J.exists(J.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",X).where("m2.userId","=",Y))).executeTakeFirst();if(!Q)return null;return{id:Q.id,name:Q.name,email:Q.email,role:"",createdAt:Q.createdAt,updatedAt:Q.updatedAt,image:Q.image??void 0}}}var SK1="mcp.mesh";var kK1,MQ0,lK;var uf=S(()=>{kK1=class kK1 extends Error{constructor(X){super(X);this.name="UnauthorizedError"}};MQ0=class MQ0 extends Error{constructor(X){super(X);this.name="ForbiddenError"}};lK=class lK{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(X,Y,Q,J,G,W="self",Z){this.userId=Y;this.toolName=Q;this.boundAuth=J;this.role=G;this.connectionId=W;this.getToolMeta=Z}[Symbol.dispose](){this._granted=!1}setToolName(X){this.toolName=X}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...X){if(this._granted)return;if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new kK1("Authentication required. Please provide a valid OAuth token or API key.")}let Y=X.length>0?X:this.toolName?[this.toolName]:[];if(Y.length===0)throw new MQ0("No resources specified for access check");for(let Q of Y)if(await this.checkResource(Q)){this.grant();return}throw new MQ0(`Access denied to: ${Y.join(", ")}`)}async checkResource(X){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Y={};if(this.connectionId)Y[this.connectionId]=[X];return this.boundAuth.hasPermission(Y)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let X=await this.getToolMeta();if(!X)return!1;let Q=X[SK1]?.public_tool;return Q===!0||Q==="true"}catch{return!1}}granted(){return this._granted}}});function vK1(X){let Y=null;return()=>{if(Y)return Y;return Y=X().catch((Q)=>{throw Y=null,Q}),Y}}class _K1{factory;promise=null;constructor(X){this.factory=X}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(X,Y){return this.getOrCreatePromise().then(X,Y)}catch(X){return this.getOrCreatePromise().catch(X)}finally(X){return this.getOrCreatePromise().finally(X)}}function l7(X){return new _K1(X)}class PQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadPrompts())}async loadPrompts(){let X=await this.proxies.mapSettled(async(G,W)=>{try{let $=(await G.proxy.client.listPrompts()).prompts;if(this.options.selectionMode==="exclusion"){if(G.selectedPrompts&&G.selectedPrompts.length>0){let K=new Set(G.selectedPrompts);$=$.filter((H)=>!K.has(H.name))}}else if(!G.selectedPrompts||G.selectedPrompts.length===0)$=[];else{let K=new Set(G.selectedPrompts);$=$.filter((H)=>K.has(H.name))}return{connectionId:W,prompts:$}}catch(Z){return console.error(`[PromptAggregator] Failed to list prompts for connection ${W}:`,Z),{connectionId:W,prompts:[]}}}),Y=new Set,Q=[],J=new Map;for(let G of X){if(G.status!=="fulfilled")continue;let{connectionId:W,prompts:Z}=G.value;for(let $ of Z){if(Y.has($.name))continue;Y.add($.name),Q.push($),J.set($.name,W)}}return{prompts:Q,mappings:J}}async list(){return{prompts:(await this.cache).prompts}}async get(X){let Q=(await this.cache).mappings.get(X.name);if(!Q)throw Error(`Prompt not found: ${X.name}`);let J=this.proxies.get(Q);if(!J)throw Error(`Connection not found for prompt: ${X.name}`);return await J.proxy.client.getPrompt(X)}}var yK1=()=>{};function md6(X,Y){if(X===Y)return!0;if(!Y.includes("*"))return!1;let Q=Y.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"<<<DOUBLE_STAR>>>").replace(/\*/g,"[^/]*").replace(/<<<DOUBLE_STAR>>>/g,".*");Q=`^${Q}$`;try{return new RegExp(Q).test(X)}catch{return!1}}function bK1(X,Y){return Y.some((Q)=>md6(X,Q))}class TQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadResources())}async loadResources(){let X=await this.proxies.mapSettled(async(G,W)=>{try{let $=(await G.proxy.client.listResources()).resources;if(this.options.selectionMode==="exclusion"){if(G.selectedResources&&G.selectedResources.length>0)$=$.filter((K)=>!bK1(K.uri,G.selectedResources))}else if(!G.selectedResources||G.selectedResources.length===0)$=[];else $=$.filter((K)=>bK1(K.uri,G.selectedResources));return{connectionId:W,resources:$}}catch(Z){if(!(Z instanceof J1)||Z.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list resources for connection ${W}: (defaulting to empty array)`,Z);return{connectionId:W,resources:[]}}}),Y=new Set,Q=[],J=new Map;for(let G of X){if(G.status!=="fulfilled")continue;let{connectionId:W,resources:Z}=G.value;for(let $ of Z){if(Y.has($.uri))continue;Y.add($.uri),Q.push($),J.set($.uri,W)}}return{resources:Q,mappings:J}}async list(){return{resources:(await this.cache).resources}}async read(X){let Q=(await this.cache).mappings.get(X.uri);if(!Q)throw Error(`Resource not found: ${X.uri}`);let J=this.proxies.get(Q);if(!J)throw Error(`Connection not found for resource: ${X.uri}`);return await J.proxy.client.readResource(X)}}var fK1=S(()=>{RX()});class AQ0{proxies;cache;constructor(X){this.proxies=X;this.cache=l7(()=>this.loadResourceTemplates())}async loadResourceTemplates(){let X=await this.proxies.mapSettled(async(Q,J)=>{try{let G=await Q.proxy.client.listResourceTemplates();return{connectionId:J,templates:G.resourceTemplates}}catch(G){if(!(G instanceof J1)||G.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list resource templates for connection ${J}: (defaulting to empty array)`,G);return{connectionId:J,templates:[]}}}),Y=[];for(let Q of X){if(Q.status!=="fulfilled")continue;let{templates:J}=Q.value;for(let G of J)Y.push(G)}return{templates:Y}}async list(){return{resourceTemplates:(await this.cache).templates}}}var hK1=S(()=>{RX()});function cd6(X){let Y=X.slice().sort().join(","),Q=xK1.get(Y);if(!Q){let J=U.object({name:(X.length>0?U.enum(X):U.string()).describe("The name of the tool to execute"),arguments:U.record(U.string(),U.unknown()).default({}).describe("Arguments to pass to the tool")});Q={schema:J,jsonSchema:U.toJSONSchema(J)},xK1.set(Y,Q)}return Q}function lK1(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas.${X.categories.length>0?` Available categories: ${X.categories.join(", ")}.`:""} Total tools: ${Y.length}.`,inputSchema:ld6},handler:async(J)=>{let G=gK1.safeParse(J);if(!G.success)return fB({error:G.error.flatten()});let W=Uf(G.data.query,Y,G.data.limit);return Df({query:G.data.query,results:W.map((Z)=>({name:Z.name,description:Z.description,connection:Z._meta.connectionTitle})),totalAvailable:Y.length})}}}function dK1(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:dd6},handler:async(Q)=>{let J=uK1.safeParse(Q);if(!J.success)return fB({error:J.error.flatten()});let G=zf(J.data.tools,Y);return Df({tools:G.tools,notFound:G.notFound})}}}function nd6(X){let Y=zT(X.tools),Q=Y.map((Z)=>Z.name),J=new Map(Y.map((Z)=>[Z.name,Z])),{schema:G,jsonSchema:W}=cd6(Q);return{tool:{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:W},handler:async(Z)=>{let $=G.safeParse(Z);if(!$.success)return fB({error:$.error.flatten()});let{name:K,arguments:H}=$.data;if(!J.has(K))return{content:[{type:"text",text:`Tool not found: ${K}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return X.callTool(K,H)}}}function id6(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:pd6},handler:async(Q)=>{let J=mK1.safeParse(Q);if(!J.success)return fB({error:J.error.flatten()});let G={...X,tools:Y},W=await Bf(J.data.code,G,J.data.timeoutMs);if(W.error)return fB(W);return Df(W)}}}function pK1(X){let Y=new Map(X.map((J)=>[J.tool.name,J.handler])),Q=X.map((J)=>J.tool.name);return{tools:X.map((J)=>J.tool),callTool:async(J,G)=>{let W=Y.get(J);if(!W)return{content:[{type:"text",text:`Unknown meta-tool: ${J}. Available: ${Q.join(", ")}`}],isError:!0};return W(G)}}}function cK1(X){switch(X){case"smart_tool_selection":return od6;case"code_execution":return rd6;case"passthrough":default:return ad6}}function nK1(X){switch(X){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}var gK1,ld6,uK1,dd6,mK1,pd6,xK1,ad6=(X)=>({tools:X.tools,callTool:(Y,Q)=>X.callTool(Y,Q)}),rd6=(X)=>pK1([lK1(X),dK1(X),id6(X)]),od6=(X)=>pK1([lK1(X),dK1(X),nd6(X)]);var EQ0=S(()=>{r0();BT();gK1=U.object({query:U.string().min(1).describe("Search query to find tools by name or description"),limit:U.number().default(10).describe("Maximum number of results to return")}),ld6=U.toJSONSchema(gK1),uK1=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),dd6=U.toJSONSchema(uK1),mK1=U.object({code:U.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:U.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),pd6=U.toJSONSchema(mK1),xK1=new Map});class jQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadTools())}async loadTools(){let X=await this.proxies.mapSettled(async(K,H)=>{try{let V=(await K.proxy.client.listTools()).tools;if(this.options.selectionMode==="exclusion"){if(K.selectedTools&&K.selectedTools.length>0){let q=new Set(K.selectedTools);V=V.filter((z)=>!q.has(z.name))}}else if(K.selectedTools&&K.selectedTools.length>0){let q=new Set(K.selectedTools);V=V.filter((z)=>q.has(z.name))}return{connectionId:H,connectionTitle:K.connection.title,tools:V}}catch(F){if(!(F instanceof J1)||F.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list tools ${H}: (defaulting to null)`,F);return null}}),Y=new Set,Q=[],J=new Map,G=new Set;for(let K of X){if(K.status!=="fulfilled"||!K.value)continue;let{connectionId:H,connectionTitle:F,tools:V}=K.value;G.add(F);for(let q of V){if(Y.has(q.name))continue;Y.add(q.name),Q.push({...q,_meta:{connectionId:H,connectionTitle:F}}),J.set(q.name,{connectionId:H,originalName:q.name})}}let W=async(K,H)=>{let F=J.get(K);if(!F)return{content:[{type:"text",text:`Tool not found: ${K}`}],isError:!0};let V=this.proxies.get(F.connectionId);if(!V)return{content:[{type:"text",text:`Connection not found for tool: ${K}`}],isError:!0};return await V.proxy.client.callTool({name:F.originalName,arguments:H})},$=cK1(this.options.strategy)({tools:Q,callTool:W,categories:Array.from(G).sort()});return{tools:Q,mappings:J,strategyResult:$}}async list(){return{tools:(await this.cache).strategyResult.tools}}async call(X){return(await this.cache).strategyResult.callTool(X.name,X.arguments??{})}async callStreamable(X,Y){let Q=await this.cache,J=Q.mappings.get(X);if(J){let W=this.proxies.get(J.connectionId);if(W)return W.proxy.callStreamableTool(J.originalName,Y)}let G=await Q.strategyResult.callTool(X,Y);return new Response(JSON.stringify(G),{headers:{"Content-Type":"application/json"}})}}var iK1=S(()=>{RX();EQ0()});function aK1(X,Y){if(X.connection_type!=="VIRTUAL")return!1;return bK(X.connection_url)===Y}async function sd6(X,Y){let Q=await kB.create(X.connections,Y),J=new jQ0(Q,{selectionMode:X.toolSelectionMode,strategy:X.toolSelectionStrategy}),G=new TQ0(Q,{selectionMode:X.toolSelectionMode}),W=new AQ0(Q),Z=new PQ0(Q,{selectionMode:X.toolSelectionMode});return{client:{listTools:J.list.bind(J),callTool:J.call.bind(J),listResources:G.list.bind(G),readResource:G.read.bind(G),listResourceTemplates:W.list.bind(W),listPrompts:Z.list.bind(Z),getPrompt:Z.get.bind(Z)},callStreamableTool:J.callStreamable.bind(J)}}async function cT(X,Y,Q){let J;if(X.tool_selection_mode==="exclusion"){let Z=(await Y.storage.connections.list(X.organization_id)).filter((K)=>K.status==="active"&&!aK1(K,X.id)),$=new Map;for(let K of X.connections)$.set(K.connection_id,{selectedTools:K.selected_tools,selectedResources:K.selected_resources,selectedPrompts:K.selected_prompts});J=[];for(let K of Z){let H=$.get(K.id);if(H===void 0)J.push({connection:K,selectedTools:null,selectedResources:null,selectedPrompts:null});else if((H.selectedTools===null||H.selectedTools.length===0)&&(H.selectedResources===null||H.selectedResources.length===0)&&(H.selectedPrompts===null||H.selectedPrompts.length===0));else J.push({connection:K,selectedTools:H.selectedTools,selectedResources:H.selectedResources,selectedPrompts:H.selectedPrompts})}}else{let W=X.connections.map(($)=>$.connection_id),Z=[];for(let $ of W){let K=await Y.storage.connections.findById($);if(K&&K.status==="active"&&!aK1(K,X.id))Z.push(K)}J=Z.map(($)=>{let K=X.connections.find((H)=>H.connection_id===$.id);return{connection:$,selectedTools:K?.selected_tools??null,selectedResources:K?.selected_resources??null,selectedPrompts:K?.selected_prompts??null}})}let G={connections:J,toolSelectionMode:X.tool_selection_mode,toolSelectionStrategy:Q};return sd6(G,Y)}var rK1=S(()=>{g7();yK1();fK1();hK1();iK1()});var CQ0=S(()=>{rK1()});async function oK1(X){if(!X.refreshToken)return{success:!1,error:"No refresh token available"};if(!X.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!X.clientId)return{success:!1,error:"No client ID available"};try{let Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:X.refreshToken,client_id:X.clientId});if(X.clientSecret)Y.set("client_secret",X.clientSecret);if(X.scope)Y.set("scope",X.scope);let Q=await fetch(X.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Y.toString()});if(!Q.ok){let G=await Q.text();console.error(`[TokenRefresh] Failed to refresh token: ${Q.status}`,G);try{let W=JSON.parse(G);return{success:!1,error:W.error_description||W.error||`Token refresh failed: ${Q.status}`}}catch{return{success:!1,error:`Token refresh failed: ${Q.status}`}}}let J=await Q.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||X.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Y){return console.error("[TokenRefresh] Error refreshing token:",Y),{success:!1,error:Y instanceof Error?Y.message:"Token refresh failed"}}}function td6(X){return new Proxy(X,{get(Q,J,G){if(J==="close")return async()=>{};if(J==="__actualClient")return Q;return Reflect.get(Q,J,G)}})}async function eK1(X,Y){let Q=XV.get(X.id);if(Q?.status==="connected"&&Q.stableClient)return Q.stableClient;if(Q?.connectPromise&&(Q.status==="connecting"||Q.status==="reconnecting"))return Q.connectPromise;let J=Q?.status==="failed",G=Q??{transport:null,client:null,stableClient:null,config:X,status:"connecting",connectPromise:null};if(!Q)XV.set(X.id,G);return G.status=J?"reconnecting":"connecting",G.connectPromise=(async()=>{try{console.log(`[StableStdio] ${J?"Respawning":"Spawning"}: ${X.id} (${X.command} ${X.args?.join(" ")??""})`);let W=new HT({command:X.command,args:X.args,env:X.env,cwd:X.cwd,stderr:"pipe"});G.transport=W;let Z=Y??new PQ({name:`mesh-stdio-${X.id}`,version:"1.0.0"});G.client=Z,G.stableClient=td6(Z),Z.onclose=()=>{console.log(`[StableStdio] Connection closed unexpectedly: ${X.id}`),G.status="failed",G.connectPromise=null};let $=X.name||X.id,K="\x1B[2m",H="\x1B[0m";W.stderr?.on("data",(q)=>{let z=q.toString().trimEnd();if(z)console.error(`${z} ${K}[${$}]${H}`)});let F=new AbortController,V=setTimeout(()=>F.abort(),30000);try{await Promise.race([Z.connect(W),new Promise((q,z)=>{F.signal.addEventListener("abort",()=>{z(Error("Stdio connection timeout after 30s"))})})])}finally{clearTimeout(V)}return G.status="connected",console.log(`[StableStdio] Connected: ${X.id}`),G.stableClient}catch(W){console.error(`[StableStdio] Failed to connect ${X.id}:`,W),G.status="failed",G.connectPromise=null;try{await G.transport?.close()}catch{}throw W}})(),G.connectPromise}async function ed6(X){let Y=XV.get(X);if(!Y)return;console.log(`[StableStdio] Force closing: ${X}`);try{if(Y.client)Y.client.onclose=void 0;await Y.client?.close()}catch{}XV.delete(X)}async function Xp6(){console.log(`[StableStdio] Closing all connections (${XV.size})`);let X=Array.from(XV.keys()).map((Y)=>ed6(Y));await Promise.allSettled(X),XV.clear()}var sK1="__mesh_stable_stdio_pool__",XV,tK1="__mesh_stable_stdio_shutdown_registered__";var XH1=S(()=>{_F();PY0();XV=globalThis[sK1]??(globalThis[sK1]=new Map);if(!globalThis[tK1]){globalThis[tK1]=!0;let X=async(Y)=>{await Xp6(),process.exit(Y==="SIGINT"?130:143)};process.on("SIGINT",()=>X("SIGINT")),process.on("SIGTERM",()=>X("SIGTERM"))}});async function mf(X,Y){let Q=X.get("meshContext");try{let J=X.req.header("x-org-id"),G=X.req.header("x-org-slug"),W=J?J:G?await Q.db.selectFrom("organization").select("id").where("slug","=",G).executeTakeFirst().then((z)=>z?.id):null,Z=Y?await Q.storage.virtualMcps.findById(Y):W?aX0(W):null;if(!Z)return X.json({error:"Agent not found"},404);if(W&&Z.organization_id!==W)return X.json({error:"Agent not found"},404);if(Z.status!=="active")return X.json({error:`Agent is inactive: ${Z.id}`},503);Q.connectionId=Z.id;let $=await Q.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z.organization_id).executeTakeFirst();if($)Q.organization={id:$.id,slug:$.slug,name:$.name};let K=X.req.query("mode"),H=nK1(K),F=await cT(Z,Q,H),V=new uF({name:`mcp-virtual-mcp-${Z.title}`,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}},instructions:Z.metadata?.instructions??void 0}),q=new mF({enableJsonResponse:X.req.header("Accept")?.includes("application/json")??!1});await V.connect(q),V.server.setRequestHandler(EK,async(z)=>{return F.client.listTools()}),V.server.setRequestHandler(y7,async(z)=>{return await F.client.callTool(z.params)}),V.server.setRequestHandler(wK,async()=>{return F.client.listResources()}),V.server.setRequestHandler(PK,async(z)=>{return F.client.readResource(z.params)}),V.server.setRequestHandler(MK,async()=>{return F.client.listResourceTemplates()}),V.server.setRequestHandler(TK,async()=>{return F.client.listPrompts()}),V.server.setRequestHandler(AK,async(z)=>{return F.client.getPrompt(z.params)});try{return await q.handleRequest(X.req.raw)}finally{try{await q.close?.()}catch{}}}catch(J){let G=J;return console.error("[virtual-mcp] Error handling virtual MCP request:",G),X.json({error:"Internal server error",message:G.message},500)}}var IQ0,YH1;var RQ0=S(()=>{$f();Kf();RX();ZG();CQ0();EQ0();YT();IQ0=new ZX;IQ0.all("/gateway/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return mf(X,Y)});IQ0.all("/virtual-mcp/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return mf(X,Y)});YH1=IQ0});async function QH1(X,Y){return(await Y.storage.connections.findById(X))?.connection_url??null}function Yp6(X){let Y=X.toLowerCase();return Y.includes("resource_metadata=")||Y.includes("invalid_token")||Y.includes("oauth")}async function JH1(X,Y={}){try{let Q=await fetch(X,{method:"POST",headers:{...Y,"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"mcp-mesh-proxy",version:"1.0.0"}}})});if(Q.status===401){let J=Q.headers.get("WWW-Authenticate");if(J){if(Yp6(J))return J}}return null}catch{return null}}async function df(X){let Q=new URL(X).pathname;if(Q.endsWith("/"))Q=Q.slice(0,-1);let J=new URL(X);J.pathname=`${Q}/.well-known/oauth-protected-resource`;let G=await fetch(J.toString(),{method:"GET",headers:{Accept:"application/json"}});if(G.ok)return G;if(!SQ0.includes(G.status))return G;let W=new URL(X);if(W.pathname=`/.well-known/oauth-protected-resource${Q}`,G=await fetch(W.toString(),{method:"GET",headers:{Accept:"application/json"}}),!SQ0.includes(G.status))return G;let Z=new URL(X);return Z.pathname="/.well-known/oauth-protected-resource",G=await fetch(Z.toString(),{method:"GET",headers:{Accept:"application/json"}}),G}async function Qp6(X,Y){let Q=await QH1(X,Y);if(!Q)return null;let J;try{J=new URL(Q).origin}catch{return null}try{let G=await df(Q);if(G.ok){let W=await G.json();if(W.authorization_servers?.[0])return W.authorization_servers[0]}}catch{}return J}async function GH1(X){let Y=X.get("meshContext");if(!Y)Y=await dK.create(X.req.raw),X.set("meshContext",Y);return Y}async function WH1({error:X,reqUrl:Y,connectionId:Q,connectionUrl:J,headers:G}){let W=X.message?.toLowerCase()??"";if(!(X.status===401||X.code===401||X.message?.includes("401")||W.includes("unauthorized")||W.includes("invalid_token")||W.includes("api key required")||W.includes("api-key required")))return null;if(Boolean(await JH1(J,G)))return new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Y.origin}/mcp/${Q}/.well-known/oauth-protected-resource"`}});return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required but server does not support OAuth"}),{status:401,headers:{"Content-Type":"application/json"}})}async function kQ0(X){let Q=new URL(X).pathname;if(Q.endsWith("/"))Q=Q.slice(0,-1);let J=Q!==""&&Q!=="/",G=[];if(J){let Z=new URL(X);Z.pathname=`/.well-known/oauth-authorization-server${Q}`,G.push(Z);let $=new URL(X);$.pathname=`/.well-known/openid-configuration${Q}`,G.push($);let K=new URL(X);K.pathname=`${Q}/.well-known/openid-configuration`,G.push(K)}else{let Z=new URL(X);Z.pathname="/.well-known/oauth-authorization-server",G.push(Z);let $=new URL(X);$.pathname="/.well-known/openid-configuration",G.push($)}let W=null;for(let Z of G){if(W=await fetch(Z.toString(),{method:"GET",headers:{Accept:"application/json"}}),W.ok)return W;if(W.status!==404&&W.status!==401)return W}return W}var lf,SQ0,pf=(X)=>{if(!(X.hostname==="localhost"||X.hostname==="127.0.0.1"))X.protocol="https:";return X},ZH1=async(X)=>{let Y=X.req.param("connectionId"),Q=await GH1(X),J=await QH1(Y,Q);if(!J)return X.json({error:"Connection not found"},404);let G=pf(new URL(X.req.url)),W=`${G.origin}/mcp/${Y}`,Z=`${G.origin}/oauth-proxy/${Y}`;try{let $=await df(J);if(!$.ok&&SQ0.includes($.status)){if(await JH1(J))return new Response(JSON.stringify({resource:W,authorization_servers:[Z],bearer_methods_supported:["header"],scopes_supported:["*"]}),{status:200,headers:{"Content-Type":"application/json"}});return new Response($.body,{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}})}if(!$.ok)return new Response($.body,{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}});let H={...await $.json(),resource:W,authorization_servers:[Z]};return new Response(JSON.stringify(H),{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}})}catch($){let K=$;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",K),X.json({error:"Failed to proxy OAuth metadata",message:K.message},502)}},$H1;var cf=S(()=>{ZG();nf();lf=new ZX,SQ0=[404,401,406];lf.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(X)=>ZH1(X));lf.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(X)=>ZH1(X));lf.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=await GH1(X),J=await Qp6(Y,Q);if(!J)return X.json({error:"Connection not found or no auth server"},404);try{let G=await kQ0(J);if(!G.ok)return new Response(G.body,{status:G.status,statusText:G.statusText,headers:{"Content-Type":"application/json"}});let W=await G.json(),$=`${pf(new URL(X.req.url)).origin}/oauth-proxy/${Y}`,K={...W,authorization_endpoint:W.authorization_endpoint?`${$}/authorize`:void 0,token_endpoint:W.token_endpoint?`${$}/token`:void 0,registration_endpoint:W.registration_endpoint?`${$}/register`:void 0};return new Response(JSON.stringify(K),{status:200,headers:{"Content-Type":"application/json"}})}catch(G){let W=G;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),X.json({error:"Failed to proxy auth server metadata",message:W.message},502)}});$H1=lf});function Jp6(X){if(!X.isError)return;let Y=X.content;if(!Array.isArray(Y))return;for(let Q of Y)if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text;return}function Gp6(X){if(!X)return;let Y=X._meta;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let Q=Y.properties;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let J={};for(let[G,W]of Object.entries(Q))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}function Wp6(X,Y){if(!X&&!Y)return;if(!X)return Y;if(!Y)return X;return{...Y,...X}}function KH1(X){if(X&&typeof X==="object"&&!Array.isArray(X)){let Y=X,Q=Y.structuredContent;if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q;return Y}return{value:X}}async function Zp6(X,Y){let Q=X.body;if(!Q)return{text:"",truncated:!1};let J=Q.getReader(),G=new TextDecoder,W=!1,Z=0,$=[];try{while(!0){let{value:K,done:H}=await J.read();if(H)break;if(K){if(Z+=K.byteLength,Z>Y){W=!0;let F=Y-(Z-K.byteLength);if(F>0)$.push(G.decode(K.slice(0,F),{stream:!0}));break}$.push(G.decode(K,{stream:!0}))}}}finally{J.releaseLock()}return $.push(G.decode()),{text:$.join(""),truncated:W}}async function nT(X){let{ctx:Y,enabled:Q}=X,J=X.organizationId??Y.organization?.id;if(!Q||!J)return;let G=Gp6(X.request.params.arguments),W=Wp6(Y.metadata.properties,G);await Y.storage.monitoring.log({organizationId:J,connectionId:X.connectionId,connectionTitle:X.connectionTitle,toolName:X.request.params.name,input:X.request.params.arguments??{},output:X.output,isError:X.isError,errorMessage:X.errorMessage,durationMs:X.durationMs,timestamp:new Date,userId:Y.auth.user?.id||Y.auth.apiKey?.userId||null,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent,virtualMcpId:X.virtualMcpId,properties:W})}function HH1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W}=X;return async(Z,$)=>{let K=Date.now();try{let H=await $(),F=Date.now()-K;return await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:KH1(H),isError:Boolean(H.isError),errorMessage:Jp6(H),durationMs:F}),H}catch(H){let F=H,V=Date.now()-K;throw await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:F.message,durationMs:V}),H}}}function FH1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W}=X;return async(Z,$)=>{let K=Date.now();try{let H=await $(),F=Y.organization?.id;if(Q&&F){let V=H.clone();(async()=>{try{let{text:q,truncated:z}=await Zp6(V,262144),D=Date.now()-K,N=V.headers.get("content-type")??"",L=q;if(N.includes("application/json"))try{L=q.length?JSON.parse(q):null}catch{L=q}let w=H.status>=400,C=w&&L&&typeof L==="object"&&"error"in L?L.error:void 0,A=typeof C==="string"&&C?C:w&&typeof L==="string"&&L.trim()?L.slice(0,500):w?`HTTP ${H.status} ${H.statusText}`.trim():z?"Response body truncated to 262144 bytes":void 0;await nT({ctx:Y,enabled:Q,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:KH1(L),isError:w,errorMessage:A,durationMs:D})}catch(q){let z=Date.now()-K;await nT({ctx:Y,enabled:Q,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${q.message}`,durationMs:z})}})()}return H}catch(H){let F=H,V=Date.now()-K;throw await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:F.message,durationMs:V}),H}}}function $p6(X,Y,Q){return async(J,G)=>{try{let W=J.params.name,Z=async()=>{let{tools:K}=await Q();return K.find((F)=>F.name===W)?._meta};return await new lK(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,W,X.boundAuth,X.auth.user?.role,Y,Z).check(W),await G()}catch(W){return{content:[{type:"text",text:`Authorization failed: ${W.message}`}],isError:!0}}}}function Kp6(X,Y,Q){return async(J,G)=>{try{let W=J.params.name,Z=async()=>{let{tools:K}=await Q();return K.find((F)=>F.name===W)?._meta};return await new lK(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,W,X.boundAuth,X.auth.user?.role,Y,Z).check(W),await G()}catch(W){return new Response(JSON.stringify({error:`Authorization failed: ${W.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function VH1(X,Y,{superUser:Q}){let J=typeof X==="string"?await Y.storage.connections.findById(X,Y.organization?.id):X;if(!J)throw Error("Connection not found");let G=J?.id;if(Y.organization&&J.organization_id!==Y.organization.id)throw Error("Connection does not belong to the active organization");if(Y.organization??={id:J.organization_id},J.status!=="active")throw Error(`Connection inactive: ${J.status}`);let W,Z=Y.auth.user?.connectionId,$=vK1(async()=>{let k=V90(J.configuration_state,J.configuration_scopes),h=Y.auth.user?.id??Y.auth.apiKey?.userId;if(!h){console.error("User ID required to issue configuration token");return}try{W=await EK1({sub:h,user:{id:h},metadata:{state:J.configuration_state??void 0,meshUrl:process.env.MESH_URL??Y.baseUrl,connectionId:G,organizationId:Y.organization?.id},permissions:k})}catch(t){console.error("Failed to issue configuration token:",t)}}),K=async()=>{await $();let k={...Z?{"x-caller-id":Z}:{},...Y.metadata.wellKnownForwardableHeaders??{},"x-request-id":Y.metadata.requestId},h=null,t=new TZ(Y.db,Y.vault),l=await t.get(G);if(l){let J0=!!l.refreshToken&&!!l.tokenEndpoint;if(t.isExpired(l,J0?300000:0))if(J0){console.log(`[Proxy] Token expired for ${G}, attempting refresh`);let Y0=await oK1(l);if(Y0.success&&Y0.accessToken)await t.upsert({connectionId:G,accessToken:Y0.accessToken,refreshToken:Y0.refreshToken??l.refreshToken,scope:Y0.scope??l.scope,expiresAt:Y0.expiresIn?new Date(Date.now()+Y0.expiresIn*1000):null,clientId:l.clientId,clientSecret:l.clientSecret,tokenEndpoint:l.tokenEndpoint}),h=Y0.accessToken,console.log(`[Proxy] Token refreshed for ${G}`);else await t.delete(G),console.error(`[Proxy] Token refresh failed for ${G}: ${Y0.error}`)}else await t.delete(G),console.log(`[Proxy] Token expired without refresh capability for ${G}`);else h=l.accessToken}if(!h&&J.connection_token)h=J.connection_token;if(h)k.Authorization=`Bearer ${h}`;if(W)k["x-mesh-token"]=W;return k},H=J.connection_type==="STDIO",F=fF(J.connection_headers)?J.connection_headers:null,V=!H?J.connection_headers:null,q=async()=>{let k=new PQ({name:"mcp-mesh-proxy",version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});switch(J.connection_type){case"STDIO":{if(process.env.UNSAFE_ALLOW_STDIO_TRANSPORT!=="true")throw Error("STDIO connections are disabled in production. Set UNSAFE_ALLOW_STDIO_TRANSPORT=true to enable.");if(!F)throw Error("STDIO connection missing parameters");return eK1({id:G,name:J.title,command:F.command,args:F.args,env:F.envVars,cwd:F.cwd},k)}case"HTTP":case"Websocket":{if(!J.connection_url)throw Error(`${J.connection_type} connection missing URL`);let h=await K();if(V?.headers)Object.assign(h,V.headers);let t=new x7(new URL(J.connection_url),{requestInit:{headers:h}});return await k.connect(t),k}case"SSE":{if(!J.connection_url)throw Error("SSE connection missing URL");let h=await K();if(V?.headers)Object.assign(h,V.headers);let t=new gF(new URL(J.connection_url),{requestInit:{headers:h}});return await k.connect(t),k}case"VIRTUAL":{let h=bK(J.connection_url);if(!h)throw Error("VIRTUAL connection missing virtual MCP ID in connection_url");let t=await Y.storage.virtualMcps.findById(h);if(!t)throw Error(`Virtual MCP not found: ${h}`);let l=await cT(t,Y,"passthrough");return{callTool:(J0)=>l.client.callTool(J0),listTools:()=>l.client.listTools(),listResources:()=>l.client.listResources(),readResource:(J0)=>l.client.readResource(J0),listResourceTemplates:()=>l.client.listResourceTemplates(),listPrompts:()=>l.client.listPrompts(),getPrompt:(J0)=>l.client.getPrompt(J0),close:async()=>{},getServerCapabilities:()=>({tools:{},resources:{},prompts:{}}),getInstructions:()=>t.metadata?.instructions??void 0}}default:throw Error(`Unknown connection type: ${J.connection_type}`)}},z=async()=>{if(J.tools&&J.tools.length>0)return{tools:J.tools.map((h)=>({name:h.name,description:h.description,inputSchema:h.inputSchema,outputSchema:h.outputSchema,annotations:h.annotations,_meta:h._meta}))};let k;try{return k=await q(),await k.listTools()}finally{k?.close().catch(console.error)}},D=Q?async(k,h)=>await h():$p6(Y,G,z),N=Q?async(k,h)=>await h():Kp6(Y,G,z),L=Y.connectionId&&Y.connectionId!==G?Y.connectionId:void 0,w={enabled:XL0().enabled,connectionId:G,connectionTitle:J.title,virtualMcpId:L,ctx:Y},C=HH1(w),A=FH1(w),T=VT(C,D),P=VT(A,N),j=async(k)=>{return T(k,async()=>{let h=await q(),t=Date.now(),l={...k.params};if(l.arguments&&"_meta"in l.arguments){let{_meta:J0,...V0}=l.arguments;l.arguments=V0}return await Y.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":G,"tool.name":k.params.name,"request.id":Y.metadata.requestId}},async(J0)=>{try{let V0=await h.callTool(l,void 0,{timeout:vQ0}),Y0=Date.now()-t;return Y.meter.createHistogram("connection.proxy.duration").record(Y0,{"connection.id":G,"tool.name":k.params.name,status:"success"}),Y.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":G,"tool.name":k.params.name,status:"success"}),J0.end(),V0}catch(V0){let Y0=V0,U0=Date.now()-t;throw Y.meter.createHistogram("connection.proxy.duration").record(U0,{"connection.id":G,"tool.name":k.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":G,"tool.name":k.params.name,error:Y0.message}),J0.recordException(Y0),J0.end(),V0}finally{h.close().catch(console.error)}})})};return{fetch:async(k)=>{let h=new URL(k.url),t;try{t=await q()}catch(P0){let v0=J.connection_url?await WH1({error:P0,reqUrl:h,connectionId:G,connectionUrl:J.connection_url,headers:await K()}):null;if(v0)return v0;throw P0}let l=t.getServerCapabilities(),J0=t.getInstructions(),V0=l??{tools:{},resources:{},prompts:{}},Y0=new uF({name:"mcp-mesh",version:"1.0.0"},{capabilities:V0,instructions:J0}),U0=new mF({enableJsonResponse:k.headers.get("Accept")?.includes("application/json")??!1});if(await Y0.connect(U0),Y0.server.setRequestHandler(EK,()=>t.listTools()),Y0.server.setRequestHandler(y7,j),V0.resources)Y0.server.setRequestHandler(wK,()=>t.listResources()),Y0.server.setRequestHandler(PK,(P0)=>t.readResource(P0.params)),Y0.server.setRequestHandler(MK,()=>t.listResourceTemplates());if(V0.prompts)Y0.server.setRequestHandler(TK,()=>t.listPrompts()),Y0.server.setRequestHandler(AK,(P0)=>t.getPrompt(P0.params));try{return await U0.handleRequest(k)}finally{try{await t.close()}catch{}try{await U0.close?.()}catch{}}},client:{callTool:(k)=>{return j({method:"tools/call",params:k})},listTools:z,listResources:async()=>{let k;try{return k=await q(),await k.listResources()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{resources:[]};throw h}finally{k?.close().catch(console.error)}},readResource:async(k)=>{let h;try{return h=await q(),await h.readResource(k)}finally{h?.close().catch(console.error)}},listResourceTemplates:async()=>{let k;try{return k=await q(),await k.listResourceTemplates()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{resourceTemplates:[]};throw h}finally{k?.close().catch(console.error)}},listPrompts:async()=>{let k;try{return k=await q(),await k.listPrompts()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{prompts:[]};throw h}finally{k?.close().catch(console.error)}},getPrompt:async(k)=>{let h;try{return h=await q(),await h.getPrompt(k)}finally{h?.close().catch(console.error)}}},callStreamableTool:async(k,h)=>{if(J.connection_type==="VIRTUAL"){let J0=await j({method:"tools/call",params:{name:k,arguments:h}});return new Response(JSON.stringify(J0),{headers:{"Content-Type":"application/json"}})}if(!J.connection_url)throw Error("Streamable tools require HTTP connection with URL");let t=J.connection_url,l={method:"tools/call",params:{name:k,arguments:h}};return P(l,async()=>{let J0=await K();if(V?.headers)Object.assign(J0,V.headers);let V0=new URL(t);return V0.pathname=V0.pathname.replace(/\/$/,"")+`/call-tool/${l.params.name}`,await Y.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":G,"tool.name":l.params.name,"request.id":Y.metadata.requestId}},async(Y0)=>{let U0=Date.now();try{let P0=await fetch(V0.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(l.params.arguments),headers:{...J0,"Content-Type":"application/json"}}),v0=Date.now()-U0;return Y.meter.createHistogram("connection.proxy.streamable.duration").record(v0,{"connection.id":G,"tool.name":l.params.name,status:P0.ok?"success":"error"}),Y.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":G,"tool.name":l.params.name,status:P0.ok?"success":"error"}),Y0.end(),P0}catch(P0){let v0=P0,W1=Date.now()-U0;throw Y.meter.createHistogram("connection.proxy.streamable.duration").record(W1,{"connection.id":G,"tool.name":l.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":G,"tool.name":l.params.name,error:v0.message}),Y0.recordException(v0),Y0.end(),P0}})})}}}async function qH1(X,Y){return VH1(X,Y,{superUser:!1})}async function UH1(X,Y){return VH1(X,Y,{superUser:!0})}var af,vQ0=300000,zH1=(X,Y)=>{if(X.message.includes("not found"))return Y.json({error:X.message},404);if(X.message.includes("does not belong to the active organization"))return Y.json({error:"Connection not found"},404);if(X.message.includes("inactive"))return Y.json({error:X.message},503);return Y.json({error:"Internal server error",message:X.message},500)},BH1;var iT=S(()=>{CQ0();q90();fS();XH1();jf();g7();_F();Jf();LB();$f();Kf();RX();ZG();BQ0();uf();RQ0();cf();af=new ZX;af.all("/",async(X)=>{return mf(X,void 0)});af.all("/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=X.get("meshContext");try{return await(await Q.createMCPProxy(Y)).fetch(X.req.raw)}catch(J){return zH1(J,X)}});af.all("/:connectionId/call-tool/:toolName",async(X)=>{let Y=X.req.param("connectionId"),Q=X.req.param("toolName"),J=X.get("meshContext");try{let W=await(await J.createMCPProxy(Y)).client.callTool({name:Q,arguments:await X.req.json()});if(W instanceof Response)return W;if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(G){return zH1(G,X)}});BH1=af});class _Q0{db;constructor(X){this.db=X}async create(X){let Y=X.id??GX("thrd"),Q=new Date().toISOString();if(!X.organizationId)throw Error("organizationId is required");if(!X.createdBy)throw Error("createdBy is required");if(!X.title)X.title="New Thread - "+Q;let J={id:Y,organization_id:X.organizationId,title:X.title,description:X.description??null,created_at:Q,updated_at:Q,created_by:X.createdBy,updated_by:X.updatedBy??null},G=await this.db.insertInto("threads").values(J).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(G)}async get(X){let Y=await this.db.selectFrom("threads").selectAll().where("id","=",X).executeTakeFirst();return Y?this.threadFromDbRow(Y):null}async update(X,Y){let J={updated_at:new Date().toISOString()};if(Y.title!==void 0)J.title=Y.title;if(Y.description!==void 0)J.description=Y.description;if(Y.updatedBy!==void 0)J.updated_by=Y.updatedBy;if(Y.hidden!==void 0)J.hidden=Y.hidden;await this.db.updateTable("threads").set(J).where("id","=",X).execute();let G=await this.get(X);if(!G)throw Error("Thread not found after update");return G}async delete(X){await this.db.deleteFrom("threads").where("id","=",X).execute()}async list(X,Y,Q){let J=this.db.selectFrom("threads").selectAll().where("organization_id","=",X).where("hidden","=",!1).orderBy("updated_at","desc");if(Y)J=J.where("created_by","=",Y);let G=this.db.selectFrom("threads").select(($)=>$.fn.count("id").as("count")).where("organization_id","=",X).where("hidden","=",!1);if(Y)G=G.where("created_by","=",Y);if(Q?.limit)J=J.limit(Q.limit);if(Q?.offset)J=J.offset(Q.offset);let[W,Z]=await Promise.all([J.execute(),G.executeTakeFirst()]);return{threads:W.map(($)=>this.threadFromDbRow($)),total:Number(Z?.count||0)}}async saveMessages(X){let Y=new Date().toISOString(),Q=X[0]?.threadId;if(!Q)throw Error("threadId is required when creating multiple messages");let J=X.find((W)=>W.threadId!==Q);if(J)throw Error(`All messages must target the same thread. Expected threadId "${Q}", but message "${J.id}" has threadId "${J.threadId}"`);let G=X.map((W)=>({id:W.id,thread_id:Q,metadata:W.metadata?JSON.stringify(W.metadata):null,parts:JSON.stringify(W.parts),role:W.role,created_at:W.createdAt??Y,updated_at:Y}));await this.db.transaction().execute(async(W)=>{await W.insertInto("thread_messages").values(G).execute(),await W.updateTable("threads").set({updated_at:Y}).where("id","=",Q).execute()})}async listMessages(X,Y){let Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",X).orderBy("created_at","asc").orderBy("id","asc"),J=this.db.selectFrom("thread_messages").select((Z)=>Z.fn.count("id").as("count")).where("thread_id","=",X);if(Y?.limit)Q=Q.limit(Y.limit);if(Y?.offset)Q=Q.offset(Y.offset);let[G,W]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:G.map((Z)=>this.messageFromDbRow(Z)),total:Number(W?.count||0)}}threadFromDbRow(X){return{id:X.id,organizationId:X.organization_id,title:X.title,description:X.description,createdAt:typeof X.created_at==="string"?X.created_at:X.created_at.toISOString(),updatedAt:typeof X.updated_at==="string"?X.updated_at:X.updated_at.toISOString(),createdBy:X.created_by,updatedBy:X.updated_by,hidden:X.hidden}}messageFromDbRow(X){let Y,Q;try{Y=X.metadata?JSON.parse(X.metadata):void 0}catch(J){console.error(`Failed to parse metadata for message ${X.id}:`,X.metadata,J),Y=void 0}try{Q=typeof X.parts==="string"?JSON.parse(X.parts):X.parts}catch(J){console.error(`Failed to parse parts for message ${X.id}:`,X.parts,J),Q=[]}return{id:X.id,threadId:X.thread_id,metadata:Y,parts:Q,role:X.role,createdAt:typeof X.created_at==="string"?X.created_at:X.created_at.toISOString(),updatedAt:typeof X.updated_at==="string"?X.updated_at:X.updated_at.toISOString()}}}var DH1=S(()=>{LZ()});function Hp6(X){if(!X)return;try{let Y=JSON.parse(X);if(typeof Y!=="object"||Y===null||Array.isArray(Y))return;let Q={};for(let[J,G]of Object.entries(Y))if(typeof G==="string")Q[J]=G;return Object.keys(Q).length>0?Q:void 0}catch{return}}function Fp6(X,Y){for(let[Q,J]of Object.entries(Y)){let G=X[Q];if(!G||G.length===0){let W=X["*"];if(!W||W.length===0)return!1;if(W.includes("*"))continue;for(let Z of J)if(!W.includes(Z))return!1;continue}if(G.includes("*"))continue;for(let W of J)if(!G.includes(W))return!1}return!0}function Vp6(X){let{auth:Y,headers:Q,role:J,permissions:G,userId:W}=X,Z=Y.api.hasPermission;return{hasPermission:async($)=>{if(J&&e90.includes(J))return!0;if(G)return Fp6(G,$);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:Q,body:{permission:$}}))?.success===!0)return!0;let H={};for(let V of Object.keys($))H[V]=["*"];return(await Z({headers:Q,body:{permission:H}}))?.success===!0}catch(K){return console.error("[Auth] Permission check failed:",K),!1}},organization:{create:async($)=>{return Y.api.createOrganization({headers:Q,body:$})},update:async($)=>{return Y.api.updateOrganization({headers:Q,body:$})},delete:async($)=>{await Y.api.deleteOrganization({headers:Q,body:{organizationId:$}})},get:async($)=>{return Y.api.getFullOrganization({headers:Q,query:$?{organizationId:$}:void 0})},list:async($)=>{return Y.api.listOrganizations({headers:Q,query:$?{userId:$}:void 0})},addMember:async($)=>{return Y.api.addMember({headers:Q,body:$})},removeMember:async($)=>{await Y.api.removeMember({headers:Q,body:$})},listMembers:async($)=>{return Y.api.listMembers({headers:Q,query:$?{organizationId:$.organizationId,limit:$.limit,offset:$.offset}:void 0})},updateMemberRole:async($)=>{return Y.api.updateMemberRole({headers:Q,body:$})}},apiKey:{create:async($)=>{return Y.api.createApiKey({body:{...$,userId:W}})},list:async()=>{return Y.api.listApiKeys({headers:Q})},update:async($)=>{return Y.api.updateApiKey({body:{...$,userId:W}})},delete:async($)=>{await Y.api.deleteApiKey({headers:Q,body:{keyId:$}})}}}}async function qp6(X,Y,Q){if(e90.includes(Q))return;let J=await X.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",Y).where("role","=",Q).executeTakeFirst();if(!J?.permission)return;try{return JSON.parse(J.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${Q}`);return}}async function Up6(X,Y,Q,J=OH1){let G=X.headers.get("Authorization");try{let W=new Headers(X.headers);W.set("X-MCP-Session-Auth","true");let Z=await J.measure("auth_get_mcp_session",()=>Y.api.getMcpSession({headers:W}));if(Z){let $=Z.userId,K=await J.measure("auth_query_membership",()=>Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",$).executeTakeFirst()),H=K?.role,F=K?{id:K.orgId,slug:K.orgSlug,name:K.orgName}:void 0,V;if(K&&H)V=await J.measure("auth_fetch_role_permissions",()=>qp6(Q,K.organizationId,H));return{user:{id:$,role:H},role:H,permissions:V,organization:F}}}catch(W){console.error("[Auth] OAuth session check failed:",W)}if(G?.startsWith("Bearer ")){let W=G.replace("Bearer ","").trim();try{let Z=await J.measure("auth_verify_mesh_jwt",()=>jK1(W));if(Z){let $,K=Z.metadata?.organizationId;if(Z.sub&&K)$=(await J.measure("auth_query_membership",()=>Q.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",K).executeTakeFirst()))?.role;return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:$},role:$,permissions:Z.permissions,organization:Z.metadata?.organizationId?{id:Z.metadata?.organizationId}:void 0}}}catch{}try{let Z=await J.measure("auth_verify_api_key",()=>Y.api.verifyApiKey({body:{key:W}}));if(Z?.valid&&Z.key){let $=Z.key.metadata?.organization,K=Z.key.permissions,H,F=Z.key.userId;if(F&&$?.id)H=(await J.measure("auth_query_membership",()=>Q.selectFrom("member").select(["member.role"]).where("member.userId","=",F).where("member.organizationId","=",$.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:H},role:H,permissions:K,organization:$?{id:$.id,slug:$.slug,name:$.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let W=await J.measure("auth_get_session",()=>Y.api.getSession({headers:X.headers}));if(W){let Z,$;if(W.session.activeOrganizationId){let K=await J.measure("auth_get_full_organization",()=>Y.api.getFullOrganization({headers:X.headers}).catch(()=>null));if(K)Z={id:K.id,slug:K.slug,name:K.name},$=K.members?.find((F)=>F.userId===W.user.id)?.role;else Z={id:W.session.activeOrganizationId,slug:"",name:""}}return{user:{id:W.user.id,email:W.user.email,role:$},role:$,organization:Z}}}catch(W){let Z=W;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}function LH1(X){let Y=new JT(X.encryption.key),Q={connections:new GT(X.db,Y),organizationSettings:new LQ0(X.db),monitoring:new OQ0(X.db,X.databaseType),virtualMcps:new DQ0(X.db),users:new wQ0(X.db),threads:new _Q0(X.db)};return async(J,G)=>{let W=G?.timings??OH1,Z=J?.headers.get("x-caller-id")??void 0,$=J?await Up6(J,X.auth,X.db,W):{user:void 0},K=Vp6({auth:X.auth,headers:J?.headers??new Headers,role:$.role,permissions:$.permissions,userId:$.user?.id}),H={user:$.user};if($.apiKeyId)H.apiKey={id:$.apiKeyId,name:"",userId:""};let F=$.organization,V=J?new URL(J.url):new URL("http://localhost:3000"),q=process.env.BASE_URL??`${V.protocol}//${V.host}`,z=new lK(X.auth,H.user?.id,void 0,K,$.role,"self"),D={timings:W,auth:H,connectionId:Z,organization:F,storage:Q,vault:Y,authInstance:X.auth,boundAuth:K,access:z,db:X.db,tracer:X.observability.tracer,meter:X.observability.meter,baseUrl:q,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(zp6.map((N)=>[N,J?.headers.get(N)??null]).filter(([N,L])=>L!==null)),userAgent:J?.headers.get("x-mesh-client")||J?.headers.get("User-Agent")||void 0,ipAddress:(J?.headers.get("CF-Connecting-IP")||J?.headers.get("X-Forwarded-For"))??void 0,properties:Hp6(J?.headers.get("x-mesh-properties"))},eventBus:X.eventBus,createMCPProxy:async(N)=>{return await qH1(N,D)}};return D}}var NH1,dK,OH1,zp6;var nf=S(()=>{BQ0();XY0();YY0();CK1();RK1();uf();iT();XQ0();DH1();dK={set:(X)=>{NH1=X},create:async(X,Y)=>{return await NH1(X,Y)}},OH1={measure:async(X,Y)=>{return await Y()}},zp6=["x-hub-signature-256"]});class wH1{db;constructor(X){this.db=X}async publishEvent(X){let Y=new Date().toISOString();return await this.db.insertInto("events").values({id:X.id,organization_id:X.organizationId,type:X.type,source:X.source,specversion:"1.0",subject:X.subject??null,time:X.time,datacontenttype:X.datacontenttype??"application/json",dataschema:X.dataschema??null,data:X.data?JSON.stringify(X.data):null,cron:X.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Y,updated_at:Y}).execute(),{id:X.id,organizationId:X.organizationId,type:X.type,source:X.source,specversion:"1.0",subject:X.subject??null,time:X.time,datacontenttype:X.datacontenttype??"application/json",dataschema:X.dataschema??null,data:X.data??null,cron:X.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:Y,updatedAt:Y}}async subscribe(X){let Y=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X.organizationId).where("connection_id","=",X.connectionId).where("event_type","=",X.eventType);if(X.publisher)Y=Y.where("publisher","=",X.publisher);else Y=Y.where("publisher","is",null);if(X.filter)Y=Y.where("filter","=",X.filter);else Y=Y.where("filter","is",null);let Q=await Y.executeTakeFirst();if(Q)return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at};let J=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:X.id,organization_id:X.organizationId,connection_id:X.connectionId,publisher:X.publisher??null,event_type:X.eventType,filter:X.filter??null,enabled:1,created_at:J,updated_at:J}).execute(),{id:X.id,organizationId:X.organizationId,connectionId:X.connectionId,publisher:X.publisher??null,eventType:X.eventType,filter:X.filter??null,enabled:!0,createdAt:J,updatedAt:J}}async unsubscribe(X,Y){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",X).where("organization_id","=",Y).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(X,Y){let Q=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X);if(Y)Q=Q.where("connection_id","=",Y);return(await Q.execute()).map((G)=>({id:G.id,organizationId:G.organization_id,connectionId:G.connection_id,publisher:G.publisher,eventType:G.event_type,filter:G.filter,enabled:G.enabled===1,createdAt:G.created_at,updatedAt:G.updated_at}))}async getSubscription(X,Y){let Q=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!Q)return null;return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at}}async getMatchingSubscriptions(X){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X.organizationId).where("enabled","=",1).where("event_type","=",X.type).where((Q)=>Q.or([Q("publisher","is",null),Q("publisher","=",X.source)])).execute()).map((Q)=>({id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at}))}async createDeliveries(X,Y,Q){if(Y.length===0)return;let J=new Date().toISOString(),G=Q??null,W=Y.map((Z)=>({id:crypto.randomUUID(),event_id:X,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:G,created_at:J}));await this.db.insertInto("event_deliveries").values(W).execute()}async claimPendingDeliveries(X){let Y=new Date().toISOString(),Q;try{Q=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(W)=>W.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",Y)])).orderBy("d.created_at","asc").limit(X)).where("status","=","pending").returning(["id"]).execute()).map((W)=>W.id)}catch{let G=await this.db.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id"]).where("d.status","=","pending").where("s.enabled","=",1).where((W)=>W.or([W("d.next_retry_at","is",null),W("d.next_retry_at","<=",Y)])).orderBy("d.created_at","asc").limit(X).execute();if(G.length===0)return[];Q=G.map((W)=>W.id),await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",Q).where("status","=","pending").execute()}if(Q.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",Q).where("d.status","=","processing").execute()).map((G)=>({delivery:{id:G.delivery_id,eventId:G.event_id,subscriptionId:G.subscription_id,status:G.delivery_status,attempts:G.delivery_attempts,lastError:G.delivery_last_error,deliveredAt:G.delivered_at,nextRetryAt:G.delivery_next_retry_at,createdAt:G.delivery_created_at},event:{id:G.event_id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.event_status,attempts:G.event_attempts,lastError:G.event_last_error,nextRetryAt:G.next_retry_at,createdAt:G.event_created_at,updatedAt:G.event_updated_at},subscription:{id:G.subscription_id,organizationId:G.organization_id,connectionId:G.connection_id,publisher:G.publisher,eventType:G.event_type,filter:G.filter,enabled:G.enabled===1,createdAt:G.subscription_created_at,updatedAt:G.subscription_updated_at}}))}async markDeliveriesDelivered(X){if(X.length===0)return;let Y=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:Y}).where("id","in",X).execute()}async markDeliveriesFailed(X,Y,Q=20,J=1000,G=3600000){if(X.length===0)return;for(let W of X){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",W).executeTakeFirst();if(!Z)continue;let $=Z.attempts+1;if($>=Q)await this.db.updateTable("event_deliveries").set({attempts:$,last_error:Y,status:"failed",next_retry_at:null}).where("id","=",W).execute();else{let K=Math.min(J*Math.pow(2,$-1),G),H=new Date(Date.now()+K).toISOString();await this.db.updateTable("event_deliveries").set({attempts:$,last_error:Y,status:"pending",next_retry_at:H}).where("id","=",W).execute()}}}async updateEventStatus(X){let Y=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",X).execute();if(Y.length===0)return;let Q=Y.every((W)=>W.status==="delivered"),J=Y.some((W)=>W.status==="failed"),G=Y.some((W)=>W.status==="pending"||W.status==="processing");if(Q)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",X).execute();else if(J&&!G)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",X).execute()}async resetStuckDeliveries(){let X=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(X.numUpdatedRows??0)}async getEvent(X,Y){let Q=await this.db.selectFrom("events").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!Q)return null;return{id:Q.id,organizationId:Q.organization_id,type:Q.type,source:Q.source,specversion:Q.specversion,subject:Q.subject,time:Q.time,datacontenttype:Q.datacontenttype,dataschema:Q.dataschema,data:Q.data?JSON.parse(Q.data):null,cron:Q.cron,status:Q.status,attempts:Q.attempts,lastError:Q.last_error,nextRetryAt:Q.next_retry_at,createdAt:Q.created_at,updatedAt:Q.updated_at}}async findActiveCronEvent(X,Y,Q,J){let G=await this.db.selectFrom("events").selectAll().where("organization_id","=",X).where("type","=",Y).where("source","=",Q).where("cron","=",J).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!G)return null;return{id:G.id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.status,attempts:G.attempts,lastError:G.last_error,nextRetryAt:G.next_retry_at,createdAt:G.created_at,updatedAt:G.updated_at}}async cancelEvent(X,Y,Q){let J=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",X).where("organization_id","=",Y).where("source","=",Q).where("status","in",["pending","processing"]).executeTakeFirst();if((J.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",X).where("status","in",["pending","processing"]).execute();return{success:(J.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(X,Y){if(X.length===0)return;let Q=new Date(Date.now()+Y).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:Q}).where("id","in",X).execute()}async ackDelivery(X,Y,Q){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",X).where("organization_id","=",Y).executeTakeFirst())return{success:!1};let W=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",X).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",Q).where("event_subscriptions.organization_id","=",Y))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(W)await this.updateEventStatus(X);return{success:W}}async syncSubscriptions(X){let{organizationId:Y,connectionId:Q,subscriptions:J}=X,G=(w,C)=>{return`${w}::${C??""}`},W=await this.listSubscriptions(Y,Q),Z=new Map;for(let w of W)Z.set(G(w.eventType,w.publisher),w);let $=new Map;for(let w of J)$.set(G(w.eventType,w.publisher),w);let K=new Date().toISOString(),H=[],F=[],V=[],q=0;for(let[w,C]of $){let A=Z.get(w);if(!A)H.push({id:crypto.randomUUID(),organization_id:Y,connection_id:Q,event_type:C.eventType,publisher:C.publisher??null,filter:C.filter??null,enabled:1,created_at:K,updated_at:K});else{let T=A.filter??null,P=C.filter??null;if(T!==P)F.push({id:A.id,filter:P});else q++}}for(let[w,C]of Z)if(!$.has(w))V.push(C.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(F.length>0)await Promise.all(F.map((w)=>this.db.updateTable("event_subscriptions").set({filter:w.filter,updated_at:K}).where("id","=",w.id).execute()));if(V.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",V).execute();let z=H.length,D=F.length,N=V.length,L=await this.listSubscriptions(Y,Q);return{created:z,updated:D,deleted:N,unchanged:q,subscriptions:L}}}function MH1(X){return new wH1(X)}function K9(X,Y,Q,J,G,W,Z,$){return K9.fromTZ(K9.tp(X,Y,Q,J,G,W,Z),$)}function yQ0(X,Y=new Date){let Q=Y.toLocaleString("en-US",{timeZone:X,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],J=Y.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${J} GMT`)-Date.parse(`${J} ${Q}`)}function Bp6(X,Y){let Q=new Date(Date.parse(X));if(isNaN(Q))throw Error("minitz: Invalid ISO8601 passed to parser.");let J=X.substring(9);return X.includes("Z")||J.includes("-")||J.includes("+")?K9.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):K9.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Y)}function Dp6(X){if(X===void 0&&(X={}),delete X.name,X.legacyMode=X.legacyMode===void 0?!0:X.legacyMode,X.paused=X.paused===void 0?!1:X.paused,X.maxRuns=X.maxRuns===void 0?1/0:X.maxRuns,X.catch=X.catch===void 0?!1:X.catch,X.interval=X.interval===void 0?0:parseInt(X.interval.toString(),10),X.utcOffset=X.utcOffset===void 0?void 0:parseInt(X.utcOffset.toString(),10),X.unref=X.unref===void 0?!1:X.unref,X.startAt&&(X.startAt=new V5(X.startAt,X.timezone)),X.stopAt&&(X.stopAt=new V5(X.stopAt,X.timezone)),X.interval!==null){if(isNaN(X.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(X.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(X.utcOffset!==void 0){if(isNaN(X.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(X.utcOffset<-870||X.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(X.utcOffset!==void 0&&X.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(X.unref!==!0&&X.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return X}function aT(X){return Object.prototype.toString.call(X)==="[object Function]"||typeof X=="function"||X instanceof Function}function Np6(X){return aT(X)}function Op6(X){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(X):X&&typeof X.unref<"u"&&X.unref()}var bQ0=32,rT,EH1,PH1=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(X,Y){this.pattern=X,this.timezone=Y,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let X=this.pattern.replace(/\s+/g," ").split(" ");if(X.length<5||X.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(X.length===5&&X.unshift("0"),X[3].indexOf("L")>=0&&(X[3]=X[3].replace("L",""),this.lastDayOfMonth=!0),X[3]=="*"&&(this.starDOM=!0),X[4].length>=3&&(X[4]=this.replaceAlphaMonths(X[4])),X[5].length>=3&&(X[5]=this.replaceAlphaDays(X[5])),X[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Y=new V5(new Date,this.timezone).getDate(!0);X[0]=X[0].replace("?",Y.getSeconds().toString()),X[1]=X[1].replace("?",Y.getMinutes().toString()),X[2]=X[2].replace("?",Y.getHours().toString()),this.starDOM||(X[3]=X[3].replace("?",Y.getDate().toString())),X[4]=X[4].replace("?",(Y.getMonth()+1).toString()),this.starDOW||(X[5]=X[5].replace("?",Y.getDay().toString()))}this.throwAtIllegalCharacters(X),this.partToArray("second",X[0],0,1),this.partToArray("minute",X[1],0,1),this.partToArray("hour",X[2],0,1),this.partToArray("day",X[3],-1,1),this.partToArray("month",X[4],-1,1),this.partToArray("dayOfWeek",X[5],0,rT),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(X,Y,Q,J){let G=this[X],W=X==="day"&&this.lastDayOfMonth;if(Y===""&&!W)throw TypeError("CronPattern: configuration entry "+X+" ("+Y+") is empty, check for trailing spaces.");if(Y==="*")return G.fill(J);let Z=Y.split(",");if(Z.length>1)for(let $=0;$<Z.length;$++)this.partToArray(X,Z[$],Q,J);else Y.indexOf("-")!==-1&&Y.indexOf("/")!==-1?this.handleRangeWithStepping(Y,X,Q,J):Y.indexOf("-")!==-1?this.handleRange(Y,X,Q,J):Y.indexOf("/")!==-1?this.handleStepping(Y,X,Q,J):Y!==""&&this.handleNumber(Y,X,Q,J)}throwAtIllegalCharacters(X){for(let Y=0;Y<X.length;Y++)if((Y===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(X[Y]))throw TypeError("CronPattern: configuration entry "+Y+" ("+X[Y]+") contains illegal characters.")}handleNumber(X,Y,Q,J){let G=this.extractNth(X,Y),W=parseInt(G[0],10)+Q;if(isNaN(W))throw TypeError("CronPattern: "+Y+" is not a number: '"+X+"'");this.setPart(Y,W,G[1]||J)}setPart(X,Y,Q){if(!Object.prototype.hasOwnProperty.call(this,X))throw TypeError("CronPattern: Invalid part specified: "+X);if(X==="dayOfWeek"){if(Y===7&&(Y=0),Y<0||Y>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Y);this.setNthWeekdayOfMonth(Y,Q);return}if(X==="second"||X==="minute"){if(Y<0||Y>=60)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="hour"){if(Y<0||Y>=24)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="day"){if(Y<0||Y>=31)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="month"&&(Y<0||Y>=12))throw RangeError("CronPattern: Invalid value for "+X+": "+Y);this[X][Y]=Q}handleRangeWithStepping(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(W===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+X+"'");let[,Z,$,K]=W,H=parseInt(Z,10)+Q,F=parseInt($,10)+Q,V=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(V))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(V===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(V>this[Y].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Y].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+X+"'");for(let q=H;q<=F;q+=V)this.setPart(Y,q,G[1]||J)}extractNth(X,Y){let Q=X,J;if(Q.includes("#")){if(Y!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");J=Q.split("#")[1],Q=Q.split("#")[0]}return[Q,J]}handleRange(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].split("-");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+X+"'");let Z=parseInt(W[0],10)+Q,$=parseInt(W[1],10)+Q;if(isNaN(Z))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(Z>$)throw TypeError("CronPattern: From value is larger than to value: '"+X+"'");for(let K=Z;K<=$;K++)this.setPart(Y,K,G[1]||J)}handleStepping(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].split("/");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+X+"'");W[0]===""&&(W[0]="*");let Z=0;W[0]!=="*"&&(Z=parseInt(W[0],10)+Q);let $=parseInt(W[1],10);if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if($===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if($>this[Y].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Y].length+")");for(let K=Z;K<this[Y].length;K+=$)this.setPart(Y,K,G[1]||J)}replaceAlphaDays(X){return X.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths(X){return X.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(X){let Y=X.trim().toLowerCase();return Y==="@yearly"||Y==="@annually"?"0 0 1 1 *":Y==="@monthly"?"0 0 1 * *":Y==="@weekly"?"0 0 * * 0":Y==="@daily"?"0 0 * * *":Y==="@hourly"?"0 * * * *":X}setNthWeekdayOfMonth(X,Y){if(typeof Y!="number"&&Y==="L")this.dayOfWeek[X]=this.dayOfWeek[X]|bQ0;else if(Y===rT)this.dayOfWeek[X]=rT;else if(Y<6&&Y>0)this.dayOfWeek[X]=this.dayOfWeek[X]|EH1[Y-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Y}, Type: ${typeof Y}`)}},TH1,EZ,V5=class X{tz;ms;second;minute;hour;day;month;year;constructor(Y,Q){if(this.tz=Q,Y&&Y instanceof Date)if(!isNaN(Y))this.fromDate(Y);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Y===void 0)this.fromDate(new Date);else if(Y&&typeof Y=="string")this.fromString(Y);else if(Y instanceof X)this.fromCronDate(Y);else throw TypeError("CronDate: Invalid type ("+typeof Y+") passed to CronDate constructor")}isNthWeekdayOfMonth(Y,Q,J,G){let W=new Date(Date.UTC(Y,Q,J)).getUTCDay(),Z=0;for(let $=1;$<=J;$++)new Date(Date.UTC(Y,Q,$)).getUTCDay()===W&&Z++;if(G&rT&&EH1[Z-1]&G)return!0;if(G&bQ0){let $=new Date(Date.UTC(Y,Q+1,0)).getUTCDate();for(let K=J+1;K<=$;K++)if(new Date(Date.UTC(Y,Q,K)).getUTCDay()===W)return!1;return!0}return!1}fromDate(Y){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Y.getUTCMilliseconds(),this.second=Y.getUTCSeconds(),this.minute=Y.getUTCMinutes()+this.tz,this.hour=Y.getUTCHours(),this.day=Y.getUTCDate(),this.month=Y.getUTCMonth(),this.year=Y.getUTCFullYear(),this.apply();else{let Q=K9.toTZ(Y,this.tz);this.ms=Y.getMilliseconds(),this.second=Q.s,this.minute=Q.i,this.hour=Q.h,this.day=Q.d,this.month=Q.m-1,this.year=Q.y}else this.ms=Y.getMilliseconds(),this.second=Y.getSeconds(),this.minute=Y.getMinutes(),this.hour=Y.getHours(),this.day=Y.getDate(),this.month=Y.getMonth(),this.year=Y.getFullYear()}fromCronDate(Y){this.tz=Y.tz,this.year=Y.year,this.month=Y.month,this.day=Y.day,this.hour=Y.hour,this.minute=Y.minute,this.second=Y.second,this.ms=Y.ms}apply(){if(this.month>11||this.day>TH1[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Y=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Y.getUTCMilliseconds(),this.second=Y.getUTCSeconds(),this.minute=Y.getUTCMinutes(),this.hour=Y.getUTCHours(),this.day=Y.getUTCDate(),this.month=Y.getUTCMonth(),this.year=Y.getUTCFullYear(),!0}else return!1}fromString(Y){if(typeof this.tz=="number"){let Q=K9.fromTZISO(Y);this.ms=Q.getUTCMilliseconds(),this.second=Q.getUTCSeconds(),this.minute=Q.getUTCMinutes(),this.hour=Q.getUTCHours(),this.day=Q.getUTCDate(),this.month=Q.getUTCMonth(),this.year=Q.getUTCFullYear(),this.apply()}else return this.fromDate(K9.fromTZISO(Y,this.tz))}findNext(Y,Q,J,G){let W=this[Q],Z;J.lastDayOfMonth&&(this.month!==1?Z=TH1[this.month]:Z=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let $=!J.starDOW&&Q=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[Q]+G;K<J[Q].length;K++){let H=J[Q][K];if(Q==="day"&&J.lastDayOfMonth&&K-G==Z&&(H=1),Q==="day"&&!J.starDOW){let F=J.dayOfWeek[($+(K-G-1))%7];if(F&&F&rT)F=this.isNthWeekdayOfMonth(this.year,this.month,K-G,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Y.legacyMode&&!J.starDOM?H=H||F:H=H&&F}if(H)return this[Q]=K-G,W!==this[Q]?2:1}return 3}recurse(Y,Q,J){let G=this.findNext(Q,EZ[J][0],Y,EZ[J][2]);if(G>1){let W=J+1;for(;W<EZ.length;)this[EZ[W][0]]=-EZ[W][2],W++;if(G===3)return this[EZ[J][1]]++,this[EZ[J][0]]=-EZ[J][2],this.apply(),this.recurse(Y,Q,0);if(this.apply())return this.recurse(Y,Q,J-1)}return J+=1,J>=EZ.length?this:this.year>=3000?null:this.recurse(Y,Q,J)}increment(Y,Q,J){return this.second+=Q.interval!==void 0&&Q.interval>1&&J?Q.interval:1,this.ms=0,this.apply(),this.recurse(Y,Q,0)}getDate(Y){return Y||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):K9.fromTZ(K9.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},AH1=30000,rf,of=class{name;options;_states;fn;constructor(X,Y,Q){let J,G;if(aT(Y))G=Y;else if(typeof Y=="object")J=Y;else if(Y!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(aT(Q))G=Q;else if(typeof Q=="object")J=Q;else if(Q!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=J?.name,this.options=Dp6(J),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:J?J.maxRuns:void 0,paused:J?J.paused:!1,pattern:new PH1("* * * * *")},X&&(X instanceof Date||typeof X=="string"&&X.indexOf(":")>0)?this._states.once=new V5(X,this.options.timezone||this.options.utcOffset):this._states.pattern=new PH1(X,this.options.timezone),this.name){if(rf.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");rf.push(this)}return G!==void 0&&Np6(G)&&(this.fn=G,this.schedule()),this}nextRun(X){let Y=this._next(X);return Y?Y.getDate(!1):null}nextRuns(X,Y){this._states.maxRuns!==void 0&&X>this._states.maxRuns&&(X=this._states.maxRuns);let Q=[],J=Y||this._states.currentRun||void 0;for(;X--&&(J=this.nextRun(J));)Q.push(J);return Q}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let X=this.nextRun(this._states.currentRun),Y=!this._states.paused,Q=this.fn!==void 0,J=!this._states.kill;return Y&&Q&&J&&X!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(X){let Y=this._next(X);return Y?X instanceof V5||X instanceof Date?Y.getTime()-X.getTime():Y.getTime()-new V5(X).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let X=rf.indexOf(this);X>=0&&rf.splice(X,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(X){if(X&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");X&&(this.fn=X);let Y=this.msToNext(),Q=this.nextRun(this._states.currentRun);return Y==null||isNaN(Y)||Q===null?this:(Y>AH1&&(Y=AH1),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Y),this._states.currentTimeout&&this.options.unref&&Op6(this._states.currentTimeout),this)}async _trigger(X){if(this._states.blocking=!0,this._states.currentRun=new V5(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Y){aT(this.options.catch)&&this.options.catch(Y,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new V5(X,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(X){let Y=new Date,Q=!this._states.paused&&Y.getTime()>=X.getTime(),J=this._states.blocking&&this.options.protect;Q&&!J?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):Q&&J&&aT(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(X){let Y=!!(X||this._states.currentRun),Q=!1;!X&&this.options.startAt&&this.options.interval&&([X,Y]=this._calculatePreviousRun(X,Y),Q=!X),X=new V5(X,this.options.timezone||this.options.utcOffset),this.options.startAt&&X&&X.getTime()<this.options.startAt.getTime()&&(X=this.options.startAt);let J=this._states.once||new V5(X,this.options.timezone||this.options.utcOffset);return!Q&&J!==this._states.once&&(J=J.increment(this._states.pattern,this.options,Y)),this._states.once&&this._states.once.getTime()<=X.getTime()||J===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&J.getTime()>=this.options.stopAt.getTime()?null:J}_calculatePreviousRun(X,Y){let Q=new V5(void 0,this.options.timezone||this.options.utcOffset),J=X;if(this.options.startAt.getTime()<=Q.getTime()){J=this.options.startAt;let G=J.getTime()+this.options.interval*1000;for(;G<=Q.getTime();)J=new V5(J,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),G=J.getTime()+this.options.interval*1000;Y=!0}return J===null&&(J=void 0),[J,Y]}};var fQ0=S(()=>{K9.fromTZISO=(X,Y,Q)=>K9.fromTZ(Bp6(X,Y),Q);K9.fromTZ=function(X,Y){let Q=new Date(Date.UTC(X.y,X.m-1,X.d,X.h,X.i,X.s)),J=yQ0(X.tz,Q),G=new Date(Q.getTime()-J),W=yQ0(X.tz,G);if(W-J===0)return G;{let Z=new Date(Q.getTime()-W),$=yQ0(X.tz,Z);if($-W===0)return Z;if(!Y&&$-W>0)return Z;if(Y)throw Error("Invalid date passed to fromTZ()");return G}};K9.toTZ=function(X,Y){let Q=X.toLocaleString("en-US",{timeZone:Y}).replace(/[\u202f]/," "),J=new Date(Q);return{y:J.getFullYear(),m:J.getMonth()+1,d:J.getDate(),h:J.getHours(),i:J.getMinutes(),s:J.getSeconds(),tz:Y}};K9.tp=(X,Y,Q,J,G,W,Z)=>({y:X,m:Y,d:Q,h:J,i:G,s:W,tz:Z});K9.minitz=K9;rT=31|bQ0,EH1=[1,2,4,8,16],TH1=[31,28,31,30,31,30,31,31,30,31,30,31],EZ=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];rf=[]});var sf;var hQ0=S(()=>{sf={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function jH1(){return async(X,Y)=>{try{let Q=await dK.create(),J=await UH1(X,{...Q,auth:{...Q.auth,user:{id:"notify-worker"}}}),W=await Z90.forClient(J).ON_EVENTS({events:Y});return{success:W.success,error:W.error,retryAfter:W.retryAfter,results:W.results}}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return console.error(`[EventBus] Failed to notify connection ${X}:`,J),{success:!1,error:J}}}}var CH1=S(()=>{nf();Mf();iT()});function IH1(X){return{specversion:"1.0",id:X.id,source:X.source,type:X.type,time:X.time,subject:X.subject??void 0,datacontenttype:X.datacontenttype,dataschema:X.dataschema??void 0,data:X.data??void 0}}function Lp6(X){let Y=new Map;for(let J of X){let G=J.subscription.connectionId,W=Y.get(G);if(W){if(W.deliveryIds.push(J.delivery.id),!W.seenEventIds.has(J.event.id))W.seenEventIds.add(J.event.id),W.events.push(IH1(J.event))}else Y.set(G,{connectionId:J.subscription.connectionId,deliveryIds:[J.delivery.id],events:[IH1(J.event)],seenEventIds:new Set([J.event.id])})}let Q=new Map;for(let[J,G]of Y)Q.set(J,{connectionId:G.connectionId,deliveryIds:G.deliveryIds,events:G.events});return Q}class xQ0{storage;notifySubscriber;running=!1;processing=!1;config;constructor(X,Y){this.storage=X;this.notifySubscriber=jH1(),this.config={...sf,...Y}}async start(){if(this.running)return;let X=await this.storage.resetStuckDeliveries();if(X>0)console.log(`[EventBus] Reset ${X} stuck deliveries from previous shutdown`);this.running=!0}stop(){this.running=!1,console.log("[EventBus] Worker stopped")}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing)return;this.processing=!0;try{await this.processEvents()}catch(X){console.error("[EventBus] Error processing events:",X)}finally{this.processing=!1}}async processEvents(){let X=await this.storage.claimPendingDeliveries(this.config.batchSize);if(X.length===0)return;let Y=Lp6(X),Q=new Set;for(let[J,G]of Y){try{let W=await this.notifySubscriber(G.connectionId,G.events);if(W.results&&Object.keys(W.results).length>0)await this.processPerEventResults(G,W);else if(W.success)await this.storage.markDeliveriesDelivered(G.deliveryIds);else if(W.retryAfter&&W.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(G.deliveryIds,W.retryAfter);else await this.storage.markDeliveriesFailed(G.deliveryIds,W.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(W){let Z=W instanceof Error?W.message:String(W);console.error(`[EventBus] Failed to notify subscription ${J}:`,Z),await this.storage.markDeliveriesFailed(G.deliveryIds,Z,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}for(let W of X)if(G.deliveryIds.includes(W.delivery.id))Q.add(W.event.id)}for(let J of Q)try{await this.storage.updateEventStatus(J);let G=X.find((W)=>W.event.id===J)?.event;if(G?.cron)await this.scheduleNextCronDelivery(G)}catch(G){console.error(`[EventBus] Failed to update event status ${J}:`,G)}}async processPerEventResults(X,Y){let Q=[],J=new Map,G=[],W=new Map;for(let Z=0;Z<X.events.length;Z++){let $=X.events?.[Z];if(!$)continue;let K=X.deliveryIds?.[Z];if(!K)continue;W.set($.id,K)}for(let Z of X.events){let $=W.get(Z.id);if(!$)continue;let K=Y.results?.[Z.id];if(K)if(K.success)Q.push($);else if(K.retryAfter&&K.retryAfter>0){let H=J.get(K.retryAfter)||[];H.push($),J.set(K.retryAfter,H)}else G.push({deliveryId:$,error:K.error||"Event processing failed"});else if(Y.success)Q.push($);else if(Y.retryAfter&&Y.retryAfter>0){let H=J.get(Y.retryAfter)||[];H.push($),J.set(Y.retryAfter,H)}else G.push({deliveryId:$,error:Y.error||"Batch processing failed"})}if(Q.length>0)await this.storage.markDeliveriesDelivered(Q);for(let[Z,$]of J)await this.storage.scheduleRetryWithoutAttemptIncrement($,Z);if(G.length>0){let Z=new Map;for(let{deliveryId:$,error:K}of G){let H=Z.get(K)||[];H.push($),Z.set(K,H)}for(let[$,K]of Z)await this.storage.markDeliveriesFailed(K,$,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(X){if(!X.cron)return;try{let Q=new of(X.cron).nextRun();if(!Q){console.log(`[EventBus] Cron expression for event ${X.id} has no more runs`);return}let J=Q.toISOString(),G=await this.storage.getMatchingSubscriptions(X);if(G.length===0){console.log(`[EventBus] No subscriptions for cron event ${X.id}, skipping next delivery`);return}await this.storage.createDeliveries(X.id,G.map((W)=>W.id),J),console.log(`[EventBus] Scheduled next cron delivery for event ${X.id} at ${J}`)}catch(Y){console.error(`[EventBus] Failed to schedule next cron delivery for event ${X.id}:`,Y)}}}var RH1=S(()=>{fQ0();hQ0();CH1()});class gQ0{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new xQ0(this.storage,X.config)}async publish(X,Y,Q){if(Q.deliverAt&&Q.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let J;if(Q.cron){try{let F=new of(Q.cron).nextRun();if(!F)throw Error("Cron expression does not produce a next run time");J=F.toISOString()}catch(H){throw Error(`Invalid cron expression: ${H instanceof Error?H.message:String(H)}`)}let K=await this.storage.findActiveCronEvent(X,Q.type,Y,Q.cron);if(K)return K}let G=crypto.randomUUID(),W=new Date().toISOString(),Z=await this.storage.publishEvent({id:G,organizationId:X,type:Q.type,source:Y,subject:Q.subject,time:W,data:Q.data,cron:Q.cron}),$=await this.storage.getMatchingSubscriptions(Z);if($.length>0){let K=Q.deliverAt??J;if(await this.storage.createDeliveries(G,$.map((H)=>H.id),K),this.notifyStrategy&&!K)await this.notifyStrategy.notify(G).catch((H)=>{console.warn("[EventBus] Notify failed (non-critical):",H)})}return Z}async subscribe(X,Y){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:X,connectionId:Y.connectionId,publisher:Y.publisher,eventType:Y.eventType,filter:Y.filter})}async unsubscribe(X,Y){return this.storage.unsubscribe(Y,X)}async listSubscriptions(X,Y){return this.storage.listSubscriptions(X,Y)}async getSubscription(X,Y){return this.storage.getSubscription(Y,X)}async getEvent(X,Y){return this.storage.getEvent(Y,X)}async cancelEvent(X,Y,Q){return this.storage.cancelEvent(Y,X,Q)}async ackEvent(X,Y,Q){return this.storage.ackDelivery(Y,X,Q)}async syncSubscriptions(X,Y){return this.storage.syncSubscriptions({organizationId:X,...Y})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing after notify:",X)})});await this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing pending events on startup:",X)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(X){console.error("[EventBus] Error stopping notify strategy:",X)}console.log("[EventBus] Stopped")}isRunning(){return this.running}}var SH1=S(()=>{fQ0();RH1()});function kH1(...X){return{async start(Y){await Promise.all(X.map((Q)=>Q.start(Y)))},async stop(){await Promise.all(X.map((Y)=>Y.stop().catch((Q)=>{console.error("[NotifyStrategy] Error stopping strategy:",Q)})))},async notify(Y){await Promise.all(X.map((Q)=>Q.notify(Y).catch((J)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",J)})))}}}class tf{intervalMs;timer=null;onNotify=null;constructor(X){this.intervalMs=X}async start(X){if(this.timer)return;this.onNotify=X,this.scheduleNext(),console.log(`[Polling] Started polling every ${this.intervalMs}ms`)}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null,console.log("[Polling] Stopped polling");this.onNotify=null}async notify(X){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}import{sql as wp6}from"kysely";class uQ0{db;pool;listenClient=null;onNotify=null;constructor(X,Y){this.db=X;this.pool=Y}async start(X){if(this.listenClient)return;this.onNotify=X;try{this.listenClient=await this.pool.connect(),this.listenClient.on("notification",(Y)=>{if(Y.channel===pB&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(Y)=>{console.error("[PostgresNotify] Connection error:",Y),this.cleanup()}),await this.listenClient.query(`LISTEN ${pB}`),console.log("[PostgresNotify] Started LISTEN on",pB)}catch(Y){console.error("[PostgresNotify] Failed to start LISTEN:",Y),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${pB}`),console.log("[PostgresNotify] Stopped LISTEN on",pB)}catch{}this.cleanup()}}async notify(X){try{await wp6`SELECT pg_notify(${pB}, ${X})`.execute(this.db)}catch(Y){console.warn("[PostgresNotify] Failed to send NOTIFY:",Y)}}cleanup(){if(this.listenClient)this.listenClient.release(),this.listenClient=null;this.onNotify=null}}var pB="mesh_events";var vH1=()=>{};function _H1(X,Y){let Q=MH1(X.db),J=Y?.pollIntervalMs??sf.pollIntervalMs,G=X.type==="postgres"?kH1(new tf(J),new uQ0(X.db,X.pool)):new tf(J);return new gQ0({storage:Q,config:Y,notifyStrategy:G})}var yH1=S(()=>{SH1();hQ0();vH1()});var bH1;var fH1=S(()=>{bH1={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var hH1,xH1;var gH1=S(()=>{ZG();uB();fH1();hH1=new ZX;hH1.get("/config",async(X)=>{try{let Y=Object.keys(WX.socialProviders??{}),Q=Y.length>0,J=Y.map((Z)=>({name:Z,icon:bH1[Z].icon})),G=process.env.UNSAFE_ALLOW_STDIO_TRANSPORT==="true",W={emailAndPassword:{enabled:WX.emailAndPassword?.enabled??!1},magicLink:{enabled:WX.magicLinkConfig?.enabled??!1},socialProviders:{enabled:Q,providers:J},sso:WX.ssoConfig?{enabled:!0,providerId:WX.ssoConfig.providerId}:{enabled:!1},stdioEnabled:G};return X.json({success:!0,config:W})}catch(Y){let Q=Y instanceof Error?Y.message:"Failed to load auth config";return X.json({success:!1,error:Q},500)}});xH1=hH1});function $G(X){if(X==null)return"unknown error";if(typeof X==="string")return X;if(X instanceof Error)return X.message;return JSON.stringify(X)}var z31="vercel.ai.error",Mp6,uH1,mH1,O1,B31="AI_APICallError",D31,Pp6,lH1,dH1,$X,N31="AI_EmptyResponseBodyError",O31,Tp6,pH1,cH1,L31,w31="AI_InvalidArgumentError",M31,Ap6,nH1,iH1,P31,T31="AI_InvalidPromptError",A31,Ep6,aH1,rH1,YV,E31="AI_InvalidResponseDataError",j31,jp6,oH1,sH1,b88,C31="AI_JSONParseError",I31,Cp6,tH1,eH1,oT,R31="AI_LoadAPIKeyError",S31,Ip6,X31,Y31,f88,k31="AI_LoadSettingError",v31,Rp6,Q31,J31,h88,_31="AI_NoContentGeneratedError",y31,Sp6,G31,W31,x88,b31="AI_NoSuchModelError",f31,kp6,Z31,$31,g88,h31="AI_TooManyEmbeddingValuesForCallError",x31,vp6,K31,H31,u88,g31="AI_TypeValidationError",u31,_p6,F31,V31,EQ,m31="AI_UnsupportedFunctionalityError",l31,yp6,q31,U31,d31;var q4=S(()=>{Mp6=Symbol.for(z31),O1=class X extends(mH1=Error,uH1=Mp6,mH1){constructor({name:Y,message:Q,cause:J}){super(Q);this[uH1]=!0,this.name=Y,this.cause=J}static isInstance(Y){return X.hasMarker(Y,z31)}static hasMarker(Y,Q){let J=Symbol.for(Q);return Y!=null&&typeof Y==="object"&&J in Y&&typeof Y[J]==="boolean"&&Y[J]===!0}},D31=`vercel.ai.error.${B31}`,Pp6=Symbol.for(D31),$X=class extends(dH1=O1,lH1=Pp6,dH1){constructor({message:X,url:Y,requestBodyValues:Q,statusCode:J,responseHeaders:G,responseBody:W,cause:Z,isRetryable:$=J!=null&&(J===408||J===409||J===429||J>=500),data:K}){super({name:B31,message:X,cause:Z});this[lH1]=!0,this.url=Y,this.requestBodyValues=Q,this.statusCode=J,this.responseHeaders=G,this.responseBody=W,this.isRetryable=$,this.data=K}static isInstance(X){return O1.hasMarker(X,D31)}},O31=`vercel.ai.error.${N31}`,Tp6=Symbol.for(O31),L31=class extends(cH1=O1,pH1=Tp6,cH1){constructor({message:X="Empty response body"}={}){super({name:N31,message:X});this[pH1]=!0}static isInstance(X){return O1.hasMarker(X,O31)}};M31=`vercel.ai.error.${w31}`,Ap6=Symbol.for(M31),P31=class extends(iH1=O1,nH1=Ap6,iH1){constructor({message:X,cause:Y,argument:Q}){super({name:w31,message:X,cause:Y});this[nH1]=!0,this.argument=Q}static isInstance(X){return O1.hasMarker(X,M31)}},A31=`vercel.ai.error.${T31}`,Ep6=Symbol.for(A31),YV=class extends(rH1=O1,aH1=Ep6,rH1){constructor({prompt:X,message:Y,cause:Q}){super({name:T31,message:`Invalid prompt: ${Y}`,cause:Q});this[aH1]=!0,this.prompt=X}static isInstance(X){return O1.hasMarker(X,A31)}},j31=`vercel.ai.error.${E31}`,jp6=Symbol.for(j31),b88=class extends(sH1=O1,oH1=jp6,sH1){constructor({data:X,message:Y=`Invalid response data: ${JSON.stringify(X)}.`}){super({name:E31,message:Y});this[oH1]=!0,this.data=X}static isInstance(X){return O1.hasMarker(X,j31)}},I31=`vercel.ai.error.${C31}`,Cp6=Symbol.for(I31),oT=class extends(eH1=O1,tH1=Cp6,eH1){constructor({text:X,cause:Y}){super({name:C31,message:`JSON parsing failed: Text: ${X}.
1188
+ `})}}}Gd6=[Ca({organizationCreation:{afterCreate:async(X)=>{await W$1(X.organization.id,X.member.userId)}},ac:If,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:$$1,resourceNameValidation:(X)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(X)}}},roles:{user:Yd6,admin:Qd6,owner:Jd6},sendInvitationEmail:q$1}),aa({loginPage:"/login",oidcConfig:{scopes:V$1,metadata:{scopes_supported:V$1},loginPage:"/login"}}),ia({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:(X)=>{if(X.headers?.get("X-MCP-Session-Auth")==="true")return null;let Q=X.headers?.get("Authorization");if(Q?.startsWith("Bearer "))return Q.replace("Bearer ","").trim();return null},permissions:{defaultPermissions:{self:["ORGANIZATION_LIST","ORGANIZATION_GET","ORGANIZATION_MEMBER_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","API_KEY_CREATE","API_KEY_LIST"]}},rateLimit:{enabled:!1}}),ya({defaultRole:"user",adminRoles:["admin","owner"]}),ta(),ha({jwt:{expirationTime:"5m"}}),BD0(WX.ssoConfig?K$1(WX.ssoConfig):void 0),...WX.magicLinkConfig&&WX.emailProviders&&WX.emailProviders.length>0?[sa(i41(WX.magicLinkConfig,WX.emailProviders))]:[]],Wd6=n60(),Zd6=c41(Wd6),WG=Ri({baseURL:process.env.BASE_URL||"http://localhost:3000",database:Zd6,emailAndPassword:{enabled:!0},...WX,rateLimit:{enabled:process.env.DISABLE_RATE_LIMIT!=="true",window:60,max:1e4},plugins:Gd6,databaseHooks:{user:{create:{after:async(X)=>{if(oL.autoCreateOrganizationOnSignup===!1)return;let Y=X.name?X.name.split(" ")[0]:X.email.split("@")[0],Q=3;for(let J=0;J<Q;J++){let G=`${Y} ${tl6()}`,W=sl6(G);try{await WG.api.createOrganization({body:{name:G,slug:W,userId:X.id}});return}catch(Z){if(!(Z instanceof Error&&("body"in Z)&&Z.body?.code==="ORGANIZATION_ALREADY_EXISTS")||J===Q-1){console.error("Failed to create default organization:",Z);return}}}}}}}})});async function U$1(){console.log("\uD83D\uDD10 Running Better Auth migrations...");try{let{toBeAdded:X,toBeCreated:Y,runMigrations:Q}=await KO(WG.options);if(!X.length&&!Y.length){console.log("\u2705 Better Auth schema is up to date (no migrations needed)");return}console.log("\uD83D\uDCCB Better Auth will create/update the following tables:");for(let J of[...Y,...X])console.log(` - ${J.table}`);await Q(),console.log("\u2705 Better Auth migrations completed successfully")}catch(X){console.warn("\u26A0\uFE0F Better Auth migration failed (tables may be created on first use):",X)}}var z$1=S(()=>{iZ0();uB()});var N$1={};c1(N$1,{runSeed:()=>Jx,runKyselyMigrations:()=>D$1,migrateToLatest:()=>$d6,migrateDown:()=>Kd6});import{Migrator as B$1}from"kysely";async function D$1(X){let Y=new B$1({db:X,provider:{getMigrations:()=>Promise.resolve(BA)}}),{error:Q,results:J}=await Y.migrateToLatest();if(J?.forEach((G)=>{if(G.status==="Success")console.log(`\u2705 Migration "${G.migrationName}" executed successfully`);else if(G.status==="Error")console.error(`\u274C Failed to execute migration "${G.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q}async function $d6(X){let{keepOpen:Y=!1,database:Q,skipBetterAuth:J=!1,seed:G}=X??{};if(!J&&!Q)await U$1();let W=Q??wF(),Z=async()=>{if(!Y&&!Q)console.log("\uD83D\uDD12 Closing database connection..."),await n41(W).catch(($)=>{console.warn("Warning: Error closing database:",$)})};try{console.log("\uD83D\uDCCA Running Kysely migrations..."),await D$1(W.db),console.log("\uD83C\uDF89 All Kysely migrations completed successfully");let $;if(G)$=await Jx(W.db,G);return await Z(),{seedResult:$}}catch($){throw await Z(),$}}async function Kd6(){let X=wF(),Y=new B$1({db:X.db,provider:{getMigrations:()=>Promise.resolve(BA)}}),{error:Q,results:J}=await Y.migrateDown();if(J?.forEach((G)=>{if(G.status==="Success")console.log(`\u2705 Migration "${G.migrationName}" rolled back successfully`);else if(G.status==="Error")console.error(`\u274C Failed to rollback migration "${G.migrationName}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var O$1=S(()=>{Qx();K50();z$1();tM()});var mK;var fT=S(()=>{mK=class extends Error{res;status;constructor(X=500,Y){super(Y?.message,{cause:Y?.cause});this.res=Y?.res,this.status=X}getResponse(){if(this.res)return new Response(this.res.body,{status:this.status,headers:this.res.headers});return new Response(this.message,{status:this.status})}}});var L$1,Hd6,Fd6=(X,Y)=>{if(!X)return{};let Q=new Headers(X.headers);if(Y){let J=Q.get("connection");if(J){let G=J.split(",").map((Z)=>Z.trim()),W=G.filter((Z)=>!Hd6.test(Z));if(W.length>0)throw new mK(400,{message:`Invalid Connection header value: ${W.join(", ")}`});G.forEach((Z)=>{Q.delete(Z)})}}return L$1.forEach((J)=>{Q.delete(J)}),{method:X.method,body:X.body,duplex:X.body?"half":void 0,headers:Q,signal:X.signal}},Vd6=(X)=>{if(!X.headers||Array.isArray(X.headers)||X.headers instanceof Headers)return X;let Y=new Headers;for(let[Q,J]of Object.entries(X.headers))if(J==null)Y.delete(Q);else Y.set(Q,J);return X.headers=Y,X},w$1=async(X,Y)=>{let{raw:Q,customFetch:J,strictConnectionProcessing:G=!1,...W}=Y instanceof Request?{raw:Y}:Y??{},Z=new Request(X,{...Fd6(Q,G),...Vd6(W)});Z.headers.delete("accept-encoding");let $=await(J||fetch)(Z),K=new Headers($.headers);if(L$1.forEach((H)=>{K.delete(H)}),K.has("content-encoding"))K.delete("content-encoding"),K.delete("content-length");return new Response($.body,{status:$.status,statusText:$.statusText,headers:K})};var M$1=S(()=>{fT();L$1=["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"],Hd6=/^[!#$%&'*+\-.0-9A-Z^_`a-z|~]+$/});var P$1=(X)=>(Y)=>{let Q=new URL(Y.req.raw.url),J=new URL(X);return J.pathname=Q.pathname,J.search=Q.search,w$1(J,{raw:Y.req.raw,headers:{...Y.req.raw.headers}})};var T$1=S(()=>{M$1()});import{resolve as hT,dirname as qd6,join as Ud6,extname as zd6}from"path";function Nd6(X,Y){let Q=hT(Y),J=hT(X);return J===Q||J.startsWith(Q+"/")}function Od6({requestPath:X,clientDir:Y}){let Q=X.startsWith("/")?X.slice(1):X,J=hT(Y,Q);if(!Nd6(J,Y))return null;return J}function A$1(X,Y="../client"){let Q=new URL(X),J=qd6(Q.pathname);return hT(J,Y)}function E$1(X={}){let{env:Y="production",devServerUrl:Q=Bd6,clientDir:J=Dd6,isServerPath:G=()=>!1}=X;if(Y==="development"){let W=P$1(Q);return async function($){let K=new URL($.url);if(G(K.pathname))return null;let H={req:{raw:$,url:$.url}};return W(H)}}return async function(Z){if(Z.method!=="GET")return null;let $=new URL(Z.url),K;try{K=decodeURIComponent($.pathname)}catch{return null}if(G(K))return null;let H=Od6({requestPath:K,clientDir:J});if(!H)return null;let F=Ud6(H,"index.html"),V=hT(J,"index.html"),q=Z.headers.get("accept"),D=q?.includes("text/html")||q?.includes("*/*")&&["",".html"].includes(zd6(H))?[F,V]:[];for(let N of[H,...D])try{let L=Bun.file(N);if(await L.exists())return new Response(L)}catch{}return null}}var Bd6="http://localhost:4000",Dd6="./dist/client";var j$1=S(()=>{T$1()});function I$1(X){if(!X)return!1;try{return new URL(X).host==="api.decocms.com"&&X!=="https://api.decocms.com/mcp/registry"}catch{return!1}}var C$1="https://api.decocms.com/mcp/registry";var YQ0=(X,Y,Q)=>{return(J,G)=>{let W=-1;return Z(0);async function Z($){if($<=W)throw Error("next() called multiple times");W=$;let K,H=!1,F;if(X[$])F=X[$][0][0],J.req.routeIndex=$;else F=$===X.length&&G||void 0;if(F)try{K=await F(J,()=>Z($+1))}catch(V){if(V instanceof Error&&Y)J.error=V,K=await Y(V,J),H=!0;else throw V}else if(J.finalized===!1&&Q)K=await Q(J);if(K&&(J.finalized===!1||H))J.res=K;return J}}};var R$1=()=>{};var S$1;var k$1=S(()=>{S$1=Symbol()});async function Ld6(X,Y){let Q=await X.formData();if(Q)return wd6(Q,Y);return{}}function wd6(X,Y){let Q=Object.create(null);if(X.forEach((J,G)=>{if(!(Y.all||G.endsWith("[]")))Q[G]=J;else Md6(Q,G,J)}),Y.dot)Object.entries(Q).forEach(([J,G])=>{if(J.includes("."))Pd6(Q,J,G),delete Q[J]});return Q}var v$1=async(X,Y=Object.create(null))=>{let{all:Q=!1,dot:J=!1}=Y,W=(X instanceof Rf?X.raw.headers:X.headers).get("Content-Type");if(W?.startsWith("multipart/form-data")||W?.startsWith("application/x-www-form-urlencoded"))return Ld6(X,{all:Q,dot:J});return{}},Md6=(X,Y,Q)=>{if(X[Y]!==void 0)if(Array.isArray(X[Y]))X[Y].push(Q);else X[Y]=[X[Y],Q];else if(!Y.endsWith("[]"))X[Y]=Q;else X[Y]=[Q]},Pd6=(X,Y,Q)=>{let J=X,G=Y.split(".");G.forEach((W,Z)=>{if(Z===G.length-1)J[W]=Q;else{if(!J[W]||typeof J[W]!=="object"||Array.isArray(J[W])||J[W]instanceof File)J[W]=Object.create(null);J=J[W]}})};var _$1=S(()=>{QQ0()});var GQ0=(X)=>{let Y=X.split("/");if(Y[0]==="")Y.shift();return Y},y$1=(X)=>{let{groups:Y,path:Q}=Td6(X),J=GQ0(Q);return Ad6(J,Y)},Td6=(X)=>{let Y=[];return X=X.replace(/\{[^}]+\}/g,(Q,J)=>{let G=`@${J}`;return Y.push([G,Q]),G}),{groups:Y,path:X}},Ad6=(X,Y)=>{for(let Q=Y.length-1;Q>=0;Q--){let[J]=Y[Q];for(let G=X.length-1;G>=0;G--)if(X[G].includes(J)){X[G]=X[G].replace(J,Y[Q][1]);break}}return X},Sf,b$1=(X,Y)=>{if(X==="*")return"*";let Q=X.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(Q){let J=`${X}#${Y}`;if(!Sf[J])if(Q[2])Sf[J]=Y&&Y[0]!==":"&&Y[0]!=="*"?[J,Q[1],new RegExp(`^${Q[2]}(?=/${Y})`)]:[X,Q[1],new RegExp(`^${Q[2]}$`)];else Sf[J]=[X,Q[1],!0];return Sf[J]}return null},mB=(X,Y)=>{try{return Y(X)}catch{return X.replace(/(?:%[0-9A-Fa-f]{2})+/g,(Q)=>{try{return Y(Q)}catch{return Q}})}},Ed6=(X)=>mB(X,decodeURI),WQ0=(X)=>{let Y=X.url,Q=Y.indexOf("/",Y.indexOf(":")+4),J=Q;for(;J<Y.length;J++){let G=Y.charCodeAt(J);if(G===37){let W=Y.indexOf("?",J),Z=Y.slice(Q,W===-1?void 0:W);return Ed6(Z.includes("%25")?Z.replace(/%25/g,"%2525"):Z)}else if(G===63)break}return Y.slice(Q,J)},f$1=(X)=>{let Y=WQ0(X);return Y.length>1&&Y.at(-1)==="/"?Y.slice(0,-1):Y},rF=(X,Y,...Q)=>{if(Q.length)Y=rF(Y,...Q);return`${X?.[0]==="/"?"":"/"}${X}${Y==="/"?"":`${X?.at(-1)==="/"?"":"/"}${Y?.[0]==="/"?Y.slice(1):Y}`}`},kf=(X)=>{if(X.charCodeAt(X.length-1)!==63||!X.includes(":"))return null;let Y=X.split("/"),Q=[],J="";return Y.forEach((G)=>{if(G!==""&&!/\:/.test(G))J+="/"+G;else if(/\:/.test(G))if(/\?/.test(G)){if(Q.length===0&&J==="")Q.push("/");else Q.push(J);let W=G.replace("?","");J+="/"+W,Q.push(J)}else J+="/"+G}),Q.filter((G,W,Z)=>Z.indexOf(G)===W)},JQ0=(X)=>{if(!/[%+]/.test(X))return X;if(X.indexOf("+")!==-1)X=X.replace(/\+/g," ");return X.indexOf("%")!==-1?mB(X,xT):X},h$1=(X,Y,Q)=>{let J;if(!Q&&Y&&!/[%+]/.test(Y)){let Z=X.indexOf("?",8);if(Z===-1)return;if(!X.startsWith(Y,Z+1))Z=X.indexOf(`&${Y}`,Z+1);while(Z!==-1){let $=X.charCodeAt(Z+Y.length+1);if($===61){let K=Z+Y.length+2,H=X.indexOf("&",K);return JQ0(X.slice(K,H===-1?void 0:H))}else if($==38||isNaN($))return"";Z=X.indexOf(`&${Y}`,Z+1)}if(J=/[%+]/.test(X),!J)return}let G={};J??=/[%+]/.test(X);let W=X.indexOf("?",8);while(W!==-1){let Z=X.indexOf("&",W+1),$=X.indexOf("=",W);if($>Z&&Z!==-1)$=-1;let K=X.slice(W+1,$===-1?Z===-1?void 0:Z:$);if(J)K=JQ0(K);if(W=Z,K==="")continue;let H;if($===-1)H="";else if(H=X.slice($+1,Z===-1?void 0:Z),J)H=JQ0(H);if(Q){if(!(G[K]&&Array.isArray(G[K])))G[K]=[];G[K].push(H)}else G[K]??=H}return Y?G[Y]:G},x$1,g$1=(X,Y)=>{return h$1(X,Y,!0)},xT;var oF=S(()=>{Sf={},x$1=h$1,xT=decodeURIComponent});var u$1=(X)=>mB(X,xT),Rf;var QQ0=S(()=>{fT();k$1();_$1();oF();Rf=class{raw;#X;#Y;routeIndex=0;path;bodyCache={};constructor(X,Y="/",Q=[[]]){this.raw=X,this.path=Y,this.#Y=Q,this.#X={}}param(X){return X?this.#Q(X):this.#J()}#Q(X){let Y=this.#Y[0][this.routeIndex][1][X],Q=this.#W(Y);return Q&&/\%/.test(Q)?u$1(Q):Q}#J(){let X={},Y=Object.keys(this.#Y[0][this.routeIndex][1]);for(let Q of Y){let J=this.#W(this.#Y[0][this.routeIndex][1][Q]);if(J!==void 0)X[Q]=/\%/.test(J)?u$1(J):J}return X}#W(X){return this.#Y[1]?this.#Y[1][X]:X}query(X){return x$1(this.url,X)}queries(X){return g$1(this.url,X)}header(X){if(X)return this.raw.headers.get(X)??void 0;let Y={};return this.raw.headers.forEach((Q,J)=>{Y[J]=Q}),Y}async parseBody(X){return this.bodyCache.parsedBody??=await v$1(this,X)}#G=(X)=>{let{bodyCache:Y,raw:Q}=this,J=Y[X];if(J)return J;let G=Object.keys(Y)[0];if(G)return Y[G].then((W)=>{if(G==="json")W=JSON.stringify(W);return new Response(W)[X]()});return Y[X]=Q[X]()};json(){return this.#G("text").then((X)=>JSON.parse(X))}text(){return this.#G("text")}arrayBuffer(){return this.#G("arrayBuffer")}blob(){return this.#G("blob")}formData(){return this.#G("formData")}addValidatedData(X,Y){this.#X[X]=Y}valid(X){return this.#X[X]}get url(){return this.raw.url}get method(){return this.raw.method}get[S$1](){return this.#Y}get matchedRoutes(){return this.#Y[0].map(([[,X]])=>X)}get routePath(){return this.#Y[0].map(([[,X]])=>X)[this.routeIndex].path}}});var vf,jd6=(X,Y)=>{let Q=new String(X);return Q.isEscaped=!0,Q.callbacks=Y,Q},gT=async(X,Y,Q,J,G)=>{if(typeof X==="object"&&!(X instanceof String)){if(!(X instanceof Promise))X=X.toString();if(X instanceof Promise)X=await X}let W=X.callbacks;if(!W?.length)return Promise.resolve(X);if(G)G[0]+=X;else G=[X];let Z=Promise.all(W.map(($)=>$({phase:Y,buffer:G,context:J}))).then(($)=>Promise.all($.filter(Boolean).map((K)=>gT(K,Y,!1,J,G))).then(()=>G[0]));if(Q)return jd6(await Z,W);else return Z};var ZQ0=S(()=>{vf={Stringify:1,BeforeStream:2,Stream:3}});var m$1="text/plain; charset=UTF-8",$Q0=(X,Y)=>{return{"Content-Type":X,...Y}},l$1=class{#X;#Y;env={};#Q;finalized=!1;error;#J;#W;#G;#$;#Z;#H;#K;#V;#q;constructor(X,Y){if(this.#X=X,Y)this.#W=Y.executionCtx,this.env=Y.env,this.#H=Y.notFoundHandler,this.#q=Y.path,this.#V=Y.matchResult}get req(){return this.#Y??=new Rf(this.#X,this.#q,this.#V),this.#Y}get event(){if(this.#W&&"respondWith"in this.#W)return this.#W;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#W)return this.#W;else throw Error("This context has no ExecutionContext")}get res(){return this.#G||=new Response(null,{headers:this.#K??=new Headers})}set res(X){if(this.#G&&X){X=new Response(X.body,X);for(let[Y,Q]of this.#G.headers.entries()){if(Y==="content-type")continue;if(Y==="set-cookie"){let J=this.#G.headers.getSetCookie();X.headers.delete("set-cookie");for(let G of J)X.headers.append("set-cookie",G)}else X.headers.set(Y,Q)}}this.#G=X,this.finalized=!0}render=(...X)=>{return this.#Z??=(Y)=>this.html(Y),this.#Z(...X)};setLayout=(X)=>this.#$=X;getLayout=()=>this.#$;setRenderer=(X)=>{this.#Z=X};header=(X,Y,Q)=>{if(this.finalized)this.#G=new Response(this.#G.body,this.#G);let J=this.#G?this.#G.headers:this.#K??=new Headers;if(Y===void 0)J.delete(X);else if(Q?.append)J.append(X,Y);else J.set(X,Y)};status=(X)=>{this.#J=X};set=(X,Y)=>{this.#Q??=new Map,this.#Q.set(X,Y)};get=(X)=>{return this.#Q?this.#Q.get(X):void 0};get var(){if(!this.#Q)return{};return Object.fromEntries(this.#Q)}#F(X,Y,Q){let J=this.#G?new Headers(this.#G.headers):this.#K??new Headers;if(typeof Y==="object"&&"headers"in Y){let W=Y.headers instanceof Headers?Y.headers:new Headers(Y.headers);for(let[Z,$]of W)if(Z.toLowerCase()==="set-cookie")J.append(Z,$);else J.set(Z,$)}if(Q)for(let[W,Z]of Object.entries(Q))if(typeof Z==="string")J.set(W,Z);else{J.delete(W);for(let $ of Z)J.append(W,$)}let G=typeof Y==="number"?Y:Y?.status??this.#J;return new Response(X,{status:G,headers:J})}newResponse=(...X)=>this.#F(...X);body=(X,Y,Q)=>this.#F(X,Y,Q);text=(X,Y,Q)=>{return!this.#K&&!this.#J&&!Y&&!Q&&!this.finalized?new Response(X):this.#F(X,Y,$Q0(m$1,Q))};json=(X,Y,Q)=>{return this.#F(JSON.stringify(X),Y,$Q0("application/json",Q))};html=(X,Y,Q)=>{let J=(G)=>this.#F(G,Y,$Q0("text/html; charset=UTF-8",Q));return typeof X==="object"?gT(X,vf.Stringify,!1,{}).then(J):J(X)};redirect=(X,Y)=>{let Q=String(X);return this.header("Location",!/[^\x00-\xFF]/.test(Q)?Q:encodeURI(Q)),this.newResponse(null,Y??302)};notFound=()=>{return this.#H??=()=>new Response,this.#H(this)}};var _f=S(()=>{QQ0();ZQ0()});var X8="ALL",d$1="all",p$1,yf="Can not add a route since the matcher is already built.",bf;var sF=S(()=>{p$1=["get","post","put","delete","options","patch"],bf=class extends Error{}});var c$1="__COMPOSED_HANDLER";var n$1=()=>{};var Cd6=(X)=>{return X.text("404 Not Found",404)},i$1=(X,Y)=>{if("getResponse"in X){let Q=X.getResponse();return Y.newResponse(Q.body,Q)}return console.error(X),Y.text("Internal Server Error",500)},a$1=class X{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#X="/";routes=[];constructor(Y={}){[...p$1,d$1].forEach((W)=>{this[W]=(Z,...$)=>{if(typeof Z==="string")this.#X=Z;else this.#J(W,this.#X,Z);return $.forEach((K)=>{this.#J(W,this.#X,K)}),this}}),this.on=(W,Z,...$)=>{for(let K of[Z].flat()){this.#X=K;for(let H of[W].flat())$.map((F)=>{this.#J(H.toUpperCase(),this.#X,F)})}return this},this.use=(W,...Z)=>{if(typeof W==="string")this.#X=W;else this.#X="*",Z.unshift(W);return Z.forEach(($)=>{this.#J(X8,this.#X,$)}),this};let{strict:J,...G}=Y;Object.assign(this,G),this.getPath=J??!0?Y.getPath??WQ0:f$1}#Y(){let Y=new X({router:this.router,getPath:this.getPath});return Y.errorHandler=this.errorHandler,Y.#Q=this.#Q,Y.routes=this.routes,Y}#Q=Cd6;errorHandler=i$1;route(Y,Q){let J=this.basePath(Y);return Q.routes.map((G)=>{let W;if(Q.errorHandler===i$1)W=G.handler;else W=async(Z,$)=>(await YQ0([],Q.errorHandler)(Z,()=>G.handler(Z,$))).res,W[c$1]=G.handler;J.#J(G.method,G.path,W)}),this}basePath(Y){let Q=this.#Y();return Q._basePath=rF(this._basePath,Y),Q}onError=(Y)=>{return this.errorHandler=Y,this};notFound=(Y)=>{return this.#Q=Y,this};mount(Y,Q,J){let G,W;if(J)if(typeof J==="function")W=J;else if(W=J.optionHandler,J.replaceRequest===!1)G=(K)=>K;else G=J.replaceRequest;let Z=W?(K)=>{let H=W(K);return Array.isArray(H)?H:[H]}:(K)=>{let H=void 0;try{H=K.executionCtx}catch{}return[K.env,H]};G||=(()=>{let K=rF(this._basePath,Y),H=K==="/"?0:K.length;return(F)=>{let V=new URL(F.url);return V.pathname=V.pathname.slice(H)||"/",new Request(V,F)}})();let $=async(K,H)=>{let F=await Q(G(K.req.raw),...Z(K));if(F)return F;await H()};return this.#J(X8,rF(Y,"*"),$),this}#J(Y,Q,J){Y=Y.toUpperCase(),Q=rF(this._basePath,Q);let G={basePath:this._basePath,path:Q,method:Y,handler:J};this.router.add(Y,Q,[J,G]),this.routes.push(G)}#W(Y,Q){if(Y instanceof Error)return this.errorHandler(Y,Q);throw Y}#G(Y,Q,J,G){if(G==="HEAD")return(async()=>new Response(null,await this.#G(Y,Q,J,"GET")))();let W=this.getPath(Y,{env:J}),Z=this.router.match(G,W),$=new l$1(Y,{path:W,matchResult:Z,env:J,executionCtx:Q,notFoundHandler:this.#Q});if(Z[0].length===1){let H;try{H=Z[0][0][0][0]($,async()=>{$.res=await this.#Q($)})}catch(F){return this.#W(F,$)}return H instanceof Promise?H.then((F)=>F||($.finalized?$.res:this.#Q($))).catch((F)=>this.#W(F,$)):H??this.#Q($)}let K=YQ0(Z[0],this.errorHandler,this.#Q);return(async()=>{try{let H=await K($);if(!H.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return H.res}catch(H){return this.#W(H,$)}})()}fetch=(Y,...Q)=>{return this.#G(Y,Q[1],Q[0],Y.method)};request=(Y,Q,J,G)=>{if(Y instanceof Request)return this.fetch(Q?new Request(Y,Q):Y,J,G);return Y=Y.toString(),this.fetch(new Request(/^https?:\/\//.test(Y)?Y:`http://localhost${rF("/",Y)}`,Q),J,G)};fire=()=>{addEventListener("fetch",(Y)=>{Y.respondWith(this.#G(Y.request,Y,void 0,Y.request.method))})}};var r$1=S(()=>{R$1();_f();sF();n$1();oF()});function ff(X,Y){let Q=this.buildAllMatchers(),J=(G,W)=>{let Z=Q[G]||Q[X8],$=Z[2][W];if($)return $;let K=W.match(Z[0]);if(!K)return[[],uT];let H=K.indexOf("",1);return[Z[1][H],K]};return this.match=J,J(X,Y)}var uT;var KQ0=S(()=>{sF();uT=[]});function Rd6(X,Y){if(X.length===1)return Y.length===1?X<Y?-1:1:-1;if(Y.length===1)return 1;if(X===mT||X===lT)return 1;else if(Y===mT||Y===lT)return-1;if(X===hf)return 1;else if(Y===hf)return-1;return X.length===Y.length?X<Y?-1:1:Y.length-X.length}var hf="[^/]+",mT=".*",lT="(?:|/.*)",tF,Id6,o$1=class X{#X;#Y;#Q=Object.create(null);insert(Y,Q,J,G,W){if(Y.length===0){if(this.#X!==void 0)throw tF;if(W)return;this.#X=Q;return}let[Z,...$]=Y,K=Z==="*"?$.length===0?["","",mT]:["","",hf]:Z==="/*"?["","",lT]:Z.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),H;if(K){let F=K[1],V=K[2]||hf;if(F&&K[2]){if(V===".*")throw tF;if(V=V.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(V))throw tF}if(H=this.#Q[V],!H){if(Object.keys(this.#Q).some((q)=>q!==mT&&q!==lT))throw tF;if(W)return;if(H=this.#Q[V]=new X,F!=="")H.#Y=G.varIndex++}if(!W&&F!=="")J.push([F,H.#Y])}else if(H=this.#Q[Z],!H){if(Object.keys(this.#Q).some((F)=>F.length>1&&F!==mT&&F!==lT))throw tF;if(W)return;H=this.#Q[Z]=new X}H.insert($,Q,J,G,W)}buildRegExpStr(){let Q=Object.keys(this.#Q).sort(Rd6).map((J)=>{let G=this.#Q[J];return(typeof G.#Y==="number"?`(${J})@${G.#Y}`:Id6.has(J)?`\\${J}`:J)+G.buildRegExpStr()});if(typeof this.#X==="number")Q.unshift(`#${this.#X}`);if(Q.length===0)return"";if(Q.length===1)return Q[0];return"(?:"+Q.join("|")+")"}};var HQ0=S(()=>{tF=Symbol(),Id6=new Set(".\\+*[^]$()")});var s$1=class{#X={varIndex:0};#Y=new o$1;insert(X,Y,Q){let J=[],G=[];for(let Z=0;;){let $=!1;if(X=X.replace(/\{[^}]+\}/g,(K)=>{let H=`@\\${Z}`;return G[Z]=[H,K],Z++,$=!0,H}),!$)break}let W=X.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let Z=G.length-1;Z>=0;Z--){let[$]=G[Z];for(let K=W.length-1;K>=0;K--)if(W[K].indexOf($)!==-1){W[K]=W[K].replace($,G[Z][1]);break}}return this.#Y.insert(W,Y,J,this.#X,Q),J}buildRegExp(){let X=this.#Y.buildRegExpStr();if(X==="")return[/^$/,[],[]];let Y=0,Q=[],J=[];return X=X.replace(/#(\d+)|@(\d+)|\.\*\$/g,(G,W,Z)=>{if(W!==void 0)return Q[++Y]=Number(W),"$()";if(Z!==void 0)return J[Number(Z)]=++Y,"";return""}),[new RegExp(`^${X}`),Q,J]}};var t$1=S(()=>{HQ0()});function XK1(X){return e$1[X]??=new RegExp(X==="*"?"":`^${X.replace(/\/\*$|([.\\+*[^\]$()])/g,(Y,Q)=>Q?`\\${Q}`:"(?:|/.*)")}$`)}function kd6(){e$1=Object.create(null)}function vd6(X){let Y=new s$1,Q=[];if(X.length===0)return Sd6;let J=X.map((H)=>[!/\*|\/:/.test(H[0]),...H]).sort(([H,F],[V,q])=>H?1:V?-1:F.length-q.length),G=Object.create(null);for(let H=0,F=-1,V=J.length;H<V;H++){let[q,z,D]=J[H];if(q)G[z]=[D.map(([L])=>[L,Object.create(null)]),uT];else F++;let N;try{N=Y.insert(z,F,q)}catch(L){throw L===tF?new bf(z):L}if(q)continue;Q[F]=D.map(([L,w])=>{let C=Object.create(null);w-=1;for(;w>=0;w--){let[A,T]=N[w];C[A]=T}return[L,C]})}let[W,Z,$]=Y.buildRegExp();for(let H=0,F=Q.length;H<F;H++)for(let V=0,q=Q[H].length;V<q;V++){let z=Q[H][V]?.[1];if(!z)continue;let D=Object.keys(z);for(let N=0,L=D.length;N<L;N++)z[D[N]]=$[z[D[N]]]}let K=[];for(let H in Z)K[H]=Q[Z[H]];return[W,K,G]}function lB(X,Y){if(!X)return;for(let Q of Object.keys(X).sort((J,G)=>G.length-J.length))if(XK1(Q).test(Y))return[...X[Q]];return}var Sd6,e$1,xf=class{name="RegExpRouter";#X;#Y;constructor(){this.#X={[X8]:Object.create(null)},this.#Y={[X8]:Object.create(null)}}add(X,Y,Q){let J=this.#X,G=this.#Y;if(!J||!G)throw Error(yf);if(!J[X])[J,G].forEach(($)=>{$[X]=Object.create(null),Object.keys($[X8]).forEach((K)=>{$[X][K]=[...$[X8][K]]})});if(Y==="/*")Y="*";let W=(Y.match(/\/:/g)||[]).length;if(/\*$/.test(Y)){let $=XK1(Y);if(X===X8)Object.keys(J).forEach((K)=>{J[K][Y]||=lB(J[K],Y)||lB(J[X8],Y)||[]});else J[X][Y]||=lB(J[X],Y)||lB(J[X8],Y)||[];Object.keys(J).forEach((K)=>{if(X===X8||X===K)Object.keys(J[K]).forEach((H)=>{$.test(H)&&J[K][H].push([Q,W])})}),Object.keys(G).forEach((K)=>{if(X===X8||X===K)Object.keys(G[K]).forEach((H)=>$.test(H)&&G[K][H].push([Q,W]))});return}let Z=kf(Y)||[Y];for(let $=0,K=Z.length;$<K;$++){let H=Z[$];Object.keys(G).forEach((F)=>{if(X===X8||X===F)G[F][H]||=[...lB(J[F],H)||lB(J[X8],H)||[]],G[F][H].push([Q,W-K+$+1])})}}match=ff;buildAllMatchers(){let X=Object.create(null);return Object.keys(this.#Y).concat(Object.keys(this.#X)).forEach((Y)=>{X[Y]||=this.#Q(Y)}),this.#X=this.#Y=void 0,kd6(),X}#Q(X){let Y=[],Q=X===X8;if([this.#X,this.#Y].forEach((J)=>{let G=J[X]?Object.keys(J[X]).map((W)=>[W,J[X][W]]):[];if(G.length!==0)Q||=!0,Y.push(...G);else if(X!==X8)Y.push(...Object.keys(J[X8]).map((W)=>[W,J[X8][W]]))}),!Q)return null;else return vd6(Y)}};var FQ0=S(()=>{sF();oF();KQ0();HQ0();t$1();Sd6=[/^$/,[],Object.create(null)],e$1=Object.create(null)});var _d6=class{name="PreparedRegExpRouter";#X;#Y;constructor(X,Y){this.#X=X,this.#Y=Y}#Q(X,Y){let Q=this.#X[X];Q[1].forEach((J)=>J&&J.push(Y)),Object.values(Q[2]).forEach((J)=>J[0].push(Y))}#J(X,Y,Q,J,G){let W=this.#X[X];if(!G)W[2][Y][0].push([Q,{}]);else J.forEach((Z)=>{if(typeof Z==="number")W[1][Z].push([Q,G]);else W[2][Z||Y][0].push([Q,G])})}add(X,Y,Q){if(!this.#X[X]){let G=this.#X[X8],W={};for(let Z in G[2])W[Z]=[G[2][Z][0].slice(),uT];this.#X[X]=[G[0],G[1].map((Z)=>Array.isArray(Z)?Z.slice():0),W]}if(Y==="/*"||Y==="*"){let G=[Q,{}];if(X===X8)for(let W in this.#X)this.#Q(W,G);else this.#Q(X,G);return}let J=this.#Y[Y];if(!J)throw Error(`Path ${Y} is not registered`);for(let[G,W]of J)if(X===X8)for(let Z in this.#X)this.#J(Z,Y,Q,G,W);else this.#J(X,Y,Q,G,W)}buildAllMatchers(){return this.#X}match=ff};var YK1=S(()=>{sF();KQ0();FQ0()});var QK1=S(()=>{FQ0();YK1()});var VQ0=class{name="SmartRouter";#X=[];#Y=[];constructor(X){this.#X=X.routers}add(X,Y,Q){if(!this.#Y)throw Error(yf);this.#Y.push([X,Y,Q])}match(X,Y){if(!this.#Y)throw Error("Fatal error");let Q=this.#X,J=this.#Y,G=Q.length,W=0,Z;for(;W<G;W++){let $=Q[W];try{for(let K=0,H=J.length;K<H;K++)$.add(...J[K]);Z=$.match(X,Y)}catch(K){if(K instanceof bf)continue;throw K}this.match=$.match.bind($),this.#X=[$],this.#Y=void 0;break}if(W===G)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,Z}get activeRouter(){if(this.#Y||this.#X.length!==1)throw Error("No active router has been determined yet.");return this.#X[0]}};var JK1=S(()=>{sF()});var GK1=S(()=>{JK1()});var dT,WK1=class X{#X;#Y;#Q;#J=0;#W=dT;constructor(Y,Q,J){if(this.#Y=J||Object.create(null),this.#X=[],Y&&Q){let G=Object.create(null);G[Y]={handler:Q,possibleKeys:[],score:0},this.#X=[G]}this.#Q=[]}insert(Y,Q,J){this.#J=++this.#J;let G=this,W=y$1(Q),Z=[];for(let $=0,K=W.length;$<K;$++){let H=W[$],F=W[$+1],V=b$1(H,F),q=Array.isArray(V)?V[0]:H;if(q in G.#Y){if(G=G.#Y[q],V)Z.push(V[1]);continue}if(G.#Y[q]=new X,V)G.#Q.push(V),Z.push(V[1]);G=G.#Y[q]}return G.#X.push({[Y]:{handler:J,possibleKeys:Z.filter(($,K,H)=>H.indexOf($)===K),score:this.#J}}),G}#G(Y,Q,J,G){let W=[];for(let Z=0,$=Y.#X.length;Z<$;Z++){let K=Y.#X[Z],H=K[Q]||K[X8],F={};if(H!==void 0){if(H.params=Object.create(null),W.push(H),J!==dT||G&&G!==dT)for(let V=0,q=H.possibleKeys.length;V<q;V++){let z=H.possibleKeys[V],D=F[H.score];H.params[z]=G?.[z]&&!D?G[z]:J[z]??G?.[z],F[H.score]=!0}}}return W}search(Y,Q){let J=[];this.#W=dT;let W=[this],Z=GQ0(Q),$=[];for(let K=0,H=Z.length;K<H;K++){let F=Z[K],V=K===H-1,q=[];for(let z=0,D=W.length;z<D;z++){let N=W[z],L=N.#Y[F];if(L)if(L.#W=N.#W,V){if(L.#Y["*"])J.push(...this.#G(L.#Y["*"],Y,N.#W));J.push(...this.#G(L,Y,N.#W))}else q.push(L);for(let w=0,C=N.#Q.length;w<C;w++){let A=N.#Q[w],T=N.#W===dT?{}:{...N.#W};if(A==="*"){let b=N.#Y["*"];if(b)J.push(...this.#G(b,Y,N.#W)),b.#W=T,q.push(b);continue}let[P,j,R]=A;if(!F&&!(R instanceof RegExp))continue;let v=N.#Y[P],y=Z.slice(K).join("/");if(R instanceof RegExp){let b=R.exec(y);if(b){if(T[j]=b[0],J.push(...this.#G(v,Y,N.#W,T)),Object.keys(v.#Y).length){v.#W=T;let f=b[0].match(/\//)?.length??0;($[f]||=[]).push(v)}continue}}if(R===!0||R.test(F))if(T[j]=F,V){if(J.push(...this.#G(v,Y,T,N.#W)),v.#Y["*"])J.push(...this.#G(v.#Y["*"],Y,T,N.#W))}else v.#W=T,q.push(v)}}W=q.concat($.shift()??[])}if(J.length>1)J.sort((K,H)=>{return K.score-H.score});return[J.map(({handler:K,params:H})=>[K,H])]}};var ZK1=S(()=>{sF();oF();dT=Object.create(null)});var qQ0=class{name="TrieRouter";#X;constructor(){this.#X=new WK1}add(X,Y,Q){let J=kf(Y);if(J){for(let G=0,W=J.length;G<W;G++)this.#X.insert(X,J[G],Q);return}this.#X.insert(X,Y,Q)}match(X,Y){return this.#X.search(X,Y)}};var $K1=S(()=>{oF();ZK1()});var KK1=S(()=>{$K1()});var ZX;var HK1=S(()=>{r$1();QK1();GK1();KK1();ZX=class extends a$1{constructor(X={}){super(X);this.router=X.router??new VQ0({routers:[new xf,new qQ0]})}}});var ZG=S(()=>{HK1()});var yd6,bd6,UQ0=(X,Y)=>{if(Y&&X.indexOf(Y)===-1)return{};let Q=X.trim().split(";"),J={};for(let G of Q){G=G.trim();let W=G.indexOf("=");if(W===-1)continue;let Z=G.substring(0,W).trim();if(Y&&Y!==Z||!yd6.test(Z))continue;let $=G.substring(W+1).trim();if($.startsWith('"')&&$.endsWith('"'))$=$.slice(1,-1);if(bd6.test($)){if(J[Z]=$.indexOf("%")!==-1?mB($,xT):$,Y)break}}return J};var FK1=S(()=>{oF();yd6=/^[\w!#$%&'*.^`|~+-]+$/,bd6=/^[ !#-:<-[\]-~]*$/});var VK1=(X,Y,Q)=>{let J=X.req.raw.headers.get("Cookie");if(typeof Y==="string"){if(!J)return;let W=Y;if(Q==="secure")W="__Secure-"+Y;else if(Q==="host")W="__Host-"+Y;return UQ0(J,W)[W]}if(!J)return{};return UQ0(J)};var qK1=S(()=>{FK1()});var UK1=(X)=>{let Q={...{origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[]},...X},J=((W)=>{if(typeof W==="string")if(W==="*")return()=>W;else return(Z)=>W===Z?Z:null;else if(typeof W==="function")return W;else return(Z)=>W.includes(Z)?Z:null})(Q.origin),G=((W)=>{if(typeof W==="function")return W;else if(Array.isArray(W))return()=>W;else return()=>[]})(Q.allowMethods);return async function(Z,$){function K(F,V){Z.res.headers.set(F,V)}let H=await J(Z.req.header("origin")||"",Z);if(H)K("Access-Control-Allow-Origin",H);if(Q.credentials)K("Access-Control-Allow-Credentials","true");if(Q.exposeHeaders?.length)K("Access-Control-Expose-Headers",Q.exposeHeaders.join(","));if(Z.req.method==="OPTIONS"){if(Q.origin!=="*")K("Vary","Origin");if(Q.maxAge!=null)K("Access-Control-Max-Age",Q.maxAge.toString());let F=await G(Z.req.header("origin")||"",Z);if(F.length)K("Access-Control-Allow-Methods",F.join(","));let V=Q.allowHeaders;if(!V?.length){let q=Z.req.header("Access-Control-Request-Headers");if(q)V=q.split(/\s*,\s*/)}if(V?.length)K("Access-Control-Allow-Headers",V.join(",")),Z.res.headers.append("Vary","Access-Control-Request-Headers");return Z.res.headers.delete("Content-Length"),Z.res.headers.delete("Content-Type"),new Response(null,{headers:Z.res.headers,status:204,statusText:"No Content"})}if(await $(),Q.origin!=="*")Z.header("Vary","Origin",{append:!0})}};var zK1=()=>{};function fd6(){let{process:X,Deno:Y}=globalThis;return!(typeof Y?.noColor==="boolean"?Y.noColor:X!==void 0?"NO_COLOR"in X?.env:!1)}async function BK1(){let{navigator:X}=globalThis,Y="cloudflare:workers";return!(X!==void 0&&X.userAgent==="Cloudflare-Workers"?await(async()=>{try{return"NO_COLOR"in((await import("cloudflare:workers")).env??{})}catch{return!1}})():!fd6())}var DK1=()=>{};async function NK1(X,Y,Q,J,G=0,W){let Z=Y==="<--"?`${Y} ${Q} ${J}`:`${Y} ${Q} ${J} ${await gd6(G)} ${W}`;X(Z)}var hd6=(X)=>{let[Y,Q]=[",","."];return X.map((G)=>G.replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+Y)).join(Q)},xd6=(X)=>{let Y=Date.now()-X;return hd6([Y<1000?Y+"ms":Math.round(Y/1000)+"s"])},gd6=async(X)=>{if(await BK1())switch(X/100|0){case 5:return`\x1B[31m${X}\x1B[0m`;case 4:return`\x1B[33m${X}\x1B[0m`;case 3:return`\x1B[36m${X}\x1B[0m`;case 2:return`\x1B[32m${X}\x1B[0m`}return`${X}`},OK1=(X=console.log)=>{return async function(Q,J){let{method:G,url:W}=Q.req,Z=W.slice(W.indexOf("/",8));await NK1(X,"<--",G,Z);let $=Date.now();await J(),await NK1(X,"-->",G,Z,Q.res.status,xd6($))}};var LK1=S(()=>{DK1()});var wK1=()=>{try{return performance.now()}catch{}return Date.now()},zQ0=(X)=>{let Y={total:!0,enabled:!0,totalDescription:"Total Response Time",autoEnd:!0,crossOrigin:!1,...X};return async function(J,G){let W=[],Z=new Map;if(J.get("metric"))return await G();if(J.set("metric",{headers:W,timers:Z}),Y.total)dB(J,"total",Y.totalDescription);if(await G(),Y.total)eF(J,"total");if(Y.autoEnd)Z.forEach((K,H)=>eF(J,H));if(typeof Y.enabled==="function"?Y.enabled(J):Y.enabled){J.res.headers.append("Server-Timing",W.join(","));let K=typeof Y.crossOrigin==="function"?Y.crossOrigin(J):Y.crossOrigin;if(K)J.res.headers.append("Timing-Allow-Origin",typeof K==="string"?K:"*")}}},MK1=(X,Y,Q,J,G)=>{let W=X.get("metric");if(!W){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}if(typeof Q==="number"){let Z=Q.toFixed(G||1),$=J?`${Y};dur=${Z};desc="${J}"`:`${Y};dur=${Z}`;W.headers.push($)}else{let Z=Q?`${Y};desc="${Q}"`:`${Y}`;W.headers.push(Z)}},dB=(X,Y,Q)=>{let J=X.get("metric");if(!J){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}J.timers.set(Y,{description:Q,start:wK1()})},eF=(X,Y,Q)=>{let J=X.get("metric");if(!J){console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");return}let G=J.timers.get(Y);if(!G){console.warn(`Timer "${Y}" does not exist!`);return}let{description:W,start:Z}=G,$=wK1()-Z;MK1(X,Y,$,W,Q),J.timers.delete(Y)};var PK1=S(()=>{_f()});var TK1=S(()=>{PK1()});import{randomBytes as ud6}from"crypto";function AK1(){if(pT)return pT;let X=process.env.MESH_JWT_SECRET??WX.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(X)pT=new TextEncoder().encode(X);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),pT=new Uint8Array(ud6(32));return pT}async function EK1(X,Y="5m"){let Q=AK1();return await new n9(X).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Y).sign(Q)}async function jK1(X){try{let Y=AK1(),{payload:Q}=await $8(X,Y);return Q}catch{return}}var pT=null;var BQ0=S(()=>{SQ();uB()});class DQ0{db;constructor(X){this.db=X}async create(X,Y,Q){let J=GX("vir"),G=new Date().toISOString();if(await this.db.insertInto("connections").values({id:J,organization_id:X,created_by:Y,title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${J}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata?JSON.stringify(Q.metadata):null,tools:null,bindings:null,status:Q.status??"active",created_at:G,updated_at:G}).execute(),Q.connections.length>0)await this.db.insertInto("connection_aggregations").values(Q.connections.map((Z)=>({id:GX("agg"),parent_connection_id:J,child_connection_id:Z.connection_id,selected_tools:Z.selected_tools?JSON.stringify(Z.selected_tools):null,selected_resources:Z.selected_resources?JSON.stringify(Z.selected_resources):null,selected_prompts:Z.selected_prompts?JSON.stringify(Z.selected_prompts):null,created_at:G}))).execute();let W=await this.findById(J);if(!W)throw Error(`Failed to create virtual MCP with id: ${J}`);return W}async findById(X){return this.findByIdInternal(this.db,X)}async findByIdInternal(X,Y){let Q=await X.selectFrom("connections").selectAll().where("id","=",Y).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!Q)return null;let J=await X.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Y).execute();return this.deserializeVirtualMCPEntity(Q,J)}async list(X){let Y=await this.db.selectFrom("connections").selectAll().where("organization_id","=",X).where("connection_type","=","VIRTUAL").execute(),Q=Y.map((W)=>W.id);if(Q.length===0)return[];let J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).execute(),G=new Map;for(let W of J){let Z=G.get(W.parent_connection_id)??[];Z.push(W),G.set(W.parent_connection_id,Z)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,G.get(W.id)??[]))}async listByConnectionId(X,Y){let J=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Y).execute()).map((K)=>K.parent_connection_id);if(J.length===0)return[];let G=await this.db.selectFrom("connections").selectAll().where("id","in",J).where("organization_id","=",X).where("connection_type","=","VIRTUAL").execute();if(G.length===0)return[];let W=G.map((K)=>K.id),Z=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",W).execute(),$=new Map;for(let K of Z){let H=$.get(K.parent_connection_id)??[];H.push(K),$.set(K.parent_connection_id,H)}return G.map((K)=>this.deserializeVirtualMCPEntity(K,$.get(K.id)??[]))}async update(X,Y,Q){let J=new Date().toISOString(),G={updated_at:J};if(Q.title!==void 0)G.title=Q.title;if(Q.description!==void 0)G.description=Q.description;if(Q.icon!==void 0)G.icon=Q.icon;if(Q.status!==void 0)G.status=Q.status;if(Q.metadata!==void 0)G.metadata=Q.metadata?JSON.stringify(Q.metadata):null;if(await this.db.updateTable("connections").set(G).where("id","=",X).where("connection_type","=","VIRTUAL").execute(),Q.connections!==void 0){if(await this.db.deleteFrom("connection_aggregations").where("parent_connection_id","=",X).execute(),Q.connections.length>0)await this.db.insertInto("connection_aggregations").values(Q.connections.map((Z)=>({id:GX("agg"),parent_connection_id:X,child_connection_id:Z.connection_id,selected_tools:Z.selected_tools?JSON.stringify(Z.selected_tools):null,selected_resources:Z.selected_resources?JSON.stringify(Z.selected_resources):null,selected_prompts:Z.selected_prompts?JSON.stringify(Z.selected_prompts):null,created_at:J}))).execute()}let W=await this.findById(X);if(!W)throw Error("Virtual MCP not found after update");return W}async delete(X){await this.db.deleteFrom("connection_aggregations").where("parent_connection_id","=",X).execute(),await this.db.deleteFrom("connections").where("id","=",X).where("connection_type","=","VIRTUAL").execute()}deserializeVirtualMCPEntity(X,Y){let Q=X.created_at instanceof Date?X.created_at.toISOString():X.created_at,J=X.updated_at instanceof Date?X.updated_at.toISOString():X.updated_at,G=X.status==="active"?"active":"inactive";return{id:X.id,organization_id:X.organization_id,title:X.title,description:X.description,tool_selection_mode:"inclusion",icon:X.icon,status:G,created_at:Q,updated_at:J,created_by:X.created_by,updated_by:void 0,metadata:this.parseJson(X.metadata),connections:Y.map((W)=>({connection_id:W.child_connection_id,selected_tools:this.parseJson(W.selected_tools),selected_resources:this.parseJson(W.selected_resources),selected_prompts:this.parseJson(W.selected_prompts)}))}}parseJson(X){if(X===null)return null;if(typeof X==="string")try{return JSON.parse(X)}catch{return null}return X}}var CK1=S(()=>{LZ()});class NQ0{patterns=[{type:"email",regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g},{type:"api_key",regex:/(?:api[_-]?key|token|secret|password|bearer)\s*[:=]\s*['"]?[\w-]{16,}['"]?/gi},{type:"jwt",regex:/eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/=]*/g},{type:"credit_card",regex:/\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g},{type:"ssn",regex:/\b\d{3}-\d{2}-\d{4}\b/g}];redact(X){return oM.startActiveSpan("redactor.redact",(Y)=>{try{if(X===null||X===void 0)return X;if(typeof X==="string")return Y.setAttribute("data.type","string"),this.redactString(X);if(Array.isArray(X))return Y.setAttribute("data.type","array"),Y.setAttribute("data.length",X.length),X.map((Q)=>this.redact(Q));if(typeof X==="object"){Y.setAttribute("data.type","object");let Q={};for(let[J,G]of Object.entries(X)){let W=this.redactString(J);Q[W]=this.redact(G)}return Q}return Y.setAttribute("data.type",typeof X),X}finally{Y.end()}})}redactString(X){return oM.startActiveSpan("redactor.redactString",(Y)=>{try{Y.setAttribute("text.length",X.length);let Q=X,J=0;for(let G of this.patterns){let W=X.match(G.regex);if(W)J+=W.length,Y.setAttribute(`redaction.${G.type}.count`,W.length);Q=Q.replace(G.regex,`[REDACTED:${G.type}]`)}return Y.setAttribute("redaction.total_count",J),Q}finally{Y.end()}})}}var IK1=S(()=>{sM()});import{sql as gf}from"kysely";class OQ0{db;redactor;databaseType;constructor(X,Y="sqlite"){this.db=X;this.redactor=new NQ0,this.databaseType=Y}jsonExtract(X,Y){if(this.databaseType==="postgres")return gf`(${gf.ref(X)}::jsonb)->>${Y}`;let Q=`$.${Y}`;return gf`json_extract(${gf.ref(X)}, ${Q})`}async log(X){await this.logBatch([X])}async logBatch(X){if(X.length===0)return;let Y=X.map((Q)=>({...Q,input:this.redactor.redact(Q.input),output:this.redactor.redact(Q.output)}));await this.db.transaction().execute(async(Q)=>{await Q.insertInto("monitoring_logs").values(Y.map((J)=>this.toDbRow(J))).execute()})}async query(X){let Y=this.db.selectFrom("monitoring_logs").selectAll(),Q=this.db.selectFrom("monitoring_logs").select(($)=>$.fn.count("id").as("count"));if(X.organizationId)Y=Y.where("organization_id","=",X.organizationId),Q=Q.where("organization_id","=",X.organizationId);if(X.connectionId)Y=Y.where("connection_id","=",X.connectionId),Q=Q.where("connection_id","=",X.connectionId);if(X.virtualMcpId)Y=Y.where("virtual_mcp_id","=",X.virtualMcpId),Q=Q.where("virtual_mcp_id","=",X.virtualMcpId);if(X.toolName)Y=Y.where("tool_name","=",X.toolName),Q=Q.where("tool_name","=",X.toolName);if(X.isError!==void 0)Y=Y.where("is_error","=",X.isError?1:0),Q=Q.where("is_error","=",X.isError?1:0);if(X.startDate)Y=Y.where("timestamp",">=",X.startDate.toISOString()),Q=Q.where("timestamp",">=",X.startDate.toISOString());if(X.endDate)Y=Y.where("timestamp","<=",X.endDate.toISOString()),Q=Q.where("timestamp","<=",X.endDate.toISOString());if(X.propertyFilters){let{properties:$,propertyKeys:K,propertyPatterns:H}=X.propertyFilters;if($)for(let[F,V]of Object.entries($)){let q=this.jsonExtract("properties",F);Y=Y.where(q,"=",V),Q=Q.where(q,"=",V)}if(K&&K.length>0)for(let F of K){let V=this.jsonExtract("properties",F);Y=Y.where(V,"is not",null),Q=Q.where(V,"is not",null)}if(H)for(let[F,V]of Object.entries(H)){let q=this.jsonExtract("properties",F),z=this.databaseType==="postgres"?"ilike":"like";Y=Y.where(q,z,V),Q=Q.where(q,z,V)}}if(Y=Y.orderBy("timestamp","desc"),X.limit)Y=Y.limit(X.limit);if(X.offset)Y=Y.offset(X.offset);let[J,G]=await Promise.all([Y.execute(),Q.executeTakeFirst()]),W=Number(G?.count||0);return{logs:J.map(($)=>this.fromDbRow($)),total:W}}async getStats(X){let Y=this.db.selectFrom("monitoring_logs").where("organization_id","=",X.organizationId);if(X.startDate)Y=Y.where("timestamp",">=",X.startDate.toISOString());if(X.endDate)Y=Y.where("timestamp","<=",X.endDate.toISOString());let Q=await Y.select([(Z)=>Z.fn.count("id").as("total_count"),(Z)=>Z.fn.sum(Z.ref("is_error")).as("error_count"),(Z)=>Z.fn.avg("duration_ms").as("avg_duration")]).executeTakeFirst(),J=Number(Q?.total_count||0),G=Number(Q?.error_count||0),W=Number(Q?.avg_duration||0);return{totalCalls:J,errorRate:J>0?G/J:0,avgDurationMs:W}}toDbRow(X){return{id:X.id||GX("log"),organization_id:X.organizationId,connection_id:X.connectionId,connection_title:X.connectionTitle,tool_name:X.toolName,input:JSON.stringify(X.input),output:JSON.stringify(X.output),is_error:X.isError?1:0,error_message:X.errorMessage||null,duration_ms:X.durationMs,timestamp:X.timestamp instanceof Date?X.timestamp.toISOString():X.timestamp,user_id:X.userId||null,request_id:X.requestId,user_agent:X.userAgent||null,virtual_mcp_id:X.virtualMcpId||null,properties:X.properties?JSON.stringify(X.properties):null}}fromDbRow(X){let Y=typeof X.input==="string"?JSON.parse(X.input):X.input,Q=typeof X.output==="string"?JSON.parse(X.output):X.output,J=typeof X.timestamp==="string"?new Date(X.timestamp):X.timestamp,G=X.properties?typeof X.properties==="string"?JSON.parse(X.properties):X.properties:null;return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,connectionTitle:X.connection_title,toolName:X.tool_name,input:Y,output:Q,isError:X.is_error===1,errorMessage:X.error_message,durationMs:X.duration_ms,timestamp:J,userId:X.user_id,requestId:X.request_id,userAgent:X.user_agent,virtualMcpId:X.virtual_mcp_id,properties:G}}}var RK1=S(()=>{IK1();LZ()});class LQ0{db;constructor(X){this.db=X}async get(X){let Y=await this.db.selectFrom("organization_settings").selectAll().where("organizationId","=",X).executeTakeFirst();if(!Y)return null;return{organizationId:Y.organizationId,sidebar_items:Y.sidebar_items?typeof Y.sidebar_items==="string"?JSON.parse(Y.sidebar_items):Y.sidebar_items:null,enabled_plugins:Y.enabled_plugins?typeof Y.enabled_plugins==="string"?JSON.parse(Y.enabled_plugins):Y.enabled_plugins:null,createdAt:Y.createdAt,updatedAt:Y.updatedAt}}async upsert(X,Y){let Q=new Date().toISOString(),J=Y?.sidebar_items?JSON.stringify(Y.sidebar_items):null,G=Y?.enabled_plugins?JSON.stringify(Y.enabled_plugins):null;await this.db.insertInto("organization_settings").values({organizationId:X,sidebar_items:J,enabled_plugins:G,createdAt:Q,updatedAt:Q}).onConflict((Z)=>Z.column("organizationId").doUpdateSet({sidebar_items:J?J:void 0,enabled_plugins:G?G:void 0,updatedAt:Q})).execute();let W=await this.get(X);if(!W)return{organizationId:X,sidebar_items:Y?.sidebar_items??null,enabled_plugins:Y?.enabled_plugins??null,createdAt:Q,updatedAt:Q};return W}}class wQ0{db;constructor(X){this.db=X}async findById(X,Y){let Q=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",X).where((J)=>J.exists(J.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",X).where("m2.userId","=",Y))).executeTakeFirst();if(!Q)return null;return{id:Q.id,name:Q.name,email:Q.email,role:"",createdAt:Q.createdAt,updatedAt:Q.updatedAt,image:Q.image??void 0}}}var SK1="mcp.mesh";var kK1,MQ0,lK;var uf=S(()=>{kK1=class kK1 extends Error{constructor(X){super(X);this.name="UnauthorizedError"}};MQ0=class MQ0 extends Error{constructor(X){super(X);this.name="ForbiddenError"}};lK=class lK{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(X,Y,Q,J,G,W="self",Z){this.userId=Y;this.toolName=Q;this.boundAuth=J;this.role=G;this.connectionId=W;this.getToolMeta=Z}[Symbol.dispose](){this._granted=!1}setToolName(X){this.toolName=X}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...X){if(this._granted)return;if(this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new kK1("Authentication required. Please provide a valid OAuth token or API key.")}let Y=X.length>0?X:this.toolName?[this.toolName]:[];if(Y.length===0)throw new MQ0("No resources specified for access check");for(let Q of Y)if(await this.checkResource(Q)){this.grant();return}throw new MQ0(`Access denied to: ${Y.join(", ")}`)}async checkResource(X){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Y={};if(this.connectionId)Y[this.connectionId]=[X];return this.boundAuth.hasPermission(Y)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let X=await this.getToolMeta();if(!X)return!1;let Q=X[SK1]?.public_tool;return Q===!0||Q==="true"}catch{return!1}}granted(){return this._granted}}});function vK1(X){let Y=null;return()=>{if(Y)return Y;return Y=X().catch((Q)=>{throw Y=null,Q}),Y}}class _K1{factory;promise=null;constructor(X){this.factory=X}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(X,Y){return this.getOrCreatePromise().then(X,Y)}catch(X){return this.getOrCreatePromise().catch(X)}finally(X){return this.getOrCreatePromise().finally(X)}}function l7(X){return new _K1(X)}class PQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadPrompts())}async loadPrompts(){let X=await this.proxies.mapSettled(async(G,W)=>{try{let $=(await G.proxy.client.listPrompts()).prompts;if(this.options.selectionMode==="exclusion"){if(G.selectedPrompts&&G.selectedPrompts.length>0){let K=new Set(G.selectedPrompts);$=$.filter((H)=>!K.has(H.name))}}else if(!G.selectedPrompts||G.selectedPrompts.length===0)$=[];else{let K=new Set(G.selectedPrompts);$=$.filter((H)=>K.has(H.name))}return{connectionId:W,prompts:$}}catch(Z){return console.error(`[PromptAggregator] Failed to list prompts for connection ${W}:`,Z),{connectionId:W,prompts:[]}}}),Y=new Set,Q=[],J=new Map;for(let G of X){if(G.status!=="fulfilled")continue;let{connectionId:W,prompts:Z}=G.value;for(let $ of Z){if(Y.has($.name))continue;Y.add($.name),Q.push($),J.set($.name,W)}}return{prompts:Q,mappings:J}}async list(){return{prompts:(await this.cache).prompts}}async get(X){let Q=(await this.cache).mappings.get(X.name);if(!Q)throw Error(`Prompt not found: ${X.name}`);let J=this.proxies.get(Q);if(!J)throw Error(`Connection not found for prompt: ${X.name}`);return await J.proxy.client.getPrompt(X)}}var yK1=()=>{};function md6(X,Y){if(X===Y)return!0;if(!Y.includes("*"))return!1;let Q=Y.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"<<<DOUBLE_STAR>>>").replace(/\*/g,"[^/]*").replace(/<<<DOUBLE_STAR>>>/g,".*");Q=`^${Q}$`;try{return new RegExp(Q).test(X)}catch{return!1}}function bK1(X,Y){return Y.some((Q)=>md6(X,Q))}class TQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadResources())}async loadResources(){let X=await this.proxies.mapSettled(async(G,W)=>{try{let $=(await G.proxy.client.listResources()).resources;if(this.options.selectionMode==="exclusion"){if(G.selectedResources&&G.selectedResources.length>0)$=$.filter((K)=>!bK1(K.uri,G.selectedResources))}else if(!G.selectedResources||G.selectedResources.length===0)$=[];else $=$.filter((K)=>bK1(K.uri,G.selectedResources));return{connectionId:W,resources:$}}catch(Z){if(!(Z instanceof J1)||Z.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list resources for connection ${W}: (defaulting to empty array)`,Z);return{connectionId:W,resources:[]}}}),Y=new Set,Q=[],J=new Map;for(let G of X){if(G.status!=="fulfilled")continue;let{connectionId:W,resources:Z}=G.value;for(let $ of Z){if(Y.has($.uri))continue;Y.add($.uri),Q.push($),J.set($.uri,W)}}return{resources:Q,mappings:J}}async list(){return{resources:(await this.cache).resources}}async read(X){let Q=(await this.cache).mappings.get(X.uri);if(!Q)throw Error(`Resource not found: ${X.uri}`);let J=this.proxies.get(Q);if(!J)throw Error(`Connection not found for resource: ${X.uri}`);return await J.proxy.client.readResource(X)}}var fK1=S(()=>{RX()});class AQ0{proxies;cache;constructor(X){this.proxies=X;this.cache=l7(()=>this.loadResourceTemplates())}async loadResourceTemplates(){let X=await this.proxies.mapSettled(async(Q,J)=>{try{let G=await Q.proxy.client.listResourceTemplates();return{connectionId:J,templates:G.resourceTemplates}}catch(G){if(!(G instanceof J1)||G.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list resource templates for connection ${J}: (defaulting to empty array)`,G);return{connectionId:J,templates:[]}}}),Y=[];for(let Q of X){if(Q.status!=="fulfilled")continue;let{templates:J}=Q.value;for(let G of J)Y.push(G)}return{templates:Y}}async list(){return{resourceTemplates:(await this.cache).templates}}}var hK1=S(()=>{RX()});function cd6(X){let Y=X.slice().sort().join(","),Q=xK1.get(Y);if(!Q){let J=U.object({name:(X.length>0?U.enum(X):U.string()).describe("The name of the tool to execute"),arguments:U.record(U.string(),U.unknown()).default({}).describe("Arguments to pass to the tool")});Q={schema:J,jsonSchema:U.toJSONSchema(J)},xK1.set(Y,Q)}return Q}function lK1(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_SEARCH_TOOLS",description:`Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling GATEWAY_DESCRIBE_TOOLS for detailed schemas.${X.categories.length>0?` Available categories: ${X.categories.join(", ")}.`:""} Total tools: ${Y.length}.`,inputSchema:ld6},handler:async(J)=>{let G=gK1.safeParse(J);if(!G.success)return fB({error:G.error.flatten()});let W=Uf(G.data.query,Y,G.data.limit);return Df({query:G.data.query,results:W.map((Z)=>({name:Z.name,description:Z.description,connection:Z._meta.connectionTitle})),totalAvailable:Y.length})}}}function dK1(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after GATEWAY_SEARCH_TOOLS to get full input/output schemas.",inputSchema:dd6},handler:async(Q)=>{let J=uK1.safeParse(Q);if(!J.success)return fB({error:J.error.flatten()});let G=zf(J.data.tools,Y);return Df({tools:G.tools,notFound:G.notFound})}}}function nd6(X){let Y=zT(X.tools),Q=Y.map((Z)=>Z.name),J=new Map(Y.map((Z)=>[Z.name,Z])),{schema:G,jsonSchema:W}=cd6(Q);return{tool:{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:W},handler:async(Z)=>{let $=G.safeParse(Z);if(!$.success)return fB({error:$.error.flatten()});let{name:K,arguments:H}=$.data;if(!J.has(K))return{content:[{type:"text",text:`Tool not found: ${K}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return X.callTool(K,H)}}}function id6(X){let Y=zT(X.tools);return{tool:{name:"GATEWAY_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use GATEWAY_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',inputSchema:pd6},handler:async(Q)=>{let J=mK1.safeParse(Q);if(!J.success)return fB({error:J.error.flatten()});let G={...X,tools:Y},W=await Bf(J.data.code,G,J.data.timeoutMs);if(W.error)return fB(W);return Df(W)}}}function pK1(X){let Y=new Map(X.map((J)=>[J.tool.name,J.handler])),Q=X.map((J)=>J.tool.name);return{tools:X.map((J)=>J.tool),callTool:async(J,G)=>{let W=Y.get(J);if(!W)return{content:[{type:"text",text:`Unknown meta-tool: ${J}. Available: ${Q.join(", ")}`}],isError:!0};return W(G)}}}function cK1(X){switch(X){case"smart_tool_selection":return od6;case"code_execution":return rd6;case"passthrough":default:return ad6}}function nK1(X){switch(X){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}var gK1,ld6,uK1,dd6,mK1,pd6,xK1,ad6=(X)=>({tools:X.tools,callTool:(Y,Q)=>X.callTool(Y,Q)}),rd6=(X)=>pK1([lK1(X),dK1(X),id6(X)]),od6=(X)=>pK1([lK1(X),dK1(X),nd6(X)]);var EQ0=S(()=>{r0();BT();gK1=U.object({query:U.string().min(1).describe("Search query to find tools by name or description"),limit:U.number().default(10).describe("Maximum number of results to return")}),ld6=U.toJSONSchema(gK1),uK1=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),dd6=U.toJSONSchema(uK1),mK1=U.object({code:U.string().min(1).describe("JavaScript code to execute. It runs as an async function body; you can use top-level `return` and `await`."),timeoutMs:U.number().default(3000).describe("Max execution time in milliseconds (default: 3000).")}),pd6=U.toJSONSchema(mK1),xK1=new Map});class jQ0{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=l7(()=>this.loadTools())}async loadTools(){let X=await this.proxies.mapSettled(async(K,H)=>{try{let V=(await K.proxy.client.listTools()).tools;if(this.options.selectionMode==="exclusion"){if(K.selectedTools&&K.selectedTools.length>0){let q=new Set(K.selectedTools);V=V.filter((z)=>!q.has(z.name))}}else if(K.selectedTools&&K.selectedTools.length>0){let q=new Set(K.selectedTools);V=V.filter((z)=>q.has(z.name))}return{connectionId:H,connectionTitle:K.connection.title,tools:V}}catch(F){if(!(F instanceof J1)||F.code!==K1.MethodNotFound)console.error(`[aggregator] Failed to list tools ${H}: (defaulting to null)`,F);return null}}),Y=new Set,Q=[],J=new Map,G=new Set;for(let K of X){if(K.status!=="fulfilled"||!K.value)continue;let{connectionId:H,connectionTitle:F,tools:V}=K.value;G.add(F);for(let q of V){if(Y.has(q.name))continue;Y.add(q.name),Q.push({...q,_meta:{connectionId:H,connectionTitle:F}}),J.set(q.name,{connectionId:H,originalName:q.name})}}let W=async(K,H)=>{let F=J.get(K);if(!F)return{content:[{type:"text",text:`Tool not found: ${K}`}],isError:!0};let V=this.proxies.get(F.connectionId);if(!V)return{content:[{type:"text",text:`Connection not found for tool: ${K}`}],isError:!0};return await V.proxy.client.callTool({name:F.originalName,arguments:H})},$=cK1(this.options.strategy)({tools:Q,callTool:W,categories:Array.from(G).sort()});return{tools:Q,mappings:J,strategyResult:$}}async list(){return{tools:(await this.cache).strategyResult.tools}}async call(X){return(await this.cache).strategyResult.callTool(X.name,X.arguments??{})}async callStreamable(X,Y){let Q=await this.cache,J=Q.mappings.get(X);if(J){let W=this.proxies.get(J.connectionId);if(W)return W.proxy.callStreamableTool(J.originalName,Y)}let G=await Q.strategyResult.callTool(X,Y);return new Response(JSON.stringify(G),{headers:{"Content-Type":"application/json"}})}}var iK1=S(()=>{RX();EQ0()});function aK1(X,Y){if(X.connection_type!=="VIRTUAL")return!1;return bK(X.connection_url)===Y}async function sd6(X,Y){let Q=await kB.create(X.connections,Y),J=new jQ0(Q,{selectionMode:X.toolSelectionMode,strategy:X.toolSelectionStrategy}),G=new TQ0(Q,{selectionMode:X.toolSelectionMode}),W=new AQ0(Q),Z=new PQ0(Q,{selectionMode:X.toolSelectionMode});return{client:{listTools:J.list.bind(J),callTool:J.call.bind(J),listResources:G.list.bind(G),readResource:G.read.bind(G),listResourceTemplates:W.list.bind(W),listPrompts:Z.list.bind(Z),getPrompt:Z.get.bind(Z)},callStreamableTool:J.callStreamable.bind(J)}}async function cT(X,Y,Q){let J;if(X.tool_selection_mode==="exclusion"){let Z=(await Y.storage.connections.list(X.organization_id)).filter((K)=>K.status==="active"&&!aK1(K,X.id)),$=new Map;for(let K of X.connections)$.set(K.connection_id,{selectedTools:K.selected_tools,selectedResources:K.selected_resources,selectedPrompts:K.selected_prompts});J=[];for(let K of Z){let H=$.get(K.id);if(H===void 0)J.push({connection:K,selectedTools:null,selectedResources:null,selectedPrompts:null});else if((H.selectedTools===null||H.selectedTools.length===0)&&(H.selectedResources===null||H.selectedResources.length===0)&&(H.selectedPrompts===null||H.selectedPrompts.length===0));else J.push({connection:K,selectedTools:H.selectedTools,selectedResources:H.selectedResources,selectedPrompts:H.selectedPrompts})}}else{let W=X.connections.map(($)=>$.connection_id),Z=[];for(let $ of W){let K=await Y.storage.connections.findById($);if(K&&K.status==="active"&&!aK1(K,X.id))Z.push(K)}J=Z.map(($)=>{let K=X.connections.find((H)=>H.connection_id===$.id);return{connection:$,selectedTools:K?.selected_tools??null,selectedResources:K?.selected_resources??null,selectedPrompts:K?.selected_prompts??null}})}let G={connections:J,toolSelectionMode:X.tool_selection_mode,toolSelectionStrategy:Q};return sd6(G,Y)}var rK1=S(()=>{g7();yK1();fK1();hK1();iK1()});var CQ0=S(()=>{rK1()});async function oK1(X){if(!X.refreshToken)return{success:!1,error:"No refresh token available"};if(!X.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!X.clientId)return{success:!1,error:"No client ID available"};try{let Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:X.refreshToken,client_id:X.clientId});if(X.clientSecret)Y.set("client_secret",X.clientSecret);if(X.scope)Y.set("scope",X.scope);let Q=await fetch(X.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Y.toString()});if(!Q.ok){let G=await Q.text();console.error(`[TokenRefresh] Failed to refresh token: ${Q.status}`,G);try{let W=JSON.parse(G);return{success:!1,error:W.error_description||W.error||`Token refresh failed: ${Q.status}`}}catch{return{success:!1,error:`Token refresh failed: ${Q.status}`}}}let J=await Q.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||X.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Y){return console.error("[TokenRefresh] Error refreshing token:",Y),{success:!1,error:Y instanceof Error?Y.message:"Token refresh failed"}}}function td6(X){return new Proxy(X,{get(Q,J,G){if(J==="close")return async()=>{};if(J==="__actualClient")return Q;return Reflect.get(Q,J,G)}})}async function eK1(X,Y){let Q=XV.get(X.id);if(Q?.status==="connected"&&Q.stableClient)return Q.stableClient;if(Q?.connectPromise&&(Q.status==="connecting"||Q.status==="reconnecting"))return Q.connectPromise;let J=Q?.status==="failed",G=Q??{transport:null,client:null,stableClient:null,config:X,status:"connecting",connectPromise:null};if(!Q)XV.set(X.id,G);return G.status=J?"reconnecting":"connecting",G.connectPromise=(async()=>{try{console.log(`[StableStdio] ${J?"Respawning":"Spawning"}: ${X.id} (${X.command} ${X.args?.join(" ")??""})`);let W=new HT({command:X.command,args:X.args,env:X.env,cwd:X.cwd,stderr:"pipe"});G.transport=W;let Z=Y??new PQ({name:`mesh-stdio-${X.id}`,version:"1.0.0"});G.client=Z,G.stableClient=td6(Z),Z.onclose=()=>{console.log(`[StableStdio] Connection closed unexpectedly: ${X.id}`),G.status="failed",G.connectPromise=null};let $=X.name||X.id,K="\x1B[2m",H="\x1B[0m";W.stderr?.on("data",(q)=>{let z=q.toString().trimEnd();if(z)console.error(`${z} ${K}[${$}]${H}`)});let F=new AbortController,V=setTimeout(()=>F.abort(),30000);try{await Promise.race([Z.connect(W),new Promise((q,z)=>{F.signal.addEventListener("abort",()=>{z(Error("Stdio connection timeout after 30s"))})})])}finally{clearTimeout(V)}return G.status="connected",console.log(`[StableStdio] Connected: ${X.id}`),G.stableClient}catch(W){console.error(`[StableStdio] Failed to connect ${X.id}:`,W),G.status="failed",G.connectPromise=null;try{await G.transport?.close()}catch{}throw W}})(),G.connectPromise}async function ed6(X){let Y=XV.get(X);if(!Y)return;console.log(`[StableStdio] Force closing: ${X}`);try{if(Y.client)Y.client.onclose=void 0;await Y.client?.close()}catch{}XV.delete(X)}async function Xp6(){console.log(`[StableStdio] Closing all connections (${XV.size})`);let X=Array.from(XV.keys()).map((Y)=>ed6(Y));await Promise.allSettled(X),XV.clear()}var sK1="__mesh_stable_stdio_pool__",XV,tK1="__mesh_stable_stdio_shutdown_registered__";var XH1=S(()=>{_F();PY0();XV=globalThis[sK1]??(globalThis[sK1]=new Map);if(!globalThis[tK1]){globalThis[tK1]=!0;let X=async(Y)=>{await Xp6(),process.exit(Y==="SIGINT"?130:143)};process.on("SIGINT",()=>X("SIGINT")),process.on("SIGTERM",()=>X("SIGTERM"))}});async function mf(X,Y){let Q=X.get("meshContext");try{let J=X.req.header("x-org-id"),G=X.req.header("x-org-slug"),W=J?J:G?await Q.db.selectFrom("organization").select("id").where("slug","=",G).executeTakeFirst().then((z)=>z?.id):null,Z=Y?await Q.storage.virtualMcps.findById(Y):W?aX0(W):null;if(!Z)return X.json({error:"Agent not found"},404);if(W&&Z.organization_id!==W)return X.json({error:"Agent not found"},404);if(Z.status!=="active")return X.json({error:`Agent is inactive: ${Z.id}`},503);Q.connectionId=Z.id;let $=await Q.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z.organization_id).executeTakeFirst();if($)Q.organization={id:$.id,slug:$.slug,name:$.name};let K=X.req.query("mode"),H=nK1(K),F=await cT(Z,Q,H),V=new uF({name:`mcp-virtual-mcp-${Z.title}`,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}},instructions:Z.metadata?.instructions??void 0}),q=new mF({enableJsonResponse:X.req.header("Accept")?.includes("application/json")??!1});await V.connect(q),V.server.setRequestHandler(EK,async(z)=>{return F.client.listTools()}),V.server.setRequestHandler(y7,async(z)=>{return await F.client.callTool(z.params)}),V.server.setRequestHandler(wK,async()=>{return F.client.listResources()}),V.server.setRequestHandler(PK,async(z)=>{return F.client.readResource(z.params)}),V.server.setRequestHandler(MK,async()=>{return F.client.listResourceTemplates()}),V.server.setRequestHandler(TK,async()=>{return F.client.listPrompts()}),V.server.setRequestHandler(AK,async(z)=>{return F.client.getPrompt(z.params)});try{return await q.handleRequest(X.req.raw)}finally{try{await q.close?.()}catch{}}}catch(J){let G=J;return console.error("[virtual-mcp] Error handling virtual MCP request:",G),X.json({error:"Internal server error",message:G.message},500)}}var IQ0,YH1;var RQ0=S(()=>{$f();Kf();RX();ZG();CQ0();EQ0();YT();IQ0=new ZX;IQ0.all("/gateway/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return mf(X,Y)});IQ0.all("/virtual-mcp/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return mf(X,Y)});YH1=IQ0});async function QH1(X,Y){return(await Y.storage.connections.findById(X))?.connection_url??null}function Yp6(X){let Y=X.toLowerCase();return Y.includes("resource_metadata=")||Y.includes("invalid_token")||Y.includes("oauth")}async function JH1(X,Y={}){try{let Q=await fetch(X,{method:"POST",headers:{...Y,"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"mcp-mesh-proxy",version:"1.0.0"}}})});if(Q.status===401){let J=Q.headers.get("WWW-Authenticate");if(J){if(Yp6(J))return J}}return null}catch{return null}}async function df(X){let Q=new URL(X).pathname;if(Q.endsWith("/"))Q=Q.slice(0,-1);let J=new URL(X);J.pathname=`${Q}/.well-known/oauth-protected-resource`;let G=await fetch(J.toString(),{method:"GET",headers:{Accept:"application/json"}});if(G.ok)return G;if(!SQ0.includes(G.status))return G;let W=new URL(X);if(W.pathname=`/.well-known/oauth-protected-resource${Q}`,G=await fetch(W.toString(),{method:"GET",headers:{Accept:"application/json"}}),!SQ0.includes(G.status))return G;let Z=new URL(X);return Z.pathname="/.well-known/oauth-protected-resource",G=await fetch(Z.toString(),{method:"GET",headers:{Accept:"application/json"}}),G}async function Qp6(X,Y){let Q=await QH1(X,Y);if(!Q)return null;let J;try{J=new URL(Q).origin}catch{return null}try{let G=await df(Q);if(G.ok){let W=await G.json();if(W.authorization_servers?.[0])return W.authorization_servers[0]}}catch{}return J}async function GH1(X){let Y=X.get("meshContext");if(!Y)Y=await dK.create(X.req.raw),X.set("meshContext",Y);return Y}async function WH1({error:X,reqUrl:Y,connectionId:Q,connectionUrl:J,headers:G}){let W=X.message?.toLowerCase()??"";if(!(X.status===401||X.code===401||X.message?.includes("401")||W.includes("unauthorized")||W.includes("invalid_token")||W.includes("api key required")||W.includes("api-key required")))return null;if(Boolean(await JH1(J,G)))return new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Y.origin}/mcp/${Q}/.well-known/oauth-protected-resource"`}});return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required but server does not support OAuth"}),{status:401,headers:{"Content-Type":"application/json"}})}async function kQ0(X){let Q=new URL(X).pathname;if(Q.endsWith("/"))Q=Q.slice(0,-1);let J=Q!==""&&Q!=="/",G=[];if(J){let Z=new URL(X);Z.pathname=`/.well-known/oauth-authorization-server${Q}`,G.push(Z);let $=new URL(X);$.pathname=`/.well-known/openid-configuration${Q}`,G.push($);let K=new URL(X);K.pathname=`${Q}/.well-known/openid-configuration`,G.push(K)}else{let Z=new URL(X);Z.pathname="/.well-known/oauth-authorization-server",G.push(Z);let $=new URL(X);$.pathname="/.well-known/openid-configuration",G.push($)}let W=null;for(let Z of G){if(W=await fetch(Z.toString(),{method:"GET",headers:{Accept:"application/json"}}),W.ok)return W;if(W.status!==404&&W.status!==401)return W}return W}var lf,SQ0,pf=(X)=>{if(!(X.hostname==="localhost"||X.hostname==="127.0.0.1"))X.protocol="https:";return X},ZH1=async(X)=>{let Y=X.req.param("connectionId"),Q=await GH1(X),J=await QH1(Y,Q);if(!J)return X.json({error:"Connection not found"},404);let G=pf(new URL(X.req.url)),W=`${G.origin}/mcp/${Y}`,Z=`${G.origin}/oauth-proxy/${Y}`;try{let $=await df(J);if(!$.ok&&SQ0.includes($.status)){if(await JH1(J))return new Response(JSON.stringify({resource:W,authorization_servers:[Z],bearer_methods_supported:["header"],scopes_supported:["*"]}),{status:200,headers:{"Content-Type":"application/json"}});return new Response($.body,{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}})}if(!$.ok)return new Response($.body,{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}});let H={...await $.json(),resource:W,authorization_servers:[Z]};return new Response(JSON.stringify(H),{status:$.status,statusText:$.statusText,headers:{"Content-Type":"application/json"}})}catch($){let K=$;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",K),X.json({error:"Failed to proxy OAuth metadata",message:K.message},502)}},$H1;var cf=S(()=>{ZG();nf();lf=new ZX,SQ0=[404,401,406];lf.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(X)=>ZH1(X));lf.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(X)=>ZH1(X));lf.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=await GH1(X),J=await Qp6(Y,Q);if(!J)return X.json({error:"Connection not found or no auth server"},404);try{let G=await kQ0(J);if(!G.ok)return new Response(G.body,{status:G.status,statusText:G.statusText,headers:{"Content-Type":"application/json"}});let W=await G.json(),$=`${pf(new URL(X.req.url)).origin}/oauth-proxy/${Y}`,K={...W,authorization_endpoint:W.authorization_endpoint?`${$}/authorize`:void 0,token_endpoint:W.token_endpoint?`${$}/token`:void 0,registration_endpoint:W.registration_endpoint?`${$}/register`:void 0};return new Response(JSON.stringify(K),{status:200,headers:{"Content-Type":"application/json"}})}catch(G){let W=G;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),X.json({error:"Failed to proxy auth server metadata",message:W.message},502)}});$H1=lf});function Jp6(X){if(!X.isError)return;let Y=X.content;if(!Array.isArray(Y))return;for(let Q of Y)if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text;return}function Gp6(X){if(!X)return;let Y=X._meta;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let Q=Y.properties;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let J={};for(let[G,W]of Object.entries(Q))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}function Wp6(X,Y){if(!X&&!Y)return;if(!X)return Y;if(!Y)return X;return{...Y,...X}}function KH1(X){if(X&&typeof X==="object"&&!Array.isArray(X)){let Y=X,Q=Y.structuredContent;if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q;return Y}return{value:X}}async function Zp6(X,Y){let Q=X.body;if(!Q)return{text:"",truncated:!1};let J=Q.getReader(),G=new TextDecoder,W=!1,Z=0,$=[];try{while(!0){let{value:K,done:H}=await J.read();if(H)break;if(K){if(Z+=K.byteLength,Z>Y){W=!0;let F=Y-(Z-K.byteLength);if(F>0)$.push(G.decode(K.slice(0,F),{stream:!0}));break}$.push(G.decode(K,{stream:!0}))}}}finally{J.releaseLock()}return $.push(G.decode()),{text:$.join(""),truncated:W}}async function nT(X){let{ctx:Y,enabled:Q}=X,J=X.organizationId??Y.organization?.id;if(!Q||!J)return;let G=Gp6(X.request.params.arguments),W=Wp6(Y.metadata.properties,G);await Y.storage.monitoring.log({organizationId:J,connectionId:X.connectionId,connectionTitle:X.connectionTitle,toolName:X.request.params.name,input:X.request.params.arguments??{},output:X.output,isError:X.isError,errorMessage:X.errorMessage,durationMs:X.durationMs,timestamp:new Date,userId:Y.auth.user?.id||Y.auth.apiKey?.userId||null,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent,virtualMcpId:X.virtualMcpId,properties:W})}function HH1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W}=X;return async(Z,$)=>{let K=Date.now();try{let H=await $(),F=Date.now()-K;return await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:KH1(H),isError:Boolean(H.isError),errorMessage:Jp6(H),durationMs:F}),H}catch(H){let F=H,V=Date.now()-K;throw await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:F.message,durationMs:V}),H}}}function FH1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W}=X;return async(Z,$)=>{let K=Date.now();try{let H=await $(),F=Y.organization?.id;if(Q&&F){let V=H.clone();(async()=>{try{let{text:q,truncated:z}=await Zp6(V,262144),D=Date.now()-K,N=V.headers.get("content-type")??"",L=q;if(N.includes("application/json"))try{L=q.length?JSON.parse(q):null}catch{L=q}let w=H.status>=400,C=w&&L&&typeof L==="object"&&"error"in L?L.error:void 0,A=typeof C==="string"&&C?C:w&&typeof L==="string"&&L.trim()?L.slice(0,500):w?`HTTP ${H.status} ${H.statusText}`.trim():z?"Response body truncated to 262144 bytes":void 0;await nT({ctx:Y,enabled:Q,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:KH1(L),isError:w,errorMessage:A,durationMs:D})}catch(q){let z=Date.now()-K;await nT({ctx:Y,enabled:Q,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${q.message}`,durationMs:z})}})()}return H}catch(H){let F=H,V=Date.now()-K;throw await nT({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,virtualMcpId:W,request:Z,output:{},isError:!0,errorMessage:F.message,durationMs:V}),H}}}function $p6(X,Y,Q){return async(J,G)=>{try{let W=J.params.name,Z=async()=>{let{tools:K}=await Q();return K.find((F)=>F.name===W)?._meta};return await new lK(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,W,X.boundAuth,X.auth.user?.role,Y,Z).check(W),await G()}catch(W){return{content:[{type:"text",text:`Authorization failed: ${W.message}`}],isError:!0}}}}function Kp6(X,Y,Q){return async(J,G)=>{try{let W=J.params.name,Z=async()=>{let{tools:K}=await Q();return K.find((F)=>F.name===W)?._meta};return await new lK(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,W,X.boundAuth,X.auth.user?.role,Y,Z).check(W),await G()}catch(W){return new Response(JSON.stringify({error:`Authorization failed: ${W.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function VH1(X,Y,{superUser:Q}){let J=typeof X==="string"?await Y.storage.connections.findById(X,Y.organization?.id):X;if(!J)throw Error("Connection not found");let G=J?.id;if(Y.organization&&J.organization_id!==Y.organization.id)throw Error("Connection does not belong to the active organization");if(Y.organization??={id:J.organization_id},J.status!=="active")throw Error(`Connection inactive: ${J.status}`);let W,Z=Y.auth.user?.connectionId,$=vK1(async()=>{let k=V90(J.configuration_state,J.configuration_scopes),h=Y.auth.user?.id??Y.auth.apiKey?.userId;if(!h){console.error("User ID required to issue configuration token");return}try{W=await EK1({sub:h,user:{id:h},metadata:{state:J.configuration_state??void 0,meshUrl:process.env.MESH_URL??Y.baseUrl,connectionId:G,organizationId:Y.organization?.id},permissions:k})}catch(t){console.error("Failed to issue configuration token:",t)}}),K=async()=>{await $();let k={...Z?{"x-caller-id":Z}:{},...Y.metadata.wellKnownForwardableHeaders??{},"x-request-id":Y.metadata.requestId},h=null,t=new TZ(Y.db,Y.vault),l=await t.get(G);if(l){let J0=!!l.refreshToken&&!!l.tokenEndpoint;if(t.isExpired(l,J0?300000:0))if(J0){console.log(`[Proxy] Token expired for ${G}, attempting refresh`);let Y0=await oK1(l);if(Y0.success&&Y0.accessToken)await t.upsert({connectionId:G,accessToken:Y0.accessToken,refreshToken:Y0.refreshToken??l.refreshToken,scope:Y0.scope??l.scope,expiresAt:Y0.expiresIn?new Date(Date.now()+Y0.expiresIn*1000):null,clientId:l.clientId,clientSecret:l.clientSecret,tokenEndpoint:l.tokenEndpoint}),h=Y0.accessToken,console.log(`[Proxy] Token refreshed for ${G}`);else await t.delete(G),console.error(`[Proxy] Token refresh failed for ${G}: ${Y0.error}`)}else await t.delete(G),console.log(`[Proxy] Token expired without refresh capability for ${G}`);else h=l.accessToken}if(!h&&J.connection_token)h=J.connection_token;if(h)k.Authorization=`Bearer ${h}`;if(W)k["x-mesh-token"]=W;return k},H=J.connection_type==="STDIO",F=fF(J.connection_headers)?J.connection_headers:null,V=!H?J.connection_headers:null,q=async()=>{let k=new PQ({name:"mcp-mesh-proxy",version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});switch(J.connection_type){case"STDIO":{if(process.env.UNSAFE_ALLOW_STDIO_TRANSPORT!=="true")throw Error("STDIO connections are disabled in production. Set UNSAFE_ALLOW_STDIO_TRANSPORT=true to enable.");if(!F)throw Error("STDIO connection missing parameters");return eK1({id:G,name:J.title,command:F.command,args:F.args,env:F.envVars,cwd:F.cwd},k)}case"HTTP":case"Websocket":{if(!J.connection_url)throw Error(`${J.connection_type} connection missing URL`);let h=await K();if(V?.headers)Object.assign(h,V.headers);let t=new x7(new URL(J.connection_url),{requestInit:{headers:h}});return await k.connect(t),k}case"SSE":{if(!J.connection_url)throw Error("SSE connection missing URL");let h=await K();if(V?.headers)Object.assign(h,V.headers);let t=new gF(new URL(J.connection_url),{requestInit:{headers:h}});return await k.connect(t),k}case"VIRTUAL":{let h=bK(J.connection_url);if(!h)throw Error("VIRTUAL connection missing virtual MCP ID in connection_url");let t=await Y.storage.virtualMcps.findById(h);if(!t)throw Error(`Virtual MCP not found: ${h}`);let l=await cT(t,Y,"passthrough");return{callTool:(J0)=>l.client.callTool(J0),listTools:()=>l.client.listTools(),listResources:()=>l.client.listResources(),readResource:(J0)=>l.client.readResource(J0),listResourceTemplates:()=>l.client.listResourceTemplates(),listPrompts:()=>l.client.listPrompts(),getPrompt:(J0)=>l.client.getPrompt(J0),close:async()=>{},getServerCapabilities:()=>({tools:{},resources:{},prompts:{}}),getInstructions:()=>t.metadata?.instructions??void 0}}default:throw Error(`Unknown connection type: ${J.connection_type}`)}},z=async()=>{if(J.tools&&J.tools.length>0)return{tools:J.tools.map((h)=>({name:h.name,description:h.description,inputSchema:h.inputSchema,outputSchema:h.outputSchema,annotations:h.annotations,_meta:h._meta}))};let k;try{return k=await q(),await k.listTools()}finally{k?.close().catch(console.error)}},D=Q?async(k,h)=>await h():$p6(Y,G,z),N=Q?async(k,h)=>await h():Kp6(Y,G,z),L=Y.connectionId&&Y.connectionId!==G?Y.connectionId:void 0,w={enabled:XL0().enabled,connectionId:G,connectionTitle:J.title,virtualMcpId:L,ctx:Y},C=HH1(w),A=FH1(w),T=VT(C,D),P=VT(A,N),j=async(k)=>{return T(k,async()=>{let h=await q(),t=Date.now(),l={...k.params};if(l.arguments&&"_meta"in l.arguments){let{_meta:J0,...V0}=l.arguments;l.arguments=V0}return await Y.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":G,"tool.name":k.params.name,"request.id":Y.metadata.requestId}},async(J0)=>{try{let V0=await h.callTool(l,void 0,{timeout:vQ0}),Y0=Date.now()-t;return Y.meter.createHistogram("connection.proxy.duration").record(Y0,{"connection.id":G,"tool.name":k.params.name,status:"success"}),Y.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":G,"tool.name":k.params.name,status:"success"}),J0.end(),V0}catch(V0){let Y0=V0,U0=Date.now()-t;throw Y.meter.createHistogram("connection.proxy.duration").record(U0,{"connection.id":G,"tool.name":k.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":G,"tool.name":k.params.name,error:Y0.message}),J0.recordException(Y0),J0.end(),V0}finally{h.close().catch(console.error)}})})};return{fetch:async(k)=>{let h=new URL(k.url),t;try{t=await q()}catch(P0){let v0=J.connection_url?await WH1({error:P0,reqUrl:h,connectionId:G,connectionUrl:J.connection_url,headers:await K()}):null;if(v0)return v0;throw P0}let l=t.getServerCapabilities(),J0=t.getInstructions(),V0=l??{tools:{},resources:{},prompts:{}},Y0=new uF({name:"mcp-mesh",version:"1.0.0"},{capabilities:V0,instructions:J0}),U0=new mF({enableJsonResponse:k.headers.get("Accept")?.includes("application/json")??!1});if(await Y0.connect(U0),Y0.server.setRequestHandler(EK,()=>t.listTools()),Y0.server.setRequestHandler(y7,j),V0.resources)Y0.server.setRequestHandler(wK,()=>t.listResources()),Y0.server.setRequestHandler(PK,(P0)=>t.readResource(P0.params)),Y0.server.setRequestHandler(MK,()=>t.listResourceTemplates());if(V0.prompts)Y0.server.setRequestHandler(TK,()=>t.listPrompts()),Y0.server.setRequestHandler(AK,(P0)=>t.getPrompt(P0.params));try{return await U0.handleRequest(k)}finally{try{await t.close()}catch{}try{await U0.close?.()}catch{}}},client:{callTool:(k)=>{return j({method:"tools/call",params:k})},listTools:z,listResources:async()=>{let k;try{return k=await q(),await k.listResources()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{resources:[]};throw h}finally{k?.close().catch(console.error)}},readResource:async(k)=>{let h;try{return h=await q(),await h.readResource(k)}finally{h?.close().catch(console.error)}},listResourceTemplates:async()=>{let k;try{return k=await q(),await k.listResourceTemplates()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{resourceTemplates:[]};throw h}finally{k?.close().catch(console.error)}},listPrompts:async()=>{let k;try{return k=await q(),await k.listPrompts()}catch(h){if(h instanceof J1&&h.code===K1.MethodNotFound)return{prompts:[]};throw h}finally{k?.close().catch(console.error)}},getPrompt:async(k)=>{let h;try{return h=await q(),await h.getPrompt(k)}finally{h?.close().catch(console.error)}}},callStreamableTool:async(k,h)=>{if(J.connection_type==="VIRTUAL"){let J0=await j({method:"tools/call",params:{name:k,arguments:h}});return new Response(JSON.stringify(J0),{headers:{"Content-Type":"application/json"}})}if(!J.connection_url)throw Error("Streamable tools require HTTP connection with URL");let t=J.connection_url,l={method:"tools/call",params:{name:k,arguments:h}};return P(l,async()=>{let J0=await K();if(V?.headers)Object.assign(J0,V.headers);let V0=new URL(t);return V0.pathname=V0.pathname.replace(/\/$/,"")+`/call-tool/${l.params.name}`,await Y.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":G,"tool.name":l.params.name,"request.id":Y.metadata.requestId}},async(Y0)=>{let U0=Date.now();try{let P0=await fetch(V0.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(l.params.arguments),headers:{...J0,"Content-Type":"application/json"}}),v0=Date.now()-U0;return Y.meter.createHistogram("connection.proxy.streamable.duration").record(v0,{"connection.id":G,"tool.name":l.params.name,status:P0.ok?"success":"error"}),Y.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":G,"tool.name":l.params.name,status:P0.ok?"success":"error"}),Y0.end(),P0}catch(P0){let v0=P0,W1=Date.now()-U0;throw Y.meter.createHistogram("connection.proxy.streamable.duration").record(W1,{"connection.id":G,"tool.name":l.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":G,"tool.name":l.params.name,error:v0.message}),Y0.recordException(v0),Y0.end(),P0}})})}}}async function qH1(X,Y){return VH1(X,Y,{superUser:!1})}async function UH1(X,Y){return VH1(X,Y,{superUser:!0})}var af,vQ0=300000,zH1=(X,Y)=>{if(X.message.includes("not found"))return Y.json({error:X.message},404);if(X.message.includes("does not belong to the active organization"))return Y.json({error:"Connection not found"},404);if(X.message.includes("inactive"))return Y.json({error:X.message},503);return Y.json({error:"Internal server error",message:X.message},500)},BH1;var iT=S(()=>{CQ0();q90();fS();XH1();jf();g7();_F();Jf();LB();$f();Kf();RX();ZG();BQ0();uf();RQ0();cf();af=new ZX;af.all("/",async(X)=>{return mf(X,void 0)});af.all("/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=X.get("meshContext");try{return await(await Q.createMCPProxy(Y)).fetch(X.req.raw)}catch(J){return zH1(J,X)}});af.all("/:connectionId/call-tool/:toolName",async(X)=>{let Y=X.req.param("connectionId"),Q=X.req.param("toolName"),J=X.get("meshContext");try{let W=await(await J.createMCPProxy(Y)).client.callTool({name:Q,arguments:await X.req.json()});if(W instanceof Response)return W;if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(G){return zH1(G,X)}});BH1=af});class _Q0{db;constructor(X){this.db=X}async create(X){let Y=X.id??GX("thrd"),Q=new Date().toISOString();if(!X.organizationId)throw Error("organizationId is required");if(!X.createdBy)throw Error("createdBy is required");if(!X.title)X.title="New Thread - "+Q;let J={id:Y,organization_id:X.organizationId,title:X.title,description:X.description??null,created_at:Q,updated_at:Q,created_by:X.createdBy,updated_by:X.updatedBy??null},G=await this.db.insertInto("threads").values(J).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(G)}async get(X){let Y=await this.db.selectFrom("threads").selectAll().where("id","=",X).executeTakeFirst();return Y?this.threadFromDbRow(Y):null}async update(X,Y){let J={updated_at:new Date().toISOString()};if(Y.title!==void 0)J.title=Y.title;if(Y.description!==void 0)J.description=Y.description;if(Y.updatedBy!==void 0)J.updated_by=Y.updatedBy;if(Y.hidden!==void 0)J.hidden=Y.hidden;await this.db.updateTable("threads").set(J).where("id","=",X).execute();let G=await this.get(X);if(!G)throw Error("Thread not found after update");return G}async delete(X){await this.db.deleteFrom("threads").where("id","=",X).execute()}async list(X,Y,Q){let J=this.db.selectFrom("threads").selectAll().where("organization_id","=",X).where("hidden","=",!1).orderBy("updated_at","desc");if(Y)J=J.where("created_by","=",Y);let G=this.db.selectFrom("threads").select(($)=>$.fn.count("id").as("count")).where("organization_id","=",X).where("hidden","=",!1);if(Y)G=G.where("created_by","=",Y);if(Q?.limit)J=J.limit(Q.limit);if(Q?.offset)J=J.offset(Q.offset);let[W,Z]=await Promise.all([J.execute(),G.executeTakeFirst()]);return{threads:W.map(($)=>this.threadFromDbRow($)),total:Number(Z?.count||0)}}async saveMessages(X){let Y=new Date().toISOString(),Q=X[0]?.threadId;if(!Q)throw Error("threadId is required when creating multiple messages");let J=X.find((W)=>W.threadId!==Q);if(J)throw Error(`All messages must target the same thread. Expected threadId "${Q}", but message "${J.id}" has threadId "${J.threadId}"`);let G=X.map((W)=>({id:W.id,thread_id:Q,metadata:W.metadata?JSON.stringify(W.metadata):null,parts:JSON.stringify(W.parts),role:W.role,created_at:W.createdAt??Y,updated_at:Y}));await this.db.transaction().execute(async(W)=>{await W.insertInto("thread_messages").values(G).execute(),await W.updateTable("threads").set({updated_at:Y}).where("id","=",Q).execute()})}async listMessages(X,Y){let Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",X).orderBy("created_at","asc").orderBy("id","asc"),J=this.db.selectFrom("thread_messages").select((Z)=>Z.fn.count("id").as("count")).where("thread_id","=",X);if(Y?.limit)Q=Q.limit(Y.limit);if(Y?.offset)Q=Q.offset(Y.offset);let[G,W]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:G.map((Z)=>this.messageFromDbRow(Z)),total:Number(W?.count||0)}}threadFromDbRow(X){return{id:X.id,organizationId:X.organization_id,title:X.title,description:X.description,createdAt:typeof X.created_at==="string"?X.created_at:X.created_at.toISOString(),updatedAt:typeof X.updated_at==="string"?X.updated_at:X.updated_at.toISOString(),createdBy:X.created_by,updatedBy:X.updated_by,hidden:X.hidden}}messageFromDbRow(X){let Y,Q;try{Y=X.metadata?JSON.parse(X.metadata):void 0}catch(J){console.error(`Failed to parse metadata for message ${X.id}:`,X.metadata,J),Y=void 0}try{Q=typeof X.parts==="string"?JSON.parse(X.parts):X.parts}catch(J){console.error(`Failed to parse parts for message ${X.id}:`,X.parts,J),Q=[]}return{id:X.id,threadId:X.thread_id,metadata:Y,parts:Q,role:X.role,createdAt:typeof X.created_at==="string"?X.created_at:X.created_at.toISOString(),updatedAt:typeof X.updated_at==="string"?X.updated_at:X.updated_at.toISOString()}}}var DH1=S(()=>{LZ()});function Hp6(X){if(!X)return;try{let Y=JSON.parse(X);if(typeof Y!=="object"||Y===null||Array.isArray(Y))return;let Q={};for(let[J,G]of Object.entries(Y))if(typeof G==="string")Q[J]=G;return Object.keys(Q).length>0?Q:void 0}catch{return}}function Fp6(X,Y){for(let[Q,J]of Object.entries(Y)){let G=X[Q];if(!G||G.length===0){let W=X["*"];if(!W||W.length===0)return!1;if(W.includes("*"))continue;for(let Z of J)if(!W.includes(Z))return!1;continue}if(G.includes("*"))continue;for(let W of J)if(!G.includes(W))return!1}return!0}function Vp6(X){let{auth:Y,headers:Q,role:J,permissions:G,userId:W}=X,Z=Y.api.hasPermission;return{hasPermission:async($)=>{if(J&&e90.includes(J))return!0;if(G)return Fp6(G,$);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:Q,body:{permission:$}}))?.success===!0)return!0;let H={};for(let V of Object.keys($))H[V]=["*"];return(await Z({headers:Q,body:{permission:H}}))?.success===!0}catch(K){return console.error("[Auth] Permission check failed:",K),!1}},organization:{create:async($)=>{return Y.api.createOrganization({headers:Q,body:$})},update:async($)=>{return Y.api.updateOrganization({headers:Q,body:$})},delete:async($)=>{await Y.api.deleteOrganization({headers:Q,body:{organizationId:$}})},get:async($)=>{return Y.api.getFullOrganization({headers:Q,query:$?{organizationId:$}:void 0})},list:async($)=>{return Y.api.listOrganizations({headers:Q,query:$?{userId:$}:void 0})},addMember:async($)=>{return Y.api.addMember({headers:Q,body:$})},removeMember:async($)=>{await Y.api.removeMember({headers:Q,body:$})},listMembers:async($)=>{return Y.api.listMembers({headers:Q,query:$?{organizationId:$.organizationId,limit:$.limit,offset:$.offset}:void 0})},updateMemberRole:async($)=>{return Y.api.updateMemberRole({headers:Q,body:$})}},apiKey:{create:async($)=>{return Y.api.createApiKey({body:{...$,userId:W}})},list:async()=>{return Y.api.listApiKeys({headers:Q})},update:async($)=>{return Y.api.updateApiKey({body:{...$,userId:W}})},delete:async($)=>{await Y.api.deleteApiKey({headers:Q,body:{keyId:$}})}}}}async function qp6(X,Y,Q){if(e90.includes(Q))return;let J=await X.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",Y).where("role","=",Q).executeTakeFirst();if(!J?.permission)return;try{return JSON.parse(J.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${Q}`);return}}async function Up6(X,Y,Q,J=OH1){let G=X.headers.get("Authorization");try{let W=new Headers(X.headers);W.set("X-MCP-Session-Auth","true");let Z=await J.measure("auth_get_mcp_session",()=>Y.api.getMcpSession({headers:W}));if(Z){let $=Z.userId,K=await J.measure("auth_query_membership",()=>Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",$).executeTakeFirst()),H=K?.role,F=K?{id:K.orgId,slug:K.orgSlug,name:K.orgName}:void 0,V;if(K&&H)V=await J.measure("auth_fetch_role_permissions",()=>qp6(Q,K.organizationId,H));return{user:{id:$,role:H},role:H,permissions:V,organization:F}}}catch(W){console.error("[Auth] OAuth session check failed:",W)}if(G?.startsWith("Bearer ")){let W=G.replace("Bearer ","").trim();try{let Z=await J.measure("auth_verify_mesh_jwt",()=>jK1(W));if(Z){let $,K=Z.metadata?.organizationId;if(Z.sub&&K)$=(await J.measure("auth_query_membership",()=>Q.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",K).executeTakeFirst()))?.role;return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:$},role:$,permissions:Z.permissions,organization:Z.metadata?.organizationId?{id:Z.metadata?.organizationId}:void 0}}}catch{}try{let Z=await J.measure("auth_verify_api_key",()=>Y.api.verifyApiKey({body:{key:W}}));if(Z?.valid&&Z.key){let $=Z.key.metadata?.organization,K=Z.key.permissions,H,F=Z.key.userId;if(F&&$?.id)H=(await J.measure("auth_query_membership",()=>Q.selectFrom("member").select(["member.role"]).where("member.userId","=",F).where("member.organizationId","=",$.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:H},role:H,permissions:K,organization:$?{id:$.id,slug:$.slug,name:$.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let W=await J.measure("auth_get_session",()=>Y.api.getSession({headers:X.headers}));if(W){let Z,$;if(W.session.activeOrganizationId){let K=await J.measure("auth_get_full_organization",()=>Y.api.getFullOrganization({headers:X.headers}).catch(()=>null));if(K)Z={id:K.id,slug:K.slug,name:K.name},$=K.members?.find((F)=>F.userId===W.user.id)?.role;else Z={id:W.session.activeOrganizationId,slug:"",name:""}}return{user:{id:W.user.id,email:W.user.email,role:$},role:$,organization:Z}}}catch(W){let Z=W;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}function LH1(X){let Y=new JT(X.encryption.key),Q={connections:new GT(X.db,Y),organizationSettings:new LQ0(X.db),monitoring:new OQ0(X.db,X.databaseType),virtualMcps:new DQ0(X.db),users:new wQ0(X.db),threads:new _Q0(X.db)};return async(J,G)=>{let W=G?.timings??OH1,Z=J?.headers.get("x-caller-id")??void 0,$=J?await Up6(J,X.auth,X.db,W):{user:void 0},K=Vp6({auth:X.auth,headers:J?.headers??new Headers,role:$.role,permissions:$.permissions,userId:$.user?.id}),H={user:$.user};if($.apiKeyId)H.apiKey={id:$.apiKeyId,name:"",userId:""};let F=$.organization,V=J?new URL(J.url):new URL("http://localhost:3000"),q=process.env.BASE_URL??`${V.protocol}//${V.host}`,z=new lK(X.auth,H.user?.id,void 0,K,$.role,"self"),D={timings:W,auth:H,connectionId:Z,organization:F,storage:Q,vault:Y,authInstance:X.auth,boundAuth:K,access:z,db:X.db,tracer:X.observability.tracer,meter:X.observability.meter,baseUrl:q,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(zp6.map((N)=>[N,J?.headers.get(N)??null]).filter(([N,L])=>L!==null)),userAgent:J?.headers.get("x-mesh-client")||J?.headers.get("User-Agent")||void 0,ipAddress:(J?.headers.get("CF-Connecting-IP")||J?.headers.get("X-Forwarded-For"))??void 0,properties:Hp6(J?.headers.get("x-mesh-properties"))},eventBus:X.eventBus,createMCPProxy:async(N)=>{return await qH1(N,D)}};return D}}var NH1,dK,OH1,zp6;var nf=S(()=>{BQ0();XY0();YY0();CK1();RK1();uf();iT();XQ0();DH1();dK={set:(X)=>{NH1=X},create:async(X,Y)=>{return await NH1(X,Y)}},OH1={measure:async(X,Y)=>{return await Y()}},zp6=["x-hub-signature-256"]});class wH1{db;constructor(X){this.db=X}async publishEvent(X){let Y=new Date().toISOString();return await this.db.insertInto("events").values({id:X.id,organization_id:X.organizationId,type:X.type,source:X.source,specversion:"1.0",subject:X.subject??null,time:X.time,datacontenttype:X.datacontenttype??"application/json",dataschema:X.dataschema??null,data:X.data?JSON.stringify(X.data):null,cron:X.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Y,updated_at:Y}).execute(),{id:X.id,organizationId:X.organizationId,type:X.type,source:X.source,specversion:"1.0",subject:X.subject??null,time:X.time,datacontenttype:X.datacontenttype??"application/json",dataschema:X.dataschema??null,data:X.data??null,cron:X.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:Y,updatedAt:Y}}async subscribe(X){let Y=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X.organizationId).where("connection_id","=",X.connectionId).where("event_type","=",X.eventType);if(X.publisher)Y=Y.where("publisher","=",X.publisher);else Y=Y.where("publisher","is",null);if(X.filter)Y=Y.where("filter","=",X.filter);else Y=Y.where("filter","is",null);let Q=await Y.executeTakeFirst();if(Q)return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at};let J=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:X.id,organization_id:X.organizationId,connection_id:X.connectionId,publisher:X.publisher??null,event_type:X.eventType,filter:X.filter??null,enabled:1,created_at:J,updated_at:J}).execute(),{id:X.id,organizationId:X.organizationId,connectionId:X.connectionId,publisher:X.publisher??null,eventType:X.eventType,filter:X.filter??null,enabled:!0,createdAt:J,updatedAt:J}}async unsubscribe(X,Y){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",X).where("organization_id","=",Y).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(X,Y){let Q=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X);if(Y)Q=Q.where("connection_id","=",Y);return(await Q.execute()).map((G)=>({id:G.id,organizationId:G.organization_id,connectionId:G.connection_id,publisher:G.publisher,eventType:G.event_type,filter:G.filter,enabled:G.enabled===1,createdAt:G.created_at,updatedAt:G.updated_at}))}async getSubscription(X,Y){let Q=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!Q)return null;return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at}}async getMatchingSubscriptions(X){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",X.organizationId).where("enabled","=",1).where("event_type","=",X.type).where((Q)=>Q.or([Q("publisher","is",null),Q("publisher","=",X.source)])).execute()).map((Q)=>({id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,publisher:Q.publisher,eventType:Q.event_type,filter:Q.filter,enabled:Q.enabled===1,createdAt:Q.created_at,updatedAt:Q.updated_at}))}async createDeliveries(X,Y,Q){if(Y.length===0)return;let J=new Date().toISOString(),G=Q??null,W=Y.map((Z)=>({id:crypto.randomUUID(),event_id:X,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:G,created_at:J}));await this.db.insertInto("event_deliveries").values(W).execute()}async claimPendingDeliveries(X){let Y=new Date().toISOString(),Q;try{Q=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(W)=>W.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",Y)])).orderBy("d.created_at","asc").limit(X)).where("status","=","pending").returning(["id"]).execute()).map((W)=>W.id)}catch{let G=await this.db.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id"]).where("d.status","=","pending").where("s.enabled","=",1).where((W)=>W.or([W("d.next_retry_at","is",null),W("d.next_retry_at","<=",Y)])).orderBy("d.created_at","asc").limit(X).execute();if(G.length===0)return[];Q=G.map((W)=>W.id),await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",Q).where("status","=","pending").execute()}if(Q.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",Q).where("d.status","=","processing").execute()).map((G)=>({delivery:{id:G.delivery_id,eventId:G.event_id,subscriptionId:G.subscription_id,status:G.delivery_status,attempts:G.delivery_attempts,lastError:G.delivery_last_error,deliveredAt:G.delivered_at,nextRetryAt:G.delivery_next_retry_at,createdAt:G.delivery_created_at},event:{id:G.event_id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.event_status,attempts:G.event_attempts,lastError:G.event_last_error,nextRetryAt:G.next_retry_at,createdAt:G.event_created_at,updatedAt:G.event_updated_at},subscription:{id:G.subscription_id,organizationId:G.organization_id,connectionId:G.connection_id,publisher:G.publisher,eventType:G.event_type,filter:G.filter,enabled:G.enabled===1,createdAt:G.subscription_created_at,updatedAt:G.subscription_updated_at}}))}async markDeliveriesDelivered(X){if(X.length===0)return;let Y=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:Y}).where("id","in",X).execute()}async markDeliveriesFailed(X,Y,Q=20,J=1000,G=3600000){if(X.length===0)return;for(let W of X){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",W).executeTakeFirst();if(!Z)continue;let $=Z.attempts+1;if($>=Q)await this.db.updateTable("event_deliveries").set({attempts:$,last_error:Y,status:"failed",next_retry_at:null}).where("id","=",W).execute();else{let K=Math.min(J*Math.pow(2,$-1),G),H=new Date(Date.now()+K).toISOString();await this.db.updateTable("event_deliveries").set({attempts:$,last_error:Y,status:"pending",next_retry_at:H}).where("id","=",W).execute()}}}async updateEventStatus(X){let Y=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",X).execute();if(Y.length===0)return;let Q=Y.every((W)=>W.status==="delivered"),J=Y.some((W)=>W.status==="failed"),G=Y.some((W)=>W.status==="pending"||W.status==="processing");if(Q)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",X).execute();else if(J&&!G)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",X).execute()}async resetStuckDeliveries(){let X=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(X.numUpdatedRows??0)}async getEvent(X,Y){let Q=await this.db.selectFrom("events").selectAll().where("id","=",X).where("organization_id","=",Y).executeTakeFirst();if(!Q)return null;return{id:Q.id,organizationId:Q.organization_id,type:Q.type,source:Q.source,specversion:Q.specversion,subject:Q.subject,time:Q.time,datacontenttype:Q.datacontenttype,dataschema:Q.dataschema,data:Q.data?JSON.parse(Q.data):null,cron:Q.cron,status:Q.status,attempts:Q.attempts,lastError:Q.last_error,nextRetryAt:Q.next_retry_at,createdAt:Q.created_at,updatedAt:Q.updated_at}}async findActiveCronEvent(X,Y,Q,J){let G=await this.db.selectFrom("events").selectAll().where("organization_id","=",X).where("type","=",Y).where("source","=",Q).where("cron","=",J).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!G)return null;return{id:G.id,organizationId:G.organization_id,type:G.type,source:G.source,specversion:G.specversion,subject:G.subject,time:G.time,datacontenttype:G.datacontenttype,dataschema:G.dataschema,data:G.data?JSON.parse(G.data):null,cron:G.cron,status:G.status,attempts:G.attempts,lastError:G.last_error,nextRetryAt:G.next_retry_at,createdAt:G.created_at,updatedAt:G.updated_at}}async cancelEvent(X,Y,Q){let J=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",X).where("organization_id","=",Y).where("source","=",Q).where("status","in",["pending","processing"]).executeTakeFirst();if((J.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",X).where("status","in",["pending","processing"]).execute();return{success:(J.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(X,Y){if(X.length===0)return;let Q=new Date(Date.now()+Y).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:Q}).where("id","in",X).execute()}async ackDelivery(X,Y,Q){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",X).where("organization_id","=",Y).executeTakeFirst())return{success:!1};let W=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",X).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",Q).where("event_subscriptions.organization_id","=",Y))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(W)await this.updateEventStatus(X);return{success:W}}async syncSubscriptions(X){let{organizationId:Y,connectionId:Q,subscriptions:J}=X,G=(w,C)=>{return`${w}::${C??""}`},W=await this.listSubscriptions(Y,Q),Z=new Map;for(let w of W)Z.set(G(w.eventType,w.publisher),w);let $=new Map;for(let w of J)$.set(G(w.eventType,w.publisher),w);let K=new Date().toISOString(),H=[],F=[],V=[],q=0;for(let[w,C]of $){let A=Z.get(w);if(!A)H.push({id:crypto.randomUUID(),organization_id:Y,connection_id:Q,event_type:C.eventType,publisher:C.publisher??null,filter:C.filter??null,enabled:1,created_at:K,updated_at:K});else{let T=A.filter??null,P=C.filter??null;if(T!==P)F.push({id:A.id,filter:P});else q++}}for(let[w,C]of Z)if(!$.has(w))V.push(C.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(F.length>0)await Promise.all(F.map((w)=>this.db.updateTable("event_subscriptions").set({filter:w.filter,updated_at:K}).where("id","=",w.id).execute()));if(V.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",V).execute();let z=H.length,D=F.length,N=V.length,L=await this.listSubscriptions(Y,Q);return{created:z,updated:D,deleted:N,unchanged:q,subscriptions:L}}}function MH1(X){return new wH1(X)}function K9(X,Y,Q,J,G,W,Z,$){return K9.fromTZ(K9.tp(X,Y,Q,J,G,W,Z),$)}function yQ0(X,Y=new Date){let Q=Y.toLocaleString("en-US",{timeZone:X,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],J=Y.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${J} GMT`)-Date.parse(`${J} ${Q}`)}function Bp6(X,Y){let Q=new Date(Date.parse(X));if(isNaN(Q))throw Error("minitz: Invalid ISO8601 passed to parser.");let J=X.substring(9);return X.includes("Z")||J.includes("-")||J.includes("+")?K9.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):K9.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Y)}function Dp6(X){if(X===void 0&&(X={}),delete X.name,X.legacyMode=X.legacyMode===void 0?!0:X.legacyMode,X.paused=X.paused===void 0?!1:X.paused,X.maxRuns=X.maxRuns===void 0?1/0:X.maxRuns,X.catch=X.catch===void 0?!1:X.catch,X.interval=X.interval===void 0?0:parseInt(X.interval.toString(),10),X.utcOffset=X.utcOffset===void 0?void 0:parseInt(X.utcOffset.toString(),10),X.unref=X.unref===void 0?!1:X.unref,X.startAt&&(X.startAt=new V5(X.startAt,X.timezone)),X.stopAt&&(X.stopAt=new V5(X.stopAt,X.timezone)),X.interval!==null){if(isNaN(X.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(X.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(X.utcOffset!==void 0){if(isNaN(X.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(X.utcOffset<-870||X.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(X.utcOffset!==void 0&&X.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(X.unref!==!0&&X.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return X}function aT(X){return Object.prototype.toString.call(X)==="[object Function]"||typeof X=="function"||X instanceof Function}function Np6(X){return aT(X)}function Op6(X){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(X):X&&typeof X.unref<"u"&&X.unref()}var bQ0=32,rT,EH1,PH1=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(X,Y){this.pattern=X,this.timezone=Y,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let X=this.pattern.replace(/\s+/g," ").split(" ");if(X.length<5||X.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(X.length===5&&X.unshift("0"),X[3].indexOf("L")>=0&&(X[3]=X[3].replace("L",""),this.lastDayOfMonth=!0),X[3]=="*"&&(this.starDOM=!0),X[4].length>=3&&(X[4]=this.replaceAlphaMonths(X[4])),X[5].length>=3&&(X[5]=this.replaceAlphaDays(X[5])),X[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Y=new V5(new Date,this.timezone).getDate(!0);X[0]=X[0].replace("?",Y.getSeconds().toString()),X[1]=X[1].replace("?",Y.getMinutes().toString()),X[2]=X[2].replace("?",Y.getHours().toString()),this.starDOM||(X[3]=X[3].replace("?",Y.getDate().toString())),X[4]=X[4].replace("?",(Y.getMonth()+1).toString()),this.starDOW||(X[5]=X[5].replace("?",Y.getDay().toString()))}this.throwAtIllegalCharacters(X),this.partToArray("second",X[0],0,1),this.partToArray("minute",X[1],0,1),this.partToArray("hour",X[2],0,1),this.partToArray("day",X[3],-1,1),this.partToArray("month",X[4],-1,1),this.partToArray("dayOfWeek",X[5],0,rT),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(X,Y,Q,J){let G=this[X],W=X==="day"&&this.lastDayOfMonth;if(Y===""&&!W)throw TypeError("CronPattern: configuration entry "+X+" ("+Y+") is empty, check for trailing spaces.");if(Y==="*")return G.fill(J);let Z=Y.split(",");if(Z.length>1)for(let $=0;$<Z.length;$++)this.partToArray(X,Z[$],Q,J);else Y.indexOf("-")!==-1&&Y.indexOf("/")!==-1?this.handleRangeWithStepping(Y,X,Q,J):Y.indexOf("-")!==-1?this.handleRange(Y,X,Q,J):Y.indexOf("/")!==-1?this.handleStepping(Y,X,Q,J):Y!==""&&this.handleNumber(Y,X,Q,J)}throwAtIllegalCharacters(X){for(let Y=0;Y<X.length;Y++)if((Y===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(X[Y]))throw TypeError("CronPattern: configuration entry "+Y+" ("+X[Y]+") contains illegal characters.")}handleNumber(X,Y,Q,J){let G=this.extractNth(X,Y),W=parseInt(G[0],10)+Q;if(isNaN(W))throw TypeError("CronPattern: "+Y+" is not a number: '"+X+"'");this.setPart(Y,W,G[1]||J)}setPart(X,Y,Q){if(!Object.prototype.hasOwnProperty.call(this,X))throw TypeError("CronPattern: Invalid part specified: "+X);if(X==="dayOfWeek"){if(Y===7&&(Y=0),Y<0||Y>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Y);this.setNthWeekdayOfMonth(Y,Q);return}if(X==="second"||X==="minute"){if(Y<0||Y>=60)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="hour"){if(Y<0||Y>=24)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="day"){if(Y<0||Y>=31)throw RangeError("CronPattern: Invalid value for "+X+": "+Y)}else if(X==="month"&&(Y<0||Y>=12))throw RangeError("CronPattern: Invalid value for "+X+": "+Y);this[X][Y]=Q}handleRangeWithStepping(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(W===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+X+"'");let[,Z,$,K]=W,H=parseInt(Z,10)+Q,F=parseInt($,10)+Q,V=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(V))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(V===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(V>this[Y].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Y].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+X+"'");for(let q=H;q<=F;q+=V)this.setPart(Y,q,G[1]||J)}extractNth(X,Y){let Q=X,J;if(Q.includes("#")){if(Y!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");J=Q.split("#")[1],Q=Q.split("#")[0]}return[Q,J]}handleRange(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].split("-");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+X+"'");let Z=parseInt(W[0],10)+Q,$=parseInt(W[1],10)+Q;if(isNaN(Z))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(Z>$)throw TypeError("CronPattern: From value is larger than to value: '"+X+"'");for(let K=Z;K<=$;K++)this.setPart(Y,K,G[1]||J)}handleStepping(X,Y,Q,J){let G=this.extractNth(X,Y),W=G[0].split("/");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+X+"'");W[0]===""&&(W[0]="*");let Z=0;W[0]!=="*"&&(Z=parseInt(W[0],10)+Q);let $=parseInt(W[1],10);if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if($===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if($>this[Y].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Y].length+")");for(let K=Z;K<this[Y].length;K+=$)this.setPart(Y,K,G[1]||J)}replaceAlphaDays(X){return X.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths(X){return X.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(X){let Y=X.trim().toLowerCase();return Y==="@yearly"||Y==="@annually"?"0 0 1 1 *":Y==="@monthly"?"0 0 1 * *":Y==="@weekly"?"0 0 * * 0":Y==="@daily"?"0 0 * * *":Y==="@hourly"?"0 * * * *":X}setNthWeekdayOfMonth(X,Y){if(typeof Y!="number"&&Y==="L")this.dayOfWeek[X]=this.dayOfWeek[X]|bQ0;else if(Y===rT)this.dayOfWeek[X]=rT;else if(Y<6&&Y>0)this.dayOfWeek[X]=this.dayOfWeek[X]|EH1[Y-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Y}, Type: ${typeof Y}`)}},TH1,EZ,V5=class X{tz;ms;second;minute;hour;day;month;year;constructor(Y,Q){if(this.tz=Q,Y&&Y instanceof Date)if(!isNaN(Y))this.fromDate(Y);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Y===void 0)this.fromDate(new Date);else if(Y&&typeof Y=="string")this.fromString(Y);else if(Y instanceof X)this.fromCronDate(Y);else throw TypeError("CronDate: Invalid type ("+typeof Y+") passed to CronDate constructor")}isNthWeekdayOfMonth(Y,Q,J,G){let W=new Date(Date.UTC(Y,Q,J)).getUTCDay(),Z=0;for(let $=1;$<=J;$++)new Date(Date.UTC(Y,Q,$)).getUTCDay()===W&&Z++;if(G&rT&&EH1[Z-1]&G)return!0;if(G&bQ0){let $=new Date(Date.UTC(Y,Q+1,0)).getUTCDate();for(let K=J+1;K<=$;K++)if(new Date(Date.UTC(Y,Q,K)).getUTCDay()===W)return!1;return!0}return!1}fromDate(Y){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Y.getUTCMilliseconds(),this.second=Y.getUTCSeconds(),this.minute=Y.getUTCMinutes()+this.tz,this.hour=Y.getUTCHours(),this.day=Y.getUTCDate(),this.month=Y.getUTCMonth(),this.year=Y.getUTCFullYear(),this.apply();else{let Q=K9.toTZ(Y,this.tz);this.ms=Y.getMilliseconds(),this.second=Q.s,this.minute=Q.i,this.hour=Q.h,this.day=Q.d,this.month=Q.m-1,this.year=Q.y}else this.ms=Y.getMilliseconds(),this.second=Y.getSeconds(),this.minute=Y.getMinutes(),this.hour=Y.getHours(),this.day=Y.getDate(),this.month=Y.getMonth(),this.year=Y.getFullYear()}fromCronDate(Y){this.tz=Y.tz,this.year=Y.year,this.month=Y.month,this.day=Y.day,this.hour=Y.hour,this.minute=Y.minute,this.second=Y.second,this.ms=Y.ms}apply(){if(this.month>11||this.day>TH1[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Y=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Y.getUTCMilliseconds(),this.second=Y.getUTCSeconds(),this.minute=Y.getUTCMinutes(),this.hour=Y.getUTCHours(),this.day=Y.getUTCDate(),this.month=Y.getUTCMonth(),this.year=Y.getUTCFullYear(),!0}else return!1}fromString(Y){if(typeof this.tz=="number"){let Q=K9.fromTZISO(Y);this.ms=Q.getUTCMilliseconds(),this.second=Q.getUTCSeconds(),this.minute=Q.getUTCMinutes(),this.hour=Q.getUTCHours(),this.day=Q.getUTCDate(),this.month=Q.getUTCMonth(),this.year=Q.getUTCFullYear(),this.apply()}else return this.fromDate(K9.fromTZISO(Y,this.tz))}findNext(Y,Q,J,G){let W=this[Q],Z;J.lastDayOfMonth&&(this.month!==1?Z=TH1[this.month]:Z=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let $=!J.starDOW&&Q=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[Q]+G;K<J[Q].length;K++){let H=J[Q][K];if(Q==="day"&&J.lastDayOfMonth&&K-G==Z&&(H=1),Q==="day"&&!J.starDOW){let F=J.dayOfWeek[($+(K-G-1))%7];if(F&&F&rT)F=this.isNthWeekdayOfMonth(this.year,this.month,K-G,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Y.legacyMode&&!J.starDOM?H=H||F:H=H&&F}if(H)return this[Q]=K-G,W!==this[Q]?2:1}return 3}recurse(Y,Q,J){let G=this.findNext(Q,EZ[J][0],Y,EZ[J][2]);if(G>1){let W=J+1;for(;W<EZ.length;)this[EZ[W][0]]=-EZ[W][2],W++;if(G===3)return this[EZ[J][1]]++,this[EZ[J][0]]=-EZ[J][2],this.apply(),this.recurse(Y,Q,0);if(this.apply())return this.recurse(Y,Q,J-1)}return J+=1,J>=EZ.length?this:this.year>=3000?null:this.recurse(Y,Q,J)}increment(Y,Q,J){return this.second+=Q.interval!==void 0&&Q.interval>1&&J?Q.interval:1,this.ms=0,this.apply(),this.recurse(Y,Q,0)}getDate(Y){return Y||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):K9.fromTZ(K9.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},AH1=30000,rf,of=class{name;options;_states;fn;constructor(X,Y,Q){let J,G;if(aT(Y))G=Y;else if(typeof Y=="object")J=Y;else if(Y!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(aT(Q))G=Q;else if(typeof Q=="object")J=Q;else if(Q!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=J?.name,this.options=Dp6(J),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:J?J.maxRuns:void 0,paused:J?J.paused:!1,pattern:new PH1("* * * * *")},X&&(X instanceof Date||typeof X=="string"&&X.indexOf(":")>0)?this._states.once=new V5(X,this.options.timezone||this.options.utcOffset):this._states.pattern=new PH1(X,this.options.timezone),this.name){if(rf.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");rf.push(this)}return G!==void 0&&Np6(G)&&(this.fn=G,this.schedule()),this}nextRun(X){let Y=this._next(X);return Y?Y.getDate(!1):null}nextRuns(X,Y){this._states.maxRuns!==void 0&&X>this._states.maxRuns&&(X=this._states.maxRuns);let Q=[],J=Y||this._states.currentRun||void 0;for(;X--&&(J=this.nextRun(J));)Q.push(J);return Q}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let X=this.nextRun(this._states.currentRun),Y=!this._states.paused,Q=this.fn!==void 0,J=!this._states.kill;return Y&&Q&&J&&X!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(X){let Y=this._next(X);return Y?X instanceof V5||X instanceof Date?Y.getTime()-X.getTime():Y.getTime()-new V5(X).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let X=rf.indexOf(this);X>=0&&rf.splice(X,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(X){if(X&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");X&&(this.fn=X);let Y=this.msToNext(),Q=this.nextRun(this._states.currentRun);return Y==null||isNaN(Y)||Q===null?this:(Y>AH1&&(Y=AH1),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Y),this._states.currentTimeout&&this.options.unref&&Op6(this._states.currentTimeout),this)}async _trigger(X){if(this._states.blocking=!0,this._states.currentRun=new V5(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Y){aT(this.options.catch)&&this.options.catch(Y,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new V5(X,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(X){let Y=new Date,Q=!this._states.paused&&Y.getTime()>=X.getTime(),J=this._states.blocking&&this.options.protect;Q&&!J?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):Q&&J&&aT(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(X){let Y=!!(X||this._states.currentRun),Q=!1;!X&&this.options.startAt&&this.options.interval&&([X,Y]=this._calculatePreviousRun(X,Y),Q=!X),X=new V5(X,this.options.timezone||this.options.utcOffset),this.options.startAt&&X&&X.getTime()<this.options.startAt.getTime()&&(X=this.options.startAt);let J=this._states.once||new V5(X,this.options.timezone||this.options.utcOffset);return!Q&&J!==this._states.once&&(J=J.increment(this._states.pattern,this.options,Y)),this._states.once&&this._states.once.getTime()<=X.getTime()||J===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&J.getTime()>=this.options.stopAt.getTime()?null:J}_calculatePreviousRun(X,Y){let Q=new V5(void 0,this.options.timezone||this.options.utcOffset),J=X;if(this.options.startAt.getTime()<=Q.getTime()){J=this.options.startAt;let G=J.getTime()+this.options.interval*1000;for(;G<=Q.getTime();)J=new V5(J,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),G=J.getTime()+this.options.interval*1000;Y=!0}return J===null&&(J=void 0),[J,Y]}};var fQ0=S(()=>{K9.fromTZISO=(X,Y,Q)=>K9.fromTZ(Bp6(X,Y),Q);K9.fromTZ=function(X,Y){let Q=new Date(Date.UTC(X.y,X.m-1,X.d,X.h,X.i,X.s)),J=yQ0(X.tz,Q),G=new Date(Q.getTime()-J),W=yQ0(X.tz,G);if(W-J===0)return G;{let Z=new Date(Q.getTime()-W),$=yQ0(X.tz,Z);if($-W===0)return Z;if(!Y&&$-W>0)return Z;if(Y)throw Error("Invalid date passed to fromTZ()");return G}};K9.toTZ=function(X,Y){let Q=X.toLocaleString("en-US",{timeZone:Y}).replace(/[\u202f]/," "),J=new Date(Q);return{y:J.getFullYear(),m:J.getMonth()+1,d:J.getDate(),h:J.getHours(),i:J.getMinutes(),s:J.getSeconds(),tz:Y}};K9.tp=(X,Y,Q,J,G,W,Z)=>({y:X,m:Y,d:Q,h:J,i:G,s:W,tz:Z});K9.minitz=K9;rT=31|bQ0,EH1=[1,2,4,8,16],TH1=[31,28,31,30,31,30,31,31,30,31,30,31],EZ=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];rf=[]});var sf;var hQ0=S(()=>{sf={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000}});function jH1(){return async(X,Y)=>{try{let Q=await dK.create(),J=await UH1(X,{...Q,auth:{...Q.auth,user:{id:"notify-worker"}}}),W=await Z90.forClient(J).ON_EVENTS({events:Y});return{success:W.success,error:W.error,retryAfter:W.retryAfter,results:W.results}}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return console.error(`[EventBus] Failed to notify connection ${X}:`,J),{success:!1,error:J}}}}var CH1=S(()=>{nf();Mf();iT()});function IH1(X){return{specversion:"1.0",id:X.id,source:X.source,type:X.type,time:X.time,subject:X.subject??void 0,datacontenttype:X.datacontenttype,dataschema:X.dataschema??void 0,data:X.data??void 0}}function Lp6(X){let Y=new Map;for(let J of X){let G=J.subscription.connectionId,W=Y.get(G);if(W){if(W.deliveryIds.push(J.delivery.id),!W.seenEventIds.has(J.event.id))W.seenEventIds.add(J.event.id),W.events.push(IH1(J.event))}else Y.set(G,{connectionId:J.subscription.connectionId,deliveryIds:[J.delivery.id],events:[IH1(J.event)],seenEventIds:new Set([J.event.id])})}let Q=new Map;for(let[J,G]of Y)Q.set(J,{connectionId:G.connectionId,deliveryIds:G.deliveryIds,events:G.events});return Q}class xQ0{storage;notifySubscriber;running=!1;processing=!1;config;constructor(X,Y){this.storage=X;this.notifySubscriber=jH1(),this.config={...sf,...Y}}async start(){if(this.running)return;let X=await this.storage.resetStuckDeliveries();if(X>0)console.log(`[EventBus] Reset ${X} stuck deliveries from previous shutdown`);this.running=!0}stop(){this.running=!1,console.log("[EventBus] Worker stopped")}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing)return;this.processing=!0;try{await this.processEvents()}catch(X){console.error("[EventBus] Error processing events:",X)}finally{this.processing=!1}}async processEvents(){let X=await this.storage.claimPendingDeliveries(this.config.batchSize);if(X.length===0)return;let Y=Lp6(X),Q=new Set;for(let[J,G]of Y){try{let W=await this.notifySubscriber(G.connectionId,G.events);if(W.results&&Object.keys(W.results).length>0)await this.processPerEventResults(G,W);else if(W.success)await this.storage.markDeliveriesDelivered(G.deliveryIds);else if(W.retryAfter&&W.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(G.deliveryIds,W.retryAfter);else await this.storage.markDeliveriesFailed(G.deliveryIds,W.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(W){let Z=W instanceof Error?W.message:String(W);console.error(`[EventBus] Failed to notify subscription ${J}:`,Z),await this.storage.markDeliveriesFailed(G.deliveryIds,Z,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}for(let W of X)if(G.deliveryIds.includes(W.delivery.id))Q.add(W.event.id)}for(let J of Q)try{await this.storage.updateEventStatus(J);let G=X.find((W)=>W.event.id===J)?.event;if(G?.cron)await this.scheduleNextCronDelivery(G)}catch(G){console.error(`[EventBus] Failed to update event status ${J}:`,G)}}async processPerEventResults(X,Y){let Q=[],J=new Map,G=[],W=new Map;for(let Z=0;Z<X.events.length;Z++){let $=X.events?.[Z];if(!$)continue;let K=X.deliveryIds?.[Z];if(!K)continue;W.set($.id,K)}for(let Z of X.events){let $=W.get(Z.id);if(!$)continue;let K=Y.results?.[Z.id];if(K)if(K.success)Q.push($);else if(K.retryAfter&&K.retryAfter>0){let H=J.get(K.retryAfter)||[];H.push($),J.set(K.retryAfter,H)}else G.push({deliveryId:$,error:K.error||"Event processing failed"});else if(Y.success)Q.push($);else if(Y.retryAfter&&Y.retryAfter>0){let H=J.get(Y.retryAfter)||[];H.push($),J.set(Y.retryAfter,H)}else G.push({deliveryId:$,error:Y.error||"Batch processing failed"})}if(Q.length>0)await this.storage.markDeliveriesDelivered(Q);for(let[Z,$]of J)await this.storage.scheduleRetryWithoutAttemptIncrement($,Z);if(G.length>0){let Z=new Map;for(let{deliveryId:$,error:K}of G){let H=Z.get(K)||[];H.push($),Z.set(K,H)}for(let[$,K]of Z)await this.storage.markDeliveriesFailed(K,$,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(X){if(!X.cron)return;try{let Q=new of(X.cron).nextRun();if(!Q){console.log(`[EventBus] Cron expression for event ${X.id} has no more runs`);return}let J=Q.toISOString(),G=await this.storage.getMatchingSubscriptions(X);if(G.length===0){console.log(`[EventBus] No subscriptions for cron event ${X.id}, skipping next delivery`);return}await this.storage.createDeliveries(X.id,G.map((W)=>W.id),J),console.log(`[EventBus] Scheduled next cron delivery for event ${X.id} at ${J}`)}catch(Y){console.error(`[EventBus] Failed to schedule next cron delivery for event ${X.id}:`,Y)}}}var RH1=S(()=>{fQ0();hQ0();CH1()});class gQ0{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new xQ0(this.storage,X.config)}async publish(X,Y,Q){if(Q.deliverAt&&Q.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let J;if(Q.cron){try{let F=new of(Q.cron).nextRun();if(!F)throw Error("Cron expression does not produce a next run time");J=F.toISOString()}catch(H){throw Error(`Invalid cron expression: ${H instanceof Error?H.message:String(H)}`)}let K=await this.storage.findActiveCronEvent(X,Q.type,Y,Q.cron);if(K)return K}let G=crypto.randomUUID(),W=new Date().toISOString(),Z=await this.storage.publishEvent({id:G,organizationId:X,type:Q.type,source:Y,subject:Q.subject,time:W,data:Q.data,cron:Q.cron}),$=await this.storage.getMatchingSubscriptions(Z);if($.length>0){let K=Q.deliverAt??J;if(await this.storage.createDeliveries(G,$.map((H)=>H.id),K),this.notifyStrategy&&!K)await this.notifyStrategy.notify(G).catch((H)=>{console.warn("[EventBus] Notify failed (non-critical):",H)})}return Z}async subscribe(X,Y){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:X,connectionId:Y.connectionId,publisher:Y.publisher,eventType:Y.eventType,filter:Y.filter})}async unsubscribe(X,Y){return this.storage.unsubscribe(Y,X)}async listSubscriptions(X,Y){return this.storage.listSubscriptions(X,Y)}async getSubscription(X,Y){return this.storage.getSubscription(Y,X)}async getEvent(X,Y){return this.storage.getEvent(Y,X)}async cancelEvent(X,Y,Q){return this.storage.cancelEvent(Y,X,Q)}async ackEvent(X,Y,Q){return this.storage.ackDelivery(Y,X,Q)}async syncSubscriptions(X,Y){return this.storage.syncSubscriptions({organizationId:X,...Y})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing after notify:",X)})});await this.worker.processNow().catch((X)=>{console.error("[EventBus] Error processing pending events on startup:",X)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(X){console.error("[EventBus] Error stopping notify strategy:",X)}console.log("[EventBus] Stopped")}isRunning(){return this.running}}var SH1=S(()=>{fQ0();RH1()});function kH1(...X){return{async start(Y){await Promise.all(X.map((Q)=>Q.start(Y)))},async stop(){await Promise.all(X.map((Y)=>Y.stop().catch((Q)=>{console.error("[NotifyStrategy] Error stopping strategy:",Q)})))},async notify(Y){await Promise.all(X.map((Q)=>Q.notify(Y).catch((J)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",J)})))}}}class tf{intervalMs;timer=null;onNotify=null;constructor(X){this.intervalMs=X}async start(X){if(this.timer)return;this.onNotify=X,this.scheduleNext(),console.log(`[Polling] Started polling every ${this.intervalMs}ms`)}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null,console.log("[Polling] Stopped polling");this.onNotify=null}async notify(X){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}import{sql as wp6}from"kysely";class uQ0{db;pool;listenClient=null;onNotify=null;constructor(X,Y){this.db=X;this.pool=Y}async start(X){if(this.listenClient)return;this.onNotify=X;try{this.listenClient=await this.pool.connect(),this.listenClient.on("notification",(Y)=>{if(Y.channel===pB&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(Y)=>{console.error("[PostgresNotify] Connection error:",Y),this.cleanup()}),await this.listenClient.query(`LISTEN ${pB}`),console.log("[PostgresNotify] Started LISTEN on",pB)}catch(Y){console.error("[PostgresNotify] Failed to start LISTEN:",Y),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${pB}`),console.log("[PostgresNotify] Stopped LISTEN on",pB)}catch{}this.cleanup()}}async notify(X){try{await wp6`SELECT pg_notify(${pB}, ${X})`.execute(this.db)}catch(Y){console.warn("[PostgresNotify] Failed to send NOTIFY:",Y)}}cleanup(){if(this.listenClient)this.listenClient.release(),this.listenClient=null;this.onNotify=null}}var pB="mesh_events";var vH1=()=>{};function _H1(X,Y){let Q=MH1(X.db),J=Y?.pollIntervalMs??sf.pollIntervalMs,G=X.type==="postgres"?kH1(new tf(J),new uQ0(X.db,X.pool)):new tf(J);return new gQ0({storage:Q,config:Y,notifyStrategy:G})}var yH1=S(()=>{SH1();hQ0();vH1()});var bH1;var fH1=S(()=>{bH1={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});var hH1,xH1;var gH1=S(()=>{ZG();uB();fH1();hH1=new ZX;hH1.get("/config",async(X)=>{try{let Y=Object.keys(WX.socialProviders??{}),Q=Y.length>0,J=Y.map((Z)=>({name:Z,icon:bH1[Z].icon})),G=process.env.UNSAFE_ALLOW_STDIO_TRANSPORT==="true",W={emailAndPassword:{enabled:WX.emailAndPassword?.enabled??!1},magicLink:{enabled:WX.magicLinkConfig?.enabled??!1},socialProviders:{enabled:Q,providers:J},sso:WX.ssoConfig?{enabled:!0,providerId:WX.ssoConfig.providerId}:{enabled:!1},stdioEnabled:G};return X.json({success:!0,config:W})}catch(Y){let Q=Y instanceof Error?Y.message:"Failed to load auth config";return X.json({success:!1,error:Q},500)}});xH1=hH1});function $G(X){if(X==null)return"unknown error";if(typeof X==="string")return X;if(X instanceof Error)return X.message;return JSON.stringify(X)}var z31="vercel.ai.error",Mp6,uH1,mH1,O1,B31="AI_APICallError",D31,Pp6,lH1,dH1,$X,N31="AI_EmptyResponseBodyError",O31,Tp6,pH1,cH1,L31,w31="AI_InvalidArgumentError",M31,Ap6,nH1,iH1,P31,T31="AI_InvalidPromptError",A31,Ep6,aH1,rH1,YV,E31="AI_InvalidResponseDataError",j31,jp6,oH1,sH1,b88,C31="AI_JSONParseError",I31,Cp6,tH1,eH1,oT,R31="AI_LoadAPIKeyError",S31,Ip6,X31,Y31,f88,k31="AI_LoadSettingError",v31,Rp6,Q31,J31,h88,_31="AI_NoContentGeneratedError",y31,Sp6,G31,W31,x88,b31="AI_NoSuchModelError",f31,kp6,Z31,$31,g88,h31="AI_TooManyEmbeddingValuesForCallError",x31,vp6,K31,H31,u88,g31="AI_TypeValidationError",u31,_p6,F31,V31,EQ,m31="AI_UnsupportedFunctionalityError",l31,yp6,q31,U31,d31;var q4=S(()=>{Mp6=Symbol.for(z31),O1=class X extends(mH1=Error,uH1=Mp6,mH1){constructor({name:Y,message:Q,cause:J}){super(Q);this[uH1]=!0,this.name=Y,this.cause=J}static isInstance(Y){return X.hasMarker(Y,z31)}static hasMarker(Y,Q){let J=Symbol.for(Q);return Y!=null&&typeof Y==="object"&&J in Y&&typeof Y[J]==="boolean"&&Y[J]===!0}},D31=`vercel.ai.error.${B31}`,Pp6=Symbol.for(D31),$X=class extends(dH1=O1,lH1=Pp6,dH1){constructor({message:X,url:Y,requestBodyValues:Q,statusCode:J,responseHeaders:G,responseBody:W,cause:Z,isRetryable:$=J!=null&&(J===408||J===409||J===429||J>=500),data:K}){super({name:B31,message:X,cause:Z});this[lH1]=!0,this.url=Y,this.requestBodyValues=Q,this.statusCode=J,this.responseHeaders=G,this.responseBody=W,this.isRetryable=$,this.data=K}static isInstance(X){return O1.hasMarker(X,D31)}},O31=`vercel.ai.error.${N31}`,Tp6=Symbol.for(O31),L31=class extends(cH1=O1,pH1=Tp6,cH1){constructor({message:X="Empty response body"}={}){super({name:N31,message:X});this[pH1]=!0}static isInstance(X){return O1.hasMarker(X,O31)}};M31=`vercel.ai.error.${w31}`,Ap6=Symbol.for(M31),P31=class extends(iH1=O1,nH1=Ap6,iH1){constructor({message:X,cause:Y,argument:Q}){super({name:w31,message:X,cause:Y});this[nH1]=!0,this.argument=Q}static isInstance(X){return O1.hasMarker(X,M31)}},A31=`vercel.ai.error.${T31}`,Ep6=Symbol.for(A31),YV=class extends(rH1=O1,aH1=Ep6,rH1){constructor({prompt:X,message:Y,cause:Q}){super({name:T31,message:`Invalid prompt: ${Y}`,cause:Q});this[aH1]=!0,this.prompt=X}static isInstance(X){return O1.hasMarker(X,A31)}},j31=`vercel.ai.error.${E31}`,jp6=Symbol.for(j31),b88=class extends(sH1=O1,oH1=jp6,sH1){constructor({data:X,message:Y=`Invalid response data: ${JSON.stringify(X)}.`}){super({name:E31,message:Y});this[oH1]=!0,this.data=X}static isInstance(X){return O1.hasMarker(X,j31)}},I31=`vercel.ai.error.${C31}`,Cp6=Symbol.for(I31),oT=class extends(eH1=O1,tH1=Cp6,eH1){constructor({text:X,cause:Y}){super({name:C31,message:`JSON parsing failed: Text: ${X}.
1189
1189
  Error message: ${$G(Y)}`,cause:Y});this[tH1]=!0,this.text=X}static isInstance(X){return O1.hasMarker(X,I31)}},S31=`vercel.ai.error.${R31}`,Ip6=Symbol.for(S31),f88=class extends(Y31=O1,X31=Ip6,Y31){constructor({message:X}){super({name:R31,message:X});this[X31]=!0}static isInstance(X){return O1.hasMarker(X,S31)}},v31=`vercel.ai.error.${k31}`,Rp6=Symbol.for(v31),h88=class extends(J31=O1,Q31=Rp6,J31){constructor({message:X}){super({name:k31,message:X});this[Q31]=!0}static isInstance(X){return O1.hasMarker(X,v31)}},y31=`vercel.ai.error.${_31}`,Sp6=Symbol.for(y31),x88=class extends(W31=O1,G31=Sp6,W31){constructor({message:X="No content generated."}={}){super({name:_31,message:X});this[G31]=!0}static isInstance(X){return O1.hasMarker(X,y31)}},f31=`vercel.ai.error.${b31}`,kp6=Symbol.for(f31),g88=class extends($31=O1,Z31=kp6,$31){constructor({errorName:X=b31,modelId:Y,modelType:Q,message:J=`No such ${Q}: ${Y}`}){super({name:X,message:J});this[Z31]=!0,this.modelId=Y,this.modelType=Q}static isInstance(X){return O1.hasMarker(X,f31)}},x31=`vercel.ai.error.${h31}`,vp6=Symbol.for(x31),u88=class extends(H31=O1,K31=vp6,H31){constructor(X){super({name:h31,message:`Too many values for a single embedding call. The ${X.provider} model "${X.modelId}" can only embed up to ${X.maxEmbeddingsPerCall} values per call, but ${X.values.length} values were provided.`});this[K31]=!0,this.provider=X.provider,this.modelId=X.modelId,this.maxEmbeddingsPerCall=X.maxEmbeddingsPerCall,this.values=X.values}static isInstance(X){return O1.hasMarker(X,x31)}},u31=`vercel.ai.error.${g31}`,_p6=Symbol.for(u31),EQ=class X extends(V31=O1,F31=_p6,V31){constructor({value:Y,cause:Q}){super({name:g31,message:`Type validation failed: Value: ${JSON.stringify(Y)}.
1190
1190
  Error message: ${$G(Q)}`,cause:Q});this[F31]=!0,this.value=Y}static isInstance(Y){return O1.hasMarker(Y,u31)}static wrap({value:Y,cause:Q}){return X.isInstance(Q)&&Q.value===Y?Q:new X({value:Y,cause:Q})}},l31=`vercel.ai.error.${m31}`,yp6=Symbol.for(l31),d31=class extends(U31=O1,q31=yp6,U31){constructor({functionality:X,message:Y=`'${X}' functionality not supported.`}){super({name:m31,message:Y});this[q31]=!0,this.functionality=X}static isInstance(X){return O1.hasMarker(X,l31)}}});var p31=()=>{};function JV(...X){return X.reduce((Y,Q)=>({...Y,...Q!=null?Q:{}}),{})}async function s31(X,Y){if(X==null)return Promise.resolve();let Q=Y==null?void 0:Y.abortSignal;return new Promise((J,G)=>{if(Q==null?void 0:Q.aborted){G(c31());return}let W=setTimeout(()=>{Z(),J()},X),Z=()=>{clearTimeout(W),Q==null||Q.removeEventListener("abort",$)},$=()=>{Z(),G(c31())};Q==null||Q.addEventListener("abort",$)})}function c31(){return new DOMException("Delay was aborted","AbortError")}function sT(X){return Object.fromEntries([...X.headers])}function cB(X){let Y=X.replace(/-/g,"+").replace(/_/g,"/"),Q=fp6(Y);return Uint8Array.from(Q,(J)=>J.codePointAt(0))}function WV(X){let Y="";for(let Q=0;Q<X.length;Q++)Y+=String.fromCodePoint(X[Q]);return bp6(Y)}function nB(X){if(X==null)return"unknown error";if(typeof X==="string")return X;if(X instanceof Error)return X.message;return JSON.stringify(X)}function jZ(X){return(X instanceof Error||X instanceof DOMException)&&(X.name==="AbortError"||X.name==="ResponseAborted"||X.name==="TimeoutError")}function XF1({error:X,url:Y,requestBodyValues:Q}){if(jZ(X))return X;if(X instanceof TypeError&&gp6.includes(X.message.toLowerCase())){let J=X.cause;if(J!=null)return new $X({message:`Cannot connect to API: ${J.message}`,cause:J,url:Y,requestBodyValues:Q,isRetryable:!0})}return X}function Xh(X=globalThis){var Y,Q,J;if(X.window)return"runtime/browser";if((Y=X.navigator)==null?void 0:Y.userAgent)return`runtime/${X.navigator.userAgent.toLowerCase()}`;if((J=(Q=X.process)==null?void 0:Q.versions)==null?void 0:J.node)return`runtime/node.js/${X.process.version.substring(0)}`;if(X.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function up6(X){if(X==null)return{};let Y={};if(X instanceof Headers)X.forEach((Q,J)=>{Y[J.toLowerCase()]=Q});else{if(!Array.isArray(X))X=Object.entries(X);for(let[Q,J]of X)if(J!=null)Y[Q.toLowerCase()]=J}return Y}function CZ(X,...Y){let Q=new Headers(up6(X)),J=Q.get("user-agent")||"";return Q.set("user-agent",[J,...Y].filter(Boolean).join(" ")),Object.fromEntries(Q.entries())}function QF1(X){return X!=null}function JF1({mediaType:X,url:Y,supportedUrls:Q}){return Y=Y.toLowerCase(),X=X.toLowerCase(),Object.entries(Q).map(([J,G])=>{let W=J.toLowerCase();return W==="*"||W==="*/*"?{mediaTypePrefix:"",regexes:G}:{mediaTypePrefix:W.replace(/\*/,""),regexes:G}}).filter(({mediaTypePrefix:J})=>X.startsWith(J)).flatMap(({regexes:J})=>J).some((J)=>J.test(Y))}function tT({settingValue:X,environmentVariableName:Y}){if(typeof X==="string")return X;if(X!=null||typeof process>"u")return;if(X=process.env[Y],X==null||typeof X!=="string")return;return X}function a31(X){let Y=JSON.parse(X);if(Y===null||typeof Y!=="object")return Y;if(lp6.test(X)===!1&&dp6.test(X)===!1)return Y;return pp6(Y)}function pp6(X){let Y=[X];while(Y.length){let Q=Y;Y=[];for(let J of Q){if(Object.prototype.hasOwnProperty.call(J,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(J,"constructor")&&Object.prototype.hasOwnProperty.call(J.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let G in J){let W=J[G];if(W&&typeof W==="object")Y.push(W)}}}return X}function GF1(X){let{stackTraceLimit:Y}=Error;try{Error.stackTraceLimit=0}catch(Q){return a31(X)}try{return a31(X)}finally{Error.stackTraceLimit=Y}}function nQ0(X){if(X.type==="object"||Array.isArray(X.type)&&X.type.includes("object")){X.additionalProperties=!1;let{properties:Q}=X;if(Q!=null)for(let J of Object.keys(Q))Q[J]=QV(Q[J])}if(X.items!=null)X.items=Array.isArray(X.items)?X.items.map(QV):QV(X.items);if(X.anyOf!=null)X.anyOf=X.anyOf.map(QV);if(X.allOf!=null)X.allOf=X.allOf.map(QV);if(X.oneOf!=null)X.oneOf=X.oneOf.map(QV);let{definitions:Y}=X;if(Y!=null)for(let Q of Object.keys(Y))Y[Q]=QV(Y[Q]);return X}function QV(X){if(typeof X==="boolean")return X;return nQ0(X)}function $J(){return{}}function ip6(X,Y){var Q,J,G;let W={type:"array"};if(((Q=X.type)==null?void 0:Q._def)&&((G=(J=X.type)==null?void 0:J._def)==null?void 0:G.typeName)!==j0.ZodAny)W.items=g4(X.type._def,{...Y,currentPath:[...Y.currentPath,"items"]});if(X.minLength)W.minItems=X.minLength.value;if(X.maxLength)W.maxItems=X.maxLength.value;if(X.exactLength)W.minItems=X.exactLength.value,W.maxItems=X.exactLength.value;return W}function ap6(X){let Y={type:"integer",format:"int64"};if(!X.checks)return Y;for(let Q of X.checks)switch(Q.kind){case"min":if(Q.inclusive)Y.minimum=Q.value;else Y.exclusiveMinimum=Q.value;break;case"max":if(Q.inclusive)Y.maximum=Q.value;else Y.exclusiveMaximum=Q.value;break;case"multipleOf":Y.multipleOf=Q.value;break}return Y}function rp6(){return{type:"boolean"}}function WF1(X,Y){return g4(X.type._def,Y)}function ZF1(X,Y,Q){let J=Q!=null?Q:Y.dateStrategy;if(Array.isArray(J))return{anyOf:J.map((G,W)=>ZF1(X,Y,G))};switch(J){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return sp6(X)}}function tp6(X,Y){return{...g4(X.innerType._def,Y),default:X.defaultValue()}}function ep6(X,Y){return Y.effectStrategy==="input"?g4(X.schema._def,Y):$J()}function Xc6(X){return{type:"string",enum:Array.from(X.values)}}function Qc6(X,Y){let Q=[g4(X.left._def,{...Y,currentPath:[...Y.currentPath,"allOf","0"]}),g4(X.right._def,{...Y,currentPath:[...Y.currentPath,"allOf","1"]})].filter((G)=>!!G),J=[];return Q.forEach((G)=>{if(Yc6(G))J.push(...G.allOf);else{let W=G;if("additionalProperties"in G&&G.additionalProperties===!1){let{additionalProperties:Z,...$}=G;W=$}J.push(W)}}),J.length?{allOf:J}:void 0}function Jc6(X){let Y=typeof X.value;if(Y!=="bigint"&&Y!=="number"&&Y!=="boolean"&&Y!=="string")return{type:Array.isArray(X.value)?"array":"object"};return{type:Y==="bigint"?"integer":Y,const:X.value}}function $F1(X,Y){let Q={type:"string"};if(X.checks)for(let J of X.checks)switch(J.kind){case"min":Q.minLength=typeof Q.minLength==="number"?Math.max(Q.minLength,J.value):J.value;break;case"max":Q.maxLength=typeof Q.maxLength==="number"?Math.min(Q.maxLength,J.value):J.value;break;case"email":switch(Y.emailStrategy){case"format:email":HG(Q,"email",J.message,Y);break;case"format:idn-email":HG(Q,"idn-email",J.message,Y);break;case"pattern:zod":l9(Q,KG.email,J.message,Y);break}break;case"url":HG(Q,"uri",J.message,Y);break;case"uuid":HG(Q,"uuid",J.message,Y);break;case"regex":l9(Q,J.regex,J.message,Y);break;case"cuid":l9(Q,KG.cuid,J.message,Y);break;case"cuid2":l9(Q,KG.cuid2,J.message,Y);break;case"startsWith":l9(Q,RegExp(`^${lQ0(J.value,Y)}`),J.message,Y);break;case"endsWith":l9(Q,RegExp(`${lQ0(J.value,Y)}$`),J.message,Y);break;case"datetime":HG(Q,"date-time",J.message,Y);break;case"date":HG(Q,"date",J.message,Y);break;case"time":HG(Q,"time",J.message,Y);break;case"duration":HG(Q,"duration",J.message,Y);break;case"length":Q.minLength=typeof Q.minLength==="number"?Math.max(Q.minLength,J.value):J.value,Q.maxLength=typeof Q.maxLength==="number"?Math.min(Q.maxLength,J.value):J.value;break;case"includes":{l9(Q,RegExp(lQ0(J.value,Y)),J.message,Y);break}case"ip":{if(J.version!=="v6")HG(Q,"ipv4",J.message,Y);if(J.version!=="v4")HG(Q,"ipv6",J.message,Y);break}case"base64url":l9(Q,KG.base64url,J.message,Y);break;case"jwt":l9(Q,KG.jwt,J.message,Y);break;case"cidr":{if(J.version!=="v6")l9(Q,KG.ipv4Cidr,J.message,Y);if(J.version!=="v4")l9(Q,KG.ipv6Cidr,J.message,Y);break}case"emoji":l9(Q,KG.emoji(),J.message,Y);break;case"ulid":{l9(Q,KG.ulid,J.message,Y);break}case"base64":{switch(Y.base64Strategy){case"format:binary":{HG(Q,"binary",J.message,Y);break}case"contentEncoding:base64":{Q.contentEncoding="base64";break}case"pattern:zod":{l9(Q,KG.base64,J.message,Y);break}}break}case"nanoid":l9(Q,KG.nanoid,J.message,Y);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return Q}function lQ0(X,Y){return Y.patternStrategy==="escape"?Wc6(X):X}function Wc6(X){let Y="";for(let Q=0;Q<X.length;Q++){if(!Gc6.has(X[Q]))Y+="\\";Y+=X[Q]}return Y}function HG(X,Y,Q,J){var G;if(X.format||((G=X.anyOf)==null?void 0:G.some((W)=>W.format))){if(!X.anyOf)X.anyOf=[];if(X.format)X.anyOf.push({format:X.format}),delete X.format;X.anyOf.push({format:Y,...Q&&J.errorMessages&&{errorMessage:{format:Q}}})}else X.format=Y}function l9(X,Y,Q,J){var G;if(X.pattern||((G=X.allOf)==null?void 0:G.some((W)=>W.pattern))){if(!X.allOf)X.allOf=[];if(X.pattern)X.allOf.push({pattern:X.pattern}),delete X.pattern;X.allOf.push({pattern:o31(Y,J),...Q&&J.errorMessages&&{errorMessage:{pattern:Q}}})}else X.pattern=o31(Y,J)}function o31(X,Y){var Q;if(!Y.applyRegexFlags||!X.flags)return X.source;let J={i:X.flags.includes("i"),m:X.flags.includes("m"),s:X.flags.includes("s")},G=J.i?X.source.toLowerCase():X.source,W="",Z=!1,$=!1,K=!1;for(let H=0;H<G.length;H++){if(Z){W+=G[H],Z=!1;continue}if(J.i){if($){if(G[H].match(/[a-z]/)){if(K)W+=G[H],W+=`${G[H-2]}-${G[H]}`.toUpperCase(),K=!1;else if(G[H+1]==="-"&&((Q=G[H+2])==null?void 0:Q.match(/[a-z]/)))W+=G[H],K=!0;else W+=`${G[H]}${G[H].toUpperCase()}`;continue}}else if(G[H].match(/[a-z]/)){W+=`[${G[H]}${G[H].toUpperCase()}]`;continue}}if(J.m){if(G[H]==="^"){W+=`(^|(?<=[\r
1191
1191
  ]))`;continue}else if(G[H]==="$"){W+=`($|(?=[\r