UNPKG

decocms

Version:

CLI for managing deco.chat apps & projects

90 lines • 3.98 kB
import inquirer from "inquirer"; import { getConfig, readWranglerConfig, writeConfigFile, } from "../../lib/config.js"; import { promptIntegrations } from "../../lib/prompt-integrations.js"; import { readSession } from "../../lib/session.js"; import process from "node:process"; export async function addCommand({ workspace, local }) { try { // Check if user has a session const session = await readSession(); if (!session) { console.error("āŒ No session found. Please run 'deco login' first."); return; } // Get current config const config = await getConfig({ inlineOptions: { workspace, local }, }).catch(() => ({ workspace: workspace || session.workspace || "default", bindings: [], local: local || false, enable_workflows: true, })); console.log(`šŸ“ Using workspace: ${config.workspace}`); console.log("šŸ” Fetching available integrations..."); // Prompt user to select integrations const selectedBindings = await promptIntegrations(config.local, config.workspace); if (selectedBindings.length === 0) { console.log("ā„¹ļø No integrations selected. Nothing to add."); return; } console.log(`āœ… Selected ${selectedBindings.length} integration(s)`); // Prompt for binding names for each integration const newBindings = []; for (const binding of selectedBindings) { // Cast to the proper type since promptIntegrations always returns with integration_id const integrationBinding = binding; const { bindingName } = await inquirer.prompt([ { type: "input", name: "bindingName", message: `Enter binding name for integration "${integrationBinding.integration_id}":`, default: integrationBinding.name, validate: (value) => { if (!value.trim()) { return "Binding name cannot be empty"; } if (!/^[A-Z_][A-Z0-9_]*$/.test(value)) { return "Binding name must be uppercase with underscores (e.g., MY_INTEGRATION)"; } return true; }, }, ]); newBindings.push({ name: bindingName, type: "mcp", integration_id: integrationBinding.integration_id, }); } // Read current wrangler config and get existing bindings const currentWranglerConfig = await readWranglerConfig(); const currentBindings = (currentWranglerConfig.deco?.bindings || []); // Simply concat arrays (no deduplication) const allBindings = [...currentBindings, ...newBindings]; // Update config with new bindings const updatedConfig = { ...config, bindings: allBindings, }; // Write updated config await writeConfigFile(updatedConfig); console.log(`āœ… Added ${newBindings.length} integration(s) successfully!`); newBindings.forEach((binding) => { const id = "integration_id" in binding ? binding.integration_id : "integration_name" in binding ? binding.integration_name : "unknown"; console.log(` - ${binding.name} (${id})`); }); console.log("\nšŸ’” Run 'deco gen' to update your environment types."); console.log("šŸŽ‰ Your integrations are ready to use!"); } catch (error) { console.error("āŒ Failed to add integrations:", error instanceof Error ? error.message : String(error)); process.exit(1); } } //# sourceMappingURL=add.js.map