frontmcp 0.12.2 → 1.0.0-beta.2
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/README.md +1 -1
- package/package.json +6 -5
- package/src/commands/build/bundler.js +1 -1
- package/src/commands/build/bundler.js.map +1 -1
- package/src/commands/build/exec/cli-runtime/cli-bundler.d.ts +17 -0
- package/src/commands/build/exec/cli-runtime/cli-bundler.js +75 -0
- package/src/commands/build/exec/cli-runtime/cli-bundler.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/credential-store.d.ts +22 -0
- package/src/commands/build/exec/cli-runtime/credential-store.js +140 -0
- package/src/commands/build/exec/cli-runtime/credential-store.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/daemon-client.d.ts +16 -0
- package/src/commands/build/exec/cli-runtime/daemon-client.js +169 -0
- package/src/commands/build/exec/cli-runtime/daemon-client.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/generate-cli-entry.d.ts +37 -0
- package/src/commands/build/exec/cli-runtime/generate-cli-entry.js +1287 -0
- package/src/commands/build/exec/cli-runtime/generate-cli-entry.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/index.d.ts +9 -0
- package/src/commands/build/exec/cli-runtime/index.js +32 -0
- package/src/commands/build/exec/cli-runtime/index.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/oauth-helper.d.ts +9 -0
- package/src/commands/build/exec/cli-runtime/oauth-helper.js +224 -0
- package/src/commands/build/exec/cli-runtime/oauth-helper.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/output-formatter.d.ts +46 -0
- package/src/commands/build/exec/cli-runtime/output-formatter.js +168 -0
- package/src/commands/build/exec/cli-runtime/output-formatter.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/schema-extractor.d.ts +57 -0
- package/src/commands/build/exec/cli-runtime/schema-extractor.js +129 -0
- package/src/commands/build/exec/cli-runtime/schema-extractor.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/schema-to-commander.d.ts +38 -0
- package/src/commands/build/exec/cli-runtime/schema-to-commander.js +172 -0
- package/src/commands/build/exec/cli-runtime/schema-to-commander.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/session-manager.d.ts +16 -0
- package/src/commands/build/exec/cli-runtime/session-manager.js +122 -0
- package/src/commands/build/exec/cli-runtime/session-manager.js.map +1 -0
- package/src/commands/build/exec/config.d.ts +25 -0
- package/src/commands/build/exec/config.js +0 -1
- package/src/commands/build/exec/config.js.map +1 -1
- package/src/commands/build/exec/esbuild-bundler.d.ts +4 -1
- package/src/commands/build/exec/esbuild-bundler.js +28 -9
- package/src/commands/build/exec/esbuild-bundler.js.map +1 -1
- package/src/commands/build/exec/index.d.ts +7 -2
- package/src/commands/build/exec/index.js +159 -9
- package/src/commands/build/exec/index.js.map +1 -1
- package/src/commands/build/exec/manifest.d.ts +14 -0
- package/src/commands/build/exec/manifest.js.map +1 -1
- package/src/commands/build/exec/runner-script.d.ts +1 -1
- package/src/commands/build/exec/runner-script.js +48 -5
- package/src/commands/build/exec/runner-script.js.map +1 -1
- package/src/commands/build/exec/sea-builder.d.ts +18 -0
- package/src/commands/build/exec/sea-builder.js +81 -0
- package/src/commands/build/exec/sea-builder.js.map +1 -0
- package/src/commands/build/exec/setup.js +0 -2
- package/src/commands/build/exec/setup.js.map +1 -1
- package/src/commands/build/index.d.ts +1 -1
- package/src/commands/build/index.js +3 -3
- package/src/commands/build/index.js.map +1 -1
- package/src/commands/build/register.d.ts +2 -0
- package/src/commands/build/register.js +21 -0
- package/src/commands/build/register.js.map +1 -0
- package/src/commands/{dev.d.ts → dev/dev.d.ts} +1 -1
- package/src/commands/{dev.js → dev/dev.js} +3 -3
- package/src/commands/dev/dev.js.map +1 -0
- package/src/commands/{doctor.js → dev/doctor.js} +5 -4
- package/src/commands/dev/doctor.js.map +1 -0
- package/src/commands/{inspector.js → dev/inspector.js} +1 -1
- package/src/commands/dev/inspector.js.map +1 -0
- package/src/commands/dev/register.d.ts +2 -0
- package/src/commands/dev/register.js +49 -0
- package/src/commands/dev/register.js.map +1 -0
- package/src/commands/{test.d.ts → dev/test.d.ts} +1 -1
- package/src/commands/{test.js → dev/test.js} +5 -5
- package/src/commands/dev/test.js.map +1 -0
- package/src/commands/{configure.d.ts → package/configure.d.ts} +1 -1
- package/src/commands/{configure.js → package/configure.js} +3 -3
- package/src/commands/package/configure.js.map +1 -0
- package/src/commands/package/esm-update.d.ts +19 -0
- package/src/commands/package/esm-update.js +93 -0
- package/src/commands/package/esm-update.js.map +1 -0
- package/src/commands/{install/index.d.ts → package/install.d.ts} +1 -1
- package/src/commands/{install/index.js → package/install.js} +8 -5
- package/src/commands/package/install.js.map +1 -0
- package/src/commands/{install → package}/questionnaire.js +2 -2
- package/src/commands/{install → package}/questionnaire.js.map +1 -1
- package/src/commands/package/register.d.ts +2 -0
- package/src/commands/package/register.js +35 -0
- package/src/commands/package/register.js.map +1 -0
- package/src/commands/{install → package}/registry.js +8 -6
- package/src/commands/package/registry.js.map +1 -0
- package/src/commands/{install → package}/sources/git.js +8 -1
- package/src/commands/package/sources/git.js.map +1 -0
- package/src/commands/{install → package}/sources/local.js.map +1 -1
- package/src/commands/{install → package}/sources/npm.js.map +1 -1
- package/src/commands/{install → package}/types.d.ts +7 -1
- package/src/commands/{install → package}/types.js +4 -0
- package/src/commands/package/types.js.map +1 -0
- package/src/commands/{uninstall.d.ts → package/uninstall.d.ts} +1 -1
- package/src/commands/{uninstall.js → package/uninstall.js} +2 -2
- package/src/commands/package/uninstall.js.map +1 -0
- package/src/{pm/pm.format.d.ts → commands/pm/format.d.ts} +1 -1
- package/src/{pm/pm.format.js → commands/pm/format.js} +2 -2
- package/src/commands/pm/format.js.map +1 -0
- package/src/{pm/pm.health.js → commands/pm/health.js} +1 -1
- package/src/commands/pm/health.js.map +1 -0
- package/src/commands/pm/index.d.ts +9 -0
- package/src/{pm → commands/pm}/index.js +32 -32
- package/src/commands/pm/index.js.map +1 -0
- package/src/commands/{list.d.ts → pm/list.d.ts} +1 -1
- package/src/commands/{list.js → pm/list.js} +3 -3
- package/src/commands/pm/list.js.map +1 -0
- package/src/{pm/pm.logs.js → commands/pm/log-utils.js} +9 -9
- package/src/commands/pm/log-utils.js.map +1 -0
- package/src/commands/{logs.d.ts → pm/logs.d.ts} +1 -1
- package/src/commands/{logs.js → pm/logs.js} +6 -6
- package/src/commands/pm/logs.js.map +1 -0
- package/src/{pm/pm.manager.d.ts → commands/pm/manager.d.ts} +1 -1
- package/src/{pm/pm.manager.js → commands/pm/manager.js} +21 -21
- package/src/commands/pm/manager.js.map +1 -0
- package/src/{pm/pm.paths.d.ts → commands/pm/paths.d.ts} +1 -0
- package/src/{pm/pm.paths.js → commands/pm/paths.js} +2 -1
- package/src/commands/pm/paths.js.map +1 -0
- package/src/{pm/pm.pidfile.d.ts → commands/pm/pidfile.d.ts} +1 -1
- package/src/{pm/pm.pidfile.js → commands/pm/pidfile.js} +8 -8
- package/src/commands/pm/pidfile.js.map +1 -0
- package/src/commands/pm/register.d.ts +2 -0
- package/src/commands/pm/register.js +83 -0
- package/src/commands/pm/register.js.map +1 -0
- package/src/commands/{restart.d.ts → pm/restart.d.ts} +1 -1
- package/src/commands/{restart.js → pm/restart.js} +4 -4
- package/src/commands/pm/restart.js.map +1 -0
- package/src/{pm/pm.service.d.ts → commands/pm/service-gen.d.ts} +1 -1
- package/src/{pm/pm.service.js → commands/pm/service-gen.js} +5 -5
- package/src/commands/pm/service-gen.js.map +1 -0
- package/src/commands/{service.d.ts → pm/service.d.ts} +1 -1
- package/src/commands/{service.js → pm/service.js} +6 -6
- package/src/commands/pm/service.js.map +1 -0
- package/src/commands/{socket.d.ts → pm/socket.d.ts} +1 -1
- package/src/commands/{socket.js → pm/socket.js} +3 -3
- package/src/commands/pm/socket.js.map +1 -0
- package/src/{pm/pm.spawn.d.ts → commands/pm/spawn.d.ts} +1 -1
- package/src/{pm/pm.spawn.js → commands/pm/spawn.js} +15 -15
- package/src/commands/pm/spawn.js.map +1 -0
- package/src/commands/{start.d.ts → pm/start.d.ts} +1 -1
- package/src/commands/{start.js → pm/start.js} +6 -6
- package/src/commands/pm/start.js.map +1 -0
- package/src/commands/{status.d.ts → pm/status.d.ts} +1 -1
- package/src/commands/{status.js → pm/status.js} +5 -5
- package/src/commands/pm/status.js.map +1 -0
- package/src/commands/{stop.d.ts → pm/stop.d.ts} +1 -1
- package/src/commands/{stop.js → pm/stop.js} +3 -3
- package/src/commands/pm/stop.js.map +1 -0
- package/src/{pm/pm.types.js → commands/pm/types.js} +1 -1
- package/src/commands/pm/types.js.map +1 -0
- package/src/commands/{create.js → scaffold/create.js} +91 -20
- package/src/commands/scaffold/create.js.map +1 -0
- package/src/commands/scaffold/register.d.ts +2 -0
- package/src/commands/scaffold/register.js +28 -0
- package/src/commands/scaffold/register.js.map +1 -0
- package/src/{args.d.ts → core/args.d.ts} +7 -1
- package/src/{args.js → core/args.js} +8 -0
- package/src/core/args.js.map +1 -0
- package/src/core/bridge.d.ts +9 -0
- package/src/core/bridge.js +75 -0
- package/src/core/bridge.js.map +1 -0
- package/src/core/cli.d.ts +8 -0
- package/src/core/cli.js +23 -0
- package/src/core/cli.js.map +1 -0
- package/src/core/colors.js.map +1 -0
- package/src/core/help.d.ts +7 -0
- package/src/core/help.js +83 -0
- package/src/core/help.js.map +1 -0
- package/src/core/index.d.ts +7 -0
- package/src/core/index.js +22 -0
- package/src/core/index.js.map +1 -0
- package/src/core/program.d.ts +2 -0
- package/src/core/program.js +23 -0
- package/src/core/program.js.map +1 -0
- package/src/core/tsconfig.js.map +1 -0
- package/src/{version.js → core/version.js} +1 -1
- package/src/core/version.js.map +1 -0
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -5
- package/src/index.js.map +1 -1
- package/src/{utils → shared}/env.js +2 -2
- package/src/shared/env.js.map +1 -0
- package/src/{utils → shared}/fs.js +2 -2
- package/src/shared/fs.js.map +1 -0
- package/src/shared/index.d.ts +3 -0
- package/src/shared/index.js +14 -0
- package/src/shared/index.js.map +1 -0
- package/src/shared/prompts.js.map +1 -0
- package/src/args.js.map +0 -1
- package/src/cli.d.ts +0 -5
- package/src/cli.js +0 -241
- package/src/cli.js.map +0 -1
- package/src/colors.js.map +0 -1
- package/src/commands/configure.js.map +0 -1
- package/src/commands/create.js.map +0 -1
- package/src/commands/dev.js.map +0 -1
- package/src/commands/doctor.js.map +0 -1
- package/src/commands/inspector.js.map +0 -1
- package/src/commands/install/index.js.map +0 -1
- package/src/commands/install/registry.js.map +0 -1
- package/src/commands/install/sources/git.js.map +0 -1
- package/src/commands/install/types.js.map +0 -1
- package/src/commands/list.js.map +0 -1
- package/src/commands/logs.js.map +0 -1
- package/src/commands/restart.js.map +0 -1
- package/src/commands/service.js.map +0 -1
- package/src/commands/socket.js.map +0 -1
- package/src/commands/start.js.map +0 -1
- package/src/commands/status.js.map +0 -1
- package/src/commands/stop.js.map +0 -1
- package/src/commands/template.d.ts +0 -13
- package/src/commands/template.js +0 -193
- package/src/commands/template.js.map +0 -1
- package/src/commands/test.js.map +0 -1
- package/src/commands/uninstall.js.map +0 -1
- package/src/pm/index.d.ts +0 -9
- package/src/pm/index.js.map +0 -1
- package/src/pm/pm.format.js.map +0 -1
- package/src/pm/pm.health.js.map +0 -1
- package/src/pm/pm.logs.js.map +0 -1
- package/src/pm/pm.manager.js.map +0 -1
- package/src/pm/pm.paths.js.map +0 -1
- package/src/pm/pm.pidfile.js.map +0 -1
- package/src/pm/pm.service.js.map +0 -1
- package/src/pm/pm.spawn.js.map +0 -1
- package/src/pm/pm.types.js.map +0 -1
- package/src/templates/3rd-party-integration/src/http-client.d.ts +0 -20
- package/src/templates/3rd-party-integration/src/http-client.js +0 -105
- package/src/templates/3rd-party-integration/src/http-client.js.map +0 -1
- package/src/templates/3rd-party-integration/src/mcp-http-types.d.ts +0 -63
- package/src/templates/3rd-party-integration/src/mcp-http-types.js +0 -52
- package/src/templates/3rd-party-integration/src/mcp-http-types.js.map +0 -1
- package/src/templates/3rd-party-integration/src/tools/example.list.d.ts +0 -45
- package/src/templates/3rd-party-integration/src/tools/example.list.js +0 -85
- package/src/templates/3rd-party-integration/src/tools/example.list.js.map +0 -1
- package/src/tsconfig.js.map +0 -1
- package/src/utils/env.js.map +0 -1
- package/src/utils/fs.js.map +0 -1
- package/src/utils/prompts.js.map +0 -1
- package/src/version.js.map +0 -1
- /package/src/commands/{doctor.d.ts → dev/doctor.d.ts} +0 -0
- /package/src/commands/{inspector.d.ts → dev/inspector.d.ts} +0 -0
- /package/src/commands/{install → package}/questionnaire.d.ts +0 -0
- /package/src/commands/{install → package}/registry.d.ts +0 -0
- /package/src/commands/{install → package}/sources/git.d.ts +0 -0
- /package/src/commands/{install → package}/sources/local.d.ts +0 -0
- /package/src/commands/{install → package}/sources/local.js +0 -0
- /package/src/commands/{install → package}/sources/npm.d.ts +0 -0
- /package/src/commands/{install → package}/sources/npm.js +0 -0
- /package/src/{pm/pm.health.d.ts → commands/pm/health.d.ts} +0 -0
- /package/src/{pm/pm.logs.d.ts → commands/pm/log-utils.d.ts} +0 -0
- /package/src/{pm/pm.types.d.ts → commands/pm/types.d.ts} +0 -0
- /package/src/commands/{create.d.ts → scaffold/create.d.ts} +0 -0
- /package/src/{colors.d.ts → core/colors.d.ts} +0 -0
- /package/src/{colors.js → core/colors.js} +0 -0
- /package/src/{tsconfig.d.ts → core/tsconfig.d.ts} +0 -0
- /package/src/{tsconfig.js → core/tsconfig.js} +0 -0
- /package/src/{version.d.ts → core/version.d.ts} +0 -0
- /package/src/{utils → shared}/env.d.ts +0 -0
- /package/src/{utils → shared}/fs.d.ts +0 -0
- /package/src/{utils → shared}/prompts.d.ts +0 -0
- /package/src/{utils → shared}/prompts.js +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HttpClient = void 0;
|
|
4
|
-
class HttpClient {
|
|
5
|
-
ctx;
|
|
6
|
-
constructor(ctx) {
|
|
7
|
-
this.ctx = ctx;
|
|
8
|
-
}
|
|
9
|
-
resolveAuthHeader() {
|
|
10
|
-
const { auth } = this.ctx;
|
|
11
|
-
if (auth.oauth2?.accessToken) {
|
|
12
|
-
return { Authorization: `Bearer ${auth.oauth2.accessToken}` };
|
|
13
|
-
}
|
|
14
|
-
if (auth.bearer?.token) {
|
|
15
|
-
return { Authorization: `Bearer ${auth.bearer.token}` };
|
|
16
|
-
}
|
|
17
|
-
if (auth.apiKey?.value) {
|
|
18
|
-
const headerName = auth.apiKey.name ?? "X-API-Key";
|
|
19
|
-
return { [headerName]: auth.apiKey.value };
|
|
20
|
-
}
|
|
21
|
-
return {};
|
|
22
|
-
}
|
|
23
|
-
async request(options) {
|
|
24
|
-
const fetchImpl = this.ctx.fetch ?? fetch;
|
|
25
|
-
const url = new URL(options.path, this.ctx.baseUrl);
|
|
26
|
-
if (options.query) {
|
|
27
|
-
for (const [k, v] of Object.entries(options.query)) {
|
|
28
|
-
if (v === undefined)
|
|
29
|
-
continue;
|
|
30
|
-
url.searchParams.set(k, String(v));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const baseHeaders = {
|
|
34
|
-
Accept: "application/json",
|
|
35
|
-
...(this.ctx.requestId ? { "X-Request-Id": this.ctx.requestId } : {}),
|
|
36
|
-
...this.resolveAuthHeader(),
|
|
37
|
-
...(options.headers ?? {})
|
|
38
|
-
};
|
|
39
|
-
const controller = new AbortController();
|
|
40
|
-
const timeoutMs = this.ctx.timeoutMs ?? 15000;
|
|
41
|
-
const t = setTimeout(() => controller.abort(), timeoutMs);
|
|
42
|
-
const init = {
|
|
43
|
-
method: options.method,
|
|
44
|
-
headers: baseHeaders,
|
|
45
|
-
signal: controller.signal
|
|
46
|
-
};
|
|
47
|
-
if (options.bodyJson !== undefined) {
|
|
48
|
-
init.body = JSON.stringify(options.bodyJson);
|
|
49
|
-
baseHeaders["Content-Type"] = baseHeaders["Content-Type"] ?? "application/json";
|
|
50
|
-
}
|
|
51
|
-
if (this.ctx.logDebug) {
|
|
52
|
-
// Redact sensitive headers to prevent credential leakage in logs
|
|
53
|
-
const SENSITIVE_HEADERS = ['authorization', 'x-api-key', 'cookie', 'x-auth-token'];
|
|
54
|
-
const sanitizedHeaders = Object.fromEntries(Object.entries(baseHeaders).map(([k, v]) => [k, SENSITIVE_HEADERS.includes(k.toLowerCase()) ? '[REDACTED]' : v]));
|
|
55
|
-
console.debug("[HttpClient] Request", {
|
|
56
|
-
url: url.toString(),
|
|
57
|
-
method: options.method,
|
|
58
|
-
headers: sanitizedHeaders,
|
|
59
|
-
body: options.bodyJson
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
const res = await fetchImpl(url.toString(), init);
|
|
64
|
-
const headersObj = Object.fromEntries(res.headers.entries());
|
|
65
|
-
let json;
|
|
66
|
-
let text;
|
|
67
|
-
const contentType = res.headers.get("content-type") || "";
|
|
68
|
-
if (contentType.includes("application/json")) {
|
|
69
|
-
try {
|
|
70
|
-
json = await res.json();
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
json = undefined;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
try {
|
|
78
|
-
text = await res.text();
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
text = undefined;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (this.ctx.logDebug) {
|
|
85
|
-
console.debug("[HttpClient] Response", {
|
|
86
|
-
status: res.status,
|
|
87
|
-
headers: headersObj,
|
|
88
|
-
json,
|
|
89
|
-
text
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
status: res.status,
|
|
94
|
-
headers: headersObj,
|
|
95
|
-
json,
|
|
96
|
-
text
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
clearTimeout(t);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
exports.HttpClient = HttpClient;
|
|
105
|
-
//# sourceMappingURL=http-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../../../src/templates/3rd-party-integration/src/http-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExecuteContext } from \"./mcp-http-types\";\n\nexport interface HttpRequestOptions {\n method: string;\n path: string; // already resolved (including path params)\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n bodyJson?: unknown;\n}\n\nexport interface HttpResponseRaw {\n status: number;\n headers: Record<string, string>;\n json?: any;\n text?: string;\n}\n\nexport class HttpClient {\n constructor(private ctx: ExecuteContext) {}\n\n private resolveAuthHeader(): Record<string, string> {\n const { auth } = this.ctx;\n if (auth.oauth2?.accessToken) {\n return { Authorization: `Bearer ${auth.oauth2.accessToken}` };\n }\n if (auth.bearer?.token) {\n return { Authorization: `Bearer ${auth.bearer.token}` };\n }\n if (auth.apiKey?.value) {\n const headerName = auth.apiKey.name ?? \"X-API-Key\";\n return { [headerName]: auth.apiKey.value };\n }\n return {};\n }\n\n async request(options: HttpRequestOptions): Promise<HttpResponseRaw> {\n const fetchImpl = this.ctx.fetch ?? fetch;\n const url = new URL(options.path, this.ctx.baseUrl);\n\n if (options.query) {\n for (const [k, v] of Object.entries(options.query)) {\n if (v === undefined) continue;\n url.searchParams.set(k, String(v));\n }\n }\n\n const baseHeaders: Record<string, string> = {\n Accept: \"application/json\",\n ...(this.ctx.requestId ? { \"X-Request-Id\": this.ctx.requestId } : {}),\n ...this.resolveAuthHeader(),\n ...(options.headers ?? {})\n };\n\n const controller = new AbortController();\n const timeoutMs = this.ctx.timeoutMs ?? 15000;\n const t = setTimeout(() => controller.abort(), timeoutMs);\n\n const init: RequestInit = {\n method: options.method,\n headers: baseHeaders,\n signal: controller.signal\n };\n\n if (options.bodyJson !== undefined) {\n init.body = JSON.stringify(options.bodyJson);\n baseHeaders[\"Content-Type\"] = baseHeaders[\"Content-Type\"] ?? \"application/json\";\n }\n\n if (this.ctx.logDebug) {\n // Redact sensitive headers to prevent credential leakage in logs\n const SENSITIVE_HEADERS = ['authorization', 'x-api-key', 'cookie', 'x-auth-token'];\n const sanitizedHeaders = Object.fromEntries(\n Object.entries(baseHeaders).map(([k, v]) =>\n [k, SENSITIVE_HEADERS.includes(k.toLowerCase()) ? '[REDACTED]' : v]\n )\n );\n console.debug(\"[HttpClient] Request\", {\n url: url.toString(),\n method: options.method,\n headers: sanitizedHeaders,\n body: options.bodyJson\n });\n }\n\n try {\n const res = await fetchImpl(url.toString(), init);\n const headersObj = Object.fromEntries(res.headers.entries());\n\n let json: any | undefined;\n let text: string | undefined;\n const contentType = res.headers.get(\"content-type\") || \"\";\n\n if (contentType.includes(\"application/json\")) {\n try {\n json = await res.json();\n } catch {\n json = undefined;\n }\n } else {\n try {\n text = await res.text();\n } catch {\n text = undefined;\n }\n }\n\n if (this.ctx.logDebug) {\n console.debug(\"[HttpClient] Response\", {\n status: res.status,\n headers: headersObj,\n json,\n text\n });\n }\n\n return {\n status: res.status,\n headers: headersObj,\n json,\n text\n };\n } finally {\n clearTimeout(t);\n }\n }\n}\n"]}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
/**
|
|
3
|
-
* Shared output wrapper: all HTTP tools must return { status, headers, body }.
|
|
4
|
-
*/
|
|
5
|
-
export declare const HttpStatusSchema: z.ZodNumber;
|
|
6
|
-
export declare const HttpHeadersSchema: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
7
|
-
export declare const makeHttpOutputSchema: <TBody extends z.ZodTypeAny>(bodySchema: TBody) => z.ZodObject<{
|
|
8
|
-
status: z.ZodNumber;
|
|
9
|
-
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
10
|
-
body: TBody;
|
|
11
|
-
}, z.core.$strip>;
|
|
12
|
-
export type HttpOutput<TBody> = {
|
|
13
|
-
status: number;
|
|
14
|
-
headers?: Record<string, string>;
|
|
15
|
-
body: TBody;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Shared auth/context types for TS tools.
|
|
19
|
-
*/
|
|
20
|
-
export declare const AuthContextSchema: z.ZodObject<{
|
|
21
|
-
oauth2: z.ZodOptional<z.ZodObject<{
|
|
22
|
-
accessToken: z.ZodString;
|
|
23
|
-
idToken: z.ZodOptional<z.ZodString>;
|
|
24
|
-
claims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
25
|
-
}, z.core.$strip>>;
|
|
26
|
-
bearer: z.ZodOptional<z.ZodObject<{
|
|
27
|
-
token: z.ZodString;
|
|
28
|
-
}, z.core.$strip>>;
|
|
29
|
-
apiKey: z.ZodOptional<z.ZodObject<{
|
|
30
|
-
name: z.ZodOptional<z.ZodString>;
|
|
31
|
-
value: z.ZodString;
|
|
32
|
-
}, z.core.$strip>>;
|
|
33
|
-
}, z.core.$strip>;
|
|
34
|
-
export type AuthContext = z.infer<typeof AuthContextSchema>;
|
|
35
|
-
export declare const ExecuteContextSchema: z.ZodObject<{
|
|
36
|
-
baseUrl: z.ZodString;
|
|
37
|
-
auth: z.ZodObject<{
|
|
38
|
-
oauth2: z.ZodOptional<z.ZodObject<{
|
|
39
|
-
accessToken: z.ZodString;
|
|
40
|
-
idToken: z.ZodOptional<z.ZodString>;
|
|
41
|
-
claims: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
42
|
-
}, z.core.$strip>>;
|
|
43
|
-
bearer: z.ZodOptional<z.ZodObject<{
|
|
44
|
-
token: z.ZodString;
|
|
45
|
-
}, z.core.$strip>>;
|
|
46
|
-
apiKey: z.ZodOptional<z.ZodObject<{
|
|
47
|
-
name: z.ZodOptional<z.ZodString>;
|
|
48
|
-
value: z.ZodString;
|
|
49
|
-
}, z.core.$strip>>;
|
|
50
|
-
}, z.core.$strip>;
|
|
51
|
-
fetch: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodString, z.ZodAny], null>, z.ZodPromise<z.ZodAny>>>;
|
|
52
|
-
requestId: z.ZodOptional<z.ZodString>;
|
|
53
|
-
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
54
|
-
logDebug: z.ZodOptional<z.ZodBoolean>;
|
|
55
|
-
}, z.core.$strip>;
|
|
56
|
-
export type ExecuteContext = z.infer<typeof ExecuteContextSchema>;
|
|
57
|
-
/**
|
|
58
|
-
* Generic execute signature for TS tools.
|
|
59
|
-
*/
|
|
60
|
-
export type ToolExecute<I, B> = (args: {
|
|
61
|
-
input: I;
|
|
62
|
-
ctx: ExecuteContext;
|
|
63
|
-
}) => Promise<HttpOutput<B>>;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExecuteContextSchema = exports.AuthContextSchema = exports.makeHttpOutputSchema = exports.HttpHeadersSchema = exports.HttpStatusSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
/**
|
|
6
|
-
* Shared output wrapper: all HTTP tools must return { status, headers, body }.
|
|
7
|
-
*/
|
|
8
|
-
exports.HttpStatusSchema = zod_1.z.number().int().min(100).max(599);
|
|
9
|
-
exports.HttpHeadersSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.string());
|
|
10
|
-
const makeHttpOutputSchema = (bodySchema) => zod_1.z.object({
|
|
11
|
-
status: exports.HttpStatusSchema,
|
|
12
|
-
headers: exports.HttpHeadersSchema.optional(),
|
|
13
|
-
body: bodySchema,
|
|
14
|
-
});
|
|
15
|
-
exports.makeHttpOutputSchema = makeHttpOutputSchema;
|
|
16
|
-
/**
|
|
17
|
-
* Shared auth/context types for TS tools.
|
|
18
|
-
*/
|
|
19
|
-
exports.AuthContextSchema = zod_1.z.object({
|
|
20
|
-
oauth2: zod_1.z
|
|
21
|
-
.object({
|
|
22
|
-
accessToken: zod_1.z.string(),
|
|
23
|
-
idToken: zod_1.z.string().optional(),
|
|
24
|
-
claims: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
25
|
-
})
|
|
26
|
-
.optional(),
|
|
27
|
-
bearer: zod_1.z
|
|
28
|
-
.object({
|
|
29
|
-
token: zod_1.z.string(),
|
|
30
|
-
})
|
|
31
|
-
.optional(),
|
|
32
|
-
apiKey: zod_1.z
|
|
33
|
-
.object({
|
|
34
|
-
name: zod_1.z.string().optional(),
|
|
35
|
-
value: zod_1.z.string(),
|
|
36
|
-
})
|
|
37
|
-
.optional(),
|
|
38
|
-
});
|
|
39
|
-
exports.ExecuteContextSchema = zod_1.z.object({
|
|
40
|
-
baseUrl: zod_1.z.string().url(),
|
|
41
|
-
auth: exports.AuthContextSchema,
|
|
42
|
-
fetch: zod_1.z
|
|
43
|
-
.function({
|
|
44
|
-
input: zod_1.z.tuple([zod_1.z.string(), zod_1.z.any()]),
|
|
45
|
-
output: zod_1.z.promise(zod_1.z.any()),
|
|
46
|
-
})
|
|
47
|
-
.optional(),
|
|
48
|
-
requestId: zod_1.z.string().optional(),
|
|
49
|
-
timeoutMs: zod_1.z.number().int().positive().optional(),
|
|
50
|
-
logDebug: zod_1.z.boolean().optional(),
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=mcp-http-types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-http-types.js","sourceRoot":"","sources":["../../../../../src/templates/3rd-party-integration/src/mcp-http-types.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB;;GAEG;AAEU,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAE3D,MAAM,oBAAoB,GAAG,CAA6B,UAAiB,EAAE,EAAE,CACpF,OAAC,CAAC,MAAM,CAAC;IACP,MAAM,EAAE,wBAAgB;IACxB,OAAO,EAAE,yBAAiB,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,UAAU;CACjB,CAAC,CAAC;AALQ,QAAA,oBAAoB,wBAK5B;AAQL;;GAEG;AAEU,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,OAAC;SACN,MAAM,CAAC;QACN,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;QACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrD,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,OAAC;SACN,MAAM,CAAC;QACN,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;KAClB,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,OAAC;SACN,MAAM,CAAC;QACN,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;KAClB,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,IAAI,EAAE,yBAAiB;IACvB,KAAK,EAAE,OAAC;SACL,QAAQ,CAAC;QACR,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,OAAC,CAAC,OAAO,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC;KAC3B,CAAC;SACD,QAAQ,EAAE;IACb,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\n\n/**\n * Shared output wrapper: all HTTP tools must return { status, headers, body }.\n */\n\nexport const HttpStatusSchema = z.number().int().min(100).max(599);\nexport const HttpHeadersSchema = z.record(z.string(), z.string());\n\nexport const makeHttpOutputSchema = <TBody extends z.ZodTypeAny>(bodySchema: TBody) =>\n z.object({\n status: HttpStatusSchema,\n headers: HttpHeadersSchema.optional(),\n body: bodySchema,\n });\n\nexport type HttpOutput<TBody> = {\n status: number;\n headers?: Record<string, string>;\n body: TBody;\n};\n\n/**\n * Shared auth/context types for TS tools.\n */\n\nexport const AuthContextSchema = z.object({\n oauth2: z\n .object({\n accessToken: z.string(),\n idToken: z.string().optional(),\n claims: z.record(z.string(), z.unknown()).optional(),\n })\n .optional(),\n bearer: z\n .object({\n token: z.string(),\n })\n .optional(),\n apiKey: z\n .object({\n name: z.string().optional(),\n value: z.string(),\n })\n .optional(),\n});\n\nexport type AuthContext = z.infer<typeof AuthContextSchema>;\n\nexport const ExecuteContextSchema = z.object({\n baseUrl: z.string().url(),\n auth: AuthContextSchema,\n fetch: z\n .function({\n input: z.tuple([z.string(), z.any()]),\n output: z.promise(z.any()),\n })\n .optional(),\n requestId: z.string().optional(),\n timeoutMs: z.number().int().positive().optional(),\n logDebug: z.boolean().optional(),\n});\n\nexport type ExecuteContext = z.infer<typeof ExecuteContextSchema>;\n\n/**\n * Generic execute signature for TS tools.\n */\n\nexport type ToolExecute<I, B> = (args: { input: I; ctx: ExecuteContext }) => Promise<HttpOutput<B>>;\n"]}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { HttpOutput, ToolExecute } from "../mcp-http-types";
|
|
3
|
-
export declare const inputSchema: z.ZodObject<{
|
|
4
|
-
limit: z.ZodOptional<z.ZodNumber>;
|
|
5
|
-
query: z.ZodOptional<z.ZodString>;
|
|
6
|
-
}, z.core.$strict>;
|
|
7
|
-
export type Input = z.infer<typeof inputSchema>;
|
|
8
|
-
export declare const ItemSchema: z.ZodObject<{
|
|
9
|
-
id: z.ZodString;
|
|
10
|
-
name: z.ZodString;
|
|
11
|
-
type: z.ZodString;
|
|
12
|
-
}, z.core.$strict>;
|
|
13
|
-
export declare const BodySchema: z.ZodObject<{
|
|
14
|
-
items: z.ZodArray<z.ZodObject<{
|
|
15
|
-
id: z.ZodString;
|
|
16
|
-
name: z.ZodString;
|
|
17
|
-
type: z.ZodString;
|
|
18
|
-
}, z.core.$strict>>;
|
|
19
|
-
nextCursor: z.ZodNullable<z.ZodString>;
|
|
20
|
-
}, z.core.$strict>;
|
|
21
|
-
export type Body = z.infer<typeof BodySchema>;
|
|
22
|
-
export declare const outputSchema: z.ZodObject<{
|
|
23
|
-
status: z.ZodNumber;
|
|
24
|
-
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
25
|
-
body: z.ZodObject<{
|
|
26
|
-
items: z.ZodArray<z.ZodObject<{
|
|
27
|
-
id: z.ZodString;
|
|
28
|
-
name: z.ZodString;
|
|
29
|
-
type: z.ZodString;
|
|
30
|
-
}, z.core.$strict>>;
|
|
31
|
-
nextCursor: z.ZodNullable<z.ZodString>;
|
|
32
|
-
}, z.core.$strict>;
|
|
33
|
-
}, z.core.$strip>;
|
|
34
|
-
export type Output = HttpOutput<Body>;
|
|
35
|
-
/**
|
|
36
|
-
* Example tool: "example.list"
|
|
37
|
-
*
|
|
38
|
-
* - Replace path/method/logic with actual __OWNER__/__SERVICE__ API calls.
|
|
39
|
-
* - Demonstrates:
|
|
40
|
-
* - strict input validation
|
|
41
|
-
* - HTTP client with auth
|
|
42
|
-
* - typed body mapping
|
|
43
|
-
* - non-2xx error normalization
|
|
44
|
-
*/
|
|
45
|
-
export declare const execute: ToolExecute<Input, Body>;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.execute = exports.outputSchema = exports.BodySchema = exports.ItemSchema = exports.inputSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const mcp_http_types_1 = require("../mcp-http-types");
|
|
6
|
-
const http_client_1 = require("../http-client");
|
|
7
|
-
// MCP-visible input schema.
|
|
8
|
-
// Keep this in sync with tools/json/example.list.json -> input_schema.
|
|
9
|
-
exports.inputSchema = zod_1.z
|
|
10
|
-
.object({
|
|
11
|
-
limit: zod_1.z.number().int().min(1).max(1000).optional(),
|
|
12
|
-
query: zod_1.z.string().optional()
|
|
13
|
-
})
|
|
14
|
-
.strict();
|
|
15
|
-
// Body payload for success
|
|
16
|
-
exports.ItemSchema = zod_1.z
|
|
17
|
-
.object({
|
|
18
|
-
id: zod_1.z.string(),
|
|
19
|
-
name: zod_1.z.string(),
|
|
20
|
-
type: zod_1.z.string()
|
|
21
|
-
})
|
|
22
|
-
.strict();
|
|
23
|
-
exports.BodySchema = zod_1.z
|
|
24
|
-
.object({
|
|
25
|
-
items: zod_1.z.array(exports.ItemSchema),
|
|
26
|
-
nextCursor: zod_1.z.string().nullable()
|
|
27
|
-
})
|
|
28
|
-
.strict();
|
|
29
|
-
// HTTP wrapper output
|
|
30
|
-
exports.outputSchema = (0, mcp_http_types_1.makeHttpOutputSchema)(exports.BodySchema);
|
|
31
|
-
// Optional: error body type if you want to distinguish
|
|
32
|
-
const ErrorBodySchema = zod_1.z
|
|
33
|
-
.object({
|
|
34
|
-
error: zod_1.z.object({
|
|
35
|
-
code: zod_1.z.string().optional(),
|
|
36
|
-
message: zod_1.z.string()
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
.strip();
|
|
40
|
-
/**
|
|
41
|
-
* Example tool: "example.list"
|
|
42
|
-
*
|
|
43
|
-
* - Replace path/method/logic with actual __OWNER__/__SERVICE__ API calls.
|
|
44
|
-
* - Demonstrates:
|
|
45
|
-
* - strict input validation
|
|
46
|
-
* - HTTP client with auth
|
|
47
|
-
* - typed body mapping
|
|
48
|
-
* - non-2xx error normalization
|
|
49
|
-
*/
|
|
50
|
-
const execute = async ({ input, ctx }) => {
|
|
51
|
-
const ctxSafe = mcp_http_types_1.ExecuteContextSchema.parse(ctx);
|
|
52
|
-
const http = new http_client_1.HttpClient(ctxSafe);
|
|
53
|
-
// Construct path; you can also use claims from ctxSafe.auth.oauth2?.claims here.
|
|
54
|
-
const path = "/tenants/self/resources";
|
|
55
|
-
const res = await http.request({
|
|
56
|
-
method: "GET",
|
|
57
|
-
path,
|
|
58
|
-
query: {
|
|
59
|
-
limit: input.limit ?? 50,
|
|
60
|
-
query: input.query
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
// Treat non-2xx as an error: normalize upstream error details and throw.
|
|
64
|
-
if (res.status < 200 || res.status >= 300) {
|
|
65
|
-
const errorBody = ErrorBodySchema.safeParse(res.json ?? { error: { message: res.text ?? "Unknown error" } });
|
|
66
|
-
throw new Error(`Upstream error (${res.status}): ${errorBody.success ? errorBody.data.error.message : "Unknown error"}`);
|
|
67
|
-
}
|
|
68
|
-
const body = exports.BodySchema.parse({
|
|
69
|
-
items: Array.isArray(res.json?.items)
|
|
70
|
-
? res.json.items.map((it) => ({
|
|
71
|
-
id: String(it.id),
|
|
72
|
-
name: String(it.name),
|
|
73
|
-
type: String(it.type ?? "unknown")
|
|
74
|
-
}))
|
|
75
|
-
: [],
|
|
76
|
-
nextCursor: res.json?.nextCursor ?? null
|
|
77
|
-
});
|
|
78
|
-
return exports.outputSchema.parse({
|
|
79
|
-
status: res.status,
|
|
80
|
-
headers: res.headers,
|
|
81
|
-
body
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
exports.execute = execute;
|
|
85
|
-
//# sourceMappingURL=example.list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.list.js","sourceRoot":"","sources":["../../../../../../src/templates/3rd-party-integration/src/tools/example.list.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport {\n ExecuteContextSchema,\n HttpOutput,\n ToolExecute,\n makeHttpOutputSchema\n} from \"../mcp-http-types\";\nimport { HttpClient } from \"../http-client\";\n\n// MCP-visible input schema.\n// Keep this in sync with tools/json/example.list.json -> input_schema.\nexport const inputSchema = z\n .object({\n limit: z.number().int().min(1).max(1000).optional(),\n query: z.string().optional()\n })\n .strict();\n\nexport type Input = z.infer<typeof inputSchema>;\n\n// Body payload for success\nexport const ItemSchema = z\n .object({\n id: z.string(),\n name: z.string(),\n type: z.string()\n })\n .strict();\n\nexport const BodySchema = z\n .object({\n items: z.array(ItemSchema),\n nextCursor: z.string().nullable()\n })\n .strict();\n\nexport type Body = z.infer<typeof BodySchema>;\n\n// HTTP wrapper output\nexport const outputSchema = makeHttpOutputSchema(BodySchema);\nexport type Output = HttpOutput<Body>;\n\n// Optional: error body type if you want to distinguish\nconst ErrorBodySchema = z\n .object({\n error: z.object({\n code: z.string().optional(),\n message: z.string()\n })\n })\n .strip();\n\n/**\n * Example tool: \"example.list\"\n *\n * - Replace path/method/logic with actual __OWNER__/__SERVICE__ API calls.\n * - Demonstrates:\n * - strict input validation\n * - HTTP client with auth\n * - typed body mapping\n * - non-2xx error normalization\n */\nexport const execute: ToolExecute<Input, Body> = async ({ input, ctx }) => {\n const ctxSafe = ExecuteContextSchema.parse(ctx);\n const http = new HttpClient(ctxSafe);\n\n // Construct path; you can also use claims from ctxSafe.auth.oauth2?.claims here.\n const path = \"/tenants/self/resources\";\n\n const res = await http.request({\n method: \"GET\",\n path,\n query: {\n limit: input.limit ?? 50,\n query: input.query\n }\n });\n\n // Treat non-2xx as an error: normalize upstream error details and throw.\n if (res.status < 200 || res.status >= 300) {\n const errorBody = ErrorBodySchema.safeParse(\n res.json ?? { error: { message: res.text ?? \"Unknown error\" } }\n );\n throw new Error(\n `Upstream error (${res.status}): ${\n errorBody.success ? errorBody.data.error.message : \"Unknown error\"\n }`\n );\n }\n\n const body: Body = BodySchema.parse({\n items: Array.isArray(res.json?.items)\n ? res.json.items.map((it: any) => ({\n id: String(it.id),\n name: String(it.name),\n type: String(it.type ?? \"unknown\")\n }))\n : [],\n nextCursor: res.json?.nextCursor ?? null\n });\n\n return outputSchema.parse({\n status: res.status,\n headers: res.headers,\n body\n });\n};\n"]}
|
package/src/tsconfig.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../src/tsconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport { c } from './colors';\nimport { fileExists, readJSON, writeJSON } from '@frontmcp/utils';\n\nexport const REQUIRED_DECORATOR_FIELDS = {\n target: 'es2021',\n module: 'esnext',\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n strictFunctionTypes: true,\n moduleResolution: 'node',\n} as const;\n\nexport const RECOMMENDED_TSCONFIG = {\n compilerOptions: {\n target: REQUIRED_DECORATOR_FIELDS.target,\n module: REQUIRED_DECORATOR_FIELDS.module,\n emitDecoratorMetadata: REQUIRED_DECORATOR_FIELDS.emitDecoratorMetadata,\n experimentalDecorators: REQUIRED_DECORATOR_FIELDS.experimentalDecorators,\n strictFunctionTypes: REQUIRED_DECORATOR_FIELDS.strictFunctionTypes,\n moduleResolution: REQUIRED_DECORATOR_FIELDS.moduleResolution,\n strict: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n skipLibCheck: true,\n sourceMap: true,\n outDir: 'dist',\n rootDir: 'src',\n types: ['node', '@types/jest', '@frontmcp/testing'],\n },\n include: ['src/**/*'],\n} as const;\n\nexport function deepMerge<T extends Record<string, any>, U extends Record<string, any>>(base: T, patch: U): T & U {\n const out: Record<string, any> = { ...base };\n for (const [k, v] of Object.entries(patch)) {\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n out[k] = deepMerge(base[k] ?? {}, v as Record<string, any>);\n } else {\n out[k] = v;\n }\n }\n return out as T & U;\n}\n\nexport function ensureRequiredTsOptions(obj: Record<string, any>): Record<string, any> {\n const next = { ...obj };\n next.compilerOptions = { ...(next.compilerOptions || {}) };\n next.compilerOptions.target = REQUIRED_DECORATOR_FIELDS.target;\n next.compilerOptions.module = REQUIRED_DECORATOR_FIELDS.module;\n next.compilerOptions.emitDecoratorMetadata = REQUIRED_DECORATOR_FIELDS.emitDecoratorMetadata;\n next.compilerOptions.experimentalDecorators = REQUIRED_DECORATOR_FIELDS.experimentalDecorators;\n return next;\n}\n\nfunction normalizeStr(x: unknown): string | undefined {\n return typeof x === 'string' ? x.toLowerCase() : undefined;\n}\n\nexport function checkRequiredTsOptions(compilerOptions: Record<string, any> | undefined) {\n const issues: string[] = [];\n const ok: string[] = [];\n\n const target = normalizeStr(compilerOptions?.target);\n const moduleVal = normalizeStr(compilerOptions?.module);\n const edm = compilerOptions?.emitDecoratorMetadata;\n const ed = compilerOptions?.experimentalDecorators;\n\n if (target === REQUIRED_DECORATOR_FIELDS.target)\n ok.push(`compilerOptions.target = \"${REQUIRED_DECORATOR_FIELDS.target}\"`);\n else issues.push(`compilerOptions.target should be \"${REQUIRED_DECORATOR_FIELDS.target}\"`);\n\n if (moduleVal === REQUIRED_DECORATOR_FIELDS.module)\n ok.push(`compilerOptions.module = \"${REQUIRED_DECORATOR_FIELDS.module}\"`);\n else issues.push(`compilerOptions.module should be \"${REQUIRED_DECORATOR_FIELDS.module}\"`);\n\n if (edm === REQUIRED_DECORATOR_FIELDS.emitDecoratorMetadata) ok.push(`compilerOptions.emitDecoratorMetadata = true`);\n else issues.push(`compilerOptions.emitDecoratorMetadata should be true`);\n\n if (ed === REQUIRED_DECORATOR_FIELDS.experimentalDecorators) ok.push(`compilerOptions.experimentalDecorators = true`);\n else issues.push(`compilerOptions.experimentalDecorators should be true`);\n\n return { ok, issues };\n}\n\nexport async function runInit(baseDir?: string): Promise<void> {\n const cwd = baseDir ?? process.cwd();\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n const existing = await readJSON<Record<string, any>>(tsconfigPath);\n\n if (!existing) {\n console.log(c('yellow', `tsconfig.json not found — creating one in ${path.relative(process.cwd(), cwd) || '.'}.`));\n await writeJSON(tsconfigPath, RECOMMENDED_TSCONFIG);\n console.log(c('green', '✅ Created tsconfig.json with required decorator settings.'));\n return;\n }\n\n let merged = deepMerge(RECOMMENDED_TSCONFIG as any, existing);\n merged = ensureRequiredTsOptions(merged);\n\n await writeJSON(tsconfigPath, merged);\n console.log(c('green', '✅ tsconfig.json verified and updated (required decorator settings enforced).'));\n}\n"]}
|
package/src/utils/env.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/cli/src/utils/env.ts\n// CLI-specific environment loading utilities\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { c } from '../colors';\n\n/**\n * Parse a .env file content into key-value pairs.\n * Follows dotenv parsing rules:\n * - Supports KEY=value format\n * - Supports quoted values (single and double quotes)\n * - Supports # comments\n * - Trims whitespace\n * - Expands escape sequences in double-quoted values (\\n, \\r, \\t)\n *\n * @param content - Raw content of a .env file\n * @returns Record of key-value pairs\n */\nexport function parseEnvContent(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip empty lines and comments\n if (!trimmed || trimmed.startsWith('#')) {\n continue;\n }\n\n // Match KEY=value pattern (KEY can contain letters, numbers, underscores)\n const match = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_]*)=(.*)$/);\n if (match) {\n const key = match[1];\n let value = match[2].trim();\n const originalValue = value;\n\n // Handle quoted values\n if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n\n // Expand escape sequences in double-quoted values\n // Order matters: handle double-backslash first (as a placeholder),\n // then other escapes, then convert placeholder back\n if (originalValue.startsWith('\"')) {\n const PLACEHOLDER = '\\x00BACKSLASH\\x00';\n value = value\n .replace(/\\\\\\\\/g, PLACEHOLDER)\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(new RegExp(PLACEHOLDER, 'g'), '\\\\');\n }\n\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Load environment variables from .env files (synchronous).\n * Follows NestJS-style priority: .env.local overrides .env\n *\n * @param basePath - Base directory to resolve files from\n * @param envPath - Path to base .env file (relative to basePath)\n * @param localEnvPath - Path to local override file (relative to basePath)\n * @returns Record of merged environment variables\n */\nexport function loadEnvFilesSync(\n basePath = process.cwd(),\n envPath = '.env',\n localEnvPath = '.env.local',\n): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Load base .env file\n const envFile = path.resolve(basePath, envPath);\n if (fs.existsSync(envFile)) {\n const content = fs.readFileSync(envFile, 'utf8');\n Object.assign(result, parseEnvContent(content));\n }\n\n // Load .env.local (overrides base)\n const localFile = path.resolve(basePath, localEnvPath);\n if (fs.existsSync(localFile)) {\n const content = fs.readFileSync(localFile, 'utf8');\n Object.assign(result, parseEnvContent(content));\n }\n\n return result;\n}\n\n/**\n * Populate process.env with loaded values.\n * By default, does not override existing values.\n *\n * @param env - Environment variables to populate\n * @param override - Whether to override existing values (default: false)\n */\nexport function populateProcessEnv(env: Record<string, string>, override = false): void {\n for (const [key, value] of Object.entries(env)) {\n if (override || process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n}\n\n/**\n * Load environment variables for development.\n * Logs the number of loaded variables.\n *\n * @param cwd - Current working directory\n */\nexport function loadDevEnv(cwd: string): void {\n try {\n const env = loadEnvFilesSync(cwd, '.env', '.env.local');\n const count = Object.keys(env).length;\n\n if (count > 0) {\n populateProcessEnv(env, false);\n console.log(\n `${c('cyan', '[dev]')} loaded ${count} environment variable${count === 1 ? '' : 's'} from .env files`,\n );\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.warn(`${c('yellow', '[dev]')} warning: failed to load .env files: ${message}`);\n }\n}\n"]}
|
package/src/utils/fs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/utils/fs.ts"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,qCAAqC;;;AAgBrC,oCAsCC;;AApDD,mDAA6B;AAC7B,2BAAqC;AAqD5B,oFArDY,aAAG,OAqDZ;AApDZ,sCAA8B;AAC9B,2CAAuD;AAEvD,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,QAAiB;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,IAAA,kBAAU,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,MAAM,IAAA,kBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAA,gBAAQ,EAAoB,OAAO,CAAC,CAAC;QACvD,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3D,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,IAAI,MAAM,IAAA,kBAAU,EAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,IAAI,MAAM,IAAA,kBAAU,EAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,MAAM,IAAA,kBAAU,EAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEhD,MAAM,GAAG,GAAG;QACV,IAAA,UAAC,EAAC,KAAK,EAAE,sBAAsB,CAAC;QAChC,EAAE;QACF,eAAe;QACf,OAAO,OAAO,4BAA4B;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;QACrC,EAAE;QACF,+EAA+E;QAC/E,+BAA+B;QAC/B,oCAAoC;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC","sourcesContent":["// file: libs/cli/src/utils/fs.ts\n// CLI-specific file system utilities\n\nimport * as path from 'path';\nimport { promises as fsp } from 'fs';\nimport { c } from '../colors';\nimport { fileExists, readJSON } from '@frontmcp/utils';\n\nfunction tryCandidates(base: string): string[] {\n const exts = ['', '.ts', '.tsx', '.js', '.mjs', '.cjs'];\n return exts.map((ext) => base + ext);\n}\n\n/**\n * Resolve entry file for CLI commands.\n * CLI-specific: includes colored error messages and CLI usage hints.\n */\nexport async function resolveEntry(cwd: string, explicit?: string): Promise<string> {\n if (explicit) {\n const full = path.resolve(cwd, explicit);\n if (await fileExists(full)) return full;\n throw new Error(`Entry override not found: ${explicit}`);\n }\n\n const pkgPath = path.join(cwd, 'package.json');\n if (await fileExists(pkgPath)) {\n const pkg = await readJSON<{ main?: string }>(pkgPath);\n if (pkg && typeof pkg.main === 'string' && pkg.main.trim()) {\n const mainCandidates = tryCandidates(path.resolve(cwd, pkg.main));\n for (const p of mainCandidates) {\n if (await fileExists(p)) return p;\n }\n const asDir = path.resolve(cwd, pkg.main);\n const idxCandidates = tryCandidates(path.join(asDir, 'index'));\n for (const p of idxCandidates) {\n if (await fileExists(p)) return p;\n }\n }\n }\n\n const fallback = path.join(cwd, 'src', 'main.ts');\n if (await fileExists(fallback)) return fallback;\n\n const msg = [\n c('red', 'No entry file found.'),\n '',\n 'I looked for:',\n ` • ${pkgPath} with a valid \"main\" field`,\n ` • ${path.relative(cwd, fallback)}`,\n '',\n 'Please create an entry file (e.g. src/main.ts) or set \"main\" in package.json,',\n 'or run with an explicit path:',\n ` frontmcp dev --entry src/main.ts`,\n ].join('\\n');\n throw new Error(msg);\n}\n\nexport { fsp }; // re-export if needed in other modules\n"]}
|
package/src/utils/prompts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/utils/prompts.ts"],"names":[],"mappings":";;AASA,sBAGC;AAZD;;;;;;GAMG;AACH,IAAI,EAA+C,CAAC;AAE7C,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC,EAAE;QAAE,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["/**\n * Lazy-loader for @clack/prompts (ESM-only package).\n *\n * The CLI compiles as CJS, so a static `import` would compile to `require()`\n * and fail at runtime. This helper uses a dynamic `await import()` and caches\n * the module after first load.\n */\nlet _p: typeof import('@clack/prompts') | undefined;\n\nexport async function clack(): Promise<typeof import('@clack/prompts')> {\n if (!_p) _p = await import('@clack/prompts');\n return _p;\n}\n"]}
|
package/src/version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAGA,wCAIC;AAPD,2BAAgC;AAChC,+BAA0B;AAE1B,SAAgB,cAAc;IAC5B,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC","sourcesContent":["import {readFileSync} from 'fs';\nimport {join} from 'path';\n\nexport function getSelfVersion(): string {\n const pkgPath = join(__dirname, '../package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n}"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|