@mcpmake/core 0.2.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/analyzer/auth-detector.d.ts +13 -0
- package/dist/analyzer/auth-detector.d.ts.map +1 -0
- package/dist/analyzer/auth-detector.js +143 -0
- package/dist/analyzer/auth-detector.js.map +1 -0
- package/dist/analyzer/dom-parser.d.ts +11 -0
- package/dist/analyzer/dom-parser.d.ts.map +1 -0
- package/dist/analyzer/dom-parser.js +260 -0
- package/dist/analyzer/dom-parser.js.map +1 -0
- package/dist/analyzer/goal-crawler.d.ts +26 -0
- package/dist/analyzer/goal-crawler.d.ts.map +1 -0
- package/dist/analyzer/goal-crawler.js +178 -0
- package/dist/analyzer/goal-crawler.js.map +1 -0
- package/dist/analyzer/hybrid-detector.d.ts +29 -0
- package/dist/analyzer/hybrid-detector.d.ts.map +1 -0
- package/dist/analyzer/hybrid-detector.js +97 -0
- package/dist/analyzer/hybrid-detector.js.map +1 -0
- package/dist/analyzer/index.d.ts +13 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +9 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/analyzer/screenshot-capture.d.ts +30 -0
- package/dist/analyzer/screenshot-capture.d.ts.map +1 -0
- package/dist/analyzer/screenshot-capture.js +43 -0
- package/dist/analyzer/screenshot-capture.js.map +1 -0
- package/dist/analyzer/selector-builder.d.ts +20 -0
- package/dist/analyzer/selector-builder.d.ts.map +1 -0
- package/dist/analyzer/selector-builder.js +200 -0
- package/dist/analyzer/selector-builder.js.map +1 -0
- package/dist/analyzer/semantic-analyzer.d.ts +14 -0
- package/dist/analyzer/semantic-analyzer.d.ts.map +1 -0
- package/dist/analyzer/semantic-analyzer.js +146 -0
- package/dist/analyzer/semantic-analyzer.js.map +1 -0
- package/dist/analyzer/site-crawler.d.ts +39 -0
- package/dist/analyzer/site-crawler.d.ts.map +1 -0
- package/dist/analyzer/site-crawler.js +236 -0
- package/dist/analyzer/site-crawler.js.map +1 -0
- package/dist/config/configurable-command.d.ts +14 -0
- package/dist/config/configurable-command.d.ts.map +1 -0
- package/dist/config/configurable-command.js +71 -0
- package/dist/config/configurable-command.js.map +1 -0
- package/dist/config/mcpmake-config.d.ts +69 -0
- package/dist/config/mcpmake-config.d.ts.map +1 -0
- package/dist/config/mcpmake-config.js +209 -0
- package/dist/config/mcpmake-config.js.map +1 -0
- package/dist/emitter/code-writer.d.ts +9 -0
- package/dist/emitter/code-writer.d.ts.map +1 -0
- package/dist/emitter/code-writer.js +26 -0
- package/dist/emitter/code-writer.js.map +1 -0
- package/dist/emitter/index.d.ts +33 -0
- package/dist/emitter/index.d.ts.map +1 -0
- package/dist/emitter/index.js +297 -0
- package/dist/emitter/index.js.map +1 -0
- package/dist/emitter/mcpb-bundler.d.ts +32 -0
- package/dist/emitter/mcpb-bundler.d.ts.map +1 -0
- package/dist/emitter/mcpb-bundler.js +173 -0
- package/dist/emitter/mcpb-bundler.js.map +1 -0
- package/dist/emitter/project-scaffolder.d.ts +5 -0
- package/dist/emitter/project-scaffolder.d.ts.map +1 -0
- package/dist/emitter/project-scaffolder.js +101 -0
- package/dist/emitter/project-scaffolder.js.map +1 -0
- package/dist/emitter/python-template-loader.d.ts +5 -0
- package/dist/emitter/python-template-loader.d.ts.map +1 -0
- package/dist/emitter/python-template-loader.js +31 -0
- package/dist/emitter/python-template-loader.js.map +1 -0
- package/dist/emitter/python-templates/dockerfile.hbs +14 -0
- package/dist/emitter/python-templates/env.example.hbs +12 -0
- package/dist/emitter/python-templates/requirements.txt.hbs +4 -0
- package/dist/emitter/python-templates/server.py.hbs +93 -0
- package/dist/emitter/site-scaffolder.d.ts +14 -0
- package/dist/emitter/site-scaffolder.d.ts.map +1 -0
- package/dist/emitter/site-scaffolder.js +71 -0
- package/dist/emitter/site-scaffolder.js.map +1 -0
- package/dist/emitter/site-template-loader.d.ts +6 -0
- package/dist/emitter/site-template-loader.d.ts.map +1 -0
- package/dist/emitter/site-template-loader.js +48 -0
- package/dist/emitter/site-template-loader.js.map +1 -0
- package/dist/emitter/site-templates/browser-manager.ts.hbs +233 -0
- package/dist/emitter/site-templates/config.ts.hbs +28 -0
- package/dist/emitter/site-templates/dockerfile.hbs +31 -0
- package/dist/emitter/site-templates/env.example.hbs +19 -0
- package/dist/emitter/site-templates/package.json.hbs +26 -0
- package/dist/emitter/site-templates/server-main-http.ts.hbs +108 -0
- package/dist/emitter/site-templates/server-main.ts.hbs +23 -0
- package/dist/emitter/site-templates/tool-handler-action.ts.hbs +86 -0
- package/dist/emitter/site-templates/tool-handler-form.ts.hbs +116 -0
- package/dist/emitter/site-templates/tool-handler-lifecycle.ts.hbs +146 -0
- package/dist/emitter/site-templates/tool-index.ts.hbs +11 -0
- package/dist/emitter/template-loader.d.ts +2 -0
- package/dist/emitter/template-loader.d.ts.map +1 -0
- package/dist/emitter/template-loader.js +28 -0
- package/dist/emitter/template-loader.js.map +1 -0
- package/dist/emitter/templates/auth-provider.ts.hbs +57 -0
- package/dist/emitter/templates/config.ts.hbs +110 -0
- package/dist/emitter/templates/discovery.ts.hbs +320 -0
- package/dist/emitter/templates/dockerfile.hbs +34 -0
- package/dist/emitter/templates/env.example.hbs +52 -0
- package/dist/emitter/templates/gitignore.hbs +5 -0
- package/dist/emitter/templates/http-executor.ts.hbs +159 -0
- package/dist/emitter/templates/oauth.ts.hbs +188 -0
- package/dist/emitter/templates/package.json.hbs +25 -0
- package/dist/emitter/templates/prompts.ts.hbs +22 -0
- package/dist/emitter/templates/readme.md.hbs +156 -0
- package/dist/emitter/templates/resources.ts.hbs +63 -0
- package/dist/emitter/templates/response-filter.ts.hbs +128 -0
- package/dist/emitter/templates/server-main-http.ts.hbs +442 -0
- package/dist/emitter/templates/server-main.ts.hbs +40 -0
- package/dist/emitter/templates/task-handlers.ts.hbs +189 -0
- package/dist/emitter/templates/task-manager.ts.hbs +139 -0
- package/dist/emitter/templates/task-sse.ts.hbs +105 -0
- package/dist/emitter/templates/tool-handler.ts.hbs +142 -0
- package/dist/emitter/templates/tool-index.ts.hbs +42 -0
- package/dist/emitter/templates/tool-test.ts.hbs +57 -0
- package/dist/emitter/templates/trace.ts.hbs +79 -0
- package/dist/emitter/templates/tsconfig.json.hbs +16 -0
- package/dist/emitter/templates/types.ts.hbs +5 -0
- package/dist/emitter/worker-template-loader.d.ts +6 -0
- package/dist/emitter/worker-template-loader.d.ts.map +1 -0
- package/dist/emitter/worker-template-loader.js +34 -0
- package/dist/emitter/worker-template-loader.js.map +1 -0
- package/dist/emitter/worker-templates/config.ts.hbs +93 -0
- package/dist/emitter/worker-templates/dev-vars.example.hbs +27 -0
- package/dist/emitter/worker-templates/gitignore.hbs +6 -0
- package/dist/emitter/worker-templates/package.json.hbs +24 -0
- package/dist/emitter/worker-templates/readme.md.hbs +73 -0
- package/dist/emitter/worker-templates/server.test.ts.hbs +20 -0
- package/dist/emitter/worker-templates/tool-handler.ts.hbs +103 -0
- package/dist/emitter/worker-templates/tool-index.ts.hbs +28 -0
- package/dist/emitter/worker-templates/tsconfig.json.hbs +17 -0
- package/dist/emitter/worker-templates/worker.ts.hbs +286 -0
- package/dist/emitter/worker-templates/wrangler.toml.hbs +19 -0
- package/dist/generator/spec-generator.d.ts +7 -0
- package/dist/generator/spec-generator.d.ts.map +1 -0
- package/dist/generator/spec-generator.js +51 -0
- package/dist/generator/spec-generator.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/har-filter.d.ts +9 -0
- package/dist/parser/har-filter.d.ts.map +1 -0
- package/dist/parser/har-filter.js +72 -0
- package/dist/parser/har-filter.js.map +1 -0
- package/dist/parser/har-loader.d.ts +3 -0
- package/dist/parser/har-loader.d.ts.map +1 -0
- package/dist/parser/har-loader.js +15 -0
- package/dist/parser/har-loader.js.map +1 -0
- package/dist/parser/har-normalizer.d.ts +21 -0
- package/dist/parser/har-normalizer.d.ts.map +1 -0
- package/dist/parser/har-normalizer.js +79 -0
- package/dist/parser/har-normalizer.js.map +1 -0
- package/dist/parser/index.d.ts +11 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +7 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/openapi-loader.d.ts +7 -0
- package/dist/parser/openapi-loader.d.ts.map +1 -0
- package/dist/parser/openapi-loader.js +309 -0
- package/dist/parser/openapi-loader.js.map +1 -0
- package/dist/parser/operation-extractor.d.ts +14 -0
- package/dist/parser/operation-extractor.d.ts.map +1 -0
- package/dist/parser/operation-extractor.js +156 -0
- package/dist/parser/operation-extractor.js.map +1 -0
- package/dist/parser/overlay-loader.d.ts +11 -0
- package/dist/parser/overlay-loader.d.ts.map +1 -0
- package/dist/parser/overlay-loader.js +185 -0
- package/dist/parser/overlay-loader.js.map +1 -0
- package/dist/parser/postman-loader.d.ts +10 -0
- package/dist/parser/postman-loader.d.ts.map +1 -0
- package/dist/parser/postman-loader.js +107 -0
- package/dist/parser/postman-loader.js.map +1 -0
- package/dist/parser/schema-converter.d.ts +13 -0
- package/dist/parser/schema-converter.d.ts.map +1 -0
- package/dist/parser/schema-converter.js +118 -0
- package/dist/parser/schema-converter.js.map +1 -0
- package/dist/plugins/adapter.d.ts +41 -0
- package/dist/plugins/adapter.d.ts.map +1 -0
- package/dist/plugins/adapter.js +16 -0
- package/dist/plugins/adapter.js.map +1 -0
- package/dist/plugins/loader.d.ts +26 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +59 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/pricing.d.ts +56 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +134 -0
- package/dist/pricing.js.map +1 -0
- package/dist/providers/index.d.ts +16 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +57 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/recorder/browser-recorder.d.ts +23 -0
- package/dist/recorder/browser-recorder.d.ts.map +1 -0
- package/dist/recorder/browser-recorder.js +206 -0
- package/dist/recorder/browser-recorder.js.map +1 -0
- package/dist/rescan/diff-engine.d.ts +6 -0
- package/dist/rescan/diff-engine.d.ts.map +1 -0
- package/dist/rescan/diff-engine.js +313 -0
- package/dist/rescan/diff-engine.js.map +1 -0
- package/dist/rescan/index.d.ts +4 -0
- package/dist/rescan/index.d.ts.map +1 -0
- package/dist/rescan/index.js +3 -0
- package/dist/rescan/index.js.map +1 -0
- package/dist/rescan/rescan-runner.d.ts +43 -0
- package/dist/rescan/rescan-runner.d.ts.map +1 -0
- package/dist/rescan/rescan-runner.js +70 -0
- package/dist/rescan/rescan-runner.js.map +1 -0
- package/dist/rescan/rescan-scheduler.d.ts +42 -0
- package/dist/rescan/rescan-scheduler.d.ts.map +1 -0
- package/dist/rescan/rescan-scheduler.js +180 -0
- package/dist/rescan/rescan-scheduler.js.map +1 -0
- package/dist/site-transformer/browser-tools.d.ts +11 -0
- package/dist/site-transformer/browser-tools.d.ts.map +1 -0
- package/dist/site-transformer/browser-tools.js +60 -0
- package/dist/site-transformer/browser-tools.js.map +1 -0
- package/dist/site-transformer/index.d.ts +3 -0
- package/dist/site-transformer/index.d.ts.map +1 -0
- package/dist/site-transformer/index.js +3 -0
- package/dist/site-transformer/index.js.map +1 -0
- package/dist/site-transformer/selector-healer.d.ts +9 -0
- package/dist/site-transformer/selector-healer.d.ts.map +1 -0
- package/dist/site-transformer/selector-healer.js +107 -0
- package/dist/site-transformer/selector-healer.js.map +1 -0
- package/dist/site-transformer/tool-generator.d.ts +14 -0
- package/dist/site-transformer/tool-generator.d.ts.map +1 -0
- package/dist/site-transformer/tool-generator.js +246 -0
- package/dist/site-transformer/tool-generator.js.map +1 -0
- package/dist/transformer/auth-detector.d.ts +29 -0
- package/dist/transformer/auth-detector.d.ts.map +1 -0
- package/dist/transformer/auth-detector.js +104 -0
- package/dist/transformer/auth-detector.js.map +1 -0
- package/dist/transformer/catalog-builder.d.ts +19 -0
- package/dist/transformer/catalog-builder.d.ts.map +1 -0
- package/dist/transformer/catalog-builder.js +57 -0
- package/dist/transformer/catalog-builder.js.map +1 -0
- package/dist/transformer/client-compat.d.ts +7 -0
- package/dist/transformer/client-compat.d.ts.map +1 -0
- package/dist/transformer/client-compat.js +45 -0
- package/dist/transformer/client-compat.js.map +1 -0
- package/dist/transformer/har-clusterer.d.ts +10 -0
- package/dist/transformer/har-clusterer.d.ts.map +1 -0
- package/dist/transformer/har-clusterer.js +28 -0
- package/dist/transformer/har-clusterer.js.map +1 -0
- package/dist/transformer/har-dedup.d.ts +11 -0
- package/dist/transformer/har-dedup.d.ts.map +1 -0
- package/dist/transformer/har-dedup.js +82 -0
- package/dist/transformer/har-dedup.js.map +1 -0
- package/dist/transformer/har-schema-inferrer.d.ts +16 -0
- package/dist/transformer/har-schema-inferrer.d.ts.map +1 -0
- package/dist/transformer/har-schema-inferrer.js +91 -0
- package/dist/transformer/har-schema-inferrer.js.map +1 -0
- package/dist/transformer/har-to-operations.d.ts +14 -0
- package/dist/transformer/har-to-operations.d.ts.map +1 -0
- package/dist/transformer/har-to-operations.js +193 -0
- package/dist/transformer/har-to-operations.js.map +1 -0
- package/dist/transformer/index.d.ts +9 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +7 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/llm-namer.d.ts +7 -0
- package/dist/transformer/llm-namer.d.ts.map +1 -0
- package/dist/transformer/llm-namer.js +60 -0
- package/dist/transformer/llm-namer.js.map +1 -0
- package/dist/transformer/naming.d.ts +5 -0
- package/dist/transformer/naming.d.ts.map +1 -0
- package/dist/transformer/naming.js +31 -0
- package/dist/transformer/naming.js.map +1 -0
- package/dist/transformer/operation-filter.d.ts +14 -0
- package/dist/transformer/operation-filter.d.ts.map +1 -0
- package/dist/transformer/operation-filter.js +53 -0
- package/dist/transformer/operation-filter.js.map +1 -0
- package/dist/transformer/resource-builder.d.ts +13 -0
- package/dist/transformer/resource-builder.d.ts.map +1 -0
- package/dist/transformer/resource-builder.js +87 -0
- package/dist/transformer/resource-builder.js.map +1 -0
- package/dist/transformer/schema-merger.d.ts +15 -0
- package/dist/transformer/schema-merger.d.ts.map +1 -0
- package/dist/transformer/schema-merger.js +66 -0
- package/dist/transformer/schema-merger.js.map +1 -0
- package/dist/transformer/stainless-config.d.ts +75 -0
- package/dist/transformer/stainless-config.d.ts.map +1 -0
- package/dist/transformer/stainless-config.js +59 -0
- package/dist/transformer/stainless-config.js.map +1 -0
- package/dist/transformer/stainless-translator.d.ts +61 -0
- package/dist/transformer/stainless-translator.d.ts.map +1 -0
- package/dist/transformer/stainless-translator.js +375 -0
- package/dist/transformer/stainless-translator.js.map +1 -0
- package/dist/transformer/tool-builder.d.ts +4 -0
- package/dist/transformer/tool-builder.d.ts.map +1 -0
- package/dist/transformer/tool-builder.js +119 -0
- package/dist/transformer/tool-builder.js.map +1 -0
- package/dist/types/index.d.ts +140 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/site.d.ts +285 -0
- package/dist/types/site.d.ts.map +1 -0
- package/dist/types/site.js +9 -0
- package/dist/types/site.js.map +1 -0
- package/dist/utils/fail.d.ts +49 -0
- package/dist/utils/fail.d.ts.map +1 -0
- package/dist/utils/fail.js +223 -0
- package/dist/utils/fail.js.map +1 -0
- package/dist/utils/fs.d.ts +6 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +29 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/interactive.d.ts +7 -0
- package/dist/utils/interactive.d.ts.map +1 -0
- package/dist/utils/interactive.js +31 -0
- package/dist/utils/interactive.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +3 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sanitize.d.ts +29 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +45 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/watcher.d.ts +12 -0
- package/dist/utils/watcher.d.ts.map +1 -0
- package/dist/utils/watcher.js +37 -0
- package/dist/utils/watcher.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name = "{{serverName}}"
|
|
2
|
+
main = "src/index.ts"
|
|
3
|
+
compatibility_date = "2024-11-01"
|
|
4
|
+
# nodejs_compat backs the reused modules (AsyncLocalStorage trace context,
|
|
5
|
+
# node:crypto, Buffer). Required — do not remove.
|
|
6
|
+
compatibility_flags = ["nodejs_compat"]
|
|
7
|
+
|
|
8
|
+
# Non-secret configuration. Override per-environment as needed.
|
|
9
|
+
[vars]
|
|
10
|
+
BASE_URL = "{{baseUrl}}"
|
|
11
|
+
MAX_RETRIES = "3"
|
|
12
|
+
REQUEST_INTERVAL_MS = "100"
|
|
13
|
+
# ALLOWED_ORIGIN = "https://your-client.example.com"
|
|
14
|
+
|
|
15
|
+
# Secrets are NOT stored in this file. Set them before `wrangler deploy`:
|
|
16
|
+
# wrangler secret put MCP_AUTH_TOKEN # bearer token clients must present
|
|
17
|
+
{{#each authEnvVars}}
|
|
18
|
+
# wrangler secret put {{name}}
|
|
19
|
+
{{/each}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../src/generator/spec-generator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6C/F"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
const SYSTEM_PROMPT = `You are an API architect. Given a description of an API or service, generate a valid OpenAPI 3.0 specification in JSON format.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Output ONLY valid JSON (no markdown fences, no explanation)
|
|
7
|
+
- Include realistic endpoints with proper HTTP methods
|
|
8
|
+
- Use descriptive operationIds in camelCase
|
|
9
|
+
- Include request/response schemas with realistic field types
|
|
10
|
+
- Add path parameters, query parameters, and request bodies where appropriate
|
|
11
|
+
- Include at least one security scheme if auth is likely needed
|
|
12
|
+
- Include a servers array with a base URL
|
|
13
|
+
- Keep it practical — 3-10 operations is typical`;
|
|
14
|
+
export async function generateSpecFromDescription(options) {
|
|
15
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
16
|
+
if (!apiKey) {
|
|
17
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required for describe mode.\n' +
|
|
18
|
+
'Set it with: export ANTHROPIC_API_KEY=your-key-here');
|
|
19
|
+
}
|
|
20
|
+
const client = new Anthropic({ apiKey });
|
|
21
|
+
const model = options.model ?? 'claude-sonnet-4-20250514';
|
|
22
|
+
let userPrompt = `Generate an OpenAPI 3.0 spec for: ${options.description}`;
|
|
23
|
+
if (options.baseUrl) {
|
|
24
|
+
userPrompt += `\n\nUse this base URL: ${options.baseUrl}`;
|
|
25
|
+
}
|
|
26
|
+
logger.info('Generating OpenAPI spec from description...');
|
|
27
|
+
const message = await client.messages.create({
|
|
28
|
+
model,
|
|
29
|
+
max_tokens: 4096,
|
|
30
|
+
system: SYSTEM_PROMPT,
|
|
31
|
+
messages: [{ role: 'user', content: userPrompt }],
|
|
32
|
+
});
|
|
33
|
+
const content = message.content[0];
|
|
34
|
+
if (content.type !== 'text') {
|
|
35
|
+
throw new Error('Unexpected response format from Claude');
|
|
36
|
+
}
|
|
37
|
+
// Extract JSON — strip markdown fences if present
|
|
38
|
+
let json = content.text.trim();
|
|
39
|
+
if (json.startsWith('```')) {
|
|
40
|
+
json = json.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
41
|
+
}
|
|
42
|
+
// Validate it's parseable JSON
|
|
43
|
+
try {
|
|
44
|
+
JSON.parse(json);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new Error('Claude returned invalid JSON. Try again or refine your description.');
|
|
48
|
+
}
|
|
49
|
+
return json;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=spec-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-generator.js","sourceRoot":"","sources":["../../src/generator/spec-generator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,aAAa,GAAG;;;;;;;;;;iDAU2B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAA4B;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,qDAAqD,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC;IAE1D,IAAI,UAAU,GAAG,qCAAqC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC5E,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,UAAU,IAAI,0BAA0B,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,KAAK;QACL,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,kDAAkD;IAClD,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mcpmake/core — the shared MCP-server generation library.
|
|
3
|
+
*
|
|
4
|
+
* Public API consumed by the `mcpmake` CLI (and the managed cloud). Everything
|
|
5
|
+
* exported here is supported surface; deep imports into `@mcpmake/core/dist/...`
|
|
6
|
+
* are not.
|
|
7
|
+
*/
|
|
8
|
+
export { emitProject, emitPythonProject, emitWorkerProject, emitSiteProject, } from './emitter/index.js';
|
|
9
|
+
export type { EmitOptions } from './emitter/index.js';
|
|
10
|
+
export { generateMcpb } from './emitter/mcpb-bundler.js';
|
|
11
|
+
export { renderTemplate } from './emitter/template-loader.js';
|
|
12
|
+
export { scaffoldSharedModules } from './emitter/project-scaffolder.js';
|
|
13
|
+
export { loadOpenApiSpec } from './parser/openapi-loader.js';
|
|
14
|
+
export type { LoadResult } from './parser/openapi-loader.js';
|
|
15
|
+
export { applyOverlay } from './parser/overlay-loader.js';
|
|
16
|
+
export { extractOperations } from './parser/operation-extractor.js';
|
|
17
|
+
export type { ExtractionResult } from './parser/operation-extractor.js';
|
|
18
|
+
export { jsonSchemaToZodCode, buildOperationInputSchema } from './parser/schema-converter.js';
|
|
19
|
+
export { loadHarFile } from './parser/har-loader.js';
|
|
20
|
+
export { filterHarEntries } from './parser/har-filter.js';
|
|
21
|
+
export type { FilterOptions } from './parser/har-filter.js';
|
|
22
|
+
export { normalizeEntry } from './parser/har-normalizer.js';
|
|
23
|
+
export type { NormalizedEntry, PathParam, QueryParam } from './parser/har-normalizer.js';
|
|
24
|
+
export { loadPostmanCollection } from './parser/postman-loader.js';
|
|
25
|
+
export { toToolName, toToolTitle, toFileName, toFunctionName } from './transformer/naming.js';
|
|
26
|
+
export { detectAuthSchemes } from './transformer/auth-detector.js';
|
|
27
|
+
export { buildToolDefinition, buildAllTools } from './transformer/tool-builder.js';
|
|
28
|
+
export { filterOperations } from './transformer/operation-filter.js';
|
|
29
|
+
export { buildResources, buildPrompts } from './transformer/resource-builder.js';
|
|
30
|
+
export { applyClientCompat } from './transformer/client-compat.js';
|
|
31
|
+
export type { ClientMode } from './transformer/client-compat.js';
|
|
32
|
+
export { improveToolNames } from './transformer/llm-namer.js';
|
|
33
|
+
export { clusterEntries } from './transformer/har-clusterer.js';
|
|
34
|
+
export type { EntryCluster } from './transformer/har-clusterer.js';
|
|
35
|
+
export { clustersToOperations } from './transformer/har-to-operations.js';
|
|
36
|
+
export type { HarConversionResult, DetectedAuth } from './transformer/har-to-operations.js';
|
|
37
|
+
export { deduplicateEntries } from './transformer/har-dedup.js';
|
|
38
|
+
export { inferJsonSchema, inferResponseSchema, inferRequestBodySchema, } from './transformer/har-schema-inferrer.js';
|
|
39
|
+
export { parseStainlessConfig, resolveSpecPath } from './transformer/stainless-config.js';
|
|
40
|
+
export { translateStainless } from './transformer/stainless-translator.js';
|
|
41
|
+
export { crawlSite } from './analyzer/site-crawler.js';
|
|
42
|
+
export type { CrawlOptions, CrawlResult } from './analyzer/site-crawler.js';
|
|
43
|
+
export { parsePage } from './analyzer/dom-parser.js';
|
|
44
|
+
export { buildSelectorSet, validateSelector } from './analyzer/selector-builder.js';
|
|
45
|
+
export { analyzeSemantics } from './analyzer/semantic-analyzer.js';
|
|
46
|
+
export { detectAuthFlow } from './analyzer/auth-detector.js';
|
|
47
|
+
export { classifyForms } from './analyzer/hybrid-detector.js';
|
|
48
|
+
export type { HybridClassification } from './analyzer/hybrid-detector.js';
|
|
49
|
+
export { goalDirectedCrawl } from './analyzer/goal-crawler.js';
|
|
50
|
+
export type { GoalCrawlOptions } from './analyzer/goal-crawler.js';
|
|
51
|
+
export { generateSiteTools } from './site-transformer/tool-generator.js';
|
|
52
|
+
export { buildBrowserLifecycleTools } from './site-transformer/browser-tools.js';
|
|
53
|
+
export { healBrokenSelector } from './site-transformer/selector-healer.js';
|
|
54
|
+
export { generateSpecFromDescription } from './generator/spec-generator.js';
|
|
55
|
+
export { getProvider, listProviders, getProviderNames } from './providers/index.js';
|
|
56
|
+
export type { ProviderConfig } from './providers/index.js';
|
|
57
|
+
export { recordBrowserSession } from './recorder/browser-recorder.js';
|
|
58
|
+
export { diffSiteDescriptors } from './rescan/diff-engine.js';
|
|
59
|
+
export { RescanScheduler, computeNextRun } from './rescan/rescan-scheduler.js';
|
|
60
|
+
export type { ScheduleEntry, RescanCallback } from './rescan/rescan-scheduler.js';
|
|
61
|
+
export { collectLowConfidenceSelectors, summarizeRescan } from './rescan/rescan-runner.js';
|
|
62
|
+
export type { LowConfidenceSelector, RescanSummary, ChangeCounts } from './rescan/rescan-runner.js';
|
|
63
|
+
export { defineConfigurableCommand } from './config/configurable-command.js';
|
|
64
|
+
export { registerAdapter, getAdapter, listAdapters } from './plugins/loader.js';
|
|
65
|
+
export type { McpmakeAdapter } from './plugins/adapter.js';
|
|
66
|
+
export * from './types/index.js';
|
|
67
|
+
export * from './types/site.js';
|
|
68
|
+
export { logger } from './utils/logger.js';
|
|
69
|
+
export { fail } from './utils/fail.js';
|
|
70
|
+
export { pathExists } from './utils/fs.js';
|
|
71
|
+
export { confirmOperations } from './utils/interactive.js';
|
|
72
|
+
export { watchFile } from './utils/watcher.js';
|
|
73
|
+
export { FAMILY_A_PRICING, DEFAULT_PRICING_SERVER, fetchPricing, formatPrice } from './pricing.js';
|
|
74
|
+
export type { BillingPeriod, PricePoint } from './pricing.js';
|
|
75
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mcpmake/core — the shared MCP-server generation library.
|
|
3
|
+
*
|
|
4
|
+
* Public API consumed by the `mcpmake` CLI (and the managed cloud). Everything
|
|
5
|
+
* exported here is supported surface; deep imports into `@mcpmake/core/dist/...`
|
|
6
|
+
* are not.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Emitter (code generation)
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export { emitProject, emitPythonProject, emitWorkerProject, emitSiteProject, } from './emitter/index.js';
|
|
12
|
+
export { generateMcpb } from './emitter/mcpb-bundler.js';
|
|
13
|
+
export { renderTemplate } from './emitter/template-loader.js';
|
|
14
|
+
export { scaffoldSharedModules } from './emitter/project-scaffolder.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Parser (OpenAPI / HAR / Postman ingestion)
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export { loadOpenApiSpec } from './parser/openapi-loader.js';
|
|
19
|
+
export { applyOverlay } from './parser/overlay-loader.js';
|
|
20
|
+
export { extractOperations } from './parser/operation-extractor.js';
|
|
21
|
+
export { jsonSchemaToZodCode, buildOperationInputSchema } from './parser/schema-converter.js';
|
|
22
|
+
export { loadHarFile } from './parser/har-loader.js';
|
|
23
|
+
export { filterHarEntries } from './parser/har-filter.js';
|
|
24
|
+
export { normalizeEntry } from './parser/har-normalizer.js';
|
|
25
|
+
export { loadPostmanCollection } from './parser/postman-loader.js';
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Transformer (operations -> tools/resources/prompts)
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export { toToolName, toToolTitle, toFileName, toFunctionName } from './transformer/naming.js';
|
|
30
|
+
export { detectAuthSchemes } from './transformer/auth-detector.js';
|
|
31
|
+
export { buildToolDefinition, buildAllTools } from './transformer/tool-builder.js';
|
|
32
|
+
export { filterOperations } from './transformer/operation-filter.js';
|
|
33
|
+
export { buildResources, buildPrompts } from './transformer/resource-builder.js';
|
|
34
|
+
export { applyClientCompat } from './transformer/client-compat.js';
|
|
35
|
+
export { improveToolNames } from './transformer/llm-namer.js';
|
|
36
|
+
export { clusterEntries } from './transformer/har-clusterer.js';
|
|
37
|
+
export { clustersToOperations } from './transformer/har-to-operations.js';
|
|
38
|
+
export { deduplicateEntries } from './transformer/har-dedup.js';
|
|
39
|
+
export { inferJsonSchema, inferResponseSchema, inferRequestBodySchema, } from './transformer/har-schema-inferrer.js';
|
|
40
|
+
export { parseStainlessConfig, resolveSpecPath } from './transformer/stainless-config.js';
|
|
41
|
+
export { translateStainless } from './transformer/stainless-translator.js';
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Analyzer (website crawling / form detection)
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
export { crawlSite } from './analyzer/site-crawler.js';
|
|
46
|
+
export { parsePage } from './analyzer/dom-parser.js';
|
|
47
|
+
export { buildSelectorSet, validateSelector } from './analyzer/selector-builder.js';
|
|
48
|
+
export { analyzeSemantics } from './analyzer/semantic-analyzer.js';
|
|
49
|
+
export { detectAuthFlow } from './analyzer/auth-detector.js';
|
|
50
|
+
export { classifyForms } from './analyzer/hybrid-detector.js';
|
|
51
|
+
export { goalDirectedCrawl } from './analyzer/goal-crawler.js';
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Site transformer (browser tools / selector healing)
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
export { generateSiteTools } from './site-transformer/tool-generator.js';
|
|
56
|
+
export { buildBrowserLifecycleTools } from './site-transformer/browser-tools.js';
|
|
57
|
+
export { healBrokenSelector } from './site-transformer/selector-healer.js';
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Generator (LLM spec synthesis)
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
export { generateSpecFromDescription } from './generator/spec-generator.js';
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Providers (known-API presets)
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
export { getProvider, listProviders, getProviderNames } from './providers/index.js';
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Recorder (browser session capture)
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
export { recordBrowserSession } from './recorder/browser-recorder.js';
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Rescan (scheduled re-generation)
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
export { diffSiteDescriptors } from './rescan/diff-engine.js';
|
|
74
|
+
export { RescanScheduler, computeNextRun } from './rescan/rescan-scheduler.js';
|
|
75
|
+
export { collectLowConfidenceSelectors, summarizeRescan } from './rescan/rescan-runner.js';
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Config (shared command/config plumbing)
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
export { defineConfigurableCommand } from './config/configurable-command.js';
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Plugins (adapter registry)
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
export { registerAdapter, getAdapter, listAdapters } from './plugins/loader.js';
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Types
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
export * from './types/index.js';
|
|
88
|
+
export * from './types/site.js';
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Utils
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
export { logger } from './utils/logger.js';
|
|
93
|
+
export { fail } from './utils/fail.js';
|
|
94
|
+
export { pathExists } from './utils/fs.js';
|
|
95
|
+
export { confirmOperations } from './utils/interactive.js';
|
|
96
|
+
export { watchFile } from './utils/watcher.js';
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Pricing
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
export { FAMILY_A_PRICING, DEFAULT_PRICING_SERVER, fetchPricing, formatPrice } from './pricing.js';
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Entry } from 'har-format';
|
|
2
|
+
export interface FilterOptions {
|
|
3
|
+
/** Only include entries from these domains. If empty, include all. */
|
|
4
|
+
allowedDomains?: string[];
|
|
5
|
+
/** Include requests that returned errors (4xx/5xx). Default: false */
|
|
6
|
+
includeErrors?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function filterHarEntries(entries: Entry[], options?: FilterOptions): Entry[];
|
|
9
|
+
//# sourceMappingURL=har-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-filter.d.ts","sourceRoot":"","sources":["../../src/parser/har-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAiCxC,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,KAAK,EAAE,CA4CvF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const NOISE_EXTENSIONS = /\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|map|webp|avif)(\?|$)/i;
|
|
2
|
+
const ANALYTICS_DOMAINS = [
|
|
3
|
+
'google-analytics.com',
|
|
4
|
+
'googletagmanager.com',
|
|
5
|
+
'analytics.',
|
|
6
|
+
'mixpanel.com',
|
|
7
|
+
'segment.io',
|
|
8
|
+
'segment.com',
|
|
9
|
+
'hotjar.com',
|
|
10
|
+
'doubleclick.net',
|
|
11
|
+
'facebook.net',
|
|
12
|
+
'fbcdn.net',
|
|
13
|
+
'sentry.io',
|
|
14
|
+
'newrelic.com',
|
|
15
|
+
'datadoghq.com',
|
|
16
|
+
'clarity.ms',
|
|
17
|
+
];
|
|
18
|
+
const SKIP_MIME_TYPES = [
|
|
19
|
+
'text/html',
|
|
20
|
+
'text/css',
|
|
21
|
+
'application/javascript',
|
|
22
|
+
'text/javascript',
|
|
23
|
+
'image/',
|
|
24
|
+
'font/',
|
|
25
|
+
'audio/',
|
|
26
|
+
'video/',
|
|
27
|
+
];
|
|
28
|
+
export function filterHarEntries(entries, options = {}) {
|
|
29
|
+
return entries.filter((entry) => {
|
|
30
|
+
const url = entry.request.url;
|
|
31
|
+
let hostname;
|
|
32
|
+
try {
|
|
33
|
+
hostname = new URL(url).hostname;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// Skip non-HTTP methods
|
|
39
|
+
const method = entry.request.method.toUpperCase();
|
|
40
|
+
if (method === 'CONNECT' || method === 'OPTIONS')
|
|
41
|
+
return false;
|
|
42
|
+
// Skip static assets by extension
|
|
43
|
+
const pathname = new URL(url).pathname;
|
|
44
|
+
if (NOISE_EXTENSIONS.test(pathname))
|
|
45
|
+
return false;
|
|
46
|
+
// Skip analytics/tracking domains
|
|
47
|
+
if (ANALYTICS_DOMAINS.some((d) => hostname.includes(d)))
|
|
48
|
+
return false;
|
|
49
|
+
// Domain allowlist
|
|
50
|
+
if (options.allowedDomains?.length) {
|
|
51
|
+
if (!options.allowedDomains.some((d) => hostname.includes(d)))
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
// Skip error responses unless requested
|
|
55
|
+
if (!options.includeErrors && entry.response.status >= 400)
|
|
56
|
+
return false;
|
|
57
|
+
// Skip non-API content types in response
|
|
58
|
+
const responseMime = entry.response.content?.mimeType ?? '';
|
|
59
|
+
if (SKIP_MIME_TYPES.some((m) => responseMime.startsWith(m))) {
|
|
60
|
+
// Exception: text/html that's actually an API response (rare but possible)
|
|
61
|
+
// Keep if response body looks like JSON
|
|
62
|
+
if (responseMime.startsWith('text/html') && !entry.response.content?.text?.startsWith('{')) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (!responseMime.includes('json') && !responseMime.includes('xml')) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=har-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-filter.js","sourceRoot":"","sources":["../../src/parser/har-filter.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GACpB,6EAA6E,CAAC;AAEhF,MAAM,iBAAiB,GAAG;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,WAAW;IACX,WAAW;IACX,cAAc;IACd,eAAe;IACf,YAAY;CACb,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,WAAW;IACX,UAAU;IACV,wBAAwB;IACxB,iBAAiB;IACjB,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;CACT,CAAC;AASF,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,UAAyB,EAAE;IAC5E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE/D,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvC,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAElD,kCAAkC;QAClC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtE,mBAAmB;QACnB,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC9E,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QAEzE,yCAAyC;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QAC5D,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,2EAA2E;YAC3E,wCAAwC;YACxC,IAAI,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3F,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-loader.d.ts","sourceRoot":"","sources":["../../src/parser/har-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAItC,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAgBhE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
const MAX_HAR_SIZE_BYTES = 50 * 1024 * 1024; // 50 MB
|
|
3
|
+
export async function loadHarFile(filePath) {
|
|
4
|
+
const fileInfo = await stat(filePath);
|
|
5
|
+
if (fileInfo.size > MAX_HAR_SIZE_BYTES) {
|
|
6
|
+
throw new Error(`HAR file is too large (${Math.round(fileInfo.size / 1024 / 1024)} MB). Maximum is 50 MB.`);
|
|
7
|
+
}
|
|
8
|
+
const raw = await readFile(filePath, 'utf-8');
|
|
9
|
+
const har = JSON.parse(raw);
|
|
10
|
+
if (!har.log?.entries || !Array.isArray(har.log.entries)) {
|
|
11
|
+
throw new Error('Invalid HAR file: missing log.entries array');
|
|
12
|
+
}
|
|
13
|
+
return har;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=har-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-loader.js","sourceRoot":"","sources":["../../src/parser/har-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAErD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,QAAQ,CAAC,IAAI,GAAG,kBAAkB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Entry } from 'har-format';
|
|
2
|
+
export interface NormalizedEntry {
|
|
3
|
+
entry: Entry;
|
|
4
|
+
normalizedPath: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
pathParams: PathParam[];
|
|
7
|
+
queryParams: QueryParam[];
|
|
8
|
+
}
|
|
9
|
+
export interface PathParam {
|
|
10
|
+
name: string;
|
|
11
|
+
position: number;
|
|
12
|
+
exampleValue: string;
|
|
13
|
+
inferredType: 'uuid' | 'integer' | 'string';
|
|
14
|
+
}
|
|
15
|
+
export interface QueryParam {
|
|
16
|
+
name: string;
|
|
17
|
+
exampleValue: string;
|
|
18
|
+
inferredType: 'integer' | 'boolean' | 'string';
|
|
19
|
+
}
|
|
20
|
+
export declare function normalizeEntry(entry: Entry): NormalizedEntry;
|
|
21
|
+
//# sourceMappingURL=har-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-normalizer.d.ts","sourceRoot":"","sources":["../../src/parser/har-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOxC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;CAChD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAgD5D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
2
|
+
const NUMERIC_ID_PATTERN = /^\d+$/;
|
|
3
|
+
const MONGO_ID_PATTERN = /^[0-9a-f]{24}$/i;
|
|
4
|
+
const SHORT_ID_PATTERN = /^[a-zA-Z0-9]{8,22}$/;
|
|
5
|
+
export function normalizeEntry(entry) {
|
|
6
|
+
const url = new URL(entry.request.url);
|
|
7
|
+
const baseUrl = `${url.protocol}//${url.host}`;
|
|
8
|
+
const segments = url.pathname.split('/').filter(Boolean);
|
|
9
|
+
const pathParams = [];
|
|
10
|
+
let paramCounter = 0;
|
|
11
|
+
const normalizedSegments = segments.map((segment, i) => {
|
|
12
|
+
if (UUID_PATTERN.test(segment)) {
|
|
13
|
+
const name = deriveParamName(segments, i, paramCounter++);
|
|
14
|
+
pathParams.push({ name, position: i, exampleValue: segment, inferredType: 'uuid' });
|
|
15
|
+
return `{${name}}`;
|
|
16
|
+
}
|
|
17
|
+
if (NUMERIC_ID_PATTERN.test(segment) && segment.length < 15) {
|
|
18
|
+
const name = deriveParamName(segments, i, paramCounter++);
|
|
19
|
+
pathParams.push({ name, position: i, exampleValue: segment, inferredType: 'integer' });
|
|
20
|
+
return `{${name}}`;
|
|
21
|
+
}
|
|
22
|
+
if (MONGO_ID_PATTERN.test(segment)) {
|
|
23
|
+
const name = deriveParamName(segments, i, paramCounter++);
|
|
24
|
+
pathParams.push({ name, position: i, exampleValue: segment, inferredType: 'string' });
|
|
25
|
+
return `{${name}}`;
|
|
26
|
+
}
|
|
27
|
+
// Heuristic: if previous segment is a known collection name and this looks like an ID
|
|
28
|
+
if (i > 0 && isCollectionName(segments[i - 1]) && SHORT_ID_PATTERN.test(segment)) {
|
|
29
|
+
const prevSegment = segments[i - 1];
|
|
30
|
+
// Only treat as ID if short enough and not a known sub-resource
|
|
31
|
+
if (segment.length <= 22 && !isCollectionName(segment)) {
|
|
32
|
+
const name = singularize(prevSegment) + 'Id';
|
|
33
|
+
pathParams.push({ name, position: i, exampleValue: segment, inferredType: 'string' });
|
|
34
|
+
return `{${name}}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return segment;
|
|
38
|
+
});
|
|
39
|
+
const normalizedPath = '/' + normalizedSegments.join('/');
|
|
40
|
+
const queryParams = [];
|
|
41
|
+
for (const qs of entry.request.queryString) {
|
|
42
|
+
queryParams.push({
|
|
43
|
+
name: qs.name,
|
|
44
|
+
exampleValue: qs.value,
|
|
45
|
+
inferredType: inferQueryParamType(qs.value),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return { entry, normalizedPath, baseUrl, pathParams, queryParams };
|
|
49
|
+
}
|
|
50
|
+
function deriveParamName(segments, currentIndex, counter) {
|
|
51
|
+
if (currentIndex > 0) {
|
|
52
|
+
const prev = segments[currentIndex - 1];
|
|
53
|
+
if (isCollectionName(prev)) {
|
|
54
|
+
return singularize(prev) + 'Id';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return counter === 0 ? 'id' : `id${counter + 1}`;
|
|
58
|
+
}
|
|
59
|
+
function isCollectionName(segment) {
|
|
60
|
+
// Common REST patterns: plurals, known resource names
|
|
61
|
+
return (/^[a-z][a-z0-9_-]*s$/i.test(segment) || ['api', 'v1', 'v2', 'v3'].includes(segment) === false);
|
|
62
|
+
}
|
|
63
|
+
function singularize(word) {
|
|
64
|
+
if (word.endsWith('ies'))
|
|
65
|
+
return word.slice(0, -3) + 'y';
|
|
66
|
+
if (word.endsWith('ses') || word.endsWith('xes') || word.endsWith('zes'))
|
|
67
|
+
return word.slice(0, -2);
|
|
68
|
+
if (word.endsWith('s') && !word.endsWith('ss'))
|
|
69
|
+
return word.slice(0, -1);
|
|
70
|
+
return word;
|
|
71
|
+
}
|
|
72
|
+
function inferQueryParamType(value) {
|
|
73
|
+
if (NUMERIC_ID_PATTERN.test(value))
|
|
74
|
+
return 'integer';
|
|
75
|
+
if (value === 'true' || value === 'false')
|
|
76
|
+
return 'boolean';
|
|
77
|
+
return 'string';
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=har-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"har-normalizer.js","sourceRoot":"","sources":["../../src/parser/har-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { loadOpenApiSpec } from './openapi-loader.js';
|
|
2
|
+
export type { LoadResult } from './openapi-loader.js';
|
|
3
|
+
export { extractOperations } from './operation-extractor.js';
|
|
4
|
+
export type { ExtractionResult } from './operation-extractor.js';
|
|
5
|
+
export { jsonSchemaToZodCode, buildOperationInputSchema } from './schema-converter.js';
|
|
6
|
+
export { loadHarFile } from './har-loader.js';
|
|
7
|
+
export { filterHarEntries } from './har-filter.js';
|
|
8
|
+
export type { FilterOptions } from './har-filter.js';
|
|
9
|
+
export { normalizeEntry } from './har-normalizer.js';
|
|
10
|
+
export type { NormalizedEntry, PathParam, QueryParam } from './har-normalizer.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { loadOpenApiSpec } from './openapi-loader.js';
|
|
2
|
+
export { extractOperations } from './operation-extractor.js';
|
|
3
|
+
export { jsonSchemaToZodCode, buildOperationInputSchema } from './schema-converter.js';
|
|
4
|
+
export { loadHarFile } from './har-loader.js';
|
|
5
|
+
export { filterHarEntries } from './har-filter.js';
|
|
6
|
+
export { normalizeEntry } from './har-normalizer.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-loader.d.ts","sourceRoot":"","sources":["../../src/parser/openapi-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0VD,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcxE"}
|