cyrus-cloudflare-tunnel-client 0.2.0-rc.5 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyrus-cloudflare-tunnel-client",
3
- "version": "0.2.0-rc.5",
3
+ "version": "0.2.1",
4
4
  "description": "Cloudflare tunnel client for receiving config updates and webhooks from cyrus-hosted",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,7 +0,0 @@
1
- import type { ApiResponse, ConfigureMcpPayload } from "../types.js";
2
- /**
3
- * Handle MCP server configuration
4
- * Writes individual MCP config files to ~/.cyrus/mcp-{slug}.json
5
- */
6
- export declare function handleConfigureMcp(payload: ConfigureMcpPayload, cyrusHome: string): Promise<ApiResponse>;
7
- //# sourceMappingURL=configureMcp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureMcp.d.ts","sourceRoot":"","sources":["../../src/handlers/configureMcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CA2EtB"}
@@ -1,104 +0,0 @@
1
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- /**
4
- * Handle MCP server configuration
5
- * Writes individual MCP config files to ~/.cyrus/mcp-{slug}.json
6
- */
7
- export async function handleConfigureMcp(payload, cyrusHome) {
8
- try {
9
- // Validate payload
10
- if (!payload.mcpServers || typeof payload.mcpServers !== "object") {
11
- return {
12
- success: false,
13
- error: "MCP configuration requires server definitions",
14
- details: "The mcpServers field must be an object containing server configurations.",
15
- };
16
- }
17
- const serverSlugs = Object.keys(payload.mcpServers);
18
- if (serverSlugs.length === 0) {
19
- return {
20
- success: false,
21
- error: "No MCP servers to configure",
22
- details: "At least one MCP server configuration must be provided.",
23
- };
24
- }
25
- // Ensure the .cyrus directory exists
26
- if (!existsSync(cyrusHome)) {
27
- mkdirSync(cyrusHome, { recursive: true });
28
- }
29
- const mcpFilesWritten = [];
30
- // Write each MCP server configuration to its own file
31
- for (const slug of serverSlugs) {
32
- const serverConfig = payload.mcpServers[slug];
33
- const mcpFilePath = join(cyrusHome, `mcp-${slug}.json`);
34
- // Perform environment variable substitution
35
- const processedConfig = performEnvSubstitution(serverConfig);
36
- // Write the config file
37
- try {
38
- const configData = {
39
- mcpServers: {
40
- [slug]: processedConfig,
41
- },
42
- };
43
- writeFileSync(mcpFilePath, JSON.stringify(configData, null, 2), "utf-8");
44
- mcpFilesWritten.push(mcpFilePath);
45
- }
46
- catch (error) {
47
- return {
48
- success: false,
49
- error: `Failed to save MCP server configuration for "${slug}"`,
50
- details: `Could not write to ${mcpFilePath}: ${error instanceof Error ? error.message : String(error)}`,
51
- };
52
- }
53
- }
54
- return {
55
- success: true,
56
- message: "MCP configuration files written successfully",
57
- data: {
58
- mcpFilesWritten,
59
- serversConfigured: serverSlugs,
60
- },
61
- };
62
- }
63
- catch (error) {
64
- return {
65
- success: false,
66
- error: "MCP server configuration failed",
67
- details: error instanceof Error ? error.message : String(error),
68
- };
69
- }
70
- }
71
- /**
72
- * Perform environment variable substitution on a config object
73
- * Replaces ${VAR_NAME} placeholders with values from the env map
74
- */
75
- function performEnvSubstitution(config) {
76
- if (!config)
77
- return config;
78
- // Get environment variables from the config
79
- const env = config.env || {};
80
- // Deep clone the config to avoid mutations
81
- const processed = JSON.parse(JSON.stringify(config));
82
- // Recursively process all string values
83
- function processValue(value) {
84
- if (typeof value === "string") {
85
- // Replace ${VAR_NAME} with the actual value from env
86
- return value.replace(/\$\{([^}]+)\}/g, (match, varName) => {
87
- return env[varName] || match;
88
- });
89
- }
90
- if (Array.isArray(value)) {
91
- return value.map(processValue);
92
- }
93
- if (typeof value === "object" && value !== null) {
94
- const result = {};
95
- for (const key of Object.keys(value)) {
96
- result[key] = processValue(value[key]);
97
- }
98
- return result;
99
- }
100
- return value;
101
- }
102
- return processValue(processed);
103
- }
104
- //# sourceMappingURL=configureMcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureMcp.js","sourceRoot":"","sources":["../../src/handlers/configureMcp.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { ApiResponse, CyrusConfigPayload } from "../types.js";
2
- /**
3
- * Handle Cyrus configuration update
4
- * Updates the ~/.cyrus/config.json file with the provided configuration
5
- */
6
- export declare function handleCyrusConfig(payload: CyrusConfigPayload, cyrusHome: string): Promise<ApiResponse>;
7
- /**
8
- * Read current Cyrus configuration
9
- */
10
- export declare function readCyrusConfig(cyrusHome: string): any;
11
- //# sourceMappingURL=cyrusConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyrusConfig.d.ts","sourceRoot":"","sources":["../../src/handlers/cyrusConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEnE;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CA2JtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAatD"}
@@ -1,161 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- /**
4
- * Handle Cyrus configuration update
5
- * Updates the ~/.cyrus/config.json file with the provided configuration
6
- */
7
- export async function handleCyrusConfig(payload, cyrusHome) {
8
- try {
9
- // Validate payload
10
- if (!payload.repositories || !Array.isArray(payload.repositories)) {
11
- return {
12
- success: false,
13
- error: "Configuration update requires repositories array",
14
- details: "The repositories field must be provided as an array, even if empty.",
15
- };
16
- }
17
- // Validate each repository has required fields
18
- for (const repo of payload.repositories) {
19
- if (!repo.id || !repo.name || !repo.repositoryPath || !repo.baseBranch) {
20
- const missingFields = [];
21
- if (!repo.id)
22
- missingFields.push("id");
23
- if (!repo.name)
24
- missingFields.push("name");
25
- if (!repo.repositoryPath)
26
- missingFields.push("repositoryPath");
27
- if (!repo.baseBranch)
28
- missingFields.push("baseBranch");
29
- return {
30
- success: false,
31
- error: "Repository configuration is incomplete",
32
- details: `Repository "${repo.name || "unknown"}" is missing required fields: ${missingFields.join(", ")}`,
33
- };
34
- }
35
- }
36
- const configPath = join(cyrusHome, "config.json");
37
- // Ensure the .cyrus directory exists
38
- const configDir = dirname(configPath);
39
- if (!existsSync(configDir)) {
40
- mkdirSync(configDir, { recursive: true });
41
- }
42
- // Build the config object with repositories and optional settings
43
- const repositories = payload.repositories.map((repo) => {
44
- const repoConfig = {
45
- id: repo.id,
46
- name: repo.name,
47
- repositoryPath: repo.repositoryPath,
48
- baseBranch: repo.baseBranch,
49
- };
50
- // Add optional Linear fields
51
- if (repo.linearWorkspaceId) {
52
- repoConfig.linearWorkspaceId = repo.linearWorkspaceId;
53
- }
54
- if (repo.linearToken) {
55
- repoConfig.linearToken = repo.linearToken;
56
- }
57
- // Set workspaceBaseDir (use provided or default to ~/.cyrus/workspaces)
58
- repoConfig.workspaceBaseDir =
59
- repo.workspaceBaseDir || join(cyrusHome, "workspaces");
60
- // Set isActive (defaults to true)
61
- repoConfig.isActive = repo.isActive !== false;
62
- // Optional arrays and objects
63
- if (repo.allowedTools && repo.allowedTools.length > 0) {
64
- repoConfig.allowedTools = repo.allowedTools;
65
- }
66
- if (repo.mcpConfigPath && repo.mcpConfigPath.length > 0) {
67
- repoConfig.mcpConfigPath = repo.mcpConfigPath;
68
- }
69
- if (repo.teamKeys) {
70
- repoConfig.teamKeys = repo.teamKeys;
71
- }
72
- else {
73
- repoConfig.teamKeys = [];
74
- }
75
- if (repo.labelPrompts && Object.keys(repo.labelPrompts).length > 0) {
76
- repoConfig.labelPrompts = repo.labelPrompts;
77
- }
78
- return repoConfig;
79
- });
80
- // Build complete config
81
- const config = {
82
- repositories,
83
- };
84
- // Add optional global settings
85
- if (payload.disallowedTools && payload.disallowedTools.length > 0) {
86
- config.disallowedTools = payload.disallowedTools;
87
- }
88
- if (payload.ngrokAuthToken) {
89
- config.ngrokAuthToken = payload.ngrokAuthToken;
90
- }
91
- if (payload.stripeCustomerId) {
92
- config.stripeCustomerId = payload.stripeCustomerId;
93
- }
94
- if (payload.defaultModel) {
95
- config.defaultModel = payload.defaultModel;
96
- }
97
- if (payload.defaultFallbackModel) {
98
- config.defaultFallbackModel = payload.defaultFallbackModel;
99
- }
100
- if (payload.global_setup_script) {
101
- config.global_setup_script = payload.global_setup_script;
102
- }
103
- // Backup existing config if requested
104
- if (payload.backupConfig && existsSync(configPath)) {
105
- try {
106
- const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
107
- const backupPath = join(cyrusHome, `config.backup-${timestamp}.json`);
108
- const existingConfig = readFileSync(configPath, "utf-8");
109
- writeFileSync(backupPath, existingConfig, "utf-8");
110
- }
111
- catch (backupError) {
112
- // Log but don't fail - backup is not critical
113
- console.warn(`Failed to backup config: ${backupError instanceof Error ? backupError.message : String(backupError)}`);
114
- }
115
- }
116
- // Write config file
117
- try {
118
- writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
119
- return {
120
- success: true,
121
- message: "Cyrus configuration updated successfully",
122
- data: {
123
- configPath,
124
- repositoriesCount: repositories.length,
125
- restartCyrus: payload.restartCyrus || false,
126
- },
127
- };
128
- }
129
- catch (error) {
130
- return {
131
- success: false,
132
- error: "Failed to save configuration file",
133
- details: `Could not write configuration to ${configPath}: ${error instanceof Error ? error.message : String(error)}`,
134
- };
135
- }
136
- }
137
- catch (error) {
138
- return {
139
- success: false,
140
- error: "Configuration update failed",
141
- details: error instanceof Error ? error.message : String(error),
142
- };
143
- }
144
- }
145
- /**
146
- * Read current Cyrus configuration
147
- */
148
- export function readCyrusConfig(cyrusHome) {
149
- const configPath = join(cyrusHome, "config.json");
150
- if (!existsSync(configPath)) {
151
- return { repositories: [] };
152
- }
153
- try {
154
- const data = readFileSync(configPath, "utf-8");
155
- return JSON.parse(data);
156
- }
157
- catch {
158
- return { repositories: [] };
159
- }
160
- }
161
- //# sourceMappingURL=cyrusConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyrusConfig.js","sourceRoot":"","sources":["../../src/handlers/cyrusConfig.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { ApiResponse, CyrusEnvPayload } from "../types.js";
2
- /**
3
- * Handle Cyrus environment variables update
4
- * Primarily used to update/provide the Claude API token
5
- */
6
- export declare function handleCyrusEnv(payload: CyrusEnvPayload, cyrusHome: string): Promise<ApiResponse>;
7
- //# sourceMappingURL=cyrusEnv.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyrusEnv.d.ts","sourceRoot":"","sources":["../../src/handlers/cyrusEnv.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE;;;GAGG;AACH,wBAAsB,cAAc,CACnC,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAwHtB"}
@@ -1,113 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- /**
4
- * Handle Cyrus environment variables update
5
- * Primarily used to update/provide the Claude API token
6
- */
7
- export async function handleCyrusEnv(payload, cyrusHome) {
8
- try {
9
- // Validate payload
10
- if (!payload || typeof payload !== "object") {
11
- return {
12
- success: false,
13
- error: "Environment variables update requires valid data",
14
- details: "Payload must be an object containing environment variable key-value pairs.",
15
- };
16
- }
17
- // Extract environment variables from payload
18
- // The payload may have a 'variables' key containing the env vars,
19
- // or the env vars may be directly in the payload
20
- const envVarsSource = payload.variables || payload;
21
- const envVars = Object.entries(envVarsSource).filter(([key, value]) => value !== undefined &&
22
- typeof value === "string" &&
23
- !["variables", "restartCyrus", "backupEnv"].includes(key));
24
- if (envVars.length === 0) {
25
- return {
26
- success: false,
27
- error: "No environment variables to update",
28
- details: "At least one environment variable must be provided in the request.",
29
- };
30
- }
31
- const envPath = join(cyrusHome, ".env");
32
- // Ensure the .cyrus directory exists
33
- const envDir = dirname(envPath);
34
- if (!existsSync(envDir)) {
35
- mkdirSync(envDir, { recursive: true });
36
- }
37
- // Read existing env file if it exists
38
- const existingEnv = {};
39
- if (existsSync(envPath)) {
40
- try {
41
- const content = readFileSync(envPath, "utf-8");
42
- const lines = content.split("\n");
43
- for (const line of lines) {
44
- const trimmed = line.trim();
45
- // Skip empty lines and comments
46
- if (!trimmed || trimmed.startsWith("#")) {
47
- continue;
48
- }
49
- const equalIndex = trimmed.indexOf("=");
50
- if (equalIndex > 0) {
51
- const key = trimmed.substring(0, equalIndex);
52
- const value = trimmed.substring(equalIndex + 1);
53
- existingEnv[key] = value;
54
- }
55
- }
56
- }
57
- catch {
58
- // Ignore errors reading existing file - we'll create a new one
59
- }
60
- }
61
- // Merge new variables (new values override existing ones)
62
- for (const [key, value] of envVars) {
63
- if (value !== undefined) {
64
- existingEnv[key] = value;
65
- }
66
- }
67
- // Build new env file content
68
- const envContent = Object.entries(existingEnv)
69
- .map(([key, value]) => `${key}=${value}`)
70
- .join("\n");
71
- // Backup existing env file if requested
72
- if (payload.backupEnv && existsSync(envPath)) {
73
- try {
74
- const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
75
- const backupPath = join(cyrusHome, `.env.backup-${timestamp}`);
76
- const existingEnvFile = readFileSync(envPath, "utf-8");
77
- writeFileSync(backupPath, existingEnvFile, "utf-8");
78
- }
79
- catch (backupError) {
80
- // Log but don't fail - backup is not critical
81
- console.warn(`Failed to backup env: ${backupError instanceof Error ? backupError.message : String(backupError)}`);
82
- }
83
- }
84
- // Write env file
85
- try {
86
- writeFileSync(envPath, `${envContent}\n`, "utf-8");
87
- return {
88
- success: true,
89
- message: "Environment variables updated successfully",
90
- data: {
91
- envPath,
92
- variablesUpdated: envVars.map(([key]) => key),
93
- restartCyrus: payload.restartCyrus || false,
94
- },
95
- };
96
- }
97
- catch (error) {
98
- return {
99
- success: false,
100
- error: "Failed to save environment variables",
101
- details: `Could not write to ${envPath}: ${error instanceof Error ? error.message : String(error)}`,
102
- };
103
- }
104
- }
105
- catch (error) {
106
- return {
107
- success: false,
108
- error: "Environment variables update failed",
109
- details: error instanceof Error ? error.message : String(error),
110
- };
111
- }
112
- }
113
- //# sourceMappingURL=cyrusEnv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyrusEnv.js","sourceRoot":"","sources":["../../src/handlers/cyrusEnv.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { ApiResponse, RepositoryPayload } from "../types.js";
2
- /**
3
- * Handle repository cloning or verification
4
- * - Clones repositories to ~/.cyrus/repos/<repo-name>
5
- * - If repository exists, verify it's a git repo and do nothing
6
- * - If repository doesn't exist, clone it to ~/.cyrus/repos/<repo-name>
7
- */
8
- export declare function handleRepository(payload: RepositoryPayload, cyrusHome: string): Promise<ApiResponse>;
9
- //# sourceMappingURL=repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/handlers/repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA4BlE;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CA+FtB"}
@@ -1,123 +0,0 @@
1
- import { exec } from "node:child_process";
2
- import { existsSync, mkdirSync } from "node:fs";
3
- import { basename, join } from "node:path";
4
- import { promisify } from "node:util";
5
- const execAsync = promisify(exec);
6
- /**
7
- * Check if a directory contains a git repository
8
- */
9
- function isGitRepository(path) {
10
- try {
11
- return existsSync(join(path, ".git"));
12
- }
13
- catch {
14
- return false;
15
- }
16
- }
17
- /**
18
- * Extract repository name from URL
19
- */
20
- function getRepoNameFromUrl(repoUrl) {
21
- // Handle URLs like: https://github.com/user/repo.git or git@github.com:user/repo.git
22
- const match = repoUrl.match(/\/([^/]+?)(\.git)?$/);
23
- if (match?.[1]) {
24
- return match[1];
25
- }
26
- // Fallback: use last part of URL
27
- return basename(repoUrl, ".git");
28
- }
29
- /**
30
- * Handle repository cloning or verification
31
- * - Clones repositories to ~/.cyrus/repos/<repo-name>
32
- * - If repository exists, verify it's a git repo and do nothing
33
- * - If repository doesn't exist, clone it to ~/.cyrus/repos/<repo-name>
34
- */
35
- export async function handleRepository(payload, cyrusHome) {
36
- try {
37
- // Validate payload
38
- if (!payload.repository_url || typeof payload.repository_url !== "string") {
39
- return {
40
- success: false,
41
- error: "Repository URL is required",
42
- details: "Please provide a valid Git repository URL (e.g., https://github.com/user/repo.git)",
43
- };
44
- }
45
- // Use repository name from payload or extract from URL
46
- const repoName = payload.repository_name || getRepoNameFromUrl(payload.repository_url);
47
- // Construct path within ~/.cyrus/repos
48
- const reposDir = join(cyrusHome, "repos");
49
- const repoPath = join(reposDir, repoName);
50
- // Ensure repos directory exists
51
- if (!existsSync(reposDir)) {
52
- try {
53
- mkdirSync(reposDir, { recursive: true });
54
- }
55
- catch (error) {
56
- return {
57
- success: false,
58
- error: "Failed to create repositories directory",
59
- details: `Could not create directory at ${reposDir}: ${error instanceof Error ? error.message : String(error)}`,
60
- };
61
- }
62
- }
63
- // Check if repository already exists
64
- if (existsSync(repoPath)) {
65
- // Verify it's a git repository
66
- if (isGitRepository(repoPath)) {
67
- return {
68
- success: true,
69
- message: "Repository already exists",
70
- data: {
71
- path: repoPath,
72
- name: repoName,
73
- action: "verified",
74
- },
75
- };
76
- }
77
- return {
78
- success: false,
79
- error: "Directory exists but is not a Git repository",
80
- details: `A non-Git directory already exists at ${repoPath}. Please remove it manually or choose a different repository name.`,
81
- };
82
- }
83
- // Clone the repository
84
- try {
85
- const cloneCmd = `git clone "${payload.repository_url}" "${repoPath}"`;
86
- await execAsync(cloneCmd);
87
- // Verify the clone was successful
88
- if (!isGitRepository(repoPath)) {
89
- return {
90
- success: false,
91
- error: "Repository clone verification failed",
92
- details: `Git clone command completed, but the cloned directory at ${repoPath} does not appear to be a valid Git repository.`,
93
- };
94
- }
95
- return {
96
- success: true,
97
- message: "Repository cloned successfully",
98
- data: {
99
- path: repoPath,
100
- name: repoName,
101
- repository_url: payload.repository_url,
102
- action: "cloned",
103
- },
104
- };
105
- }
106
- catch (error) {
107
- const errorMessage = error instanceof Error ? error.message : String(error);
108
- return {
109
- success: false,
110
- error: "Failed to clone repository",
111
- details: `Could not clone repository from ${payload.repository_url}: ${errorMessage}. Please verify the URL is correct and you have access to the repository.`,
112
- };
113
- }
114
- }
115
- catch (error) {
116
- return {
117
- success: false,
118
- error: "Repository operation failed",
119
- details: error instanceof Error ? error.message : String(error),
120
- };
121
- }
122
- }
123
- //# sourceMappingURL=repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/handlers/repository.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { ApiResponse, TestMcpPayload } from "../types.js";
2
- /**
3
- * Handle MCP connection test
4
- * Tests connectivity and configuration of an MCP server
5
- *
6
- * Note: This is a placeholder implementation. The actual MCP testing logic
7
- * would require integrating with the MCP SDK to test connections.
8
- */
9
- export declare function handleTestMcp(payload: TestMcpPayload): Promise<ApiResponse>;
10
- //# sourceMappingURL=testMcp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testMcp.d.ts","sourceRoot":"","sources":["../../src/handlers/testMcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,WAAW,CAAC,CAsEtB"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Handle MCP connection test
3
- * Tests connectivity and configuration of an MCP server
4
- *
5
- * Note: This is a placeholder implementation. The actual MCP testing logic
6
- * would require integrating with the MCP SDK to test connections.
7
- */
8
- export async function handleTestMcp(payload) {
9
- try {
10
- // Validate payload
11
- if (!payload.transportType) {
12
- return {
13
- success: false,
14
- error: "MCP test requires transport type",
15
- details: 'The transportType field is required and must be either "stdio" or "sse".',
16
- };
17
- }
18
- if (payload.transportType !== "stdio" && payload.transportType !== "sse") {
19
- return {
20
- success: false,
21
- error: "Invalid MCP transport type",
22
- details: `Transport type "${payload.transportType}" is not supported. Must be either "stdio" or "sse".`,
23
- };
24
- }
25
- // Validate transport-specific requirements
26
- if (payload.transportType === "stdio") {
27
- if (!payload.command) {
28
- return {
29
- success: false,
30
- error: "MCP stdio transport requires command",
31
- details: "The command field is required when using stdio transport type.",
32
- };
33
- }
34
- }
35
- else if (payload.transportType === "sse") {
36
- if (!payload.serverUrl) {
37
- return {
38
- success: false,
39
- error: "MCP SSE transport requires server URL",
40
- details: "The serverUrl field is required when using SSE transport type.",
41
- };
42
- }
43
- }
44
- // TODO: Implement actual MCP connection testing
45
- // This would involve:
46
- // 1. Creating an MCP client with the provided configuration
47
- // 2. Attempting to connect to the MCP server
48
- // 3. Listing available tools/resources
49
- // 4. Getting server info
50
- // 5. Returning the results
51
- return {
52
- success: true,
53
- message: "MCP connection test completed (placeholder implementation)",
54
- data: {
55
- transportType: payload.transportType,
56
- tools: [],
57
- serverInfo: {
58
- name: "placeholder",
59
- version: "0.0.0",
60
- protocol: "mcp/1.0",
61
- },
62
- note: "This is a placeholder response. Full MCP testing will be implemented in a future update.",
63
- },
64
- };
65
- }
66
- catch (error) {
67
- return {
68
- success: false,
69
- error: "MCP connection test failed",
70
- details: error instanceof Error ? error.message : String(error),
71
- };
72
- }
73
- }
74
- //# sourceMappingURL=testMcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testMcp.js","sourceRoot":"","sources":["../../src/handlers/testMcp.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,OAAuB;IAEvB,IAAI,CAAC;QACJ,mBAAmB;QACnB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kCAAkC;gBACzC,OAAO,EACN,0EAA0E;aAC3E,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YAC1E,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,4BAA4B;gBACnC,OAAO,EAAE,mBAAmB,OAAO,CAAC,aAAa,sDAAsD;aACvG,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,sCAAsC;oBAC7C,OAAO,EACN,gEAAgE;iBACjE,CAAC;YACH,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uCAAuC;oBAC9C,OAAO,EACN,gEAAgE;iBACjE,CAAC;YACH,CAAC;QACF,CAAC;QAED,gDAAgD;QAChD,sBAAsB;QACtB,4DAA4D;QAC5D,6CAA6C;QAC7C,uCAAuC;QACvC,yBAAyB;QACzB,2BAA2B;QAE3B,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4DAA4D;YACrE,IAAI,EAAE;gBACL,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE;oBACX,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,SAAS;iBACnB;gBACD,IAAI,EAAE,0FAA0F;aAChG;SACD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,4BAA4B;YACnC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACH,CAAC;AACF,CAAC"}