# Firmware Registry Integration This document describes the integration of the SPORE Registry into the SPORE UI, replacing the previous firmware upload functionality with a comprehensive CRUD interface for managing firmware in the registry. ## Overview The firmware view has been completely redesigned to provide: - **Registry Management**: Full CRUD operations for firmware in the SPORE Registry - **Search & Filter**: Search firmware by name, version, or labels - **Drawer Forms**: Add/edit forms displayed in the existing drawer component - **Real-time Status**: Registry connection status indicator - **Download Support**: Direct download of firmware binaries ## Architecture ### Components 1. **FirmwareComponent** (`FirmwareComponent.js`) - Main component for the firmware registry interface - Handles CRUD operations and UI interactions - Manages registry connection status 2. **FirmwareFormComponent** (`FirmwareFormComponent.js`) - Form component for add/edit operations - Used within the drawer component - Handles metadata and file uploads 3. **API Client Extensions** (`api-client.js`) - New registry API methods added to existing ApiClient - Auto-detection of registry server URL - Support for multipart form data uploads ### API Integration The integration uses the SPORE Registry API endpoints: - `GET /health` - Health check - `GET /firmware` - List firmware with optional filtering - `POST /firmware` - Upload firmware with metadata - `GET /firmware/{name}/{version}` - Download firmware binary ### Registry Server Configuration The registry server is expected to run on: - **Localhost**: `http://localhost:8080` - **Remote**: `http://{hostname}:8080` The UI automatically detects the appropriate URL based on the current hostname. ## Features ### Firmware Management - **Add Firmware**: Upload new firmware with metadata and labels - **Edit Firmware**: Modify existing firmware (requires new file upload) - **Download Firmware**: Direct download of firmware binaries - **Delete Firmware**: Remove firmware from registry (not yet implemented in API) ### Search & Filtering - **Text Search**: Search by firmware name, version, or label values - **Real-time Filtering**: Results update as you type - **Label Display**: Visual display of firmware labels with color coding ### User Interface - **Card Layout**: Clean card-based layout for firmware entries - **Action Buttons**: Edit, download, and delete actions for each firmware - **Status Indicators**: Registry connection status with visual feedback - **Loading States**: Proper loading indicators during operations - **Error Handling**: User-friendly error messages and notifications ### Form Interface - **Drawer Integration**: Forms open in the existing drawer component - **Metadata Fields**: Name, version, and custom labels - **File Upload**: Drag-and-drop or click-to-upload file selection - **Label Management**: Add/remove key-value label pairs - **Validation**: Client-side validation with helpful error messages ## Usage ### Adding Firmware 1. Click the "Add Firmware" button in the header 2. Fill in the firmware name and version 3. Select a firmware file (.bin or .hex) 4. Add optional labels (key-value pairs) 5. Click "Upload Firmware" ### Editing Firmware 1. Click the edit button on any firmware card 2. Modify the metadata (name and version are read-only) 3. Upload a new firmware file 4. Update labels as needed 5. Click "Update Firmware" ### Downloading Firmware 1. Click the download button on any firmware card 2. The firmware binary will be downloaded automatically ### Searching Firmware 1. Use the search box to filter firmware 2. Search by name, version, or label values 3. Results update in real-time ## Testing A test suite is provided to verify the registry integration: ```bash cd spore-ui/test node registry-integration-test.js ``` The test suite verifies: - Registry health check - List firmware functionality - Upload firmware functionality - Download firmware functionality ## Configuration ### Registry Server Ensure the SPORE Registry server is running on port 8080: ```bash cd spore-registry go run main.go ``` ### UI Configuration The UI automatically detects the registry server URL. No additional configuration is required. ## Error Handling The integration includes comprehensive error handling: - **Connection Errors**: Clear indication when registry is unavailable - **Upload Errors**: Detailed error messages for upload failures - **Validation Errors**: Client-side validation with helpful messages - **Network Errors**: Graceful handling of network timeouts and failures ## Future Enhancements Planned improvements include: - **Delete Functionality**: Complete delete operation when API supports it - **Bulk Operations**: Select multiple firmware for bulk operations - **Version History**: View and manage firmware version history - **Deployment Integration**: Deploy firmware directly to nodes from registry - **Advanced Filtering**: Filter by date, size, or other metadata ## Migration Notes The previous firmware upload functionality has been completely replaced. The new interface provides: - Better organization with the registry - Improved user experience with search and filtering - Consistent UI patterns with the rest of the application - Better error handling and user feedback All existing firmware functionality is now handled through the registry interface.