@lovable.dev/mcp-js 0.21.1-rc.1 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authorize-BMeXd_Sh.d.ts +25 -0
- package/dist/base-CM-KCpp6.d.ts +28 -0
- package/dist/chunk-4EHZUUS5.js +141 -0
- package/dist/chunk-6DXGZZA4.js +6 -0
- package/dist/chunk-6KNM7RGD.js +79 -0
- package/dist/chunk-6QFZYYUV.js +11 -0
- package/dist/chunk-EOFPMSND.js +6 -0
- package/dist/chunk-H37EB22A.js +125 -0
- package/dist/chunk-MA5H6PSF.js +46 -0
- package/dist/chunk-P43FIUMZ.js +114 -0
- package/dist/chunk-RK62EMPY.js +741 -0
- package/dist/chunk-RLE4UE63.js +58 -0
- package/dist/chunk-UQK5UO6C.js +26 -0
- package/dist/chunk-XQWJN6DC.js +14 -0
- package/dist/chunk-Y3ZFPEQH.js +8 -0
- package/dist/cli/extract-manifest.cjs +201 -116
- package/dist/cli/extract-manifest.d.cts +1 -1
- package/dist/cli/extract-manifest.d.ts +1 -1
- package/dist/cli/extract-manifest.js +156 -117
- package/dist/index.cjs +329 -129
- package/dist/index.d.cts +26 -26
- package/dist/index.d.ts +26 -26
- package/dist/index.js +177 -118
- package/dist/{io-CS4UL6_A.d.ts → io-D4srzRKc.d.ts} +4 -6
- package/dist/protocols/mcp/index.cjs +750 -3
- package/dist/protocols/mcp/index.d.cts +7 -6
- package/dist/protocols/mcp/index.d.ts +7 -6
- package/dist/protocols/mcp/index.js +12 -2
- package/dist/protocols/oauth-metadata.cjs +539 -48
- package/dist/protocols/oauth-metadata.d.cts +6 -5
- package/dist/protocols/oauth-metadata.d.ts +6 -5
- package/dist/protocols/oauth-metadata.js +10 -52
- package/dist/protocols/rest/index.cjs +843 -5
- package/dist/protocols/rest/index.d.cts +10 -7
- package/dist/protocols/rest/index.d.ts +10 -7
- package/dist/protocols/rest/index.js +16 -3
- package/dist/stacks/supabase/index.cjs +1318 -76
- package/dist/stacks/supabase/index.d.cts +30 -29
- package/dist/stacks/supabase/index.d.ts +30 -29
- package/dist/stacks/supabase/index.js +89 -73
- package/dist/stacks/supabase/vite.cjs +287 -258
- package/dist/stacks/supabase/vite.d.cts +24 -24
- package/dist/stacks/supabase/vite.d.ts +24 -24
- package/dist/stacks/supabase/vite.js +252 -252
- package/dist/stacks/tanstack/index.cjs +1272 -42
- package/dist/stacks/tanstack/index.d.cts +9 -8
- package/dist/stacks/tanstack/index.d.ts +9 -8
- package/dist/stacks/tanstack/index.js +41 -36
- package/dist/stacks/tanstack/vite.cjs +312 -223
- package/dist/stacks/tanstack/vite.d.cts +81 -80
- package/dist/stacks/tanstack/vite.d.ts +81 -80
- package/dist/stacks/tanstack/vite.js +282 -216
- package/dist/types-qqrmJ736.d.ts +321 -0
- package/package.json +28 -71
- package/dist/authorize-CumVyk7p.d.cts +0 -27
- package/dist/authorize-D6p4-9_D.d.ts +0 -27
- package/dist/base-CoIFvAmS.d.cts +0 -26
- package/dist/base-CoIFvAmS.d.ts +0 -26
- package/dist/content-D5LJAHyM.js +0 -12
- package/dist/content-NCYIGgOb.cjs +0 -17
- package/dist/context-BweeEcoA.cjs +0 -56
- package/dist/context-CIpPzN7P.js +0 -51
- package/dist/cors-B7CTXIHD.js +0 -829
- package/dist/cors-BebjKPrc.cjs +0 -912
- package/dist/forwarded--h4efJy-.js +0 -43
- package/dist/forwarded-Pi8Hs5Ps.cjs +0 -48
- package/dist/fs-errors-CWNzOV75.cjs +0 -11
- package/dist/fs-errors-PA2t1TIp.js +0 -6
- package/dist/io-CbbUbPY3.d.cts +0 -15
- package/dist/list-tools-CBCuS1Tv.cjs +0 -57
- package/dist/list-tools-CsWgiRy1.d.ts +0 -8
- package/dist/list-tools-CtZHOuPv.d.cts +0 -8
- package/dist/list-tools-D75RGtgs.js +0 -46
- package/dist/logger-2OXtfiIW.js +0 -141
- package/dist/logger-BqPOa_E1.cjs +0 -194
- package/dist/mcp-Cdj0AYst.cjs +0 -123
- package/dist/mcp-GngXbcqN.js +0 -118
- package/dist/metadata-path-CAkNcfyY.js +0 -12
- package/dist/metadata-path-zd7NSNoa.cjs +0 -17
- package/dist/package-7EUptuSJ.js +0 -4
- package/dist/package-BwCGVRcB.cjs +0 -9
- package/dist/paths-IS65L6TA.js +0 -7
- package/dist/paths-OP318a6c.cjs +0 -18
- package/dist/rest-CXH6-zv9.js +0 -113
- package/dist/rest-CyV8LHeB.cjs +0 -118
- package/dist/types-BYdYYTjk.d.cts +0 -321
- package/dist/types-BYdYYTjk.d.ts +0 -321
|
@@ -1,135 +1,174 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
2
|
+
import {
|
|
3
|
+
buildMcpListing
|
|
4
|
+
} from "../chunk-RLE4UE63.js";
|
|
5
|
+
import "../chunk-RK62EMPY.js";
|
|
6
|
+
import "../chunk-H37EB22A.js";
|
|
7
|
+
import "../chunk-6DXGZZA4.js";
|
|
8
|
+
import {
|
|
9
|
+
isFileMissing
|
|
10
|
+
} from "../chunk-Y3ZFPEQH.js";
|
|
11
|
+
import {
|
|
12
|
+
version
|
|
13
|
+
} from "../chunk-EOFPMSND.js";
|
|
14
|
+
|
|
15
|
+
// src/manifest/io.ts
|
|
16
|
+
import { randomUUID } from "crypto";
|
|
17
|
+
import { lstatSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "fs";
|
|
18
|
+
import { dirname, resolve } from "path";
|
|
19
|
+
import { resolveConfig } from "vite";
|
|
20
|
+
|
|
21
|
+
// src/manifest/extract.ts
|
|
22
|
+
var MANIFEST_VERSION = 1;
|
|
23
|
+
var MANIFEST_RELATIVE_PATH = ".lovable/mcp/manifest.json";
|
|
10
24
|
function manifestAuth(auth) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (!auth)
|
|
26
|
+
return { type: "none" };
|
|
27
|
+
const oauth = { type: "oauth", issuer: auth.issuer };
|
|
28
|
+
if (auth.resource !== void 0)
|
|
29
|
+
oauth.resource = auth.resource;
|
|
30
|
+
if (auth.resourceName !== void 0)
|
|
31
|
+
oauth.resource_name = auth.resourceName;
|
|
32
|
+
if (auth.resourceDocumentation !== void 0)
|
|
33
|
+
oauth.resource_documentation = auth.resourceDocumentation;
|
|
34
|
+
if (auth.protectedResourceMetadataUrl !== void 0)
|
|
35
|
+
oauth.protected_resource_metadata_url = auth.protectedResourceMetadataUrl;
|
|
36
|
+
if (auth.requireOAuthClientClaim !== void 0)
|
|
37
|
+
oauth.require_oauth_client_claim = auth.requireOAuthClientClaim;
|
|
38
|
+
if (auth.acceptResourceClaim !== void 0)
|
|
39
|
+
oauth.accept_resource_claim = auth.acceptResourceClaim;
|
|
40
|
+
if (auth.acceptedAudiences !== void 0)
|
|
41
|
+
oauth.accepted_audiences = auth.acceptedAudiences;
|
|
42
|
+
if (auth.requiredScopes !== void 0)
|
|
43
|
+
oauth.required_scopes = auth.requiredScopes;
|
|
44
|
+
if (auth.jwksUri !== void 0)
|
|
45
|
+
oauth.jwks_uri = auth.jwksUri;
|
|
46
|
+
if (auth.algorithms !== void 0)
|
|
47
|
+
oauth.algorithms = auth.algorithms;
|
|
48
|
+
if (auth.clockToleranceSeconds !== void 0)
|
|
49
|
+
oauth.clock_tolerance_seconds = auth.clockToleranceSeconds;
|
|
50
|
+
return oauth;
|
|
28
51
|
}
|
|
29
52
|
function isToolShape(tool) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
53
|
+
if (typeof tool !== "object" || tool === null)
|
|
54
|
+
return false;
|
|
55
|
+
const t = tool;
|
|
56
|
+
return typeof t.name === "string" && typeof t.title === "string" && typeof t.description === "string";
|
|
33
57
|
}
|
|
34
58
|
function isAuthShape(auth) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
59
|
+
if (auth === void 0)
|
|
60
|
+
return true;
|
|
61
|
+
if (typeof auth !== "object" || auth === null)
|
|
62
|
+
return false;
|
|
63
|
+
const a = auth;
|
|
64
|
+
return a.type === "oauth" && typeof a.issuer === "string" && a.issuer.length > 0;
|
|
39
65
|
}
|
|
40
66
|
function manifestFromDefinition(definition, urlPath, source = "the MCP entry") {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
const def = definition;
|
|
68
|
+
const validShape = !!def && typeof def === "object" && typeof def.name === "string" && typeof def.title === "string" && typeof def.version === "string" && Array.isArray(def.tools) && def.tools.every(isToolShape) && isAuthShape(def.auth);
|
|
69
|
+
if (!validShape) {
|
|
70
|
+
const got = definition == null ? "no default export" : typeof definition;
|
|
71
|
+
throw new Error(`@lovable.dev/mcp-js: ${source} must \`export default defineMcp(...)\` (got ${got}).`);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
version: MANIFEST_VERSION,
|
|
75
|
+
sdk_version: version,
|
|
76
|
+
path: urlPath,
|
|
77
|
+
auth: manifestAuth(def.auth),
|
|
78
|
+
mcp: buildMcpListing(def)
|
|
79
|
+
};
|
|
50
80
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
await server.close();
|
|
70
|
-
}
|
|
81
|
+
|
|
82
|
+
// src/manifest/ssr-loader.ts
|
|
83
|
+
import { createServer } from "vite";
|
|
84
|
+
async function produceViaSsr(projectRoot2, alias, entryAbs, urlPath) {
|
|
85
|
+
const server = await createServer({
|
|
86
|
+
configFile: false,
|
|
87
|
+
root: projectRoot2,
|
|
88
|
+
logLevel: "silent",
|
|
89
|
+
server: { middlewareMode: true, hmr: false, watch: null },
|
|
90
|
+
optimizeDeps: { noDiscovery: true },
|
|
91
|
+
resolve: { alias }
|
|
92
|
+
});
|
|
93
|
+
try {
|
|
94
|
+
const mod = await server.ssrLoadModule(entryAbs);
|
|
95
|
+
return manifestFromDefinition(mod.default, urlPath, entryAbs);
|
|
96
|
+
} finally {
|
|
97
|
+
await server.close();
|
|
98
|
+
}
|
|
71
99
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
100
|
+
|
|
101
|
+
// src/manifest/io.ts
|
|
102
|
+
var MCP_PLUGIN_NAME_PREFIX = "@lovable.dev/mcp-js";
|
|
103
|
+
var DEFAULT_MCP_ENTRY = "src/lib/mcp/index.ts";
|
|
104
|
+
var DEFAULT_MCP_PATH = "/mcp";
|
|
75
105
|
function writeManifestIfChanged(file, manifest) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
const content = JSON.stringify(manifest, null, 2) + "\n";
|
|
107
|
+
let existing;
|
|
108
|
+
try {
|
|
109
|
+
existing = readFileSync(file, "utf8");
|
|
110
|
+
} catch (err) {
|
|
111
|
+
if (!isFileMissing(err))
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
if (existing === content)
|
|
115
|
+
return;
|
|
116
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
117
|
+
const tmp = `${file}.${randomUUID()}.tmp`;
|
|
118
|
+
try {
|
|
119
|
+
writeFileSync(tmp, content, "utf8");
|
|
120
|
+
renameSync(tmp, file);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
try {
|
|
123
|
+
unlinkSync(tmp);
|
|
124
|
+
} catch {
|
|
125
|
+
}
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
95
128
|
}
|
|
96
129
|
function removeManifest(file) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
try {
|
|
131
|
+
unlinkSync(file);
|
|
132
|
+
} catch (err) {
|
|
133
|
+
if (!isFileMissing(err))
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
102
136
|
}
|
|
103
137
|
async function syncManifest(manifestFile, entryAbs, urlPath, produce) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
138
|
+
let entryExists = true;
|
|
139
|
+
try {
|
|
140
|
+
lstatSync(entryAbs);
|
|
141
|
+
} catch (err) {
|
|
142
|
+
if (!isFileMissing(err))
|
|
143
|
+
throw err;
|
|
144
|
+
entryExists = false;
|
|
145
|
+
}
|
|
146
|
+
if (!entryExists) {
|
|
147
|
+
removeManifest(manifestFile);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const manifest = await produce(entryAbs, urlPath);
|
|
151
|
+
writeManifestIfChanged(manifestFile, manifest);
|
|
116
152
|
}
|
|
117
|
-
async function runExtract(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
153
|
+
async function runExtract(projectRoot2) {
|
|
154
|
+
const resolved = await resolveConfig({ root: projectRoot2, logLevel: "silent" }, "serve");
|
|
155
|
+
const alias = resolved.resolve?.alias ?? [];
|
|
156
|
+
const pluginApi = resolved.plugins.find(
|
|
157
|
+
(p) => typeof p.name === "string" && p.name.startsWith(MCP_PLUGIN_NAME_PREFIX)
|
|
158
|
+
)?.api;
|
|
159
|
+
const entryAbs = pluginApi?.mcpEntry ?? resolve(projectRoot2, DEFAULT_MCP_ENTRY);
|
|
160
|
+
const urlPath = pluginApi?.urlPath ?? DEFAULT_MCP_PATH;
|
|
161
|
+
await syncManifest(
|
|
162
|
+
resolve(projectRoot2, MANIFEST_RELATIVE_PATH),
|
|
163
|
+
entryAbs,
|
|
164
|
+
urlPath,
|
|
165
|
+
(entry, path) => produceViaSsr(projectRoot2, alias, entry, path)
|
|
166
|
+
);
|
|
127
167
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
168
|
+
|
|
169
|
+
// src/cli/extract-manifest.ts
|
|
170
|
+
var projectRoot = process.argv[2] ?? process.cwd();
|
|
171
|
+
runExtract(projectRoot).catch((err) => {
|
|
172
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
173
|
+
process.exit(1);
|
|
133
174
|
});
|
|
134
|
-
//#endregion
|
|
135
|
-
export {};
|