syntax = "proto3"; package zephyrfs.node; option go_package = "github.com/ZephyrFS/zephyrfs-proto/gen/go/node"; // Core message types for P2P communication service NodeService { // Health check for node status rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse); // Peer discovery and connection management rpc RegisterPeer(RegisterPeerRequest) returns (RegisterPeerResponse); rpc GetPeers(GetPeersRequest) returns (GetPeersResponse); // Chunk storage operations rpc StoreChunk(StoreChunkRequest) returns (StoreChunkResponse); rpc RetrieveChunk(RetrieveChunkRequest) returns (RetrieveChunkResponse); rpc DeleteChunk(DeleteChunkRequest) returns (DeleteChunkResponse); // File metadata operations rpc StoreMetadata(StoreMetadataRequest) returns (StoreMetadataResponse); rpc RetrieveMetadata(RetrieveMetadataRequest) returns (RetrieveMetadataResponse); } // Health check messages message HealthCheckRequest {} message HealthCheckResponse { string status = 1; int64 timestamp = 2; NodeInfo node_info = 3; } // Peer management messages message RegisterPeerRequest { PeerInfo peer = 1; } message RegisterPeerResponse { bool success = 1; string message = 2; } message GetPeersRequest { int32 limit = 1; } message GetPeersResponse { repeated PeerInfo peers = 1; } // Chunk storage messages message StoreChunkRequest { string chunk_id = 1; bytes data = 2; string hash = 3; int64 size = 4; map metadata = 5; } message StoreChunkResponse { bool success = 1; string message = 2; string stored_hash = 3; } message RetrieveChunkRequest { string chunk_id = 1; string expected_hash = 2; } message RetrieveChunkResponse { bool success = 1; string message = 2; bytes data = 3; string hash = 4; int64 size = 5; } message DeleteChunkRequest { string chunk_id = 1; string reason = 2; } message DeleteChunkResponse { bool success = 1; string message = 2; } // Metadata messages message StoreMetadataRequest { string file_id = 1; FileMetadata metadata = 2; } message StoreMetadataResponse { bool success = 1; string message = 2; } message RetrieveMetadataRequest { string file_id = 1; } message RetrieveMetadataResponse { bool success = 1; string message = 2; FileMetadata metadata = 3; } // Data structures message NodeInfo { string node_id = 1; string version = 2; repeated string addresses = 3; int64 storage_available = 4; int64 storage_used = 5; int64 uptime_seconds = 6; string status = 7; } message PeerInfo { string peer_id = 1; repeated string addresses = 2; int64 last_seen = 3; string status = 4; double reputation_score = 5; } message FileMetadata { string file_id = 1; string name = 2; int64 size = 3; string mime_type = 4; string hash = 5; repeated ChunkInfo chunks = 6; int64 created_at = 7; int64 modified_at = 8; map user_metadata = 9; } message ChunkInfo { string chunk_id = 1; string hash = 2; int64 size = 3; int32 index = 4; repeated string stored_at_peers = 5; }