@decocms/mesh 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/client/assets/{AlertCircle-D0nDWFmW.js → AlertCircle-BpngO4aw.js} +1 -1
  2. package/dist/client/assets/{ArrowLeft-Dy5EiaSz.js → ArrowLeft-DnNeLtGd.js} +1 -1
  3. package/dist/client/assets/{Calendar-BJxxu5C2.js → Calendar-D9128Zt6.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-CIZ-G0cr.js → CheckCircle-pvl06c1v.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-BaUXzk6S.js → ChevronDown-DDObtPy0.js} +1 -1
  6. package/dist/client/assets/{Clock-ByLvVVaa.js → Clock-Bhch8Dmk.js} +1 -1
  7. package/dist/client/assets/{Copy01-qQVvX-ag.js → Copy01-D0UvfCIS.js} +1 -1
  8. package/dist/client/assets/{CpuChip02-D94fV7L1.js → CpuChip02-CHkUken-.js} +1 -1
  9. package/dist/client/assets/{DotsVertical-Bwr84gxu.js → DotsVertical-Dx8byzRL.js} +1 -1
  10. package/dist/client/assets/{File06-wdks9UDf.js → File06-BhKX70V2.js} +1 -1
  11. package/dist/client/assets/{GitBranch01-BEddVBkT.js → GitBranch01-B4CzhWKg.js} +1 -1
  12. package/dist/client/assets/{Inbox01-Z0aW0--W.js → Inbox01-C3XiWYYM.js} +1 -1
  13. package/dist/client/assets/{InfoCircle-DlRKJuiF.js → InfoCircle-RxSckwOE.js} +1 -1
  14. package/dist/client/assets/{Key01-Dnk7VSvJ.js → Key01-Df_FMcod.js} +1 -1
  15. package/dist/client/assets/{LinkExternal01-9eWvk-rl.js → LinkExternal01-BKGS1ajv.js} +1 -1
  16. package/dist/client/assets/{Loading01-DimFEMf8.js → Loading01-BKEuP0BH.js} +1 -1
  17. package/dist/client/assets/{Plus-Dq2PT6Y9.js → Plus-QVXsH8wr.js} +1 -1
  18. package/dist/client/assets/{SearchMd-B721Dhru.js → SearchMd-C9aO1pvs.js} +1 -1
  19. package/dist/client/assets/{Trash01-k3joih0I.js → Trash01-Dz5QBjzt.js} +1 -1
  20. package/dist/client/assets/{Upload01-CaIFJ1wc.js → Upload01-D2Q9ozBI.js} +1 -1
  21. package/dist/client/assets/{X-DLJOSrBL.js → X-B6099MPR.js} +1 -1
  22. package/dist/client/assets/{XClose-CE9-wvzR.js → XClose-DSJxdHjH.js} +1 -1
  23. package/dist/client/assets/{alert-dialog-DSXTwITs.js → alert-dialog-Bsv_icPD.js} +1 -1
  24. package/dist/client/assets/{auth-DW5xyVSX.js → auth-DRlnk2xb.js} +1 -1
  25. package/dist/client/assets/{auth-catchall-lLRsq2bv.js → auth-catchall-BBXFE5-p.js} +1 -1
  26. package/dist/client/assets/{avatar-Cdwojtd9.js → avatar-DBXvQJLu.js} +1 -1
  27. package/dist/client/assets/{badge-BKAVZN76.js → badge-EdnCME49.js} +1 -1
  28. package/dist/client/assets/{button-Cbx1psx0.js → button-BBbnP-v9.js} +1 -1
  29. package/dist/client/assets/{card-DPj2Jhqd.js → card-oQzKnd4e.js} +1 -1
  30. package/dist/client/assets/{checkbox-zcMnPIpA.js → checkbox-AVyYmXWI.js} +1 -1
  31. package/dist/client/assets/{collection-detail-ChLk2o5y.js → collection-detail-CnS3NqzF.js} +1 -1
  32. package/dist/client/assets/{collection-display-button-CASXIcfv.js → collection-display-button-DVo3HJTi.js} +1 -1
  33. package/dist/client/assets/{collection-header-DYCWQd6V.js → collection-header-BpXu8Vzd.js} +1 -1
  34. package/dist/client/assets/{collection-page-C7DppZNC.js → collection-page-BDOciB5D.js} +1 -1
  35. package/dist/client/assets/{collection-search-CkrsYVHK.js → collection-search-Clscyxb6.js} +1 -1
  36. package/dist/client/assets/{collection-table-wrapper-DYHssETe.js → collection-table-wrapper-DrJQ8qIR.js} +1 -1
  37. package/dist/client/assets/{connection-card-Ccv2RGnA.js → connection-card-DNEpv4P8.js} +1 -1
  38. package/dist/client/assets/{connection-detail-C4ySrNnu.js → connection-detail-DJQ5DpK4.js} +1 -1
  39. package/dist/client/assets/{connections-1K9OuPLG.js → connections-B8KLLrqT.js} +1 -1
  40. package/dist/client/assets/{core-CDKYwt4t.js → core-B2H4SHem.js} +1 -1
  41. package/dist/client/assets/{create-organization-dialog-CMqfWkSO.js → create-organization-dialog-BgaQBiov.js} +1 -1
  42. package/dist/client/assets/{dialog-b1ZSD0yQ.js → dialog-zSQgybFt.js} +1 -1
  43. package/dist/client/assets/{dropdown-menu-CDqLiYRK.js → dropdown-menu-DjQlOq7B.js} +1 -1
  44. package/dist/client/assets/{error-boundary-Kdc9g4VW.js → error-boundary-DnOs9ptq.js} +1 -1
  45. package/dist/client/assets/{extract-connection-data-C1-YxFs5.js → extract-connection-data-C4TbfE2g.js} +1 -1
  46. package/dist/client/assets/{form-8svTn9hb.js → form-DbXTocCZ.js} +1 -1
  47. package/dist/client/assets/{formatDistanceToNow-CUwQS-xD.js → formatDistanceToNow-DXvTo8fz.js} +1 -1
  48. package/dist/client/assets/{gateway-detail-hfG6iBJG.js → gateway-detail-D_Eeu8GA.js} +1 -1
  49. package/dist/client/assets/{gateways-C_zZYP4A.js → gateways-CpOqHGPf.js} +1 -1
  50. package/dist/client/assets/{home-BjWql1uD.js → home-DH79MOVs.js} +1 -1
  51. package/dist/client/assets/{index-C-wz9XDG.js → index-CGQ5MQzC.js} +1 -1
  52. package/dist/client/assets/index-CLqXtDUO.js +1 -0
  53. package/dist/client/assets/{index-CUKSaF48.js → index-DIMg3McT.js} +2 -2
  54. package/dist/client/assets/{index-BwIl7ggr.js → index-DmnZvHNs.js} +1 -1
  55. package/dist/client/assets/{input-H6VT8E5Y.js → input-DuLixXzs.js} +1 -1
  56. package/dist/client/assets/json-BR-1n4UW.js +1 -0
  57. package/dist/client/assets/{json-syntax-highlighter-BVdiHUZ0.js → json-syntax-highlighter-DzeQqB3N.js} +2 -2
  58. package/dist/client/assets/{layout-BQd1I6xa.js → layout-BXMoCa5p.js} +1 -1
  59. package/dist/client/assets/{lazy-highlighter-B5RwvSZU.js → lazy-highlighter-DlCJvY4E.js} +1 -1
  60. package/dist/client/assets/{localstorage-keys-DjtPyJdf.js → localstorage-keys-DUsAqGtJ.js} +1 -1
  61. package/dist/client/assets/{login-DzimQUQo.js → login-DzOOW3NK.js} +1 -1
  62. package/dist/client/assets/{mcp-oauth-B_sv-TkE.js → mcp-oauth-u1f9o4pW.js} +1 -1
  63. package/dist/client/assets/{members-CRouHlMm.js → members-BcgmC3Q2.js} +1 -1
  64. package/dist/client/assets/{monitoring-CcJvqpst.js → monitoring-Ci-6RfIl.js} +1 -1
  65. package/dist/client/assets/{oauth-callback-BPKJmJXt.js → oauth-callback-D7HKnm8-.js} +1 -1
  66. package/dist/client/assets/{page-D5Fp2CZa.js → page-D8EXKf1f.js} +1 -1
  67. package/dist/client/assets/{popover-Bk6CGVAU.js → popover-CSmu1XQf.js} +1 -1
  68. package/dist/client/assets/prism-light-DdlubWED.js +1 -0
  69. package/dist/client/assets/{resizable-DmzyZoqu.js → resizable-DaIbtpXr.js} +4 -4
  70. package/dist/client/assets/{resource-tabs-CHwi6mUQ.js → resource-tabs-UHT4jRlB.js} +1 -1
  71. package/dist/client/assets/{schema-Bmw1udN9.js → schema-DLujv0-N.js} +1 -1
  72. package/dist/client/assets/{select-CMEQTzOd.js → select-yhQhGgIP.js} +1 -1
  73. package/dist/client/assets/{settings-cNvY-rFi.js → settings-LFw_pLDl.js} +1 -1
  74. package/dist/client/assets/{shell-layout-BU-xHCbm.js → shell-layout-BcDSRee_.js} +1 -1
  75. package/dist/client/assets/{spinner-Cla_bqD5.js → spinner-BZx2tm9C.js} +1 -1
  76. package/dist/client/assets/{store-DOUbL8HI.js → store-QDtOTGzB.js} +1 -1
  77. package/dist/client/assets/{store-app-detail-CLx7Tiyl.js → store-app-detail-gbykHeE1.js} +1 -1
  78. package/dist/client/assets/{switch-DkW26u3q.js → switch-7ykyI8eT.js} +1 -1
  79. package/dist/client/assets/{tools-list-DSipnNXa.js → tools-list-Cg7Vdfai.js} +1 -1
  80. package/dist/client/assets/{tooltip-6DkXiGB3.js → tooltip-C8Lb1JlD.js} +1 -1
  81. package/dist/client/assets/{types-DY58s8k_.js → types-mJaNg2R7.js} +1 -1
  82. package/dist/client/assets/{use-binding-CTox1Niq.js → use-binding-DGE2EQtT.js} +1 -1
  83. package/dist/client/assets/{use-connection-Cj_N-56I.js → use-connection-CdhlvEhz.js} +1 -1
  84. package/dist/client/assets/{use-connection-resources-Er78LVOz.js → use-connection-resources-DLA7YNHa.js} +1 -1
  85. package/dist/client/assets/{use-gateway-B64MZgV5.js → use-gateway-DGSuI4Pr.js} +1 -1
  86. package/dist/client/assets/{use-list-state-D7R4e82G.js → use-list-state-BCOB_OIi.js} +1 -1
  87. package/dist/client/assets/{use-mcp-DgPyQ4aq.js → use-mcp-i7kSvKqD.js} +1 -1
  88. package/dist/client/assets/{use-members-BC7usg5N.js → use-members-C4WkWKg7.js} +1 -1
  89. package/dist/client/assets/{use-mobile-Bi0wd_6D.js → use-mobile-DJp6G0-T.js} +1 -1
  90. package/dist/client/assets/{use-organization-settings-HuuZ3X-G.js → use-organization-settings-Dhw1as1Y.js} +1 -1
  91. package/dist/client/assets/{use-tool-call-DP5wwhCb.js → use-tool-call-ZoYxiLnk.js} +1 -1
  92. package/dist/client/assets/useQuery-CMnzSYEG.js +1 -0
  93. package/dist/client/assets/utils-B0Sj2akX.js +1 -0
  94. package/dist/client/assets/{view-mode-toggle-BLmASoqb.js → view-mode-toggle-CgM7sjNw.js} +1 -1
  95. package/dist/client/assets/{well-known-mcp-C14XnQVT.js → well-known-mcp-59JQWa69.js} +1 -1
  96. package/dist/client/index.html +1 -1
  97. package/dist/server/cli.js +3 -3
  98. package/dist/server/server.js +2 -2
  99. package/package.json +1 -1
  100. package/dist/client/assets/index-De7NV5ze.js +0 -1
  101. package/dist/client/assets/json-DXDmXnbb.js +0 -1
  102. package/dist/client/assets/prism-light-rMaH_Wpf.js +0 -1
  103. package/dist/client/assets/useQuery-CBbBOkDY.js +0 -1
  104. package/dist/client/assets/utils-D1z8mp5k.js +0 -1
@@ -1072,7 +1072,7 @@ Please refer to the documentation here: https://better-auth.com/docs/plugins/org
1072
1072
  <h2>You've been invited!</h2>
1073
1073
  <p>${G} has invited you to join <strong>${X.organization.name}</strong>.</p>
1074
1074
  <p><a href="${Y}">Click here to accept the invitation</a></p>
