@apexmcp/cli 0.1.1 ā 0.1.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/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -11,8 +11,8 @@ import { existsSync as existsSync3 } from "fs";
|
|
|
11
11
|
import { resolve } from "path";
|
|
12
12
|
|
|
13
13
|
// src/utils/logger.ts
|
|
14
|
-
import { Logger } from "@apexmcp/logger";
|
|
15
|
-
var logger = new Logger();
|
|
14
|
+
import { LOG_LEVEL, Logger } from "@apexmcp/logger";
|
|
15
|
+
var logger = new Logger(LOG_LEVEL.DEBUG);
|
|
16
16
|
|
|
17
17
|
// src/utils/cli-io.ts
|
|
18
18
|
function isJsonMode(options) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/commands/deploy.ts","../src/utils/logger.ts","../src/utils/cli-io.ts","../src/utils/validate-mcp-project.ts","../src/utils/config.ts","../src/commands/deployments.ts","../src/commands/validate.ts","../src/commands/auth.ts","../src/commands/mcp-servers.ts","../src/commands/plugins.ts","../src/commands/mcp.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { deployCommand } from './commands/deploy';\nimport { listDeploymentsCommand, getDeploymentCommand, deleteDeploymentCommand, updateDeploymentCommand } from './commands/deployments';\nimport { validateCommand } from './commands/validate';\nimport { loginCommand, logoutCommand, whoamiCommand, configCommand } from './commands/auth';\nimport {\n listAvailableMcpServersCommand,\n listEnabledMcpServersCommand,\n enableMcpServerCommand,\n disableMcpServerCommand,\n getMcpServerCommand,\n} from './commands/mcp-servers';\nimport {\n listPluginSecretsCommand,\n setPluginSecretCommand,\n deletePluginSecretCommand,\n deletePluginCommand,\n} from './commands/plugins';\nimport {\n listToolsCommand,\n callToolCommand,\n listResourcesCommand,\n readResourceCommand,\n listResourceTemplatesCommand,\n} from './commands/mcp';\nimport { logger } from './utils/logger';\nimport { createRequire } from 'module';\n\nexport const program = new Command();\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json') as { version: string };\n\nprogram\n .name('apexmcp')\n .description('CLI tool for deploying MCP servers to ApexMCP')\n .version(version);\n\nprogram\n .command('deploy')\n .description('Deploy an MCP server')\n .argument('<project-dir>', 'Path to the MCP server project directory')\n .option('--env-file <file>', 'Environment variables file')\n .option('--domain <domain>', 'Custom domain for deployment')\n .option(\n '--url-strategy <strategy>',\n 'URL generation strategy (readable, obscure, timestamp-only, random)',\n 'readable'\n )\n .option(\n '--project-path <path>',\n 'Project identifier path (stable slug used by the deploy service)'\n )\n .option('--project-name <name>', 'Project name for deployment')\n .option('--entry-point <file>', 'Explicit entry point file (overrides auto-detection)')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deployCommand);\n\nprogram\n .command('list')\n .description('List all deployments')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listDeploymentsCommand);\n\nprogram\n .command('status')\n .description('Get deployment status')\n .argument('<deployment-name>', 'Deployment name')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(getDeploymentCommand);\n\nprogram\n .command('update')\n .description('Update deployment properties')\n .argument('<deployment-name>', 'Deployment name')\n .option('--name <name>', 'Update deployment name')\n .option('--domain <domain>', 'Update deployment domain')\n .option('--env-file <file>', 'Update environment variables from file')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(updateDeploymentCommand);\n\nprogram\n .command('delete')\n .description('Delete a deployment')\n .argument('<deployment-name>', 'Deployment name')\n .option('--force', 'Skip confirmation prompt')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deleteDeploymentCommand);\n\nprogram\n .command('validate')\n .description('Validate an MCP project')\n .argument('<project-path>', 'Path to the MCP server project')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint for API validation (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(validateCommand);\n\n// Authentication commands\nprogram\n .command('login')\n .description('Authenticate with ApexMCP')\n .option('--token <token>', 'Direct JWT token authentication')\n .option('--email <email>', 'Email for authentication')\n .option('--password <password>', 'Password for authentication')\n .option(\n '--endpoint <url>',\n 'Core service endpoint',\n 'https://core.apexmcp.dev'\n )\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(loginCommand);\n\nprogram\n .command('logout')\n .description('Clear authentication credentials')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(logoutCommand);\n\nprogram\n .command('whoami')\n .description('Show current authentication status and configuration')\n .option(\n '--endpoint <url>',\n 'Core service endpoint',\n 'https://core.apexmcp.dev'\n )\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(whoamiCommand);\n\n// MCP Server management commands\nprogram\n .command('servers')\n .description('List available MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listAvailableMcpServersCommand);\n\nprogram\n .command('servers:enabled')\n .description('List enabled MCP servers for your organization')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listEnabledMcpServersCommand);\n\nprogram\n .command('servers:enable')\n .description('Enable an MCP server for your organization')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(enableMcpServerCommand);\n\nprogram\n .command('servers:disable')\n .description('Disable an MCP server for your organization')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(disableMcpServerCommand);\n\nprogram\n .command('servers:info')\n .description('Get detailed information about an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(getMcpServerCommand);\n\n// Plugin/Secret management commands\nprogram\n .command('secrets')\n .description('List secrets for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listPluginSecretsCommand);\n\nprogram\n .command('secrets:set')\n .description('Set a secret for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .argument('<secret-key>', 'Secret key')\n .argument('<secret-value>', 'Secret value')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(setPluginSecretCommand);\n\nprogram\n .command('secrets:delete')\n .description('Delete a secret for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .argument('<secret-key>', 'Secret key')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deletePluginSecretCommand);\n\nprogram\n .command('plugins:delete')\n .description('Delete an entire plugin configuration')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deletePluginCommand);\n\n// MCP interaction commands\nprogram\n .command('tools')\n .description('List available tools from enabled MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listToolsCommand);\n\nprogram\n .command('tools:call')\n .description('Call a tool with specified parameters')\n .argument('<tool-name>', 'Name of the tool to call')\n .argument('<params-json>', 'Tool parameters as JSON string')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(callToolCommand);\n\nprogram\n .command('resources')\n .description('List available resources from enabled MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listResourcesCommand);\n\nprogram\n .command('resources:read')\n .description('Read a specific resource')\n .argument('<resource-uri>', 'URI of the resource to read')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(readResourceCommand);\n\nprogram\n .command('resources:templates')\n .description('List available resource templates')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listResourceTemplatesCommand);\n\n// Configuration command\nprogram\n .command('config')\n .description('Manage CLI configuration')\n .argument('<action>', 'Action: get, set <key> <value>, reset')\n .argument('[key]', 'Configuration key (for set action)')\n .argument('[value]', 'Configuration value (for set action)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action((action: string, key?: string, value?: string, options?: any) => {\n configCommand(action, key, value, options);\n });\n\nexport function setupProgram(): void {\n // Disable exit override during testing to prevent process termination\n if (!process.env.NODE_ENV?.includes('test')) {\n program.exitOverride();\n }\n}\n\nexport function runMain(): void {\n try {\n program.parse();\n } catch (error) {\n logger.error(\n 'CLI Error:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\nsetupProgram();\nrunMain();","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { logger as defaultLogger } from '../utils/logger';\nimport { createLogger, isJsonMode, withStdoutSuppressed, type CliLogger } from '../utils/cli-io';\nimport { loadEnvFile } from '../utils/load-env-file';\nimport { validateMCPProject } from '../utils/validate-mcp-project';\nimport { configManager } from '../utils/config';\n\nexport interface DeployOptions {\n envFile?: string;\n domain?: string;\n urlStrategy?: string;\n /**\n * Stable identifier sent to the deploy service as `projectPath`.\n * This is typically a slug like `my-mcp-server`.\n */\n projectPath?: string;\n /**\n * Human-readable name shown in dashboards, sent as `projectName`.\n */\n projectName?: string;\n /**\n * Explicit entry point file (relative to project root).\n */\n entryPoint?: string;\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\ninterface DeployResponse {\n success: boolean;\n denoDeploymentId?: string;\n deployment?: {\n id: string;\n status: 'failed' | 'pending' | 'success';\n domains?: string[];\n tier: 'free' | 'pro' | 'enterprise';\n };\n urls?: {\n primary: string;\n apexmcp?: string;\n };\n project?: {\n id: string;\n name: string;\n };\n domainAttachment?: {\n domainAttached: boolean;\n rootDomainVerified: boolean;\n attachedDomains: string[];\n note: string;\n };\n databaseRecord?: {\n id: string;\n generatedDomain: string;\n pseudoDomain: string;\n };\n error?: string;\n}\n\ninterface ProjectData {\n entryPoint: string;\n files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>;\n}\n\ninterface DeploymentData {\n projectIdentifier: string;\n entryPoint: string;\n envVars: Record<string, string>;\n formData: FormData;\n}\n\n\nexport class DeployService {\n constructor(\n private readonly fs: {\n existsSync: (path: string) => boolean;\n readFileSync?: (path: string) => string;\n } = { existsSync },\n private readonly path: {\n resolve: (path: string) => string;\n } = { resolve },\n private readonly envLoader: {\n loadEnvFile: (file: string) => Promise<Record<string, string>>;\n } = { loadEnvFile },\n private readonly validator: {\n validateMCPProject: (path: string) => Promise<ProjectData>;\n } = { validateMCPProject },\n private readonly fetchClient: {\n fetch: (url: string, options?: RequestInit) => Promise<Response>;\n } = { fetch: global.fetch },\n private readonly log: CliLogger = defaultLogger\n ) {}\n\n validateProjectPath(projectPath: string): string {\n const resolvedPath = this.path.resolve(projectPath);\n if (!this.fs.existsSync(resolvedPath)) {\n throw new Error(`Project path does not exist: ${resolvedPath}`);\n }\n return resolvedPath;\n }\n\n async validateProjectStructure(projectPath: string): Promise<ProjectData> {\n return await this.validator.validateMCPProject(projectPath);\n }\n\n async loadEnvironmentVariables(\n envFile?: string\n ): Promise<Record<string, string>> {\n if (!envFile) {\n return {};\n }\n\n return await this.envLoader.loadEnvFile(envFile);\n }\n\n prepareDeploymentData(\n resolvedPath: string,\n projectData: ProjectData,\n envVars: Record<string, string>,\n options: DeployOptions\n ): DeploymentData {\n const formData = new FormData();\n const projectIdentifier =\n options.projectPath || resolvedPath.split('/').pop() || 'unnamed-project';\n\n formData.append('projectPath', projectIdentifier);\n\n const effectiveEntryPoint = options.entryPoint || projectData.entryPoint;\n formData.append('entryPoint', effectiveEntryPoint);\n\n if (options.domain) {\n formData.append('domain', options.domain);\n }\n\n if (options.urlStrategy) {\n formData.append('urlStrategy', options.urlStrategy);\n }\n\n if (options.projectName) {\n formData.append('projectName', options.projectName);\n }\n\n // Add environment variables\n if (Object.keys(envVars).length > 0) {\n const envContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n');\n formData.append(\n 'envFile',\n new Blob([envContent], { type: 'text/plain' }),\n 'env'\n );\n }\n\n // Add project files\n for (const [filename, fileData] of Object.entries(projectData.files)) {\n const mimeType = fileData.encoding === 'base64' ? 'application/octet-stream' : 'text/plain';\n formData.append(\n 'files',\n new Blob([fileData.content], { type: mimeType }),\n filename\n );\n }\n\n return {\n projectIdentifier,\n entryPoint: effectiveEntryPoint,\n envVars,\n formData,\n };\n }\n\n async executeDeployment(\n endpoint: string,\n formData: FormData,\n token?: string\n ): Promise<DeployResponse> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Start the deployment\n this.log.info('š¦ Initiating deployment...');\n const response = await this.fetchClient.fetch(`${endpoint}/api/deploy`, {\n method: 'POST',\n body: formData,\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Deployment failed: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as DeployResponse;\n\n // If deployment has a Deno deployment ID and is not immediately successful, monitor it\n if (result.denoDeploymentId && result.deployment?.status !== 'success') {\n this.log.info('š Monitoring deployment progress...');\n const monitorResult = await this.monitorDeployment(endpoint, result.denoDeploymentId, token);\n\n // If deployment failed, show error details\n if (monitorResult.status === 'failed') {\n this.log.error('ā Build failed - check the logs above for error details');\n // Don't throw here - let the response handler deal with the failed result\n }\n }\n\n return result;\n }\n\n /**\n * Monitor deployment progress with real-time logs and status updates\n */\n private async monitorDeployment(\n endpoint: string,\n deploymentId: string,\n token?: string\n ): Promise<{ status: string; logs: string[] }> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n let lastStatus = 'pending';\n const collectedLogs: string[] = [];\n let buildLogsReceived = 0;\n\n // Monitor for up to 5 minutes\n const maxWaitTime = 5 * 60 * 1000; // 5 minutes\n const pollInterval = 2000; // 2 seconds\n const startTime = Date.now();\n\n while (Date.now() - startTime < maxWaitTime) {\n try {\n // Get current deployment status\n const statusResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/status`,\n { headers }\n );\n\n if (statusResponse.ok) {\n const statusData = (await statusResponse.json()) as any;\n const currentStatus = statusData?.status?.status;\n\n if (currentStatus !== lastStatus) {\n this.log.info(`š Deployment status: ${currentStatus}`);\n lastStatus = currentStatus;\n }\n\n // Check if deployment is complete\n if (currentStatus === 'success') {\n this.log.info('ā
Deployment completed successfully!');\n return { status: currentStatus, logs: collectedLogs };\n } else if (currentStatus === 'failed') {\n this.log.error('ā Deployment failed!');\n // For failed deployments, try to get build logs even if not collected yet\n if (collectedLogs.length === 0) {\n // Try one more time to get build logs\n try {\n const logsResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/logs/build`,\n { headers }\n );\n if (logsResponse.ok) {\n const logsData = (await logsResponse.json()) as any;\n if (logsData?.logs && Array.isArray(logsData.logs)) {\n logsData.logs.forEach((log: any) => {\n const logMessage = `${log.level.toUpperCase()}: ${log.message}`;\n collectedLogs.push(logMessage);\n this.log.error(`š“ ${log.message}`);\n });\n }\n }\n } catch (error) {\n this.log.debug('Could not fetch build logs for failed deployment', error);\n }\n }\n\n if (collectedLogs.length > 0) {\n this.log.info('š Build logs:');\n collectedLogs.forEach(log => this.log.info(` ${log}`));\n } else {\n this.log.info('š No build logs available');\n }\n return { status: currentStatus, logs: collectedLogs };\n }\n }\n\n // Get build logs\n const logsResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/logs/build?since=${new Date(Date.now() - 30000).toISOString()}`,\n { headers }\n );\n\n if (logsResponse.ok) {\n const logsData = (await logsResponse.json()) as any;\n if (logsData?.logs && Array.isArray(logsData.logs)) {\n // Show new logs and collect them\n for (const log of logsData.logs) {\n const logMessage = `${log.level.toUpperCase()}: ${log.message}`;\n collectedLogs.push(logMessage);\n\n if (log.level === 'error') {\n this.log.error(`š“ ${log.message}`);\n } else if (log.level === 'warn') {\n this.log.warn(`š” ${log.message}`);\n } else {\n this.log.info(`ā¹ļø ${log.message}`);\n }\n }\n }\n }\n\n } catch (error) {\n // Continue monitoring despite errors\n this.log.debug('Monitoring error (continuing):', error);\n }\n\n // Wait before next poll\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n }\n\n if (Date.now() - startTime >= maxWaitTime) {\n this.log.warn('ā° Deployment monitoring timed out, but deployment may still be in progress');\n return { status: 'timeout', logs: collectedLogs };\n }\n\n return { status: lastStatus, logs: collectedLogs };\n }\n\n async handleResponse(\n result: DeployResponse,\n options: DeployOptions\n ): Promise<void> {\n const outputJson = isJsonMode(options);\n\n if (outputJson) {\n // Output JSON for CI/CD consumption\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result));\n } else {\n // Human-readable output for CLI users\n if (result.success && result.urls && result.deployment) {\n this.log.info('š Deployment successful!');\n this.log.info(`š URL: ${result.urls.primary}`);\n this.log.info(`š Deployment ID: ${result.deployment.id}`);\n this.log.info(`š Status: ${result.deployment.status}`);\n\n if (result.project) {\n this.log.info(`šļø Project: ${result.project.name}`);\n }\n\n if (result.domainAttachment) {\n this.log.info(`š Domain attachment: ${result.domainAttachment.note}`);\n }\n\n this.log.info('\\nš Next steps:');\n this.log.info('1. Test your MCP server at the URLs above');\n this.log.info('2. Configure your MCP client to connect to this endpoint');\n this.log.info('3. Monitor deployment status if needed');\n } else if (result.error) {\n this.log.error('ā Deployment failed:', result.error);\n } else {\n this.log.error('ā Deployment failed: Unknown error');\n }\n }\n }\n\n async deploy(projectPath: string, options: DeployOptions): Promise<void> {\n try {\n this.log.info('š Starting MCP server deployment...');\n this.log.info(`š Project directory: ${projectPath}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions: DeployOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Validate project path\n const resolvedPath = this.validateProjectPath(projectPath);\n\n // Validate MCP project structure\n const projectData = await withStdoutSuppressed(isJsonMode(options), () =>\n this.validateProjectStructure(resolvedPath)\n );\n\n // Allow explicit entry point override for CI usage.\n // If the validator returns a bundle-only project (e.g. main.ts) and the override doesn't\n // exist in packaged files, fail early with a clear error.\n if (options.entryPoint) {\n const override = options.entryPoint.trim();\n if (!override) {\n throw new Error('--entry-point cannot be empty');\n }\n if (!projectData.files[override]) {\n const overridePath = `${resolvedPath}/${override}`;\n if (!this.fs.existsSync(overridePath)) {\n throw new Error(\n `Entry point override not found in packaged files and does not exist on disk: ${override}`\n );\n }\n // If it exists on disk but was omitted by validator, that's unexpected; require it to be included.\n throw new Error(\n `Entry point override exists on disk but was not included in packaged files: ${override}. ` +\n `Ensure it is reachable by your project config (deno.json/package.json) or use the auto-detected entry point.`\n );\n }\n projectData.entryPoint = override;\n }\n\n this.log.info(`ā
Entry point: ${projectData.entryPoint}`);\n\n // Load environment variables\n const envVars = await this.loadEnvironmentVariables(options.envFile);\n if (options.envFile) {\n this.log.info(\n `š Loading environment variables from: ${options.envFile}`\n );\n this.log.info(\n `ā
Loaded ${Object.keys(envVars).length} environment variables`\n );\n }\n\n // Prepare deployment data\n const deploymentData = this.prepareDeploymentData(\n resolvedPath,\n projectData,\n envVars,\n effectiveOptions\n );\n\n // Execute deployment\n this.log.info('š Deploying to ApexMCP...');\n const result = await this.executeDeployment(\n effectiveOptions.endpoint!,\n deploymentData.formData,\n effectiveOptions.token\n );\n\n // Handle response (now async for mapping creation)\n await this.handleResponse(result, effectiveOptions);\n } catch (error) {\n this.log.error(\n 'ā Deployment failed:',\n error instanceof Error ? error.message : String(error)\n );\n throw error; // Re-throw so caller can handle exit\n }\n }\n}\n\n// Backward compatibility wrapper\nexport async function deployCommand(\n projectPath: string,\n options: DeployOptions\n): Promise<void> {\n const service = new DeployService(\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n createLogger(options)\n );\n try {\n await service.deploy(projectPath, options);\n } catch (error) {\n const log = createLogger(options);\n log.error(\n 'Deployment failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { LOG_LEVEL, Logger } from \"@apexmcp/logger\";\n\nexport const logger = new Logger();","import { logger as defaultLogger } from './logger';\n\nexport type CliLogger = {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n};\n\nexport function isJsonMode(options?: { json?: boolean }): boolean {\n return (\n !!options?.json ||\n process.env.CI === 'true' ||\n process.env.GITHUB_ACTIONS === 'true'\n );\n}\n\nexport function createLogger(options?: { json?: boolean }): CliLogger {\n if (isJsonMode(options)) {\n return {\n debug: () => {},\n info: () => {},\n warn: (message: string, ...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error(message, ...args);\n },\n error: (message: string, ...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error(message, ...args);\n },\n };\n }\n\n return defaultLogger;\n}\n\nexport function withStdoutSuppressed<T>(enabled: boolean, fn: () => T): T {\n if (!enabled) return fn();\n\n // Ensure absolutely nothing pollutes stdout in CI/--json mode.\n const originalLog = console.log;\n const originalInfo = console.info;\n const originalDebug = console.debug;\n\n try {\n console.log = () => {};\n console.info = () => {};\n console.debug = () => {};\n return fn();\n } finally {\n console.log = originalLog;\n console.info = originalInfo;\n console.debug = originalDebug;\n }\n}\n\n\n","import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { execSync } from 'node:child_process';\n\n// Binary file extensions that should be base64 encoded\nconst BINARY_EXTENSIONS = new Set([\n '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg',\n '.woff', '.woff2', '.ttf', '.eot',\n '.mp3', '.mp4', '.avi', '.mov', '.wmv',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx',\n '.zip', '.tar', '.gz', '.7z', '.rar',\n '.exe', '.dll', '.so', '.dylib',\n]);\n\nfunction isBinaryFile(filename: string): boolean {\n const ext = filename.toLowerCase().substring(filename.lastIndexOf('.'));\n return BINARY_EXTENSIONS.has(ext);\n}\n\nfunction encodeFileContent(filename: string, buffer: Buffer): { content: string; encoding: 'utf-8' | 'base64' } {\n if (isBinaryFile(filename)) {\n // For binary files, base64 encode the raw bytes\n return {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n } else {\n // For text files, try to decode as UTF-8\n try {\n return {\n content: buffer.toString('utf-8'),\n encoding: 'utf-8'\n };\n } catch (error) {\n // If UTF-8 decoding fails, treat as binary\n return {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n}\n\n/**\n * Smart deployment bundle creation that respects project build processes\n */\nasync function createDeploymentBundleSmart(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n console.log('š Starting smart deployment bundling...');\n\n // Strategy 1: Try to build the project first\n const buildResult = await tryBuildProject(projectPath);\n if (buildResult.success && buildResult.outputPath) {\n console.log('š¦ Using built artifact for bundling');\n const bundleResult = await bundleBuiltArtifactSmart(buildResult.outputPath, projectPath);\n if (bundleResult.success) {\n return bundleResult;\n }\n console.log('ā ļø Built artifact bundling failed, trying source bundling');\n }\n\n // Strategy 2: Bundle source with proper Deno configuration\n console.log('š¦ Attempting source bundling with Deno configuration');\n const sourceBundleResult = await bundleSourceWithDenoConfig(projectPath, entryPoint);\n if (sourceBundleResult.success) {\n return sourceBundleResult;\n }\n\n // Strategy 3: Last resort - copy source directly\n console.log('ā ļø Source bundling failed, falling back to direct source copy');\n return await copySourceDirectlySmart(projectPath, entryPoint);\n}\n\n/**\n * Try to build the project using detected build scripts\n */\nasync function tryBuildProject(projectPath: string): Promise<{ success: boolean; outputPath?: string; errors: string[] }> {\n // Check for package.json build script\n const packageJsonPath = join(projectPath, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.scripts?.build) {\n console.log(`šØ Running npm build script: ${packageJson.scripts.build}`);\n execSync('npm run build', {\n cwd: projectPath,\n stdio: 'inherit',\n env: { ...process.env, NODE_ENV: 'production' }\n });\n\n // Check for common build outputs\n const possibleOutputs = ['dist/main.ts', 'dist/index.ts', 'build/main.ts', 'build/index.ts'];\n for (const output of possibleOutputs) {\n const outputPath = join(projectPath, output);\n if (existsSync(outputPath)) {\n return { success: true, outputPath, errors: [] };\n }\n }\n }\n } catch (error) {\n console.log(`ā ļø Build script failed: ${(error as Error).message}`);\n }\n }\n\n // Check for deno.json tasks\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const denoConfigPath = existsSync(denoJsonPath) ? denoJsonPath : existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (denoConfigPath) {\n try {\n const denoConfig = JSON.parse(readFileSync(denoConfigPath, 'utf-8'));\n if (denoConfig.tasks?.build) {\n console.log(`šØ Running deno task build: ${denoConfig.tasks.build}`);\n execSync('deno task build', {\n cwd: projectPath,\n stdio: 'inherit',\n env: { ...process.env, NODE_ENV: 'production' }\n });\n\n // Check for build outputs\n const possibleOutputs = ['dist/main.ts', 'dist/index.ts'];\n for (const output of possibleOutputs) {\n const outputPath = join(projectPath, output);\n if (existsSync(outputPath)) {\n return { success: true, outputPath, errors: [] };\n }\n }\n }\n } catch (error) {\n console.log(`ā ļø Deno build task failed: ${(error as Error).message}`);\n }\n }\n\n return { success: false, errors: ['No build script found or build failed'] };\n}\n\n/**\n * Bundle built artifact with proper Deno configuration\n */\nasync function bundleBuiltArtifactSmart(\n artifactPath: string,\n projectPath: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n const denoConfig = loadDenoConfigForBundling(projectPath);\n const permissions = inferDenoPermissions(projectPath);\n\n const bundleArgs = [\n 'deno bundle',\n '--quiet',\n '--allow-import',\n ...denoConfig.configArgs,\n artifactPath\n ];\n\n console.log(`š¦ Bundling built artifact: ${artifactPath}`);\n const bundleCmd = bundleArgs.join(' ');\n const bundledCode = execSync(bundleCmd, {\n cwd: projectPath,\n encoding: 'utf-8',\n stdio: 'pipe'\n });\n\n console.log(`ā
Successfully bundled ${bundledCode.length} characters from built artifact`);\n\n return {\n success: true,\n code: bundledCode,\n files: {\n 'main.ts': {\n content: bundledCode,\n encoding: 'utf-8'\n }\n },\n errors: [],\n method: 'built-artifact'\n };\n } catch (error) {\n console.log(`ā ļø Built artifact bundling failed: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'built-artifact'\n };\n }\n}\n\n/**\n * Bundle source with proper Deno configuration\n */\nasync function bundleSourceWithDenoConfig(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n const denoConfig = loadDenoConfigForBundling(projectPath);\n const permissions = inferDenoPermissions(projectPath);\n\n const bundleArgs = [\n 'deno bundle',\n '--quiet',\n '--allow-import',\n ...denoConfig.configArgs,\n entryPoint\n ];\n\n console.log(`š¦ Bundling source with Deno config: ${entryPoint}`);\n const bundleCmd = bundleArgs.join(' ');\n const bundledCode = execSync(bundleCmd, {\n cwd: projectPath,\n encoding: 'utf-8',\n stdio: 'pipe'\n });\n\n console.log(`ā
Successfully bundled ${bundledCode.length} characters from source`);\n\n return {\n success: true,\n code: bundledCode,\n files: {\n 'main.ts': {\n content: bundledCode,\n encoding: 'utf-8'\n }\n },\n errors: [],\n method: 'source-bundle'\n };\n } catch (error) {\n console.log(`ā ļø Source bundling failed: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'source-bundle'\n };\n }\n}\n\n/**\n * Copy source files directly (last resort)\n */\nasync function copySourceDirectlySmart(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n console.log(`š Using source file directly: ${entryPoint}`);\n\n const sourcePath = join(projectPath, entryPoint);\n const sourceContent = readFileSync(sourcePath, 'utf-8');\n const fileName = entryPoint.split('/').pop() || 'main.ts';\n\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {\n [fileName]: {\n content: sourceContent,\n encoding: 'utf-8'\n }\n };\n\n // Include additional source files if needed\n if (entryPoint.startsWith('dist/') && sourceContent.includes('../src/')) {\n console.log('š¦ Including src/ directory files for deployment');\n await includeSourceDirectorySmart(projectPath, files);\n }\n\n return {\n success: true,\n code: sourceContent,\n files,\n errors: [],\n method: 'direct-copy'\n };\n } catch (error) {\n console.log(`ā Failed to copy source file: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'direct-copy'\n };\n }\n}\n\n/**\n * Infer Deno permissions needed for bundling based on code analysis\n */\nfunction inferDenoPermissions(projectPath: string): string[] {\n const permissions: string[] = ['read']; // Always need read\n\n try {\n // Check package.json for clues about needed permissions\n const packageJsonPath = join(projectPath, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n // If using dotenv or env-related packages, allow env\n if (deps.dotenv || deps['dotenv-cli'] || packageJson.scripts?.build?.includes('NODE_ENV')) {\n permissions.push('env');\n }\n\n // If using file system packages, allow write\n if (deps['fs-extra'] || deps.mkdirp) {\n permissions.push('write');\n }\n\n // If using network packages, allow net\n if (deps.axios || deps.node || deps['node-fetch'] || deps.hono) {\n permissions.push('net');\n }\n }\n\n // Check deno.json for explicit permissions or network usage\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const denoConfigPath = existsSync(denoJsonPath) ? denoJsonPath :\n existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (denoConfigPath) {\n try {\n const config = JSON.parse(readFileSync(denoConfigPath, 'utf-8'));\n // If using deploy config, likely needs network\n if (config.deploy) {\n permissions.push('net');\n }\n } catch (error) {\n // Ignore config parse errors\n }\n }\n\n } catch (error) {\n console.log(`ā ļø Error inferring permissions: ${(error as Error).message}`);\n }\n\n return [...new Set(permissions)]; // Remove duplicates\n}\n\n/**\n * Include source directory files when the built artifact still depends on them\n */\nasync function includeSourceDirectorySmart(\n projectPath: string,\n files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>\n): Promise<void> {\n const srcPath = join(projectPath, 'src');\n\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip dev directory for production deployments\n if (item !== 'dev') {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile() && (item.endsWith('.ts') || item.endsWith('.js'))) {\n // Only include TypeScript and JavaScript files\n const content = readFileSync(itemPath, 'utf-8');\n files[`src/${itemRelativePath}`] = {\n content,\n encoding: 'utf-8'\n };\n }\n }\n }\n\n if (existsSync(srcPath)) {\n addDirectory(srcPath);\n }\n}\n\n/**\n * Deploy built artifact for Deno Deploy projects\n */\nasync function deployBuiltArtifact(\n projectPath: string,\n entryPoint: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add deno.json as-is\n const denoJsonPath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonPath)) {\n files['deno.json'] = {\n content: readFileSync(denoJsonPath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n\n // Add the built entrypoint file with modified imports\n const entryPointPath = join(projectPath, entryPoint);\n if (existsSync(entryPointPath)) {\n let content = readFileSync(entryPointPath, 'utf-8');\n\n // For deployment, we need to change the imports to work with the file structure\n // The dist/main.ts is at root level, src/ files are also at root level\n // So '../src/middleware/...' becomes './middleware/...'\n console.log(`š Original content sample:`, content.split('\\n').slice(3, 8).join('\\n'));\n content = content.replace(/from '\\.\\.\\/src\\//g, \"from './\");\n console.log(`š Modified content sample:`, content.split('\\n').slice(3, 8).join('\\n'));\n\n files['main.ts'] = {\n content,\n encoding: 'utf-8'\n };\n }\n\n // Add all source files that the built artifact references\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip common exclude directories\n if (!['node_modules', '.git', 'dist', 'coverage', '.swc', 'dev'].includes(item)) {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile()) {\n // Only include relevant source files\n const ext = item.split('.').pop()?.toLowerCase();\n if (['ts', 'js', 'json', 'txt', 'md'].includes(ext || '')) {\n files[itemRelativePath] = {\n content: readFileSync(itemPath, 'utf-8'),\n encoding: 'utf-8'\n };\n } else {\n // For binary files, use base64\n const buffer = readFileSync(itemPath);\n files[itemRelativePath] = {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n }\n }\n\n // Add src/ directory since built artifacts reference it\n if (existsSync(join(projectPath, 'src'))) {\n addDirectory(join(projectPath, 'src'), 'src');\n }\n\n // Add root level files\n const rootFiles = ['package.json', 'import_map.json', 'README.md'];\n for (const file of rootFiles) {\n const filePath = join(projectPath, file);\n if (existsSync(filePath)) {\n files[file] = {\n content: readFileSync(filePath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n }\n\n const finalEntrypoint = 'main.ts'; // Use main.ts as entrypoint when files are structured properly\n\n console.log(`š Deno Deploy Built: entrypoint=\"${finalEntrypoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint: finalEntrypoint, files };\n}\n\n/**\n * Deploy source files directly for Deno Deploy projects\n */\nasync function deployDenoSourceFiles(\n projectPath: string,\n entryPoint: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add deno.json as-is\n const denoJsonPath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonPath)) {\n files['deno.json'] = {\n content: readFileSync(denoJsonPath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n\n // Add all source files recursively, preserving directory structure\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip common exclude directories\n if (!['node_modules', '.git', 'dist', 'coverage', '.swc', 'dev'].includes(item)) {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile()) {\n // Only include relevant source files\n const ext = item.split('.').pop()?.toLowerCase();\n if (['ts', 'js', 'json', 'txt', 'md'].includes(ext || '')) {\n files[itemRelativePath] = {\n content: readFileSync(itemPath, 'utf-8'),\n encoding: 'utf-8'\n };\n } else {\n // For binary files, use base64\n const buffer = readFileSync(itemPath);\n files[itemRelativePath] = {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n }\n }\n\n // Add source files preserving structure\n if (existsSync(join(projectPath, 'src'))) {\n addDirectory(join(projectPath, 'src'), 'src');\n }\n\n // Add root level files\n const rootFiles = ['package.json', 'import_map.json', 'README.md'];\n for (const file of rootFiles) {\n const filePath = join(projectPath, file);\n if (existsSync(filePath)) {\n files[file] = {\n content: readFileSync(filePath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n }\n\n console.log(`š Deno Deploy Source: entrypoint=\"${entryPoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint, files };\n}\n\n/**\n * Load Deno configuration for bundling\n */\nfunction loadDenoConfigForBundling(projectPath: string): { configArgs: string[]; importMap?: string } {\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n\n const configPath = existsSync(denoJsonPath) ? denoJsonPath :\n existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (!configPath) {\n return { configArgs: [] };\n }\n\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf-8'));\n const configArgs: string[] = [`--config`, configPath];\n\n // Handle import map\n if (config.importMap) {\n const importMapPath = join(projectPath, config.importMap);\n if (existsSync(importMapPath)) {\n configArgs.push('--import-map', importMapPath);\n }\n }\n\n return { configArgs, importMap: config.importMap };\n } catch (error) {\n console.log(`ā ļø Failed to load Deno config: ${(error as Error).message}`);\n return { configArgs: [] };\n }\n}\n\nexport async function validateMCPProject(\n projectPath: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const packageJsonPath = join(projectPath, 'package.json');\n\n // Check for configuration files in order of preference\n let configPath: string | null = null;\n let configType: 'deno' | 'package' | null = null;\n let config: any = null;\n\n if (existsSync(denoJsonPath)) {\n configPath = denoJsonPath;\n configType = 'deno';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n } else if (existsSync(denoJsoncPath)) {\n configPath = denoJsoncPath;\n configType = 'deno';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n } else if (existsSync(packageJsonPath)) {\n configPath = packageJsonPath;\n configType = 'package';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n }\n\n // Extract entry point based on config (if available)\n let entryPoint: string | null = null;\n\n if (config) {\n if (configType === 'deno') {\n // Check deno.json fields in order of preference\n entryPoint = config.main || config.entryPoint;\n // Check for Deno Deploy entrypoint\n if (!entryPoint && config.deploy?.entrypoint) {\n entryPoint = config.deploy.entrypoint;\n }\n } else if (configType === 'package') {\n // Check package.json fields in order of preference\n entryPoint = config.main || config.module;\n\n // Check exports field if present\n if (!entryPoint && config.exports) {\n if (typeof config.exports === 'string') {\n entryPoint = config.exports;\n } else if (config.exports['.']) {\n const dotExport = config.exports['.'];\n if (typeof dotExport === 'string') {\n entryPoint = dotExport;\n } else if (dotExport.import) {\n entryPoint = dotExport.import;\n } else if (dotExport.default) {\n entryPoint = dotExport.default;\n }\n }\n }\n }\n }\n\n // If no entry point found in config, try to infer from common patterns\n if (!entryPoint) {\n const commonEntryPoints = [\n 'main.ts', 'main.js', 'index.ts', 'index.js',\n 'server.ts', 'server.js', 'app.ts', 'app.js'\n ];\n\n for (const candidate of commonEntryPoints) {\n const candidatePath = join(projectPath, candidate);\n if (existsSync(candidatePath)) {\n entryPoint = candidate;\n break;\n }\n }\n }\n\n if (!entryPoint) {\n throw new Error(\n 'No entry point found. Please specify one in deno.json/package.json or use a common filename like main.ts, index.ts, server.ts, or app.ts'\n );\n }\n\n // Check if this is a Deno Deploy project with proper configuration\n const hasDenoDeployConfig = configType === 'deno' && config?.deploy?.entrypoint;\n const resolvedEntryPointPath = join(projectPath, entryPoint);\n\n if (hasDenoDeployConfig && existsSync(resolvedEntryPointPath)) {\n // For properly configured Deno Deploy projects, deploy source files directly\n // Deno Deploy should handle import resolution like local development with --sloppy-imports\n console.log(`š Deno Deploy project detected, deploying source files with entrypoint: ${entryPoint}`);\n return await deployDenoSourceFiles(projectPath, entryPoint);\n }\n\n // Fallback to legacy bundling approach for projects without proper Deno Deploy config\n console.log(`š¦ No Deno Deploy configuration found, using legacy bundling approach`);\n\n // Step 1: Check for dist directory first (user's build)\n const distDir = join(projectPath, 'dist');\n const entryPointFilename = entryPoint.split('/').pop() || 'main.ts';\n const distEntryPointPath = join(distDir, entryPointFilename);\n\n let finalEntryPoint = entryPoint;\n let entryPointPath = join(projectPath, entryPoint);\n\n if (existsSync(distDir) && existsSync(distEntryPointPath)) {\n // Use the built dist version\n finalEntryPoint = `dist/${entryPointFilename}`;\n entryPointPath = distEntryPointPath;\n console.log(`š¦ Using built dist entrypoint: ${finalEntryPoint}`);\n } else {\n // Use source entrypoint\n if (!existsSync(entryPointPath)) {\n throw new Error(`Entry point file not found: ${entryPoint}`);\n }\n console.log(`š¦ Using source entrypoint: ${entryPoint}`);\n }\n\n // Step 2: Smart bundling with build script execution\n const bundleResult = await createDeploymentBundleSmart(projectPath, finalEntryPoint);\n\n if (!bundleResult.success) {\n throw new Error(`Failed to create deployment bundle: ${bundleResult.errors.join(', ')}`);\n }\n\n // Step 3: Create the files object from bundle result\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add the bundled files\n Object.assign(files, bundleResult.files);\n\n // Update finalEntryPoint based on bundle result\n finalEntryPoint = 'main.ts'; // Bundle result always uses main.ts as the entry point\n\n // Add deno.json if it exists\n const denoJsonFilePath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonFilePath)) {\n const denoJsonContent = readFileSync(denoJsonFilePath, 'utf-8');\n const denoJson = JSON.parse(denoJsonContent);\n if (denoJson.deploy?.entrypoint) {\n denoJson.deploy.entrypoint = finalEntryPoint;\n }\n if (denoJson.main) {\n denoJson.main = finalEntryPoint;\n }\n files['deno.json'] = {\n content: JSON.stringify(denoJson, null, 2),\n encoding: 'utf-8'\n };\n }\n\n console.log(`š CLI Result: entrypoint=\"${finalEntryPoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint: finalEntryPoint, files };\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\n\nexport interface CliConfig {\n version: string;\n endpoints: {\n core: string;\n deploy: string;\n };\n auth: {\n token?: string;\n refreshToken?: string;\n expiresAt?: string;\n };\n preferences: {\n json: boolean;\n verbose: boolean;\n };\n}\n\nconst CONFIG_DIR = join(homedir(), '.apexmcp');\nconst CONFIG_FILE = join(CONFIG_DIR, 'config.json');\n\nconst DEFAULT_CONFIG: CliConfig = {\n version: '0.1.0',\n endpoints: {\n core: 'https://core.apexmcp.dev',\n deploy: 'https://deploy.apexmcp.dev',\n },\n auth: {},\n preferences: {\n json: false,\n verbose: false,\n },\n};\n\nexport class ConfigManager {\n private config: CliConfig;\n\n constructor() {\n this.config = this.loadConfig();\n }\n\n private loadConfig(): CliConfig {\n try {\n if (existsSync(CONFIG_FILE)) {\n const data = readFileSync(CONFIG_FILE, 'utf-8');\n const parsed = JSON.parse(data);\n // Merge with defaults to handle new fields\n return { ...DEFAULT_CONFIG, ...parsed };\n }\n } catch (error) {\n console.warn('Failed to load config file, using defaults:', error);\n }\n return { ...DEFAULT_CONFIG };\n }\n\n private saveConfig(): void {\n try {\n mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(CONFIG_FILE, JSON.stringify(this.config, null, 2));\n } catch (error) {\n console.error('Failed to save config:', error);\n throw new Error('Could not save configuration');\n }\n }\n\n getConfig(): CliConfig {\n return { ...this.config };\n }\n\n updateConfig(updates: Partial<CliConfig>): void {\n this.config = { ...this.config, ...updates };\n this.saveConfig();\n }\n\n setEndpoint(service: 'core' | 'deploy', url: string): void {\n this.config.endpoints[service] = url;\n this.saveConfig();\n }\n\n setAuth(token?: string, refreshToken?: string, expiresAt?: string): void {\n this.config.auth = { token, refreshToken, expiresAt };\n this.saveConfig();\n }\n\n getToken(): string | undefined {\n return this.config.auth.token;\n }\n\n clearAuth(): void {\n this.config.auth = {};\n this.saveConfig();\n }\n\n setPreference(key: keyof CliConfig['preferences'], value: boolean): void {\n this.config.preferences[key] = value;\n this.saveConfig();\n }\n\n getPreference(key: keyof CliConfig['preferences']): boolean {\n return this.config.preferences[key];\n }\n\n isAuthenticated(): boolean {\n const token = this.getToken();\n if (!token) return false;\n\n // Check if token is expired\n if (this.config.auth.expiresAt) {\n const expiresAt = new Date(this.config.auth.expiresAt);\n if (expiresAt < new Date()) {\n this.clearAuth();\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport const configManager = new ConfigManager();\n","import { configManager } from '../utils/config';\nimport { createInterface } from 'readline';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\n/**\n * Get user confirmation via stdin\n */\nasync function getUserConfirmation(message: string): Promise<boolean> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n const normalizedAnswer = answer.toLowerCase().trim();\n resolve(normalizedAnswer === 'y' || normalizedAnswer === 'yes');\n });\n });\n}\n\nexport interface DeploymentsOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n force?: boolean;\n}\n\nexport interface UpdateDeploymentOptions extends DeploymentsOptions {\n name?: string;\n domain?: string;\n envFile?: string;\n}\n\nexport interface DeploymentSummary {\n id: string;\n name: string;\n domain: string;\n status: string;\n tier: string;\n url: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ListDeploymentsResponse {\n deployments: DeploymentSummary[];\n total: number;\n}\n\nexport interface DeploymentDetails {\n deployment: {\n id: string;\n name?: string;\n domain?: string;\n status: string;\n tier?: string;\n url?: string;\n createdAt: string;\n updatedAt: string;\n entryPoint?: string;\n envVars?: Record<string, string>;\n projectPath?: string;\n subdomain?: string;\n deploymentUrl?: string;\n logs?: string[];\n buildStatus?: string;\n runtimeStatus?: string;\n errorMessage?: string;\n };\n}\n\n/**\n * List all deployments for the authenticated user/org\n */\nexport async function listDeploymentsCommand(\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching deployments...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list deployments: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result: ListDeploymentsResponse = await response.json() as ListDeploymentsResponse;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.deployments.length === 0) {\n log.info('š No deployments found.');\n return;\n }\n\n log.info(`š Found ${result.deployments.length} deployment(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā Deployment Name ā Domain ā Status ā Tier ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const deployment of result.deployments) {\n if(!deployment.name || !deployment.status || !deployment.tier) {\n throw new Error(`Invalid deployment data, ${JSON.stringify(deployment)}`);\n }\n const name = String(deployment.name).padEnd(36);\n const domain = String(deployment.domain || 'N/A').substring(0, 18).padEnd(18);\n const status = String(deployment.status).substring(0, 7).padEnd(7);\n const tier = String(deployment.tier).substring(0, 7).padEnd(7);\n\n log.info(`ā ${name} ā ${domain} ā ${status} ā ${tier} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const deployment of result.deployments) {\n log.info(`š ${deployment.name}:`);\n log.info(` š URL: ${deployment.url}`);\n log.info(` š·ļø Domain: ${deployment.domain}`);\n log.info(` š
Created: ${new Date(deployment.createdAt).toLocaleString()}`);\n if (deployment.status !== 'active') {\n log.info(` ā ļø Status: ${deployment.status}`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list deployments:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Get details for a specific deployment\n */\nexport async function getDeploymentCommand(\n deploymentId: string,\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching deployment details for: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result: DeploymentDetails = await response.json() as DeploymentDetails;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n const deployment = result.deployment;\n\n log.info('š Deployment Details:');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Property ā Value ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Format each property\n const formatRow = (label: string, value: string | undefined) => {\n const displayValue = value || 'N/A';\n const truncatedValue = displayValue.length > 36 ? displayValue.substring(0, 33) + '...' : displayValue;\n log.info(`ā ${label.padEnd(36)} ā ${truncatedValue.padEnd(36)} ā`);\n };\n\n formatRow('ID', deployment.id ? String(deployment.id) : undefined);\n formatRow('Name', deployment.name ? String(deployment.name) : undefined);\n formatRow('Domain', deployment.domain ? String(deployment.domain) : undefined);\n formatRow('Status', deployment.status ? String(deployment.status) : undefined);\n formatRow('Tier', deployment.tier ? String(deployment.tier) : undefined);\n formatRow('URL', deployment.url ? String(deployment.url) : undefined);\n formatRow('Subdomain', deployment.subdomain ? String(deployment.subdomain) : undefined);\n formatRow('Deployment URL', deployment.deploymentUrl ? String(deployment.deploymentUrl) : undefined);\n formatRow('Entry Point', deployment.entryPoint ? String(deployment.entryPoint) : undefined);\n formatRow('Project Path', deployment.projectPath ? String(deployment.projectPath) : undefined);\n formatRow('Build Status', deployment.buildStatus ? String(deployment.buildStatus) : undefined);\n formatRow('Runtime Status', deployment.runtimeStatus ? String(deployment.runtimeStatus) : undefined);\n formatRow('Created', deployment.createdAt ? new Date(deployment.createdAt).toLocaleString() : undefined);\n formatRow('Updated', deployment.updatedAt ? new Date(deployment.updatedAt).toLocaleString() : undefined);\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n\n // Environment variables section\n if (deployment.envVars && Object.keys(deployment.envVars).length > 0) {\n log.info('\\nš§ Environment Variables:');\n for (const [key, value] of Object.entries(deployment.envVars)) {\n const stringValue = String(value);\n const maskedValue = stringValue.length > 20 ? `${stringValue.substring(0, 10)}...` : stringValue;\n log.info(` ${key}=${maskedValue}`);\n }\n }\n\n // Error message if present\n if (deployment.errorMessage) {\n log.info('\\nā Error:');\n log.info(` ${deployment.errorMessage}`);\n }\n\n // Logs section (if available)\n if (deployment.logs && deployment.logs.length > 0) {\n log.info('\\nš Recent Logs:');\n const recentLogs = deployment.logs.slice(-5); // Show last 5 log entries\n for (const logEntry of recentLogs) {\n log.info(` ${logEntry}`);\n }\n if (deployment.logs.length > 5) {\n log.info(` ... and ${deployment.logs.length - 5} more entries`);\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to get deployment details:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete a deployment\n */\nexport async function deleteDeploymentCommand(\n deploymentId: string,\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting deployment: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Skip confirmation if force flag is used or in CI/JSON mode\n if (!options.force && !outputJson) {\n log.info('ā ļø This action cannot be undone. All deployment data will be permanently deleted.');\n\n // Get user confirmation\n const confirmed = await getUserConfirmation(`Are you sure you want to delete deployment \"${deploymentId}\"?`);\n if (!confirmed) {\n log.info('ā Deletion cancelled.');\n return;\n }\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { success: boolean };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Deployment deleted successfully!');\n } else {\n log.error('ā Failed to delete deployment');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete deployment:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Update a deployment\n */\nexport async function updateDeploymentCommand(\n deploymentId: string,\n options: UpdateDeploymentOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Updating deployment: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Check if at least one update option is provided\n if (!options.name && !options.domain && !options.envFile) {\n throw new Error(\n 'At least one update option must be provided (--name, --domain, or --env-file)'\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n // Prepare update payload\n const updatePayload: Record<string, any> = {};\n\n if (options.name) {\n updatePayload.name = options.name;\n }\n\n if (options.domain) {\n updatePayload.domain = options.domain;\n }\n\n // Handle environment file if provided\n if (options.envFile) {\n const { loadEnvFile } = await import('../utils/load-env-file');\n try {\n const envVars = await loadEnvFile(options.envFile);\n updatePayload.envVars = envVars;\n log.info(`š Loaded ${Object.keys(envVars).length} environment variables from: ${options.envFile}`);\n } catch (error) {\n throw new Error(`Failed to load environment file: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'PATCH',\n headers,\n body: JSON.stringify(updatePayload),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to update deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { success: boolean; deployment?: { id: string; name: string; url: string; status: string } };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n log.info('ā
Deployment updated successfully!');\n\n if (options.name) {\n log.info(`š Name updated to: ${options.name}`);\n }\n\n if (options.domain) {\n log.info(`š Domain updated to: ${options.domain}`);\n }\n\n if (options.envFile) {\n log.info(`š§ Environment variables updated`);\n }\n \n // Show updated deployment info if available\n if (result.deployment) {\n log.info('\\nš Updated deployment details:');\n log.info(` ID: ${result.deployment.id}`);\n log.info(` Name: ${result.deployment.name || 'N/A'}`);\n log.info(` URL: ${result.deployment.url || 'N/A'}`);\n log.info(` Status: ${result.deployment.status || 'unknown'}`);\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to update deployment:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { validateMCPProject } from '../utils/validate-mcp-project';\nimport { configManager } from '../utils/config';\nimport { createLogger, isJsonMode, withStdoutSuppressed } from '../utils/cli-io';\n\nexport interface ValidateOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n errors: string[];\n warnings: string[];\n}\n\nexport interface ValidateResponse {\n validation: ValidationResult;\n}\n\n/**\n * Validate an MCP project locally and optionally against the API\n */\nexport async function validateCommand(\n projectPath: string,\n options: ValidateOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Validating MCP project...');\n log.info(`š Project path: ${projectPath}`);\n\n // First, validate project path exists\n const resolvedPath = resolve(projectPath);\n if (!existsSync(resolvedPath)) {\n throw new Error(`Project path does not exist: ${resolvedPath}`);\n }\n\n // Local validation\n log.info('š Performing local validation...');\n const projectData = await withStdoutSuppressed(outputJson, () =>\n validateMCPProject(resolvedPath)\n );\n log.info(`ā
Entry point: ${projectData.entryPoint}`);\n log.info(`š Found ${Object.keys(projectData.files).length} file(s)`);\n\n // Basic local checks\n const localValidation: ValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n };\n\n // Check if deno.json exists and has required fields\n const denoJsonContent =\n projectData.files['deno.json']?.content ||\n projectData.files['deno.jsonc']?.content;\n if (!denoJsonContent) {\n localValidation.errors.push('deno.json or deno.jsonc file not found');\n localValidation.isValid = false;\n } else {\n try {\n const denoJson = JSON.parse(denoJsonContent);\n const hasEntryPoint = denoJson.main || denoJson.entryPoint || (denoJson.deploy && denoJson.deploy.entrypoint);\n if (!hasEntryPoint) {\n localValidation.errors.push('deno.json must have a \"main\", \"entryPoint\", or \"deploy.entrypoint\" field');\n localValidation.isValid = false;\n }\n } catch (error) {\n localValidation.errors.push('deno.json is not valid JSON');\n localValidation.isValid = false;\n }\n }\n\n // API validation (optional, if endpoint is provided)\n let apiValidation: ValidationResult | null = null;\n const config = configManager.getConfig();\n const effectiveEndpoint = options.endpoint || config.endpoints.deploy;\n\n if (effectiveEndpoint) {\n log.info('š Performing API validation...');\n\n // Get effective token\n const effectiveToken = options.token || config.auth.token;\n\n // Prepare form data for API validation\n const formData = new FormData();\n for (const [filename, fileData] of Object.entries(projectData.files)) {\n const mimeType = fileData.encoding === 'base64' ? 'application/octet-stream' : 'text/plain';\n formData.append(\n 'files',\n new Blob([fileData.content], { type: mimeType }),\n filename\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveToken) {\n headers['Authorization'] = `Bearer ${effectiveToken}`;\n }\n\n try {\n const response = await fetch(`${effectiveEndpoint}/api/validate`, {\n method: 'POST',\n body: formData,\n headers,\n });\n\n if (response.ok) {\n const result = (await response.json()) as ValidateResponse;\n apiValidation = result.validation;\n log.info('ā
API validation completed');\n } else {\n log.warn('ā ļø API validation failed, but local validation succeeded');\n }\n } catch (error) {\n log.warn('ā ļø API validation unavailable, but local validation succeeded');\n }\n }\n\n // Combine results\n const combinedValidation: ValidationResult = {\n isValid: localValidation.isValid && (apiValidation?.isValid ?? true),\n errors: [...localValidation.errors, ...(apiValidation?.errors || [])],\n warnings: [...localValidation.warnings, ...(apiValidation?.warnings || [])],\n };\n\n // Output results\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({\n local: localValidation,\n api: apiValidation,\n combined: combinedValidation,\n }, null, 2));\n } else {\n if (combinedValidation.isValid) {\n log.info('ā
Project validation successful!');\n\n if (combinedValidation.warnings.length > 0) {\n log.warn('ā ļø Warnings:');\n combinedValidation.warnings.forEach(warning => {\n log.warn(` - ${warning}`);\n });\n }\n } else {\n log.error('ā Project validation failed:');\n combinedValidation.errors.forEach(error => {\n log.error(` - ${error}`);\n });\n\n if (combinedValidation.warnings.length > 0) {\n log.warn('ā ļø Warnings:');\n combinedValidation.warnings.forEach(warning => {\n log.warn(` - ${warning}`);\n });\n }\n\n process.exit(1);\n }\n }\n } catch (error) {\n log.error(\n 'ā Validation failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface AuthOptions {\n endpoint?: string;\n json?: boolean;\n}\n\ninterface WhoamiResult {\n authenticated: boolean;\n endpoints: {\n core: string;\n deploy: string;\n };\n preferences: {\n json: boolean;\n verbose: boolean;\n };\n orgStatus?: any;\n}\n\nexport interface LoginOptions extends AuthOptions {\n token?: string;\n email?: string;\n password?: string;\n}\n\n/**\n * Login command - authenticate with ApexMCP\n */\nexport async function loginCommand(options: LoginOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n if (options.token) {\n // Direct token login\n configManager.setAuth(options.token);\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, authenticated: true }));\n } else {\n log.info('š Authenticating with provided token...');\n log.info('ā
Authentication successful!');\n }\n\n if (!outputJson) {\n // Test the token by making a simple authenticated request\n await testAuth(options.endpoint || configManager.getConfig().endpoints.core);\n }\n\n return;\n }\n\n if (options.email && options.password) {\n // Email/password login via Supabase\n log.info('š Authenticating with email and password...');\n\n const endpoint = options.endpoint || configManager.getConfig().endpoints.core;\n const response = await fetch(`${endpoint}/auth/login`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email: options.email,\n password: options.password,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json() as { error?: string };\n throw new Error(errorData.error || 'Authentication failed');\n }\n\n const result = await response.json() as {\n access_token?: string;\n refresh_token?: string;\n expires_at?: string;\n };\n\n if (result.access_token) {\n configManager.setAuth(\n result.access_token,\n result.refresh_token,\n result.expires_at\n );\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, authenticated: true }));\n } else {\n log.info('ā
Authentication successful!');\n }\n } else {\n throw new Error('Invalid authentication response');\n }\n\n return;\n }\n\n // Interactive login prompt\n log.info('š Please provide authentication credentials:');\n log.info(' Use --token for direct token authentication');\n log.info(' Use --email and --password for email/password authentication');\n log.info('');\n log.info('Example:');\n log.info(' apexmcp login --token your-jwt-token');\n log.info(' apexmcp login --email user@example.com --password yourpassword');\n\n process.exit(1);\n } catch (error) {\n log.error(\n 'ā Authentication failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Logout command - clear authentication\n */\nexport async function logoutCommand(options: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n configManager.clearAuth();\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, message: 'Logged out successfully' }));\n return;\n }\n\n log.info('šŖ Logging out...');\n log.info('ā
Successfully logged out!');\n } catch (error) {\n log.error(\n 'ā Logout failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - show current authentication status\n */\nexport async function whoamiCommand(options: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n const config = configManager.getConfig();\n const isAuthenticated = configManager.isAuthenticated();\n\n const result: WhoamiResult = {\n authenticated: isAuthenticated,\n endpoints: config.endpoints,\n preferences: config.preferences,\n };\n\n if (isAuthenticated) {\n // Try to get user info from the core service\n try {\n const endpoint = options.endpoint || config.endpoints.core;\n const token = config.auth.token;\n\n const response = await fetch(`${endpoint}/auth/org-status`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (response.ok) {\n const orgStatus = await response.json();\n result.orgStatus = orgStatus;\n }\n } catch (error) {\n // Ignore errors when fetching org status\n }\n }\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n log.info('š¤ Authentication Status:');\n log.info(` Authenticated: ${isAuthenticated ? 'ā
Yes' : 'ā No'}`);\n\n if (isAuthenticated) {\n log.info(' Token: [REDACTED]');\n if (config.auth.expiresAt) {\n const expiresAt = new Date(config.auth.expiresAt);\n log.info(` Expires: ${expiresAt.toLocaleString()}`);\n }\n }\n\n log.info('');\n log.info('š Endpoints:');\n log.info(` Core API: ${config.endpoints.core}`);\n log.info(` Deploy API: ${config.endpoints.deploy}`);\n\n log.info('');\n log.info('āļø Preferences:');\n log.info(` JSON Output: ${config.preferences.json}`);\n log.info(` Verbose: ${config.preferences.verbose}`);\n }\n } catch (error) {\n log.error(\n 'ā Failed to get authentication status:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Configure command - manage CLI configuration\n */\nexport async function configCommand(action: string, key?: string, value?: string, options?: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n const config = configManager.getConfig();\n\n if (action === 'get') {\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(config, null, 2));\n } else {\n log.info('š§ Current Configuration:');\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(config, null, 2));\n }\n return;\n }\n\n if (action === 'set') {\n if (!key || value === undefined) {\n throw new Error('Key and value are required for set action');\n }\n\n // Handle nested keys with dot notation\n const keys = key.split('.');\n let current: any = config;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const currentKey = keys[i];\n if (!currentKey) {\n throw new Error('Invalid key format');\n }\n if (!current[currentKey]) {\n current[currentKey] = {};\n }\n current = current[currentKey];\n }\n\n const finalKey = keys[keys.length - 1];\n if (!finalKey) {\n throw new Error('Invalid key format');\n }\n\n // Parse value types\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value))) parsedValue = Number(value);\n\n current[finalKey] = parsedValue;\n configManager.updateConfig(config);\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, key, value: parsedValue }, null, 2));\n } else {\n log.info(`ā
Set ${key} = ${parsedValue}`);\n }\n return;\n }\n\n if (action === 'reset') {\n configManager.updateConfig({\n version: '0.1.0',\n endpoints: {\n core: 'https://core.apexmcp.dev',\n deploy: 'https://deploy.apexmcp.dev',\n },\n auth: {},\n preferences: {\n json: false,\n verbose: false,\n },\n });\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, message: 'Configuration reset to defaults' }, null, 2));\n } else {\n log.info('ā
Configuration reset to defaults');\n }\n return;\n }\n\n throw new Error('Invalid action. Use: get, set <key> <value>, or reset');\n } catch (error) {\n log.error(\n 'ā Configuration command failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Test authentication by making a simple authenticated request\n */\nasync function testAuth(endpoint: string): Promise<void> {\n const log = createLogger({ json: false });\n try {\n const token = configManager.getToken();\n if (!token) {\n throw new Error('No authentication token available');\n }\n\n const response = await fetch(`${endpoint}/health`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Authentication test failed: ${response.status}`);\n }\n\n log.info('ā
Token validation successful');\n } catch (error) {\n log.warn('ā ļø Token validation failed, but token was saved');\n log.warn(' You may need to re-authenticate');\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface McpServerOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface McpServer {\n id: string;\n catalog_id: string;\n deployment_name: string;\n http_endpoint: string;\n name: string;\n description: string;\n status: 'ready' | 'beta' | 'deprecated';\n enabled: boolean;\n secrets_requirements?: Array<{\n key: string;\n name: string;\n description: string;\n required: boolean;\n type: 'string' | 'number' | 'boolean';\n placeholder?: string;\n validation?: {\n pattern?: string;\n minLength?: number;\n maxLength?: number;\n };\n }>;\n}\n\nexport interface OrgMcpServer {\n id: string;\n catalog_id: string;\n name: string;\n enabled: boolean;\n config: {\n rate_limit?: number;\n timeout_ms?: number;\n };\n deployment_name?: string;\n http_endpoint?: string;\n description?: string;\n secrets_requirements?: Array<{\n key: string;\n name: string;\n description: string;\n required: boolean;\n type: 'string' | 'number' | 'boolean';\n placeholder?: string;\n }>;\n}\n\n/**\n * List available MCP servers from the catalog\n */\nexport async function listAvailableMcpServersCommand(options: McpServerOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching available MCP servers...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/available`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list MCP servers: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: McpServer[] };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.plugins.length === 0) {\n log.info('š No MCP servers available.');\n return;\n }\n\n log.info(`š Found ${result.plugins.length} MCP server(s) in catalog:\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā MCP Server ID ā Name ā Status ā Enabled ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const server of result.plugins) {\n const id = server.catalog_id.substring(0, 36).padEnd(36);\n const name = (server.name || 'N/A').substring(0, 18).padEnd(18);\n const status = server.status.substring(0, 7).padEnd(7);\n const enabled = server.enabled ? 'ā
Yes' : 'ā No';\n const enabledPadded = enabled.substring(0, 7).padEnd(7);\n\n log.info(`ā ${id} ā ${name} ā ${status} ā ${enabledPadded} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const server of result.plugins) {\n log.info(`š§ ${server.name} (${server.catalog_id}):`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Endpoint: ${server.http_endpoint}`);\n log.info(` š Status: ${server.status}`);\n log.info(` ā
Enabled: ${server.enabled ? 'Yes' : 'No'}`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Requires ${server.secrets_requirements.length} secret(s)`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list MCP servers:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List enabled MCP servers for the organization\n */\nexport async function listEnabledMcpServersCommand(options: McpServerOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching enabled MCP servers...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/enabled`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list enabled MCP servers: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: OrgMcpServer[] };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.plugins.length === 0) {\n log.info('š No MCP servers enabled for your organization.');\n return;\n }\n\n log.info(`š Found ${result.plugins.length} enabled MCP server(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā MCP Server ID ā Name ā Status ā Config ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const server of result.plugins) {\n const id = server.catalog_id.substring(0, 36).padEnd(36);\n const name = (server.name || 'N/A').substring(0, 18).padEnd(18);\n const status = 'Enabled';\n const configStr = server.config.rate_limit ? `${server.config.rate_limit}/min` : 'Default';\n const configPadded = configStr.substring(0, 7).padEnd(7);\n\n log.info(`ā ${id} ā ${name} ā ${status} ā ${configPadded} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const server of result.plugins) {\n log.info(`š§ ${server.name} (${server.catalog_id}):`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Endpoint: ${server.http_endpoint || 'N/A'}`);\n log.info(` āļø Config: Rate limit ${server.config.rate_limit || 'unlimited'}/min, Timeout ${server.config.timeout_ms || 30000}ms`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Secrets configured: ${server.secrets_requirements.length} required`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list enabled MCP servers:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Enable an MCP server for the organization\n */\nexport async function enableMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Enabling MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/toggle`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n catalog_id: catalogId,\n enabled: true,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to enable MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
MCP server enabled successfully!');\n log.info('ā¹ļø You may need to configure secrets for this server to work properly.');\n log.info(` Use: apexmcp plugins secrets set ${catalogId} <secret-key> <secret-value>`);\n } else {\n log.error('ā Failed to enable MCP server');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to enable MCP server:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Disable an MCP server for the organization\n */\nexport async function disableMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Disabling MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/toggle`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n catalog_id: catalogId,\n enabled: false,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to disable MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
MCP server disabled successfully!');\n } else {\n log.error('ā Failed to disable MCP server');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to disable MCP server:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Get details about a specific MCP server\n */\nexport async function getMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching MCP server details: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/available`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: McpServer[] };\n const server = result.plugins.find(p => p.catalog_id === catalogId);\n\n if (!server) {\n throw new Error(`MCP server '${catalogId}' not found in catalog`);\n }\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ server }, null, 2));\n } else {\n log.info(`š§ MCP Server: ${server.name}`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Catalog ID: ${server.catalog_id}`);\n log.info(` š Endpoint: ${server.http_endpoint}`);\n log.info(` š Status: ${server.status}`);\n log.info(` ā
Enabled: ${server.enabled ? 'Yes' : 'No'}`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Secrets Requirements:`);\n for (const secret of server.secrets_requirements) {\n const required = secret.required ? '(required)' : '(optional)';\n log.info(` ⢠${secret.name} (${secret.key}) ${required}: ${secret.description}`);\n if (secret.placeholder) {\n log.info(` Placeholder: ${secret.placeholder}`);\n }\n }\n } else {\n log.info(` š Secrets Requirements: None`);\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to get MCP server details:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface PluginOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\n/**\n * List plugin secrets for a specific MCP server\n */\nexport async function listPluginSecretsCommand(\n catalogId: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching secrets for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list plugin secrets: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { secrets: Array<{ secret_key: string }> };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.secrets.length === 0) {\n log.info('š No secrets configured for this MCP server.');\n return;\n }\n\n log.info(`š Found ${result.secrets.length} secret(s) configured:\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Secret Key ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Table rows\n for (const secret of result.secrets) {\n const key = secret.secret_key.substring(0, 18).padEnd(18);\n log.info(`ā ${key} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāā\\n');\n\n log.info('š” Note: Secret values are not displayed for security reasons.');\n }\n } catch (error) {\n log.error(\n 'ā Failed to list plugin secrets:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Set a plugin secret for a specific MCP server\n */\nexport async function setPluginSecretCommand(\n catalogId: string,\n secretKey: string,\n secretValue: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Setting secret '${secretKey}' for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n secret_key: secretKey,\n secret_value: secretValue,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to set plugin secret: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin secret set successfully!');\n } else {\n log.error('ā Failed to set plugin secret');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to set plugin secret:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete a plugin secret for a specific MCP server\n */\nexport async function deletePluginSecretCommand(\n catalogId: string,\n secretKey: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting secret '${secretKey}' for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets/${secretKey}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete plugin secret: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin secret deleted successfully!');\n } else {\n log.error('ā Failed to delete plugin secret');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete plugin secret:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete an entire plugin configuration (disable and remove all secrets)\n */\nexport async function deletePluginCommand(\n catalogId: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting plugin configuration: ${catalogId}`);\n log.info('ā ļø This will disable the plugin and remove all associated secrets.');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete plugin: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin deleted successfully!');\n } else {\n log.error('ā Failed to delete plugin');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete plugin:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface McpOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface Tool {\n name: string;\n description: string;\n inputSchema: any;\n}\n\nexport interface Resource {\n uri: string;\n name: string;\n description: string;\n mimeType: string;\n}\n\nexport interface ResourceTemplate {\n uriTemplate: string;\n name: string;\n description: string;\n mimeType: string;\n}\n\n/**\n * List available tools from enabled MCP servers\n */\nexport async function listToolsCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š§ Fetching available tools...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/tools/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list tools: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.tools || result.result.tools.length === 0) {\n log.info('š§ No tools available.');\n return;\n }\n\n const tools = result.result.tools as Tool[];\n log.info(`š§ Found ${tools.length} tool(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Tool Name ā Description ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Table rows\n for (const tool of tools) {\n const name = tool.name.substring(0, 36).padEnd(36);\n const description = (tool.description || 'No description').substring(0, 36).padEnd(36);\n log.info(`ā ${name} ā ${description} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const tool of tools) {\n log.info(`š§ ${tool.name}:`);\n log.info(` š Description: ${tool.description || 'No description'}`);\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n log.info(` š„ Parameters:`);\n const properties = tool.inputSchema.properties;\n for (const [paramName, paramSchema] of Object.entries(properties)) {\n const param = paramSchema as any;\n const required = tool.inputSchema.required?.includes(paramName) ? '(required)' : '(optional)';\n log.info(` ⢠${paramName} ${required}: ${param.description || 'No description'}`);\n }\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list tools:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Call a tool with specified parameters\n */\nexport async function callToolCommand(\n toolName: string,\n paramsJson: string,\n options: McpOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Calling tool: ${toolName}`);\n\n // Parse parameters\n let params: any;\n try {\n params = JSON.parse(paramsJson);\n } catch (error) {\n throw new Error(`Invalid JSON parameters: ${paramsJson}`);\n }\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/tools/call`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/call',\n params: {\n name: toolName,\n arguments: params,\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to call tool: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.error) {\n log.error('ā Tool call failed:', result.error.message);\n if (result.error.data) {\n log.error(' Details:', JSON.stringify(result.error.data, null, 2));\n }\n } else if (result.result) {\n log.info('ā
Tool call successful!');\n if (result.result.content && Array.isArray(result.result.content)) {\n for (const content of result.result.content) {\n if (content.type === 'text') {\n log.info('š Result:', content.text);\n } else {\n log.info(`š Result (${content.type}):`, JSON.stringify(content, null, 2));\n }\n }\n } else {\n log.info('š Result:', JSON.stringify(result.result, null, 2));\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to call tool:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List available resources from enabled MCP servers\n */\nexport async function listResourcesCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching available resources...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list resources: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.resources || result.result.resources.length === 0) {\n log.info('š No resources available.');\n return;\n }\n\n const resources = result.result.resources as Resource[];\n log.info(`š Found ${resources.length} resource(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāā');\n log.info('ā Resource URI ā Name ā MIME Type ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāā¤');\n\n // Table rows\n for (const resource of resources) {\n const uri = resource.uri.substring(0, 36).padEnd(36);\n const name = (resource.name || 'Unnamed').substring(0, 36).padEnd(36);\n const mimeType = (resource.mimeType || 'unknown').substring(0, 10).padEnd(10);\n log.info(`ā ${uri} ā ${name} ā ${mimeType} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const resource of resources) {\n log.info(`š ${resource.name || 'Unnamed'}:`);\n log.info(` š URI: ${resource.uri}`);\n log.info(` š Description: ${resource.description || 'No description'}`);\n log.info(` š MIME Type: ${resource.mimeType || 'unknown'}`);\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list resources:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Read a specific resource\n */\nexport async function readResourceCommand(\n resourceUri: string,\n options: McpOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Reading resource: ${resourceUri}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/read`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/read',\n params: {\n uri: resourceUri,\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to read resource: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.error) {\n log.error('ā Resource read failed:', result.error.message);\n if (result.error.data) {\n log.error(' Details:', JSON.stringify(result.error.data, null, 2));\n }\n } else if (result.result && result.result.contents) {\n log.info('ā
Resource read successful!');\n for (const content of result.result.contents) {\n if (content.type === 'text') {\n log.info('š Content:', content.text);\n } else {\n log.info(`š Content (${content.type}):`, JSON.stringify(content, null, 2));\n }\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to read resource:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List available resource templates\n */\nexport async function listResourceTemplatesCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching resource templates...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/templates/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/templates/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list resource templates: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.resourceTemplates || result.result.resourceTemplates.length === 0) {\n log.info('š No resource templates available.');\n return;\n }\n\n const templates = result.result.resourceTemplates as ResourceTemplate[];\n log.info(`š Found ${templates.length} resource template(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāā');\n log.info('ā Template URI ā Name ā MIME Type ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāā¤');\n\n // Table rows\n for (const template of templates) {\n const uri = template.uriTemplate.substring(0, 36).padEnd(36);\n const name = (template.name || 'Unnamed').substring(0, 36).padEnd(36);\n const mimeType = (template.mimeType || 'unknown').substring(0, 10).padEnd(10);\n log.info(`ā ${uri} ā ${name} ā ${mimeType} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const template of templates) {\n log.info(`š ${template.name || 'Unnamed'}:`);\n log.info(` š URI Template: ${template.uriTemplate}`);\n log.info(` š Description: ${template.description || 'No description'}`);\n log.info(` š MIME Type: ${template.mimeType || 'unknown'}`);\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list resource templates:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["existsSync","existsSync","readFileSync","join","existsSync","logsResponse","resolve","resolve","loadEnvFile","existsSync","resolve","resolve","existsSync","require"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/commands/deploy.ts","../src/utils/logger.ts","../src/utils/cli-io.ts","../src/utils/validate-mcp-project.ts","../src/utils/config.ts","../src/commands/deployments.ts","../src/commands/validate.ts","../src/commands/auth.ts","../src/commands/mcp-servers.ts","../src/commands/plugins.ts","../src/commands/mcp.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { deployCommand } from './commands/deploy';\nimport { listDeploymentsCommand, getDeploymentCommand, deleteDeploymentCommand, updateDeploymentCommand } from './commands/deployments';\nimport { validateCommand } from './commands/validate';\nimport { loginCommand, logoutCommand, whoamiCommand, configCommand } from './commands/auth';\nimport {\n listAvailableMcpServersCommand,\n listEnabledMcpServersCommand,\n enableMcpServerCommand,\n disableMcpServerCommand,\n getMcpServerCommand,\n} from './commands/mcp-servers';\nimport {\n listPluginSecretsCommand,\n setPluginSecretCommand,\n deletePluginSecretCommand,\n deletePluginCommand,\n} from './commands/plugins';\nimport {\n listToolsCommand,\n callToolCommand,\n listResourcesCommand,\n readResourceCommand,\n listResourceTemplatesCommand,\n} from './commands/mcp';\nimport { logger } from './utils/logger';\nimport { createRequire } from 'module';\n\nexport const program = new Command();\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json') as { version: string };\n\nprogram\n .name('apexmcp')\n .description('CLI tool for deploying MCP servers to ApexMCP')\n .version(version);\n\nprogram\n .command('deploy')\n .description('Deploy an MCP server')\n .argument('<project-dir>', 'Path to the MCP server project directory')\n .option('--env-file <file>', 'Environment variables file')\n .option('--domain <domain>', 'Custom domain for deployment')\n .option(\n '--url-strategy <strategy>',\n 'URL generation strategy (readable, obscure, timestamp-only, random)',\n 'readable'\n )\n .option(\n '--project-path <path>',\n 'Project identifier path (stable slug used by the deploy service)'\n )\n .option('--project-name <name>', 'Project name for deployment')\n .option('--entry-point <file>', 'Explicit entry point file (overrides auto-detection)')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deployCommand);\n\nprogram\n .command('list')\n .description('List all deployments')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listDeploymentsCommand);\n\nprogram\n .command('status')\n .description('Get deployment status')\n .argument('<deployment-name>', 'Deployment name')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(getDeploymentCommand);\n\nprogram\n .command('update')\n .description('Update deployment properties')\n .argument('<deployment-name>', 'Deployment name')\n .option('--name <name>', 'Update deployment name')\n .option('--domain <domain>', 'Update deployment domain')\n .option('--env-file <file>', 'Update environment variables from file')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(updateDeploymentCommand);\n\nprogram\n .command('delete')\n .description('Delete a deployment')\n .argument('<deployment-name>', 'Deployment name')\n .option('--force', 'Skip confirmation prompt')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deleteDeploymentCommand);\n\nprogram\n .command('validate')\n .description('Validate an MCP project')\n .argument('<project-path>', 'Path to the MCP server project')\n .option(\n '--endpoint <url>',\n 'Deploy service endpoint for API validation (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(validateCommand);\n\n// Authentication commands\nprogram\n .command('login')\n .description('Authenticate with ApexMCP')\n .option('--token <token>', 'Direct JWT token authentication')\n .option('--email <email>', 'Email for authentication')\n .option('--password <password>', 'Password for authentication')\n .option(\n '--endpoint <url>',\n 'Core service endpoint',\n 'https://core.apexmcp.dev'\n )\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(loginCommand);\n\nprogram\n .command('logout')\n .description('Clear authentication credentials')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(logoutCommand);\n\nprogram\n .command('whoami')\n .description('Show current authentication status and configuration')\n .option(\n '--endpoint <url>',\n 'Core service endpoint',\n 'https://core.apexmcp.dev'\n )\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(whoamiCommand);\n\n// MCP Server management commands\nprogram\n .command('servers')\n .description('List available MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listAvailableMcpServersCommand);\n\nprogram\n .command('servers:enabled')\n .description('List enabled MCP servers for your organization')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listEnabledMcpServersCommand);\n\nprogram\n .command('servers:enable')\n .description('Enable an MCP server for your organization')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(enableMcpServerCommand);\n\nprogram\n .command('servers:disable')\n .description('Disable an MCP server for your organization')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(disableMcpServerCommand);\n\nprogram\n .command('servers:info')\n .description('Get detailed information about an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(getMcpServerCommand);\n\n// Plugin/Secret management commands\nprogram\n .command('secrets')\n .description('List secrets for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listPluginSecretsCommand);\n\nprogram\n .command('secrets:set')\n .description('Set a secret for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .argument('<secret-key>', 'Secret key')\n .argument('<secret-value>', 'Secret value')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(setPluginSecretCommand);\n\nprogram\n .command('secrets:delete')\n .description('Delete a secret for an MCP server')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .argument('<secret-key>', 'Secret key')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deletePluginSecretCommand);\n\nprogram\n .command('plugins:delete')\n .description('Delete an entire plugin configuration')\n .argument('<catalog-id>', 'MCP server catalog ID')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(deletePluginCommand);\n\n// MCP interaction commands\nprogram\n .command('tools')\n .description('List available tools from enabled MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listToolsCommand);\n\nprogram\n .command('tools:call')\n .description('Call a tool with specified parameters')\n .argument('<tool-name>', 'Name of the tool to call')\n .argument('<params-json>', 'Tool parameters as JSON string')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(callToolCommand);\n\nprogram\n .command('resources')\n .description('List available resources from enabled MCP servers')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listResourcesCommand);\n\nprogram\n .command('resources:read')\n .description('Read a specific resource')\n .argument('<resource-uri>', 'URI of the resource to read')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(readResourceCommand);\n\nprogram\n .command('resources:templates')\n .description('List available resource templates')\n .option(\n '--endpoint <url>',\n 'Core service endpoint (default: configured endpoint)'\n )\n .option('--token <token>', 'Authentication token (default: configured token)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action(listResourceTemplatesCommand);\n\n// Configuration command\nprogram\n .command('config')\n .description('Manage CLI configuration')\n .argument('<action>', 'Action: get, set <key> <value>, reset')\n .argument('[key]', 'Configuration key (for set action)')\n .argument('[value]', 'Configuration value (for set action)')\n .option('--json', 'Output JSON for CI/CD consumption')\n .action((action: string, key?: string, value?: string, options?: any) => {\n configCommand(action, key, value, options);\n });\n\nexport function setupProgram(): void {\n // Disable exit override during testing to prevent process termination\n if (!process.env.NODE_ENV?.includes('test')) {\n program.exitOverride();\n }\n}\n\nexport function runMain(): void {\n try {\n program.parse();\n } catch (error) {\n logger.error(\n 'CLI Error:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\nsetupProgram();\nrunMain();","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { logger as defaultLogger } from '../utils/logger';\nimport { createLogger, isJsonMode, withStdoutSuppressed, type CliLogger } from '../utils/cli-io';\nimport { loadEnvFile } from '../utils/load-env-file';\nimport { validateMCPProject } from '../utils/validate-mcp-project';\nimport { configManager } from '../utils/config';\n\nexport interface DeployOptions {\n envFile?: string;\n domain?: string;\n urlStrategy?: string;\n /**\n * Stable identifier sent to the deploy service as `projectPath`.\n * This is typically a slug like `my-mcp-server`.\n */\n projectPath?: string;\n /**\n * Human-readable name shown in dashboards, sent as `projectName`.\n */\n projectName?: string;\n /**\n * Explicit entry point file (relative to project root).\n */\n entryPoint?: string;\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\ninterface DeployResponse {\n success: boolean;\n denoDeploymentId?: string;\n deployment?: {\n id: string;\n status: 'failed' | 'pending' | 'success';\n domains?: string[];\n tier: 'free' | 'pro' | 'enterprise';\n };\n urls?: {\n primary: string;\n apexmcp?: string;\n };\n project?: {\n id: string;\n name: string;\n };\n domainAttachment?: {\n domainAttached: boolean;\n rootDomainVerified: boolean;\n attachedDomains: string[];\n note: string;\n };\n databaseRecord?: {\n id: string;\n generatedDomain: string;\n pseudoDomain: string;\n };\n error?: string;\n}\n\ninterface ProjectData {\n entryPoint: string;\n files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>;\n}\n\ninterface DeploymentData {\n projectIdentifier: string;\n entryPoint: string;\n envVars: Record<string, string>;\n formData: FormData;\n}\n\n\nexport class DeployService {\n constructor(\n private readonly fs: {\n existsSync: (path: string) => boolean;\n readFileSync?: (path: string) => string;\n } = { existsSync },\n private readonly path: {\n resolve: (path: string) => string;\n } = { resolve },\n private readonly envLoader: {\n loadEnvFile: (file: string) => Promise<Record<string, string>>;\n } = { loadEnvFile },\n private readonly validator: {\n validateMCPProject: (path: string) => Promise<ProjectData>;\n } = { validateMCPProject },\n private readonly fetchClient: {\n fetch: (url: string, options?: RequestInit) => Promise<Response>;\n } = { fetch: global.fetch },\n private readonly log: CliLogger = defaultLogger\n ) {}\n\n validateProjectPath(projectPath: string): string {\n const resolvedPath = this.path.resolve(projectPath);\n if (!this.fs.existsSync(resolvedPath)) {\n throw new Error(`Project path does not exist: ${resolvedPath}`);\n }\n return resolvedPath;\n }\n\n async validateProjectStructure(projectPath: string): Promise<ProjectData> {\n return await this.validator.validateMCPProject(projectPath);\n }\n\n async loadEnvironmentVariables(\n envFile?: string\n ): Promise<Record<string, string>> {\n if (!envFile) {\n return {};\n }\n\n return await this.envLoader.loadEnvFile(envFile);\n }\n\n prepareDeploymentData(\n resolvedPath: string,\n projectData: ProjectData,\n envVars: Record<string, string>,\n options: DeployOptions\n ): DeploymentData {\n const formData = new FormData();\n const projectIdentifier =\n options.projectPath || resolvedPath.split('/').pop() || 'unnamed-project';\n\n formData.append('projectPath', projectIdentifier);\n\n const effectiveEntryPoint = options.entryPoint || projectData.entryPoint;\n formData.append('entryPoint', effectiveEntryPoint);\n\n if (options.domain) {\n formData.append('domain', options.domain);\n }\n\n if (options.urlStrategy) {\n formData.append('urlStrategy', options.urlStrategy);\n }\n\n if (options.projectName) {\n formData.append('projectName', options.projectName);\n }\n\n // Add environment variables\n if (Object.keys(envVars).length > 0) {\n const envContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n');\n formData.append(\n 'envFile',\n new Blob([envContent], { type: 'text/plain' }),\n 'env'\n );\n }\n\n // Add project files\n for (const [filename, fileData] of Object.entries(projectData.files)) {\n const mimeType = fileData.encoding === 'base64' ? 'application/octet-stream' : 'text/plain';\n formData.append(\n 'files',\n new Blob([fileData.content], { type: mimeType }),\n filename\n );\n }\n\n return {\n projectIdentifier,\n entryPoint: effectiveEntryPoint,\n envVars,\n formData,\n };\n }\n\n async executeDeployment(\n endpoint: string,\n formData: FormData,\n token?: string\n ): Promise<DeployResponse> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Start the deployment\n this.log.info('š¦ Initiating deployment...');\n const response = await this.fetchClient.fetch(`${endpoint}/api/deploy`, {\n method: 'POST',\n body: formData,\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Deployment failed: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as DeployResponse;\n\n // If deployment has a Deno deployment ID and is not immediately successful, monitor it\n if (result.denoDeploymentId && result.deployment?.status !== 'success') {\n this.log.info('š Monitoring deployment progress...');\n const monitorResult = await this.monitorDeployment(endpoint, result.denoDeploymentId, token);\n\n // If deployment failed, show error details\n if (monitorResult.status === 'failed') {\n this.log.error('ā Build failed - check the logs above for error details');\n // Don't throw here - let the response handler deal with the failed result\n }\n }\n\n return result;\n }\n\n /**\n * Monitor deployment progress with real-time logs and status updates\n */\n private async monitorDeployment(\n endpoint: string,\n deploymentId: string,\n token?: string\n ): Promise<{ status: string; logs: string[] }> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n let lastStatus = 'pending';\n const collectedLogs: string[] = [];\n let buildLogsReceived = 0;\n\n // Monitor for up to 5 minutes\n const maxWaitTime = 5 * 60 * 1000; // 5 minutes\n const pollInterval = 2000; // 2 seconds\n const startTime = Date.now();\n\n while (Date.now() - startTime < maxWaitTime) {\n try {\n // Get current deployment status\n const statusResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/status`,\n { headers }\n );\n\n if (statusResponse.ok) {\n const statusData = (await statusResponse.json()) as any;\n const currentStatus = statusData?.status?.status;\n\n if (currentStatus !== lastStatus) {\n this.log.info(`š Deployment status: ${currentStatus}`);\n lastStatus = currentStatus;\n }\n\n // Check if deployment is complete\n if (currentStatus === 'success') {\n this.log.info('ā
Deployment completed successfully!');\n return { status: currentStatus, logs: collectedLogs };\n } else if (currentStatus === 'failed') {\n this.log.error('ā Deployment failed!');\n // For failed deployments, try to get build logs even if not collected yet\n if (collectedLogs.length === 0) {\n // Try one more time to get build logs\n try {\n const logsResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/logs/build`,\n { headers }\n );\n if (logsResponse.ok) {\n const logsData = (await logsResponse.json()) as any;\n if (logsData?.logs && Array.isArray(logsData.logs)) {\n logsData.logs.forEach((log: any) => {\n const logMessage = `${log.level.toUpperCase()}: ${log.message}`;\n collectedLogs.push(logMessage);\n this.log.error(`š“ ${log.message}`);\n });\n }\n }\n } catch (error) {\n this.log.debug('Could not fetch build logs for failed deployment', error);\n }\n }\n\n if (collectedLogs.length > 0) {\n this.log.info('š Build logs:');\n collectedLogs.forEach(log => this.log.info(` ${log}`));\n } else {\n this.log.info('š No build logs available');\n }\n return { status: currentStatus, logs: collectedLogs };\n }\n }\n\n // Get build logs\n const logsResponse = await this.fetchClient.fetch(\n `${endpoint}/api/deployments/${deploymentId}/logs/build?since=${new Date(Date.now() - 30000).toISOString()}`,\n { headers }\n );\n\n if (logsResponse.ok) {\n const logsData = (await logsResponse.json()) as any;\n if (logsData?.logs && Array.isArray(logsData.logs)) {\n // Show new logs and collect them\n for (const log of logsData.logs) {\n const logMessage = `${log.level.toUpperCase()}: ${log.message}`;\n collectedLogs.push(logMessage);\n\n if (log.level === 'error') {\n this.log.error(`š“ ${log.message}`);\n } else if (log.level === 'warn') {\n this.log.warn(`š” ${log.message}`);\n } else {\n this.log.info(`ā¹ļø ${log.message}`);\n }\n }\n }\n }\n\n } catch (error) {\n // Continue monitoring despite errors\n this.log.debug('Monitoring error (continuing):', error);\n }\n\n // Wait before next poll\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n }\n\n if (Date.now() - startTime >= maxWaitTime) {\n this.log.warn('ā° Deployment monitoring timed out, but deployment may still be in progress');\n return { status: 'timeout', logs: collectedLogs };\n }\n\n return { status: lastStatus, logs: collectedLogs };\n }\n\n async handleResponse(\n result: DeployResponse,\n options: DeployOptions\n ): Promise<void> {\n const outputJson = isJsonMode(options);\n\n if (outputJson) {\n // Output JSON for CI/CD consumption\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result));\n } else {\n // Human-readable output for CLI users\n if (result.success && result.urls && result.deployment) {\n this.log.info('š Deployment successful!');\n this.log.info(`š URL: ${result.urls.primary}`);\n this.log.info(`š Deployment ID: ${result.deployment.id}`);\n this.log.info(`š Status: ${result.deployment.status}`);\n\n if (result.project) {\n this.log.info(`šļø Project: ${result.project.name}`);\n }\n\n if (result.domainAttachment) {\n this.log.info(`š Domain attachment: ${result.domainAttachment.note}`);\n }\n\n this.log.info('\\nš Next steps:');\n this.log.info('1. Test your MCP server at the URLs above');\n this.log.info('2. Configure your MCP client to connect to this endpoint');\n this.log.info('3. Monitor deployment status if needed');\n } else if (result.error) {\n this.log.error('ā Deployment failed:', result.error);\n } else {\n this.log.error('ā Deployment failed: Unknown error');\n }\n }\n }\n\n async deploy(projectPath: string, options: DeployOptions): Promise<void> {\n try {\n this.log.info('š Starting MCP server deployment...');\n this.log.info(`š Project directory: ${projectPath}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions: DeployOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Validate project path\n const resolvedPath = this.validateProjectPath(projectPath);\n\n // Validate MCP project structure\n const projectData = await withStdoutSuppressed(isJsonMode(options), () =>\n this.validateProjectStructure(resolvedPath)\n );\n\n // Allow explicit entry point override for CI usage.\n // If the validator returns a bundle-only project (e.g. main.ts) and the override doesn't\n // exist in packaged files, fail early with a clear error.\n if (options.entryPoint) {\n const override = options.entryPoint.trim();\n if (!override) {\n throw new Error('--entry-point cannot be empty');\n }\n if (!projectData.files[override]) {\n const overridePath = `${resolvedPath}/${override}`;\n if (!this.fs.existsSync(overridePath)) {\n throw new Error(\n `Entry point override not found in packaged files and does not exist on disk: ${override}`\n );\n }\n // If it exists on disk but was omitted by validator, that's unexpected; require it to be included.\n throw new Error(\n `Entry point override exists on disk but was not included in packaged files: ${override}. ` +\n `Ensure it is reachable by your project config (deno.json/package.json) or use the auto-detected entry point.`\n );\n }\n projectData.entryPoint = override;\n }\n\n this.log.info(`ā
Entry point: ${projectData.entryPoint}`);\n\n // Load environment variables\n const envVars = await this.loadEnvironmentVariables(options.envFile);\n if (options.envFile) {\n this.log.info(\n `š Loading environment variables from: ${options.envFile}`\n );\n this.log.info(\n `ā
Loaded ${Object.keys(envVars).length} environment variables`\n );\n }\n\n // Prepare deployment data\n const deploymentData = this.prepareDeploymentData(\n resolvedPath,\n projectData,\n envVars,\n effectiveOptions\n );\n\n // Execute deployment\n this.log.info('š Deploying to ApexMCP...');\n const result = await this.executeDeployment(\n effectiveOptions.endpoint!,\n deploymentData.formData,\n effectiveOptions.token\n );\n\n // Handle response (now async for mapping creation)\n await this.handleResponse(result, effectiveOptions);\n } catch (error) {\n this.log.error(\n 'ā Deployment failed:',\n error instanceof Error ? error.message : String(error)\n );\n throw error; // Re-throw so caller can handle exit\n }\n }\n}\n\n// Backward compatibility wrapper\nexport async function deployCommand(\n projectPath: string,\n options: DeployOptions\n): Promise<void> {\n const service = new DeployService(\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n createLogger(options)\n );\n try {\n await service.deploy(projectPath, options);\n } catch (error) {\n const log = createLogger(options);\n log.error(\n 'Deployment failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { LOG_LEVEL, Logger } from \"@apexmcp/logger\";\n\nexport const logger = new Logger(LOG_LEVEL.DEBUG);","import { logger as defaultLogger } from './logger';\n\nexport type CliLogger = {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n};\n\nexport function isJsonMode(options?: { json?: boolean }): boolean {\n return (\n !!options?.json ||\n process.env.CI === 'true' ||\n process.env.GITHUB_ACTIONS === 'true'\n );\n}\n\nexport function createLogger(options?: { json?: boolean }): CliLogger {\n if (isJsonMode(options)) {\n return {\n debug: () => {},\n info: () => {},\n warn: (message: string, ...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error(message, ...args);\n },\n error: (message: string, ...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error(message, ...args);\n },\n };\n }\n\n return defaultLogger;\n}\n\nexport function withStdoutSuppressed<T>(enabled: boolean, fn: () => T): T {\n if (!enabled) return fn();\n\n // Ensure absolutely nothing pollutes stdout in CI/--json mode.\n const originalLog = console.log;\n const originalInfo = console.info;\n const originalDebug = console.debug;\n\n try {\n console.log = () => {};\n console.info = () => {};\n console.debug = () => {};\n return fn();\n } finally {\n console.log = originalLog;\n console.info = originalInfo;\n console.debug = originalDebug;\n }\n}\n\n\n","import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { execSync } from 'node:child_process';\n\n// Binary file extensions that should be base64 encoded\nconst BINARY_EXTENSIONS = new Set([\n '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg',\n '.woff', '.woff2', '.ttf', '.eot',\n '.mp3', '.mp4', '.avi', '.mov', '.wmv',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx',\n '.zip', '.tar', '.gz', '.7z', '.rar',\n '.exe', '.dll', '.so', '.dylib',\n]);\n\nfunction isBinaryFile(filename: string): boolean {\n const ext = filename.toLowerCase().substring(filename.lastIndexOf('.'));\n return BINARY_EXTENSIONS.has(ext);\n}\n\nfunction encodeFileContent(filename: string, buffer: Buffer): { content: string; encoding: 'utf-8' | 'base64' } {\n if (isBinaryFile(filename)) {\n // For binary files, base64 encode the raw bytes\n return {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n } else {\n // For text files, try to decode as UTF-8\n try {\n return {\n content: buffer.toString('utf-8'),\n encoding: 'utf-8'\n };\n } catch (error) {\n // If UTF-8 decoding fails, treat as binary\n return {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n}\n\n/**\n * Smart deployment bundle creation that respects project build processes\n */\nasync function createDeploymentBundleSmart(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n console.log('š Starting smart deployment bundling...');\n\n // Strategy 1: Try to build the project first\n const buildResult = await tryBuildProject(projectPath);\n if (buildResult.success && buildResult.outputPath) {\n console.log('š¦ Using built artifact for bundling');\n const bundleResult = await bundleBuiltArtifactSmart(buildResult.outputPath, projectPath);\n if (bundleResult.success) {\n return bundleResult;\n }\n console.log('ā ļø Built artifact bundling failed, trying source bundling');\n }\n\n // Strategy 2: Bundle source with proper Deno configuration\n console.log('š¦ Attempting source bundling with Deno configuration');\n const sourceBundleResult = await bundleSourceWithDenoConfig(projectPath, entryPoint);\n if (sourceBundleResult.success) {\n return sourceBundleResult;\n }\n\n // Strategy 3: Last resort - copy source directly\n console.log('ā ļø Source bundling failed, falling back to direct source copy');\n return await copySourceDirectlySmart(projectPath, entryPoint);\n}\n\n/**\n * Try to build the project using detected build scripts\n */\nasync function tryBuildProject(projectPath: string): Promise<{ success: boolean; outputPath?: string; errors: string[] }> {\n // Check for package.json build script\n const packageJsonPath = join(projectPath, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.scripts?.build) {\n console.log(`šØ Running npm build script: ${packageJson.scripts.build}`);\n execSync('npm run build', {\n cwd: projectPath,\n stdio: 'inherit',\n env: { ...process.env, NODE_ENV: 'production' }\n });\n\n // Check for common build outputs\n const possibleOutputs = ['dist/main.ts', 'dist/index.ts', 'build/main.ts', 'build/index.ts'];\n for (const output of possibleOutputs) {\n const outputPath = join(projectPath, output);\n if (existsSync(outputPath)) {\n return { success: true, outputPath, errors: [] };\n }\n }\n }\n } catch (error) {\n console.log(`ā ļø Build script failed: ${(error as Error).message}`);\n }\n }\n\n // Check for deno.json tasks\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const denoConfigPath = existsSync(denoJsonPath) ? denoJsonPath : existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (denoConfigPath) {\n try {\n const denoConfig = JSON.parse(readFileSync(denoConfigPath, 'utf-8'));\n if (denoConfig.tasks?.build) {\n console.log(`šØ Running deno task build: ${denoConfig.tasks.build}`);\n execSync('deno task build', {\n cwd: projectPath,\n stdio: 'inherit',\n env: { ...process.env, NODE_ENV: 'production' }\n });\n\n // Check for build outputs\n const possibleOutputs = ['dist/main.ts', 'dist/index.ts'];\n for (const output of possibleOutputs) {\n const outputPath = join(projectPath, output);\n if (existsSync(outputPath)) {\n return { success: true, outputPath, errors: [] };\n }\n }\n }\n } catch (error) {\n console.log(`ā ļø Deno build task failed: ${(error as Error).message}`);\n }\n }\n\n return { success: false, errors: ['No build script found or build failed'] };\n}\n\n/**\n * Bundle built artifact with proper Deno configuration\n */\nasync function bundleBuiltArtifactSmart(\n artifactPath: string,\n projectPath: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n const denoConfig = loadDenoConfigForBundling(projectPath);\n const permissions = inferDenoPermissions(projectPath);\n\n const bundleArgs = [\n 'deno bundle',\n '--quiet',\n '--allow-import',\n ...denoConfig.configArgs,\n artifactPath\n ];\n\n console.log(`š¦ Bundling built artifact: ${artifactPath}`);\n const bundleCmd = bundleArgs.join(' ');\n const bundledCode = execSync(bundleCmd, {\n cwd: projectPath,\n encoding: 'utf-8',\n stdio: 'pipe'\n });\n\n console.log(`ā
Successfully bundled ${bundledCode.length} characters from built artifact`);\n\n return {\n success: true,\n code: bundledCode,\n files: {\n 'main.ts': {\n content: bundledCode,\n encoding: 'utf-8'\n }\n },\n errors: [],\n method: 'built-artifact'\n };\n } catch (error) {\n console.log(`ā ļø Built artifact bundling failed: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'built-artifact'\n };\n }\n}\n\n/**\n * Bundle source with proper Deno configuration\n */\nasync function bundleSourceWithDenoConfig(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n const denoConfig = loadDenoConfigForBundling(projectPath);\n const permissions = inferDenoPermissions(projectPath);\n\n const bundleArgs = [\n 'deno bundle',\n '--quiet',\n '--allow-import',\n ...denoConfig.configArgs,\n entryPoint\n ];\n\n console.log(`š¦ Bundling source with Deno config: ${entryPoint}`);\n const bundleCmd = bundleArgs.join(' ');\n const bundledCode = execSync(bundleCmd, {\n cwd: projectPath,\n encoding: 'utf-8',\n stdio: 'pipe'\n });\n\n console.log(`ā
Successfully bundled ${bundledCode.length} characters from source`);\n\n return {\n success: true,\n code: bundledCode,\n files: {\n 'main.ts': {\n content: bundledCode,\n encoding: 'utf-8'\n }\n },\n errors: [],\n method: 'source-bundle'\n };\n } catch (error) {\n console.log(`ā ļø Source bundling failed: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'source-bundle'\n };\n }\n}\n\n/**\n * Copy source files directly (last resort)\n */\nasync function copySourceDirectlySmart(\n projectPath: string,\n entryPoint: string\n): Promise<{ success: boolean; code?: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>; errors: string[]; method: string }> {\n try {\n console.log(`š Using source file directly: ${entryPoint}`);\n\n const sourcePath = join(projectPath, entryPoint);\n const sourceContent = readFileSync(sourcePath, 'utf-8');\n const fileName = entryPoint.split('/').pop() || 'main.ts';\n\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {\n [fileName]: {\n content: sourceContent,\n encoding: 'utf-8'\n }\n };\n\n // Include additional source files if needed\n if (entryPoint.startsWith('dist/') && sourceContent.includes('../src/')) {\n console.log('š¦ Including src/ directory files for deployment');\n await includeSourceDirectorySmart(projectPath, files);\n }\n\n return {\n success: true,\n code: sourceContent,\n files,\n errors: [],\n method: 'direct-copy'\n };\n } catch (error) {\n console.log(`ā Failed to copy source file: ${(error as Error).message}`);\n return {\n success: false,\n files: {},\n errors: [(error as Error).message],\n method: 'direct-copy'\n };\n }\n}\n\n/**\n * Infer Deno permissions needed for bundling based on code analysis\n */\nfunction inferDenoPermissions(projectPath: string): string[] {\n const permissions: string[] = ['read']; // Always need read\n\n try {\n // Check package.json for clues about needed permissions\n const packageJsonPath = join(projectPath, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n // If using dotenv or env-related packages, allow env\n if (deps.dotenv || deps['dotenv-cli'] || packageJson.scripts?.build?.includes('NODE_ENV')) {\n permissions.push('env');\n }\n\n // If using file system packages, allow write\n if (deps['fs-extra'] || deps.mkdirp) {\n permissions.push('write');\n }\n\n // If using network packages, allow net\n if (deps.axios || deps.node || deps['node-fetch'] || deps.hono) {\n permissions.push('net');\n }\n }\n\n // Check deno.json for explicit permissions or network usage\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const denoConfigPath = existsSync(denoJsonPath) ? denoJsonPath :\n existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (denoConfigPath) {\n try {\n const config = JSON.parse(readFileSync(denoConfigPath, 'utf-8'));\n // If using deploy config, likely needs network\n if (config.deploy) {\n permissions.push('net');\n }\n } catch (error) {\n // Ignore config parse errors\n }\n }\n\n } catch (error) {\n console.log(`ā ļø Error inferring permissions: ${(error as Error).message}`);\n }\n\n return [...new Set(permissions)]; // Remove duplicates\n}\n\n/**\n * Include source directory files when the built artifact still depends on them\n */\nasync function includeSourceDirectorySmart(\n projectPath: string,\n files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }>\n): Promise<void> {\n const srcPath = join(projectPath, 'src');\n\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip dev directory for production deployments\n if (item !== 'dev') {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile() && (item.endsWith('.ts') || item.endsWith('.js'))) {\n // Only include TypeScript and JavaScript files\n const content = readFileSync(itemPath, 'utf-8');\n files[`src/${itemRelativePath}`] = {\n content,\n encoding: 'utf-8'\n };\n }\n }\n }\n\n if (existsSync(srcPath)) {\n addDirectory(srcPath);\n }\n}\n\n/**\n * Deploy built artifact for Deno Deploy projects\n */\nasync function deployBuiltArtifact(\n projectPath: string,\n entryPoint: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add deno.json as-is\n const denoJsonPath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonPath)) {\n files['deno.json'] = {\n content: readFileSync(denoJsonPath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n\n // Add the built entrypoint file with modified imports\n const entryPointPath = join(projectPath, entryPoint);\n if (existsSync(entryPointPath)) {\n let content = readFileSync(entryPointPath, 'utf-8');\n\n // For deployment, we need to change the imports to work with the file structure\n // The dist/main.ts is at root level, src/ files are also at root level\n // So '../src/middleware/...' becomes './middleware/...'\n console.log(`š Original content sample:`, content.split('\\n').slice(3, 8).join('\\n'));\n content = content.replace(/from '\\.\\.\\/src\\//g, \"from './\");\n console.log(`š Modified content sample:`, content.split('\\n').slice(3, 8).join('\\n'));\n\n files['main.ts'] = {\n content,\n encoding: 'utf-8'\n };\n }\n\n // Add all source files that the built artifact references\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip common exclude directories\n if (!['node_modules', '.git', 'dist', 'coverage', '.swc', 'dev'].includes(item)) {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile()) {\n // Only include relevant source files\n const ext = item.split('.').pop()?.toLowerCase();\n if (['ts', 'js', 'json', 'txt', 'md'].includes(ext || '')) {\n files[itemRelativePath] = {\n content: readFileSync(itemPath, 'utf-8'),\n encoding: 'utf-8'\n };\n } else {\n // For binary files, use base64\n const buffer = readFileSync(itemPath);\n files[itemRelativePath] = {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n }\n }\n\n // Add src/ directory since built artifacts reference it\n if (existsSync(join(projectPath, 'src'))) {\n addDirectory(join(projectPath, 'src'), 'src');\n }\n\n // Add root level files\n const rootFiles = ['package.json', 'import_map.json', 'README.md'];\n for (const file of rootFiles) {\n const filePath = join(projectPath, file);\n if (existsSync(filePath)) {\n files[file] = {\n content: readFileSync(filePath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n }\n\n const finalEntrypoint = 'main.ts'; // Use main.ts as entrypoint when files are structured properly\n\n console.log(`š Deno Deploy Built: entrypoint=\"${finalEntrypoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint: finalEntrypoint, files };\n}\n\n/**\n * Deploy source files directly for Deno Deploy projects\n */\nasync function deployDenoSourceFiles(\n projectPath: string,\n entryPoint: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add deno.json as-is\n const denoJsonPath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonPath)) {\n files['deno.json'] = {\n content: readFileSync(denoJsonPath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n\n // Add all source files recursively, preserving directory structure\n function addDirectory(dirPath: string, relativePath = ''): void {\n const items = readdirSync(dirPath);\n\n for (const item of items) {\n const itemPath = join(dirPath, item);\n const itemRelativePath = relativePath ? `${relativePath}/${item}` : item;\n const stat = statSync(itemPath);\n\n if (stat.isDirectory()) {\n // Skip common exclude directories\n if (!['node_modules', '.git', 'dist', 'coverage', '.swc', 'dev'].includes(item)) {\n addDirectory(itemPath, itemRelativePath);\n }\n } else if (stat.isFile()) {\n // Only include relevant source files\n const ext = item.split('.').pop()?.toLowerCase();\n if (['ts', 'js', 'json', 'txt', 'md'].includes(ext || '')) {\n files[itemRelativePath] = {\n content: readFileSync(itemPath, 'utf-8'),\n encoding: 'utf-8'\n };\n } else {\n // For binary files, use base64\n const buffer = readFileSync(itemPath);\n files[itemRelativePath] = {\n content: buffer.toString('base64'),\n encoding: 'base64'\n };\n }\n }\n }\n }\n\n // Add source files preserving structure\n if (existsSync(join(projectPath, 'src'))) {\n addDirectory(join(projectPath, 'src'), 'src');\n }\n\n // Add root level files\n const rootFiles = ['package.json', 'import_map.json', 'README.md'];\n for (const file of rootFiles) {\n const filePath = join(projectPath, file);\n if (existsSync(filePath)) {\n files[file] = {\n content: readFileSync(filePath, 'utf-8'),\n encoding: 'utf-8'\n };\n }\n }\n\n console.log(`š Deno Deploy Source: entrypoint=\"${entryPoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint, files };\n}\n\n/**\n * Load Deno configuration for bundling\n */\nfunction loadDenoConfigForBundling(projectPath: string): { configArgs: string[]; importMap?: string } {\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n\n const configPath = existsSync(denoJsonPath) ? denoJsonPath :\n existsSync(denoJsoncPath) ? denoJsoncPath : null;\n\n if (!configPath) {\n return { configArgs: [] };\n }\n\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf-8'));\n const configArgs: string[] = [`--config`, configPath];\n\n // Handle import map\n if (config.importMap) {\n const importMapPath = join(projectPath, config.importMap);\n if (existsSync(importMapPath)) {\n configArgs.push('--import-map', importMapPath);\n }\n }\n\n return { configArgs, importMap: config.importMap };\n } catch (error) {\n console.log(`ā ļø Failed to load Deno config: ${(error as Error).message}`);\n return { configArgs: [] };\n }\n}\n\nexport async function validateMCPProject(\n projectPath: string\n): Promise<{ entryPoint: string; files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> }> {\n const denoJsonPath = join(projectPath, 'deno.json');\n const denoJsoncPath = join(projectPath, 'deno.jsonc');\n const packageJsonPath = join(projectPath, 'package.json');\n\n // Check for configuration files in order of preference\n let configPath: string | null = null;\n let configType: 'deno' | 'package' | null = null;\n let config: any = null;\n\n if (existsSync(denoJsonPath)) {\n configPath = denoJsonPath;\n configType = 'deno';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n } else if (existsSync(denoJsoncPath)) {\n configPath = denoJsoncPath;\n configType = 'deno';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n } else if (existsSync(packageJsonPath)) {\n configPath = packageJsonPath;\n configType = 'package';\n config = JSON.parse(readFileSync(configPath, 'utf-8'));\n }\n\n // Extract entry point based on config (if available)\n let entryPoint: string | null = null;\n\n if (config) {\n if (configType === 'deno') {\n // Check deno.json fields in order of preference\n entryPoint = config.main || config.entryPoint;\n // Check for Deno Deploy entrypoint\n if (!entryPoint && config.deploy?.entrypoint) {\n entryPoint = config.deploy.entrypoint;\n }\n } else if (configType === 'package') {\n // Check package.json fields in order of preference\n entryPoint = config.main || config.module;\n\n // Check exports field if present\n if (!entryPoint && config.exports) {\n if (typeof config.exports === 'string') {\n entryPoint = config.exports;\n } else if (config.exports['.']) {\n const dotExport = config.exports['.'];\n if (typeof dotExport === 'string') {\n entryPoint = dotExport;\n } else if (dotExport.import) {\n entryPoint = dotExport.import;\n } else if (dotExport.default) {\n entryPoint = dotExport.default;\n }\n }\n }\n }\n }\n\n // If no entry point found in config, try to infer from common patterns\n if (!entryPoint) {\n const commonEntryPoints = [\n 'main.ts', 'main.js', 'index.ts', 'index.js',\n 'server.ts', 'server.js', 'app.ts', 'app.js'\n ];\n\n for (const candidate of commonEntryPoints) {\n const candidatePath = join(projectPath, candidate);\n if (existsSync(candidatePath)) {\n entryPoint = candidate;\n break;\n }\n }\n }\n\n if (!entryPoint) {\n throw new Error(\n 'No entry point found. Please specify one in deno.json/package.json or use a common filename like main.ts, index.ts, server.ts, or app.ts'\n );\n }\n\n // Check if this is a Deno Deploy project with proper configuration\n const hasDenoDeployConfig = configType === 'deno' && config?.deploy?.entrypoint;\n const resolvedEntryPointPath = join(projectPath, entryPoint);\n\n if (hasDenoDeployConfig && existsSync(resolvedEntryPointPath)) {\n // For properly configured Deno Deploy projects, deploy source files directly\n // Deno Deploy should handle import resolution like local development with --sloppy-imports\n console.log(`š Deno Deploy project detected, deploying source files with entrypoint: ${entryPoint}`);\n return await deployDenoSourceFiles(projectPath, entryPoint);\n }\n\n // Fallback to legacy bundling approach for projects without proper Deno Deploy config\n console.log(`š¦ No Deno Deploy configuration found, using legacy bundling approach`);\n\n // Step 1: Check for dist directory first (user's build)\n const distDir = join(projectPath, 'dist');\n const entryPointFilename = entryPoint.split('/').pop() || 'main.ts';\n const distEntryPointPath = join(distDir, entryPointFilename);\n\n let finalEntryPoint = entryPoint;\n let entryPointPath = join(projectPath, entryPoint);\n\n if (existsSync(distDir) && existsSync(distEntryPointPath)) {\n // Use the built dist version\n finalEntryPoint = `dist/${entryPointFilename}`;\n entryPointPath = distEntryPointPath;\n console.log(`š¦ Using built dist entrypoint: ${finalEntryPoint}`);\n } else {\n // Use source entrypoint\n if (!existsSync(entryPointPath)) {\n throw new Error(`Entry point file not found: ${entryPoint}`);\n }\n console.log(`š¦ Using source entrypoint: ${entryPoint}`);\n }\n\n // Step 2: Smart bundling with build script execution\n const bundleResult = await createDeploymentBundleSmart(projectPath, finalEntryPoint);\n\n if (!bundleResult.success) {\n throw new Error(`Failed to create deployment bundle: ${bundleResult.errors.join(', ')}`);\n }\n\n // Step 3: Create the files object from bundle result\n const files: Record<string, { content: string; encoding: 'utf-8' | 'base64' }> = {};\n\n // Add the bundled files\n Object.assign(files, bundleResult.files);\n\n // Update finalEntryPoint based on bundle result\n finalEntryPoint = 'main.ts'; // Bundle result always uses main.ts as the entry point\n\n // Add deno.json if it exists\n const denoJsonFilePath = join(projectPath, 'deno.json');\n if (existsSync(denoJsonFilePath)) {\n const denoJsonContent = readFileSync(denoJsonFilePath, 'utf-8');\n const denoJson = JSON.parse(denoJsonContent);\n if (denoJson.deploy?.entrypoint) {\n denoJson.deploy.entrypoint = finalEntryPoint;\n }\n if (denoJson.main) {\n denoJson.main = finalEntryPoint;\n }\n files['deno.json'] = {\n content: JSON.stringify(denoJson, null, 2),\n encoding: 'utf-8'\n };\n }\n\n console.log(`š CLI Result: entrypoint=\"${finalEntryPoint}\", files=${Object.keys(files).length}`);\n console.log(`š Included files: ${Object.keys(files).sort().join(', ')}`);\n\n return { entryPoint: finalEntryPoint, files };\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\n\nexport interface CliConfig {\n version: string;\n endpoints: {\n core: string;\n deploy: string;\n };\n auth: {\n token?: string;\n refreshToken?: string;\n expiresAt?: string;\n };\n preferences: {\n json: boolean;\n verbose: boolean;\n };\n}\n\nconst CONFIG_DIR = join(homedir(), '.apexmcp');\nconst CONFIG_FILE = join(CONFIG_DIR, 'config.json');\n\nconst DEFAULT_CONFIG: CliConfig = {\n version: '0.1.0',\n endpoints: {\n core: 'https://core.apexmcp.dev',\n deploy: 'https://deploy.apexmcp.dev',\n },\n auth: {},\n preferences: {\n json: false,\n verbose: false,\n },\n};\n\nexport class ConfigManager {\n private config: CliConfig;\n\n constructor() {\n this.config = this.loadConfig();\n }\n\n private loadConfig(): CliConfig {\n try {\n if (existsSync(CONFIG_FILE)) {\n const data = readFileSync(CONFIG_FILE, 'utf-8');\n const parsed = JSON.parse(data);\n // Merge with defaults to handle new fields\n return { ...DEFAULT_CONFIG, ...parsed };\n }\n } catch (error) {\n console.warn('Failed to load config file, using defaults:', error);\n }\n return { ...DEFAULT_CONFIG };\n }\n\n private saveConfig(): void {\n try {\n mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(CONFIG_FILE, JSON.stringify(this.config, null, 2));\n } catch (error) {\n console.error('Failed to save config:', error);\n throw new Error('Could not save configuration');\n }\n }\n\n getConfig(): CliConfig {\n return { ...this.config };\n }\n\n updateConfig(updates: Partial<CliConfig>): void {\n this.config = { ...this.config, ...updates };\n this.saveConfig();\n }\n\n setEndpoint(service: 'core' | 'deploy', url: string): void {\n this.config.endpoints[service] = url;\n this.saveConfig();\n }\n\n setAuth(token?: string, refreshToken?: string, expiresAt?: string): void {\n this.config.auth = { token, refreshToken, expiresAt };\n this.saveConfig();\n }\n\n getToken(): string | undefined {\n return this.config.auth.token;\n }\n\n clearAuth(): void {\n this.config.auth = {};\n this.saveConfig();\n }\n\n setPreference(key: keyof CliConfig['preferences'], value: boolean): void {\n this.config.preferences[key] = value;\n this.saveConfig();\n }\n\n getPreference(key: keyof CliConfig['preferences']): boolean {\n return this.config.preferences[key];\n }\n\n isAuthenticated(): boolean {\n const token = this.getToken();\n if (!token) return false;\n\n // Check if token is expired\n if (this.config.auth.expiresAt) {\n const expiresAt = new Date(this.config.auth.expiresAt);\n if (expiresAt < new Date()) {\n this.clearAuth();\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport const configManager = new ConfigManager();\n","import { configManager } from '../utils/config';\nimport { createInterface } from 'readline';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\n/**\n * Get user confirmation via stdin\n */\nasync function getUserConfirmation(message: string): Promise<boolean> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n const normalizedAnswer = answer.toLowerCase().trim();\n resolve(normalizedAnswer === 'y' || normalizedAnswer === 'yes');\n });\n });\n}\n\nexport interface DeploymentsOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n force?: boolean;\n}\n\nexport interface UpdateDeploymentOptions extends DeploymentsOptions {\n name?: string;\n domain?: string;\n envFile?: string;\n}\n\nexport interface DeploymentSummary {\n id: string;\n name: string;\n domain: string;\n status: string;\n tier: string;\n url: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ListDeploymentsResponse {\n deployments: DeploymentSummary[];\n total: number;\n}\n\nexport interface DeploymentDetails {\n deployment: {\n id: string;\n name?: string;\n domain?: string;\n status: string;\n tier?: string;\n url?: string;\n createdAt: string;\n updatedAt: string;\n entryPoint?: string;\n envVars?: Record<string, string>;\n projectPath?: string;\n subdomain?: string;\n deploymentUrl?: string;\n logs?: string[];\n buildStatus?: string;\n runtimeStatus?: string;\n errorMessage?: string;\n };\n}\n\n/**\n * List all deployments for the authenticated user/org\n */\nexport async function listDeploymentsCommand(\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching deployments...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list deployments: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result: ListDeploymentsResponse = await response.json() as ListDeploymentsResponse;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.deployments.length === 0) {\n log.info('š No deployments found.');\n return;\n }\n\n log.info(`š Found ${result.deployments.length} deployment(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā Deployment Name ā Domain ā Status ā Tier ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const deployment of result.deployments) {\n if(!deployment.name || !deployment.status || !deployment.tier) {\n throw new Error(`Invalid deployment data, ${JSON.stringify(deployment)}`);\n }\n const name = String(deployment.name).padEnd(36);\n const domain = String(deployment.domain || 'N/A').substring(0, 18).padEnd(18);\n const status = String(deployment.status).substring(0, 7).padEnd(7);\n const tier = String(deployment.tier).substring(0, 7).padEnd(7);\n\n log.info(`ā ${name} ā ${domain} ā ${status} ā ${tier} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const deployment of result.deployments) {\n log.info(`š ${deployment.name}:`);\n log.info(` š URL: ${deployment.url}`);\n log.info(` š·ļø Domain: ${deployment.domain}`);\n log.info(` š
Created: ${new Date(deployment.createdAt).toLocaleString()}`);\n if (deployment.status !== 'active') {\n log.info(` ā ļø Status: ${deployment.status}`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list deployments:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Get details for a specific deployment\n */\nexport async function getDeploymentCommand(\n deploymentId: string,\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching deployment details for: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result: DeploymentDetails = await response.json() as DeploymentDetails;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n const deployment = result.deployment;\n\n log.info('š Deployment Details:');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Property ā Value ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Format each property\n const formatRow = (label: string, value: string | undefined) => {\n const displayValue = value || 'N/A';\n const truncatedValue = displayValue.length > 36 ? displayValue.substring(0, 33) + '...' : displayValue;\n log.info(`ā ${label.padEnd(36)} ā ${truncatedValue.padEnd(36)} ā`);\n };\n\n formatRow('ID', deployment.id ? String(deployment.id) : undefined);\n formatRow('Name', deployment.name ? String(deployment.name) : undefined);\n formatRow('Domain', deployment.domain ? String(deployment.domain) : undefined);\n formatRow('Status', deployment.status ? String(deployment.status) : undefined);\n formatRow('Tier', deployment.tier ? String(deployment.tier) : undefined);\n formatRow('URL', deployment.url ? String(deployment.url) : undefined);\n formatRow('Subdomain', deployment.subdomain ? String(deployment.subdomain) : undefined);\n formatRow('Deployment URL', deployment.deploymentUrl ? String(deployment.deploymentUrl) : undefined);\n formatRow('Entry Point', deployment.entryPoint ? String(deployment.entryPoint) : undefined);\n formatRow('Project Path', deployment.projectPath ? String(deployment.projectPath) : undefined);\n formatRow('Build Status', deployment.buildStatus ? String(deployment.buildStatus) : undefined);\n formatRow('Runtime Status', deployment.runtimeStatus ? String(deployment.runtimeStatus) : undefined);\n formatRow('Created', deployment.createdAt ? new Date(deployment.createdAt).toLocaleString() : undefined);\n formatRow('Updated', deployment.updatedAt ? new Date(deployment.updatedAt).toLocaleString() : undefined);\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n\n // Environment variables section\n if (deployment.envVars && Object.keys(deployment.envVars).length > 0) {\n log.info('\\nš§ Environment Variables:');\n for (const [key, value] of Object.entries(deployment.envVars)) {\n const stringValue = String(value);\n const maskedValue = stringValue.length > 20 ? `${stringValue.substring(0, 10)}...` : stringValue;\n log.info(` ${key}=${maskedValue}`);\n }\n }\n\n // Error message if present\n if (deployment.errorMessage) {\n log.info('\\nā Error:');\n log.info(` ${deployment.errorMessage}`);\n }\n\n // Logs section (if available)\n if (deployment.logs && deployment.logs.length > 0) {\n log.info('\\nš Recent Logs:');\n const recentLogs = deployment.logs.slice(-5); // Show last 5 log entries\n for (const logEntry of recentLogs) {\n log.info(` ${logEntry}`);\n }\n if (deployment.logs.length > 5) {\n log.info(` ... and ${deployment.logs.length - 5} more entries`);\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to get deployment details:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete a deployment\n */\nexport async function deleteDeploymentCommand(\n deploymentId: string,\n options: DeploymentsOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting deployment: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Skip confirmation if force flag is used or in CI/JSON mode\n if (!options.force && !outputJson) {\n log.info('ā ļø This action cannot be undone. All deployment data will be permanently deleted.');\n\n // Get user confirmation\n const confirmed = await getUserConfirmation(`Are you sure you want to delete deployment \"${deploymentId}\"?`);\n if (!confirmed) {\n log.info('ā Deletion cancelled.');\n return;\n }\n }\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { success: boolean };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Deployment deleted successfully!');\n } else {\n log.error('ā Failed to delete deployment');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete deployment:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Update a deployment\n */\nexport async function updateDeploymentCommand(\n deploymentId: string,\n options: UpdateDeploymentOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Updating deployment: ${deploymentId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.deploy,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n // Check if at least one update option is provided\n if (!options.name && !options.domain && !options.envFile) {\n throw new Error(\n 'At least one update option must be provided (--name, --domain, or --env-file)'\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n // Prepare update payload\n const updatePayload: Record<string, any> = {};\n\n if (options.name) {\n updatePayload.name = options.name;\n }\n\n if (options.domain) {\n updatePayload.domain = options.domain;\n }\n\n // Handle environment file if provided\n if (options.envFile) {\n const { loadEnvFile } = await import('../utils/load-env-file');\n try {\n const envVars = await loadEnvFile(options.envFile);\n updatePayload.envVars = envVars;\n log.info(`š Loaded ${Object.keys(envVars).length} environment variables from: ${options.envFile}`);\n } catch (error) {\n throw new Error(`Failed to load environment file: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/api/deployments/${deploymentId}`, {\n method: 'PATCH',\n headers,\n body: JSON.stringify(updatePayload),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to update deployment: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { success: boolean; deployment?: { id: string; name: string; url: string; status: string } };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n log.info('ā
Deployment updated successfully!');\n\n if (options.name) {\n log.info(`š Name updated to: ${options.name}`);\n }\n\n if (options.domain) {\n log.info(`š Domain updated to: ${options.domain}`);\n }\n\n if (options.envFile) {\n log.info(`š§ Environment variables updated`);\n }\n \n // Show updated deployment info if available\n if (result.deployment) {\n log.info('\\nš Updated deployment details:');\n log.info(` ID: ${result.deployment.id}`);\n log.info(` Name: ${result.deployment.name || 'N/A'}`);\n log.info(` URL: ${result.deployment.url || 'N/A'}`);\n log.info(` Status: ${result.deployment.status || 'unknown'}`);\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to update deployment:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { validateMCPProject } from '../utils/validate-mcp-project';\nimport { configManager } from '../utils/config';\nimport { createLogger, isJsonMode, withStdoutSuppressed } from '../utils/cli-io';\n\nexport interface ValidateOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n errors: string[];\n warnings: string[];\n}\n\nexport interface ValidateResponse {\n validation: ValidationResult;\n}\n\n/**\n * Validate an MCP project locally and optionally against the API\n */\nexport async function validateCommand(\n projectPath: string,\n options: ValidateOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Validating MCP project...');\n log.info(`š Project path: ${projectPath}`);\n\n // First, validate project path exists\n const resolvedPath = resolve(projectPath);\n if (!existsSync(resolvedPath)) {\n throw new Error(`Project path does not exist: ${resolvedPath}`);\n }\n\n // Local validation\n log.info('š Performing local validation...');\n const projectData = await withStdoutSuppressed(outputJson, () =>\n validateMCPProject(resolvedPath)\n );\n log.info(`ā
Entry point: ${projectData.entryPoint}`);\n log.info(`š Found ${Object.keys(projectData.files).length} file(s)`);\n\n // Basic local checks\n const localValidation: ValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n };\n\n // Check if deno.json exists and has required fields\n const denoJsonContent =\n projectData.files['deno.json']?.content ||\n projectData.files['deno.jsonc']?.content;\n if (!denoJsonContent) {\n localValidation.errors.push('deno.json or deno.jsonc file not found');\n localValidation.isValid = false;\n } else {\n try {\n const denoJson = JSON.parse(denoJsonContent);\n const hasEntryPoint = denoJson.main || denoJson.entryPoint || (denoJson.deploy && denoJson.deploy.entrypoint);\n if (!hasEntryPoint) {\n localValidation.errors.push('deno.json must have a \"main\", \"entryPoint\", or \"deploy.entrypoint\" field');\n localValidation.isValid = false;\n }\n } catch (error) {\n localValidation.errors.push('deno.json is not valid JSON');\n localValidation.isValid = false;\n }\n }\n\n // API validation (optional, if endpoint is provided)\n let apiValidation: ValidationResult | null = null;\n const config = configManager.getConfig();\n const effectiveEndpoint = options.endpoint || config.endpoints.deploy;\n\n if (effectiveEndpoint) {\n log.info('š Performing API validation...');\n\n // Get effective token\n const effectiveToken = options.token || config.auth.token;\n\n // Prepare form data for API validation\n const formData = new FormData();\n for (const [filename, fileData] of Object.entries(projectData.files)) {\n const mimeType = fileData.encoding === 'base64' ? 'application/octet-stream' : 'text/plain';\n formData.append(\n 'files',\n new Blob([fileData.content], { type: mimeType }),\n filename\n );\n }\n\n const headers: Record<string, string> = {};\n if (effectiveToken) {\n headers['Authorization'] = `Bearer ${effectiveToken}`;\n }\n\n try {\n const response = await fetch(`${effectiveEndpoint}/api/validate`, {\n method: 'POST',\n body: formData,\n headers,\n });\n\n if (response.ok) {\n const result = (await response.json()) as ValidateResponse;\n apiValidation = result.validation;\n log.info('ā
API validation completed');\n } else {\n log.warn('ā ļø API validation failed, but local validation succeeded');\n }\n } catch (error) {\n log.warn('ā ļø API validation unavailable, but local validation succeeded');\n }\n }\n\n // Combine results\n const combinedValidation: ValidationResult = {\n isValid: localValidation.isValid && (apiValidation?.isValid ?? true),\n errors: [...localValidation.errors, ...(apiValidation?.errors || [])],\n warnings: [...localValidation.warnings, ...(apiValidation?.warnings || [])],\n };\n\n // Output results\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({\n local: localValidation,\n api: apiValidation,\n combined: combinedValidation,\n }, null, 2));\n } else {\n if (combinedValidation.isValid) {\n log.info('ā
Project validation successful!');\n\n if (combinedValidation.warnings.length > 0) {\n log.warn('ā ļø Warnings:');\n combinedValidation.warnings.forEach(warning => {\n log.warn(` - ${warning}`);\n });\n }\n } else {\n log.error('ā Project validation failed:');\n combinedValidation.errors.forEach(error => {\n log.error(` - ${error}`);\n });\n\n if (combinedValidation.warnings.length > 0) {\n log.warn('ā ļø Warnings:');\n combinedValidation.warnings.forEach(warning => {\n log.warn(` - ${warning}`);\n });\n }\n\n process.exit(1);\n }\n }\n } catch (error) {\n log.error(\n 'ā Validation failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface AuthOptions {\n endpoint?: string;\n json?: boolean;\n}\n\ninterface WhoamiResult {\n authenticated: boolean;\n endpoints: {\n core: string;\n deploy: string;\n };\n preferences: {\n json: boolean;\n verbose: boolean;\n };\n orgStatus?: any;\n}\n\nexport interface LoginOptions extends AuthOptions {\n token?: string;\n email?: string;\n password?: string;\n}\n\n/**\n * Login command - authenticate with ApexMCP\n */\nexport async function loginCommand(options: LoginOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n if (options.token) {\n // Direct token login\n configManager.setAuth(options.token);\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, authenticated: true }));\n } else {\n log.info('š Authenticating with provided token...');\n log.info('ā
Authentication successful!');\n }\n\n if (!outputJson) {\n // Test the token by making a simple authenticated request\n await testAuth(options.endpoint || configManager.getConfig().endpoints.core);\n }\n\n return;\n }\n\n if (options.email && options.password) {\n // Email/password login via Supabase\n log.info('š Authenticating with email and password...');\n\n const endpoint = options.endpoint || configManager.getConfig().endpoints.core;\n const response = await fetch(`${endpoint}/auth/login`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email: options.email,\n password: options.password,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json() as { error?: string };\n throw new Error(errorData.error || 'Authentication failed');\n }\n\n const result = await response.json() as {\n access_token?: string;\n refresh_token?: string;\n expires_at?: string;\n };\n\n if (result.access_token) {\n configManager.setAuth(\n result.access_token,\n result.refresh_token,\n result.expires_at\n );\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, authenticated: true }));\n } else {\n log.info('ā
Authentication successful!');\n }\n } else {\n throw new Error('Invalid authentication response');\n }\n\n return;\n }\n\n // Interactive login prompt\n log.info('š Please provide authentication credentials:');\n log.info(' Use --token for direct token authentication');\n log.info(' Use --email and --password for email/password authentication');\n log.info('');\n log.info('Example:');\n log.info(' apexmcp login --token your-jwt-token');\n log.info(' apexmcp login --email user@example.com --password yourpassword');\n\n process.exit(1);\n } catch (error) {\n log.error(\n 'ā Authentication failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Logout command - clear authentication\n */\nexport async function logoutCommand(options: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n configManager.clearAuth();\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, message: 'Logged out successfully' }));\n return;\n }\n\n log.info('šŖ Logging out...');\n log.info('ā
Successfully logged out!');\n } catch (error) {\n log.error(\n 'ā Logout failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - show current authentication status\n */\nexport async function whoamiCommand(options: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n const config = configManager.getConfig();\n const isAuthenticated = configManager.isAuthenticated();\n\n const result: WhoamiResult = {\n authenticated: isAuthenticated,\n endpoints: config.endpoints,\n preferences: config.preferences,\n };\n\n if (isAuthenticated) {\n // Try to get user info from the core service\n try {\n const endpoint = options.endpoint || config.endpoints.core;\n const token = config.auth.token;\n\n const response = await fetch(`${endpoint}/auth/org-status`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (response.ok) {\n const orgStatus = await response.json();\n result.orgStatus = orgStatus;\n }\n } catch (error) {\n // Ignore errors when fetching org status\n }\n }\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n log.info('š¤ Authentication Status:');\n log.info(` Authenticated: ${isAuthenticated ? 'ā
Yes' : 'ā No'}`);\n\n if (isAuthenticated) {\n log.info(' Token: [REDACTED]');\n if (config.auth.expiresAt) {\n const expiresAt = new Date(config.auth.expiresAt);\n log.info(` Expires: ${expiresAt.toLocaleString()}`);\n }\n }\n\n log.info('');\n log.info('š Endpoints:');\n log.info(` Core API: ${config.endpoints.core}`);\n log.info(` Deploy API: ${config.endpoints.deploy}`);\n\n log.info('');\n log.info('āļø Preferences:');\n log.info(` JSON Output: ${config.preferences.json}`);\n log.info(` Verbose: ${config.preferences.verbose}`);\n }\n } catch (error) {\n log.error(\n 'ā Failed to get authentication status:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Configure command - manage CLI configuration\n */\nexport async function configCommand(action: string, key?: string, value?: string, options?: AuthOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n const config = configManager.getConfig();\n\n if (action === 'get') {\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(config, null, 2));\n } else {\n log.info('š§ Current Configuration:');\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(config, null, 2));\n }\n return;\n }\n\n if (action === 'set') {\n if (!key || value === undefined) {\n throw new Error('Key and value are required for set action');\n }\n\n // Handle nested keys with dot notation\n const keys = key.split('.');\n let current: any = config;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const currentKey = keys[i];\n if (!currentKey) {\n throw new Error('Invalid key format');\n }\n if (!current[currentKey]) {\n current[currentKey] = {};\n }\n current = current[currentKey];\n }\n\n const finalKey = keys[keys.length - 1];\n if (!finalKey) {\n throw new Error('Invalid key format');\n }\n\n // Parse value types\n let parsedValue: any = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (!isNaN(Number(value))) parsedValue = Number(value);\n\n current[finalKey] = parsedValue;\n configManager.updateConfig(config);\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, key, value: parsedValue }, null, 2));\n } else {\n log.info(`ā
Set ${key} = ${parsedValue}`);\n }\n return;\n }\n\n if (action === 'reset') {\n configManager.updateConfig({\n version: '0.1.0',\n endpoints: {\n core: 'https://core.apexmcp.dev',\n deploy: 'https://deploy.apexmcp.dev',\n },\n auth: {},\n preferences: {\n json: false,\n verbose: false,\n },\n });\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ success: true, message: 'Configuration reset to defaults' }, null, 2));\n } else {\n log.info('ā
Configuration reset to defaults');\n }\n return;\n }\n\n throw new Error('Invalid action. Use: get, set <key> <value>, or reset');\n } catch (error) {\n log.error(\n 'ā Configuration command failed:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Test authentication by making a simple authenticated request\n */\nasync function testAuth(endpoint: string): Promise<void> {\n const log = createLogger({ json: false });\n try {\n const token = configManager.getToken();\n if (!token) {\n throw new Error('No authentication token available');\n }\n\n const response = await fetch(`${endpoint}/health`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Authentication test failed: ${response.status}`);\n }\n\n log.info('ā
Token validation successful');\n } catch (error) {\n log.warn('ā ļø Token validation failed, but token was saved');\n log.warn(' You may need to re-authenticate');\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface McpServerOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface McpServer {\n id: string;\n catalog_id: string;\n deployment_name: string;\n http_endpoint: string;\n name: string;\n description: string;\n status: 'ready' | 'beta' | 'deprecated';\n enabled: boolean;\n secrets_requirements?: Array<{\n key: string;\n name: string;\n description: string;\n required: boolean;\n type: 'string' | 'number' | 'boolean';\n placeholder?: string;\n validation?: {\n pattern?: string;\n minLength?: number;\n maxLength?: number;\n };\n }>;\n}\n\nexport interface OrgMcpServer {\n id: string;\n catalog_id: string;\n name: string;\n enabled: boolean;\n config: {\n rate_limit?: number;\n timeout_ms?: number;\n };\n deployment_name?: string;\n http_endpoint?: string;\n description?: string;\n secrets_requirements?: Array<{\n key: string;\n name: string;\n description: string;\n required: boolean;\n type: 'string' | 'number' | 'boolean';\n placeholder?: string;\n }>;\n}\n\n/**\n * List available MCP servers from the catalog\n */\nexport async function listAvailableMcpServersCommand(options: McpServerOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching available MCP servers...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/available`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list MCP servers: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: McpServer[] };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.plugins.length === 0) {\n log.info('š No MCP servers available.');\n return;\n }\n\n log.info(`š Found ${result.plugins.length} MCP server(s) in catalog:\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā MCP Server ID ā Name ā Status ā Enabled ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const server of result.plugins) {\n const id = server.catalog_id.substring(0, 36).padEnd(36);\n const name = (server.name || 'N/A').substring(0, 18).padEnd(18);\n const status = server.status.substring(0, 7).padEnd(7);\n const enabled = server.enabled ? 'ā
Yes' : 'ā No';\n const enabledPadded = enabled.substring(0, 7).padEnd(7);\n\n log.info(`ā ${id} ā ${name} ā ${status} ā ${enabledPadded} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const server of result.plugins) {\n log.info(`š§ ${server.name} (${server.catalog_id}):`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Endpoint: ${server.http_endpoint}`);\n log.info(` š Status: ${server.status}`);\n log.info(` ā
Enabled: ${server.enabled ? 'Yes' : 'No'}`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Requires ${server.secrets_requirements.length} secret(s)`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list MCP servers:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List enabled MCP servers for the organization\n */\nexport async function listEnabledMcpServersCommand(options: McpServerOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching enabled MCP servers...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/enabled`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list enabled MCP servers: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: OrgMcpServer[] };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.plugins.length === 0) {\n log.info('š No MCP servers enabled for your organization.');\n return;\n }\n\n log.info(`š Found ${result.plugins.length} enabled MCP server(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā');\n log.info('ā MCP Server ID ā Name ā Status ā Config ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¤');\n\n // Table rows\n for (const server of result.plugins) {\n const id = server.catalog_id.substring(0, 36).padEnd(36);\n const name = (server.name || 'N/A').substring(0, 18).padEnd(18);\n const status = 'Enabled';\n const configStr = server.config.rate_limit ? `${server.config.rate_limit}/min` : 'Default';\n const configPadded = configStr.substring(0, 7).padEnd(7);\n\n log.info(`ā ${id} ā ${name} ā ${status} ā ${configPadded} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā\\n');\n\n // Additional details\n for (const server of result.plugins) {\n log.info(`š§ ${server.name} (${server.catalog_id}):`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Endpoint: ${server.http_endpoint || 'N/A'}`);\n log.info(` āļø Config: Rate limit ${server.config.rate_limit || 'unlimited'}/min, Timeout ${server.config.timeout_ms || 30000}ms`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Secrets configured: ${server.secrets_requirements.length} required`);\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list enabled MCP servers:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Enable an MCP server for the organization\n */\nexport async function enableMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Enabling MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/toggle`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n catalog_id: catalogId,\n enabled: true,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to enable MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
MCP server enabled successfully!');\n log.info('ā¹ļø You may need to configure secrets for this server to work properly.');\n log.info(` Use: apexmcp plugins secrets set ${catalogId} <secret-key> <secret-value>`);\n } else {\n log.error('ā Failed to enable MCP server');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to enable MCP server:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Disable an MCP server for the organization\n */\nexport async function disableMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Disabling MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/toggle`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n catalog_id: catalogId,\n enabled: false,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to disable MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
MCP server disabled successfully!');\n } else {\n log.error('ā Failed to disable MCP server');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to disable MCP server:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Get details about a specific MCP server\n */\nexport async function getMcpServerCommand(\n catalogId: string,\n options: McpServerOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching MCP server details: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n const headers: Record<string, string> = {};\n if (effectiveOptions.token) {\n headers['Authorization'] = `Bearer ${effectiveOptions.token}`;\n }\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/available`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get MCP server: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { plugins: McpServer[] };\n const server = result.plugins.find(p => p.catalog_id === catalogId);\n\n if (!server) {\n throw new Error(`MCP server '${catalogId}' not found in catalog`);\n }\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify({ server }, null, 2));\n } else {\n log.info(`š§ MCP Server: ${server.name}`);\n log.info(` š Description: ${server.description || 'No description'}`);\n log.info(` š Catalog ID: ${server.catalog_id}`);\n log.info(` š Endpoint: ${server.http_endpoint}`);\n log.info(` š Status: ${server.status}`);\n log.info(` ā
Enabled: ${server.enabled ? 'Yes' : 'No'}`);\n\n if (server.secrets_requirements && server.secrets_requirements.length > 0) {\n log.info(` š Secrets Requirements:`);\n for (const secret of server.secrets_requirements) {\n const required = secret.required ? '(required)' : '(optional)';\n log.info(` ⢠${secret.name} (${secret.key}) ${required}: ${secret.description}`);\n if (secret.placeholder) {\n log.info(` Placeholder: ${secret.placeholder}`);\n }\n }\n } else {\n log.info(` š Secrets Requirements: None`);\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to get MCP server details:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface PluginOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\n/**\n * List plugin secrets for a specific MCP server\n */\nexport async function listPluginSecretsCommand(\n catalogId: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Fetching secrets for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list plugin secrets: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = await response.json() as { secrets: Array<{ secret_key: string }> };\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.secrets.length === 0) {\n log.info('š No secrets configured for this MCP server.');\n return;\n }\n\n log.info(`š Found ${result.secrets.length} secret(s) configured:\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Secret Key ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Table rows\n for (const secret of result.secrets) {\n const key = secret.secret_key.substring(0, 18).padEnd(18);\n log.info(`ā ${key} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāā\\n');\n\n log.info('š” Note: Secret values are not displayed for security reasons.');\n }\n } catch (error) {\n log.error(\n 'ā Failed to list plugin secrets:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Set a plugin secret for a specific MCP server\n */\nexport async function setPluginSecretCommand(\n catalogId: string,\n secretKey: string,\n secretValue: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Setting secret '${secretKey}' for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n secret_key: secretKey,\n secret_value: secretValue,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to set plugin secret: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin secret set successfully!');\n } else {\n log.error('ā Failed to set plugin secret');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to set plugin secret:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete a plugin secret for a specific MCP server\n */\nexport async function deletePluginSecretCommand(\n catalogId: string,\n secretKey: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting secret '${secretKey}' for MCP server: ${catalogId}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}/secrets/${secretKey}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete plugin secret: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin secret deleted successfully!');\n } else {\n log.error('ā Failed to delete plugin secret');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete plugin secret:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete an entire plugin configuration (disable and remove all secrets)\n */\nexport async function deletePluginCommand(\n catalogId: string,\n options: PluginOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`šļø Deleting plugin configuration: ${catalogId}`);\n log.info('ā ļø This will disable the plugin and remove all associated secrets.');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/plugins/${catalogId}`, {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to delete plugin: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.success) {\n log.info('ā
Plugin deleted successfully!');\n } else {\n log.error('ā Failed to delete plugin');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to delete plugin:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n","import { configManager } from '../utils/config';\nimport { createLogger, isJsonMode } from '../utils/cli-io';\n\nexport interface McpOptions {\n endpoint?: string;\n token?: string;\n json?: boolean;\n}\n\nexport interface Tool {\n name: string;\n description: string;\n inputSchema: any;\n}\n\nexport interface Resource {\n uri: string;\n name: string;\n description: string;\n mimeType: string;\n}\n\nexport interface ResourceTemplate {\n uriTemplate: string;\n name: string;\n description: string;\n mimeType: string;\n}\n\n/**\n * List available tools from enabled MCP servers\n */\nexport async function listToolsCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š§ Fetching available tools...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/tools/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list tools: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.tools || result.result.tools.length === 0) {\n log.info('š§ No tools available.');\n return;\n }\n\n const tools = result.result.tools as Tool[];\n log.info(`š§ Found ${tools.length} tool(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n log.info('ā Tool Name ā Description ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤');\n\n // Table rows\n for (const tool of tools) {\n const name = tool.name.substring(0, 36).padEnd(36);\n const description = (tool.description || 'No description').substring(0, 36).padEnd(36);\n log.info(`ā ${name} ā ${description} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const tool of tools) {\n log.info(`š§ ${tool.name}:`);\n log.info(` š Description: ${tool.description || 'No description'}`);\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n log.info(` š„ Parameters:`);\n const properties = tool.inputSchema.properties;\n for (const [paramName, paramSchema] of Object.entries(properties)) {\n const param = paramSchema as any;\n const required = tool.inputSchema.required?.includes(paramName) ? '(required)' : '(optional)';\n log.info(` ⢠${paramName} ${required}: ${param.description || 'No description'}`);\n }\n }\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list tools:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Call a tool with specified parameters\n */\nexport async function callToolCommand(\n toolName: string,\n paramsJson: string,\n options: McpOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š§ Calling tool: ${toolName}`);\n\n // Parse parameters\n let params: any;\n try {\n params = JSON.parse(paramsJson);\n } catch (error) {\n throw new Error(`Invalid JSON parameters: ${paramsJson}`);\n }\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/tools/call`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/call',\n params: {\n name: toolName,\n arguments: params,\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to call tool: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.error) {\n log.error('ā Tool call failed:', result.error.message);\n if (result.error.data) {\n log.error(' Details:', JSON.stringify(result.error.data, null, 2));\n }\n } else if (result.result) {\n log.info('ā
Tool call successful!');\n if (result.result.content && Array.isArray(result.result.content)) {\n for (const content of result.result.content) {\n if (content.type === 'text') {\n log.info('š Result:', content.text);\n } else {\n log.info(`š Result (${content.type}):`, JSON.stringify(content, null, 2));\n }\n }\n } else {\n log.info('š Result:', JSON.stringify(result.result, null, 2));\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to call tool:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List available resources from enabled MCP servers\n */\nexport async function listResourcesCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching available resources...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list resources: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.resources || result.result.resources.length === 0) {\n log.info('š No resources available.');\n return;\n }\n\n const resources = result.result.resources as Resource[];\n log.info(`š Found ${resources.length} resource(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāā');\n log.info('ā Resource URI ā Name ā MIME Type ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāā¤');\n\n // Table rows\n for (const resource of resources) {\n const uri = resource.uri.substring(0, 36).padEnd(36);\n const name = (resource.name || 'Unnamed').substring(0, 36).padEnd(36);\n const mimeType = (resource.mimeType || 'unknown').substring(0, 10).padEnd(10);\n log.info(`ā ${uri} ā ${name} ā ${mimeType} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const resource of resources) {\n log.info(`š ${resource.name || 'Unnamed'}:`);\n log.info(` š URI: ${resource.uri}`);\n log.info(` š Description: ${resource.description || 'No description'}`);\n log.info(` š MIME Type: ${resource.mimeType || 'unknown'}`);\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list resources:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * Read a specific resource\n */\nexport async function readResourceCommand(\n resourceUri: string,\n options: McpOptions\n): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info(`š Reading resource: ${resourceUri}`);\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/read`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/read',\n params: {\n uri: resourceUri,\n },\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to read resource: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (result.error) {\n log.error('ā Resource read failed:', result.error.message);\n if (result.error.data) {\n log.error(' Details:', JSON.stringify(result.error.data, null, 2));\n }\n } else if (result.result && result.result.contents) {\n log.info('ā
Resource read successful!');\n for (const content of result.result.contents) {\n if (content.type === 'text') {\n log.info('š Content:', content.text);\n } else {\n log.info(`š Content (${content.type}):`, JSON.stringify(content, null, 2));\n }\n }\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to read resource:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n\n/**\n * List available resource templates\n */\nexport async function listResourceTemplatesCommand(options: McpOptions): Promise<void> {\n const outputJson = isJsonMode(options);\n const log = createLogger(options);\n try {\n log.info('š Fetching resource templates...');\n\n // Get config and merge with options\n const config = configManager.getConfig();\n const effectiveOptions = {\n ...options,\n endpoint: options.endpoint || config.endpoints.core,\n token: options.token || config.auth.token,\n };\n\n // Validate authentication\n if (!effectiveOptions.token) {\n throw new Error(\n 'Authentication required. Please login first with \"apexmcp login\" or provide --token'\n );\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${effectiveOptions.token}`,\n 'Content-Type': 'application/json',\n };\n\n const response = await fetch(`${effectiveOptions.endpoint}/resources/templates/list`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'resources/templates/list',\n params: {},\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to list resource templates: ${response.status} ${response.statusText}\\n${errorText}`\n );\n }\n\n const result = (await response.json()) as any;\n\n if (outputJson) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(result, null, 2));\n } else {\n if (!result.result || !result.result.resourceTemplates || result.result.resourceTemplates.length === 0) {\n log.info('š No resource templates available.');\n return;\n }\n\n const templates = result.result.resourceTemplates as ResourceTemplate[];\n log.info(`š Found ${templates.length} resource template(s):\\n`);\n\n // Table header\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāā');\n log.info('ā Template URI ā Name ā MIME Type ā');\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāā¤');\n\n // Table rows\n for (const template of templates) {\n const uri = template.uriTemplate.substring(0, 36).padEnd(36);\n const name = (template.name || 'Unnamed').substring(0, 36).padEnd(36);\n const mimeType = (template.mimeType || 'unknown').substring(0, 10).padEnd(10);\n log.info(`ā ${uri} ā ${name} ā ${mimeType} ā`);\n }\n\n log.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāā\\n');\n\n // Detailed information\n for (const template of templates) {\n log.info(`š ${template.name || 'Unnamed'}:`);\n log.info(` š URI Template: ${template.uriTemplate}`);\n log.info(` š Description: ${template.description || 'No description'}`);\n log.info(` š MIME Type: ${template.mimeType || 'unknown'}`);\n log.info('');\n }\n }\n } catch (error) {\n log.error(\n 'ā Failed to list resource templates:',\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["existsSync","existsSync","readFileSync","join","existsSync","logsResponse","resolve","resolve","loadEnvFile","existsSync","resolve","resolve","existsSync","require"]}
|