@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.
- package/dist/{authorize-D3zzoTAG.d.cts → authorize-BcNuNPtP.d.cts} +15 -3
- package/dist/{cors-CzTj3-nh.cjs → authorize-CB35c3Wg.cjs} +34 -34
- package/dist/{authorize-Y6Jm8GhR.d.ts → authorize-Cs1yyLrq.d.ts} +15 -3
- package/dist/{cors-D1m2Ud44.js → authorize-FOlzhxrM.js} +31 -25
- package/dist/cli/extract-manifest.cjs +2 -2
- package/dist/cli/extract-manifest.js +2 -2
- package/dist/{forwarded-Pi8Hs5Ps.cjs → forwarded-Bhwcj22u.cjs} +2 -2
- package/dist/{forwarded--h4efJy-.js → forwarded-BlLF3dfc.js} +2 -2
- package/dist/gate-B9RSzvoI.cjs +24 -0
- package/dist/gate-BeHmyGxk.js +19 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/{io-B-fV6rsM.d.ts → io--MeYrWG7.d.ts} +1 -1
- package/dist/{io-Bd58IeVb.d.cts → io-BzTGjG_c.d.cts} +1 -1
- package/dist/{list-tools-C6u8G4iq.d.ts → list-tools-Bku6XkVc.d.ts} +1 -1
- package/dist/{list-tools-DOBMd4AE.d.cts → list-tools-Cn7tpE0V.d.cts} +1 -1
- package/dist/{list-tools-wQ13O3WE.cjs → list-tools-DiMCRunS.cjs} +9 -14
- package/dist/{list-tools-CTtFfDLi.js → list-tools-Dt-mhh52.js} +8 -13
- package/dist/{logger-BSKbuM66.cjs → logger-BkMMCFTv.cjs} +3 -0
- package/dist/{logger-3-kwsF-5.js → logger-rGakBvJ1.js} +3 -0
- package/dist/{mcp-DlbNiP7o.js → mcp-DiVQhHIw.js} +11 -15
- package/dist/{mcp-CG_9H8CN.cjs → mcp-ECo1Ixk8.cjs} +16 -20
- package/dist/{package-oSicfX7m.cjs → package-BdaLbzEh.cjs} +1 -1
- package/dist/{package-Cr1oDeFn.js → package-dtiombMt.js} +1 -1
- package/dist/protocols/mcp/index.cjs +1 -1
- package/dist/protocols/mcp/index.d.cts +1 -1
- package/dist/protocols/mcp/index.d.ts +1 -1
- package/dist/protocols/mcp/index.js +1 -1
- package/dist/protocols/oauth-metadata.cjs +25 -17
- package/dist/protocols/oauth-metadata.d.cts +1 -1
- package/dist/protocols/oauth-metadata.d.ts +1 -1
- package/dist/protocols/oauth-metadata.js +21 -13
- package/dist/protocols/rest/index.cjs +2 -2
- package/dist/protocols/rest/index.d.cts +2 -2
- package/dist/protocols/rest/index.d.ts +2 -2
- package/dist/protocols/rest/index.js +2 -2
- package/dist/{rest-B9OtLlIc.cjs → rest-1Pf9sYNU.cjs} +23 -23
- package/dist/{rest-BTK8v5-l.js → rest-Cit2862S.js} +11 -11
- package/dist/stacks/supabase/index.cjs +16 -15
- package/dist/stacks/supabase/index.js +14 -13
- package/dist/stacks/supabase/vite.cjs +1 -1
- package/dist/stacks/supabase/vite.d.cts +1 -1
- package/dist/stacks/supabase/vite.d.ts +1 -1
- package/dist/stacks/supabase/vite.js +1 -1
- package/dist/stacks/tanstack/index.cjs +9 -12
- package/dist/stacks/tanstack/index.d.cts +1 -1
- package/dist/stacks/tanstack/index.d.ts +1 -1
- package/dist/stacks/tanstack/index.js +9 -12
- package/dist/stacks/tanstack/vite.cjs +10 -5
- package/dist/stacks/tanstack/vite.d.cts +1 -1
- package/dist/stacks/tanstack/vite.d.ts +1 -1
- package/dist/stacks/tanstack/vite.js +10 -5
- package/package.json +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const require_logger = require("./logger-
|
|
1
|
+
const require_logger = require("./logger-BkMMCFTv.cjs");
|
|
2
2
|
const require_errors = require("./errors-CN6Da8iz.cjs");
|
|
3
|
-
const
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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,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-
|
|
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-
|
|
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-
|
|
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-
|
|
3
|
-
const
|
|
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
|
|
6
|
+
return new Response(JSON.stringify({ error: "not found" }), {
|
|
7
7
|
status: 404,
|
|
8
8
|
headers: {
|
|
9
|
-
...
|
|
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:
|
|
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 =
|
|
28
|
-
if (runtime.kind === "configured" && runtime.auth.protectedResourceMetadataUrl === void 0 && runtime.auth.resource === void 0
|
|
29
|
-
|
|
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
|
|
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
|
-
...
|
|
40
|
+
...require_authorize.JSON_HEADERS,
|
|
35
41
|
"Cache-Control": "public, max-age=300",
|
|
36
|
-
Vary:
|
|
42
|
+
Vary: vary
|
|
37
43
|
};
|
|
38
44
|
try {
|
|
39
45
|
const metadata = await buildProtectedResourceMetadata(mcp, runtime.auth, request, runtime.options, runtime.discovery);
|
|
40
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
2
|
-
import {
|
|
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
|
|
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
|
|
28
|
-
|
|
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
|
|
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:
|
|
41
|
+
Vary: vary
|
|
36
42
|
};
|
|
37
43
|
try {
|
|
38
44
|
const metadata = await buildProtectedResourceMetadata(mcp, runtime.auth, request, runtime.options, runtime.discovery);
|
|
39
|
-
|
|
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
|
-
|
|
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-
|
|
3
|
-
const require_rest = require("../../rest-
|
|
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-
|
|
4
|
-
import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-
|
|
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-
|
|
4
|
-
import { n as createListToolsHandler, t as RestListToolsHandler } from "../../list-tools-
|
|
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-
|
|
2
|
-
import { t as createInvokeToolHandler } from "../../rest-
|
|
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
|
|
2
|
+
const require_authorize = require("./authorize-CB35c3Wg.cjs");
|
|
3
3
|
const require_content = require("./content-NCYIGgOb.cjs");
|
|
4
|
-
require("./
|
|
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
|
-
|
|
19
|
-
const
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
59
|
+
headers: require_authorize.JSON_HEADERS
|
|
63
60
|
});
|
|
64
61
|
let result;
|
|
65
|
-
const start =
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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 {
|
|
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 "./
|
|
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
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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-
|
|
3
|
-
const
|
|
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-
|
|
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-
|
|
8
|
-
const require_rest = require("../../rest-
|
|
9
|
-
const require_forwarded = require("../../forwarded-
|
|
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)
|
|
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 =
|
|
57
|
-
resourcePath
|
|
58
|
-
|
|
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
|
-
|
|
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-
|
|
2
|
-
import {
|
|
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-
|
|
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-
|
|
7
|
-
import { t as createInvokeToolHandler } from "../../rest-
|
|
8
|
-
import { t as applyForwardedOrigin } from "../../forwarded
|
|
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 =
|
|
56
|
-
resourcePath
|
|
57
|
-
|
|
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-
|
|
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");
|