1075
- `})}}}var WC4=[K00({organizationCreation:{afterCreate:async(Q)=>{await gY1(Q.organization.id,Q.member.userId)}},ac:D_,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:uY1,resourceNameValidation:(Q)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(Q)}}},roles:{user:XC4,admin:YC4,owner:GC4},sendInvitationEmail:cY1}),M00({loginPage:"/login",oidcConfig:{scopes:pY1,metadata:{scopes_supported:pY1},loginPage:"/login"}}),P00({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:(Q)=>{if(Q.headers?.get("X-MCP-Session-Auth")==="true")return null;let X=Q.headers?.get("Authorization");if(X?.startsWith("Bearer "))return X.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}}),F00({defaultRole:"user",adminRoles:["admin","owner"]}),j00(),z00({jwt:{expirationTime:"5m"}}),qe0(Z9.ssoConfig?mY1(Z9.ssoConfig):void 0),...Z9.magicLinkConfig&&Z9.emailProviders&&Z9.emailProviders.length>0?[E00(j61(Z9.magicLinkConfig,Z9.emailProviders))]:[]],$C4=H10(),KC4=E61($C4),kW=De({baseURL:process.env.BASE_URL||"http://localhost:3000",database:KC4,emailAndPassword:{enabled:!0},...Z9,plugins:WC4,databaseHooks:{user:{create:{after:async(Q)=>{if(Nv.autoCreateOrganizationOnSignup===!1)return;let J=Q.name?Q.name.split(" ")[0]:Q.email.split("@")[0],X=3;for(let G=0;G<X;G++){let Y=`${J} ${eI4()}`,W=tI4(Y);try{await kW.api.createOrganization({body:{name:Y,slug:W,userId:Q.id}});return}catch($){if(!($ instanceof Error&&("body"in $)&&$.body?.code==="ORGANIZATION_ALREADY_EXISTS")||G===X-1){console.error("Failed to create default organization:",$);return}}}}}}}});MJ();import{randomBytes as ZC4}from"crypto";var uP=null;function nY1(){if(uP)return uP;let Q=process.env.MESH_JWT_SECRET??Z9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Q)uP=new TextEncoder().encode(Q);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),uP=new Uint8Array(ZC4(32));return uP}async function iY1(Q,J="5m"){let X=nY1();return await new lQ(Q).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(J).sign(X)}async function rY1(Q){try{let J=nY1(),{payload:X}=await D8(Q,J);return X}catch{return}}class N90{db;constructor(Q){this.db=Q}async get(Q){let J=await this.db.selectFrom("organization_settings").selectAll().where("organizationId","=",Q).executeTakeFirst();if(!J)return null;return{organizationId:J.organizationId,sidebar_items:J.sidebar_items?typeof J.sidebar_items==="string"?JSON.parse(J.sidebar_items):J.sidebar_items:null,createdAt:J.createdAt,updatedAt:J.updatedAt}}async upsert(Q,J){let X=new Date().toISOString(),G=J?.sidebar_items?JSON.stringify(J.sidebar_items):null;await this.db.insertInto("organization_settings").values({organizationId:Q,sidebar_items:G,createdAt:X,updatedAt:X}).onConflict((W)=>W.column("organizationId").doUpdateSet({sidebar_items:G?G:void 0,updatedAt:X})).execute();let Y=await this.get(Q);if(!Y)return{organizationId:Q,sidebar_items:J?.sidebar_items??null,createdAt:X,updatedAt:X};return Y}}mH();class aY1 extends Error{constructor(Q){super(Q);this.name="UnauthorizedError"}}class B90 extends Error{constructor(Q){super(Q);this.name="ForbiddenError"}}class lU{userId;toolName;boundAuth;role;connectionId;_granted=!1;constructor(Q,J,X,G,Y,W=AY.SELF){this.userId=J;this.toolName=X;this.boundAuth=G;this.role=Y;this.connectionId=W}[Symbol.dispose](){this._granted=!1}setToolName(Q){this.toolName=Q}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Q){if(this._granted)return;if(!this.userId&&!this.boundAuth)throw new aY1("Authentication required. Please provide a valid OAuth token or API key.");let J=Q.length>0?Q:this.toolName?[this.toolName]:[];if(J.length===0)throw new B90("No resources specified for access check");for(let X of J)if(await this.checkResource(X)){this.grant();return}throw new B90(`Access denied to: ${J.join(", ")}`)}async checkResource(Q){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let J={};if(this.connectionId)J[this.connectionId]=[Q];return this.boundAuth.hasPermission(J)}granted(){return this._granted}}class O90{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(Q){return GO.startActiveSpan("redactor.redact",(J)=>{try{if(Q===null||Q===void 0)return Q;if(typeof Q==="string")return J.setAttribute("data.type","string"),this.redactString(Q);if(Array.isArray(Q))return J.setAttribute("data.type","array"),J.setAttribute("data.length",Q.length),Q.map((X)=>this.redact(X));if(typeof Q==="object"){J.setAttribute("data.type","object");let X={};for(let[G,Y]of Object.entries(Q)){let W=this.redactString(G);X[W]=this.redact(Y)}return X}return J.setAttribute("data.type",typeof Q),Q}finally{J.end()}})}redactString(Q){return GO.startActiveSpan("redactor.redactString",(J)=>{try{J.setAttribute("text.length",Q.length);let X=Q,G=0;for(let Y of this.patterns){let W=Q.match(Y.regex);if(W)G+=W.length,J.setAttribute(`redaction.${Y.type}.count`,W.length);X=X.replace(Y.regex,`[REDACTED:${Y.type}]`)}return J.setAttribute("redaction.total_count",G),X}finally{J.end()}})}}class D90{db;redactor;constructor(Q){this.db=Q;this.redactor=new O90}async log(Q){await this.logBatch([Q])}async logBatch(Q){if(Q.length===0)return;let J=Q.map((X)=>({...X,input:this.redactor.redact(X.input),output:this.redactor.redact(X.output)}));await this.db.transaction().execute(async(X)=>{await X.insertInto("monitoring_logs").values(J.map((G)=>this.toDbRow(G))).execute()})}async query(Q){let J=this.db.selectFrom("monitoring_logs").selectAll(),X=this.db.selectFrom("monitoring_logs").select((K)=>K.fn.count("id").as("count"));if(Q.organizationId)J=J.where("organization_id","=",Q.organizationId),X=X.where("organization_id","=",Q.organizationId);if(Q.connectionId)J=J.where("connection_id","=",Q.connectionId),X=X.where("connection_id","=",Q.connectionId);if(Q.gatewayId)J=J.where("gateway_id","=",Q.gatewayId),X=X.where("gateway_id","=",Q.gatewayId);if(Q.toolName)J=J.where("tool_name","=",Q.toolName),X=X.where("tool_name","=",Q.toolName);if(Q.isError!==void 0)J=J.where("is_error","=",Q.isError?1:0),X=X.where("is_error","=",Q.isError?1:0);if(Q.startDate)J=J.where("timestamp",">=",Q.startDate.toISOString()),X=X.where("timestamp",">=",Q.startDate.toISOString());if(Q.endDate)J=J.where("timestamp","<=",Q.endDate.toISOString()),X=X.where("timestamp","<=",Q.endDate.toISOString());if(J=J.orderBy("timestamp","desc"),Q.limit)J=J.limit(Q.limit);if(Q.offset)J=J.offset(Q.offset);let[G,Y]=await Promise.all([J.execute(),X.executeTakeFirst()]),W=Number(Y?.count||0);return{logs:G.map((K)=>this.fromDbRow(K)),total:W}}async getStats(Q){let J=this.db.selectFrom("monitoring_logs").where("organization_id","=",Q.organizationId);if(Q.startDate)J=J.where("timestamp",">=",Q.startDate.toISOString());if(Q.endDate)J=J.where("timestamp","<=",Q.endDate.toISOString());let X=await J.select([($)=>$.fn.count("id").as("total_count"),($)=>$.fn.sum($.ref("is_error")).as("error_count"),($)=>$.fn.avg("duration_ms").as("avg_duration")]).executeTakeFirst(),G=Number(X?.total_count||0),Y=Number(X?.error_count||0),W=Number(X?.avg_duration||0);return{totalCalls:G,errorRate:G>0?Y/G:0,avgDurationMs:W}}toDbRow(Q){return{id:Q.id||a7("log"),organization_id:Q.organizationId,connection_id:Q.connectionId,connection_title:Q.connectionTitle,tool_name:Q.toolName,input:JSON.stringify(Q.input),output:JSON.stringify(Q.output),is_error:Q.isError?1:0,error_message:Q.errorMessage||null,duration_ms:Q.durationMs,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp,user_id:Q.userId||null,request_id:Q.requestId,user_agent:Q.userAgent||null,gateway_id:Q.gatewayId||null}}fromDbRow(Q){let J=typeof Q.input==="string"?JSON.parse(Q.input):Q.input,X=typeof Q.output==="string"?JSON.parse(Q.output):Q.output,G=typeof Q.timestamp==="string"?new Date(Q.timestamp):Q.timestamp;return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,connectionTitle:Q.connection_title,toolName:Q.tool_name,input:J,output:X,isError:Q.is_error===1,errorMessage:Q.error_message,durationMs:Q.duration_ms,timestamp:G,userId:Q.user_id,requestId:Q.request_id,userAgent:Q.user_agent,gatewayId:Q.gateway_id}}}mH();_80();function oY1(Q){let J=null;return()=>{if(J)return J;return J=Q().catch((X)=>{throw J=null,X}),J}}class sY1{factory;promise=null;constructor(Q){this.factory=Q}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(Q,J){return this.getOrCreatePromise().then(Q,J)}catch(Q){return this.getOrCreatePromise().catch(Q)}finally(Q){return this.getOrCreatePromise().finally(Q)}}function XG(Q){return new sY1(Q)}JP();WP();fk();eQ();K_();var L_=new r5;async function tY1(Q,J){return(await J.storage.connections.findById(Q))?.connection_url??null}async function w_(Q){let X=new URL(Q).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let G=new URL(Q);G.pathname=`${X}/.well-known/oauth-protected-resource`;let Y=await fetch(G.toString(),{method:"GET",headers:{Accept:"application/json"}});if(Y.ok)return Y;if(Y.status!==404&&Y.status!==401)return Y;let W=new URL(Q);if(W.pathname=`/.well-known/oauth-protected-resource${X}`,Y=await fetch(W.toString(),{method:"GET",headers:{Accept:"application/json"}}),Y.status!==404&&Y.status!==401)return Y;let $=new URL(Q);return $.pathname="/.well-known/oauth-protected-resource",Y=await fetch($.toString(),{method:"GET",headers:{Accept:"application/json"}}),Y}async function HC4(Q,J){let X=await tY1(Q,J);if(!X)return null;try{let G=await w_(X);if(!G.ok)return null;return(await G.json()).authorization_servers?.[0]??null}catch{return null}}async function eY1(Q){let J=Q.get("meshContext");if(!J)J=await XZ.create(Q.req.raw),Q.set("meshContext",J);return J}async function Q71({error:Q,reqUrl:J,connectionId:X,connectionUrl:G,headers:Y}){if(!(Q.status===401||Q.message?.includes("401")||Q.message?.toLowerCase().includes("unauthorized")))return null;if(await fetch(G,{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"}}})}).then((K)=>K.headers.has("WWW-Authenticate")).catch(()=>!1))return new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${J.origin}/mcp/${X}/.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 P_=(Q)=>{if(!(Q.hostname==="localhost"||Q.hostname==="127.0.0.1"))Q.protocol="https:";return Q},J71=async(Q)=>{let J=Q.req.param("connectionId"),X=await eY1(Q),G=await tY1(J,X);if(!G)return Q.json({error:"Connection not found"},404);try{let Y=await w_(G);if(!Y.ok)return new Response(Y.body,{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}});let W=await Y.json(),$=P_(new URL(Q.req.url)),K=`${$.origin}/mcp/${J}`,Z=`${$.origin}/oauth-proxy/${J}`,H={...W,resource:K,authorization_servers:[Z]};return new Response(JSON.stringify(H),{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}})}catch(Y){let W=Y;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",W),Q.json({error:"Failed to proxy OAuth metadata",message:W.message},502)}};L_.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(Q)=>J71(Q));L_.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Q)=>J71(Q));async function L90(Q){let X=new URL(Q).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let G=X!==""&&X!=="/",Y=[];if(G){let $=new URL(Q);$.pathname=`/.well-known/oauth-authorization-server${X}`,Y.push($);let K=new URL(Q);K.pathname=`/.well-known/openid-configuration${X}`,Y.push(K);let Z=new URL(Q);Z.pathname=`${X}/.well-known/openid-configuration`,Y.push(Z)}else{let $=new URL(Q);$.pathname="/.well-known/oauth-authorization-server",Y.push($);let K=new URL(Q);K.pathname="/.well-known/openid-configuration",Y.push(K)}let W=null;for(let $ of Y){if(W=await fetch($.toString(),{method:"GET",headers:{Accept:"application/json"}}),W.ok)return W;if(W.status!==404&&W.status!==401)return W}return W}L_.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(Q)=>{let J=Q.req.param("connectionId"),X=await eY1(Q),G=await HC4(J,X);if(!G)return Q.json({error:"Connection not found or no auth server"},404);try{let Y=await L90(G);if(!Y.ok)return new Response(Y.body,{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}});let W=await Y.json(),K=`${P_(new URL(Q.req.url)).origin}/oauth-proxy/${J}`,Z={...W,authorization_endpoint:W.authorization_endpoint?`${K}/authorize`:void 0,token_endpoint:W.token_endpoint?`${K}/token`:void 0,registration_endpoint:W.registration_endpoint?`${K}/register`:void 0};return new Response(JSON.stringify(Z),{status:200,headers:{"Content-Type":"application/json"}})}catch(Y){let W=Y;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),Q.json({error:"Failed to proxy auth server metadata",message:W.message},502)}});var X71=L_;function FC4(Q){if(!Q.isError)return;let J=Q.content;if(!Array.isArray(J))return;for(let X of J)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function Y71(Q){if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q,X=J.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return J}return{value:Q}}async function qC4(Q,J){let X=Q.body;if(!X)return{text:"",truncated:!1};let G=X.getReader(),Y=new TextDecoder,W=!1,$=0,K=[];try{while(!0){let{value:Z,done:H}=await G.read();if(H)break;if(Z){if($+=Z.byteLength,$>J){W=!0;let F=J-($-Z.byteLength);if(F>0)K.push(Y.decode(Z.slice(0,F),{stream:!0}));break}K.push(Y.decode(Z,{stream:!0}))}}}finally{G.releaseLock()}return K.push(Y.decode()),{text:K.join(""),truncated:W}}async function mP(Q){let{ctx:J,enabled:X}=Q,G=Q.organizationId??J.organization?.id;if(!X||!G)return;await J.storage.monitoring.log({organizationId:G,connectionId:Q.connectionId,connectionTitle:Q.connectionTitle,toolName:Q.request.params.name,input:Q.request.params.arguments??{},output:Q.output,isError:Q.isError,errorMessage:Q.errorMessage,durationMs:Q.durationMs,timestamp:new Date,userId:J.auth.user?.id||J.auth.apiKey?.userId||null,requestId:J.metadata.requestId,userAgent:J.metadata.userAgent,gatewayId:J.gatewayId})}function G71(Q){let{ctx:J,enabled:X,connectionId:G,connectionTitle:Y}=Q;return async(W,$)=>{let K=Date.now();try{let Z=await $(),H=Date.now()-K;return await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:Y71(Z),isError:Boolean(Z.isError),errorMessage:FC4(Z),durationMs:H}),Z}catch(Z){let H=Z,F=Date.now()-K;throw await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),Z}}}function W71(Q){let{ctx:J,enabled:X,connectionId:G,connectionTitle:Y}=Q;return async(W,$)=>{let K=Date.now();try{let Z=await $(),H=J.organization?.id;if(X&&H){let F=Z.clone();(async()=>{try{let{text:q,truncated:V}=await qC4(F,262144),z=Date.now()-K,U=F.headers.get("content-type")??"",N=q;if(U.includes("application/json"))try{N=q.length?JSON.parse(q):null}catch{N=q}let D=Z.status>=400,P=D&&N&&typeof N==="object"&&"error"in N?N.error:void 0,j=typeof P==="string"&&P?P:D&&typeof N==="string"&&N.trim()?N.slice(0,500):D?`HTTP ${Z.status} ${Z.statusText}`.trim():V?"Response body truncated to 262144 bytes":void 0;await mP({ctx:J,enabled:X,organizationId:H,connectionId:G,connectionTitle:Y,request:W,output:Y71(N),isError:D,errorMessage:j,durationMs:z})}catch(q){let V=Date.now()-K;await mP({ctx:J,enabled:X,organizationId:H,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${q.message}`,durationMs:V})}})()}return Z}catch(Z){let H=Z,F=Date.now()-K;throw await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),Z}}}var $71=new r5;function VC4(Q,J){return async(X,G)=>{try{let Y=X.params.name;return await new lU(Q.authInstance,Q.auth.user?.id??Q.auth.apiKey?.userId,Y,Q.boundAuth,Q.auth.user?.role,J).check(Y),await G()}catch(Y){return{content:[{type:"text",text:`Authorization failed: ${Y.message}`}],isError:!0}}}}function zC4(Q,J){return async(X,G)=>{try{let Y=X.params.name;return await new lU(Q.authInstance,Q.auth.user?.id??Q.auth.apiKey?.userId,Y,Q.boundAuth,Q.auth.user?.role,J).check(Y),await G()}catch(Y){return new Response(JSON.stringify({error:`Authorization failed: ${Y.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function K71(Q,J,{superUser:X}){let G=typeof Q==="string"?await J.storage.connections.findById(Q,J.organization?.id):Q;if(!G)throw Error("Connection not found");let Y=G?.id;if(J.organization&&G.organization_id!==J.organization.id)throw Error("Connection does not belong to the active organization");if(J.organization??={id:G.organization_id},G.status!=="active")throw Error(`Connection inactive: ${G.status}`);let W,$=J.auth.user?.connectionId,K=oY1(async()=>{let _=k80(G.configuration_state,G.configuration_scopes),h=J.auth.user?.id??J.auth.apiKey?.userId;if(!h){console.error("User ID required to issue configuration token");return}try{W=await iY1({sub:h,user:{id:h},metadata:{state:G.configuration_state??void 0,meshUrl:process.env.MESH_URL??J.baseUrl,connectionId:Y,organizationId:J.organization?.id},permissions:_})}catch(m){console.error("Failed to issue configuration token:",m)}}),Z=async()=>{await K();let _={...$?{"x-caller-id":$}:{}};if(G.connection_token)_.Authorization=`Bearer ${G.connection_token}`;if(W)_["x-mesh-token"]=W;if(G.connection_headers)Object.assign(_,G.connection_headers);return _},H=async()=>{let _=await Z(),h=new EW(new URL(G.connection_url),{requestInit:{headers:_}}),m=new AW({name:"mcp-mesh-proxy",version:"1.0.0"});return await m.connect(h),m},F=X?async(_,h)=>await h():VC4(J,Y),q=X?async(_,h)=>await h():zC4(J,Y),V={enabled:s01().enabled,connectionId:Y,connectionTitle:G.title,ctx:J},z=G71(V),U=W71(V),N=DP(z,F),D=DP(U,q),P=async(_)=>{return N(_,async()=>{let h=await H(),m=Date.now();return await J.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":Y,"tool.name":_.params.name}},async(b)=>{try{let S=await h.callTool(_.params),g=Date.now()-m;return J.meter.createHistogram("connection.proxy.duration").record(g,{"connection.id":Y,"tool.name":_.params.name,status:"success"}),J.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":Y,"tool.name":_.params.name,status:"success"}),b.end(),S}catch(S){let g=S,J0=Date.now()-m;throw J.meter.createHistogram("connection.proxy.duration").record(J0,{"connection.id":Y,"tool.name":_.params.name,status:"error"}),J.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":Y,"tool.name":_.params.name,error:g.message}),b.recordException(g),b.end(),S}finally{await h.close()}})})};return{fetch:async(_)=>{let h=new URL(_.url),m;try{m=await H()}catch(g){let J0=await Q71({error:g,reqUrl:h,connectionId:Y,connectionUrl:G.connection_url,headers:await Z()});if(J0)return J0;throw g}let b=new eH({name:"mcp-mesh",version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}}}),S=new ZF({enableJsonResponse:_.headers.get("Accept")?.includes("application/json")??!1});return await b.connect(S),b.server.setRequestHandler(xK,async(g)=>{return await m.listTools()}),b.server.setRequestHandler(gK,P),b.server.setRequestHandler(_K,async()=>{if(m.getServerCapabilities()?.resources)return await m.listResources();return{resources:[]}}),b.server.setRequestHandler(hK,async(g)=>{return await m.readResource(g.params)}),b.server.setRequestHandler(yK,async()=>{if(m.getServerCapabilities()?.resourceTemplates)return await m.listResourceTemplates();return{resourceTemplates:[]}}),b.server.setRequestHandler(fK,async()=>{if(m.getServerCapabilities()?.prompts)return await m.listPrompts();return{prompts:[]}}),b.server.setRequestHandler(bK,async(g)=>{return await m.getPrompt(g.params)}),await S.handleMessage(_)},client:{callTool:(_)=>{return P({method:"tools/call",params:_})},listTools:async()=>{if(G.tools&&G.tools.length>0)return{tools:G.tools.map((h)=>({name:h.name,description:h.description,inputSchema:h.inputSchema,outputSchema:h.outputSchema}))};return await(await H()).listTools()},listResources:async()=>{return await(await H()).listResources()},readResource:async(_)=>{return await(await H()).readResource(_)},listResourceTemplates:async()=>{return await(await H()).listResourceTemplates()},listPrompts:async()=>{return await(await H()).listPrompts()},getPrompt:async(_)=>{return await(await H()).getPrompt(_)}},callStreamableTool:async(_,h)=>{let m={method:"tools/call",params:{name:_,arguments:h}};return D(m,async()=>{let b=await Z(),S=new URL(G.connection_url);return S.pathname=S.pathname.replace(/\/$/,"")+`/call-tool/${m.params.name}`,await J.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":Y,"tool.name":m.params.name}},async(g)=>{let J0=Date.now();try{let i=await fetch(S.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(m.params.arguments),headers:{...b,"Content-Type":"application/json"}}),W0=Date.now()-J0;return J.meter.createHistogram("connection.proxy.streamable.duration").record(W0,{"connection.id":Y,"tool.name":m.params.name,status:i.ok?"success":"error"}),J.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":Y,"tool.name":m.params.name,status:i.ok?"success":"error"}),g.end(),i}catch(i){let W0=i,V0=Date.now()-J0;throw J.meter.createHistogram("connection.proxy.streamable.duration").record(V0,{"connection.id":Y,"tool.name":m.params.name,status:"error"}),J.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":Y,"tool.name":m.params.name,error:W0.message}),g.recordException(W0),g.end(),i}})})}}}async function Z71(Q,J){return K71(Q,J,{superUser:!1})}async function H71(Q,J){return K71(Q,J,{superUser:!0})}$71.all("/:connectionId",async(Q)=>{let J=Q.req.param("connectionId"),X=Q.get("meshContext");try{return await(await X.createMCPProxy(J)).fetch(Q.req.raw)}catch(G){let Y=G;if(Y.message.includes("not found"))return Q.json({error:Y.message},404);if(Y.message.includes("does not belong to the active organization"))return Q.json({error:"Connection not found"},404);if(Y.message.includes("inactive"))return Q.json({error:Y.message},503);return Q.json({error:"Internal server error",message:Y.message},500)}});var F71=$71;function UC4(Q,J){for(let[X,G]of Object.entries(J)){let Y=Q[X];if(!Y||Y.length===0){let W=Q["*"];if(!W||W.length===0)return!1;if(W.includes("*"))continue;for(let $ of G)if(!W.includes($))return!1;continue}if(Y.includes("*"))continue;for(let W of G)if(!Y.includes(W))return!1}return!0}function NC4(Q){let{auth:J,headers:X,role:G,permissions:Y,userId:W}=Q,$=J.api.hasPermission;return{hasPermission:async(K)=>{if(G&&U90.includes(G))return!0;if(Y)return UC4(Y,K);if(!$)return console.error("[Auth] hasPermission API not available"),!1;try{if((await $({headers:X,body:{permission:K}}))?.success===!0)return!0;let H={};for(let q of Object.keys(K))H[q]=["*"];return(await $({headers:X,body:{permission:H}}))?.success===!0}catch(Z){return console.error("[Auth] Permission check failed:",Z),!1}},organization:{create:async(K)=>{return J.api.createOrganization({headers:X,body:K})},update:async(K)=>{return J.api.updateOrganization({headers:X,body:K})},delete:async(K)=>{await J.api.deleteOrganization({headers:X,body:{organizationId:K}})},get:async(K)=>{return J.api.getFullOrganization({headers:X,query:K?{organizationId:K}:void 0})},list:async(K)=>{return J.api.listOrganizations({headers:X,query:K?{userId:K}:void 0})},addMember:async(K)=>{return J.api.addMember({headers:X,body:K})},removeMember:async(K)=>{await J.api.removeMember({headers:X,body:K})},listMembers:async(K)=>{return J.api.listMembers({headers:X,query:K?{organizationId:K.organizationId,limit:K.limit,offset:K.offset}:void 0})},updateMemberRole:async(K)=>{return J.api.updateMemberRole({headers:X,body:K})}},apiKey:{create:async(K)=>{return J.api.createApiKey({body:{...K,userId:W}})},list:async()=>{return J.api.listApiKeys({headers:X})},update:async(K)=>{return J.api.updateApiKey({body:{...K,userId:W}})},delete:async(K)=>{await J.api.deleteApiKey({headers:X,body:{keyId:K}})}}}}async function BC4(Q,J,X){if(U90.includes(X))return;let G=await Q.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",J).where("role","=",X).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${X}`);return}}async function OC4(Q,J,X){let G=Q.headers.get("Authorization");try{let Y=new Headers(Q.headers);Y.set("X-MCP-Session-Auth","true");let W=await J.api.getMcpSession({headers:Y});if(W){let $=W.userId,K=await X.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(),Z=K?.role,H=K?{id:K.orgId,slug:K.orgSlug,name:K.orgName}:void 0,F;if(K&&Z)F=await BC4(X,K.organizationId,Z);return{user:{id:$,role:Z},role:Z,permissions:F,organization:H}}}catch(Y){console.error("[Auth] OAuth session check failed:",Y)}if(G?.startsWith("Bearer ")){let Y=G.replace("Bearer ","").trim();try{let W=await rY1(Y);if(W)return{user:{id:W.sub,connectionId:W.metadata?.connectionId},permissions:W.permissions,organization:W.metadata?.organizationId?{id:W.metadata?.organizationId}:void 0}}catch{}try{let W=await J.api.verifyApiKey({body:{key:Y}});if(W?.valid&&W.key){let $=W.key.metadata?.organization,K=W.key.permissions;return{apiKeyId:W.key.id,user:{id:W.key.userId},permissions:K,organization:$?{id:$.id,slug:$.slug,name:$.name}:void 0}}}catch(W){console.error("[Auth] API key check failed:",W)}}try{let Y=await J.api.getSession({headers:Q.headers});if(Y){let W,$;if(Y.session.activeOrganizationId){let K=await J.api.getFullOrganization({headers:Q.headers}).catch(()=>null);if(K)W={id:K.id,slug:K.slug,name:K.name},$=K.members?.find((H)=>H.userId===Y.user.id)?.role;else W={id:Y.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Y.user.id,email:Y.user.email,role:$},role:$,organization:W}}}catch(Y){console.error("[Auth] Session check failed:",Y)}return{user:void 0}}var q71,XZ={set:(Q)=>{q71=Q},create:async(Q)=>{return await q71(Q)}};function V71(Q){let J=new bw(Q.encryption.key),X={connections:new xw(Q.db,J),organizationSettings:new N90(Q.db),monitoring:new D90(Q.db),gateways:new gw(Q.db)};return async(G)=>{let Y=G?.headers.get("x-caller-id")??void 0,W=G?await OC4(G,Q.auth,Q.db):{user:void 0},$=NC4({auth:Q.auth,headers:G?.headers??new Headers,role:W.role,permissions:W.permissions,userId:W.user?.id}),K={user:W.user};if(W.apiKeyId)K.apiKey={id:W.apiKeyId,name:"",userId:""};let Z=W.organization,H=G?new URL(G.url):new URL("http://localhost:3000"),F=process.env.BASE_URL??`${H.protocol}//${H.host}`,q=new lU(Q.auth,K.user?.id,void 0,$,W.role,AY.SELF),V={auth:K,connectionId:Y,organization:Z,storage:X,vault:J,authInstance:Q.auth,boundAuth:$,access:q,db:Q.db,tracer:Q.observability.tracer,meter:Q.observability.meter,baseUrl:F,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,userAgent:G?.headers.get("x-mesh-client")||G?.headers.get("User-Agent")||void 0,ipAddress:(G?.headers.get("CF-Connecting-IP")||G?.headers.get("X-Forwarded-For"))??void 0},eventBus:Q.eventBus,createMCPProxy:async(z)=>{return await Z71(z,V)}};return V}}var lP={HEALTH:"/health",METRICS:"/metrics"},dP={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known"},DC4=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/;function z71(Q){return Q===lP.HEALTH||Q===lP.METRICS||Q.startsWith(dP.WELL_KNOWN)}function LC4(Q){return Q.startsWith(dP.API)}function wC4(Q){return Q==="/mcp"||Q.startsWith(dP.MCP)}function PC4(Q){return Q.startsWith(dP.OAUTH_PROXY)}function MC4(Q){return DC4.test(Q)}function U71(Q){return LC4(Q)||wC4(Q)||PC4(Q)||z71(Q)}function N71(Q){return Q==="/"||Q.startsWith(dP.API_AUTH)||z71(Q)||MC4(Q)}class B71{db;constructor(Q){this.db=Q}async publishEvent(Q){let J=new Date().toISOString();return await this.db.insertInto("events").values({id:Q.id,organization_id:Q.organizationId,type:Q.type,source:Q.source,specversion:"1.0",subject:Q.subject??null,time:Q.time,datacontenttype:Q.datacontenttype??"application/json",dataschema:Q.dataschema??null,data:Q.data?JSON.stringify(Q.data):null,cron:Q.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:J,updated_at:J}).execute(),{id:Q.id,organizationId:Q.organizationId,type:Q.type,source:Q.source,specversion:"1.0",subject:Q.subject??null,time:Q.time,datacontenttype:Q.datacontenttype??"application/json",dataschema:Q.dataschema??null,data:Q.data??null,cron:Q.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:J,updatedAt:J}}async subscribe(Q){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q.organizationId).where("connection_id","=",Q.connectionId).where("event_type","=",Q.eventType);if(Q.publisher)J=J.where("publisher","=",Q.publisher);else J=J.where("publisher","is",null);if(Q.filter)J=J.where("filter","=",Q.filter);else J=J.where("filter","is",null);let X=await J.executeTakeFirst();if(X)return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at};let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Q.id,organization_id:Q.organizationId,connection_id:Q.connectionId,publisher:Q.publisher??null,event_type:Q.eventType,filter:Q.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Q.id,organizationId:Q.organizationId,connectionId:Q.connectionId,publisher:Q.publisher??null,eventType:Q.eventType,filter:Q.filter??null,enabled:!0,createdAt:G,updatedAt:G}}async unsubscribe(Q,J){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Q).where("organization_id","=",J).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Q,J){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q);if(J)X=X.where("connection_id","=",J);return(await X.execute()).map((Y)=>({id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Y.enabled===1,createdAt:Y.created_at,updatedAt:Y.updated_at}))}async getSubscription(Q,J){let X=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Q).where("organization_id","=",J).executeTakeFirst();if(!X)return null;return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at}}async getMatchingSubscriptions(Q){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q.organizationId).where("enabled","=",1).where("event_type","=",Q.type).where((X)=>X.or([X("publisher","is",null),X("publisher","=",Q.source)])).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at}))}async createDeliveries(Q,J,X){if(J.length===0)return;let G=new Date().toISOString(),Y=X??null,W=J.map(($)=>({id:crypto.randomUUID(),event_id:Q,subscription_id:$,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:Y,created_at:G}));await this.db.insertInto("event_deliveries").values(W).execute()}async claimPendingDeliveries(Q){let J=new Date().toISOString(),X;try{X=(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(($)=>$.or([$("d.next_retry_at","is",null),$("d.next_retry_at","<=",J)])).orderBy("d.created_at","asc").limit(Q)).where("status","=","pending").returning(["id"]).execute()).map((W)=>W.id)}catch{let Y=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","<=",J)])).orderBy("d.created_at","asc").limit(Q).execute();if(Y.length===0)return[];X=Y.map((W)=>W.id),await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",X).where("status","=","pending").execute()}if(X.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",X).where("d.status","=","processing").execute()).map((Y)=>({delivery:{id:Y.delivery_id,eventId:Y.event_id,subscriptionId:Y.subscription_id,status:Y.delivery_status,attempts:Y.delivery_attempts,lastError:Y.delivery_last_error,deliveredAt:Y.delivered_at,nextRetryAt:Y.delivery_next_retry_at,createdAt:Y.delivery_created_at},event:{id:Y.event_id,organizationId:Y.organization_id,type:Y.type,source:Y.source,specversion:Y.specversion,subject:Y.subject,time:Y.time,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema,data:Y.data?JSON.parse(Y.data):null,cron:Y.cron,status:Y.event_status,attempts:Y.event_attempts,lastError:Y.event_last_error,nextRetryAt:Y.next_retry_at,createdAt:Y.event_created_at,updatedAt:Y.event_updated_at},subscription:{id:Y.subscription_id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Y.enabled===1,createdAt:Y.subscription_created_at,updatedAt:Y.subscription_updated_at}}))}async markDeliveriesDelivered(Q){if(Q.length===0)return;let J=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:J}).where("id","in",Q).execute()}async markDeliveriesFailed(Q,J,X=20,G=1000,Y=3600000){if(Q.length===0)return;for(let W of Q){let $=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",W).executeTakeFirst();if(!$)continue;let K=$.attempts+1;if(K>=X)await this.db.updateTable("event_deliveries").set({attempts:K,last_error:J,status:"failed",next_retry_at:null}).where("id","=",W).execute();else{let Z=Math.min(G*Math.pow(2,K-1),Y),H=new Date(Date.now()+Z).toISOString();await this.db.updateTable("event_deliveries").set({attempts:K,last_error:J,status:"pending",next_retry_at:H}).where("id","=",W).execute()}}}async updateEventStatus(Q){let J=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Q).execute();if(J.length===0)return;let X=J.every((W)=>W.status==="delivered"),G=J.some((W)=>W.status==="failed"),Y=J.some((W)=>W.status==="pending"||W.status==="processing");if(X)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Q).execute();else if(G&&!Y)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Q).execute()}async resetStuckDeliveries(){let Q=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Q.numUpdatedRows??0)}async getEvent(Q,J){let X=await this.db.selectFrom("events").selectAll().where("id","=",Q).where("organization_id","=",J).executeTakeFirst();if(!X)return null;return{id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}}async cancelEvent(Q,J,X){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Q).where("organization_id","=",J).where("source","=",X).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Q).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Q,J){if(Q.length===0)return;let X=new Date(Date.now()+J).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:X}).where("id","in",Q).execute()}async ackDelivery(Q,J,X){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Q).where("organization_id","=",J).executeTakeFirst())return{success:!1};let W=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Q).where("status","in",["pending","processing"]).where(($)=>$.exists($.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",X).where("event_subscriptions.organization_id","=",J))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(W)await this.updateEventStatus(Q);return{success:W}}async syncSubscriptions(Q){let{organizationId:J,connectionId:X,subscriptions:G}=Q,Y=(P,j)=>{return`${P}::${j??""}`},W=await this.listSubscriptions(J,X),$=new Map;for(let P of W)$.set(Y(P.eventType,P.publisher),P);let K=new Map;for(let P of G)K.set(Y(P.eventType,P.publisher),P);let Z=new Date().toISOString(),H=[],F=[],q=[],V=0;for(let[P,j]of K){let M=$.get(P);if(!M)H.push({id:crypto.randomUUID(),organization_id:J,connection_id:X,event_type:j.eventType,publisher:j.publisher??null,filter:j.filter??null,enabled:1,created_at:Z,updated_at:Z});else{let T=M.filter??null,A=j.filter??null;if(T!==A)F.push({id:M.id,filter:A});else V++}}for(let[P,j]of $)if(!K.has(P))q.push(j.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(F.length>0)await Promise.all(F.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:Z}).where("id","=",P.id).execute()));if(q.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",q).execute();let z=H.length,U=F.length,N=q.length,D=await this.listSubscriptions(J,X);return{created:z,updated:U,deleted:N,unchanged:V,subscriptions:D}}}function O71(Q){return new B71(Q)}function m5(Q,J,X,G,Y,W,$,K){return m5.fromTZ(m5.tp(Q,J,X,G,Y,W,$),K)}m5.fromTZISO=(Q,J,X)=>m5.fromTZ(TC4(Q,J),X);m5.fromTZ=function(Q,J){let X=new Date(Date.UTC(Q.y,Q.m-1,Q.d,Q.h,Q.i,Q.s)),G=w90(Q.tz,X),Y=new Date(X.getTime()-G),W=w90(Q.tz,Y);if(W-G===0)return Y;{let $=new Date(X.getTime()-W),K=w90(Q.tz,$);if(K-W===0)return $;if(!J&&K-W>0)return $;if(J)throw Error("Invalid date passed to fromTZ()");return Y}};m5.toTZ=function(Q,J){let X=Q.toLocaleString("en-US",{timeZone:J}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:J}};m5.tp=(Q,J,X,G,Y,W,$)=>({y:Q,m:J,d:X,h:G,i:Y,s:W,tz:$});function w90(Q,J=new Date){let X=J.toLocaleString("en-US",{timeZone:Q,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=J.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function TC4(Q,J){let X=new Date(Date.parse(Q));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=Q.substring(9);return Q.includes("Z")||G.includes("-")||G.includes("+")?m5.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):m5.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),J)}m5.minitz=m5;var P90=32,cP=31|P90,P71=[1,2,4,8,16],D71=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(Q,J){this.pattern=Q,this.timezone=J,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 Q=this.pattern.replace(/\s+/g," ").split(" ");if(Q.length<5||Q.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(Q.length===5&&Q.unshift("0"),Q[3].indexOf("L")>=0&&(Q[3]=Q[3].replace("L",""),this.lastDayOfMonth=!0),Q[3]=="*"&&(this.starDOM=!0),Q[4].length>=3&&(Q[4]=this.replaceAlphaMonths(Q[4])),Q[5].length>=3&&(Q[5]=this.replaceAlphaDays(Q[5])),Q[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let J=new uX(new Date,this.timezone).getDate(!0);Q[0]=Q[0].replace("?",J.getSeconds().toString()),Q[1]=Q[1].replace("?",J.getMinutes().toString()),Q[2]=Q[2].replace("?",J.getHours().toString()),this.starDOM||(Q[3]=Q[3].replace("?",J.getDate().toString())),Q[4]=Q[4].replace("?",(J.getMonth()+1).toString()),this.starDOW||(Q[5]=Q[5].replace("?",J.getDay().toString()))}this.throwAtIllegalCharacters(Q),this.partToArray("second",Q[0],0,1),this.partToArray("minute",Q[1],0,1),this.partToArray("hour",Q[2],0,1),this.partToArray("day",Q[3],-1,1),this.partToArray("month",Q[4],-1,1),this.partToArray("dayOfWeek",Q[5],0,cP),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(Q,J,X,G){let Y=this[Q],W=Q==="day"&&this.lastDayOfMonth;if(J===""&&!W)throw TypeError("CronPattern: configuration entry "+Q+" ("+J+") is empty, check for trailing spaces.");if(J==="*")return Y.fill(G);let $=J.split(",");if($.length>1)for(let K=0;K<$.length;K++)this.partToArray(Q,$[K],X,G);else J.indexOf("-")!==-1&&J.indexOf("/")!==-1?this.handleRangeWithStepping(J,Q,X,G):J.indexOf("-")!==-1?this.handleRange(J,Q,X,G):J.indexOf("/")!==-1?this.handleStepping(J,Q,X,G):J!==""&&this.handleNumber(J,Q,X,G)}throwAtIllegalCharacters(Q){for(let J=0;J<Q.length;J++)if((J===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(Q[J]))throw TypeError("CronPattern: configuration entry "+J+" ("+Q[J]+") contains illegal characters.")}handleNumber(Q,J,X,G){let Y=this.extractNth(Q,J),W=parseInt(Y[0],10)+X;if(isNaN(W))throw TypeError("CronPattern: "+J+" is not a number: '"+Q+"'");this.setPart(J,W,Y[1]||G)}setPart(Q,J,X){if(!Object.prototype.hasOwnProperty.call(this,Q))throw TypeError("CronPattern: Invalid part specified: "+Q);if(Q==="dayOfWeek"){if(J===7&&(J=0),J<0||J>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+J);this.setNthWeekdayOfMonth(J,X);return}if(Q==="second"||Q==="minute"){if(J<0||J>=60)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="hour"){if(J<0||J>=24)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="day"){if(J<0||J>=31)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="month"&&(J<0||J>=12))throw RangeError("CronPattern: Invalid value for "+Q+": "+J);this[Q][J]=X}handleRangeWithStepping(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(W===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+Q+"'");let[,$,K,Z]=W,H=parseInt($,10)+X,F=parseInt(K,10)+X,q=parseInt(Z,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(q))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(q===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(q>this[J].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[J].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+Q+"'");for(let V=H;V<=F;V+=q)this.setPart(J,V,Y[1]||G)}extractNth(Q,J){let X=Q,G;if(X.includes("#")){if(J!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].split("-");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+Q+"'");let $=parseInt(W[0],10)+X,K=parseInt(W[1],10)+X;if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if($>K)throw TypeError("CronPattern: From value is larger than to value: '"+Q+"'");for(let Z=$;Z<=K;Z++)this.setPart(J,Z,Y[1]||G)}handleStepping(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].split("/");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+Q+"'");W[0]===""&&(W[0]="*");let $=0;W[0]!=="*"&&($=parseInt(W[0],10)+X);let K=parseInt(W[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[J].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[J].length+")");for(let Z=$;Z<this[J].length;Z+=K)this.setPart(J,Z,Y[1]||G)}replaceAlphaDays(Q){return Q.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(Q){return Q.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(Q){let J=Q.trim().toLowerCase();return J==="@yearly"||J==="@annually"?"0 0 1 1 *":J==="@monthly"?"0 0 1 * *":J==="@weekly"?"0 0 * * 0":J==="@daily"?"0 0 * * *":J==="@hourly"?"0 * * * *":Q}setNthWeekdayOfMonth(Q,J){if(typeof J!="number"&&J==="L")this.dayOfWeek[Q]=this.dayOfWeek[Q]|P90;else if(J===cP)this.dayOfWeek[Q]=cP;else if(J<6&&J>0)this.dayOfWeek[Q]=this.dayOfWeek[Q]|P71[J-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${J}, Type: ${typeof J}`)}},L71=[31,28,31,30,31,30,31,31,30,31,30,31],_W=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],uX=class Q{tz;ms;second;minute;hour;day;month;year;constructor(J,X){if(this.tz=X,J&&J instanceof Date)if(!isNaN(J))this.fromDate(J);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(J===void 0)this.fromDate(new Date);else if(J&&typeof J=="string")this.fromString(J);else if(J instanceof Q)this.fromCronDate(J);else throw TypeError("CronDate: Invalid type ("+typeof J+") passed to CronDate constructor")}isNthWeekdayOfMonth(J,X,G,Y){let W=new Date(Date.UTC(J,X,G)).getUTCDay(),$=0;for(let K=1;K<=G;K++)new Date(Date.UTC(J,X,K)).getUTCDay()===W&&$++;if(Y&cP&&P71[$-1]&Y)return!0;if(Y&P90){let K=new Date(Date.UTC(J,X+1,0)).getUTCDate();for(let Z=G+1;Z<=K;Z++)if(new Date(Date.UTC(J,X,Z)).getUTCDay()===W)return!1;return!0}return!1}fromDate(J){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=J.getUTCMilliseconds(),this.second=J.getUTCSeconds(),this.minute=J.getUTCMinutes()+this.tz,this.hour=J.getUTCHours(),this.day=J.getUTCDate(),this.month=J.getUTCMonth(),this.year=J.getUTCFullYear(),this.apply();else{let X=m5.toTZ(J,this.tz);this.ms=J.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=J.getMilliseconds(),this.second=J.getSeconds(),this.minute=J.getMinutes(),this.hour=J.getHours(),this.day=J.getDate(),this.month=J.getMonth(),this.year=J.getFullYear()}fromCronDate(J){this.tz=J.tz,this.year=J.year,this.month=J.month,this.day=J.day,this.hour=J.hour,this.minute=J.minute,this.second=J.second,this.ms=J.ms}apply(){if(this.month>11||this.day>L71[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let J=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=J.getUTCMilliseconds(),this.second=J.getUTCSeconds(),this.minute=J.getUTCMinutes(),this.hour=J.getUTCHours(),this.day=J.getUTCDate(),this.month=J.getUTCMonth(),this.year=J.getUTCFullYear(),!0}else return!1}fromString(J){if(typeof this.tz=="number"){let X=m5.fromTZISO(J);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(m5.fromTZISO(J,this.tz))}findNext(J,X,G,Y){let W=this[X],$;G.lastDayOfMonth&&(this.month!==1?$=L71[this.month]:$=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let Z=this[X]+Y;Z<G[X].length;Z++){let H=G[X][Z];if(X==="day"&&G.lastDayOfMonth&&Z-Y==$&&(H=1),X==="day"&&!G.starDOW){let F=G.dayOfWeek[(K+(Z-Y-1))%7];if(F&&F&cP)F=this.isNthWeekdayOfMonth(this.year,this.month,Z-Y,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);J.legacyMode&&!G.starDOM?H=H||F:H=H&&F}if(H)return this[X]=Z-Y,W!==this[X]?2:1}return 3}recurse(J,X,G){let Y=this.findNext(X,_W[G][0],J,_W[G][2]);if(Y>1){let W=G+1;for(;W<_W.length;)this[_W[W][0]]=-_W[W][2],W++;if(Y===3)return this[_W[G][1]]++,this[_W[G][0]]=-_W[G][2],this.apply(),this.recurse(J,X,0);if(this.apply())return this.recurse(J,X,G-1)}return G+=1,G>=_W.length?this:this.year>=3000?null:this.recurse(J,X,G)}increment(J,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(J,X,0)}getDate(J){return J||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)):m5.fromTZ(m5.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}};function AC4(Q){if(Q===void 0&&(Q={}),delete Q.name,Q.legacyMode=Q.legacyMode===void 0?!0:Q.legacyMode,Q.paused=Q.paused===void 0?!1:Q.paused,Q.maxRuns=Q.maxRuns===void 0?1/0:Q.maxRuns,Q.catch=Q.catch===void 0?!1:Q.catch,Q.interval=Q.interval===void 0?0:parseInt(Q.interval.toString(),10),Q.utcOffset=Q.utcOffset===void 0?void 0:parseInt(Q.utcOffset.toString(),10),Q.unref=Q.unref===void 0?!1:Q.unref,Q.startAt&&(Q.startAt=new uX(Q.startAt,Q.timezone)),Q.stopAt&&(Q.stopAt=new uX(Q.stopAt,Q.timezone)),Q.interval!==null){if(isNaN(Q.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(Q.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(Q.utcOffset!==void 0){if(isNaN(Q.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(Q.utcOffset<-870||Q.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(Q.utcOffset!==void 0&&Q.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(Q.unref!==!0&&Q.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return Q}function pP(Q){return Object.prototype.toString.call(Q)==="[object Function]"||typeof Q=="function"||Q instanceof Function}function EC4(Q){return pP(Q)}function jC4(Q){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(Q):Q&&typeof Q.unref<"u"&&Q.unref()}var w71=30000,M_=[],T_=class{name;options;_states;fn;constructor(Q,J,X){let G,Y;if(pP(J))Y=J;else if(typeof J=="object")G=J;else if(J!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(pP(X))Y=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=AC4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new D71("* * * * *")},Q&&(Q instanceof Date||typeof Q=="string"&&Q.indexOf(":")>0)?this._states.once=new uX(Q,this.options.timezone||this.options.utcOffset):this._states.pattern=new D71(Q,this.options.timezone),this.name){if(M_.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");M_.push(this)}return Y!==void 0&&EC4(Y)&&(this.fn=Y,this.schedule()),this}nextRun(Q){let J=this._next(Q);return J?J.getDate(!1):null}nextRuns(Q,J){this._states.maxRuns!==void 0&&Q>this._states.maxRuns&&(Q=this._states.maxRuns);let X=[],G=J||this._states.currentRun||void 0;for(;Q--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let Q=this.nextRun(this._states.currentRun),J=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return J&&X&&G&&Q!==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(Q){let J=this._next(Q);return J?Q instanceof uX||Q instanceof Date?J.getTime()-Q.getTime():J.getTime()-new uX(Q).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let Q=M_.indexOf(this);Q>=0&&M_.splice(Q,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(Q){if(Q&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");Q&&(this.fn=Q);let J=this.msToNext(),X=this.nextRun(this._states.currentRun);return J==null||isNaN(J)||X===null?this:(J>w71&&(J=w71),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),J),this._states.currentTimeout&&this.options.unref&&jC4(this._states.currentTimeout),this)}async _trigger(Q){if(this._states.blocking=!0,this._states.currentRun=new uX(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(J){pP(this.options.catch)&&this.options.catch(J,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new uX(Q,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(Q){let J=new Date,X=!this._states.paused&&J.getTime()>=Q.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&pP(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(Q){let J=!!(Q||this._states.currentRun),X=!1;!Q&&this.options.startAt&&this.options.interval&&([Q,J]=this._calculatePreviousRun(Q,J),X=!Q),Q=new uX(Q,this.options.timezone||this.options.utcOffset),this.options.startAt&&Q&&Q.getTime()<this.options.startAt.getTime()&&(Q=this.options.startAt);let G=this._states.once||new uX(Q,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,J)),this._states.once&&this._states.once.getTime()<=Q.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun(Q,J){let X=new uX(void 0,this.options.timezone||this.options.utcOffset),G=Q;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Y=G.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)G=new uX(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=G.getTime()+this.options.interval*1000;J=!0}return G===null&&(G=void 0),[G,J]}};var A_={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};U_();function M71(){return async(Q,J)=>{try{let X=await XZ.create(),G=await H71(Q,{...X,auth:{...X.auth,user:{id:"notify-worker"}}}),W=await j80.forClient(G).ON_EVENTS({events:J});return{success:W.success,error:W.error,retryAfter:W.retryAfter,results:W.results}}catch(X){let G=X instanceof Error?X.message:String(X);return console.error(`[EventBus] Failed to notify connection ${Q}:`,G),{success:!1,error:G}}}}function T71(Q){return{specversion:"1.0",id:Q.id,source:Q.source,type:Q.type,time:Q.time,subject:Q.subject??void 0,datacontenttype:Q.datacontenttype,dataschema:Q.dataschema??void 0,data:Q.data??void 0}}function IC4(Q){let J=new Map;for(let G of Q){let Y=G.subscription.connectionId,W=J.get(Y);if(W){if(W.deliveryIds.push(G.delivery.id),!W.seenEventIds.has(G.event.id))W.seenEventIds.add(G.event.id),W.events.push(T71(G.event))}else J.set(Y,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[T71(G.event)],seenEventIds:new Set([G.event.id])})}let X=new Map;for(let[G,Y]of J)X.set(G,{connectionId:Y.connectionId,deliveryIds:Y.deliveryIds,events:Y.events});return X}class M90{storage;notifySubscriber;running=!1;processing=!1;config;constructor(Q,J){this.storage=Q;this.notifySubscriber=M71(),this.config={...A_,...J}}async start(){if(this.running)return;let Q=await this.storage.resetStuckDeliveries();if(Q>0)console.log(`[EventBus] Reset ${Q} 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(Q){console.error("[EventBus] Error processing events:",Q)}finally{this.processing=!1}}async processEvents(){let Q=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Q.length===0)return;let J=IC4(Q),X=new Set;for(let[G,Y]of J){try{let W=await this.notifySubscriber(Y.connectionId,Y.events);if(W.results&&Object.keys(W.results).length>0)await this.processPerEventResults(Y,W);else if(W.success)await this.storage.markDeliveriesDelivered(Y.deliveryIds);else if(W.retryAfter&&W.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Y.deliveryIds,W.retryAfter);else await this.storage.markDeliveriesFailed(Y.deliveryIds,W.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(W){let $=W instanceof Error?W.message:String(W);console.error(`[EventBus] Failed to notify subscription ${G}:`,$),await this.storage.markDeliveriesFailed(Y.deliveryIds,$,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}for(let W of Q)if(Y.deliveryIds.includes(W.delivery.id))X.add(W.event.id)}for(let G of X)try{await this.storage.updateEventStatus(G);let Y=Q.find((W)=>W.event.id===G)?.event;if(Y?.cron)await this.scheduleNextCronDelivery(Y)}catch(Y){console.error(`[EventBus] Failed to update event status ${G}:`,Y)}}async processPerEventResults(Q,J){let X=[],G=new Map,Y=[],W=new Map;for(let $=0;$<Q.events.length;$++){let K=Q.events?.[$];if(!K)continue;let Z=Q.deliveryIds?.[$];if(!Z)continue;W.set(K.id,Z)}for(let $ of Q.events){let K=W.get($.id);if(!K)continue;let Z=J.results?.[$.id];if(Z)if(Z.success)X.push(K);else if(Z.retryAfter&&Z.retryAfter>0){let H=G.get(Z.retryAfter)||[];H.push(K),G.set(Z.retryAfter,H)}else Y.push({deliveryId:K,error:Z.error||"Event processing failed"});else if(J.success)X.push(K);else if(J.retryAfter&&J.retryAfter>0){let H=G.get(J.retryAfter)||[];H.push(K),G.set(J.retryAfter,H)}else Y.push({deliveryId:K,error:J.error||"Batch processing failed"})}if(X.length>0)await this.storage.markDeliveriesDelivered(X);for(let[$,K]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(K,$);if(Y.length>0){let $=new Map;for(let{deliveryId:K,error:Z}of Y){let H=$.get(Z)||[];H.push(K),$.set(Z,H)}for(let[K,Z]of $)await this.storage.markDeliveriesFailed(Z,K,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Q){if(!Q.cron)return;try{let X=new T_(Q.cron).nextRun();if(!X){console.log(`[EventBus] Cron expression for event ${Q.id} has no more runs`);return}let G=X.toISOString(),Y=await this.storage.getMatchingSubscriptions(Q);if(Y.length===0){console.log(`[EventBus] No subscriptions for cron event ${Q.id}, skipping next delivery`);return}await this.storage.createDeliveries(Q.id,Y.map((W)=>W.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Q.id} at ${G}`)}catch(J){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Q.id}:`,J)}}}class T90{storage;worker;notifyStrategy;running=!1;constructor(Q){this.storage=Q.storage,this.notifyStrategy=Q.notifyStrategy,this.worker=new M90(this.storage,Q.config)}async publish(Q,J,X){if(X.deliverAt&&X.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(X.cron)try{let H=new T_(X.cron).nextRun();if(!H)throw Error("Cron expression does not produce a next run time");G=H.toISOString()}catch(Z){throw Error(`Invalid cron expression: ${Z instanceof Error?Z.message:String(Z)}`)}let Y=crypto.randomUUID(),W=new Date().toISOString(),$=await this.storage.publishEvent({id:Y,organizationId:Q,type:X.type,source:J,subject:X.subject,time:W,data:X.data,cron:X.cron}),K=await this.storage.getMatchingSubscriptions($);if(K.length>0){let Z=X.deliverAt??G;if(await this.storage.createDeliveries(Y,K.map((H)=>H.id),Z),this.notifyStrategy&&!Z)await this.notifyStrategy.notify(Y).catch((H)=>{console.warn("[EventBus] Notify failed (non-critical):",H)})}return $}async subscribe(Q,J){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Q,connectionId:J.connectionId,publisher:J.publisher,eventType:J.eventType,filter:J.filter})}async unsubscribe(Q,J){return this.storage.unsubscribe(J,Q)}async listSubscriptions(Q,J){return this.storage.listSubscriptions(Q,J)}async getSubscription(Q,J){return this.storage.getSubscription(J,Q)}async getEvent(Q,J){return this.storage.getEvent(J,Q)}async cancelEvent(Q,J,X){return this.storage.cancelEvent(J,Q,X)}async ackEvent(Q,J,X){return this.storage.ackDelivery(J,Q,X)}async syncSubscriptions(Q,J){return this.storage.syncSubscriptions({organizationId:Q,...J})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Q)=>{console.error("[EventBus] Error processing after notify:",Q)})});await this.worker.processNow().catch((Q)=>{console.error("[EventBus] Error processing pending events on startup:",Q)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Q){console.error("[EventBus] Error stopping notify strategy:",Q)}console.log("[EventBus] Stopped")}isRunning(){return this.running}}function A71(...Q){return{async start(J){await Promise.all(Q.map((X)=>X.start(J)))},async stop(){await Promise.all(Q.map((J)=>J.stop().catch((X)=>{console.error("[NotifyStrategy] Error stopping strategy:",X)})))},async notify(J){await Promise.all(Q.map((X)=>X.notify(J).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class E_{intervalMs;timer=null;onNotify=null;constructor(Q){this.intervalMs=Q}async start(Q){if(this.timer)return;this.onNotify=Q,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(Q){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}import{sql as CC4}from"kysely";var dU="mesh_events";class A90{db;pool;listenClient=null;onNotify=null;constructor(Q,J){this.db=Q;this.pool=J}async start(Q){if(this.listenClient)return;this.onNotify=Q;try{this.listenClient=await this.pool.connect(),this.listenClient.on("notification",(J)=>{if(J.channel===dU&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(J)=>{console.error("[PostgresNotify] Connection error:",J),this.cleanup()}),await this.listenClient.query(`LISTEN ${dU}`),console.log("[PostgresNotify] Started LISTEN on",dU)}catch(J){console.error("[PostgresNotify] Failed to start LISTEN:",J),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${dU}`),console.log("[PostgresNotify] Stopped LISTEN on",dU)}catch{}this.cleanup()}}async notify(Q){try{await CC4`SELECT pg_notify(${dU}, ${Q})`.execute(this.db)}catch(J){console.warn("[PostgresNotify] Failed to send NOTIFY:",J)}}cleanup(){if(this.listenClient)this.listenClient.release(),this.listenClient=null;this.onNotify=null}}function E71(Q,J){let X=O71(Q.db),G=J?.pollIntervalMs??A_.pollIntervalMs,Y=Q.type==="postgres"?A71(new E_(G),new A90(Q.db,Q.pool)):new E_(G);return new T90({storage:X,config:J,notifyStrategy:Y})}var j71={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 I71=new r5;I71.get("/config",async(Q)=>{try{let J=Object.keys(Z9.socialProviders??{}),X=J.length>0,G=J.map((W)=>({name:W,icon:j71[W].icon})),Y={emailAndPassword:{enabled:Z9.emailAndPassword?.enabled??!1},magicLink:{enabled:Z9.magicLinkConfig?.enabled??!1},socialProviders:{enabled:X,providers:G},sso:Z9.ssoConfig?{enabled:!0,providerId:Z9.ssoConfig.providerId}:{enabled:!1}};return Q.json({success:!0,config:Y})}catch(J){let X=J instanceof Error?J.message:"Failed to load auth config";return Q.json({success:!1,error:X},500)}});var C71=I71;fk();eQ();class nP{proxies=new Map;constructor(){}static async create(Q,J){let X=new nP,G=await Promise.allSettled(Q.map(async({connection:Y,selectedTools:W,selectedResources:$,selectedPrompts:K})=>{try{let Z=await J.createMCPProxy(Y);return{connection:Y,proxy:Z,selectedTools:W,selectedResources:$,selectedPrompts:K}}catch(Z){return console.error(`[gateway] Failed to create proxy for connection ${Y.id}:`,Z),null}}));for(let Y of G)if(Y.status==="fulfilled"&&Y.value)X.proxies.set(Y.value.connection.id,Y.value);return X}get(Q){return this.proxies.get(Q)}entries(){return this.proxies.entries()}forEach(Q){this.proxies.forEach((J,X)=>Q(J,X))}async mapAsync(Q){let J=[];for(let[X,G]of this.proxies.entries())J.push(Q(G,X));return await Promise.all(J)}async mapSettled(Q){return Promise.allSettled(Array.from(this.proxies.entries()).map(([J,X])=>Q(X,J)))}get size(){return this.proxies.size}}w4();ZP();function R71(Q){let J=[],X=[],G=(Z)=>{let H=Q.newFunction(Z,(...F)=>{try{let q=F.map((V)=>Q.dump(V));J.push({type:Z??"log",content:q.map(String).join(" ")})}finally{F.forEach((q)=>q.dispose())}return Q.undefined});return X.push(H),H},Y=Q.newObject();X.push(Y);let W=G("log"),$=G("warn"),K=G("error");return Q.setProp(Y,"log",W),Q.setProp(Y,"warn",$),Q.setProp(Y,"error",K),Q.setProp(Q.global,"console",Y),{logs:J,[Symbol.dispose](){X.forEach((Z)=>Z.dispose())}}}u90();I_();async function t71(Q){let J=m90(await Q),[X,G,{QuickJSWASMModule:Y}]=await Promise.all([J.importModuleLoader().then(m90),J.importFFI(),Promise.resolve().then(() => (s71(),o71)).then(m90)]),W=await X();W.type="sync";let $=new G(W);return new Y(W,$)}function m90(Q){return Q&&"default"in Q&&Q.default?Q.default&&"default"in Q.default&&Q.default.default?Q.default.default:Q.default:Q}var dC4={type:"sync",importFFI:()=>Promise.resolve().then(() => (QG1(),e71)).then((Q)=>Q.QuickJSFFI),importModuleLoader:()=>Promise.resolve().then(() => (XG1(),JG1)).then((Q)=>Q.default)},YG1=dC4;var GG1;function WG1(){return GG1??=t71(YG1),GG1}async function $G1(Q={}){let X=(await WG1()).newRuntime({maxStackSizeBytes:Q.stackSizeBytes,memoryLimitBytes:Q.memoryLimitBytes});return{newContext:({interruptAfterMs:Y,...W}={})=>{let $=X.newContext({intrinsics:{...h90,...W}}),K=0,Z=(H)=>{K=H?Date.now()+H:0};if(X.setInterruptHandler(()=>{let H=Date.now(),F=K>0&&H>K;return F}),Y)Z(Y);return $},dispose:()=>{X.dispose()},[Symbol.dispose](){X.dispose()}}}function cU(Q){if(Q===null)return"null";if(Q===void 0)return"undefined";if(Q instanceof Error){let J=Q.message||Q.name||"Error";if(Q.stack&&Q.stack.length<2000)return`${J}
1075
+ `})}}}var WC4=[K00({organizationCreation:{afterCreate:async(Q)=>{await gY1(Q.organization.id,Q.member.userId)}},ac:D_,creatorRole:"owner",allowUserToCreateOrganization:!0,dynamicAccessControl:{enabled:!0,maximumRolesPerOrganization:500,enableCustomResources:!0,allowedRolesToCreateResources:uY1,resourceNameValidation:(Q)=>{return{valid:/^[a-zA-Z0-9-_]+$/.test(Q)}}},roles:{user:XC4,admin:YC4,owner:GC4},sendInvitationEmail:cY1}),M00({loginPage:"/login",oidcConfig:{scopes:pY1,metadata:{scopes_supported:pY1},loginPage:"/login"}}),P00({enableMetadata:!0,maximumNameLength:64,keyExpiration:{minExpiresIn:0.003472222222222222},enableSessionForAPIKeys:!0,customAPIKeyGetter:(Q)=>{if(Q.headers?.get("X-MCP-Session-Auth")==="true")return null;let X=Q.headers?.get("Authorization");if(X?.startsWith("Bearer "))return X.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}}),F00({defaultRole:"user",adminRoles:["admin","owner"]}),j00(),z00({jwt:{expirationTime:"5m"}}),qe0(Z9.ssoConfig?mY1(Z9.ssoConfig):void 0),...Z9.magicLinkConfig&&Z9.emailProviders&&Z9.emailProviders.length>0?[E00(j61(Z9.magicLinkConfig,Z9.emailProviders))]:[]],$C4=H10(),KC4=E61($C4),kW=De({baseURL:process.env.BASE_URL||"http://localhost:3000",database:KC4,emailAndPassword:{enabled:!0},...Z9,plugins:WC4,databaseHooks:{user:{create:{after:async(Q)=>{if(Nv.autoCreateOrganizationOnSignup===!1)return;let J=Q.name?Q.name.split(" ")[0]:Q.email.split("@")[0],X=3;for(let G=0;G<X;G++){let Y=`${J} ${eI4()}`,W=tI4(Y);try{await kW.api.createOrganization({body:{name:Y,slug:W,userId:Q.id}});return}catch($){if(!($ instanceof Error&&("body"in $)&&$.body?.code==="ORGANIZATION_ALREADY_EXISTS")||G===X-1){console.error("Failed to create default organization:",$);return}}}}}}}});MJ();import{randomBytes as ZC4}from"crypto";var uP=null;function nY1(){if(uP)return uP;let Q=process.env.MESH_JWT_SECRET??Z9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Q)uP=new TextEncoder().encode(Q);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),uP=new Uint8Array(ZC4(32));return uP}async function iY1(Q,J="5m"){let X=nY1();return await new lQ(Q).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(J).sign(X)}async function rY1(Q){try{let J=nY1(),{payload:X}=await D8(Q,J);return X}catch{return}}class N90{db;constructor(Q){this.db=Q}async get(Q){let J=await this.db.selectFrom("organization_settings").selectAll().where("organizationId","=",Q).executeTakeFirst();if(!J)return null;return{organizationId:J.organizationId,sidebar_items:J.sidebar_items?typeof J.sidebar_items==="string"?JSON.parse(J.sidebar_items):J.sidebar_items:null,createdAt:J.createdAt,updatedAt:J.updatedAt}}async upsert(Q,J){let X=new Date().toISOString(),G=J?.sidebar_items?JSON.stringify(J.sidebar_items):null;await this.db.insertInto("organization_settings").values({organizationId:Q,sidebar_items:G,createdAt:X,updatedAt:X}).onConflict((W)=>W.column("organizationId").doUpdateSet({sidebar_items:G?G:void 0,updatedAt:X})).execute();let Y=await this.get(Q);if(!Y)return{organizationId:Q,sidebar_items:J?.sidebar_items??null,createdAt:X,updatedAt:X};return Y}}mH();class aY1 extends Error{constructor(Q){super(Q);this.name="UnauthorizedError"}}class B90 extends Error{constructor(Q){super(Q);this.name="ForbiddenError"}}class lU{userId;toolName;boundAuth;role;connectionId;_granted=!1;constructor(Q,J,X,G,Y,W=AY.SELF){this.userId=J;this.toolName=X;this.boundAuth=G;this.role=Y;this.connectionId=W}[Symbol.dispose](){this._granted=!1}setToolName(Q){this.toolName=Q}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Q){if(this._granted)return;if(!this.userId&&!this.boundAuth)throw new aY1("Authentication required. Please provide a valid OAuth token or API key.");let J=Q.length>0?Q:this.toolName?[this.toolName]:[];if(J.length===0)throw new B90("No resources specified for access check");for(let X of J)if(await this.checkResource(X)){this.grant();return}throw new B90(`Access denied to: ${J.join(", ")}`)}async checkResource(Q){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let J={};if(this.connectionId)J[this.connectionId]=[Q];return this.boundAuth.hasPermission(J)}granted(){return this._granted}}class O90{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(Q){return GO.startActiveSpan("redactor.redact",(J)=>{try{if(Q===null||Q===void 0)return Q;if(typeof Q==="string")return J.setAttribute("data.type","string"),this.redactString(Q);if(Array.isArray(Q))return J.setAttribute("data.type","array"),J.setAttribute("data.length",Q.length),Q.map((X)=>this.redact(X));if(typeof Q==="object"){J.setAttribute("data.type","object");let X={};for(let[G,Y]of Object.entries(Q)){let W=this.redactString(G);X[W]=this.redact(Y)}return X}return J.setAttribute("data.type",typeof Q),Q}finally{J.end()}})}redactString(Q){return GO.startActiveSpan("redactor.redactString",(J)=>{try{J.setAttribute("text.length",Q.length);let X=Q,G=0;for(let Y of this.patterns){let W=Q.match(Y.regex);if(W)G+=W.length,J.setAttribute(`redaction.${Y.type}.count`,W.length);X=X.replace(Y.regex,`[REDACTED:${Y.type}]`)}return J.setAttribute("redaction.total_count",G),X}finally{J.end()}})}}class D90{db;redactor;constructor(Q){this.db=Q;this.redactor=new O90}async log(Q){await this.logBatch([Q])}async logBatch(Q){if(Q.length===0)return;let J=Q.map((X)=>({...X,input:this.redactor.redact(X.input),output:this.redactor.redact(X.output)}));await this.db.transaction().execute(async(X)=>{await X.insertInto("monitoring_logs").values(J.map((G)=>this.toDbRow(G))).execute()})}async query(Q){let J=this.db.selectFrom("monitoring_logs").selectAll(),X=this.db.selectFrom("monitoring_logs").select((K)=>K.fn.count("id").as("count"));if(Q.organizationId)J=J.where("organization_id","=",Q.organizationId),X=X.where("organization_id","=",Q.organizationId);if(Q.connectionId)J=J.where("connection_id","=",Q.connectionId),X=X.where("connection_id","=",Q.connectionId);if(Q.gatewayId)J=J.where("gateway_id","=",Q.gatewayId),X=X.where("gateway_id","=",Q.gatewayId);if(Q.toolName)J=J.where("tool_name","=",Q.toolName),X=X.where("tool_name","=",Q.toolName);if(Q.isError!==void 0)J=J.where("is_error","=",Q.isError?1:0),X=X.where("is_error","=",Q.isError?1:0);if(Q.startDate)J=J.where("timestamp",">=",Q.startDate.toISOString()),X=X.where("timestamp",">=",Q.startDate.toISOString());if(Q.endDate)J=J.where("timestamp","<=",Q.endDate.toISOString()),X=X.where("timestamp","<=",Q.endDate.toISOString());if(J=J.orderBy("timestamp","desc"),Q.limit)J=J.limit(Q.limit);if(Q.offset)J=J.offset(Q.offset);let[G,Y]=await Promise.all([J.execute(),X.executeTakeFirst()]),W=Number(Y?.count||0);return{logs:G.map((K)=>this.fromDbRow(K)),total:W}}async getStats(Q){let J=this.db.selectFrom("monitoring_logs").where("organization_id","=",Q.organizationId);if(Q.startDate)J=J.where("timestamp",">=",Q.startDate.toISOString());if(Q.endDate)J=J.where("timestamp","<=",Q.endDate.toISOString());let X=await J.select([($)=>$.fn.count("id").as("total_count"),($)=>$.fn.sum($.ref("is_error")).as("error_count"),($)=>$.fn.avg("duration_ms").as("avg_duration")]).executeTakeFirst(),G=Number(X?.total_count||0),Y=Number(X?.error_count||0),W=Number(X?.avg_duration||0);return{totalCalls:G,errorRate:G>0?Y/G:0,avgDurationMs:W}}toDbRow(Q){return{id:Q.id||a7("log"),organization_id:Q.organizationId,connection_id:Q.connectionId,connection_title:Q.connectionTitle,tool_name:Q.toolName,input:JSON.stringify(Q.input),output:JSON.stringify(Q.output),is_error:Q.isError?1:0,error_message:Q.errorMessage||null,duration_ms:Q.durationMs,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp,user_id:Q.userId||null,request_id:Q.requestId,user_agent:Q.userAgent||null,gateway_id:Q.gatewayId||null}}fromDbRow(Q){let J=typeof Q.input==="string"?JSON.parse(Q.input):Q.input,X=typeof Q.output==="string"?JSON.parse(Q.output):Q.output,G=typeof Q.timestamp==="string"?new Date(Q.timestamp):Q.timestamp;return{id:Q.id,organizationId:Q.organization_id,connectionId:Q.connection_id,connectionTitle:Q.connection_title,toolName:Q.tool_name,input:J,output:X,isError:Q.is_error===1,errorMessage:Q.error_message,durationMs:Q.duration_ms,timestamp:G,userId:Q.user_id,requestId:Q.request_id,userAgent:Q.user_agent,gatewayId:Q.gateway_id}}}mH();_80();function oY1(Q){let J=null;return()=>{if(J)return J;return J=Q().catch((X)=>{throw J=null,X}),J}}class sY1{factory;promise=null;constructor(Q){this.factory=Q}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(Q,J){return this.getOrCreatePromise().then(Q,J)}catch(Q){return this.getOrCreatePromise().catch(Q)}finally(Q){return this.getOrCreatePromise().finally(Q)}}function XG(Q){return new sY1(Q)}JP();WP();fk();eQ();K_();var L_=new r5;async function tY1(Q,J){return(await J.storage.connections.findById(Q))?.connection_url??null}async function w_(Q){let X=new URL(Q).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let G=new URL(Q);G.pathname=`${X}/.well-known/oauth-protected-resource`;let Y=await fetch(G.toString(),{method:"GET",headers:{Accept:"application/json"}});if(Y.ok)return Y;if(Y.status!==404&&Y.status!==401)return Y;let W=new URL(Q);if(W.pathname=`/.well-known/oauth-protected-resource${X}`,Y=await fetch(W.toString(),{method:"GET",headers:{Accept:"application/json"}}),Y.status!==404&&Y.status!==401)return Y;let $=new URL(Q);return $.pathname="/.well-known/oauth-protected-resource",Y=await fetch($.toString(),{method:"GET",headers:{Accept:"application/json"}}),Y}async function HC4(Q,J){let X=await tY1(Q,J);if(!X)return null;try{let G=await w_(X);if(!G.ok)return null;return(await G.json()).authorization_servers?.[0]??null}catch{return null}}async function eY1(Q){let J=Q.get("meshContext");if(!J)J=await XZ.create(Q.req.raw),Q.set("meshContext",J);return J}async function Q71({error:Q,reqUrl:J,connectionId:X,connectionUrl:G,headers:Y}){if(!(Q.status===401||Q.message?.includes("401")||Q.message?.toLowerCase().includes("unauthorized")))return null;if(await fetch(G,{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"}}})}).then((K)=>K.headers.has("WWW-Authenticate")).catch(()=>!1))return new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${J.origin}/mcp/${X}/.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 P_=(Q)=>{if(!(Q.hostname==="localhost"||Q.hostname==="127.0.0.1"))Q.protocol="https:";return Q},J71=async(Q)=>{let J=Q.req.param("connectionId"),X=await eY1(Q),G=await tY1(J,X);if(!G)return Q.json({error:"Connection not found"},404);try{let Y=await w_(G);if(!Y.ok)return new Response(Y.body,{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}});let W=await Y.json(),$=P_(new URL(Q.req.url)),K=`${$.origin}/mcp/${J}`,Z=`${$.origin}/oauth-proxy/${J}`,H={...W,resource:K,authorization_servers:[Z]};return new Response(JSON.stringify(H),{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}})}catch(Y){let W=Y;return console.error("[oauth-proxy] Failed to proxy OAuth protected resource metadata:",W),Q.json({error:"Failed to proxy OAuth metadata",message:W.message},502)}};L_.get("/.well-known/oauth-protected-resource/mcp/:connectionId",(Q)=>J71(Q));L_.get("/mcp/:connectionId/.well-known/oauth-protected-resource",(Q)=>J71(Q));async function L90(Q){let X=new URL(Q).pathname;if(X.endsWith("/"))X=X.slice(0,-1);let G=X!==""&&X!=="/",Y=[];if(G){let $=new URL(Q);$.pathname=`/.well-known/oauth-authorization-server${X}`,Y.push($);let K=new URL(Q);K.pathname=`/.well-known/openid-configuration${X}`,Y.push(K);let Z=new URL(Q);Z.pathname=`${X}/.well-known/openid-configuration`,Y.push(Z)}else{let $=new URL(Q);$.pathname="/.well-known/oauth-authorization-server",Y.push($);let K=new URL(Q);K.pathname="/.well-known/openid-configuration",Y.push(K)}let W=null;for(let $ of Y){if(W=await fetch($.toString(),{method:"GET",headers:{Accept:"application/json"}}),W.ok)return W;if(W.status!==404&&W.status!==401)return W}return W}L_.get("/.well-known/oauth-authorization-server/oauth-proxy/:connectionId",async(Q)=>{let J=Q.req.param("connectionId"),X=await eY1(Q),G=await HC4(J,X);if(!G)return Q.json({error:"Connection not found or no auth server"},404);try{let Y=await L90(G);if(!Y.ok)return new Response(Y.body,{status:Y.status,statusText:Y.statusText,headers:{"Content-Type":"application/json"}});let W=await Y.json(),K=`${P_(new URL(Q.req.url)).origin}/oauth-proxy/${J}`,Z={...W,authorization_endpoint:W.authorization_endpoint?`${K}/authorize`:void 0,token_endpoint:W.token_endpoint?`${K}/token`:void 0,registration_endpoint:W.registration_endpoint?`${K}/register`:void 0};return new Response(JSON.stringify(Z),{status:200,headers:{"Content-Type":"application/json"}})}catch(Y){let W=Y;return console.error("[oauth-proxy] Failed to proxy auth server metadata:",W),Q.json({error:"Failed to proxy auth server metadata",message:W.message},502)}});var X71=L_;function FC4(Q){if(!Q.isError)return;let J=Q.content;if(!Array.isArray(J))return;for(let X of J)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function Y71(Q){if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q,X=J.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return J}return{value:Q}}async function qC4(Q,J){let X=Q.body;if(!X)return{text:"",truncated:!1};let G=X.getReader(),Y=new TextDecoder,W=!1,$=0,K=[];try{while(!0){let{value:Z,done:H}=await G.read();if(H)break;if(Z){if($+=Z.byteLength,$>J){W=!0;let F=J-($-Z.byteLength);if(F>0)K.push(Y.decode(Z.slice(0,F),{stream:!0}));break}K.push(Y.decode(Z,{stream:!0}))}}}finally{G.releaseLock()}return K.push(Y.decode()),{text:K.join(""),truncated:W}}async function mP(Q){let{ctx:J,enabled:X}=Q,G=Q.organizationId??J.organization?.id;if(!X||!G)return;await J.storage.monitoring.log({organizationId:G,connectionId:Q.connectionId,connectionTitle:Q.connectionTitle,toolName:Q.request.params.name,input:Q.request.params.arguments??{},output:Q.output,isError:Q.isError,errorMessage:Q.errorMessage,durationMs:Q.durationMs,timestamp:new Date,userId:J.auth.user?.id||J.auth.apiKey?.userId||null,requestId:J.metadata.requestId,userAgent:J.metadata.userAgent,gatewayId:J.gatewayId})}function G71(Q){let{ctx:J,enabled:X,connectionId:G,connectionTitle:Y}=Q;return async(W,$)=>{let K=Date.now();try{let Z=await $(),H=Date.now()-K;return await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:Y71(Z),isError:Boolean(Z.isError),errorMessage:FC4(Z),durationMs:H}),Z}catch(Z){let H=Z,F=Date.now()-K;throw await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),Z}}}function W71(Q){let{ctx:J,enabled:X,connectionId:G,connectionTitle:Y}=Q;return async(W,$)=>{let K=Date.now();try{let Z=await $(),H=J.organization?.id;if(X&&H){let F=Z.clone();(async()=>{try{let{text:q,truncated:V}=await qC4(F,262144),z=Date.now()-K,U=F.headers.get("content-type")??"",N=q;if(U.includes("application/json"))try{N=q.length?JSON.parse(q):null}catch{N=q}let D=Z.status>=400,P=D&&N&&typeof N==="object"&&"error"in N?N.error:void 0,j=typeof P==="string"&&P?P:D&&typeof N==="string"&&N.trim()?N.slice(0,500):D?`HTTP ${Z.status} ${Z.statusText}`.trim():V?"Response body truncated to 262144 bytes":void 0;await mP({ctx:J,enabled:X,organizationId:H,connectionId:G,connectionTitle:Y,request:W,output:Y71(N),isError:D,errorMessage:j,durationMs:z})}catch(q){let V=Date.now()-K;await mP({ctx:J,enabled:X,organizationId:H,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${q.message}`,durationMs:V})}})()}return Z}catch(Z){let H=Z,F=Date.now()-K;throw await mP({ctx:J,enabled:X,connectionId:G,connectionTitle:Y,request:W,output:{},isError:!0,errorMessage:H.message,durationMs:F}),Z}}}var $71=new r5;function VC4(Q,J){return async(X,G)=>{try{let Y=X.params.name;return await new lU(Q.authInstance,Q.auth.user?.id??Q.auth.apiKey?.userId,Y,Q.boundAuth,Q.auth.user?.role,J).check(Y),await G()}catch(Y){return{content:[{type:"text",text:`Authorization failed: ${Y.message}`}],isError:!0}}}}function zC4(Q,J){return async(X,G)=>{try{let Y=X.params.name;return await new lU(Q.authInstance,Q.auth.user?.id??Q.auth.apiKey?.userId,Y,Q.boundAuth,Q.auth.user?.role,J).check(Y),await G()}catch(Y){return new Response(JSON.stringify({error:`Authorization failed: ${Y.message}`}),{status:403,headers:{"Content-Type":"application/json"}})}}}async function K71(Q,J,{superUser:X}){let G=typeof Q==="string"?await J.storage.connections.findById(Q,J.organization?.id):Q;if(!G)throw Error("Connection not found");let Y=G?.id;if(J.organization&&G.organization_id!==J.organization.id)throw Error("Connection does not belong to the active organization");if(J.organization??={id:G.organization_id},G.status!=="active")throw Error(`Connection inactive: ${G.status}`);let W,$=J.auth.user?.connectionId,K=oY1(async()=>{let _=k80(G.configuration_state,G.configuration_scopes),h=J.auth.user?.id??J.auth.apiKey?.userId;if(!h){console.error("User ID required to issue configuration token");return}try{W=await iY1({sub:h,user:{id:h},metadata:{state:G.configuration_state??void 0,meshUrl:process.env.MESH_URL??J.baseUrl,connectionId:Y,organizationId:J.organization?.id},permissions:_})}catch(m){console.error("Failed to issue configuration token:",m)}}),Z=async()=>{await K();let _={...$?{"x-caller-id":$}:{}};if(G.connection_token)_.Authorization=`Bearer ${G.connection_token}`;if(W)_["x-mesh-token"]=W;if(G.connection_headers)Object.assign(_,G.connection_headers);return _},H=async()=>{let _=await Z(),h=new EW(new URL(G.connection_url),{requestInit:{headers:_}}),m=new AW({name:"mcp-mesh-proxy",version:"1.0.0"});return await m.connect(h),m},F=X?async(_,h)=>await h():VC4(J,Y),q=X?async(_,h)=>await h():zC4(J,Y),V={enabled:s01().enabled,connectionId:Y,connectionTitle:G.title,ctx:J},z=G71(V),U=W71(V),N=DP(z,F),D=DP(U,q),P=async(_)=>{return N(_,async()=>{let h=await H(),m=Date.now();return await J.tracer.startActiveSpan("mcp.proxy.callTool",{attributes:{"connection.id":Y,"tool.name":_.params.name}},async(b)=>{try{let S=await h.callTool(_.params),g=Date.now()-m;return J.meter.createHistogram("connection.proxy.duration").record(g,{"connection.id":Y,"tool.name":_.params.name,status:"success"}),J.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":Y,"tool.name":_.params.name,status:"success"}),b.end(),S}catch(S){let g=S,J0=Date.now()-m;throw J.meter.createHistogram("connection.proxy.duration").record(J0,{"connection.id":Y,"tool.name":_.params.name,status:"error"}),J.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":Y,"tool.name":_.params.name,error:g.message}),b.recordException(g),b.end(),S}finally{await h.close()}})})};return{fetch:async(_)=>{let h=new URL(_.url),m;try{m=await H()}catch(g){let J0=await Q71({error:g,reqUrl:h,connectionId:Y,connectionUrl:G.connection_url,headers:await Z()});if(J0)return J0;throw g}let b=new eH({name:"mcp-mesh",version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}}}),S=new ZF({enableJsonResponse:_.headers.get("Accept")?.includes("application/json")??!1});return await b.connect(S),b.server.setRequestHandler(xK,async(g)=>{return await m.listTools()}),b.server.setRequestHandler(gK,P),b.server.setRequestHandler(_K,async()=>{if(m.getServerCapabilities()?.resources)return await m.listResources();return{resources:[]}}),b.server.setRequestHandler(hK,async(g)=>{return await m.readResource(g.params)}),b.server.setRequestHandler(yK,async()=>{if(m.getServerCapabilities()?.resourceTemplates)return await m.listResourceTemplates();return{resourceTemplates:[]}}),b.server.setRequestHandler(fK,async()=>{if(m.getServerCapabilities()?.prompts)return await m.listPrompts();return{prompts:[]}}),b.server.setRequestHandler(bK,async(g)=>{return await m.getPrompt(g.params)}),await S.handleMessage(_)},client:{callTool:(_)=>{return P({method:"tools/call",params:_})},listTools:async()=>{if(G.tools&&G.tools.length>0)return{tools:G.tools.map((h)=>({name:h.name,description:h.description,inputSchema:h.inputSchema,outputSchema:h.outputSchema}))};return await(await H()).listTools()},listResources:async()=>{let _=await H();if(_.getServerCapabilities()?.resources)return await _.listResources();return{resources:[]}},readResource:async(_)=>{return await(await H()).readResource(_)},listResourceTemplates:async()=>{let _=await H();if(_.getServerCapabilities()?.resourceTemplates)return await _.listResourceTemplates();return{resourceTemplates:[]}},listPrompts:async()=>{let _=await H();if(_.getServerCapabilities()?.prompts)return await _.listPrompts();return{prompts:[]}},getPrompt:async(_)=>{return await(await H()).getPrompt(_)}},callStreamableTool:async(_,h)=>{let m={method:"tools/call",params:{name:_,arguments:h}};return D(m,async()=>{let b=await Z(),S=new URL(G.connection_url);return S.pathname=S.pathname.replace(/\/$/,"")+`/call-tool/${m.params.name}`,await J.tracer.startActiveSpan("mcp.proxy.callStreamableTool",{attributes:{"connection.id":Y,"tool.name":m.params.name}},async(g)=>{let J0=Date.now();try{let i=await fetch(S.toString(),{method:"POST",redirect:"manual",body:JSON.stringify(m.params.arguments),headers:{...b,"Content-Type":"application/json"}}),W0=Date.now()-J0;return J.meter.createHistogram("connection.proxy.streamable.duration").record(W0,{"connection.id":Y,"tool.name":m.params.name,status:i.ok?"success":"error"}),J.meter.createCounter("connection.proxy.streamable.requests").add(1,{"connection.id":Y,"tool.name":m.params.name,status:i.ok?"success":"error"}),g.end(),i}catch(i){let W0=i,V0=Date.now()-J0;throw J.meter.createHistogram("connection.proxy.streamable.duration").record(V0,{"connection.id":Y,"tool.name":m.params.name,status:"error"}),J.meter.createCounter("connection.proxy.streamable.errors").add(1,{"connection.id":Y,"tool.name":m.params.name,error:W0.message}),g.recordException(W0),g.end(),i}})})}}}async function Z71(Q,J){return K71(Q,J,{superUser:!1})}async function H71(Q,J){return K71(Q,J,{superUser:!0})}$71.all("/:connectionId",async(Q)=>{let J=Q.req.param("connectionId"),X=Q.get("meshContext");try{return await(await X.createMCPProxy(J)).fetch(Q.req.raw)}catch(G){let Y=G;if(Y.message.includes("not found"))return Q.json({error:Y.message},404);if(Y.message.includes("does not belong to the active organization"))return Q.json({error:"Connection not found"},404);if(Y.message.includes("inactive"))return Q.json({error:Y.message},503);return Q.json({error:"Internal server error",message:Y.message},500)}});var F71=$71;function UC4(Q,J){for(let[X,G]of Object.entries(J)){let Y=Q[X];if(!Y||Y.length===0){let W=Q["*"];if(!W||W.length===0)return!1;if(W.includes("*"))continue;for(let $ of G)if(!W.includes($))return!1;continue}if(Y.includes("*"))continue;for(let W of G)if(!Y.includes(W))return!1}return!0}function NC4(Q){let{auth:J,headers:X,role:G,permissions:Y,userId:W}=Q,$=J.api.hasPermission;return{hasPermission:async(K)=>{if(G&&U90.includes(G))return!0;if(Y)return UC4(Y,K);if(!$)return console.error("[Auth] hasPermission API not available"),!1;try{if((await $({headers:X,body:{permission:K}}))?.success===!0)return!0;let H={};for(let q of Object.keys(K))H[q]=["*"];return(await $({headers:X,body:{permission:H}}))?.success===!0}catch(Z){return console.error("[Auth] Permission check failed:",Z),!1}},organization:{create:async(K)=>{return J.api.createOrganization({headers:X,body:K})},update:async(K)=>{return J.api.updateOrganization({headers:X,body:K})},delete:async(K)=>{await J.api.deleteOrganization({headers:X,body:{organizationId:K}})},get:async(K)=>{return J.api.getFullOrganization({headers:X,query:K?{organizationId:K}:void 0})},list:async(K)=>{return J.api.listOrganizations({headers:X,query:K?{userId:K}:void 0})},addMember:async(K)=>{return J.api.addMember({headers:X,body:K})},removeMember:async(K)=>{await J.api.removeMember({headers:X,body:K})},listMembers:async(K)=>{return J.api.listMembers({headers:X,query:K?{organizationId:K.organizationId,limit:K.limit,offset:K.offset}:void 0})},updateMemberRole:async(K)=>{return J.api.updateMemberRole({headers:X,body:K})}},apiKey:{create:async(K)=>{return J.api.createApiKey({body:{...K,userId:W}})},list:async()=>{return J.api.listApiKeys({headers:X})},update:async(K)=>{return J.api.updateApiKey({body:{...K,userId:W}})},delete:async(K)=>{await J.api.deleteApiKey({headers:X,body:{keyId:K}})}}}}async function BC4(Q,J,X){if(U90.includes(X))return;let G=await Q.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",J).where("role","=",X).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${X}`);return}}async function OC4(Q,J,X){let G=Q.headers.get("Authorization");try{let Y=new Headers(Q.headers);Y.set("X-MCP-Session-Auth","true");let W=await J.api.getMcpSession({headers:Y});if(W){let $=W.userId,K=await X.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(),Z=K?.role,H=K?{id:K.orgId,slug:K.orgSlug,name:K.orgName}:void 0,F;if(K&&Z)F=await BC4(X,K.organizationId,Z);return{user:{id:$,role:Z},role:Z,permissions:F,organization:H}}}catch(Y){console.error("[Auth] OAuth session check failed:",Y)}if(G?.startsWith("Bearer ")){let Y=G.replace("Bearer ","").trim();try{let W=await rY1(Y);if(W)return{user:{id:W.sub,connectionId:W.metadata?.connectionId},permissions:W.permissions,organization:W.metadata?.organizationId?{id:W.metadata?.organizationId}:void 0}}catch{}try{let W=await J.api.verifyApiKey({body:{key:Y}});if(W?.valid&&W.key){let $=W.key.metadata?.organization,K=W.key.permissions;return{apiKeyId:W.key.id,user:{id:W.key.userId},permissions:K,organization:$?{id:$.id,slug:$.slug,name:$.name}:void 0}}}catch(W){console.error("[Auth] API key check failed:",W)}}try{let Y=await J.api.getSession({headers:Q.headers});if(Y){let W,$;if(Y.session.activeOrganizationId){let K=await J.api.getFullOrganization({headers:Q.headers}).catch(()=>null);if(K)W={id:K.id,slug:K.slug,name:K.name},$=K.members?.find((H)=>H.userId===Y.user.id)?.role;else W={id:Y.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Y.user.id,email:Y.user.email,role:$},role:$,organization:W}}}catch(Y){console.error("[Auth] Session check failed:",Y)}return{user:void 0}}var q71,XZ={set:(Q)=>{q71=Q},create:async(Q)=>{return await q71(Q)}};function V71(Q){let J=new bw(Q.encryption.key),X={connections:new xw(Q.db,J),organizationSettings:new N90(Q.db),monitoring:new D90(Q.db),gateways:new gw(Q.db)};return async(G)=>{let Y=G?.headers.get("x-caller-id")??void 0,W=G?await OC4(G,Q.auth,Q.db):{user:void 0},$=NC4({auth:Q.auth,headers:G?.headers??new Headers,role:W.role,permissions:W.permissions,userId:W.user?.id}),K={user:W.user};if(W.apiKeyId)K.apiKey={id:W.apiKeyId,name:"",userId:""};let Z=W.organization,H=G?new URL(G.url):new URL("http://localhost:3000"),F=process.env.BASE_URL??`${H.protocol}//${H.host}`,q=new lU(Q.auth,K.user?.id,void 0,$,W.role,AY.SELF),V={auth:K,connectionId:Y,organization:Z,storage:X,vault:J,authInstance:Q.auth,boundAuth:$,access:q,db:Q.db,tracer:Q.observability.tracer,meter:Q.observability.meter,baseUrl:F,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,userAgent:G?.headers.get("x-mesh-client")||G?.headers.get("User-Agent")||void 0,ipAddress:(G?.headers.get("CF-Connecting-IP")||G?.headers.get("X-Forwarded-For"))??void 0},eventBus:Q.eventBus,createMCPProxy:async(z)=>{return await Z71(z,V)}};return V}}var lP={HEALTH:"/health",METRICS:"/metrics"},dP={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known"},DC4=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/;function z71(Q){return Q===lP.HEALTH||Q===lP.METRICS||Q.startsWith(dP.WELL_KNOWN)}function LC4(Q){return Q.startsWith(dP.API)}function wC4(Q){return Q==="/mcp"||Q.startsWith(dP.MCP)}function PC4(Q){return Q.startsWith(dP.OAUTH_PROXY)}function MC4(Q){return DC4.test(Q)}function U71(Q){return LC4(Q)||wC4(Q)||PC4(Q)||z71(Q)}function N71(Q){return Q==="/"||Q.startsWith(dP.API_AUTH)||z71(Q)||MC4(Q)}class B71{db;constructor(Q){this.db=Q}async publishEvent(Q){let J=new Date().toISOString();return await this.db.insertInto("events").values({id:Q.id,organization_id:Q.organizationId,type:Q.type,source:Q.source,specversion:"1.0",subject:Q.subject??null,time:Q.time,datacontenttype:Q.datacontenttype??"application/json",dataschema:Q.dataschema??null,data:Q.data?JSON.stringify(Q.data):null,cron:Q.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:J,updated_at:J}).execute(),{id:Q.id,organizationId:Q.organizationId,type:Q.type,source:Q.source,specversion:"1.0",subject:Q.subject??null,time:Q.time,datacontenttype:Q.datacontenttype??"application/json",dataschema:Q.dataschema??null,data:Q.data??null,cron:Q.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:J,updatedAt:J}}async subscribe(Q){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q.organizationId).where("connection_id","=",Q.connectionId).where("event_type","=",Q.eventType);if(Q.publisher)J=J.where("publisher","=",Q.publisher);else J=J.where("publisher","is",null);if(Q.filter)J=J.where("filter","=",Q.filter);else J=J.where("filter","is",null);let X=await J.executeTakeFirst();if(X)return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at};let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Q.id,organization_id:Q.organizationId,connection_id:Q.connectionId,publisher:Q.publisher??null,event_type:Q.eventType,filter:Q.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Q.id,organizationId:Q.organizationId,connectionId:Q.connectionId,publisher:Q.publisher??null,eventType:Q.eventType,filter:Q.filter??null,enabled:!0,createdAt:G,updatedAt:G}}async unsubscribe(Q,J){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Q).where("organization_id","=",J).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Q,J){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q);if(J)X=X.where("connection_id","=",J);return(await X.execute()).map((Y)=>({id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Y.enabled===1,createdAt:Y.created_at,updatedAt:Y.updated_at}))}async getSubscription(Q,J){let X=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Q).where("organization_id","=",J).executeTakeFirst();if(!X)return null;return{id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at}}async getMatchingSubscriptions(Q){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Q.organizationId).where("enabled","=",1).where("event_type","=",Q.type).where((X)=>X.or([X("publisher","is",null),X("publisher","=",Q.source)])).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,connectionId:X.connection_id,publisher:X.publisher,eventType:X.event_type,filter:X.filter,enabled:X.enabled===1,createdAt:X.created_at,updatedAt:X.updated_at}))}async createDeliveries(Q,J,X){if(J.length===0)return;let G=new Date().toISOString(),Y=X??null,W=J.map(($)=>({id:crypto.randomUUID(),event_id:Q,subscription_id:$,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:Y,created_at:G}));await this.db.insertInto("event_deliveries").values(W).execute()}async claimPendingDeliveries(Q){let J=new Date().toISOString(),X;try{X=(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(($)=>$.or([$("d.next_retry_at","is",null),$("d.next_retry_at","<=",J)])).orderBy("d.created_at","asc").limit(Q)).where("status","=","pending").returning(["id"]).execute()).map((W)=>W.id)}catch{let Y=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","<=",J)])).orderBy("d.created_at","asc").limit(Q).execute();if(Y.length===0)return[];X=Y.map((W)=>W.id),await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",X).where("status","=","pending").execute()}if(X.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",X).where("d.status","=","processing").execute()).map((Y)=>({delivery:{id:Y.delivery_id,eventId:Y.event_id,subscriptionId:Y.subscription_id,status:Y.delivery_status,attempts:Y.delivery_attempts,lastError:Y.delivery_last_error,deliveredAt:Y.delivered_at,nextRetryAt:Y.delivery_next_retry_at,createdAt:Y.delivery_created_at},event:{id:Y.event_id,organizationId:Y.organization_id,type:Y.type,source:Y.source,specversion:Y.specversion,subject:Y.subject,time:Y.time,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema,data:Y.data?JSON.parse(Y.data):null,cron:Y.cron,status:Y.event_status,attempts:Y.event_attempts,lastError:Y.event_last_error,nextRetryAt:Y.next_retry_at,createdAt:Y.event_created_at,updatedAt:Y.event_updated_at},subscription:{id:Y.subscription_id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Y.enabled===1,createdAt:Y.subscription_created_at,updatedAt:Y.subscription_updated_at}}))}async markDeliveriesDelivered(Q){if(Q.length===0)return;let J=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:J}).where("id","in",Q).execute()}async markDeliveriesFailed(Q,J,X=20,G=1000,Y=3600000){if(Q.length===0)return;for(let W of Q){let $=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",W).executeTakeFirst();if(!$)continue;let K=$.attempts+1;if(K>=X)await this.db.updateTable("event_deliveries").set({attempts:K,last_error:J,status:"failed",next_retry_at:null}).where("id","=",W).execute();else{let Z=Math.min(G*Math.pow(2,K-1),Y),H=new Date(Date.now()+Z).toISOString();await this.db.updateTable("event_deliveries").set({attempts:K,last_error:J,status:"pending",next_retry_at:H}).where("id","=",W).execute()}}}async updateEventStatus(Q){let J=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Q).execute();if(J.length===0)return;let X=J.every((W)=>W.status==="delivered"),G=J.some((W)=>W.status==="failed"),Y=J.some((W)=>W.status==="pending"||W.status==="processing");if(X)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Q).execute();else if(G&&!Y)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Q).execute()}async resetStuckDeliveries(){let Q=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Q.numUpdatedRows??0)}async getEvent(Q,J){let X=await this.db.selectFrom("events").selectAll().where("id","=",Q).where("organization_id","=",J).executeTakeFirst();if(!X)return null;return{id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}}async cancelEvent(Q,J,X){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Q).where("organization_id","=",J).where("source","=",X).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Q).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Q,J){if(Q.length===0)return;let X=new Date(Date.now()+J).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:X}).where("id","in",Q).execute()}async ackDelivery(Q,J,X){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Q).where("organization_id","=",J).executeTakeFirst())return{success:!1};let W=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Q).where("status","in",["pending","processing"]).where(($)=>$.exists($.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",X).where("event_subscriptions.organization_id","=",J))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(W)await this.updateEventStatus(Q);return{success:W}}async syncSubscriptions(Q){let{organizationId:J,connectionId:X,subscriptions:G}=Q,Y=(P,j)=>{return`${P}::${j??""}`},W=await this.listSubscriptions(J,X),$=new Map;for(let P of W)$.set(Y(P.eventType,P.publisher),P);let K=new Map;for(let P of G)K.set(Y(P.eventType,P.publisher),P);let Z=new Date().toISOString(),H=[],F=[],q=[],V=0;for(let[P,j]of K){let M=$.get(P);if(!M)H.push({id:crypto.randomUUID(),organization_id:J,connection_id:X,event_type:j.eventType,publisher:j.publisher??null,filter:j.filter??null,enabled:1,created_at:Z,updated_at:Z});else{let T=M.filter??null,A=j.filter??null;if(T!==A)F.push({id:M.id,filter:A});else V++}}for(let[P,j]of $)if(!K.has(P))q.push(j.id);if(H.length>0)await this.db.insertInto("event_subscriptions").values(H).execute();if(F.length>0)await Promise.all(F.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:Z}).where("id","=",P.id).execute()));if(q.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",q).execute();let z=H.length,U=F.length,N=q.length,D=await this.listSubscriptions(J,X);return{created:z,updated:U,deleted:N,unchanged:V,subscriptions:D}}}function O71(Q){return new B71(Q)}function m5(Q,J,X,G,Y,W,$,K){return m5.fromTZ(m5.tp(Q,J,X,G,Y,W,$),K)}m5.fromTZISO=(Q,J,X)=>m5.fromTZ(TC4(Q,J),X);m5.fromTZ=function(Q,J){let X=new Date(Date.UTC(Q.y,Q.m-1,Q.d,Q.h,Q.i,Q.s)),G=w90(Q.tz,X),Y=new Date(X.getTime()-G),W=w90(Q.tz,Y);if(W-G===0)return Y;{let $=new Date(X.getTime()-W),K=w90(Q.tz,$);if(K-W===0)return $;if(!J&&K-W>0)return $;if(J)throw Error("Invalid date passed to fromTZ()");return Y}};m5.toTZ=function(Q,J){let X=Q.toLocaleString("en-US",{timeZone:J}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:J}};m5.tp=(Q,J,X,G,Y,W,$)=>({y:Q,m:J,d:X,h:G,i:Y,s:W,tz:$});function w90(Q,J=new Date){let X=J.toLocaleString("en-US",{timeZone:Q,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=J.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function TC4(Q,J){let X=new Date(Date.parse(Q));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=Q.substring(9);return Q.includes("Z")||G.includes("-")||G.includes("+")?m5.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):m5.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),J)}m5.minitz=m5;var P90=32,cP=31|P90,P71=[1,2,4,8,16],D71=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(Q,J){this.pattern=Q,this.timezone=J,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 Q=this.pattern.replace(/\s+/g," ").split(" ");if(Q.length<5||Q.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(Q.length===5&&Q.unshift("0"),Q[3].indexOf("L")>=0&&(Q[3]=Q[3].replace("L",""),this.lastDayOfMonth=!0),Q[3]=="*"&&(this.starDOM=!0),Q[4].length>=3&&(Q[4]=this.replaceAlphaMonths(Q[4])),Q[5].length>=3&&(Q[5]=this.replaceAlphaDays(Q[5])),Q[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let J=new uX(new Date,this.timezone).getDate(!0);Q[0]=Q[0].replace("?",J.getSeconds().toString()),Q[1]=Q[1].replace("?",J.getMinutes().toString()),Q[2]=Q[2].replace("?",J.getHours().toString()),this.starDOM||(Q[3]=Q[3].replace("?",J.getDate().toString())),Q[4]=Q[4].replace("?",(J.getMonth()+1).toString()),this.starDOW||(Q[5]=Q[5].replace("?",J.getDay().toString()))}this.throwAtIllegalCharacters(Q),this.partToArray("second",Q[0],0,1),this.partToArray("minute",Q[1],0,1),this.partToArray("hour",Q[2],0,1),this.partToArray("day",Q[3],-1,1),this.partToArray("month",Q[4],-1,1),this.partToArray("dayOfWeek",Q[5],0,cP),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(Q,J,X,G){let Y=this[Q],W=Q==="day"&&this.lastDayOfMonth;if(J===""&&!W)throw TypeError("CronPattern: configuration entry "+Q+" ("+J+") is empty, check for trailing spaces.");if(J==="*")return Y.fill(G);let $=J.split(",");if($.length>1)for(let K=0;K<$.length;K++)this.partToArray(Q,$[K],X,G);else J.indexOf("-")!==-1&&J.indexOf("/")!==-1?this.handleRangeWithStepping(J,Q,X,G):J.indexOf("-")!==-1?this.handleRange(J,Q,X,G):J.indexOf("/")!==-1?this.handleStepping(J,Q,X,G):J!==""&&this.handleNumber(J,Q,X,G)}throwAtIllegalCharacters(Q){for(let J=0;J<Q.length;J++)if((J===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(Q[J]))throw TypeError("CronPattern: configuration entry "+J+" ("+Q[J]+") contains illegal characters.")}handleNumber(Q,J,X,G){let Y=this.extractNth(Q,J),W=parseInt(Y[0],10)+X;if(isNaN(W))throw TypeError("CronPattern: "+J+" is not a number: '"+Q+"'");this.setPart(J,W,Y[1]||G)}setPart(Q,J,X){if(!Object.prototype.hasOwnProperty.call(this,Q))throw TypeError("CronPattern: Invalid part specified: "+Q);if(Q==="dayOfWeek"){if(J===7&&(J=0),J<0||J>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+J);this.setNthWeekdayOfMonth(J,X);return}if(Q==="second"||Q==="minute"){if(J<0||J>=60)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="hour"){if(J<0||J>=24)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="day"){if(J<0||J>=31)throw RangeError("CronPattern: Invalid value for "+Q+": "+J)}else if(Q==="month"&&(J<0||J>=12))throw RangeError("CronPattern: Invalid value for "+Q+": "+J);this[Q][J]=X}handleRangeWithStepping(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(W===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+Q+"'");let[,$,K,Z]=W,H=parseInt($,10)+X,F=parseInt(K,10)+X,q=parseInt(Z,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(q))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(q===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(q>this[J].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[J].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+Q+"'");for(let V=H;V<=F;V+=q)this.setPart(J,V,Y[1]||G)}extractNth(Q,J){let X=Q,G;if(X.includes("#")){if(J!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].split("-");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+Q+"'");let $=parseInt(W[0],10)+X,K=parseInt(W[1],10)+X;if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if($>K)throw TypeError("CronPattern: From value is larger than to value: '"+Q+"'");for(let Z=$;Z<=K;Z++)this.setPart(J,Z,Y[1]||G)}handleStepping(Q,J,X,G){let Y=this.extractNth(Q,J),W=Y[0].split("/");if(W.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+Q+"'");W[0]===""&&(W[0]="*");let $=0;W[0]!=="*"&&($=parseInt(W[0],10)+X);let K=parseInt(W[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[J].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[J].length+")");for(let Z=$;Z<this[J].length;Z+=K)this.setPart(J,Z,Y[1]||G)}replaceAlphaDays(Q){return Q.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(Q){return Q.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(Q){let J=Q.trim().toLowerCase();return J==="@yearly"||J==="@annually"?"0 0 1 1 *":J==="@monthly"?"0 0 1 * *":J==="@weekly"?"0 0 * * 0":J==="@daily"?"0 0 * * *":J==="@hourly"?"0 * * * *":Q}setNthWeekdayOfMonth(Q,J){if(typeof J!="number"&&J==="L")this.dayOfWeek[Q]=this.dayOfWeek[Q]|P90;else if(J===cP)this.dayOfWeek[Q]=cP;else if(J<6&&J>0)this.dayOfWeek[Q]=this.dayOfWeek[Q]|P71[J-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${J}, Type: ${typeof J}`)}},L71=[31,28,31,30,31,30,31,31,30,31,30,31],_W=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],uX=class Q{tz;ms;second;minute;hour;day;month;year;constructor(J,X){if(this.tz=X,J&&J instanceof Date)if(!isNaN(J))this.fromDate(J);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(J===void 0)this.fromDate(new Date);else if(J&&typeof J=="string")this.fromString(J);else if(J instanceof Q)this.fromCronDate(J);else throw TypeError("CronDate: Invalid type ("+typeof J+") passed to CronDate constructor")}isNthWeekdayOfMonth(J,X,G,Y){let W=new Date(Date.UTC(J,X,G)).getUTCDay(),$=0;for(let K=1;K<=G;K++)new Date(Date.UTC(J,X,K)).getUTCDay()===W&&$++;if(Y&cP&&P71[$-1]&Y)return!0;if(Y&P90){let K=new Date(Date.UTC(J,X+1,0)).getUTCDate();for(let Z=G+1;Z<=K;Z++)if(new Date(Date.UTC(J,X,Z)).getUTCDay()===W)return!1;return!0}return!1}fromDate(J){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=J.getUTCMilliseconds(),this.second=J.getUTCSeconds(),this.minute=J.getUTCMinutes()+this.tz,this.hour=J.getUTCHours(),this.day=J.getUTCDate(),this.month=J.getUTCMonth(),this.year=J.getUTCFullYear(),this.apply();else{let X=m5.toTZ(J,this.tz);this.ms=J.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=J.getMilliseconds(),this.second=J.getSeconds(),this.minute=J.getMinutes(),this.hour=J.getHours(),this.day=J.getDate(),this.month=J.getMonth(),this.year=J.getFullYear()}fromCronDate(J){this.tz=J.tz,this.year=J.year,this.month=J.month,this.day=J.day,this.hour=J.hour,this.minute=J.minute,this.second=J.second,this.ms=J.ms}apply(){if(this.month>11||this.day>L71[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let J=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=J.getUTCMilliseconds(),this.second=J.getUTCSeconds(),this.minute=J.getUTCMinutes(),this.hour=J.getUTCHours(),this.day=J.getUTCDate(),this.month=J.getUTCMonth(),this.year=J.getUTCFullYear(),!0}else return!1}fromString(J){if(typeof this.tz=="number"){let X=m5.fromTZISO(J);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(m5.fromTZISO(J,this.tz))}findNext(J,X,G,Y){let W=this[X],$;G.lastDayOfMonth&&(this.month!==1?$=L71[this.month]:$=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let Z=this[X]+Y;Z<G[X].length;Z++){let H=G[X][Z];if(X==="day"&&G.lastDayOfMonth&&Z-Y==$&&(H=1),X==="day"&&!G.starDOW){let F=G.dayOfWeek[(K+(Z-Y-1))%7];if(F&&F&cP)F=this.isNthWeekdayOfMonth(this.year,this.month,Z-Y,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);J.legacyMode&&!G.starDOM?H=H||F:H=H&&F}if(H)return this[X]=Z-Y,W!==this[X]?2:1}return 3}recurse(J,X,G){let Y=this.findNext(X,_W[G][0],J,_W[G][2]);if(Y>1){let W=G+1;for(;W<_W.length;)this[_W[W][0]]=-_W[W][2],W++;if(Y===3)return this[_W[G][1]]++,this[_W[G][0]]=-_W[G][2],this.apply(),this.recurse(J,X,0);if(this.apply())return this.recurse(J,X,G-1)}return G+=1,G>=_W.length?this:this.year>=3000?null:this.recurse(J,X,G)}increment(J,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(J,X,0)}getDate(J){return J||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)):m5.fromTZ(m5.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}};function AC4(Q){if(Q===void 0&&(Q={}),delete Q.name,Q.legacyMode=Q.legacyMode===void 0?!0:Q.legacyMode,Q.paused=Q.paused===void 0?!1:Q.paused,Q.maxRuns=Q.maxRuns===void 0?1/0:Q.maxRuns,Q.catch=Q.catch===void 0?!1:Q.catch,Q.interval=Q.interval===void 0?0:parseInt(Q.interval.toString(),10),Q.utcOffset=Q.utcOffset===void 0?void 0:parseInt(Q.utcOffset.toString(),10),Q.unref=Q.unref===void 0?!1:Q.unref,Q.startAt&&(Q.startAt=new uX(Q.startAt,Q.timezone)),Q.stopAt&&(Q.stopAt=new uX(Q.stopAt,Q.timezone)),Q.interval!==null){if(isNaN(Q.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(Q.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(Q.utcOffset!==void 0){if(isNaN(Q.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(Q.utcOffset<-870||Q.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(Q.utcOffset!==void 0&&Q.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(Q.unref!==!0&&Q.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return Q}function pP(Q){return Object.prototype.toString.call(Q)==="[object Function]"||typeof Q=="function"||Q instanceof Function}function EC4(Q){return pP(Q)}function jC4(Q){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(Q):Q&&typeof Q.unref<"u"&&Q.unref()}var w71=30000,M_=[],T_=class{name;options;_states;fn;constructor(Q,J,X){let G,Y;if(pP(J))Y=J;else if(typeof J=="object")G=J;else if(J!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(pP(X))Y=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=AC4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new D71("* * * * *")},Q&&(Q instanceof Date||typeof Q=="string"&&Q.indexOf(":")>0)?this._states.once=new uX(Q,this.options.timezone||this.options.utcOffset):this._states.pattern=new D71(Q,this.options.timezone),this.name){if(M_.find((W)=>W.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");M_.push(this)}return Y!==void 0&&EC4(Y)&&(this.fn=Y,this.schedule()),this}nextRun(Q){let J=this._next(Q);return J?J.getDate(!1):null}nextRuns(Q,J){this._states.maxRuns!==void 0&&Q>this._states.maxRuns&&(Q=this._states.maxRuns);let X=[],G=J||this._states.currentRun||void 0;for(;Q--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let Q=this.nextRun(this._states.currentRun),J=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return J&&X&&G&&Q!==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(Q){let J=this._next(Q);return J?Q instanceof uX||Q instanceof Date?J.getTime()-Q.getTime():J.getTime()-new uX(Q).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let Q=M_.indexOf(this);Q>=0&&M_.splice(Q,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(Q){if(Q&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");Q&&(this.fn=Q);let J=this.msToNext(),X=this.nextRun(this._states.currentRun);return J==null||isNaN(J)||X===null?this:(J>w71&&(J=w71),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),J),this._states.currentTimeout&&this.options.unref&&jC4(this._states.currentTimeout),this)}async _trigger(Q){if(this._states.blocking=!0,this._states.currentRun=new uX(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(J){pP(this.options.catch)&&this.options.catch(J,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new uX(Q,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(Q){let J=new Date,X=!this._states.paused&&J.getTime()>=Q.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&pP(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(Q){let J=!!(Q||this._states.currentRun),X=!1;!Q&&this.options.startAt&&this.options.interval&&([Q,J]=this._calculatePreviousRun(Q,J),X=!Q),Q=new uX(Q,this.options.timezone||this.options.utcOffset),this.options.startAt&&Q&&Q.getTime()<this.options.startAt.getTime()&&(Q=this.options.startAt);let G=this._states.once||new uX(Q,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,J)),this._states.once&&this._states.once.getTime()<=Q.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun(Q,J){let X=new uX(void 0,this.options.timezone||this.options.utcOffset),G=Q;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Y=G.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)G=new uX(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=G.getTime()+this.options.interval*1000;J=!0}return G===null&&(G=void 0),[G,J]}};var A_={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};U_();function M71(){return async(Q,J)=>{try{let X=await XZ.create(),G=await H71(Q,{...X,auth:{...X.auth,user:{id:"notify-worker"}}}),W=await j80.forClient(G).ON_EVENTS({events:J});return{success:W.success,error:W.error,retryAfter:W.retryAfter,results:W.results}}catch(X){let G=X instanceof Error?X.message:String(X);return console.error(`[EventBus] Failed to notify connection ${Q}:`,G),{success:!1,error:G}}}}function T71(Q){return{specversion:"1.0",id:Q.id,source:Q.source,type:Q.type,time:Q.time,subject:Q.subject??void 0,datacontenttype:Q.datacontenttype,dataschema:Q.dataschema??void 0,data:Q.data??void 0}}function IC4(Q){let J=new Map;for(let G of Q){let Y=G.subscription.connectionId,W=J.get(Y);if(W){if(W.deliveryIds.push(G.delivery.id),!W.seenEventIds.has(G.event.id))W.seenEventIds.add(G.event.id),W.events.push(T71(G.event))}else J.set(Y,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[T71(G.event)],seenEventIds:new Set([G.event.id])})}let X=new Map;for(let[G,Y]of J)X.set(G,{connectionId:Y.connectionId,deliveryIds:Y.deliveryIds,events:Y.events});return X}class M90{storage;notifySubscriber;running=!1;processing=!1;config;constructor(Q,J){this.storage=Q;this.notifySubscriber=M71(),this.config={...A_,...J}}async start(){if(this.running)return;let Q=await this.storage.resetStuckDeliveries();if(Q>0)console.log(`[EventBus] Reset ${Q} 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(Q){console.error("[EventBus] Error processing events:",Q)}finally{this.processing=!1}}async processEvents(){let Q=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Q.length===0)return;let J=IC4(Q),X=new Set;for(let[G,Y]of J){try{let W=await this.notifySubscriber(Y.connectionId,Y.events);if(W.results&&Object.keys(W.results).length>0)await this.processPerEventResults(Y,W);else if(W.success)await this.storage.markDeliveriesDelivered(Y.deliveryIds);else if(W.retryAfter&&W.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Y.deliveryIds,W.retryAfter);else await this.storage.markDeliveriesFailed(Y.deliveryIds,W.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch(W){let $=W instanceof Error?W.message:String(W);console.error(`[EventBus] Failed to notify subscription ${G}:`,$),await this.storage.markDeliveriesFailed(Y.deliveryIds,$,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}for(let W of Q)if(Y.deliveryIds.includes(W.delivery.id))X.add(W.event.id)}for(let G of X)try{await this.storage.updateEventStatus(G);let Y=Q.find((W)=>W.event.id===G)?.event;if(Y?.cron)await this.scheduleNextCronDelivery(Y)}catch(Y){console.error(`[EventBus] Failed to update event status ${G}:`,Y)}}async processPerEventResults(Q,J){let X=[],G=new Map,Y=[],W=new Map;for(let $=0;$<Q.events.length;$++){let K=Q.events?.[$];if(!K)continue;let Z=Q.deliveryIds?.[$];if(!Z)continue;W.set(K.id,Z)}for(let $ of Q.events){let K=W.get($.id);if(!K)continue;let Z=J.results?.[$.id];if(Z)if(Z.success)X.push(K);else if(Z.retryAfter&&Z.retryAfter>0){let H=G.get(Z.retryAfter)||[];H.push(K),G.set(Z.retryAfter,H)}else Y.push({deliveryId:K,error:Z.error||"Event processing failed"});else if(J.success)X.push(K);else if(J.retryAfter&&J.retryAfter>0){let H=G.get(J.retryAfter)||[];H.push(K),G.set(J.retryAfter,H)}else Y.push({deliveryId:K,error:J.error||"Batch processing failed"})}if(X.length>0)await this.storage.markDeliveriesDelivered(X);for(let[$,K]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(K,$);if(Y.length>0){let $=new Map;for(let{deliveryId:K,error:Z}of Y){let H=$.get(Z)||[];H.push(K),$.set(Z,H)}for(let[K,Z]of $)await this.storage.markDeliveriesFailed(Z,K,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Q){if(!Q.cron)return;try{let X=new T_(Q.cron).nextRun();if(!X){console.log(`[EventBus] Cron expression for event ${Q.id} has no more runs`);return}let G=X.toISOString(),Y=await this.storage.getMatchingSubscriptions(Q);if(Y.length===0){console.log(`[EventBus] No subscriptions for cron event ${Q.id}, skipping next delivery`);return}await this.storage.createDeliveries(Q.id,Y.map((W)=>W.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Q.id} at ${G}`)}catch(J){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Q.id}:`,J)}}}class T90{storage;worker;notifyStrategy;running=!1;constructor(Q){this.storage=Q.storage,this.notifyStrategy=Q.notifyStrategy,this.worker=new M90(this.storage,Q.config)}async publish(Q,J,X){if(X.deliverAt&&X.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(X.cron)try{let H=new T_(X.cron).nextRun();if(!H)throw Error("Cron expression does not produce a next run time");G=H.toISOString()}catch(Z){throw Error(`Invalid cron expression: ${Z instanceof Error?Z.message:String(Z)}`)}let Y=crypto.randomUUID(),W=new Date().toISOString(),$=await this.storage.publishEvent({id:Y,organizationId:Q,type:X.type,source:J,subject:X.subject,time:W,data:X.data,cron:X.cron}),K=await this.storage.getMatchingSubscriptions($);if(K.length>0){let Z=X.deliverAt??G;if(await this.storage.createDeliveries(Y,K.map((H)=>H.id),Z),this.notifyStrategy&&!Z)await this.notifyStrategy.notify(Y).catch((H)=>{console.warn("[EventBus] Notify failed (non-critical):",H)})}return $}async subscribe(Q,J){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Q,connectionId:J.connectionId,publisher:J.publisher,eventType:J.eventType,filter:J.filter})}async unsubscribe(Q,J){return this.storage.unsubscribe(J,Q)}async listSubscriptions(Q,J){return this.storage.listSubscriptions(Q,J)}async getSubscription(Q,J){return this.storage.getSubscription(J,Q)}async getEvent(Q,J){return this.storage.getEvent(J,Q)}async cancelEvent(Q,J,X){return this.storage.cancelEvent(J,Q,X)}async ackEvent(Q,J,X){return this.storage.ackDelivery(J,Q,X)}async syncSubscriptions(Q,J){return this.storage.syncSubscriptions({organizationId:Q,...J})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Q)=>{console.error("[EventBus] Error processing after notify:",Q)})});await this.worker.processNow().catch((Q)=>{console.error("[EventBus] Error processing pending events on startup:",Q)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Q){console.error("[EventBus] Error stopping notify strategy:",Q)}console.log("[EventBus] Stopped")}isRunning(){return this.running}}function A71(...Q){return{async start(J){await Promise.all(Q.map((X)=>X.start(J)))},async stop(){await Promise.all(Q.map((J)=>J.stop().catch((X)=>{console.error("[NotifyStrategy] Error stopping strategy:",X)})))},async notify(J){await Promise.all(Q.map((X)=>X.notify(J).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class E_{intervalMs;timer=null;onNotify=null;constructor(Q){this.intervalMs=Q}async start(Q){if(this.timer)return;this.onNotify=Q,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(Q){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}import{sql as CC4}from"kysely";var dU="mesh_events";class A90{db;pool;listenClient=null;onNotify=null;constructor(Q,J){this.db=Q;this.pool=J}async start(Q){if(this.listenClient)return;this.onNotify=Q;try{this.listenClient=await this.pool.connect(),this.listenClient.on("notification",(J)=>{if(J.channel===dU&&this.onNotify)this.onNotify()}),this.listenClient.on("error",(J)=>{console.error("[PostgresNotify] Connection error:",J),this.cleanup()}),await this.listenClient.query(`LISTEN ${dU}`),console.log("[PostgresNotify] Started LISTEN on",dU)}catch(J){console.error("[PostgresNotify] Failed to start LISTEN:",J),this.cleanup()}}async stop(){if(this.listenClient){try{await this.listenClient.query(`UNLISTEN ${dU}`),console.log("[PostgresNotify] Stopped LISTEN on",dU)}catch{}this.cleanup()}}async notify(Q){try{await CC4`SELECT pg_notify(${dU}, ${Q})`.execute(this.db)}catch(J){console.warn("[PostgresNotify] Failed to send NOTIFY:",J)}}cleanup(){if(this.listenClient)this.listenClient.release(),this.listenClient=null;this.onNotify=null}}function E71(Q,J){let X=O71(Q.db),G=J?.pollIntervalMs??A_.pollIntervalMs,Y=Q.type==="postgres"?A71(new E_(G),new A90(Q.db,Q.pool)):new E_(G);return new T90({storage:X,config:J,notifyStrategy:Y})}var j71={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 I71=new r5;I71.get("/config",async(Q)=>{try{let J=Object.keys(Z9.socialProviders??{}),X=J.length>0,G=J.map((W)=>({name:W,icon:j71[W].icon})),Y={emailAndPassword:{enabled:Z9.emailAndPassword?.enabled??!1},magicLink:{enabled:Z9.magicLinkConfig?.enabled??!1},socialProviders:{enabled:X,providers:G},sso:Z9.ssoConfig?{enabled:!0,providerId:Z9.ssoConfig.providerId}:{enabled:!1}};return Q.json({success:!0,config:Y})}catch(J){let X=J instanceof Error?J.message:"Failed to load auth config";return Q.json({success:!1,error:X},500)}});var C71=I71;fk();eQ();class nP{proxies=new Map;constructor(){}static async create(Q,J){let X=new nP,G=await Promise.allSettled(Q.map(async({connection:Y,selectedTools:W,selectedResources:$,selectedPrompts:K})=>{try{let Z=await J.createMCPProxy(Y);return{connection:Y,proxy:Z,selectedTools:W,selectedResources:$,selectedPrompts:K}}catch(Z){return console.error(`[gateway] Failed to create proxy for connection ${Y.id}:`,Z),null}}));for(let Y of G)if(Y.status==="fulfilled"&&Y.value)X.proxies.set(Y.value.connection.id,Y.value);return X}get(Q){return this.proxies.get(Q)}entries(){return this.proxies.entries()}forEach(Q){this.proxies.forEach((J,X)=>Q(J,X))}async mapAsync(Q){let J=[];for(let[X,G]of this.proxies.entries())J.push(Q(G,X));return await Promise.all(J)}async mapSettled(Q){return Promise.allSettled(Array.from(this.proxies.entries()).map(([J,X])=>Q(X,J)))}get size(){return this.proxies.size}}w4();ZP();function R71(Q){let J=[],X=[],G=(Z)=>{let H=Q.newFunction(Z,(...F)=>{try{let q=F.map((V)=>Q.dump(V));J.push({type:Z??"log",content:q.map(String).join(" ")})}finally{F.forEach((q)=>q.dispose())}return Q.undefined});return X.push(H),H},Y=Q.newObject();X.push(Y);let W=G("log"),$=G("warn"),K=G("error");return Q.setProp(Y,"log",W),Q.setProp(Y,"warn",$),Q.setProp(Y,"error",K),Q.setProp(Q.global,"console",Y),{logs:J,[Symbol.dispose](){X.forEach((Z)=>Z.dispose())}}}u90();I_();async function t71(Q){let J=m90(await Q),[X,G,{QuickJSWASMModule:Y}]=await Promise.all([J.importModuleLoader().then(m90),J.importFFI(),Promise.resolve().then(() => (s71(),o71)).then(m90)]),W=await X();W.type="sync";let $=new G(W);return new Y(W,$)}function m90(Q){return Q&&"default"in Q&&Q.default?Q.default&&"default"in Q.default&&Q.default.default?Q.default.default:Q.default:Q}var dC4={type:"sync",importFFI:()=>Promise.resolve().then(() => (QG1(),e71)).then((Q)=>Q.QuickJSFFI),importModuleLoader:()=>Promise.resolve().then(() => (XG1(),JG1)).then((Q)=>Q.default)},YG1=dC4;var GG1;function WG1(){return GG1??=t71(YG1),GG1}async function $G1(Q={}){let X=(await WG1()).newRuntime({maxStackSizeBytes:Q.stackSizeBytes,memoryLimitBytes:Q.memoryLimitBytes});return{newContext:({interruptAfterMs:Y,...W}={})=>{let $=X.newContext({intrinsics:{...h90,...W}}),K=0,Z=(H)=>{K=H?Date.now()+H:0};if(X.setInterruptHandler(()=>{let H=Date.now(),F=K>0&&H>K;return F}),Y)Z(Y);return $},dispose:()=>{X.dispose()},[Symbol.dispose](){X.dispose()}}}function cU(Q){if(Q===null)return"null";if(Q===void 0)return"undefined";if(Q instanceof Error){let J=Q.message||Q.name||"Error";if(Q.stack&&Q.stack.length<2000)return`${J}
1076
1076
  ${Q.stack}`;return J}if(typeof Q==="object"&&Q!==null){let J=Q,X="";if(typeof J.message==="string"&&J.message)X=J.message;else if(typeof J.error==="string"&&J.error)X=J.error;else if(typeof J.description==="string"&&J.description)X=J.description;else if(typeof J.reason==="string"&&J.reason)X=J.reason;if(X){if(typeof J.stack==="string"&&J.stack&&J.stack.length<2000)return`${X}
1077
1077
  ${J.stack}`;return X}try{let Y=JSON.stringify(J,null,2);if(Y!=="{}"&&Y.length<1000){if(typeof J.stack==="string"&&J.stack&&J.stack.length<2000)return`${Y}
1078
1078
 
@@ -1126,7 +1126,7 @@ Create an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys
1126
1126
  Provide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.
1127
1127
 
1128
1128
  Option 2 - OIDC token:
1129
- Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;return new Q({message:$,statusCode:Y,cause:W})}},eK1="GatewayInvalidRequestError",jy4=`vercel.ai.gateway.error.${eK1}`,yK1=Symbol.for(jy4),hK1,fK1,Iy4=class extends(fK1=gJ,hK1=yK1,fK1){constructor({message:Q="Invalid request",statusCode:J=400,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[hK1]=!0,this.name=eK1,this.type="invalid_request_error"}static isInstance(Q){return gJ.hasMarker(Q)&&yK1 in Q}},QZ1="GatewayRateLimitError",Cy4=`vercel.ai.gateway.error.${QZ1}`,bK1=Symbol.for(Cy4),xK1,gK1,Ry4=class extends(gK1=gJ,xK1=bK1,gK1){constructor({message:Q="Rate limit exceeded",statusCode:J=429,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[xK1]=!0,this.name=QZ1,this.type="rate_limit_exceeded"}static isInstance(Q){return gJ.hasMarker(Q)&&bK1 in Q}},JZ1="GatewayModelNotFoundError",Sy4=`vercel.ai.gateway.error.${JZ1}`,uK1=Symbol.for(Sy4),vy4=MQ(()=>w5(x.object({modelId:x.string()}))),mK1,lK1,ky4=class extends(lK1=gJ,mK1=uK1,lK1){constructor({message:Q="Model not found",statusCode:J=404,modelId:X,cause:G}={}){super({message:Q,statusCode:J,cause:G});this[mK1]=!0,this.name=JZ1,this.type="model_not_found",this.modelId=X}static isInstance(Q){return gJ.hasMarker(Q)&&uK1 in Q}},XZ1="GatewayInternalServerError",_y4=`vercel.ai.gateway.error.${XZ1}`,dK1=Symbol.for(_y4),pK1,cK1,nK1=class extends(cK1=gJ,pK1=dK1,cK1){constructor({message:Q="Internal server error",statusCode:J=500,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[pK1]=!0,this.name=XZ1,this.type="internal_server_error"}static isInstance(Q){return gJ.hasMarker(Q)&&dK1 in Q}},YZ1="GatewayResponseError",yy4=`vercel.ai.gateway.error.${YZ1}`,iK1=Symbol.for(yy4),rK1,aK1,hy4=class extends(aK1=gJ,rK1=iK1,aK1){constructor({message:Q="Invalid response from Gateway",statusCode:J=502,response:X,validationError:G,cause:Y}={}){super({message:Q,statusCode:J,cause:Y});this[rK1]=!0,this.name=YZ1,this.type="response_error",this.response=X,this.validationError=G}static isInstance(Q){return gJ.hasMarker(Q)&&iK1 in Q}};async function oK1({response:Q,statusCode:J,defaultMessage:X="Gateway request failed",cause:G,authMethod:Y}){let W=await TQ({value:Q,schema:fy4});if(!W.success)return new hy4({message:`Invalid error response format: ${X}`,statusCode:J,response:Q,validationError:W.error,cause:G});let $=W.value,K=$.error.type,Z=$.error.message;switch(K){case"authentication_error":return gy.createContextualError({apiKeyProvided:Y==="api-key",oidcTokenProvided:Y==="oidc",statusCode:J,cause:G});case"invalid_request_error":return new Iy4({message:Z,statusCode:J,cause:G});case"rate_limit_exceeded":return new Ry4({message:Z,statusCode:J,cause:G});case"model_not_found":{let H=await TQ({value:$.error.param,schema:vy4});return new ky4({message:Z,statusCode:J,modelId:H.success?H.value.modelId:void 0,cause:G})}case"internal_server_error":return new nK1({message:Z,statusCode:J,cause:G});default:return new nK1({message:Z,statusCode:J,cause:G})}}var fy4=MQ(()=>w5(x.object({error:x.object({message:x.string(),type:x.string().nullish(),param:x.unknown().nullish(),code:x.union([x.string(),x.number()]).nullish()})})));function ZZ(Q,J){var X;if(gJ.isInstance(Q))return Q;if(H9.isInstance(Q))return oK1({response:by4(Q),statusCode:(X=Q.statusCode)!=null?X:500,defaultMessage:"Gateway request failed",cause:Q,authMethod:J});return oK1({response:{},statusCode:500,defaultMessage:Q instanceof Error?`Gateway request failed: ${Q.message}`:"Unknown Gateway error",cause:Q,authMethod:J})}function by4(Q){if(Q.data!==void 0)return Q.data;if(Q.responseBody!=null)try{return JSON.parse(Q.responseBody)}catch(J){return Q.responseBody}return{}}var GZ1="ai-gateway-auth-method";async function $N(Q){let J=await TQ({value:Q[GZ1],schema:xy4});return J.success?J.value:void 0}var xy4=MQ(()=>w5(x.union([x.literal("api-key"),x.literal("oidc")]))),sK1=class{constructor(Q){this.config=Q}async getAvailableModels(){try{let{value:Q}=await DY0({url:`${this.config.baseURL}/config`,headers:await P5(this.config.headers()),successfulResponseHandler:dW(gy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(J)=>J}),fetch:this.config.fetch});return Q}catch(Q){throw await ZZ(Q)}}async getCredits(){try{let Q=new URL(this.config.baseURL),{value:J}=await DY0({url:`${Q.origin}/v1/credits`,headers:await P5(this.config.headers()),successfulResponseHandler:dW(uy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(X)=>X}),fetch:this.config.fetch});return J}catch(Q){throw await ZZ(Q)}}},gy4=MQ(()=>w5(x.object({models:x.array(x.object({id:x.string(),name:x.string(),description:x.string().nullish(),pricing:x.object({input:x.string(),output:x.string(),input_cache_read:x.string().nullish(),input_cache_write:x.string().nullish()}).transform(({input:Q,output:J,input_cache_read:X,input_cache_write:G})=>({input:Q,output:J,...X?{cachedInputTokens:X}:{},...G?{cacheCreationInputTokens:G}:{}})).nullish(),specification:x.object({specificationVersion:x.literal("v3"),provider:x.string(),modelId:x.string()}),modelType:x.enum(["language","embedding","image"]).nullish()}))}))),uy4=MQ(()=>w5(x.object({balance:x.string(),total_used:x.string()}).transform(({balance:Q,total_used:J})=>({balance:Q,totalUsed:J})))),my4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(Q){let{abortSignal:J,...X}=Q;return{args:this.maybeEncodeFileParts(X),warnings:[]}}async doGenerate(Q){let{args:J,warnings:X}=await this.getArgs(Q),{abortSignal:G}=Q,Y=await P5(this.config.headers());try{let{responseHeaders:W,value:$,rawValue:K}=await AF({url:this.getUrl(),headers:MF(Y,Q.headers,this.getModelConfigHeaders(this.modelId,!1),await P5(this.config.o11yHeaders)),body:J,successfulResponseHandler:dW(x.any()),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(Z)=>Z}),...G&&{abortSignal:G},fetch:this.config.fetch});return{...$,request:{body:J},response:{headers:W,body:K},warnings:X}}catch(W){throw await ZZ(W,await $N(Y))}}async doStream(Q){let{args:J,warnings:X}=await this.getArgs(Q),{abortSignal:G}=Q,Y=await P5(this.config.headers());try{let{value:W,responseHeaders:$}=await AF({url:this.getUrl(),headers:MF(Y,Q.headers,this.getModelConfigHeaders(this.modelId,!0),await P5(this.config.o11yHeaders)),body:J,successfulResponseHandler:JK1(x.any()),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(K)=>K}),...G&&{abortSignal:G},fetch:this.config.fetch});return{stream:W.pipeThrough(new TransformStream({start(K){if(X.length>0)K.enqueue({type:"stream-start",warnings:X})},transform(K,Z){if(K.success){let H=K.value;if(H.type==="raw"&&!Q.includeRawChunks)return;if(H.type==="response-metadata"&&H.timestamp&&typeof H.timestamp==="string")H.timestamp=new Date(H.timestamp);Z.enqueue(H)}else Z.error(K.error)}})),request:{body:J},response:{headers:$}}}catch(W){throw await ZZ(W,await $N(Y))}}isFilePart(Q){return Q&&typeof Q==="object"&&"type"in Q&&Q.type==="file"}maybeEncodeFileParts(Q){for(let J of Q.prompt)for(let X of J.content)if(this.isFilePart(X)){let G=X;if(G.data instanceof Uint8Array){let Y=Uint8Array.from(G.data),W=Buffer.from(Y).toString("base64");G.data=new URL(`data:${G.mediaType||"application/octet-stream"};base64,${W}`)}}return Q}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(Q,J){return{"ai-language-model-specification-version":"2","ai-language-model-id":Q,"ai-language-model-streaming":String(J)}}},ly4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:Q,headers:J,abortSignal:X,providerOptions:G}){var Y;let W=await P5(this.config.headers());try{let{responseHeaders:$,value:K,rawValue:Z}=await AF({url:this.getUrl(),headers:MF(W,J!=null?J:{},this.getModelConfigHeaders(),await P5(this.config.o11yHeaders)),body:{values:Q,...G?{providerOptions:G}:{}},successfulResponseHandler:dW(dy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(H)=>H}),...X&&{abortSignal:X},fetch:this.config.fetch});return{embeddings:K.embeddings,usage:(Y=K.usage)!=null?Y:void 0,providerMetadata:K.providerMetadata,response:{headers:$,body:Z},warnings:[]}}catch($){throw await ZZ($,await $N(W))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"2","ai-model-id":this.modelId}}},dy4=MQ(()=>w5(x.object({embeddings:x.array(x.array(x.number())),usage:x.object({tokens:x.number()}).nullish(),providerMetadata:x.record(x.string(),x.record(x.string(),x.unknown())).optional()}))),py4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Q,n:J,size:X,aspectRatio:G,seed:Y,providerOptions:W,headers:$,abortSignal:K}){var Z;let H=await P5(this.config.headers());try{let{responseHeaders:F,value:q,rawValue:V}=await AF({url:this.getUrl(),headers:MF(H,$!=null?$:{},this.getModelConfigHeaders(),await P5(this.config.o11yHeaders)),body:{prompt:Q,n:J,...X&&{size:X},...G&&{aspectRatio:G},...Y&&{seed:Y},...W&&{providerOptions:W}},successfulResponseHandler:dW(ny4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(z)=>z}),...K&&{abortSignal:K},fetch:this.config.fetch});return{images:q.images,warnings:(Z=q.warnings)!=null?Z:[],providerMetadata:q.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:F}}}catch(F){throw ZZ(F,await $N(H))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"2","ai-model-id":this.modelId}}},cy4=x.object({images:x.array(x.unknown()).optional()}).catchall(x.unknown()),ny4=x.object({images:x.array(x.string()),warnings:x.array(x.object({type:x.literal("other"),message:x.string()})).optional(),providerMetadata:x.record(x.string(),cy4).optional()});async function iy4(){var Q;return(Q=WZ1.getContext().headers)==null?void 0:Q["x-vercel-id"]}var ry4="3.0.2",ay4="0.0.1";function oy4(Q={}){var J,X;let G=null,Y=null,W=(J=Q.metadataCacheRefreshMillis)!=null?J:300000,$=0,K=(X=XK1(Q.baseURL))!=null?X:"https://ai-gateway.vercel.sh/v3/ai",Z=async()=>{let N=await sy4(Q);if(N)return $Z({Authorization:`Bearer ${N.token}`,"ai-gateway-protocol-version":ay4,[GZ1]:N.authMethod,...Q.headers},`ai-sdk/gateway/${ry4}`);throw gy.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401})},H=()=>{let N=xM({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),D=xM({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),P=xM({settingValue:void 0,environmentVariableName:"VERCEL_REGION"});return async()=>{let j=await iy4();return{...N&&{"ai-o11y-deployment-id":N},...D&&{"ai-o11y-environment":D},...P&&{"ai-o11y-region":P},...j&&{"ai-o11y-request-id":j}}}},F=(N)=>{return new my4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})},q=async()=>{var N,D,P;let j=(P=(D=(N=Q._internal)==null?void 0:N.currentDate)==null?void 0:D.call(N).getTime())!=null?P:Date.now();if(!G||j-$>W)$=j,G=new sK1({baseURL:K,headers:Z,fetch:Q.fetch}).getAvailableModels().then((M)=>{return Y=M,M}).catch(async(M)=>{throw await ZZ(M,await $N(await Z()))});return Y?Promise.resolve(Y):G},V=async()=>{return new sK1({baseURL:K,headers:Z,fetch:Q.fetch}).getCredits().catch(async(N)=>{throw await ZZ(N,await $N(await Z()))})},z=function(N){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return F(N)};z.specificationVersion="v3",z.getAvailableModels=q,z.getCredits=V,z.imageModel=(N)=>{return new py4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})},z.languageModel=F;let U=(N)=>{return new ly4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})};return z.embeddingModel=U,z.textEmbeddingModel=U,z}var KZ1=oy4();async function sy4(Q){let J=xM({settingValue:Q.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(J)return{token:J,authMethod:"api-key"};try{return{token:await $Z1.getVercelOidcToken(),authMethod:"oidc"}}catch(X){return null}}var W31=p4(V1(),1),mY0=p4(V1(),1);var ty4=Object.defineProperty,ey4=(Q,J)=>{for(var X in J)ty4(Q,X,{get:J[X],enumerable:!0})},BZ1="AI_InvalidArgumentError",OZ1=`vercel.ai.error.${BZ1}`,Qh4=Symbol.for(OZ1),DZ1,ZG=class extends S1{constructor({parameter:Q,value:J,message:X}){super({name:BZ1,message:`Invalid argument for parameter ${Q}: ${X}`});this[DZ1]=!0,this.parameter=Q,this.value=J}static isInstance(Q){return S1.hasMarker(Q,OZ1)}};DZ1=Qh4;var Jh4="AI_InvalidStreamPartError",Xh4=`vercel.ai.error.${Jh4}`,Yh4=Symbol.for(Xh4),Gh4;Gh4=Yh4;var LZ1="AI_InvalidToolApprovalError",wZ1=`vercel.ai.error.${LZ1}`,Wh4=Symbol.for(wZ1),PZ1,$h4=class extends S1{constructor({approvalId:Q}){super({name:LZ1,message:`Tool approval response references unknown approvalId: "${Q}". No matching tool-approval-request found in message history.`});this[PZ1]=!0,this.approvalId=Q}static isInstance(Q){return S1.hasMarker(Q,wZ1)}};PZ1=Wh4;var MZ1="AI_InvalidToolInputError",TZ1=`vercel.ai.error.${MZ1}`,Kh4=Symbol.for(TZ1),AZ1,nY0=class extends S1{constructor({toolInput:Q,toolName:J,cause:X,message:G=`Invalid input for tool ${J}: ${YG(X)}`}){super({name:MZ1,message:G,cause:X});this[AZ1]=!0,this.toolInput=Q,this.toolName=J}static isInstance(Q){return S1.hasMarker(Q,TZ1)}};AZ1=Kh4;var EZ1="AI_ToolCallNotFoundForApprovalError",jZ1=`vercel.ai.error.${EZ1}`,Zh4=Symbol.for(jZ1),IZ1,CZ1=class extends S1{constructor({toolCallId:Q,approvalId:J}){super({name:EZ1,message:`Tool call "${Q}" not found for approval request "${J}".`});this[IZ1]=!0,this.toolCallId=Q,this.approvalId=J}static isInstance(Q){return S1.hasMarker(Q,jZ1)}};IZ1=Zh4;var Hh4="AI_NoImageGeneratedError",Fh4=`vercel.ai.error.${Hh4}`,qh4=Symbol.for(Fh4),Vh4;Vh4=qh4;var RZ1="AI_NoObjectGeneratedError",SZ1=`vercel.ai.error.${RZ1}`,zh4=Symbol.for(SZ1),vZ1,HZ=class extends S1{constructor({message:Q="No object generated.",cause:J,text:X,response:G,usage:Y,finishReason:W}){super({name:RZ1,message:Q,cause:J});this[vZ1]=!0,this.text=X,this.response=G,this.usage=Y,this.finishReason=W}static isInstance(Q){return S1.hasMarker(Q,SZ1)}};vZ1=zh4;var kZ1="AI_NoOutputGeneratedError",_Z1=`vercel.ai.error.${kZ1}`,Uh4=Symbol.for(_Z1),yZ1,Nh4=class extends S1{constructor({message:Q="No output generated.",cause:J}={}){super({name:kZ1,message:Q,cause:J});this[yZ1]=!0}static isInstance(Q){return S1.hasMarker(Q,_Z1)}};yZ1=Uh4;var hZ1="AI_NoSuchToolError",fZ1=`vercel.ai.error.${hZ1}`,Bh4=Symbol.for(fZ1),bZ1,gY0=class extends S1{constructor({toolName:Q,availableTools:J=void 0,message:X=`Model tried to call unavailable tool '${Q}'. ${J===void 0?"No tools are available.":`Available tools: ${J.join(", ")}.`}`}){super({name:hZ1,message:X});this[bZ1]=!0,this.toolName=Q,this.availableTools=J}static isInstance(Q){return S1.hasMarker(Q,fZ1)}};bZ1=Bh4;var xZ1="AI_ToolCallRepairError",gZ1=`vercel.ai.error.${xZ1}`,Oh4=Symbol.for(gZ1),uZ1,Dh4=class extends S1{constructor({cause:Q,originalError:J,message:X=`Error repairing tool call: ${YG(Q)}`}){super({name:xZ1,message:X,cause:Q});this[uZ1]=!0,this.originalError=J}static isInstance(Q){return S1.hasMarker(Q,gZ1)}};uZ1=Oh4;var Lh4=class extends S1{constructor(Q){super({name:"AI_UnsupportedModelVersionError",message:`Unsupported model version ${Q.version} for provider "${Q.provider}" and model "${Q.modelId}". AI SDK 5 only supports models that implement specification version "v2".`});this.version=Q.version,this.provider=Q.provider,this.modelId=Q.modelId}},wh4="AI_InvalidDataContentError",Ph4=`vercel.ai.error.${wh4}`,Mh4=Symbol.for(Ph4),Th4;Th4=Mh4;var mZ1="AI_InvalidMessageRoleError",lZ1=`vercel.ai.error.${mZ1}`,Ah4=Symbol.for(lZ1),dZ1,Eh4=class extends S1{constructor({role:Q,message:J=`Invalid message role: '${Q}'. Must be one of: "system", "user", "assistant", "tool".`}){super({name:mZ1,message:J});this[dZ1]=!0,this.role=Q}static isInstance(Q){return S1.hasMarker(Q,lZ1)}};dZ1=Ah4;var pZ1="AI_MessageConversionError",cZ1=`vercel.ai.error.${pZ1}`,jh4=Symbol.for(cZ1),nZ1,Ih4=class extends S1{constructor({originalMessage:Q,message:J}){super({name:pZ1,message:J});this[nZ1]=!0,this.originalMessage=Q}static isInstance(Q){return S1.hasMarker(Q,cZ1)}};nZ1=jh4;var iZ1="AI_RetryError",rZ1=`vercel.ai.error.${iZ1}`,Ch4=Symbol.for(rZ1),aZ1,ZZ1=class extends S1{constructor({message:Q,reason:J,errors:X}){super({name:iZ1,message:Q});this[aZ1]=!0,this.reason=J,this.errors=X,this.lastError=X[X.length-1]}static isInstance(Q){return S1.hasMarker(Q,rZ1)}};aZ1=Ch4;function Rh4({warning:Q,provider:J,model:X}){let G=`AI SDK Warning (${J} / ${X}):`;switch(Q.type){case"unsupported":{let Y=`${G} The feature "${Q.feature}" is not supported.`;if(Q.details)Y+=` ${Q.details}`;return Y}case"compatibility":{let Y=`${G} The feature "${Q.feature}" is used in a compatibility mode.`;if(Q.details)Y+=` ${Q.details}`;return Y}case"other":return`${G} ${Q.message}`;default:return`${G} ${JSON.stringify(Q,null,2)}`}}var Sh4="AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.",HZ1=!1,oZ1=(Q)=>{if(Q.warnings.length===0)return;let J=globalThis.AI_SDK_LOG_WARNINGS;if(J===!1)return;if(typeof J==="function"){J(Q);return}if(!HZ1)HZ1=!0,console.info(Sh4);for(let X of Q.warnings)console.warn(Rh4({warning:X,provider:Q.provider,model:Q.model}))};function vh4({provider:Q,modelId:J}){oZ1({warnings:[{type:"compatibility",feature:"specificationVersion",details:"Using v2 specification compatibility mode. Some features may not be available."}],provider:Q,model:J})}function kh4(Q){if(Q.specificationVersion==="v3")return Q;return vh4({provider:Q.provider,modelId:Q.modelId}),new Proxy(Q,{get(J,X){switch(X){case"specificationVersion":return"v3";case"doGenerate":return async(...G)=>{let Y=await J.doGenerate(...G);return{...Y,finishReason:sZ1(Y.finishReason),usage:tZ1(Y.usage)}};case"doStream":return async(...G)=>{let Y=await J.doStream(...G);return{...Y,stream:_h4(Y.stream)}};default:return J[X]}}})}function _h4(Q){return Q.pipeThrough(new TransformStream({transform(J,X){switch(J.type){case"finish":X.enqueue({...J,finishReason:sZ1(J.finishReason),usage:tZ1(J.usage)});break;default:X.enqueue(J);break}}}))}function sZ1(Q){return{unified:Q==="unknown"?"other":Q,raw:void 0}}function tZ1(Q){return{inputTokens:{total:Q.inputTokens,noCache:void 0,cacheRead:Q.cachedInputTokens,cacheWrite:void 0},outputTokens:{total:Q.outputTokens,text:void 0,reasoning:Q.reasoningTokens}}}function eZ1(Q){if(typeof Q!=="string"){if(Q.specificationVersion!=="v3"&&Q.specificationVersion!=="v2"){let J=Q;throw new Lh4({version:J.specificationVersion,provider:J.provider,modelId:J.modelId})}return kh4(Q)}return yh4().languageModel(Q)}function yh4(){var Q;return(Q=globalThis.AI_SDK_DEFAULT_PROVIDER)!=null?Q:KZ1}var hh4=[{mediaType:"image/gif",bytesPrefix:[71,73,70]},{mediaType:"image/png",bytesPrefix:[137,80,78,71]},{mediaType:"image/jpeg",bytesPrefix:[255,216]},{mediaType:"image/webp",bytesPrefix:[82,73,70,70,null,null,null,null,87,69,66,80]},{mediaType:"image/bmp",bytesPrefix:[66,77]},{mediaType:"image/tiff",bytesPrefix:[73,73,42,0]},{mediaType:"image/tiff",bytesPrefix:[77,77,0,42]},{mediaType:"image/avif",bytesPrefix:[0,0,0,32,102,116,121,112,97,118,105,102]},{mediaType:"image/heic",bytesPrefix:[0,0,0,32,102,116,121,112,104,101,105,99]}];var fh4=(Q)=>{let J=typeof Q==="string"?GN(Q):Q,X=(J[6]&127)<<21|(J[7]&127)<<14|(J[8]&127)<<7|J[9]&127;return J.slice(X+10)};function bh4(Q){return typeof Q==="string"&&Q.startsWith("SUQz")||typeof Q!=="string"&&Q.length>10&&Q[0]===73&&Q[1]===68&&Q[2]===51?fh4(Q):Q}function xh4({data:Q,signatures:J}){let X=bh4(Q),G=typeof X==="string"?GN(X.substring(0,Math.min(X.length,24))):X;for(let Y of J)if(G.length>=Y.bytesPrefix.length&&Y.bytesPrefix.every((W,$)=>W===null||G[$]===W))return Y.mediaType;return}var gh4="6.0.3",uh4=async({url:Q})=>{var J;let X=Q.toString();try{let G=await fetch(X,{headers:$Z({},`ai-sdk/${gh4}`,hy())});if(!G.ok)throw new yy({url:X,statusCode:G.status,statusText:G.statusText});return{data:new Uint8Array(await G.arrayBuffer()),mediaType:(J=G.headers.get("content-type"))!=null?J:void 0}}catch(G){if(yy.isInstance(G))throw G;throw new yy({url:X,cause:G})}},mh4=(Q=uh4)=>(J)=>Promise.all(J.map(async(X)=>X.isUrlSupportedByModel?null:Q(X)));function lh4(Q){try{let[J,X]=Q.split(",");return{mediaType:J.split(";")[0].split(":")[1],base64Content:X}}catch(J){return{mediaType:void 0,base64Content:void 0}}}var Q31=x.union([x.string(),x.instanceof(Uint8Array),x.instanceof(ArrayBuffer),x.custom((Q)=>{var J,X;return(X=(J=globalThis.Buffer)==null?void 0:J.isBuffer(Q))!=null?X:!1},{message:"Must be a Buffer"})]);function J31(Q){if(Q instanceof Uint8Array)return{data:Q,mediaType:void 0};if(Q instanceof ArrayBuffer)return{data:new Uint8Array(Q),mediaType:void 0};if(typeof Q==="string")try{Q=new URL(Q)}catch(J){}if(Q instanceof URL&&Q.protocol==="data:"){let{mediaType:J,base64Content:X}=lh4(Q.toString());if(J==null||X==null)throw new S1({name:"InvalidDataContentError",message:`Invalid data URL format in content ${Q.toString()}`});return{data:X,mediaType:J}}return{data:Q,mediaType:void 0}}function dh4(Q){if(typeof Q==="string")return Q;if(Q instanceof ArrayBuffer)return fM(new Uint8Array(Q));return fM(Q)}function ly(Q){return Q===void 0?[]:Array.isArray(Q)?Q:[Q]}async function ph4({prompt:Q,supportedUrls:J,download:X=mh4()}){let G=await nh4(Q.messages,X,J),Y=[...Q.system!=null?typeof Q.system==="string"?[{role:"system",content:Q.system}]:ly(Q.system).map(($)=>({role:"system",content:$.content,providerOptions:$.providerOptions})):[],...Q.messages.map(($)=>ch4({message:$,downloadedAssets:G}))],W=[];for(let $ of Y){if($.role!=="tool"){W.push($);continue}let K=W.at(-1);if((K==null?void 0:K.role)==="tool")K.content.push(...$.content);else W.push($)}return W}function ch4({message:Q,downloadedAssets:J}){let X=Q.role;switch(X){case"system":return{role:"system",content:Q.content,providerOptions:Q.providerOptions};case"user":{if(typeof Q.content==="string")return{role:"user",content:[{type:"text",text:Q.content}],providerOptions:Q.providerOptions};return{role:"user",content:Q.content.map((G)=>ih4(G,J)).filter((G)=>G.type!=="text"||G.text!==""),providerOptions:Q.providerOptions}}case"assistant":{if(typeof Q.content==="string")return{role:"assistant",content:[{type:"text",text:Q.content}],providerOptions:Q.providerOptions};return{role:"assistant",content:Q.content.filter((G)=>G.type!=="text"||G.text!==""||G.providerOptions!=null).filter((G)=>G.type!=="tool-approval-request").map((G)=>{let Y=G.providerOptions;switch(G.type){case"file":{let{data:W,mediaType:$}=J31(G.data);return{type:"file",data:W,filename:G.filename,mediaType:$!=null?$:G.mediaType,providerOptions:Y}}case"reasoning":return{type:"reasoning",text:G.text,providerOptions:Y};case"text":return{type:"text",text:G.text,providerOptions:Y};case"tool-call":return{type:"tool-call",toolCallId:G.toolCallId,toolName:G.toolName,input:G.input,providerExecuted:G.providerExecuted,providerOptions:Y};case"tool-result":return{type:"tool-result",toolCallId:G.toolCallId,toolName:G.toolName,output:FZ1(G.output),providerOptions:Y}}}),providerOptions:Q.providerOptions}}case"tool":return{role:"tool",content:Q.content.filter((G)=>G.type!=="tool-approval-response"||G.providerExecuted).map((G)=>{switch(G.type){case"tool-result":return{type:"tool-result",toolCallId:G.toolCallId,toolName:G.toolName,output:FZ1(G.output),providerOptions:G.providerOptions};case"tool-approval-response":return{type:"tool-approval-response",approvalId:G.approvalId,approved:G.approved,reason:G.reason}}}),providerOptions:Q.providerOptions};default:throw new Eh4({role:X})}}async function nh4(Q,J,X){let G=Q.filter((W)=>W.role==="user").map((W)=>W.content).filter((W)=>Array.isArray(W)).flat().filter((W)=>W.type==="image"||W.type==="file").map((W)=>{var $;let K=($=W.mediaType)!=null?$:W.type==="image"?"image/*":void 0,Z=W.type==="image"?W.image:W.data;if(typeof Z==="string")try{Z=new URL(Z)}catch(H){}return{mediaType:K,data:Z}}).filter((W)=>W.data instanceof URL).map((W)=>({url:W.data,isUrlSupportedByModel:W.mediaType!=null&&r$1({url:W.data.toString(),mediaType:W.mediaType,supportedUrls:X})})),Y=await J(G);return Object.fromEntries(Y.map((W,$)=>W==null?null:[G[$].url.toString(),{data:W.data,mediaType:W.mediaType}]).filter((W)=>W!=null))}function ih4(Q,J){var X;if(Q.type==="text")return{type:"text",text:Q.text,providerOptions:Q.providerOptions};let G,Y=Q.type;switch(Y){case"image":G=Q.image;break;case"file":G=Q.data;break;default:throw Error(`Unsupported part type: ${Y}`)}let{data:W,mediaType:$}=J31(G),K=$!=null?$:Q.mediaType,Z=W;if(Z instanceof URL){let H=J[Z.toString()];if(H)Z=H.data,K!=null||(K=H.mediaType)}switch(Y){case"image":{if(Z instanceof Uint8Array||typeof Z==="string")K=(X=xh4({data:Z,signatures:hh4}))!=null?X:K;return{type:"file",mediaType:K!=null?K:"image/*",filename:void 0,data:Z,providerOptions:Q.providerOptions}}case"file":{if(K==null)throw Error("Media type is missing for file part");return{type:"file",mediaType:K,filename:Q.filename,data:Z,providerOptions:Q.providerOptions}}}}function FZ1(Q){if(Q.type!=="content")return Q;return{type:"content",value:Q.value.map((J)=>{if(J.type!=="media")return J;if(J.mediaType.startsWith("image/"))return{type:"image-data",data:J.data,mediaType:J.mediaType};return{type:"file-data",data:J.data,mediaType:J.mediaType}})}}async function ZN({toolCallId:Q,input:J,output:X,tool:G,errorMode:Y}){if(Y==="text")return{type:"error-text",value:YG(X)};else if(Y==="json")return{type:"error-json",value:qZ1(X)};if(G==null?void 0:G.toModelOutput)return await G.toModelOutput({toolCallId:Q,input:J,output:X});return typeof X==="string"?{type:"text",value:X}:{type:"json",value:qZ1(X)}}function qZ1(Q){return Q===void 0?null:Q}function rh4({maxOutputTokens:Q,temperature:J,topP:X,topK:G,presencePenalty:Y,frequencyPenalty:W,seed:$,stopSequences:K}){if(Q!=null){if(!Number.isInteger(Q))throw new ZG({parameter:"maxOutputTokens",value:Q,message:"maxOutputTokens must be an integer"});if(Q<1)throw new ZG({parameter:"maxOutputTokens",value:Q,message:"maxOutputTokens must be >= 1"})}if(J!=null){if(typeof J!=="number")throw new ZG({parameter:"temperature",value:J,message:"temperature must be a number"})}if(X!=null){if(typeof X!=="number")throw new ZG({parameter:"topP",value:X,message:"topP must be a number"})}if(G!=null){if(typeof G!=="number")throw new ZG({parameter:"topK",value:G,message:"topK must be a number"})}if(Y!=null){if(typeof Y!=="number")throw new ZG({parameter:"presencePenalty",value:Y,message:"presencePenalty must be a number"})}if(W!=null){if(typeof W!=="number")throw new ZG({parameter:"frequencyPenalty",value:W,message:"frequencyPenalty must be a number"})}if($!=null){if(!Number.isInteger($))throw new ZG({parameter:"seed",value:$,message:"seed must be an integer"})}return{maxOutputTokens:Q,temperature:J,topP:X,topK:G,presencePenalty:Y,frequencyPenalty:W,stopSequences:K,seed:$}}function ah4(Q){return Q!=null&&Object.keys(Q).length>0}async function oh4({tools:Q,toolChoice:J,activeTools:X}){if(!ah4(Q))return{tools:void 0,toolChoice:void 0};let G=X!=null?Object.entries(Q).filter(([W])=>X.includes(W)):Object.entries(Q),Y=[];for(let[W,$]of G){let K=$.type;switch(K){case void 0:case"dynamic":case"function":Y.push({type:"function",name:W,description:$.description,inputSchema:await $G($.inputSchema).jsonSchema,...$.inputExamples!=null?{inputExamples:$.inputExamples}:{},providerOptions:$.providerOptions,...$.strict!=null?{strict:$.strict}:{}});break;case"provider":Y.push({type:"provider",name:W,id:$.id,args:$.args});break;default:throw Error(`Unsupported tool type: ${K}`)}}return{tools:Y,toolChoice:J==null?{type:"auto"}:typeof J==="string"?{type:J}:{type:"tool",toolName:J.toolName}}}var dM=x.lazy(()=>x.union([x.null(),x.string(),x.number(),x.boolean(),x.record(x.string(),dM.optional()),x.array(dM)])),e1=x.record(x.string(),x.record(x.string(),dM.optional())),X31=x.object({type:x.literal("text"),text:x.string(),providerOptions:e1.optional()}),sh4=x.object({type:x.literal("image"),image:x.union([Q31,x.instanceof(URL)]),mediaType:x.string().optional(),providerOptions:e1.optional()}),Y31=x.object({type:x.literal("file"),data:x.union([Q31,x.instanceof(URL)]),filename:x.string().optional(),mediaType:x.string(),providerOptions:e1.optional()}),th4=x.object({type:x.literal("reasoning"),text:x.string(),providerOptions:e1.optional()}),eh4=x.object({type:x.literal("tool-call"),toolCallId:x.string(),toolName:x.string(),input:x.unknown(),providerOptions:e1.optional(),providerExecuted:x.boolean().optional()}),Qf4=x.discriminatedUnion("type",[x.object({type:x.literal("text"),value:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("json"),value:dM,providerOptions:e1.optional()}),x.object({type:x.literal("execution-denied"),reason:x.string().optional(),providerOptions:e1.optional()}),x.object({type:x.literal("error-text"),value:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("error-json"),value:dM,providerOptions:e1.optional()}),x.object({type:x.literal("content"),value:x.array(x.union([x.object({type:x.literal("text"),text:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("media"),data:x.string(),mediaType:x.string()}),x.object({type:x.literal("file-data"),data:x.string(),mediaType:x.string(),filename:x.string().optional(),providerOptions:e1.optional()}),x.object({type:x.literal("file-url"),url:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("file-id"),fileId:x.union([x.string(),x.record(x.string(),x.string())]),providerOptions:e1.optional()}),x.object({type:x.literal("image-data"),data:x.string(),mediaType:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("image-url"),url:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("image-file-id"),fileId:x.union([x.string(),x.record(x.string(),x.string())]),providerOptions:e1.optional()}),x.object({type:x.literal("custom"),providerOptions:e1.optional()})]))})]),G31=x.object({type:x.literal("tool-result"),toolCallId:x.string(),toolName:x.string(),output:Qf4,providerOptions:e1.optional()}),Jf4=x.object({type:x.literal("tool-approval-request"),approvalId:x.string(),toolCallId:x.string()}),Xf4=x.object({type:x.literal("tool-approval-response"),approvalId:x.string(),approved:x.boolean(),reason:x.string().optional()}),Yf4=x.object({role:x.literal("system"),content:x.string(),providerOptions:e1.optional()}),Gf4=x.object({role:x.literal("user"),content:x.union([x.string(),x.array(x.union([X31,sh4,Y31]))]),providerOptions:e1.optional()}),Wf4=x.object({role:x.literal("assistant"),content:x.union([x.string(),x.array(x.union([X31,Y31,th4,eh4,G31,Jf4]))]),providerOptions:e1.optional()}),$f4=x.object({role:x.literal("tool"),content:x.array(x.union([G31,Xf4])),providerOptions:e1.optional()}),Kf4=x.union([Yf4,Gf4,Wf4,$f4]);async function Zf4(Q){if(Q.prompt==null&&Q.messages==null)throw new zF({prompt:Q,message:"prompt or messages must be defined"});if(Q.prompt!=null&&Q.messages!=null)throw new zF({prompt:Q,message:"prompt and messages cannot be defined at the same time"});if(Q.system!=null&&typeof Q.system!=="string"&&!ly(Q.system).every((G)=>typeof G==="object"&&G!==null&&("role"in G)&&G.role==="system"))throw new zF({prompt:Q,message:"system must be a string, SystemModelMessage, or array of SystemModelMessage"});let J;if(Q.prompt!=null&&typeof Q.prompt==="string")J=[{role:"user",content:Q.prompt}];else if(Q.prompt!=null&&Array.isArray(Q.prompt))J=Q.prompt;else if(Q.messages!=null)J=Q.messages;else throw new zF({prompt:Q,message:"prompt or messages must be defined"});if(J.length===0)throw new zF({prompt:Q,message:"messages must not be empty"});let X=await TQ({value:J,schema:x.array(Kf4)});if(!X.success)throw new zF({prompt:Q,message:"The messages do not match the ModelMessage[] schema.",cause:X.error});return{messages:J,system:Q.system}}function Hf4(Q){if(!gy.isInstance(Q))return Q;let J=(process==null?void 0:"production")==="production",X="https://ai-sdk.dev/unauthenticated-ai-gateway";if(J)return new S1({name:"GatewayError",message:`Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${X}`});return Object.assign(Error(`\x1B[1m\x1B[31mUnauthenticated request to AI Gateway.\x1B[0m
1129
+ Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;return new Q({message:$,statusCode:Y,cause:W})}},eK1="GatewayInvalidRequestError",jy4=`vercel.ai.gateway.error.${eK1}`,yK1=Symbol.for(jy4),hK1,fK1,Iy4=class extends(fK1=gJ,hK1=yK1,fK1){constructor({message:Q="Invalid request",statusCode:J=400,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[hK1]=!0,this.name=eK1,this.type="invalid_request_error"}static isInstance(Q){return gJ.hasMarker(Q)&&yK1 in Q}},QZ1="GatewayRateLimitError",Cy4=`vercel.ai.gateway.error.${QZ1}`,bK1=Symbol.for(Cy4),xK1,gK1,Ry4=class extends(gK1=gJ,xK1=bK1,gK1){constructor({message:Q="Rate limit exceeded",statusCode:J=429,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[xK1]=!0,this.name=QZ1,this.type="rate_limit_exceeded"}static isInstance(Q){return gJ.hasMarker(Q)&&bK1 in Q}},JZ1="GatewayModelNotFoundError",Sy4=`vercel.ai.gateway.error.${JZ1}`,uK1=Symbol.for(Sy4),vy4=MQ(()=>w5(x.object({modelId:x.string()}))),mK1,lK1,ky4=class extends(lK1=gJ,mK1=uK1,lK1){constructor({message:Q="Model not found",statusCode:J=404,modelId:X,cause:G}={}){super({message:Q,statusCode:J,cause:G});this[mK1]=!0,this.name=JZ1,this.type="model_not_found",this.modelId=X}static isInstance(Q){return gJ.hasMarker(Q)&&uK1 in Q}},XZ1="GatewayInternalServerError",_y4=`vercel.ai.gateway.error.${XZ1}`,dK1=Symbol.for(_y4),pK1,cK1,nK1=class extends(cK1=gJ,pK1=dK1,cK1){constructor({message:Q="Internal server error",statusCode:J=500,cause:X}={}){super({message:Q,statusCode:J,cause:X});this[pK1]=!0,this.name=XZ1,this.type="internal_server_error"}static isInstance(Q){return gJ.hasMarker(Q)&&dK1 in Q}},YZ1="GatewayResponseError",yy4=`vercel.ai.gateway.error.${YZ1}`,iK1=Symbol.for(yy4),rK1,aK1,hy4=class extends(aK1=gJ,rK1=iK1,aK1){constructor({message:Q="Invalid response from Gateway",statusCode:J=502,response:X,validationError:G,cause:Y}={}){super({message:Q,statusCode:J,cause:Y});this[rK1]=!0,this.name=YZ1,this.type="response_error",this.response=X,this.validationError=G}static isInstance(Q){return gJ.hasMarker(Q)&&iK1 in Q}};async function oK1({response:Q,statusCode:J,defaultMessage:X="Gateway request failed",cause:G,authMethod:Y}){let W=await TQ({value:Q,schema:fy4});if(!W.success)return new hy4({message:`Invalid error response format: ${X}`,statusCode:J,response:Q,validationError:W.error,cause:G});let $=W.value,K=$.error.type,Z=$.error.message;switch(K){case"authentication_error":return gy.createContextualError({apiKeyProvided:Y==="api-key",oidcTokenProvided:Y==="oidc",statusCode:J,cause:G});case"invalid_request_error":return new Iy4({message:Z,statusCode:J,cause:G});case"rate_limit_exceeded":return new Ry4({message:Z,statusCode:J,cause:G});case"model_not_found":{let H=await TQ({value:$.error.param,schema:vy4});return new ky4({message:Z,statusCode:J,modelId:H.success?H.value.modelId:void 0,cause:G})}case"internal_server_error":return new nK1({message:Z,statusCode:J,cause:G});default:return new nK1({message:Z,statusCode:J,cause:G})}}var fy4=MQ(()=>w5(x.object({error:x.object({message:x.string(),type:x.string().nullish(),param:x.unknown().nullish(),code:x.union([x.string(),x.number()]).nullish()})})));function ZZ(Q,J){var X;if(gJ.isInstance(Q))return Q;if(H9.isInstance(Q))return oK1({response:by4(Q),statusCode:(X=Q.statusCode)!=null?X:500,defaultMessage:"Gateway request failed",cause:Q,authMethod:J});return oK1({response:{},statusCode:500,defaultMessage:Q instanceof Error?`Gateway request failed: ${Q.message}`:"Unknown Gateway error",cause:Q,authMethod:J})}function by4(Q){if(Q.data!==void 0)return Q.data;if(Q.responseBody!=null)try{return JSON.parse(Q.responseBody)}catch(J){return Q.responseBody}return{}}var GZ1="ai-gateway-auth-method";async function $N(Q){let J=await TQ({value:Q[GZ1],schema:xy4});return J.success?J.value:void 0}var xy4=MQ(()=>w5(x.union([x.literal("api-key"),x.literal("oidc")]))),sK1=class{constructor(Q){this.config=Q}async getAvailableModels(){try{let{value:Q}=await DY0({url:`${this.config.baseURL}/config`,headers:await P5(this.config.headers()),successfulResponseHandler:dW(gy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(J)=>J}),fetch:this.config.fetch});return Q}catch(Q){throw await ZZ(Q)}}async getCredits(){try{let Q=new URL(this.config.baseURL),{value:J}=await DY0({url:`${Q.origin}/v1/credits`,headers:await P5(this.config.headers()),successfulResponseHandler:dW(uy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(X)=>X}),fetch:this.config.fetch});return J}catch(Q){throw await ZZ(Q)}}},gy4=MQ(()=>w5(x.object({models:x.array(x.object({id:x.string(),name:x.string(),description:x.string().nullish(),pricing:x.object({input:x.string(),output:x.string(),input_cache_read:x.string().nullish(),input_cache_write:x.string().nullish()}).transform(({input:Q,output:J,input_cache_read:X,input_cache_write:G})=>({input:Q,output:J,...X?{cachedInputTokens:X}:{},...G?{cacheCreationInputTokens:G}:{}})).nullish(),specification:x.object({specificationVersion:x.literal("v3"),provider:x.string(),modelId:x.string()}),modelType:x.enum(["language","embedding","image"]).nullish()}))}))),uy4=MQ(()=>w5(x.object({balance:x.string(),total_used:x.string()}).transform(({balance:Q,total_used:J})=>({balance:Q,totalUsed:J})))),my4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(Q){let{abortSignal:J,...X}=Q;return{args:this.maybeEncodeFileParts(X),warnings:[]}}async doGenerate(Q){let{args:J,warnings:X}=await this.getArgs(Q),{abortSignal:G}=Q,Y=await P5(this.config.headers());try{let{responseHeaders:W,value:$,rawValue:K}=await AF({url:this.getUrl(),headers:MF(Y,Q.headers,this.getModelConfigHeaders(this.modelId,!1),await P5(this.config.o11yHeaders)),body:J,successfulResponseHandler:dW(x.any()),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(Z)=>Z}),...G&&{abortSignal:G},fetch:this.config.fetch});return{...$,request:{body:J},response:{headers:W,body:K},warnings:X}}catch(W){throw await ZZ(W,await $N(Y))}}async doStream(Q){let{args:J,warnings:X}=await this.getArgs(Q),{abortSignal:G}=Q,Y=await P5(this.config.headers());try{let{value:W,responseHeaders:$}=await AF({url:this.getUrl(),headers:MF(Y,Q.headers,this.getModelConfigHeaders(this.modelId,!0),await P5(this.config.o11yHeaders)),body:J,successfulResponseHandler:JK1(x.any()),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(K)=>K}),...G&&{abortSignal:G},fetch:this.config.fetch});return{stream:W.pipeThrough(new TransformStream({start(K){if(X.length>0)K.enqueue({type:"stream-start",warnings:X})},transform(K,Z){if(K.success){let H=K.value;if(H.type==="raw"&&!Q.includeRawChunks)return;if(H.type==="response-metadata"&&H.timestamp&&typeof H.timestamp==="string")H.timestamp=new Date(H.timestamp);Z.enqueue(H)}else Z.error(K.error)}})),request:{body:J},response:{headers:$}}}catch(W){throw await ZZ(W,await $N(Y))}}isFilePart(Q){return Q&&typeof Q==="object"&&"type"in Q&&Q.type==="file"}maybeEncodeFileParts(Q){for(let J of Q.prompt)for(let X of J.content)if(this.isFilePart(X)){let G=X;if(G.data instanceof Uint8Array){let Y=Uint8Array.from(G.data),W=Buffer.from(Y).toString("base64");G.data=new URL(`data:${G.mediaType||"application/octet-stream"};base64,${W}`)}}return Q}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(Q,J){return{"ai-language-model-specification-version":"2","ai-language-model-id":Q,"ai-language-model-streaming":String(J)}}},ly4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:Q,headers:J,abortSignal:X,providerOptions:G}){var Y;let W=await P5(this.config.headers());try{let{responseHeaders:$,value:K,rawValue:Z}=await AF({url:this.getUrl(),headers:MF(W,J!=null?J:{},this.getModelConfigHeaders(),await P5(this.config.o11yHeaders)),body:{values:Q,...G?{providerOptions:G}:{}},successfulResponseHandler:dW(dy4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(H)=>H}),...X&&{abortSignal:X},fetch:this.config.fetch});return{embeddings:K.embeddings,usage:(Y=K.usage)!=null?Y:void 0,providerMetadata:K.providerMetadata,response:{headers:$,body:Z},warnings:[]}}catch($){throw await ZZ($,await $N(W))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"2","ai-model-id":this.modelId}}},dy4=MQ(()=>w5(x.object({embeddings:x.array(x.array(x.number())),usage:x.object({tokens:x.number()}).nullish(),providerMetadata:x.record(x.string(),x.record(x.string(),x.unknown())).optional()}))),py4=class{constructor(Q,J){this.modelId=Q,this.config=J,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Q,n:J,size:X,aspectRatio:G,seed:Y,providerOptions:W,headers:$,abortSignal:K}){var Z;let H=await P5(this.config.headers());try{let{responseHeaders:F,value:q,rawValue:V}=await AF({url:this.getUrl(),headers:MF(H,$!=null?$:{},this.getModelConfigHeaders(),await P5(this.config.o11yHeaders)),body:{prompt:Q,n:J,...X&&{size:X},...G&&{aspectRatio:G},...Y&&{seed:Y},...W&&{providerOptions:W}},successfulResponseHandler:dW(ny4),failedResponseHandler:KG({errorSchema:x.any(),errorToMessage:(z)=>z}),...K&&{abortSignal:K},fetch:this.config.fetch});return{images:q.images,warnings:(Z=q.warnings)!=null?Z:[],providerMetadata:q.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:F}}}catch(F){throw ZZ(F,await $N(H))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"2","ai-model-id":this.modelId}}},cy4=x.object({images:x.array(x.unknown()).optional()}).catchall(x.unknown()),ny4=x.object({images:x.array(x.string()),warnings:x.array(x.object({type:x.literal("other"),message:x.string()})).optional(),providerMetadata:x.record(x.string(),cy4).optional()});async function iy4(){var Q;return(Q=WZ1.getContext().headers)==null?void 0:Q["x-vercel-id"]}var ry4="3.0.3",ay4="0.0.1";function oy4(Q={}){var J,X;let G=null,Y=null,W=(J=Q.metadataCacheRefreshMillis)!=null?J:300000,$=0,K=(X=XK1(Q.baseURL))!=null?X:"https://ai-gateway.vercel.sh/v3/ai",Z=async()=>{try{let N=await sy4(Q);return $Z({Authorization:`Bearer ${N.token}`,"ai-gateway-protocol-version":ay4,[GZ1]:N.authMethod,...Q.headers},`ai-sdk/gateway/${ry4}`)}catch(N){throw gy.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:N})}},H=()=>{let N=xM({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),D=xM({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),P=xM({settingValue:void 0,environmentVariableName:"VERCEL_REGION"});return async()=>{let j=await iy4();return{...N&&{"ai-o11y-deployment-id":N},...D&&{"ai-o11y-environment":D},...P&&{"ai-o11y-region":P},...j&&{"ai-o11y-request-id":j}}}},F=(N)=>{return new my4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})},q=async()=>{var N,D,P;let j=(P=(D=(N=Q._internal)==null?void 0:N.currentDate)==null?void 0:D.call(N).getTime())!=null?P:Date.now();if(!G||j-$>W)$=j,G=new sK1({baseURL:K,headers:Z,fetch:Q.fetch}).getAvailableModels().then((M)=>{return Y=M,M}).catch(async(M)=>{throw await ZZ(M,await $N(await Z()))});return Y?Promise.resolve(Y):G},V=async()=>{return new sK1({baseURL:K,headers:Z,fetch:Q.fetch}).getCredits().catch(async(N)=>{throw await ZZ(N,await $N(await Z()))})},z=function(N){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return F(N)};z.specificationVersion="v3",z.getAvailableModels=q,z.getCredits=V,z.imageModel=(N)=>{return new py4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})},z.languageModel=F;let U=(N)=>{return new ly4(N,{provider:"gateway",baseURL:K,headers:Z,fetch:Q.fetch,o11yHeaders:H()})};return z.embeddingModel=U,z.textEmbeddingModel=U,z}var KZ1=oy4();async function sy4(Q){let J=xM({settingValue:Q.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(J)return{token:J,authMethod:"api-key"};return{token:await $Z1.getVercelOidcToken(),authMethod:"oidc"}}var W31=p4(V1(),1),mY0=p4(V1(),1);var ty4=Object.defineProperty,ey4=(Q,J)=>{for(var X in J)ty4(Q,X,{get:J[X],enumerable:!0})},BZ1="AI_InvalidArgumentError",OZ1=`vercel.ai.error.${BZ1}`,Qh4=Symbol.for(OZ1),DZ1,ZG=class extends S1{constructor({parameter:Q,value:J,message:X}){super({name:BZ1,message:`Invalid argument for parameter ${Q}: ${X}`});this[DZ1]=!0,this.parameter=Q,this.value=J}static isInstance(Q){return S1.hasMarker(Q,OZ1)}};DZ1=Qh4;var Jh4="AI_InvalidStreamPartError",Xh4=`vercel.ai.error.${Jh4}`,Yh4=Symbol.for(Xh4),Gh4;Gh4=Yh4;var LZ1="AI_InvalidToolApprovalError",wZ1=`vercel.ai.error.${LZ1}`,Wh4=Symbol.for(wZ1),PZ1,$h4=class extends S1{constructor({approvalId:Q}){super({name:LZ1,message:`Tool approval response references unknown approvalId: "${Q}". No matching tool-approval-request found in message history.`});this[PZ1]=!0,this.approvalId=Q}static isInstance(Q){return S1.hasMarker(Q,wZ1)}};PZ1=Wh4;var MZ1="AI_InvalidToolInputError",TZ1=`vercel.ai.error.${MZ1}`,Kh4=Symbol.for(TZ1),AZ1,nY0=class extends S1{constructor({toolInput:Q,toolName:J,cause:X,message:G=`Invalid input for tool ${J}: ${YG(X)}`}){super({name:MZ1,message:G,cause:X});this[AZ1]=!0,this.toolInput=Q,this.toolName=J}static isInstance(Q){return S1.hasMarker(Q,TZ1)}};AZ1=Kh4;var EZ1="AI_ToolCallNotFoundForApprovalError",jZ1=`vercel.ai.error.${EZ1}`,Zh4=Symbol.for(jZ1),IZ1,CZ1=class extends S1{constructor({toolCallId:Q,approvalId:J}){super({name:EZ1,message:`Tool call "${Q}" not found for approval request "${J}".`});this[IZ1]=!0,this.toolCallId=Q,this.approvalId=J}static isInstance(Q){return S1.hasMarker(Q,jZ1)}};IZ1=Zh4;var Hh4="AI_NoImageGeneratedError",Fh4=`vercel.ai.error.${Hh4}`,qh4=Symbol.for(Fh4),Vh4;Vh4=qh4;var RZ1="AI_NoObjectGeneratedError",SZ1=`vercel.ai.error.${RZ1}`,zh4=Symbol.for(SZ1),vZ1,HZ=class extends S1{constructor({message:Q="No object generated.",cause:J,text:X,response:G,usage:Y,finishReason:W}){super({name:RZ1,message:Q,cause:J});this[vZ1]=!0,this.text=X,this.response=G,this.usage=Y,this.finishReason=W}static isInstance(Q){return S1.hasMarker(Q,SZ1)}};vZ1=zh4;var kZ1="AI_NoOutputGeneratedError",_Z1=`vercel.ai.error.${kZ1}`,Uh4=Symbol.for(_Z1),yZ1,Nh4=class extends S1{constructor({message:Q="No output generated.",cause:J}={}){super({name:kZ1,message:Q,cause:J});this[yZ1]=!0}static isInstance(Q){return S1.hasMarker(Q,_Z1)}};yZ1=Uh4;var hZ1="AI_NoSuchToolError",fZ1=`vercel.ai.error.${hZ1}`,Bh4=Symbol.for(fZ1),bZ1,gY0=class extends S1{constructor({toolName:Q,availableTools:J=void 0,message:X=`Model tried to call unavailable tool '${Q}'. ${J===void 0?"No tools are available.":`Available tools: ${J.join(", ")}.`}`}){super({name:hZ1,message:X});this[bZ1]=!0,this.toolName=Q,this.availableTools=J}static isInstance(Q){return S1.hasMarker(Q,fZ1)}};bZ1=Bh4;var xZ1="AI_ToolCallRepairError",gZ1=`vercel.ai.error.${xZ1}`,Oh4=Symbol.for(gZ1),uZ1,Dh4=class extends S1{constructor({cause:Q,originalError:J,message:X=`Error repairing tool call: ${YG(Q)}`}){super({name:xZ1,message:X,cause:Q});this[uZ1]=!0,this.originalError=J}static isInstance(Q){return S1.hasMarker(Q,gZ1)}};uZ1=Oh4;var Lh4=class extends S1{constructor(Q){super({name:"AI_UnsupportedModelVersionError",message:`Unsupported model version ${Q.version} for provider "${Q.provider}" and model "${Q.modelId}". AI SDK 5 only supports models that implement specification version "v2".`});this.version=Q.version,this.provider=Q.provider,this.modelId=Q.modelId}},wh4="AI_InvalidDataContentError",Ph4=`vercel.ai.error.${wh4}`,Mh4=Symbol.for(Ph4),Th4;Th4=Mh4;var mZ1="AI_InvalidMessageRoleError",lZ1=`vercel.ai.error.${mZ1}`,Ah4=Symbol.for(lZ1),dZ1,Eh4=class extends S1{constructor({role:Q,message:J=`Invalid message role: '${Q}'. Must be one of: "system", "user", "assistant", "tool".`}){super({name:mZ1,message:J});this[dZ1]=!0,this.role=Q}static isInstance(Q){return S1.hasMarker(Q,lZ1)}};dZ1=Ah4;var pZ1="AI_MessageConversionError",cZ1=`vercel.ai.error.${pZ1}`,jh4=Symbol.for(cZ1),nZ1,Ih4=class extends S1{constructor({originalMessage:Q,message:J}){super({name:pZ1,message:J});this[nZ1]=!0,this.originalMessage=Q}static isInstance(Q){return S1.hasMarker(Q,cZ1)}};nZ1=jh4;var iZ1="AI_RetryError",rZ1=`vercel.ai.error.${iZ1}`,Ch4=Symbol.for(rZ1),aZ1,ZZ1=class extends S1{constructor({message:Q,reason:J,errors:X}){super({name:iZ1,message:Q});this[aZ1]=!0,this.reason=J,this.errors=X,this.lastError=X[X.length-1]}static isInstance(Q){return S1.hasMarker(Q,rZ1)}};aZ1=Ch4;function Rh4({warning:Q,provider:J,model:X}){let G=`AI SDK Warning (${J} / ${X}):`;switch(Q.type){case"unsupported":{let Y=`${G} The feature "${Q.feature}" is not supported.`;if(Q.details)Y+=` ${Q.details}`;return Y}case"compatibility":{let Y=`${G} The feature "${Q.feature}" is used in a compatibility mode.`;if(Q.details)Y+=` ${Q.details}`;return Y}case"other":return`${G} ${Q.message}`;default:return`${G} ${JSON.stringify(Q,null,2)}`}}var Sh4="AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.",HZ1=!1,oZ1=(Q)=>{if(Q.warnings.length===0)return;let J=globalThis.AI_SDK_LOG_WARNINGS;if(J===!1)return;if(typeof J==="function"){J(Q);return}if(!HZ1)HZ1=!0,console.info(Sh4);for(let X of Q.warnings)console.warn(Rh4({warning:X,provider:Q.provider,model:Q.model}))};function vh4({provider:Q,modelId:J}){oZ1({warnings:[{type:"compatibility",feature:"specificationVersion",details:"Using v2 specification compatibility mode. Some features may not be available."}],provider:Q,model:J})}function kh4(Q){if(Q.specificationVersion==="v3")return Q;return vh4({provider:Q.provider,modelId:Q.modelId}),new Proxy(Q,{get(J,X){switch(X){case"specificationVersion":return"v3";case"doGenerate":return async(...G)=>{let Y=await J.doGenerate(...G);return{...Y,finishReason:sZ1(Y.finishReason),usage:tZ1(Y.usage)}};case"doStream":return async(...G)=>{let Y=await J.doStream(...G);return{...Y,stream:_h4(Y.stream)}};default:return J[X]}}})}function _h4(Q){return Q.pipeThrough(new TransformStream({transform(J,X){switch(J.type){case"finish":X.enqueue({...J,finishReason:sZ1(J.finishReason),usage:tZ1(J.usage)});break;default:X.enqueue(J);break}}}))}function sZ1(Q){return{unified:Q==="unknown"?"other":Q,raw:void 0}}function tZ1(Q){return{inputTokens:{total:Q.inputTokens,noCache:void 0,cacheRead:Q.cachedInputTokens,cacheWrite:void 0},outputTokens:{total:Q.outputTokens,text:void 0,reasoning:Q.reasoningTokens}}}function eZ1(Q){if(typeof Q!=="string"){if(Q.specificationVersion!=="v3"&&Q.specificationVersion!=="v2"){let J=Q;throw new Lh4({version:J.specificationVersion,provider:J.provider,modelId:J.modelId})}return kh4(Q)}return yh4().languageModel(Q)}function yh4(){var Q;return(Q=globalThis.AI_SDK_DEFAULT_PROVIDER)!=null?Q:KZ1}var hh4=[{mediaType:"image/gif",bytesPrefix:[71,73,70]},{mediaType:"image/png",bytesPrefix:[137,80,78,71]},{mediaType:"image/jpeg",bytesPrefix:[255,216]},{mediaType:"image/webp",bytesPrefix:[82,73,70,70,null,null,null,null,87,69,66,80]},{mediaType:"image/bmp",bytesPrefix:[66,77]},{mediaType:"image/tiff",bytesPrefix:[73,73,42,0]},{mediaType:"image/tiff",bytesPrefix:[77,77,0,42]},{mediaType:"image/avif",bytesPrefix:[0,0,0,32,102,116,121,112,97,118,105,102]},{mediaType:"image/heic",bytesPrefix:[0,0,0,32,102,116,121,112,104,101,105,99]}];var fh4=(Q)=>{let J=typeof Q==="string"?GN(Q):Q,X=(J[6]&127)<<21|(J[7]&127)<<14|(J[8]&127)<<7|J[9]&127;return J.slice(X+10)};function bh4(Q){return typeof Q==="string"&&Q.startsWith("SUQz")||typeof Q!=="string"&&Q.length>10&&Q[0]===73&&Q[1]===68&&Q[2]===51?fh4(Q):Q}function xh4({data:Q,signatures:J}){let X=bh4(Q),G=typeof X==="string"?GN(X.substring(0,Math.min(X.length,24))):X;for(let Y of J)if(G.length>=Y.bytesPrefix.length&&Y.bytesPrefix.every((W,$)=>W===null||G[$]===W))return Y.mediaType;return}var gh4="6.0.4",uh4=async({url:Q})=>{var J;let X=Q.toString();try{let G=await fetch(X,{headers:$Z({},`ai-sdk/${gh4}`,hy())});if(!G.ok)throw new yy({url:X,statusCode:G.status,statusText:G.statusText});return{data:new Uint8Array(await G.arrayBuffer()),mediaType:(J=G.headers.get("content-type"))!=null?J:void 0}}catch(G){if(yy.isInstance(G))throw G;throw new yy({url:X,cause:G})}},mh4=(Q=uh4)=>(J)=>Promise.all(J.map(async(X)=>X.isUrlSupportedByModel?null:Q(X)));function lh4(Q){try{let[J,X]=Q.split(",");return{mediaType:J.split(";")[0].split(":")[1],base64Content:X}}catch(J){return{mediaType:void 0,base64Content:void 0}}}var Q31=x.union([x.string(),x.instanceof(Uint8Array),x.instanceof(ArrayBuffer),x.custom((Q)=>{var J,X;return(X=(J=globalThis.Buffer)==null?void 0:J.isBuffer(Q))!=null?X:!1},{message:"Must be a Buffer"})]);function J31(Q){if(Q instanceof Uint8Array)return{data:Q,mediaType:void 0};if(Q instanceof ArrayBuffer)return{data:new Uint8Array(Q),mediaType:void 0};if(typeof Q==="string")try{Q=new URL(Q)}catch(J){}if(Q instanceof URL&&Q.protocol==="data:"){let{mediaType:J,base64Content:X}=lh4(Q.toString());if(J==null||X==null)throw new S1({name:"InvalidDataContentError",message:`Invalid data URL format in content ${Q.toString()}`});return{data:X,mediaType:J}}return{data:Q,mediaType:void 0}}function dh4(Q){if(typeof Q==="string")return Q;if(Q instanceof ArrayBuffer)return fM(new Uint8Array(Q));return fM(Q)}function ly(Q){return Q===void 0?[]:Array.isArray(Q)?Q:[Q]}async function ph4({prompt:Q,supportedUrls:J,download:X=mh4()}){let G=await nh4(Q.messages,X,J),Y=[...Q.system!=null?typeof Q.system==="string"?[{role:"system",content:Q.system}]:ly(Q.system).map(($)=>({role:"system",content:$.content,providerOptions:$.providerOptions})):[],...Q.messages.map(($)=>ch4({message:$,downloadedAssets:G}))],W=[];for(let $ of Y){if($.role!=="tool"){W.push($);continue}let K=W.at(-1);if((K==null?void 0:K.role)==="tool")K.content.push(...$.content);else W.push($)}return W}function ch4({message:Q,downloadedAssets:J}){let X=Q.role;switch(X){case"system":return{role:"system",content:Q.content,providerOptions:Q.providerOptions};case"user":{if(typeof Q.content==="string")return{role:"user",content:[{type:"text",text:Q.content}],providerOptions:Q.providerOptions};return{role:"user",content:Q.content.map((G)=>ih4(G,J)).filter((G)=>G.type!=="text"||G.text!==""),providerOptions:Q.providerOptions}}case"assistant":{if(typeof Q.content==="string")return{role:"assistant",content:[{type:"text",text:Q.content}],providerOptions:Q.providerOptions};return{role:"assistant",content:Q.content.filter((G)=>G.type!=="text"||G.text!==""||G.providerOptions!=null).filter((G)=>G.type!=="tool-approval-request").map((G)=>{let Y=G.providerOptions;switch(G.type){case"file":{let{data:W,mediaType:$}=J31(G.data);return{type:"file",data:W,filename:G.filename,mediaType:$!=null?$:G.mediaType,providerOptions:Y}}case"reasoning":return{type:"reasoning",text:G.text,providerOptions:Y};case"text":return{type:"text",text:G.text,providerOptions:Y};case"tool-call":return{type:"tool-call",toolCallId:G.toolCallId,toolName:G.toolName,input:G.input,providerExecuted:G.providerExecuted,providerOptions:Y};case"tool-result":return{type:"tool-result",toolCallId:G.toolCallId,toolName:G.toolName,output:FZ1(G.output),providerOptions:Y}}}),providerOptions:Q.providerOptions}}case"tool":return{role:"tool",content:Q.content.filter((G)=>G.type!=="tool-approval-response"||G.providerExecuted).map((G)=>{switch(G.type){case"tool-result":return{type:"tool-result",toolCallId:G.toolCallId,toolName:G.toolName,output:FZ1(G.output),providerOptions:G.providerOptions};case"tool-approval-response":return{type:"tool-approval-response",approvalId:G.approvalId,approved:G.approved,reason:G.reason}}}),providerOptions:Q.providerOptions};default:throw new Eh4({role:X})}}async function nh4(Q,J,X){let G=Q.filter((W)=>W.role==="user").map((W)=>W.content).filter((W)=>Array.isArray(W)).flat().filter((W)=>W.type==="image"||W.type==="file").map((W)=>{var $;let K=($=W.mediaType)!=null?$:W.type==="image"?"image/*":void 0,Z=W.type==="image"?W.image:W.data;if(typeof Z==="string")try{Z=new URL(Z)}catch(H){}return{mediaType:K,data:Z}}).filter((W)=>W.data instanceof URL).map((W)=>({url:W.data,isUrlSupportedByModel:W.mediaType!=null&&r$1({url:W.data.toString(),mediaType:W.mediaType,supportedUrls:X})})),Y=await J(G);return Object.fromEntries(Y.map((W,$)=>W==null?null:[G[$].url.toString(),{data:W.data,mediaType:W.mediaType}]).filter((W)=>W!=null))}function ih4(Q,J){var X;if(Q.type==="text")return{type:"text",text:Q.text,providerOptions:Q.providerOptions};let G,Y=Q.type;switch(Y){case"image":G=Q.image;break;case"file":G=Q.data;break;default:throw Error(`Unsupported part type: ${Y}`)}let{data:W,mediaType:$}=J31(G),K=$!=null?$:Q.mediaType,Z=W;if(Z instanceof URL){let H=J[Z.toString()];if(H)Z=H.data,K!=null||(K=H.mediaType)}switch(Y){case"image":{if(Z instanceof Uint8Array||typeof Z==="string")K=(X=xh4({data:Z,signatures:hh4}))!=null?X:K;return{type:"file",mediaType:K!=null?K:"image/*",filename:void 0,data:Z,providerOptions:Q.providerOptions}}case"file":{if(K==null)throw Error("Media type is missing for file part");return{type:"file",mediaType:K,filename:Q.filename,data:Z,providerOptions:Q.providerOptions}}}}function FZ1(Q){if(Q.type!=="content")return Q;return{type:"content",value:Q.value.map((J)=>{if(J.type!=="media")return J;if(J.mediaType.startsWith("image/"))return{type:"image-data",data:J.data,mediaType:J.mediaType};return{type:"file-data",data:J.data,mediaType:J.mediaType}})}}async function ZN({toolCallId:Q,input:J,output:X,tool:G,errorMode:Y}){if(Y==="text")return{type:"error-text",value:YG(X)};else if(Y==="json")return{type:"error-json",value:qZ1(X)};if(G==null?void 0:G.toModelOutput)return await G.toModelOutput({toolCallId:Q,input:J,output:X});return typeof X==="string"?{type:"text",value:X}:{type:"json",value:qZ1(X)}}function qZ1(Q){return Q===void 0?null:Q}function rh4({maxOutputTokens:Q,temperature:J,topP:X,topK:G,presencePenalty:Y,frequencyPenalty:W,seed:$,stopSequences:K}){if(Q!=null){if(!Number.isInteger(Q))throw new ZG({parameter:"maxOutputTokens",value:Q,message:"maxOutputTokens must be an integer"});if(Q<1)throw new ZG({parameter:"maxOutputTokens",value:Q,message:"maxOutputTokens must be >= 1"})}if(J!=null){if(typeof J!=="number")throw new ZG({parameter:"temperature",value:J,message:"temperature must be a number"})}if(X!=null){if(typeof X!=="number")throw new ZG({parameter:"topP",value:X,message:"topP must be a number"})}if(G!=null){if(typeof G!=="number")throw new ZG({parameter:"topK",value:G,message:"topK must be a number"})}if(Y!=null){if(typeof Y!=="number")throw new ZG({parameter:"presencePenalty",value:Y,message:"presencePenalty must be a number"})}if(W!=null){if(typeof W!=="number")throw new ZG({parameter:"frequencyPenalty",value:W,message:"frequencyPenalty must be a number"})}if($!=null){if(!Number.isInteger($))throw new ZG({parameter:"seed",value:$,message:"seed must be an integer"})}return{maxOutputTokens:Q,temperature:J,topP:X,topK:G,presencePenalty:Y,frequencyPenalty:W,stopSequences:K,seed:$}}function ah4(Q){return Q!=null&&Object.keys(Q).length>0}async function oh4({tools:Q,toolChoice:J,activeTools:X}){if(!ah4(Q))return{tools:void 0,toolChoice:void 0};let G=X!=null?Object.entries(Q).filter(([W])=>X.includes(W)):Object.entries(Q),Y=[];for(let[W,$]of G){let K=$.type;switch(K){case void 0:case"dynamic":case"function":Y.push({type:"function",name:W,description:$.description,inputSchema:await $G($.inputSchema).jsonSchema,...$.inputExamples!=null?{inputExamples:$.inputExamples}:{},providerOptions:$.providerOptions,...$.strict!=null?{strict:$.strict}:{}});break;case"provider":Y.push({type:"provider",name:W,id:$.id,args:$.args});break;default:throw Error(`Unsupported tool type: ${K}`)}}return{tools:Y,toolChoice:J==null?{type:"auto"}:typeof J==="string"?{type:J}:{type:"tool",toolName:J.toolName}}}var dM=x.lazy(()=>x.union([x.null(),x.string(),x.number(),x.boolean(),x.record(x.string(),dM.optional()),x.array(dM)])),e1=x.record(x.string(),x.record(x.string(),dM.optional())),X31=x.object({type:x.literal("text"),text:x.string(),providerOptions:e1.optional()}),sh4=x.object({type:x.literal("image"),image:x.union([Q31,x.instanceof(URL)]),mediaType:x.string().optional(),providerOptions:e1.optional()}),Y31=x.object({type:x.literal("file"),data:x.union([Q31,x.instanceof(URL)]),filename:x.string().optional(),mediaType:x.string(),providerOptions:e1.optional()}),th4=x.object({type:x.literal("reasoning"),text:x.string(),providerOptions:e1.optional()}),eh4=x.object({type:x.literal("tool-call"),toolCallId:x.string(),toolName:x.string(),input:x.unknown(),providerOptions:e1.optional(),providerExecuted:x.boolean().optional()}),Qf4=x.discriminatedUnion("type",[x.object({type:x.literal("text"),value:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("json"),value:dM,providerOptions:e1.optional()}),x.object({type:x.literal("execution-denied"),reason:x.string().optional(),providerOptions:e1.optional()}),x.object({type:x.literal("error-text"),value:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("error-json"),value:dM,providerOptions:e1.optional()}),x.object({type:x.literal("content"),value:x.array(x.union([x.object({type:x.literal("text"),text:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("media"),data:x.string(),mediaType:x.string()}),x.object({type:x.literal("file-data"),data:x.string(),mediaType:x.string(),filename:x.string().optional(),providerOptions:e1.optional()}),x.object({type:x.literal("file-url"),url:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("file-id"),fileId:x.union([x.string(),x.record(x.string(),x.string())]),providerOptions:e1.optional()}),x.object({type:x.literal("image-data"),data:x.string(),mediaType:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("image-url"),url:x.string(),providerOptions:e1.optional()}),x.object({type:x.literal("image-file-id"),fileId:x.union([x.string(),x.record(x.string(),x.string())]),providerOptions:e1.optional()}),x.object({type:x.literal("custom"),providerOptions:e1.optional()})]))})]),G31=x.object({type:x.literal("tool-result"),toolCallId:x.string(),toolName:x.string(),output:Qf4,providerOptions:e1.optional()}),Jf4=x.object({type:x.literal("tool-approval-request"),approvalId:x.string(),toolCallId:x.string()}),Xf4=x.object({type:x.literal("tool-approval-response"),approvalId:x.string(),approved:x.boolean(),reason:x.string().optional()}),Yf4=x.object({role:x.literal("system"),content:x.string(),providerOptions:e1.optional()}),Gf4=x.object({role:x.literal("user"),content:x.union([x.string(),x.array(x.union([X31,sh4,Y31]))]),providerOptions:e1.optional()}),Wf4=x.object({role:x.literal("assistant"),content:x.union([x.string(),x.array(x.union([X31,Y31,th4,eh4,G31,Jf4]))]),providerOptions:e1.optional()}),$f4=x.object({role:x.literal("tool"),content:x.array(x.union([G31,Xf4])),providerOptions:e1.optional()}),Kf4=x.union([Yf4,Gf4,Wf4,$f4]);async function Zf4(Q){if(Q.prompt==null&&Q.messages==null)throw new zF({prompt:Q,message:"prompt or messages must be defined"});if(Q.prompt!=null&&Q.messages!=null)throw new zF({prompt:Q,message:"prompt and messages cannot be defined at the same time"});if(Q.system!=null&&typeof Q.system!=="string"&&!ly(Q.system).every((G)=>typeof G==="object"&&G!==null&&("role"in G)&&G.role==="system"))throw new zF({prompt:Q,message:"system must be a string, SystemModelMessage, or array of SystemModelMessage"});let J;if(Q.prompt!=null&&typeof Q.prompt==="string")J=[{role:"user",content:Q.prompt}];else if(Q.prompt!=null&&Array.isArray(Q.prompt))J=Q.prompt;else if(Q.messages!=null)J=Q.messages;else throw new zF({prompt:Q,message:"prompt or messages must be defined"});if(J.length===0)throw new zF({prompt:Q,message:"messages must not be empty"});let X=await TQ({value:J,schema:x.array(Kf4)});if(!X.success)throw new zF({prompt:Q,message:"The messages do not match the ModelMessage[] schema.",cause:X.error});return{messages:J,system:Q.system}}function Hf4(Q){if(!gy.isInstance(Q))return Q;let J=(process==null?void 0:"production")==="production",X="https://ai-sdk.dev/unauthenticated-ai-gateway";if(J)return new S1({name:"GatewayError",message:`Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${X}`});return Object.assign(Error(`\x1B[1m\x1B[31mUnauthenticated request to AI Gateway.\x1B[0m
1130
1130
 
1131
1131
  To authenticate, set the \x1B[33mAI_GATEWAY_API_KEY\x1B[0m environment variable with your API key.
1132
1132
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decocms/mesh",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "MCP Mesh - Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "license": "MIT",
6
6
  "author": "Deco team",