Implements the final piece of M7-Federation - the spoke configuration UI that allows administrators to configure their local instance's federation capabilities and settings. Backend Changes: - Add UpdateInstanceDto with validation for name, capabilities, and metadata - Implement FederationService.updateInstanceConfiguration() method - Add PATCH /api/v1/federation/instance endpoint to FederationController - Add audit logging for configuration updates - Add tests for updateInstanceConfiguration (5 new tests, all passing) Frontend Changes: - Create SpokeConfigurationForm component with PDA-friendly design - Create /federation/settings page with configuration management - Add regenerate keypair functionality with confirmation dialog - Extend federation API client with updateInstanceConfiguration and regenerateInstanceKeys - Add comprehensive tests (10 tests, all passing) Design Decisions: - Admin-only access via AdminGuard - Never expose private key in API responses (security) - PDA-friendly language throughout (no demanding terms) - Clear visual hierarchy with read-only and editable fields - Truncated public key with copy button for usability - Confirmation dialog for destructive key regeneration All tests passing: - Backend: 13/13 federation service tests passing - Frontend: 10/10 SpokeConfigurationForm tests passing - TypeScript compilation: passing - Linting: passing - PDA-friendliness: verified This completes M7-Federation. All federation features are now implemented. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
47 lines
868 B
TypeScript
47 lines
868 B
TypeScript
/**
|
|
* Instance Configuration DTOs
|
|
*
|
|
* Data Transfer Objects for instance configuration API.
|
|
*/
|
|
|
|
import { IsString, IsBoolean, IsOptional, IsObject, ValidateNested } from "class-validator";
|
|
import { Type } from "class-transformer";
|
|
|
|
/**
|
|
* DTO for federation capabilities
|
|
*/
|
|
export class FederationCapabilitiesDto {
|
|
@IsBoolean()
|
|
supportsQuery!: boolean;
|
|
|
|
@IsBoolean()
|
|
supportsCommand!: boolean;
|
|
|
|
@IsBoolean()
|
|
supportsEvent!: boolean;
|
|
|
|
@IsBoolean()
|
|
supportsAgentSpawn!: boolean;
|
|
|
|
@IsString()
|
|
protocolVersion!: string;
|
|
}
|
|
|
|
/**
|
|
* DTO for updating instance configuration
|
|
*/
|
|
export class UpdateInstanceDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
name?: string;
|
|
|
|
@IsOptional()
|
|
@ValidateNested()
|
|
@Type(() => FederationCapabilitiesDto)
|
|
capabilities?: FederationCapabilitiesDto;
|
|
|
|
@IsOptional()
|
|
@IsObject()
|
|
metadata?: Record<string, unknown>;
|
|
}
|