@lovable.dev/mcp-js 0.26.3 → 0.27.1

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 (55) hide show
  1. package/dist/{authorize-D3zzoTAG.d.cts → authorize-BcNuNPtP.d.cts} +15 -3
  2. package/dist/{cors-CzTj3-nh.cjs → authorize-CB35c3Wg.cjs} +34 -34
  3. package/dist/{authorize-Y6Jm8GhR.d.ts → authorize-Cs1yyLrq.d.ts} +15 -3
  4. package/dist/{cors-D1m2Ud44.js → authorize-FOlzhxrM.js} +31 -25
  5. package/dist/cli/extract-manifest.cjs +2 -2
  6. package/dist/cli/extract-manifest.js +2 -2
  7. package/dist/{forwarded-Pi8Hs5Ps.cjs → forwarded-Bhwcj22u.cjs} +2 -2
  8. package/dist/{forwarded--h4efJy-.js → forwarded-BlLF3dfc.js} +2 -2
  9. package/dist/gate-B9RSzvoI.cjs +24 -0
  10. package/dist/gate-BeHmyGxk.js +19 -0
  11. package/dist/index.cjs +1 -1
  12. package/dist/index.d.cts +2 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.js +1 -1
  15. package/dist/{io-B-fV6rsM.d.ts → io--MeYrWG7.d.ts} +1 -1
  16. package/dist/{io-Bd58IeVb.d.cts → io-BzTGjG_c.d.cts} +1 -1
  17. package/dist/{list-tools-C6u8G4iq.d.ts → list-tools-Bku6XkVc.d.ts} +1 -1
  18. package/dist/{list-tools-DOBMd4AE.d.cts → list-tools-Cn7tpE0V.d.cts} +1 -1
  19. package/dist/{list-tools-wQ13O3WE.cjs → list-tools-DiMCRunS.cjs} +9 -14
  20. package/dist/{list-tools-CTtFfDLi.js → list-tools-Dt-mhh52.js} +8 -13
  21. package/dist/{logger-BSKbuM66.cjs → logger-BkMMCFTv.cjs} +3 -0
  22. package/dist/{logger-3-kwsF-5.js → logger-rGakBvJ1.js} +3 -0
  23. package/dist/{mcp-DlbNiP7o.js → mcp-DiVQhHIw.js} +11 -15
  24. package/dist/{mcp-CG_9H8CN.cjs → mcp-ECo1Ixk8.cjs} +16 -20
  25. package/dist/{package-oSicfX7m.cjs → package-BdaLbzEh.cjs} +1 -1
  26. package/dist/{package-Cr1oDeFn.js → package-dtiombMt.js} +1 -1
  27. package/dist/protocols/mcp/index.cjs +1 -1
  28. package/dist/protocols/mcp/index.d.cts +1 -1
  29. package/dist/protocols/mcp/index.d.ts +1 -1
  30. package/dist/protocols/mcp/index.js +1 -1
  31. package/dist/protocols/oauth-metadata.cjs +25 -17
  32. package/dist/protocols/oauth-metadata.d.cts +1 -1
  33. package/dist/protocols/oauth-metadata.d.ts +1 -1
  34. package/dist/protocols/oauth-metadata.js +21 -13
  35. package/dist/protocols/rest/index.cjs +2 -2
  36. package/dist/protocols/rest/index.d.cts +2 -2
  37. package/dist/protocols/rest/index.d.ts +2 -2
  38. package/dist/protocols/rest/index.js +2 -2
  39. package/dist/{rest-B9OtLlIc.cjs → rest-1Pf9sYNU.cjs} +23 -23
  40. package/dist/{rest-BTK8v5-l.js → rest-Cit2862S.js} +11 -11
  41. package/dist/stacks/supabase/index.cjs +16 -15
  42. package/dist/stacks/supabase/index.js +14 -13
  43. package/dist/stacks/supabase/vite.cjs +1 -1
  44. package/dist/stacks/supabase/vite.d.cts +1 -1
  45. package/dist/stacks/supabase/vite.d.ts +1 -1
  46. package/dist/stacks/supabase/vite.js +1 -1
  47. package/dist/stacks/tanstack/index.cjs +9 -12
  48. package/dist/stacks/tanstack/index.d.cts +1 -1
  49. package/dist/stacks/tanstack/index.d.ts +1 -1
  50. package/dist/stacks/tanstack/index.js +9 -12
  51. package/dist/stacks/tanstack/vite.cjs +10 -5
  52. package/dist/stacks/tanstack/vite.d.cts +1 -1
  53. package/dist/stacks/tanstack/vite.d.ts +1 -1
  54. package/dist/stacks/tanstack/vite.js +10 -5
  55. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
- const require_logger = require("./logger-BSKbuM66.cjs");
1
+ const require_logger = require("./logger-BkMMCFTv.cjs");
2
2
  const require_errors = require("./errors-CN6Da8iz.cjs");
3
- const require_cors = require("./cors-CzTj3-nh.cjs");
3
+ const require_authorize = require("./authorize-CB35c3Wg.cjs");
4
4
  const require_content = require("./content-NCYIGgOb.cjs");
5
+ const require_gate = require("./gate-B9RSzvoI.cjs");
5
6
  let _modelcontextprotocol_sdk_server_mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
6
7
  let _modelcontextprotocol_sdk_server_webStandardStreamableHttp_js = require("@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js");
7
8
  //#region src/protocols/mcp/protocol.ts
