feat(#85): implement CONNECT/DISCONNECT protocol
Implemented connection handshake protocol for federation building on the Instance Identity Model from issue #84. **Services:** - SignatureService: Message signing/verification with RSA-SHA256 - ConnectionService: Federation connection management **API Endpoints:** - POST /api/v1/federation/connections/initiate - POST /api/v1/federation/connections/:id/accept - POST /api/v1/federation/connections/:id/reject - POST /api/v1/federation/connections/:id/disconnect - GET /api/v1/federation/connections - GET /api/v1/federation/connections/:id - POST /api/v1/federation/incoming/connect **Tests:** 70 tests pass (18 Signature + 20 Connection + 13 Controller + 19 existing) **Coverage:** 100% on new code **TDD Approach:** Tests written before implementation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
64
apps/api/src/federation/dto/connection.dto.ts
Normal file
64
apps/api/src/federation/dto/connection.dto.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* Connection DTOs
|
||||
*
|
||||
* Data Transfer Objects for federation connection API.
|
||||
*/
|
||||
|
||||
import { IsString, IsUrl, IsOptional, IsObject } from "class-validator";
|
||||
|
||||
/**
|
||||
* DTO for initiating a connection
|
||||
*/
|
||||
export class InitiateConnectionDto {
|
||||
@IsUrl()
|
||||
remoteUrl!: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* DTO for accepting a connection
|
||||
*/
|
||||
export class AcceptConnectionDto {
|
||||
@IsOptional()
|
||||
@IsObject()
|
||||
metadata?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
/**
|
||||
* DTO for rejecting a connection
|
||||
*/
|
||||
export class RejectConnectionDto {
|
||||
@IsString()
|
||||
reason!: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* DTO for disconnecting a connection
|
||||
*/
|
||||
export class DisconnectConnectionDto {
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* DTO for incoming connection request (from remote instance)
|
||||
*/
|
||||
export class IncomingConnectionRequestDto {
|
||||
@IsString()
|
||||
instanceId!: string;
|
||||
|
||||
@IsUrl()
|
||||
instanceUrl!: string;
|
||||
|
||||
@IsString()
|
||||
publicKey!: string;
|
||||
|
||||
@IsObject()
|
||||
capabilities!: Record<string, unknown>;
|
||||
|
||||
@IsString()
|
||||
timestamp!: number;
|
||||
|
||||
@IsString()
|
||||
signature!: string;
|
||||
}
|
||||
Reference in New Issue
Block a user