@mcpmake/core 0.2.4 → 0.2.5
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/analyzer/dom-parser.d.ts +7 -0
- package/dist/analyzer/dom-parser.d.ts.map +1 -1
- package/dist/analyzer/dom-parser.js +31 -5
- package/dist/analyzer/dom-parser.js.map +1 -1
- package/dist/analyzer/site-crawler.d.ts.map +1 -1
- package/dist/analyzer/site-crawler.js +40 -8
- package/dist/analyzer/site-crawler.js.map +1 -1
- package/dist/emitter/index.d.ts.map +1 -1
- package/dist/emitter/index.js +113 -6
- package/dist/emitter/index.js.map +1 -1
- package/dist/emitter/project-scaffolder.d.ts +13 -0
- package/dist/emitter/project-scaffolder.d.ts.map +1 -1
- package/dist/emitter/project-scaffolder.js +29 -0
- package/dist/emitter/project-scaffolder.js.map +1 -1
- package/dist/emitter/python-template-loader.d.ts.map +1 -1
- package/dist/emitter/python-template-loader.js +10 -0
- package/dist/emitter/python-template-loader.js.map +1 -1
- package/dist/emitter/python-templates/server.py.hbs +78 -8
- package/dist/emitter/site-templates/browser-manager.ts.hbs +81 -32
- package/dist/emitter/site-templates/server-main-http.ts.hbs +25 -7
- package/dist/emitter/site-templates/tool-handler-form.ts.hbs +10 -8
- package/dist/emitter/template-loader.d.ts.map +1 -1
- package/dist/emitter/template-loader.js +9 -0
- package/dist/emitter/template-loader.js.map +1 -1
- package/dist/emitter/templates/auth-provider.ts.hbs +81 -20
- package/dist/emitter/templates/config.ts.hbs +7 -0
- package/dist/emitter/templates/env.example.hbs +6 -0
- package/dist/emitter/templates/http-executor.ts.hbs +150 -7
- package/dist/emitter/templates/server-main-http.ts.hbs +60 -4
- package/dist/emitter/templates/tool-handler.ts.hbs +37 -2
- package/dist/emitter/templates/tool-test.ts.hbs +9 -1
- package/dist/emitter/worker-templates/config.ts.hbs +7 -0
- package/dist/emitter/worker-templates/tool-handler.ts.hbs +37 -2
- package/dist/emitter/worker-templates/worker.ts.hbs +33 -2
- package/dist/parser/operation-extractor.d.ts.map +1 -1
- package/dist/parser/operation-extractor.js +12 -1
- package/dist/parser/operation-extractor.js.map +1 -1
- package/dist/parser/overlay-loader.d.ts.map +1 -1
- package/dist/parser/overlay-loader.js +11 -2
- package/dist/parser/overlay-loader.js.map +1 -1
- package/dist/parser/schema-converter.d.ts +13 -2
- package/dist/parser/schema-converter.d.ts.map +1 -1
- package/dist/parser/schema-converter.js +30 -19
- package/dist/parser/schema-converter.js.map +1 -1
- package/dist/pricing.d.ts +5 -1
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +7 -3
- package/dist/pricing.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +6 -21
- package/dist/providers/index.js.map +1 -1
- package/dist/recorder/browser-recorder.d.ts.map +1 -1
- package/dist/recorder/browser-recorder.js +39 -7
- package/dist/recorder/browser-recorder.js.map +1 -1
- package/dist/site-transformer/tool-generator.d.ts.map +1 -1
- package/dist/site-transformer/tool-generator.js +90 -22
- package/dist/site-transformer/tool-generator.js.map +1 -1
- package/dist/transformer/auth-detector.d.ts.map +1 -1
- package/dist/transformer/auth-detector.js +11 -4
- package/dist/transformer/auth-detector.js.map +1 -1
- package/dist/transformer/naming.d.ts.map +1 -1
- package/dist/transformer/naming.js +16 -8
- package/dist/transformer/naming.js.map +1 -1
- package/dist/transformer/resource-builder.d.ts.map +1 -1
- package/dist/transformer/resource-builder.js +13 -6
- package/dist/transformer/resource-builder.js.map +1 -1
- package/dist/transformer/stainless-translator.d.ts +6 -0
- package/dist/transformer/stainless-translator.d.ts.map +1 -1
- package/dist/transformer/stainless-translator.js +18 -1
- package/dist/transformer/stainless-translator.js.map +1 -1
- package/dist/transformer/tool-builder.d.ts.map +1 -1
- package/dist/transformer/tool-builder.js +111 -13
- package/dist/transformer/tool-builder.js.map +1 -1
- package/dist/types/index.d.ts +72 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/site.d.ts +19 -1
- package/dist/types/site.d.ts.map +1 -1
- package/dist/utils/sanitize.d.ts +62 -0
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +141 -0
- package/dist/utils/sanitize.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,4 +8,11 @@ import type { PageDescriptor } from '../types/site.js';
|
|
|
8
8
|
* Parse a single page and extract all interactive elements.
|
|
9
9
|
*/
|
|
10
10
|
export declare function parsePage(page: Page): Promise<PageDescriptor>;
|
|
11
|
+
/**
|
|
12
|
+
* True only when `href` parses to the exact same origin as `origin`.
|
|
13
|
+
* Guards against prefix-spoofing hosts such as
|
|
14
|
+
* `https://example.com.attacker.test` matching base `https://example.com`.
|
|
15
|
+
* Exported for regression testing of the same-origin admission logic.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isSameOrigin(href: string, origin: string): boolean;
|
|
11
18
|
//# sourceMappingURL=dom-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-parser.d.ts","sourceRoot":"","sources":["../../src/analyzer/dom-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,kBAAkB,CAAC;AAU1B;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBnE"}
|
|
1
|
+
{"version":3,"file":"dom-parser.d.ts","sourceRoot":"","sources":["../../src/analyzer/dom-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,kBAAkB,CAAC;AAU1B;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBnE;AA8QD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMlE"}
|
|
@@ -95,9 +95,15 @@ async function extractFormFields(page, formEl) {
|
|
|
95
95
|
ariaLabel: el.getAttribute('aria-label') || '',
|
|
96
96
|
// Get associated label
|
|
97
97
|
label: input.labels?.[0]?.textContent?.trim() || '',
|
|
98
|
-
// Get select options
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
// Get select options as label/value pairs. The visible label and
|
|
99
|
+
// the submitted value routinely differ; Playwright's selectOption
|
|
100
|
+
// matches by value, so we must preserve both rather than collapsing
|
|
101
|
+
// to one string.
|
|
102
|
+
optionPairs: el.tagName === 'SELECT'
|
|
103
|
+
? Array.from(el.options).map((o) => ({
|
|
104
|
+
label: (o.text || o.value || '').trim(),
|
|
105
|
+
value: o.value ?? '',
|
|
106
|
+
}))
|
|
101
107
|
: undefined,
|
|
102
108
|
};
|
|
103
109
|
});
|
|
@@ -114,7 +120,10 @@ async function extractFormFields(page, formEl) {
|
|
|
114
120
|
label: label || undefined,
|
|
115
121
|
placeholder: attrs.placeholder || undefined,
|
|
116
122
|
required: attrs.required,
|
|
117
|
-
|
|
123
|
+
// Keep the visible labels for human-facing enum docs, plus the
|
|
124
|
+
// label/value pairs the handler needs to drive selectOption by value.
|
|
125
|
+
options: attrs.optionPairs ? attrs.optionPairs.map((o) => o.label) : undefined,
|
|
126
|
+
optionPairs: attrs.optionPairs,
|
|
118
127
|
defaultValue: attrs.value || undefined,
|
|
119
128
|
});
|
|
120
129
|
}
|
|
@@ -198,7 +207,10 @@ async function extractLinks(page) {
|
|
|
198
207
|
// Skip non-http links (javascript:, mailto:, tel:, #)
|
|
199
208
|
if (!attrs.href.startsWith('http'))
|
|
200
209
|
continue;
|
|
201
|
-
|
|
210
|
+
// Same-origin must be decided by parsed URL.origin, never a string
|
|
211
|
+
// prefix: `https://example.com.attacker.test` starts with
|
|
212
|
+
// `https://example.com` but is a different origin.
|
|
213
|
+
const isNavigation = isSameOrigin(attrs.href, pageOrigin) && !attrs.href.includes('#');
|
|
202
214
|
const selector = await buildSelectorSet(page, linkEl);
|
|
203
215
|
const linkId = generateStableId('link', normalizedHref);
|
|
204
216
|
links.push({
|
|
@@ -242,6 +254,20 @@ function mapFieldType(tagName, type) {
|
|
|
242
254
|
};
|
|
243
255
|
return typeMap[type] || 'other';
|
|
244
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* True only when `href` parses to the exact same origin as `origin`.
|
|
259
|
+
* Guards against prefix-spoofing hosts such as
|
|
260
|
+
* `https://example.com.attacker.test` matching base `https://example.com`.
|
|
261
|
+
* Exported for regression testing of the same-origin admission logic.
|
|
262
|
+
*/
|
|
263
|
+
export function isSameOrigin(href, origin) {
|
|
264
|
+
try {
|
|
265
|
+
return new URL(href).origin === origin;
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
245
271
|
function normalizeHref(href) {
|
|
246
272
|
try {
|
|
247
273
|
const url = new URL(href);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-parser.js","sourceRoot":"","sources":["../../src/analyzer/dom-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dom-parser.js","sourceRoot":"","sources":["../../src/analyzer/dom-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-crawler.d.ts","sourceRoot":"","sources":["../../src/analyzer/site-crawler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAU,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAMvE,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,kCAAkC;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;CACtB;AAOD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"site-crawler.d.ts","sourceRoot":"","sources":["../../src/analyzer/site-crawler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAU,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAMvE,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,kCAAkC;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;CACtB;AAOD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAuJ3E"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* and extracting interactive elements from each page.
|
|
4
4
|
*/
|
|
5
5
|
import { chromium } from 'playwright';
|
|
6
|
-
import { parsePage } from './dom-parser.js';
|
|
6
|
+
import { parsePage, isSameOrigin } from './dom-parser.js';
|
|
7
7
|
import { captureViewportScreenshot } from './screenshot-capture.js';
|
|
8
8
|
import { logger } from '../utils/logger.js';
|
|
9
9
|
import crypto from 'node:crypto';
|
|
@@ -25,6 +25,9 @@ export async function crawlSite(options) {
|
|
|
25
25
|
throw new Error('Only http/https URLs are supported');
|
|
26
26
|
}
|
|
27
27
|
const baseUrl = `${parsedUrl.protocol}//${parsedUrl.host}`;
|
|
28
|
+
// Normalized origin used for same-origin admission. A string-prefix check on
|
|
29
|
+
// baseUrl would admit prefix-spoofing hosts (e.g. example.com.attacker.test).
|
|
30
|
+
const baseOrigin = parsedUrl.origin;
|
|
28
31
|
const captureHar = options.captureHar ?? false;
|
|
29
32
|
const pages = [];
|
|
30
33
|
const screenshots = new Map();
|
|
@@ -49,7 +52,6 @@ export async function crawlSite(options) {
|
|
|
49
52
|
const pending = pendingRequests.get(request);
|
|
50
53
|
if (!pending)
|
|
51
54
|
return;
|
|
52
|
-
pendingRequests.delete(request);
|
|
53
55
|
try {
|
|
54
56
|
const entry = await buildCrawlHarEntry(request, response, pending.startTime);
|
|
55
57
|
harEntries.push(entry);
|
|
@@ -57,6 +59,11 @@ export async function crawlSite(options) {
|
|
|
57
59
|
catch {
|
|
58
60
|
// Some responses can't be read (redirects, aborted)
|
|
59
61
|
}
|
|
62
|
+
finally {
|
|
63
|
+
// Always free the pending entry, even on read failure, so the map
|
|
64
|
+
// can't grow unbounded across a long crawl.
|
|
65
|
+
pendingRequests.delete(request);
|
|
66
|
+
}
|
|
60
67
|
});
|
|
61
68
|
}
|
|
62
69
|
logger.info(`Crawling site: ${options.url} (depth: ${depth}, max pages: ${maxPages})`);
|
|
@@ -64,10 +71,12 @@ export async function crawlSite(options) {
|
|
|
64
71
|
while (queue.length > 0 && pages.length < maxPages) {
|
|
65
72
|
const item = queue.shift();
|
|
66
73
|
const normalizedUrl = normalizeUrl(item.url);
|
|
67
|
-
// Skip if already visited or different origin
|
|
74
|
+
// Skip if already visited or different origin. Origin is compared via
|
|
75
|
+
// parsed URL.origin, never a string prefix, so a malicious link to
|
|
76
|
+
// `https://<base>.attacker.test` cannot pull the crawler off-origin.
|
|
68
77
|
if (visited.has(normalizedUrl))
|
|
69
78
|
continue;
|
|
70
|
-
if (!item.url
|
|
79
|
+
if (!isSameOrigin(item.url, baseOrigin))
|
|
71
80
|
continue;
|
|
72
81
|
visited.add(normalizedUrl);
|
|
73
82
|
// Check idle timeout
|
|
@@ -97,7 +106,9 @@ export async function crawlSite(options) {
|
|
|
97
106
|
// Queue navigation links for further crawling
|
|
98
107
|
if (item.currentDepth < depth) {
|
|
99
108
|
for (const link of pageDescriptor.links) {
|
|
100
|
-
if (link.isNavigation &&
|
|
109
|
+
if (link.isNavigation &&
|
|
110
|
+
isSameOrigin(link.href, baseOrigin) &&
|
|
111
|
+
!visited.has(normalizeUrl(link.href))) {
|
|
101
112
|
queue.push({ url: link.href, currentDepth: item.currentDepth + 1 });
|
|
102
113
|
}
|
|
103
114
|
}
|
|
@@ -141,6 +152,18 @@ export async function crawlSite(options) {
|
|
|
141
152
|
// ─── HAR Capture (for hybrid mode) ─────────────────────────────────
|
|
142
153
|
const MAX_RESPONSE_BODY_BYTES = 5 * 1024 * 1024;
|
|
143
154
|
const SKIP_BODY_MIME_TYPES = ['image/', 'video/', 'audio/', 'font/', 'application/octet-stream'];
|
|
155
|
+
// Large-by-nature Playwright resource types; skip body capture at the header
|
|
156
|
+
// level instead of buffering the whole response and discarding it afterwards.
|
|
157
|
+
const SKIP_BODY_RESOURCE_TYPES = new Set([
|
|
158
|
+
'image',
|
|
159
|
+
'media',
|
|
160
|
+
'font',
|
|
161
|
+
'stylesheet',
|
|
162
|
+
'websocket',
|
|
163
|
+
'eventsource',
|
|
164
|
+
'manifest',
|
|
165
|
+
'texttrack',
|
|
166
|
+
]);
|
|
144
167
|
async function buildCrawlHarEntry(request, response, startTime) {
|
|
145
168
|
const elapsed = Date.now() - startTime;
|
|
146
169
|
const url = request.url();
|
|
@@ -159,11 +182,20 @@ async function buildCrawlHarEntry(request, response, startTime) {
|
|
|
159
182
|
name,
|
|
160
183
|
value,
|
|
161
184
|
}));
|
|
185
|
+
// Enforce the body cap at the header/resource-type level: once
|
|
186
|
+
// `response.body()` resolves, Playwright has already buffered the whole
|
|
187
|
+
// response, so a post-hoc length check can't protect memory against a
|
|
188
|
+
// missing or dishonest Content-Length. Skip large-by-type resources and
|
|
189
|
+
// over-cap declared lengths up front; the post-read check is only a backstop.
|
|
162
190
|
let responseText;
|
|
163
191
|
const responseMimeType = response.headers()['content-type'] ?? '';
|
|
164
|
-
const skipBody = SKIP_BODY_MIME_TYPES.some((m) => responseMimeType.startsWith(m))
|
|
165
|
-
|
|
166
|
-
|
|
192
|
+
const skipBody = SKIP_BODY_MIME_TYPES.some((m) => responseMimeType.startsWith(m)) ||
|
|
193
|
+
SKIP_BODY_RESOURCE_TYPES.has(request.resourceType());
|
|
194
|
+
const rawContentLength = response.headers()['content-length'];
|
|
195
|
+
const parsedLength = rawContentLength === undefined ? NaN : parseInt(rawContentLength, 10);
|
|
196
|
+
const lengthKnown = Number.isFinite(parsedLength) && parsedLength >= 0;
|
|
197
|
+
const tooLargeByHeader = lengthKnown && parsedLength > MAX_RESPONSE_BODY_BYTES;
|
|
198
|
+
if (!skipBody && !tooLargeByHeader) {
|
|
167
199
|
try {
|
|
168
200
|
const body = await response.body();
|
|
169
201
|
if (body.length <= MAX_RESPONSE_BODY_BYTES) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-crawler.js","sourceRoot":"","sources":["../../src/analyzer/site-crawler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"site-crawler.js","sourceRoot":"","sources":["../../src/analyzer/site-crawler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;AAkBhF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAsCD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkIhG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAyGf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AA8DD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
package/dist/emitter/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { writeCodeUnits } from './code-writer.js';
|
|
2
|
-
import { scaffoldProjectFiles, scaffoldSharedModules } from './project-scaffolder.js';
|
|
2
|
+
import { scaffoldProjectFiles, scaffoldSharedModules, escapeDotenvValue, } from './project-scaffolder.js';
|
|
3
3
|
import { scaffoldSiteProjectFiles, scaffoldSiteSharedModules } from './site-scaffolder.js';
|
|
4
4
|
import { renderTemplate } from './template-loader.js';
|
|
5
5
|
import { renderSiteTemplate } from './site-template-loader.js';
|
|
@@ -7,7 +7,26 @@ import { renderPythonTemplate } from './python-template-loader.js';
|
|
|
7
7
|
import { renderWorkerTemplate } from './worker-template-loader.js';
|
|
8
8
|
import { buildCatalog } from '../transformer/catalog-builder.js';
|
|
9
9
|
import { logger } from '../utils/logger.js';
|
|
10
|
+
import { sanitizeUrlLiteral, sanitizePyIdentifier } from '../utils/sanitize.js';
|
|
10
11
|
const SAFE_VERSION_RE = /^[0-9a-zA-Z._+-]{1,50}$/;
|
|
12
|
+
/**
|
|
13
|
+
* Whether any configured auth scheme sends the API key as a query parameter.
|
|
14
|
+
* Query-string API-key auth cannot be applied as a header, so the generated
|
|
15
|
+
* tool handler appends it during URL construction instead (D-H2). Used to gate
|
|
16
|
+
* the `apiKeyQueryName` config field and the handler's append logic so projects
|
|
17
|
+
* without query auth are byte-for-byte unchanged.
|
|
18
|
+
*/
|
|
19
|
+
function hasQueryApiKey(manifest) {
|
|
20
|
+
return manifest.authSchemes.some((s) => s.type === 'apiKey' && s.in === 'query');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Per-tool render data for the handler templates. Carries the manifest-level
|
|
24
|
+
* `hasQueryApiKey` flag onto each tool so the template can emit the query
|
|
25
|
+
* API-key append without needing access to the whole manifest.
|
|
26
|
+
*/
|
|
27
|
+
function toToolHandlerView(tool, manifest) {
|
|
28
|
+
return { ...tool, hasQueryApiKey: hasQueryApiKey(manifest) };
|
|
29
|
+
}
|
|
11
30
|
/**
|
|
12
31
|
* Serialize named environments for the generated `.env.example` / `.dev.vars`
|
|
13
32
|
* seed (the `MCP_ENVIRONMENTS` JSON map). Returns undefined when none are set,
|
|
@@ -26,6 +45,10 @@ export async function emitProject(manifest, options) {
|
|
|
26
45
|
if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
|
|
27
46
|
throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
|
|
28
47
|
}
|
|
48
|
+
// baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
|
|
49
|
+
// Sanitize once here so a malicious spec/flag value cannot break out of any of
|
|
50
|
+
// them (lossless for real URLs).
|
|
51
|
+
manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
|
|
29
52
|
if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
|
|
30
53
|
logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
|
|
31
54
|
manifest = { ...manifest, serverVersion: '0.0.0' };
|
|
@@ -77,7 +100,7 @@ export async function emitProject(manifest, options) {
|
|
|
77
100
|
for (const tool of staticTools) {
|
|
78
101
|
units.push({
|
|
79
102
|
filePath: `src/tools/${tool.fileName}.ts`,
|
|
80
|
-
content: renderTemplate('tool-handler.ts', tool),
|
|
103
|
+
content: renderTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
|
|
81
104
|
});
|
|
82
105
|
}
|
|
83
106
|
units.push({
|
|
@@ -93,7 +116,7 @@ export async function emitProject(manifest, options) {
|
|
|
93
116
|
for (const tool of manifest.tools) {
|
|
94
117
|
units.push({
|
|
95
118
|
filePath: `src/tools/${tool.fileName}.ts`,
|
|
96
|
-
content: renderTemplate('tool-handler.ts', tool),
|
|
119
|
+
content: renderTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
|
|
97
120
|
});
|
|
98
121
|
}
|
|
99
122
|
units.push({
|
|
@@ -142,6 +165,10 @@ export async function emitWorkerProject(manifest, options) {
|
|
|
142
165
|
if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
|
|
143
166
|
throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
|
|
144
167
|
}
|
|
168
|
+
// baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
|
|
169
|
+
// Sanitize once here so a malicious spec/flag value cannot break out of any of
|
|
170
|
+
// them (lossless for real URLs).
|
|
171
|
+
manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
|
|
145
172
|
if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
|
|
146
173
|
logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
|
|
147
174
|
manifest = { ...manifest, serverVersion: '0.0.0' };
|
|
@@ -182,7 +209,19 @@ export async function emitWorkerProject(manifest, options) {
|
|
|
182
209
|
{ filePath: 'README.md', content: renderWorkerTemplate('readme.md', templateData) },
|
|
183
210
|
{
|
|
184
211
|
filePath: '.dev.vars.example',
|
|
185
|
-
|
|
212
|
+
// Escape the dotenv VALUES (baseUrl, defaultEnvironment) at this emit
|
|
213
|
+
// boundary so a value with a CR/LF or `#` cannot inject an extra
|
|
214
|
+
// KEY=value line into the operator's `.dev.vars` (D-M3). Env NAMES are
|
|
215
|
+
// already validated upstream in the Stainless translator. The wider
|
|
216
|
+
// templateData keeps the raw (url-literal-sanitized) baseUrl for the
|
|
217
|
+
// non-dotenv sinks (wrangler.toml, config.ts).
|
|
218
|
+
content: renderWorkerTemplate('dev-vars.example', {
|
|
219
|
+
...templateData,
|
|
220
|
+
baseUrl: escapeDotenvValue(manifest.baseUrl),
|
|
221
|
+
defaultEnvironment: manifest.defaultEnvironment
|
|
222
|
+
? escapeDotenvValue(manifest.defaultEnvironment)
|
|
223
|
+
: manifest.defaultEnvironment,
|
|
224
|
+
}),
|
|
186
225
|
},
|
|
187
226
|
{ filePath: '.gitignore', content: renderWorkerTemplate('gitignore', templateData) },
|
|
188
227
|
// Runtime-agnostic modules reused from the Node templates (fetch / Buffer /
|
|
@@ -198,7 +237,7 @@ export async function emitWorkerProject(manifest, options) {
|
|
|
198
237
|
for (const tool of manifest.tools) {
|
|
199
238
|
units.push({
|
|
200
239
|
filePath: `src/tools/${tool.fileName}.ts`,
|
|
201
|
-
content: renderWorkerTemplate('tool-handler.ts', tool),
|
|
240
|
+
content: renderWorkerTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
|
|
202
241
|
});
|
|
203
242
|
}
|
|
204
243
|
units.push({
|
|
@@ -220,6 +259,10 @@ export async function emitSiteProject(manifest, options) {
|
|
|
220
259
|
if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
|
|
221
260
|
throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
|
|
222
261
|
}
|
|
262
|
+
// baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
|
|
263
|
+
// Sanitize once here so a malicious spec/flag value cannot break out of any of
|
|
264
|
+
// them (lossless for real URLs).
|
|
265
|
+
manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
|
|
223
266
|
if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
|
|
224
267
|
logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
|
|
225
268
|
manifest = { ...manifest, serverVersion: '0.0.0' };
|
|
@@ -259,6 +302,52 @@ function getSiteToolTemplate(tool) {
|
|
|
259
302
|
return 'tool-handler-action.ts';
|
|
260
303
|
}
|
|
261
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* Build a Python-safe view of a tool. Path/query param names become valid,
|
|
307
|
+
* de-duplicated Python identifiers (used as function args and locals), while the
|
|
308
|
+
* original API name is preserved for the URL path token and query-string key.
|
|
309
|
+
* This lets server.py.hbs build the URL with plain `str.replace()` instead of an
|
|
310
|
+
* f-string, removing the brace-expression evaluation / breakout vectors.
|
|
311
|
+
*/
|
|
312
|
+
function toPythonToolView(tool) {
|
|
313
|
+
const used = new Set();
|
|
314
|
+
const uniquePyName = (apiName) => {
|
|
315
|
+
let base = sanitizePyIdentifier(apiName);
|
|
316
|
+
let candidate = base;
|
|
317
|
+
let i = 1;
|
|
318
|
+
while (used.has(candidate))
|
|
319
|
+
candidate = `${base}_${i++}`;
|
|
320
|
+
used.add(candidate);
|
|
321
|
+
return candidate;
|
|
322
|
+
};
|
|
323
|
+
const pyPathParams = tool.pathParams.map((apiName) => ({
|
|
324
|
+
apiName,
|
|
325
|
+
pyName: uniquePyName(apiName),
|
|
326
|
+
brace: `{${apiName}}`,
|
|
327
|
+
}));
|
|
328
|
+
const pyQueryParams = tool.queryParams.map((apiName) => ({
|
|
329
|
+
apiName,
|
|
330
|
+
pyName: uniquePyName(apiName),
|
|
331
|
+
}));
|
|
332
|
+
// Header/cookie request params (D-H2). Driven off paramMappings so the
|
|
333
|
+
// function arg uses a sanitized, de-duplicated Python identifier while the
|
|
334
|
+
// upstream request still uses the original wire name. De-duplicated by wire
|
|
335
|
+
// name so a header/cookie repeated across mappings cannot emit two args.
|
|
336
|
+
const dedupeByWire = (kind) => {
|
|
337
|
+
const seen = new Set();
|
|
338
|
+
const out = [];
|
|
339
|
+
for (const m of tool.paramMappings) {
|
|
340
|
+
if (m.in !== kind || seen.has(m.wireName))
|
|
341
|
+
continue;
|
|
342
|
+
seen.add(m.wireName);
|
|
343
|
+
out.push({ wireName: m.wireName, pyName: uniquePyName(m.wireName) });
|
|
344
|
+
}
|
|
345
|
+
return out;
|
|
346
|
+
};
|
|
347
|
+
const pyHeaderParams = dedupeByWire('header');
|
|
348
|
+
const pyCookieParams = dedupeByWire('cookie');
|
|
349
|
+
return { ...tool, pyPathParams, pyQueryParams, pyHeaderParams, pyCookieParams };
|
|
350
|
+
}
|
|
262
351
|
/**
|
|
263
352
|
* Emit a Python MCP server project.
|
|
264
353
|
* Generates a single server.py file with all tools, plus requirements.txt.
|
|
@@ -267,11 +356,18 @@ export async function emitPythonProject(manifest, options) {
|
|
|
267
356
|
if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
|
|
268
357
|
throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
|
|
269
358
|
}
|
|
359
|
+
// baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
|
|
360
|
+
// Sanitize once here so a malicious spec/flag value cannot break out of any of
|
|
361
|
+
// them (lossless for real URLs).
|
|
362
|
+
manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
|
|
270
363
|
const units = [];
|
|
271
364
|
const templateData = {
|
|
272
365
|
...manifest,
|
|
366
|
+
tools: manifest.tools.map(toPythonToolView),
|
|
273
367
|
authEnvVars: manifest.envVars.filter((v) => v.name !== 'BASE_URL'),
|
|
274
368
|
environmentsJson: environmentsJson(manifest),
|
|
369
|
+
// Gate the apiKey-in-query merge so projects without query auth are unchanged.
|
|
370
|
+
hasQueryApiKey: hasQueryApiKey(manifest),
|
|
275
371
|
};
|
|
276
372
|
units.push({
|
|
277
373
|
filePath: 'server.py',
|
|
@@ -283,7 +379,18 @@ export async function emitPythonProject(manifest, options) {
|
|
|
283
379
|
});
|
|
284
380
|
units.push({
|
|
285
381
|
filePath: '.env.example',
|
|
286
|
-
|
|
382
|
+
// Escape the dotenv VALUES (baseUrl, defaultEnvironment) at this emit
|
|
383
|
+
// boundary so a value with a CR/LF or `#` cannot inject an extra KEY=value
|
|
384
|
+
// line into the operator's `.env` (D-M3). Env NAMES are already validated
|
|
385
|
+
// upstream. The wider templateData keeps the raw (url-literal-sanitized)
|
|
386
|
+
// baseUrl for the Python string-literal sink in server.py.
|
|
387
|
+
content: renderPythonTemplate('env.example', {
|
|
388
|
+
...templateData,
|
|
389
|
+
baseUrl: escapeDotenvValue(manifest.baseUrl),
|
|
390
|
+
defaultEnvironment: manifest.defaultEnvironment
|
|
391
|
+
? escapeDotenvValue(manifest.defaultEnvironment)
|
|
392
|
+
: manifest.defaultEnvironment,
|
|
393
|
+
}),
|
|
287
394
|
});
|
|
288
395
|
if (manifest.transport === 'http') {
|
|
289
396
|
units.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { ProjectManifest } from '../types/index.js';
|
|
2
2
|
import type { CodeUnit } from './code-writer.js';
|
|
3
|
+
/**
|
|
4
|
+
* Escape an arbitrary string for use as a single-line dotenv value in the
|
|
5
|
+
* generated `.env.example` (the file users are told to copy to `.env`).
|
|
6
|
+
*
|
|
7
|
+
* Untrusted values (e.g. a Stainless `defaultEnvironment` name, a base URL) are
|
|
8
|
+
* interpolated raw by Handlebars (`noEscape: true`), so a value containing a
|
|
9
|
+
* newline or `#` could inject extra `KEY=value` lines or a comment — config
|
|
10
|
+
* injection into the operator's `.env`. We collapse all line breaks to a single
|
|
11
|
+
* space and wrap the value in double quotes (dotenv treats a quoted value as a
|
|
12
|
+
* single token) whenever it contains a character that would otherwise change how
|
|
13
|
+
* dotenv parses the line. Lossless for benign values (those are returned as-is).
|
|
14
|
+
*/
|
|
15
|
+
export declare function escapeDotenvValue(raw: string): string;
|
|
3
16
|
export declare function scaffoldProjectFiles(manifest: ProjectManifest): CodeUnit[];
|
|
4
17
|
export declare function scaffoldSharedModules(manifest: ProjectManifest): CodeUnit[];
|
|
5
18
|
//# sourceMappingURL=project-scaffolder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"project-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAuD1E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAmD3E"}
|
|
@@ -4,6 +4,28 @@ import { renderTemplate } from './template-loader.js';
|
|
|
4
4
|
* problem; the README recommends `--dynamic-discovery` (the #1 buyer concern).
|
|
5
5
|
*/
|
|
6
6
|
const DISCOVERY_RECOMMEND_THRESHOLD = 50;
|
|
7
|
+
/**
|
|
8
|
+
* Escape an arbitrary string for use as a single-line dotenv value in the
|
|
9
|
+
* generated `.env.example` (the file users are told to copy to `.env`).
|
|
10
|
+
*
|
|
11
|
+
* Untrusted values (e.g. a Stainless `defaultEnvironment` name, a base URL) are
|
|
12
|
+
* interpolated raw by Handlebars (`noEscape: true`), so a value containing a
|
|
13
|
+
* newline or `#` could inject extra `KEY=value` lines or a comment — config
|
|
14
|
+
* injection into the operator's `.env`. We collapse all line breaks to a single
|
|
15
|
+
* space and wrap the value in double quotes (dotenv treats a quoted value as a
|
|
16
|
+
* single token) whenever it contains a character that would otherwise change how
|
|
17
|
+
* dotenv parses the line. Lossless for benign values (those are returned as-is).
|
|
18
|
+
*/
|
|
19
|
+
export function escapeDotenvValue(raw) {
|
|
20
|
+
// Neutralize any CR/LF — these are what break out into new dotenv lines.
|
|
21
|
+
const oneLine = raw.replace(/[\r\n]+/g, ' ');
|
|
22
|
+
// A bare value is safe only when it has no characters dotenv treats specially
|
|
23
|
+
// at the start/inside an unquoted value (#, quotes, backslash, surrounding ws).
|
|
24
|
+
const needsQuoting = /[#"'\\]/.test(oneLine) || /^\s|\s$/.test(oneLine) || oneLine !== raw;
|
|
25
|
+
if (!needsQuoting)
|
|
26
|
+
return oneLine;
|
|
27
|
+
return `"${oneLine.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
28
|
+
}
|
|
7
29
|
export function scaffoldProjectFiles(manifest) {
|
|
8
30
|
const dynamicDiscovery = manifest.dynamicDiscovery ?? false;
|
|
9
31
|
const units = [
|
|
@@ -19,9 +41,16 @@ export function scaffoldProjectFiles(manifest) {
|
|
|
19
41
|
filePath: '.env.example',
|
|
20
42
|
content: renderTemplate('env.example', {
|
|
21
43
|
...manifest,
|
|
44
|
+
// Serialize every untrusted scalar through the dotenv escaper at this
|
|
45
|
+
// emit boundary so a value with a newline/`#` cannot inject extra lines.
|
|
46
|
+
baseUrl: escapeDotenvValue(manifest.baseUrl),
|
|
47
|
+
defaultEnvironment: manifest.defaultEnvironment
|
|
48
|
+
? escapeDotenvValue(manifest.defaultEnvironment)
|
|
49
|
+
: manifest.defaultEnvironment,
|
|
22
50
|
authEnvVars: manifest.envVars.filter((v) => v.name !== 'BASE_URL'),
|
|
23
51
|
// Pre-seed MCP_ENVIRONMENTS when an importer carried over named
|
|
24
52
|
// environments (e.g. Stainless `environments:`); omitted otherwise.
|
|
53
|
+
// JSON.stringify already escapes the keys/values into a single token.
|
|
25
54
|
environmentsJson: manifest.environments && Object.keys(manifest.environments).length > 0
|
|
26
55
|
? JSON.stringify(manifest.environments)
|
|
27
56
|
: undefined,
|