@decocms/mesh 2.21.0 → 2.22.0

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.
@@ -257,7 +257,7 @@ data:
257
257
  `;if(J)G+=`id: ${J}
258
258
  `;return G+=`data: ${JSON.stringify(Q)}
259
259
 
260
- `,X.enqueue(Y.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(X,Y){try{let Q=X.headers.get("accept");if(!Q?.includes("application/json")||!Q.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=X.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(X.headers.entries())},W;if(Y?.parsedBody!==void 0)W=Y.parsedBody;else try{W=await X.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let Z;try{if(Array.isArray(W))Z=W.map((L)=>fQ.parse(L));else Z=[fQ.parse(W)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let $=Z.some(T00);if($){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(Z.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!$){let L=this.validateSession(X);if(L)return L;let w=this.validateProtocolVersion(X);if(w)return w}if(!Z.some(eG)){for(let L of Z)this.onmessage?.(L,{authInfo:Y?.authInfo,requestInfo:G});return new Response(null,{status:202})}let H=crypto.randomUUID(),F=Z.find((L)=>T00(L)),V=F?F.params.protocolVersion:X.headers.get("mcp-protocol-version")??_e0;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set(H,{resolveJson:L,cleanup:()=>{this._streamMapping.delete(H)}});for(let w of Z)if(eG(w))this._requestToStreamMapping.set(w.id,H);for(let w of Z)this.onmessage?.(w,{authInfo:Y?.authInfo,requestInfo:G})});let q=new TextEncoder,z,D=new ReadableStream({start:(L)=>{z=L},cancel:()=>{this._streamMapping.delete(H)}}),N={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)N["mcp-session-id"]=this.sessionId;for(let L of Z)if(eG(L))this._streamMapping.set(H,{controller:z,encoder:q,cleanup:()=>{this._streamMapping.delete(H);try{z.close()}catch{}}}),this._requestToStreamMapping.set(L.id,H);await this.writePrimingEvent(z,q,H,V);for(let L of Z){let w,C;if(eG(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},C=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Y?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:C})}return new Response(D,{status:200,headers:N})}catch(Q){return this.onerror?.(Q),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(Q)})}}async handleDeleteRequest(X){let Y=this.validateSession(X);if(Y)return Y;let Q=this.validateProtocolVersion(X);if(Q)return Q;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(X){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Y=X.headers.get("mcp-session-id");if(!Y)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Y!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(X){let Y=X.headers.get("mcp-protocol-version");if(Y!==null&&!n3.includes(Y))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Y} (supported versions: ${n3.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:X})=>{X()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(X){let Y=this._requestToStreamMapping.get(X);if(!Y)return;let Q=this._streamMapping.get(Y);if(Q)Q.cleanup()}closeStandaloneSSEStream(){let X=this._streamMapping.get(this._standaloneSseStreamId);if(X)X.cleanup()}async send(X,Y){let Q=Y?.relatedRequestId;if(P5(X)||KU(X))Q=X.id;if(Q===void 0){if(P5(X)||KU(X))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let W;if(this._eventStore)W=await this._eventStore.storeEvent(this._standaloneSseStreamId,X);let Z=this._streamMapping.get(this._standaloneSseStreamId);if(Z===void 0)return;if(Z.controller&&Z.encoder)this.writeSSEEvent(Z.controller,Z.encoder,X,W);return}let J=this._requestToStreamMapping.get(Q);if(!J)throw Error(`No connection established for request ID: ${String(Q)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let W;if(this._eventStore)W=await this._eventStore.storeEvent(J,X);this.writeSSEEvent(G.controller,G.encoder,X,W)}if(P5(X)||KU(X)){this._requestResponseMap.set(Q,X);let W=Array.from(this._requestToStreamMapping.entries()).filter(([$,K])=>K===J).map(([$])=>$);if(W.every(($)=>this._requestResponseMap.has($))){if(!G)throw Error(`No connection established for request ID: ${String(Q)}`);if(this._enableJsonResponse&&G.resolveJson){let $={"Content-Type":"application/json"};if(this.sessionId!==void 0)$["mcp-session-id"]=this.sessionId;let K=W.map((H)=>this._requestResponseMap.get(H));if(K.length===1)G.resolveJson(new Response(JSON.stringify(K[0]),{status:200,headers:$}));else G.resolveJson(new Response(JSON.stringify(K),{status:200,headers:$}))}else G.cleanup();for(let $ of W)this._requestResponseMap.delete($),this._requestToStreamMapping.delete($)}}}}var _y=i(()=>{D9()});var WP=(...X)=>{return function(Q,J){let G=(W)=>{let Z=X[W];if(!Z)return J();return Z(Q,()=>G(W+1))};return G(0)}};class kX1{config;tools=[];callToolMiddlewares=[];constructor(X){this.config={...X,capabilities:X.capabilities??{tools:{}}}}withTool(X){return this.tools.push(X),this}withTools(X){return this.tools.push(...X),this}callToolMiddleware(...X){return this.callToolMiddlewares.push(...X),this}build(){let X=this.callToolMiddlewares.length>0?WP(...this.callToolMiddlewares):null,Y=()=>{let Q=new QF({name:this.config.name,version:this.config.version},{capabilities:this.config.capabilities});for(let J of this.tools){let G=async(K)=>{try{let H=await J.handler(K);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}},W=X?async(K)=>{let H={method:"tools/call",params:{name:J.name,arguments:K}};return await X(H,()=>G(K))}:G,Z="shape"in J.inputSchema?J.inputSchema.shape:U.object({}).shape,$=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:U.object({}).shape;Q.registerTool(J.name,{annotations:J.annotations,description:J.description??"",inputSchema:Z,outputSchema:$},W)}return Q};return{callStreamableTool:async(Q,J)=>{let G=this.tools.find((Z)=>Z.name===Q);if(!G)throw Error(`Tool ${Q} not found`);let W=await G.handler(J);if(!(W instanceof Response))throw Error(`Tool ${Q} returned a non-response`);return W},client:{listTools:async()=>{return{tools:this.tools.map((Q)=>({name:Q.name,description:Q.description??"",inputSchema:U.toJSONSchema(Q.inputSchema),outputSchema:Q.outputSchema?U.toJSONSchema(Q.outputSchema):void 0}))}},callTool:async(Q)=>{let J=this.tools.find((G)=>G.name===Q.name);if(!J)return{content:[{type:"text",text:"Tool not found"}]};try{let G=await J?.handler(Q.arguments??{});return{content:[{type:"text",text:JSON.stringify(G)}],structuredContent:G}}catch(G){return{content:[{type:"text",text:`Error: ${G.message}`}]}}}},fetch:async(Q)=>{let J=new JF({enableJsonResponse:Q.headers.get("Accept")?.includes("application/json")??!1});return await Y().connect(J),await J.handleRequest(Q)}}}}function vX1(X){return new kX1(X)}var _X1=i(()=>{vy();_y();e0()});function o0(X){return{...X,execute:async(Y,Q)=>{let J=Date.now();return await Q.timings.measure(`tool.${X.name}`,async()=>Q.tracer.startActiveSpan(`tool.${X.name}`,{attributes:{"tool.name":X.name,"organization.id":Q.organization?.id??"system","user.id":Q.auth.user?.id??Q.auth.apiKey?.userId??"anonymous"}},async(G)=>{try{Q.toolName=X.name,Q.access.setToolName?.(X.name);let W=await X.handler(Y,Q),Z=Date.now()-J;return Q.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(Z,{"tool.name":X.name,"organization.id":Q.organization?.id??"system",status:"success"}),Q.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,{"tool.name":X.name,status:"success"}),G.setStatus({code:D40.SpanStatusCode.OK}),W}catch(W){throw Q.meter.createCounter("tool.execution.errors",{description:"Number of tool execution errors"}).add(1,{"tool.name":X.name,"error.type":W.constructor.name}),G.setStatus({code:D40.SpanStatusCode.ERROR,message:W.message}),G.recordException(W),W}finally{G.end()}}))}}}var D40;var W6=i(()=>{D40=t6(Z1(),1)});function I1(X){if(!X.organization)throw Error("This operation requires organization scope");return X.organization}function v8(X){return X.auth.user?.id??X.auth.apiKey?.userId}function LR6(X){return!!(X.auth.user||X.auth.apiKey)}function V1(X){if(!LR6(X))throw Error("Authentication required")}var yy,yX1,bX1,fX1,hX1,xX1,gX1,uX1,mX1,lX1;var xU=i(()=>{e0();yy=U.record(U.string(),U.array(U.string())),yX1=U.object({id:U.string().describe("Unique identifier for the API key"),name:U.string().describe("Human-readable name for the API key"),userId:U.string().describe("ID of the user who owns this API key"),permissions:yy.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:U.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:U.string().datetime().describe("When the API key was created (ISO 8601)")}),bX1=U.object({name:U.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:yy.optional().describe('Permissions to grant. Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["API_KEY_CREATE"]) or ["*"] for all. Example: { "self": ["API_KEY_CREATE", "COLLECTION_CONNECTIONS_LIST"] }. Defaults to read-only permissions.'),expiresIn:U.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:U.record(U.string(),U.unknown()).optional().describe("Additional metadata to store with the API key")}),fX1=U.object({id:U.string().describe("Unique identifier for the API key"),name:U.string().describe("Human-readable name for the API key"),key:U.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:yy.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:U.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:U.string().datetime().describe("When the API key was created (ISO 8601)")}),hX1=U.object({}),xX1=U.object({items:U.array(yX1).describe("List of API keys (without key values)")}),gX1=U.object({keyId:U.string().describe("ID of the API key to update"),name:U.string().min(1).max(64).optional().describe("New name for the API key"),permissions:yy.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:U.record(U.string(),U.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),uX1=U.object({item:yX1.describe("The updated API key (without key value)")}),mX1=U.object({keyId:U.string().describe("ID of the API key to delete")}),lX1=U.object({success:U.boolean().describe("Whether the deletion was successful"),keyId:U.string().describe("ID of the deleted API key")})});var N40;var dX1=i(()=>{W6();xU();N40=o0({name:"API_KEY_CREATE",description:"Create a new API key with specified permissions. The key value is only returned once - store it securely!",inputSchema:bX1,outputSchema:fX1,handler:async(X,Y)=>{V1(Y),await Y.access.check();let Q=await Y.boundAuth.apiKey.create({name:X.name,permissions:X.permissions,expiresIn:X.expiresIn,metadata:{...X.metadata,organization:Y.organization}}),J=Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,G=Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt;return{id:Q.id,name:Q.name??X.name,key:Q.key,permissions:Q.permissions??{},expiresAt:J,createdAt:G}}})});var O40;var pX1=i(()=>{W6();xU();O40=o0({name:"API_KEY_DELETE",description:"Delete an API key. This instantly revokes the key - it can no longer be used for authentication.",inputSchema:mX1,outputSchema:lX1,handler:async(X,Y)=>{if(V1(Y),await Y.access.check(),!v8(Y))throw Error("User ID required to delete API key");let G=(await Y.boundAuth.apiKey.list())?.find((K)=>K.id===X.keyId);if(!G)throw Error("API key not found");let Z=G.metadata?.organization?.id,$=Y.organization?.id;if(Z!==$)throw Error("Cannot delete API key from another organization");return await Y.boundAuth.apiKey.delete(X.keyId),{success:!0,keyId:X.keyId}}})});var L40;var cX1=i(()=>{W6();xU();L40=o0({name:"API_KEY_LIST",description:"List all API keys for the current user in the current organization. Returns metadata only - key values are never shown after creation.",inputSchema:hX1,outputSchema:xX1,handler:async(X,Y)=>{V1(Y),await Y.access.check();let Q=await Y.boundAuth.apiKey.list(),J=Y.organization?.id;return{items:(Q??[]).filter((W)=>{return W.metadata?.organization?.id===J}).map((W)=>({id:W.id,name:W.name??"Unnamed Key",userId:W.userId,permissions:W.permissions??{},expiresAt:W.expiresAt?W.expiresAt instanceof Date?W.expiresAt.toISOString():W.expiresAt:null,createdAt:W.createdAt instanceof Date?W.createdAt.toISOString():W.createdAt}))}}})});var w40;var nX1=i(()=>{W6();xU();w40=o0({name:"API_KEY_UPDATE",description:"Update an existing API key's name, permissions, or metadata. Note: Key value cannot be changed or retrieved.",inputSchema:gX1,outputSchema:uX1,handler:async(X,Y)=>{if(V1(Y),await Y.access.check(),!v8(Y))throw Error("User ID required to update API key");let G=(await Y.boundAuth.apiKey.list())?.find((H)=>H.id===X.keyId);if(!G)throw Error(`API key not found: ${X.keyId}`);let Z=G.metadata?.organization?.id,$=Y.organization?.id;if(Z!==$)throw Error("Cannot update API key from another organization");let K=await Y.boundAuth.apiKey.update({keyId:X.keyId,name:X.name,permissions:X.permissions,metadata:{...X.metadata,organization:Y.organization}});if(!K)throw Error(`Failed to update API key: ${X.keyId}`);return{item:{id:K.id,name:K.name??X.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var iX1=i(()=>{dX1();pX1();cX1();nX1();xU()});var aX1,rX1,oX1,sX1,tX1,eX1;var ZP=i(()=>{e0();aX1=U.object({query:U.string().describe("Natural language search query (e.g., 'send email', 'create order')"),limit:U.number().default(10).describe("Maximum results to return (default: 10)")}),rX1=U.object({query:U.string(),results:U.array(U.object({name:U.string(),description:U.string().optional(),connection:U.string()})),totalAvailable:U.number()}),oX1=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),sX1=U.object({tools:U.array(U.object({name:U.string(),description:U.string().optional(),connection:U.string(),inputSchema:U.unknown(),outputSchema:U.unknown().optional()})),notFound:U.array(U.string())}),tX1=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).")}),eX1=U.object({returnValue:U.unknown().optional(),error:U.string().optional(),consoleLogs:U.array(U.object({type:U.enum(["log","warn","error"]),content:U.string()}))})});class GF{proxies=new Map;constructor(){}static async create(X,Y){let Q=new GF,J=await Promise.allSettled(X.map(async({connection:G,selectedTools:W,selectedResources:Z,selectedPrompts:$})=>{try{let K=await Y.createMCPProxy(G);return{connection:G,proxy:K,selectedTools:W,selectedResources:Z,selectedPrompts:$}}catch(K){return console.error(`[aggregator] Failed to create proxy for connection ${G.id}:`,K),null}}));for(let G of J)if(G.status==="fulfilled"&&G.value)Q.proxies.set(G.value.connection.id,G.value);return Q}get(X){return this.proxies.get(X)}entries(){return this.proxies.entries()}forEach(X){this.proxies.forEach((Y,Q)=>X(Y,Q))}async mapAsync(X){let Y=[];for(let[Q,J]of this.proxies.entries())Y.push(X(J,Q));return await Promise.all(Y)}async mapSettled(X){return Promise.allSettled(Array.from(this.proxies.entries()).map(([Y,Q])=>X(Q,Y)))}get size(){return this.proxies.size}}function XY1(X){let Y=[],Q=[],J=(K)=>{let H=X.newFunction(K,(...F)=>{try{let V=F.map((q)=>X.dump(q));Y.push({type:K??"log",content:V.map(String).join(" ")})}finally{F.forEach((V)=>V.dispose())}return X.undefined});return Q.push(H),H},G=X.newObject();Q.push(G);let W=J("log"),Z=J("warn"),$=J("error");return X.setProp(G,"log",W),X.setProp(G,"warn",Z),X.setProp(G,"error",$),X.setProp(X.global,"console",G),{logs:Y,[Symbol.dispose](){Q.forEach((K)=>K.dispose())}}}var WF,M40,by,ZF,$P;var fy=i(()=>{WF={JS_EVAL_TYPE_GLOBAL:0,JS_EVAL_TYPE_MODULE:1,JS_EVAL_TYPE_DIRECT:2,JS_EVAL_TYPE_INDIRECT:3,JS_EVAL_TYPE_MASK:3,JS_EVAL_FLAG_STRICT:8,JS_EVAL_FLAG_STRIP:16,JS_EVAL_FLAG_COMPILE_ONLY:32,JS_EVAL_FLAG_BACKTRACE_BARRIER:64},M40={BaseObjects:1,Date:2,Eval:4,StringNormalize:8,RegExp:16,RegExpCompiler:32,JSON:64,Proxy:128,MapSet:256,TypedArrays:512,Promise:1024,BigInt:2048,BigFloat:4096,BigDecimal:8192,OperatorOverloading:16384,BignumExt:32768},by={Pending:0,Fulfilled:1,Rejected:2},ZF={JS_GPN_STRING_MASK:1,JS_GPN_SYMBOL_MASK:2,JS_GPN_PRIVATE_MASK:4,JS_GPN_ENUM_ONLY:16,JS_GPN_SET_ENUM:32,QTS_GPN_NUMBER_MASK:64,QTS_STANDARD_COMPLIANT_NUMBER:128},$P={IsStrictlyEqual:0,IsSameValue:1,IsSameValueZero:2}});function gU(...X){C40&&console.log("quickjs-emscripten:",...X)}function*zY1(X){return yield X}function TR6(X){return zY1(R40(X))}function YY1(X,Y){return(...Q)=>{let J=Y.call(X,I40,...Q);return R40(J)}}function AR6(X,Y){let Q=Y.call(X,I40);return R40(Q)}function R40(X){function Y(Q){return Q.done?Q.value:Q.value instanceof Promise?Q.value.then((J)=>Y(X.next(J)),(J)=>Y(X.throw(J))):Y(X.next(Q.value))}return Y(X.next())}function P40(X,Y){let Q;try{X.dispose()}catch(J){Q=J}if(Y&&Q)throw Object.assign(Y,{message:`${Y.message}
260
+ `,X.enqueue(Y.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(X,Y){try{let Q=X.headers.get("accept");if(!Q?.includes("application/json")||!Q.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=X.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(X.headers.entries())},W;if(Y?.parsedBody!==void 0)W=Y.parsedBody;else try{W=await X.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let Z;try{if(Array.isArray(W))Z=W.map((L)=>fQ.parse(L));else Z=[fQ.parse(W)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let $=Z.some(T00);if($){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(Z.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!$){let L=this.validateSession(X);if(L)return L;let w=this.validateProtocolVersion(X);if(w)return w}if(!Z.some(eG)){for(let L of Z)this.onmessage?.(L,{authInfo:Y?.authInfo,requestInfo:G});return new Response(null,{status:202})}let H=crypto.randomUUID(),F=Z.find((L)=>T00(L)),V=F?F.params.protocolVersion:X.headers.get("mcp-protocol-version")??_e0;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set(H,{resolveJson:L,cleanup:()=>{this._streamMapping.delete(H)}});for(let w of Z)if(eG(w))this._requestToStreamMapping.set(w.id,H);for(let w of Z)this.onmessage?.(w,{authInfo:Y?.authInfo,requestInfo:G})});let q=new TextEncoder,z,D=new ReadableStream({start:(L)=>{z=L},cancel:()=>{this._streamMapping.delete(H)}}),N={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)N["mcp-session-id"]=this.sessionId;for(let L of Z)if(eG(L))this._streamMapping.set(H,{controller:z,encoder:q,cleanup:()=>{this._streamMapping.delete(H);try{z.close()}catch{}}}),this._requestToStreamMapping.set(L.id,H);await this.writePrimingEvent(z,q,H,V);for(let L of Z){let w,C;if(eG(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},C=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Y?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:C})}return new Response(D,{status:200,headers:N})}catch(Q){return this.onerror?.(Q),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(Q)})}}async handleDeleteRequest(X){let Y=this.validateSession(X);if(Y)return Y;let Q=this.validateProtocolVersion(X);if(Q)return Q;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(X){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Y=X.headers.get("mcp-session-id");if(!Y)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Y!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(X){let Y=X.headers.get("mcp-protocol-version");if(Y!==null&&!n3.includes(Y))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Y} (supported versions: ${n3.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:X})=>{X()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(X){let Y=this._requestToStreamMapping.get(X);if(!Y)return;let Q=this._streamMapping.get(Y);if(Q)Q.cleanup()}closeStandaloneSSEStream(){let X=this._streamMapping.get(this._standaloneSseStreamId);if(X)X.cleanup()}async send(X,Y){let Q=Y?.relatedRequestId;if(P5(X)||KU(X))Q=X.id;if(Q===void 0){if(P5(X)||KU(X))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let W;if(this._eventStore)W=await this._eventStore.storeEvent(this._standaloneSseStreamId,X);let Z=this._streamMapping.get(this._standaloneSseStreamId);if(Z===void 0)return;if(Z.controller&&Z.encoder)this.writeSSEEvent(Z.controller,Z.encoder,X,W);return}let J=this._requestToStreamMapping.get(Q);if(!J)throw Error(`No connection established for request ID: ${String(Q)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let W;if(this._eventStore)W=await this._eventStore.storeEvent(J,X);this.writeSSEEvent(G.controller,G.encoder,X,W)}if(P5(X)||KU(X)){this._requestResponseMap.set(Q,X);let W=Array.from(this._requestToStreamMapping.entries()).filter(([$,K])=>K===J).map(([$])=>$);if(W.every(($)=>this._requestResponseMap.has($))){if(!G)throw Error(`No connection established for request ID: ${String(Q)}`);if(this._enableJsonResponse&&G.resolveJson){let $={"Content-Type":"application/json"};if(this.sessionId!==void 0)$["mcp-session-id"]=this.sessionId;let K=W.map((H)=>this._requestResponseMap.get(H));if(K.length===1)G.resolveJson(new Response(JSON.stringify(K[0]),{status:200,headers:$}));else G.resolveJson(new Response(JSON.stringify(K),{status:200,headers:$}))}else G.cleanup();for(let $ of W)this._requestResponseMap.delete($),this._requestToStreamMapping.delete($)}}}}var _y=i(()=>{D9()});var WP=(...X)=>{return function(Q,J){let G=(W)=>{let Z=X[W];if(!Z)return J();return Z(Q,()=>G(W+1))};return G(0)}};class kX1{config;tools=[];callToolMiddlewares=[];constructor(X){this.config={...X,capabilities:X.capabilities??{tools:{}}}}withTool(X){return this.tools.push(X),this}withTools(X){return this.tools.push(...X),this}callToolMiddleware(...X){return this.callToolMiddlewares.push(...X),this}build(){let X=this.callToolMiddlewares.length>0?WP(...this.callToolMiddlewares):null,Y=()=>{let Q=new QF({name:this.config.name,version:this.config.version},{capabilities:this.config.capabilities});for(let J of this.tools){let G=async(K)=>{try{let H=await J.handler(K);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}},W=X?async(K)=>{let H={method:"tools/call",params:{name:J.name,arguments:K}};return await X(H,()=>G(K))}:G,Z="shape"in J.inputSchema?J.inputSchema.shape:U.object({}).shape,$=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:U.object({}).shape;Q.registerTool(J.name,{annotations:J.annotations,description:J.description??"",inputSchema:Z,outputSchema:$},W)}return Q};return{callStreamableTool:async(Q,J)=>{let G=this.tools.find((Z)=>Z.name===Q);if(!G)throw Error(`Tool ${Q} not found`);let W=await G.handler(J);if(!(W instanceof Response))throw Error(`Tool ${Q} returned a non-response`);return W},client:{listTools:async()=>{return{tools:this.tools.map((Q)=>({name:Q.name,description:Q.description??"",inputSchema:U.toJSONSchema(Q.inputSchema),outputSchema:Q.outputSchema?U.toJSONSchema(Q.outputSchema):void 0}))}},callTool:async(Q)=>{let J=this.tools.find((G)=>G.name===Q.name);if(!J)return{content:[{type:"text",text:"Tool not found"}]};try{let G=await J?.handler(Q.arguments??{});return{content:[{type:"text",text:JSON.stringify(G)}],structuredContent:G}}catch(G){return{content:[{type:"text",text:`Error: ${G.message}`}]}}}},fetch:async(Q)=>{let J=new JF({enableJsonResponse:Q.headers.get("Accept")?.includes("application/json")??!1});await Y().connect(J);try{return await J.handleRequest(Q)}finally{try{await J.close?.()}catch{}}}}}}function vX1(X){return new kX1(X)}var _X1=i(()=>{vy();_y();e0()});function o0(X){return{...X,execute:async(Y,Q)=>{let J=Date.now();return await Q.timings.measure(`tool.${X.name}`,async()=>Q.tracer.startActiveSpan(`tool.${X.name}`,{attributes:{"tool.name":X.name,"organization.id":Q.organization?.id??"system","user.id":Q.auth.user?.id??Q.auth.apiKey?.userId??"anonymous"}},async(G)=>{try{Q.toolName=X.name,Q.access.setToolName?.(X.name);let W=await X.handler(Y,Q),Z=Date.now()-J;return Q.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(Z,{"tool.name":X.name,"organization.id":Q.organization?.id??"system",status:"success"}),Q.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,{"tool.name":X.name,status:"success"}),G.setStatus({code:D40.SpanStatusCode.OK}),W}catch(W){throw Q.meter.createCounter("tool.execution.errors",{description:"Number of tool execution errors"}).add(1,{"tool.name":X.name,"error.type":W.constructor.name}),G.setStatus({code:D40.SpanStatusCode.ERROR,message:W.message}),G.recordException(W),W}finally{G.end()}}))}}}var D40;var W6=i(()=>{D40=t6(Z1(),1)});function I1(X){if(!X.organization)throw Error("This operation requires organization scope");return X.organization}function v8(X){return X.auth.user?.id??X.auth.apiKey?.userId}function LR6(X){return!!(X.auth.user||X.auth.apiKey)}function V1(X){if(!LR6(X))throw Error("Authentication required")}var yy,yX1,bX1,fX1,hX1,xX1,gX1,uX1,mX1,lX1;var xU=i(()=>{e0();yy=U.record(U.string(),U.array(U.string())),yX1=U.object({id:U.string().describe("Unique identifier for the API key"),name:U.string().describe("Human-readable name for the API key"),userId:U.string().describe("ID of the user who owns this API key"),permissions:yy.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:U.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:U.string().datetime().describe("When the API key was created (ISO 8601)")}),bX1=U.object({name:U.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:yy.optional().describe('Permissions to grant. Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["API_KEY_CREATE"]) or ["*"] for all. Example: { "self": ["API_KEY_CREATE", "COLLECTION_CONNECTIONS_LIST"] }. Defaults to read-only permissions.'),expiresIn:U.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:U.record(U.string(),U.unknown()).optional().describe("Additional metadata to store with the API key")}),fX1=U.object({id:U.string().describe("Unique identifier for the API key"),name:U.string().describe("Human-readable name for the API key"),key:U.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:yy.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:U.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:U.string().datetime().describe("When the API key was created (ISO 8601)")}),hX1=U.object({}),xX1=U.object({items:U.array(yX1).describe("List of API keys (without key values)")}),gX1=U.object({keyId:U.string().describe("ID of the API key to update"),name:U.string().min(1).max(64).optional().describe("New name for the API key"),permissions:yy.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:U.record(U.string(),U.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),uX1=U.object({item:yX1.describe("The updated API key (without key value)")}),mX1=U.object({keyId:U.string().describe("ID of the API key to delete")}),lX1=U.object({success:U.boolean().describe("Whether the deletion was successful"),keyId:U.string().describe("ID of the deleted API key")})});var N40;var dX1=i(()=>{W6();xU();N40=o0({name:"API_KEY_CREATE",description:"Create a new API key with specified permissions. The key value is only returned once - store it securely!",inputSchema:bX1,outputSchema:fX1,handler:async(X,Y)=>{V1(Y),await Y.access.check();let Q=await Y.boundAuth.apiKey.create({name:X.name,permissions:X.permissions,expiresIn:X.expiresIn,metadata:{...X.metadata,organization:Y.organization}}),J=Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,G=Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt;return{id:Q.id,name:Q.name??X.name,key:Q.key,permissions:Q.permissions??{},expiresAt:J,createdAt:G}}})});var O40;var pX1=i(()=>{W6();xU();O40=o0({name:"API_KEY_DELETE",description:"Delete an API key. This instantly revokes the key - it can no longer be used for authentication.",inputSchema:mX1,outputSchema:lX1,handler:async(X,Y)=>{if(V1(Y),await Y.access.check(),!v8(Y))throw Error("User ID required to delete API key");let G=(await Y.boundAuth.apiKey.list())?.find((K)=>K.id===X.keyId);if(!G)throw Error("API key not found");let Z=G.metadata?.organization?.id,$=Y.organization?.id;if(Z!==$)throw Error("Cannot delete API key from another organization");return await Y.boundAuth.apiKey.delete(X.keyId),{success:!0,keyId:X.keyId}}})});var L40;var cX1=i(()=>{W6();xU();L40=o0({name:"API_KEY_LIST",description:"List all API keys for the current user in the current organization. Returns metadata only - key values are never shown after creation.",inputSchema:hX1,outputSchema:xX1,handler:async(X,Y)=>{V1(Y),await Y.access.check();let Q=await Y.boundAuth.apiKey.list(),J=Y.organization?.id;return{items:(Q??[]).filter((W)=>{return W.metadata?.organization?.id===J}).map((W)=>({id:W.id,name:W.name??"Unnamed Key",userId:W.userId,permissions:W.permissions??{},expiresAt:W.expiresAt?W.expiresAt instanceof Date?W.expiresAt.toISOString():W.expiresAt:null,createdAt:W.createdAt instanceof Date?W.createdAt.toISOString():W.createdAt}))}}})});var w40;var nX1=i(()=>{W6();xU();w40=o0({name:"API_KEY_UPDATE",description:"Update an existing API key's name, permissions, or metadata. Note: Key value cannot be changed or retrieved.",inputSchema:gX1,outputSchema:uX1,handler:async(X,Y)=>{if(V1(Y),await Y.access.check(),!v8(Y))throw Error("User ID required to update API key");let G=(await Y.boundAuth.apiKey.list())?.find((H)=>H.id===X.keyId);if(!G)throw Error(`API key not found: ${X.keyId}`);let Z=G.metadata?.organization?.id,$=Y.organization?.id;if(Z!==$)throw Error("Cannot update API key from another organization");let K=await Y.boundAuth.apiKey.update({keyId:X.keyId,name:X.name,permissions:X.permissions,metadata:{...X.metadata,organization:Y.organization}});if(!K)throw Error(`Failed to update API key: ${X.keyId}`);return{item:{id:K.id,name:K.name??X.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var iX1=i(()=>{dX1();pX1();cX1();nX1();xU()});var aX1,rX1,oX1,sX1,tX1,eX1;var ZP=i(()=>{e0();aX1=U.object({query:U.string().describe("Natural language search query (e.g., 'send email', 'create order')"),limit:U.number().default(10).describe("Maximum results to return (default: 10)")}),rX1=U.object({query:U.string(),results:U.array(U.object({name:U.string(),description:U.string().optional(),connection:U.string()})),totalAvailable:U.number()}),oX1=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),sX1=U.object({tools:U.array(U.object({name:U.string(),description:U.string().optional(),connection:U.string(),inputSchema:U.unknown(),outputSchema:U.unknown().optional()})),notFound:U.array(U.string())}),tX1=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).")}),eX1=U.object({returnValue:U.unknown().optional(),error:U.string().optional(),consoleLogs:U.array(U.object({type:U.enum(["log","warn","error"]),content:U.string()}))})});class GF{proxies=new Map;constructor(){}static async create(X,Y){let Q=new GF,J=await Promise.allSettled(X.map(async({connection:G,selectedTools:W,selectedResources:Z,selectedPrompts:$})=>{try{let K=await Y.createMCPProxy(G);return{connection:G,proxy:K,selectedTools:W,selectedResources:Z,selectedPrompts:$}}catch(K){return console.error(`[aggregator] Failed to create proxy for connection ${G.id}:`,K),null}}));for(let G of J)if(G.status==="fulfilled"&&G.value)Q.proxies.set(G.value.connection.id,G.value);return Q}get(X){return this.proxies.get(X)}entries(){return this.proxies.entries()}forEach(X){this.proxies.forEach((Y,Q)=>X(Y,Q))}async mapAsync(X){let Y=[];for(let[Q,J]of this.proxies.entries())Y.push(X(J,Q));return await Promise.all(Y)}async mapSettled(X){return Promise.allSettled(Array.from(this.proxies.entries()).map(([Y,Q])=>X(Q,Y)))}get size(){return this.proxies.size}}function XY1(X){let Y=[],Q=[],J=(K)=>{let H=X.newFunction(K,(...F)=>{try{let V=F.map((q)=>X.dump(q));Y.push({type:K??"log",content:V.map(String).join(" ")})}finally{F.forEach((V)=>V.dispose())}return X.undefined});return Q.push(H),H},G=X.newObject();Q.push(G);let W=J("log"),Z=J("warn"),$=J("error");return X.setProp(G,"log",W),X.setProp(G,"warn",Z),X.setProp(G,"error",$),X.setProp(X.global,"console",G),{logs:Y,[Symbol.dispose](){Q.forEach((K)=>K.dispose())}}}var WF,M40,by,ZF,$P;var fy=i(()=>{WF={JS_EVAL_TYPE_GLOBAL:0,JS_EVAL_TYPE_MODULE:1,JS_EVAL_TYPE_DIRECT:2,JS_EVAL_TYPE_INDIRECT:3,JS_EVAL_TYPE_MASK:3,JS_EVAL_FLAG_STRICT:8,JS_EVAL_FLAG_STRIP:16,JS_EVAL_FLAG_COMPILE_ONLY:32,JS_EVAL_FLAG_BACKTRACE_BARRIER:64},M40={BaseObjects:1,Date:2,Eval:4,StringNormalize:8,RegExp:16,RegExpCompiler:32,JSON:64,Proxy:128,MapSet:256,TypedArrays:512,Promise:1024,BigInt:2048,BigFloat:4096,BigDecimal:8192,OperatorOverloading:16384,BignumExt:32768},by={Pending:0,Fulfilled:1,Rejected:2},ZF={JS_GPN_STRING_MASK:1,JS_GPN_SYMBOL_MASK:2,JS_GPN_PRIVATE_MASK:4,JS_GPN_ENUM_ONLY:16,JS_GPN_SET_ENUM:32,QTS_GPN_NUMBER_MASK:64,QTS_STANDARD_COMPLIANT_NUMBER:128},$P={IsStrictlyEqual:0,IsSameValue:1,IsSameValueZero:2}});function gU(...X){C40&&console.log("quickjs-emscripten:",...X)}function*zY1(X){return yield X}function TR6(X){return zY1(R40(X))}function YY1(X,Y){return(...Q)=>{let J=Y.call(X,I40,...Q);return R40(J)}}function AR6(X,Y){let Q=Y.call(X,I40);return R40(Q)}function R40(X){function Y(Q){return Q.done?Q.value:Q.value instanceof Promise?Q.value.then((J)=>Y(X.next(J)),(J)=>Y(X.throw(J))):Y(X.next(Q.value))}return Y(X.next())}function P40(X,Y){let Q;try{X.dispose()}catch(J){Q=J}if(Y&&Q)throw Object.assign(Y,{message:`${Y.message}
261
261
  Then, failed to dispose scope: ${Q.message}`,disposeError:Q}),Y;if(Y||Q)throw Y||Q}function UY1(X){let Y=X?Array.from(X):[];function Q(){return Y.forEach((G)=>G.alive?G.dispose():void 0)}function J(){return Y.some((G)=>G.alive)}return Object.defineProperty(Y,E40,{configurable:!0,enumerable:!1,value:Q}),Object.defineProperty(Y,"dispose",{configurable:!0,enumerable:!1,value:Q}),Object.defineProperty(Y,"alive",{configurable:!0,enumerable:!1,get:J}),Y}function hy(X){return!!(X&&(typeof X=="object"||typeof X=="function")&&("alive"in X)&&typeof X.alive=="boolean"&&("dispose"in X)&&typeof X.dispose=="function")}function ER6(X){if(!X)return 0;let Y=0;for(let[Q,J]of Object.entries(X)){if(!(Q in M40))throw new FY1(Q);J&&(Y|=M40[Q])}return Y}function jR6(X){if(typeof X=="number")return X;if(X===void 0)return 0;let{type:Y,strict:Q,strip:J,compileOnly:G,backtraceBarrier:W}=X,Z=0;return Y==="global"&&(Z|=WF.JS_EVAL_TYPE_GLOBAL),Y==="module"&&(Z|=WF.JS_EVAL_TYPE_MODULE),Q&&(Z|=WF.JS_EVAL_FLAG_STRICT),J&&(Z|=WF.JS_EVAL_FLAG_STRIP),G&&(Z|=WF.JS_EVAL_FLAG_COMPILE_ONLY),W&&(Z|=WF.JS_EVAL_FLAG_BACKTRACE_BARRIER),Z}function CR6(X){if(typeof X=="number")return X;if(X===void 0)return 0;let{strings:Y,symbols:Q,quickjsPrivate:J,onlyEnumerable:G,numbers:W,numbersAsStrings:Z}=X,$=0;return Y&&($|=ZF.JS_GPN_STRING_MASK),Q&&($|=ZF.JS_GPN_SYMBOL_MASK),J&&($|=ZF.JS_GPN_PRIVATE_MASK),G&&($|=ZF.JS_GPN_ENUM_ONLY),W&&($|=ZF.QTS_GPN_NUMBER_MASK),Z&&($|=ZF.QTS_STANDARD_COMPLIANT_NUMBER),$}function IR6(...X){let Y=[];for(let Q of X)Q!==void 0&&(Y=Y.concat(Q));return Y}function _40(X,Y){Y.interruptHandler&&X.setInterruptHandler(Y.interruptHandler),Y.maxStackSizeBytes!==void 0&&X.setMaxStackSize(Y.maxStackSizeBytes),Y.memoryLimitBytes!==void 0&&X.setMemoryLimit(Y.memoryLimitBytes)}function y40(X,Y){Y.moduleLoader&&X.setModuleLoader(Y.moduleLoader),Y.shouldInterrupt&&X.setInterruptHandler(Y.shouldInterrupt),Y.memoryLimitBytes!==void 0&&X.setMemoryLimit(Y.memoryLimitBytes),Y.maxStackSizeBytes!==void 0&&X.setMaxStackSize(Y.maxStackSizeBytes)}var MR6,PR6=(X,Y)=>{for(var Q in Y)MR6(X,Q,{get:Y[Q],enumerable:!0})},C40=!1,JY1,T40,GY1,A40,WY1,ZY1,$Y1,KY1,HY1,FY1,VY1,qY1,I40,hW,E40,QY1,xX,t$,j40,v5,S40,BY1,DY1,$F,NY1,OY1=class{constructor(X){this.module=X}toPointerArray(X){let Y=new Int32Array(X.map((G)=>G.value)),Q=Y.length*Y.BYTES_PER_ELEMENT,J=this.module._malloc(Q);return new Uint8Array(this.module.HEAPU8.buffer,J,Q).set(new Uint8Array(Y.buffer)),new xX(J,void 0,(G)=>this.module._free(G))}newTypedArray(X,Y){let Q=new X(Array(Y).fill(0)),J=Q.length*Q.BYTES_PER_ELEMENT,G=this.module._malloc(J),W=new X(this.module.HEAPU8.buffer,G,Y);return W.set(Q),new xX({typedArray:W,ptr:G},void 0,(Z)=>this.module._free(Z.ptr))}newMutablePointerArray(X){return this.newTypedArray(Int32Array,X)}newHeapCharPointer(X){let Y=this.module.lengthBytesUTF8(X),Q=Y+1,J=this.module._malloc(Q);return this.module.stringToUTF8(X,J,Q),new xX({ptr:J,strlen:Y},void 0,(G)=>this.module._free(G.ptr))}newHeapBufferPointer(X){let Y=X.byteLength,Q=this.module._malloc(Y);return this.module.HEAPU8.set(X,Q),new xX({pointer:Q,numBytes:Y},void 0,(J)=>this.module._free(J.pointer))}consumeHeapCharPointer(X){let Y=this.module.UTF8ToString(X);return this.module._free(X),Y}},Yy4,k40,RR6,SR6,LY1,wY1,kR6=class{constructor(X){this.callFunction=X.callFunction,this.shouldInterrupt=X.shouldInterrupt,this.loadModuleSource=X.loadModuleSource,this.normalizeModule=X.normalizeModule}},v40=class{constructor(X){this.contextCallbacks=new Map,this.runtimeCallbacks=new Map,this.suspendedCount=0,this.cToHostCallbacks=new kR6({callFunction:(Y,Q,J,G,W,Z)=>this.handleAsyncify(Y,()=>{try{let $=this.contextCallbacks.get(Q);if(!$)throw Error(`QuickJSContext(ctx = ${Q}) not found for C function call "${Z}"`);return $.callFunction(Q,J,G,W,Z)}catch($){return console.error("[C to host error: returning null]",$),0}}),shouldInterrupt:(Y,Q)=>this.handleAsyncify(Y,()=>{try{let J=this.runtimeCallbacks.get(Q);if(!J)throw Error(`QuickJSRuntime(rt = ${Q}) not found for C interrupt`);return J.shouldInterrupt(Q)}catch(J){return console.error("[C to host interrupt: returning error]",J),1}}),loadModuleSource:(Y,Q,J,G)=>this.handleAsyncify(Y,()=>{try{let W=this.runtimeCallbacks.get(Q);if(!W)throw Error(`QuickJSRuntime(rt = ${Q}) not found for C module loader`);let Z=W.loadModuleSource;if(!Z)throw Error(`QuickJSRuntime(rt = ${Q}) does not support module loading`);return Z(Q,J,G)}catch(W){return console.error("[C to host module loader error: returning null]",W),0}}),normalizeModule:(Y,Q,J,G,W)=>this.handleAsyncify(Y,()=>{try{let Z=this.runtimeCallbacks.get(Q);if(!Z)throw Error(`QuickJSRuntime(rt = ${Q}) not found for C module loader`);let $=Z.normalizeModule;if(!$)throw Error(`QuickJSRuntime(rt = ${Q}) does not support module loading`);return $(Q,J,G,W)}catch(Z){return console.error("[C to host module loader error: returning null]",Z),0}})}),this.module=X,this.module.callbacks=this.cToHostCallbacks}setRuntimeCallbacks(X,Y){this.runtimeCallbacks.set(X,Y)}deleteRuntime(X){this.runtimeCallbacks.delete(X)}setContextCallbacks(X,Y){this.contextCallbacks.set(X,Y)}deleteContext(X){this.contextCallbacks.delete(X)}handleAsyncify(X,Y){if(X)return X.handleSleep((J)=>{try{let G=Y();if(!(G instanceof Promise)){gU("asyncify.handleSleep: not suspending:",G),J(G);return}if(this.suspended)throw new ZY1(`Already suspended at: ${this.suspended.stack}
262
262
  Attempted to suspend at:`);this.suspended=new $Y1(`(${this.suspendedCount++})`),gU("asyncify.handleSleep: suspending:",this.suspended),G.then((W)=>{this.suspended=void 0,gU("asyncify.handleSleep: resolved:",W),J(W)},(W)=>{gU("asyncify.handleSleep: rejected:",W),console.error("QuickJS: cannot handle error in suspended function",W),this.suspended=void 0})}catch(G){throw gU("asyncify.handleSleep: error:",G),this.suspended=void 0,G}});let Q=Y();if(Q instanceof Promise)throw Error("Promise return value not supported in non-asyncify context.");return Q}},b40=class{constructor(X,Y){this.module=X,this.ffi=Y,this.callbacks=new v40(X)}newRuntime(X={}){let Y=new xX(this.ffi.QTS_NewRuntime(),void 0,(J)=>{this.callbacks.deleteRuntime(J),this.ffi.QTS_FreeRuntime(J)}),Q=new wY1({module:this.module,callbacks:this.callbacks,ffi:this.ffi,rt:Y});return _40(Q,X),X.moduleLoader&&Q.setModuleLoader(X.moduleLoader),Q}newContext(X={}){let Y=this.newRuntime(),Q=Y.newContext({...X,ownedLifetimes:IR6(Y,X.ownedLifetimes)});return Y.context=Q,Q}evalCode(X,Y={}){return v5.withScope((Q)=>{let J=Q.manage(this.newContext());y40(J.runtime,Y);let G=J.evalCode(X,"eval.js");if(Y.memoryLimitBytes!==void 0&&J.runtime.setMemoryLimit(-1),G.error)throw J.dump(Q.manage(G.error));return J.dump(Q.manage(G.value))})}getWasmMemory(){let X=this.module.quickjsEmscriptenInit?.(()=>{})?.getWasmMemory?.();if(!X)throw Error("Variant does not support getting WebAssembly.Memory");return X}getFFI(){return this.ffi}};var f40=i(()=>{fy();fy();MR6=Object.defineProperty;JY1={};PR6(JY1,{QuickJSAsyncifyError:()=>ZY1,QuickJSAsyncifySuspended:()=>$Y1,QuickJSEmptyGetOwnPropertyNames:()=>qY1,QuickJSEmscriptenModuleError:()=>HY1,QuickJSMemoryLeakDetected:()=>KY1,QuickJSNotImplemented:()=>WY1,QuickJSPromisePending:()=>VY1,QuickJSUnknownIntrinsic:()=>FY1,QuickJSUnwrapError:()=>T40,QuickJSUseAfterFree:()=>A40,QuickJSWrongOwner:()=>GY1});T40=class extends Error{constructor(X,Y){let Q=typeof X=="object"&&X&&"message"in X?String(X.message):String(X);super(Q);this.cause=X,this.context=Y,this.name="QuickJSUnwrapError"}},GY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSWrongOwner"}},A40=class extends Error{constructor(){super(...arguments);this.name="QuickJSUseAfterFree"}},WY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSNotImplemented"}},ZY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSAsyncifyError"}},$Y1=class extends Error{constructor(){super(...arguments);this.name="QuickJSAsyncifySuspended"}},KY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSMemoryLeakDetected"}},HY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSEmscriptenModuleError"}},FY1=class extends TypeError{constructor(){super(...arguments);this.name="QuickJSUnknownIntrinsic"}},VY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSPromisePending"}},qY1=class extends Error{constructor(){super(...arguments);this.name="QuickJSEmptyGetOwnPropertyNames"}};I40=zY1;I40.of=TR6;hW=class{[Symbol.dispose](){return this.dispose()}},E40=Symbol.dispose??Symbol.for("Symbol.dispose"),QY1=hW.prototype;QY1[E40]||(QY1[E40]=function(){return this.dispose()});xX=class X extends hW{constructor(Y,Q,J,G){super();this._value=Y,this.copier=Q,this.disposer=J,this._owner=G,this._alive=!0,this._constructorStack=C40?Error("Lifetime constructed").stack:void 0}get alive(){return this._alive}get value(){return this.assertAlive(),this._value}get owner(){return this._owner}get dupable(){return!!this.copier}dup(){if(this.assertAlive(),!this.copier)throw Error("Non-dupable lifetime");return new X(this.copier(this._value),this.copier,this.disposer,this._owner)}consume(Y){this.assertAlive();let Q=Y(this);return this.dispose(),Q}map(Y){return this.assertAlive(),Y(this)}tap(Y){return Y(this),this}dispose(){this.assertAlive(),this.disposer&&this.disposer(this._value),this._alive=!1}assertAlive(){if(!this.alive)throw this._constructorStack?new A40(`Lifetime not alive
263
263
  ${this._constructorStack}
@@ -1048,7 +1048,7 @@ Please refer to the documentation here: https://better-auth.com/docs/plugins/org
1048
1048
  <h2>You've been invited!</h2>
1049
1049
  <p>${J} has invited you to join <strong>${Q.organization.name}</strong>.</p>
1050
1050
  <p><a href="${G}">Click here to accept the invitation</a></p>
1051
- `})}}}var wv6=[Je({organizationCreation:{afterCreate:async(X)=>{await CJ1(X.organization.id,X.member.userId)}},ac:ty,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:IJ1,resourceNameValidation:(X)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(X)}}},roles:{user:Nv6,admin:Ov6,owner:Lv6},sendInvitationEmail:_J1}),Oe({loginPage:"/login",oidcConfig:{scopes:vJ1,metadata:{scopes_supported:vJ1},loginPage:"/login"}}),Ne({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}}),Ze({defaultRole:"user",adminRoles:["admin","owner"]}),Pe(),He({jwt:{expirationTime:"5m"}}),ja0(i8.ssoConfig?RJ1(i8.ssoConfig):void 0),...i8.magicLinkConfig&&i8.emailProviders&&i8.emailProviders.length>0?[Me(ot0(i8.magicLinkConfig,i8.emailProviders))]:[]],Mv6=Z00(),Pv6=rt0(Mv6),mW=Ut({baseURL:process.env.BASE_URL||"http://localhost:3000",database:Pv6,emailAndPassword:{enabled:!0},...i8,rateLimit:{enabled:process.env.DISABLE_RATE_LIMIT!=="true",window:60,max:1e4},plugins:wv6,databaseHooks:{user:{create:{after:async(X)=>{if(mw.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} ${Uv6()}`,W=zv6(G);try{await mW.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}}}}}}}});PQ();import{randomBytes as Tv6}from"crypto";var kP=null;function yJ1(){if(kP)return kP;let X=process.env.MESH_JWT_SECRET??i8.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(X)kP=new TextEncoder().encode(X);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),kP=new Uint8Array(Tv6(32));return kP}async function bJ1(X,Y="5m"){let Q=yJ1();return await new gY(X).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Y).sign(Q)}async function fJ1(X){try{let Y=yJ1(),{payload:Q}=await G8(X,Y);return Q}catch{return}}m3();class c80{db;constructor(X){this.db=X}async create(X,Y,Q){let J=rY("vir"),G=new Date().toISOString();if(await this.db.insertInto("virtual_mcps").values({id:J,organization_id:X,title:Q.title,description:Q.description??null,tool_selection_mode:Q.tool_selection_mode??"inclusion",icon:Q.icon??null,status:Q.status??"active",created_at:G,updated_at:G,created_by:Y,updated_by:null}).execute(),Q.connections.length>0)await this.db.insertInto("virtual_mcp_connections").values(Q.connections.map((Z)=>({id:rY("virc"),virtual_mcp_id:J,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("virtual_mcps").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;let J=await X.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","=",Y).execute();return this.deserializeVirtualMCPEntity(Q,J)}async list(X){let Y=await this.db.selectFrom("virtual_mcps").selectAll().where("organization_id","=",X).execute(),Q=Y.map((W)=>W.id);if(Q.length===0)return[];let J=await this.db.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","in",Q).execute(),G=new Map;for(let W of J){let Z=G.get(W.virtual_mcp_id)??[];Z.push(W),G.set(W.virtual_mcp_id,Z)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,G.get(W.id)??[]))}async listByConnectionId(X,Y){let J=(await this.db.selectFrom("virtual_mcp_connections").select("virtual_mcp_id").where("connection_id","=",Y).execute()).map((K)=>K.virtual_mcp_id);if(J.length===0)return[];let G=await this.db.selectFrom("virtual_mcps").selectAll().where("id","in",J).where("organization_id","=",X).execute();if(G.length===0)return[];let W=G.map((K)=>K.id),Z=await this.db.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","in",W).execute(),$=new Map;for(let K of Z){let H=$.get(K.virtual_mcp_id)??[];H.push(K),$.set(K.virtual_mcp_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,updated_by:Y};if(Q.title!==void 0)G.title=Q.title;if(Q.description!==void 0)G.description=Q.description;if(Q.tool_selection_mode!==void 0)G.tool_selection_mode=Q.tool_selection_mode;if(Q.icon!==void 0)G.icon=Q.icon;if(Q.status!==void 0)G.status=Q.status;if(await this.db.updateTable("virtual_mcps").set(G).where("id","=",X).execute(),Q.connections!==void 0){if(await this.db.deleteFrom("virtual_mcp_connections").where("virtual_mcp_id","=",X).execute(),Q.connections.length>0)await this.db.insertInto("virtual_mcp_connections").values(Q.connections.map((Z)=>({id:rY("virc"),virtual_mcp_id:X,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("virtual_mcps").where("id","=",X).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;return{id:X.id,organization_id:X.organization_id,title:X.title,description:X.description,tool_selection_mode:this.parseToolSelectionMode(X.tool_selection_mode),icon:X.icon,status:X.status,created_at:Q,updated_at:J,created_by:X.created_by,updated_by:X.updated_by??void 0,connections:Y.map((G)=>({connection_id:G.connection_id,selected_tools:this.parseJson(G.selected_tools),selected_resources:this.parseJson(G.selected_resources),selected_prompts:this.parseJson(G.selected_prompts)}))}}parseToolSelectionMode(X){if(X==="exclusion")return"exclusion";return"inclusion"}parseJson(X){if(X===null)return null;if(typeof X==="string")try{return JSON.parse(X)}catch{return null}return X}}import{sql as ey}from"kysely";class n80{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 sD.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 sD.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()}})}}m3();class i80{db;redactor;databaseType;constructor(X,Y="sqlite"){this.db=X;this.redactor=new n80,this.databaseType=Y}jsonExtract(X,Y){if(this.databaseType==="postgres")return ey`(${ey.ref(X)}::jsonb)->>${Y}`;let Q=`$.${Y}`;return ey`json_extract(${ey.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||rY("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}}}class a80{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 r80{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}}}R$();class hJ1 extends Error{constructor(X){super(X);this.name="UnauthorizedError"}}class o80 extends Error{constructor(X){super(X);this.name="ForbiddenError"}}class iU{userId;toolName;boundAuth;role;connectionId;_granted=!1;constructor(X,Y,Q,J,G,W=w5.SELF){this.userId=Y;this.toolName=Q;this.boundAuth=J;this.role=G;this.connectionId=W}[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)throw new hJ1("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 o80("No resources specified for access check");for(let Q of Y)if(await this.checkResource(Q)){this.grant();return}throw new o80(`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)}granted(){return this._granted}}Q80();function xJ1(X){let Y=null;return()=>{if(Y)return Y;return Y=X().catch((Q)=>{throw Y=null,Q}),Y}}class gJ1{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 $7(X){return new gJ1(X)}async function uJ1(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"}}}PU();K40();function Av6(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)}})}var mJ1="__mesh_stable_stdio_pool__",qF=globalThis[mJ1]??(globalThis[mJ1]=new Map);async function dJ1(X){let Y=qF.get(X.id);if(Y?.status==="connected"&&Y.stableClient)return Y.stableClient;if(Y?.connectPromise&&(Y.status==="connecting"||Y.status==="reconnecting"))return Y.connectPromise;let Q=Y?.status==="failed",J=Y??{transport:null,client:null,stableClient:null,config:X,status:"connecting",connectPromise:null};if(!Y)qF.set(X.id,J);return J.status=Q?"reconnecting":"connecting",J.connectPromise=(async()=>{try{console.log(`[StableStdio] ${Q?"Respawning":"Spawning"}: ${X.id} (${X.command} ${X.args?.join(" ")??""})`);let G=new YP({command:X.command,args:X.args,env:X.env,cwd:X.cwd,stderr:"pipe"});J.transport=G;let W=new YQ({name:`mesh-stdio-${X.id}`,version:"1.0.0"});J.client=W,J.stableClient=Av6(W),W.onclose=()=>{console.log(`[StableStdio] Connection closed unexpectedly: ${X.id}`),J.status="failed",J.connectPromise=null};let Z=X.name||X.id,$="\x1B[2m",K="\x1B[0m";G.stderr?.on("data",(V)=>{let q=V.toString().trimEnd();if(q)console.error(`${q} ${$}[${Z}]${K}`)});let H=new AbortController,F=setTimeout(()=>H.abort(),30000);try{await Promise.race([W.connect(G),new Promise((V,q)=>{H.signal.addEventListener("abort",()=>{q(Error("Stdio connection timeout after 30s"))})})])}finally{clearTimeout(F)}return J.status="connected",console.log(`[StableStdio] Connected: ${X.id}`),J.stableClient}catch(G){console.error(`[StableStdio] Failed to connect ${X.id}:`,G),J.status="failed",J.connectPromise=null;try{await J.transport?.close()}catch{}throw G}})(),J.connectPromise}async function Ev6(X){let Y=qF.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{}qF.delete(X)}async function jv6(){console.log(`[StableStdio] Closing all connections (${qF.size})`);let X=Array.from(qF.keys()).map((Y)=>Ev6(Y));await Promise.allSettled(X),qF.clear()}var lJ1="__mesh_stable_stdio_shutdown_registered__";if(!globalThis[lJ1]){globalThis[lJ1]=!0;let X=async(Y)=>{await jv6(),process.exit(Y==="SIGINT"?130:143)};process.on("SIGINT",()=>X("SIGINT")),process.on("SIGTERM",()=>X("SIGTERM"))}ry();MW();PU();Iy();JP();vy();_y();D9();var Xb=new $9,s80=[404,401,406];async function pJ1(X,Y){return(await Y.storage.connections.findById(X))?.connection_url??null}function Cv6(X){let Y=X.toLowerCase();return Y.includes("resource_metadata=")||Y.includes("invalid_token")||Y.includes("oauth")}async function cJ1(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(Cv6(J))return J}}return null}catch{return null}}async function Yb(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(!s80.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"}}),!s80.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 Iv6(X,Y){let Q=await pJ1(X,Y);if(!Q)return null;let J;try{J=new URL(Q).origin}catch{return null}try{let G=await Yb(Q);if(G.ok){let W=await G.json();if(W.authorization_servers?.[0])return W.authorization_servers[0]}}catch{}return J}async function nJ1(X){let Y=X.get("meshContext");if(!Y)Y=await QK.create(X.req.raw),X.set("meshContext",Y);return Y}async function iJ1({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 cJ1(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"}})}var Qb=(X)=>{if(!(X.hostname==="localhost"||X.hostname==="127.0.0.1"))X.protocol="https:";return X},aJ1=async(X)=>{let Y=X.req.param("connectionId"),Q=await nJ1(X),J=await pJ1(Y,Q);if(!J)return X.json({error:"Connection not found"},404);let G=Qb(new URL(X.req.url)),W=`${G.origin}/mcp/${Y}`,Z=`${G.origin}/oauth-proxy/${Y}`;try{let $=await Yb(J);if(!$.ok&&s80.includes($.status)){if(await cJ1(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)}};Xb.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(X)=>aJ1(X));Xb.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(X)=>aJ1(X));async function t80(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}Xb.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=await nJ1(X),J=await Iv6(Y,Q);if(!J)return X.json({error:"Connection not found or no auth server"},404);try{let G=await t80(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(),$=`${Qb(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)}});var rJ1=Xb;function Rv6(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 Sv6(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 kv6(X,Y){if(!X&&!Y)return;if(!X)return Y;if(!Y)return X;return{...Y,...X}}function oJ1(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 vv6(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 vP(X){let{ctx:Y,enabled:Q}=X,J=X.organizationId??Y.organization?.id;if(!Q||!J)return;let G=Sv6(X.request.params.arguments),W=kv6(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:Y.virtualMcpId,properties:W})}function sJ1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G}=X;return async(W,Z)=>{let $=Date.now();try{let K=await Z(),H=Date.now()-$;return await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:oJ1(K),isError:Boolean(K.isError),errorMessage:Rv6(K),durationMs:H}),K}catch(K){let H=K,F=Date.now()-$;throw await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),K}}}function tJ1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G}=X;return async(W,Z)=>{let $=Date.now();try{let K=await Z(),H=Y.organization?.id;if(Q&&H){let F=K.clone();(async()=>{try{let{text:V,truncated:q}=await vv6(F,262144),z=Date.now()-$,D=F.headers.get("content-type")??"",N=V;if(D.includes("application/json"))try{N=V.length?JSON.parse(V):null}catch{N=V}let L=K.status>=400,w=L&&N&&typeof N==="object"&&"error"in N?N.error:void 0,C=typeof w==="string"&&w?w:L&&typeof N==="string"&&N.trim()?N.slice(0,500):L?`HTTP ${K.status} ${K.statusText}`.trim():q?"Response body truncated to 262144 bytes":void 0;await vP({ctx:Y,enabled:Q,organizationId:H,connectionId:J,connectionTitle:G,request:W,output:oJ1(N),isError:L,errorMessage:C,durationMs:z})}catch(V){let q=Date.now()-$;await vP({ctx:Y,enabled:Q,organizationId:H,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${V.message}`,durationMs:q})}})()}return K}catch(K){let H=K,F=Date.now()-$;throw await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),K}}}var eJ1=new $9;function _v6(X,Y){return async(Q,J)=>{try{let G=Q.params.name;return await new iU(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,G,X.boundAuth,X.auth.user?.role,Y).check(G),await J()}catch(G){return{content:[{type:"text",text:`Authorization failed: ${G.message}`}],isError:!0}}}}function yv6(X,Y){return async(Q,J)=>{try{let G=Q.params.name;return await new iU(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,G,X.boundAuth,X.auth.user?.role,Y).check(G),await J()}catch(G){return new Response(JSON.stringify({error:`Authorization failed: ${G.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function X51(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,$=xJ1(async()=>{let b=Y80(J.configuration_state,J.configuration_scopes),S=Y.auth.user?.id??Y.auth.apiKey?.userId;if(!S){console.error("User ID required to issue configuration token");return}try{W=await bJ1({sub:S,user:{id:S},metadata:{state:J.configuration_state??void 0,meshUrl:process.env.MESH_URL??Y.baseUrl,connectionId:G,organizationId:Y.organization?.id},permissions:b})}catch(g){console.error("Failed to issue configuration token:",g)}}),K=async()=>{await $();let b={...Z?{"x-caller-id":Z}:{}},S=null,g=new gW(Y.db,Y.vault),t=await g.get(G);if(t){let r=!!t.refreshToken&&!!t.tokenEndpoint;if(g.isExpired(t,r?300000:0))if(r){console.log(`[Proxy] Token expired for ${G}, attempting refresh`);let H0=await uJ1(t);if(H0.success&&H0.accessToken)await g.upsert({connectionId:G,accessToken:H0.accessToken,refreshToken:H0.refreshToken??t.refreshToken,scope:H0.scope??t.scope,expiresAt:H0.expiresIn?new Date(Date.now()+H0.expiresIn*1000):null,clientId:t.clientId,clientSecret:t.clientSecret,tokenEndpoint:t.tokenEndpoint}),S=H0.accessToken,console.log(`[Proxy] Token refreshed for ${G}`);else await g.delete(G),console.error(`[Proxy] Token refresh failed for ${G}: ${H0.error}`)}else await g.delete(G),console.log(`[Proxy] Token expired without refresh capability for ${G}`);else S=t.accessToken}if(!S&&J.connection_token)S=J.connection_token;if(S)b.Authorization=`Bearer ${S}`;if(W)b["x-mesh-token"]=W;return b},H=J.connection_type==="STDIO",F=g3(J.connection_headers)?J.connection_headers:null,V=!H?J.connection_headers:null,q=async()=>{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 dJ1({id:G,name:J.title,command:F.command,args:F.args,env:F.envVars,cwd:F.cwd})}case"HTTP":case"Websocket":{if(!J.connection_url)throw Error(`${J.connection_type} connection missing URL`);let b=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"}),S=await K();if(V?.headers)Object.assign(S,V.headers);let g=new fW(new URL(J.connection_url),{requestInit:{headers:S}});return await b.connect(g),b}case"SSE":{if(!J.connection_url)throw Error("SSE connection missing URL");let b=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"}),S=await K();if(V?.headers)Object.assign(S,V.headers);let g=new XF(new URL(J.connection_url),{requestInit:{headers:S}});return await b.connect(g),b}default:throw Error(`Unknown connection type: ${J.connection_type}`)}},z=Q?async(b,S)=>await S():_v6(Y,G),D=Q?async(b,S)=>await S():yv6(Y,G),N={enabled:qo0().enabled,connectionId:G,connectionTitle:J.title,ctx:Y},L=sJ1(N),w=tJ1(N),C=WP(L,z),T=WP(w,D),E=async(b)=>{return C(b,async()=>{let S=await q(),g=Date.now(),t={...b.params};if(t.arguments&&"_meta"in t.arguments){let{_meta:r,...Y0}=t.arguments;t.arguments=Y0}return await Y.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":G,"tool.name":b.params.name}},async(r)=>{try{let Y0=await S.callTool(t),H0=Date.now()-g;return Y.meter.createHistogram("connection.proxy.duration").record(H0,{"connection.id":G,"tool.name":b.params.name,status:"success"}),Y.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":G,"tool.name":b.params.name,status:"success"}),r.end(),Y0}catch(Y0){let H0=Y0,G0=Date.now()-g;throw Y.meter.createHistogram("connection.proxy.duration").record(G0,{"connection.id":G,"tool.name":b.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":G,"tool.name":b.params.name,error:H0.message}),r.recordException(H0),r.end(),Y0}finally{S.close().catch(console.error)}})})};return{fetch:async(b)=>{let S=new URL(b.url),g;try{g=await q()}catch(G0){let B0=J.connection_url?await iJ1({error:G0,reqUrl:S,connectionId:G,connectionUrl:J.connection_url,headers:await K()}):null;if(B0)return B0;throw G0}let r=g.getServerCapabilities()??{tools:{},resources:{},prompts:{}},Y0=new QF({name:"mcp-mesh",version:"1.0.0"},{capabilities:r}),H0=new JF({enableJsonResponse:b.headers.get("Accept")?.includes("application/json")??!1});if(await Y0.connect(H0),Y0.server.setRequestHandler(u$,()=>g.listTools()),Y0.server.setRequestHandler(Y7,E),r.resources)Y0.server.setRequestHandler(b$,()=>g.listResources()),Y0.server.setRequestHandler(h$,(G0)=>g.readResource(G0.params)),Y0.server.setRequestHandler(f$,()=>g.listResourceTemplates());if(r.prompts)Y0.server.setRequestHandler(x$,()=>g.listPrompts()),Y0.server.setRequestHandler(g$,(G0)=>g.getPrompt(G0.params));try{return await H0.handleRequest(b)}finally{try{await H0.close?.()}catch{}}},client:{callTool:(b)=>{return E({method:"tools/call",params:b})},listTools:async()=>{if(J.tools&&J.tools.length>0)return{tools:J.tools.map((S)=>({name:S.name,description:S.description,inputSchema:S.inputSchema,outputSchema:S.outputSchema}))};let b;try{return b=await q(),await b.listTools()}finally{b?.close().catch(console.error)}},listResources:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.resources)return{resources:[]};return await b.listResources()}finally{b?.close().catch(console.error)}},readResource:async(b)=>{let S;try{return S=await q(),await S.readResource(b)}finally{S?.close().catch(console.error)}},listResourceTemplates:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.resources)return{resourceTemplates:[]};return await b.listResourceTemplates()}finally{b?.close().catch(console.error)}},listPrompts:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.prompts)return{prompts:[]};return await b.listPrompts()}finally{b?.close().catch(console.error)}},getPrompt:async(b)=>{let S;try{if(S=await q(),!S.getServerCapabilities()?.prompts)throw Error("Prompts capability not supported");return await S.getPrompt(b)}finally{S?.close().catch(console.error)}}},callStreamableTool:async(b,S)=>{if(!J.connection_url)throw Error("Streamable tools require HTTP connection with URL");let g=J.connection_url,t={method:"tools/call",params:{name:b,arguments:S}};return T(t,async()=>{let r=await K();if(V?.headers)Object.assign(r,V.headers);let Y0=new URL(g);return Y0.pathname=Y0.pathname.replace(/\/$/,"")+`/call-tool/${t.params.name}`,await Y.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":G,"tool.name":t.params.name}},async(H0)=>{let G0=Date.now();try{let B0=await fetch(Y0.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(t.params.arguments),headers:{...r,"Content-Type":"application/json"}}),T0=Date.now()-G0;return Y.meter.createHistogram("connection.proxy.streamable.duration").record(T0,{"connection.id":G,"tool.name":t.params.name,status:B0.ok?"success":"error"}),Y.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":G,"tool.name":t.params.name,status:B0.ok?"success":"error"}),H0.end(),B0}catch(B0){let T0=B0,y0=Date.now()-G0;throw Y.meter.createHistogram("connection.proxy.streamable.duration").record(y0,{"connection.id":G,"tool.name":t.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":G,"tool.name":t.params.name,error:T0.message}),H0.recordException(T0),H0.end(),B0}})})}}}async function Y51(X,Y){return X51(X,Y,{superUser:!1})}async function Q51(X,Y){return X51(X,Y,{superUser:!0})}eJ1.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){let G=J;if(G.message.includes("not found"))return X.json({error:G.message},404);if(G.message.includes("does not belong to the active organization"))return X.json({error:"Connection not found"},404);if(G.message.includes("inactive"))return X.json({error:G.message},503);return X.json({error:"Internal server error",message:G.message},500)}});var J51=eJ1;R$();m3();class e80{db;constructor(X){this.db=X}async create(X){let Y=X.id??rY("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;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){let Q=this.db.selectFrom("threads").selectAll().where("organization_id","=",X).where("hidden","=",!1).orderBy("updated_at","desc"),J=this.db.selectFrom("threads").select((Z)=>Z.fn.count("id").as("count")).where("organization_id","=",X).where("hidden","=",!1);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{threads:G.map((Z)=>this.threadFromDbRow(Z)),total:Number(W?.count||0)}}async listByUserId(X){let Y=await this.db.selectFrom("threads").selectAll().where("created_by","=",X).orderBy("updated_at","desc").execute();return{threads:Y.map((Q)=>this.threadFromDbRow(Q)),total:Y.length}}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()}}}function bv6(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 fv6(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 hv6(X){let{auth:Y,headers:Q,role:J,permissions:G,userId:W}=X,Z=Y.api.hasPermission;return{hasPermission:async($)=>{if(J&&p80.includes(J))return!0;if(G)return fv6(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 xv6(X,Y,Q){if(p80.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 gv6(X,Y,Q,J=W51){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",()=>xv6(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",()=>fJ1(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}}var G51,QK={set:(X)=>{G51=X},create:async(X,Y)=>{return await G51(X,Y)}},W51={measure:async(X,Y)=>{return await Y()}};function Z51(X){let Y=new tw(X.encryption.key),Q={connections:new ew(X.db,Y),organizationSettings:new a80(X.db),monitoring:new i80(X.db,X.databaseType),virtualMcps:new c80(X.db),users:new r80(X.db),threads:new e80(X.db)};return async(J,G)=>{let W=G?.timings??W51,Z=J?.headers.get("x-caller-id")??void 0,$=J?await gv6(J,X.auth,X.db,W):{user:void 0},K=hv6({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 iU(X.auth,H.user?.id,void 0,K,$.role,w5.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,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:bv6(J?.headers.get("x-mesh-properties"))},eventBus:X.eventBus,createMCPProxy:async(N)=>{return await Y51(N,D)}};return D}}var _P={HEALTH:"/health",METRICS:"/metrics"},aU={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/"},uv6=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/;function $51(X){return X===_P.HEALTH||X===_P.METRICS||X.startsWith(aU.WELL_KNOWN)}function mv6(X){return X.startsWith(aU.API)}function lv6(X){return X==="/mcp"||X.startsWith(aU.MCP)}function dv6(X){return X.startsWith(aU.OAUTH_PROXY)}function pv6(X){return uv6.test(X)}function cv6(X){return X.startsWith(aU.ORG)}function K51(X){return mv6(X)||lv6(X)||dv6(X)||cv6(X)||$51(X)}function H51(X){return X==="/"||X.startsWith(aU.API_AUTH)||$51(X)||pv6(X)}class F51{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 T=Z.get(w);if(!T)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 E=T.filter??null,P=C.filter??null;if(E!==P)F.push({id:T.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 V51(X){return new F51(X)}function gX(X,Y,Q,J,G,W,Z,$){return gX.fromTZ(gX.tp(X,Y,Q,J,G,W,Z),$)}gX.fromTZISO=(X,Y,Q)=>gX.fromTZ(nv6(X,Y),Q);gX.fromTZ=function(X,Y){let Q=new Date(Date.UTC(X.y,X.m-1,X.d,X.h,X.i,X.s)),J=X90(X.tz,Q),G=new Date(Q.getTime()-J),W=X90(X.tz,G);if(W-J===0)return G;{let Z=new Date(Q.getTime()-W),$=X90(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}};gX.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}};gX.tp=(X,Y,Q,J,G,W,Z)=>({y:X,m:Y,d:Q,h:J,i:G,s:W,tz:Z});function X90(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 nv6(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("+")?gX.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):gX.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Y)}gX.minitz=gX;var Y90=32,bP=31|Y90,B51=[1,2,4,8,16],q51=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 xJ(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,bP),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]|Y90;else if(Y===bP)this.dayOfWeek[X]=bP;else if(Y<6&&Y>0)this.dayOfWeek[X]=this.dayOfWeek[X]|B51[Y-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Y}, Type: ${typeof Y}`)}},z51=[31,28,31,30,31,30,31,31,30,31,30,31],lW=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],xJ=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&bP&&B51[Z-1]&G)return!0;if(G&Y90){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=gX.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>z51[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=gX.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(gX.fromTZISO(Y,this.tz))}findNext(Y,Q,J,G){let W=this[Q],Z;J.lastDayOfMonth&&(this.month!==1?Z=z51[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&bP)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,lW[J][0],Y,lW[J][2]);if(G>1){let W=J+1;for(;W<lW.length;)this[lW[W][0]]=-lW[W][2],W++;if(G===3)return this[lW[J][1]]++,this[lW[J][0]]=-lW[J][2],this.apply(),this.recurse(Y,Q,0);if(this.apply())return this.recurse(Y,Q,J-1)}return J+=1,J>=lW.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)):gX.fromTZ(gX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}};function iv6(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 xJ(X.startAt,X.timezone)),X.stopAt&&(X.stopAt=new xJ(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 yP(X){return Object.prototype.toString.call(X)==="[object Function]"||typeof X=="function"||X instanceof Function}function av6(X){return yP(X)}function rv6(X){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(X):X&&typeof X.unref<"u"&&X.unref()}var U51=30000,Jb=[],Gb=class{name;options;_states;fn;constructor(X,Y,Q){let J,G;if(yP(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(yP(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=iv6(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 q51("* * * * *")},X&&(X instanceof Date||typeof X=="string"&&X.indexOf(":")>0)?this._states.once=new xJ(X,this.options.timezone||this.options.utcOffset):this._states.pattern=new q51(X,this.options.timezone),this.name){if(Jb.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");Jb.push(this)}return G!==void 0&&av6(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 xJ||X instanceof Date?Y.getTime()-X.getTime():Y.getTime()-new xJ(X).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let X=Jb.indexOf(this);X>=0&&Jb.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>U51&&(Y=U51),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Y),this._states.currentTimeout&&this.options.unref&&rv6(this._states.currentTimeout),this)}async _trigger(X){if(this._states.blocking=!0,this._states.currentRun=new xJ(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){yP(this.options.catch)&&this.options.catch(Y,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new xJ(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&&yP(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 xJ(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 xJ(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 xJ(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 xJ(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 Wb={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};ny();function D51(){return async(X,Y)=>{try{let Q=await QK.create(),J=await Q51(X,{...Q,auth:{...Q.auth,user:{id:"notify-worker"}}}),W=await r40.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}}}}function N51(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 ov6(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(N51(J.event))}else Y.set(G,{connectionId:J.subscription.connectionId,deliveryIds:[J.delivery.id],events:[N51(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 Q90{storage;notifySubscriber;running=!1;processing=!1;config;constructor(X,Y){this.storage=X;this.notifySubscriber=D51(),this.config={...Wb,...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=ov6(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 Gb(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)}}}class J90{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new Q90(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 Gb(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}}function O51(...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 Zb{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 sv6}from"kysely";var rU="mesh_events";class G90{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===rU&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(Y)=>{console.error("[PostgresNotify] Connection error:",Y),this.cleanup()}),await this.listenClient.query(`LISTEN ${rU}`),console.log("[PostgresNotify] Started LISTEN on",rU)}catch(Y){console.error("[PostgresNotify] Failed to start LISTEN:",Y),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${rU}`),console.log("[PostgresNotify] Stopped LISTEN on",rU)}catch{}this.cleanup()}}async notify(X){try{await sv6`SELECT pg_notify(${rU}, ${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}}function L51(X,Y){let Q=V51(X.db),J=Y?.pollIntervalMs??Wb.pollIntervalMs,G=X.type==="postgres"?O51(new Zb(J),new G90(X.db,X.pool)):new Zb(J);return new J90({storage:Q,config:Y,notifyStrategy:G})}var w51={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 M51=new $9;M51.get("/config",async(X)=>{try{let Y=Object.keys(i8.socialProviders??{}),Q=Y.length>0,J=Y.map((Z)=>({name:Z,icon:w51[Z].icon})),G=process.env.UNSAFE_ALLOW_STDIO_TRANSPORT==="true",W={emailAndPassword:{enabled:i8.emailAndPassword?.enabled??!1},magicLink:{enabled:i8.magicLinkConfig?.enabled??!1},socialProviders:{enabled:Q,providers:J},sso:i8.ssoConfig?{enabled:!0,providerId:i8.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)}});var P51=M51;ry();var $b=new $9;$b.post("/connections/:connectionId/oauth-token",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);if(!await Y.storage.connections.findById(Q,Y.organization?.id))return X.json({error:"Connection not found"},404);let W=await X.req.json();if(!W.accessToken)return X.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let F;try{F=new URL(W.tokenEndpoint)}catch{return X.json({error:"tokenEndpoint must be a valid URL"},400)}if(F.protocol!=="http:"&&F.protocol!=="https:")return X.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,$=new gW(Y.db,Y.vault),K={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:Z,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:W.tokenEndpoint??null},H=await $.upsert(K);return X.json({success:!0,expiresAt:H.expiresAt})});$b.delete("/connections/:connectionId/oauth-token",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);return await new gW(Y.db,Y.vault).delete(Q),X.json({success:!0})});$b.get("/connections/:connectionId/oauth-token/status",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);let G=new gW(Y.db,Y.vault),W=await G.get(Q);if(!W)return X.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=G.isExpired(W),$=!!W.refreshToken&&!!W.tokenEndpoint;return X.json({hasToken:!0,isExpired:Z,canRefresh:$,expiresAt:W.expiresAt})});var T51=$b;vy();_y();D9();D9();e0();HP();function A51(X){let Y=U.object({query:U.string().describe("Natural language search query (e.g., 'send email', 'create order')"),limit:U.number().default(10).describe("Maximum results to return (default: 10)")}),Q=KP(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: ${Q.length}.`,inputSchema:U.toJSONSchema(Y)},handler:async(G)=>{let W=Y.safeParse(G);if(!W.success)return dU({error:W.error.flatten()});let Z=xy(W.data.query,Q,W.data.limit);return my({query:W.data.query,results:Z.map(($)=>({name:$.name,description:$.description,connection:$._meta.connectionTitle})),totalAvailable:Q.length})}}}function E51(X){let Y=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),Q=KP(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:U.toJSONSchema(Y)},handler:async(J)=>{let G=Y.safeParse(J);if(!G.success)return dU({error:G.error.flatten()});let W=gy(G.data.tools,Q);return my({tools:W.tools,notFound:W.notFound})}}}function tv6(X){let Y=KP(X.tools),Q=Y.map((W)=>W.name),J=new Map(Y.map((W)=>[W.name,W])),G=U.object({name:(Q.length>0?U.enum(Q):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")});return{tool:{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:U.toJSONSchema(G)},handler:async(W)=>{let Z=G.safeParse(W);if(!Z.success)return dU({error:Z.error.flatten()});let{name:$,arguments:K}=Z.data;if(!J.has($))return{content:[{type:"text",text:`Tool not found: ${$}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return X.callTool($,K)}}}function ev6(X){let Y=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).")}),Q=KP(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:U.toJSONSchema(Y)},handler:async(J)=>{let G=Y.safeParse(J);if(!G.success)return dU({error:G.error.flatten()});let W={...X,tools:Q},Z=await uy(G.data.code,W,G.data.timeoutMs);if(Z.error)return dU(Z);return my(Z)}}}function j51(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)}}}var X_6=(X)=>({tools:X.tools,callTool:(Y,Q)=>X.callTool(Y,Q)}),Y_6=(X)=>j51([A51(X),E51(X),ev6(X)]),Q_6=(X)=>j51([A51(X),E51(X),tv6(X)]);function C51(X){switch(X){case"smart_tool_selection":return Q_6;case"code_execution":return Y_6;case"passthrough":default:return X_6}}function I51(X){switch(X){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}class Kb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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})},$=C51(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"}})}}D9();function J_6(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 R51(X,Y){return Y.some((Q)=>J_6(X,Q))}class Hb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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)=>!R51(K.uri,G.selectedResources))}else if(!G.selectedResources||G.selectedResources.length===0)$=[];else $=$.filter((K)=>R51(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)}}D9();class Fb{proxies;cache;constructor(X){this.proxies=X;this.cache=$7(()=>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}}}class Vb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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)}}R$();var W90=new $9;async function G_6(X,Y){let Q=await GF.create(X.connections,Y),J=new Kb(Q,{selectionMode:X.toolSelectionMode,strategy:X.toolSelectionStrategy}),G=new Hb(Q,{selectionMode:X.toolSelectionMode}),W=new Fb(Q),Z=new Vb(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 W_6(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"),$=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")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 G_6(G,Y)}async function S51(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?Qe0(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(Q.virtualMcpId=Z.id,Z.status!=="active")return X.json({error:`Agent is inactive: ${Z.id}`},503);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=I51(K),F=await W_6(Z,Q,H),V=new QF({name:`mcp-virtual-mcp-${Z.title}`,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}}}),q=new JF({enableJsonResponse:X.req.header("Accept")?.includes("application/json")??!1});return await V.connect(q),V.server.setRequestHandler(u$,async(z)=>{return F.client.listTools()}),V.server.setRequestHandler(Y7,async(z)=>{return await F.client.callTool(z.params)}),V.server.setRequestHandler(b$,async()=>{return F.client.listResources()}),V.server.setRequestHandler(h$,async(z)=>{return F.client.readResource(z.params)}),V.server.setRequestHandler(f$,async()=>{return F.client.listResourceTemplates()}),V.server.setRequestHandler(x$,async()=>{return F.client.listPrompts()}),V.server.setRequestHandler(g$,async(z)=>{return F.client.getPrompt(z.params)}),await q.handleRequest(X.req.raw)}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)}}W90.all("/gateway/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return S51(X,Y)});W90.all("/virtual-mcp/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return S51(X,Y)});var k51=W90;d80();var v51=new $9;v51.all("/",async(X)=>{return l80(X.get("meshContext")).fetch(X.req.raw)});var _51=v51;s40();PU();JP();D9();var KG1="vercel.ai.error",Z_6=Symbol.for(KG1),y51,b51,D1=class X extends(b51=Error,y51=Z_6,b51){constructor({name:Y,message:Q,cause:J}){super(Q);this[y51]=!0,this.name=Y,this.cause=J}static isInstance(Y){return X.hasMarker(Y,KG1)}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}},HG1="AI_APICallError",FG1=`vercel.ai.error.${HG1}`,$_6=Symbol.for(FG1),f51,h51,a8=class extends(h51=D1,f51=$_6,h51){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:HG1,message:X,cause:Z});this[f51]=!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 D1.hasMarker(X,FG1)}},VG1="AI_EmptyResponseBodyError",qG1=`vercel.ai.error.${VG1}`,K_6=Symbol.for(qG1),x51,g51,zG1=class extends(g51=D1,x51=K_6,g51){constructor({message:X="Empty response body"}={}){super({name:VG1,message:X});this[x51]=!0}static isInstance(X){return D1.hasMarker(X,qG1)}};function y5(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 UG1="AI_InvalidArgumentError",BG1=`vercel.ai.error.${UG1}`,H_6=Symbol.for(BG1),u51,m51,DG1=class extends(m51=D1,u51=H_6,m51){constructor({message:X,cause:Y,argument:Q}){super({name:UG1,message:X,cause:Y});this[u51]=!0,this.argument=Q}static isInstance(X){return D1.hasMarker(X,BG1)}},NG1="AI_InvalidPromptError",OG1=`vercel.ai.error.${NG1}`,F_6=Symbol.for(OG1),l51,d51,zF=class extends(d51=D1,l51=F_6,d51){constructor({prompt:X,message:Y,cause:Q}){super({name:NG1,message:`Invalid prompt: ${Y}`,cause:Q});this[l51]=!0,this.prompt=X}static isInstance(X){return D1.hasMarker(X,OG1)}},LG1="AI_InvalidResponseDataError",wG1=`vercel.ai.error.${LG1}`,V_6=Symbol.for(wG1),p51,c51,$c4=class extends(c51=D1,p51=V_6,c51){constructor({data:X,message:Y=`Invalid response data: ${JSON.stringify(X)}.`}){super({name:LG1,message:Y});this[p51]=!0,this.data=X}static isInstance(X){return D1.hasMarker(X,wG1)}},MG1="AI_JSONParseError",PG1=`vercel.ai.error.${MG1}`,q_6=Symbol.for(PG1),n51,i51,fP=class extends(i51=D1,n51=q_6,i51){constructor({text:X,cause:Y}){super({name:MG1,message:`JSON parsing failed: Text: ${X}.
1051
+ `})}}}var wv6=[Je({organizationCreation:{afterCreate:async(X)=>{await CJ1(X.organization.id,X.member.userId)}},ac:ty,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:IJ1,resourceNameValidation:(X)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(X)}}},roles:{user:Nv6,admin:Ov6,owner:Lv6},sendInvitationEmail:_J1}),Oe({loginPage:"/login",oidcConfig:{scopes:vJ1,metadata:{scopes_supported:vJ1},loginPage:"/login"}}),Ne({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}}),Ze({defaultRole:"user",adminRoles:["admin","owner"]}),Pe(),He({jwt:{expirationTime:"5m"}}),ja0(i8.ssoConfig?RJ1(i8.ssoConfig):void 0),...i8.magicLinkConfig&&i8.emailProviders&&i8.emailProviders.length>0?[Me(ot0(i8.magicLinkConfig,i8.emailProviders))]:[]],Mv6=Z00(),Pv6=rt0(Mv6),mW=Ut({baseURL:process.env.BASE_URL||"http://localhost:3000",database:Pv6,emailAndPassword:{enabled:!0},...i8,rateLimit:{enabled:process.env.DISABLE_RATE_LIMIT!=="true",window:60,max:1e4},plugins:wv6,databaseHooks:{user:{create:{after:async(X)=>{if(mw.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} ${Uv6()}`,W=zv6(G);try{await mW.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}}}}}}}});PQ();import{randomBytes as Tv6}from"crypto";var kP=null;function yJ1(){if(kP)return kP;let X=process.env.MESH_JWT_SECRET??i8.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(X)kP=new TextEncoder().encode(X);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),kP=new Uint8Array(Tv6(32));return kP}async function bJ1(X,Y="5m"){let Q=yJ1();return await new gY(X).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Y).sign(Q)}async function fJ1(X){try{let Y=yJ1(),{payload:Q}=await G8(X,Y);return Q}catch{return}}m3();class c80{db;constructor(X){this.db=X}async create(X,Y,Q){let J=rY("vir"),G=new Date().toISOString();if(await this.db.insertInto("virtual_mcps").values({id:J,organization_id:X,title:Q.title,description:Q.description??null,tool_selection_mode:Q.tool_selection_mode??"inclusion",icon:Q.icon??null,status:Q.status??"active",created_at:G,updated_at:G,created_by:Y,updated_by:null}).execute(),Q.connections.length>0)await this.db.insertInto("virtual_mcp_connections").values(Q.connections.map((Z)=>({id:rY("virc"),virtual_mcp_id:J,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("virtual_mcps").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;let J=await X.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","=",Y).execute();return this.deserializeVirtualMCPEntity(Q,J)}async list(X){let Y=await this.db.selectFrom("virtual_mcps").selectAll().where("organization_id","=",X).execute(),Q=Y.map((W)=>W.id);if(Q.length===0)return[];let J=await this.db.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","in",Q).execute(),G=new Map;for(let W of J){let Z=G.get(W.virtual_mcp_id)??[];Z.push(W),G.set(W.virtual_mcp_id,Z)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,G.get(W.id)??[]))}async listByConnectionId(X,Y){let J=(await this.db.selectFrom("virtual_mcp_connections").select("virtual_mcp_id").where("connection_id","=",Y).execute()).map((K)=>K.virtual_mcp_id);if(J.length===0)return[];let G=await this.db.selectFrom("virtual_mcps").selectAll().where("id","in",J).where("organization_id","=",X).execute();if(G.length===0)return[];let W=G.map((K)=>K.id),Z=await this.db.selectFrom("virtual_mcp_connections").selectAll().where("virtual_mcp_id","in",W).execute(),$=new Map;for(let K of Z){let H=$.get(K.virtual_mcp_id)??[];H.push(K),$.set(K.virtual_mcp_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,updated_by:Y};if(Q.title!==void 0)G.title=Q.title;if(Q.description!==void 0)G.description=Q.description;if(Q.tool_selection_mode!==void 0)G.tool_selection_mode=Q.tool_selection_mode;if(Q.icon!==void 0)G.icon=Q.icon;if(Q.status!==void 0)G.status=Q.status;if(await this.db.updateTable("virtual_mcps").set(G).where("id","=",X).execute(),Q.connections!==void 0){if(await this.db.deleteFrom("virtual_mcp_connections").where("virtual_mcp_id","=",X).execute(),Q.connections.length>0)await this.db.insertInto("virtual_mcp_connections").values(Q.connections.map((Z)=>({id:rY("virc"),virtual_mcp_id:X,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("virtual_mcps").where("id","=",X).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;return{id:X.id,organization_id:X.organization_id,title:X.title,description:X.description,tool_selection_mode:this.parseToolSelectionMode(X.tool_selection_mode),icon:X.icon,status:X.status,created_at:Q,updated_at:J,created_by:X.created_by,updated_by:X.updated_by??void 0,connections:Y.map((G)=>({connection_id:G.connection_id,selected_tools:this.parseJson(G.selected_tools),selected_resources:this.parseJson(G.selected_resources),selected_prompts:this.parseJson(G.selected_prompts)}))}}parseToolSelectionMode(X){if(X==="exclusion")return"exclusion";return"inclusion"}parseJson(X){if(X===null)return null;if(typeof X==="string")try{return JSON.parse(X)}catch{return null}return X}}import{sql as ey}from"kysely";class n80{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 sD.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 sD.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()}})}}m3();class i80{db;redactor;databaseType;constructor(X,Y="sqlite"){this.db=X;this.redactor=new n80,this.databaseType=Y}jsonExtract(X,Y){if(this.databaseType==="postgres")return ey`(${ey.ref(X)}::jsonb)->>${Y}`;let Q=`$.${Y}`;return ey`json_extract(${ey.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||rY("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}}}class a80{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 r80{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}}}R$();class hJ1 extends Error{constructor(X){super(X);this.name="UnauthorizedError"}}class o80 extends Error{constructor(X){super(X);this.name="ForbiddenError"}}class iU{userId;toolName;boundAuth;role;connectionId;_granted=!1;constructor(X,Y,Q,J,G,W=w5.SELF){this.userId=Y;this.toolName=Q;this.boundAuth=J;this.role=G;this.connectionId=W}[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)throw new hJ1("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 o80("No resources specified for access check");for(let Q of Y)if(await this.checkResource(Q)){this.grant();return}throw new o80(`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)}granted(){return this._granted}}Q80();function xJ1(X){let Y=null;return()=>{if(Y)return Y;return Y=X().catch((Q)=>{throw Y=null,Q}),Y}}class gJ1{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 $7(X){return new gJ1(X)}async function uJ1(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"}}}PU();K40();function Av6(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)}})}var mJ1="__mesh_stable_stdio_pool__",qF=globalThis[mJ1]??(globalThis[mJ1]=new Map);async function dJ1(X){let Y=qF.get(X.id);if(Y?.status==="connected"&&Y.stableClient)return Y.stableClient;if(Y?.connectPromise&&(Y.status==="connecting"||Y.status==="reconnecting"))return Y.connectPromise;let Q=Y?.status==="failed",J=Y??{transport:null,client:null,stableClient:null,config:X,status:"connecting",connectPromise:null};if(!Y)qF.set(X.id,J);return J.status=Q?"reconnecting":"connecting",J.connectPromise=(async()=>{try{console.log(`[StableStdio] ${Q?"Respawning":"Spawning"}: ${X.id} (${X.command} ${X.args?.join(" ")??""})`);let G=new YP({command:X.command,args:X.args,env:X.env,cwd:X.cwd,stderr:"pipe"});J.transport=G;let W=new YQ({name:`mesh-stdio-${X.id}`,version:"1.0.0"});J.client=W,J.stableClient=Av6(W),W.onclose=()=>{console.log(`[StableStdio] Connection closed unexpectedly: ${X.id}`),J.status="failed",J.connectPromise=null};let Z=X.name||X.id,$="\x1B[2m",K="\x1B[0m";G.stderr?.on("data",(V)=>{let q=V.toString().trimEnd();if(q)console.error(`${q} ${$}[${Z}]${K}`)});let H=new AbortController,F=setTimeout(()=>H.abort(),30000);try{await Promise.race([W.connect(G),new Promise((V,q)=>{H.signal.addEventListener("abort",()=>{q(Error("Stdio connection timeout after 30s"))})})])}finally{clearTimeout(F)}return J.status="connected",console.log(`[StableStdio] Connected: ${X.id}`),J.stableClient}catch(G){console.error(`[StableStdio] Failed to connect ${X.id}:`,G),J.status="failed",J.connectPromise=null;try{await J.transport?.close()}catch{}throw G}})(),J.connectPromise}async function Ev6(X){let Y=qF.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{}qF.delete(X)}async function jv6(){console.log(`[StableStdio] Closing all connections (${qF.size})`);let X=Array.from(qF.keys()).map((Y)=>Ev6(Y));await Promise.allSettled(X),qF.clear()}var lJ1="__mesh_stable_stdio_shutdown_registered__";if(!globalThis[lJ1]){globalThis[lJ1]=!0;let X=async(Y)=>{await jv6(),process.exit(Y==="SIGINT"?130:143)};process.on("SIGINT",()=>X("SIGINT")),process.on("SIGTERM",()=>X("SIGTERM"))}ry();MW();PU();Iy();JP();vy();_y();D9();var Xb=new $9,s80=[404,401,406];async function pJ1(X,Y){return(await Y.storage.connections.findById(X))?.connection_url??null}function Cv6(X){let Y=X.toLowerCase();return Y.includes("resource_metadata=")||Y.includes("invalid_token")||Y.includes("oauth")}async function cJ1(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(Cv6(J))return J}}return null}catch{return null}}async function Yb(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(!s80.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"}}),!s80.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 Iv6(X,Y){let Q=await pJ1(X,Y);if(!Q)return null;let J;try{J=new URL(Q).origin}catch{return null}try{let G=await Yb(Q);if(G.ok){let W=await G.json();if(W.authorization_servers?.[0])return W.authorization_servers[0]}}catch{}return J}async function nJ1(X){let Y=X.get("meshContext");if(!Y)Y=await QK.create(X.req.raw),X.set("meshContext",Y);return Y}async function iJ1({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 cJ1(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"}})}var Qb=(X)=>{if(!(X.hostname==="localhost"||X.hostname==="127.0.0.1"))X.protocol="https:";return X},aJ1=async(X)=>{let Y=X.req.param("connectionId"),Q=await nJ1(X),J=await pJ1(Y,Q);if(!J)return X.json({error:"Connection not found"},404);let G=Qb(new URL(X.req.url)),W=`${G.origin}/mcp/${Y}`,Z=`${G.origin}/oauth-proxy/${Y}`;try{let $=await Yb(J);if(!$.ok&&s80.includes($.status)){if(await cJ1(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)}};Xb.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(X)=>aJ1(X));Xb.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(X)=>aJ1(X));async function t80(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}Xb.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(X)=>{let Y=X.req.param("connectionId"),Q=await nJ1(X),J=await Iv6(Y,Q);if(!J)return X.json({error:"Connection not found or no auth server"},404);try{let G=await t80(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(),$=`${Qb(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)}});var rJ1=Xb;function Rv6(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 Sv6(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 kv6(X,Y){if(!X&&!Y)return;if(!X)return Y;if(!Y)return X;return{...Y,...X}}function oJ1(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 vv6(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 vP(X){let{ctx:Y,enabled:Q}=X,J=X.organizationId??Y.organization?.id;if(!Q||!J)return;let G=Sv6(X.request.params.arguments),W=kv6(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:Y.virtualMcpId,properties:W})}function sJ1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G}=X;return async(W,Z)=>{let $=Date.now();try{let K=await Z(),H=Date.now()-$;return await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:oJ1(K),isError:Boolean(K.isError),errorMessage:Rv6(K),durationMs:H}),K}catch(K){let H=K,F=Date.now()-$;throw await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),K}}}function tJ1(X){let{ctx:Y,enabled:Q,connectionId:J,connectionTitle:G}=X;return async(W,Z)=>{let $=Date.now();try{let K=await Z(),H=Y.organization?.id;if(Q&&H){let F=K.clone();(async()=>{try{let{text:V,truncated:q}=await vv6(F,262144),z=Date.now()-$,D=F.headers.get("content-type")??"",N=V;if(D.includes("application/json"))try{N=V.length?JSON.parse(V):null}catch{N=V}let L=K.status>=400,w=L&&N&&typeof N==="object"&&"error"in N?N.error:void 0,C=typeof w==="string"&&w?w:L&&typeof N==="string"&&N.trim()?N.slice(0,500):L?`HTTP ${K.status} ${K.statusText}`.trim():q?"Response body truncated to 262144 bytes":void 0;await vP({ctx:Y,enabled:Q,organizationId:H,connectionId:J,connectionTitle:G,request:W,output:oJ1(N),isError:L,errorMessage:C,durationMs:z})}catch(V){let q=Date.now()-$;await vP({ctx:Y,enabled:Q,organizationId:H,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${V.message}`,durationMs:q})}})()}return K}catch(K){let H=K,F=Date.now()-$;throw await vP({ctx:Y,enabled:Q,connectionId:J,connectionTitle:G,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),K}}}var eJ1=new $9;function _v6(X,Y){return async(Q,J)=>{try{let G=Q.params.name;return await new iU(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,G,X.boundAuth,X.auth.user?.role,Y).check(G),await J()}catch(G){return{content:[{type:"text",text:`Authorization failed: ${G.message}`}],isError:!0}}}}function yv6(X,Y){return async(Q,J)=>{try{let G=Q.params.name;return await new iU(X.authInstance,X.auth.user?.id??X.auth.apiKey?.userId,G,X.boundAuth,X.auth.user?.role,Y).check(G),await J()}catch(G){return new Response(JSON.stringify({error:`Authorization failed: ${G.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function X51(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,$=xJ1(async()=>{let b=Y80(J.configuration_state,J.configuration_scopes),S=Y.auth.user?.id??Y.auth.apiKey?.userId;if(!S){console.error("User ID required to issue configuration token");return}try{W=await bJ1({sub:S,user:{id:S},metadata:{state:J.configuration_state??void 0,meshUrl:process.env.MESH_URL??Y.baseUrl,connectionId:G,organizationId:Y.organization?.id},permissions:b})}catch(g){console.error("Failed to issue configuration token:",g)}}),K=async()=>{await $();let b={...Z?{"x-caller-id":Z}:{}},S=null,g=new gW(Y.db,Y.vault),t=await g.get(G);if(t){let r=!!t.refreshToken&&!!t.tokenEndpoint;if(g.isExpired(t,r?300000:0))if(r){console.log(`[Proxy] Token expired for ${G}, attempting refresh`);let H0=await uJ1(t);if(H0.success&&H0.accessToken)await g.upsert({connectionId:G,accessToken:H0.accessToken,refreshToken:H0.refreshToken??t.refreshToken,scope:H0.scope??t.scope,expiresAt:H0.expiresIn?new Date(Date.now()+H0.expiresIn*1000):null,clientId:t.clientId,clientSecret:t.clientSecret,tokenEndpoint:t.tokenEndpoint}),S=H0.accessToken,console.log(`[Proxy] Token refreshed for ${G}`);else await g.delete(G),console.error(`[Proxy] Token refresh failed for ${G}: ${H0.error}`)}else await g.delete(G),console.log(`[Proxy] Token expired without refresh capability for ${G}`);else S=t.accessToken}if(!S&&J.connection_token)S=J.connection_token;if(S)b.Authorization=`Bearer ${S}`;if(W)b["x-mesh-token"]=W;return b},H=J.connection_type==="STDIO",F=g3(J.connection_headers)?J.connection_headers:null,V=!H?J.connection_headers:null,q=async()=>{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 dJ1({id:G,name:J.title,command:F.command,args:F.args,env:F.envVars,cwd:F.cwd})}case"HTTP":case"Websocket":{if(!J.connection_url)throw Error(`${J.connection_type} connection missing URL`);let b=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"}),S=await K();if(V?.headers)Object.assign(S,V.headers);let g=new fW(new URL(J.connection_url),{requestInit:{headers:S}});return await b.connect(g),b}case"SSE":{if(!J.connection_url)throw Error("SSE connection missing URL");let b=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"}),S=await K();if(V?.headers)Object.assign(S,V.headers);let g=new XF(new URL(J.connection_url),{requestInit:{headers:S}});return await b.connect(g),b}default:throw Error(`Unknown connection type: ${J.connection_type}`)}},z=Q?async(b,S)=>await S():_v6(Y,G),D=Q?async(b,S)=>await S():yv6(Y,G),N={enabled:qo0().enabled,connectionId:G,connectionTitle:J.title,ctx:Y},L=sJ1(N),w=tJ1(N),C=WP(L,z),T=WP(w,D),E=async(b)=>{return C(b,async()=>{let S=await q(),g=Date.now(),t={...b.params};if(t.arguments&&"_meta"in t.arguments){let{_meta:r,...Y0}=t.arguments;t.arguments=Y0}return await Y.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":G,"tool.name":b.params.name}},async(r)=>{try{let Y0=await S.callTool(t),H0=Date.now()-g;return Y.meter.createHistogram("connection.proxy.duration").record(H0,{"connection.id":G,"tool.name":b.params.name,status:"success"}),Y.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":G,"tool.name":b.params.name,status:"success"}),r.end(),Y0}catch(Y0){let H0=Y0,G0=Date.now()-g;throw Y.meter.createHistogram("connection.proxy.duration").record(G0,{"connection.id":G,"tool.name":b.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":G,"tool.name":b.params.name,error:H0.message}),r.recordException(H0),r.end(),Y0}finally{S.close().catch(console.error)}})})};return{fetch:async(b)=>{let S=new URL(b.url),g;try{g=await q()}catch(G0){let B0=J.connection_url?await iJ1({error:G0,reqUrl:S,connectionId:G,connectionUrl:J.connection_url,headers:await K()}):null;if(B0)return B0;throw G0}let r=g.getServerCapabilities()??{tools:{},resources:{},prompts:{}},Y0=new QF({name:"mcp-mesh",version:"1.0.0"},{capabilities:r}),H0=new JF({enableJsonResponse:b.headers.get("Accept")?.includes("application/json")??!1});if(await Y0.connect(H0),Y0.server.setRequestHandler(u$,()=>g.listTools()),Y0.server.setRequestHandler(Y7,E),r.resources)Y0.server.setRequestHandler(b$,()=>g.listResources()),Y0.server.setRequestHandler(h$,(G0)=>g.readResource(G0.params)),Y0.server.setRequestHandler(f$,()=>g.listResourceTemplates());if(r.prompts)Y0.server.setRequestHandler(x$,()=>g.listPrompts()),Y0.server.setRequestHandler(g$,(G0)=>g.getPrompt(G0.params));try{return await H0.handleRequest(b)}finally{try{await H0.close?.()}catch{}}},client:{callTool:(b)=>{return E({method:"tools/call",params:b})},listTools:async()=>{if(J.tools&&J.tools.length>0)return{tools:J.tools.map((S)=>({name:S.name,description:S.description,inputSchema:S.inputSchema,outputSchema:S.outputSchema}))};let b;try{return b=await q(),await b.listTools()}finally{b?.close().catch(console.error)}},listResources:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.resources)return{resources:[]};return await b.listResources()}finally{b?.close().catch(console.error)}},readResource:async(b)=>{let S;try{return S=await q(),await S.readResource(b)}finally{S?.close().catch(console.error)}},listResourceTemplates:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.resources)return{resourceTemplates:[]};return await b.listResourceTemplates()}finally{b?.close().catch(console.error)}},listPrompts:async()=>{let b;try{if(b=await q(),!b.getServerCapabilities()?.prompts)return{prompts:[]};return await b.listPrompts()}finally{b?.close().catch(console.error)}},getPrompt:async(b)=>{let S;try{if(S=await q(),!S.getServerCapabilities()?.prompts)throw Error("Prompts capability not supported");return await S.getPrompt(b)}finally{S?.close().catch(console.error)}}},callStreamableTool:async(b,S)=>{if(!J.connection_url)throw Error("Streamable tools require HTTP connection with URL");let g=J.connection_url,t={method:"tools/call",params:{name:b,arguments:S}};return T(t,async()=>{let r=await K();if(V?.headers)Object.assign(r,V.headers);let Y0=new URL(g);return Y0.pathname=Y0.pathname.replace(/\/$/,"")+`/call-tool/${t.params.name}`,await Y.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":G,"tool.name":t.params.name}},async(H0)=>{let G0=Date.now();try{let B0=await fetch(Y0.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(t.params.arguments),headers:{...r,"Content-Type":"application/json"}}),T0=Date.now()-G0;return Y.meter.createHistogram("connection.proxy.streamable.duration").record(T0,{"connection.id":G,"tool.name":t.params.name,status:B0.ok?"success":"error"}),Y.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":G,"tool.name":t.params.name,status:B0.ok?"success":"error"}),H0.end(),B0}catch(B0){let T0=B0,y0=Date.now()-G0;throw Y.meter.createHistogram("connection.proxy.streamable.duration").record(y0,{"connection.id":G,"tool.name":t.params.name,status:"error"}),Y.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":G,"tool.name":t.params.name,error:T0.message}),H0.recordException(T0),H0.end(),B0}})})}}}async function Y51(X,Y){return X51(X,Y,{superUser:!1})}async function Q51(X,Y){return X51(X,Y,{superUser:!0})}eJ1.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){let G=J;if(G.message.includes("not found"))return X.json({error:G.message},404);if(G.message.includes("does not belong to the active organization"))return X.json({error:"Connection not found"},404);if(G.message.includes("inactive"))return X.json({error:G.message},503);return X.json({error:"Internal server error",message:G.message},500)}});var J51=eJ1;R$();m3();class e80{db;constructor(X){this.db=X}async create(X){let Y=X.id??rY("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;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){let Q=this.db.selectFrom("threads").selectAll().where("organization_id","=",X).where("hidden","=",!1).orderBy("updated_at","desc"),J=this.db.selectFrom("threads").select((Z)=>Z.fn.count("id").as("count")).where("organization_id","=",X).where("hidden","=",!1);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{threads:G.map((Z)=>this.threadFromDbRow(Z)),total:Number(W?.count||0)}}async listByUserId(X){let Y=await this.db.selectFrom("threads").selectAll().where("created_by","=",X).orderBy("updated_at","desc").execute();return{threads:Y.map((Q)=>this.threadFromDbRow(Q)),total:Y.length}}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()}}}function bv6(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 fv6(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 hv6(X){let{auth:Y,headers:Q,role:J,permissions:G,userId:W}=X,Z=Y.api.hasPermission;return{hasPermission:async($)=>{if(J&&p80.includes(J))return!0;if(G)return fv6(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 xv6(X,Y,Q){if(p80.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 gv6(X,Y,Q,J=W51){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",()=>xv6(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",()=>fJ1(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}}var G51,QK={set:(X)=>{G51=X},create:async(X,Y)=>{return await G51(X,Y)}},W51={measure:async(X,Y)=>{return await Y()}};function Z51(X){let Y=new tw(X.encryption.key),Q={connections:new ew(X.db,Y),organizationSettings:new a80(X.db),monitoring:new i80(X.db,X.databaseType),virtualMcps:new c80(X.db),users:new r80(X.db),threads:new e80(X.db)};return async(J,G)=>{let W=G?.timings??W51,Z=J?.headers.get("x-caller-id")??void 0,$=J?await gv6(J,X.auth,X.db,W):{user:void 0},K=hv6({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 iU(X.auth,H.user?.id,void 0,K,$.role,w5.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,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:bv6(J?.headers.get("x-mesh-properties"))},eventBus:X.eventBus,createMCPProxy:async(N)=>{return await Y51(N,D)}};return D}}var _P={HEALTH:"/health",METRICS:"/metrics"},aU={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/"},uv6=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/;function $51(X){return X===_P.HEALTH||X===_P.METRICS||X.startsWith(aU.WELL_KNOWN)}function mv6(X){return X.startsWith(aU.API)}function lv6(X){return X==="/mcp"||X.startsWith(aU.MCP)}function dv6(X){return X.startsWith(aU.OAUTH_PROXY)}function pv6(X){return uv6.test(X)}function cv6(X){return X.startsWith(aU.ORG)}function K51(X){return mv6(X)||lv6(X)||dv6(X)||cv6(X)||$51(X)}function H51(X){return X==="/"||X.startsWith(aU.API_AUTH)||$51(X)||pv6(X)}class F51{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 T=Z.get(w);if(!T)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 E=T.filter??null,P=C.filter??null;if(E!==P)F.push({id:T.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 V51(X){return new F51(X)}function gX(X,Y,Q,J,G,W,Z,$){return gX.fromTZ(gX.tp(X,Y,Q,J,G,W,Z),$)}gX.fromTZISO=(X,Y,Q)=>gX.fromTZ(nv6(X,Y),Q);gX.fromTZ=function(X,Y){let Q=new Date(Date.UTC(X.y,X.m-1,X.d,X.h,X.i,X.s)),J=X90(X.tz,Q),G=new Date(Q.getTime()-J),W=X90(X.tz,G);if(W-J===0)return G;{let Z=new Date(Q.getTime()-W),$=X90(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}};gX.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}};gX.tp=(X,Y,Q,J,G,W,Z)=>({y:X,m:Y,d:Q,h:J,i:G,s:W,tz:Z});function X90(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 nv6(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("+")?gX.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):gX.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Y)}gX.minitz=gX;var Y90=32,bP=31|Y90,B51=[1,2,4,8,16],q51=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 xJ(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,bP),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]|Y90;else if(Y===bP)this.dayOfWeek[X]=bP;else if(Y<6&&Y>0)this.dayOfWeek[X]=this.dayOfWeek[X]|B51[Y-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Y}, Type: ${typeof Y}`)}},z51=[31,28,31,30,31,30,31,31,30,31,30,31],lW=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],xJ=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&bP&&B51[Z-1]&G)return!0;if(G&Y90){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=gX.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>z51[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=gX.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(gX.fromTZISO(Y,this.tz))}findNext(Y,Q,J,G){let W=this[Q],Z;J.lastDayOfMonth&&(this.month!==1?Z=z51[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&bP)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,lW[J][0],Y,lW[J][2]);if(G>1){let W=J+1;for(;W<lW.length;)this[lW[W][0]]=-lW[W][2],W++;if(G===3)return this[lW[J][1]]++,this[lW[J][0]]=-lW[J][2],this.apply(),this.recurse(Y,Q,0);if(this.apply())return this.recurse(Y,Q,J-1)}return J+=1,J>=lW.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)):gX.fromTZ(gX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}};function iv6(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 xJ(X.startAt,X.timezone)),X.stopAt&&(X.stopAt=new xJ(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 yP(X){return Object.prototype.toString.call(X)==="[object Function]"||typeof X=="function"||X instanceof Function}function av6(X){return yP(X)}function rv6(X){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(X):X&&typeof X.unref<"u"&&X.unref()}var U51=30000,Jb=[],Gb=class{name;options;_states;fn;constructor(X,Y,Q){let J,G;if(yP(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(yP(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=iv6(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 q51("* * * * *")},X&&(X instanceof Date||typeof X=="string"&&X.indexOf(":")>0)?this._states.once=new xJ(X,this.options.timezone||this.options.utcOffset):this._states.pattern=new q51(X,this.options.timezone),this.name){if(Jb.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");Jb.push(this)}return G!==void 0&&av6(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 xJ||X instanceof Date?Y.getTime()-X.getTime():Y.getTime()-new xJ(X).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let X=Jb.indexOf(this);X>=0&&Jb.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>U51&&(Y=U51),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Y),this._states.currentTimeout&&this.options.unref&&rv6(this._states.currentTimeout),this)}async _trigger(X){if(this._states.blocking=!0,this._states.currentRun=new xJ(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){yP(this.options.catch)&&this.options.catch(Y,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new xJ(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&&yP(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 xJ(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 xJ(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 xJ(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 xJ(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 Wb={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};ny();function D51(){return async(X,Y)=>{try{let Q=await QK.create(),J=await Q51(X,{...Q,auth:{...Q.auth,user:{id:"notify-worker"}}}),W=await r40.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}}}}function N51(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 ov6(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(N51(J.event))}else Y.set(G,{connectionId:J.subscription.connectionId,deliveryIds:[J.delivery.id],events:[N51(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 Q90{storage;notifySubscriber;running=!1;processing=!1;config;constructor(X,Y){this.storage=X;this.notifySubscriber=D51(),this.config={...Wb,...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=ov6(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 Gb(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)}}}class J90{storage;worker;notifyStrategy;running=!1;constructor(X){this.storage=X.storage,this.notifyStrategy=X.notifyStrategy,this.worker=new Q90(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 Gb(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}}function O51(...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 Zb{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 sv6}from"kysely";var rU="mesh_events";class G90{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===rU&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(Y)=>{console.error("[PostgresNotify] Connection error:",Y),this.cleanup()}),await this.listenClient.query(`LISTEN ${rU}`),console.log("[PostgresNotify] Started LISTEN on",rU)}catch(Y){console.error("[PostgresNotify] Failed to start LISTEN:",Y),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${rU}`),console.log("[PostgresNotify] Stopped LISTEN on",rU)}catch{}this.cleanup()}}async notify(X){try{await sv6`SELECT pg_notify(${rU}, ${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}}function L51(X,Y){let Q=V51(X.db),J=Y?.pollIntervalMs??Wb.pollIntervalMs,G=X.type==="postgres"?O51(new Zb(J),new G90(X.db,X.pool)):new Zb(J);return new J90({storage:Q,config:Y,notifyStrategy:G})}var w51={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 M51=new $9;M51.get("/config",async(X)=>{try{let Y=Object.keys(i8.socialProviders??{}),Q=Y.length>0,J=Y.map((Z)=>({name:Z,icon:w51[Z].icon})),G=process.env.UNSAFE_ALLOW_STDIO_TRANSPORT==="true",W={emailAndPassword:{enabled:i8.emailAndPassword?.enabled??!1},magicLink:{enabled:i8.magicLinkConfig?.enabled??!1},socialProviders:{enabled:Q,providers:J},sso:i8.ssoConfig?{enabled:!0,providerId:i8.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)}});var P51=M51;ry();var $b=new $9;$b.post("/connections/:connectionId/oauth-token",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);if(!await Y.storage.connections.findById(Q,Y.organization?.id))return X.json({error:"Connection not found"},404);let W=await X.req.json();if(!W.accessToken)return X.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let F;try{F=new URL(W.tokenEndpoint)}catch{return X.json({error:"tokenEndpoint must be a valid URL"},400)}if(F.protocol!=="http:"&&F.protocol!=="https:")return X.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,$=new gW(Y.db,Y.vault),K={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:Z,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:W.tokenEndpoint??null},H=await $.upsert(K);return X.json({success:!0,expiresAt:H.expiresAt})});$b.delete("/connections/:connectionId/oauth-token",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);return await new gW(Y.db,Y.vault).delete(Q),X.json({success:!0})});$b.get("/connections/:connectionId/oauth-token/status",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("connectionId");if(!(Y.auth.user?.id??Y.auth.apiKey?.userId??null))return X.json({error:"Unauthorized"},401);let G=new gW(Y.db,Y.vault),W=await G.get(Q);if(!W)return X.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=G.isExpired(W),$=!!W.refreshToken&&!!W.tokenEndpoint;return X.json({hasToken:!0,isExpired:Z,canRefresh:$,expiresAt:W.expiresAt})});var T51=$b;vy();_y();D9();D9();e0();HP();function A51(X){let Y=U.object({query:U.string().describe("Natural language search query (e.g., 'send email', 'create order')"),limit:U.number().default(10).describe("Maximum results to return (default: 10)")}),Q=KP(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: ${Q.length}.`,inputSchema:U.toJSONSchema(Y)},handler:async(G)=>{let W=Y.safeParse(G);if(!W.success)return dU({error:W.error.flatten()});let Z=xy(W.data.query,Q,W.data.limit);return my({query:W.data.query,results:Z.map(($)=>({name:$.name,description:$.description,connection:$._meta.connectionTitle})),totalAvailable:Q.length})}}}function E51(X){let Y=U.object({tools:U.array(U.string()).min(1).describe("Array of tool names to get detailed schemas for")}),Q=KP(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:U.toJSONSchema(Y)},handler:async(J)=>{let G=Y.safeParse(J);if(!G.success)return dU({error:G.error.flatten()});let W=gy(G.data.tools,Q);return my({tools:W.tools,notFound:W.notFound})}}}function tv6(X){let Y=KP(X.tools),Q=Y.map((W)=>W.name),J=new Map(Y.map((W)=>[W.name,W])),G=U.object({name:(Q.length>0?U.enum(Q):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")});return{tool:{name:"GATEWAY_CALL_TOOL",description:"Execute a tool by name. Use GATEWAY_DESCRIBE_TOOLS first to understand the input schema.",inputSchema:U.toJSONSchema(G)},handler:async(W)=>{let Z=G.safeParse(W);if(!Z.success)return dU({error:Z.error.flatten()});let{name:$,arguments:K}=Z.data;if(!J.has($))return{content:[{type:"text",text:`Tool not found: ${$}. Use GATEWAY_SEARCH_TOOLS to find available tools.`}],isError:!0};return X.callTool($,K)}}}function ev6(X){let Y=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).")}),Q=KP(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:U.toJSONSchema(Y)},handler:async(J)=>{let G=Y.safeParse(J);if(!G.success)return dU({error:G.error.flatten()});let W={...X,tools:Q},Z=await uy(G.data.code,W,G.data.timeoutMs);if(Z.error)return dU(Z);return my(Z)}}}function j51(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)}}}var X_6=(X)=>({tools:X.tools,callTool:(Y,Q)=>X.callTool(Y,Q)}),Y_6=(X)=>j51([A51(X),E51(X),ev6(X)]),Q_6=(X)=>j51([A51(X),E51(X),tv6(X)]);function C51(X){switch(X){case"smart_tool_selection":return Q_6;case"code_execution":return Y_6;case"passthrough":default:return X_6}}function I51(X){switch(X){case"smart_tool_selection":return"smart_tool_selection";case"code_execution":return"code_execution";case"passthrough":default:return"passthrough"}}class Kb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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})},$=C51(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"}})}}D9();function J_6(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 R51(X,Y){return Y.some((Q)=>J_6(X,Q))}class Hb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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)=>!R51(K.uri,G.selectedResources))}else if(!G.selectedResources||G.selectedResources.length===0)$=[];else $=$.filter((K)=>R51(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)}}D9();class Fb{proxies;cache;constructor(X){this.proxies=X;this.cache=$7(()=>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}}}class Vb{proxies;options;cache;constructor(X,Y){this.proxies=X;this.options=Y;this.cache=$7(()=>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)}}R$();var W90=new $9;async function G_6(X,Y){let Q=await GF.create(X.connections,Y),J=new Kb(Q,{selectionMode:X.toolSelectionMode,strategy:X.toolSelectionStrategy}),G=new Hb(Q,{selectionMode:X.toolSelectionMode}),W=new Fb(Q),Z=new Vb(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 W_6(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"),$=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")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 G_6(G,Y)}async function S51(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?Qe0(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(Q.virtualMcpId=Z.id,Z.status!=="active")return X.json({error:`Agent is inactive: ${Z.id}`},503);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=I51(K),F=await W_6(Z,Q,H),V=new QF({name:`mcp-virtual-mcp-${Z.title}`,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}}}),q=new JF({enableJsonResponse:X.req.header("Accept")?.includes("application/json")??!1});await V.connect(q),V.server.setRequestHandler(u$,async(z)=>{return F.client.listTools()}),V.server.setRequestHandler(Y7,async(z)=>{return await F.client.callTool(z.params)}),V.server.setRequestHandler(b$,async()=>{return F.client.listResources()}),V.server.setRequestHandler(h$,async(z)=>{return F.client.readResource(z.params)}),V.server.setRequestHandler(f$,async()=>{return F.client.listResourceTemplates()}),V.server.setRequestHandler(x$,async()=>{return F.client.listPrompts()}),V.server.setRequestHandler(g$,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)}}W90.all("/gateway/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return S51(X,Y)});W90.all("/virtual-mcp/:virtualMcpId?",async(X)=>{let Y=X.req.param("virtualMcpId");return S51(X,Y)});var k51=W90;d80();var v51=new $9;v51.all("/",async(X)=>{return l80(X.get("meshContext")).fetch(X.req.raw)});var _51=v51;s40();PU();JP();D9();var KG1="vercel.ai.error",Z_6=Symbol.for(KG1),y51,b51,D1=class X extends(b51=Error,y51=Z_6,b51){constructor({name:Y,message:Q,cause:J}){super(Q);this[y51]=!0,this.name=Y,this.cause=J}static isInstance(Y){return X.hasMarker(Y,KG1)}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}},HG1="AI_APICallError",FG1=`vercel.ai.error.${HG1}`,$_6=Symbol.for(FG1),f51,h51,a8=class extends(h51=D1,f51=$_6,h51){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:HG1,message:X,cause:Z});this[f51]=!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 D1.hasMarker(X,FG1)}},VG1="AI_EmptyResponseBodyError",qG1=`vercel.ai.error.${VG1}`,K_6=Symbol.for(qG1),x51,g51,zG1=class extends(g51=D1,x51=K_6,g51){constructor({message:X="Empty response body"}={}){super({name:VG1,message:X});this[x51]=!0}static isInstance(X){return D1.hasMarker(X,qG1)}};function y5(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 UG1="AI_InvalidArgumentError",BG1=`vercel.ai.error.${UG1}`,H_6=Symbol.for(BG1),u51,m51,DG1=class extends(m51=D1,u51=H_6,m51){constructor({message:X,cause:Y,argument:Q}){super({name:UG1,message:X,cause:Y});this[u51]=!0,this.argument=Q}static isInstance(X){return D1.hasMarker(X,BG1)}},NG1="AI_InvalidPromptError",OG1=`vercel.ai.error.${NG1}`,F_6=Symbol.for(OG1),l51,d51,zF=class extends(d51=D1,l51=F_6,d51){constructor({prompt:X,message:Y,cause:Q}){super({name:NG1,message:`Invalid prompt: ${Y}`,cause:Q});this[l51]=!0,this.prompt=X}static isInstance(X){return D1.hasMarker(X,OG1)}},LG1="AI_InvalidResponseDataError",wG1=`vercel.ai.error.${LG1}`,V_6=Symbol.for(wG1),p51,c51,$c4=class extends(c51=D1,p51=V_6,c51){constructor({data:X,message:Y=`Invalid response data: ${JSON.stringify(X)}.`}){super({name:LG1,message:Y});this[p51]=!0,this.data=X}static isInstance(X){return D1.hasMarker(X,wG1)}},MG1="AI_JSONParseError",PG1=`vercel.ai.error.${MG1}`,q_6=Symbol.for(PG1),n51,i51,fP=class extends(i51=D1,n51=q_6,i51){constructor({text:X,cause:Y}){super({name:MG1,message:`JSON parsing failed: Text: ${X}.
1052
1052
  Error message: ${y5(Y)}`,cause:Y});this[n51]=!0,this.text=X}static isInstance(X){return D1.hasMarker(X,PG1)}},TG1="AI_LoadAPIKeyError",AG1=`vercel.ai.error.${TG1}`,z_6=Symbol.for(AG1),a51,r51,Kc4=class extends(r51=D1,a51=z_6,r51){constructor({message:X}){super({name:TG1,message:X});this[a51]=!0}static isInstance(X){return D1.hasMarker(X,AG1)}},EG1="AI_LoadSettingError",jG1=`vercel.ai.error.${EG1}`,U_6=Symbol.for(jG1),o51,s51,Hc4=class extends(s51=D1,o51=U_6,s51){constructor({message:X}){super({name:EG1,message:X});this[o51]=!0}static isInstance(X){return D1.hasMarker(X,jG1)}},CG1="AI_NoContentGeneratedError",IG1=`vercel.ai.error.${CG1}`,B_6=Symbol.for(IG1),t51,e51,Fc4=class extends(e51=D1,t51=B_6,e51){constructor({message:X="No content generated."}={}){super({name:CG1,message:X});this[t51]=!0}static isInstance(X){return D1.hasMarker(X,IG1)}},RG1="AI_NoSuchModelError",SG1=`vercel.ai.error.${RG1}`,D_6=Symbol.for(SG1),XG1,YG1,Vc4=class extends(YG1=D1,XG1=D_6,YG1){constructor({errorName:X=RG1,modelId:Y,modelType:Q,message:J=`No such ${Q}: ${Y}`}){super({name:X,message:J});this[XG1]=!0,this.modelId=Y,this.modelType=Q}static isInstance(X){return D1.hasMarker(X,SG1)}},kG1="AI_TooManyEmbeddingValuesForCallError",vG1=`vercel.ai.error.${kG1}`,N_6=Symbol.for(vG1),QG1,JG1,qc4=class extends(JG1=D1,QG1=N_6,JG1){constructor(X){super({name:kG1,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[QG1]=!0,this.provider=X.provider,this.modelId=X.modelId,this.maxEmbeddingsPerCall=X.maxEmbeddingsPerCall,this.values=X.values}static isInstance(X){return D1.hasMarker(X,vG1)}},_G1="AI_TypeValidationError",yG1=`vercel.ai.error.${_G1}`,O_6=Symbol.for(yG1),GG1,WG1,b5=class X extends(WG1=D1,GG1=O_6,WG1){constructor({value:Y,cause:Q}){super({name:_G1,message:`Type validation failed: Value: ${JSON.stringify(Y)}.
1053
1053
  Error message: ${y5(Q)}`,cause:Q});this[GG1]=!0,this.value=Y}static isInstance(Y){return D1.hasMarker(Y,yG1)}static wrap({value:Y,cause:Q}){return X.isInstance(Q)&&Q.value===Y?Q:new X({value:Y,cause:Q})}},bG1="AI_UnsupportedFunctionalityError",fG1=`vercel.ai.error.${bG1}`,L_6=Symbol.for(fG1),ZG1,$G1,hG1=class extends($G1=D1,ZG1=L_6,$G1){constructor({functionality:X,message:Y=`'${X}' functionality not supported.`}){super({name:bG1,message:Y});this[ZG1]=!0,this.functionality=X}static isInstance(X){return D1.hasMarker(X,fG1)}};a6();v$();v$();v$();H40();function BF(...X){return X.reduce((Y,Q)=>({...Y,...Q!=null?Q:{}}),{})}async function pG1(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(xG1());return}let W=setTimeout(()=>{Z(),J()},X),Z=()=>{clearTimeout(W),Q==null||Q.removeEventListener("abort",$)},$=()=>{Z(),G(xG1())};Q==null||Q.addEventListener("abort",$)})}function xG1(){return new DOMException("Delay was aborted","AbortError")}var DF=class{constructor(){this.status={type:"pending"},this._resolve=void 0,this._reject=void 0}get promise(){if(this._promise)return this._promise;return this._promise=new Promise((X,Y)=>{if(this.status.type==="resolved")X(this.status.value);else if(this.status.type==="rejected")Y(this.status.error);this._resolve=X,this._reject=Y}),this._promise}resolve(X){var Y;if(this.status={type:"resolved",value:X},this._promise)(Y=this._resolve)==null||Y.call(this,X)}reject(X){var Y;if(this.status={type:"rejected",error:X},this._promise)(Y=this._reject)==null||Y.call(this,X)}isResolved(){return this.status.type==="resolved"}isRejected(){return this.status.type==="rejected"}isPending(){return this.status.type==="pending"}};function hP(X){return Object.fromEntries([...X.headers])}var{btoa:w_6,atob:M_6}=globalThis;function oU(X){let Y=X.replace(/-/g,"+").replace(/_/g,"/"),Q=M_6(Y);return Uint8Array.from(Q,(J)=>J.codePointAt(0))}function NF(X){let Y="";for(let Q=0;Q<X.length;Q++)Y+=String.fromCodePoint(X[Q]);return w_6(Y)}var cG1="AI_DownloadError",nG1=`vercel.ai.error.${cG1}`,P_6=Symbol.for(nG1),gG1,uG1,qb=class extends(uG1=D1,gG1=P_6,uG1){constructor({url:X,statusCode:Y,statusText:Q,cause:J,message:G=J==null?`Failed to download ${X}: ${Y} ${Q}`:`Failed to download ${X}: ${J}`}){super({name:cG1,message:G,cause:J});this[gG1]=!0,this.url=X,this.statusCode=Y,this.statusText=Q}static isInstance(X){return D1.hasMarker(X,nG1)}};var K7=({prefix:X,size:Y=16,alphabet:Q="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",separator:J="-"}={})=>{let G=()=>{let W=Q.length,Z=Array(Y);for(let $=0;$<Y;$++)Z[$]=Q[Math.random()*W|0];return Z.join("")};if(X==null)return G;if(Q.includes(J))throw new DG1({argument:"separator",message:`The separator "${J}" must not be part of the alphabet "${Q}".`});return()=>`${X}${J}${G()}`},T_6=K7();function xP(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 dW(X){return(X instanceof Error||X instanceof DOMException)&&(X.name==="AbortError"||X.name==="ResponseAborted"||X.name==="TimeoutError")}var A_6=["fetch failed","failed to fetch"];function iG1({error:X,url:Y,requestBodyValues:Q}){if(dW(X))return X;if(X instanceof TypeError&&A_6.includes(X.message.toLowerCase())){let J=X.cause;if(J!=null)return new a8({message:`Cannot connect to API: ${J.message}`,cause:J,url:Y,requestBodyValues:Q,isRetryable:!0})}return X}function zb(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 E_6(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 JK(X,...Y){let Q=new Headers(E_6(X)),J=Q.get("user-agent")||"";return Q.set("user-agent",[J,...Y].filter(Boolean).join(" ")),Object.fromEntries(Q.entries())}var aG1="4.0.8",j_6=()=>globalThis.fetch,F90=async({url:X,headers:Y={},successfulResponseHandler:Q,failedResponseHandler:J,abortSignal:G,fetch:W=j_6()})=>{try{let Z=await W(X,{method:"GET",headers:JK(Y,`ai-sdk/provider-utils/${aG1}`,zb()),signal:G}),$=hP(Z);if(!Z.ok){let K;try{K=await J({response:Z,url:X,requestBodyValues:{}})}catch(H){if(dW(H)||a8.isInstance(H))throw H;throw new a8({message:"Failed to process error response",cause:H,statusCode:Z.status,url:X,responseHeaders:$,requestBodyValues:{}})}throw K.value}try{return await Q({response:Z,url:X,requestBodyValues:{}})}catch(K){if(K instanceof Error){if(dW(K)||a8.isInstance(K))throw K}throw new a8({message:"Failed to process successful response",cause:K,statusCode:Z.status,url:X,responseHeaders:$,requestBodyValues:{}})}}catch(Z){throw iG1({error:Z,url:X,requestBodyValues:{}})}};function rG1(X){return X!=null}function oG1({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 gP({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}var C_6=/"__proto__"\s*:/,I_6=/"constructor"\s*:/;function mG1(X){let Y=JSON.parse(X);if(Y===null||typeof Y!=="object")return Y;if(C_6.test(X)===!1&&I_6.test(X)===!1)return Y;return R_6(Y)}function R_6(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 sG1(X){let{stackTraceLimit:Y}=Error;try{Error.stackTraceLimit=0}catch(Q){return mG1(X)}try{return mG1(X)}finally{Error.stackTraceLimit=Y}}function V90(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]=UF(Q[J])}if(X.items!=null)X.items=Array.isArray(X.items)?X.items.map(UF):UF(X.items);if(X.anyOf!=null)X.anyOf=X.anyOf.map(UF);if(X.allOf!=null)X.allOf=X.allOf.map(UF);if(X.oneOf!=null)X.oneOf=X.oneOf.map(UF);let{definitions:Y}=X;if(Y!=null)for(let Q of Object.keys(Y))Y[Q]=UF(Y[Q]);return X}function UF(X){if(typeof X==="boolean")return X;return V90(X)}var S_6=Symbol("Let zodToJsonSchema decide on which parser to use"),lG1={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",strictUnions:!1,definitions:{},errorMessages:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref"},k_6=(X)=>typeof X==="string"?{...lG1,name:X}:{...lG1,...X};function hQ(){return{}}function v_6(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)!==A0.ZodAny)W.items=_4(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 __6(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 y_6(){return{type:"boolean"}}function tG1(X,Y){return _4(X.type._def,Y)}var b_6=(X,Y)=>{return _4(X.innerType._def,Y)};function eG1(X,Y,Q){let J=Q!=null?Q:Y.dateStrategy;if(Array.isArray(J))return{anyOf:J.map((G,W)=>eG1(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 f_6(X)}}var f_6=(X)=>{let Y={type:"integer",format:"unix-time"};for(let Q of X.checks)switch(Q.kind){case"min":Y.minimum=Q.value;break;case"max":Y.maximum=Q.value;break}return Y};function h_6(X,Y){return{..._4(X.innerType._def,Y),default:X.defaultValue()}}function x_6(X,Y){return Y.effectStrategy==="input"?_4(X.schema._def,Y):hQ()}function g_6(X){return{type:"string",enum:Array.from(X.values)}}var u_6=(X)=>{if("type"in X&&X.type==="string")return!1;return"allOf"in X};function m_6(X,Y){let Q=[_4(X.left._def,{...Y,currentPath:[...Y.currentPath,"allOf","0"]}),_4(X.right._def,{...Y,currentPath:[...Y.currentPath,"allOf","1"]})].filter((G)=>!!G),J=[];return Q.forEach((G)=>{if(u_6(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 l_6(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}}var Z90=void 0,f5={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(Z90===void 0)Z90=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return Z90},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function X71(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":h5(Q,"email",J.message,Y);break;case"format:idn-email":h5(Q,"idn-email",J.message,Y);break;case"pattern:zod":LY(Q,f5.email,J.message,Y);break}break;case"url":h5(Q,"uri",J.message,Y);break;case"uuid":h5(Q,"uuid",J.message,Y);break;case"regex":LY(Q,J.regex,J.message,Y);break;case"cuid":LY(Q,f5.cuid,J.message,Y);break;case"cuid2":LY(Q,f5.cuid2,J.message,Y);break;case"startsWith":LY(Q,RegExp(`^${$90(J.value,Y)}`),J.message,Y);break;case"endsWith":LY(Q,RegExp(`${$90(J.value,Y)}$`),J.message,Y);break;case"datetime":h5(Q,"date-time",J.message,Y);break;case"date":h5(Q,"date",J.message,Y);break;case"time":h5(Q,"time",J.message,Y);break;case"duration":h5(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":{LY(Q,RegExp($90(J.value,Y)),J.message,Y);break}case"ip":{if(J.version!=="v6")h5(Q,"ipv4",J.message,Y);if(J.version!=="v4")h5(Q,"ipv6",J.message,Y);break}case"base64url":LY(Q,f5.base64url,J.message,Y);break;case"jwt":LY(Q,f5.jwt,J.message,Y);break;case"cidr":{if(J.version!=="v6")LY(Q,f5.ipv4Cidr,J.message,Y);if(J.version!=="v4")LY(Q,f5.ipv6Cidr,J.message,Y);break}case"emoji":LY(Q,f5.emoji(),J.message,Y);break;case"ulid":{LY(Q,f5.ulid,J.message,Y);break}case"base64":{switch(Y.base64Strategy){case"format:binary":{h5(Q,"binary",J.message,Y);break}case"contentEncoding:base64":{Q.contentEncoding="base64";break}case"pattern:zod":{LY(Q,f5.base64,J.message,Y);break}}break}case"nanoid":LY(Q,f5.nanoid,J.message,Y);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return Q}function $90(X,Y){return Y.patternStrategy==="escape"?p_6(X):X}var d_6=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function p_6(X){let Y="";for(let Q=0;Q<X.length;Q++){if(!d_6.has(X[Q]))Y+="\\";Y+=X[Q]}return Y}function h5(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 LY(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:dG1(Y,J),...Q&&J.errorMessages&&{errorMessage:{pattern:Q}}})}else X.pattern=dG1(Y,J)}function dG1(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
1054
1054
  ]))`;continue}else if(G[H]==="$"){W+=`($|(?=[\r
@@ -1112,4 +1112,4 @@ Follow this state machine when handling user requests:
1112
1112
  - You have access to the tools exposed through the selected agent/gateway
1113
1113
  - Connections may expose resources that users can browse and edit
1114
1114
  - When users mention "agents", they are typically referring to gateways`},px6=U.object({messages:U.any(),model:U.object({id:U.string(),connectionId:U.string(),provider:U.enum(["openai","anthropic","google","xai","deepseek","openrouter","openai-compatible"]).optional().nullable(),limits:U.object({contextWindow:U.number().optional(),maxOutputTokens:U.number().optional()}).optional()}).loose(),gateway:U.object({id:U.string().nullable()}).loose(),stream:U.boolean().optional(),temperature:U.number().optional(),maxWindowSize:U.number().optional(),thread_id:U.string().optional()}),hZ1=new $9;function cx6(X,Y){if(!X.organization)throw Error("Organization context is required");if((X.organization.slug??X.organization.id)!==Y)throw Error("Organization mismatch");return X.organization}async function nx6(X,Y,Q){let J=await X.storage.connections.findById(Q);if(!J)return null;if(J.organization_id!==Y)throw Error("Connection does not belong to organization");if(J.status!=="active")throw Error(`Connection is ${J.status.toUpperCase()}, not active`);return J}var ix6=async(X,Y)=>{let J=(await X.listTools()).tools.map((G)=>{let{name:W,title:Z,description:$,inputSchema:K,outputSchema:H}=G;return[W,Ub({title:Z??W,description:$,inputSchema:GK(K),outputSchema:H?GK(H):void 0,execute:(F,V)=>{let q=Y&&Object.keys(Y).length>0?{...F,_meta:{properties:Y}}:F;return X.callTool({name:G.name,arguments:q},X7,{signal:V.abortSignal})},toModelOutput:({output:F})=>{if(F.isError)return{type:"error-text",value:F.content.map((q)=>q.type==="text"?q.text:null).filter(Boolean).join(`
1115
- `)||"Unknown error"};if("structuredContent"in F)return{type:"json",value:F.structuredContent};return{type:"content",value:F.content}}})]});return Object.fromEntries(J)};function ax6(X,Y,Q){let J=Qb(new URL(X.url)),G=`${J.protocol}//${J.host}`,W=new Headers([["x-org-id",Y]]),Z=["cookie","authorization"];for(let H of Z)if(X.headers.has(H))W.set(H,X.headers.get(H));let $=Q?`/mcp/virtual-mcp/${Q}`:"/mcp/virtual-mcp",K=new URL($,G);return K.searchParams.set("mode","code_execution"),new fW(K,{requestInit:{headers:W}})}hZ1.post("/:org/models/stream",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("org"),J=null;try{let G=cx6(Y,Q),W=await X.req.json(),Z=px6.safeParse(W);if(!Z.success)return X.json({error:"Invalid request body",details:Z.error.issues},400);let $=Z.data,{model:K,gateway:H,messages:F,temperature:V,maxWindowSize:q=lx6,thread_id:z}=$,D=K.limits?.maxOutputTokens??mx6,N=ax6(X.req.raw,G.id,H.id),L=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"}),[w,C]=await Promise.all([_Z1(F,{ignoreIncompleteToolCalls:!0}),nx6(Y,G.id,K.connectionId),L.connect(N)]);if(!C)return X.json({error:`Model connection not found: ${K.connectionId}`},404);J=L;let T=[dx6,...w.filter((a)=>a.role==="system")],E=w.filter((a)=>a.role!=="system"),P=yZ1({messages:E,reasoning:"before-last-message",emptyMessages:"remove",toolCalls:"none"}).slice(-q),j=z?{thread_id:z}:void 0,[R,k]=await Promise.all([Y.createMCPProxy(C),ix6(L,j)]),_=MQ1.forClient(R),y=fZ1(_).languageModel(K.id);return vZ1({model:y,system:T,messages:P,tools:k,temperature:V,maxOutputTokens:D,abortSignal:X.req.raw.signal,stopWhen:m90(30),onError:async(a)=>{console.error("[models:stream] Error",a),await L.close().catch(console.error)},onFinish:async()=>{await L.close().catch(console.error)}}).toUIMessageStreamResponse({messageMetadata:({part:a})=>{if(a.type==="start")return{gateway:H,model:K,created_at:new Date,thread_id:z};if(a.type==="reasoning-start")return{reasoning_start_at:new Date};if(a.type==="reasoning-end")return{reasoning_end_at:new Date};if(a.type==="finish-step")return{usage:{...a.usage,providerMetadata:a.providerMetadata}};return{}}})}catch(G){let W=G;if(await J?.close().catch(console.error),W.name==="AbortError")return console.warn("[models:stream] Aborted",JSON.stringify({org:Q})),X.json({error:"Request aborted"},400);return console.error("[models:stream] Failed",JSON.stringify({org:Q,error:W.message,stack:W.stack})),X.json({error:W.message},500)}});var xZ1=hZ1;var gZ1=new $9;gZ1.get("/",(X)=>{let Y={theme:zo0()};return X.json({success:!0,config:Y})});var uZ1=gZ1;R$();var Ab=null;async function rx6(X,Y){let J=(await X.storage.connections.list(Y)).find((G)=>G.connection_url?.startsWith(st0));if(!J?.configuration_state)return null;return J.configuration_state.project_locator}function ox6(X){let Y=new URLSearchParams;if(X){let[Q,J]=X.split("/");if(Q)Y.set("workspace_hint",Q);if(J)Y.set("project_hint",J)}else Y.set("auto_personal","true");return Y}var sx6=new mZ1.PrometheusSerializer,tx6=()=>we(mW),ex6=()=>Le(mW);function lZ1(X={}){let Y=X.database??hv();if(Ab&&Ab.isRunning())console.log("[EventBus] Stopping previous worker (HMR cleanup)"),Promise.resolve(Ab.stop()).catch((Z)=>{console.error("[EventBus] Error stopping previous worker:",Z)});let Q;if(X.eventBus)Q=X.eventBus;else Q=L51(Y);Ab=Q;let J=new $9;J.use("*",il({enabled:(Z)=>S_0(Z,"debug")==="1"})),J.use("/*",C_0({origin:(Z)=>{if(Z.includes("localhost")||Z.includes("127.0.0.1"))return Z;return Z},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]})),J.use("*",j_0()),J.use("*",async(Z,$)=>{if(await $(),Z.res.status>=500){let H=await Z.res.clone().text();console.error(`[5xx Response] ${Z.req.method} ${Z.req.path} - ${Z.res.status}:`,H)}}),J.get(_P.HEALTH,(Z)=>{return Z.json({status:"ok",timestamp:new Date().toISOString(),version:"1.0.0"})}),J.get(_P.METRICS,async(Z)=>{try{let $=await hl.collect(),K=sx6.serialize($.resourceMetrics);return Z.text(K,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch($){return console.error("Failed to collect metrics:",$),Z.text("# Error collecting metrics",500)}}),J.route("/api/config",uZ1),J.route("/api/auth/custom",P51),J.all("/api/auth/*",async(Z)=>{return await mW.handler(Z.req.raw)}),J.route("/",rJ1),J.all("/oauth-proxy/:connectionId/*",async(Z)=>{let $=Z.req.param("connectionId"),K=Z.req.path.split("/").filter(Boolean),H=K[K.length-1],F=Z.get("meshContext");if(!F)F=await QK.create(Z.req.raw),Z.set("meshContext",F);let V=await F.storage.connections.findById($);if(!V?.connection_url)return Z.json({error:"Connection not found"},404);let q=await Yb(V.connection_url),z,D=new URL(V.connection_url);if(q.ok)z=(await q.json()).authorization_servers?.[0];if(!z)z=D.origin;let N=await t80(z);if(!N.ok)return Z.json({error:"Failed to get auth server metadata"},502);let L=await N.json(),w;if(H==="authorize")w=L.authorization_endpoint;else if(H==="token")w=L.token_endpoint;else if(H==="register")w=L.registration_endpoint;if(!w)return Z.json({error:`Unknown OAuth endpoint: ${H}`},404);let C=new URL(w),T=new URL(Z.req.url);if(C.search=T.search,H==="authorize"){if(C.searchParams.has("resource"))C.searchParams.set("resource",V.connection_url);if(tt0(V.connection_url))try{let f=await rx6(F,V.organization_id),a=ox6(f);for(let[b,S]of a)C.searchParams.set(b,S)}catch(f){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",f)}return Z.redirect(C.toString(),302)}let E={Accept:Z.req.header("Accept")||"application/json"},P=Z.req.header("Content-Type");if(P)E["Content-Type"]=P;let j=Z.req.header("Authorization");if(j)E.Authorization=j;let R;if(Z.req.method!=="GET"&&Z.req.method!=="HEAD")if(H==="token"&&P?.includes("application/x-www-form-urlencoded")){let f=await Z.req.formData();if(f.has("resource"))f.set("resource",V.connection_url);let a=new URLSearchParams;for(let[b,S]of f.entries())a.append(b,S.toString());R=a.toString()}else R=Z.req.raw.body??void 0;let k=await fetch(C.toString(),{method:Z.req.method,headers:E,body:R,duplex:"half",redirect:"manual"}),_=new Headers,y=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[f,a]of k.headers.entries())if(!y.includes(f.toLowerCase()))_.set(f,a);return new Response(k.body,{status:k.status,statusText:k.statusText,headers:_})}),J.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",async(Z)=>{let K=await tx6()(Z.req.raw),H=await K.json();return Response.json(H,K)});let G=async(Z)=>{let K=await ex6()(Z.req.raw),H=await K.json();return Response.json(H,K)};J.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",G),QK.set(Z51({db:Y.db,databaseType:Y.type,auth:mW,encryption:{key:process.env.ENCRYPTION_KEY||""},observability:{tracer:sD,meter:Wj},eventBus:Q})),Promise.resolve(Q.start()).then(()=>{console.log("[EventBus] Worker started")}),J.use("*",async(Z,$)=>{if(H51(Z.req.path))return $();let K={measure:async(F,V)=>{_V(Z,F);try{return await V()}finally{WH(Z,F)}}},H=await QK.create(Z.req.raw,{timings:K});return Z.set("meshContext",H),$()}),J.get("/api/tools/management",(Z)=>{return Z.json({tools:rl,grouped:GN()})}),J.use("/mcp/*",async(Z,$)=>{_V(Z,"mcp");try{return await $()}finally{WH(Z,"mcp")}});let W=async(Z,$)=>{let K=Z.var.meshContext;if(!K.auth.user?.id&&!K.auth.apiKey?.id){let H=new URL(Z.req.url);return Z.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${H.origin}${H.pathname}/.well-known/oauth-protected-resource"`}})}return await $()};return J.use("/mcp/:connectionId?",W),J.use("/mcp/gateway/:virtualMcpId?",W),J.use("/mcp/virtual-mcp/:virtualMcpId?",W),J.route("/mcp",k51),J.route("/mcp",_51),J.route("/mcp",J51),J.use("/api/:org/models/*",async(Z,$)=>{_V(Z,"llm_models");try{return await $()}finally{WH(Z,"llm_models")}}),J.route("/api",xZ1),J.post("/org/:organizationId/events/:type",async(Z)=>{let $=Z.req.param("organizationId");return await Z.var.meshContext.eventBus.publish($,I$.SELF($),{data:await Z.req.json(),type:`public:${Z.req.param("type")}`,subject:Z.req.query("subject"),deliverAt:Z.req.query("deliverAt"),cron:Z.req.query("cron")}),Z.json({success:!0})}),J.route("/api",T51),J.notFound((Z)=>{return Z.json({error:"Not Found",path:Z.req.path},404)}),J.onError((Z,$)=>{console.error("Server error :",Z);let K=Z instanceof Error?Z.message:"Unknown error";return $.json({error:"Internal Server Error",message:K},500)}),J}import Xg6 from"v8";function dZ1(X){let{port:Y,hostname:Q="0.0.0.0"}=X;return Bun.serve({port:Y,hostname:Q,fetch:async(J)=>{let G=new URL(J.url);if(G.pathname==="/health")return Response.json({status:"ok",uptime:process.uptime()});if(G.pathname==="/memory")return Response.json({...process.memoryUsage(),uptimeSeconds:process.uptime()});if(G.pathname==="/heap-snapshot"){let W=Date.now();try{let Z=Xg6.writeHeapSnapshot(),$=Bun.file(Z);return new Response($,{headers:{"Content-Type":"application/octet-stream","Content-Disposition":`attachment; filename="heap-${W}.heapsnapshot"`}})}catch(Z){return Response.json({error:String(Z)},{status:500})}}if(G.pathname==="/gc"){if(typeof Bun.gc==="function")return Bun.gc(!0),Response.json({status:"gc triggered"});return Response.json({status:"gc not available"},{status:501})}return Response.json({error:"Not found"},{status:404})}})}var cZ1=parseInt(process.env.PORT||"3000",10),pZ1=parseInt(process.env.DEBUG_PORT||"9090",10),Yg6=process.env.ENABLE_DEBUG_SERVER==="true",GB="\x1B[0m",Qg6="\x1B[1m",nZ1="\x1B[2m",Jg6="\x1B[32m",iZ1="\x1B[36m",aZ1="\x1B[4m",Gg6=`http://localhost:${cZ1}`,Wg6=Q_0({clientDir:Y_0(import.meta.url,"../client"),isServerPath:K51}),Zg6=lZ1();console.log("");console.log(`${Jg6}\u2713${GB} ${Qg6}Ready${GB}`);console.log("");console.log(` ${nZ1}Open in browser:${GB} ${iZ1}${aZ1}${Gg6}${GB}`);console.log("");Bun.serve({idleTimeout:0,port:cZ1,hostname:"0.0.0.0",fetch:async(X)=>{return await Wg6(X)??Zg6.fetch(X)},development:!1});if(Yg6)dZ1({port:pZ1}),console.log(` ${nZ1}Debug server:${GB} ${iZ1}${aZ1}http://localhost:${pZ1}${GB}`),console.log("");
1115
+ `)||"Unknown error"};if("structuredContent"in F)return{type:"json",value:F.structuredContent};return{type:"content",value:F.content}}})]});return Object.fromEntries(J)};function ax6(X,Y,Q){let J=Qb(new URL(X.url)),G=`${J.protocol}//${J.host}`,W=new Headers([["x-org-id",Y]]),Z=["cookie","authorization"];for(let H of Z)if(X.headers.has(H))W.set(H,X.headers.get(H));let $=Q?`/mcp/virtual-mcp/${Q}`:"/mcp/virtual-mcp",K=new URL($,G);return K.searchParams.set("mode","code_execution"),new fW(K,{requestInit:{headers:W}})}hZ1.post("/:org/models/stream",async(X)=>{let Y=X.get("meshContext"),Q=X.req.param("org"),J=null;try{let G=cx6(Y,Q),W=await X.req.json(),Z=px6.safeParse(W);if(!Z.success)return X.json({error:"Invalid request body",details:Z.error.issues},400);let $=Z.data,{model:K,gateway:H,messages:F,temperature:V,maxWindowSize:q=lx6,thread_id:z}=$,D=K.limits?.maxOutputTokens??mx6,N=ax6(X.req.raw,G.id,H.id),L=new YQ({name:"mcp-mesh-proxy",version:"1.0.0"});J=L;let[w,C]=await Promise.all([_Z1(F,{ignoreIncompleteToolCalls:!0}),nx6(Y,G.id,K.connectionId),L.connect(N)]);if(!C)return await L.close().catch(console.error),X.json({error:`Model connection not found: ${K.connectionId}`},404);let T=[dx6,...w.filter((a)=>a.role==="system")],E=w.filter((a)=>a.role!=="system"),P=yZ1({messages:E,reasoning:"before-last-message",emptyMessages:"remove",toolCalls:"none"}).slice(-q),j=z?{thread_id:z}:void 0,[R,k]=await Promise.all([Y.createMCPProxy(C),ix6(L,j)]),_=MQ1.forClient(R),y=fZ1(_).languageModel(K.id);return vZ1({model:y,system:T,messages:P,tools:k,temperature:V,maxOutputTokens:D,abortSignal:X.req.raw.signal,stopWhen:m90(30),onError:async(a)=>{console.error("[models:stream] Error",a),await L.close().catch(console.error)},onFinish:async()=>{await L.close().catch(console.error)}}).toUIMessageStreamResponse({messageMetadata:({part:a})=>{if(a.type==="start")return{gateway:H,model:K,created_at:new Date,thread_id:z};if(a.type==="reasoning-start")return{reasoning_start_at:new Date};if(a.type==="reasoning-end")return{reasoning_end_at:new Date};if(a.type==="finish-step")return{usage:{...a.usage,providerMetadata:a.providerMetadata}};return{}}})}catch(G){let W=G;if(await J?.close().catch(console.error),W.name==="AbortError")return console.warn("[models:stream] Aborted",JSON.stringify({org:Q})),X.json({error:"Request aborted"},400);return console.error("[models:stream] Failed",JSON.stringify({org:Q,error:W.message,stack:W.stack})),X.json({error:W.message},500)}});var xZ1=hZ1;var gZ1=new $9;gZ1.get("/",(X)=>{let Y={theme:zo0()};return X.json({success:!0,config:Y})});var uZ1=gZ1;R$();var Ab=null;async function rx6(X,Y){let J=(await X.storage.connections.list(Y)).find((G)=>G.connection_url?.startsWith(st0));if(!J?.configuration_state)return null;return J.configuration_state.project_locator}function ox6(X){let Y=new URLSearchParams;if(X){let[Q,J]=X.split("/");if(Q)Y.set("workspace_hint",Q);if(J)Y.set("project_hint",J)}else Y.set("auto_personal","true");return Y}var sx6=new mZ1.PrometheusSerializer,tx6=()=>we(mW),ex6=()=>Le(mW);function lZ1(X={}){let Y=X.database??hv();if(Ab&&Ab.isRunning())console.log("[EventBus] Stopping previous worker (HMR cleanup)"),Promise.resolve(Ab.stop()).catch((Z)=>{console.error("[EventBus] Error stopping previous worker:",Z)});let Q;if(X.eventBus)Q=X.eventBus;else Q=L51(Y);Ab=Q;let J=new $9;J.use("*",il({enabled:(Z)=>S_0(Z,"debug")==="1"})),J.use("/*",C_0({origin:(Z)=>{if(Z.includes("localhost")||Z.includes("127.0.0.1"))return Z;return Z},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]})),J.use("*",j_0()),J.use("*",async(Z,$)=>{if(await $(),Z.res.status>=500){let H=await Z.res.clone().text();console.error(`[5xx Response] ${Z.req.method} ${Z.req.path} - ${Z.res.status}:`,H)}}),J.get(_P.HEALTH,(Z)=>{return Z.json({status:"ok",timestamp:new Date().toISOString(),version:"1.0.0"})}),J.get(_P.METRICS,async(Z)=>{try{let $=await hl.collect(),K=sx6.serialize($.resourceMetrics);return Z.text(K,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch($){return console.error("Failed to collect metrics:",$),Z.text("# Error collecting metrics",500)}}),J.route("/api/config",uZ1),J.route("/api/auth/custom",P51),J.all("/api/auth/*",async(Z)=>{return await mW.handler(Z.req.raw)}),J.route("/",rJ1),J.all("/oauth-proxy/:connectionId/*",async(Z)=>{let $=Z.req.param("connectionId"),K=Z.req.path.split("/").filter(Boolean),H=K[K.length-1],F=Z.get("meshContext");if(!F)F=await QK.create(Z.req.raw),Z.set("meshContext",F);let V=await F.storage.connections.findById($);if(!V?.connection_url)return Z.json({error:"Connection not found"},404);let q=await Yb(V.connection_url),z,D=new URL(V.connection_url);if(q.ok)z=(await q.json()).authorization_servers?.[0];if(!z)z=D.origin;let N=await t80(z);if(!N.ok)return Z.json({error:"Failed to get auth server metadata"},502);let L=await N.json(),w;if(H==="authorize")w=L.authorization_endpoint;else if(H==="token")w=L.token_endpoint;else if(H==="register")w=L.registration_endpoint;if(!w)return Z.json({error:`Unknown OAuth endpoint: ${H}`},404);let C=new URL(w),T=new URL(Z.req.url);if(C.search=T.search,H==="authorize"){if(C.searchParams.has("resource"))C.searchParams.set("resource",V.connection_url);if(tt0(V.connection_url))try{let f=await rx6(F,V.organization_id),a=ox6(f);for(let[b,S]of a)C.searchParams.set(b,S)}catch(f){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",f)}return Z.redirect(C.toString(),302)}let E={Accept:Z.req.header("Accept")||"application/json"},P=Z.req.header("Content-Type");if(P)E["Content-Type"]=P;let j=Z.req.header("Authorization");if(j)E.Authorization=j;let R;if(Z.req.method!=="GET"&&Z.req.method!=="HEAD")if(H==="token"&&P?.includes("application/x-www-form-urlencoded")){let f=await Z.req.formData();if(f.has("resource"))f.set("resource",V.connection_url);let a=new URLSearchParams;for(let[b,S]of f.entries())a.append(b,S.toString());R=a.toString()}else R=Z.req.raw.body??void 0;let k=await fetch(C.toString(),{method:Z.req.method,headers:E,body:R,duplex:"half",redirect:"manual"}),_=new Headers,y=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[f,a]of k.headers.entries())if(!y.includes(f.toLowerCase()))_.set(f,a);return new Response(k.body,{status:k.status,statusText:k.statusText,headers:_})}),J.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",async(Z)=>{let K=await tx6()(Z.req.raw),H=await K.json();return Response.json(H,K)});let G=async(Z)=>{let K=await ex6()(Z.req.raw),H=await K.json();return Response.json(H,K)};J.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",G),QK.set(Z51({db:Y.db,databaseType:Y.type,auth:mW,encryption:{key:process.env.ENCRYPTION_KEY||""},observability:{tracer:sD,meter:Wj},eventBus:Q})),Promise.resolve(Q.start()).then(()=>{console.log("[EventBus] Worker started")}),J.use("*",async(Z,$)=>{if(H51(Z.req.path))return $();let K={measure:async(F,V)=>{_V(Z,F);try{return await V()}finally{WH(Z,F)}}},H=await QK.create(Z.req.raw,{timings:K});return Z.set("meshContext",H),$()}),J.get("/api/tools/management",(Z)=>{return Z.json({tools:rl,grouped:GN()})}),J.use("/mcp/*",async(Z,$)=>{_V(Z,"mcp");try{return await $()}finally{WH(Z,"mcp")}});let W=async(Z,$)=>{let K=Z.var.meshContext;if(!K.auth.user?.id&&!K.auth.apiKey?.id){let H=new URL(Z.req.url);return Z.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${H.origin}${H.pathname}/.well-known/oauth-protected-resource"`}})}return await $()};return J.use("/mcp/:connectionId?",W),J.use("/mcp/gateway/:virtualMcpId?",W),J.use("/mcp/virtual-mcp/:virtualMcpId?",W),J.route("/mcp",k51),J.route("/mcp",_51),J.route("/mcp",J51),J.use("/api/:org/models/*",async(Z,$)=>{_V(Z,"llm_models");try{return await $()}finally{WH(Z,"llm_models")}}),J.route("/api",xZ1),J.post("/org/:organizationId/events/:type",async(Z)=>{let $=Z.req.param("organizationId");return await Z.var.meshContext.eventBus.publish($,I$.SELF($),{data:await Z.req.json(),type:`public:${Z.req.param("type")}`,subject:Z.req.query("subject"),deliverAt:Z.req.query("deliverAt"),cron:Z.req.query("cron")}),Z.json({success:!0})}),J.route("/api",T51),J.notFound((Z)=>{return Z.json({error:"Not Found",path:Z.req.path},404)}),J.onError((Z,$)=>{console.error("Server error :",Z);let K=Z instanceof Error?Z.message:"Unknown error";return $.json({error:"Internal Server Error",message:K},500)}),J}import Xg6 from"v8";function dZ1(X){let{port:Y,hostname:Q="0.0.0.0"}=X;return Bun.serve({port:Y,hostname:Q,fetch:async(J)=>{let G=new URL(J.url);if(G.pathname==="/health")return Response.json({status:"ok",uptime:process.uptime()});if(G.pathname==="/memory")return Response.json({...process.memoryUsage(),uptimeSeconds:process.uptime()});if(G.pathname==="/heap-snapshot"){let W=Date.now();try{let Z=Xg6.writeHeapSnapshot(),$=Bun.file(Z);return new Response($,{headers:{"Content-Type":"application/octet-stream","Content-Disposition":`attachment; filename="heap-${W}.heapsnapshot"`}})}catch(Z){return Response.json({error:String(Z)},{status:500})}}if(G.pathname==="/gc"){if(typeof Bun.gc==="function")return Bun.gc(!0),Response.json({status:"gc triggered"});return Response.json({status:"gc not available"},{status:501})}return Response.json({error:"Not found"},{status:404})}})}var cZ1=parseInt(process.env.PORT||"3000",10),pZ1=parseInt(process.env.DEBUG_PORT||"9090",10),Yg6=process.env.ENABLE_DEBUG_SERVER==="true",GB="\x1B[0m",Qg6="\x1B[1m",nZ1="\x1B[2m",Jg6="\x1B[32m",iZ1="\x1B[36m",aZ1="\x1B[4m",Gg6=`http://localhost:${cZ1}`,Wg6=Q_0({clientDir:Y_0(import.meta.url,"../client"),isServerPath:K51}),Zg6=lZ1();console.log("");console.log(`${Jg6}\u2713${GB} ${Qg6}Ready${GB}`);console.log("");console.log(` ${nZ1}Open in browser:${GB} ${iZ1}${aZ1}${Gg6}${GB}`);console.log("");Bun.serve({idleTimeout:0,port:cZ1,hostname:"0.0.0.0",fetch:async(X)=>{return await Wg6(X)??Zg6.fetch(X)},development:!1});if(Yg6)dZ1({port:pZ1}),console.log(` ${nZ1}Debug server:${GB} ${iZ1}${aZ1}http://localhost:${pZ1}${GB}`),console.log("");