8
- const STATELESS_ALLOW_METHODS = "POST, OPTIONS";
9
- function statelessMethodNotAllowed() {
9
+ function statelessMethodNotAllowed(allow) {
10
10
  return Response.json({
11
11
  jsonrpc: "2.0",
12
12
  id: null,
@@ -16,10 +16,7 @@ function statelessMethodNotAllowed() {
16
16
  }
17
17
  }, {
18
18
  status: 405,
19
- headers: {
20
- Allow: STATELESS_ALLOW_METHODS,
21
- "Cache-Control": "no-store"
22
- }
19
+ headers: { Allow: allow }
23
20
  });
24
21
  }
25
22
  /**
@@ -30,7 +27,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
30
27
  const endUserId = auth?.principal.sub;
31
28
  return (async (first) => {
32
29
  const args = tool.inputSchema ? first ?? {} : {};
33
- const start = require_cors.nowMs();
30
+ const start = require_authorize.nowMs();
34
31
  let result;
35
32
  try {
36
33
  result = await tool.handler(args, new require_errors.ToolContext(auth));
@@ -41,7 +38,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
41
38
  tool: tool.name,
42
39
  method: "tools/call",
43
40
  outcome: "handler_error",
44
- durationMs: require_cors.nowMs() - start,
41
+ durationMs: require_authorize.nowMs() - start,
45
42
  errorText: require_errors.errorSummary(err),
46
43
  endUserId
47
44
  });
@@ -66,7 +63,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
66
63
  tool: tool.name,
67
64
  method: "tools/call",
68
65
  outcome: "handler_error",
69
- durationMs: require_cors.nowMs() - start,
66
+ durationMs: require_authorize.nowMs() - start,
70
67
  endUserId
71
68
  });
72
69
  return {
@@ -81,7 +78,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
81
78
  tool: tool.name,
82
79
  method: "tools/call",
83
80
  outcome: result.isError ? "tool_error" : "ok",
84
- durationMs: require_cors.nowMs() - start,
81
+ durationMs: require_authorize.nowMs() - start,
85
82
  errorText: result.isError ? require_content.extractTextContent(result.content) : void 0,
86
83
  endUserId
87
84
  });
@@ -100,7 +97,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
100
97
  * caller (the stack handler) so telemetry reads the runtime env in-flight.
101
98
  */
102
99
  function createMcpProtocolHandler(mcp, options = {}) {
103
- const authorizer = require_cors.createRequestAuthorizer(mcp, options);
100
+ const authorizer = require_authorize.createRequestAuthorizer(mcp, options);
104
101
  const handle = async (request, authResult, recorder) => {
105
102
  try {
106
103
  const server = new _modelcontextprotocol_sdk_server_mcp_js.McpServer({
@@ -140,13 +137,12 @@ function createMcpProtocolHandler(mcp, options = {}) {
140
137
  }, { status: 500 });
141
138
  }
142
139
  };
143
- return async (request, recorder = require_cors.createNoopRecorder()) => {
144
- if (request.method === "OPTIONS") return require_cors.corsPreflightResponse(STATELESS_ALLOW_METHODS);
145
- const authResult = await authorizer.authorize(request, recorder);
146
- if (!authResult.ok) return require_cors.withCors(authResult.response);
147
- if (request.method !== "POST") return require_cors.withCors(statelessMethodNotAllowed());
148
- return require_cors.withCors(await handle(request, authResult, recorder));
149
- };
140
+ return require_gate.createGatedHandler({
141
+ authorizer,
142
+ methods: ["POST"],
143
+ methodNotAllowed: statelessMethodNotAllowed,
144
+ handle
145
+ });
150
146
  }
151
147
  //#endregion
152
148
  Object.defineProperty(exports, "createMcpProtocolHandler", {
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.26.3";
2
+ var version = "0.27.1";
3
3
  //#endregion
4
4
  Object.defineProperty(exports, "version", {
5
5
  enumerable: true,
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.26.3";
2
+ var version = "0.27.1";
3
3
  //#endregion
4
4
  export { version as t };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_mcp = require("../../mcp-CG_9H8CN.cjs");
2
+ const require_mcp = require("../../mcp-ECo1Ixk8.cjs");
3
3
  exports.createMcpProtocolHandler = require_mcp.createMcpProtocolHandler;
@@ -1,6 +1,6 @@
1
1
  import { c as McpDefinition } from "../../types-C0Wgm9zp.cjs";
2
2
  import { t as MetricsRecorder } from "../../base-CReh7d3E.cjs";
3
- import { t as McpRuntimeOptions } from "../../authorize-D3zzoTAG.cjs";
3
+ import { t as McpRuntimeOptions } from "../../authorize-BcNuNPtP.cjs";
4
4
  //#region src/protocols/mcp/protocol.d.ts
5
5
  type McpProtocolHandler = (request: Request, recorder?: MetricsRecorder) => Promise<Response>;
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { c as McpDefinition } from "../../types-C0Wgm9zp.js";
2
2
  import { t as MetricsRecorder } from "../../base-CReh7d3E.js";
3
- import { t as McpRuntimeOptions } from "../../authorize-Y6Jm8GhR.js";
3
+ import { t as McpRuntimeOptions } from "../../authorize-Cs1yyLrq.js";
4
4
  //#region src/protocols/mcp/protocol.d.ts
5
5
  type McpProtocolHandler = (request: Request, recorder?: MetricsRecorder) => Promise<Response>;
6
6
  /**
@@ -1,2 +1,2 @@
1
- import { t as createMcpProtocolHandler } from "../../mcp-DlbNiP7o.js";
1
+ import { t as createMcpProtocolHandler } from "../../mcp-DiVQhHIw.js";
2
2
  export { createMcpProtocolHandler };
@@ -1,20 +1,20 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_logger = require("../logger-BSKbuM66.cjs");
3
- const require_cors = require("../cors-CzTj3-nh.cjs");
2
+ const require_logger = require("../logger-BkMMCFTv.cjs");
3
+ const require_authorize = require("../authorize-CB35c3Wg.cjs");
4
4
  //#region src/protocols/oauth-metadata.ts
5
5
  function notFound() {
6
- return require_cors.withCors(new Response(JSON.stringify({ error: "not found" }), {
6
+ return new Response(JSON.stringify({ error: "not found" }), {
7
7
  status: 404,
8
8
  headers: {
9
- ...require_cors.JSON_HEADERS,
9
+ ...require_authorize.JSON_HEADERS,
10
10
  "Cache-Control": "no-store"
11
11
  }
12
- }));
12
+ });
13
13
  }
14
14
  async function buildProtectedResourceMetadata(mcp, auth, request, options, discovery) {
15
15
  const issuer = await discovery.resolveIssuer();
16
16
  const body = {
17
- resource: require_cors.resolveProtectedResource(auth, request, options),
17
+ resource: require_authorize.resolveProtectedResource(auth, request, options),
18
18
  authorization_servers: [issuer],
19
19
  bearer_methods_supported: ["header"],
20
20
  resource_name: auth.resourceName ?? mcp.title,
@@ -24,30 +24,38 @@ async function buildProtectedResourceMetadata(mcp, auth, request, options, disco
24
24
  return body;
25
25
  }
26
26
  function createOAuthProtectedResourceMetadataHandler(mcp, options = {}) {
27
- const runtime = require_cors.getOAuthRuntime(mcp, options);
28
- if (runtime.kind === "configured" && runtime.auth.protectedResourceMetadataUrl === void 0 && runtime.auth.resource === void 0 && runtime.options.resourcePath === void 0) throw new Error(`@lovable.dev/mcp-js: auth.resource or a resourcePath is required so the protected-resource metadata doesn't advertise the well-known URL as the resource`);
29
- return async (request) => {
27
+ const runtime = require_authorize.getOAuthRuntime(mcp, options);
28
+ if (runtime.kind === "configured" && runtime.auth.protectedResourceMetadataUrl === void 0 && runtime.auth.resource === void 0) {
29
+ if (runtime.options.resourcePath === void 0) throw new Error(`@lovable.dev/mcp-js: auth.resource or a resourcePath is required so the protected-resource metadata doesn't advertise the well-known URL as the resource`);
30
+ if (runtime.options.trustForwardedHost === true && runtime.options.forwardedHostTrustedByPlatform !== true) require_logger.log.warn("oauth.metadata.host_derived_resource", { detail: "trustForwardedHost is on and auth.resource is unpinned; the advertised resource follows X-Forwarded-Host. Pin auth.resource unless a trusted proxy overwrites that header." });
31
+ }
32
+ const varyHeaders = ["Host"];
33
+ if (runtime.options.trustForwardedHost === true) varyHeaders.push("X-Forwarded-Host");
34
+ if (runtime.options.trustForwardedProto === true) varyHeaders.push("X-Forwarded-Proto");
35
+ const vary = varyHeaders.join(", ");
36
+ const respond = async (request) => {
30
37
  if (runtime.kind !== "configured" || runtime.auth.protectedResourceMetadataUrl !== void 0) return notFound();
31
- if (request.method === "OPTIONS") return require_cors.corsPreflightResponse("GET, HEAD, OPTIONS");
32
- if (request.method !== "GET" && request.method !== "HEAD") return require_cors.withCors(require_cors.methodNotAllowed("GET, HEAD, OPTIONS"));
38
+ if (request.method !== "GET" && request.method !== "HEAD") return require_authorize.methodNotAllowed("GET, HEAD, OPTIONS");
33
39
  const headers = {
34
- ...require_cors.JSON_HEADERS,
40
+ ...require_authorize.JSON_HEADERS,
35
41
  "Cache-Control": "public, max-age=300",
36
- Vary: "Host"
42
+ Vary: vary
37
43
  };
38
44
  try {
39
45
  const metadata = await buildProtectedResourceMetadata(mcp, runtime.auth, request, runtime.options, runtime.discovery);
40
- const response = require_cors.withCors(Response.json(metadata, { headers }));
41
- return request.method === "HEAD" ? require_cors.headResponse(response) : response;
46
+ return Response.json(metadata, { headers });
42
47
  } catch (err) {
43
48
  require_logger.log.error("oauth.metadata.config_error", {
44
49
  ...require_logger.describeError(err),
45
50
  outcome: "500 oauth configuration error"
46
51
  });
47
- const response = require_cors.withCors(require_cors.oauthConfigurationErrorResponse());
48
- return request.method === "HEAD" ? require_cors.headResponse(response) : response;
52
+ return require_authorize.oauthConfigurationErrorResponse();
49
53
  }
50
54
  };
55
+ return async (request) => {
56
+ if (request.method === "OPTIONS") return require_authorize.corsPreflightResponse("GET, HEAD, OPTIONS");
57
+ return require_authorize.finalizeWireResponse(request, await respond(request));
58
+ };
51
59
  }
52
60
  //#endregion
53
61
  exports.createOAuthProtectedResourceMetadataHandler = createOAuthProtectedResourceMetadataHandler;
@@ -1,5 +1,5 @@
1
1
  import { c as McpDefinition } from "../types-C0Wgm9zp.cjs";
2
- import { t as McpRuntimeOptions } from "../authorize-D3zzoTAG.cjs";
2
+ import { t as McpRuntimeOptions } from "../authorize-BcNuNPtP.cjs";
3
3
  //#region src/protocols/oauth-metadata.d.ts
4
4
  type OAuthProtectedResourceMetadataHandler = (request: Request) => Promise<Response>;
5
5
  declare function createOAuthProtectedResourceMetadataHandler(mcp: McpDefinition, options?: McpRuntimeOptions): OAuthProtectedResourceMetadataHandler;
@@ -1,5 +1,5 @@
1
1
  import { c as McpDefinition } from "../types-C0Wgm9zp.js";
2
- import { t as McpRuntimeOptions } from "../authorize-Y6Jm8GhR.js";
2
+ import { t as McpRuntimeOptions } from "../authorize-Cs1yyLrq.js";
3
3
  //#region src/protocols/oauth-metadata.d.ts
4
4
  type OAuthProtectedResourceMetadataHandler = (request: Request) => Promise<Response>;
5
5
  declare function createOAuthProtectedResourceMetadataHandler(mcp: McpDefinition, options?: McpRuntimeOptions): OAuthProtectedResourceMetadataHandler;
@@ -1,14 +1,14 @@
1
- import { i as log, r as describeError } from "../logger-3-kwsF-5.js";
2
- import { a as getOAuthRuntime, c as resolveProtectedResource, f as JSON_HEADERS, m as methodNotAllowed, n as withCors, o as oauthConfigurationErrorResponse, p as headResponse, t as corsPreflightResponse } from "../cors-D1m2Ud44.js";
1
+ import { i as log, r as describeError } from "../logger-rGakBvJ1.js";
2
+ import { d as finalizeWireResponse, f as methodNotAllowed, i as oauthConfigurationErrorResponse, o as resolveProtectedResource, p as corsPreflightResponse, r as getOAuthRuntime, u as JSON_HEADERS } from "../authorize-FOlzhxrM.js";
3
3
  //#region src/protocols/oauth-metadata.ts
4
4
  function notFound() {
5
- return withCors(new Response(JSON.stringify({ error: "not found" }), {
5
+ return new Response(JSON.stringify({ error: "not found" }), {
6
6
  status: 404,
7
7
  headers: {
8
8
  ...JSON_HEADERS,
9
9
  "Cache-Control": "no-store"
10
10
  }
11
- }));
11
+ });
12
12
  }
13
13
  async function buildProtectedResourceMetadata(mcp, auth, request, options, discovery) {
14
14
  const issuer = await discovery.resolveIssuer();
@@ -24,29 +24,37 @@ async function buildProtectedResourceMetadata(mcp, auth, request, options, disco
24
24
  }
25
25
  function createOAuthProtectedResourceMetadataHandler(mcp, options = {}) {
26
26
  const runtime = getOAuthRuntime(mcp, options);
27
- if (runtime.kind === "configured" && runtime.auth.protectedResourceMetadataUrl === void 0 && runtime.auth.resource === void 0 && runtime.options.resourcePath === void 0) throw new Error(`@lovable.dev/mcp-js: auth.resource or a resourcePath is required so the protected-resource metadata doesn't advertise the well-known URL as the resource`);
28
- return async (request) => {
27
+ if (runtime.kind === "configured" && runtime.auth.protectedResourceMetadataUrl === void 0 && runtime.auth.resource === void 0) {
28
+ if (runtime.options.resourcePath === void 0) throw new Error(`@lovable.dev/mcp-js: auth.resource or a resourcePath is required so the protected-resource metadata doesn't advertise the well-known URL as the resource`);
29
+ if (runtime.options.trustForwardedHost === true && runtime.options.forwardedHostTrustedByPlatform !== true) log.warn("oauth.metadata.host_derived_resource", { detail: "trustForwardedHost is on and auth.resource is unpinned; the advertised resource follows X-Forwarded-Host. Pin auth.resource unless a trusted proxy overwrites that header." });
30
+ }
31
+ const varyHeaders = ["Host"];
32
+ if (runtime.options.trustForwardedHost === true) varyHeaders.push("X-Forwarded-Host");
33
+ if (runtime.options.trustForwardedProto === true) varyHeaders.push("X-Forwarded-Proto");
34
+ const vary = varyHeaders.join(", ");
35
+ const respond = async (request) => {
29
36
  if (runtime.kind !== "configured" || runtime.auth.protectedResourceMetadataUrl !== void 0) return notFound();
30
- if (request.method === "OPTIONS") return corsPreflightResponse("GET, HEAD, OPTIONS");
31
- if (request.method !== "GET" && request.method !== "HEAD") return withCors(methodNotAllowed("GET, HEAD, OPTIONS"));
37
+ if (request.method !== "GET" && request.method !== "HEAD") return methodNotAllowed("GET, HEAD, OPTIONS");
32
38
  const headers = {
33
39
  ...JSON_HEADERS,
34
40
  "Cache-Control": "public, max-age=300",
35
- Vary: "Host"
41
+ Vary: vary
36
42
  };
37
43
  try {
38
44
  const metadata = await buildProtectedResourceMetadata(mcp, runtime.auth, request, runtime.options, runtime.discovery);
39
- const response = withCors(Response.json(metadata, { headers }));
40
- return request.method === "HEAD" ? headResponse(response) : response;
45
+ return Response.json(metadata, { headers });
41
46
  } catch (err) {
42
47
  log.error("oauth.metadata.config_error", {
43
48
  ...describeError(err),
44
49
  outcome: "500 oauth configuration error"
45
50
  });
46
- const response = withCors(oauthConfigurationErrorResponse());
47
- return request.method === "HEAD" ? headResponse(response) : response;
51
+ return oauthConfigurationErrorResponse();
48
52
  }
49
53
  };
54
+ return async (request) => {
55
+ if (request.method === "OPTIONS") return corsPreflightResponse("GET, HEAD, OPTIONS");
56
+ return finalizeWireResponse(request, await respond(request));
57
+ };
50
58
  }
51
59
  //#endregion
52
60
  export { createOAuthProtectedResourceMetadataHandler };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_list_tools = require("../../list-tools-wQ13O3WE.cjs");
3
- const require_rest = require("../../rest-B9OtLlIc.cjs");
2
+ const require_list_tools = require("../../list-tools-DiMCRunS.cjs");
3
+ const require_rest = require("../../rest-1Pf9sYNU.cjs");
4
4
  exports.createInvokeToolHandler = require_rest.createInvokeToolHandler;
5
5
  exports.createListToolsHandler = require_list_tools.createListToolsHandler;
@@ -1,7 +1,7 @@
1
1
  import { c as McpDefinition } from "../../types-C0Wgm9zp.cjs";
2
2
  import { t as MetricsRecorder } from "../../base-CReh7d3E.cjs";
3
- import { t as McpRuntimeOptions } from "../../authorize-D3zzoTAG.cjs";
4
- import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-DOBMd4AE.cjs";
3
+ import { t as McpRuntimeOptions } from "../../authorize-BcNuNPtP.cjs";
4
+ import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-Cn7tpE0V.cjs";
5
5
  //#region src/protocols/rest/invoke-tool.d.ts
6
6
  type RestInvokeToolHandler = (request: Request, toolName: string, recorder?: MetricsRecorder) => Promise<Response>;
7
7
  declare function createInvokeToolHandler(mcp: McpDefinition, options?: McpRuntimeOptions): RestInvokeToolHandler;
@@ -1,7 +1,7 @@
1
1
  import { c as McpDefinition } from "../../types-C0Wgm9zp.js";
2
2
  import { t as MetricsRecorder } from "../../base-CReh7d3E.js";
3
- import { t as McpRuntimeOptions } from "../../authorize-Y6Jm8GhR.js";
4
- import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-C6u8G4iq.js";
3
+ import { t as McpRuntimeOptions } from "../../authorize-Cs1yyLrq.js";
4
+ import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-Bku6XkVc.js";
5
5
  //#region src/protocols/rest/invoke-tool.d.ts
6
6
  type RestInvokeToolHandler = (request: Request, toolName: string, recorder?: MetricsRecorder) => Promise<Response>;
7
7
  declare function createInvokeToolHandler(mcp: McpDefinition, options?: McpRuntimeOptions): RestInvokeToolHandler;
@@ -1,3 +1,3 @@
1
- import { n as createListToolsHandler } from "../../list-tools-CTtFfDLi.js";
2
- import { t as createInvokeToolHandler } from "../../rest-BTK8v5-l.js";
1
+ import { n as createListToolsHandler } from "../../list-tools-Dt-mhh52.js";
2
+ import { t as createInvokeToolHandler } from "../../rest-Cit2862S.js";
3
3
  export { createInvokeToolHandler, createListToolsHandler };
@@ -1,7 +1,8 @@
1
1
  const require_errors = require("./errors-CN6Da8iz.cjs");
2
- const require_cors = require("./cors-CzTj3-nh.cjs");
2
+ const require_authorize = require("./authorize-CB35c3Wg.cjs");
3
3
  const require_content = require("./content-NCYIGgOb.cjs");
4
- require("./list-tools-wQ13O3WE.cjs");
4
+ const require_gate = require("./gate-B9RSzvoI.cjs");
5
+ require("./list-tools-DiMCRunS.cjs");
5
6
  let _modelcontextprotocol_sdk_server_zod_compat_js = require("@modelcontextprotocol/sdk/server/zod-compat.js");
6
7
  //#region src/protocols/rest/invoke-tool.ts
7
8
  const MAX_REFLECTED_TOOL_NAME = 256;
@@ -15,17 +16,13 @@ function isEmptyArgs(value) {
15
16
  return Object.keys(value).length === 0;
16
17
  }
17
18
  function createInvokeToolHandler(mcp, options = {}) {
18
- require_cors.assertRestResourceBinding(mcp, options);
19
- const authorizer = require_cors.createRequestAuthorizer(mcp, options);
20
- const handle = async (request, toolName, recorder) => {
21
- const authResult = await authorizer.authorize(request, recorder);
22
- if (!authResult.ok) return authResult.response;
19
+ require_authorize.assertRestResourceBinding(mcp, options);
20
+ const handle = async (request, authResult, recorder, toolName) => {
23
21
  const endUserId = authResult.auth?.principal.sub;
24
- if (request.method !== "POST") return require_cors.methodNotAllowed("POST, OPTIONS");
25
22
  const tool = mcp.tools.find((t) => t.name === toolName);
26
23
  if (!tool) return new Response(JSON.stringify({ error: `unknown tool: ${safeReflectName(toolName)}` }), {
27
24
  status: 404,
28
- headers: require_cors.JSON_HEADERS
25
+ headers: require_authorize.JSON_HEADERS
29
26
  });
30
27
  let rawArgs = {};
31
28
  const text = await request.text();
@@ -34,7 +31,7 @@ function createInvokeToolHandler(mcp, options = {}) {
34
31
  } catch {
35
32
  return new Response(JSON.stringify({ error: "invalid JSON body" }), {
36
33
  status: 400,
37
- headers: require_cors.JSON_HEADERS
34
+ headers: require_authorize.JSON_HEADERS
38
35
  });
39
36
  }
40
37
  let args = rawArgs;
@@ -45,7 +42,7 @@ function createInvokeToolHandler(mcp, options = {}) {
45
42
  details: (0, _modelcontextprotocol_sdk_server_zod_compat_js.getParseErrorMessage)(parsed.error)
46
43
  }), {
47
44
  status: 400,
48
- headers: require_cors.JSON_HEADERS
45
+ headers: require_authorize.JSON_HEADERS
49
46
  });
50
47
  args = parsed.data;
51
48
  } catch {
@@ -54,15 +51,15 @@ function createInvokeToolHandler(mcp, options = {}) {
54
51
  tool: toolName
55
52
  }), {
56
53
  status: 500,
57
- headers: require_cors.JSON_HEADERS
54
+ headers: require_authorize.JSON_HEADERS
58
55
  });
59
56
  }
60
57
  else if (!isEmptyArgs(rawArgs)) return new Response(JSON.stringify({ error: "tool has no inputSchema; expected empty body" }), {
61
58
  status: 400,
62
- headers: require_cors.JSON_HEADERS
59
+ headers: require_authorize.JSON_HEADERS
63
60
  });
64
61
  let result;
65
- const start = require_cors.nowMs();
62
+ const start = require_authorize.nowMs();
66
63
  try {
67
64
  result = await tool.handler(args, new require_errors.ToolContext(authResult.auth));
68
65
  } catch (err) {
@@ -72,7 +69,7 @@ function createInvokeToolHandler(mcp, options = {}) {
72
69
  tool: tool.name,
73
70
  method: "tools/call",
74
71
  outcome: "handler_error",
75
- durationMs: require_cors.nowMs() - start,
72
+ durationMs: require_authorize.nowMs() - start,
76
73
  errorText: require_errors.errorSummary(err),
77
74
  endUserId
78
75
  });
@@ -81,7 +78,7 @@ function createInvokeToolHandler(mcp, options = {}) {
81
78
  tool: toolName
82
79
  }), {
83
80
  status: 500,
84
- headers: require_cors.JSON_HEADERS
81
+ headers: require_authorize.JSON_HEADERS
85
82
  });
86
83
  }
87
84
  result = {
@@ -97,19 +94,19 @@ function createInvokeToolHandler(mcp, options = {}) {
97
94
  tool: tool.name,
98
95
  method: "tools/call",
99
96
  outcome: "handler_error",
100
- durationMs: require_cors.nowMs() - start,
97
+ durationMs: require_authorize.nowMs() - start,
101
98
  endUserId
102
99
  });
103
100
  return new Response(JSON.stringify({ error: `tool "${toolName}" returned no result` }), {
104
101
  status: 500,
105
- headers: require_cors.JSON_HEADERS
102
+ headers: require_authorize.JSON_HEADERS
106
103
  });
107
104
  }
108
105
  await recorder.emit({
109
106
  tool: tool.name,
110
107
  method: "tools/call",
111
108
  outcome: result.isError ? "tool_error" : "ok",
112
- durationMs: require_cors.nowMs() - start,
109
+ durationMs: require_authorize.nowMs() - start,
113
110
  errorText: result.isError ? require_content.extractTextContent(result.content) : void 0,
114
111
  endUserId
115
112
  });
@@ -119,10 +116,13 @@ function createInvokeToolHandler(mcp, options = {}) {
119
116
  isError: result.isError
120
117
  });
121
118
  };
122
- return async (request, toolName, recorder = require_cors.createNoopRecorder()) => {
123
- if (request.method === "OPTIONS") return require_cors.corsPreflightResponse("POST, OPTIONS");
124
- return require_cors.withCors(await handle(request, toolName, recorder));
125
- };
119
+ const gated = require_gate.createGatedHandler({
120
+ authorizer: require_authorize.createRequestAuthorizer(mcp, options),
121
+ methods: ["POST"],
122
+ methodNotAllowed: require_authorize.methodNotAllowed,
123
+ handle
124
+ });
125
+ return (request, toolName, recorder) => gated(request, recorder, toolName);
126
126
  }
127
127
  //#endregion
128
128
  Object.defineProperty(exports, "createInvokeToolHandler", {
@@ -1,7 +1,8 @@
1
1
  import { i as ToolContext, n as errorSummary, r as resolveToolErrorMessage } from "./errors-DSe96Ffd.js";
2
- import { d as nowMs, f as JSON_HEADERS, i as createRequestAuthorizer, m as methodNotAllowed, n as withCors, r as assertRestResourceBinding, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-D1m2Ud44.js";
2
+ import { f as methodNotAllowed, l as nowMs, n as createRequestAuthorizer, t as assertRestResourceBinding, u as JSON_HEADERS } from "./authorize-FOlzhxrM.js";
3
3
  import { t as extractTextContent } from "./content-D5LJAHyM.js";
4
- import "./list-tools-CTtFfDLi.js";
4
+ import { t as createGatedHandler } from "./gate-BeHmyGxk.js";
5
+ import "./list-tools-Dt-mhh52.js";
5
6
  import { getParseErrorMessage, objectFromShape, safeParseAsync } from "@modelcontextprotocol/sdk/server/zod-compat.js";
6
7
  //#region src/protocols/rest/invoke-tool.ts
7
8
  const MAX_REFLECTED_TOOL_NAME = 256;
@@ -16,12 +17,8 @@ function isEmptyArgs(value) {
16
17
  }
17
18
  function createInvokeToolHandler(mcp, options = {}) {
18
19
  assertRestResourceBinding(mcp, options);
19
- const authorizer = createRequestAuthorizer(mcp, options);
20
- const handle = async (request, toolName, recorder) => {
21
- const authResult = await authorizer.authorize(request, recorder);
22
- if (!authResult.ok) return authResult.response;
20
+ const handle = async (request, authResult, recorder, toolName) => {
23
21
  const endUserId = authResult.auth?.principal.sub;
24
- if (request.method !== "POST") return methodNotAllowed("POST, OPTIONS");
25
22
  const tool = mcp.tools.find((t) => t.name === toolName);
26
23
  if (!tool) return new Response(JSON.stringify({ error: `unknown tool: ${safeReflectName(toolName)}` }), {
27
24
  status: 404,
@@ -119,10 +116,13 @@ function createInvokeToolHandler(mcp, options = {}) {
119
116
  isError: result.isError
120
117
  });
121
118
  };
122
- return async (request, toolName, recorder = createNoopRecorder()) => {
123
- if (request.method === "OPTIONS") return corsPreflightResponse("POST, OPTIONS");
124
- return withCors(await handle(request, toolName, recorder));
125
- };
119
+ const gated = createGatedHandler({
120
+ authorizer: createRequestAuthorizer(mcp, options),
121
+ methods: ["POST"],
122
+ methodNotAllowed,
123
+ handle
124
+ });
125
+ return (request, toolName, recorder) => gated(request, recorder, toolName);
126
126
  }
127
127
  //#endregion
128
128
  export { createInvokeToolHandler as t };
@@ -1,12 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_logger = require("../../logger-BSKbuM66.cjs");
3
- const require_cors = require("../../cors-CzTj3-nh.cjs");
2
+ const require_logger = require("../../logger-BkMMCFTv.cjs");
3
+ const require_authorize = require("../../authorize-CB35c3Wg.cjs");
4
4
  const require_metadata_path = require("../../metadata-path-zd7NSNoa.cjs");
5
- const require_mcp = require("../../mcp-CG_9H8CN.cjs");
5
+ const require_mcp = require("../../mcp-ECo1Ixk8.cjs");
6
6
  const require_protocols_oauth_metadata = require("../../protocols/oauth-metadata.cjs");
7
- const require_list_tools = require("../../list-tools-wQ13O3WE.cjs");
8
- const require_rest = require("../../rest-B9OtLlIc.cjs");
9
- const require_forwarded = require("../../forwarded-Pi8Hs5Ps.cjs");
7
+ const require_list_tools = require("../../list-tools-DiMCRunS.cjs");
8
+ const require_rest = require("../../rest-1Pf9sYNU.cjs");
9
+ const require_forwarded = require("../../forwarded-Bhwcj22u.cjs");
10
10
  const require_paths = require("../../paths-OP318a6c.cjs");
11
11
  //#region src/stacks/supabase/handler.ts
12
12
  function deriveResourcePath(options) {
@@ -50,23 +50,24 @@ function dispatchFor(pathname) {
50
50
  */
51
51
  function createSupabaseHandler(mcp, options = {}) {
52
52
  const resourcePath = deriveResourcePath(options);
53
- if (resourcePath !== void 0) require_cors.assertResourcePathShape(resourcePath);
53
+ if (resourcePath !== void 0) require_authorize.assertResourcePathShape(resourcePath);
54
54
  const servesOwnPrm = !(mcp.auth?.type === "oauth" && mcp.auth.protectedResourceMetadataUrl !== void 0);
55
55
  const metadataPath = resourcePath === void 0 || !servesOwnPrm ? void 0 : `${require_logger.trimTrailingSlash(resourcePath)}${require_metadata_path.OAUTH_PROTECTED_RESOURCE_METADATA_PATH}`;
56
- const runtimeOptions = resourcePath === void 0 ? {} : {
57
- resourcePath,
58
- ...metadataPath ? { metadataPath } : {}
56
+ const runtimeOptions = {
57
+ ...resourcePath === void 0 ? {} : {
58
+ resourcePath,
59
+ ...metadataPath ? { metadataPath } : {}
60
+ },
61
+ ...options.trustForwardedHost === true ? { trustForwardedHost: true } : {},
62
+ trustForwardedProto: true
59
63
  };
60
64
  const mcpHandler = require_mcp.createMcpProtocolHandler(mcp, runtimeOptions);
61
65
  const listToolsHandler = require_list_tools.createListToolsHandler(mcp, runtimeOptions);
62
66
  const invokeToolHandler = require_rest.createInvokeToolHandler(mcp, runtimeOptions);
63
67
  const metadataHandler = require_protocols_oauth_metadata.createOAuthProtectedResourceMetadataHandler(mcp, runtimeOptions);
64
68
  return async (request) => {
65
- const req = require_forwarded.applyForwardedOrigin(request, {
66
- trustForwardedProto: true,
67
- trustForwardedHost: options.trustForwardedHost
68
- });
69
- const recorder = require_cors.createRecorderForRuntime(mcp, { stack: "supabase" });
69
+ const req = require_forwarded.applyForwardedOrigin(request, runtimeOptions);
70
+ const recorder = require_authorize.createRecorderForRuntime(mcp, { stack: "supabase" });
70
71
  const target = dispatchFor(new URL(req.url).pathname);
71
72
  switch (target.kind) {
72
73
  case "metadata": return metadataHandler(req);
@@ -1,11 +1,11 @@
1
- import { s as trimTrailingSlash } from "../../logger-3-kwsF-5.js";
2
- import { l as createRecorderForRuntime, s as assertResourcePathShape } from "../../cors-D1m2Ud44.js";
1
+ import { s as trimTrailingSlash } from "../../logger-rGakBvJ1.js";
2
+ import { a as assertResourcePathShape, s as createRecorderForRuntime } from "../../authorize-FOlzhxrM.js";
3
3
  import { t as OAUTH_PROTECTED_RESOURCE_METADATA_PATH } from "../../metadata-path-CAkNcfyY.js";
4
- import { t as createMcpProtocolHandler } from "../../mcp-DlbNiP7o.js";
4
+ import { t as createMcpProtocolHandler } from "../../mcp-DiVQhHIw.js";
5
5
  import { createOAuthProtectedResourceMetadataHandler } from "../../protocols/oauth-metadata.js";
6
- import { n as createListToolsHandler } from "../../list-tools-CTtFfDLi.js";
7
- import { t as createInvokeToolHandler } from "../../rest-BTK8v5-l.js";
8
- import { t as applyForwardedOrigin } from "../../forwarded--h4efJy-.js";
6
+ import { n as createListToolsHandler } from "../../list-tools-Dt-mhh52.js";
7
+ import { t as createInvokeToolHandler } from "../../rest-Cit2862S.js";
8
+ import { t as applyForwardedOrigin } from "../../forwarded-BlLF3dfc.js";
9
9
  import { n as assertFunctionName, t as FUNCTIONS_MOUNT_PREFIX } from "../../paths-IS65L6TA.js";
10
10
  //#region src/stacks/supabase/handler.ts
11
11
  function deriveResourcePath(options) {
@@ -52,19 +52,20 @@ function createSupabaseHandler(mcp, options = {}) {
52
52
  if (resourcePath !== void 0) assertResourcePathShape(resourcePath);
53
53
  const servesOwnPrm = !(mcp.auth?.type === "oauth" && mcp.auth.protectedResourceMetadataUrl !== void 0);
54
54
  const metadataPath = resourcePath === void 0 || !servesOwnPrm ? void 0 : `${trimTrailingSlash(resourcePath)}${OAUTH_PROTECTED_RESOURCE_METADATA_PATH}`;
55
- const runtimeOptions = resourcePath === void 0 ? {} : {
56
- resourcePath,
57
- ...metadataPath ? { metadataPath } : {}
55
+ const runtimeOptions = {
56
+ ...resourcePath === void 0 ? {} : {
57
+ resourcePath,
58
+ ...metadataPath ? { metadataPath } : {}
59
+ },
60
+ ...options.trustForwardedHost === true ? { trustForwardedHost: true } : {},
61
+ trustForwardedProto: true
58
62
  };
59
63
  const mcpHandler = createMcpProtocolHandler(mcp, runtimeOptions);
60
64
  const listToolsHandler = createListToolsHandler(mcp, runtimeOptions);
61
65
  const invokeToolHandler = createInvokeToolHandler(mcp, runtimeOptions);
62
66
  const metadataHandler = createOAuthProtectedResourceMetadataHandler(mcp, runtimeOptions);
63
67
  return async (request) => {
64
- const req = applyForwardedOrigin(request, {
65
- trustForwardedProto: true,
66
- trustForwardedHost: options.trustForwardedHost
67
- });
68
+ const req = applyForwardedOrigin(request, runtimeOptions);
68
69
  const recorder = createRecorderForRuntime(mcp, { stack: "supabase" });
69
70
  const target = dispatchFor(new URL(req.url).pathname);
70
71
  switch (target.kind) {
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_package = require("../../package-oSicfX7m.cjs");
5
+ const require_package = require("../../package-BdaLbzEh.cjs");
6
6
  const require_fs_errors = require("../../fs-errors-CWNzOV75.cjs");
7
7
  const require_supabase_config = require("../../supabase-config-Dz7dnUv0.cjs");
8
8
  const require_paths = require("../../paths-OP318a6c.cjs");
@@ -1,4 +1,4 @@
1
- import { t as McpPluginApi } from "../../io-Bd58IeVb.cjs";
1
+ import { t as McpPluginApi } from "../../io-BzTGjG_c.cjs";
2
2
  import { Plugin } from "vite";
3
3
  //#region src/stacks/supabase/vite.d.ts
4
4
  interface McpPluginOptions {
@@ -1,4 +1,4 @@
1
- import { t as McpPluginApi } from "../../io-B-fV6rsM.js";
1
+ import { t as McpPluginApi } from "../../io--MeYrWG7.js";
2
2
  import { Plugin } from "vite";
3
3
  //#region src/stacks/supabase/vite.d.ts
4
4
  interface McpPluginOptions {