UNPKG

logggai

Version:

AI-powered CLI for transforming your development work into professional content

243 lines 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contextCommand = contextCommand; exports.switchCommand = switchCommand; exports.useCommand = useCommand; const chalk = require("chalk"); const ora_1 = require("ora"); const { isLoggedIn, getConfig, setConfig, getCurrentContext, getCurrentOrganizationId } = require('../lib/config'); const api_1 = require("../lib/api"); const auth_1 = require("../lib/auth"); async function contextCommand(options = {}) { return (0, auth_1.withAuth)(async () => { await _contextCommand(options); }); } async function _contextCommand(options = {}) { // Si aucune option, afficher le contexte actuel if (!options.list && !options.switch && !options.personal) { await showCurrentContext(); return; } // Lister les contextes disponibles if (options.list) { await listAvailableContexts(); return; } // Switch vers personal if (options.personal) { await switchToPersonal(); return; } // Switch vers une organisation if (options.switch) { await switchToOrganization(options.switch); return; } } async function showCurrentContext() { try { // Vérifier d'abord la configuration locale const currentContext = getCurrentContext() || 'personal'; const currentOrgId = getCurrentOrganizationId(); console.log(chalk.default.blue('\n📍 Current Context')); console.log('─'.repeat(30)); if (currentContext === 'personal' || !currentOrgId) { console.log(chalk.default.green('🌍 Personal Workspace')); console.log(chalk.default.gray(' Your personal content and integrations')); } else { // Si on a un contexte organisation, essayer de récupérer les détails try { const spinner = (0, ora_1.default)('Getting organization details...').start(); const contextData = await api_1.apiClient.getCurrentContext(); spinner.stop(); const orgName = contextData?.organization?.name || 'Unknown Organization'; console.log(chalk.default.cyan(`👥 ${orgName}`)); console.log(chalk.default.gray(` Organization (${currentOrgId})`)); } catch (error) { // Fallback si erreur API console.log(chalk.default.cyan(`👥 Organization`)); console.log(chalk.default.gray(` Organization (${currentOrgId}) - ${chalk.default.yellow('Details unavailable')}`)); } } console.log(chalk.default.gray('\nUse `logggai context list` to see all available contexts')); console.log(chalk.default.gray('Use `logggai context switch <org>` to change context')); } catch (error) { console.log(chalk.default.red('Failed to get current context')); console.log(chalk.default.red(error.message)); } } async function listAvailableContexts() { try { const spinner = (0, ora_1.default)('Loading available contexts...').start(); let userOrgs = null; let currentContextData = null; // Essayer de récupérer les organisations try { userOrgs = await api_1.apiClient.getUserOrganizations(); } catch (error) { console.log(chalk.default.yellow(`\n⚠️ Warning: Could not load organizations: ${error.message}`)); } // Essayer de récupérer le contexte actuel (optionnel) try { currentContextData = await api_1.apiClient.getCurrentContext(); } catch (error) { // Ce n'est pas critique, on peut continuer sans console.log(chalk.default.gray(`\n(Could not load current context details: ${error.message})`)); } spinner.stop(); const currentContext = getCurrentContext() || 'personal'; const currentOrgId = getCurrentOrganizationId(); console.log(chalk.default.blue('\n🔗 Available Contexts')); console.log('─'.repeat(40)); // Personal context - toujours disponible const isPersonalCurrent = currentContext === 'personal'; const personalIndicator = isPersonalCurrent ? chalk.default.green('● (current)') : chalk.default.gray('○'); console.log(`${personalIndicator} ${chalk.default.white('Personal Workspace')}`); console.log(chalk.default.gray(' Your personal content and integrations')); // Organizations - si on a pu les récupérer if (userOrgs && userOrgs.organizations && userOrgs.organizations.length > 0) { console.log(''); userOrgs.organizations.forEach((org) => { const isOrgCurrent = currentContext === 'organization' && currentOrgId === org.id; const orgIndicator = isOrgCurrent ? chalk.default.green('● (current)') : chalk.default.gray('○'); const roleColor = getRoleColor(org.role); // Check if organization requires checkout const requiresCheckout = org.requiresCheckout || false; const statusText = requiresCheckout ? chalk.default.yellow('(paiement requis)') : ''; console.log(`${orgIndicator} ${chalk.default.white(org.name)} ${statusText}`); console.log(chalk.default.gray(` Organization • ${roleColor(org.role)}${org.slug}`)); if (requiresCheckout) { console.log(chalk.default.gray(` ${chalk.default.yellow('→ Choose a Team plan to activate this organization')}`)); } }); } else if (userOrgs && userOrgs.organizations && userOrgs.organizations.length === 0) { console.log(chalk.default.gray('\nNo organizations found. You can create one from the web dashboard.')); } console.log(chalk.default.gray('\nSwitch contexts with:')); console.log(chalk.default.gray(' logggai context personal')); console.log(chalk.default.gray(' logggai context switch <organization>')); } catch (error) { console.log(chalk.default.red('Failed to load contexts')); console.log(chalk.default.red(error.message)); // Fallback: au moins afficher le contexte personnel console.log(chalk.default.blue('\n🔗 Available Contexts (Limited)')); console.log('─'.repeat(40)); console.log(`${chalk.default.green('● (current)')} ${chalk.default.white('Personal Workspace')}`); console.log(chalk.default.gray(' Your personal content and integrations')); console.log(chalk.default.gray('\nNote: Could not load organization contexts. Try again later.')); } } async function switchToPersonal() { try { const spinner = (0, ora_1.default)('Switching to personal context...').start(); // Mettre à jour la config locale setConfig('currentContext', 'personal'); setConfig('currentOrganizationId', undefined); // Informer le serveur du changement de contexte await api_1.apiClient.switchContext(); spinner.stop(); console.log(chalk.default.green('✓ Switched to Personal Workspace')); console.log(chalk.default.gray(' All commands will now use your personal context')); } catch (error) { console.log(chalk.default.red('Failed to switch to personal context')); console.log(chalk.default.red(error.message)); } } async function switchToOrganization(orgIdentifier) { try { const spinner = (0, ora_1.default)('Loading organizations...').start(); const userOrgs = await api_1.apiClient.getUserOrganizations(); spinner.stop(); if (!userOrgs.organizations || userOrgs.organizations.length === 0) { console.log(chalk.default.yellow('No organizations available')); console.log(chalk.default.gray('You need to be invited to an organization first')); return; } // Chercher l'organisation par nom ou slug const org = userOrgs.organizations.find((o) => o.name.toLowerCase() === orgIdentifier.toLowerCase() || o.slug.toLowerCase() === orgIdentifier.toLowerCase() || o.id === orgIdentifier); if (!org) { console.log(chalk.default.red(`Organization "${orgIdentifier}" not found`)); console.log(chalk.default.gray('\nAvailable organizations:')); userOrgs.organizations.forEach((o) => { const statusText = o.requiresCheckout ? chalk.default.yellow('(paiement requis)') : ''; console.log(chalk.default.gray(` • ${o.name} (${o.slug}) ${statusText}`)); }); return; } // Vérifier si l'organisation nécessite un checkout if (org.requiresCheckout) { console.log(chalk.default.red(`❌ Cannot switch to "${org.name}"`)); console.log(chalk.default.yellow('This organization requires a Team plan to be used.')); console.log(chalk.default.gray('Visit the dashboard to choose a plan and activate your organization:')); console.log(chalk.default.blue(` ${process.env.NEXT_PUBLIC_APP_URL || 'https://logggai.run'}/organization/choose-plan?org=${org.id}`)); console.log(chalk.default.gray('\nOnce you have a plan, you can switch to this organization.')); return; } const switchSpinner = (0, ora_1.default)(`Switching to ${org.name}...`).start(); try { // Mettre à jour la config locale setConfig('currentContext', 'organization'); setConfig('currentOrganizationId', org.id); // Informer le serveur du changement de contexte await api_1.apiClient.switchContext(org.id); switchSpinner.stop(); const roleColor = getRoleColor(org.role); console.log(chalk.default.green(`✓ Switched to ${org.name}`)); console.log(chalk.default.gray(` Role: ${roleColor(org.role)} • Slug: ${org.slug}`)); console.log(chalk.default.gray(' All commands will now use this organization context')); } catch (error) { switchSpinner.stop(); throw error; } } catch (error) { console.log(chalk.default.red(`Failed to switch to organization "${orgIdentifier}"`)); console.log(chalk.default.red(error.message)); } } function getRoleColor(role) { switch (role.toLowerCase()) { case 'owner': return chalk.default.red; case 'admin': return chalk.default.yellow; case 'editor': return chalk.default.blue; case 'member': return chalk.default.green; case 'viewer': return chalk.default.gray; default: return chalk.default.white; } } // Commandes alternatives pour UX async function switchCommand(orgIdentifier) { if (!orgIdentifier) { await contextCommand({ list: true }); return; } if (orgIdentifier.toLowerCase() === 'personal') { await contextCommand({ personal: true }); } else { await contextCommand({ switch: orgIdentifier }); } } async function useCommand(contextIdentifier) { // Alias pour switch command avec syntaxe plus courte await switchCommand(contextIdentifier); } //# sourceMappingURL=context.js.map