UNPKG

@visionfi/server-cli

Version:

Command-line interface for VisionFI Server SDK

232 lines (231 loc) 8.82 kB
/** * Package management commands for VisionFI CLI * Copyright (c) 2024-2025 VisionFI. All Rights Reserved. */ import { Display } from '../utils/display.js'; import { createClient } from '../utils/config.js'; /** * Create a new package */ export async function createPackage(options) { const spinner = Display.spinner('Creating package...'); try { const client = createClient(); const packageOptions = { productType: options.productType, description: options.description, externalReferenceIds: options.externalRef || [], // New individual reference fields externalReference1: options.ref1, externalReference2: options.ref2, externalReference3: options.ref3, externalReference4: options.ref4, externalReference5: options.ref5, // Semantic fields externalCategory: options.category, externalOwner: options.owner }; // Remove undefined fields Object.keys(packageOptions).forEach(key => { if (packageOptions[key] === undefined) { delete packageOptions[key]; } }); const result = await client.packages.create(packageOptions); spinner.succeed('Package created'); Display.success(`Package created with ID: ${result.packageId}`); Display.json(result); } catch (error) { spinner.fail('Failed to create package'); Display.error(error.message); process.exit(1); } } /** * List packages */ export async function listPackages(options) { const spinner = Display.spinner('Fetching packages...'); try { const client = createClient(); const listOptions = {}; // Legacy parameter if (options.externalRef) listOptions.externalReferences = options.externalRef; // New parameters if (options.tags) listOptions.tags = options.tags; if (options.ref1) listOptions.ref1 = options.ref1; if (options.ref2) listOptions.ref2 = options.ref2; if (options.ref3) listOptions.ref3 = options.ref3; if (options.ref4) listOptions.ref4 = options.ref4; if (options.ref5) listOptions.ref5 = options.ref5; if (options.category) listOptions.category = options.category; if (options.owner) listOptions.owner = options.owner; // Existing parameters if (options.productType) listOptions.productTypes = options.productType; if (options.createdAfter) listOptions.createdAfter = options.createdAfter; const result = await client.packages.list(listOptions); spinner.succeed(`Found ${result.total} packages`); if (result.packages.length === 0) { Display.info('No packages found'); return; } // Display as table const tableData = result.packages.map((pkg) => ({ ID: pkg.packageId, Description: pkg.description || '-', 'Product Type': pkg.productType, Status: pkg.status, Files: pkg.totalFiles, Created: new Date(pkg.createdAt).toLocaleDateString() })); Display.table(tableData); } catch (error) { spinner.fail('Failed to list packages'); Display.error(error.message); process.exit(1); } } /** * Get package details */ export async function getPackage(packageId) { const spinner = Display.spinner('Fetching package details...'); try { const client = createClient(); const result = await client.packages.get(packageId); spinner.succeed('Package details retrieved'); Display.header('Package Information'); Display.keyValue('Package ID', result.packageId); Display.keyValue('Description', result.description || '-'); Display.keyValue('Product Type', result.productType); Display.keyValue('Status', result.status); Display.keyValue('Total Files', result.totalFiles); Display.keyValue('Created', new Date(result.createdAt).toLocaleString()); Display.keyValue('Updated', new Date(result.updatedAt).toLocaleString()); if (result.externalReferenceIds && result.externalReferenceIds.length > 0) { Display.header('External References (Array)'); Display.list(result.externalReferenceIds); } // Display individual reference fields if present const refFields = []; if (result.externalReference1) refFields.push(`Ref1: ${result.externalReference1}`); if (result.externalReference2) refFields.push(`Ref2: ${result.externalReference2}`); if (result.externalReference3) refFields.push(`Ref3: ${result.externalReference3}`); if (result.externalReference4) refFields.push(`Ref4: ${result.externalReference4}`); if (result.externalReference5) refFields.push(`Ref5: ${result.externalReference5}`); if (result.externalCategory) refFields.push(`Category: ${result.externalCategory}`); if (result.externalOwner) refFields.push(`Owner: ${result.externalOwner}`); if (refFields.length > 0) { Display.header('External Reference Fields'); Display.list(refFields); } if (result.documentList.length > 0) { Display.header('Documents'); const docs = result.documentList.map((doc) => `${doc.fileName} (${doc.fileType}) - ${doc.fileStatus}`); Display.list(docs); } if (result.availableProcessingOptions.length > 0) { Display.header('Available Processing Options'); result.availableProcessingOptions.forEach((opt) => { Display.keyValue(opt.configId, opt.description); }); } } catch (error) { spinner.fail('Failed to get package'); Display.error(error.message); process.exit(1); } } /** * Get package audit history */ export async function getPackageAudit(packageId, options) { const spinner = Display.spinner('Fetching audit history...'); try { const client = createClient(); const limit = options.limit ? parseInt(options.limit) : undefined; const result = await client.packages.getAuditHistory(packageId, limit); spinner.succeed('Audit history retrieved'); if (result.auditEntries && result.auditEntries.length > 0) { Display.table(result.auditEntries.map((entry) => ({ 'Timestamp': new Date(entry.timestamp).toLocaleString(), 'Action': entry.action, 'User': entry.userId || 'System', 'Details': entry.details || '-' }))); } else { Display.info('No audit history found'); } } catch (error) { spinner.fail('Failed to get audit history'); Display.error(error.message); process.exit(1); } } /** * Add external references to a package */ export async function addExternalReferences(packageId, options) { const spinner = Display.spinner('Adding external references...'); try { const client = createClient(); const result = await client.packages.addExternalReferences(packageId, { externalReferences: options.refs }); spinner.succeed('External references added'); Display.success(`Total external references: ${result.externalReferenceIds?.length || 0}`); if (result.externalReferenceIds) { Display.list(result.externalReferenceIds); } } catch (error) { spinner.fail('Failed to add external references'); Display.error(error.message); process.exit(1); } } /** * Remove external references from a package */ export async function removeExternalReferences(packageId, options) { const spinner = Display.spinner('Removing external references...'); try { const client = createClient(); const result = await client.packages.removeExternalReferences(packageId, { externalReferences: options.refs }); spinner.succeed('External references removed'); Display.success(`Remaining external references: ${result.externalReferenceIds?.length || 0}`); if (result.externalReferenceIds && result.externalReferenceIds.length > 0) { Display.list(result.externalReferenceIds); } } catch (error) { spinner.fail('Failed to remove external references'); Display.error(error.message); process.exit(1); } }