plazbot-cli
Version:
CLI para Plazbot SDK
82 lines (71 loc) • 3.42 kB
text/typescript
import { Command } from 'commander';
import { Portal } from 'plazbot';
import { getStoredCredentials } from '../../utils/credentials';
import { logger } from '../../utils/logger';
import { PortalCommandOptions } from '../../types/portal';
export const updateCommand = new Command('update')
.description('Actualiza un portal existente')
.argument('<portalId>', 'ID del portal a actualizar')
.option('-n, --name <name>', 'Nuevo nombre del portal')
.option('-t, --title <title>', 'Nuevo título del portal')
.option('-s, --subtitle <subtitle>', 'Nuevo subtítulo del portal')
.option('-l, --logo <url>', 'Nueva URL del logo')
.option('-d, --logo-dark <url>', 'Nueva URL del logo en modo oscuro')
.option('-a, --access <type>', 'Tipo de acceso (direct o form)')
.option('--disabled <value>', 'Estado de deshabilitación (true o false)')
.option('--brand-off <value>', 'Estado de marca deshabilitada (true o false)')
.option('--dev', 'Usar ambiente de desarrollo', false)
.action(async (portalId: string, options: PortalCommandOptions) => {
try {
// Obtener credenciales guardadas
const credentials = await getStoredCredentials();
const portal = new Portal({
workspaceId: credentials.workspace,
apiKey: credentials.apiKey,
zone: credentials.zone,
...(options.dev && { customUrl: "http://localhost:5090" })
});
// Obtener detalles actuales del portal
const currentPortal = await portal.getPortal(portalId);
logger.info('\n🌐 Actualizando portal...');
logger.info('Portal actual:');
logger.info(JSON.stringify(currentPortal.portal, null, 2));
// Construir objeto de actualización solo con los campos proporcionados
const updateData: any = { id: portalId };
if (options.name) updateData.name = options.name;
if (options.title) updateData.title = options.title;
if (options.subtitle) updateData.subtitle = options.subtitle;
if (options.logo) updateData.logo = options.logo;
if (options.logoDark) updateData.logodark = options.logoDark;
if (options.access) {
if (options.access !== 'direct' && options.access !== 'form') {
throw new Error('El tipo de acceso debe ser "direct" o "form"');
}
updateData.access = options.access;
}
if (options.disabled) {
if (options.disabled !== 'true' && options.disabled !== 'false') {
throw new Error('El valor de disabled debe ser "true" o "false"');
}
updateData.disabled = options.disabled === 'true';
}
if (options.brandOff) {
if (options.brandOff !== 'true' && options.brandOff !== 'false') {
throw new Error('El valor de brand-off debe ser "true" o "false"');
}
updateData.brandOff = options.brandOff === 'true';
}
logger.info('\nCambios a aplicar:');
logger.info(JSON.stringify(updateData, null, 2));
const result = await portal.updatePortal(updateData);
logger.success('Portal actualizado exitosamente');
logger.info(`Mensaje: ${result.message}`);
if (options.dev) {
logger.warning('\nAmbiente: desarrollo');
}
} catch (error) {
const message = error instanceof Error ? error.message : 'Error desconocido al actualizar el portal';
logger.error(message);
process.exit(1);
}
});